summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro Colomar <alx@kernel.org>2023-04-28 13:21:20 +0200
committerAlejandro Colomar <alx@kernel.org>2023-05-30 14:50:30 +0200
commitb35b14f7514ab94fdab66ff2681c265b99c0b72e (patch)
tree319487864d92b289eb6669c4d7deee77300104d4
parentf0067f73941ea0e512b9018a123472508a0858db (diff)
man*/: Remove all pages
This commit will start a new branch with no pages at all. It's intended to be useful for other projects that want to test their pages, so that they just need to check out this branch and copy the files into man*/. Then, all the existing targets in the Makefile would be available to be run on those pages. Since we support mdoc(7), and even pages with ':' in their file names since recently, I expect this to be universally usable. Signed-off-by: Alejandro Colomar <alx@kernel.org>
-rw-r--r--man1/getent.1382
-rw-r--r--man1/iconv.1190
-rw-r--r--man1/intro.1305
-rw-r--r--man1/ldd.1172
-rw-r--r--man1/locale.1194
-rw-r--r--man1/localedef.1407
-rw-r--r--man1/memusage.1262
-rw-r--r--man1/memusagestat.173
-rw-r--r--man1/mtrace.147
-rw-r--r--man1/pldd.1101
-rw-r--r--man1/sprof.1272
-rw-r--r--man1/time.1329
-rw-r--r--man2/_Exit.21
-rw-r--r--man2/__clone2.21
-rw-r--r--man2/_exit.2138
-rw-r--r--man2/_llseek.21
-rw-r--r--man2/_newselect.21
-rw-r--r--man2/_syscall.2171
-rw-r--r--man2/_sysctl.21
-rw-r--r--man2/accept.2347
-rw-r--r--man2/accept4.21
-rw-r--r--man2/access.2447
-rw-r--r--man2/acct.2136
-rw-r--r--man2/add_key.2298
-rw-r--r--man2/adjtimex.2594
-rw-r--r--man2/afs_syscall.21
-rw-r--r--man2/alarm.281
-rw-r--r--man2/alloc_hugepages.2135
-rw-r--r--man2/arch_prctl.2176
-rw-r--r--man2/arm_fadvise.21
-rw-r--r--man2/arm_fadvise64_64.21
-rw-r--r--man2/arm_sync_file_range.21
-rw-r--r--man2/bdflush.2103
-rw-r--r--man2/bind.2286
-rw-r--r--man2/bpf.21263
-rw-r--r--man2/break.21
-rw-r--r--man2/brk.2153
-rw-r--r--man2/cacheflush.2143
-rw-r--r--man2/capget.2260
-rw-r--r--man2/capset.21
-rw-r--r--man2/chdir.2127
-rw-r--r--man2/chmod.2347
-rw-r--r--man2/chown.2471
-rw-r--r--man2/chown32.21
-rw-r--r--man2/chroot.2166
-rw-r--r--man2/clock_adjtime.21
-rw-r--r--man2/clock_getres.2526
-rw-r--r--man2/clock_gettime.21
-rw-r--r--man2/clock_nanosleep.2253
-rw-r--r--man2/clock_settime.21
-rw-r--r--man2/clone.21944
-rw-r--r--man2/clone2.21
-rw-r--r--man2/clone3.21
-rw-r--r--man2/close.2266
-rw-r--r--man2/close_range.2273
-rw-r--r--man2/connect.2251
-rw-r--r--man2/copy_file_range.2293
-rw-r--r--man2/creat.21
-rw-r--r--man2/create_module.272
-rw-r--r--man2/delete_module.2205
-rw-r--r--man2/dup.2284
-rw-r--r--man2/dup2.21
-rw-r--r--man2/dup3.21
-rw-r--r--man2/epoll_create.2141
-rw-r--r--man2/epoll_create1.21
-rw-r--r--man2/epoll_ctl.2429
-rw-r--r--man2/epoll_pwait.21
-rw-r--r--man2/epoll_pwait2.21
-rw-r--r--man2/epoll_wait.2288
-rw-r--r--man2/eventfd.2445
-rw-r--r--man2/eventfd2.21
-rw-r--r--man2/execve.2884
-rw-r--r--man2/execveat.2220
-rw-r--r--man2/exit.21
-rw-r--r--man2/exit_group.238
-rw-r--r--man2/faccessat.21
-rw-r--r--man2/faccessat2.21
-rw-r--r--man2/fadvise64.21
-rw-r--r--man2/fadvise64_64.21
-rw-r--r--man2/fallocate.2481
-rw-r--r--man2/fanotify_init.2542
-rw-r--r--man2/fanotify_mark.2843
-rw-r--r--man2/fattach.21
-rw-r--r--man2/fchdir.21
-rw-r--r--man2/fchmod.21
-rw-r--r--man2/fchmodat.21
-rw-r--r--man2/fchown.21
-rw-r--r--man2/fchown32.21
-rw-r--r--man2/fchownat.21
-rw-r--r--man2/fcntl.22111
-rw-r--r--man2/fcntl64.21
-rw-r--r--man2/fdatasync.21
-rw-r--r--man2/fdetach.21
-rw-r--r--man2/fgetxattr.21
-rw-r--r--man2/finit_module.21
-rw-r--r--man2/flistxattr.21
-rw-r--r--man2/flock.2267
-rw-r--r--man2/fork.2348
-rw-r--r--man2/free_hugepages.21
-rw-r--r--man2/fremovexattr.21
-rw-r--r--man2/fsetxattr.21
-rw-r--r--man2/fstat.21
-rw-r--r--man2/fstat64.21
-rw-r--r--man2/fstatat.21
-rw-r--r--man2/fstatat64.21
-rw-r--r--man2/fstatfs.21
-rw-r--r--man2/fstatfs64.21
-rw-r--r--man2/fsync.2195
-rw-r--r--man2/ftruncate.21
-rw-r--r--man2/ftruncate64.21
-rw-r--r--man2/futex.21976
-rw-r--r--man2/futimesat.2128
-rw-r--r--man2/get_kernel_syms.288
-rw-r--r--man2/get_mempolicy.2252
-rw-r--r--man2/get_robust_list.2156
-rw-r--r--man2/get_thread_area.21
-rw-r--r--man2/getcpu.2152
-rw-r--r--man2/getcwd.22
-rw-r--r--man2/getdents.2319
-rw-r--r--man2/getdents64.21
-rw-r--r--man2/getdomainname.2122
-rw-r--r--man2/getegid.21
-rw-r--r--man2/getegid32.21
-rw-r--r--man2/geteuid.21
-rw-r--r--man2/geteuid32.21
-rw-r--r--man2/getgid.270
-rw-r--r--man2/getgid32.21
-rw-r--r--man2/getgroups.2219
-rw-r--r--man2/getgroups32.21
-rw-r--r--man2/gethostname.2176
-rw-r--r--man2/getitimer.2278
-rw-r--r--man2/getmsg.21
-rw-r--r--man2/getpagesize.289
-rw-r--r--man2/getpeername.2116
-rw-r--r--man2/getpgid.21
-rw-r--r--man2/getpgrp.21
-rw-r--r--man2/getpid.2150
-rw-r--r--man2/getpmsg.21
-rw-r--r--man2/getppid.21
-rw-r--r--man2/getpriority.2209
-rw-r--r--man2/getrandom.2295
-rw-r--r--man2/getresgid.21
-rw-r--r--man2/getresgid32.21
-rw-r--r--man2/getresuid.270
-rw-r--r--man2/getresuid32.21
-rw-r--r--man2/getrlimit.2856
-rw-r--r--man2/getrusage.2256
-rw-r--r--man2/getsid.275
-rw-r--r--man2/getsockname.285
-rw-r--r--man2/getsockopt.2172
-rw-r--r--man2/gettid.274
-rw-r--r--man2/gettimeofday.2285
-rw-r--r--man2/getuid.280
-rw-r--r--man2/getuid32.21
-rw-r--r--man2/getunwind.287
-rw-r--r--man2/getxattr.2144
-rw-r--r--man2/gtty.21
-rw-r--r--man2/idle.244
-rw-r--r--man2/inb.21
-rw-r--r--man2/inb_p.21
-rw-r--r--man2/init_module.2342
-rw-r--r--man2/inl.21
-rw-r--r--man2/inl_p.21
-rw-r--r--man2/inotify_add_watch.2135
-rw-r--r--man2/inotify_init.297
-rw-r--r--man2/inotify_init1.21
-rw-r--r--man2/inotify_rm_watch.260
-rw-r--r--man2/insb.21
-rw-r--r--man2/insl.21
-rw-r--r--man2/insw.21
-rw-r--r--man2/intro.2115
-rw-r--r--man2/inw.21
-rw-r--r--man2/inw_p.21
-rw-r--r--man2/io_cancel.2106
-rw-r--r--man2/io_destroy.297
-rw-r--r--man2/io_getevents.2137
-rw-r--r--man2/io_setup.2114
-rw-r--r--man2/io_submit.2289
-rw-r--r--man2/ioctl.2185
-rw-r--r--man2/ioctl_console.2903
-rw-r--r--man2/ioctl_fat.2489
-rw-r--r--man2/ioctl_ficlone.21
-rw-r--r--man2/ioctl_ficlonerange.2129
-rw-r--r--man2/ioctl_fideduperange.2200
-rw-r--r--man2/ioctl_fslabel.272
-rw-r--r--man2/ioctl_getfsmap.2351
-rw-r--r--man2/ioctl_iflags.2202
-rw-r--r--man2/ioctl_ns.2342
-rw-r--r--man2/ioctl_pipe.264
-rw-r--r--man2/ioctl_tty.2913
-rw-r--r--man2/ioctl_userfaultfd.2906
-rw-r--r--man2/ioperm.2105
-rw-r--r--man2/iopl.292
-rw-r--r--man2/ioprio_get.21
-rw-r--r--man2/ioprio_set.2362
-rw-r--r--man2/ipc.263
-rw-r--r--man2/isastream.21
-rw-r--r--man2/kcmp.2420
-rw-r--r--man2/kexec_file_load.21
-rw-r--r--man2/kexec_load.2331
-rw-r--r--man2/keyctl.22297
-rw-r--r--man2/kill.2165
-rw-r--r--man2/landlock_add_rule.2131
-rw-r--r--man2/landlock_create_ruleset.2124
-rw-r--r--man2/landlock_restrict_self.2116
-rw-r--r--man2/lchown.21
-rw-r--r--man2/lchown32.21
-rw-r--r--man2/lgetxattr.21
-rw-r--r--man2/link.2425
-rw-r--r--man2/linkat.21
-rw-r--r--man2/listen.2155
-rw-r--r--man2/listxattr.2322
-rw-r--r--man2/llistxattr.21
-rw-r--r--man2/llseek.292
-rw-r--r--man2/lock.21
-rw-r--r--man2/lookup_dcookie.286
-rw-r--r--man2/lremovexattr.21
-rw-r--r--man2/lseek.2252
-rw-r--r--man2/lsetxattr.21
-rw-r--r--man2/lstat.21
-rw-r--r--man2/lstat64.21
-rw-r--r--man2/madvise.2898
-rw-r--r--man2/madvise1.21
-rw-r--r--man2/mbind.2503
-rw-r--r--man2/membarrier.2460
-rw-r--r--man2/memfd_create.2545
-rw-r--r--man2/memfd_secret.2204
-rw-r--r--man2/migrate_pages.2183
-rw-r--r--man2/mincore.2158
-rw-r--r--man2/mkdir.2250
-rw-r--r--man2/mkdirat.21
-rw-r--r--man2/mknod.2302
-rw-r--r--man2/mknodat.21
-rw-r--r--man2/mlock.2507
-rw-r--r--man2/mlock2.21
-rw-r--r--man2/mlockall.21
-rw-r--r--man2/mmap.21037
-rw-r--r--man2/mmap2.285
-rw-r--r--man2/modify_ldt.2196
-rw-r--r--man2/mount.2971
-rw-r--r--man2/mount_setattr.21055
-rw-r--r--man2/move_pages.2262
-rw-r--r--man2/mprotect.2363
-rw-r--r--man2/mpx.21
-rw-r--r--man2/mq_getsetattr.233
-rw-r--r--man2/mq_notify.22
-rw-r--r--man2/mq_open.22
-rw-r--r--man2/mq_timedreceive.22
-rw-r--r--man2/mq_timedsend.22
-rw-r--r--man2/mq_unlink.22
-rw-r--r--man2/mremap.2352
-rw-r--r--man2/msgctl.2424
-rw-r--r--man2/msgget.2217
-rw-r--r--man2/msgop.2684
-rw-r--r--man2/msgrcv.21
-rw-r--r--man2/msgsnd.21
-rw-r--r--man2/msync.2140
-rw-r--r--man2/munlock.21
-rw-r--r--man2/munlockall.21
-rw-r--r--man2/munmap.21
-rw-r--r--man2/name_to_handle_at.21
-rw-r--r--man2/nanosleep.2220
-rw-r--r--man2/newfstatat.21
-rw-r--r--man2/nfsservctl.270
-rw-r--r--man2/nice.2118
-rw-r--r--man2/oldfstat.21
-rw-r--r--man2/oldlstat.21
-rw-r--r--man2/oldolduname.21
-rw-r--r--man2/oldstat.21
-rw-r--r--man2/olduname.21
-rw-r--r--man2/open.21934
-rw-r--r--man2/open_by_handle_at.2751
-rw-r--r--man2/openat.21
-rw-r--r--man2/openat2.2582
-rw-r--r--man2/outb.284
-rw-r--r--man2/outb_p.21
-rw-r--r--man2/outl.21
-rw-r--r--man2/outl_p.21
-rw-r--r--man2/outsb.21
-rw-r--r--man2/outsl.21
-rw-r--r--man2/outsw.21
-rw-r--r--man2/outw.21
-rw-r--r--man2/outw_p.21
-rw-r--r--man2/pause.250
-rw-r--r--man2/pciconfig_iobase.21
-rw-r--r--man2/pciconfig_read.2122
-rw-r--r--man2/pciconfig_write.21
-rw-r--r--man2/perf_event_open.23989
-rw-r--r--man2/perfmonctl.2193
-rw-r--r--man2/personality.2296
-rw-r--r--man2/phys.21
-rw-r--r--man2/pidfd_getfd.2144
-rw-r--r--man2/pidfd_open.2269
-rw-r--r--man2/pidfd_send_signal.2240
-rw-r--r--man2/pipe.2304
-rw-r--r--man2/pipe2.21
-rw-r--r--man2/pivot_root.2409
-rw-r--r--man2/pkey_alloc.2115
-rw-r--r--man2/pkey_free.21
-rw-r--r--man2/pkey_mprotect.21
-rw-r--r--man2/poll.2641
-rw-r--r--man2/posix_fadvise.2227
-rw-r--r--man2/ppoll.21
-rw-r--r--man2/prctl.22529
-rw-r--r--man2/pread.2146
-rw-r--r--man2/pread64.21
-rw-r--r--man2/preadv.21
-rw-r--r--man2/preadv2.21
-rw-r--r--man2/prlimit.21
-rw-r--r--man2/prlimit64.21
-rw-r--r--man2/process_madvise.2209
-rw-r--r--man2/process_vm_readv.2314
-rw-r--r--man2/process_vm_writev.21
-rw-r--r--man2/prof.21
-rw-r--r--man2/pselect.21
-rw-r--r--man2/pselect6.21
-rw-r--r--man2/ptrace.22974
-rw-r--r--man2/putmsg.21
-rw-r--r--man2/putpmsg.21
-rw-r--r--man2/pwrite.21
-rw-r--r--man2/pwrite64.21
-rw-r--r--man2/pwritev.21
-rw-r--r--man2/pwritev2.21
-rw-r--r--man2/query_module.2194
-rw-r--r--man2/quotactl.2806
-rw-r--r--man2/read.2245
-rw-r--r--man2/readahead.290
-rw-r--r--man2/readdir.2116
-rw-r--r--man2/readlink.2331
-rw-r--r--man2/readlinkat.21
-rw-r--r--man2/readv.2427
-rw-r--r--man2/reboot.2236
-rw-r--r--man2/recv.2554
-rw-r--r--man2/recvfrom.21
-rw-r--r--man2/recvmmsg.2276
-rw-r--r--man2/recvmsg.21
-rw-r--r--man2/remap_file_pages.2170
-rw-r--r--man2/removexattr.2100
-rw-r--r--man2/rename.2549
-rw-r--r--man2/renameat.21
-rw-r--r--man2/renameat2.21
-rw-r--r--man2/request_key.2562
-rw-r--r--man2/restart_syscall.2123
-rw-r--r--man2/rmdir.2128
-rw-r--r--man2/rt_sigaction.21
-rw-r--r--man2/rt_sigpending.21
-rw-r--r--man2/rt_sigprocmask.21
-rw-r--r--man2/rt_sigqueueinfo.2195
-rw-r--r--man2/rt_sigreturn.21
-rw-r--r--man2/rt_sigsuspend.21
-rw-r--r--man2/rt_sigtimedwait.21
-rw-r--r--man2/rt_tgsigqueueinfo.21
-rw-r--r--man2/s390_guarded_storage.2162
-rw-r--r--man2/s390_pci_mmio_read.21
-rw-r--r--man2/s390_pci_mmio_write.294
-rw-r--r--man2/s390_runtime_instr.2104
-rw-r--r--man2/s390_sthyi.2133
-rw-r--r--man2/sbrk.21
-rw-r--r--man2/sched_get_priority_max.2112
-rw-r--r--man2/sched_get_priority_min.21
-rw-r--r--man2/sched_getaffinity.21
-rw-r--r--man2/sched_getattr.21
-rw-r--r--man2/sched_getparam.21
-rw-r--r--man2/sched_getscheduler.21
-rw-r--r--man2/sched_rr_get_interval.2110
-rw-r--r--man2/sched_setaffinity.2427
-rw-r--r--man2/sched_setattr.2447
-rw-r--r--man2/sched_setparam.2121
-rw-r--r--man2/sched_setscheduler.2232
-rw-r--r--man2/sched_yield.276
-rw-r--r--man2/seccomp.21245
-rw-r--r--man2/seccomp_unotify.22011
-rw-r--r--man2/security.21
-rw-r--r--man2/select.2765
-rw-r--r--man2/select_tut.2638
-rw-r--r--man2/semctl.2623
-rw-r--r--man2/semget.2434
-rw-r--r--man2/semop.2523
-rw-r--r--man2/semtimedop.21
-rw-r--r--man2/send.2506
-rw-r--r--man2/sendfile.2241
-rw-r--r--man2/sendfile64.21
-rw-r--r--man2/sendmmsg.2232
-rw-r--r--man2/sendmsg.21
-rw-r--r--man2/sendto.21
-rw-r--r--man2/set_mempolicy.2342
-rw-r--r--man2/set_robust_list.21
-rw-r--r--man2/set_thread_area.2229
-rw-r--r--man2/set_tid_address.297
-rw-r--r--man2/setdomainname.21
-rw-r--r--man2/setegid.21
-rw-r--r--man2/seteuid.2134
-rw-r--r--man2/setfsgid.2109
-rw-r--r--man2/setfsgid32.21
-rw-r--r--man2/setfsuid.2127
-rw-r--r--man2/setfsuid32.21
-rw-r--r--man2/setgid.292
-rw-r--r--man2/setgid32.21
-rw-r--r--man2/setgroups.21
-rw-r--r--man2/setgroups32.21
-rw-r--r--man2/sethostname.21
-rw-r--r--man2/setitimer.21
-rw-r--r--man2/setns.2419
-rw-r--r--man2/setpgid.2329
-rw-r--r--man2/setpgrp.21
-rw-r--r--man2/setpriority.21
-rw-r--r--man2/setregid.21
-rw-r--r--man2/setregid32.21
-rw-r--r--man2/setresgid.21
-rw-r--r--man2/setresgid32.21
-rw-r--r--man2/setresuid.2147
-rw-r--r--man2/setresuid32.21
-rw-r--r--man2/setreuid.2193
-rw-r--r--man2/setreuid32.21
-rw-r--r--man2/setrlimit.21
-rw-r--r--man2/setsid.2100
-rw-r--r--man2/setsockopt.21
-rw-r--r--man2/settimeofday.21
-rw-r--r--man2/setuid.2156
-rw-r--r--man2/setuid32.21
-rw-r--r--man2/setup.255
-rw-r--r--man2/setxattr.2160
-rw-r--r--man2/sgetmask.270
-rw-r--r--man2/shmat.21
-rw-r--r--man2/shmctl.2490
-rw-r--r--man2/shmdt.21
-rw-r--r--man2/shmget.2410
-rw-r--r--man2/shmop.2507
-rw-r--r--man2/shutdown.298
-rw-r--r--man2/sigaction.21203
-rw-r--r--man2/sigaltstack.2365
-rw-r--r--man2/signal.2280
-rw-r--r--man2/signalfd.2521
-rw-r--r--man2/signalfd4.21
-rw-r--r--man2/sigpending.2110
-rw-r--r--man2/sigprocmask.2224
-rw-r--r--man2/sigreturn.2151
-rw-r--r--man2/sigsuspend.2131
-rw-r--r--man2/sigtimedwait.21
-rw-r--r--man2/sigwaitinfo.2231
-rw-r--r--man2/socket.2493
-rw-r--r--man2/socketcall.2185
-rw-r--r--man2/socketpair.2116
-rw-r--r--man2/splice.2253
-rw-r--r--man2/spu_create.2276
-rw-r--r--man2/spu_run.2260
-rw-r--r--man2/ssetmask.21
-rw-r--r--man2/stat.2539
-rw-r--r--man2/stat64.21
-rw-r--r--man2/statfs.2383
-rw-r--r--man2/statfs64.21
-rw-r--r--man2/statx.2614
-rw-r--r--man2/stime.273
-rw-r--r--man2/stty.21
-rw-r--r--man2/subpage_prot.2118
-rw-r--r--man2/swapoff.21
-rw-r--r--man2/swapon.2197
-rw-r--r--man2/symlink.2265
-rw-r--r--man2/symlinkat.21
-rw-r--r--man2/sync.2146
-rw-r--r--man2/sync_file_range.2205
-rw-r--r--man2/sync_file_range2.21
-rw-r--r--man2/syncfs.21
-rw-r--r--man2/syscall.2367
-rw-r--r--man2/syscalls.21170
-rw-r--r--man2/sysctl.2158
-rw-r--r--man2/sysfs.297
-rw-r--r--man2/sysinfo.2106
-rw-r--r--man2/syslog.2378
-rw-r--r--man2/tee.2199
-rw-r--r--man2/tgkill.21
-rw-r--r--man2/time.2117
-rw-r--r--man2/timer_create.2487
-rw-r--r--man2/timer_delete.258
-rw-r--r--man2/timer_getoverrun.2134
-rw-r--r--man2/timer_gettime.21
-rw-r--r--man2/timer_settime.2187
-rw-r--r--man2/timerfd_create.2700
-rw-r--r--man2/timerfd_gettime.21
-rw-r--r--man2/timerfd_settime.21
-rw-r--r--man2/times.2222
-rw-r--r--man2/tkill.2130
-rw-r--r--man2/truncate.2251
-rw-r--r--man2/truncate64.21
-rw-r--r--man2/tuxcall.21
-rw-r--r--man2/ugetrlimit.21
-rw-r--r--man2/umask.2149
-rw-r--r--man2/umount.2214
-rw-r--r--man2/umount2.21
-rw-r--r--man2/uname.2134
-rw-r--r--man2/unimplemented.248
-rw-r--r--man2/unlink.2298
-rw-r--r--man2/unlinkat.21
-rw-r--r--man2/unshare.2572
-rw-r--r--man2/uselib.2106
-rw-r--r--man2/userfaultfd.2943
-rw-r--r--man2/ustat.2104
-rw-r--r--man2/utime.2179
-rw-r--r--man2/utimensat.2615
-rw-r--r--man2/utimes.21
-rw-r--r--man2/vfork.2317
-rw-r--r--man2/vhangup.258
-rw-r--r--man2/vm86.258
-rw-r--r--man2/vm86old.21
-rw-r--r--man2/vmsplice.2162
-rw-r--r--man2/vserver.21
-rw-r--r--man2/wait.2720
-rw-r--r--man2/wait3.21
-rw-r--r--man2/wait4.2169
-rw-r--r--man2/waitid.21
-rw-r--r--man2/waitpid.21
-rw-r--r--man2/write.2329
-rw-r--r--man2/writev.21
-rw-r--r--man2type/open_how.2type51
-rw-r--r--man3/CIRCLEQ_EMPTY.31
-rw-r--r--man3/CIRCLEQ_ENTRY.31
-rw-r--r--man3/CIRCLEQ_FIRST.31
-rw-r--r--man3/CIRCLEQ_FOREACH.31
-rw-r--r--man3/CIRCLEQ_FOREACH_REVERSE.31
-rw-r--r--man3/CIRCLEQ_HEAD.31
-rw-r--r--man3/CIRCLEQ_HEAD_INITIALIZER.31
-rw-r--r--man3/CIRCLEQ_INIT.31
-rw-r--r--man3/CIRCLEQ_INSERT_AFTER.31
-rw-r--r--man3/CIRCLEQ_INSERT_BEFORE.31
-rw-r--r--man3/CIRCLEQ_INSERT_HEAD.31
-rw-r--r--man3/CIRCLEQ_INSERT_TAIL.31
-rw-r--r--man3/CIRCLEQ_LAST.31
-rw-r--r--man3/CIRCLEQ_LOOP_NEXT.31
-rw-r--r--man3/CIRCLEQ_LOOP_PREV.31
-rw-r--r--man3/CIRCLEQ_NEXT.31
-rw-r--r--man3/CIRCLEQ_PREV.31
-rw-r--r--man3/CIRCLEQ_REMOVE.31
-rw-r--r--man3/CMSG_ALIGN.31
-rw-r--r--man3/CMSG_DATA.31
-rw-r--r--man3/CMSG_FIRSTHDR.31
-rw-r--r--man3/CMSG_LEN.31
-rw-r--r--man3/CMSG_NXTHDR.31
-rw-r--r--man3/CMSG_SPACE.31
-rw-r--r--man3/CPU_ALLOC.31
-rw-r--r--man3/CPU_ALLOC_SIZE.31
-rw-r--r--man3/CPU_AND.31
-rw-r--r--man3/CPU_AND_S.31
-rw-r--r--man3/CPU_CLR.31
-rw-r--r--man3/CPU_CLR_S.31
-rw-r--r--man3/CPU_COUNT.31
-rw-r--r--man3/CPU_COUNT_S.31
-rw-r--r--man3/CPU_EQUAL.31
-rw-r--r--man3/CPU_EQUAL_S.31
-rw-r--r--man3/CPU_FREE.31
-rw-r--r--man3/CPU_ISSET.31
-rw-r--r--man3/CPU_ISSET_S.31
-rw-r--r--man3/CPU_OR.31
-rw-r--r--man3/CPU_OR_S.31
-rw-r--r--man3/CPU_SET.3348
-rw-r--r--man3/CPU_SET_S.31
-rw-r--r--man3/CPU_XOR.31
-rw-r--r--man3/CPU_XOR_S.31
-rw-r--r--man3/CPU_ZERO.31
-rw-r--r--man3/CPU_ZERO_S.31
-rw-r--r--man3/DES_FAILED.31
-rw-r--r--man3/FD_CLR.31
-rw-r--r--man3/FD_ISSET.31
-rw-r--r--man3/FD_SET.31
-rw-r--r--man3/FD_ZERO.31
-rw-r--r--man3/HUGE_VAL.31
-rw-r--r--man3/HUGE_VALF.31
-rw-r--r--man3/HUGE_VALL.31
-rw-r--r--man3/INFINITY.385
-rw-r--r--man3/LIST_EMPTY.31
-rw-r--r--man3/LIST_ENTRY.31
-rw-r--r--man3/LIST_FIRST.31
-rw-r--r--man3/LIST_FOREACH.31
-rw-r--r--man3/LIST_HEAD.31
-rw-r--r--man3/LIST_HEAD_INITIALIZER.31
-rw-r--r--man3/LIST_INIT.31
-rw-r--r--man3/LIST_INSERT_AFTER.31
-rw-r--r--man3/LIST_INSERT_BEFORE.31
-rw-r--r--man3/LIST_INSERT_HEAD.31
-rw-r--r--man3/LIST_NEXT.31
-rw-r--r--man3/LIST_REMOVE.31
-rw-r--r--man3/MAX.375
-rw-r--r--man3/MB_CUR_MAX.343
-rw-r--r--man3/MB_LEN_MAX.351
-rw-r--r--man3/MIN.31
-rw-r--r--man3/NAN.31
-rw-r--r--man3/SIMPLEQ_EMPTY.31
-rw-r--r--man3/SIMPLEQ_ENTRY.31
-rw-r--r--man3/SIMPLEQ_FIRST.31
-rw-r--r--man3/SIMPLEQ_FOREACH.31
-rw-r--r--man3/SIMPLEQ_HEAD.31
-rw-r--r--man3/SIMPLEQ_HEAD_INITIALIZER.31
-rw-r--r--man3/SIMPLEQ_INIT.31
-rw-r--r--man3/SIMPLEQ_INSERT_AFTER.31
-rw-r--r--man3/SIMPLEQ_INSERT_HEAD.31
-rw-r--r--man3/SIMPLEQ_INSERT_TAIL.31
-rw-r--r--man3/SIMPLEQ_NEXT.31
-rw-r--r--man3/SIMPLEQ_REMOVE.31
-rw-r--r--man3/SIMPLEQ_REMOVE_HEAD.31
-rw-r--r--man3/SLIST_EMPTY.31
-rw-r--r--man3/SLIST_ENTRY.31
-rw-r--r--man3/SLIST_FIRST.31
-rw-r--r--man3/SLIST_FOREACH.31
-rw-r--r--man3/SLIST_HEAD.31
-rw-r--r--man3/SLIST_HEAD_INITIALIZER.31
-rw-r--r--man3/SLIST_INIT.31
-rw-r--r--man3/SLIST_INSERT_AFTER.31
-rw-r--r--man3/SLIST_INSERT_HEAD.31
-rw-r--r--man3/SLIST_NEXT.31
-rw-r--r--man3/SLIST_REMOVE.31
-rw-r--r--man3/SLIST_REMOVE_HEAD.31
-rw-r--r--man3/STAILQ_CONCAT.31
-rw-r--r--man3/STAILQ_EMPTY.31
-rw-r--r--man3/STAILQ_ENTRY.31
-rw-r--r--man3/STAILQ_FIRST.31
-rw-r--r--man3/STAILQ_FOREACH.31
-rw-r--r--man3/STAILQ_HEAD.31
-rw-r--r--man3/STAILQ_HEAD_INITIALIZER.31
-rw-r--r--man3/STAILQ_INIT.31
-rw-r--r--man3/STAILQ_INSERT_AFTER.31
-rw-r--r--man3/STAILQ_INSERT_HEAD.31
-rw-r--r--man3/STAILQ_INSERT_TAIL.31
-rw-r--r--man3/STAILQ_NEXT.31
-rw-r--r--man3/STAILQ_REMOVE.31
-rw-r--r--man3/STAILQ_REMOVE_HEAD.31
-rw-r--r--man3/TAILQ_CONCAT.31
-rw-r--r--man3/TAILQ_EMPTY.31
-rw-r--r--man3/TAILQ_ENTRY.31
-rw-r--r--man3/TAILQ_FIRST.31
-rw-r--r--man3/TAILQ_FOREACH.31
-rw-r--r--man3/TAILQ_FOREACH_REVERSE.31
-rw-r--r--man3/TAILQ_HEAD.31
-rw-r--r--man3/TAILQ_HEAD_INITIALIZER.31
-rw-r--r--man3/TAILQ_INIT.31
-rw-r--r--man3/TAILQ_INSERT_AFTER.31
-rw-r--r--man3/TAILQ_INSERT_BEFORE.31
-rw-r--r--man3/TAILQ_INSERT_HEAD.31
-rw-r--r--man3/TAILQ_INSERT_TAIL.31
-rw-r--r--man3/TAILQ_LAST.31
-rw-r--r--man3/TAILQ_NEXT.31
-rw-r--r--man3/TAILQ_PREV.31
-rw-r--r--man3/TAILQ_REMOVE.31
-rw-r--r--man3/TAILQ_SWAP.31
-rw-r--r--man3/_Generic.364
-rw-r--r--man3/_Static_assert.31
-rw-r--r--man3/__after_morecore_hook.31
-rw-r--r--man3/__fbufsize.31
-rw-r--r--man3/__flbf.31
-rw-r--r--man3/__fpending.31
-rw-r--r--man3/__fpurge.31
-rw-r--r--man3/__freadable.31
-rw-r--r--man3/__freading.31
-rw-r--r--man3/__free_hook.31
-rw-r--r--man3/__fsetlocking.31
-rw-r--r--man3/__fwritable.31
-rw-r--r--man3/__fwriting.31
-rw-r--r--man3/__malloc_hook.31
-rw-r--r--man3/__malloc_initialize_hook.31
-rw-r--r--man3/__memalign_hook.31
-rw-r--r--man3/__ppc_get_timebase.399
-rw-r--r--man3/__ppc_get_timebase_freq.31
-rw-r--r--man3/__ppc_mdoio.31
-rw-r--r--man3/__ppc_mdoom.31
-rw-r--r--man3/__ppc_set_ppr_low.31
-rw-r--r--man3/__ppc_set_ppr_med.3116
-rw-r--r--man3/__ppc_set_ppr_med_high.31
-rw-r--r--man3/__ppc_set_ppr_med_low.31
-rw-r--r--man3/__ppc_set_ppr_very_low.31
-rw-r--r--man3/__ppc_yield.370
-rw-r--r--man3/__realloc_hook.31
-rw-r--r--man3/__setfpucw.372
-rw-r--r--man3/_flushlbf.31
-rw-r--r--man3/a64l.3112
-rw-r--r--man3/abort.396
-rw-r--r--man3/abs.3127
-rw-r--r--man3/acos.3124
-rw-r--r--man3/acosf.31
-rw-r--r--man3/acosh.3127
-rw-r--r--man3/acoshf.31
-rw-r--r--man3/acoshl.31
-rw-r--r--man3/acosl.31
-rw-r--r--man3/addmntent.31
-rw-r--r--man3/addseverity.390
-rw-r--r--man3/adjtime.3155
-rw-r--r--man3/aio_cancel.3128
-rw-r--r--man3/aio_error.398
-rw-r--r--man3/aio_fsync.3115
-rw-r--r--man3/aio_init.378
-rw-r--r--man3/aio_read.3162
-rw-r--r--man3/aio_return.392
-rw-r--r--man3/aio_suspend.3146
-rw-r--r--man3/aio_write.3164
-rw-r--r--man3/aligned_alloc.31
-rw-r--r--man3/alloca.3141
-rw-r--r--man3/alphasort.31
-rw-r--r--man3/arc4random.3112
-rw-r--r--man3/arc4random_buf.31
-rw-r--r--man3/arc4random_uniform.31
-rw-r--r--man3/argz.31
-rw-r--r--man3/argz_add.3240
-rw-r--r--man3/argz_add_sep.31
-rw-r--r--man3/argz_append.31
-rw-r--r--man3/argz_count.31
-rw-r--r--man3/argz_create.31
-rw-r--r--man3/argz_create_sep.31
-rw-r--r--man3/argz_delete.31
-rw-r--r--man3/argz_extract.31
-rw-r--r--man3/argz_insert.31
-rw-r--r--man3/argz_next.31
-rw-r--r--man3/argz_replace.31
-rw-r--r--man3/argz_stringify.31
-rw-r--r--man3/asctime.31
-rw-r--r--man3/asctime_r.31
-rw-r--r--man3/asin.3120
-rw-r--r--man3/asinf.31
-rw-r--r--man3/asinh.3112
-rw-r--r--man3/asinhf.31
-rw-r--r--man3/asinhl.31
-rw-r--r--man3/asinl.31
-rw-r--r--man3/asprintf.373
-rw-r--r--man3/assert.399
-rw-r--r--man3/assert_perror.376
-rw-r--r--man3/atan.3106
-rw-r--r--man3/atan2.3177
-rw-r--r--man3/atan2f.31
-rw-r--r--man3/atan2l.31
-rw-r--r--man3/atanf.31
-rw-r--r--man3/atanh.3157
-rw-r--r--man3/atanhf.31
-rw-r--r--man3/atanhl.31
-rw-r--r--man3/atanl.31
-rw-r--r--man3/atexit.3172
-rw-r--r--man3/atof.370
-rw-r--r--man3/atoi.3128
-rw-r--r--man3/atol.31
-rw-r--r--man3/atoll.31
-rw-r--r--man3/atoq.31
-rw-r--r--man3/auth_destroy.31
-rw-r--r--man3/authnone_create.31
-rw-r--r--man3/authunix_create.31
-rw-r--r--man3/authunix_create_default.31
-rw-r--r--man3/backtrace.3286
-rw-r--r--man3/backtrace_symbols.31
-rw-r--r--man3/backtrace_symbols_fd.31
-rw-r--r--man3/basename.3190
-rw-r--r--man3/bcmp.330
-rw-r--r--man3/bcopy.379
-rw-r--r--man3/be16toh.31
-rw-r--r--man3/be32toh.31
-rw-r--r--man3/be64toh.31
-rw-r--r--man3/bindresvport.3117
-rw-r--r--man3/bsd_signal.3115
-rw-r--r--man3/bsearch.3142
-rw-r--r--man3/bstring.376
-rw-r--r--man3/bswap.368
-rw-r--r--man3/bswap_16.31
-rw-r--r--man3/bswap_32.31
-rw-r--r--man3/bswap_64.31
-rw-r--r--man3/btowc.389
-rw-r--r--man3/btree.3229
-rw-r--r--man3/byteorder.386
-rw-r--r--man3/bzero.3161
-rw-r--r--man3/cabs.357
-rw-r--r--man3/cabsf.31
-rw-r--r--man3/cabsl.31
-rw-r--r--man3/cacos.396
-rw-r--r--man3/cacosf.31
-rw-r--r--man3/cacosh.398
-rw-r--r--man3/cacoshf.31
-rw-r--r--man3/cacoshl.31
-rw-r--r--man3/cacosl.31
-rw-r--r--man3/calloc.31
-rw-r--r--man3/callrpc.31
-rw-r--r--man3/canonicalize_file_name.383
-rw-r--r--man3/carg.391
-rw-r--r--man3/cargf.31
-rw-r--r--man3/cargl.31
-rw-r--r--man3/casin.360
-rw-r--r--man3/casinf.31
-rw-r--r--man3/casinh.364
-rw-r--r--man3/casinhf.31
-rw-r--r--man3/casinhl.31
-rw-r--r--man3/casinl.31
-rw-r--r--man3/catan.395
-rw-r--r--man3/catanf.31
-rw-r--r--man3/catanh.397
-rw-r--r--man3/catanhf.31
-rw-r--r--man3/catanhl.31
-rw-r--r--man3/catanl.31
-rw-r--r--man3/catclose.31
-rw-r--r--man3/catgets.391
-rw-r--r--man3/catopen.3200
-rw-r--r--man3/cbc_crypt.31
-rw-r--r--man3/cbrt.390
-rw-r--r--man3/cbrtf.31
-rw-r--r--man3/cbrtl.31
-rw-r--r--man3/ccos.360
-rw-r--r--man3/ccosf.31
-rw-r--r--man3/ccosh.340
-rw-r--r--man3/ccoshf.31
-rw-r--r--man3/ccoshl.31
-rw-r--r--man3/ccosl.31
-rw-r--r--man3/ceil.3118
-rw-r--r--man3/ceilf.31
-rw-r--r--man3/ceill.31
-rw-r--r--man3/cexp.361
-rw-r--r--man3/cexp2.331
-rw-r--r--man3/cexp2f.31
-rw-r--r--man3/cexp2l.31
-rw-r--r--man3/cexpf.31
-rw-r--r--man3/cexpl.31
-rw-r--r--man3/cfgetispeed.31
-rw-r--r--man3/cfgetospeed.31
-rw-r--r--man3/cfmakeraw.31
-rw-r--r--man3/cfree.3135
-rw-r--r--man3/cfsetispeed.31
-rw-r--r--man3/cfsetospeed.31
-rw-r--r--man3/cfsetspeed.31
-rw-r--r--man3/cimag.361
-rw-r--r--man3/cimagf.31
-rw-r--r--man3/cimagl.31
-rw-r--r--man3/circleq.3318
-rw-r--r--man3/clearenv.3140
-rw-r--r--man3/clearerr.31
-rw-r--r--man3/clearerr_unlocked.31
-rw-r--r--man3/clnt_broadcast.31
-rw-r--r--man3/clnt_call.31
-rw-r--r--man3/clnt_control.31
-rw-r--r--man3/clnt_create.31
-rw-r--r--man3/clnt_destroy.31
-rw-r--r--man3/clnt_freeres.31
-rw-r--r--man3/clnt_geterr.31
-rw-r--r--man3/clnt_pcreateerror.31
-rw-r--r--man3/clnt_perrno.31
-rw-r--r--man3/clnt_perror.31
-rw-r--r--man3/clnt_spcreateerror.31
-rw-r--r--man3/clnt_sperrno.31
-rw-r--r--man3/clnt_sperror.31
-rw-r--r--man3/clntraw_create.31
-rw-r--r--man3/clnttcp_create.31
-rw-r--r--man3/clntudp_bufcreate.31
-rw-r--r--man3/clntudp_create.31
-rw-r--r--man3/clock.3104
-rw-r--r--man3/clock_getcpuclockid.3158
-rw-r--r--man3/clog.374
-rw-r--r--man3/clog10.378
-rw-r--r--man3/clog10f.31
-rw-r--r--man3/clog10l.31
-rw-r--r--man3/clog2.345
-rw-r--r--man3/clog2f.31
-rw-r--r--man3/clog2l.31
-rw-r--r--man3/clogf.31
-rw-r--r--man3/clogl.31
-rw-r--r--man3/closedir.378
-rw-r--r--man3/closelog.31
-rw-r--r--man3/cmsg.3266
-rw-r--r--man3/confstr.3159
-rw-r--r--man3/conj.359
-rw-r--r--man3/conjf.31
-rw-r--r--man3/conjl.31
-rw-r--r--man3/copysign.395
-rw-r--r--man3/copysignf.31
-rw-r--r--man3/copysignl.31
-rw-r--r--man3/cos.3121
-rw-r--r--man3/cosf.31
-rw-r--r--man3/cosh.3133
-rw-r--r--man3/coshf.31
-rw-r--r--man3/coshl.31
-rw-r--r--man3/cosl.31
-rw-r--r--man3/cpow.356
-rw-r--r--man3/cpowf.31
-rw-r--r--man3/cpowl.31
-rw-r--r--man3/cproj.362
-rw-r--r--man3/cprojf.31
-rw-r--r--man3/cprojl.31
-rw-r--r--man3/creal.359
-rw-r--r--man3/crealf.31
-rw-r--r--man3/creall.31
-rw-r--r--man3/crypt.3320
-rw-r--r--man3/crypt_r.31
-rw-r--r--man3/csin.360
-rw-r--r--man3/csinf.31
-rw-r--r--man3/csinh.360
-rw-r--r--man3/csinhf.31
-rw-r--r--man3/csinhl.31
-rw-r--r--man3/csinl.31
-rw-r--r--man3/csqrt.354
-rw-r--r--man3/csqrtf.31
-rw-r--r--man3/csqrtl.31
-rw-r--r--man3/ctan.360
-rw-r--r--man3/ctanf.31
-rw-r--r--man3/ctanh.361
-rw-r--r--man3/ctanhf.31
-rw-r--r--man3/ctanhl.31
-rw-r--r--man3/ctanl.31
-rw-r--r--man3/ctermid.376
-rw-r--r--man3/ctime.3414
-rw-r--r--man3/ctime_r.31
-rw-r--r--man3/cuserid.31
-rw-r--r--man3/daemon.3132
-rw-r--r--man3/daylight.31
-rw-r--r--man3/db.31
-rw-r--r--man3/dbopen.3536
-rw-r--r--man3/des_crypt.3167
-rw-r--r--man3/des_setparity.31
-rw-r--r--man3/difftime.372
-rw-r--r--man3/dirfd.396
-rw-r--r--man3/dirname.31
-rw-r--r--man3/div.3108
-rw-r--r--man3/dl_iterate_phdr.3348
-rw-r--r--man3/dladdr.3278
-rw-r--r--man3/dladdr1.31
-rw-r--r--man3/dlclose.31
-rw-r--r--man3/dlerror.381
-rw-r--r--man3/dlinfo.3320
-rw-r--r--man3/dlmopen.31
-rw-r--r--man3/dlopen.3627
-rw-r--r--man3/dlsym.3174
-rw-r--r--man3/dlvsym.31
-rw-r--r--man3/dn_comp.31
-rw-r--r--man3/dn_expand.31
-rw-r--r--man3/dprintf.31
-rw-r--r--man3/drand48.3263
-rw-r--r--man3/drand48_r.3107
-rw-r--r--man3/drem.31
-rw-r--r--man3/dremf.31
-rw-r--r--man3/dreml.31
-rw-r--r--man3/duplocale.3168
-rw-r--r--man3/dysize.372
-rw-r--r--man3/eaccess.31
-rw-r--r--man3/ecb_crypt.31
-rw-r--r--man3/ecvt.3134
-rw-r--r--man3/ecvt_r.3103
-rw-r--r--man3/edata.31
-rw-r--r--man3/encrypt.3212
-rw-r--r--man3/encrypt_r.31
-rw-r--r--man3/end.396
-rw-r--r--man3/endaliasent.31
-rw-r--r--man3/endfsent.31
-rw-r--r--man3/endgrent.31
-rw-r--r--man3/endhostent.31
-rw-r--r--man3/endian.3164
-rw-r--r--man3/endmntent.31
-rw-r--r--man3/endnetent.31
-rw-r--r--man3/endnetgrent.31
-rw-r--r--man3/endprotoent.31
-rw-r--r--man3/endpwent.31
-rw-r--r--man3/endrpcent.31
-rw-r--r--man3/endservent.31
-rw-r--r--man3/endspent.31
-rw-r--r--man3/endttyent.31
-rw-r--r--man3/endusershell.31
-rw-r--r--man3/endutent.31
-rw-r--r--man3/endutxent.31
-rw-r--r--man3/envz.31
-rw-r--r--man3/envz_add.3171
-rw-r--r--man3/envz_entry.31
-rw-r--r--man3/envz_get.31
-rw-r--r--man3/envz_merge.31
-rw-r--r--man3/envz_remove.31
-rw-r--r--man3/envz_strip.31
-rw-r--r--man3/erand48.31
-rw-r--r--man3/erand48_r.31
-rw-r--r--man3/erf.3134
-rw-r--r--man3/erfc.3137
-rw-r--r--man3/erfcf.31
-rw-r--r--man3/erfcl.31
-rw-r--r--man3/erff.31
-rw-r--r--man3/erfl.31
-rw-r--r--man3/err.3157
-rw-r--r--man3/errno.3655
-rw-r--r--man3/error.3170
-rw-r--r--man3/error_at_line.31
-rw-r--r--man3/error_message_count.31
-rw-r--r--man3/error_one_per_line.31
-rw-r--r--man3/error_print_progname.31
-rw-r--r--man3/errx.31
-rw-r--r--man3/etext.31
-rw-r--r--man3/ether_aton.3144
-rw-r--r--man3/ether_aton_r.31
-rw-r--r--man3/ether_hostton.31
-rw-r--r--man3/ether_line.31
-rw-r--r--man3/ether_ntoa.31
-rw-r--r--man3/ether_ntoa_r.31
-rw-r--r--man3/ether_ntohost.31
-rw-r--r--man3/euidaccess.3107
-rw-r--r--man3/eventfd_read.31
-rw-r--r--man3/eventfd_write.31
-rw-r--r--man3/exec.3312
-rw-r--r--man3/execl.31
-rw-r--r--man3/execle.31
-rw-r--r--man3/execlp.31
-rw-r--r--man3/execv.31
-rw-r--r--man3/execvp.31
-rw-r--r--man3/execvpe.31
-rw-r--r--man3/exit.3205
-rw-r--r--man3/exp.3136
-rw-r--r--man3/exp10.385
-rw-r--r--man3/exp10f.31
-rw-r--r--man3/exp10l.31
-rw-r--r--man3/exp2.395
-rw-r--r--man3/exp2f.31
-rw-r--r--man3/exp2l.31
-rw-r--r--man3/expf.31
-rw-r--r--man3/expl.31
-rw-r--r--man3/explicit_bzero.31
-rw-r--r--man3/expm1.3168
-rw-r--r--man3/expm1f.31
-rw-r--r--man3/expm1l.31
-rw-r--r--man3/fabs.395
-rw-r--r--man3/fabsf.31
-rw-r--r--man3/fabsl.31
-rw-r--r--man3/fclose.3105
-rw-r--r--man3/fcloseall.367
-rw-r--r--man3/fcvt.31
-rw-r--r--man3/fcvt_r.31
-rw-r--r--man3/fdim.399
-rw-r--r--man3/fdimf.31
-rw-r--r--man3/fdiml.31
-rw-r--r--man3/fdopen.31
-rw-r--r--man3/fdopendir.31
-rw-r--r--man3/feclearexcept.31
-rw-r--r--man3/fedisableexcept.31
-rw-r--r--man3/feenableexcept.31
-rw-r--r--man3/fegetenv.31
-rw-r--r--man3/fegetexcept.31
-rw-r--r--man3/fegetexceptflag.31
-rw-r--r--man3/fegetround.31
-rw-r--r--man3/feholdexcept.31
-rw-r--r--man3/fenv.3335
-rw-r--r--man3/feof.31
-rw-r--r--man3/feof_unlocked.31
-rw-r--r--man3/feraiseexcept.31
-rw-r--r--man3/ferror.3121
-rw-r--r--man3/ferror_unlocked.31
-rw-r--r--man3/fesetenv.31
-rw-r--r--man3/fesetexceptflag.31
-rw-r--r--man3/fesetround.31
-rw-r--r--man3/fetestexcept.31
-rw-r--r--man3/feupdateenv.31
-rw-r--r--man3/fexecve.3175
-rw-r--r--man3/fflush.3118
-rw-r--r--man3/fflush_unlocked.31
-rw-r--r--man3/ffs.3106
-rw-r--r--man3/ffsl.31
-rw-r--r--man3/ffsll.31
-rw-r--r--man3/fgetc.3155
-rw-r--r--man3/fgetc_unlocked.31
-rw-r--r--man3/fgetgrent.3121
-rw-r--r--man3/fgetgrent_r.31
-rw-r--r--man3/fgetpos.31
-rw-r--r--man3/fgetpwent.3130
-rw-r--r--man3/fgetpwent_r.31
-rw-r--r--man3/fgets.31
-rw-r--r--man3/fgets_unlocked.31
-rw-r--r--man3/fgetspent.31
-rw-r--r--man3/fgetspent_r.31
-rw-r--r--man3/fgetwc.3109
-rw-r--r--man3/fgetwc_unlocked.31
-rw-r--r--man3/fgetws.394
-rw-r--r--man3/fgetws_unlocked.31
-rw-r--r--man3/fileno.392
-rw-r--r--man3/fileno_unlocked.31
-rw-r--r--man3/finite.3146
-rw-r--r--man3/finitef.31
-rw-r--r--man3/finitel.31
-rw-r--r--man3/flockfile.3136
-rw-r--r--man3/floor.3108
-rw-r--r--man3/floorf.31
-rw-r--r--man3/floorl.31
-rw-r--r--man3/fma.3170
-rw-r--r--man3/fmaf.31
-rw-r--r--man3/fmal.31
-rw-r--r--man3/fmax.376
-rw-r--r--man3/fmaxf.31
-rw-r--r--man3/fmaxl.31
-rw-r--r--man3/fmemopen.3355
-rw-r--r--man3/fmin.376
-rw-r--r--man3/fminf.31
-rw-r--r--man3/fminl.31
-rw-r--r--man3/fmod.3157
-rw-r--r--man3/fmodf.31
-rw-r--r--man3/fmodl.31
-rw-r--r--man3/fmtmsg.3338
-rw-r--r--man3/fnmatch.3144
-rw-r--r--man3/fopen.3408
-rw-r--r--man3/fopencookie.3458
-rw-r--r--man3/forkpty.31
-rw-r--r--man3/fpathconf.3276
-rw-r--r--man3/fpclassify.3148
-rw-r--r--man3/fprintf.31
-rw-r--r--man3/fpurge.386
-rw-r--r--man3/fputc.31
-rw-r--r--man3/fputc_unlocked.31
-rw-r--r--man3/fputs.31
-rw-r--r--man3/fputs_unlocked.31
-rw-r--r--man3/fputwc.3107
-rw-r--r--man3/fputwc_unlocked.31
-rw-r--r--man3/fputws.381
-rw-r--r--man3/fputws_unlocked.31
-rw-r--r--man3/fread.3167
-rw-r--r--man3/fread_unlocked.31
-rw-r--r--man3/free.31
-rw-r--r--man3/freeaddrinfo.31
-rw-r--r--man3/freehostent.31
-rw-r--r--man3/freeifaddrs.31
-rw-r--r--man3/freelocale.31
-rw-r--r--man3/freopen.31
-rw-r--r--man3/frexp.3145
-rw-r--r--man3/frexpf.31
-rw-r--r--man3/frexpl.31
-rw-r--r--man3/fscanf.31
-rw-r--r--man3/fseek.3180
-rw-r--r--man3/fseeko.3105
-rw-r--r--man3/fsetpos.31
-rw-r--r--man3/fstatvfs.31
-rw-r--r--man3/ftell.31
-rw-r--r--man3/ftello.31
-rw-r--r--man3/ftime.3108
-rw-r--r--man3/ftok.3113
-rw-r--r--man3/ftrylockfile.31
-rw-r--r--man3/fts.3823
-rw-r--r--man3/fts_children.31
-rw-r--r--man3/fts_close.31
-rw-r--r--man3/fts_open.31
-rw-r--r--man3/fts_read.31
-rw-r--r--man3/fts_set.31
-rw-r--r--man3/ftw.3503
-rw-r--r--man3/funlockfile.31
-rw-r--r--man3/futimens.31
-rw-r--r--man3/futimes.3109
-rw-r--r--man3/fwide.392
-rw-r--r--man3/fwprintf.31
-rw-r--r--man3/fwrite.31
-rw-r--r--man3/fwrite_unlocked.31
-rw-r--r--man3/gai_cancel.31
-rw-r--r--man3/gai_error.31
-rw-r--r--man3/gai_strerror.31
-rw-r--r--man3/gai_suspend.31
-rw-r--r--man3/gamma.3124
-rw-r--r--man3/gammaf.31
-rw-r--r--man3/gammal.31
-rw-r--r--man3/gcvt.385
-rw-r--r--man3/get_avphys_pages.31
-rw-r--r--man3/get_current_dir_name.31
-rw-r--r--man3/get_myaddress.31
-rw-r--r--man3/get_nprocs.396
-rw-r--r--man3/get_nprocs_conf.31
-rw-r--r--man3/get_phys_pages.390
-rw-r--r--man3/getaddrinfo.3853
-rw-r--r--man3/getaddrinfo_a.3614
-rw-r--r--man3/getaliasbyname.31
-rw-r--r--man3/getaliasbyname_r.31
-rw-r--r--man3/getaliasent.31
-rw-r--r--man3/getaliasent_r.31
-rw-r--r--man3/getauxval.3275
-rw-r--r--man3/getc.31
-rw-r--r--man3/getc_unlocked.31
-rw-r--r--man3/getchar.31
-rw-r--r--man3/getchar_unlocked.31
-rw-r--r--man3/getcontext.3204
-rw-r--r--man3/getcwd.3312
-rw-r--r--man3/getdate.3317
-rw-r--r--man3/getdate_err.31
-rw-r--r--man3/getdate_r.31
-rw-r--r--man3/getdelim.31
-rw-r--r--man3/getdirentries.383
-rw-r--r--man3/getdtablesize.391
-rw-r--r--man3/getentropy.3103
-rw-r--r--man3/getenv.3144
-rw-r--r--man3/getfsent.3152
-rw-r--r--man3/getfsfile.31
-rw-r--r--man3/getfsspec.31
-rw-r--r--man3/getgrent.3203
-rw-r--r--man3/getgrent_r.3224
-rw-r--r--man3/getgrgid.31
-rw-r--r--man3/getgrgid_r.31
-rw-r--r--man3/getgrnam.3255
-rw-r--r--man3/getgrnam_r.31
-rw-r--r--man3/getgrouplist.3203
-rw-r--r--man3/gethostbyaddr.31
-rw-r--r--man3/gethostbyaddr_r.31
-rw-r--r--man3/gethostbyname.3533
-rw-r--r--man3/gethostbyname2.31
-rw-r--r--man3/gethostbyname2_r.31
-rw-r--r--man3/gethostbyname_r.31
-rw-r--r--man3/gethostent.31
-rw-r--r--man3/gethostent_r.31
-rw-r--r--man3/gethostid.3146
-rw-r--r--man3/getifaddrs.3316
-rw-r--r--man3/getipnodebyaddr.31
-rw-r--r--man3/getipnodebyname.3253
-rw-r--r--man3/getline.3185
-rw-r--r--man3/getloadavg.374
-rw-r--r--man3/getlogin.3251
-rw-r--r--man3/getlogin_r.31
-rw-r--r--man3/getmntent.3258
-rw-r--r--man3/getmntent_r.31
-rw-r--r--man3/getnameinfo.3346
-rw-r--r--man3/getnetbyaddr.31
-rw-r--r--man3/getnetbyaddr_r.31
-rw-r--r--man3/getnetbyname.31
-rw-r--r--man3/getnetbyname_r.31
-rw-r--r--man3/getnetent.3194
-rw-r--r--man3/getnetent_r.3153
-rw-r--r--man3/getnetgrent.31
-rw-r--r--man3/getnetgrent_r.31
-rw-r--r--man3/getopt.3578
-rw-r--r--man3/getopt_long.31
-rw-r--r--man3/getopt_long_only.31
-rw-r--r--man3/getpass.3153
-rw-r--r--man3/getprotobyname.31
-rw-r--r--man3/getprotobyname_r.31
-rw-r--r--man3/getprotobynumber.31
-rw-r--r--man3/getprotobynumber_r.31
-rw-r--r--man3/getprotoent.3180
-rw-r--r--man3/getprotoent_r.3246
-rw-r--r--man3/getpt.377
-rw-r--r--man3/getpw.3128
-rw-r--r--man3/getpwent.3187
-rw-r--r--man3/getpwent_r.3225
-rw-r--r--man3/getpwnam.3343
-rw-r--r--man3/getpwnam_r.31
-rw-r--r--man3/getpwuid.31
-rw-r--r--man3/getpwuid_r.31
-rw-r--r--man3/getrpcbyname.31
-rw-r--r--man3/getrpcbyname_r.31
-rw-r--r--man3/getrpcbynumber.31
-rw-r--r--man3/getrpcbynumber_r.31
-rw-r--r--man3/getrpcent.3137
-rw-r--r--man3/getrpcent_r.3139
-rw-r--r--man3/getrpcport.362
-rw-r--r--man3/gets.3110
-rw-r--r--man3/getservbyname.31
-rw-r--r--man3/getservbyname_r.31
-rw-r--r--man3/getservbyport.31
-rw-r--r--man3/getservbyport_r.31
-rw-r--r--man3/getservent.3197
-rw-r--r--man3/getservent_r.3252
-rw-r--r--man3/getspent.31
-rw-r--r--man3/getspent_r.31
-rw-r--r--man3/getspnam.3320
-rw-r--r--man3/getspnam_r.31
-rw-r--r--man3/getsubopt.3254
-rw-r--r--man3/getttyent.3103
-rw-r--r--man3/getttynam.31
-rw-r--r--man3/getusershell.3101
-rw-r--r--man3/getutent.3345
-rw-r--r--man3/getutent_r.31
-rw-r--r--man3/getutid.31
-rw-r--r--man3/getutid_r.31
-rw-r--r--man3/getutline.31
-rw-r--r--man3/getutline_r.31
-rw-r--r--man3/getutmp.374
-rw-r--r--man3/getutmpx.31
-rw-r--r--man3/getutxent.31
-rw-r--r--man3/getutxid.31
-rw-r--r--man3/getutxline.31
-rw-r--r--man3/getw.387
-rw-r--r--man3/getwc.31
-rw-r--r--man3/getwc_unlocked.31
-rw-r--r--man3/getwchar.390
-rw-r--r--man3/getwchar_unlocked.31
-rw-r--r--man3/getwd.31
-rw-r--r--man3/glob.3351
-rw-r--r--man3/globfree.31
-rw-r--r--man3/gmtime.31
-rw-r--r--man3/gmtime_r.31
-rw-r--r--man3/gnu_dev_major.31
-rw-r--r--man3/gnu_dev_makedev.31
-rw-r--r--man3/gnu_dev_minor.31
-rw-r--r--man3/gnu_get_libc_release.31
-rw-r--r--man3/gnu_get_libc_version.382
-rw-r--r--man3/grantpt.3112
-rw-r--r--man3/group_member.348
-rw-r--r--man3/gsignal.3119
-rw-r--r--man3/h_errno.31
-rw-r--r--man3/hash.3145
-rw-r--r--man3/hasmntopt.31
-rw-r--r--man3/hcreate.31
-rw-r--r--man3/hcreate_r.31
-rw-r--r--man3/hdestroy.31
-rw-r--r--man3/hdestroy_r.31
-rw-r--r--man3/herror.31
-rw-r--r--man3/hsearch.3356
-rw-r--r--man3/hsearch_r.31
-rw-r--r--man3/hstrerror.31
-rw-r--r--man3/htobe16.31
-rw-r--r--man3/htobe32.31
-rw-r--r--man3/htobe64.31
-rw-r--r--man3/htole16.31
-rw-r--r--man3/htole32.31
-rw-r--r--man3/htole64.31
-rw-r--r--man3/htonl.31
-rw-r--r--man3/htons.31
-rw-r--r--man3/hypot.3158
-rw-r--r--man3/hypotf.31
-rw-r--r--man3/hypotl.31
-rw-r--r--man3/iconv.3236
-rw-r--r--man3/iconv_close.359
-rw-r--r--man3/iconv_open.3128
-rw-r--r--man3/if_freenameindex.31
-rw-r--r--man3/if_indextoname.31
-rw-r--r--man3/if_nameindex.3157
-rw-r--r--man3/if_nametoindex.3102
-rw-r--r--man3/ilogb.3153
-rw-r--r--man3/ilogbf.31
-rw-r--r--man3/ilogbl.31
-rw-r--r--man3/imaxabs.31
-rw-r--r--man3/imaxdiv.31
-rw-r--r--man3/index.344
-rw-r--r--man3/inet.3337
-rw-r--r--man3/inet_addr.31
-rw-r--r--man3/inet_aton.31
-rw-r--r--man3/inet_lnaof.31
-rw-r--r--man3/inet_makeaddr.31
-rw-r--r--man3/inet_net_ntop.31
-rw-r--r--man3/inet_net_pton.3369
-rw-r--r--man3/inet_netof.31
-rw-r--r--man3/inet_network.31
-rw-r--r--man3/inet_ntoa.31
-rw-r--r--man3/inet_ntop.3125
-rw-r--r--man3/inet_pton.3226
-rw-r--r--man3/initgroups.3101
-rw-r--r--man3/initstate.31
-rw-r--r--man3/initstate_r.31
-rw-r--r--man3/innetgr.31
-rw-r--r--man3/insque.3251
-rw-r--r--man3/intro.3135
-rw-r--r--man3/iruserok.31
-rw-r--r--man3/iruserok_af.31
-rw-r--r--man3/isalnum.31
-rw-r--r--man3/isalnum_l.31
-rw-r--r--man3/isalpha.3408
-rw-r--r--man3/isalpha_l.31
-rw-r--r--man3/isascii.31
-rw-r--r--man3/isascii_l.31
-rw-r--r--man3/isatty.371
-rw-r--r--man3/isblank.31
-rw-r--r--man3/isblank_l.31
-rw-r--r--man3/iscntrl.31
-rw-r--r--man3/iscntrl_l.31
-rw-r--r--man3/isdigit.31
-rw-r--r--man3/isdigit_l.31
-rw-r--r--man3/isfdtype.377
-rw-r--r--man3/isfinite.31
-rw-r--r--man3/isgraph.31
-rw-r--r--man3/isgraph_l.31
-rw-r--r--man3/isgreater.3147
-rw-r--r--man3/isgreaterequal.31
-rw-r--r--man3/isinf.31
-rw-r--r--man3/isinff.31
-rw-r--r--man3/isinfl.31
-rw-r--r--man3/isless.31
-rw-r--r--man3/islessequal.31
-rw-r--r--man3/islessgreater.31
-rw-r--r--man3/islower.31
-rw-r--r--man3/islower_l.31
-rw-r--r--man3/isnan.31
-rw-r--r--man3/isnanf.31
-rw-r--r--man3/isnanl.31
-rw-r--r--man3/isnormal.31
-rw-r--r--man3/isprint.31
-rw-r--r--man3/isprint_l.31
-rw-r--r--man3/ispunct.31
-rw-r--r--man3/ispunct_l.31
-rw-r--r--man3/isspace.31
-rw-r--r--man3/isspace_l.31
-rw-r--r--man3/isunordered.31
-rw-r--r--man3/isupper.31
-rw-r--r--man3/isupper_l.31
-rw-r--r--man3/iswalnum.398
-rw-r--r--man3/iswalpha.399
-rw-r--r--man3/iswblank.392
-rw-r--r--man3/iswcntrl.383
-rw-r--r--man3/iswctype.397
-rw-r--r--man3/iswdigit.398
-rw-r--r--man3/iswgraph.391
-rw-r--r--man3/iswlower.3109
-rw-r--r--man3/iswprint.377
-rw-r--r--man3/iswpunct.393
-rw-r--r--man3/iswspace.386
-rw-r--r--man3/iswupper.3103
-rw-r--r--man3/iswxdigit.390
-rw-r--r--man3/isxdigit.31
-rw-r--r--man3/isxdigit_l.31
-rw-r--r--man3/j0.3194
-rw-r--r--man3/j0f.31
-rw-r--r--man3/j0l.31
-rw-r--r--man3/j1.31
-rw-r--r--man3/j1f.31
-rw-r--r--man3/j1l.31
-rw-r--r--man3/jn.31
-rw-r--r--man3/jnf.31
-rw-r--r--man3/jnl.31
-rw-r--r--man3/jrand48.31
-rw-r--r--man3/jrand48_r.31
-rw-r--r--man3/key_decryptsession.31
-rw-r--r--man3/key_encryptsession.31
-rw-r--r--man3/key_gendes.31
-rw-r--r--man3/key_secretkey_is_set.31
-rw-r--r--man3/key_setsecret.390
-rw-r--r--man3/killpg.3113
-rw-r--r--man3/klogctl.31
-rw-r--r--man3/l64a.31
-rw-r--r--man3/labs.31
-rw-r--r--man3/lckpwdf.31
-rw-r--r--man3/lcong48.31
-rw-r--r--man3/lcong48_r.31
-rw-r--r--man3/ldexp.3134
-rw-r--r--man3/ldexpf.31
-rw-r--r--man3/ldexpl.31
-rw-r--r--man3/ldiv.31
-rw-r--r--man3/le16toh.31
-rw-r--r--man3/le32toh.31
-rw-r--r--man3/le64toh.31
-rw-r--r--man3/lfind.31
-rw-r--r--man3/lgamma.3202
-rw-r--r--man3/lgamma_r.31
-rw-r--r--man3/lgammaf.31
-rw-r--r--man3/lgammaf_r.31
-rw-r--r--man3/lgammal.31
-rw-r--r--man3/lgammal_r.31
-rw-r--r--man3/lio_listio.3227
-rw-r--r--man3/list.3308
-rw-r--r--man3/llabs.31
-rw-r--r--man3/lldiv.31
-rw-r--r--man3/llrint.31
-rw-r--r--man3/llrintf.31
-rw-r--r--man3/llrintl.31
-rw-r--r--man3/llround.31
-rw-r--r--man3/llroundf.31
-rw-r--r--man3/llroundl.31
-rw-r--r--man3/localeconv.384
-rw-r--r--man3/localtime.31
-rw-r--r--man3/localtime_r.31
-rw-r--r--man3/lockf.3181
-rw-r--r--man3/log.3143
-rw-r--r--man3/log10.397
-rw-r--r--man3/log10f.31
-rw-r--r--man3/log10l.31
-rw-r--r--man3/log1p.3153
-rw-r--r--man3/log1pf.31
-rw-r--r--man3/log1pl.31
-rw-r--r--man3/log2.396
-rw-r--r--man3/log2f.31
-rw-r--r--man3/log2l.31
-rw-r--r--man3/logb.3144
-rw-r--r--man3/logbf.31
-rw-r--r--man3/logbl.31
-rw-r--r--man3/logf.31
-rw-r--r--man3/login.3151
-rw-r--r--man3/login_tty.31
-rw-r--r--man3/logl.31
-rw-r--r--man3/logout.31
-rw-r--r--man3/logwtmp.31
-rw-r--r--man3/longjmp.31
-rw-r--r--man3/lrand48.31
-rw-r--r--man3/lrand48_r.31
-rw-r--r--man3/lrint.3113
-rw-r--r--man3/lrintf.31
-rw-r--r--man3/lrintl.31
-rw-r--r--man3/lround.3116
-rw-r--r--man3/lroundf.31
-rw-r--r--man3/lroundl.31
-rw-r--r--man3/lsearch.397
-rw-r--r--man3/lseek64.3209
-rw-r--r--man3/lutimes.31
-rw-r--r--man3/major.31
-rw-r--r--man3/makecontext.3233
-rw-r--r--man3/makedev.395
-rw-r--r--man3/mallinfo.3338
-rw-r--r--man3/mallinfo2.31
-rw-r--r--man3/malloc.3459
-rw-r--r--man3/malloc_get_state.3118
-rw-r--r--man3/malloc_hook.3154
-rw-r--r--man3/malloc_info.3260
-rw-r--r--man3/malloc_set_state.31
-rw-r--r--man3/malloc_stats.368
-rw-r--r--man3/malloc_trim.384
-rw-r--r--man3/malloc_usable_size.363
-rw-r--r--man3/mallopt.3619
-rw-r--r--man3/matherr.3431
-rw-r--r--man3/mblen.3120
-rw-r--r--man3/mbrlen.3133
-rw-r--r--man3/mbrtowc.3204
-rw-r--r--man3/mbsinit.3120
-rw-r--r--man3/mbsnrtowcs.3200
-rw-r--r--man3/mbsrtowcs.3164
-rw-r--r--man3/mbstowcs.3244
-rw-r--r--man3/mbtowc.3153
-rw-r--r--man3/mcheck.3214
-rw-r--r--man3/mcheck_check_all.31
-rw-r--r--man3/mcheck_pedantic.31
-rw-r--r--man3/memalign.31
-rw-r--r--man3/memccpy.382
-rw-r--r--man3/memchr.3145
-rw-r--r--man3/memcmp.386
-rw-r--r--man3/memcpy.3109
-rw-r--r--man3/memfrob.363
-rw-r--r--man3/memmem.392
-rw-r--r--man3/memmove.374
-rw-r--r--man3/mempcpy.397
-rw-r--r--man3/memrchr.31
-rw-r--r--man3/memset.363
-rw-r--r--man3/minor.31
-rw-r--r--man3/mkdtemp.390
-rw-r--r--man3/mkfifo.3204
-rw-r--r--man3/mkfifoat.31
-rw-r--r--man3/mkostemp.31
-rw-r--r--man3/mkostemps.31
-rw-r--r--man3/mkstemp.3250
-rw-r--r--man3/mkstemps.31
-rw-r--r--man3/mktemp.3121
-rw-r--r--man3/mktime.31
-rw-r--r--man3/mmap64.31
-rw-r--r--man3/modf.397
-rw-r--r--man3/modff.31
-rw-r--r--man3/modfl.31
-rw-r--r--man3/mpool.3205
-rw-r--r--man3/mprobe.31
-rw-r--r--man3/mq_close.373
-rw-r--r--man3/mq_getattr.3232
-rw-r--r--man3/mq_notify.3276
-rw-r--r--man3/mq_open.3301
-rw-r--r--man3/mq_receive.3166
-rw-r--r--man3/mq_send.3173
-rw-r--r--man3/mq_setattr.31
-rw-r--r--man3/mq_timedreceive.31
-rw-r--r--man3/mq_timedsend.31
-rw-r--r--man3/mq_unlink.371
-rw-r--r--man3/mrand48.31
-rw-r--r--man3/mrand48_r.31
-rw-r--r--man3/mtrace.3183
-rw-r--r--man3/muntrace.31
-rw-r--r--man3/nan.399
-rw-r--r--man3/nanf.31
-rw-r--r--man3/nanl.31
-rw-r--r--man3/nearbyint.31
-rw-r--r--man3/nearbyintf.31
-rw-r--r--man3/nearbyintl.31
-rw-r--r--man3/netlink.387
-rw-r--r--man3/newlocale.3356
-rw-r--r--man3/nextafter.3203
-rw-r--r--man3/nextafterf.31
-rw-r--r--man3/nextafterl.31
-rw-r--r--man3/nextdown.31
-rw-r--r--man3/nextdownf.31
-rw-r--r--man3/nextdownl.31
-rw-r--r--man3/nexttoward.31
-rw-r--r--man3/nexttowardf.31
-rw-r--r--man3/nexttowardl.31
-rw-r--r--man3/nextup.397
-rw-r--r--man3/nextupf.31
-rw-r--r--man3/nextupl.31
-rw-r--r--man3/nftw.31
-rw-r--r--man3/nl_langinfo.3356
-rw-r--r--man3/nl_langinfo_l.31
-rw-r--r--man3/nrand48.31
-rw-r--r--man3/nrand48_r.31
-rw-r--r--man3/ntohl.31
-rw-r--r--man3/ntohs.31
-rw-r--r--man3/ntp_adjtime.31
-rw-r--r--man3/ntp_gettime.3138
-rw-r--r--man3/ntp_gettimex.31
-rw-r--r--man3/offsetof.3110
-rw-r--r--man3/on_exit.3108
-rw-r--r--man3/open_memstream.3144
-rw-r--r--man3/open_wmemstream.31
-rw-r--r--man3/opendir.3148
-rw-r--r--man3/openlog.31
-rw-r--r--man3/openpty.3180
-rw-r--r--man3/optarg.31
-rw-r--r--man3/opterr.31
-rw-r--r--man3/optind.31
-rw-r--r--man3/optopt.31
-rw-r--r--man3/passwd2des.31
-rw-r--r--man3/pathconf.31
-rw-r--r--man3/pclose.31
-rw-r--r--man3/perror.3145
-rw-r--r--man3/pmap_getmaps.31
-rw-r--r--man3/pmap_getport.31
-rw-r--r--man3/pmap_rmtcall.31
-rw-r--r--man3/pmap_set.31
-rw-r--r--man3/pmap_unset.31
-rw-r--r--man3/popen.3211
-rw-r--r--man3/posix_fallocate.3182
-rw-r--r--man3/posix_madvise.3112
-rw-r--r--man3/posix_memalign.3279
-rw-r--r--man3/posix_openpt.3110
-rw-r--r--man3/posix_spawn.3823
-rw-r--r--man3/posix_spawnp.31
-rw-r--r--man3/pow.3386
-rw-r--r--man3/pow10.359
-rw-r--r--man3/pow10f.31
-rw-r--r--man3/pow10l.31
-rw-r--r--man3/powerof2.346
-rw-r--r--man3/powf.31
-rw-r--r--man3/powl.31
-rw-r--r--man3/printf.31242
-rw-r--r--man3/profil.397
-rw-r--r--man3/program_invocation_name.366
-rw-r--r--man3/program_invocation_short_name.31
-rw-r--r--man3/psiginfo.31
-rw-r--r--man3/psignal.3117
-rw-r--r--man3/pthread_atfork.3108
-rw-r--r--man3/pthread_attr_destroy.31
-rw-r--r--man3/pthread_attr_getaffinity_np.31
-rw-r--r--man3/pthread_attr_getdetachstate.31
-rw-r--r--man3/pthread_attr_getguardsize.31
-rw-r--r--man3/pthread_attr_getinheritsched.31
-rw-r--r--man3/pthread_attr_getschedparam.31
-rw-r--r--man3/pthread_attr_getschedpolicy.31
-rw-r--r--man3/pthread_attr_getscope.31
-rw-r--r--man3/pthread_attr_getsigmask_np.31
-rw-r--r--man3/pthread_attr_getstack.31
-rw-r--r--man3/pthread_attr_getstackaddr.31
-rw-r--r--man3/pthread_attr_getstacksize.31
-rw-r--r--man3/pthread_attr_init.3316
-rw-r--r--man3/pthread_attr_setaffinity_np.3123
-rw-r--r--man3/pthread_attr_setdetachstate.3118
-rw-r--r--man3/pthread_attr_setguardsize.3166
-rw-r--r--man3/pthread_attr_setinheritsched.3143
-rw-r--r--man3/pthread_attr_setschedparam.3128
-rw-r--r--man3/pthread_attr_setschedpolicy.3115
-rw-r--r--man3/pthread_attr_setscope.3142
-rw-r--r--man3/pthread_attr_setsigmask_np.3133
-rw-r--r--man3/pthread_attr_setstack.3167
-rw-r--r--man3/pthread_attr_setstackaddr.3118
-rw-r--r--man3/pthread_attr_setstacksize.3117
-rw-r--r--man3/pthread_cancel.3240
-rw-r--r--man3/pthread_cleanup_pop.31
-rw-r--r--man3/pthread_cleanup_pop_restore_np.31
-rw-r--r--man3/pthread_cleanup_push.3322
-rw-r--r--man3/pthread_cleanup_push_defer_np.3100
-rw-r--r--man3/pthread_create.3412
-rw-r--r--man3/pthread_detach.3108
-rw-r--r--man3/pthread_equal.360
-rw-r--r--man3/pthread_exit.3109
-rw-r--r--man3/pthread_getaffinity_np.31
-rw-r--r--man3/pthread_getattr_default_np.3195
-rw-r--r--man3/pthread_getattr_np.3359
-rw-r--r--man3/pthread_getconcurrency.31
-rw-r--r--man3/pthread_getcpuclockid.3183
-rw-r--r--man3/pthread_getname_np.31
-rw-r--r--man3/pthread_getschedparam.31
-rw-r--r--man3/pthread_join.3137
-rw-r--r--man3/pthread_kill.3111
-rw-r--r--man3/pthread_kill_other_threads_np.372
-rw-r--r--man3/pthread_mutex_consistent.386
-rw-r--r--man3/pthread_mutex_consistent_np.31
-rw-r--r--man3/pthread_mutexattr_destroy.31
-rw-r--r--man3/pthread_mutexattr_getpshared.382
-rw-r--r--man3/pthread_mutexattr_getrobust.31
-rw-r--r--man3/pthread_mutexattr_getrobust_np.31
-rw-r--r--man3/pthread_mutexattr_init.353
-rw-r--r--man3/pthread_mutexattr_setpshared.31
-rw-r--r--man3/pthread_mutexattr_setrobust.3264
-rw-r--r--man3/pthread_mutexattr_setrobust_np.31
-rw-r--r--man3/pthread_rwlockattr_getkind_np.31
-rw-r--r--man3/pthread_rwlockattr_setkind_np.3119
-rw-r--r--man3/pthread_self.380
-rw-r--r--man3/pthread_setaffinity_np.3210
-rw-r--r--man3/pthread_setattr_default_np.31
-rw-r--r--man3/pthread_setcancelstate.3198
-rw-r--r--man3/pthread_setcanceltype.31
-rw-r--r--man3/pthread_setconcurrency.3103
-rw-r--r--man3/pthread_setname_np.3205
-rw-r--r--man3/pthread_setschedparam.3450
-rw-r--r--man3/pthread_setschedprio.3104
-rw-r--r--man3/pthread_sigmask.3165
-rw-r--r--man3/pthread_sigqueue.3112
-rw-r--r--man3/pthread_spin_destroy.31
-rw-r--r--man3/pthread_spin_init.3148
-rw-r--r--man3/pthread_spin_lock.3102
-rw-r--r--man3/pthread_spin_trylock.31
-rw-r--r--man3/pthread_spin_unlock.31
-rw-r--r--man3/pthread_testcancel.367
-rw-r--r--man3/pthread_timedjoin_np.31
-rw-r--r--man3/pthread_tryjoin_np.3157
-rw-r--r--man3/pthread_yield.381
-rw-r--r--man3/ptsname.3147
-rw-r--r--man3/ptsname_r.31
-rw-r--r--man3/putc.31
-rw-r--r--man3/putc_unlocked.31
-rw-r--r--man3/putchar.31
-rw-r--r--man3/putchar_unlocked.31
-rw-r--r--man3/putenv.3144
-rw-r--r--man3/putgrent.369
-rw-r--r--man3/putpwent.399
-rw-r--r--man3/puts.3127
-rw-r--r--man3/putspent.31
-rw-r--r--man3/pututline.31
-rw-r--r--man3/pututxline.31
-rw-r--r--man3/putw.31
-rw-r--r--man3/putwc.31
-rw-r--r--man3/putwc_unlocked.31
-rw-r--r--man3/putwchar.395
-rw-r--r--man3/putwchar_unlocked.31
-rw-r--r--man3/pvalloc.31
-rw-r--r--man3/qecvt.3109
-rw-r--r--man3/qecvt_r.31
-rw-r--r--man3/qfcvt.31
-rw-r--r--man3/qfcvt_r.31
-rw-r--r--man3/qgcvt.31
-rw-r--r--man3/qsort.3160
-rw-r--r--man3/qsort_r.31
-rw-r--r--man3/queue.31
-rw-r--r--man3/raise.386
-rw-r--r--man3/rand.3243
-rw-r--r--man3/rand_r.31
-rw-r--r--man3/random.3196
-rw-r--r--man3/random_r.3179
-rw-r--r--man3/rawmemchr.31
-rw-r--r--man3/rcmd.3303
-rw-r--r--man3/rcmd_af.31
-rw-r--r--man3/re_comp.378
-rw-r--r--man3/re_exec.31
-rw-r--r--man3/readdir.3307
-rw-r--r--man3/readdir_r.3148
-rw-r--r--man3/realloc.31
-rw-r--r--man3/reallocarray.31
-rw-r--r--man3/realpath.3234
-rw-r--r--man3/recno.3207
-rw-r--r--man3/regcomp.31
-rw-r--r--man3/regerror.31
-rw-r--r--man3/regex.3410
-rw-r--r--man3/regexec.31
-rw-r--r--man3/regfree.31
-rw-r--r--man3/register_printf_modifier.31
-rw-r--r--man3/register_printf_specifier.31
-rw-r--r--man3/register_printf_type.31
-rw-r--r--man3/registerrpc.31
-rw-r--r--man3/remainder.3237
-rw-r--r--man3/remainderf.31
-rw-r--r--man3/remainderl.31
-rw-r--r--man3/remove.396
-rw-r--r--man3/remque.31
-rw-r--r--man3/remquo.3141
-rw-r--r--man3/remquof.31
-rw-r--r--man3/remquol.31
-rw-r--r--man3/res_init.31
-rw-r--r--man3/res_mkquery.31
-rw-r--r--man3/res_nclose.31
-rw-r--r--man3/res_ninit.31
-rw-r--r--man3/res_nmkquery.31
-rw-r--r--man3/res_nquery.31
-rw-r--r--man3/res_nquerydomain.31
-rw-r--r--man3/res_nsearch.31
-rw-r--r--man3/res_nsend.31
-rw-r--r--man3/res_query.31
-rw-r--r--man3/res_querydomain.31
-rw-r--r--man3/res_search.31
-rw-r--r--man3/res_send.31
-rw-r--r--man3/resolver.3512
-rw-r--r--man3/rewind.31
-rw-r--r--man3/rewinddir.363
-rw-r--r--man3/rexec.3164
-rw-r--r--man3/rexec_af.31
-rw-r--r--man3/rindex.31
-rw-r--r--man3/rint.3148
-rw-r--r--man3/rintf.31
-rw-r--r--man3/rintl.31
-rw-r--r--man3/round.3113
-rw-r--r--man3/roundf.31
-rw-r--r--man3/roundl.31
-rw-r--r--man3/roundup.356
-rw-r--r--man3/rpc.31204
-rw-r--r--man3/rpmatch.3172
-rw-r--r--man3/rresvport.31
-rw-r--r--man3/rresvport_af.31
-rw-r--r--man3/rtime.3155
-rw-r--r--man3/rtnetlink.3127
-rw-r--r--man3/ruserok.31
-rw-r--r--man3/ruserok_af.31
-rw-r--r--man3/scalb.3199
-rw-r--r--man3/scalbf.31
-rw-r--r--man3/scalbl.31
-rw-r--r--man3/scalbln.3177
-rw-r--r--man3/scalblnf.31
-rw-r--r--man3/scalblnl.31
-rw-r--r--man3/scalbn.31
-rw-r--r--man3/scalbnf.31
-rw-r--r--man3/scalbnl.31
-rw-r--r--man3/scandir.3311
-rw-r--r--man3/scandirat.31
-rw-r--r--man3/scanf.3145
-rw-r--r--man3/sched_getcpu.392
-rw-r--r--man3/secure_getenv.31
-rw-r--r--man3/seed48.31
-rw-r--r--man3/seed48_r.31
-rw-r--r--man3/seekdir.392
-rw-r--r--man3/sem_close.366
-rw-r--r--man3/sem_destroy.378
-rw-r--r--man3/sem_getvalue.377
-rw-r--r--man3/sem_init.3111
-rw-r--r--man3/sem_open.3178
-rw-r--r--man3/sem_post.376
-rw-r--r--man3/sem_timedwait.31
-rw-r--r--man3/sem_trywait.31
-rw-r--r--man3/sem_unlink.369
-rw-r--r--man3/sem_wait.3254
-rw-r--r--man3/setaliasent.3185
-rw-r--r--man3/setbuf.3230
-rw-r--r--man3/setbuffer.31
-rw-r--r--man3/setcontext.31
-rw-r--r--man3/setenv.3153
-rw-r--r--man3/setfsent.31
-rw-r--r--man3/setgrent.31
-rw-r--r--man3/sethostent.31
-rw-r--r--man3/sethostid.31
-rw-r--r--man3/setjmp.3333
-rw-r--r--man3/setkey.31
-rw-r--r--man3/setkey_r.31
-rw-r--r--man3/setlinebuf.31
-rw-r--r--man3/setlocale.3255
-rw-r--r--man3/setlogmask.388
-rw-r--r--man3/setmntent.31
-rw-r--r--man3/setnetent.31
-rw-r--r--man3/setnetgrent.3166
-rw-r--r--man3/setprotoent.31
-rw-r--r--man3/setpwent.31
-rw-r--r--man3/setrpcent.31
-rw-r--r--man3/setservent.31
-rw-r--r--man3/setspent.31
-rw-r--r--man3/setstate.31
-rw-r--r--man3/setstate_r.31
-rw-r--r--man3/setttyent.31
-rw-r--r--man3/setusershell.31
-rw-r--r--man3/setutent.31
-rw-r--r--man3/setutxent.31
-rw-r--r--man3/setvbuf.31
-rw-r--r--man3/sgetspent.31
-rw-r--r--man3/sgetspent_r.31
-rw-r--r--man3/shm_open.3511
-rw-r--r--man3/shm_unlink.31
-rw-r--r--man3/sigabbrev_np.31
-rw-r--r--man3/sigaddset.31
-rw-r--r--man3/sigandset.31
-rw-r--r--man3/sigblock.31
-rw-r--r--man3/sigdelset.31
-rw-r--r--man3/sigdescr_np.31
-rw-r--r--man3/sigemptyset.31
-rw-r--r--man3/sigfillset.31
-rw-r--r--man3/siggetmask.31
-rw-r--r--man3/sighold.31
-rw-r--r--man3/sigignore.31
-rw-r--r--man3/siginterrupt.399
-rw-r--r--man3/sigisemptyset.31
-rw-r--r--man3/sigismember.31
-rw-r--r--man3/siglongjmp.31
-rw-r--r--man3/sigmask.31
-rw-r--r--man3/signbit.382
-rw-r--r--man3/signgam.31
-rw-r--r--man3/significand.380
-rw-r--r--man3/significandf.31
-rw-r--r--man3/significandl.31
-rw-r--r--man3/sigorset.31
-rw-r--r--man3/sigpause.3128
-rw-r--r--man3/sigqueue.3165
-rw-r--r--man3/sigrelse.31
-rw-r--r--man3/sigset.3268
-rw-r--r--man3/sigsetjmp.31
-rw-r--r--man3/sigsetmask.31
-rw-r--r--man3/sigsetops.3193
-rw-r--r--man3/sigstack.33
-rw-r--r--man3/sigvec.3285
-rw-r--r--man3/sigwait.3110
-rw-r--r--man3/simpleq.31
-rw-r--r--man3/sin.3125
-rw-r--r--man3/sincos.3115
-rw-r--r--man3/sincosf.31
-rw-r--r--man3/sincosl.31
-rw-r--r--man3/sinf.31
-rw-r--r--man3/sinh.3132
-rw-r--r--man3/sinhf.31
-rw-r--r--man3/sinhl.31
-rw-r--r--man3/sinl.31
-rw-r--r--man3/sleep.382
-rw-r--r--man3/slist.3319
-rw-r--r--man3/snprintf.31
-rw-r--r--man3/sockatmark.3141
-rw-r--r--man3/sprintf.31
-rw-r--r--man3/sqrt.3112
-rw-r--r--man3/sqrtf.31
-rw-r--r--man3/sqrtl.31
-rw-r--r--man3/srand.31
-rw-r--r--man3/srand48.31
-rw-r--r--man3/srand48_r.31
-rw-r--r--man3/srandom.31
-rw-r--r--man3/srandom_r.31
-rw-r--r--man3/sscanf.3744
-rw-r--r--man3/ssignal.31
-rw-r--r--man3/stailq.3377
-rw-r--r--man3/static_assert.3119
-rw-r--r--man3/statvfs.3251
-rw-r--r--man3/stdarg.3298
-rw-r--r--man3/stderr.31
-rw-r--r--man3/stdin.3160
-rw-r--r--man3/stdio.3345
-rw-r--r--man3/stdio_ext.3138
-rw-r--r--man3/stdout.31
-rw-r--r--man3/stpcpy.31
-rw-r--r--man3/stpecpy.31
-rw-r--r--man3/stpecpyx.31
-rw-r--r--man3/stpncpy.3165
-rw-r--r--man3/strcasecmp.3115
-rw-r--r--man3/strcasestr.31
-rw-r--r--man3/strcat.31
-rw-r--r--man3/strchr.3132
-rw-r--r--man3/strchrnul.31
-rw-r--r--man3/strcmp.3211
-rw-r--r--man3/strcoll.389
-rw-r--r--man3/strcpy.3207
-rw-r--r--man3/strcspn.31
-rw-r--r--man3/strdup.3148
-rw-r--r--man3/strdupa.31
-rw-r--r--man3/strerror.3318
-rw-r--r--man3/strerror_l.31
-rw-r--r--man3/strerror_r.31
-rw-r--r--man3/strerrordesc_np.31
-rw-r--r--man3/strerrorname_np.31
-rw-r--r--man3/strfmon.3210
-rw-r--r--man3/strfmon_l.31
-rw-r--r--man3/strfromd.3233
-rw-r--r--man3/strfromf.31
-rw-r--r--man3/strfroml.31
-rw-r--r--man3/strfry.358
-rw-r--r--man3/strftime.3780
-rw-r--r--man3/strftime_l.31
-rw-r--r--man3/string.3224
-rw-r--r--man3/strlen.364
-rw-r--r--man3/strncasecmp.31
-rw-r--r--man3/strncat.3133
-rw-r--r--man3/strncmp.31
-rw-r--r--man3/strncpy.31
-rw-r--r--man3/strndup.31
-rw-r--r--man3/strndupa.31
-rw-r--r--man3/strnlen.386
-rw-r--r--man3/strpbrk.369
-rw-r--r--man3/strptime.3416
-rw-r--r--man3/strrchr.31
-rw-r--r--man3/strsep.3165
-rw-r--r--man3/strsignal.3168
-rw-r--r--man3/strspn.388
-rw-r--r--man3/strstr.399
-rw-r--r--man3/strtod.3208
-rw-r--r--man3/strtof.31
-rw-r--r--man3/strtoimax.371
-rw-r--r--man3/strtok.3289
-rw-r--r--man3/strtok_r.31
-rw-r--r--man3/strtol.3297
-rw-r--r--man3/strtold.31
-rw-r--r--man3/strtoll.31
-rw-r--r--man3/strtoq.31
-rw-r--r--man3/strtoul.3221
-rw-r--r--man3/strtoull.31
-rw-r--r--man3/strtoumax.31
-rw-r--r--man3/strtouq.31
-rw-r--r--man3/strverscmp.3149
-rw-r--r--man3/strxfrm.389
-rw-r--r--man3/svc_destroy.31
-rw-r--r--man3/svc_freeargs.31
-rw-r--r--man3/svc_getargs.31
-rw-r--r--man3/svc_getcaller.31
-rw-r--r--man3/svc_getreq.31
-rw-r--r--man3/svc_getreqset.31
-rw-r--r--man3/svc_register.31
-rw-r--r--man3/svc_run.31
-rw-r--r--man3/svc_sendreply.31
-rw-r--r--man3/svc_unregister.31
-rw-r--r--man3/svcerr_auth.31
-rw-r--r--man3/svcerr_decode.31
-rw-r--r--man3/svcerr_noproc.31
-rw-r--r--man3/svcerr_noprog.31
-rw-r--r--man3/svcerr_progvers.31
-rw-r--r--man3/svcerr_systemerr.31
-rw-r--r--man3/svcerr_weakauth.31
-rw-r--r--man3/svcfd_create.31
-rw-r--r--man3/svcraw_create.31
-rw-r--r--man3/svctcp_create.31
-rw-r--r--man3/svcudp_bufcreate.31
-rw-r--r--man3/svcudp_create.31
-rw-r--r--man3/swab.379
-rw-r--r--man3/swapcontext.31
-rw-r--r--man3/swprintf.31
-rw-r--r--man3/sys_errlist.31
-rw-r--r--man3/sys_nerr.31
-rw-r--r--man3/sys_siglist.31
-rw-r--r--man3/sysconf.3393
-rw-r--r--man3/syslog.3360
-rw-r--r--man3/system.3272
-rw-r--r--man3/sysv_signal.393
-rw-r--r--man3/tailq.3397
-rw-r--r--man3/tan.3149
-rw-r--r--man3/tanf.31
-rw-r--r--man3/tanh.3108
-rw-r--r--man3/tanhf.31
-rw-r--r--man3/tanhl.31
-rw-r--r--man3/tanl.31
-rw-r--r--man3/tcdrain.31
-rw-r--r--man3/tcflow.31
-rw-r--r--man3/tcflush.31
-rw-r--r--man3/tcgetattr.31
-rw-r--r--man3/tcgetpgrp.3128
-rw-r--r--man3/tcgetsid.376
-rw-r--r--man3/tcsendbreak.31
-rw-r--r--man3/tcsetattr.31
-rw-r--r--man3/tcsetpgrp.31
-rw-r--r--man3/tdelete.31
-rw-r--r--man3/tdestroy.31
-rw-r--r--man3/telldir.3103
-rw-r--r--man3/tempnam.3178
-rw-r--r--man3/termios.31240
-rw-r--r--man3/tfind.31
-rw-r--r--man3/tgamma.3219
-rw-r--r--man3/tgammaf.31
-rw-r--r--man3/tgammal.31
-rw-r--r--man3/timegm.395
-rw-r--r--man3/timelocal.31
-rw-r--r--man3/timeradd.3143
-rw-r--r--man3/timerclear.31
-rw-r--r--man3/timercmp.31
-rw-r--r--man3/timerisset.31
-rw-r--r--man3/timersub.31
-rw-r--r--man3/timezone.31
-rw-r--r--man3/tmpfile.3106
-rw-r--r--man3/tmpnam.3169
-rw-r--r--man3/tmpnam_r.31
-rw-r--r--man3/toascii.371
-rw-r--r--man3/tolower.31
-rw-r--r--man3/tolower_l.31
-rw-r--r--man3/toupper.3188
-rw-r--r--man3/toupper_l.31
-rw-r--r--man3/towctrans.385
-rw-r--r--man3/towlower.3132
-rw-r--r--man3/towlower_l.31
-rw-r--r--man3/towupper.3131
-rw-r--r--man3/towupper_l.31
-rw-r--r--man3/trunc.386
-rw-r--r--man3/truncf.31
-rw-r--r--man3/truncl.31
-rw-r--r--man3/tsearch.3353
-rw-r--r--man3/ttyname.3112
-rw-r--r--man3/ttyname_r.31
-rw-r--r--man3/ttyslot.3172
-rw-r--r--man3/twalk.31
-rw-r--r--man3/twalk_r.31
-rw-r--r--man3/tzname.31
-rw-r--r--man3/tzset.3247
-rw-r--r--man3/ualarm.3143
-rw-r--r--man3/ulckpwdf.31
-rw-r--r--man3/ulimit.390
-rw-r--r--man3/undocumented.3164
-rw-r--r--man3/ungetc.31
-rw-r--r--man3/ungetwc.3105
-rw-r--r--man3/unlocked_stdio.3197
-rw-r--r--man3/unlockpt.387
-rw-r--r--man3/unsetenv.31
-rw-r--r--man3/updwtmp.384
-rw-r--r--man3/updwtmpx.31
-rw-r--r--man3/uselocale.3102
-rw-r--r--man3/usleep.3126
-rw-r--r--man3/ustpcpy.31
-rw-r--r--man3/ustr2stp.31
-rw-r--r--man3/utmpname.31
-rw-r--r--man3/utmpxname.31
-rw-r--r--man3/va_arg.31
-rw-r--r--man3/va_copy.31
-rw-r--r--man3/va_end.31
-rw-r--r--man3/va_start.31
-rw-r--r--man3/valloc.31
-rw-r--r--man3/vasprintf.31
-rw-r--r--man3/vdprintf.31
-rw-r--r--man3/verr.31
-rw-r--r--man3/verrx.31
-rw-r--r--man3/versionsort.31
-rw-r--r--man3/vfprintf.31
-rw-r--r--man3/vfscanf.31
-rw-r--r--man3/vfwprintf.31
-rw-r--r--man3/vlimit.33
-rw-r--r--man3/vprintf.31
-rw-r--r--man3/vscanf.31
-rw-r--r--man3/vsnprintf.31
-rw-r--r--man3/vsprintf.31
-rw-r--r--man3/vsscanf.31
-rw-r--r--man3/vswprintf.31
-rw-r--r--man3/vsyslog.31
-rw-r--r--man3/vtimes.33
-rw-r--r--man3/vwarn.31
-rw-r--r--man3/vwarnx.31
-rw-r--r--man3/vwprintf.31
-rw-r--r--man3/warn.31
-rw-r--r--man3/warnx.31
-rw-r--r--man3/wcpcpy.382
-rw-r--r--man3/wcpncpy.3109
-rw-r--r--man3/wcrtomb.3147
-rw-r--r--man3/wcscasecmp.3102
-rw-r--r--man3/wcscat.373
-rw-r--r--man3/wcschr.372
-rw-r--r--man3/wcscmp.382
-rw-r--r--man3/wcscpy.375
-rw-r--r--man3/wcscspn.384
-rw-r--r--man3/wcsdup.386
-rw-r--r--man3/wcslen.368
-rw-r--r--man3/wcsncasecmp.3108
-rw-r--r--man3/wcsncat.375
-rw-r--r--man3/wcsncmp.396
-rw-r--r--man3/wcsncpy.392
-rw-r--r--man3/wcsnlen.394
-rw-r--r--man3/wcsnrtombs.3190
-rw-r--r--man3/wcspbrk.372
-rw-r--r--man3/wcsrchr.369
-rw-r--r--man3/wcsrtombs.3165
-rw-r--r--man3/wcsspn.381
-rw-r--r--man3/wcsstr.378
-rw-r--r--man3/wcstoimax.361
-rw-r--r--man3/wcstok.3120
-rw-r--r--man3/wcstombs.3128
-rw-r--r--man3/wcstoumax.31
-rw-r--r--man3/wcswidth.376
-rw-r--r--man3/wctob.389
-rw-r--r--man3/wctomb.3122
-rw-r--r--man3/wctrans.391
-rw-r--r--man3/wctype.3103
-rw-r--r--man3/wcwidth.380
-rw-r--r--man3/wmemchr.373
-rw-r--r--man3/wmemcmp.393
-rw-r--r--man3/wmemcpy.378
-rw-r--r--man3/wmemmove.373
-rw-r--r--man3/wmempcpy.31
-rw-r--r--man3/wmemset.364
-rw-r--r--man3/wordexp.3243
-rw-r--r--man3/wordfree.31
-rw-r--r--man3/wprintf.3276
-rw-r--r--man3/xcrypt.398
-rw-r--r--man3/xdecrypt.31
-rw-r--r--man3/xdr.3612
-rw-r--r--man3/xdr_accepted_reply.31
-rw-r--r--man3/xdr_array.31
-rw-r--r--man3/xdr_authunix_parms.31
-rw-r--r--man3/xdr_bool.31
-rw-r--r--man3/xdr_bytes.31
-rw-r--r--man3/xdr_callhdr.31
-rw-r--r--man3/xdr_callmsg.31
-rw-r--r--man3/xdr_char.31
-rw-r--r--man3/xdr_destroy.31
-rw-r--r--man3/xdr_double.31
-rw-r--r--man3/xdr_enum.31
-rw-r--r--man3/xdr_float.31
-rw-r--r--man3/xdr_free.31
-rw-r--r--man3/xdr_getpos.31
-rw-r--r--man3/xdr_inline.31
-rw-r--r--man3/xdr_int.31
-rw-r--r--man3/xdr_long.31
-rw-r--r--man3/xdr_opaque.31
-rw-r--r--man3/xdr_opaque_auth.31
-rw-r--r--man3/xdr_pmap.31
-rw-r--r--man3/xdr_pmaplist.31
-rw-r--r--man3/xdr_pointer.31
-rw-r--r--man3/xdr_reference.31
-rw-r--r--man3/xdr_rejected_reply.31
-rw-r--r--man3/xdr_replymsg.31
-rw-r--r--man3/xdr_setpos.31
-rw-r--r--man3/xdr_short.31
-rw-r--r--man3/xdr_string.31
-rw-r--r--man3/xdr_u_char.31
-rw-r--r--man3/xdr_u_int.31
-rw-r--r--man3/xdr_u_long.31
-rw-r--r--man3/xdr_u_short.31
-rw-r--r--man3/xdr_union.31
-rw-r--r--man3/xdr_vector.31
-rw-r--r--man3/xdr_void.31
-rw-r--r--man3/xdr_wrapstring.31
-rw-r--r--man3/xdrmem_create.31
-rw-r--r--man3/xdrrec_create.31
-rw-r--r--man3/xdrrec_endofrecord.31
-rw-r--r--man3/xdrrec_eof.31
-rw-r--r--man3/xdrrec_skiprecord.31
-rw-r--r--man3/xdrstdio_create.31
-rw-r--r--man3/xencrypt.31
-rw-r--r--man3/xprt_register.31
-rw-r--r--man3/xprt_unregister.31
-rw-r--r--man3/y0.3275
-rw-r--r--man3/y0f.31
-rw-r--r--man3/y0l.31
-rw-r--r--man3/y1.31
-rw-r--r--man3/y1f.31
-rw-r--r--man3/y1l.31
-rw-r--r--man3/yn.31
-rw-r--r--man3/ynf.31
-rw-r--r--man3/ynl.31
-rw-r--r--man3/zustr2stp.31
-rw-r--r--man3/zustr2ustp.31
-rw-r--r--man3const/EOF.3const42
-rw-r--r--man3const/EXIT_FAILURE.3const1
-rw-r--r--man3const/EXIT_SUCCESS.3const61
-rw-r--r--man3const/NULL.3const74
-rw-r--r--man3const/PA_CHAR.3const1
-rw-r--r--man3const/PA_DOUBLE.3const1
-rw-r--r--man3const/PA_FLAG_LONG.3const1
-rw-r--r--man3const/PA_FLAG_LONG_DOUBLE.3const1
-rw-r--r--man3const/PA_FLAG_LONG_LONG.3const1
-rw-r--r--man3const/PA_FLAG_PTR.3const1
-rw-r--r--man3const/PA_FLAG_SHORT.3const1
-rw-r--r--man3const/PA_FLOAT.3const1
-rw-r--r--man3const/PA_INT.3const1
-rw-r--r--man3const/PA_LAST.3const1
-rw-r--r--man3const/PA_POINTER.3const1
-rw-r--r--man3const/PA_STRING.3const1
-rw-r--r--man3const/PA_WCHAR.3const1
-rw-r--r--man3const/PA_WSTRING.3const1
-rw-r--r--man3head/printf.h.3head582
-rw-r--r--man3head/sysexits.h.3head200
-rw-r--r--man3type/FILE.3type36
-rw-r--r--man3type/aiocb.3type42
-rw-r--r--man3type/blkcnt_t.3type30
-rw-r--r--man3type/blksize_t.3type30
-rw-r--r--man3type/cc_t.3type35
-rw-r--r--man3type/clock_t.3type37
-rw-r--r--man3type/clockid_t.3type28
-rw-r--r--man3type/dev_t.3type33
-rw-r--r--man3type/div_t.3type58
-rw-r--r--man3type/double_t.3type56
-rw-r--r--man3type/epoll_data.3type1
-rw-r--r--man3type/epoll_data_t.3type1
-rw-r--r--man3type/epoll_event.3type55
-rw-r--r--man3type/fenv_t.3type35
-rw-r--r--man3type/fexcept_t.3type1
-rw-r--r--man3type/float_t.3type1
-rw-r--r--man3type/gid_t.3type1
-rw-r--r--man3type/id_t.3type110
-rw-r--r--man3type/imaxdiv_t.3type1
-rw-r--r--man3type/in6_addr.3type1
-rw-r--r--man3type/in_addr.3type1
-rw-r--r--man3type/in_addr_t.3type1
-rw-r--r--man3type/in_port_t.3type1
-rw-r--r--man3type/int16_t.3type1
-rw-r--r--man3type/int32_t.3type1
-rw-r--r--man3type/int64_t.3type1
-rw-r--r--man3type/int8_t.3type1
-rw-r--r--man3type/intN_t.3type177
-rw-r--r--man3type/intmax_t.3type97
-rw-r--r--man3type/intptr_t.3type107
-rw-r--r--man3type/iovec.3type49
-rw-r--r--man3type/itimerspec.3type33
-rw-r--r--man3type/lconv.3type56
-rw-r--r--man3type/ldiv_t.3type1
-rw-r--r--man3type/lldiv_t.3type1
-rw-r--r--man3type/loff_t.3type1
-rw-r--r--man3type/mode_t.3type40
-rw-r--r--man3type/off64_t.3type1
-rw-r--r--man3type/off_t.3type92
-rw-r--r--man3type/pid_t.3type1
-rw-r--r--man3type/printf_arginfo_size_function.3type1
-rw-r--r--man3type/printf_function.3type1
-rw-r--r--man3type/printf_info.3type1
-rw-r--r--man3type/printf_va_arg_function.3type1
-rw-r--r--man3type/ptrdiff_t.3type47
-rw-r--r--man3type/regex_t.3type1
-rw-r--r--man3type/regmatch_t.3type1
-rw-r--r--man3type/regoff_t.3type1
-rw-r--r--man3type/sa_family_t.3type1
-rw-r--r--man3type/sigevent.3type1
-rw-r--r--man3type/siginfo_t.3type1
-rw-r--r--man3type/sigset_t.3type1
-rw-r--r--man3type/sigval.3type1
-rw-r--r--man3type/size_t.3type181
-rw-r--r--man3type/sockaddr.3type154
-rw-r--r--man3type/sockaddr_in.3type1
-rw-r--r--man3type/sockaddr_in6.3type1
-rw-r--r--man3type/sockaddr_storage.3type1
-rw-r--r--man3type/sockaddr_un.3type1
-rw-r--r--man3type/socklen_t.3type1
-rw-r--r--man3type/speed_t.3type1
-rw-r--r--man3type/ssize_t.3type1
-rw-r--r--man3type/stat.3type162
-rw-r--r--man3type/suseconds_t.3type1
-rw-r--r--man3type/tcflag_t.3type1
-rw-r--r--man3type/time_t.3type109
-rw-r--r--man3type/timer_t.3type34
-rw-r--r--man3type/timespec.3type60
-rw-r--r--man3type/timeval.3type43
-rw-r--r--man3type/tm.3type112
-rw-r--r--man3type/uid_t.3type1
-rw-r--r--man3type/uint16_t.3type1
-rw-r--r--man3type/uint32_t.3type1
-rw-r--r--man3type/uint64_t.3type1
-rw-r--r--man3type/uint8_t.3type1
-rw-r--r--man3type/uintN_t.3type1
-rw-r--r--man3type/uintmax_t.3type1
-rw-r--r--man3type/uintptr_t.3type1
-rw-r--r--man3type/useconds_t.3type1
-rw-r--r--man3type/va_list.3type44
-rw-r--r--man3type/void.3type76
-rw-r--r--man4/cciss.4385
-rw-r--r--man4/console_codes.4810
-rw-r--r--man4/console_ioctl.42
-rw-r--r--man4/cpuid.481
-rw-r--r--man4/dsp56k.4107
-rw-r--r--man4/fd.4232
-rw-r--r--man4/full.446
-rw-r--r--man4/fuse.4535
-rw-r--r--man4/hd.482
-rw-r--r--man4/hpsa.4234
-rw-r--r--man4/initrd.4479
-rw-r--r--man4/intro.422
-rw-r--r--man4/kmem.41
-rw-r--r--man4/lirc.4422
-rw-r--r--man4/loop-control.41
-rw-r--r--man4/loop.4359
-rw-r--r--man4/lp.4137
-rw-r--r--man4/mem.481
-rw-r--r--man4/mouse.4171
-rw-r--r--man4/msr.442
-rw-r--r--man4/null.452
-rw-r--r--man4/port.41
-rw-r--r--man4/ptmx.41
-rw-r--r--man4/pts.475
-rw-r--r--man4/ram.428
-rw-r--r--man4/random.4347
-rw-r--r--man4/rtc.4327
-rw-r--r--man4/sd.4117
-rw-r--r--man4/sk98lin.4582
-rw-r--r--man4/smartpqi.4326
-rw-r--r--man4/st.4950
-rw-r--r--man4/tty.467
-rw-r--r--man4/ttyS.433
-rw-r--r--man4/tty_ioctl.42
-rw-r--r--man4/urandom.41
-rw-r--r--man4/vcs.4172
-rw-r--r--man4/vcsa.41
-rw-r--r--man4/veth.486
-rw-r--r--man4/wavelan.4142
-rw-r--r--man4/zero.41
-rw-r--r--man5/acct.5161
-rw-r--r--man5/charmap.5105
-rw-r--r--man5/core.5684
-rw-r--r--man5/dir_colors.5413
-rw-r--r--man5/elf.52196
-rw-r--r--man5/erofs.597
-rw-r--r--man5/filesystems.5227
-rw-r--r--man5/fs.51
-rw-r--r--man5/ftpusers.542
-rw-r--r--man5/gai.conf.589
-rw-r--r--man5/group.555
-rw-r--r--man5/host.conf.5204
-rw-r--r--man5/hosts.5122
-rw-r--r--man5/hosts.equiv.5212
-rw-r--r--man5/intro.523
-rw-r--r--man5/issue.524
-rw-r--r--man5/locale.51316
-rw-r--r--man5/motd.525
-rw-r--r--man5/networks.560
-rw-r--r--man5/nologin.522
-rw-r--r--man5/nscd.conf.5342
-rw-r--r--man5/nss.5101
-rw-r--r--man5/nsswitch.conf.5427
-rw-r--r--man5/passwd.5160
-rw-r--r--man5/proc.56962
-rw-r--r--man5/procfs.51
-rw-r--r--man5/protocols.566
-rw-r--r--man5/repertoiremap.558
-rw-r--r--man5/resolv.conf.5406
-rw-r--r--man5/resolver.51
-rw-r--r--man5/rpc.583
-rw-r--r--man5/securetty.535
-rw-r--r--man5/services.5199
-rw-r--r--man5/shells.540
-rw-r--r--man5/slabinfo.5220
-rw-r--r--man5/sysfs.5275
-rw-r--r--man5/termcap.5466
-rw-r--r--man5/tmpfs.5271
-rw-r--r--man5/ttytype.556
-rw-r--r--man5/tzfile.5496
-rw-r--r--man5/utmp.5348
-rw-r--r--man5/utmpx.51
-rw-r--r--man5/wtmp.51
-rw-r--r--man6/intro.617
-rw-r--r--man7/address_families.7390
-rw-r--r--man7/aio.7446
-rw-r--r--man7/armscii-8.7120
-rw-r--r--man7/arp.7310
-rw-r--r--man7/ascii.7169
-rw-r--r--man7/attributes.7865
-rw-r--r--man7/boot.7230
-rw-r--r--man7/bootparam.7664
-rw-r--r--man7/bpf-helpers.75128
-rw-r--r--man7/capabilities.71872
-rw-r--r--man7/cgroup_namespaces.7248
-rw-r--r--man7/cgroups.71914
-rw-r--r--man7/charsets.7335
-rw-r--r--man7/complex.781
-rw-r--r--man7/cp1251.7166
-rw-r--r--man7/cp1252.7156
-rw-r--r--man7/cpuset.71500
-rw-r--r--man7/credentials.7379
-rw-r--r--man7/ddp.7245
-rw-r--r--man7/environ.7354
-rw-r--r--man7/epoll.7610
-rw-r--r--man7/fanotify.71455
-rw-r--r--man7/feature_test_macros.7933
-rw-r--r--man7/fifo.775
-rw-r--r--man7/futex.7121
-rw-r--r--man7/glibc.71
-rw-r--r--man7/glob.7205
-rw-r--r--man7/hier.7654
-rw-r--r--man7/hostname.797
-rw-r--r--man7/icmp.7201
-rw-r--r--man7/inode.7485
-rw-r--r--man7/inotify.71100
-rw-r--r--man7/intro.723
-rw-r--r--man7/ip.71503
-rw-r--r--man7/ipc_namespaces.766
-rw-r--r--man7/ipv6.7422
-rw-r--r--man7/iso-8859-1.71
-rw-r--r--man7/iso-8859-10.71
-rw-r--r--man7/iso-8859-11.71
-rw-r--r--man7/iso-8859-13.71
-rw-r--r--man7/iso-8859-14.71
-rw-r--r--man7/iso-8859-15.71
-rw-r--r--man7/iso-8859-16.71
-rw-r--r--man7/iso-8859-2.71
-rw-r--r--man7/iso-8859-3.71
-rw-r--r--man7/iso-8859-4.71
-rw-r--r--man7/iso-8859-5.71
-rw-r--r--man7/iso-8859-6.71
-rw-r--r--man7/iso-8859-7.71
-rw-r--r--man7/iso-8859-8.71
-rw-r--r--man7/iso-8859-9.71
-rw-r--r--man7/iso_8859-1.7150
-rw-r--r--man7/iso_8859-10.7146
-rw-r--r--man7/iso_8859-11.7143
-rw-r--r--man7/iso_8859-13.7146
-rw-r--r--man7/iso_8859-14.7146
-rw-r--r--man7/iso_8859-15.7149
-rw-r--r--man7/iso_8859-16.7147
-rw-r--r--man7/iso_8859-2.7151
-rw-r--r--man7/iso_8859-3.7139
-rw-r--r--man7/iso_8859-4.7146
-rw-r--r--man7/iso_8859-5.7151
-rw-r--r--man7/iso_8859-6.7102
-rw-r--r--man7/iso_8859-7.7150
-rw-r--r--man7/iso_8859-8.7114
-rw-r--r--man7/iso_8859-9.7146
-rw-r--r--man7/iso_8859_1.71
-rw-r--r--man7/iso_8859_10.71
-rw-r--r--man7/iso_8859_11.71
-rw-r--r--man7/iso_8859_13.71
-rw-r--r--man7/iso_8859_14.71
-rw-r--r--man7/iso_8859_15.71
-rw-r--r--man7/iso_8859_16.71
-rw-r--r--man7/iso_8859_2.71
-rw-r--r--man7/iso_8859_3.71
-rw-r--r--man7/iso_8859_4.71
-rw-r--r--man7/iso_8859_5.71
-rw-r--r--man7/iso_8859_6.71
-rw-r--r--man7/iso_8859_7.71
-rw-r--r--man7/iso_8859_8.71
-rw-r--r--man7/iso_8859_9.71
-rw-r--r--man7/kernel_lockdown.7109
-rw-r--r--man7/keyrings.7901
-rw-r--r--man7/koi8-r.7169
-rw-r--r--man7/koi8-u.7175
-rw-r--r--man7/landlock.7586
-rw-r--r--man7/latin1.71
-rw-r--r--man7/latin10.71
-rw-r--r--man7/latin2.71
-rw-r--r--man7/latin3.71
-rw-r--r--man7/latin4.71
-rw-r--r--man7/latin5.71
-rw-r--r--man7/latin6.71
-rw-r--r--man7/latin7.71
-rw-r--r--man7/latin8.71
-rw-r--r--man7/latin9.71
-rw-r--r--man7/libc.7115
-rw-r--r--man7/locale.7379
-rw-r--r--man7/mailaddr.7134
-rw-r--r--man7/man-pages.71227
-rw-r--r--man7/man.7507
-rw-r--r--man7/math_error.7246
-rw-r--r--man7/mount_namespaces.71371
-rw-r--r--man7/mq_overview.7389
-rw-r--r--man7/namespaces.7421
-rw-r--r--man7/netdevice.7426
-rw-r--r--man7/netlink.7621
-rw-r--r--man7/network_namespaces.762
-rw-r--r--man7/nptl.7112
-rw-r--r--man7/numa.7170
-rw-r--r--man7/operator.754
-rw-r--r--man7/packet.7699
-rw-r--r--man7/path_resolution.7264
-rw-r--r--man7/persistent-keyring.7124
-rw-r--r--man7/pid_namespaces.7388
-rw-r--r--man7/pipe.7400
-rw-r--r--man7/pkeys.7237
-rw-r--r--man7/posixoptions.71014
-rw-r--r--man7/precedence.71
-rw-r--r--man7/process-keyring.755
-rw-r--r--man7/pthreads.7937
-rw-r--r--man7/pty.7158
-rw-r--r--man7/queue.7138
-rw-r--r--man7/random.7213
-rw-r--r--man7/raw.7286
-rw-r--r--man7/regex.7293
-rw-r--r--man7/rtld-audit.7606
-rw-r--r--man7/rtnetlink.7563
-rw-r--r--man7/sched.7992
-rw-r--r--man7/sem_overview.7139
-rw-r--r--man7/session-keyring.7113
-rw-r--r--man7/shm_overview.7104
-rw-r--r--man7/sigevent.7120
-rw-r--r--man7/signal-safety.7341
-rw-r--r--man7/signal.71019
-rw-r--r--man7/sock_diag.7825
-rw-r--r--man7/socket.71271
-rw-r--r--man7/spufs.7767
-rw-r--r--man7/standards.7303
-rw-r--r--man7/string_copying.7820
-rw-r--r--man7/suffixes.7265
-rw-r--r--man7/svipc.71
-rw-r--r--man7/symlink.7564
-rw-r--r--man7/system_data_types.7320
-rw-r--r--man7/sysvipc.799
-rw-r--r--man7/tcp.71568
-rw-r--r--man7/termio.745
-rw-r--r--man7/thread-keyring.750
-rw-r--r--man7/time.7218
-rw-r--r--man7/time_namespaces.7345
-rw-r--r--man7/tis-620.71
-rw-r--r--man7/udp.7317
-rw-r--r--man7/udplite.7137
-rw-r--r--man7/unicode.7246
-rw-r--r--man7/units.7108
-rw-r--r--man7/unix.71210
-rw-r--r--man7/uri.7761
-rw-r--r--man7/url.71
-rw-r--r--man7/urn.71
-rw-r--r--man7/user-keyring.781
-rw-r--r--man7/user-session-keyring.792
-rw-r--r--man7/user_namespaces.71469
-rw-r--r--man7/utf-8.7211
-rw-r--r--man7/utf8.71
-rw-r--r--man7/uts_namespaces.746
-rw-r--r--man7/vdso.7612
-rw-r--r--man7/vsock.7232
-rw-r--r--man7/x25.7127
-rw-r--r--man7/xattr.7180
-rw-r--r--man8/iconvconfig.886
-rw-r--r--man8/intro.829
-rw-r--r--man8/ld-linux.81
-rw-r--r--man8/ld-linux.so.81
-rw-r--r--man8/ld.so.8843
-rw-r--r--man8/ldconfig.8204
-rw-r--r--man8/nscd.884
-rw-r--r--man8/sln.844
-rw-r--r--man8/tzselect.8125
-rw-r--r--man8/zdump.8231
-rw-r--r--man8/zic.8903
2558 files changed, 0 insertions, 288732 deletions
diff --git a/man1/getent.1 b/man1/getent.1
deleted file mode 100644
index e9c5efb8a..000000000
--- a/man1/getent.1
+++ /dev/null
@@ -1,382 +0,0 @@
-.\" Copyright (c) 2011, Mark R. Bannister <cambridge@users.sourceforge.net>
-.\" Copyright (c) 2015, Robin H. Johnson <robbat2@gentoo.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH getent 1 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getent \- get entries from Name Service Switch libraries
-.SH SYNOPSIS
-.nf
-.B getent [\fIoption\fP]... \fIdatabase\fP \fIkey\fP...
-.fi
-.SH DESCRIPTION
-The
-.B getent
-command displays entries from databases supported by the
-Name Service Switch libraries,
-which are configured in
-.IR /etc/nsswitch.conf .
-If one or more
-.I key
-arguments are provided,
-then only the entries that match the supplied keys will be displayed.
-Otherwise, if no
-.I key
-is provided, all entries will be displayed (unless the database does not
-support enumeration).
-.PP
-The
-.I database
-may be any of those supported by the GNU C Library, listed below:
-.RS 3
-.TP 10
-.B ahosts
-When no
-.I key
-is provided, use
-.BR sethostent (3),
-.BR gethostent (3),
-and
-.BR endhostent (3)
-to enumerate the hosts database.
-This is identical to using
-.BR hosts .
-When one or more
-.I key
-arguments are provided, pass each
-.I key
-in succession to
-.BR getaddrinfo (3)
-with the address family
-.BR AF_UNSPEC ,
-enumerating each socket address structure returned.
-.TP
-.B ahostsv4
-Same as
-.BR ahosts ,
-but use the address family
-.BR AF_INET .
-.TP
-.B ahostsv6
-Same as
-.BR ahosts ,
-but use the address family
-.BR AF_INET6 .
-The call to
-.BR getaddrinfo (3)
-in this case includes the
-.B AI_V4MAPPED
-flag.
-.TP
-.B aliases
-When no
-.I key
-is provided, use
-.BR setaliasent (3),
-.BR getaliasent (3),
-and
-.BR endaliasent (3)
-to enumerate the aliases database.
-When one or more
-.I key
-arguments are provided, pass each
-.I key
-in succession to
-.BR getaliasbyname (3)
-and display the result.
-.TP
-.B ethers
-When one or more
-.I key
-arguments are provided, pass each
-.I key
-in succession to
-.BR ether_aton (3)
-and
-.BR ether_hostton (3)
-until a result is obtained, and display the result.
-Enumeration is not supported on
-.BR ethers ,
-so a
-.I key
-must be provided.
-.TP
-.B group
-When no
-.I key
-is provided, use
-.BR setgrent (3),
-.BR getgrent (3),
-and
-.BR endgrent (3)
-to enumerate the group database.
-When one or more
-.I key
-arguments are provided, pass each numeric
-.I key
-to
-.BR getgrgid (3)
-and each nonnumeric
-.I key
-to
-.BR getgrnam (3)
-and display the result.
-.TP
-.B gshadow
-When no
-.I key
-is provided, use
-.BR setsgent (3),
-.BR getsgent (3),
-and
-.BR endsgent (3)
-to enumerate the gshadow database.
-When one or more
-.I key
-arguments are provided, pass each
-.I key
-in succession to
-.BR getsgnam (3)
-and display the result.
-.TP
-.B hosts
-When no
-.I key
-is provided, use
-.BR sethostent (3),
-.BR gethostent (3),
-and
-.BR endhostent (3)
-to enumerate the hosts database.
-When one or more
-.I key
-arguments are provided, pass each
-.I key
-to
-.BR gethostbyaddr (3)
-or
-.BR gethostbyname2 (3),
-depending on whether a call to
-.BR inet_pton (3)
-indicates that the
-.I key
-is an IPv6 or IPv4 address or not, and display the result.
-.TP
-.B initgroups
-When one or more
-.I key
-arguments are provided, pass each
-.I key
-in succession to
-.BR getgrouplist (3)
-and display the result.
-Enumeration is not supported on
-.BR initgroups ,
-so a
-.I key
-must be provided.
-.TP
-.B netgroup
-When one
-.I key
-is provided, pass the
-.I key
-to
-.BR setnetgrent (3)
-and, using
-.BR getnetgrent (3)
-display the resulting string triple
-.RI ( hostname ", " username ", " domainname ).
-Alternatively, three
-.I keys
-may be provided, which are interpreted as the
-.IR hostname ,
-.IR username ,
-and
-.I domainname
-to match to a netgroup name via
-.BR innetgr (3).
-Enumeration is not supported on
-.BR netgroup ,
-so either one or three
-.I keys
-must be provided.
-.TP
-.B networks
-When no
-.I key
-is provided, use
-.BR setnetent (3),
-.BR getnetent (3),
-and
-.BR endnetent (3)
-to enumerate the networks database.
-When one or more
-.I key
-arguments are provided, pass each numeric
-.I key
-to
-.BR getnetbyaddr (3)
-and each nonnumeric
-.I key
-to
-.BR getnetbyname (3)
-and display the result.
-.TP
-.B passwd
-When no
-.I key
-is provided, use
-.BR setpwent (3),
-.BR getpwent (3),
-and
-.BR endpwent (3)
-to enumerate the passwd database.
-When one or more
-.I key
-arguments are provided, pass each numeric
-.I key
-to
-.BR getpwuid (3)
-and each nonnumeric
-.I key
-to
-.BR getpwnam (3)
-and display the result.
-.TP
-.B protocols
-When no
-.I key
-is provided, use
-.BR setprotoent (3),
-.BR getprotoent (3),
-and
-.BR endprotoent (3)
-to enumerate the protocols database.
-When one or more
-.I key
-arguments are provided, pass each numeric
-.I key
-to
-.BR getprotobynumber (3)
-and each nonnumeric
-.I key
-to
-.BR getprotobyname (3)
-and display the result.
-.TP
-.B rpc
-When no
-.I key
-is provided, use
-.BR setrpcent (3),
-.BR getrpcent (3),
-and
-.BR endrpcent (3)
-to enumerate the rpc database.
-When one or more
-.I key
-arguments are provided, pass each numeric
-.I key
-to
-.BR getrpcbynumber (3)
-and each nonnumeric
-.I key
-to
-.BR getrpcbyname (3)
-and display the result.
-.TP
-.B services
-When no
-.I key
-is provided, use
-.BR setservent (3),
-.BR getservent (3),
-and
-.BR endservent (3)
-to enumerate the services database.
-When one or more
-.I key
-arguments are provided, pass each numeric
-.I key
-to
-.BR getservbynumber (3)
-and each nonnumeric
-.I key
-to
-.BR getservbyname (3)
-and display the result.
-.TP
-.B shadow
-When no
-.I key
-is provided, use
-.BR setspent (3),
-.BR getspent (3),
-and
-.BR endspent (3)
-to enumerate the shadow database.
-When one or more
-.I key
-arguments are provided, pass each
-.I key
-in succession to
-.BR getspnam (3)
-and display the result.
-.RE
-.SH OPTIONS
-.TP
-.BR \-s\ \fIservice\fP ", " \-\-service\ \fIservice\fP
-.\" commit 9d0881aa76b399e6a025c5cf44bebe2ae0efa8af (glibc)
-Override all databases with the specified service.
-(Since glibc 2.2.5.)
-.TP
-.BR \-s\ \fIdatabase\fP:\fIservice\fP ", "\
-\-\-service\ \fIdatabase\fP:\fIservice\fP
-.\" commit b4f6f4be85d32b9c03361c38376e36f08100e3e8 (glibc)
-Override only specified databases with the specified service.
-The option may be used multiple times,
-but only the last service for each database will be used.
-(Since glibc 2.4.)
-.TP
-.BR \-i ", " \-\-no\-idn
-.\" commit a160f8d808cf8020b13bd0ef4a9eaf3c11f964ad (glibc)
-Disables IDN encoding in lookups for
-.BR ahosts / getaddrinfo (3)
-(Since glibc-2.13.)
-.TP
-.BR \-? ", " \-\-help
-Print a usage summary and exit.
-.TP
-.B "\-\-usage"
-Print a short usage summary and exit.
-.TP
-.BR \-V ", " \-\-version
-Print the version number, license, and disclaimer of warranty for
-.BR getent .
-.SH EXIT STATUS
-One of the following exit values can be returned by
-.BR getent :
-.RS 3
-.TP
-.B 0
-Command completed successfully.
-.TP
-.B 1
-Missing arguments, or
-.I database
-unknown.
-.TP
-.B 2
-One or more supplied
-.I key
-could not be found in the
-.IR database .
-.TP
-.B 3
-Enumeration not supported on this
-.IR database .
-.RE
-.SH SEE ALSO
-.BR nsswitch.conf (5)
diff --git a/man1/iconv.1 b/man1/iconv.1
deleted file mode 100644
index 959275183..000000000
--- a/man1/iconv.1
+++ /dev/null
@@ -1,190 +0,0 @@
-.\" Copyright (C) 2014 Marko Myllynen <myllynen@redhat.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH iconv 1 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iconv \- convert text from one character encoding to another
-.SH SYNOPSIS
-.B iconv
-.RI [ options ]
-.RI "[\-f " from-encoding "]"
-.RI "[\-t " to-encoding "]"
-.RI [ inputfile ]...
-.SH DESCRIPTION
-The
-.B iconv
-program reads in text in one encoding and outputs the text in another
-encoding.
-If no input files are given, or if it is given as a dash (\-),
-.B iconv
-reads from standard input.
-If no output file is given,
-.B iconv
-writes to standard output.
-.PP
-If no
-.I from-encoding
-is given, the default is derived
-from the current locale's character encoding.
-If no
-.I to-encoding
-is given, the default is derived
-from the current locale's character
-encoding.
-.SH OPTIONS
-.TP
-.BI \-f " from-encoding" "\fR, \fP\-\-from\-code=" from-encoding
-Use
-.I from-encoding
-for input characters.
-.TP
-.BI \-t " to-encoding" "\fR, \fP\-\-to\-code=" to-encoding
-Use
-.I to-encoding
-for output characters.
-.IP
-If the string
-.B //IGNORE
-is appended to
-.IR to-encoding ,
-characters that cannot be converted are discarded and an error is
-printed after conversion.
-.IP
-If the string
-.B //TRANSLIT
-is appended to
-.IR to-encoding ,
-characters being converted are transliterated when needed and possible.
-This means that when a character cannot be represented in the target
-character set, it can be approximated through one or several similar
-looking characters.
-Characters that are outside of the target character set and cannot be
-transliterated are replaced with a question mark (?) in the output.
-.TP
-.BR \-l ", " \-\-list
-List all known character set encodings.
-.TP
-.B "\-c"
-Silently discard characters that cannot be converted instead of
-terminating when encountering such characters.
-.TP
-.BI \-o " outputfile" "\fR, \fP\-\-output=" outputfile
-Use
-.I outputfile
-for output.
-.TP
-.BR \-s ", " \-\-silent
-This option is ignored; it is provided only for compatibility.
-.TP
-.B "\-\-verbose"
-Print progress information on standard error when processing
-multiple files.
-.TP
-.BR \-? ", " \-\-help
-Print a usage summary and exit.
-.TP
-.B "\-\-usage"
-Print a short usage summary and exit.
-.TP
-.BR \-V ", " \-\-version
-Print the version number, license, and disclaimer of warranty for
-.BR iconv .
-.SH EXIT STATUS
-Zero on success, nonzero on errors.
-.SH ENVIRONMENT
-Internally, the
-.B iconv
-program uses the
-.BR iconv (3)
-function which in turn uses
-.I gconv
-modules (dynamically loaded shared libraries)
-to convert to and from a character set.
-Before calling
-.BR iconv (3),
-the
-.B iconv
-program must first allocate a conversion descriptor using
-.BR iconv_open (3).
-The operation of the latter function is influenced by the setting of the
-.B GCONV_PATH
-environment variable:
-.IP \[bu] 3
-If
-.B GCONV_PATH
-is not set,
-.BR iconv_open (3)
-loads the system gconv module configuration cache file created by
-.BR iconvconfig (8)
-and then, based on the configuration,
-loads the gconv modules needed to perform the conversion.
-If the system gconv module configuration cache file is not available
-then the system gconv module configuration file is used.
-.IP \[bu]
-If
-.B GCONV_PATH
-is defined (as a colon-separated list of pathnames),
-the system gconv module configuration cache is not used.
-Instead,
-.BR iconv_open (3)
-first tries to load the configuration files by searching the directories in
-.B GCONV_PATH
-in order,
-followed by the system default gconv module configuration file.
-If a directory does not contain a gconv module configuration file,
-any gconv modules that it may contain are ignored.
-If a directory contains a gconv module configuration file
-and it is determined that a module needed for this conversion is
-available in the directory,
-then the needed module is loaded from that directory,
-the order being such that the first suitable module found in
-.B GCONV_PATH
-is used.
-This allows users to use custom modules and even replace system-provided
-modules by providing such modules in
-.B GCONV_PATH
-directories.
-.SH FILES
-.TP
-.I /usr/lib/gconv
-Usual default gconv module path.
-.TP
-.I /usr/lib/gconv/gconv\-modules
-Usual system default gconv module configuration file.
-.TP
-.I /usr/lib/gconv/gconv\-modules.cache
-Usual system gconv module configuration cache.
-.PP
-Depending on the architecture,
-the above files may instead be located at directories with the path prefix
-.IR /usr/lib64 .
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH EXAMPLES
-Convert text from the ISO 8859-15 character encoding to UTF-8:
-.PP
-.in +4n
-.EX
-$ \fBiconv \-f ISO\-8859\-15 \-t UTF\-8 < input.txt > output.txt\fP
-.EE
-.in
-.PP
-The next example converts from UTF-8 to ASCII, transliterating when
-possible:
-.PP
-.in +4n
-.EX
-$ \fBecho abc ß α € àḃç | iconv \-f UTF\-8 \-t ASCII//TRANSLIT\fP
-abc ss ? EUR abc
-.EE
-.in
-.SH SEE ALSO
-.BR locale (1),
-.BR uconv (1),
-.BR iconv (3),
-.BR nl_langinfo (3),
-.BR charsets (7),
-.BR iconvconfig (8)
diff --git a/man1/intro.1 b/man1/intro.1
deleted file mode 100644
index 78cd46610..000000000
--- a/man1/intro.1
+++ /dev/null
@@ -1,305 +0,0 @@
-.\" Copyright (c) 2002 Andries Brouwer <aeb@cwi.nl>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH intro 1 (date) "Linux man-pages (unreleased)"
-.SH NAME
-intro \- introduction to user commands
-.SH DESCRIPTION
-Section 1 of the manual describes user commands and tools,
-for example, file manipulation tools, shells, compilers,
-web browsers, file and image viewers and editors, and so on.
-.SH NOTES
-Linux is a flavor of UNIX, and as a first approximation
-all user commands under UNIX work precisely the same under
-Linux (and FreeBSD and lots of other UNIX-like systems).
-.PP
-Under Linux, there are GUIs (graphical user interfaces), where you
-can point and click and drag, and hopefully get work done without
-first reading lots of documentation.
-The traditional UNIX environment
-is a CLI (command line interface), where you type commands to
-tell the computer what to do.
-That is faster and more powerful,
-but requires finding out what the commands are.
-Below a bare minimum, to get started.
-.SS Login
-In order to start working, you probably first have to open a session by
-giving your username and password.
-The program
-.BR login (1)
-now starts a
-.I shell
-(command interpreter) for you.
-In case of a graphical login, you get a screen with menus or icons
-and a mouse click will start a shell in a window.
-See also
-.BR xterm (1).
-.SS The shell
-One types commands to the
-.IR shell ,
-the command interpreter.
-It is not built-in, but is just a program
-and you can change your shell.
-Everybody has their own favorite one.
-The standard one is called
-.IR sh .
-See also
-.BR ash (1),
-.BR bash (1),
-.BR chsh (1),
-.BR csh (1),
-.BR dash (1),
-.BR ksh (1),
-.BR zsh (1).
-.PP
-A session might go like:
-.PP
-.in +4n
-.EX
-.RB "knuth login: " aeb
-.RB "Password: " ********
-.RB "$ " date
-Tue Aug 6 23:50:44 CEST 2002
-.RB "$ " cal
- August 2002
-Su Mo Tu We Th Fr Sa
- 1 2 3
- 4 5 6 7 8 9 10
-11 12 13 14 15 16 17
-18 19 20 21 22 23 24
-25 26 27 28 29 30 31
-\&
-.RB "$ " ls
-bin tel
-.RB "$ " "ls \-l"
-total 2
-drwxrwxr\-x 2 aeb 1024 Aug 6 23:51 bin
-\-rw\-rw\-r\-\- 1 aeb 37 Aug 6 23:52 tel
-.RB "$ " "cat tel"
-maja 0501\-1136285
-peter 0136\-7399214
-.RB "$ " "cp tel tel2"
-.RB "$ " "ls \-l"
-total 3
-drwxr\-xr\-x 2 aeb 1024 Aug 6 23:51 bin
-\-rw\-r\-\-r\-\- 1 aeb 37 Aug 6 23:52 tel
-\-rw\-r\-\-r\-\- 1 aeb 37 Aug 6 23:53 tel2
-.RB "$ " "mv tel tel1"
-.RB "$ " "ls \-l"
-total 3
-drwxr\-xr\-x 2 aeb 1024 Aug 6 23:51 bin
-\-rw\-r\-\-r\-\- 1 aeb 37 Aug 6 23:52 tel1
-\-rw\-r\-\-r\-\- 1 aeb 37 Aug 6 23:53 tel2
-.RB "$ " "diff tel1 tel2"
-.RB "$ " "rm tel1"
-.RB "$ " "grep maja tel2"
-maja 0501\-1136285
-$
-.EE
-.in
-.PP
-Here typing Control-D ended the session.
-.PP
-The
-.B $
-here was the command prompt\[em]it is the shell's way of indicating
-that it is ready for the next command.
-The prompt can be customized
-in lots of ways, and one might include stuff like username,
-machine name, current directory, time, and so on.
-An assignment PS1="What next, master? "
-would change the prompt as indicated.
-.PP
-We see that there are commands
-.I date
-(that gives date and time), and
-.I cal
-(that gives a calendar).
-.PP
-The command
-.I ls
-lists the contents of the current directory\[em]it tells you what
-files you have.
-With a
-.I \-l
-option it gives a long listing,
-that includes the owner and size and date of the file, and the
-permissions people have for reading and/or changing the file.
-For example, the file "tel" here is 37 bytes long, owned by aeb
-and the owner can read and write it, others can only read it.
-Owner and permissions can be changed by the commands
-.I chown
-and
-.IR chmod .
-.PP
-The command
-.I cat
-will show the contents of a file.
-(The name is from "concatenate and print": all files given as
-parameters are concatenated and sent to "standard output"
-(see
-.BR stdout (3)),
-here
-the terminal screen.)
-.PP
-The command
-.I cp
-(from "copy") will copy a file.
-.PP
-The command
-.I mv
-(from "move"), on the other hand, only renames it.
-.PP
-The command
-.I diff
-lists the differences between two files.
-Here there was no output because there were no differences.
-.PP
-The command
-.I rm
-(from "remove") deletes the file, and be careful! it is gone.
-No wastepaper basket or anything.
-Deleted means lost.
-.PP
-The command
-.I grep
-(from "g/re/p") finds occurrences of a string in one or more files.
-Here it finds Maja's telephone number.
-.SS Pathnames and the current directory
-Files live in a large tree, the file hierarchy.
-Each has a
-.I "pathname"
-describing the path from the root of the tree (which is called
-.IR / )
-to the file.
-For example, such a full pathname might be
-.IR /home/aeb/tel .
-Always using full pathnames would be inconvenient, and the name
-of a file in the current directory may be abbreviated by giving
-only the last component.
-That is why
-.I /home/aeb/tel
-can be abbreviated
-to
-.I tel
-when the current directory is
-.IR /home/aeb .
-.PP
-The command
-.I pwd
-prints the current directory.
-.PP
-The command
-.I cd
-changes the current directory.
-.PP
-Try alternatively
-.I cd
-and
-.I pwd
-commands and explore
-.I cd
-usage: "cd", "cd .", "cd ..", "cd /", and "cd \[ti]".
-.SS Directories
-The command
-.I mkdir
-makes a new directory.
-.PP
-The command
-.I rmdir
-removes a directory if it is empty, and complains otherwise.
-.PP
-The command
-.I find
-(with a rather baroque syntax) will find files with given name
-or other properties.
-For example, "find . \-name tel" would find
-the file
-.I tel
-starting in the present directory (which is called
-.IR . ).
-And "find / \-name tel" would do the same, but starting at the root
-of the tree.
-Large searches on a multi-GB disk will be time-consuming,
-and it may be better to use
-.BR locate (1).
-.SS Disks and filesystems
-The command
-.I mount
-will attach the filesystem found on some disk (or floppy, or CDROM or so)
-to the big filesystem hierarchy.
-And
-.I umount
-detaches it again.
-The command
-.I df
-will tell you how much of your disk is still free.
-.SS Processes
-On a UNIX system many user and system processes run simultaneously.
-The one you are talking to runs in the
-.IR foreground ,
-the others in the
-.IR background .
-The command
-.I ps
-will show you which processes are active and what numbers these
-processes have.
-The command
-.I kill
-allows you to get rid of them.
-Without option this is a friendly
-request: please go away.
-And "kill \-9" followed by the number
-of the process is an immediate kill.
-Foreground processes can often be killed by typing Control-C.
-.SS Getting information
-There are thousands of commands, each with many options.
-Traditionally commands are documented on
-.IR "man pages" ,
-(like this one), so that the command "man kill" will document
-the use of the command "kill" (and "man man" document the command "man").
-The program
-.I man
-sends the text through some
-.IR pager ,
-usually
-.IR less .
-Hit the space bar to get the next page, hit q to quit.
-.PP
-In documentation it is customary to refer to man pages
-by giving the name and section number, as in
-.BR man (1).
-Man pages are terse, and allow you to find quickly some forgotten
-detail.
-For newcomers an introductory text with more examples
-and explanations is useful.
-.PP
-A lot of GNU/FSF software is provided with info files.
-Type "info info"
-for an introduction on the use of the program
-.IR info .
-.PP
-Special topics are often treated in HOWTOs.
-Look in
-.I /usr/share/doc/howto/en
-and use a browser if you find HTML files there.
-.\"
-.\" Actual examples? Separate section for each of cat, cp, ...?
-.\" gzip, bzip2, tar, rpm
-.SH SEE ALSO
-.BR ash (1),
-.BR bash (1),
-.BR chsh (1),
-.BR csh (1),
-.BR dash (1),
-.BR ksh (1),
-.BR locate (1),
-.BR login (1),
-.BR man (1),
-.BR xterm (1),
-.BR zsh (1),
-.BR wait (2),
-.BR stdout (3),
-.BR man\-pages (7),
-.BR standards (7)
diff --git a/man1/ldd.1 b/man1/ldd.1
deleted file mode 100644
index cca96ec4d..000000000
--- a/man1/ldd.1
+++ /dev/null
@@ -1,172 +0,0 @@
-.\" Copyright 1995-2000 David Engel (david@ods.com)
-.\" Copyright 1995 Rickard E. Faith (faith@cs.unc.edu)
-.\" Copyright 2000 Ben Collins (bcollins@debian.org)
-.\" Redone for glibc 2.2
-.\" Copyright 2000 Jakub Jelinek (jakub@redhat.com)
-.\" Corrected.
-.\" and Copyright (C) 2012, 2016, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH ldd 1 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ldd \- print shared object dependencies
-.SH SYNOPSIS
-.nf
-.BR ldd " [\fIoption\fP]... \fIfile\fP..."
-.fi
-.SH DESCRIPTION
-.B ldd
-prints the shared objects (shared libraries) required by each program or
-shared object specified on the command line.
-An example of its use and output
-is the following:
-.PP
-.in +4n
-.EX
-$ \fBldd /bin/ls\fP
- linux\-vdso.so.1 (0x00007ffcc3563000)
- libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f87e5459000)
- libcap.so.2 => /lib64/libcap.so.2 (0x00007f87e5254000)
- libc.so.6 => /lib64/libc.so.6 (0x00007f87e4e92000)
- libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f87e4c22000)
- libdl.so.2 => /lib64/libdl.so.2 (0x00007f87e4a1e000)
- /lib64/ld\-linux\-x86\-64.so.2 (0x00005574bf12e000)
- libattr.so.1 => /lib64/libattr.so.1 (0x00007f87e4817000)
- libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f87e45fa000)
-.EE
-.in
-.PP
-In the usual case,
-.B ldd
-invokes the standard dynamic linker (see
-.BR ld.so (8))
-with the
-.B LD_TRACE_LOADED_OBJECTS
-environment variable set to 1.
-This causes the dynamic linker to inspect the program's dynamic dependencies,
-and find (according to the rules described in
-.BR ld.so (8))
-and load the objects that satisfy those dependencies.
-For each dependency,
-.B ldd
-displays the location of the matching object
-and the (hexadecimal) address at which it is loaded.
-(The
-.I linux\-vdso
-and
-.I ld\-linux
-shared dependencies are special; see
-.BR vdso (7)
-and
-.BR ld.so (8).)
-.\"
-.SS Security
-Be aware that in some circumstances
-(e.g., where the program specifies an ELF interpreter other than
-.IR ld\-linux.so ),
-.\" The circumstances are where the program has an interpreter
-.\" other than ld-linux.so. In this case, ldd tries to execute the
-.\" program directly with LD_TRACE_LOADED_OBJECTS=1, with the
-.\" result that the program interpreter gets control, and can do
-.\" what it likes, or pass control to the program itself.
-.\" Much more detail at
-.\" http://www.catonmat.net/blog/ldd-arbitrary-code-execution/
-some versions of
-.B ldd
-may attempt to obtain the dependency information
-by attempting to directly execute the program,
-which may lead to the execution of whatever code is defined
-in the program's ELF interpreter,
-and perhaps to execution of the program itself.
-.\" Mainline glibc's ldd allows this possibility (the line
-.\" try_trace "$file"
-.\" in glibc 2.15, for example), but many distro versions of
-.\" ldd seem to remove that code path from the script.
-(Before glibc 2.27,
-.\" glibc commit eedca9772e99c72ab4c3c34e43cc764250aa3e3c
-the upstream
-.B ldd
-implementation did this for example,
-although most distributions provided a modified version that did not.)
-.PP
-Thus, you should
-.I never
-employ
-.B ldd
-on an untrusted executable,
-since this may result in the execution of arbitrary code.
-A safer alternative when dealing with untrusted executables is:
-.PP
-.in +4n
-.EX
-$ \fBobjdump \-p /path/to/program | grep NEEDED\fP
-.EE
-.in
-.PP
-Note, however, that this alternative shows only the direct dependencies
-of the executable, while
-.B ldd
-shows the entire dependency tree of the executable.
-.SH OPTIONS
-.TP
-.B \-\-version
-Print the version number of
-.BR ldd .
-.TP
-.BR \-v ", " \-\-verbose
-Print all information, including, for example,
-symbol versioning information.
-.TP
-.BR \-u ", " \-\-unused
-Print unused direct dependencies.
-(Since glibc 2.3.4.)
-.TP
-.BR \-d ", " \-\-data\-relocs
-Perform relocations and report any missing objects (ELF only).
-.TP
-.BR \-r ", " \-\-function\-relocs
-Perform relocations for both data objects and functions, and
-report any missing objects or functions (ELF only).
-.TP
-.B \-\-help
-Usage information.
-.\" .SH NOTES
-.\" The standard version of
-.\" .B ldd
-.\" comes with glibc2.
-.\" Libc5 came with an older version, still present
-.\" on some systems.
-.\" The long options are not supported by the libc5 version.
-.\" On the other hand, the glibc2 version does not support
-.\" .B \-V
-.\" and only has the equivalent
-.\" .BR \-\-version .
-.\" .LP
-.\" The libc5 version of this program will use the name of a library given
-.\" on the command line as-is when it contains a \[aq]/\[aq]; otherwise it
-.\" searches for the library in the standard locations.
-.\" To run it
-.\" on a shared library in the current directory, prefix the name with "./".
-.SH BUGS
-.B ldd
-does not work on a.out shared libraries.
-.PP
-.B ldd
-does not work with some extremely old a.out programs which were
-built before
-.B ldd
-support was added to the compiler releases.
-If you use
-.B ldd
-on one of these programs, the program will attempt to run with
-.I argc
-= 0 and the results will be unpredictable.
-.\" .SH AUTHOR
-.\" David Engel.
-.\" Roland McGrath and Ulrich Drepper.
-.SH SEE ALSO
-.BR pldd (1),
-.BR sprof (1),
-.BR ld.so (8),
-.BR ldconfig (8)
diff --git a/man1/locale.1 b/man1/locale.1
deleted file mode 100644
index 6754aa1f0..000000000
--- a/man1/locale.1
+++ /dev/null
@@ -1,194 +0,0 @@
-.\" Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH locale 1 (date) "Linux man-pages (unreleased)"
-.SH NAME
-locale \- get locale-specific information
-.SH SYNOPSIS
-.nf
-.BR locale " [\fIoption\fP]"
-.BR locale " [\fIoption\fP] " \-a
-.BR locale " [\fIoption\fP] " \-m
-.BR locale " [\fIoption\fP] \fIname\fP..."
-.fi
-.SH DESCRIPTION
-The
-.B locale
-command displays information about the current locale, or all locales,
-on standard output.
-.PP
-When invoked without arguments,
-.B locale
-displays the current locale settings for each locale category (see
-.BR locale (5)),
-based on the settings of the environment variables that control the locale
-(see
-.BR locale (7)).
-Values for variables set in the environment are printed without double
-quotes, implied values are printed with double quotes.
-.PP
-If either the
-.B \-a
-or the
-.B \-m
-option (or one of their long-format equivalents) is specified,
-the behavior is as follows:
-.TP
-.BR \-a ", " \-\-all\-locales
-Display a list of all available locales.
-The
-.B \-v
-option causes the
-.B LC_IDENTIFICATION
-metadata about each locale to be included in the output.
-.TP
-.BR \-m ", " \-\-charmaps
-Display the available charmaps (character set description files).
-To display the current character set for the locale, use
-\fBlocale \-c charmap\fR.
-.PP
-The
-.B locale
-command can also be provided with one or more arguments,
-which are the names of locale keywords (for example,
-.IR date_fmt ,
-.IR ctype\-class\-names ,
-.IR yesexpr ,
-or
-.IR decimal_point )
-or locale categories (for example,
-.B LC_CTYPE
-or
-.BR LC_TIME ).
-For each argument, the following is displayed:
-.IP \[bu] 3
-For a locale keyword, the value of that keyword to be displayed.
-.IP \[bu]
-For a locale category,
-the values of all keywords in that category are displayed.
-.PP
-When arguments are supplied, the following options are meaningful:
-.TP
-.BR \-c ", " \-\-category\-name
-For a category name argument,
-write the name of the locale category
-on a separate line preceding the list of keyword values for that category.
-.IP
-For a keyword name argument,
-write the name of the locale category for this keyword
-on a separate line preceding the keyword value.
-.IP
-This option improves readability when multiple name arguments are specified.
-It can be combined with the
-.B \-k
-option.
-.TP
-.BR \-k ", " \-\-keyword\-name
-For each keyword whose value is being displayed,
-include also the name of that keyword,
-so that the output has the format:
-.IP
-.in +4n
-.EX
-.IR keyword =\[dq] value \[dq]
-.EE
-.in
-.PP
-The
-.B locale
-command also knows about the following options:
-.TP
-.BR \-v ", " \-\-verbose
-Display additional information for some command-line option and argument
-combinations.
-.TP
-.BR \-? ", " \-\-help
-Display a summary of command-line options and arguments and exit.
-.TP
-.B \-\-usage
-Display a short usage message and exit.
-.TP
-.BR \-V ", " \-\-version
-Display the program version and exit.
-.SH FILES
-.TP
-.I /usr/lib/locale/locale\-archive
-Usual default locale archive location.
-.TP
-.I /usr/share/i18n/locales
-Usual default path for locale definition files.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH EXAMPLES
-.EX
-$ \fBlocale\fP
-LANG=en_US.UTF\-8
-LC_CTYPE="en_US.UTF\-8"
-LC_NUMERIC="en_US.UTF\-8"
-LC_TIME="en_US.UTF\-8"
-LC_COLLATE="en_US.UTF\-8"
-LC_MONETARY="en_US.UTF\-8"
-LC_MESSAGES="en_US.UTF\-8"
-LC_PAPER="en_US.UTF\-8"
-LC_NAME="en_US.UTF\-8"
-LC_ADDRESS="en_US.UTF\-8"
-LC_TELEPHONE="en_US.UTF\-8"
-LC_MEASUREMENT="en_US.UTF\-8"
-LC_IDENTIFICATION="en_US.UTF\-8"
-LC_ALL=
-.PP
-$ \fBlocale date_fmt\fP
-%a %b %e %H:%M:%S %Z %Y
-.PP
-$ \fBlocale \-k date_fmt\fP
-date_fmt="%a %b %e %H:%M:%S %Z %Y"
-.PP
-$ \fBlocale \-ck date_fmt\fP
-LC_TIME
-date_fmt="%a %b %e %H:%M:%S %Z %Y"
-.PP
-$ \fBlocale LC_TELEPHONE\fP
-+%c (%a) %l
-(%a) %l
-11
-1
-UTF\-8
-.PP
-$ \fBlocale \-k LC_TELEPHONE\fP
-tel_int_fmt="+%c (%a) %l"
-tel_dom_fmt="(%a) %l"
-int_select="11"
-int_prefix="1"
-telephone\-codeset="UTF\-8"
-.EE
-.PP
-The following example compiles a custom locale from the
-.I ./wrk
-directory with the
-.BR localedef (1)
-utility under the
-.I $HOME/.locale
-directory, then tests the result with the
-.BR date (1)
-command, and then sets the environment variables
-.B LOCPATH
-and
-.B LANG
-in the shell profile file so that the custom locale will be used in the
-subsequent user sessions:
-.PP
-.EX
-$ \fBmkdir \-p $HOME/.locale\fP
-$ \fBI18NPATH=./wrk/ localedef \-f UTF\-8 \-i fi_SE $HOME/.locale/fi_SE.UTF\-8\fP
-$ \fBLOCPATH=$HOME/.locale LC_ALL=fi_SE.UTF\-8 date\fP
-$ \fBecho "export LOCPATH=\e$HOME/.locale" >> $HOME/.bashrc\fP
-$ \fBecho "export LANG=fi_SE.UTF\-8" >> $HOME/.bashrc\fP
-.EE
-.SH SEE ALSO
-.BR localedef (1),
-.BR charmap (5),
-.BR locale (5),
-.BR locale (7)
diff --git a/man1/localedef.1 b/man1/localedef.1
deleted file mode 100644
index cab34f0c6..000000000
--- a/man1/localedef.1
+++ /dev/null
@@ -1,407 +0,0 @@
-.\" Copyright (C) 2001 Richard Braakman
-.\" Copyright (C) 2004 Alastair McKinstry
-.\" Copyright (C) 2005 Lars Wirzenius
-.\" Copyright (C) 2014 Marko Myllynen
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" This manual page was initially written by Richard Braakman
-.\" on behalf of the Debian GNU/Linux Project and anyone else
-.\" who wants it. It was amended by Alastair McKinstry to
-.\" explain new ISO/IEC 14652 elements, and amended further by
-.\" Lars Wirzenius to document new functionality (as of GNU
-.\" C library 2.3.5).
-.\"
-.TH localedef 1 (date) "Linux man-pages (unreleased)"
-.SH NAME
-localedef \- compile locale definition files
-.SH SYNOPSIS
-.SY localedef
-.RI [ options ]
-.I outputpath
-.YS
-.SY localedef
-.B \-\-add\-to\-archive
-.RI [ options ]
-.I compiledpath
-.YS
-.SY localedef
-.B \-\-delete\-from\-archive
-.RI [ options ]
-.IR localename " ..."
-.YS
-.SY localedef
-.B \-\-list\-archive
-.RI [ options ]
-.YS
-.SY localedef
-.B \-\-help
-.YS
-.SY localedef
-.B \-\-usage
-.YS
-.SY localedef
-.B \-\-version
-.YS
-.SH DESCRIPTION
-The
-.B localedef
-program reads the indicated
-.I charmap
-and
-.I input
-files,
-compiles them to a binary form quickly usable by the
-locale functions in the C library
-.RB ( setlocale (3),
-.BR localeconv (3),
-etc.),
-and places the output in
-.IR outputpath .
-.PP
-The
-.I outputpath
-argument is interpreted as follows:
-.IP \[bu] 3
-If
-.I outputpath
-contains a slash character ('/'),
-it is interpreted as the name of the
-directory where the output definitions are to be stored.
-In this case,
-there is a separate output file for each locale category
-.RI ( LC_TIME ,
-.IR LC_NUMERIC ,
-and so on).
-.IP \[bu]
-If the
-.B \-\-no\-archive
-option is used,
-.I outputpath
-is the name of a subdirectory in
-.I /usr/lib/locale
-where per-category compiled files are placed.
-.IP \[bu]
-Otherwise,
-.I outputpath
-is the name of a locale and the compiled locale data is added to the
-archive file
-.IR /usr/lib/locale/locale\-archive .
-A locale archive is a memory-mapped file which contains all the
-system-provided locales;
-it is used by all localized programs when the environment variable
-.B LOCPATH
-is not set.
-.PP
-In any case,
-.B localedef
-aborts if the directory in which it tries to write locale files has
-not already been created.
-.PP
-If no
-.I charmapfile
-is given,
-the value
-.I ANSI_X3.4\-1968
-(for ASCII) is used by default.
-If no
-.I inputfile
-is given,
-or if it is given as a dash
-(\-),
-.B localedef
-reads from standard input.
-.SH OPTIONS
-.SS Operation-selection options
-A few options direct
-.B localedef
-to do something other than compile locale definitions.
-Only one of these options should be used at a time.
-.TP
-.B \-\-add\-to\-archive
-Add the
-.I compiledpath
-directories to the locale archive file.
-The directories should have been created by previous runs of
-.BR localedef ,
-using
-.BR \-\-no\-archive .
-.TP
-.B \-\-delete\-from\-archive
-Delete the named locales from the locale archive file.
-.TP
-.B \-\-list\-archive
-List the locales contained in the locale archive file.
-.SS Other options
-Some of the following options are sensible only for certain operations;
-generally,
-it should be self-evident which ones.
-Notice that
-.B \-f
-and
-.B \-c
-are reversed from what you might expect;
-that is,
-.B \-f
-is not the same as
-.BR \-\-force .
-.TP
-.BI \-f " charmapfile" "\fR, \fP\-\-charmap=" charmapfile
-Specify the file that defines the character set
-that is used by the input file.
-If
-.I charmapfile
-contains a slash character ('/'),
-it is interpreted as the name of the character map.
-Otherwise,
-the file is sought in the current directory
-and the default directory for character maps.
-If the environment variable
-.B I18NPATH
-is set,
-.I $I18NPATH/charmaps/
-and
-.I $I18NPATH/
-are also searched after the current directory.
-The default directory for character maps is printed by
-.BR "localedef \-\-help" .
-.TP
-.BI \-i " inputfile" "\fR, \fP\-\-inputfile=" inputfile
-Specify the locale definition file to compile.
-The file is sought in the current directory
-and the default directory for locale definition files.
-If the environment variable
-.B I18NPATH
-is set,
-.I $I18NPATH/locales/
-and
-.I $I18NPATH
-are also searched after the current directory.
-The default directory for locale definition files is printed by
-.BR "localedef \-\-help" .
-.TP
-.BI \-u " repertoirefile" "\fR, \fP\-\-repertoire\-map=" repertoirefile
-Read mappings from symbolic names to Unicode code points from
-.IR repertoirefile .
-If
-.I repertoirefile
-contains a slash character ('/'),
-it is interpreted as the pathname of the repertoire map.
-Otherwise,
-the file is sought in the current directory
-and the default directory for repertoire maps.
-If the environment variable
-.B I18NPATH
-is set,
-.I $I18NPATH/repertoiremaps/
-and
-.I $I18NPATH
-are also searched after the current directory.
-The default directory for repertoire maps is printed by
-.BR "localedef \-\-help" .
-.TP
-.BI \-A " aliasfile" "\fR, \fP\-\-alias\-file=" aliasfile
-Use
-.I aliasfile
-to look up aliases for locale names.
-There is no default aliases file.
-.TP
-.BR \-c ", " \-\-force
-Write the output files even if warnings were generated about the input
-file.
-.TP
-.BR \-v ", " \-\-verbose
-Generate extra warnings about errors that are normally ignored.
-.TP
-.B \-\-big\-endian
-Generate big-endian output.
-.TP
-.B \-\-little\-endian
-Generate little-endian output.
-.TP
-.B \-\-no\-archive
-Do not use the locale archive file,
-instead create
-.I outputpath
-as a subdirectory in the same directory as the locale archive file,
-and create separate output files for locale categories in it.
-This is helpful to prevent system locale archive updates from overwriting
-custom locales created with
-.BR localedef .
-.TP
-.B \-\-no\-hard\-links
-Do not create hard links between installed locales.
-.TP
-.BI \-\-no\-warnings= warnings
-Comma-separated list of warnings to disable.
-Supported warnings are
-.I ascii
-and
-.IR intcurrsym .
-.TP
-.B \-\-posix
-Conform strictly to POSIX.
-Implies
-.BR \-\-verbose .
-This option currently has no other effect.
-POSIX conformance is assumed if the environment variable
-.B POSIXLY_CORRECT
-is set.
-.TP
-.BI \-\-prefix= pathname
-Set the prefix to be prepended to the full archive pathname.
-By default,
-the prefix is empty.
-Setting the prefix to
-.IR foo ,
-the archive would be placed in
-.IR foo/usr/lib/locale/locale\-archive .
-.TP
-.B \-\-quiet
-Suppress all notifications and warnings,
-and report only fatal errors.
-.TP
-.B \-\-replace
-Replace a locale in the locale archive file.
-Without this option,
-if the locale is in the archive file already,
-an error occurs.
-.TP
-.BI \-\-warnings= warnings
-Comma-separated list of warnings to enable.
-Supported warnings are
-.I ascii
-and
-.IR intcurrsym .
-.TP
-.BR \-? ", " \-\-help
-Print a usage summary and exit.
-Also prints the default paths used by
-.BR localedef .
-.TP
-.B "\-\-usage"
-Print a short usage summary and exit.
-.TP
-.BR \-V ", " \-\-version
-Print the version number,
-license,
-and disclaimer of warranty for
-.BR localedef .
-.SH EXIT STATUS
-One of the following exit values can be returned by
-.BR localedef :
-.TP
-.B 0
-Command completed successfully.
-.TP
-.B 1
-Warnings or errors occurred,
-output files were written.
-.TP
-.B 4
-Errors encountered,
-no output created.
-.SH ENVIRONMENT
-.TP
-.B POSIXLY_CORRECT
-The
-.B \-\-posix
-flag is assumed if this environment variable is set.
-.TP
-.B I18NPATH
-A colon-separated list of search directories for files.
-.SH FILES
-.TP
-.I /usr/share/i18n/charmaps
-Usual default character map path.
-.TP
-.I /usr/share/i18n/locales
-Usual default path for locale definition files.
-.TP
-.I /usr/share/i18n/repertoiremaps
-Usual default repertoire map path.
-.TP
-.I /usr/lib/locale/locale\-archive
-Usual default locale archive location.
-.TP
-.I /usr/lib/locale
-Usual default path for compiled individual locale data files.
-.TP
-.I outputpath/LC_ADDRESS
-An output file that contains information about formatting of
-addresses and geography-related items.
-.TP
-.I outputpath/LC_COLLATE
-An output file that contains information about the rules for comparing
-strings.
-.TP
-.I outputpath/LC_CTYPE
-An output file that contains information about character classes.
-.TP
-.I outputpath/LC_IDENTIFICATION
-An output file that contains metadata about the locale.
-.TP
-.I outputpath/LC_MEASUREMENT
-An output file that contains information about locale measurements
-(metric versus US customary).
-.TP
-.I outputpath/LC_MESSAGES/SYS_LC_MESSAGES
-An output file that contains information about the language messages
-should be printed in,
-and what an affirmative or negative answer looks like.
-.TP
-.I outputpath/LC_MONETARY
-An output file that contains information about formatting of monetary
-values.
-.TP
-.I outputpath/LC_NAME
-An output file that contains information about salutations for persons.
-.TP
-.I outputpath/LC_NUMERIC
-An output file that contains information about formatting of nonmonetary
-numeric values.
-.TP
-.I outputpath/LC_PAPER
-An output file that contains information about settings related to
-standard paper size.
-.TP
-.I outputpath/LC_TELEPHONE
-An output file that contains information about formats to be used with
-telephone services.
-.TP
-.I outputpath/LC_TIME
-An output file that contains information about formatting of data and
-time values.
-.SH STANDARDS
-POSIX.1-2008.
-.SH EXAMPLES
-Compile the locale files for Finnish in the UTF\-8 character set
-and add it to the default locale archive with the name
-.BR fi_FI.UTF\-8 :
-.PP
-.in +4n
-.EX
-localedef \-f UTF\-8 \-i fi_FI fi_FI.UTF\-8
-.EE
-.in
-.PP
-The next example does the same thing,
-but generates files into the
-.I fi_FI.UTF\-8
-directory which can then be used by programs when the environment
-variable
-.B LOCPATH
-is set to the current directory (note that the last argument must
-contain a slash):
-.PP
-.in +4n
-.EX
-localedef \-f UTF\-8 \-i fi_FI ./fi_FI.UTF\-8
-.EE
-.in
-.SH SEE ALSO
-.BR locale (1),
-.BR charmap (5),
-.BR locale (5),
-.BR repertoiremap (5),
-.BR locale (7)
diff --git a/man1/memusage.1 b/man1/memusage.1
deleted file mode 100644
index aeca54bb0..000000000
--- a/man1/memusage.1
+++ /dev/null
@@ -1,262 +0,0 @@
-.\" Copyright (c) 2013, Peter Schiffer <pschiffe@redhat.com>
-.\" and Copyright (C) 2014, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.TH memusage 1 (date) "Linux man-pages (unreleased)"
-.SH NAME
-memusage \- profile memory usage of a program
-.SH SYNOPSIS
-.nf
-.BR memusage " [\fIoption\fR]... \fIprogram\fR [\fIprogramoption\fR]..."
-.fi
-.SH DESCRIPTION
-.B memusage
-is a bash script which profiles memory usage of the program,
-.IR program .
-It preloads the
-.B libmemusage.so
-library into the caller's environment (via the
-.B LD_PRELOAD
-environment variable; see
-.BR ld.so (8)).
-The
-.B libmemusage.so
-library traces memory allocation by intercepting calls to
-.BR malloc (3),
-.BR calloc (3),
-.BR free (3),
-and
-.BR realloc (3);
-optionally, calls to
-.BR mmap (2),
-.BR mremap (2),
-and
-.BR munmap (2)
-can also be intercepted.
-.PP
-.B memusage
-can output the collected data in textual form, or it can use
-.BR memusagestat (1)
-(see the
-.B \-p
-option, below)
-to create a PNG file containing graphical representation
-of the collected data.
-.SS Memory usage summary
-The "Memory usage summary" line output by
-.B memusage
-contains three fields:
-.RS 4
-.TP
-\fBheap total\fR
-Sum of \fIsize\fR arguments of all
-.BR malloc (3)
-calls,
-products of arguments (\fInmemb\fR*\fIsize\fR) of all
-.BR calloc (3)
-calls,
-and sum of \fIlength\fR arguments of all
-.BR mmap (2)
-calls.
-In the case of
-.BR realloc (3)
-and
-.BR mremap (2),
-if the new size of an allocation is larger than the previous size,
-the sum of all such differences (new size minus old size) is added.
-.TP
-.B "heap peak"
-Maximum of all \fIsize\fR arguments of
-.BR malloc (3),
-all products of \fInmemb\fR*\fIsize\fR of
-.BR calloc (3),
-all \fIsize\fR arguments of
-.BR realloc (3),
-.I length
-arguments of
-.BR mmap (2),
-and
-\fInew_size\fR arguments of
-.BR mremap (2).
-.TP
-.B "stack peak"
-Before the first call to any monitored function,
-the stack pointer address (base stack pointer) is saved.
-After each function call, the actual stack pointer address is read and
-the difference from the base stack pointer computed.
-The maximum of these differences is then the stack peak.
-.RE
-.PP
-Immediately following this summary line, a table shows the number calls,
-total memory allocated or deallocated,
-and number of failed calls for each intercepted function.
-For
-.BR realloc (3)
-and
-.BR mremap (2),
-the additional field "nomove" shows reallocations that
-changed the address of a block,
-and the additional "dec" field shows reallocations that
-decreased the size of the block.
-For
-.BR realloc (3),
-the additional field "free" shows reallocations that
-caused a block to be freed (i.e., the reallocated size was 0).
-.PP
-The "realloc/total memory" of the table output by
-.B memusage
-does not reflect cases where
-.BR realloc (3)
-is used to reallocate a block of memory
-to have a smaller size than previously.
-This can cause sum of all "total memory" cells (excluding "free")
-to be larger than the "free/total memory" cell.
-.SS Histogram for block sizes
-The "Histogram for block sizes" provides a breakdown of memory
-allocations into various bucket sizes.
-.SH OPTIONS
-.TP
-.BI \-n\ name \fR,\ \fB\-\-progname= name
-Name of the program file to profile.
-.TP
-.BI \-p\ file \fR,\ \fB\-\-png= file
-Generate PNG graphic and store it in
-.IR file .
-.TP
-.BI \-d\ file \fR,\ \fB\-\-data= file
-Generate binary data file and store it in
-.IR file .
-.TP
-.B \-u\fR,\ \fB\-\-unbuffered
-Do not buffer output.
-.TP
-.BI \-b\ size \fR,\ \fB\-\-buffer= size
-Collect
-.I size
-entries before writing them out.
-.TP
-.B \-\-no\-timer
-Disable timer-based
-.RB ( SIGPROF )
-sampling of stack pointer value.
-.TP
-.B \-m\fR,\ \fB\-\-mmap
-Also trace
-.BR mmap (2),
-.BR mremap (2),
-and
-.BR munmap (2).
-.TP
-.B \-?\fR,\ \fB\-\-help
-Print help and exit.
-.TP
-.B \-\-usage
-Print a short usage message and exit.
-.TP
-.B \-V\fR,\ \fB\-\-version
-Print version information and exit.
-.TP
-The following options apply only when generating graphical output:
-.TP
-.B \-t\fR,\ \fB\-\-time\-based
-Use time (rather than number of function calls) as the scale for the X axis.
-.TP
-.B \-T\fR,\ \fB\-\-total
-Also draw a graph of total memory use.
-.TP
-.BI \fB\-\-title= name
-Use
-.I name
-as the title of the graph.
-.TP
-.BI \-x\ size \fR,\ \fB\-\-x\-size= size
-Make the graph
-.I size
-pixels wide.
-.TP
-.BI \-y\ size \fR,\ \fB\-\-y\-size= size
-Make the graph
-.I size
-pixels high.
-.SH EXIT STATUS
-The exit status of
-.B memusage
-is equal to the exit status of the profiled program.
-.SH BUGS
-To report bugs, see
-.UR http://www.gnu.org/software/libc/bugs.html
-.UE
-.SH EXAMPLES
-Below is a simple program that reallocates a block of
-memory in cycles that rise to a peak before then cyclically
-reallocating the memory in smaller blocks that return to zero.
-After compiling the program and running the following commands,
-a graph of the memory usage of the program can be found in the file
-.IR memusage.png :
-.PP
-.in +4n
-.EX
-$ \fBmemusage \-\-data=memusage.dat ./a.out\fP
-\&...
-Memory usage summary: heap total: 45200, heap peak: 6440, stack peak: 224
- total calls total memory failed calls
- malloc| 1 400 0
-realloc| 40 44800 0 (nomove:40, dec:19, free:0)
- calloc| 0 0 0
- free| 1 440
-Histogram for block sizes:
- 192\-207 1 2% ================
-\&...
- 2192\-2207 1 2% ================
- 2240\-2255 2 4% =================================
- 2832\-2847 2 4% =================================
- 3440\-3455 2 4% =================================
- 4032\-4047 2 4% =================================
- 4640\-4655 2 4% =================================
- 5232\-5247 2 4% =================================
- 5840\-5855 2 4% =================================
- 6432\-6447 1 2% ================
-$ \fBmemusagestat memusage.dat memusage.png\fP
-.EE
-.in
-.SS Program source
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-\&
-#define CYCLES 20
-\&
-int
-main(int argc, char *argv[])
-{
- int i, j;
- size_t size;
- int *p;
-\&
- size = sizeof(*p) * 100;
- printf("malloc: %zu\en", size);
- p = malloc(size);
-\&
- for (i = 0; i < CYCLES; i++) {
- if (i < CYCLES / 2)
- j = i;
- else
- j\-\-;
-\&
- size = sizeof(*p) * (j * 50 + 110);
- printf("realloc: %zu\en", size);
- p = realloc(p, size);
-\&
- size = sizeof(*p) * ((j + 1) * 150 + 110);
- printf("realloc: %zu\en", size);
- p = realloc(p, size);
- }
-\&
- free(p);
- exit(EXIT_SUCCESS);
-}
-.EE
-.SH SEE ALSO
-.BR memusagestat (1),
-.BR mtrace (1),
-.BR ld.so (8)
diff --git a/man1/memusagestat.1 b/man1/memusagestat.1
deleted file mode 100644
index 5559ade69..000000000
--- a/man1/memusagestat.1
+++ /dev/null
@@ -1,73 +0,0 @@
-.\" Copyright (c) 2013, Peter Schiffer <pschiffe@redhat.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.TH memusagestat 1 (date) "Linux man-pages (unreleased)"
-.SH NAME
-memusagestat \- generate graphic from memory profiling data
-.SH SYNOPSIS
-.nf
-.BR memusagestat " [\fIoption\fR]... \fIdatafile\fR [\fIoutfile\fR]"
-.fi
-.SH DESCRIPTION
-.B memusagestat
-creates a PNG file containing a graphical representation of the
-memory profiling data in the file
-.IR datafile ;
-that file is generated via the
-.I \-d
-(or
-.IR \-\-data )
-option of
-.BR memusage (1).
-.PP
-The red line in the graph shows the heap usage (allocated memory)
-and the green line shows the stack usage.
-The x-scale is either the number of memory-handling function calls or
-(if the
-.I \-t
-option is specified)
-time.
-.SH OPTIONS
-.TP
-.BI \-o\ file \fR,\ \fB\-\-output= file
-Name of the output file.
-.TP
-.BI \-s\ string \fR,\ \fB\-\-string= string
-Use
-.I string
-as the title inside the output graph.
-.TP
-.B \-t\fR,\ \fB\-\-time
-Use time (rather than number of function calls) as the scale for the X axis.
-.TP
-.B \-T\fR,\ \fB\-\-total
-Also draw a graph of total memory consumption.
-.TP
-.BI \-x\ size \fR,\ \fB\-\-x\-size= size
-Make the output graph
-.I size
-pixels wide.
-.TP
-.BI \-y\ size \fR,\ \fB\-\-y\-size= size
-Make the output graph
-.I size
-pixels high.
-.TP
-.B \-?\fR,\ \fB\-\-help
-Print a help message and exit.
-.TP
-.B \-\-usage
-Print a short usage message and exit.
-.TP
-.B \-V\fR,\ \fB\-\-version
-Print version information and exit.
-.SH BUGS
-To report bugs, see
-.UR http://www.gnu.org/software/libc/bugs.html
-.UE
-.SH EXAMPLES
-See
-.BR memusage (1).
-.SH SEE ALSO
-.BR memusage (1),
-.BR mtrace (1)
diff --git a/man1/mtrace.1 b/man1/mtrace.1
deleted file mode 100644
index 54c13ccf8..000000000
--- a/man1/mtrace.1
+++ /dev/null
@@ -1,47 +0,0 @@
-.\" Copyright (c) 2013, Peter Schiffer (pschiffe@redhat.com)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.TH mtrace 1 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mtrace \- interpret the malloc trace log
-.SH SYNOPSIS
-.nf
-.BR mtrace " [\fIoption\fR]... [\fIbinary\fR] \fImtracedata\fR"
-.fi
-.SH DESCRIPTION
-.B mtrace
-is a Perl script used to interpret and provide human readable output
-of the trace log contained in the file
-.IR mtracedata ,
-whose contents were produced by
-.BR mtrace (3).
-If
-.I binary
-is provided, the output of
-.B mtrace
-also contains the source file name with line number information
-for problem locations
-(assuming that
-.I binary
-was compiled with debugging information).
-.PP
-For more information about the
-.BR mtrace (3)
-function and
-.B mtrace
-script usage, see
-.BR mtrace (3).
-.SH OPTIONS
-.TP
-.B \-\-help
-Print help and exit.
-.TP
-.B \-\-version
-Print version information and exit.
-.SH BUGS
-For bug reporting instructions, please see:
-.UR http://www.gnu.org/software/libc/bugs.html
-.UE .
-.SH SEE ALSO
-.BR memusage (1),
-.BR mtrace (3)
diff --git a/man1/pldd.1 b/man1/pldd.1
deleted file mode 100644
index f7bff8c2f..000000000
--- a/man1/pldd.1
+++ /dev/null
@@ -1,101 +0,0 @@
-.\" Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pldd 1 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pldd \- display dynamic shared objects linked into a process
-.SH SYNOPSIS
-.nf
-.BI "pldd " "pid"
-.BI pldd " option"
-.fi
-.SH DESCRIPTION
-The
-.B pldd
-command displays a list of the dynamic shared objects (DSOs) that are
-linked into the process with the specified process ID (PID).
-The list includes the libraries that have been dynamically loaded using
-.BR dlopen (3).
-.SH OPTIONS
-.TP
-.BR \-? ", " \-\-help
-Display a help message and exit.
-.TP
-.B \-\-usage
-Display a short usage message and exit.
-.TP
-.BR \-V ", " \-\-version
-Display program version information and exit.
-.SH EXIT STATUS
-On success,
-.B pldd
-exits with the status 0.
-If the specified process does not exist,
-the user does not have permission to access
-its dynamic shared object list,
-or no command-line arguments are supplied,
-.B pldd
-exists with a status of 1.
-If given an invalid option, it exits with the status 64.
-.SH VERSIONS
-Some other systems
-.\" There are man pages on Solaris and HP-UX.
-have a similar command.
-.SH STANDARDS
-None.
-.SH HISTORY
-glibc 2.15.
-.SH NOTES
-The command
-.PP
-.in +4n
-.EX
-lsof \-p PID
-.EE
-.in
-.PP
-also shows output that includes the dynamic shared objects
-that are linked into a process.
-.PP
-The
-.BR gdb (1)
-.I "info shared"
-command also shows the shared libraries being used by a process,
-so that one can obtain similar output to
-.B pldd
-using a command such as the following
-(to monitor the process with the specified
-.IR pid ):
-.PP
-.in +4n
-.EX
-$ \fBgdb \-ex "set confirm off" \-ex "set height 0" \-ex "info shared" \e\fP
- \fB\-ex "quit" \-p $pid | grep \[aq]\[ha]0x.*0x\[aq]\fP
-.EE
-.in
-.SH BUGS
-From glibc 2.19 to glibc 2.29,
-.B pldd
-was broken: it just hung when executed.
-.\" glibc commit 1a4c27355e146b6d8cc6487b998462c7fdd1048f
-This problem was fixed in glibc 2.30, and the fix has been backported
-to earlier glibc versions in some distributions.
-.SH EXAMPLES
-.EX
-$ \fBecho $$\fP # Display PID of shell
-1143
-$ \fBpldd $$\fP # Display DSOs linked into the shell
-1143: /usr/bin/bash
-linux\-vdso.so.1
-/lib64/libtinfo.so.5
-/lib64/libdl.so.2
-/lib64/libc.so.6
-/lib64/ld\-linux\-x86\-64.so.2
-/lib64/libnss_files.so.2
-.EE
-.SH SEE ALSO
-.BR ldd (1),
-.BR lsof (1),
-.BR dlopen (3),
-.BR ld.so (8)
diff --git a/man1/sprof.1 b/man1/sprof.1
deleted file mode 100644
index 0807ee5bd..000000000
--- a/man1/sprof.1
+++ /dev/null
@@ -1,272 +0,0 @@
-.\" Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sprof 1 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sprof \- read and display shared object profiling data
-.SH SYNOPSIS
-.nf
-.BR sprof " [\fIoption\fP]... \fIshared-object-path\fP \
-[\fIprofile-data-path\fP]"
-.fi
-.SH DESCRIPTION
-The
-.B sprof
-command displays a profiling summary for the
-shared object (shared library) specified as its first command-line argument.
-The profiling summary is created using previously generated
-profiling data in the (optional) second command-line argument.
-If the profiling data pathname is omitted, then
-.B sprof
-will attempt to deduce it using the soname of the shared object,
-looking for a file with the name
-.I <soname>.profile
-in the current directory.
-.SH OPTIONS
-The following command-line options specify the profile output
-to be produced:
-.TP
-.BR \-c ", " \-\-call\-pairs
-Print a list of pairs of call paths for the interfaces exported
-by the shared object,
-along with the number of times each path is used.
-.TP
-.BR \-p ", " \-\-flat\-profile
-Generate a flat profile of all of the functions in the monitored object,
-with counts and ticks.
-.TP
-.BR \-q ", " \-\-graph
-Generate a call graph.
-.PP
-If none of the above options is specified,
-then the default behavior is to display a flat profile and a call graph.
-.PP
-The following additional command-line options are available:
-.TP
-.BR \-? ", " \-\-help
-Display a summary of command-line options and arguments and exit.
-.TP
-.B \-\-usage
-Display a short usage message and exit.
-.TP
-.BR \-V ", " \-\-version
-Display the program version and exit.
-.SH STANDARDS
-GNU.
-.SH EXAMPLES
-The following example demonstrates the use of
-.BR sprof .
-The example consists of a main program that calls two functions
-in a shared object.
-First, the code of the main program:
-.PP
-.in +4n
-.EX
-$ \fBcat prog.c\fP
-#include <stdlib.h>
-\&
-void x1(void);
-void x2(void);
-\&
-int
-main(int argc, char *argv[])
-{
- x1();
- x2();
- exit(EXIT_SUCCESS);
-}
-.EE
-.in
-.PP
-The functions
-.IR x1 ()
-and
-.IR x2 ()
-are defined in the following source file that is used to
-construct the shared object:
-.PP
-.in +4n
-.EX
-$ \fBcat libdemo.c\fP
-#include <unistd.h>
-\&
-void
-consumeCpu1(int lim)
-{
- for (unsigned int j = 0; j < lim; j++)
- getppid();
-}
-\&
-void
-x1(void) {
- for (unsigned int j = 0; j < 100; j++)
- consumeCpu1(200000);
-}
-\&
-void
-consumeCpu2(int lim)
-{
- for (unsigned int j = 0; j < lim; j++)
- getppid();
-}
-\&
-void
-x2(void)
-{
- for (unsigned int j = 0; j < 1000; j++)
- consumeCpu2(10000);
-}
-.EE
-.in
-.PP
-Now we construct the shared object with the real name
-.IR libdemo.so.1.0.1 ,
-and the soname
-.IR libdemo.so.1 :
-.PP
-.in +4n
-.EX
-$ \fBcc \-g \-fPIC \-shared \-Wl,\-soname,libdemo.so.1 \e\fP
- \fB\-o libdemo.so.1.0.1 libdemo.c\fP
-.EE
-.in
-.PP
-Then we construct symbolic links for the library soname and
-the library linker name:
-.PP
-.in +4n
-.EX
-$ \fBln \-sf libdemo.so.1.0.1 libdemo.so.1\fP
-$ \fBln \-sf libdemo.so.1 libdemo.so\fP
-.EE
-.in
-.PP
-Next, we compile the main program, linking it against the shared object,
-and then list the dynamic dependencies of the program:
-.PP
-.in +4n
-.EX
-$ \fBcc \-g \-o prog prog.c \-L. \-ldemo\fP
-$ \fBldd prog\fP
- linux\-vdso.so.1 => (0x00007fff86d66000)
- libdemo.so.1 => not found
- libc.so.6 => /lib64/libc.so.6 (0x00007fd4dc138000)
- /lib64/ld\-linux\-x86\-64.so.2 (0x00007fd4dc51f000)
-.EE
-.in
-.PP
-In order to get profiling information for the shared object,
-we define the environment variable
-.B LD_PROFILE
-with the soname of the library:
-.PP
-.in +4n
-.EX
-$ \fBexport LD_PROFILE=libdemo.so.1\fP
-.EE
-.in
-.PP
-We then define the environment variable
-.B LD_PROFILE_OUTPUT
-with the pathname of the directory where profile output should be written,
-and create that directory if it does not exist already:
-.PP
-.in +4n
-.EX
-$ \fBexport LD_PROFILE_OUTPUT=$(pwd)/prof_data\fP
-$ \fBmkdir \-p $LD_PROFILE_OUTPUT\fP
-.EE
-.in
-.PP
-.B LD_PROFILE
-causes profiling output to be
-.I appended
-to the output file if it already exists,
-so we ensure that there is no preexisting profiling data:
-.PP
-.in +4n
-.EX
-$ \fBrm \-f $LD_PROFILE_OUTPUT/$LD_PROFILE.profile\fP
-.EE
-.in
-.PP
-We then run the program to produce the profiling output,
-which is written to a file in the directory specified in
-.BR LD_PROFILE_OUTPUT :
-.PP
-.in +4n
-.EX
-$ \fBLD_LIBRARY_PATH=. ./prog\fP
-$ \fBls prof_data\fP
-libdemo.so.1.profile
-.EE
-.in
-.PP
-We then use the
-.B sprof \-p
-option to generate a flat profile with counts and ticks:
-.PP
-.in +4n
-.EX
-$ \fBsprof \-p libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile\fP
-Flat profile:
-\&
-Each sample counts as 0.01 seconds.
- % cumulative self self total
- time seconds seconds calls us/call us/call name
- 60.00 0.06 0.06 100 600.00 consumeCpu1
- 40.00 0.10 0.04 1000 40.00 consumeCpu2
- 0.00 0.10 0.00 1 0.00 x1
- 0.00 0.10 0.00 1 0.00 x2
-.EE
-.in
-.PP
-The
-.B sprof \-q
-option generates a call graph:
-.PP
-.in +4n
-.EX
-$ \fBsprof \-q libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile\fP
-\&
-index % time self children called name
-\&
- 0.00 0.00 100/100 x1 [1]
-[0] 100.0 0.00 0.00 100 consumeCpu1 [0]
-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
- 0.00 0.00 1/1 <UNKNOWN>
-[1] 0.0 0.00 0.00 1 x1 [1]
- 0.00 0.00 100/100 consumeCpu1 [0]
-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
- 0.00 0.00 1000/1000 x2 [3]
-[2] 0.0 0.00 0.00 1000 consumeCpu2 [2]
-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
- 0.00 0.00 1/1 <UNKNOWN>
-[3] 0.0 0.00 0.00 1 x2 [3]
- 0.00 0.00 1000/1000 consumeCpu2 [2]
-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
-.EE
-.in
-.PP
-Above and below, the "<UNKNOWN>" strings represent identifiers that
-are outside of the profiled object (in this example, these are instances of
-.IR main() ).
-.PP
-The
-.B sprof \-c
-option generates a list of call pairs and the number of their occurrences:
-.PP
-.in +4n
-.EX
-$ \fBsprof \-c libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile\fP
-<UNKNOWN> x1 1
-x1 consumeCpu1 100
-<UNKNOWN> x2 1
-x2 consumeCpu2 1000
-.EE
-.in
-.SH SEE ALSO
-.BR gprof (1),
-.BR ldd (1),
-.BR ld.so (8)
diff --git a/man1/time.1 b/man1/time.1
deleted file mode 100644
index ac4351f63..000000000
--- a/man1/time.1
+++ /dev/null
@@ -1,329 +0,0 @@
-.\" Copyright Andries Brouwer, 2000
-.\" Some fragments of text came from the time-1.7 info file.
-.\" Inspired by kromJx@crosswinds.net.
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH time 1 (date) "Linux man-pages (unreleased)"
-.SH NAME
-time \- time a simple command or give resource usage
-.SH SYNOPSIS
-.B time \c
-.RI [ options ] " command " [ arguments... ]
-.SH DESCRIPTION
-The
-.B time
-command runs the specified program
-.I command
-with the given arguments.
-When
-.I command
-finishes,
-.B time
-writes a message to standard error giving timing statistics
-about this program run.
-These statistics consist of (i) the elapsed real time
-between invocation and termination, (ii) the user CPU time
-(the sum of the
-.I tms_utime
-and
-.I tms_cutime
-values in a
-.I "struct tms"
-as returned by
-.BR times (2)),
-and (iii) the system CPU time (the sum of the
-.I tms_stime
-and
-.I tms_cstime
-values in a
-.I "struct tms"
-as returned by
-.BR times (2)).
-.PP
-Note: some shells (e.g.,
-.BR bash (1))
-have a built-in
-.B time
-command that provides similar information on the usage of time and
-possibly other resources.
-To access the real command, you may need to specify its pathname
-(something like
-.IR /usr/bin/time ).
-.SH OPTIONS
-.TP
-.B \-p
-When in the POSIX locale, use the precise traditional format
-.IP
-.in +4n
-.EX
-"real %f\enuser %f\ensys %f\en"
-.EE
-.in
-.IP
-(with numbers in seconds)
-where the number of decimals in the output for %f is unspecified
-but is sufficient to express the clock tick accuracy, and at least one.
-.SH EXIT STATUS
-If
-.I command
-was invoked, the exit status is that of
-.IR command .
-Otherwise, it is 127 if
-.I command
-could not be found, 126 if it could be found but could not be invoked,
-and some other nonzero value (1\[en]125) if something else went wrong.
-.SH ENVIRONMENT
-The variables
-.BR LANG ,
-.BR LC_ALL ,
-.BR LC_CTYPE ,
-.BR LC_MESSAGES ,
-.BR LC_NUMERIC ,
-and
-.B NLSPATH
-are used for the text and formatting of the output.
-.B PATH
-is used to search for
-.IR command .
-.SH GNU VERSION
-Below a description of the GNU 1.7 version of
-.BR time .
-Disregarding the name of the utility, GNU makes it output lots of
-useful information, not only about time used, but also on other
-resources like memory, I/O and IPC calls (where available).
-The output is formatted using a format string that can be specified
-using the
-.I \-f
-option or the
-.B TIME
-environment variable.
-.PP
-The default format string is:
-.PP
-.in +4n
-.EX
-%Uuser %Ssystem %Eelapsed %PCPU (%Xtext+%Ddata %Mmax)k
-%Iinputs+%Ooutputs (%Fmajor+%Rminor)pagefaults %Wswaps
-.EE
-.in
-.PP
-When the
-.I \-p
-option is given, the (portable) output format is used:
-.PP
-.in +4n
-.EX
-real %e
-user %U
-sys %S
-.EE
-.in
-.\"
-.SS The format string
-The format is interpreted in the usual printf-like way.
-Ordinary characters are directly copied, tab, newline,
-and backslash are escaped using \et, \en, and \e\e,
-a percent sign is represented by %%, and otherwise %
-indicates a conversion.
-The program
-.B time
-will always add a trailing newline itself.
-The conversions follow.
-All of those used by
-.BR tcsh (1)
-are supported.
-.PP
-.B "Time"
-.TP
-.B %E
-Elapsed real time (in [hours:]minutes:seconds).
-.TP
-.B %e
-(Not in
-.BR tcsh (1).)
-Elapsed real time (in seconds).
-.TP
-.B %S
-Total number of CPU-seconds that the process spent in kernel mode.
-.TP
-.B %U
-Total number of CPU-seconds that the process spent in user mode.
-.TP
-.B %P
-Percentage of the CPU that this job got, computed as (%U + %S) / %E.
-.PP
-.B "Memory"
-.TP
-.B %M
-Maximum resident set size of the process during its lifetime, in Kbytes.
-.TP
-.B %t
-(Not in
-.BR tcsh (1).)
-Average resident set size of the process, in Kbytes.
-.TP
-.B %K
-Average total (data+stack+text) memory use of the process,
-in Kbytes.
-.TP
-.B %D
-Average size of the process's unshared data area, in Kbytes.
-.TP
-.B %p
-(Not in
-.BR tcsh (1).)
-Average size of the process's unshared stack space, in Kbytes.
-.TP
-.B %X
-Average size of the process's shared text space, in Kbytes.
-.TP
-.B %Z
-(Not in
-.BR tcsh (1).)
-System's page size, in bytes.
-This is a per-system constant, but varies between systems.
-.TP
-.B %F
-Number of major page faults that occurred while the process was running.
-These are faults where the page has to be read in from disk.
-.TP
-.B %R
-Number of minor, or recoverable, page faults.
-These are faults for pages that are not valid but which have
-not yet been claimed by other virtual pages.
-Thus the data
-in the page is still valid but the system tables must be updated.
-.TP
-.B %W
-Number of times the process was swapped out of main memory.
-.TP
-.B %c
-Number of times the process was context-switched involuntarily
-(because the time slice expired).
-.TP
-.B %w
-Number of waits: times that the program was context-switched voluntarily,
-for instance while waiting for an I/O operation to complete.
-.PP
-.B "I/O"
-.TP
-.B %I
-Number of filesystem inputs by the process.
-.TP
-.B %O
-Number of filesystem outputs by the process.
-.TP
-.B %r
-Number of socket messages received by the process.
-.TP
-.B %s
-Number of socket messages sent by the process.
-.TP
-.B %k
-Number of signals delivered to the process.
-.TP
-.B %C
-(Not in
-.BR tcsh (1).)
-Name and command-line arguments of the command being timed.
-.TP
-.B %x
-(Not in
-.BR tcsh (1).)
-Exit status of the command.
-.SS GNU options
-.TP
-.BI "\-f " format ", \-\-format=" format
-Specify output format, possibly overriding the format specified
-in the environment variable TIME.
-.TP
-.B "\-p, \-\-portability"
-Use the portable output format.
-.TP
-.BI "\-o " file ", \-\-output=" file
-Do not send the results to
-.IR stderr ,
-but overwrite the specified file.
-.TP
-.B "\-a, \-\-append"
-(Used together with \-o.) Do not overwrite but append.
-.TP
-.B "\-v, \-\-verbose"
-Give very verbose output about all the program knows about.
-.TP
-.B "\-q, \-\-quiet"
-Don't report abnormal program termination (where
-.I command
-is terminated by a signal) or nonzero exit status.
-.\"
-.SS GNU standard options
-.TP
-.B "\-\-help"
-Print a usage message on standard output and exit successfully.
-.TP
-.B "\-V, \-\-version"
-Print version information on standard output, then exit successfully.
-.TP
-.B "\-\-"
-Terminate option list.
-.SH BUGS
-Not all resources are measured by all versions of UNIX,
-so some of the values might be reported as zero.
-The present selection was mostly inspired by the data
-provided by 4.2 or 4.3BSD.
-.PP
-GNU time version 1.7 is not yet localized.
-Thus, it does not implement the POSIX requirements.
-.PP
-The environment variable
-.B TIME
-was badly chosen.
-It is not unusual for systems like
-.BR autoconf (1)
-or
-.BR make (1)
-to use environment variables with the name of a utility to override
-the utility to be used.
-Uses like MORE or TIME for options to programs
-(instead of program pathnames) tend to lead to difficulties.
-.PP
-It seems unfortunate that
-.I \-o
-overwrites instead of appends.
-(That is, the
-.I \-a
-option should be the default.)
-.PP
-Mail suggestions and bug reports for GNU
-.B time
-to
-.IR bug\-time@gnu.org .
-Please include the version of
-.BR time ,
-which you can get by running
-.PP
-.in +4n
-.EX
-time \-\-version
-.EE
-.in
-.PP
-and the operating system
-and C compiler you used.
-.\" .SH AUTHORS
-.\" .TP
-.\" .IP "David Keppel"
-.\" Original version
-.\" .IP "David MacKenzie"
-.\" POSIXization, autoconfiscation, GNU getoptization,
-.\" documentation, other bug fixes and improvements.
-.\" .IP "Arne Henrik Juul"
-.\" Helped with portability
-.\" .IP "Francois Pinard"
-.\" Helped with portability
-.SH SEE ALSO
-.BR bash (1),
-.BR tcsh (1),
-.BR times (2),
-.BR wait3 (2)
diff --git a/man2/_Exit.2 b/man2/_Exit.2
deleted file mode 100644
index 9f9d2e763..000000000
--- a/man2/_Exit.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/_exit.2
diff --git a/man2/__clone2.2 b/man2/__clone2.2
deleted file mode 100644
index 68f41a5ba..000000000
--- a/man2/__clone2.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/clone.2
diff --git a/man2/_exit.2 b/man2/_exit.2
deleted file mode 100644
index b4bb34cca..000000000
--- a/man2/_exit.2
+++ /dev/null
@@ -1,138 +0,0 @@
-.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\" and Copyright (C) 1993 Michael Haardt, Ian Jackson.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Wed Jul 21 23:02:38 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 2001-11-17, aeb
-.\"
-.TH _exit 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-_exit, _Exit \- terminate the calling process
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "[[noreturn]] void _exit(int " status );
-.PP
-.B #include <stdlib.h>
-.PP
-.BI "[[noreturn]] void _Exit(int " status );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR _Exit ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-.BR _exit ()
-terminates the calling process "immediately".
-Any open file descriptors belonging to the process are closed.
-Any children of the process are inherited by
-.BR init (1)
-(or by the nearest "subreaper" process as defined through the use of the
-.BR prctl (2)
-.B PR_SET_CHILD_SUBREAPER
-operation).
-The process's parent is sent a
-.B SIGCHLD
-signal.
-.PP
-The value
-.I "status & 0xFF"
-is returned to the parent process as the process's exit status, and
-can be collected by the parent using one of the
-.BR wait (2)
-family of calls.
-.PP
-The function
-.BR _Exit ()
-is equivalent to
-.BR _exit ().
-.SH RETURN VALUE
-These functions do not return.
-.SH STANDARDS
-.TP
-.BR _exit ()
-POSIX.1-2008.
-.TP
-.BR _Exit ()
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.PP
-.BR _Exit ()
-was introduced by C99.
-.SH NOTES
-For a discussion on the effects of an exit, the transmission of
-exit status, zombie processes, signals sent, and so on, see
-.BR exit (3).
-.PP
-The function
-.BR _exit ()
-is like
-.BR exit (3),
-but does not call any
-functions registered with
-.BR atexit (3)
-or
-.BR on_exit (3).
-Open
-.BR stdio (3)
-streams are not flushed.
-On the other hand,
-.BR _exit ()
-does close open file descriptors, and this may cause an unknown delay,
-waiting for pending output to finish.
-If the delay is undesired,
-it may be useful to call functions like
-.BR tcflush (3)
-before calling
-.BR _exit ().
-Whether any pending I/O is canceled, and which pending I/O may be
-canceled upon
-.BR _exit (),
-is implementation-dependent.
-.SS C library/kernel differences
-The text above in DESCRIPTION describes the traditional effect of
-.BR _exit (),
-which is to terminate a process,
-and these are the semantics specified by POSIX.1 and implemented
-by the C library wrapper function.
-On modern systems, this means termination of all threads in the process.
-.PP
-By contrast with the C library wrapper function, the raw Linux
-.BR _exit ()
-system call terminates only the calling thread, and actions such as
-reparenting child processes or sending
-.B SIGCHLD
-to the parent process are performed only if this is
-the last thread in the thread group.
-.\" _exit() is used by pthread_exit() to terminate the calling thread
-.PP
-Up to glibc 2.3, the
-.BR _exit ()
-wrapper function invoked the kernel system call of the same name.
-Since glibc 2.3, the wrapper function invokes
-.BR exit_group (2),
-in order to terminate all of the threads in a process.
-.SH SEE ALSO
-.BR execve (2),
-.BR exit_group (2),
-.BR fork (2),
-.BR kill (2),
-.BR wait (2),
-.BR wait4 (2),
-.BR waitpid (2),
-.BR atexit (3),
-.BR exit (3),
-.BR on_exit (3),
-.BR termios (3)
diff --git a/man2/_llseek.2 b/man2/_llseek.2
deleted file mode 100644
index d15dbee55..000000000
--- a/man2/_llseek.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/llseek.2
diff --git a/man2/_newselect.2 b/man2/_newselect.2
deleted file mode 100644
index e17784318..000000000
--- a/man2/_newselect.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/select.2
diff --git a/man2/_syscall.2 b/man2/_syscall.2
deleted file mode 100644
index e29ee1e64..000000000
--- a/man2/_syscall.2
+++ /dev/null
@@ -1,171 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Tue Jul 6 12:42:46 MDT 1993 <dminer@nyx.cs.du.edu>
-.\" Added "Calling Directly" and supporting paragraphs
-.\"
-.\" Modified Sat Jul 24 15:19:12 1993 by Rik Faith <faith@cs.unc.edu>
-.\"
-.\" Modified 21 Aug 1994 by Michael Chastain <mec@shell.portal.com>:
-.\" Added explanation of arg stacking when 6 or more args.
-.\"
-.\" Modified 10 June 1995 by Andries Brouwer <aeb@cwi.nl>
-.\"
-.\" 2007-10-23 mtk: created as a new page, by taking the content
-.\" specific to the _syscall() macros from intro(2).
-.\"
-.TH _syscall 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-_syscall \- invoking a system call without library support (OBSOLETE)
-.SH SYNOPSIS
-.nf
-.B #include <linux/unistd.h>
-.PP
-A _syscall macro
-.PP
-desired system call
-.fi
-.SH DESCRIPTION
-The important thing to know about a system call is its prototype.
-You need to know how many arguments, their types,
-and the function return type.
-There are seven macros that make the actual call into the system easier.
-They have the form:
-.PP
-.in +4n
-.EX
-.RI _syscall X ( type , name , type1 , arg1 , type2 , arg2 ,...)
-.EE
-.in
-.PP
-where
-.IP
-.I X
-is 0\[en]6, which are the number of arguments taken by the
-system call
-.IP
-.I type
-is the return type of the system call
-.IP
-.I name
-is the name of the system call
-.IP
-.I typeN
-is the Nth argument's type
-.IP
-.I argN
-is the name of the Nth argument
-.PP
-These macros create a function called
-.I name
-with the arguments you
-specify.
-Once you include the _syscall() in your source file,
-you call the system call by
-.IR name .
-.SH FILES
-.I /usr/include/linux/unistd.h
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Starting around Linux 2.6.18, the _syscall macros were removed
-from header files supplied to user space.
-Use
-.BR syscall (2)
-instead.
-(Some architectures, notably ia64, never provided the _syscall macros;
-on those architectures,
-.BR syscall (2)
-was always required.)
-.SH NOTES
-The _syscall() macros
-.I "do not"
-produce a prototype.
-You may have to
-create one, especially for C++ users.
-.PP
-System calls are not required to return only positive or negative error
-codes.
-You need to read the source to be sure how it will return errors.
-Usually, it is the negative of a standard error code,
-for example,
-.RI \- EPERM .
-The _syscall() macros will return the result
-.I r
-of the system call
-when
-.I r
-is nonnegative, but will return \-1 and set the variable
-.I errno
-to
-.RI \- r
-when
-.I r
-is negative.
-For the error codes, see
-.BR errno (3).
-.PP
-When defining a system call, the argument types
-.I must
-be
-passed by-value or by-pointer (for aggregates like structs).
-.\" The preferred way to invoke system calls that glibc does not know
-.\" about yet is via
-.\" .BR syscall (2).
-.\" However, this mechanism can be used only if using a libc
-.\" (such as glibc) that supports
-.\" .BR syscall (2),
-.\" and if the
-.\" .I <sys/syscall.h>
-.\" header file contains the required SYS_foo definition.
-.\" Otherwise, the use of a _syscall macro is required.
-.\"
-.SH EXAMPLES
-.\" [[deprecated]] SRC BEGIN (_syscall.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <linux/unistd.h> /* for _syscallX macros/related stuff */
-#include <linux/kernel.h> /* for struct sysinfo */
-\&
-_syscall1(int, sysinfo, struct sysinfo *, info);
-\&
-int
-main(void)
-{
- struct sysinfo s_info;
- int error;
-\&
- error = sysinfo(&s_info);
- printf("code error = %d\en", error);
- printf("Uptime = %lds\enLoad: 1 min %lu / 5 min %lu / 15 min %lu\en"
- "RAM: total %lu / free %lu / shared %lu\en"
- "Memory in buffers = %lu\enSwap: total %lu / free %lu\en"
- "Number of processes = %d\en",
- s_info.uptime, s_info.loads[0],
- s_info.loads[1], s_info.loads[2],
- s_info.totalram, s_info.freeram,
- s_info.sharedram, s_info.bufferram,
- s_info.totalswap, s_info.freeswap,
- s_info.procs);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SS Sample output
-.EX
-code error = 0
-uptime = 502034s
-Load: 1 min 13376 / 5 min 5504 / 15 min 1152
-RAM: total 15343616 / free 827392 / shared 8237056
-Memory in buffers = 5066752
-Swap: total 27881472 / free 24698880
-Number of processes = 40
-.EE
-.SH SEE ALSO
-.BR intro (2),
-.BR syscall (2),
-.BR errno (3)
diff --git a/man2/_sysctl.2 b/man2/_sysctl.2
deleted file mode 100644
index 9e14d4b16..000000000
--- a/man2/_sysctl.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sysctl.2
diff --git a/man2/accept.2 b/man2/accept.2
deleted file mode 100644
index ee1935c9a..000000000
--- a/man2/accept.2
+++ /dev/null
@@ -1,347 +0,0 @@
-.\" Copyright (c) 1983, 1990, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1996-10-21 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1998-2000 by Andi Kleen to match Linux 2.2 reality
-.\" Modified 2002-04-23 by Roger Luethi <rl@hellgate.ch>
-.\" Modified 2004-06-17 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" 2008-12-04, mtk, Add documentation of accept4()
-.\"
-.TH accept 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-accept, accept4 \- accept a connection on a socket
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.PP
-.BI "int accept(int " sockfd ", struct sockaddr *_Nullable restrict " addr ,
-.BI " socklen_t *_Nullable restrict " addrlen );
-.PP
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <sys/socket.h>
-.PP
-.BI "int accept4(int " sockfd ", struct sockaddr *_Nullable restrict " addr ,
-.BI " socklen_t *_Nullable restrict " addrlen ", int " flags );
-.fi
-.SH DESCRIPTION
-The
-.BR accept ()
-system call is used with connection-based socket types
-.RB ( SOCK_STREAM ,
-.BR SOCK_SEQPACKET ).
-It extracts the first connection request on the queue of pending
-connections for the listening socket,
-.IR sockfd ,
-creates a new connected socket, and returns a new file
-descriptor referring to that socket.
-The newly created socket is not in the listening state.
-The original socket
-.I sockfd
-is unaffected by this call.
-.PP
-The argument
-.I sockfd
-is a socket that has been created with
-.BR socket (2),
-bound to a local address with
-.BR bind (2),
-and is listening for connections after a
-.BR listen (2).
-.PP
-The argument
-.I addr
-is a pointer to a
-.I sockaddr
-structure.
-This structure is filled in with the address of the peer socket,
-as known to the communications layer.
-The exact format of the address returned
-.I addr
-is determined by the socket's address family (see
-.BR socket (2)
-and the respective protocol man pages).
-When
-.I addr
-is NULL, nothing is filled in; in this case,
-.I addrlen
-is not used, and should also be NULL.
-.PP
-The
-.I addrlen
-argument is a value-result argument:
-the caller must initialize it to contain the
-size (in bytes) of the structure pointed to by
-.IR addr ;
-on return it will contain the actual size of the peer address.
-.PP
-The returned address is truncated if the buffer provided is too small;
-in this case,
-.I addrlen
-will return a value greater than was supplied to the call.
-.PP
-If no pending
-connections are present on the queue, and the socket is not marked as
-nonblocking,
-.BR accept ()
-blocks the caller until a connection is present.
-If the socket is marked
-nonblocking and no pending connections are present on the queue,
-.BR accept ()
-fails with the error
-.B EAGAIN
-or
-.BR EWOULDBLOCK .
-.PP
-In order to be notified of incoming connections on a socket, you can use
-.BR select (2),
-.BR poll (2),
-or
-.BR epoll (7).
-A readable event will be delivered when a new connection is attempted and you
-may then call
-.BR accept ()
-to get a socket for that connection.
-Alternatively, you can set the socket to deliver
-.B SIGIO
-when activity occurs on a socket; see
-.BR socket (7)
-for details.
-.PP
-If
-.I flags
-is 0, then
-.BR accept4 ()
-is the same as
-.BR accept ().
-The following values can be bitwise ORed in
-.I flags
-to obtain different behavior:
-.TP 16
-.B SOCK_NONBLOCK
-Set the
-.B O_NONBLOCK
-file status flag on the open file description (see
-.BR open (2))
-referred to by the new file descriptor.
-Using this flag saves extra calls to
-.BR fcntl (2)
-to achieve the same result.
-.TP
-.B SOCK_CLOEXEC
-Set the close-on-exec
-.RB ( FD_CLOEXEC )
-flag on the new file descriptor.
-See the description of the
-.B O_CLOEXEC
-flag in
-.BR open (2)
-for reasons why this may be useful.
-.SH RETURN VALUE
-On success,
-these system calls return a file descriptor
-for the accepted socket (a nonnegative integer).
-On error, \-1 is returned,
-.I errno
-is set to indicate the error, and
-.I addrlen
-is left unchanged.
-.SS Error handling
-Linux
-.BR accept ()
-(and
-.BR accept4 ())
-passes already-pending network errors on the new socket
-as an error code from
-.BR accept ().
-This behavior differs from other BSD socket
-implementations.
-For reliable operation the application should detect
-the network errors defined for the protocol after
-.BR accept ()
-and treat
-them like
-.B EAGAIN
-by retrying.
-In the case of TCP/IP, these are
-.BR ENETDOWN ,
-.BR EPROTO ,
-.BR ENOPROTOOPT ,
-.BR EHOSTDOWN ,
-.BR ENONET ,
-.BR EHOSTUNREACH ,
-.BR EOPNOTSUPP ,
-and
-.BR ENETUNREACH .
-.SH ERRORS
-.TP
-.BR EAGAIN " or " EWOULDBLOCK
-.\" Actually EAGAIN on Linux
-The socket is marked nonblocking and no connections are
-present to be accepted.
-POSIX.1-2001 and POSIX.1-2008
-allow either error to be returned for this case,
-and do not require these constants to have the same value,
-so a portable application should check for both possibilities.
-.TP
-.B EBADF
-.I sockfd
-is not an open file descriptor.
-.TP
-.B ECONNABORTED
-A connection has been aborted.
-.TP
-.B EFAULT
-The
-.I addr
-argument is not in a writable part of the user address space.
-.TP
-.B EINTR
-The system call was interrupted by a signal that was caught
-before a valid connection arrived; see
-.BR signal (7).
-.TP
-.B EINVAL
-Socket is not listening for connections, or
-.I addrlen
-is invalid (e.g., is negative).
-.TP
-.B EINVAL
-.RB ( accept4 ())
-invalid value in
-.IR flags .
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.BR ENOBUFS ", " ENOMEM
-Not enough free memory.
-This often means that the memory allocation is limited by the socket buffer
-limits, not by the system memory.
-.TP
-.B ENOTSOCK
-The file descriptor
-.I sockfd
-does not refer to a socket.
-.TP
-.B EOPNOTSUPP
-The referenced socket is not of type
-.BR SOCK_STREAM .
-.TP
-.B EPERM
-Firewall rules forbid connection.
-.TP
-.B EPROTO
-Protocol error.
-.PP
-In addition, network errors for the new socket and as defined
-for the protocol may be returned.
-Various Linux kernels can
-return other errors such as
-.BR ENOSR ,
-.BR ESOCKTNOSUPPORT ,
-.BR EPROTONOSUPPORT ,
-.BR ETIMEDOUT .
-The value
-.B ERESTARTSYS
-may be seen during a trace.
-.SH VERSIONS
-On Linux, the new socket returned by
-.BR accept ()
-does \fInot\fP inherit file status flags such as
-.B O_NONBLOCK
-and
-.B O_ASYNC
-from the listening socket.
-This behavior differs from the canonical BSD sockets implementation.
-.\" Some testing seems to show that Tru64 5.1 and HP-UX 11 also
-.\" do not inherit file status flags -- MTK Jun 05
-Portable programs should not rely on inheritance or noninheritance
-of file status flags and always explicitly set all required flags on
-the socket returned from
-.BR accept ().
-.SH STANDARDS
-.TP
-.BR accept ()
-POSIX.1-2008.
-.TP
-.BR accept4 ()
-Linux.
-.SH HISTORY
-.TP
-.BR accept ()
-POSIX.1-2001, SVr4, 4.4BSD
-.RB ( accept ()
-first appeared in 4.2BSD).
-.\" The BSD man page documents five possible error returns
-.\" (EBADF, ENOTSOCK, EOPNOTSUPP, EWOULDBLOCK, EFAULT).
-.\" POSIX.1-2001 documents errors
-.\" EAGAIN, EBADF, ECONNABORTED, EINTR, EINVAL, EMFILE,
-.\" ENFILE, ENOBUFS, ENOMEM, ENOTSOCK, EOPNOTSUPP, EPROTO, EWOULDBLOCK.
-.\" In addition, SUSv2 documents EFAULT and ENOSR.
-.TP
-.BR accept4 ()
-Linux 2.6.28,
-glibc 2.10.
-.SH NOTES
-There may not always be a connection waiting after a
-.B SIGIO
-is delivered or
-.BR select (2),
-.BR poll (2),
-or
-.BR epoll (7)
-return a readability event because the connection might have been
-removed by an asynchronous network error or another thread before
-.BR accept ()
-is called.
-If this happens, then the call will block waiting for the next
-connection to arrive.
-To ensure that
-.BR accept ()
-never blocks, the passed socket
-.I sockfd
-needs to have the
-.B O_NONBLOCK
-flag set (see
-.BR socket (7)).
-.PP
-For certain protocols which require an explicit confirmation,
-such as DECnet,
-.BR accept ()
-can be thought of as merely dequeuing the next connection request and not
-implying confirmation.
-Confirmation can be implied by
-a normal read or write on the new file descriptor, and rejection can be
-implied by closing the new socket.
-Currently, only DECnet has these semantics on Linux.
-.\"
-.SS The socklen_t type
-In the original BSD sockets implementation (and on other older systems)
-.\" such as Linux libc4 and libc5, SunOS 4, SGI
-the third argument of
-.BR accept ()
-was declared as an \fIint\ *\fP.
-A POSIX.1g draft
-standard wanted to change it into a \fIsize_t\ *\fPC;
-.\" SunOS 5 has 'size_t *'
-later POSIX standards and glibc 2.x have
-.IR "socklen_t\ * ".
-.SH EXAMPLES
-See
-.BR bind (2).
-.SH SEE ALSO
-.BR bind (2),
-.BR connect (2),
-.BR listen (2),
-.BR select (2),
-.BR socket (2),
-.BR socket (7)
diff --git a/man2/accept4.2 b/man2/accept4.2
deleted file mode 100644
index 963dfb54c..000000000
--- a/man2/accept4.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/accept.2
diff --git a/man2/access.2 b/man2/access.2
deleted file mode 100644
index b80b201d8..000000000
--- a/man2/access.2
+++ /dev/null
@@ -1,447 +0,0 @@
-.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\" and Copyright (C) 1993 Michael Haardt, Ian Jackson.
-.\" and Copyright (C) 2004, 2006, 2007, 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 1993-07-21 Rik Faith (faith@cs.unc.edu)
-.\" Modified 1994-08-21 by Michael Chastain (mec@shell.portal.com):
-.\" Removed note about old kernel (pre-1.1.44) using wrong id on path.
-.\" Modified 1996-03-18 by Martin Schulze (joey@infodrom.north.de):
-.\" Stated more clearly how it behaves with symbolic links.
-.\" Added correction due to Nick Duffek (nsd@bbc.com), aeb, 960426
-.\" Modified 1996-09-07 by Michael Haardt:
-.\" Restrictions for NFS
-.\" Modified 1997-09-09 by Joseph S. Myers <jsm28@cam.ac.uk>
-.\" Modified 1998-01-13 by Michael Haardt:
-.\" Using access is often insecure
-.\" Modified 2001-10-16 by aeb
-.\" Modified 2002-04-23 by Roger Luethi <rl@hellgate.ch>
-.\" Modified 2004-06-23 by Michael Kerrisk
-.\" 2007-06-10, mtk, various parts rewritten, and added BUGS section.
-.\"
-.TH access 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-access, faccessat, faccessat2 \- check user's permissions for a file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int access(const char *" pathname ", int " mode );
-.PP
-.BR "#include <fcntl.h>" " /* Definition of " AT_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int faccessat(int " dirfd ", const char *" pathname ", int " \
-mode ", int " flags );
- /* But see C library/kernel differences, below */
-.PP
-.BR "#include <fcntl.h>" " /* Definition of " AT_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.B int syscall(SYS_faccessat2,
-.BI " int " dirfd ", const char *" pathname ", int " mode \
-", int " flags );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR faccessat ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _ATFILE_SOURCE
-.fi
-.SH DESCRIPTION
-.BR access ()
-checks whether the calling process can access the file
-.IR pathname .
-If
-.I pathname
-is a symbolic link, it is dereferenced.
-.PP
-The
-.I mode
-specifies the accessibility check(s) to be performed,
-and is either the value
-.BR F_OK ,
-.\" F_OK is defined as 0 on every system that I know of.
-or a mask consisting of the bitwise OR of one or more of
-.BR R_OK ", " W_OK ", and " X_OK .
-.B F_OK
-tests for the existence of the file.
-.BR R_OK ", " W_OK ", and " X_OK
-test whether the file exists and grants read, write, and
-execute permissions, respectively.
-.PP
-The check is done using the calling process's
-.I real
-UID and GID, rather than the effective IDs as is done when
-actually attempting an operation (e.g.,
-.BR open (2))
-on the file.
-Similarly, for the root user, the check uses the set of
-permitted capabilities rather than the set of effective
-capabilities; and for non-root users, the check uses an empty set
-of capabilities.
-.PP
-This allows set-user-ID programs and capability-endowed programs
-to easily determine the invoking user's authority.
-In other words,
-.BR access ()
-does not answer the "can I read/write/execute this file?" question.
-It answers a slightly different question:
-"(assuming I'm a setuid binary) can
-.I the user who invoked me
-read/write/execute this file?",
-which gives set-user-ID programs the possibility to
-prevent malicious users from causing them to read files
-which users shouldn't be able to read.
-.PP
-If the calling process is privileged (i.e., its real UID is zero),
-then an
-.B X_OK
-check is successful for a regular file if execute permission
-is enabled for any of the file owner, group, or other.
-.SS faccessat()
-.BR faccessat ()
-operates in exactly the same way as
-.BR access (),
-except for the differences described here.
-.PP
-If the pathname given in
-.I pathname
-is relative, then it is interpreted relative to the directory
-referred to by the file descriptor
-.I dirfd
-(rather than relative to the current working directory of
-the calling process, as is done by
-.BR access ()
-for a relative pathname).
-.PP
-If
-.I pathname
-is relative and
-.I dirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I pathname
-is interpreted relative to the current working
-directory of the calling process (like
-.BR access ()).
-.PP
-If
-.I pathname
-is absolute, then
-.I dirfd
-is ignored.
-.PP
-.I flags
-is constructed by ORing together zero or more of the following values:
-.TP
-.B AT_EACCESS
-Perform access checks using the effective user and group IDs.
-By default,
-.BR faccessat ()
-uses the real IDs (like
-.BR access ()).
-.TP
-.B AT_SYMLINK_NOFOLLOW
-If
-.I pathname
-is a symbolic link, do not dereference it:
-instead return information about the link itself.
-.PP
-See
-.BR openat (2)
-for an explanation of the need for
-.BR faccessat ().
-.\"
-.SS faccessat2()
-The description of
-.BR faccessat ()
-given above corresponds to POSIX.1 and
-to the implementation provided by glibc.
-However, the glibc implementation was an imperfect emulation (see BUGS)
-that papered over the fact that the raw Linux
-.BR faccessat ()
-system call does not have a
-.I flags
-argument.
-To allow for a proper implementation, Linux 5.8 added the
-.BR faccessat2 ()
-system call, which supports the
-.I flags
-argument and allows a correct implementation of the
-.BR faccessat ()
-wrapper function.
-.SH RETURN VALUE
-On success (all requested permissions granted, or
-.I mode
-is
-.B F_OK
-and the file exists), zero is returned.
-On error (at least one bit in
-.I mode
-asked for a permission that is denied, or
-.I mode
-is
-.B F_OK
-and the file does not exist, or some other error occurred),
-\-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-The requested access would be denied to the file, or search permission
-is denied for one of the directories in the path prefix of
-.IR pathname .
-(See also
-.BR path_resolution (7).)
-.TP
-.B EBADF
-.RB ( faccessat ())
-.I pathname
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-.RB ( faccessat ())
-nor a valid file descriptor.
-.TP
-.B EFAULT
-.I pathname
-points outside your accessible address space.
-.TP
-.B EINVAL
-.I mode
-was incorrectly specified.
-.TP
-.B EINVAL
-.RB ( faccessat ())
-Invalid flag specified in
-.IR flags .
-.TP
-.B EIO
-An I/O error occurred.
-.TP
-.B ELOOP
-Too many symbolic links were encountered in resolving
-.IR pathname .
-.TP
-.B ENAMETOOLONG
-.I pathname
-is too long.
-.TP
-.B ENOENT
-A component of
-.I pathname
-does not exist or is a dangling symbolic link.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOTDIR
-A component used as a directory in
-.I pathname
-is not, in fact, a directory.
-.TP
-.B ENOTDIR
-.RB ( faccessat ())
-.I pathname
-is relative and
-.I dirfd
-is a file descriptor referring to a file other than a directory.
-.TP
-.B EPERM
-Write permission was requested to a file that has the immutable flag set.
-See also
-.BR ioctl_iflags (2).
-.TP
-.B EROFS
-Write permission was requested for a file on a read-only filesystem.
-.TP
-.B ETXTBSY
-Write access was requested to an executable which is being
-executed.
-.SH VERSIONS
-If the calling process has appropriate privileges (i.e., is superuser),
-POSIX.1-2001 permits an implementation to indicate success for an
-.B X_OK
-check even if none of the execute file permission bits are set.
-.\" HPU-UX 11 and Tru64 5.1 do this.
-Linux does not do this.
-.\"
-.SS C library/kernel differences
-The raw
-.BR faccessat ()
-system call takes only the first three arguments.
-The
-.B AT_EACCESS
-and
-.B AT_SYMLINK_NOFOLLOW
-flags are actually implemented within the glibc wrapper function for
-.BR faccessat ().
-If either of these flags is specified, then the wrapper function employs
-.BR fstatat (2)
-to determine access permissions, but see BUGS.
-.\"
-.SS glibc notes
-On older kernels where
-.BR faccessat ()
-is unavailable (and when the
-.B AT_EACCESS
-and
-.B AT_SYMLINK_NOFOLLOW
-flags are not specified),
-the glibc wrapper function falls back to the use of
-.BR access ().
-When
-.I pathname
-is a relative pathname,
-glibc constructs a pathname based on the symbolic link in
-.I /proc/self/fd
-that corresponds to the
-.I dirfd
-argument.
-.SH STANDARDS
-.TP
-.BR access ()
-.TQ
-.BR faccessat ()
-POSIX.1-2008.
-.TP
-.BR faccessat2 ()
-Linux.
-.SH HISTORY
-.TP
-.BR access ()
-SVr4, 4.3BSD, POSIX.1-2001.
-.TP
-.BR faccessat ()
-Linux 2.6.16,
-glibc 2.4.
-.TP
-.BR faccessat2 ()
-Linux 5.8.
-.SH NOTES
-.BR Warning :
-Using these calls to check if a user is authorized to, for example,
-open a file before actually doing so using
-.BR open (2)
-creates a security hole, because the user might exploit the short time
-interval between checking and opening the file to manipulate it.
-.BR "For this reason, the use of this system call should be avoided" .
-(In the example just described,
-a safer alternative would be to temporarily switch the process's
-effective user ID to the real ID and then call
-.BR open (2).)
-.PP
-.BR access ()
-always dereferences symbolic links.
-If you need to check the permissions on a symbolic link, use
-.BR faccessat ()
-with the flag
-.BR AT_SYMLINK_NOFOLLOW .
-.PP
-These calls return an error if any of the access types in
-.I mode
-is denied, even if some of the other access types in
-.I mode
-are permitted.
-.PP
-A file is accessible only if the permissions on each of the
-directories in the path prefix of
-.I pathname
-grant search (i.e., execute) access.
-If any directory is inaccessible, then the
-.BR access ()
-call fails, regardless of the permissions on the file itself.
-.PP
-Only access bits are checked, not the file type or contents.
-Therefore, if a directory is found to be writable,
-it probably means that files can be created in the directory,
-and not that the directory can be written as a file.
-Similarly, a DOS file may be reported as executable, but the
-.BR execve (2)
-call will still fail.
-.PP
-These calls
-may not work correctly on NFSv2 filesystems with UID mapping enabled,
-because UID mapping is done on the server and hidden from the client,
-which checks permissions.
-(NFS versions 3 and higher perform the check on the server.)
-Similar problems can occur to FUSE mounts.
-.\"
-.SH BUGS
-Because the Linux kernel's
-.BR faccessat ()
-system call does not support a
-.I flags
-argument, the glibc
-.BR faccessat ()
-wrapper function provided in glibc 2.32 and earlier
-emulates the required functionality using
-a combination of the
-.BR faccessat ()
-system call and
-.BR fstatat (2).
-However, this emulation does not take ACLs into account.
-Starting with glibc 2.33, the wrapper function avoids this bug
-by making use of the
-.BR faccessat2 ()
-system call where it is provided by the underlying kernel.
-.PP
-In Linux 2.4 (and earlier) there is some strangeness in the handling of
-.B X_OK
-tests for superuser.
-If all categories of execute permission are disabled
-for a nondirectory file, then the only
-.BR access ()
-test that returns \-1 is when
-.I mode
-is specified as just
-.BR X_OK ;
-if
-.B R_OK
-or
-.B W_OK
-is also specified in
-.IR mode ,
-then
-.BR access ()
-returns 0 for such files.
-.\" This behavior appears to have been an implementation accident.
-Early Linux 2.6 (up to and including Linux 2.6.3)
-also behaved in the same way as Linux 2.4.
-.PP
-Before Linux 2.6.20,
-these calls ignored the effect of the
-.B MS_NOEXEC
-flag if it was used to
-.BR mount (2)
-the underlying filesystem.
-Since Linux 2.6.20, the
-.B MS_NOEXEC
-flag is honored.
-.SH SEE ALSO
-.BR chmod (2),
-.BR chown (2),
-.BR open (2),
-.BR setgid (2),
-.BR setuid (2),
-.BR stat (2),
-.BR euidaccess (3),
-.BR credentials (7),
-.BR path_resolution (7),
-.BR symlink (7)
diff --git a/man2/acct.2 b/man2/acct.2
deleted file mode 100644
index 8b7d943b0..000000000
--- a/man2/acct.2
+++ /dev/null
@@ -1,136 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt
-.\" (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified 1993-07-22 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1993-08-10 by Alan Cox <iiitac@pyramid.swansea.ac.uk>
-.\" Modified 1998-11-04 by Tigran Aivazian <tigran@sco.com>
-.\" Modified 2004-05-27, 2004-06-17, 2004-06-23 by Michael Kerrisk
-.\"
-.TH acct 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-acct \- switch process accounting on or off
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int acct(const char *_Nullable " filename );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR acct ():
-.nf
- Since glibc 2.21:
-.\" commit 266865c0e7b79d4196e2cc393693463f03c90bd8
- _DEFAULT_SOURCE
- In glibc 2.19 and 2.20:
- _DEFAULT_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
- Up to and including glibc 2.19:
- _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
-.fi
-.SH DESCRIPTION
-The
-.BR acct ()
-system call enables or disables process accounting.
-If called with the name of an existing file as its argument,
-accounting is turned on,
-and records for each terminating process are appended to
-.I filename
-as it terminates.
-An argument of NULL causes accounting to be turned off.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-Write permission is denied for the specified file,
-or search permission is denied for one of the directories
-in the path prefix of
-.I filename
-(see also
-.BR path_resolution (7)),
-or
-.I filename
-is not a regular file.
-.TP
-.B EFAULT
-.I filename
-points outside your accessible address space.
-.TP
-.B EIO
-Error writing to the file
-.IR filename .
-.TP
-.B EISDIR
-.I filename
-is a directory.
-.TP
-.B ELOOP
-Too many symbolic links were encountered in resolving
-.IR filename .
-.TP
-.B ENAMETOOLONG
-.I filename
-was too long.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOENT
-The specified file does not exist.
-.TP
-.B ENOMEM
-Out of memory.
-.TP
-.B ENOSYS
-BSD process accounting has not been enabled when the operating system
-kernel was compiled.
-The kernel configuration parameter controlling this feature is
-.BR CONFIG_BSD_PROCESS_ACCT .
-.TP
-.B ENOTDIR
-A component used as a directory in
-.I filename
-is not in fact a directory.
-.TP
-.B EPERM
-The calling process has insufficient privilege to enable process accounting.
-On Linux, the
-.B CAP_SYS_PACCT
-capability is required.
-.TP
-.B EROFS
-.I filename
-refers to a file on a read-only filesystem.
-.TP
-.B EUSERS
-There are no more free file structures or we ran out of memory.
-.SH STANDARDS
-None.
-.SH HISTORY
-SVr4, 4.3BSD.
-.\" SVr4 documents an EBUSY error condition, but no EISDIR or ENOSYS.
-.\" Also AIX and HP-UX document EBUSY (attempt is made
-.\" to enable accounting when it is already enabled), as does Solaris
-.\" (attempt is made to enable accounting using the same file that is
-.\" currently being used).
-.SH NOTES
-No accounting is produced for programs running when a system crash occurs.
-In particular, nonterminating processes are never accounted for.
-.PP
-The structure of the records written to the accounting file is described in
-.BR acct (5).
-.SH SEE ALSO
-.BR acct (5)
diff --git a/man2/add_key.2 b/man2/add_key.2
deleted file mode 100644
index 9f502c964..000000000
--- a/man2/add_key.2
+++ /dev/null
@@ -1,298 +0,0 @@
-.\" Copyright (C) 2006 Red Hat, Inc. All Rights Reserved.
-.\" Written by David Howells (dhowells@redhat.com)
-.\" and Copyright (C) 2016 Michael Kerrisk <mtk.man-pages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH add_key 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-add_key \- add a key to the kernel's key management facility
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <keyutils.h>
-.PP
-.BI "key_serial_t add_key(const char *" type ", const char *" description ,
-.BI " const void " payload [. plen "], size_t " plen ,
-.BI " key_serial_t " keyring ");"
-.fi
-.PP
-.IR Note :
-There is no glibc wrapper for this system call; see NOTES.
-.SH DESCRIPTION
-.BR add_key ()
-creates or updates a key of the given
-.I type
-and
-.IR description ,
-instantiates it with the
-.I payload
-of length
-.IR plen ,
-attaches it to the nominated
-.IR keyring ,
-and returns the key's serial number.
-.PP
-The key may be rejected if the provided data is in the wrong format or
-it is invalid in some other way.
-.PP
-If the destination
-.I keyring
-already contains a key that matches the specified
-.I type
-and
-.IR description ,
-then, if the key type supports it,
-.\" FIXME The aforementioned phrases begs the question:
-.\" which key types support this?
-that key will be updated rather than a new key being created;
-if not, a new key (with a different ID) will be created
-and it will displace the link to the extant key from the keyring.
-.\" FIXME Perhaps elaborate the implications here? Namely, the new
-.\" key will have a new ID, and if the old key was a keyring that
-.\" is consequently unlinked, then keys that it was anchoring
-.\" will have their reference count decreased by one (and may
-.\" consequently be garbage collected). Is this all correct?
-.PP
-The destination
-.I keyring
-serial number may be that of a valid keyring for which the caller has
-.I write
-permission.
-Alternatively, it may be one of the following special keyring IDs:
-.\" FIXME . Perhaps have a separate page describing special keyring IDs?
-.TP
-.B KEY_SPEC_THREAD_KEYRING
-This specifies the caller's thread-specific keyring
-.RB ( thread\-keyring (7)).
-.TP
-.B KEY_SPEC_PROCESS_KEYRING
-This specifies the caller's process-specific keyring
-.RB ( process\-keyring (7)).
-.TP
-.B KEY_SPEC_SESSION_KEYRING
-This specifies the caller's session-specific keyring
-.RB ( session\-keyring (7)).
-.TP
-.B KEY_SPEC_USER_KEYRING
-This specifies the caller's UID-specific keyring
-.RB ( user\-keyring (7)).
-.TP
-.B KEY_SPEC_USER_SESSION_KEYRING
-This specifies the caller's UID-session keyring
-.RB ( user\-session\-keyring (7)).
-.SS Key types
-The key
-.I type
-is a string that specifies the key's type.
-Internally, the kernel defines a number of key types that are
-available in the core key management code.
-Among the types that are available for user-space use
-and can be specified as the
-.I type
-argument to
-.BR add_key ()
-are the following:
-.TP
-.I """keyring"""
-Keyrings are special key types that may contain links to sequences of other
-keys of any type.
-If this interface is used to create a keyring, then
-.I payload
-should be NULL and
-.I plen
-should be zero.
-.TP
-.I """user"""
-This is a general purpose key type whose payload may be read and updated
-by user-space applications.
-The key is kept entirely within kernel memory.
-The payload for keys of this type is a blob of arbitrary data
-of up to 32,767 bytes.
-.TP
-.IR """logon""" " (since Linux 3.3)"
-.\" commit 9f6ed2ca257fa8650b876377833e6f14e272848b
-This key type is essentially the same as
-.IR """user""" ,
-but it does not permit the key to read.
-This is suitable for storing payloads
-that you do not want to be readable from user space.
-.PP
-This key type vets the
-.I description
-to ensure that it is qualified by a "service" prefix,
-by checking to ensure that the
-.I description
-contains a ':' that is preceded by other characters.
-.TP
-.IR """big_key""" " (since Linux 3.13)"
-.\" commit ab3c3587f8cda9083209a61dbe3a4407d3cada10
-This key type is similar to
-.IR """user""" ,
-but may hold a payload of up to 1\ MiB.
-If the key payload is large enough,
-then it may be stored encrypted in tmpfs
-(which can be swapped out) rather than kernel memory.
-.PP
-For further details on these key types, see
-.BR keyrings (7).
-.SH RETURN VALUE
-On success,
-.BR add_key ()
-returns the serial number of the key it created or updated.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-The keyring wasn't available for modification by the user.
-.TP
-.B EDQUOT
-The key quota for this user would be exceeded by creating this key or linking
-it to the keyring.
-.TP
-.B EFAULT
-One or more of
-.IR type ,
-.IR description ,
-and
-.I payload
-points outside process's accessible address space.
-.TP
-.B EINVAL
-The size of the string (including the terminating null byte) specified in
-.I type
-or
-.I description
-exceeded the limit (32 bytes and 4096 bytes respectively).
-.TP
-.B EINVAL
-The payload data was invalid.
-.TP
-.B EINVAL
-.I type
-was
-.I """logon"""
-and the
-.I description
-was not qualified with a prefix string of the form
-.IR """service:""" .
-.TP
-.B EKEYEXPIRED
-The keyring has expired.
-.TP
-.B EKEYREVOKED
-The keyring has been revoked.
-.TP
-.B ENOKEY
-The keyring doesn't exist.
-.TP
-.B ENOMEM
-Insufficient memory to create a key.
-.TP
-.B EPERM
-The
-.I type
-started with a period (\[aq].\[aq]).
-Key types that begin with a period are reserved to the implementation.
-.TP
-.B EPERM
-.I type
-was
-.I """keyring"""
-and the
-.I description
-started with a period (\[aq].\[aq]).
-Keyrings with descriptions (names)
-that begin with a period are reserved to the implementation.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.10.
-.SH NOTES
-glibc does not provide a wrapper for this system call.
-A wrapper is provided in the
-.I libkeyutils
-library.
-(The accompanying package provides the
-.I <keyutils.h>
-header file.)
-When employing the wrapper in that library, link with
-.IR \-lkeyutils .
-.SH EXAMPLES
-The program below creates a key with the type, description, and payload
-specified in its command-line arguments,
-and links that key into the session keyring.
-The following shell session demonstrates the use of the program:
-.PP
-.in +4n
-.EX
-$ \fB./a.out user mykey "Some payload"\fP
-Key ID is 64a4dca
-$ \fBgrep \[aq]64a4dca\[aq] /proc/keys\fP
-064a4dca I\-\-Q\-\-\- 1 perm 3f010000 1000 1000 user mykey: 12
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (add_key.c)
-.EX
-#include <keyutils.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-int
-main(int argc, char *argv[])
-{
- key_serial_t key;
-\&
- if (argc != 4) {
- fprintf(stderr, "Usage: %s type description payload\en",
- argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- key = add_key(argv[1], argv[2], argv[3], strlen(argv[3]),
- KEY_SPEC_SESSION_KEYRING);
- if (key == \-1) {
- perror("add_key");
- exit(EXIT_FAILURE);
- }
-\&
- printf("Key ID is %jx\en", (uintmax_t) key);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.ad l
-.nh
-.BR keyctl (1),
-.BR keyctl (2),
-.BR request_key (2),
-.BR keyctl (3),
-.BR keyrings (7),
-.BR keyutils (7),
-.BR persistent\-keyring (7),
-.BR process\-keyring (7),
-.BR session\-keyring (7),
-.BR thread\-keyring (7),
-.BR user\-keyring (7),
-.BR user\-session\-keyring (7)
-.PP
-The kernel source files
-.I Documentation/security/keys/core.rst
-and
-.I Documentation/keys/request\-key.rst
-(or, before Linux 4.13, in the files
-.\" commit b68101a1e8f0263dbc7b8375d2a7c57c6216fb76
-.I Documentation/security/keys.txt
-and
-.\" commit 3db38ed76890565772fcca3279cc8d454ea6176b
-.IR Documentation/security/keys\-request\-key.txt ).
diff --git a/man2/adjtimex.2 b/man2/adjtimex.2
deleted file mode 100644
index 40b05cb0e..000000000
--- a/man2/adjtimex.2
+++ /dev/null
@@ -1,594 +0,0 @@
-'\" t
-.\" Copyright (c) 1995 Michael Chastain (mec@shell.portal.com), 15 April 1995.
-.\" and Copyright (C) 2014, 2016 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified 1997-01-31 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1997-07-30 by Paul Slootman <paul@wurtel.demon.nl>
-.\" Modified 2004-05-27 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH adjtimex 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-adjtimex, clock_adjtime, ntp_adjtime \- tune kernel clock
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/timex.h>
-.PP
-.BI "int adjtimex(struct timex *" "buf" );
-.PP
-.BI "int clock_adjtime(clockid_t " clk_id, " struct timex *" "buf" );
-.PP
-.BI "int ntp_adjtime(struct timex *" buf );
-.fi
-.SH DESCRIPTION
-Linux uses David L.\& Mills' clock adjustment algorithm (see RFC\ 5905).
-The system call
-.BR adjtimex ()
-reads and optionally sets adjustment parameters for this algorithm.
-It takes a pointer to a
-.I timex
-structure, updates kernel parameters from (selected) field values,
-and returns the same structure updated with the current kernel values.
-This structure is declared as follows:
-.PP
-.in +4n
-.EX
-struct timex {
- int modes; /* Mode selector */
- long offset; /* Time offset; nanoseconds, if STA_NANO
- status flag is set, otherwise
- microseconds */
- long freq; /* Frequency offset; see NOTES for units */
- long maxerror; /* Maximum error (microseconds) */
- long esterror; /* Estimated error (microseconds) */
- int status; /* Clock command/status */
- long constant; /* PLL (phase\-locked loop) time constant */
- long precision; /* Clock precision
- (microseconds, read\-only) */
- long tolerance; /* Clock frequency tolerance (read\-only);
- see NOTES for units */
- struct timeval time;
- /* Current time (read\-only, except for
- ADJ_SETOFFSET); upon return, time.tv_usec
- contains nanoseconds, if STA_NANO status
- flag is set, otherwise microseconds */
- long tick; /* Microseconds between clock ticks */
- long ppsfreq; /* PPS (pulse per second) frequency
- (read\-only); see NOTES for units */
- long jitter; /* PPS jitter (read\-only); nanoseconds, if
- STA_NANO status flag is set, otherwise
- microseconds */
- int shift; /* PPS interval duration
- (seconds, read\-only) */
- long stabil; /* PPS stability (read\-only);
- see NOTES for units */
- long jitcnt; /* PPS count of jitter limit exceeded
- events (read\-only) */
- long calcnt; /* PPS count of calibration intervals
- (read\-only) */
- long errcnt; /* PPS count of calibration errors
- (read\-only) */
- long stbcnt; /* PPS count of stability limit exceeded
- events (read\-only) */
- int tai; /* TAI offset, as set by previous ADJ_TAI
- operation (seconds, read\-only,
- since Linux 2.6.26) */
- /* Further padding bytes to allow for future expansion */
-};
-.EE
-.in
-.PP
-The
-.I modes
-field determines which parameters, if any, to set.
-(As described later in this page,
-the constants used for
-.BR ntp_adjtime ()
-are equivalent but differently named.)
-It is a bit mask containing a
-bitwise OR
-combination of zero or more of the following bits:
-.TP
-.B ADJ_OFFSET
-Set time offset from
-.IR buf.offset .
-Since Linux 2.6.26,
-.\" commit 074b3b87941c99bc0ce35385b5817924b1ed0c23
-the supplied value is clamped to the range (\-0.5s, +0.5s).
-In older kernels, an
-.B EINVAL
-error occurs if the supplied value is out of range.
-.TP
-.B ADJ_FREQUENCY
-Set frequency offset from
-.IR buf.freq .
-Since Linux 2.6.26,
-.\" commit 074b3b87941c99bc0ce35385b5817924b1ed0c23
-the supplied value is clamped to the range (\-32768000, +32768000).
-In older kernels, an
-.B EINVAL
-error occurs if the supplied value is out of range.
-.TP
-.B ADJ_MAXERROR
-Set maximum time error from
-.IR buf.maxerror .
-.TP
-.B ADJ_ESTERROR
-Set estimated time error from
-.IR buf.esterror .
-.TP
-.B ADJ_STATUS
-Set clock status bits from
-.IR buf.status .
-A description of these bits is provided below.
-.TP
-.B ADJ_TIMECONST
-Set PLL time constant from
-.IR buf.constant .
-If the
-.B STA_NANO
-status flag (see below) is clear, the kernel adds 4 to this value.
-.TP
-.BR ADJ_SETOFFSET " (since Linux 2.6.39)"
-.\" commit 094aa1881fdc1b8889b442eb3511b31f3ec2b762
-.\" Author: Richard Cochran <richardcochran@gmail.com>
-Add
-.I buf.time
-to the current time.
-If
-.I buf.status
-includes the
-.B ADJ_NANO
-flag, then
-.I buf.time.tv_usec
-is interpreted as a nanosecond value;
-otherwise it is interpreted as microseconds.
-.IP
-The value of
-.I buf.time
-is the sum of its two fields, but the
-field
-.I buf.time.tv_usec
-must always be nonnegative.
-The following example shows how to
-normalize a
-.I timeval
-with nanosecond resolution.
-.IP
-.in +4n
-.EX
-while (buf.time.tv_usec < 0) {
- buf.time.tv_sec \-= 1;
- buf.time.tv_usec += 1000000000;
-}
-.EE
-.in
-.TP
-.BR ADJ_MICRO " (since Linux 2.6.26)"
-.\" commit eea83d896e318bda54be2d2770d2c5d6668d11db
-.\" Author: Roman Zippel <zippel@linux-m68k.org>
-Select microsecond resolution.
-.TP
-.BR ADJ_NANO " (since Linux 2.6.26)"
-.\" commit eea83d896e318bda54be2d2770d2c5d6668d11db
-.\" Author: Roman Zippel <zippel@linux-m68k.org>
-Select nanosecond resolution.
-Only one of
-.B ADJ_MICRO
-and
-.B ADJ_NANO
-should be specified.
-.TP
-.BR ADJ_TAI " (since Linux 2.6.26)"
-.\" commit 153b5d054ac2d98ea0d86504884326b6777f683d
-Set TAI (Atomic International Time) offset from
-.IR buf.constant .
-.IP
-.B ADJ_TAI
-should not be used in conjunction with
-.BR ADJ_TIMECONST ,
-since the latter mode also employs the
-.I buf.constant
-field.
-.IP
-For a complete explanation of TAI
-and the difference between TAI and UTC, see
-.UR http://www.bipm.org/en/bipm/tai/tai.html
-.I BIPM
-.UE
-.TP
-.B ADJ_TICK
-Set tick value from
-.IR buf.tick .
-.PP
-Alternatively,
-.I modes
-can be specified as either of the following (multibit mask) values,
-in which case other bits should not be specified in
-.IR modes :
-.\" In general, the other bits are ignored, but ADJ_OFFSET_SINGLESHOT 0x8001
-.\" ORed with ADJ_NANO (0x2000) gives 0xa0001 == ADJ_OFFSET_SS_READ!!
-.TP
-.B ADJ_OFFSET_SINGLESHOT
-.\" In user space, ADJ_OFFSET_SINGLESHOT is 0x8001
-.\" In kernel space it is 0x0001, and must be ANDed with ADJ_ADJTIME (0x8000)
-Old-fashioned
-.BR adjtime (3):
-(gradually) adjust time by value specified in
-.IR buf.offset ,
-which specifies an adjustment in microseconds.
-.TP
-.BR ADJ_OFFSET_SS_READ " (functional since Linux 2.6.28)"
-.\" In user space, ADJ_OFFSET_SS_READ is 0xa001
-.\" In kernel space there is ADJ_OFFSET_READONLY (0x2000) anded with
-.\" ADJ_ADJTIME (0x8000) and ADJ_OFFSET_SINGLESHOT (0x0001) to give 0xa001)
-Return (in
-.IR buf.offset )
-the remaining amount of time to be adjusted after an earlier
-.B ADJ_OFFSET_SINGLESHOT
-operation.
-This feature was added in Linux 2.6.24,
-.\" commit 52bfb36050c8529d9031d2c2513b281a360922ec
-but did not work correctly
-.\" commit 916c7a855174e3b53d182b97a26b2e27a29726a1
-until Linux 2.6.28.
-.PP
-Ordinary users are restricted to a value of either 0 or
-.B ADJ_OFFSET_SS_READ
-for
-.IR modes .
-Only the superuser may set any parameters.
-.PP
-The
-.I buf.status
-field is a bit mask that is used to set and/or retrieve status
-bits associated with the NTP implementation.
-Some bits in the mask are both readable and settable,
-while others are read-only.
-.TP
-.BR STA_PLL " (read-write)"
-Enable phase-locked loop (PLL) updates via
-.BR ADJ_OFFSET .
-.TP
-.BR STA_PPSFREQ " (read-write)"
-Enable PPS (pulse-per-second) frequency discipline.
-.TP
-.BR STA_PPSTIME " (read-write)"
-Enable PPS time discipline.
-.TP
-.BR STA_FLL " (read-write)"
-Select frequency-locked loop (FLL) mode.
-.TP
-.BR STA_INS " (read-write)"
-Insert a leap second after the last second of the UTC day,
-thus extending the last minute of the day by one second.
-Leap-second insertion will occur each day, so long as this flag remains set.
-.\" John Stultz;
-.\" Usually this is written as extending the day by one second,
-.\" which is represented as:
-.\" 23:59:59
-.\" 23:59:60
-.\" 00:00:00
-.\"
-.\" But since posix cannot represent 23:59:60, we repeat the last second:
-.\" 23:59:59 + TIME_INS
-.\" 23:59:59 + TIME_OOP
-.\" 00:00:00 + TIME_WAIT
-.\"
-.TP
-.BR STA_DEL " (read-write)"
-Delete a leap second at the last second of the UTC day.
-.\" John Stultz:
-.\" Similarly the progression here is:
-.\" 23:59:57 + TIME_DEL
-.\" 23:59:58 + TIME_DEL
-.\" 00:00:00 + TIME_WAIT
-Leap second deletion will occur each day, so long as this flag
-remains set.
-.\" FIXME Does there need to be a statement that it is nonsensical to set
-.\" to set both STA_INS and STA_DEL?
-.TP
-.BR STA_UNSYNC " (read-write)"
-Clock unsynchronized.
-.TP
-.BR STA_FREQHOLD " (read-write)"
-Hold frequency.
-.\" Following text from John Stultz:
-Normally adjustments made via
-.B ADJ_OFFSET
-result in dampened frequency adjustments also being made.
-So a single call corrects the current offset,
-but as offsets in the same direction are made repeatedly,
-the small frequency adjustments will accumulate to fix the long-term skew.
-.IP
-This flag prevents the small frequency adjustment from being made
-when correcting for an
-.B ADJ_OFFSET
-value.
-.\" According to the Kernel Application Program Interface document,
-.\" STA_FREQHOLD is not used by the NTP version 4 daemon
-.TP
-.BR STA_PPSSIGNAL " (read-only)"
-A valid PPS (pulse-per-second) signal is present.
-.TP
-.BR STA_PPSJITTER " (read-only)"
-PPS signal jitter exceeded.
-.TP
-.BR STA_PPSWANDER " (read-only)"
-PPS signal wander exceeded.
-.TP
-.BR STA_PPSERROR " (read-only)"
-PPS signal calibration error.
-.TP
-.BR STA_CLOCKERR " (read-only)"
-Clock hardware fault.
-.\" Not set in current kernel (4.5), but checked in a few places
-.TP
-.BR STA_NANO " (read-only; since Linux 2.6.26)"
-.\" commit eea83d896e318bda54be2d2770d2c5d6668d11db
-.\" Author: Roman Zippel <zippel@linux-m68k.org>
-Resolution (0 = microsecond, 1 = nanoseconds).
-Set via
-.BR ADJ_NANO ,
-cleared via
-.BR ADJ_MICRO .
-.TP
-.BR STA_MODE " (since Linux 2.6.26)"
-.\" commit eea83d896e318bda54be2d2770d2c5d6668d11db
-.\" Author: Roman Zippel <zippel@linux-m68k.org>
-Mode (0 = Phase Locked Loop, 1 = Frequency Locked Loop).
-.TP
-.BR STA_CLK " (read-only; since Linux 2.6.26)"
-.\" commit eea83d896e318bda54be2d2770d2c5d6668d11db
-.\" Author: Roman Zippel <zippel@linux-m68k.org>
-Clock source (0 = A, 1 = B); currently unused.
-.PP
-Attempts to set read-only
-.I status
-bits are silently ignored.
-.\"
-.SS clock_adjtime ()
-The
-.BR clock_adjtime ()
-system call (added in Linux 2.6.39) behaves like
-.BR adjtimex ()
-but takes an additional
-.I clk_id
-argument to specify the particular clock on which to act.
-.SS ntp_adjtime ()
-The
-.BR ntp_adjtime ()
-library function
-(described in the NTP "Kernel Application Program API", KAPI)
-is a more portable interface for performing the same task as
-.BR adjtimex ().
-Other than the following points, it is identical to
-.BR adjtimex ():
-.IP \[bu] 3
-The constants used in
-.I modes
-are prefixed with "MOD_" rather than "ADJ_", and have the same suffixes (thus,
-.BR MOD_OFFSET ,
-.BR MOD_FREQUENCY ,
-and so on), other than the exceptions noted in the following points.
-.IP \[bu]
-.B MOD_CLKA
-is the synonym for
-.BR ADJ_OFFSET_SINGLESHOT .
-.IP \[bu]
-.B MOD_CLKB
-is the synonym for
-.BR ADJ_TICK .
-.IP \[bu]
-The is no synonym for
-.BR ADJ_OFFSET_SS_READ ,
-which is not described in the KAPI.
-.SH RETURN VALUE
-On success,
-.BR adjtimex ()
-and
-.BR ntp_adjtime ()
-return the clock state; that is, one of the following values:
-.TP 12
-.B TIME_OK
-Clock synchronized, no leap second adjustment pending.
-.TP
-.B TIME_INS
-Indicates that a leap second will be added at the end of the UTC day.
-.TP
-.B TIME_DEL
-Indicates that a leap second will be deleted at the end of the UTC day.
-.TP
-.B TIME_OOP
-Insertion of a leap second is in progress.
-.TP
-.B TIME_WAIT
-A leap-second insertion or deletion has been completed.
-This value will be returned until the next
-.B ADJ_STATUS
-operation clears the
-.B STA_INS
-and
-.B STA_DEL
-flags.
-.TP
-.B TIME_ERROR
-The system clock is not synchronized to a reliable server.
-This value is returned when any of the following holds true:
-.RS
-.IP \[bu] 3
-Either
-.B STA_UNSYNC
-or
-.B STA_CLOCKERR
-is set.
-.IP \[bu]
-.B STA_PPSSIGNAL
-is clear and either
-.B STA_PPSFREQ
-or
-.B STA_PPSTIME
-is set.
-.IP \[bu]
-.B STA_PPSTIME
-and
-.B STA_PPSJITTER
-are both set.
-.IP \[bu]
-.B STA_PPSFREQ
-is set and either
-.B STA_PPSWANDER
-or
-.B STA_PPSJITTER
-is set.
-.RE
-.IP
-The symbolic name
-.B TIME_BAD
-is a synonym for
-.BR TIME_ERROR ,
-provided for backward compatibility.
-.PP
-Note that starting with Linux 3.4,
-.\" commit 6b43ae8a619d17c4935c3320d2ef9e92bdeed05d changed to asynchronous
-.\" operation, so we can no longer rely on the return code.
-the call operates asynchronously and the return value usually will
-not reflect a state change caused by the call itself.
-.PP
-On failure, these calls return \-1 and set
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-.I buf
-does not point to writable memory.
-.TP
-.BR EINVAL " (before Linux 2.6.26)"
-An attempt was made to set
-.I buf.freq
-to a value outside the range (\-33554432, +33554432).
-.\" From a quick glance, it appears there was no clamping or range check
-.\" for buf.freq before Linux 2.0
-.TP
-.BR EINVAL " (before Linux 2.6.26)"
-An attempt was made to set
-.I buf.offset
-to a value outside the permitted range.
-Before Linux 2.0, the permitted range was (\-131072, +131072).
-From Linux 2.0 onwards, the permitted range was (\-512000, +512000).
-.TP
-.B EINVAL
-An attempt was made to set
-.I buf.status
-to a value other than those listed above.
-.TP
-.B EINVAL
-The
-.I clk_id
-given to
-.BR clock_adjtime ()
-is invalid for one of two reasons.
-Either the System-V style hard-coded
-positive clock ID value is out of range, or the dynamic
-.I clk_id
-does not refer to a valid instance of a clock object.
-See
-.BR clock_gettime (2)
-for a discussion of dynamic clocks.
-.TP
-.B EINVAL
-An attempt was made to set
-.I buf.tick
-to a value outside the range
-.RB 900000/ HZ
-to
-.RB 1100000/ HZ ,
-where
-.B HZ
-is the system timer interrupt frequency.
-.TP
-.B ENODEV
-The hot-pluggable device (like USB for example) represented by a
-dynamic
-.I clk_id
-has disappeared after its character device was opened.
-See
-.BR clock_gettime (2)
-for a discussion of dynamic clocks.
-.TP
-.B EOPNOTSUPP
-The given
-.I clk_id
-does not support adjustment.
-.TP
-.B EPERM
-.I buf.modes
-is neither 0 nor
-.BR ADJ_OFFSET_SS_READ ,
-and the caller does not have sufficient privilege.
-Under Linux, the
-.B CAP_SYS_TIME
-capability is required.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR \%ntp_adjtime ()
-T} Thread safety MT-Safe
-.TE
-.sp 1
-.SH STANDARDS
-.TP
-.BR adjtimex ()
-.TQ
-.BR clock_adjtime ()
-Linux.
-.PP
-The preferred API for the NTP daemon is
-.BR ntp_adjtime ().
-.SH NOTES
-In struct
-.IR timex ,
-.IR freq ,
-.IR ppsfreq ,
-and
-.I stabil
-are ppm (parts per million) with a 16-bit fractional part,
-which means that a value of 1 in one of those fields
-actually means 2\[ha]-16 ppm, and 2\[ha]16=65536 is 1 ppm.
-This is the case for both input values (in the case of
-.IR freq )
-and output values.
-.PP
-The leap-second processing triggered by
-.B STA_INS
-and
-.B STA_DEL
-is done by the kernel in timer context.
-Thus, it will take one tick into the second
-for the leap second to be inserted or deleted.
-.SH SEE ALSO
-.BR clock_gettime (2),
-.BR clock_settime (2),
-.BR settimeofday (2),
-.BR adjtime (3),
-.BR ntp_gettime (3),
-.BR capabilities (7),
-.BR time (7),
-.BR adjtimex (8),
-.BR hwclock (8)
-.PP
-.ad l
-.UR http://www.slac.stanford.edu/comp/unix/\:package/\:rtems/\:src/\:ssrlApps/\:ntpNanoclock/\:api.htm
-NTP "Kernel Application Program Interface"
-.UE
diff --git a/man2/afs_syscall.2 b/man2/afs_syscall.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/afs_syscall.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/alarm.2 b/man2/alarm.2
deleted file mode 100644
index dbc97b632..000000000
--- a/man2/alarm.2
+++ /dev/null
@@ -1,81 +0,0 @@
-.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\" and Copyright (C) 1993 Michael Haardt, Ian Jackson.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Wed Jul 21 19:42:57 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Sun Jul 21 21:25:26 1996 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified Wed Nov 6 03:46:05 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\"
-.TH alarm 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-alarm \- set an alarm clock for delivery of a signal
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "unsigned int alarm(unsigned int " seconds );
-.fi
-.SH DESCRIPTION
-.BR alarm ()
-arranges for a
-.B SIGALRM
-signal to be delivered to the calling process in
-.I seconds
-seconds.
-.PP
-If
-.I seconds
-is zero, any pending alarm is canceled.
-.PP
-In any event any previously set
-.BR alarm ()
-is canceled.
-.SH RETURN VALUE
-.BR alarm ()
-returns the number of seconds remaining until any previously scheduled
-alarm was due to be delivered, or zero if there was no previously
-scheduled alarm.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.SH NOTES
-.BR alarm ()
-and
-.BR setitimer (2)
-share the same timer; calls to one will interfere with use of the
-other.
-.PP
-Alarms created by
-.BR alarm ()
-are preserved across
-.BR execve (2)
-and are not inherited by children created via
-.BR fork (2).
-.PP
-.BR sleep (3)
-may be implemented using
-.BR SIGALRM ;
-mixing calls to
-.BR alarm ()
-and
-.BR sleep (3)
-is a bad idea.
-.PP
-Scheduling delays can, as ever, cause the execution of the process to
-be delayed by an arbitrary amount of time.
-.SH SEE ALSO
-.BR gettimeofday (2),
-.BR pause (2),
-.BR select (2),
-.BR setitimer (2),
-.BR sigaction (2),
-.BR signal (2),
-.BR timer_create (2),
-.BR timerfd_create (2),
-.BR sleep (3),
-.BR time (7)
diff --git a/man2/alloc_hugepages.2 b/man2/alloc_hugepages.2
deleted file mode 100644
index 1e470c619..000000000
--- a/man2/alloc_hugepages.2
+++ /dev/null
@@ -1,135 +0,0 @@
-.\" Copyright 2003 Andries E. Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH alloc_hugepages 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-alloc_hugepages, free_hugepages \- allocate or free huge pages
-.SH SYNOPSIS
-.nf
-.BI "void *syscall(SYS_alloc_hugepages, int " key ", void " addr [. len "], \
-size_t " len ,
-.BI " int " prot ", int " flag );
-.\" asmlinkage unsigned long sys_alloc_hugepages(int key, unsigned long addr,
-.\" unsigned long len, int prot, int flag);
-.BI "int syscall(SYS_free_hugepages, void *" addr );
-.\" asmlinkage int sys_free_hugepages(unsigned long addr);
-.fi
-.PP
-.IR Note :
-glibc provides no wrappers for these system calls,
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The system calls
-.BR alloc_hugepages ()
-and
-.BR free_hugepages ()
-were introduced in Linux 2.5.36 and removed again in Linux 2.5.54.
-They existed only on i386 and ia64 (when built with
-.BR CONFIG_HUGETLB_PAGE ).
-In Linux 2.4.20, the syscall numbers exist,
-but the calls fail with the error
-.BR ENOSYS .
-.PP
-On i386 the memory management hardware knows about ordinary pages (4\ KiB)
-and huge pages (2 or 4\ MiB).
-Similarly ia64 knows about huge pages of
-several sizes.
-These system calls serve to map huge pages into the
-process's memory or to free them again.
-Huge pages are locked into memory, and are not swapped.
-.PP
-The
-.I key
-argument is an identifier.
-When zero the pages are private, and
-not inherited by children.
-When positive the pages are shared with other applications using the same
-.IR key ,
-and inherited by child processes.
-.PP
-The
-.I addr
-argument of
-.BR free_hugepages ()
-tells which page is being freed: it was the return value of a
-call to
-.BR alloc_hugepages ().
-(The memory is first actually freed when all users have released it.)
-The
-.I addr
-argument of
-.BR alloc_hugepages ()
-is a hint, that the kernel may or may not follow.
-Addresses must be properly aligned.
-.PP
-The
-.I len
-argument is the length of the required segment.
-It must be a multiple of the huge page size.
-.PP
-The
-.I prot
-argument specifies the memory protection of the segment.
-It is one of
-.BR PROT_READ ,
-.BR PROT_WRITE ,
-.BR PROT_EXEC .
-.PP
-The
-.I flag
-argument is ignored, unless
-.I key
-is positive.
-In that case, if
-.I flag
-is
-.BR IPC_CREAT ,
-then a new huge page segment is created when none
-with the given key existed.
-If this flag is not set, then
-.B ENOENT
-is returned when no segment with the given key exists.
-.SH RETURN VALUE
-On success,
-.BR alloc_hugepages ()
-returns the allocated virtual address, and
-.BR free_hugepages ()
-returns zero.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B ENOSYS
-The system call is not supported on this kernel.
-.SH FILES
-.TP
-.I /proc/sys/vm/nr_hugepages
-Number of configured hugetlb pages.
-This can be read and written.
-.TP
-.I /proc/meminfo
-Gives info on the number of configured hugetlb pages and on their size
-in the three variables HugePages_Total, HugePages_Free, Hugepagesize.
-.SH STANDARDS
-Linux on Intel processors.
-.SH HISTORY
-These system calls are gone;
-they existed only in Linux 2.5.36 through to Linux 2.5.54.
-.SH NOTES
-Now the hugetlbfs filesystem can be used instead.
-Memory backed by huge pages (if the CPU supports them) is obtained by
-using
-.BR mmap (2)
-to map files in this virtual filesystem.
-.PP
-The maximal number of huge pages can be specified using the
-.B hugepages=
-boot parameter.
-.\".PP
-.\" requires CONFIG_HUGETLB_PAGE (under "Processor type and features")
-.\" and CONFIG_HUGETLBFS (under "Filesystems").
-.\" mount \-t hugetlbfs hugetlbfs /huge
-.\" SHM_HUGETLB
diff --git a/man2/arch_prctl.2 b/man2/arch_prctl.2
deleted file mode 100644
index edb94989b..000000000
--- a/man2/arch_prctl.2
+++ /dev/null
@@ -1,176 +0,0 @@
-.\" Copyright (C) 2003 Andi Kleen
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH arch_prctl 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-arch_prctl \- set architecture-specific thread state
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <asm/prctl.h>" " /* Definition of " ARCH_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_arch_prctl, int " code ", unsigned long " addr );
-.BI "int syscall(SYS_arch_prctl, int " code ", unsigned long *" addr );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR arch_prctl (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-.BR arch_prctl ()
-sets architecture-specific process or thread state.
-.I code
-selects a subfunction
-and passes argument
-.I addr
-to it;
-.I addr
-is interpreted as either an
-.I "unsigned long"
-for the "set" operations, or as an
-.IR "unsigned long\ *" ,
-for the "get" operations.
-.PP
-Subfunctions for both x86 and x86-64 are:
-.TP
-.BR ARCH_SET_CPUID " (since Linux 4.12)"
-.\" commit e9ea1e7f53b852147cbd568b0568c7ad97ec21a3
-Enable
-.RI ( "addr != 0" )
-or disable
-.RI ( "addr == 0" )
-the
-.I cpuid
-instruction for the calling thread.
-The instruction is enabled by default.
-If disabled, any execution of a
-.I cpuid
-instruction will instead generate a
-.B SIGSEGV
-signal.
-This feature can be used to emulate
-.I cpuid
-results that differ from what the underlying
-hardware would have produced (e.g., in a paravirtualization setting).
-.IP
-The
-.B ARCH_SET_CPUID
-setting is preserved across
-.BR fork (2)
-and
-.BR clone (2)
-but reset to the default (i.e.,
-.I cpuid
-enabled) on
-.BR execve (2).
-.TP
-.BR ARCH_GET_CPUID " (since Linux 4.12)"
-Return the setting of the flag manipulated by
-.B ARCH_SET_CPUID
-as the result of the system call (1 for enabled, 0 for disabled).
-.I addr
-is ignored.
-.TP
-Subfunctions for x86-64 only are:
-.TP
-.B ARCH_SET_FS
-Set the 64-bit base for the
-.I FS
-register to
-.IR addr .
-.TP
-.B ARCH_GET_FS
-Return the 64-bit base value for the
-.I FS
-register of the calling thread in the
-.I unsigned long
-pointed to by
-.IR addr .
-.TP
-.B ARCH_SET_GS
-Set the 64-bit base for the
-.I GS
-register to
-.IR addr .
-.TP
-.B ARCH_GET_GS
-Return the 64-bit base value for the
-.I GS
-register of the calling thread in the
-.I unsigned long
-pointed to by
-.IR addr .
-.SH RETURN VALUE
-On success,
-.BR arch_prctl ()
-returns 0; on error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-.I addr
-points to an unmapped address or is outside the process address space.
-.TP
-.B EINVAL
-.I code
-is not a valid subcommand.
-.TP
-.B ENODEV
-.B ARCH_SET_CPUID
-was requested, but the underlying hardware does not support CPUID faulting.
-.TP
-.B EPERM
-.I addr
-is outside the process address space.
-.\" .SH AUTHOR
-.\" Man page written by Andi Kleen.
-.SH STANDARDS
-Linux/x86-64.
-.SH NOTES
-.BR arch_prctl ()
-is supported only on Linux/x86-64 for 64-bit programs currently.
-.PP
-The 64-bit base changes when a new 32-bit segment selector is loaded.
-.PP
-.B ARCH_SET_GS
-is disabled in some kernels.
-.PP
-Context switches for 64-bit segment bases are rather expensive.
-As an optimization, if a 32-bit TLS base address is used,
-.BR arch_prctl ()
-may use a real TLS entry as if
-.BR set_thread_area (2)
-had been called, instead of manipulating the segment base register directly.
-Memory in the first 2\ GB of address space can be allocated by using
-.BR mmap (2)
-with the
-.B MAP_32BIT
-flag.
-.PP
-Because of the aforementioned optimization, using
-.BR arch_prctl ()
-and
-.BR set_thread_area (2)
-in the same thread is dangerous, as they may overwrite each other's
-TLS entries.
-.PP
-.I FS
-may be already used by the threading library.
-Programs that use
-.B ARCH_SET_FS
-directly are very likely to crash.
-.SH SEE ALSO
-.BR mmap (2),
-.BR modify_ldt (2),
-.BR prctl (2),
-.BR set_thread_area (2)
-.PP
-AMD X86-64 Programmer's manual
diff --git a/man2/arm_fadvise.2 b/man2/arm_fadvise.2
deleted file mode 100644
index 53f54a121..000000000
--- a/man2/arm_fadvise.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/posix_fadvise.2
diff --git a/man2/arm_fadvise64_64.2 b/man2/arm_fadvise64_64.2
deleted file mode 100644
index 53f54a121..000000000
--- a/man2/arm_fadvise64_64.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/posix_fadvise.2
diff --git a/man2/arm_sync_file_range.2 b/man2/arm_sync_file_range.2
deleted file mode 100644
index ad7a1e6c7..000000000
--- a/man2/arm_sync_file_range.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sync_file_range.2
diff --git a/man2/bdflush.2 b/man2/bdflush.2
deleted file mode 100644
index 50b45084a..000000000
--- a/man2/bdflush.2
+++ /dev/null
@@ -1,103 +0,0 @@
-.\" Copyright (c) 1995 Michael Chastain (mec@shell.portal.com), 15 April 1995.
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified 1997-01-31 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2004-06-17 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH bdflush 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-bdflush \- start, flush, or tune buffer-dirty-flush daemon
-.SH SYNOPSIS
-.nf
-.B #include <sys/kdaemon.h>
-.PP
-.BI "[[deprecated]] int bdflush(int " func ", long *" address );
-.BI "[[deprecated]] int bdflush(int " func ", long " data );
-.fi
-.SH DESCRIPTION
-.IR Note :
-Since Linux 2.6,
-.\" As noted in changes in the 2.5.12 source
-this system call is deprecated and does nothing.
-It is likely to disappear altogether in a future kernel release.
-Nowadays, the task performed by
-.BR bdflush ()
-is handled by the kernel
-.I pdflush
-thread.
-.PP
-.BR bdflush ()
-starts, flushes, or tunes the buffer-dirty-flush daemon.
-Only a privileged process (one with the
-.B CAP_SYS_ADMIN
-capability) may call
-.BR bdflush ().
-.PP
-If
-.I func
-is negative or 0, and no daemon has been started, then
-.BR bdflush ()
-enters the daemon code and never returns.
-.PP
-If
-.I func
-is 1,
-some dirty buffers are written to disk.
-.PP
-If
-.I func
-is 2 or more and is even (low bit is 0), then
-.I address
-is the address of a long word,
-and the tuning parameter numbered
-.RI "(" "func" "\-2)/2"
-is returned to the caller in that address.
-.PP
-If
-.I func
-is 3 or more and is odd (low bit is 1), then
-.I data
-is a long word,
-and the kernel sets tuning parameter numbered
-.RI "(" "func" "\-3)/2"
-to that value.
-.PP
-The set of parameters, their values, and their valid ranges
-are defined in the Linux kernel source file
-.IR fs/buffer.c .
-.SH RETURN VALUE
-If
-.I func
-is negative or 0 and the daemon successfully starts,
-.BR bdflush ()
-never returns.
-Otherwise, the return value is 0 on success and \-1 on failure, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EBUSY
-An attempt was made to enter the daemon code after
-another process has already entered.
-.TP
-.B EFAULT
-.I address
-points outside your accessible address space.
-.TP
-.B EINVAL
-An attempt was made to read or write an invalid parameter number,
-or to write an invalid value to a parameter.
-.TP
-.B EPERM
-Caller does not have the
-.B CAP_SYS_ADMIN
-capability.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Since glibc 2.23, glibc no longer supports this obsolete system call.
-.SH SEE ALSO
-.BR sync (1),
-.BR fsync (2),
-.BR sync (2)
diff --git a/man2/bind.2 b/man2/bind.2
deleted file mode 100644
index a9627b7ad..000000000
--- a/man2/bind.2
+++ /dev/null
@@ -1,286 +0,0 @@
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
-.\" and Copyright 2005-2007, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Portions extracted from /usr/include/sys/socket.h, which does not have
-.\" any authorship information in it. It is probably available under the GPL.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.\" Other portions are from the 6.9 (Berkeley) 3/10/91 man page:
-.\"
-.\" Copyright (c) 1983 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" Modified Mon Oct 21 23:05:29 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1998 by Andi Kleen
-.\" $Id: bind.2,v 1.3 1999/04/23 19:56:07 freitag Exp $
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH bind 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-bind \- bind a name to a socket
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.PP
-.BI "int bind(int " sockfd ", const struct sockaddr *" addr ,
-.BI " socklen_t " addrlen );
-.fi
-.SH DESCRIPTION
-When a socket is created with
-.BR socket (2),
-it exists in a name space (address family) but has no address assigned to it.
-.BR bind ()
-assigns the address specified by
-.I addr
-to the socket referred to by the file descriptor
-.IR sockfd .
-.I addrlen
-specifies the size, in bytes, of the address structure pointed to by
-.IR addr .
-Traditionally, this operation is called \[lq]assigning a name to a socket\[rq].
-.PP
-It is normally necessary to assign a local address using
-.BR bind ()
-before a
-.B SOCK_STREAM
-socket may receive connections (see
-.BR accept (2)).
-.PP
-The rules used in name binding vary between address families.
-Consult the manual entries in Section 7 for detailed information.
-For
-.BR AF_INET ,
-see
-.BR ip (7);
-for
-.BR AF_INET6 ,
-see
-.BR ipv6 (7);
-for
-.BR AF_UNIX ,
-see
-.BR unix (7);
-for
-.BR AF_APPLETALK ,
-see
-.BR ddp (7);
-for
-.BR AF_PACKET ,
-see
-.BR packet (7);
-for
-.BR AF_X25 ,
-see
-.BR x25 (7);
-and for
-.BR AF_NETLINK ,
-see
-.BR netlink (7).
-.PP
-The actual structure passed for the
-.I addr
-argument will depend on the address family.
-The
-.I sockaddr
-structure is defined as something like:
-.PP
-.in +4n
-.EX
-struct sockaddr {
- sa_family_t sa_family;
- char sa_data[14];
-}
-.EE
-.in
-.PP
-The only purpose of this structure is to cast the structure
-pointer passed in
-.I addr
-in order to avoid compiler warnings.
-See EXAMPLES below.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-.\" e.g., privileged port in AF_INET domain
-The address is protected, and the user is not the superuser.
-.TP
-.B EADDRINUSE
-The given address is already in use.
-.TP
-.B EADDRINUSE
-(Internet domain sockets)
-The port number was specified as zero in the socket address structure,
-but, upon attempting to bind to an ephemeral port,
-it was determined that all port numbers in the ephemeral port range
-are currently in use.
-See the discussion of
-.I /proc/sys/net/ipv4/ip_local_port_range
-.BR ip (7).
-.TP
-.B EBADF
-.I sockfd
-is not a valid file descriptor.
-.TP
-.B EINVAL
-The socket is already bound to an address.
-.\" This may change in the future: see
-.\" .I linux/unix/sock.c for details.
-.TP
-.B EINVAL
-.I addrlen
-is wrong, or
-.I addr
-is not a valid address for this socket's domain.
-.TP
-.B ENOTSOCK
-The file descriptor
-.I sockfd
-does not refer to a socket.
-.PP
-The following errors are specific to UNIX domain
-.RB ( AF_UNIX )
-sockets:
-.TP
-.B EACCES
-Search permission is denied on a component of the path prefix.
-(See also
-.BR path_resolution (7).)
-.TP
-.B EADDRNOTAVAIL
-A nonexistent interface was requested or the requested
-address was not local.
-.TP
-.B EFAULT
-.I addr
-points outside the user's accessible address space.
-.TP
-.B ELOOP
-Too many symbolic links were encountered in resolving
-.IR addr .
-.TP
-.B ENAMETOOLONG
-.I addr
-is too long.
-.TP
-.B ENOENT
-A component in the directory prefix of the socket pathname does not exist.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOTDIR
-A component of the path prefix is not a directory.
-.TP
-.B EROFS
-The socket inode would reside on a read-only filesystem.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.4BSD
-.RB ( bind ()
-first appeared in 4.2BSD).
-.\" SVr4 documents an additional
-.\" .B ENOSR
-.\" general error condition, and
-.\" additional
-.\" .B EIO
-.\" and
-.\" .B EISDIR
-.\" UNIX-domain error conditions.
-.SH BUGS
-The transparent proxy options are not described.
-.\" FIXME Document transparent proxy options
-.SH EXAMPLES
-An example of the use of
-.BR bind ()
-with Internet domain sockets can be found in
-.BR getaddrinfo (3).
-.PP
-The following example shows how to bind a stream socket in the UNIX
-.RB ( AF_UNIX )
-domain, and accept connections:
-.\" listen.7 refers to this example.
-.\" accept.7 refers to this example.
-.\" unix.7 refers to this example.
-.PP
-.\" SRC BEGIN (bind.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <unistd.h>
-\&
-#define MY_SOCK_PATH "/somepath"
-#define LISTEN_BACKLOG 50
-\&
-#define handle_error(msg) \e
- do { perror(msg); exit(EXIT_FAILURE); } while (0)
-\&
-int
-main(void)
-{
- int sfd, cfd;
- socklen_t peer_addr_size;
- struct sockaddr_un my_addr, peer_addr;
-\&
- sfd = socket(AF_UNIX, SOCK_STREAM, 0);
- if (sfd == \-1)
- handle_error("socket");
-\&
- memset(&my_addr, 0, sizeof(my_addr));
- my_addr.sun_family = AF_UNIX;
- strncpy(my_addr.sun_path, MY_SOCK_PATH,
- sizeof(my_addr.sun_path) \- 1);
-\&
- if (bind(sfd, (struct sockaddr *) &my_addr,
- sizeof(my_addr)) == \-1)
- handle_error("bind");
-\&
- if (listen(sfd, LISTEN_BACKLOG) == \-1)
- handle_error("listen");
-\&
- /* Now we can accept incoming connections one
- at a time using accept(2). */
-\&
- peer_addr_size = sizeof(peer_addr);
- cfd = accept(sfd, (struct sockaddr *) &peer_addr,
- &peer_addr_size);
- if (cfd == \-1)
- handle_error("accept");
-\&
- /* Code to deal with incoming connection(s)... */
-\&
- if (close(sfd) == \-1)
- handle_error("close");
-\&
- if (unlink(MY_SOCK_PATH) == \-1)
- handle_error("unlink");
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR accept (2),
-.BR connect (2),
-.BR getsockname (2),
-.BR listen (2),
-.BR socket (2),
-.BR getaddrinfo (3),
-.BR getifaddrs (3),
-.BR ip (7),
-.BR ipv6 (7),
-.BR path_resolution (7),
-.BR socket (7),
-.BR unix (7)
diff --git a/man2/bpf.2 b/man2/bpf.2
deleted file mode 100644
index d32435a1d..000000000
--- a/man2/bpf.2
+++ /dev/null
@@ -1,1263 +0,0 @@
-.\" Copyright (C) 2015 Alexei Starovoitov <ast@kernel.org>
-.\" and Copyright (C) 2015 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH bpf 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-bpf \- perform a command on an extended BPF map or program
-.SH SYNOPSIS
-.nf
-.B #include <linux/bpf.h>
-.PP
-.BI "int bpf(int " cmd ", union bpf_attr *" attr ", unsigned int " size );
-.fi
-.SH DESCRIPTION
-The
-.BR bpf ()
-system call performs a range of operations related to extended
-Berkeley Packet Filters.
-Extended BPF (or eBPF) is similar to
-the original ("classic") BPF (cBPF) used to filter network packets.
-For both cBPF and eBPF programs,
-the kernel statically analyzes the programs before loading them,
-in order to ensure that they cannot harm the running system.
-.PP
-eBPF extends cBPF in multiple ways, including the ability to call
-a fixed set of in-kernel helper functions
-.\" See 'enum bpf_func_id' in include/uapi/linux/bpf.h
-(via the
-.B BPF_CALL
-opcode extension provided by eBPF)
-and access shared data structures such as eBPF maps.
-.\"
-.SS Extended BPF Design/Architecture
-eBPF maps are a generic data structure for storage of different data types.
-Data types are generally treated as binary blobs, so a user just specifies
-the size of the key and the size of the value at map-creation time.
-In other words, a key/value for a given map can have an arbitrary structure.
-.PP
-A user process can create multiple maps (with key/value-pairs being
-opaque bytes of data) and access them via file descriptors.
-Different eBPF programs can access the same maps in parallel.
-It's up to the user process and eBPF program to decide what they store
-inside maps.
-.PP
-There's one special map type, called a program array.
-This type of map stores file descriptors referring to other eBPF programs.
-When a lookup in the map is performed, the program flow is
-redirected in-place to the beginning of another eBPF program and does not
-return back to the calling program.
-The level of nesting has a fixed limit of 32,
-.\" Defined by the kernel constant MAX_TAIL_CALL_CNT in include/linux/bpf.h
-so that infinite loops cannot be crafted.
-At run time, the program file descriptors stored in the map can be modified,
-so program functionality can be altered based on specific requirements.
-All programs referred to in a program-array map must
-have been previously loaded into the kernel via
-.BR bpf ().
-If a map lookup fails, the current program continues its execution.
-See
-.B BPF_MAP_TYPE_PROG_ARRAY
-below for further details.
-.PP
-Generally, eBPF programs are loaded by the user process and automatically
-unloaded when the process exits.
-In some cases, for example,
-.BR tc\-bpf (8),
-the program will continue to stay alive inside the kernel even after the
-process that loaded the program exits.
-In that case,
-the tc subsystem holds a reference to the eBPF program after the
-file descriptor has been closed by the user-space program.
-Thus, whether a specific program continues to live inside the kernel
-depends on how it is further attached to a given kernel subsystem
-after it was loaded via
-.BR bpf ().
-.PP
-Each eBPF program is a set of instructions that is safe to run until
-its completion.
-An in-kernel verifier statically determines that the eBPF program
-terminates and is safe to execute.
-During verification, the kernel increments reference counts for each of
-the maps that the eBPF program uses,
-so that the attached maps can't be removed until the program is unloaded.
-.PP
-eBPF programs can be attached to different events.
-These events can be the arrival of network packets, tracing
-events, classification events by network queueing disciplines
-(for eBPF programs attached to a
-.BR tc (8)
-classifier), and other types that may be added in the future.
-A new event triggers execution of the eBPF program, which
-may store information about the event in eBPF maps.
-Beyond storing data, eBPF programs may call a fixed set of
-in-kernel helper functions.
-.PP
-The same eBPF program can be attached to multiple events and different
-eBPF programs can access the same map:
-.PP
-.in +4n
-.EX
-tracing tracing tracing packet packet packet
-event A event B event C on eth0 on eth1 on eth2
- | | | | | \[ha]
- | | | | v |
- \-\-> tracing <\-\- tracing socket tc ingress tc egress
- prog_1 prog_2 prog_3 classifier action
- | | | | prog_4 prog_5
- |\-\-\- \-\-\-\-\-| |\-\-\-\-\-\-| map_3 | |
- map_1 map_2 \-\-| map_4 |\-\-
-.EE
-.in
-.\"
-.SS Arguments
-The operation to be performed by the
-.BR bpf ()
-system call is determined by the
-.I cmd
-argument.
-Each operation takes an accompanying argument,
-provided via
-.IR attr ,
-which is a pointer to a union of type
-.I bpf_attr
-(see below).
-The unused fields and padding must be zeroed out before the call.
-The
-.I size
-argument is the size of the union pointed to by
-.IR attr .
-.PP
-The value provided in
-.I cmd
-is one of the following:
-.TP
-.B BPF_MAP_CREATE
-Create a map and return a file descriptor that refers to the map.
-The close-on-exec file descriptor flag (see
-.BR fcntl (2))
-is automatically enabled for the new file descriptor.
-.TP
-.B BPF_MAP_LOOKUP_ELEM
-Look up an element by key in a specified map and return its value.
-.TP
-.B BPF_MAP_UPDATE_ELEM
-Create or update an element (key/value pair) in a specified map.
-.TP
-.B BPF_MAP_DELETE_ELEM
-Look up and delete an element by key in a specified map.
-.TP
-.B BPF_MAP_GET_NEXT_KEY
-Look up an element by key in a specified map and return the key
-of the next element.
-.TP
-.B BPF_PROG_LOAD
-Verify and load an eBPF program,
-returning a new file descriptor associated with the program.
-The close-on-exec file descriptor flag (see
-.BR fcntl (2))
-is automatically enabled for the new file descriptor.
-.IP
-The
-.I bpf_attr
-union consists of various anonymous structures that are used by different
-.BR bpf ()
-commands:
-.PP
-.in +4n
-.EX
-union bpf_attr {
- struct { /* Used by BPF_MAP_CREATE */
- __u32 map_type;
- __u32 key_size; /* size of key in bytes */
- __u32 value_size; /* size of value in bytes */
- __u32 max_entries; /* maximum number of entries
- in a map */
- };
-\&
- struct { /* Used by BPF_MAP_*_ELEM and BPF_MAP_GET_NEXT_KEY
- commands */
- __u32 map_fd;
- __aligned_u64 key;
- union {
- __aligned_u64 value;
- __aligned_u64 next_key;
- };
- __u64 flags;
- };
-\&
- struct { /* Used by BPF_PROG_LOAD */
- __u32 prog_type;
- __u32 insn_cnt;
- __aligned_u64 insns; /* \[aq]const struct bpf_insn *\[aq] */
- __aligned_u64 license; /* \[aq]const char *\[aq] */
- __u32 log_level; /* verbosity level of verifier */
- __u32 log_size; /* size of user buffer */
- __aligned_u64 log_buf; /* user supplied \[aq]char *\[aq]
- buffer */
- __u32 kern_version;
- /* checked when prog_type=kprobe
- (since Linux 4.1) */
-.\" commit 2541517c32be2531e0da59dfd7efc1ce844644f5
- };
-} __attribute__((aligned(8)));
-.EE
-.in
-.\"
-.SS eBPF maps
-Maps are a generic data structure for storage of different types of data.
-They allow sharing of data between eBPF kernel programs,
-and also between kernel and user-space applications.
-.PP
-Each map type has the following attributes:
-.IP \[bu] 3
-type
-.IP \[bu]
-maximum number of elements
-.IP \[bu]
-key size in bytes
-.IP \[bu]
-value size in bytes
-.PP
-The following wrapper functions demonstrate how various
-.BR bpf ()
-commands can be used to access the maps.
-The functions use the
-.I cmd
-argument to invoke different operations.
-.TP
-.B BPF_MAP_CREATE
-The
-.B BPF_MAP_CREATE
-command creates a new map,
-returning a new file descriptor that refers to the map.
-.IP
-.in +4n
-.EX
-int
-bpf_create_map(enum bpf_map_type map_type,
- unsigned int key_size,
- unsigned int value_size,
- unsigned int max_entries)
-{
- union bpf_attr attr = {
- .map_type = map_type,
- .key_size = key_size,
- .value_size = value_size,
- .max_entries = max_entries
- };
-\&
- return bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
-}
-.EE
-.in
-.IP
-The new map has the type specified by
-.IR map_type ,
-and attributes as specified in
-.IR key_size ,
-.IR value_size ,
-and
-.IR max_entries .
-On success, this operation returns a file descriptor.
-On error, \-1 is returned and
-.I errno
-is set to
-.BR EINVAL ,
-.BR EPERM ,
-or
-.BR ENOMEM .
-.IP
-The
-.I key_size
-and
-.I value_size
-attributes will be used by the verifier during program loading
-to check that the program is calling
-.BR bpf_map_*_elem ()
-helper functions with a correctly initialized
-.I key
-and to check that the program doesn't access the map element
-.I value
-beyond the specified
-.IR value_size .
-For example, when a map is created with a
-.I key_size
-of 8 and the eBPF program calls
-.IP
-.in +4n
-.EX
-bpf_map_lookup_elem(map_fd, fp \- 4)
-.EE
-.in
-.IP
-the program will be rejected,
-since the in-kernel helper function
-.IP
-.in +4n
-.EX
-bpf_map_lookup_elem(map_fd, void *key)
-.EE
-.in
-.IP
-expects to read 8 bytes from the location pointed to by
-.IR key ,
-but the
-.I fp\ \-\ 4
-(where
-.I fp
-is the top of the stack)
-starting address will cause out-of-bounds stack access.
-.IP
-Similarly, when a map is created with a
-.I value_size
-of 1 and the eBPF program contains
-.IP
-.in +4n
-.EX
-value = bpf_map_lookup_elem(...);
-*(u32 *) value = 1;
-.EE
-.in
-.IP
-the program will be rejected, since it accesses the
-.I value
-pointer beyond the specified 1 byte
-.I value_size
-limit.
-.IP
-Currently, the following values are supported for
-.IR map_type :
-.IP
-.in +4n
-.EX
-enum bpf_map_type {
- BPF_MAP_TYPE_UNSPEC, /* Reserve 0 as invalid map type */
- BPF_MAP_TYPE_HASH,
- BPF_MAP_TYPE_ARRAY,
- BPF_MAP_TYPE_PROG_ARRAY,
- BPF_MAP_TYPE_PERF_EVENT_ARRAY,
- BPF_MAP_TYPE_PERCPU_HASH,
- BPF_MAP_TYPE_PERCPU_ARRAY,
- BPF_MAP_TYPE_STACK_TRACE,
- BPF_MAP_TYPE_CGROUP_ARRAY,
- BPF_MAP_TYPE_LRU_HASH,
- BPF_MAP_TYPE_LRU_PERCPU_HASH,
- BPF_MAP_TYPE_LPM_TRIE,
- BPF_MAP_TYPE_ARRAY_OF_MAPS,
- BPF_MAP_TYPE_HASH_OF_MAPS,
- BPF_MAP_TYPE_DEVMAP,
- BPF_MAP_TYPE_SOCKMAP,
- BPF_MAP_TYPE_CPUMAP,
- BPF_MAP_TYPE_XSKMAP,
- BPF_MAP_TYPE_SOCKHASH,
- BPF_MAP_TYPE_CGROUP_STORAGE,
- BPF_MAP_TYPE_REUSEPORT_SOCKARRAY,
- BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE,
- BPF_MAP_TYPE_QUEUE,
- BPF_MAP_TYPE_STACK,
- /* See /usr/include/linux/bpf.h for the full list. */
-};
-.EE
-.in
-.IP
-.I map_type
-selects one of the available map implementations in the kernel.
-.\" FIXME We need an explanation of why one might choose each of
-.\" these map implementations
-For all map types,
-eBPF programs access maps with the same
-.BR bpf_map_lookup_elem ()
-and
-.BR bpf_map_update_elem ()
-helper functions.
-Further details of the various map types are given below.
-.TP
-.B BPF_MAP_LOOKUP_ELEM
-The
-.B BPF_MAP_LOOKUP_ELEM
-command looks up an element with a given
-.I key
-in the map referred to by the file descriptor
-.IR fd .
-.IP
-.in +4n
-.EX
-int
-bpf_lookup_elem(int fd, const void *key, void *value)
-{
- union bpf_attr attr = {
- .map_fd = fd,
- .key = ptr_to_u64(key),
- .value = ptr_to_u64(value),
- };
-\&
- return bpf(BPF_MAP_LOOKUP_ELEM, &attr, sizeof(attr));
-}
-.EE
-.in
-.IP
-If an element is found,
-the operation returns zero and stores the element's value into
-.IR value ,
-which must point to a buffer of
-.I value_size
-bytes.
-.IP
-If no element is found, the operation returns \-1 and sets
-.I errno
-to
-.BR ENOENT .
-.TP
-.B BPF_MAP_UPDATE_ELEM
-The
-.B BPF_MAP_UPDATE_ELEM
-command
-creates or updates an element with a given
-.I key/value
-in the map referred to by the file descriptor
-.IR fd .
-.IP
-.in +4n
-.EX
-int
-bpf_update_elem(int fd, const void *key, const void *value,
- uint64_t flags)
-{
- union bpf_attr attr = {
- .map_fd = fd,
- .key = ptr_to_u64(key),
- .value = ptr_to_u64(value),
- .flags = flags,
- };
-\&
- return bpf(BPF_MAP_UPDATE_ELEM, &attr, sizeof(attr));
-}
-.EE
-.in
-.IP
-The
-.I flags
-argument should be specified as one of the following:
-.RS
-.TP
-.B BPF_ANY
-Create a new element or update an existing element.
-.TP
-.B BPF_NOEXIST
-Create a new element only if it did not exist.
-.TP
-.B BPF_EXIST
-Update an existing element.
-.RE
-.IP
-On success, the operation returns zero.
-On error, \-1 is returned and
-.I errno
-is set to
-.BR EINVAL ,
-.BR EPERM ,
-.BR ENOMEM ,
-or
-.BR E2BIG .
-.B E2BIG
-indicates that the number of elements in the map reached the
-.I max_entries
-limit specified at map creation time.
-.B EEXIST
-will be returned if
-.I flags
-specifies
-.B BPF_NOEXIST
-and the element with
-.I key
-already exists in the map.
-.B ENOENT
-will be returned if
-.I flags
-specifies
-.B BPF_EXIST
-and the element with
-.I key
-doesn't exist in the map.
-.TP
-.B BPF_MAP_DELETE_ELEM
-The
-.B BPF_MAP_DELETE_ELEM
-command
-deletes the element whose key is
-.I key
-from the map referred to by the file descriptor
-.IR fd .
-.IP
-.in +4n
-.EX
-int
-bpf_delete_elem(int fd, const void *key)
-{
- union bpf_attr attr = {
- .map_fd = fd,
- .key = ptr_to_u64(key),
- };
-\&
- return bpf(BPF_MAP_DELETE_ELEM, &attr, sizeof(attr));
-}
-.EE
-.in
-.IP
-On success, zero is returned.
-If the element is not found, \-1 is returned and
-.I errno
-is set to
-.BR ENOENT .
-.TP
-.B BPF_MAP_GET_NEXT_KEY
-The
-.B BPF_MAP_GET_NEXT_KEY
-command looks up an element by
-.I key
-in the map referred to by the file descriptor
-.I fd
-and sets the
-.I next_key
-pointer to the key of the next element.
-.IP
-.in +4n
-.EX
-int
-bpf_get_next_key(int fd, const void *key, void *next_key)
-{
- union bpf_attr attr = {
- .map_fd = fd,
- .key = ptr_to_u64(key),
- .next_key = ptr_to_u64(next_key),
- };
-\&
- return bpf(BPF_MAP_GET_NEXT_KEY, &attr, sizeof(attr));
-}
-.EE
-.in
-.IP
-If
-.I key
-is found, the operation returns zero and sets the
-.I next_key
-pointer to the key of the next element.
-If
-.I key
-is not found, the operation returns zero and sets the
-.I next_key
-pointer to the key of the first element.
-If
-.I key
-is the last element, \-1 is returned and
-.I errno
-is set to
-.BR ENOENT .
-Other possible
-.I errno
-values are
-.BR ENOMEM ,
-.BR EFAULT ,
-.BR EPERM ,
-and
-.BR EINVAL .
-This method can be used to iterate over all elements in the map.
-.TP
-.B close(map_fd)
-Delete the map referred to by the file descriptor
-.IR map_fd .
-When the user-space program that created a map exits, all maps will
-be deleted automatically (but see NOTES).
-.\"
-.SS eBPF map types
-The following map types are supported:
-.TP
-.B BPF_MAP_TYPE_HASH
-.\" commit 0f8e4bd8a1fc8c4185f1630061d0a1f2d197a475
-Hash-table maps have the following characteristics:
-.RS
-.IP \[bu] 3
-Maps are created and destroyed by user-space programs.
-Both user-space and eBPF programs
-can perform lookup, update, and delete operations.
-.IP \[bu]
-The kernel takes care of allocating and freeing key/value pairs.
-.IP \[bu]
-The
-.BR map_update_elem ()
-helper will fail to insert new element when the
-.I max_entries
-limit is reached.
-(This ensures that eBPF programs cannot exhaust memory.)
-.IP \[bu]
-.BR map_update_elem ()
-replaces existing elements atomically.
-.RE
-.IP
-Hash-table maps are
-optimized for speed of lookup.
-.TP
-.B BPF_MAP_TYPE_ARRAY
-.\" commit 28fbcfa08d8ed7c5a50d41a0433aad222835e8e3
-Array maps have the following characteristics:
-.RS
-.IP \[bu] 3
-Optimized for fastest possible lookup.
-In the future the verifier/JIT compiler
-may recognize lookup() operations that employ a constant key
-and optimize it into constant pointer.
-It is possible to optimize a non-constant
-key into direct pointer arithmetic as well, since pointers and
-.I value_size
-are constant for the life of the eBPF program.
-In other words,
-.BR array_map_lookup_elem ()
-may be 'inlined' by the verifier/JIT compiler
-while preserving concurrent access to this map from user space.
-.IP \[bu]
-All array elements pre-allocated and zero initialized at init time
-.IP \[bu]
-The key is an array index, and must be exactly four bytes.
-.IP \[bu]
-.BR map_delete_elem ()
-fails with the error
-.BR EINVAL ,
-since elements cannot be deleted.
-.IP \[bu]
-.BR map_update_elem ()
-replaces elements in a
-.B nonatomic
-fashion;
-for atomic updates, a hash-table map should be used instead.
-There is however one special case that can also be used with arrays:
-the atomic built-in
-.B __sync_fetch_and_add()
-can be used on 32 and 64 bit atomic counters.
-For example, it can be
-applied on the whole value itself if it represents a single counter,
-or in case of a structure containing multiple counters, it could be
-used on individual counters.
-This is quite often useful for aggregation and accounting of events.
-.RE
-.IP
-Among the uses for array maps are the following:
-.RS
-.IP \[bu] 3
-As "global" eBPF variables: an array of 1 element whose key is (index) 0
-and where the value is a collection of 'global' variables which
-eBPF programs can use to keep state between events.
-.IP \[bu]
-Aggregation of tracing events into a fixed set of buckets.
-.IP \[bu]
-Accounting of networking events, for example, number of packets and packet
-sizes.
-.RE
-.TP
-.BR BPF_MAP_TYPE_PROG_ARRAY " (since Linux 4.2)"
-A program array map is a special kind of array map whose map values
-contain only file descriptors referring to other eBPF programs.
-Thus, both the
-.I key_size
-and
-.I value_size
-must be exactly four bytes.
-This map is used in conjunction with the
-.BR bpf_tail_call ()
-helper.
-.IP
-This means that an eBPF program with a program array map attached to it
-can call from kernel side into
-.IP
-.in +4n
-.EX
-void bpf_tail_call(void *context, void *prog_map,
- unsigned int index);
-.EE
-.in
-.IP
-and therefore replace its own program flow with the one from the program
-at the given program array slot, if present.
-This can be regarded as kind of a jump table to a different eBPF program.
-The invoked program will then reuse the same stack.
-When a jump into the new program has been performed,
-it won't return to the old program anymore.
-.IP
-If no eBPF program is found at the given index of the program array
-(because the map slot doesn't contain a valid program file descriptor,
-the specified lookup index/key is out of bounds,
-or the limit of 32
-.\" MAX_TAIL_CALL_CNT
-nested calls has been exceed),
-execution continues with the current eBPF program.
-This can be used as a fall-through for default cases.
-.IP
-A program array map is useful, for example, in tracing or networking, to
-handle individual system calls or protocols in their own subprograms and
-use their identifiers as an individual map index.
-This approach may result in performance benefits,
-and also makes it possible to overcome the maximum
-instruction limit of a single eBPF program.
-In dynamic environments,
-a user-space daemon might atomically replace individual subprograms
-at run-time with newer versions to alter overall program behavior,
-for instance, if global policies change.
-.\"
-.SS eBPF programs
-The
-.B BPF_PROG_LOAD
-command is used to load an eBPF program into the kernel.
-The return value for this command is a new file descriptor associated
-with this eBPF program.
-.PP
-.in +4n
-.EX
-char bpf_log_buf[LOG_BUF_SIZE];
-\&
-int
-bpf_prog_load(enum bpf_prog_type type,
- const struct bpf_insn *insns, int insn_cnt,
- const char *license)
-{
- union bpf_attr attr = {
- .prog_type = type,
- .insns = ptr_to_u64(insns),
- .insn_cnt = insn_cnt,
- .license = ptr_to_u64(license),
- .log_buf = ptr_to_u64(bpf_log_buf),
- .log_size = LOG_BUF_SIZE,
- .log_level = 1,
- };
-\&
- return bpf(BPF_PROG_LOAD, &attr, sizeof(attr));
-}
-.EE
-.in
-.PP
-.I prog_type
-is one of the available program types:
-.IP
-.in +4n
-.EX
-enum bpf_prog_type {
- BPF_PROG_TYPE_UNSPEC, /* Reserve 0 as invalid
- program type */
- BPF_PROG_TYPE_SOCKET_FILTER,
- BPF_PROG_TYPE_KPROBE,
- BPF_PROG_TYPE_SCHED_CLS,
- BPF_PROG_TYPE_SCHED_ACT,
- BPF_PROG_TYPE_TRACEPOINT,
- BPF_PROG_TYPE_XDP,
- BPF_PROG_TYPE_PERF_EVENT,
- BPF_PROG_TYPE_CGROUP_SKB,
- BPF_PROG_TYPE_CGROUP_SOCK,
- BPF_PROG_TYPE_LWT_IN,
- BPF_PROG_TYPE_LWT_OUT,
- BPF_PROG_TYPE_LWT_XMIT,
- BPF_PROG_TYPE_SOCK_OPS,
- BPF_PROG_TYPE_SK_SKB,
- BPF_PROG_TYPE_CGROUP_DEVICE,
- BPF_PROG_TYPE_SK_MSG,
- BPF_PROG_TYPE_RAW_TRACEPOINT,
- BPF_PROG_TYPE_CGROUP_SOCK_ADDR,
- BPF_PROG_TYPE_LWT_SEG6LOCAL,
- BPF_PROG_TYPE_LIRC_MODE2,
- BPF_PROG_TYPE_SK_REUSEPORT,
- BPF_PROG_TYPE_FLOW_DISSECTOR,
- /* See /usr/include/linux/bpf.h for the full list. */
-};
-.EE
-.in
-.PP
-For further details of eBPF program types, see below.
-.PP
-The remaining fields of
-.I bpf_attr
-are set as follows:
-.IP \[bu] 3
-.I insns
-is an array of
-.I "struct bpf_insn"
-instructions.
-.IP \[bu]
-.I insn_cnt
-is the number of instructions in the program referred to by
-.IR insns .
-.IP \[bu]
-.I license
-is a license string, which must be GPL compatible to call helper functions
-marked
-.IR gpl_only .
-(The licensing rules are the same as for kernel modules,
-so that also dual licenses, such as "Dual BSD/GPL", may be used.)
-.IP \[bu]
-.I log_buf
-is a pointer to a caller-allocated buffer in which the in-kernel
-verifier can store the verification log.
-This log is a multi-line string that can be checked by
-the program author in order to understand how the verifier came to
-the conclusion that the eBPF program is unsafe.
-The format of the output can change at any time as the verifier evolves.
-.IP \[bu]
-.I log_size
-size of the buffer pointed to by
-.IR log_buf .
-If the size of the buffer is not large enough to store all
-verifier messages, \-1 is returned and
-.I errno
-is set to
-.BR ENOSPC .
-.IP \[bu]
-.I log_level
-verbosity level of the verifier.
-A value of zero means that the verifier will not provide a log;
-in this case,
-.I log_buf
-must be a NULL pointer, and
-.I log_size
-must be zero.
-.PP
-Applying
-.BR close (2)
-to the file descriptor returned by
-.B BPF_PROG_LOAD
-will unload the eBPF program (but see NOTES).
-.PP
-Maps are accessible from eBPF programs and are used to exchange data between
-eBPF programs and between eBPF programs and user-space programs.
-For example,
-eBPF programs can process various events (like kprobe, packets) and
-store their data into a map,
-and user-space programs can then fetch data from the map.
-Conversely, user-space programs can use a map as a configuration mechanism,
-populating the map with values checked by the eBPF program,
-which then modifies its behavior on the fly according to those values.
-.\"
-.\"
-.SS eBPF program types
-The eBPF program type
-.RI ( prog_type )
-determines the subset of kernel helper functions that the program
-may call.
-The program type also determines the program input (context)\[em]the
-format of
-.I "struct bpf_context"
-(which is the data blob passed into the eBPF program as the first argument).
-.\"
-.\" FIXME
-.\" Somewhere in this page we need a general introduction to the
-.\" bpf_context. For example, how does a BPF program access the
-.\" context?
-.PP
-For example, a tracing program does not have the exact same
-subset of helper functions as a socket filter program
-(though they may have some helpers in common).
-Similarly,
-the input (context) for a tracing program is a set of register values,
-while for a socket filter it is a network packet.
-.PP
-The set of functions available to eBPF programs of a given type may increase
-in the future.
-.PP
-The following program types are supported:
-.TP
-.BR BPF_PROG_TYPE_SOCKET_FILTER " (since Linux 3.19)"
-Currently, the set of functions for
-.B BPF_PROG_TYPE_SOCKET_FILTER
-is:
-.IP
-.in +4n
-.EX
-bpf_map_lookup_elem(map_fd, void *key)
- /* look up key in a map_fd */
-bpf_map_update_elem(map_fd, void *key, void *value)
- /* update key/value */
-bpf_map_delete_elem(map_fd, void *key)
- /* delete key in a map_fd */
-.EE
-.in
-.IP
-The
-.I bpf_context
-argument is a pointer to a
-.IR "struct __sk_buff" .
-.\" FIXME: We need some text here to explain how the program
-.\" accesses __sk_buff.
-.\" See 'struct __sk_buff' and commit 9bac3d6d548e5
-.\"
-.\" Alexei commented:
-.\" Actually now in case of SOCKET_FILTER, SCHED_CLS, SCHED_ACT
-.\" the program can now access skb fields.
-.\"
-.TP
-.BR BPF_PROG_TYPE_KPROBE " (since Linux 4.1)"
-.\" commit 2541517c32be2531e0da59dfd7efc1ce844644f5
-[To be documented]
-.\" FIXME Document this program type
-.\" Describe allowed helper functions for this program type
-.\" Describe bpf_context for this program type
-.\"
-.\" FIXME We need text here to describe 'kern_version'
-.TP
-.BR BPF_PROG_TYPE_SCHED_CLS " (since Linux 4.1)"
-.\" commit 96be4325f443dbbfeb37d2a157675ac0736531a1
-.\" commit e2e9b6541dd4b31848079da80fe2253daaafb549
-[To be documented]
-.\" FIXME Document this program type
-.\" Describe allowed helper functions for this program type
-.\" Describe bpf_context for this program type
-.TP
-.BR BPF_PROG_TYPE_SCHED_ACT " (since Linux 4.1)"
-.\" commit 94caee8c312d96522bcdae88791aaa9ebcd5f22c
-.\" commit a8cb5f556b567974d75ea29c15181c445c541b1f
-[To be documented]
-.\" FIXME Document this program type
-.\" Describe allowed helper functions for this program type
-.\" Describe bpf_context for this program type
-.SS Events
-Once a program is loaded, it can be attached to an event.
-Various kernel subsystems have different ways to do so.
-.PP
-Since Linux 3.19,
-.\" commit 89aa075832b0da4402acebd698d0411dcc82d03e
-the following call will attach the program
-.I prog_fd
-to the socket
-.IR sockfd ,
-which was created by an earlier call to
-.BR socket (2):
-.PP
-.in +4n
-.EX
-setsockopt(sockfd, SOL_SOCKET, SO_ATTACH_BPF,
- &prog_fd, sizeof(prog_fd));
-.EE
-.in
-.PP
-Since Linux 4.1,
-.\" commit 2541517c32be2531e0da59dfd7efc1ce844644f5
-the following call may be used to attach
-the eBPF program referred to by the file descriptor
-.I prog_fd
-to a perf event file descriptor,
-.IR event_fd ,
-that was created by a previous call to
-.BR perf_event_open (2):
-.PP
-.in +4n
-.EX
-ioctl(event_fd, PERF_EVENT_IOC_SET_BPF, prog_fd);
-.EE
-.in
-.\"
-.\"
-.SH RETURN VALUE
-For a successful call, the return value depends on the operation:
-.TP
-.B BPF_MAP_CREATE
-The new file descriptor associated with the eBPF map.
-.TP
-.B BPF_PROG_LOAD
-The new file descriptor associated with the eBPF program.
-.TP
-All other commands
-Zero.
-.PP
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B E2BIG
-The eBPF program is too large or a map reached the
-.I max_entries
-limit (maximum number of elements).
-.TP
-.B EACCES
-For
-.BR BPF_PROG_LOAD ,
-even though all program instructions are valid, the program has been
-rejected because it was deemed unsafe.
-This may be because it may have
-accessed a disallowed memory region or an uninitialized stack/register or
-because the function constraints don't match the actual types or because
-there was a misaligned memory access.
-In this case, it is recommended to call
-.BR bpf ()
-again with
-.I log_level = 1
-and examine
-.I log_buf
-for the specific reason provided by the verifier.
-.TP
-.B EBADF
-.I fd
-is not an open file descriptor.
-.TP
-.B EFAULT
-One of the pointers
-.RI ( key
-or
-.I value
-or
-.I log_buf
-or
-.IR insns )
-is outside the accessible address space.
-.TP
-.B EINVAL
-The value specified in
-.I cmd
-is not recognized by this kernel.
-.TP
-.B EINVAL
-For
-.BR BPF_MAP_CREATE ,
-either
-.I map_type
-or attributes are invalid.
-.TP
-.B EINVAL
-For
-.B BPF_MAP_*_ELEM
-commands,
-some of the fields of
-.I "union bpf_attr"
-that are not used by this command
-are not set to zero.
-.TP
-.B EINVAL
-For
-.BR BPF_PROG_LOAD ,
-indicates an attempt to load an invalid program.
-eBPF programs can be deemed
-invalid due to unrecognized instructions, the use of reserved fields, jumps
-out of range, infinite loops or calls of unknown functions.
-.TP
-.B ENOENT
-For
-.B BPF_MAP_LOOKUP_ELEM
-or
-.BR BPF_MAP_DELETE_ELEM ,
-indicates that the element with the given
-.I key
-was not found.
-.TP
-.B ENOMEM
-Cannot allocate sufficient memory.
-.TP
-.B EPERM
-The call was made without sufficient privilege
-(without the
-.B CAP_SYS_ADMIN
-capability).
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 3.18.
-.SH NOTES
-Prior to Linux 4.4, all
-.BR bpf ()
-commands require the caller to have the
-.B CAP_SYS_ADMIN
-capability.
-From Linux 4.4 onwards,
-.\" commit 1be7f75d1668d6296b80bf35dcf6762393530afc
-an unprivileged user may create limited programs of type
-.B BPF_PROG_TYPE_SOCKET_FILTER
-and associated maps.
-However they may not store kernel pointers within
-the maps and are presently limited to the following helper functions:
-.\" [Linux 5.6] mtk: The list of available functions is, I think, governed
-.\" by the check in net/core/filter.c::bpf_base_func_proto().
-.IP \[bu] 3
-get_random
-.PD 0
-.IP \[bu]
-get_smp_processor_id
-.IP \[bu]
-tail_call
-.IP \[bu]
-ktime_get_ns
-.PD
-.PP
-Unprivileged access may be blocked by writing the value 1 to the file
-.IR /proc/sys/kernel/unprivileged_bpf_disabled .
-.PP
-eBPF objects (maps and programs) can be shared between processes.
-For example, after
-.BR fork (2),
-the child inherits file descriptors referring to the same eBPF objects.
-In addition, file descriptors referring to eBPF objects can be
-transferred over UNIX domain sockets.
-File descriptors referring to eBPF objects can be duplicated
-in the usual way, using
-.BR dup (2)
-and similar calls.
-An eBPF object is deallocated only after all file descriptors
-referring to the object have been closed.
-.PP
-eBPF programs can be written in a restricted C that is compiled (using the
-.B clang
-compiler) into eBPF bytecode.
-Various features are omitted from this restricted C, such as loops,
-global variables, variadic functions, floating-point numbers,
-and passing structures as function arguments.
-Some examples can be found in the
-.I samples/bpf/*_kern.c
-files in the kernel source tree.
-.\" There are also examples for the tc classifier, in the iproute2
-.\" project, in examples/bpf
-.PP
-The kernel contains a just-in-time (JIT) compiler that translates
-eBPF bytecode into native machine code for better performance.
-Before Linux 4.15,
-the JIT compiler is disabled by default,
-but its operation can be controlled by writing one of the
-following integer strings to the file
-.IR /proc/sys/net/core/bpf_jit_enable :
-.TP
-.B 0
-Disable JIT compilation (default).
-.TP
-.B 1
-Normal compilation.
-.TP
-.B 2
-Debugging mode.
-The generated opcodes are dumped in hexadecimal into the kernel log.
-These opcodes can then be disassembled using the program
-.I tools/net/bpf_jit_disasm.c
-provided in the kernel source tree.
-.PP
-Since Linux 4.15,
-.\" commit 290af86629b25ffd1ed6232c4e9107da031705cb
-the kernel may configured with the
-.B CONFIG_BPF_JIT_ALWAYS_ON
-option.
-In this case, the JIT compiler is always enabled, and the
-.I bpf_jit_enable
-is initialized to 1 and is immutable.
-(This kernel configuration option was provided as a mitigation for
-one of the Spectre attacks against the BPF interpreter.)
-.PP
-The JIT compiler for eBPF is currently
-.\" Last reviewed in Linux 4.18-rc by grepping for BPF_ALU64 in arch/
-.\" and by checking the documentation for bpf_jit_enable in
-.\" Documentation/sysctl/net.txt
-available for the following architectures:
-.IP \[bu] 3
-x86-64 (since Linux 3.18; cBPF since Linux 3.0);
-.\" commit 0a14842f5a3c0e88a1e59fac5c3025db39721f74
-.PD 0
-.IP \[bu]
-ARM32 (since Linux 3.18; cBPF since Linux 3.4);
-.\" commit ddecdfcea0ae891f782ae853771c867ab51024c2
-.IP \[bu]
-SPARC 32 (since Linux 3.18; cBPF since Linux 3.5);
-.\" commit 2809a2087cc44b55e4377d7b9be3f7f5d2569091
-.IP \[bu]
-ARM-64 (since Linux 3.18);
-.\" commit e54bcde3d69d40023ae77727213d14f920eb264a
-.IP \[bu]
-s390 (since Linux 4.1; cBPF since Linux 3.7);
-.\" commit c10302efe569bfd646b4c22df29577a4595b4580
-.IP \[bu]
-PowerPC 64 (since Linux 4.8; cBPF since Linux 3.1);
-.\" commit 0ca87f05ba8bdc6791c14878464efc901ad71e99
-.\" commit 156d0e290e969caba25f1851c52417c14d141b24
-.IP \[bu]
-SPARC 64 (since Linux 4.12);
-.\" commit 7a12b5031c6b947cc13918237ae652b536243b76
-.IP \[bu]
-x86-32 (since Linux 4.18);
-.\" commit 03f5781be2c7b7e728d724ac70ba10799cc710d7
-.IP \[bu]
-MIPS 64 (since Linux 4.18; cBPF since Linux 3.16);
-.\" commit c6610de353da5ca6eee5b8960e838a87a90ead0c
-.\" commit f381bf6d82f032b7410185b35d000ea370ac706b
-.IP \[bu]
-riscv (since Linux 5.1).
-.\" commit 2353ecc6f91fd15b893fa01bf85a1c7a823ee4f2
-.PD
-.SH EXAMPLES
-.\" [[FIXME]] SRC BEGIN (bpf.c)
-.EX
-/* bpf+sockets example:
- * 1. create array map of 256 elements
- * 2. load program that counts number of packets received
- * r0 = skb\->data[ETH_HLEN + offsetof(struct iphdr, protocol)]
- * map[r0]++
- * 3. attach prog_fd to raw socket via setsockopt()
- * 4. print number of received TCP/UDP packets every second
- */
-int
-main(int argc, char *argv[])
-{
- int sock, map_fd, prog_fd, key;
- long long value = 0, tcp_cnt, udp_cnt;
-\&
- map_fd = bpf_create_map(BPF_MAP_TYPE_ARRAY, sizeof(key),
- sizeof(value), 256);
- if (map_fd < 0) {
- printf("failed to create map \[aq]%s\[aq]\en", strerror(errno));
- /* likely not run as root */
- return 1;
- }
-\&
- struct bpf_insn prog[] = {
- BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), /* r6 = r1 */
- BPF_LD_ABS(BPF_B, ETH_HLEN + offsetof(struct iphdr, protocol)),
- /* r0 = ip\->proto */
- BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, \-4),
- /* *(u32 *)(fp \- 4) = r0 */
- BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), /* r2 = fp */
- BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, \-4), /* r2 = r2 \- 4 */
- BPF_LD_MAP_FD(BPF_REG_1, map_fd), /* r1 = map_fd */
- BPF_CALL_FUNC(BPF_FUNC_map_lookup_elem),
- /* r0 = map_lookup(r1, r2) */
- BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),
- /* if (r0 == 0) goto pc+2 */
- BPF_MOV64_IMM(BPF_REG_1, 1), /* r1 = 1 */
- BPF_XADD(BPF_DW, BPF_REG_0, BPF_REG_1, 0, 0),
- /* lock *(u64 *) r0 += r1 */
-.\" == atomic64_add
- BPF_MOV64_IMM(BPF_REG_0, 0), /* r0 = 0 */
- BPF_EXIT_INSN(), /* return r0 */
- };
-\&
- prog_fd = bpf_prog_load(BPF_PROG_TYPE_SOCKET_FILTER, prog,
- sizeof(prog) / sizeof(prog[0]), "GPL");
-\&
- sock = open_raw_sock("lo");
-\&
- assert(setsockopt(sock, SOL_SOCKET, SO_ATTACH_BPF, &prog_fd,
- sizeof(prog_fd)) == 0);
-\&
- for (;;) {
- key = IPPROTO_TCP;
- assert(bpf_lookup_elem(map_fd, &key, &tcp_cnt) == 0);
- key = IPPROTO_UDP;
- assert(bpf_lookup_elem(map_fd, &key, &udp_cnt) == 0);
- printf("TCP %lld UDP %lld packets\en", tcp_cnt, udp_cnt);
- sleep(1);
- }
-\&
- return 0;
-}
-.EE
-.\" SRC END
-.PP
-Some complete working code can be found in the
-.I samples/bpf
-directory in the kernel source tree.
-.SH SEE ALSO
-.BR seccomp (2),
-.BR bpf\-helpers (7),
-.BR socket (7),
-.BR tc (8),
-.BR tc\-bpf (8)
-.PP
-Both classic and extended BPF are explained in the kernel source file
-.IR Documentation/networking/filter.txt .
diff --git a/man2/break.2 b/man2/break.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/break.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/brk.2 b/man2/brk.2
deleted file mode 100644
index 42b32a21a..000000000
--- a/man2/brk.2
+++ /dev/null
@@ -1,153 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt, (michael@moria.de)
-.\" and Copyright 2006, 2008, Michael Kerrisk <tmk.manpages@gmail.com>
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Wed Jul 21 19:52:58 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Sun Aug 21 17:40:38 1994 by Rik Faith <faith@cs.unc.edu>
-.\"
-.TH brk 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-brk, sbrk \- change data segment size
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int brk(void *" addr );
-.BI "void *sbrk(intptr_t " increment );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR brk (),
-.BR sbrk ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- || ((_XOPEN_SOURCE >= 500) &&
- ! (_POSIX_C_SOURCE >= 200112L))
-.\" (_XOPEN_SOURCE >= 500 ||
-.\" _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) &&
- From glibc 2.12 to glibc 2.19:
- _BSD_SOURCE || _SVID_SOURCE
- || ((_XOPEN_SOURCE >= 500) &&
- ! (_POSIX_C_SOURCE >= 200112L))
-.\" (_XOPEN_SOURCE >= 500 ||
-.\" _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) &&
- Before glibc 2.12:
- _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
-.fi
-.SH DESCRIPTION
-.BR brk ()
-and
-.BR sbrk ()
-change the location of the
-.IR "program break" ,
-which defines the end of the process's data segment
-(i.e., the program break is the first location after the end of the
-uninitialized data segment).
-Increasing the program break has the effect of
-allocating memory to the process;
-decreasing the break deallocates memory.
-.PP
-.BR brk ()
-sets the end of the data segment to the value specified by
-.IR addr ,
-when that value is reasonable, the system has enough memory,
-and the process does not exceed its maximum data size (see
-.BR setrlimit (2)).
-.PP
-.BR sbrk ()
-increments the program's data space by
-.I increment
-bytes.
-Calling
-.BR sbrk ()
-with an
-.I increment
-of 0 can be used to find the current location of the program break.
-.SH RETURN VALUE
-On success,
-.BR brk ()
-returns zero.
-On error, \-1 is returned, and
-.I errno
-is set to
-.BR ENOMEM .
-.PP
-On success,
-.BR sbrk ()
-returns the previous program break.
-(If the break was increased,
-then this value is a pointer to the start of the newly allocated memory).
-On error,
-.I "(void\ *)\ \-1"
-is returned, and
-.I errno
-is set to
-.BR ENOMEM .
-.SH STANDARDS
-None.
-.SH HISTORY
-4.3BSD; SUSv1, marked LEGACY in SUSv2, removed in POSIX.1-2001.
-.\"
-.\" .BR brk ()
-.\" and
-.\" .BR sbrk ()
-.\" are not defined in the C Standard and are deliberately excluded from the
-.\" POSIX.1-1990 standard (see paragraphs B.1.1.1.3 and B.8.3.3).
-.SH NOTES
-Avoid using
-.BR brk ()
-and
-.BR sbrk ():
-the
-.BR malloc (3)
-memory allocation package is the
-portable and comfortable way of allocating memory.
-.PP
-Various systems use various types for the argument of
-.BR sbrk ().
-Common are \fIint\fP, \fIssize_t\fP, \fIptrdiff_t\fP, \fIintptr_t\fP.
-.\" One sees
-.\" \fIint\fP (e.g., XPGv4, DU 4.0, HP-UX 11, FreeBSD 4.0, OpenBSD 3.2),
-.\" \fIssize_t\fP (OSF1 2.0, Irix 5.3, 6.5),
-.\" \fIptrdiff_t\fP (libc4, libc5, ulibc, glibc 2.0, 2.1),
-.\" \fIintptr_t\fP (e.g., XPGv5, AIX, SunOS 5.8, 5.9, FreeBSD 4.7, NetBSD 1.6,
-.\" Tru64 5.1, glibc2.2).
-.SS C library/kernel differences
-The return value described above for
-.BR brk ()
-is the behavior provided by the glibc wrapper function for the Linux
-.BR brk ()
-system call.
-(On most other implementations, the return value from
-.BR brk ()
-is the same; this return value was also specified in SUSv2.)
-However,
-the actual Linux system call returns the new program break on success.
-On failure, the system call returns the current break.
-The glibc wrapper function does some work
-(i.e., checks whether the new break is less than
-.IR addr )
-to provide the 0 and \-1 return values described above.
-.PP
-On Linux,
-.BR sbrk ()
-is implemented as a library function that uses the
-.BR brk ()
-system call, and does some internal bookkeeping so that it can
-return the old break value.
-.SH SEE ALSO
-.BR execve (2),
-.BR getrlimit (2),
-.BR end (3),
-.BR malloc (3)
diff --git a/man2/cacheflush.2 b/man2/cacheflush.2
deleted file mode 100644
index aa2ea6e45..000000000
--- a/man2/cacheflush.2
+++ /dev/null
@@ -1,143 +0,0 @@
-.\" Written by Ralf Baechle (ralf@waldorf-gmbh.de),
-.\" Copyright (c) 1994, 1995 Waldorf GMBH
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH cacheflush 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cacheflush \- flush contents of instruction and/or data cache
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/cachectl.h>
-.PP
-.BI "int cacheflush(void " addr [. nbytes "], int "nbytes ", int "cache );
-.fi
-.PP
-.IR Note :
-On some architectures,
-there is no glibc wrapper for this system call; see NOTES.
-.SH DESCRIPTION
-.BR cacheflush ()
-flushes the contents of the indicated cache(s) for the
-user addresses in the range
-.I addr
-to
-.IR (addr+nbytes\-1) .
-.I cache
-may be one of:
-.TP
-.B ICACHE
-Flush the instruction cache.
-.TP
-.B DCACHE
-Write back to memory and invalidate the affected valid cache lines.
-.TP
-.B BCACHE
-Same as
-.BR (ICACHE|DCACHE) .
-.SH RETURN VALUE
-.BR cacheflush ()
-returns 0 on success.
-On error, it returns \-1 and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-Some or all of the address range
-.I addr
-to
-.I (addr+nbytes\-1)
-is not accessible.
-.TP
-.B EINVAL
-.I cache
-is not one of
-.BR ICACHE ,
-.BR DCACHE ,
-or
-.B BCACHE
-(but see BUGS).
-.SH VERSIONS
-.BR cacheflush ()
-should not be used in programs intended to be portable.
-On Linux, this call first appeared on the MIPS architecture,
-but nowadays, Linux provides a
-.BR cacheflush ()
-system call on some other architectures, but with different arguments.
-.SS Architecture-specific variants
-glibc provides a wrapper for this system call,
-with the prototype shown in SYNOPSIS,
-for the following architectures:
-ARC, CSKY, MIPS, and NIOS2.
-.PP
-On some other architectures,
-Linux provides this system call, with different arguments:
-.TP
-M68K:
-.nf
-.BI "int cacheflush(unsigned long " addr ", int " scope ", int " cache ,
-.BI " unsigned long " len );
-.fi
-.TP
-SH:
-.nf
-.BI "int cacheflush(unsigned long " addr ", unsigned long " len ", int " op );
-.fi
-.TP
-NDS32:
-.nf
-.BI "int cacheflush(unsigned int " start ", unsigned int " end ", int " cache );
-.fi
-.PP
-On the above architectures,
-glibc does not provide a wrapper for this system call; call it using
-.BR syscall (2).
-.SS GCC alternative
-Unless you need the finer grained control that this system call provides,
-you probably want to use the GCC built-in function
-.BR __builtin___clear_cache (),
-which provides a portable interface
-across platforms supported by GCC and compatible compilers:
-.PP
-.in +4n
-.EX
-.BI "void __builtin___clear_cache(void *" begin ", void *" end );
-.EE
-.in
-.PP
-On platforms that don't require instruction cache flushes,
-.BR __builtin___clear_cache ()
-has no effect.
-.PP
-.IR Note :
-On some GCC-compatible compilers,
-the prototype for this built-in function uses
-.I char *
-instead of
-.I void *
-for the parameters.
-.SH STANDARDS
-Historically, this system call was available on all MIPS UNIX variants
-including RISC/os, IRIX, Ultrix, NetBSD, OpenBSD, and FreeBSD
-(and also on some non-UNIX MIPS operating systems), so that
-the existence of this call in MIPS operating systems is a de-facto
-standard.
-.SH BUGS
-Linux kernels older than Linux 2.6.11 ignore the
-.I addr
-and
-.I nbytes
-arguments, making this function fairly expensive.
-Therefore, the whole cache is always flushed.
-.PP
-This function always behaves as if
-.B BCACHE
-has been passed for the
-.I cache
-argument and does not do any error checking on the
-.I cache
-argument.
diff --git a/man2/capget.2 b/man2/capget.2
deleted file mode 100644
index 7327071e8..000000000
--- a/man2/capget.2
+++ /dev/null
@@ -1,260 +0,0 @@
-.\" Copyright: written by Andrew Morgan <morgan@kernel.org>
-.\" and Copyright 2006, 2008, Michael Kerrisk <tmk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" Modified by David A. Wheeler <dwheeler@ida.org>
-.\" Modified 2004-05-27, mtk
-.\" Modified 2004-06-21, aeb
-.\" Modified 2008-04-28, morgan of kernel.org
-.\" Update in line with addition of file capabilities and
-.\" 64-bit capability sets in Linux 2.6.2[45].
-.\" Modified 2009-01-26, andi kleen
-.\"
-.TH capget 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-capget, capset \- set/get capabilities of thread(s)
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/capability.h>" " /* Definition of " CAP_* " and"
-.BR " _LINUX_CAPABILITY_*" " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_capget, cap_user_header_t " hdrp ,
-.BI " cap_user_data_t " datap );
-.BI "int syscall(SYS_capset, cap_user_header_t " hdrp ,
-.BI " const cap_user_data_t " datap );
-.fi
-.PP
-.IR Note :
-glibc provides no wrappers for these system calls,
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-These two system calls are the raw kernel interface for getting and
-setting thread capabilities.
-Not only are these system calls specific to Linux,
-but the kernel API is likely to change and use of
-these system calls (in particular the format of the
-.I cap_user_*_t
-types) is subject to extension with each kernel revision,
-but old programs will keep working.
-.PP
-The portable interfaces are
-.BR cap_set_proc (3)
-and
-.BR cap_get_proc (3);
-if possible, you should use those interfaces in applications; see NOTES.
-.\"
-.SS Current details
-Now that you have been warned, some current kernel details.
-The structures are defined as follows.
-.PP
-.in +4n
-.EX
-#define _LINUX_CAPABILITY_VERSION_1 0x19980330
-#define _LINUX_CAPABILITY_U32S_1 1
-\&
- /* V2 added in Linux 2.6.25; deprecated */
-#define _LINUX_CAPABILITY_VERSION_2 0x20071026
-.\" commit e338d263a76af78fe8f38a72131188b58fceb591
-.\" Added 64 bit capability support
-#define _LINUX_CAPABILITY_U32S_2 2
-\&
- /* V3 added in Linux 2.6.26 */
-#define _LINUX_CAPABILITY_VERSION_3 0x20080522
-.\" commit ca05a99a54db1db5bca72eccb5866d2a86f8517f
-#define _LINUX_CAPABILITY_U32S_3 2
-\&
-typedef struct __user_cap_header_struct {
- __u32 version;
- int pid;
-} *cap_user_header_t;
-\&
-typedef struct __user_cap_data_struct {
- __u32 effective;
- __u32 permitted;
- __u32 inheritable;
-} *cap_user_data_t;
-.EE
-.in
-.PP
-The
-.IR effective ,
-.IR permitted ,
-and
-.I inheritable
-fields are bit masks of the capabilities defined in
-.BR capabilities (7).
-Note that the
-.B CAP_*
-values are bit indexes and need to be bit-shifted before ORing into
-the bit fields.
-To define the structures for passing to the system call, you have to use the
-.I struct __user_cap_header_struct
-and
-.I struct __user_cap_data_struct
-names because the typedefs are only pointers.
-.PP
-Kernels prior to Linux 2.6.25 prefer
-32-bit capabilities with version
-.BR _LINUX_CAPABILITY_VERSION_1 .
-Linux 2.6.25 added 64-bit capability sets, with version
-.BR _LINUX_CAPABILITY_VERSION_2 .
-There was, however, an API glitch, and Linux 2.6.26 added
-.B _LINUX_CAPABILITY_VERSION_3
-to fix the problem.
-.PP
-Note that 64-bit capabilities use
-.I datap[0]
-and
-.IR datap[1] ,
-whereas 32-bit capabilities use only
-.IR datap[0] .
-.PP
-On kernels that support file capabilities (VFS capabilities support),
-these system calls behave slightly differently.
-This support was added as an option in Linux 2.6.24,
-and became fixed (nonoptional) in Linux 2.6.33.
-.PP
-For
-.BR capget ()
-calls, one can probe the capabilities of any process by specifying its
-process ID with the
-.I hdrp\->pid
-field value.
-.PP
-For details on the data, see
-.BR capabilities (7).
-.\"
-.SS With VFS capabilities support
-VFS capabilities employ a file extended attribute (see
-.BR xattr (7))
-to allow capabilities to be attached to executables.
-This privilege model obsoletes kernel support for one process
-asynchronously setting the capabilities of another.
-That is, on kernels that have VFS capabilities support, when calling
-.BR capset (),
-the only permitted values for
-.I hdrp\->pid
-are 0 or, equivalently, the value returned by
-.BR gettid (2).
-.\"
-.SS Without VFS capabilities support
-On older kernels that do not provide VFS capabilities support
-.BR capset ()
-can, if the caller has the
-.B CAP_SETPCAP
-capability, be used to change not only the caller's own capabilities,
-but also the capabilities of other threads.
-The call operates on the capabilities of the thread specified by the
-.I pid
-field of
-.I hdrp
-when that is nonzero, or on the capabilities of the calling thread if
-.I pid
-is 0.
-If
-.I pid
-refers to a single-threaded process, then
-.I pid
-can be specified as a traditional process ID;
-operating on a thread of a multithreaded process requires a thread ID
-of the type returned by
-.BR gettid (2).
-For
-.BR capset (),
-.I pid
-can also be: \-1, meaning perform the change on all threads except the
-caller and
-.BR init (1);
-or a value less than \-1, in which case the change is applied
-to all members of the process group whose ID is \-\fIpid\fP.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.PP
-The calls fail with the error
-.BR EINVAL ,
-and set the
-.I version
-field of
-.I hdrp
-to the kernel preferred value of
-.B _LINUX_CAPABILITY_VERSION_?
-when an unsupported
-.I version
-value is specified.
-In this way, one can probe what the current
-preferred capability revision is.
-.SH ERRORS
-.TP
-.B EFAULT
-Bad memory address.
-.I hdrp
-must not be NULL.
-.I datap
-may be NULL only when the user is trying to determine the preferred
-capability version format supported by the kernel.
-.TP
-.B EINVAL
-One of the arguments was invalid.
-.TP
-.B EPERM
-An attempt was made to add a capability to the permitted set, or to set
-a capability in the effective set that is not in the
-permitted set.
-.TP
-.B EPERM
-An attempt was made to add a capability to the inheritable set, and either:
-.RS
-.IP \[bu] 3
-that capability was not in the caller's bounding set; or
-.IP \[bu]
-the capability was not in the caller's permitted set
-and the caller lacked the
-.B CAP_SETPCAP
-capability in its effective set.
-.RE
-.TP
-.B EPERM
-The caller attempted to use
-.BR capset ()
-to modify the capabilities of a thread other than itself,
-but lacked sufficient privilege.
-For kernels supporting VFS
-capabilities, this is never permitted.
-For kernels lacking VFS
-support, the
-.B CAP_SETPCAP
-capability is required.
-(A bug in kernels before Linux 2.6.11 meant that this error could also
-occur if a thread without this capability tried to change its
-own capabilities by specifying the
-.I pid
-field as a nonzero value (i.e., the value returned by
-.BR getpid (2))
-instead of 0.)
-.TP
-.B ESRCH
-No such thread.
-.SH STANDARDS
-Linux.
-.SH NOTES
-The portable interface to the capability querying and setting
-functions is provided by the
-.I libcap
-library and is available here:
-.br
-.UR http://git.kernel.org/cgit\:/linux\:/kernel\:/git\:/morgan\:\:/libcap.git
-.UE
-.SH SEE ALSO
-.BR clone (2),
-.BR gettid (2),
-.BR capabilities (7)
diff --git a/man2/capset.2 b/man2/capset.2
deleted file mode 100644
index 9e829cbd8..000000000
--- a/man2/capset.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/capget.2
diff --git a/man2/chdir.2 b/man2/chdir.2
deleted file mode 100644
index 9224d336e..000000000
--- a/man2/chdir.2
+++ /dev/null
@@ -1,127 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified 1993-07-21 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1995-04-15 by Michael Chastain <mec@shell.portal.com>:
-.\" Added 'fchdir'. Fixed bugs in error section.
-.\" Modified 1996-10-21 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1997-08-21 by Joseph S. Myers <jsm28@cam.ac.uk>
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH chdir 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-chdir, fchdir \- change working directory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int chdir(const char *" path );
-.BI "int fchdir(int " fd );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR fchdir ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
- || /* glibc up to and including 2.19: */ _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-.BR chdir ()
-changes the current working directory of the calling process to the
-directory specified in
-.IR path .
-.PP
-.BR fchdir ()
-is identical to
-.BR chdir ();
-the only difference is that the directory is given as an
-open file descriptor.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-Depending on the filesystem, other errors can be returned.
-The more
-general errors for
-.BR chdir ()
-are listed below:
-.TP
-.B EACCES
-Search permission is denied for one of the components of
-.IR path .
-(See also
-.BR path_resolution (7).)
-.TP
-.B EFAULT
-.I path
-points outside your accessible address space.
-.TP
-.B EIO
-An I/O error occurred.
-.TP
-.B ELOOP
-Too many symbolic links were encountered in resolving
-.IR path .
-.TP
-.B ENAMETOOLONG
-.I path
-is too long.
-.TP
-.B ENOENT
-The directory specified in
-.I path
-does not exist.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOTDIR
-A component of
-.I path
-is not a directory.
-.PP
-The general errors for
-.BR fchdir ()
-are listed below:
-.TP
-.B EACCES
-Search permission was denied on the directory open on
-.IR fd .
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor.
-.TP
-.B ENOTDIR
-.I fd
-does not refer to a directory.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.4BSD.
-.SH NOTES
-The current working directory is the starting point for interpreting
-relative pathnames (those not starting with \[aq]/\[aq]).
-.PP
-A child process created via
-.BR fork (2)
-inherits its parent's current working directory.
-The current working directory is left unchanged by
-.BR execve (2).
-.SH SEE ALSO
-.BR chroot (2),
-.BR getcwd (3),
-.BR path_resolution (7)
diff --git a/man2/chmod.2 b/man2/chmod.2
deleted file mode 100644
index 8903901d7..000000000
--- a/man2/chmod.2
+++ /dev/null
@@ -1,347 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\" and Copyright (C) 2006, 2014 Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified 1993-07-21 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1997-01-12 by Michael Haardt
-.\" <michael@cantor.informatik.rwth-aachen.de>: NFS details
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH chmod 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-chmod, fchmod, fchmodat \- change permissions of a file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/stat.h>
-.PP
-.BI "int chmod(const char *" pathname ", mode_t " mode );
-.BI "int fchmod(int " fd ", mode_t " mode );
-.PP
-.BR "#include <fcntl.h>" " /* Definition of AT_* constants */"
-.B #include <sys/stat.h>
-.PP
-.BI "int fchmodat(int " dirfd ", const char *" pathname ", mode_t " \
-mode ", int " flags );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.nf
-.BR fchmod ():
- Since glibc 2.24:
- _POSIX_C_SOURCE >= 199309L
-.\" || (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED)
- glibc 2.19 to glibc 2.23
- _POSIX_C_SOURCE
- glibc 2.16 to glibc 2.19:
- _BSD_SOURCE || _POSIX_C_SOURCE
- glibc 2.12 to glibc 2.16:
- _BSD_SOURCE || _XOPEN_SOURCE >= 500
- || _POSIX_C_SOURCE >= 200809L
- glibc 2.11 and earlier:
- _BSD_SOURCE || _XOPEN_SOURCE >= 500
-.\" || (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED)
-.fi
-.PP
-.BR fchmodat ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _ATFILE_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR chmod ()
-and
-.BR fchmod ()
-system calls change a file's mode bits.
-(The file mode consists of the file permission bits plus the set-user-ID,
-set-group-ID, and sticky bits.)
-These system calls differ only in how the file is specified:
-.IP \[bu] 3
-.BR chmod ()
-changes the mode of the file specified whose pathname is given in
-.IR pathname ,
-which is dereferenced if it is a symbolic link.
-.IP \[bu]
-.BR fchmod ()
-changes the mode of the file referred to by the open file descriptor
-.IR fd .
-.PP
-The new file mode is specified in
-.IR mode ,
-which is a bit mask created by ORing together zero or
-more of the following:
-.TP 18
-.BR S_ISUID " (04000)"
-set-user-ID (set process effective user ID on
-.BR execve (2))
-.TP
-.BR S_ISGID " (02000)"
-set-group-ID (set process effective group ID on
-.BR execve (2);
-mandatory locking, as described in
-.BR fcntl (2);
-take a new file's group from parent directory, as described in
-.BR chown (2)
-and
-.BR mkdir (2))
-.TP
-.BR S_ISVTX " (01000)"
-sticky bit (restricted deletion flag, as described in
-.BR unlink (2))
-.TP
-.BR S_IRUSR " (00400)"
-read by owner
-.TP
-.BR S_IWUSR " (00200)"
-write by owner
-.TP
-.BR S_IXUSR " (00100)"
-execute/search by owner ("search" applies for directories,
-and means that entries within the directory can be accessed)
-.TP
-.BR S_IRGRP " (00040)"
-read by group
-.TP
-.BR S_IWGRP " (00020)"
-write by group
-.TP
-.BR S_IXGRP " (00010)"
-execute/search by group
-.TP
-.BR S_IROTH " (00004)"
-read by others
-.TP
-.BR S_IWOTH " (00002)"
-write by others
-.TP
-.BR S_IXOTH " (00001)"
-execute/search by others
-.PP
-The effective UID of the calling process must match the owner of the file,
-or the process must be privileged (Linux: it must have the
-.B CAP_FOWNER
-capability).
-.PP
-If the calling process is not privileged (Linux: does not have the
-.B CAP_FSETID
-capability), and the group of the file does not match
-the effective group ID of the process or one of its
-supplementary group IDs, the
-.B S_ISGID
-bit will be turned off,
-but this will not cause an error to be returned.
-.PP
-As a security measure, depending on the filesystem,
-the set-user-ID and set-group-ID execution bits
-may be turned off if a file is written.
-(On Linux, this occurs if the writing process does not have the
-.B CAP_FSETID
-capability.)
-On some filesystems, only the superuser can set the sticky bit,
-which may have a special meaning.
-For the sticky bit, and for set-user-ID and set-group-ID bits on
-directories, see
-.BR inode (7).
-.PP
-On NFS filesystems, restricting the permissions will immediately influence
-already open files, because the access control is done on the server, but
-open files are maintained by the client.
-Widening the permissions may be
-delayed for other clients if attribute caching is enabled on them.
-.\"
-.\"
-.SS fchmodat()
-The
-.BR fchmodat ()
-system call operates in exactly the same way as
-.BR chmod (),
-except for the differences described here.
-.PP
-If the pathname given in
-.I pathname
-is relative, then it is interpreted relative to the directory
-referred to by the file descriptor
-.I dirfd
-(rather than relative to the current working directory of
-the calling process, as is done by
-.BR chmod ()
-for a relative pathname).
-.PP
-If
-.I pathname
-is relative and
-.I dirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I pathname
-is interpreted relative to the current working
-directory of the calling process (like
-.BR chmod ()).
-.PP
-If
-.I pathname
-is absolute, then
-.I dirfd
-is ignored.
-.PP
-.I flags
-can either be 0, or include the following flag:
-.TP
-.B AT_SYMLINK_NOFOLLOW
-If
-.I pathname
-is a symbolic link, do not dereference it:
-instead operate on the link itself.
-This flag is not currently implemented.
-.PP
-See
-.BR openat (2)
-for an explanation of the need for
-.BR fchmodat ().
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-Depending on the filesystem,
-errors other than those listed below can be returned.
-.PP
-The more general errors for
-.BR chmod ()
-are listed below:
-.TP
-.B EACCES
-Search permission is denied on a component of the path prefix.
-(See also
-.BR path_resolution (7).)
-.TP
-.B EBADF
-.RB ( fchmod ())
-The file descriptor
-.I fd
-is not valid.
-.TP
-.B EBADF
-.RB ( fchmodat ())
-.I pathname
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B EFAULT
-.I pathname
-points outside your accessible address space.
-.TP
-.B EINVAL
-.RB ( fchmodat ())
-Invalid flag specified in
-.IR flags .
-.TP
-.B EIO
-An I/O error occurred.
-.TP
-.B ELOOP
-Too many symbolic links were encountered in resolving
-.IR pathname .
-.TP
-.B ENAMETOOLONG
-.I pathname
-is too long.
-.TP
-.B ENOENT
-The file does not exist.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOTDIR
-A component of the path prefix is not a directory.
-.TP
-.B ENOTDIR
-.RB ( fchmodat ())
-.I pathname
-is relative and
-.I dirfd
-is a file descriptor referring to a file other than a directory.
-.TP
-.B ENOTSUP
-.RB ( fchmodat ())
-.I flags
-specified
-.BR AT_SYMLINK_NOFOLLOW ,
-which is not supported.
-.TP
-.B EPERM
-The effective UID does not match the owner of the file,
-and the process is not privileged (Linux: it does not have the
-.B CAP_FOWNER
-capability).
-.TP
-.B EPERM
-The file is marked immutable or append-only.
-(See
-.BR ioctl_iflags (2).)
-.TP
-.B EROFS
-The named file resides on a read-only filesystem.
-.SH VERSIONS
-.SS C library/kernel differences
-The GNU C library
-.BR fchmodat ()
-wrapper function implements the POSIX-specified
-interface described in this page.
-This interface differs from the underlying Linux system call, which does
-.I not
-have a
-.I flags
-argument.
-.SS glibc notes
-On older kernels where
-.BR fchmodat ()
-is unavailable, the glibc wrapper function falls back to the use of
-.BR chmod ().
-When
-.I pathname
-is a relative pathname,
-glibc constructs a pathname based on the symbolic link in
-.I /proc/self/fd
-that corresponds to the
-.I dirfd
-argument.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR chmod ()
-.TQ
-.BR fchmod ()
-4.4BSD, SVr4, POSIX.1-2001.
-.TP
-.BR fchmodat ()
-POSIX.1-2008.
-Linux 2.6.16,
-glibc 2.4.
-.SH SEE ALSO
-.BR chmod (1),
-.BR chown (2),
-.BR execve (2),
-.BR open (2),
-.BR stat (2),
-.BR inode (7),
-.BR path_resolution (7),
-.BR symlink (7)
diff --git a/man2/chown.2 b/man2/chown.2
deleted file mode 100644
index 32b17fbdc..000000000
--- a/man2/chown.2
+++ /dev/null
@@ -1,471 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\" and Copyright (c) 1998 Andries Brouwer (aeb@cwi.nl)
-.\" and Copyright (c) 2006, 2007, 2008, 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified 1993-07-21 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1996-07-09 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 1996-11-06 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1997-05-18 by Michael Haardt <michael@cantor.informatik.rwth-aachen.de>
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" 2007-07-08, mtk, added an example program; updated SYNOPSIS
-.\" 2008-05-08, mtk, Describe rules governing ownership of new files
-.\" (bsdgroups versus sysvgroups, and the effect of the parent
-.\" directory's set-group-ID mode bit).
-.\"
-.TH chown 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-chown, fchown, lchown, fchownat \- change ownership of a file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int chown(const char *" pathname ", uid_t " owner ", gid_t " group );
-.BI "int fchown(int " fd ", uid_t " owner ", gid_t " group );
-.BI "int lchown(const char *" pathname ", uid_t " owner ", gid_t " group );
-.PP
-.BR "#include <fcntl.h> " "/* Definition of AT_* constants */"
-.B #include <unistd.h>
-.PP
-.BI "int fchownat(int " dirfd ", const char *" pathname ,
-.BI " uid_t " owner ", gid_t " group ", int " flags );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR fchown (),
-.BR lchown ():
-.nf
- /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
- || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* glibc <= 2.19: */ _BSD_SOURCE
-.fi
-.PP
-.BR fchownat ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _ATFILE_SOURCE
-.fi
-.SH DESCRIPTION
-These system calls change the owner and group of a file.
-The
-.BR chown (),
-.BR fchown (),
-and
-.BR lchown ()
-system calls differ only in how the file is specified:
-.IP \[bu] 3
-.BR chown ()
-changes the ownership of the file specified by
-.IR pathname ,
-which is dereferenced if it is a symbolic link.
-.IP \[bu]
-.BR fchown ()
-changes the ownership of the file referred to by the open file descriptor
-.IR fd .
-.IP \[bu]
-.BR lchown ()
-is like
-.BR chown (),
-but does not dereference symbolic links.
-.PP
-Only a privileged process (Linux: one with the
-.B CAP_CHOWN
-capability) may change the owner of a file.
-The owner of a file may change the group of the file
-to any group of which that owner is a member.
-A privileged process (Linux: with
-.BR CAP_CHOWN )
-may change the group arbitrarily.
-.PP
-If the
-.I owner
-or
-.I group
-is specified as \-1, then that ID is not changed.
-.PP
-When the owner or group of an executable file is
-changed by an unprivileged user, the
-.B S_ISUID
-and
-.B S_ISGID
-mode bits are cleared.
-POSIX does not specify whether
-this also should happen when root does the
-.BR chown ();
-the Linux behavior depends on the kernel version,
-and since Linux 2.2.13, root is treated like other users.
-.\" In Linux 2.0 kernels, superuser was like everyone else
-.\" In Linux 2.2, up to Linux 2.2.12, these bits were not cleared for superuser.
-.\" Since Linux 2.2.13, superuser is once more like everyone else.
-In case of a non-group-executable file (i.e., one for which the
-.B S_IXGRP
-bit is not set) the
-.B S_ISGID
-bit indicates mandatory locking, and is not cleared by a
-.BR chown ().
-.PP
-When the owner or group of an executable file is changed (by any user),
-all capability sets for the file are cleared.
-.\"
-.SS fchownat()
-The
-.BR fchownat ()
-system call operates in exactly the same way as
-.BR chown (),
-except for the differences described here.
-.PP
-If the pathname given in
-.I pathname
-is relative, then it is interpreted relative to the directory
-referred to by the file descriptor
-.I dirfd
-(rather than relative to the current working directory of
-the calling process, as is done by
-.BR chown ()
-for a relative pathname).
-.PP
-If
-.I pathname
-is relative and
-.I dirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I pathname
-is interpreted relative to the current working
-directory of the calling process (like
-.BR chown ()).
-.PP
-If
-.I pathname
-is absolute, then
-.I dirfd
-is ignored.
-.PP
-The
-.I flags
-argument is a bit mask created by ORing together
-0 or more of the following values;
-.TP
-.BR AT_EMPTY_PATH " (since Linux 2.6.39)"
-.\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d
-If
-.I pathname
-is an empty string, operate on the file referred to by
-.I dirfd
-(which may have been obtained using the
-.BR open (2)
-.B O_PATH
-flag).
-In this case,
-.I dirfd
-can refer to any type of file, not just a directory.
-If
-.I dirfd
-is
-.BR AT_FDCWD ,
-the call operates on the current working directory.
-This flag is Linux-specific; define
-.B _GNU_SOURCE
-.\" Before glibc 2.16, defining _ATFILE_SOURCE sufficed
-to obtain its definition.
-.TP
-.B AT_SYMLINK_NOFOLLOW
-If
-.I pathname
-is a symbolic link, do not dereference it:
-instead operate on the link itself, like
-.BR lchown ().
-(By default,
-.BR fchownat ()
-dereferences symbolic links, like
-.BR chown ().)
-.PP
-See
-.BR openat (2)
-for an explanation of the need for
-.BR fchownat ().
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-Depending on the filesystem,
-errors other than those listed below can be returned.
-.PP
-The more general errors for
-.BR chown ()
-are listed below.
-.TP
-.B EACCES
-Search permission is denied on a component of the path prefix.
-(See also
-.BR path_resolution (7).)
-.TP
-.B EBADF
-.RB ( fchown ())
-.I fd
-is not a valid open file descriptor.
-.TP
-.B EBADF
-.RB ( fchownat ())
-.I pathname
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B EFAULT
-.I pathname
-points outside your accessible address space.
-.TP
-.B EINVAL
-.RB ( fchownat ())
-Invalid flag specified in
-.IR flags .
-.TP
-.B EIO
-.RB ( fchown ())
-A low-level I/O error occurred while modifying the inode.
-.TP
-.B ELOOP
-Too many symbolic links were encountered in resolving
-.IR pathname .
-.TP
-.B ENAMETOOLONG
-.I pathname
-is too long.
-.TP
-.B ENOENT
-The file does not exist.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOTDIR
-A component of the path prefix is not a directory.
-.TP
-.B ENOTDIR
-.RB ( fchownat ())
-.I pathname
-is relative and
-.I dirfd
-is a file descriptor referring to a file other than a directory.
-.TP
-.B EPERM
-The calling process did not have the required permissions
-(see above) to change owner and/or group.
-.TP
-.B EPERM
-The file is marked immutable or append-only.
-(See
-.BR ioctl_iflags (2).)
-.TP
-.B EROFS
-The named file resides on a read-only filesystem.
-.SH VERSIONS
-The 4.4BSD version can be
-used only by the superuser (that is, ordinary users cannot give away files).
-.\" chown():
-.\" SVr4 documents EINVAL, EINTR, ENOLINK and EMULTIHOP returns, but no
-.\" ENOMEM. POSIX.1 does not document ENOMEM or ELOOP error conditions.
-.\" fchown():
-.\" SVr4 documents additional EINVAL, EIO, EINTR, and ENOLINK
-.\" error conditions.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR chown ()
-.TQ
-.BR fchown ()
-.TQ
-.BR lchown ()
-4.4BSD, SVr4, POSIX.1-2001.
-.TP
-.BR fchownat ()
-POSIX.1-2008.
-Linux 2.6.16,
-glibc 2.4.
-.SH NOTES
-.SS Ownership of new files
-When a new file is created (by, for example,
-.BR open (2)
-or
-.BR mkdir (2)),
-its owner is made the same as the filesystem user ID of the
-creating process.
-The group of the file depends on a range of factors,
-including the type of filesystem,
-the options used to mount the filesystem,
-and whether or not the set-group-ID mode bit is enabled
-on the parent directory.
-If the filesystem supports the
-.B "\-o\ grpid"
-(or, synonymously
-.BR "\-o\ bsdgroups" )
-and
-.B "\-o\ nogrpid"
-(or, synonymously
-.BR "\-o\ sysvgroups" )
-.BR mount (8)
-options, then the rules are as follows:
-.IP \[bu] 3
-If the filesystem is mounted with
-.BR "\-o\ grpid" ,
-then the group of a new file is made
-the same as that of the parent directory.
-.IP \[bu]
-If the filesystem is mounted with
-.B \-o\ nogrpid
-and the set-group-ID bit is disabled on the parent directory,
-then the group of a new file is made the same as the
-process's filesystem GID.
-.IP \[bu]
-If the filesystem is mounted with
-.B \-o\ nogrpid
-and the set-group-ID bit is enabled on the parent directory,
-then the group of a new file is made
-the same as that of the parent directory.
-.PP
-As at Linux 4.12,
-the
-.B \-o\ grpid
-and
-.B \-o\ nogrpid
-mount options are supported by ext2, ext3, ext4, and XFS.
-Filesystems that don't support these mount options follow the
-.B \-o\ nogrpid
-rules.
-.SS glibc notes
-On older kernels where
-.BR fchownat ()
-is unavailable, the glibc wrapper function falls back to the use of
-.BR chown ()
-and
-.BR lchown ().
-When
-.I pathname
-is a relative pathname,
-glibc constructs a pathname based on the symbolic link in
-.I /proc/self/fd
-that corresponds to the
-.I dirfd
-argument.
-.SS NFS
-The
-.BR chown ()
-semantics are deliberately violated on NFS filesystems
-which have UID mapping enabled.
-Additionally, the semantics of all system
-calls which access the file contents are violated, because
-.BR chown ()
-may cause immediate access revocation on already open files.
-Client side
-caching may lead to a delay between the time where ownership have
-been changed to allow access for a user and the time where the file can
-actually be accessed by the user on other clients.
-.SS Historical details
-The original Linux
-.BR chown (),
-.BR fchown (),
-and
-.BR lchown ()
-system calls supported only 16-bit user and group IDs.
-Subsequently, Linux 2.4 added
-.BR chown32 (),
-.BR fchown32 (),
-and
-.BR lchown32 (),
-supporting 32-bit IDs.
-The glibc
-.BR chown (),
-.BR fchown (),
-and
-.BR lchown ()
-wrapper functions transparently deal with the variations across kernel versions.
-.PP
-Before Linux 2.1.81 (except 2.1.46),
-.BR chown ()
-did not follow symbolic links.
-Since Linux 2.1.81,
-.BR chown ()
-does follow symbolic links, and there is a new system call
-.BR lchown ()
-that does not follow symbolic links.
-Since Linux 2.1.86, this new call (that has the same semantics
-as the old
-.BR chown ())
-has got the same syscall number, and
-.BR chown ()
-got the newly introduced number.
-.SH EXAMPLES
-The following program changes the ownership of the file named in
-its second command-line argument to the value specified in its
-first command-line argument.
-The new owner can be specified either as a numeric user ID,
-or as a username (which is converted to a user ID by using
-.BR getpwnam (3)
-to perform a lookup in the system password file).
-.SS Program source
-.\" SRC BEGIN (chown.c)
-.EX
-#include <pwd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- char *endptr;
- uid_t uid;
- struct passwd *pwd;
-\&
- if (argc != 3 || argv[1][0] == \[aq]\e0\[aq]) {
- fprintf(stderr, "%s <owner> <file>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- uid = strtol(argv[1], &endptr, 10); /* Allow a numeric string */
-\&
- if (*endptr != \[aq]\e0\[aq]) { /* Was not pure numeric string */
- pwd = getpwnam(argv[1]); /* Try getting UID for username */
- if (pwd == NULL) {
- perror("getpwnam");
- exit(EXIT_FAILURE);
- }
-\&
- uid = pwd\->pw_uid;
- }
-\&
- if (chown(argv[2], uid, \-1) == \-1) {
- perror("chown");
- exit(EXIT_FAILURE);
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR chgrp (1),
-.BR chown (1),
-.BR chmod (2),
-.BR flock (2),
-.BR path_resolution (7),
-.BR symlink (7)
diff --git a/man2/chown32.2 b/man2/chown32.2
deleted file mode 100644
index f0a5635ae..000000000
--- a/man2/chown32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/chown.2
diff --git a/man2/chroot.2 b/man2/chroot.2
deleted file mode 100644
index 8a2a78502..000000000
--- a/man2/chroot.2
+++ /dev/null
@@ -1,166 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified 1993-07-21 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1994-08-21 by Michael Chastain <mec@shell.portal.com>
-.\" Modified 1996-06-13 by aeb
-.\" Modified 1996-11-06 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1997-08-21 by Joseph S. Myers <jsm28@cam.ac.uk>
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH chroot 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-chroot \- change root directory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int chroot(const char *" path );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR chroot ():
-.nf
- Since glibc 2.2.2:
- _XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L)
- || /* Since glibc 2.20: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE
- Before glibc 2.2.2:
- none
-.fi
-.SH DESCRIPTION
-.BR chroot ()
-changes the root directory of the calling process to that specified in
-.IR path .
-This directory will be used for pathnames beginning with \fI/\fP.
-The root directory is inherited by all children of the calling process.
-.PP
-Only a privileged process (Linux: one with the
-.B CAP_SYS_CHROOT
-capability in its user namespace) may call
-.BR chroot ().
-.PP
-This call changes an ingredient in the pathname resolution process
-and does nothing else.
-In particular, it is not intended to be used
-for any kind of security purpose, neither to fully sandbox a process nor
-to restrict filesystem system calls.
-In the past,
-.BR chroot ()
-has been used by daemons to restrict themselves prior to passing paths
-supplied by untrusted users to system calls such as
-.BR open (2).
-However, if a folder is moved out of the chroot directory, an attacker
-can exploit that to get out of the chroot directory as well.
-The easiest way to do that is to
-.BR chdir (2)
-to the to-be-moved directory, wait for it to be moved out, then open a
-path like ../../../etc/passwd.
-.PP
-.\" This is how the "slightly trickier variation" works:
-.\" https://github.com/QubesOS/qubes-secpack/blob/master/QSBs/qsb-014-2015.txt#L142
-A slightly
-trickier variation also works under some circumstances if
-.BR chdir (2)
-is not permitted.
-If a daemon allows a "chroot directory" to be specified,
-that usually means that if you want to prevent remote users from accessing
-files outside the chroot directory, you must ensure that folders are never
-moved out of it.
-.PP
-This call does not change the current working directory,
-so that after the call \[aq]\fI.\fP\[aq] can
-be outside the tree rooted at \[aq]\fI/\fP\[aq].
-In particular, the superuser can escape from a "chroot jail"
-by doing:
-.PP
-.in +4n
-.EX
-mkdir foo; chroot foo; cd ..
-.EE
-.in
-.PP
-This call does not close open file descriptors, and such file
-descriptors may allow access to files outside the chroot tree.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-Depending on the filesystem, other errors can be returned.
-The more general errors are listed below:
-.TP
-.B EACCES
-Search permission is denied on a component of the path prefix.
-(See also
-.BR path_resolution (7).)
-.\" Also search permission is required on the final component,
-.\" maybe just to guarantee that it is a directory?
-.TP
-.B EFAULT
-.I path
-points outside your accessible address space.
-.TP
-.B EIO
-An I/O error occurred.
-.TP
-.B ELOOP
-Too many symbolic links were encountered in resolving
-.IR path .
-.TP
-.B ENAMETOOLONG
-.I path
-is too long.
-.TP
-.B ENOENT
-The file does not exist.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOTDIR
-A component of
-.I path
-is not a directory.
-.TP
-.B EPERM
-The caller has insufficient privilege.
-.SH STANDARDS
-None.
-.SH HISTORY
-SVr4, 4.4BSD, SUSv2 (marked LEGACY).
-This function is not part of POSIX.1-2001.
-.\" SVr4 documents additional EINTR, ENOLINK and EMULTIHOP error conditions.
-.\" X/OPEN does not document EIO, ENOMEM or EFAULT error conditions.
-.SH NOTES
-A child process created via
-.BR fork (2)
-inherits its parent's root directory.
-The root directory is left unchanged by
-.BR execve (2).
-.PP
-The magic symbolic link,
-.IR /proc/ pid /root ,
-can be used to discover a process's root directory; see
-.BR proc (5)
-for details.
-.PP
-FreeBSD has a stronger
-.BR jail ()
-system call.
-.SH SEE ALSO
-.BR chroot (1),
-.BR chdir (2),
-.BR pivot_root (2),
-.BR path_resolution (7),
-.BR switch_root (8)
diff --git a/man2/clock_adjtime.2 b/man2/clock_adjtime.2
deleted file mode 100644
index b08b9c801..000000000
--- a/man2/clock_adjtime.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/adjtimex.2
diff --git a/man2/clock_getres.2 b/man2/clock_getres.2
deleted file mode 100644
index 9fb7ef14d..000000000
--- a/man2/clock_getres.2
+++ /dev/null
@@ -1,526 +0,0 @@
-'\" t
-.\" Copyright (c) 2003 Nick Clifford (zaf@nrc.co.nz), Jan 25, 2003
-.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl), Aug 24, 2003
-.\" Copyright (c) 2020 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2003-08-23 Martin Schulze <joey@infodrom.org> improvements
-.\" 2003-08-24 aeb, large parts rewritten
-.\" 2004-08-06 Christoph Lameter <clameter@sgi.com>, SMP note
-.\"
-.TH clock_getres 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-clock_getres, clock_gettime, clock_settime \- clock and time functions
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc ),
-since glibc 2.17
-.PP
-Before glibc 2.17,
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B #include <time.h>
-.PP
-.BI "int clock_getres(clockid_t " clockid ", struct timespec *_Nullable " res );
-.PP
-.BI "int clock_gettime(clockid_t " clockid ", struct timespec *" tp );
-.BI "int clock_settime(clockid_t " clockid ", const struct timespec *" tp );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR clock_getres (),
-.BR clock_gettime (),
-.BR clock_settime ():
-.nf
- _POSIX_C_SOURCE >= 199309L
-.fi
-.SH DESCRIPTION
-The function
-.BR clock_getres ()
-finds the resolution (precision) of the specified clock
-.IR clockid ,
-and, if
-.I res
-is non-NULL, stores it in the \fIstruct timespec\fP pointed to by
-.IR res .
-The resolution of clocks depends on the implementation and cannot be
-configured by a particular process.
-If the time value pointed to by the argument
-.I tp
-of
-.BR clock_settime ()
-is not a multiple of
-.IR res ,
-then it is truncated to a multiple of
-.IR res .
-.PP
-The functions
-.BR clock_gettime ()
-and
-.BR clock_settime ()
-retrieve and set the time of the specified clock
-.IR clockid .
-.PP
-The
-.I res
-and
-.I tp
-arguments are
-.BR timespec (3)
-structures.
-.PP
-The
-.I clockid
-argument is the identifier of the particular clock on which to act.
-A clock may be system-wide and hence visible for all processes, or
-per-process if it measures time only within a single process.
-.PP
-All implementations support the system-wide real-time clock,
-which is identified by
-.BR CLOCK_REALTIME .
-Its time represents seconds and nanoseconds since the Epoch.
-When its time is changed, timers for a relative interval are
-unaffected, but timers for an absolute point in time are affected.
-.PP
-More clocks may be implemented.
-The interpretation of the
-corresponding time values and the effect on timers is unspecified.
-.PP
-Sufficiently recent versions of glibc and the Linux kernel
-support the following clocks:
-.TP
-.B CLOCK_REALTIME
-A settable system-wide clock that measures real (i.e., wall-clock) time.
-Setting this clock requires appropriate privileges.
-This clock is affected by discontinuous jumps in the system time
-(e.g., if the system administrator manually changes the clock),
-and by the incremental adjustments performed by
-.BR adjtime (3)
-and NTP.
-.TP
-.BR CLOCK_REALTIME_ALARM " (since Linux 3.0; Linux-specific)"
-Like
-.BR CLOCK_REALTIME ,
-but not settable.
-See
-.BR timer_create (2)
-for further details.
-.TP
-.BR CLOCK_REALTIME_COARSE " (since Linux 2.6.32; Linux-specific)"
-.\" Added in commit da15cfdae03351c689736f8d142618592e3cebc3
-A faster but less precise version of
-.BR CLOCK_REALTIME .
-This clock is not settable.
-Use when you need very fast, but not fine-grained timestamps.
-Requires per-architecture support,
-and probably also architecture support for this flag in the
-.BR vdso (7).
-.TP
-.BR CLOCK_TAI " (since Linux 3.10; Linux-specific)"
-.\" commit 1ff3c9677bff7e468e0c487d0ffefe4e901d33f4
-A nonsettable system-wide clock derived from wall-clock time
-but ignoring leap seconds.
-This clock does
-not experience discontinuities and backwards jumps caused by NTP
-inserting leap seconds as
-.B CLOCK_REALTIME
-does.
-.IP
-The acronym TAI refers to International Atomic Time.
-.TP
-.B CLOCK_MONOTONIC
-A nonsettable system-wide clock that
-represents monotonic time since\[em]as described
-by POSIX\[em]"some unspecified point in the past".
-On Linux, that point corresponds to the number of seconds that the system
-has been running since it was booted.
-.IP
-The
-.B CLOCK_MONOTONIC
-clock is not affected by discontinuous jumps in the system time
-(e.g., if the system administrator manually changes the clock),
-but is affected by the incremental adjustments performed by
-.BR adjtime (3)
-and NTP.
-This clock does not count time that the system is suspended.
-All
-.B CLOCK_MONOTONIC
-variants guarantee that the time returned by consecutive calls will not go
-backwards, but successive calls may\[em]depending on the architecture\[em]return
-identical (not-increased) time values.
-.TP
-.BR CLOCK_MONOTONIC_COARSE " (since Linux 2.6.32; Linux-specific)"
-.\" Added in commit da15cfdae03351c689736f8d142618592e3cebc3
-A faster but less precise version of
-.BR CLOCK_MONOTONIC .
-Use when you need very fast, but not fine-grained timestamps.
-Requires per-architecture support,
-and probably also architecture support for this flag in the
-.BR vdso (7).
-.TP
-.BR CLOCK_MONOTONIC_RAW " (since Linux 2.6.28; Linux-specific)"
-.\" Added in commit 2d42244ae71d6c7b0884b5664cf2eda30fb2ae68, John Stultz
-Similar to
-.BR CLOCK_MONOTONIC ,
-but provides access to a raw hardware-based time
-that is not subject to NTP adjustments or
-the incremental adjustments performed by
-.BR adjtime (3).
-This clock does not count time that the system is suspended.
-.TP
-.BR CLOCK_BOOTTIME " (since Linux 2.6.39; Linux-specific)"
-.\" commit 7fdd7f89006dd5a4c702fa0ce0c272345fa44ae0
-.\" commit 70a08cca1227dc31c784ec930099a4417a06e7d0
-A nonsettable system-wide clock that is identical to
-.BR CLOCK_MONOTONIC ,
-except that it also includes any time that the system is suspended.
-This allows applications to get a suspend-aware monotonic clock
-without having to deal with the complications of
-.BR CLOCK_REALTIME ,
-which may have discontinuities if the time is changed using
-.BR settimeofday (2)
-or similar.
-.TP
-.BR CLOCK_BOOTTIME_ALARM " (since Linux 3.0; Linux-specific)"
-Like
-.BR CLOCK_BOOTTIME .
-See
-.BR timer_create (2)
-for further details.
-.TP
-.BR CLOCK_PROCESS_CPUTIME_ID " (since Linux 2.6.12)"
-This is a clock that measures CPU time consumed by this process
-(i.e., CPU time consumed by all threads in the process).
-On Linux, this clock is not settable.
-.TP
-.BR CLOCK_THREAD_CPUTIME_ID " (since Linux 2.6.12)"
-This is a clock that measures CPU time consumed by this thread.
-On Linux, this clock is not settable.
-.PP
-Linux also implements dynamic clock instances as described below.
-.SS Dynamic clocks
-In addition to the hard-coded System-V style clock IDs described above,
-Linux also supports
-POSIX clock operations on certain character devices.
-Such devices are
-called "dynamic" clocks, and are supported since Linux 2.6.39.
-.PP
-Using the appropriate macros, open file
-descriptors may be converted into clock IDs and passed to
-.BR clock_gettime (),
-.BR clock_settime (),
-and
-.BR clock_adjtime (2).
-The following example shows how to convert a file descriptor into a
-dynamic clock ID.
-.PP
-.in +4n
-.EX
-#define CLOCKFD 3
-#define FD_TO_CLOCKID(fd) ((\[ti](clockid_t) (fd) << 3) | CLOCKFD)
-#define CLOCKID_TO_FD(clk) ((unsigned int) \[ti]((clk) >> 3))
-\&
-struct timespec ts;
-clockid_t clkid;
-int fd;
-\&
-fd = open("/dev/ptp0", O_RDWR);
-clkid = FD_TO_CLOCKID(fd);
-clock_gettime(clkid, &ts);
-.EE
-.in
-.SH RETURN VALUE
-.BR clock_gettime (),
-.BR clock_settime (),
-and
-.BR clock_getres ()
-return 0 for success.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-.BR clock_settime ()
-does not have write permission for the dynamic POSIX
-clock device indicated.
-.TP
-.B EFAULT
-.I tp
-points outside the accessible address space.
-.TP
-.B EINVAL
-The
-.I clockid
-specified is invalid for one of two reasons.
-Either the System-V style
-hard coded positive value is out of range, or the dynamic clock ID
-does not refer to a valid instance of a clock object.
-.\" Linux also gives this error on attempts to set CLOCK_PROCESS_CPUTIME_ID
-.\" and CLOCK_THREAD_CPUTIME_ID, when probably the proper error should be
-.\" EPERM.
-.TP
-.B EINVAL
-.RB ( clock_settime ()):
-.I tp.tv_sec
-is negative or
-.I tp.tv_nsec
-is outside the range [0, 999,999,999].
-.TP
-.B EINVAL
-The
-.I clockid
-specified in a call to
-.BR clock_settime ()
-is not a settable clock.
-.TP
-.BR EINVAL " (since Linux 4.3)"
-.\" commit e1d7ba8735551ed79c7a0463a042353574b96da3
-A call to
-.BR clock_settime ()
-with a
-.I clockid
-of
-.B CLOCK_REALTIME
-attempted to set the time to a value less than
-the current value of the
-.B CLOCK_MONOTONIC
-clock.
-.TP
-.B ENODEV
-The hot-pluggable device (like USB for example) represented by a
-dynamic
-.I clk_id
-has disappeared after its character device was opened.
-.TP
-.B ENOTSUP
-The operation is not supported by the dynamic POSIX clock device
-specified.
-.TP
-.B EPERM
-.BR clock_settime ()
-does not have permission to set the clock indicated.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR clock_getres (),
-.BR clock_gettime (),
-.BR clock_settime ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-POSIX.1 specifies the following:
-.RS
-.PP
-Setting the value of the
-.B CLOCK_REALTIME
-clock via
-.BR clock_settime ()
-shall have no effect on threads that are blocked waiting for a relative time
-service based upon this clock, including the
-.BR nanosleep ()
-function; nor on the expiration of relative timers based upon this clock.
-Consequently, these time services shall expire when the requested relative
-interval elapses, independently of the new or old value of the clock.
-.RE
-.PP
-According to POSIX.1-2001, a process with "appropriate privileges" may set the
-.B CLOCK_PROCESS_CPUTIME_ID
-and
-.B CLOCK_THREAD_CPUTIME_ID
-clocks using
-.BR clock_settime ().
-On Linux, these clocks are not settable
-(i.e., no process has "appropriate privileges").
-.\" See http://bugzilla.kernel.org/show_bug.cgi?id=11972
-.SS C library/kernel differences
-On some architectures, an implementation of
-.BR clock_gettime ()
-is provided in the
-.BR vdso (7).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SUSv2.
-Linux 2.6.
-.PP
-On POSIX systems on which these functions are available, the symbol
-.B _POSIX_TIMERS
-is defined in \fI<unistd.h>\fP to a value greater than 0.
-The symbols
-.BR _POSIX_MONOTONIC_CLOCK ,
-.BR _POSIX_CPUTIME ,
-.B _POSIX_THREAD_CPUTIME
-indicate that
-.BR CLOCK_MONOTONIC ,
-.BR CLOCK_PROCESS_CPUTIME_ID ,
-.B CLOCK_THREAD_CPUTIME_ID
-are available.
-(See also
-.BR sysconf (3).)
-POSIX.1-2008 makes these APIs mandatory.
-.\"
-.SS Historical note for SMP systems
-Before Linux added kernel support for
-.B CLOCK_PROCESS_CPUTIME_ID
-and
-.BR CLOCK_THREAD_CPUTIME_ID ,
-glibc implemented these clocks on many platforms using timer
-registers from the CPUs
-(TSC on i386, AR.ITC on Itanium).
-These registers may differ between CPUs and as a consequence
-these clocks may return
-.B bogus results
-if a process is migrated to another CPU.
-.PP
-If the CPUs in an SMP system have different clock sources, then
-there is no way to maintain a correlation between the timer registers since
-each CPU will run at a slightly different frequency.
-If that is the case, then
-.I clock_getcpuclockid(0)
-will return
-.B ENOENT
-to signify this condition.
-The two clocks will then be useful only if it
-can be ensured that a process stays on a certain CPU.
-.PP
-The processors in an SMP system do not start all at exactly the same
-time and therefore the timer registers are typically running at an offset.
-Some architectures include code that attempts to limit these offsets on bootup.
-However, the code cannot guarantee to accurately tune the offsets.
-glibc contains no provisions to deal with these offsets (unlike the Linux
-Kernel).
-Typically these offsets are small and therefore the effects may be
-negligible in most cases.
-.PP
-Since glibc 2.4,
-the wrapper functions for the system calls described in this page avoid
-the abovementioned problems by employing the kernel implementation of
-.B CLOCK_PROCESS_CPUTIME_ID
-and
-.BR CLOCK_THREAD_CPUTIME_ID ,
-on systems that provide such an implementation
-(i.e., Linux 2.6.12 and later).
-.SH EXAMPLES
-The program below demonstrates the use of
-.BR clock_gettime ()
-and
-.BR clock_getres ()
-with various clocks.
-This is an example of what we might see when running the program:
-.PP
-.in +4n
-.EX
-$ \fB./clock_times x\fP
-CLOCK_REALTIME : 1585985459.446 (18356 days + 7h 30m 59s)
- resolution: 0.000000001
-CLOCK_TAI : 1585985496.447 (18356 days + 7h 31m 36s)
- resolution: 0.000000001
-CLOCK_MONOTONIC: 52395.722 (14h 33m 15s)
- resolution: 0.000000001
-CLOCK_BOOTTIME : 72691.019 (20h 11m 31s)
- resolution: 0.000000001
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (clock_getres.c)
-.EX
-/* clock_times.c
-\&
- Licensed under GNU General Public License v2 or later.
-*/
-#define _XOPEN_SOURCE 600
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-\&
-#define SECS_IN_DAY (24 * 60 * 60)
-\&
-static void
-displayClock(clockid_t clock, const char *name, bool showRes)
-{
- long days;
- struct timespec ts;
-\&
- if (clock_gettime(clock, &ts) == \-1) {
- perror("clock_gettime");
- exit(EXIT_FAILURE);
- }
-\&
- printf("%\-15s: %10jd.%03ld (", name,
- (intmax_t) ts.tv_sec, ts.tv_nsec / 1000000);
-\&
- days = ts.tv_sec / SECS_IN_DAY;
- if (days > 0)
- printf("%ld days + ", days);
-\&
- printf("%2dh %2dm %2ds",
- (int) (ts.tv_sec % SECS_IN_DAY) / 3600,
- (int) (ts.tv_sec % 3600) / 60,
- (int) ts.tv_sec % 60);
- printf(")\en");
-\&
- if (clock_getres(clock, &ts) == \-1) {
- perror("clock_getres");
- exit(EXIT_FAILURE);
- }
-\&
- if (showRes)
- printf(" resolution: %10jd.%09ld\en",
- (intmax_t) ts.tv_sec, ts.tv_nsec);
-}
-\&
-int
-main(int argc, char *argv[])
-{
- bool showRes = argc > 1;
-\&
- displayClock(CLOCK_REALTIME, "CLOCK_REALTIME", showRes);
-#ifdef CLOCK_TAI
- displayClock(CLOCK_TAI, "CLOCK_TAI", showRes);
-#endif
- displayClock(CLOCK_MONOTONIC, "CLOCK_MONOTONIC", showRes);
-#ifdef CLOCK_BOOTTIME
- displayClock(CLOCK_BOOTTIME, "CLOCK_BOOTTIME", showRes);
-#endif
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR date (1),
-.BR gettimeofday (2),
-.BR settimeofday (2),
-.BR time (2),
-.BR adjtime (3),
-.BR clock_getcpuclockid (3),
-.BR ctime (3),
-.BR ftime (3),
-.BR pthread_getcpuclockid (3),
-.BR sysconf (3),
-.BR timespec (3),
-.BR time (7),
-.BR time_namespaces (7),
-.BR vdso (7),
-.BR hwclock (8)
diff --git a/man2/clock_gettime.2 b/man2/clock_gettime.2
deleted file mode 100644
index 5a599b4b9..000000000
--- a/man2/clock_gettime.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/clock_getres.2
diff --git a/man2/clock_nanosleep.2 b/man2/clock_nanosleep.2
deleted file mode 100644
index 38abca6de..000000000
--- a/man2/clock_nanosleep.2
+++ /dev/null
@@ -1,253 +0,0 @@
-.\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH clock_nanosleep 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-clock_nanosleep \- high-resolution sleep with specifiable clock
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc ),
-since glibc 2.17
-.PP
-Before glibc 2.17,
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.B #include <time.h>
-.nf
-.PP
-.BI "int clock_nanosleep(clockid_t " clockid ", int " flags ,
-.BI " const struct timespec *" request ,
-.BI " struct timespec *_Nullable " remain );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR clock_nanosleep ():
-.nf
- _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-Like
-.BR nanosleep (2),
-.BR clock_nanosleep ()
-allows the calling thread to sleep for an interval specified
-with nanosecond precision.
-It differs in allowing the caller to select the clock against
-which the sleep interval is to be measured,
-and in allowing the sleep interval to be specified as
-either an absolute or a relative value.
-.PP
-The time values passed to and returned by this call are specified using
-.BR timespec (3)
-structures.
-.PP
-The
-.I clockid
-argument specifies the clock against which the sleep interval
-is to be measured.
-This argument can have one of the following values:
-.\" Look in time/posix-timers.c (kernel 5.6 sources) for the
-.\" 'struct k_clock' structures that have an 'nsleep' method
-.TP
-.B CLOCK_REALTIME
-A settable system-wide real-time clock.
-.TP
-.BR CLOCK_TAI " (since Linux 3.10)"
-A system-wide clock derived from wall-clock time but ignoring leap seconds.
-.TP
-.B CLOCK_MONOTONIC
-A nonsettable, monotonically increasing clock that measures time
-since some unspecified point in the past that does not change after
-system startup.
-.\" On Linux this clock measures time since boot.
-.TP
-.BR CLOCK_BOOTTIME " (since Linux 2.6.39)"
-Identical to
-.BR CLOCK_MONOTONIC ,
-except that it also includes any time that the system is suspended.
-.TP
-.B CLOCK_PROCESS_CPUTIME_ID
-A settable per-process clock that measures CPU time consumed
-by all threads in the process.
-.\" There is some trickery between glibc and the kernel
-.\" to deal with the CLOCK_PROCESS_CPUTIME_ID case.
-.PP
-See
-.BR clock_getres (2)
-for further details on these clocks.
-In addition, the CPU clock IDs returned by
-.BR clock_getcpuclockid (3)
-and
-.BR pthread_getcpuclockid (3)
-can also be passed in
-.IR clockid .
-.\" Sleeping against CLOCK_REALTIME_ALARM and CLOCK_BOOTTIME_ALARM
-.\" is also possible (tested), with CAP_WAKE_ALARM, but I'm not
-.\" sure if this is useful or needs to be documented.
-.PP
-If
-.I flags
-is 0, then the value specified in
-.I request
-is interpreted as an interval relative to the current
-value of the clock specified by
-.IR clockid .
-.PP
-If
-.I flags
-is
-.BR TIMER_ABSTIME ,
-then
-.I request
-is interpreted as an absolute time as measured by the clock,
-.IR clockid .
-If
-.I request
-is less than or equal to the current value of the clock,
-then
-.BR clock_nanosleep ()
-returns immediately without suspending the calling thread.
-.PP
-.BR clock_nanosleep ()
-suspends the execution of the calling thread
-until either at least the time specified by
-.I request
-has elapsed,
-or a signal is delivered that causes a signal handler to be called or
-that terminates the process.
-.PP
-If the call is interrupted by a signal handler,
-.BR clock_nanosleep ()
-fails with the error
-.BR EINTR .
-In addition, if
-.I remain
-is not NULL, and
-.I flags
-was not
-.BR TIMER_ABSTIME ,
-it returns the remaining unslept time in
-.IR remain .
-This value can then be used to call
-.BR clock_nanosleep ()
-again and complete a (relative) sleep.
-.SH RETURN VALUE
-On successfully sleeping for the requested interval,
-.BR clock_nanosleep ()
-returns 0.
-If the call is interrupted by a signal handler or encounters an error,
-then it returns one of the positive error number listed in ERRORS.
-.SH ERRORS
-.TP
-.B EFAULT
-.I request
-or
-.I remain
-specified an invalid address.
-.TP
-.B EINTR
-The sleep was interrupted by a signal handler; see
-.BR signal (7).
-.TP
-.B EINVAL
-The value in the
-.I tv_nsec
-field was not in the range [0, 999999999] or
-.I tv_sec
-was negative.
-.TP
-.B EINVAL
-.I clockid
-was invalid.
-.RB ( CLOCK_THREAD_CPUTIME_ID
-is not a permitted value for
-.IR clockid .)
-.TP
-.B ENOTSUP
-The kernel does not support sleeping against this
-.IR clockid .
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-Linux 2.6,
-glibc 2.1.
-.SH NOTES
-If the interval specified in
-.I request
-is not an exact multiple of the granularity underlying clock (see
-.BR time (7)),
-then the interval will be rounded up to the next multiple.
-Furthermore, after the sleep completes, there may still be a delay before
-the CPU becomes free to once again execute the calling thread.
-.PP
-Using an absolute timer is useful for preventing
-timer drift problems of the type described in
-.BR nanosleep (2).
-(Such problems are exacerbated in programs that try to restart
-a relative sleep that is repeatedly interrupted by signals.)
-To perform a relative sleep that avoids these problems, call
-.BR clock_gettime (2)
-for the desired clock,
-add the desired interval to the returned time value,
-and then call
-.BR clock_nanosleep ()
-with the
-.B TIMER_ABSTIME
-flag.
-.PP
-.BR clock_nanosleep ()
-is never restarted after being interrupted by a signal handler,
-regardless of the use of the
-.BR sigaction (2)
-.B SA_RESTART
-flag.
-.PP
-The
-.I remain
-argument is unused, and unnecessary, when
-.I flags
-is
-.BR TIMER_ABSTIME .
-(An absolute sleep can be restarted using the same
-.I request
-argument.)
-.PP
-POSIX.1 specifies that
-.BR clock_nanosleep ()
-has no effect on signals dispositions or the signal mask.
-.PP
-POSIX.1 specifies that after changing the value of the
-.B CLOCK_REALTIME
-clock via
-.BR clock_settime (2),
-the new clock value shall be used to determine the time
-at which a thread blocked on an absolute
-.BR clock_nanosleep ()
-will wake up;
-if the new clock value falls past the end of the sleep interval, then the
-.BR clock_nanosleep ()
-call will return immediately.
-.PP
-POSIX.1 specifies that
-changing the value of the
-.B CLOCK_REALTIME
-clock via
-.BR clock_settime (2)
-shall have no effect on a thread that is blocked on a relative
-.BR clock_nanosleep ().
-.SH SEE ALSO
-.BR clock_getres (2),
-.BR nanosleep (2),
-.BR restart_syscall (2),
-.BR timer_create (2),
-.BR sleep (3),
-.BR timespec (3),
-.BR usleep (3),
-.BR time (7)
diff --git a/man2/clock_settime.2 b/man2/clock_settime.2
deleted file mode 100644
index 5a599b4b9..000000000
--- a/man2/clock_settime.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/clock_getres.2
diff --git a/man2/clone.2 b/man2/clone.2
deleted file mode 100644
index 4c5b4ac6b..000000000
--- a/man2/clone.2
+++ /dev/null
@@ -1,1944 +0,0 @@
-'\" t
-.\" Copyright (c) 1992 Drew Eckhardt <drew@cs.colorado.edu>, March 28, 1992
-.\" and Copyright (c) Michael Kerrisk, 2001, 2002, 2005, 2013, 2019
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified 24 Jul 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 21 Aug 1994 by Michael Chastain <mec@shell.portal.com>:
-.\" New man page (copied from 'fork.2').
-.\" Modified 10 June 1995 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 25 April 1998 by Xavier Leroy <Xavier.Leroy@inria.fr>
-.\" Modified 26 Jun 2001 by Michael Kerrisk
-.\" Mostly upgraded to Linux 2.4.x
-.\" Added prototype for sys_clone() plus description
-.\" Added CLONE_THREAD with a brief description of thread groups
-.\" Added CLONE_PARENT and revised entire page remove ambiguity
-.\" between "calling process" and "parent process"
-.\" Added CLONE_PTRACE and CLONE_VFORK
-.\" Added EPERM and EINVAL error codes
-.\" Renamed "__clone" to "clone" (which is the prototype in <sched.h>)
-.\" various other minor tidy ups and clarifications.
-.\" Modified 26 Jun 2001 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Updated notes for 2.4.7+ behavior of CLONE_THREAD
-.\" Modified 15 Oct 2002 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added description for CLONE_NEWNS, which was added in Linux 2.4.19
-.\" Slightly rephrased, aeb.
-.\" Modified 1 Feb 2003 - added CLONE_SIGHAND restriction, aeb.
-.\" Modified 1 Jan 2004 - various updates, aeb
-.\" Modified 2004-09-10 - added CLONE_PARENT_SETTID etc. - aeb.
-.\" 2005-04-12, mtk, noted the PID caching behavior of NPTL's getpid()
-.\" wrapper under BUGS.
-.\" 2005-05-10, mtk, added CLONE_SYSVSEM, CLONE_UNTRACED, CLONE_STOPPED.
-.\" 2005-05-17, mtk, Substantially enhanced discussion of CLONE_THREAD.
-.\" 2008-11-18, mtk, order CLONE_* flags alphabetically
-.\" 2008-11-18, mtk, document CLONE_NEWPID
-.\" 2008-11-19, mtk, document CLONE_NEWUTS
-.\" 2008-11-19, mtk, document CLONE_NEWIPC
-.\" 2008-11-19, Jens Axboe, mtk, document CLONE_IO
-.\"
-.TH clone 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-clone, __clone2, clone3 \- create a child process
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-/* Prototype for the glibc wrapper function */
-.PP
-.B #define _GNU_SOURCE
-.B #include <sched.h>
-.PP
-.BI "int clone(int (*" "fn" ")(void *_Nullable), void *" stack \
-", int " flags ,
-.BI " void *_Nullable " "arg" ", ..." \
-" \fR/*\fP" " pid_t *_Nullable " parent_tid ,
-.BI " void *_Nullable " tls ,
-.BI " pid_t *_Nullable " child_tid " \fR*/\fP );"
-.PP
-/* For the prototype of the raw clone() system call, see NOTES */
-.PP
-.BR "#include <linux/sched.h>" " /* Definition of " "struct clone_args" " */"
-.BR "#include <sched.h>" " /* Definition of " CLONE_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "long syscall(SYS_clone3, struct clone_args *" cl_args ", size_t " size );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR clone3 (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-These system calls
-create a new ("child") process, in a manner similar to
-.BR fork (2).
-.PP
-By contrast with
-.BR fork (2),
-these system calls provide more precise control over what pieces of execution
-context are shared between the calling process and the child process.
-For example, using these system calls, the caller can control whether
-or not the two processes share the virtual address space,
-the table of file descriptors, and the table of signal handlers.
-These system calls also allow the new child process to be placed
-in separate
-.BR namespaces (7).
-.PP
-Note that in this manual
-page, "calling process" normally corresponds to "parent process".
-But see the descriptions of
-.B CLONE_PARENT
-and
-.B CLONE_THREAD
-below.
-.PP
-This page describes the following interfaces:
-.IP \[bu] 3
-The glibc
-.BR clone ()
-wrapper function and the underlying system call on which it is based.
-The main text describes the wrapper function;
-the differences for the raw system call
-are described toward the end of this page.
-.IP \[bu]
-The newer
-.BR clone3 ()
-system call.
-.PP
-In the remainder of this page, the terminology "the clone call" is used
-when noting details that apply to all of these interfaces,
-.\"
-.SS The clone() wrapper function
-When the child process is created with the
-.BR clone ()
-wrapper function,
-it commences execution by calling the function pointed to by the argument
-.IR fn .
-(This differs from
-.BR fork (2),
-where execution continues in the child from the point
-of the
-.BR fork (2)
-call.)
-The
-.I arg
-argument is passed as the argument of the function
-.IR fn .
-.PP
-When the
-.IR fn ( arg )
-function returns, the child process terminates.
-The integer returned by
-.I fn
-is the exit status for the child process.
-The child process may also terminate explicitly by calling
-.BR exit (2)
-or after receiving a fatal signal.
-.PP
-The
-.I stack
-argument specifies the location of the stack used by the child process.
-Since the child and calling process may share memory,
-it is not possible for the child process to execute in the
-same stack as the calling process.
-The calling process must therefore
-set up memory space for the child stack and pass a pointer to this
-space to
-.BR clone ().
-Stacks grow downward on all processors that run Linux
-(except the HP PA processors), so
-.I stack
-usually points to the topmost address of the memory space set up for
-the child stack.
-Note that
-.BR clone ()
-does not provide a means whereby the caller can inform the kernel of the
-size of the stack area.
-.PP
-The remaining arguments to
-.BR clone ()
-are discussed below.
-.\"
-.SS clone3()
-The
-.BR clone3 ()
-system call provides a superset of the functionality of the older
-.BR clone ()
-interface.
-It also provides a number of API improvements, including:
-space for additional flags bits;
-cleaner separation in the use of various arguments;
-and the ability to specify the size of the child's stack area.
-.PP
-As with
-.BR fork (2),
-.BR clone3 ()
-returns in both the parent and the child.
-It returns 0 in the child process and returns the PID of the child
-in the parent.
-.PP
-The
-.I cl_args
-argument of
-.BR clone3 ()
-is a structure of the following form:
-.PP
-.in +4n
-.EX
-struct clone_args {
- u64 flags; /* Flags bit mask */
- u64 pidfd; /* Where to store PID file descriptor
- (\fIint *\fP) */
- u64 child_tid; /* Where to store child TID,
- in child\[aq]s memory (\fIpid_t *\fP) */
- u64 parent_tid; /* Where to store child TID,
- in parent\[aq]s memory (\fIpid_t *\fP) */
- u64 exit_signal; /* Signal to deliver to parent on
- child termination */
- u64 stack; /* Pointer to lowest byte of stack */
- u64 stack_size; /* Size of stack */
- u64 tls; /* Location of new TLS */
- u64 set_tid; /* Pointer to a \fIpid_t\fP array
- (since Linux 5.5) */
- u64 set_tid_size; /* Number of elements in \fIset_tid\fP
- (since Linux 5.5) */
- u64 cgroup; /* File descriptor for target cgroup
- of child (since Linux 5.7) */
-};
-.EE
-.in
-.PP
-The
-.I size
-argument that is supplied to
-.BR clone3 ()
-should be initialized to the size of this structure.
-(The existence of the
-.I size
-argument permits future extensions to the
-.I clone_args
-structure.)
-.PP
-The stack for the child process is specified via
-.IR cl_args.stack ,
-which points to the lowest byte of the stack area,
-and
-.IR cl_args.stack_size ,
-which specifies the size of the stack in bytes.
-In the case where the
-.B CLONE_VM
-flag (see below) is specified, a stack must be explicitly allocated
-and specified.
-Otherwise, these two fields can be specified as NULL and 0,
-which causes the child to use the same stack area as the parent
-(in the child's own virtual address space).
-.PP
-The remaining fields in the
-.I cl_args
-argument are discussed below.
-.\"
-.SS Equivalence between clone() and clone3() arguments
-Unlike the older
-.BR clone ()
-interface, where arguments are passed individually, in the newer
-.BR clone3 ()
-interface the arguments are packaged into the
-.I clone_args
-structure shown above.
-This structure allows for a superset of the information passed via the
-.BR clone ()
-arguments.
-.PP
-The following table shows the equivalence between the arguments of
-.BR clone ()
-and the fields in the
-.I clone_args
-argument supplied to
-.BR clone3 ():
-.RS 4
-.TS
-lb lb lb
-l l l
-li li l.
-clone() clone3() Notes
- \fIcl_args\fP field
-flags & \[ti]0xff flags T{
-For most flags; details below
-T}
-parent_tid pidfd See CLONE_PIDFD
-child_tid child_tid See CLONE_CHILD_SETTID
-parent_tid parent_tid See CLONE_PARENT_SETTID
-flags & 0xff exit_signal
-stack stack
-\fP---\fP stack_size
-tls tls See CLONE_SETTLS
-\fP---\fP set_tid See below for details
-\fP---\fP set_tid_size
-\fP---\fP cgroup See CLONE_INTO_CGROUP
-.TE
-.RE
-.\"
-.SS The child termination signal
-When the child process terminates, a signal may be sent to the parent.
-The termination signal is specified in the low byte of
-.I flags
-.RB ( clone ())
-or in
-.I cl_args.exit_signal
-.RB ( clone3 ()).
-If this signal is specified as anything other than
-.BR SIGCHLD ,
-then the parent process must specify the
-.B __WALL
-or
-.B __WCLONE
-options when waiting for the child with
-.BR wait (2).
-If no signal (i.e., zero) is specified, then the parent process is not signaled
-when the child terminates.
-.\"
-.SS The set_tid array
-By default, the kernel chooses the next sequential PID for the new
-process in each of the PID namespaces where it is present.
-When creating a process with
-.BR clone3 (),
-the
-.I set_tid
-array (available since Linux 5.5)
-can be used to select specific PIDs for the process in some
-or all of the PID namespaces where it is present.
-If the PID of the newly created process should be set only for the current
-PID namespace or in the newly created PID namespace (if
-.I flags
-contains
-.BR CLONE_NEWPID )
-then the first element in the
-.I set_tid
-array has to be the desired PID and
-.I set_tid_size
-needs to be 1.
-.PP
-If the PID of the newly created process should have a certain value in
-multiple PID namespaces, then the
-.I set_tid
-array can have multiple entries.
-The first entry defines the PID in the most
-deeply nested PID namespace and each of the following entries contains
-the PID in the
-corresponding ancestor PID namespace.
-The number of PID namespaces in which a PID
-should be set is defined by
-.I set_tid_size
-which cannot be larger than the number of currently nested PID namespaces.
-.PP
-To create a process with the following PIDs in a PID namespace hierarchy:
-.RS 4
-.TS
-lb lb lb
-l l l.
-PID NS level Requested PID Notes
-0 31496 Outermost PID namespace
-1 42
-2 7 Innermost PID namespace
-.TE
-.RE
-.PP
-Set the array to:
-.PP
-.in +4n
-.EX
-set_tid[0] = 7;
-set_tid[1] = 42;
-set_tid[2] = 31496;
-set_tid_size = 3;
-.EE
-.in
-.PP
-If only the PIDs in the two innermost PID namespaces
-need to be specified, set the array to:
-.PP
-.in +4n
-.EX
-set_tid[0] = 7;
-set_tid[1] = 42;
-set_tid_size = 2;
-.EE
-.in
-.PP
-The PID in the PID namespaces outside the two innermost PID namespaces
-is selected the same way as any other PID is selected.
-.PP
-The
-.I set_tid
-feature requires
-.B CAP_SYS_ADMIN
-or
-(since Linux 5.9)
-.\" commit 124ea650d3072b005457faed69909221c2905a1f
-.\" commit 1caef81da05a84a40dbf02110e967ce6d1135ff6
-.B CAP_CHECKPOINT_RESTORE
-in all owning user namespaces of the target PID namespaces.
-.PP
-Callers may only choose a PID greater than 1 in a given PID namespace
-if an
-.B init
-process (i.e., a process with PID 1) already exists in that namespace.
-Otherwise the PID
-entry for this PID namespace must be 1.
-.\"
-.SS The flags mask
-Both
-.BR clone ()
-and
-.BR clone3 ()
-allow a flags bit mask that modifies their behavior
-and allows the caller to specify what is shared between the calling process
-and the child process.
-This bit mask\[em]the
-.I flags
-argument of
-.BR clone ()
-or the
-.I cl_args.flags
-field passed to
-.BR clone3 ()\[em]is
-referred to as the
-.I flags
-mask in the remainder of this page.
-.PP
-The
-.I flags
-mask is specified as a bitwise OR of zero or more of
-the constants listed below.
-Except as noted below, these flags are available
-(and have the same effect) in both
-.BR clone ()
-and
-.BR clone3 ().
-.TP
-.BR CLONE_CHILD_CLEARTID " (since Linux 2.5.49)"
-Clear (zero) the child thread ID at the location pointed to by
-.I child_tid
-.RB ( clone ())
-or
-.I cl_args.child_tid
-.RB ( clone3 ())
-in child memory when the child exits, and do a wakeup on the futex
-at that address.
-The address involved may be changed by the
-.BR set_tid_address (2)
-system call.
-This is used by threading libraries.
-.TP
-.BR CLONE_CHILD_SETTID " (since Linux 2.5.49)"
-Store the child thread ID at the location pointed to by
-.I child_tid
-.RB ( clone ())
-or
-.I cl_args.child_tid
-.RB ( clone3 ())
-in the child's memory.
-The store operation completes before the clone call
-returns control to user space in the child process.
-(Note that the store operation may not have completed before the clone call
-returns in the parent process, which is relevant if the
-.B CLONE_VM
-flag is also employed.)
-.TP
-.BR CLONE_CLEAR_SIGHAND " (since Linux 5.5)"
-.\" commit b612e5df4587c934bd056bf05f4a1deca4de4f75
-By default, signal dispositions in the child thread are the same as
-in the parent.
-If this flag is specified,
-then all signals that are handled in the parent
-are reset to their default dispositions
-.RB ( SIG_DFL )
-in the child.
-.IP
-Specifying this flag together with
-.B CLONE_SIGHAND
-is nonsensical and disallowed.
-.TP
-.BR CLONE_DETACHED " (historical)"
-For a while (during the Linux 2.5 development series)
-.\" added in Linux 2.5.32; removed in Linux 2.6.0-test4
-there was a
-.B CLONE_DETACHED
-flag,
-which caused the parent not to receive a signal when the child terminated.
-Ultimately, the effect of this flag was subsumed under the
-.B CLONE_THREAD
-flag and by the time Linux 2.6.0 was released, this flag had no effect.
-Starting in Linux 2.6.2, the need to give this flag together with
-.B CLONE_THREAD
-disappeared.
-.IP
-This flag is still defined, but it is usually ignored when calling
-.BR clone ().
-However, see the description of
-.B CLONE_PIDFD
-for some exceptions.
-.TP
-.BR CLONE_FILES " (since Linux 2.0)"
-If
-.B CLONE_FILES
-is set, the calling process and the child process share the same file
-descriptor table.
-Any file descriptor created by the calling process or by the child
-process is also valid in the other process.
-Similarly, if one of the processes closes a file descriptor,
-or changes its associated flags (using the
-.BR fcntl (2)
-.B F_SETFD
-operation), the other process is also affected.
-If a process sharing a file descriptor table calls
-.BR execve (2),
-its file descriptor table is duplicated (unshared).
-.IP
-If
-.B CLONE_FILES
-is not set, the child process inherits a copy of all file descriptors
-opened in the calling process at the time of the clone call.
-Subsequent operations that open or close file descriptors,
-or change file descriptor flags,
-performed by either the calling
-process or the child process do not affect the other process.
-Note, however,
-that the duplicated file descriptors in the child refer to the same
-open file descriptions as the corresponding file descriptors
-in the calling process,
-and thus share file offsets and file status flags (see
-.BR open (2)).
-.TP
-.BR CLONE_FS " (since Linux 2.0)"
-If
-.B CLONE_FS
-is set, the caller and the child process share the same filesystem
-information.
-This includes the root of the filesystem, the current
-working directory, and the umask.
-Any call to
-.BR chroot (2),
-.BR chdir (2),
-or
-.BR umask (2)
-performed by the calling process or the child process also affects the
-other process.
-.IP
-If
-.B CLONE_FS
-is not set, the child process works on a copy of the filesystem
-information of the calling process at the time of the clone call.
-Calls to
-.BR chroot (2),
-.BR chdir (2),
-or
-.BR umask (2)
-performed later by one of the processes do not affect the other process.
-.TP
-.BR CLONE_INTO_CGROUP " (since Linux 5.7)"
-.\" commit ef2c41cf38a7559bbf91af42d5b6a4429db8fc68
-By default, a child process is placed in the same version 2
-cgroup as its parent.
-The
-.B CLONE_INTO_CGROUP
-flag allows the child process to be created in a different version 2 cgroup.
-(Note that
-.B CLONE_INTO_CGROUP
-has effect only for version 2 cgroups.)
-.IP
-In order to place the child process in a different cgroup,
-the caller specifies
-.B CLONE_INTO_CGROUP
-in
-.I cl_args.flags
-and passes a file descriptor that refers to a version 2 cgroup in the
-.I cl_args.cgroup
-field.
-(This file descriptor can be obtained by opening a cgroup v2 directory
-using either the
-.B O_RDONLY
-or the
-.B O_PATH
-flag.)
-Note that all of the usual restrictions (described in
-.BR cgroups (7))
-on placing a process into a version 2 cgroup apply.
-.IP
-Among the possible use cases for
-.B CLONE_INTO_CGROUP
-are the following:
-.RS
-.IP \[bu] 3
-Spawning a process into a cgroup different from the parent's cgroup
-makes it possible for a service manager to directly spawn new
-services into dedicated cgroups.
-This eliminates the accounting
-jitter that would be caused if the child process was first created in the
-same cgroup as the parent and then
-moved into the target cgroup.
-Furthermore, spawning the child process directly into a target cgroup
-is significantly cheaper than moving the child process into
-the target cgroup after it has been created.
-.IP \[bu]
-The
-.B CLONE_INTO_CGROUP
-flag also allows the creation of
-frozen child processes by spawning them into a frozen cgroup.
-(See
-.BR cgroups (7)
-for a description of the freezer controller.)
-.IP \[bu]
-For threaded applications (or even thread implementations which
-make use of cgroups to limit individual threads), it is possible to
-establish a fixed cgroup layout before spawning each thread
-directly into its target cgroup.
-.RE
-.TP
-.BR CLONE_IO " (since Linux 2.6.25)"
-If
-.B CLONE_IO
-is set, then the new process shares an I/O context with
-the calling process.
-If this flag is not set, then (as with
-.BR fork (2))
-the new process has its own I/O context.
-.IP
-.\" The following based on text from Jens Axboe
-The I/O context is the I/O scope of the disk scheduler (i.e.,
-what the I/O scheduler uses to model scheduling of a process's I/O).
-If processes share the same I/O context,
-they are treated as one by the I/O scheduler.
-As a consequence, they get to share disk time.
-For some I/O schedulers,
-.\" the anticipatory and CFQ scheduler
-if two processes share an I/O context,
-they will be allowed to interleave their disk access.
-If several threads are doing I/O on behalf of the same process
-.RB ( aio_read (3),
-for instance), they should employ
-.B CLONE_IO
-to get better I/O performance.
-.\" with CFQ and AS.
-.IP
-If the kernel is not configured with the
-.B CONFIG_BLOCK
-option, this flag is a no-op.
-.TP
-.BR CLONE_NEWCGROUP " (since Linux 4.6)"
-Create the process in a new cgroup namespace.
-If this flag is not set, then (as with
-.BR fork (2))
-the process is created in the same cgroup namespaces as the calling process.
-.IP
-For further information on cgroup namespaces, see
-.BR cgroup_namespaces (7).
-.IP
-Only a privileged process
-.RB ( CAP_SYS_ADMIN )
-can employ
-.BR CLONE_NEWCGROUP .
-.\"
-.TP
-.BR CLONE_NEWIPC " (since Linux 2.6.19)"
-If
-.B CLONE_NEWIPC
-is set, then create the process in a new IPC namespace.
-If this flag is not set, then (as with
-.BR fork (2)),
-the process is created in the same IPC namespace as
-the calling process.
-.IP
-For further information on IPC namespaces, see
-.BR ipc_namespaces (7).
-.IP
-Only a privileged process
-.RB ( CAP_SYS_ADMIN )
-can employ
-.BR CLONE_NEWIPC .
-This flag can't be specified in conjunction with
-.BR CLONE_SYSVSEM .
-.TP
-.BR CLONE_NEWNET " (since Linux 2.6.24)"
-(The implementation of this flag was completed only
-by about Linux 2.6.29.)
-.IP
-If
-.B CLONE_NEWNET
-is set, then create the process in a new network namespace.
-If this flag is not set, then (as with
-.BR fork (2))
-the process is created in the same network namespace as
-the calling process.
-.IP
-For further information on network namespaces, see
-.BR network_namespaces (7).
-.IP
-Only a privileged process
-.RB ( CAP_SYS_ADMIN )
-can employ
-.BR CLONE_NEWNET .
-.TP
-.BR CLONE_NEWNS " (since Linux 2.4.19)"
-If
-.B CLONE_NEWNS
-is set, the cloned child is started in a new mount namespace,
-initialized with a copy of the namespace of the parent.
-If
-.B CLONE_NEWNS
-is not set, the child lives in the same mount
-namespace as the parent.
-.IP
-For further information on mount namespaces, see
-.BR namespaces (7)
-and
-.BR mount_namespaces (7).
-.IP
-Only a privileged process
-.RB ( CAP_SYS_ADMIN )
-can employ
-.BR CLONE_NEWNS .
-It is not permitted to specify both
-.B CLONE_NEWNS
-and
-.B CLONE_FS
-.\" See https://lwn.net/Articles/543273/
-in the same clone call.
-.TP
-.BR CLONE_NEWPID " (since Linux 2.6.24)"
-.\" This explanation draws a lot of details from
-.\" http://lwn.net/Articles/259217/
-.\" Authors: Pavel Emelyanov <xemul@openvz.org>
-.\" and Kir Kolyshkin <kir@openvz.org>
-.\"
-.\" The primary kernel commit is 30e49c263e36341b60b735cbef5ca37912549264
-.\" Author: Pavel Emelyanov <xemul@openvz.org>
-If
-.B CLONE_NEWPID
-is set, then create the process in a new PID namespace.
-If this flag is not set, then (as with
-.BR fork (2))
-the process is created in the same PID namespace as
-the calling process.
-.IP
-For further information on PID namespaces, see
-.BR namespaces (7)
-and
-.BR pid_namespaces (7).
-.IP
-Only a privileged process
-.RB ( CAP_SYS_ADMIN )
-can employ
-.BR CLONE_NEWPID .
-This flag can't be specified in conjunction with
-.B CLONE_THREAD
-or
-.BR CLONE_PARENT .
-.TP
-.B CLONE_NEWUSER
-(This flag first became meaningful for
-.BR clone ()
-in Linux 2.6.23,
-the current
-.BR clone ()
-semantics were merged in Linux 3.5,
-and the final pieces to make the user namespaces completely usable were
-merged in Linux 3.8.)
-.IP
-If
-.B CLONE_NEWUSER
-is set, then create the process in a new user namespace.
-If this flag is not set, then (as with
-.BR fork (2))
-the process is created in the same user namespace as the calling process.
-.IP
-For further information on user namespaces, see
-.BR namespaces (7)
-and
-.BR user_namespaces (7).
-.IP
-Before Linux 3.8, use of
-.B CLONE_NEWUSER
-required that the caller have three capabilities:
-.BR CAP_SYS_ADMIN ,
-.BR CAP_SETUID ,
-and
-.BR CAP_SETGID .
-.\" Before Linux 2.6.29, it appears that only CAP_SYS_ADMIN was needed
-Starting with Linux 3.8,
-no privileges are needed to create a user namespace.
-.IP
-This flag can't be specified in conjunction with
-.B CLONE_THREAD
-or
-.BR CLONE_PARENT .
-For security reasons,
-.\" commit e66eded8309ebf679d3d3c1f5820d1f2ca332c71
-.\" https://lwn.net/Articles/543273/
-.\" The fix actually went into Linux 3.9 and into Linux 3.8.3. However, user namespaces
-.\" were, for practical purposes, unusable in earlier Linux 3.8.x because of the
-.\" various filesystems that didn't support userns.
-.B CLONE_NEWUSER
-cannot be specified in conjunction with
-.BR CLONE_FS .
-.TP
-.BR CLONE_NEWUTS " (since Linux 2.6.19)"
-If
-.B CLONE_NEWUTS
-is set, then create the process in a new UTS namespace,
-whose identifiers are initialized by duplicating the identifiers
-from the UTS namespace of the calling process.
-If this flag is not set, then (as with
-.BR fork (2))
-the process is created in the same UTS namespace as
-the calling process.
-.IP
-For further information on UTS namespaces, see
-.BR uts_namespaces (7).
-.IP
-Only a privileged process
-.RB ( CAP_SYS_ADMIN )
-can employ
-.BR CLONE_NEWUTS .
-.TP
-.BR CLONE_PARENT " (since Linux 2.3.12)"
-If
-.B CLONE_PARENT
-is set, then the parent of the new child (as returned by
-.BR getppid (2))
-will be the same as that of the calling process.
-.IP
-If
-.B CLONE_PARENT
-is not set, then (as with
-.BR fork (2))
-the child's parent is the calling process.
-.IP
-Note that it is the parent process, as returned by
-.BR getppid (2),
-which is signaled when the child terminates, so that
-if
-.B CLONE_PARENT
-is set, then the parent of the calling process, rather than the
-calling process itself, is signaled.
-.IP
-The
-.B CLONE_PARENT
-flag can't be used in clone calls by the
-global init process (PID 1 in the initial PID namespace)
-and init processes in other PID namespaces.
-This restriction prevents the creation of multi-rooted process trees
-as well as the creation of unreapable zombies in the initial PID namespace.
-.TP
-.BR CLONE_PARENT_SETTID " (since Linux 2.5.49)"
-Store the child thread ID at the location pointed to by
-.I parent_tid
-.RB ( clone ())
-or
-.I cl_args.parent_tid
-.RB ( clone3 ())
-in the parent's memory.
-(In Linux 2.5.32-2.5.48 there was a flag
-.B CLONE_SETTID
-that did this.)
-The store operation completes before the clone call
-returns control to user space.
-.TP
-.BR CLONE_PID " (Linux 2.0 to Linux 2.5.15)"
-If
-.B CLONE_PID
-is set, the child process is created with the same process ID as
-the calling process.
-This is good for hacking the system, but otherwise
-of not much use.
-From Linux 2.3.21 onward, this flag could be
-specified only by the system boot process (PID 0).
-The flag disappeared completely from the kernel sources in Linux 2.5.16.
-Subsequently, the kernel silently ignored this bit if it was specified in the
-.I flags
-mask.
-Much later, the same bit was recycled for use as the
-.B CLONE_PIDFD
-flag.
-.TP
-.BR CLONE_PIDFD " (since Linux 5.2)"
-.\" commit b3e5838252665ee4cfa76b82bdf1198dca81e5be
-If this flag is specified,
-a PID file descriptor referring to the child process is allocated
-and placed at a specified location in the parent's memory.
-The close-on-exec flag is set on this new file descriptor.
-PID file descriptors can be used for the purposes described in
-.BR pidfd_open (2).
-.RS
-.IP \[bu] 3
-When using
-.BR clone3 (),
-the PID file descriptor is placed at the location pointed to by
-.IR cl_args.pidfd .
-.IP \[bu]
-When using
-.BR clone (),
-the PID file descriptor is placed at the location pointed to by
-.IR parent_tid .
-Since the
-.I parent_tid
-argument is used to return the PID file descriptor,
-.B CLONE_PIDFD
-cannot be used with
-.B CLONE_PARENT_SETTID
-when calling
-.BR clone ().
-.RE
-.IP
-It is currently not possible to use this flag together with
-.B CLONE_THREAD.
-This means that the process identified by the PID file descriptor
-will always be a thread group leader.
-.IP
-If the obsolete
-.B CLONE_DETACHED
-flag is specified alongside
-.B CLONE_PIDFD
-when calling
-.BR clone (),
-an error is returned.
-An error also results if
-.B CLONE_DETACHED
-is specified when calling
-.BR clone3 ().
-This error behavior ensures that the bit corresponding to
-.B CLONE_DETACHED
-can be reused for further PID file descriptor features in the future.
-.TP
-.BR CLONE_PTRACE " (since Linux 2.2)"
-If
-.B CLONE_PTRACE
-is specified, and the calling process is being traced,
-then trace the child also (see
-.BR ptrace (2)).
-.TP
-.BR CLONE_SETTLS " (since Linux 2.5.32)"
-The TLS (Thread Local Storage) descriptor is set to
-.IR tls .
-.IP
-The interpretation of
-.I tls
-and the resulting effect is architecture dependent.
-On x86,
-.I tls
-is interpreted as a
-.I struct user_desc\~*
-(see
-.BR set_thread_area (2)).
-On x86-64 it is the new value to be set for the %fs base register
-(see the
-.B ARCH_SET_FS
-argument to
-.BR arch_prctl (2)).
-On architectures with a dedicated TLS register, it is the new value
-of that register.
-.IP
-Use of this flag requires detailed knowledge and generally it
-should not be used except in libraries implementing threading.
-.TP
-.BR CLONE_SIGHAND " (since Linux 2.0)"
-If
-.B CLONE_SIGHAND
-is set, the calling process and the child process share the same table of
-signal handlers.
-If the calling process or child process calls
-.BR sigaction (2)
-to change the behavior associated with a signal, the behavior is
-changed in the other process as well.
-However, the calling process and child
-processes still have distinct signal masks and sets of pending
-signals.
-So, one of them may block or unblock signals using
-.BR sigprocmask (2)
-without affecting the other process.
-.IP
-If
-.B CLONE_SIGHAND
-is not set, the child process inherits a copy of the signal handlers
-of the calling process at the time of the clone call.
-Calls to
-.BR sigaction (2)
-performed later by one of the processes have no effect on the other
-process.
-.IP
-Since Linux 2.6.0,
-.\" Precisely: Linux 2.6.0-test6
-the
-.I flags
-mask must also include
-.B CLONE_VM
-if
-.B CLONE_SIGHAND
-is specified.
-.TP
-.BR CLONE_STOPPED " (since Linux 2.6.0)"
-.\" Precisely: Linux 2.6.0-test2
-If
-.B CLONE_STOPPED
-is set, then the child is initially stopped (as though it was sent a
-.B SIGSTOP
-signal), and must be resumed by sending it a
-.B SIGCONT
-signal.
-.IP
-This flag was
-.I deprecated
-from Linux 2.6.25 onward,
-and was
-.I removed
-altogether in Linux 2.6.38.
-Since then, the kernel silently ignores it without error.
-.\" glibc 2.8 removed this defn from bits/sched.h
-Starting with Linux 4.6, the same bit was reused for the
-.B CLONE_NEWCGROUP
-flag.
-.TP
-.BR CLONE_SYSVSEM " (since Linux 2.5.10)"
-If
-.B CLONE_SYSVSEM
-is set, then the child and the calling process share
-a single list of System V semaphore adjustment
-.RI ( semadj )
-values (see
-.BR semop (2)).
-In this case, the shared list accumulates
-.I semadj
-values across all processes sharing the list,
-and semaphore adjustments are performed only when the last process
-that is sharing the list terminates (or ceases sharing the list using
-.BR unshare (2)).
-If this flag is not set, then the child has a separate
-.I semadj
-list that is initially empty.
-.TP
-.BR CLONE_THREAD " (since Linux 2.4.0)"
-.\" Precisely: Linux 2.6.0-test8
-If
-.B CLONE_THREAD
-is set, the child is placed in the same thread group as the calling process.
-To make the remainder of the discussion of
-.B CLONE_THREAD
-more readable, the term "thread" is used to refer to the
-processes within a thread group.
-.IP
-Thread groups were a feature added in Linux 2.4 to support the
-POSIX threads notion of a set of threads that share a single PID.
-Internally, this shared PID is the so-called
-thread group identifier (TGID) for the thread group.
-Since Linux 2.4, calls to
-.BR getpid (2)
-return the TGID of the caller.
-.IP
-The threads within a group can be distinguished by their (system-wide)
-unique thread IDs (TID).
-A new thread's TID is available as the function result
-returned to the caller,
-and a thread can obtain
-its own TID using
-.BR gettid (2).
-.IP
-When a clone call is made without specifying
-.BR CLONE_THREAD ,
-then the resulting thread is placed in a new thread group
-whose TGID is the same as the thread's TID.
-This thread is the
-.I leader
-of the new thread group.
-.IP
-A new thread created with
-.B CLONE_THREAD
-has the same parent process as the process that made the clone call
-(i.e., like
-.BR CLONE_PARENT ),
-so that calls to
-.BR getppid (2)
-return the same value for all of the threads in a thread group.
-When a
-.B CLONE_THREAD
-thread terminates, the thread that created it is not sent a
-.B SIGCHLD
-(or other termination) signal;
-nor can the status of such a thread be obtained
-using
-.BR wait (2).
-(The thread is said to be
-.IR detached .)
-.IP
-After all of the threads in a thread group terminate
-the parent process of the thread group is sent a
-.B SIGCHLD
-(or other termination) signal.
-.IP
-If any of the threads in a thread group performs an
-.BR execve (2),
-then all threads other than the thread group leader are terminated,
-and the new program is executed in the thread group leader.
-.IP
-If one of the threads in a thread group creates a child using
-.BR fork (2),
-then any thread in the group can
-.BR wait (2)
-for that child.
-.IP
-Since Linux 2.5.35, the
-.I flags
-mask must also include
-.B CLONE_SIGHAND
-if
-.B CLONE_THREAD
-is specified
-(and note that, since Linux 2.6.0,
-.\" Precisely: Linux 2.6.0-test6
-.B CLONE_SIGHAND
-also requires
-.B CLONE_VM
-to be included).
-.IP
-Signal dispositions and actions are process-wide:
-if an unhandled signal is delivered to a thread, then
-it will affect (terminate, stop, continue, be ignored in)
-all members of the thread group.
-.IP
-Each thread has its own signal mask, as set by
-.BR sigprocmask (2).
-.IP
-A signal may be process-directed or thread-directed.
-A process-directed signal is targeted at a thread group (i.e., a TGID),
-and is delivered to an arbitrarily selected thread from among those
-that are not blocking the signal.
-A signal may be process-directed because it was generated by the kernel
-for reasons other than a hardware exception, or because it was sent using
-.BR kill (2)
-or
-.BR sigqueue (3).
-A thread-directed signal is targeted at (i.e., delivered to)
-a specific thread.
-A signal may be thread directed because it was sent using
-.BR tgkill (2)
-or
-.BR pthread_sigqueue (3),
-or because the thread executed a machine language instruction that triggered
-a hardware exception
-(e.g., invalid memory access triggering
-.B SIGSEGV
-or a floating-point exception triggering
-.BR SIGFPE ).
-.IP
-A call to
-.BR sigpending (2)
-returns a signal set that is the union of the pending process-directed
-signals and the signals that are pending for the calling thread.
-.IP
-If a process-directed signal is delivered to a thread group,
-and the thread group has installed a handler for the signal, then
-the handler is invoked in exactly one, arbitrarily selected
-member of the thread group that has not blocked the signal.
-If multiple threads in a group are waiting to accept the same signal using
-.BR sigwaitinfo (2),
-the kernel will arbitrarily select one of these threads
-to receive the signal.
-.TP
-.BR CLONE_UNTRACED " (since Linux 2.5.46)"
-If
-.B CLONE_UNTRACED
-is specified, then a tracing process cannot force
-.B CLONE_PTRACE
-on this child process.
-.TP
-.BR CLONE_VFORK " (since Linux 2.2)"
-If
-.B CLONE_VFORK
-is set, the execution of the calling process is suspended
-until the child releases its virtual memory
-resources via a call to
-.BR execve (2)
-or
-.BR _exit (2)
-(as with
-.BR vfork (2)).
-.IP
-If
-.B CLONE_VFORK
-is not set, then both the calling process and the child are schedulable
-after the call, and an application should not rely on execution occurring
-in any particular order.
-.TP
-.BR CLONE_VM " (since Linux 2.0)"
-If
-.B CLONE_VM
-is set, the calling process and the child process run in the same memory
-space.
-In particular, memory writes performed by the calling process
-or by the child process are also visible in the other process.
-Moreover, any memory mapping or unmapping performed with
-.BR mmap (2)
-or
-.BR munmap (2)
-by the child or calling process also affects the other process.
-.IP
-If
-.B CLONE_VM
-is not set, the child process runs in a separate copy of the memory
-space of the calling process at the time of the clone call.
-Memory writes or file mappings/unmappings performed by one of the
-processes do not affect the other, as with
-.BR fork (2).
-.IP
-If the
-.B CLONE_VM
-flag is specified and the
-.B CLONE_VFORK
-flag is not specified,
-then any alternate signal stack that was established by
-.BR sigaltstack (2)
-is cleared in the child process.
-.SH RETURN VALUE
-.\" gettid(2) returns current->pid;
-.\" getpid(2) returns current->tgid;
-On success, the thread ID of the child process is returned
-in the caller's thread of execution.
-On failure, \-1 is returned
-in the caller's context, no child process is created, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.BR EACCES " (" clone3 "() only)"
-.B CLONE_INTO_CGROUP
-was specified in
-.IR cl_args.flags ,
-but the restrictions (described in
-.BR cgroups (7))
-on placing the child process into the version 2 cgroup referred to by
-.I cl_args.cgroup
-are not met.
-.TP
-.B EAGAIN
-Too many processes are already running; see
-.BR fork (2).
-.TP
-.BR EBUSY " (" clone3 "() only)"
-.B CLONE_INTO_CGROUP
-was specified in
-.IR cl_args.flags ,
-but the file descriptor specified in
-.I cl_args.cgroup
-refers to a version 2 cgroup in which a domain controller is enabled.
-.TP
-.BR EEXIST " (" clone3 "() only)"
-One (or more) of the PIDs specified in
-.I set_tid
-already exists in the corresponding PID namespace.
-.TP
-.B EINVAL
-Both
-.B CLONE_SIGHAND
-and
-.B CLONE_CLEAR_SIGHAND
-were specified in the
-.I flags
-mask.
-.TP
-.B EINVAL
-.B CLONE_SIGHAND
-was specified in the
-.I flags
-mask, but
-.B CLONE_VM
-was not.
-(Since Linux 2.6.0.)
-.\" Precisely: Linux 2.6.0-test6
-.TP
-.B EINVAL
-.B CLONE_THREAD
-was specified in the
-.I flags
-mask, but
-.B CLONE_SIGHAND
-was not.
-(Since Linux 2.5.35.)
-.\" .TP
-.\" .B EINVAL
-.\" Precisely one of
-.\" .B CLONE_DETACHED
-.\" and
-.\" .B CLONE_THREAD
-.\" was specified.
-.\" (Since Linux 2.6.0-test6.)
-.TP
-.B EINVAL
-.B CLONE_THREAD
-was specified in the
-.I flags
-mask, but the current process previously called
-.BR unshare (2)
-with the
-.B CLONE_NEWPID
-flag or used
-.BR setns (2)
-to reassociate itself with a PID namespace.
-.TP
-.B EINVAL
-.\" commit e66eded8309ebf679d3d3c1f5820d1f2ca332c71
-Both
-.B CLONE_FS
-and
-.B CLONE_NEWNS
-were specified in the
-.I flags
-mask.
-.TP
-.BR EINVAL " (since Linux 3.9)"
-Both
-.B CLONE_NEWUSER
-and
-.B CLONE_FS
-were specified in the
-.I flags
-mask.
-.TP
-.B EINVAL
-Both
-.B CLONE_NEWIPC
-and
-.B CLONE_SYSVSEM
-were specified in the
-.I flags
-mask.
-.TP
-.B EINVAL
-One (or both) of
-.B CLONE_NEWPID
-or
-.B CLONE_NEWUSER
-and one (or both) of
-.B CLONE_THREAD
-or
-.B CLONE_PARENT
-were specified in the
-.I flags
-mask.
-.TP
-.BR EINVAL " (since Linux 2.6.32)"
-.\" commit 123be07b0b399670a7cc3d82fef0cb4f93ef885c
-.B CLONE_PARENT
-was specified, and the caller is an init process.
-.TP
-.B EINVAL
-Returned by the glibc
-.BR clone ()
-wrapper function when
-.I fn
-or
-.I stack
-is specified as NULL.
-.TP
-.B EINVAL
-.B CLONE_NEWIPC
-was specified in the
-.I flags
-mask,
-but the kernel was not configured with the
-.B CONFIG_SYSVIPC
-and
-.B CONFIG_IPC_NS
-options.
-.TP
-.B EINVAL
-.B CLONE_NEWNET
-was specified in the
-.I flags
-mask,
-but the kernel was not configured with the
-.B CONFIG_NET_NS
-option.
-.TP
-.B EINVAL
-.B CLONE_NEWPID
-was specified in the
-.I flags
-mask,
-but the kernel was not configured with the
-.B CONFIG_PID_NS
-option.
-.TP
-.B EINVAL
-.B CLONE_NEWUSER
-was specified in the
-.I flags
-mask,
-but the kernel was not configured with the
-.B CONFIG_USER_NS
-option.
-.TP
-.B EINVAL
-.B CLONE_NEWUTS
-was specified in the
-.I flags
-mask,
-but the kernel was not configured with the
-.B CONFIG_UTS_NS
-option.
-.TP
-.B EINVAL
-.I stack
-is not aligned to a suitable boundary for this architecture.
-For example, on aarch64,
-.I stack
-must be a multiple of 16.
-.TP
-.BR EINVAL " (" clone3 "() only)"
-.B CLONE_DETACHED
-was specified in the
-.I flags
-mask.
-.TP
-.BR EINVAL " (" clone "() only)"
-.B CLONE_PIDFD
-was specified together with
-.B CLONE_DETACHED
-in the
-.I flags
-mask.
-.TP
-.B EINVAL
-.B CLONE_PIDFD
-was specified together with
-.B CLONE_THREAD
-in the
-.I flags
-mask.
-.TP
-.BR "EINVAL " "(" clone "() only)"
-.B CLONE_PIDFD
-was specified together with
-.B CLONE_PARENT_SETTID
-in the
-.I flags
-mask.
-.TP
-.BR EINVAL " (" clone3 "() only)"
-.I set_tid_size
-is greater than the number of nested PID namespaces.
-.TP
-.BR EINVAL " (" clone3 "() only)"
-One of the PIDs specified in
-.I set_tid
-was an invalid.
-.TP
-.BR EINVAL " (" clone3 "() only)"
-.\" commit 7f192e3cd316ba58c88dfa26796cf77789dd9872
-.B CLONE_THREAD
-or
-.B CLONE_PARENT
-was specified in the
-.I flags
-mask, but a signal was specified in
-.I exit_signal.
-.TP
-.BR EINVAL " (AArch64 only, Linux 4.6 and earlier)"
-.I stack
-was not aligned to a 128-bit boundary.
-.TP
-.B ENOMEM
-Cannot allocate sufficient memory to allocate a task structure for the
-child, or to copy those parts of the caller's context that need to be
-copied.
-.TP
-.BR ENOSPC " (since Linux 3.7)"
-.\" commit f2302505775fd13ba93f034206f1e2a587017929
-.B CLONE_NEWPID
-was specified in the
-.I flags
-mask,
-but the limit on the nesting depth of PID namespaces
-would have been exceeded; see
-.BR pid_namespaces (7).
-.TP
-.BR ENOSPC " (since Linux 4.9; beforehand " EUSERS )
-.B CLONE_NEWUSER
-was specified in the
-.I flags
-mask, and the call would cause the limit on the number of
-nested user namespaces to be exceeded.
-See
-.BR user_namespaces (7).
-.IP
-From Linux 3.11 to Linux 4.8, the error diagnosed in this case was
-.BR EUSERS .
-.TP
-.BR ENOSPC " (since Linux 4.9)"
-One of the values in the
-.I flags
-mask specified the creation of a new user namespace,
-but doing so would have caused the limit defined by the corresponding file in
-.I /proc/sys/user
-to be exceeded.
-For further details, see
-.BR namespaces (7).
-.TP
-.BR EOPNOTSUPP " (" clone3 "() only)"
-.B CLONE_INTO_CGROUP
-was specified in
-.IR cl_args.flags ,
-but the file descriptor specified in
-.I cl_args.cgroup
-refers to a version 2 cgroup that is in the
-.I domain invalid
-state.
-.TP
-.B EPERM
-.BR CLONE_NEWCGROUP ,
-.BR CLONE_NEWIPC ,
-.BR CLONE_NEWNET ,
-.BR CLONE_NEWNS ,
-.BR CLONE_NEWPID ,
-or
-.B CLONE_NEWUTS
-was specified by an unprivileged process (process without \fBCAP_SYS_ADMIN\fP).
-.TP
-.B EPERM
-.B CLONE_PID
-was specified by a process other than process 0.
-(This error occurs only on Linux 2.5.15 and earlier.)
-.TP
-.B EPERM
-.B CLONE_NEWUSER
-was specified in the
-.I flags
-mask,
-but either the effective user ID or the effective group ID of the caller
-does not have a mapping in the parent namespace (see
-.BR user_namespaces (7)).
-.TP
-.BR EPERM " (since Linux 3.9)"
-.\" commit 3151527ee007b73a0ebd296010f1c0454a919c7d
-.B CLONE_NEWUSER
-was specified in the
-.I flags
-mask and the caller is in a chroot environment
-.\" FIXME What is the rationale for this restriction?
-(i.e., the caller's root directory does not match the root directory
-of the mount namespace in which it resides).
-.TP
-.BR EPERM " (" clone3 "() only)"
-.I set_tid_size
-was greater than zero, and the caller lacks the
-.B CAP_SYS_ADMIN
-capability in one or more of the user namespaces that own the
-corresponding PID namespaces.
-.TP
-.BR ERESTARTNOINTR " (since Linux 2.6.17)"
-.\" commit 4a2c7a7837da1b91468e50426066d988050e4d56
-System call was interrupted by a signal and will be restarted.
-(This can be seen only during a trace.)
-.TP
-.BR EUSERS " (Linux 3.11 to Linux 4.8)"
-.B CLONE_NEWUSER
-was specified in the
-.I flags
-mask,
-and the limit on the number of nested user namespaces would be exceeded.
-See the discussion of the
-.B ENOSPC
-error above.
-.SH VERSIONS
-The glibc
-.BR clone ()
-wrapper function makes some changes
-in the memory pointed to by
-.I stack
-(changes required to set the stack up correctly for the child)
-.I before
-invoking the
-.BR clone ()
-system call.
-So, in cases where
-.BR clone ()
-is used to recursively create children,
-do not use the buffer employed for the parent's stack
-as the stack of the child.
-.PP
-On i386,
-.BR clone ()
-should not be called through vsyscall, but directly through
-.IR "int $0x80" .
-.SS C library/kernel differences
-The raw
-.BR clone ()
-system call corresponds more closely to
-.BR fork (2)
-in that execution in the child continues from the point of the
-call.
-As such, the
-.I fn
-and
-.I arg
-arguments of the
-.BR clone ()
-wrapper function are omitted.
-.PP
-In contrast to the glibc wrapper, the raw
-.BR clone ()
-system call accepts NULL as a
-.I stack
-argument (and
-.BR clone3 ()
-likewise allows
-.I cl_args.stack
-to be NULL).
-In this case, the child uses a duplicate of the parent's stack.
-(Copy-on-write semantics ensure that the child gets separate copies
-of stack pages when either process modifies the stack.)
-In this case, for correct operation, the
-.B CLONE_VM
-option should not be specified.
-(If the child
-.I shares
-the parent's memory because of the use of the
-.B CLONE_VM
-flag,
-then no copy-on-write duplication occurs and chaos is likely to result.)
-.PP
-The order of the arguments also differs in the raw system call,
-and there are variations in the arguments across architectures,
-as detailed in the following paragraphs.
-.PP
-The raw system call interface on x86-64 and some other architectures
-(including sh, tile, and alpha) is:
-.PP
-.in +4n
-.EX
-.BI "long clone(unsigned long " flags ", void *" stack ,
-.BI " int *" parent_tid ", int *" child_tid ,
-.BI " unsigned long " tls );
-.EE
-.in
-.PP
-On x86-32, and several other common architectures
-(including score, ARM, ARM 64, PA-RISC, arc, Power PC, xtensa,
-and MIPS),
-.\" CONFIG_CLONE_BACKWARDS
-the order of the last two arguments is reversed:
-.PP
-.in +4n
-.EX
-.BI "long clone(unsigned long " flags ", void *" stack ,
-.BI " int *" parent_tid ", unsigned long " tls ,
-.BI " int *" child_tid );
-.EE
-.in
-.PP
-On the cris and s390 architectures,
-.\" CONFIG_CLONE_BACKWARDS2
-the order of the first two arguments is reversed:
-.PP
-.in +4n
-.EX
-.BI "long clone(void *" stack ", unsigned long " flags ,
-.BI " int *" parent_tid ", int *" child_tid ,
-.BI " unsigned long " tls );
-.EE
-.in
-.PP
-On the microblaze architecture,
-.\" CONFIG_CLONE_BACKWARDS3
-an additional argument is supplied:
-.PP
-.in +4n
-.EX
-.BI "long clone(unsigned long " flags ", void *" stack ,
-.BI " int " stack_size , "\fR /* Size of stack */"
-.BI " int *" parent_tid ", int *" child_tid ,
-.BI " unsigned long " tls );
-.EE
-.in
-.\"
-.SS blackfin, m68k, and sparc
-.\" Mike Frysinger noted in a 2013 mail:
-.\" these arches don't define __ARCH_WANT_SYS_CLONE:
-.\" blackfin ia64 m68k sparc
-The argument-passing conventions on
-blackfin, m68k, and sparc are different from the descriptions above.
-For details, see the kernel (and glibc) source.
-.SS ia64
-On ia64, a different interface is used:
-.PP
-.in +4n
-.EX
-.BI "int __clone2(int (*" "fn" ")(void *),"
-.BI " void *" stack_base ", size_t " stack_size ,
-.BI " int " flags ", void *" "arg" ", ..."
-.BI " /* pid_t *" parent_tid ", struct user_desc *" tls ,
-.BI " pid_t *" child_tid " */ );"
-.EE
-.in
-.PP
-The prototype shown above is for the glibc wrapper function;
-for the system call itself,
-the prototype can be described as follows (it is identical to the
-.BR clone ()
-prototype on microblaze):
-.PP
-.in +4n
-.EX
-.BI "long clone2(unsigned long " flags ", void *" stack_base ,
-.BI " int " stack_size , "\fR /* Size of stack */"
-.BI " int *" parent_tid ", int *" child_tid ,
-.BI " unsigned long " tls );
-.EE
-.in
-.PP
-.BR __clone2 ()
-operates in the same way as
-.BR clone (),
-except that
-.I stack_base
-points to the lowest address of the child's stack area,
-and
-.I stack_size
-specifies the size of the stack pointed to by
-.IR stack_base .
-.SH STANDARDS
-Linux.
-.SH HISTORY
-.TP
-.BR clone3 ()
-Linux 5.3.
-.\" There is no entry for
-.\" .BR clone ()
-.\" in libc5.
-.\" glibc2 provides
-.\" .BR clone ()
-.\" as described in this manual page.
-.SS Linux 2.4 and earlier
-In the Linux 2.4.x series,
-.B CLONE_THREAD
-generally does not make the parent of the new thread the same
-as the parent of the calling process.
-However, from Linux 2.4.7 to Linux 2.4.18 the
-.B CLONE_THREAD
-flag implied the
-.B CLONE_PARENT
-flag (as in Linux 2.6.0 and later).
-.PP
-In Linux 2.4 and earlier,
-.BR clone ()
-does not take arguments
-.IR parent_tid ,
-.IR tls ,
-and
-.IR child_tid .
-.SH NOTES
-One use of these systems calls
-is to implement threads: multiple flows of control in a program that
-run concurrently in a shared address space.
-.PP
-The
-.BR kcmp (2)
-system call can be used to test whether two processes share various
-resources such as a file descriptor table,
-System V semaphore undo operations, or a virtual address space.
-.PP
-Handlers registered using
-.BR pthread_atfork (3)
-are not executed during a clone call.
-.SH BUGS
-GNU C library versions 2.3.4 up to and including 2.24
-contained a wrapper function for
-.BR getpid (2)
-that performed caching of PIDs.
-This caching relied on support in the glibc wrapper for
-.BR clone (),
-but limitations in the implementation
-meant that the cache was not up to date in some circumstances.
-In particular,
-if a signal was delivered to the child immediately after the
-.BR clone ()
-call, then a call to
-.BR getpid (2)
-in a handler for the signal could return the PID
-of the calling process ("the parent"),
-if the clone wrapper had not yet had a chance to update the PID
-cache in the child.
-(This discussion ignores the case where the child was created using
-.BR CLONE_THREAD ,
-when
-.BR getpid (2)
-.I should
-return the same value in the child and in the process that called
-.BR clone (),
-since the caller and the child are in the same thread group.
-The stale-cache problem also does not occur if the
-.I flags
-argument includes
-.BR CLONE_VM .)
-To get the truth, it was sometimes necessary to use code such as the following:
-.PP
-.in +4n
-.EX
-#include <syscall.h>
-\&
-pid_t mypid;
-\&
-mypid = syscall(SYS_getpid);
-.EE
-.in
-.\" See also the following bug reports
-.\" https://bugzilla.redhat.com/show_bug.cgi?id=417521
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=6910
-.PP
-Because of the stale-cache problem, as well as other problems noted in
-.BR getpid (2),
-the PID caching feature was removed in glibc 2.25.
-.SH EXAMPLES
-The following program demonstrates the use of
-.BR clone ()
-to create a child process that executes in a separate UTS namespace.
-The child changes the hostname in its UTS namespace.
-Both parent and child then display the system hostname,
-making it possible to see that the hostname
-differs in the UTS namespaces of the parent and child.
-For an example of the use of this program, see
-.BR setns (2).
-.PP
-Within the sample program, we allocate the memory that is to
-be used for the child's stack using
-.BR mmap (2)
-rather than
-.BR malloc (3)
-for the following reasons:
-.IP \[bu] 3
-.BR mmap (2)
-allocates a block of memory that starts on a page
-boundary and is a multiple of the page size.
-This is useful if we want to establish a guard page (a page with protection
-.BR PROT_NONE )
-at the end of the stack using
-.BR mprotect (2).
-.IP \[bu]
-We can specify the
-.B MAP_STACK
-flag to request a mapping that is suitable for a stack.
-For the moment, this flag is a no-op on Linux,
-but it exists and has effect on some other systems,
-so we should include it for portability.
-.SS Program source
-.\" SRC BEGIN (clone.c)
-.EX
-#define _GNU_SOURCE
-#include <err.h>
-#include <sched.h>
-#include <signal.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/mman.h>
-#include <sys/utsname.h>
-#include <sys/wait.h>
-#include <unistd.h>
-\&
-static int /* Start function for cloned child */
-childFunc(void *arg)
-{
- struct utsname uts;
-\&
- /* Change hostname in UTS namespace of child. */
-\&
- if (sethostname(arg, strlen(arg)) == \-1)
- err(EXIT_FAILURE, "sethostname");
-\&
- /* Retrieve and display hostname. */
-\&
- if (uname(&uts) == \-1)
- err(EXIT_FAILURE, "uname");
- printf("uts.nodename in child: %s\en", uts.nodename);
-\&
- /* Keep the namespace open for a while, by sleeping.
- This allows some experimentation\-\-for example, another
- process might join the namespace. */
-\&
- sleep(200);
-\&
- return 0; /* Child terminates now */
-}
-\&
-#define STACK_SIZE (1024 * 1024) /* Stack size for cloned child */
-\&
-int
-main(int argc, char *argv[])
-{
- char *stack; /* Start of stack buffer */
- char *stackTop; /* End of stack buffer */
- pid_t pid;
- struct utsname uts;
-\&
- if (argc < 2) {
- fprintf(stderr, "Usage: %s <child\-hostname>\en", argv[0]);
- exit(EXIT_SUCCESS);
- }
-\&
- /* Allocate memory to be used for the stack of the child. */
-\&
- stack = mmap(NULL, STACK_SIZE, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, \-1, 0);
- if (stack == MAP_FAILED)
- err(EXIT_FAILURE, "mmap");
-\&
- stackTop = stack + STACK_SIZE; /* Assume stack grows downward */
-\&
- /* Create child that has its own UTS namespace;
- child commences execution in childFunc(). */
-\&
- pid = clone(childFunc, stackTop, CLONE_NEWUTS | SIGCHLD, argv[1]);
- if (pid == \-1)
- err(EXIT_FAILURE, "clone");
- printf("clone() returned %jd\en", (intmax_t) pid);
-\&
- /* Parent falls through to here */
-\&
- sleep(1); /* Give child time to change its hostname */
-\&
- /* Display hostname in parent\[aq]s UTS namespace. This will be
- different from hostname in child\[aq]s UTS namespace. */
-\&
- if (uname(&uts) == \-1)
- err(EXIT_FAILURE, "uname");
- printf("uts.nodename in parent: %s\en", uts.nodename);
-\&
- if (waitpid(pid, NULL, 0) == \-1) /* Wait for child */
- err(EXIT_FAILURE, "waitpid");
- printf("child has terminated\en");
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR fork (2),
-.BR futex (2),
-.BR getpid (2),
-.BR gettid (2),
-.BR kcmp (2),
-.BR mmap (2),
-.BR pidfd_open (2),
-.BR set_thread_area (2),
-.BR set_tid_address (2),
-.BR setns (2),
-.BR tkill (2),
-.BR unshare (2),
-.BR wait (2),
-.BR capabilities (7),
-.BR namespaces (7),
-.BR pthreads (7)
diff --git a/man2/clone2.2 b/man2/clone2.2
deleted file mode 100644
index 68f41a5ba..000000000
--- a/man2/clone2.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/clone.2
diff --git a/man2/clone3.2 b/man2/clone3.2
deleted file mode 100644
index 68f41a5ba..000000000
--- a/man2/clone3.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/clone.2
diff --git a/man2/close.2 b/man2/close.2
deleted file mode 100644
index 68211bc58..000000000
--- a/man2/close.2
+++ /dev/null
@@ -1,266 +0,0 @@
-.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\" and Copyright (C) 1993 Michael Haardt, Ian Jackson.
-.\" and Copyright (C) 2016 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Wed Jul 21 22:40:25 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Sat Feb 18 15:27:48 1995 by Michael Haardt
-.\" Modified Sun Apr 14 11:40:50 1996 by Andries Brouwer <aeb@cwi.nl>:
-.\" corrected description of effect on locks (thanks to
-.\" Tigran Aivazian <tigran@sco.com>).
-.\" Modified Fri Jan 31 16:21:46 1997 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2000-07-22 by Nicolás Lichtmaier <nick@debian.org>
-.\" added note about close(2) not guaranteeing that data is safe on close.
-.\"
-.TH close 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-close \- close a file descriptor
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int close(int " fd );
-.fi
-.SH DESCRIPTION
-.BR close ()
-closes a file descriptor, so that it no longer refers to any file and
-may be reused.
-Any record locks (see
-.BR fcntl (2))
-held on the file it was associated with,
-and owned by the process, are removed (regardless of the file
-descriptor that was used to obtain the lock).
-.PP
-If
-.I fd
-is the last file descriptor referring to the underlying
-open file description (see
-.BR open (2)),
-the resources associated with the open file description are freed;
-if the file descriptor was the last reference to a file which has been
-removed using
-.BR unlink (2),
-the file is deleted.
-.SH RETURN VALUE
-.BR close ()
-returns zero on success.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I fd
-isn't a valid open file descriptor.
-.TP
-.B EINTR
-.\" Though, it's in doubt whether this error can ever occur; see
-.\" https://lwn.net/Articles/576478/ "Returning EINTR from close()"
-The
-.BR close ()
-call was interrupted by a signal; see
-.BR signal (7).
-.TP
-.B EIO
-An I/O error occurred.
-.TP
-.BR ENOSPC ", " EDQUOT
-On NFS, these errors are not normally reported against the first write
-which exceeds the available storage space, but instead against a
-subsequent
-.BR write (2),
-.BR fsync (2),
-or
-.BR close ().
-.PP
-See NOTES for a discussion of why
-.BR close ()
-should not be retried after an error.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.\" SVr4 documents an additional ENOLINK error condition.
-.SH NOTES
-A successful close does not guarantee that the data has been successfully
-saved to disk, as the kernel uses the buffer cache to defer writes.
-Typically, filesystems do not flush buffers when a file is closed.
-If you need to be sure that
-the data is physically stored on the underlying disk, use
-.BR fsync (2).
-(It will depend on the disk hardware at this point.)
-.PP
-The close-on-exec file descriptor flag can be used to ensure
-that a file descriptor is automatically closed upon a successful
-.BR execve (2);
-see
-.BR fcntl (2)
-for details.
-.\"
-.SS Multithreaded processes and close()
-It is probably unwise to close file descriptors while
-they may be in use by system calls in
-other threads in the same process.
-Since a file descriptor may be reused,
-there are some obscure race conditions
-that may cause unintended side effects.
-.\" Date: Tue, 4 Sep 2007 13:57:35 +0200
-.\" From: Fredrik Noring <noring@nocrew.org>
-.\" One such race involves signals and ERESTARTSYS. If a file descriptor
-.\" in use by a system call is closed and then reused by e.g. an
-.\" independent open() in some unrelated thread, before the original system
-.\" call has restarted after ERESTARTSYS, the original system call will
-.\" later restart with the reused file descriptor. This is most likely a
-.\" serious programming error.
-.PP
-Furthermore, consider the following scenario where two threads are
-performing operations on the same file descriptor:
-.IP (1) 5
-One thread is blocked in an I/O system call on the file descriptor.
-For example, it is trying to
-.BR write (2)
-to a pipe that is already full, or trying to
-.BR read (2)
-from a stream socket which currently has no available data.
-.IP (2)
-Another thread closes the file descriptor.
-.PP
-The behavior in this situation varies across systems.
-On some systems, when the file descriptor is closed,
-the blocking system call returns immediately with an error.
-.PP
-On Linux (and possibly some other systems), the behavior is different:
-the blocking I/O system call holds a reference to the underlying
-open file description, and this reference keeps the description open
-until the I/O system call completes.
-.\" 'struct file' in kernel-speak
-(See
-.BR open (2)
-for a discussion of open file descriptions.)
-Thus, the blocking system call in the first thread may successfully
-complete after the
-.BR close ()
-in the second thread.
-.\"
-.SS Dealing with error returns from close()
-A careful programmer will check the return value of
-.BR close (),
-since it is quite possible that errors on a previous
-.BR write (2)
-operation are reported only on the final
-.BR close ()
-that releases the open file description.
-Failing to check the return value when closing a file may lead to
-.I silent
-loss of data.
-This can especially be observed with NFS and with disk quota.
-.PP
-Note, however, that a failure return should be used only for
-diagnostic purposes (i.e., a warning to the application that there
-may still be I/O pending or there may have been failed I/O)
-or remedial purposes
-(e.g., writing the file once more or creating a backup).
-.PP
-Retrying the
-.BR close ()
-after a failure return is the wrong thing to do,
-.\" The file descriptor is released early in close();
-.\" close() ==> __close_fd():
-.\" __put_unused_fd() ==> __clear_open_fd()
-.\" return filp_close(file, files);
-.\"
-.\" The errors are returned by filp_close() after the FD has been
-.\" cleared for re-use.
-since this may cause a reused file descriptor
-from another thread to be closed.
-This can occur because the Linux kernel
-.I always
-releases the file descriptor early in the close
-operation, freeing it for reuse;
-the steps that may return an error,
-.\" filp_close()
-such as flushing data to the filesystem or device,
-occur only later in the close operation.
-.PP
-Many other implementations similarly always close the file descriptor
-.\" FreeBSD documents this explicitly. From the look of the source code
-.\" SVR4, ancient SunOS, later Solaris, and AIX all do this.
-(except in the case of
-.BR EBADF ,
-meaning that the file descriptor was invalid)
-even if they subsequently report an error on return from
-.BR close ().
-POSIX.1 is currently silent on this point,
-but there are plans to mandate this behavior in the next major release
-.\" Issue 8
-of the standard.
-.PP
-A careful programmer who wants to know about I/O errors may precede
-.BR close ()
-with a call to
-.BR fsync (2).
-.PP
-The
-.B EINTR
-error is a somewhat special case.
-Regarding the
-.B EINTR
-error, POSIX.1-2008 says:
-.PP
-.RS
-If
-.BR close ()
-is interrupted by a signal that is to be caught, it shall return \-1 with
-.I errno
-set to
-.B EINTR
-and the state of
-.I fildes
-is unspecified.
-.RE
-.PP
-This permits the behavior that occurs on Linux and
-many other implementations, where,
-as with other errors that may be reported by
-.BR close (),
-the file descriptor is guaranteed to be closed.
-However, it also permits another possibility:
-that the implementation returns an
-.B EINTR
-error and keeps the file descriptor open.
-(According to its documentation, HP-UX's
-.BR close ()
-does this.)
-The caller must then once more use
-.BR close ()
-to close the file descriptor, to avoid file descriptor leaks.
-This divergence in implementation behaviors provides
-a difficult hurdle for portable applications, since on many implementations,
-.BR close ()
-must not be called again after an
-.B EINTR
-error, and on at least one,
-.BR close ()
-must be called again.
-There are plans to address this conundrum for
-the next major release of the POSIX.1 standard.
-.\" FIXME . for later review when Issue 8 is one day released...
-.\" POSIX proposes further changes for EINTR
-.\" http://austingroupbugs.net/tag_view_page.php?tag_id=8
-.\" http://austingroupbugs.net/view.php?id=529
-.\"
-.\" FIXME .
-.\" Review the following glibc bug later
-.\" https://sourceware.org/bugzilla/show_bug.cgi?id=14627
-.SH SEE ALSO
-.BR close_range (2),
-.BR fcntl (2),
-.BR fsync (2),
-.BR open (2),
-.BR shutdown (2),
-.BR unlink (2),
-.BR fclose (3)
diff --git a/man2/close_range.2 b/man2/close_range.2
deleted file mode 100644
index 1df68c91d..000000000
--- a/man2/close_range.2
+++ /dev/null
@@ -1,273 +0,0 @@
-.\" Copyright (c) 2020 Stephen Kitt <steve@sk2.org>
-.\" and Copyright (c) 2021 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH close_range 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-close_range \- close all file descriptors in a given range
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <linux/close_range.h>
-.PP
-.BI "int close_range(unsigned int " first ", unsigned int " last ,
-.BI " unsigned int " flags );
-.fi
-.SH DESCRIPTION
-The
-.BR close_range ()
-system call closes all open file descriptors from
-.I first
-to
-.I last
-(included).
-.PP
-Errors closing a given file descriptor are currently ignored.
-.PP
-.I flags
-is a bit mask containing 0 or more of the following:
-.TP
-.BR CLOSE_RANGE_CLOEXEC " (since Linux 5.11)"
-Set the close-on-exec flag on the specified file descriptors,
-rather than immediately closing them.
-.TP
-.B CLOSE_RANGE_UNSHARE
-Unshare the specified file descriptors from any other processes
-before closing them,
-avoiding races with other threads sharing the file descriptor table.
-.SH RETURN VALUE
-On success,
-.BR close_range ()
-returns 0.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I flags
-is not valid, or
-.I first
-is greater than
-.IR last .
-.PP
-The following can occur with
-.B CLOSE_RANGE_UNSHARE
-(when constructing the new descriptor table):
-.TP
-.B EMFILE
-The number of open file descriptors exceeds the limit specified in
-.I /proc/sys/fs/nr_open
-(see
-.BR proc (5)).
-This error can occur in situations where that limit was lowered before
-a call to
-.BR close_range ()
-where the
-.B CLOSE_RANGE_UNSHARE
-flag is specified.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.SH STANDARDS
-None.
-.SH HISTORY
-FreeBSD.
-Linux 5.9,
-glibc 2.34.
-.SH NOTES
-.SS Closing all open file descriptors
-.\" 278a5fbaed89dacd04e9d052f4594ffd0e0585de
-To avoid blindly closing file descriptors
-in the range of possible file descriptors,
-this is sometimes implemented (on Linux)
-by listing open file descriptors in
-.I /proc/self/fd/
-and calling
-.BR close (2)
-on each one.
-.BR close_range ()
-can take care of this without requiring
-.I /proc
-and within a single system call,
-which provides significant performance benefits.
-.SS Closing file descriptors before exec
-.\" 60997c3d45d9a67daf01c56d805ae4fec37e0bd8
-File descriptors can be closed safely using
-.PP
-.in +4n
-.EX
-/* we don't want anything past stderr here */
-close_range(3, \[ti]0U, CLOSE_RANGE_UNSHARE);
-execve(....);
-.EE
-.in
-.PP
-.B CLOSE_RANGE_UNSHARE
-is conceptually equivalent to
-.PP
-.in +4n
-.EX
-unshare(CLONE_FILES);
-close_range(first, last, 0);
-.EE
-.in
-.PP
-but can be more efficient:
-if the unshared range extends past
-the current maximum number of file descriptors allocated
-in the caller's file descriptor table
-(the common case when
-.I last
-is \[ti]0U),
-the kernel will unshare a new file descriptor table for the caller up to
-.IR first ,
-copying as few file descriptors as possible.
-This avoids subsequent
-.BR close (2)
-calls entirely;
-the whole operation is complete once the table is unshared.
-.SS Closing files on \fBexec\fP
-.\" 582f1fb6b721facf04848d2ca57f34468da1813e
-This is particularly useful in cases where multiple
-.RB pre- exec
-setup steps risk conflicting with each other.
-For example, setting up a
-.BR seccomp (2)
-profile can conflict with a
-.BR close_range ()
-call:
-if the file descriptors are closed before the
-.BR seccomp (2)
-profile is set up,
-the profile setup can't use them itself,
-or control their closure;
-if the file descriptors are closed afterwards,
-the seccomp profile can't block the
-.BR close_range ()
-call or any fallbacks.
-Using
-.B CLOSE_RANGE_CLOEXEC
-avoids this:
-the descriptors can be marked before the
-.BR seccomp (2)
-profile is set up,
-and the profile can control access to
-.BR close_range ()
-without affecting the calling process.
-.SH EXAMPLES
-The program shown below opens the files named in its command-line arguments,
-displays the list of files that it has opened
-(by iterating through the entries in
-.IR /proc/PID/fd ),
-uses
-.BR close_range ()
-to close all file descriptors greater than or equal to 3,
-and then once more displays the process's list of open files.
-The following example demonstrates the use of the program:
-.PP
-.in +4n
-.EX
-$ \fBtouch /tmp/a /tmp/b /tmp/c\fP
-$ \fB./a.out /tmp/a /tmp/b /tmp/c\fP
-/tmp/a opened as FD 3
-/tmp/b opened as FD 4
-/tmp/c opened as FD 5
-/proc/self/fd/0 ==> /dev/pts/1
-/proc/self/fd/1 ==> /dev/pts/1
-/proc/self/fd/2 ==> /dev/pts/1
-/proc/self/fd/3 ==> /tmp/a
-/proc/self/fd/4 ==> /tmp/b
-/proc/self/fd/5 ==> /tmp/b
-/proc/self/fd/6 ==> /proc/9005/fd
-========= About to call close_range() =======
-/proc/self/fd/0 ==> /dev/pts/1
-/proc/self/fd/1 ==> /dev/pts/1
-/proc/self/fd/2 ==> /dev/pts/1
-/proc/self/fd/3 ==> /proc/9005/fd
-.EE
-.in
-.PP
-Note that the lines showing the pathname
-.I /proc/9005/fd
-result from the calls to
-.BR opendir (3).
-.SS Program source
-\&
-.\" SRC BEGIN (close_range.c)
-.EX
-#define _GNU_SOURCE
-#include <dirent.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/syscall.h>
-#include <unistd.h>
-\&
-/* Show the contents of the symbolic links in /proc/self/fd */
-\&
-static void
-show_fds(void)
-{
- DIR *dirp;
- char path[PATH_MAX], target[PATH_MAX];
- ssize_t len;
- struct dirent *dp;
-\&
- dirp = opendir("/proc/self/fd");
- if (dirp == NULL) {
- perror("opendir");
- exit(EXIT_FAILURE);
- }
-\&
- for (;;) {
- dp = readdir(dirp);
- if (dp == NULL)
- break;
-\&
- if (dp\->d_type == DT_LNK) {
- snprintf(path, sizeof(path), "/proc/self/fd/%s",
- dp\->d_name);
-\&
- len = readlink(path, target, sizeof(target));
- printf("%s ==> %.*s\en", path, (int) len, target);
- }
- }
-\&
- closedir(dirp);
-}
-\&
-int
-main(int argc, char *argv[])
-{
- int fd;
-\&
- for (size_t j = 1; j < argc; j++) {
- fd = open(argv[j], O_RDONLY);
- if (fd == \-1) {
- perror(argv[j]);
- exit(EXIT_FAILURE);
- }
- printf("%s opened as FD %d\en", argv[j], fd);
- }
-\&
- show_fds();
-\&
- printf("========= About to call close_range() =======\en");
-\&
- if (syscall(SYS_close_range, 3, \[ti]0U, 0) == \-1) {
- perror("close_range");
- exit(EXIT_FAILURE);
- }
-\&
- show_fds();
- exit(EXIT_FAILURE);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR close (2)
diff --git a/man2/connect.2 b/man2/connect.2
deleted file mode 100644
index 2db271180..000000000
--- a/man2/connect.2
+++ /dev/null
@@ -1,251 +0,0 @@
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
-.\" Portions extracted from /usr/include/sys/socket.h, which does not have
-.\" any authorship information in it. It is probably available under the GPL.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.\" Other portions are from the 6.9 (Berkeley) 3/10/91 man page:
-.\"
-.\" Copyright (c) 1983 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" Modified 1997-01-31 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1998, 1999 by Andi Kleen
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH connect 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-connect \- initiate a connection on a socket
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.PP
-.BI "int connect(int " sockfd ", const struct sockaddr *" addr ,
-.BI " socklen_t " addrlen );
-.fi
-.SH DESCRIPTION
-The
-.BR connect ()
-system call connects the socket referred to by the file descriptor
-.I sockfd
-to the address specified by
-.IR addr .
-The
-.I addrlen
-argument specifies the size of
-.IR addr .
-The format of the address in
-.I addr
-is determined by the address space of the socket
-.IR sockfd ;
-see
-.BR socket (2)
-for further details.
-.PP
-If the socket
-.I sockfd
-is of type
-.BR SOCK_DGRAM ,
-then
-.I addr
-is the address to which datagrams are sent by default, and the only
-address from which datagrams are received.
-If the socket is of type
-.B SOCK_STREAM
-or
-.BR SOCK_SEQPACKET ,
-this call attempts to make a connection to the socket that is bound
-to the address specified by
-.IR addr .
-.PP
-Some protocol sockets (e.g., UNIX domain stream sockets)
-may successfully
-.BR connect ()
-only once.
-.PP
-Some protocol sockets
-(e.g., datagram sockets in the UNIX and Internet domains)
-may use
-.BR connect ()
-multiple times to change their association.
-.PP
-Some protocol sockets
-(e.g., TCP sockets as well as datagram sockets in the UNIX and
-Internet domains)
-may dissolve the association by connecting to an address with the
-.I sa_family
-member of
-.I sockaddr
-set to
-.BR AF_UNSPEC ;
-thereafter, the socket can be connected to another address.
-.RB ( AF_UNSPEC
-is supported since Linux 2.2.)
-.SH RETURN VALUE
-If the connection or binding succeeds, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-The following are general socket errors only.
-There may be other domain-specific error codes.
-.TP
-.B EACCES
-For UNIX domain sockets, which are identified by pathname:
-Write permission is denied on the socket file,
-or search permission is denied for one of the directories
-in the path prefix.
-(See also
-.BR path_resolution (7).)
-.TP
-.BR EACCES ", " EPERM
-The user tried to connect to a broadcast address without having the socket
-broadcast flag enabled or the connection request failed because of a local
-firewall rule.
-.TP
-.B EACCES
-It can also be returned if an SELinux policy denied a connection (for
-example, if there is a policy saying that an HTTP proxy can only
-connect to ports associated with HTTP servers, and the proxy tries to
-connect to a different port).
-.TP
-.B EADDRINUSE
-Local address is already in use.
-.TP
-.B EADDRNOTAVAIL
-(Internet domain sockets)
-The socket referred to by
-.I sockfd
-had not previously been bound to an address and,
-upon attempting to bind it to an ephemeral port,
-it was determined that all port numbers in the ephemeral port range
-are currently in use.
-See the discussion of
-.I /proc/sys/net/ipv4/ip_local_port_range
-in
-.BR ip (7).
-.TP
-.B EAFNOSUPPORT
-The passed address didn't have the correct address family in its
-.I sa_family
-field.
-.TP
-.B EAGAIN
-For nonblocking UNIX domain sockets, the socket is nonblocking, and the
-connection cannot be completed immediately.
-For other socket families, there are insufficient entries in the routing cache.
-.TP
-.B EALREADY
-The socket is nonblocking and a previous connection attempt has not yet
-been completed.
-.TP
-.B EBADF
-.I sockfd
-is not a valid open file descriptor.
-.TP
-.B ECONNREFUSED
-A
-.BR connect ()
-on a stream socket found no one listening on the remote address.
-.TP
-.B EFAULT
-The socket structure address is outside the user's address space.
-.TP
-.B EINPROGRESS
-The socket is nonblocking and the connection cannot be completed immediately.
-(UNIX domain sockets failed with
-.B EAGAIN
-instead.)
-It is possible to
-.BR select (2)
-or
-.BR poll (2)
-for completion by selecting the socket for writing.
-After
-.BR select (2)
-indicates writability, use
-.BR getsockopt (2)
-to read the
-.B SO_ERROR
-option at level
-.B SOL_SOCKET
-to determine whether
-.BR connect ()
-completed successfully
-.RB ( SO_ERROR
-is zero) or unsuccessfully
-.RB ( SO_ERROR
-is one of the usual error codes listed here,
-explaining the reason for the failure).
-.TP
-.B EINTR
-The system call was interrupted by a signal that was caught; see
-.BR signal (7).
-.\" For TCP, the connection will complete asynchronously.
-.\" See http://lkml.org/lkml/2005/7/12/254
-.TP
-.B EISCONN
-The socket is already connected.
-.TP
-.B ENETUNREACH
-Network is unreachable.
-.TP
-.B ENOTSOCK
-The file descriptor
-.I sockfd
-does not refer to a socket.
-.TP
-.B EPROTOTYPE
-The socket type does not support the requested communications protocol.
-This error can occur, for example,
-on an attempt to connect a UNIX domain datagram socket to a stream socket.
-.TP
-.B ETIMEDOUT
-Timeout while attempting connection.
-The server may be too
-busy to accept new connections.
-Note that for IP sockets the timeout may
-be very long when syncookies are enabled on the server.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.4BSD,
-.RB (connect ()
-first appeared in 4.2BSD).
-.\" SVr4 documents the additional
-.\" general error codes
-.\" .BR EADDRNOTAVAIL ,
-.\" .BR EINVAL ,
-.\" .BR EAFNOSUPPORT ,
-.\" .BR EALREADY ,
-.\" .BR EINTR ,
-.\" .BR EPROTOTYPE ,
-.\" and
-.\" .BR ENOSR .
-.\" It also
-.\" documents many additional error conditions not described here.
-.SH NOTES
-If
-.BR connect ()
-fails, consider the state of the socket as unspecified.
-Portable applications should close the socket and create a new one for
-reconnecting.
-.SH EXAMPLES
-An example of the use of
-.BR connect ()
-is shown in
-.BR getaddrinfo (3).
-.SH SEE ALSO
-.BR accept (2),
-.BR bind (2),
-.BR getsockname (2),
-.BR listen (2),
-.BR socket (2),
-.BR path_resolution (7),
-.BR selinux (8)
diff --git a/man2/copy_file_range.2 b/man2/copy_file_range.2
deleted file mode 100644
index 6f3aa4971..000000000
--- a/man2/copy_file_range.2
+++ /dev/null
@@ -1,293 +0,0 @@
-.\"This manpage is Copyright (C) 2015 Anna Schumaker <Anna.Schumaker@Netapp.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH copy_file_range 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-copy_file_range \- Copy a range of data from one file to another
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #define _GNU_SOURCE
-.B #include <unistd.h>
-.PP
-.BI "ssize_t copy_file_range(int " fd_in ", off64_t *_Nullable " off_in ,
-.BI " int " fd_out ", off64_t *_Nullable " off_out ,
-.BI " size_t " len ", unsigned int " flags );
-.fi
-.SH DESCRIPTION
-The
-.BR copy_file_range ()
-system call performs an in-kernel copy between two file descriptors
-without the additional cost of transferring data from the kernel to user space
-and then back into the kernel.
-It copies up to
-.I len
-bytes of data from the source file descriptor
-.I fd_in
-to the target file descriptor
-.IR fd_out ,
-overwriting any data that exists within the requested range of the target file.
-.PP
-The following semantics apply for
-.IR off_in ,
-and similar statements apply to
-.IR off_out :
-.IP \[bu] 3
-If
-.I off_in
-is NULL, then bytes are read from
-.I fd_in
-starting from the file offset, and the file offset is
-adjusted by the number of bytes copied.
-.IP \[bu]
-If
-.I off_in
-is not NULL, then
-.I off_in
-must point to a buffer that specifies the starting
-offset where bytes from
-.I fd_in
-will be read.
-The file offset of
-.I fd_in
-is not changed, but
-.I off_in
-is adjusted appropriately.
-.PP
-.I fd_in
-and
-.I fd_out
-can refer to the same file.
-If they refer to the same file, then the source and target ranges are not
-allowed to overlap.
-.PP
-The
-.I flags
-argument is provided to allow for future extensions
-and currently must be set to 0.
-.SH RETURN VALUE
-Upon successful completion,
-.BR copy_file_range ()
-will return the number of bytes copied between files.
-This could be less than the length originally requested.
-If the file offset of
-.I fd_in
-is at or past the end of file, no bytes are copied, and
-.BR copy_file_range ()
-returns zero.
-.PP
-On error,
-.BR copy_file_range ()
-returns \-1 and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-One or more file descriptors are not valid.
-.TP
-.B EBADF
-.I fd_in
-is not open for reading; or
-.I fd_out
-is not open for writing.
-.TP
-.B EBADF
-The
-.B O_APPEND
-flag is set for the open file description (see
-.BR open (2))
-referred to by the file descriptor
-.IR fd_out .
-.TP
-.B EFBIG
-An attempt was made to write at a position past the maximum file offset the
-kernel supports.
-.TP
-.B EFBIG
-An attempt was made to write a range that exceeds the allowed maximum file size.
-The maximum file size differs between filesystem implementations and can be
-different from the maximum allowed file offset.
-.TP
-.B EFBIG
-An attempt was made to write beyond the process's file size resource limit.
-This may also result in the process receiving a
-.B SIGXFSZ
-signal.
-.TP
-.B EINVAL
-The
-.I flags
-argument is not 0.
-.TP
-.B EINVAL
-.I fd_in
-and
-.I fd_out
-refer to the same file and the source and target ranges overlap.
-.TP
-.B EINVAL
-Either
-.I fd_in
-or
-.I fd_out
-is not a regular file.
-.TP
-.B EIO
-A low-level I/O error occurred while copying.
-.TP
-.B EISDIR
-Either
-.I fd_in
-or
-.I fd_out
-refers to a directory.
-.TP
-.B ENOMEM
-Out of memory.
-.TP
-.B ENOSPC
-There is not enough space on the target filesystem to complete the copy.
-.TP
-.BR EOPNOTSUPP " (since Linux 5.19)"
-.\" commit 868f9f2f8e004bfe0d3935b1976f625b2924893b
-The filesystem does not support this operation.
-.TP
-.B EOVERFLOW
-The requested source or destination range is too large to represent in the
-specified data types.
-.TP
-.B EPERM
-.I fd_out
-refers to an immutable file.
-.TP
-.B ETXTBSY
-Either
-.I fd_in
-or
-.I fd_out
-refers to an active swap file.
-.TP
-.BR EXDEV " (before Linux 5.3)"
-.\" commit 5dae222a5ff0c269730393018a5539cc970a4726
-The files referred to by
-.IR fd_in " and " fd_out
-are not on the same filesystem.
-.TP
-.BR EXDEV " (since Linux 5.19)"
-.\" commit 868f9f2f8e004bfe0d3935b1976f625b2924893b
-The files referred to by
-.IR fd_in " and " fd_out
-are not on the same filesystem,
-and the source and target filesystems are not of the same type,
-or do not support cross-filesystem copy.
-.SH VERSIONS
-A major rework of the kernel implementation occurred in Linux 5.3.
-Areas of the API that weren't clearly defined were clarified and the API bounds
-are much more strictly checked than on earlier kernels.
-.PP
-Since Linux 5.19,
-cross-filesystem copies can be achieved
-when both filesystems are of the same type,
-and that filesystem implements support for it.
-See BUGS for behavior prior to Linux 5.19.
-.PP
-Applications should target the behaviour and requirements of Linux 5.19,
-that was also backported to earlier stable kernels.
-.SH STANDARDS
-Linux, GNU.
-.SH HISTORY
-Linux 4.5,
-but glibc 2.27 provides a user-space
-emulation when it is not available.
-.\" https://sourceware.org/git/?p=glibc.git;a=commit;f=posix/unistd.h;h=bad7a0c81f501fbbcc79af9eaa4b8254441c4a1f
-.SH NOTES
-If
-.I fd_in
-is a sparse file, then
-.BR copy_file_range ()
-may expand any holes existing in the requested range.
-Users may benefit from calling
-.BR copy_file_range ()
-in a loop, and using the
-.BR lseek (2)
-.B SEEK_DATA
-and
-.B SEEK_HOLE
-operations to find the locations of data segments.
-.PP
-.BR copy_file_range ()
-gives filesystems an opportunity to implement "copy acceleration" techniques,
-such as the use of reflinks (i.e., two or more inodes that share
-pointers to the same copy-on-write disk blocks)
-or server-side-copy (in the case of NFS).
-.SH BUGS
-In Linux 5.3 to Linux 5.18,
-cross-filesystem copies were implemented by the kernel,
-if the operation was not supported by individual filesystems.
-However, on some virtual filesystems,
-the call failed to copy, while still reporting success.
-.SH EXAMPLES
-.\" SRC BEGIN (copy_file_range.c)
-.EX
-#define _GNU_SOURCE
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int fd_in, fd_out;
- off64_t len, ret;
- struct stat stat;
-\&
- if (argc != 3) {
- fprintf(stderr, "Usage: %s <source> <destination>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- fd_in = open(argv[1], O_RDONLY);
- if (fd_in == \-1) {
- perror("open (argv[1])");
- exit(EXIT_FAILURE);
- }
-\&
- if (fstat(fd_in, &stat) == \-1) {
- perror("fstat");
- exit(EXIT_FAILURE);
- }
-\&
- len = stat.st_size;
-\&
- fd_out = open(argv[2], O_CREAT | O_WRONLY | O_TRUNC, 0644);
- if (fd_out == \-1) {
- perror("open (argv[2])");
- exit(EXIT_FAILURE);
- }
-\&
- do {
- ret = copy_file_range(fd_in, NULL, fd_out, NULL, len, 0);
- if (ret == \-1) {
- perror("copy_file_range");
- exit(EXIT_FAILURE);
- }
-\&
- len \-= ret;
- } while (len > 0 && ret > 0);
-\&
- close(fd_in);
- close(fd_out);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR lseek (2),
-.BR sendfile (2),
-.BR splice (2)
diff --git a/man2/creat.2 b/man2/creat.2
deleted file mode 100644
index 604e1213a..000000000
--- a/man2/creat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/open.2
diff --git a/man2/create_module.2 b/man2/create_module.2
deleted file mode 100644
index 2239f05cd..000000000
--- a/man2/create_module.2
+++ /dev/null
@@ -1,72 +0,0 @@
-.\" Copyright (C) 1996 Free Software Foundation, Inc.
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" 2006-02-09, some reformatting by Luc Van Oostenryck; some
-.\" reformatting and rewordings by mtk
-.\"
-.TH create_module 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-create_module \- create a loadable module entry
-.SH SYNOPSIS
-.nf
-.B #include <linux/module.h>
-.PP
-.BI "[[deprecated]] caddr_t create_module(const char *" name ", size_t " size );
-.fi
-.SH DESCRIPTION
-.IR Note :
-This system call is present only before Linux 2.6.
-.PP
-.BR create_module ()
-attempts to create a loadable module entry and reserve the kernel memory
-that will be needed to hold the module.
-This system call requires privilege.
-.SH RETURN VALUE
-On success, returns the kernel address at which the module will reside.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EEXIST
-A module by that name already exists.
-.TP
-.B EFAULT
-.I name
-is outside the program's accessible address space.
-.TP
-.B EINVAL
-The requested size is too small even for the module header information.
-.TP
-.B ENOMEM
-The kernel could not allocate a contiguous block of memory large
-enough for the module.
-.TP
-.B ENOSYS
-.BR create_module ()
-is not supported in this version of the kernel
-(e.g., Linux 2.6 or later).
-.TP
-.B EPERM
-The caller was not privileged
-(did not have the
-.B CAP_SYS_MODULE
-capability).
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Removed in Linux 2.6.
-.\" Removed in Linux 2.5.48
-.PP
-This obsolete system call is not supported by glibc.
-No declaration is provided in glibc headers, but, through a quirk of history,
-glibc versions before glibc 2.23 did export an ABI for this system call.
-Therefore, in order to employ this system call,
-it was sufficient to manually declare the interface in your code;
-alternatively, you could invoke the system call using
-.BR syscall (2).
-.SH SEE ALSO
-.BR delete_module (2),
-.BR init_module (2),
-.BR query_module (2)
diff --git a/man2/delete_module.2 b/man2/delete_module.2
deleted file mode 100644
index 99c26c5ef..000000000
--- a/man2/delete_module.2
+++ /dev/null
@@ -1,205 +0,0 @@
-.\" Copyright (C) 2012 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH delete_module 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-delete_module \- unload a kernel module
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <fcntl.h>" " /* Definition of " O_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_delete_module, const char *" name ", unsigned int " flags );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR delete_module (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR delete_module ()
-system call attempts to remove the unused loadable module entry
-identified by
-.IR name .
-If the module has an
-.I exit
-function, then that function is executed before unloading the module.
-The
-.I flags
-argument is used to modify the behavior of the system call,
-as described below.
-This system call requires privilege.
-.PP
-Module removal is attempted according to the following rules:
-.IP (1) 5
-If there are other loaded modules that depend on
-(i.e., refer to symbols defined in) this module,
-then the call fails.
-.IP (2)
-Otherwise, if the reference count for the module
-(i.e., the number of processes currently using the module)
-is zero, then the module is immediately unloaded.
-.IP (3)
-If a module has a nonzero reference count,
-then the behavior depends on the bits set in
-.IR flags .
-In normal usage (see NOTES), the
-.B O_NONBLOCK
-flag is always specified, and the
-.B O_TRUNC
-flag may additionally be specified.
-.\" O_TRUNC == KMOD_REMOVE_FORCE in kmod library
-.\" O_NONBLOCK == KMOD_REMOVE_NOWAIT in kmod library
-.IP
-The various combinations for
-.I flags
-have the following effect:
-.RS
-.TP
-.B flags == O_NONBLOCK
-The call returns immediately, with an error.
-.TP
-.B flags == (O_NONBLOCK | O_TRUNC)
-The module is unloaded immediately,
-regardless of whether it has a nonzero reference count.
-.TP
-.B (flags & O_NONBLOCK) == 0
-If
-.I flags
-does not specify
-.BR O_NONBLOCK ,
-the following steps occur:
-.RS
-.IP \[bu] 3
-The module is marked so that no new references are permitted.
-.IP \[bu]
-If the module's reference count is nonzero,
-the caller is placed in an uninterruptible sleep state
-.RB ( TASK_UNINTERRUPTIBLE )
-until the reference count is zero, at which point the call unblocks.
-.IP \[bu]
-The module is unloaded in the usual way.
-.RE
-.RE
-.PP
-The
-.B O_TRUNC
-flag has one further effect on the rules described above.
-By default, if a module has an
-.I init
-function but no
-.I exit
-function, then an attempt to remove the module fails.
-However, if
-.B O_TRUNC
-was specified, this requirement is bypassed.
-.PP
-Using the
-.B O_TRUNC
-flag is dangerous!
-If the kernel was not built with
-.BR CONFIG_MODULE_FORCE_UNLOAD ,
-this flag is silently ignored.
-(Normally,
-.B CONFIG_MODULE_FORCE_UNLOAD
-is enabled.)
-Using this flag taints the kernel (TAINT_FORCED_RMMOD).
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBUSY
-The module is not "live"
-(i.e., it is still being initialized or is already marked for removal);
-or, the module has
-an
-.I init
-function but has no
-.I exit
-function, and
-.B O_TRUNC
-was not specified in
-.IR flags .
-.TP
-.B EFAULT
-.I name
-refers to a location outside the process's accessible address space.
-.TP
-.B ENOENT
-No module by that name exists.
-.TP
-.B EPERM
-The caller was not privileged
-(did not have the
-.B CAP_SYS_MODULE
-capability),
-or module unloading is disabled
-(see
-.I /proc/sys/kernel/modules_disabled
-in
-.BR proc (5)).
-.TP
-.B EWOULDBLOCK
-Other modules depend on this module;
-or,
-.B O_NONBLOCK
-was specified in
-.IR flags ,
-but the reference count of this module is nonzero and
-.B O_TRUNC
-was not specified in
-.IR flags .
-.SH STANDARDS
-Linux.
-.SH HISTORY
-The
-.BR delete_module ()
-system call is not supported by glibc.
-No declaration is provided in glibc headers, but, through a quirk of history,
-glibc versions before glibc 2.23 did export an ABI for this system call.
-Therefore, in order to employ this system call,
-it is (before glibc 2.23) sufficient to
-manually declare the interface in your code;
-alternatively, you can invoke the system call using
-.BR syscall (2).
-.SS Linux 2.4 and earlier
-In Linux 2.4 and earlier, the system call took only one argument:
-.PP
-.BI " int delete_module(const char *" name );
-.PP
-If
-.I name
-is NULL, all unused modules marked auto-clean are removed.
-.PP
-Some further details of differences in the behavior of
-.BR delete_module ()
-in Linux 2.4 and earlier are
-.I not
-currently explained in this manual page.
-.SH NOTES
-The uninterruptible sleep that may occur if
-.B O_NONBLOCK
-is omitted from
-.I flags
-is considered undesirable, because the sleeping process is left
-in an unkillable state.
-As at Linux 3.7, specifying
-.B O_NONBLOCK
-is optional, but in future kernels it is likely to become mandatory.
-.SH SEE ALSO
-.BR create_module (2),
-.BR init_module (2),
-.BR query_module (2),
-.BR lsmod (8),
-.BR modprobe (8),
-.BR rmmod (8)
diff --git a/man2/dup.2 b/man2/dup.2
deleted file mode 100644
index b38e4dd08..000000000
--- a/man2/dup.2
+++ /dev/null
@@ -1,284 +0,0 @@
-.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\" and Copyright (C) 1993 Michael Haardt, Ian Jackson.
-.\" and Copyright (C) 2005, 2008 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 1993-07-21, Rik Faith <faith@cs.unc.edu>
-.\" Modified 1994-08-21, Michael Chastain <mec@shell.portal.com>:
-.\" Fixed typos.
-.\" Modified 1997-01-31, Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2002-09-28, aeb
-.\" 2009-01-12, mtk, reordered text in DESCRIPTION and added some
-.\" details for dup2().
-.\" 2008-10-09, mtk: add description of dup3()
-.\"
-.TH dup 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-dup, dup2, dup3 \- duplicate a file descriptor
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int dup(int " oldfd );
-.BI "int dup2(int " oldfd ", int " newfd );
-.PP
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.BR "#include <fcntl.h>" " /* Definition of " O_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int dup3(int " oldfd ", int " newfd ", int " flags );
-.fi
-.SH DESCRIPTION
-The
-.BR dup ()
-system call allocates a new file descriptor that refers to the same
-open file description as the descriptor
-.IR oldfd .
-(For an explanation of open file descriptions, see
-.BR open (2).)
-The new file descriptor number is guaranteed to be the lowest-numbered
-file descriptor that was unused in the calling process.
-.PP
-After a successful return,
-the old and new file descriptors may be used interchangeably.
-Since the two file descriptors refer to the same open file description,
-they share file offset and file status flags;
-for example, if the file offset is modified by using
-.BR lseek (2)
-on one of the file descriptors,
-the offset is also changed for the other file descriptor.
-.PP
-The two file descriptors do not share file descriptor flags
-(the close-on-exec flag).
-The close-on-exec flag
-.RB ( FD_CLOEXEC ;
-see
-.BR fcntl (2))
-for the duplicate descriptor is off.
-.\"
-.SS dup2()
-The
-.BR dup2 ()
-system call performs the same task as
-.BR dup (),
-but instead of using the lowest-numbered unused file descriptor,
-it uses the file descriptor number specified in
-.IR newfd .
-In other words,
-the file descriptor
-.I newfd
-is adjusted so that it now refers to the same open file description as
-.IR oldfd .
-.PP
-If the file descriptor
-.I newfd
-was previously open, it is closed before being reused;
-the close is performed silently
-(i.e., any errors during the close are not reported by
-.BR dup2 ()).
-.PP
-The steps of closing and reusing the file descriptor
-.I newfd
-are performed
-.IR atomically .
-This is important, because trying to implement equivalent functionality using
-.BR close (2)
-and
-.BR dup ()
-would be
-subject to race conditions, whereby
-.I newfd
-might be reused between the two steps.
-Such reuse could happen because the main program is interrupted
-by a signal handler that allocates a file descriptor,
-or because a parallel thread allocates a file descriptor.
-.PP
-Note the following points:
-.IP \[bu] 3
-If
-.I oldfd
-is not a valid file descriptor, then the call fails, and
-.I newfd
-is not closed.
-.IP \[bu]
-If
-.I oldfd
-is a valid file descriptor, and
-.I newfd
-has the same value as
-.IR oldfd ,
-then
-.BR dup2 ()
-does nothing, and returns
-.IR newfd .
-.\"
-.SS dup3()
-.BR dup3 ()
-is the same as
-.BR dup2 (),
-except that:
-.IP \[bu] 3
-The caller can force the close-on-exec flag to be set
-for the new file descriptor by specifying
-.B O_CLOEXEC
-in
-.IR flags .
-See the description of the same flag in
-.BR open (2)
-for reasons why this may be useful.
-.IP \[bu]
-.\" Ulrich Drepper, LKML, 2008-10-09:
-.\" We deliberately decided on this change. Otherwise, what is the
-.\" result of dup3(fd, fd, O_CLOEXEC)?
-If
-.I oldfd
-equals
-.IR newfd ,
-then
-.BR dup3 ()
-fails with the error
-.BR EINVAL .
-.SH RETURN VALUE
-On success, these system calls
-return the new file descriptor.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I oldfd
-isn't an open file descriptor.
-.TP
-.B EBADF
-.I newfd
-is out of the allowed range for file descriptors (see the discussion of
-.B RLIMIT_NOFILE
-in
-.BR getrlimit (2)).
-.TP
-.B EBUSY
-(Linux only) This may be returned by
-.BR dup2 ()
-or
-.BR dup3 ()
-during a race condition with
-.BR open (2)
-and
-.BR dup ().
-.TP
-.B EINTR
-The
-.BR dup2 ()
-or
-.BR dup3 ()
-call was interrupted by a signal; see
-.BR signal (7).
-.TP
-.B EINVAL
-.RB ( dup3 ())
-.I flags
-contain an invalid value.
-.TP
-.B EINVAL
-.RB ( dup3 ())
-.I oldfd
-was equal to
-.IR newfd .
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached
-(see the discussion of
-.B RLIMIT_NOFILE
-in
-.BR getrlimit (2)).
-.SH STANDARDS
-.TP
-.BR dup ()
-.TQ
-.BR dup2 ()
-POSIX.1-2008.
-.TP
-.BR dup3 ()
-Linux.
-.SH HISTORY
-.TP
-.BR dup ()
-.TQ
-.BR dup2 ()
-POSIX.1-2001, SVr4, 4.3BSD.
-.\" SVr4 documents additional
-.\" EINTR and ENOLINK error conditions. POSIX.1 adds EINTR.
-.\" The EBUSY return is Linux-specific.
-.TP
-.BR dup3 ()
-Linux 2.6.27,
-glibc 2.9.
-.SH NOTES
-The error returned by
-.BR dup2 ()
-is different from that returned by
-.BR fcntl( "..., " F_DUPFD ", ..." )
-when
-.I newfd
-is out of range.
-On some systems,
-.BR dup2 ()
-also sometimes returns
-.B EINVAL
-like
-.BR F_DUPFD .
-.PP
-If
-.I newfd
-was open, any errors that would have been reported at
-.BR close (2)
-time are lost.
-If this is of concern,
-then\[em]unless the program is single-threaded and does not allocate
-file descriptors in signal handlers\[em]the correct approach is
-.I not
-to close
-.I newfd
-before calling
-.BR dup2 (),
-because of the race condition described above.
-Instead, code something like the following could be used:
-.PP
-.in +4n
-.EX
-/* Obtain a duplicate of \[aq]newfd\[aq] that can subsequently
- be used to check for close() errors; an EBADF error
- means that \[aq]newfd\[aq] was not open. */
-\&
-tmpfd = dup(newfd);
-if (tmpfd == \-1 && errno != EBADF) {
- /* Handle unexpected dup() error. */
-}
-\&
-/* Atomically duplicate \[aq]oldfd\[aq] on \[aq]newfd\[aq]. */
-\&
-if (dup2(oldfd, newfd) == \-1) {
- /* Handle dup2() error. */
-}
-\&
-/* Now check for close() errors on the file originally
- referred to by \[aq]newfd\[aq]. */
-\&
-if (tmpfd != \-1) {
- if (close(tmpfd) == \-1) {
- /* Handle errors from close. */
- }
-}
-.EE
-.in
-.SH SEE ALSO
-.BR close (2),
-.BR fcntl (2),
-.BR open (2),
-.BR pidfd_getfd (2)
diff --git a/man2/dup2.2 b/man2/dup2.2
deleted file mode 100644
index 49a65c65d..000000000
--- a/man2/dup2.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/dup.2
diff --git a/man2/dup3.2 b/man2/dup3.2
deleted file mode 100644
index 49a65c65d..000000000
--- a/man2/dup3.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/dup.2
diff --git a/man2/epoll_create.2 b/man2/epoll_create.2
deleted file mode 100644
index 4d3566a79..000000000
--- a/man2/epoll_create.2
+++ /dev/null
@@ -1,141 +0,0 @@
-.\" Copyright (C) 2003 Davide Libenzi
-.\" and Copyright 2008, 2009, 2012 Michael Kerrisk <tk.manpages@gmail.com>
-.\" Davide Libenzi <davidel@xmailserver.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified 2004-06-17 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2005-04-04 by Marko Kohtala <marko.kohtala@gmail.com>
-.\" 2008-10-10, mtk: add description of epoll_create1()
-.\"
-.TH epoll_create 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-epoll_create, epoll_create1 \- open an epoll file descriptor
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/epoll.h>
-.PP
-.BI "int epoll_create(int " size );
-.BI "int epoll_create1(int " flags );
-.fi
-.SH DESCRIPTION
-.BR epoll_create ()
-creates a new
-.BR epoll (7)
-instance.
-Since Linux 2.6.8, the
-.I size
-argument is ignored, but must be greater than zero; see HISTORY.
-.PP
-.BR epoll_create ()
-returns a file descriptor referring to the new epoll instance.
-This file descriptor is used for all the subsequent calls to the
-.B epoll
-interface.
-When no longer required, the file descriptor returned by
-.BR epoll_create ()
-should be closed by using
-.BR close (2).
-When all file descriptors referring to an epoll instance have been closed,
-the kernel destroys the instance
-and releases the associated resources for reuse.
-.SS epoll_create1()
-If
-.I flags
-is 0, then, other than the fact that the obsolete
-.I size
-argument is dropped,
-.BR epoll_create1 ()
-is the same as
-.BR epoll_create ().
-The following value can be included in
-.I flags
-to obtain different behavior:
-.TP
-.B EPOLL_CLOEXEC
-Set the close-on-exec
-.RB ( FD_CLOEXEC )
-flag on the new file descriptor.
-See the description of the
-.B O_CLOEXEC
-flag in
-.BR open (2)
-for reasons why this may be useful.
-.SH RETURN VALUE
-On success,
-these system calls
-return a file descriptor (a nonnegative integer).
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I size
-is not positive.
-.TP
-.B EINVAL
-.RB ( epoll_create1 ())
-Invalid value specified in
-.IR flags .
-.TP
-.B EMFILE
-The per-user limit on the number of epoll instances imposed by
-.I /proc/sys/fs/epoll/max_user_instances
-was encountered.
-See
-.BR epoll (7)
-for further details.
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOMEM
-There was insufficient memory to create the kernel object.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-.TP
-.BR epoll_create ()
-Linux 2.6,
-glibc 2.3.2.
-.\" To be precise: kernel 2.5.44.
-.\" The interface should be finalized by Linux kernel 2.5.66.
-.TP
-.BR epoll_create1 ()
-Linux 2.6.27,
-glibc 2.9.
-.PP
-In the initial
-.BR epoll_create ()
-implementation, the
-.I size
-argument informed the kernel of the number of file descriptors
-that the caller expected to add to the
-.B epoll
-instance.
-The kernel used this information as a hint for the amount of
-space to initially allocate in internal data structures describing events.
-(If necessary, the kernel would allocate more space
-if the caller's usage exceeded the hint given in
-.IR size .)
-Nowadays,
-this hint is no longer required
-(the kernel dynamically sizes the required data structures
-without needing the hint), but
-.I size
-must still be greater than zero,
-in order to ensure backward compatibility when new
-.B epoll
-applications are run on older kernels.
-.SH SEE ALSO
-.BR close (2),
-.BR epoll_ctl (2),
-.BR epoll_wait (2),
-.BR epoll (7)
diff --git a/man2/epoll_create1.2 b/man2/epoll_create1.2
deleted file mode 100644
index 69605b6ef..000000000
--- a/man2/epoll_create1.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/epoll_create.2
diff --git a/man2/epoll_ctl.2 b/man2/epoll_ctl.2
deleted file mode 100644
index 1c20dfe5b..000000000
--- a/man2/epoll_ctl.2
+++ /dev/null
@@ -1,429 +0,0 @@
-.\" Copyright (C) 2003 Davide Libenzi
-.\" Davide Libenzi <davidel@xmailserver.org>
-.\" and Copyright 2009, 2014, 2016, 2018, 2019 Michael Kerrisk <tk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH epoll_ctl 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-epoll_ctl \- control interface for an epoll file descriptor
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/epoll.h>
-.PP
-.BI "int epoll_ctl(int " epfd ", int " op ", int " fd ,
-.BI " struct epoll_event *_Nullable " event );
-.fi
-.SH DESCRIPTION
-This system call is used to add, modify, or remove
-entries in the interest list of the
-.BR epoll (7)
-instance
-referred to by the file descriptor
-.IR epfd .
-It requests that the operation
-.I op
-be performed for the target file descriptor,
-.IR fd .
-.PP
-Valid values for the
-.I op
-argument are:
-.TP
-.B EPOLL_CTL_ADD
-Add an entry to the interest list of the epoll file descriptor,
-.IR epfd .
-The entry includes the file descriptor,
-.IR fd ,
-a reference to the corresponding open file description (see
-.BR epoll (7)
-and
-.BR open (2)),
-and the settings specified in
-.IR event .
-.TP
-.B EPOLL_CTL_MOD
-Change the settings associated with
-.I fd
-in the interest list to the new settings specified in
-.IR event .
-.TP
-.B EPOLL_CTL_DEL
-Remove (deregister) the target file descriptor
-.I fd
-from the interest list.
-The
-.I event
-argument is ignored and can be NULL (but see BUGS below).
-.PP
-The
-.I event
-argument describes the object linked to the file descriptor
-.IR fd .
-The
-.I struct epoll_event
-is described in
-.BR epoll_event (3type).
-.PP
-The
-.I data
-member of the
-.I epoll_event
-structure specifies data that the kernel should save and then return (via
-.BR epoll_wait (2))
-when this file descriptor becomes ready.
-.PP
-The
-.I events
-member of the
-.I epoll_event
-structure is a bit mask composed by ORing together zero or more event types,
-returned by
-.BR epoll_wait (2),
-and input flags, which affect its behaviour, but aren't returned.
-The available event types are:
-.TP
-.B EPOLLIN
-The associated file is available for
-.BR read (2)
-operations.
-.TP
-.B EPOLLOUT
-The associated file is available for
-.BR write (2)
-operations.
-.TP
-.BR EPOLLRDHUP " (since Linux 2.6.17)"
-Stream socket peer closed connection,
-or shut down writing half of connection.
-(This flag is especially useful for writing simple code to detect
-peer shutdown when using edge-triggered monitoring.)
-.TP
-.B EPOLLPRI
-There is an exceptional condition on the file descriptor.
-See the discussion of
-.B POLLPRI
-in
-.BR poll (2).
-.TP
-.B EPOLLERR
-Error condition happened on the associated file descriptor.
-This event is also reported for the write end of a pipe when the read end
-has been closed.
-.IP
-.BR epoll_wait (2)
-will always report for this event; it is not necessary to set it in
-.I events
-when calling
-.BR epoll_ctl ().
-.TP
-.B EPOLLHUP
-Hang up happened on the associated file descriptor.
-.IP
-.BR epoll_wait (2)
-will always wait for this event; it is not necessary to set it in
-.I events
-when calling
-.BR epoll_ctl ().
-.IP
-Note that when reading from a channel such as a pipe or a stream socket,
-this event merely indicates that the peer closed its end of the channel.
-Subsequent reads from the channel will return 0 (end of file)
-only after all outstanding data in the channel has been consumed.
-.PP
-And the available input flags are:
-.TP
-.B EPOLLET
-Requests edge-triggered notification for the associated file descriptor.
-The default behavior for
-.B epoll
-is level-triggered.
-See
-.BR epoll (7)
-for more detailed information about edge-triggered and
-level-triggered notification.
-.TP
-.BR EPOLLONESHOT " (since Linux 2.6.2)"
-Requests one-shot notification for the associated file descriptor.
-This means that after an event notified for the file descriptor by
-.BR epoll_wait (2),
-the file descriptor is disabled in the interest list and no other events
-will be reported by the
-.B epoll
-interface.
-The user must call
-.BR epoll_ctl ()
-with
-.B EPOLL_CTL_MOD
-to rearm the file descriptor with a new event mask.
-.TP
-.BR EPOLLWAKEUP " (since Linux 3.5)"
-.\" commit 4d7e30d98939a0340022ccd49325a3d70f7e0238
-If
-.B EPOLLONESHOT
-and
-.B EPOLLET
-are clear and the process has the
-.B CAP_BLOCK_SUSPEND
-capability,
-ensure that the system does not enter "suspend" or
-"hibernate" while this event is pending or being processed.
-The event is considered as being "processed" from the time
-when it is returned by a call to
-.BR epoll_wait (2)
-until the next call to
-.BR epoll_wait (2)
-on the same
-.BR epoll (7)
-file descriptor,
-the closure of that file descriptor,
-the removal of the event file descriptor with
-.BR EPOLL_CTL_DEL ,
-or the clearing of
-.B EPOLLWAKEUP
-for the event file descriptor with
-.BR EPOLL_CTL_MOD .
-See also BUGS.
-.TP
-.BR EPOLLEXCLUSIVE " (since Linux 4.5)"
-Sets an exclusive wakeup mode for the epoll file descriptor that is being
-attached to the target file descriptor,
-.IR fd .
-When a wakeup event occurs and multiple epoll file descriptors
-are attached to the same target file using
-.BR EPOLLEXCLUSIVE ,
-one or more of the epoll file descriptors will receive an event with
-.BR epoll_wait (2).
-The default in this scenario (when
-.B EPOLLEXCLUSIVE
-is not set) is for all epoll file descriptors to receive an event.
-.B EPOLLEXCLUSIVE
-is thus useful for avoiding thundering herd problems in certain scenarios.
-.IP
-If the same file descriptor is in multiple epoll instances,
-some with the
-.B EPOLLEXCLUSIVE
-flag, and others without, then events will be provided to all epoll
-instances that did not specify
-.BR EPOLLEXCLUSIVE ,
-and at least one of the epoll instances that did specify
-.BR EPOLLEXCLUSIVE .
-.IP
-The following values may be specified in conjunction with
-.BR EPOLLEXCLUSIVE :
-.BR EPOLLIN ,
-.BR EPOLLOUT ,
-.BR EPOLLWAKEUP ,
-and
-.BR EPOLLET .
-.B EPOLLHUP
-and
-.B EPOLLERR
-can also be specified, but this is not required:
-as usual, these events are always reported if they occur,
-regardless of whether they are specified in
-.IR events .
-Attempts to specify other values in
-.I events
-yield the error
-.BR EINVAL .
-.IP
-.B EPOLLEXCLUSIVE
-may be used only in an
-.B EPOLL_CTL_ADD
-operation; attempts to employ it with
-.B EPOLL_CTL_MOD
-yield an error.
-If
-.B EPOLLEXCLUSIVE
-has been set using
-.BR epoll_ctl (),
-then a subsequent
-.B EPOLL_CTL_MOD
-on the same
-.IR epfd ,\~ fd
-pair yields an error.
-A call to
-.BR epoll_ctl ()
-that specifies
-.B EPOLLEXCLUSIVE
-in
-.I events
-and specifies the target file descriptor
-.I fd
-as an epoll instance will likewise fail.
-The error in all of these cases is
-.BR EINVAL .
-.SH RETURN VALUE
-When successful,
-.BR epoll_ctl ()
-returns zero.
-When an error occurs,
-.BR epoll_ctl ()
-returns \-1 and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I epfd
-or
-.I fd
-is not a valid file descriptor.
-.TP
-.B EEXIST
-.I op
-was
-.BR EPOLL_CTL_ADD ,
-and the supplied file descriptor
-.I fd
-is already registered with this epoll instance.
-.TP
-.B EINVAL
-.I epfd
-is not an
-.B epoll
-file descriptor,
-or
-.I fd
-is the same as
-.IR epfd ,
-or the requested operation
-.I op
-is not supported by this interface.
-.TP
-.B EINVAL
-An invalid event type was specified along with
-.B EPOLLEXCLUSIVE
-in
-.IR events .
-.TP
-.B EINVAL
-.I op
-was
-.B EPOLL_CTL_MOD
-and
-.I events
-included
-.BR EPOLLEXCLUSIVE .
-.TP
-.B EINVAL
-.I op
-was
-.B EPOLL_CTL_MOD
-and the
-.B EPOLLEXCLUSIVE
-flag has previously been applied to this
-.IR epfd ,\~ fd
-pair.
-.TP
-.B EINVAL
-.B EPOLLEXCLUSIVE
-was specified in
-.I event
-and
-.I fd
-refers to an epoll instance.
-.TP
-.B ELOOP
-.I fd
-refers to an epoll instance and this
-.B EPOLL_CTL_ADD
-operation would result in a circular loop of epoll instances
-monitoring one another or a nesting depth of epoll instances
-greater than 5.
-.TP
-.B ENOENT
-.I op
-was
-.B EPOLL_CTL_MOD
-or
-.BR EPOLL_CTL_DEL ,
-and
-.I fd
-is not registered with this epoll instance.
-.TP
-.B ENOMEM
-There was insufficient memory to handle the requested
-.I op
-control operation.
-.TP
-.B ENOSPC
-The limit imposed by
-.I /proc/sys/fs/epoll/max_user_watches
-was encountered while trying to register
-.RB ( EPOLL_CTL_ADD )
-a new file descriptor on an epoll instance.
-See
-.BR epoll (7)
-for further details.
-.TP
-.B EPERM
-The target file
-.I fd
-does not support
-.BR epoll .
-This error can occur if
-.I fd
-refers to, for example, a regular file or a directory.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6,
-.\" To be precise: Linux 2.5.44.
-.\" The interface should be finalized by Linux 2.5.66.
-glibc 2.3.2.
-.SH NOTES
-The
-.B epoll
-interface supports all file descriptors that support
-.BR poll (2).
-.SH BUGS
-Before Linux 2.6.9, the
-.B EPOLL_CTL_DEL
-operation required a non-null pointer in
-.IR event ,
-even though this argument is ignored.
-Since Linux 2.6.9,
-.I event
-can be specified as NULL
-when using
-.BR EPOLL_CTL_DEL .
-Applications that need to be portable to kernels before Linux 2.6.9
-should specify a non-null pointer in
-.IR event .
-.PP
-If
-.B EPOLLWAKEUP
-is specified in
-.IR flags ,
-but the caller does not have the
-.B CAP_BLOCK_SUSPEND
-capability, then the
-.B EPOLLWAKEUP
-flag is
-.IR "silently ignored" .
-This unfortunate behavior is necessary because no validity
-checks were performed on the
-.I flags
-argument in the original implementation, and the addition of the
-.B EPOLLWAKEUP
-with a check that caused the call to fail if the caller did not have the
-.B CAP_BLOCK_SUSPEND
-capability caused a breakage in at least one existing user-space
-application that happened to randomly (and uselessly) specify this bit.
-.\" commit a8159414d7e3af7233e7a5a82d1c5d85379bd75c (behavior change)
-.\" https://lwn.net/Articles/520198/
-A robust application should therefore double check that it has the
-.B CAP_BLOCK_SUSPEND
-capability if attempting to use the
-.B EPOLLWAKEUP
-flag.
-.SH SEE ALSO
-.BR epoll_create (2),
-.BR epoll_wait (2),
-.BR poll (2),
-.BR epoll (7)
diff --git a/man2/epoll_pwait.2 b/man2/epoll_pwait.2
deleted file mode 100644
index 9282a7064..000000000
--- a/man2/epoll_pwait.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/epoll_wait.2
diff --git a/man2/epoll_pwait2.2 b/man2/epoll_pwait2.2
deleted file mode 100644
index 9282a7064..000000000
--- a/man2/epoll_pwait2.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/epoll_wait.2
diff --git a/man2/epoll_wait.2 b/man2/epoll_wait.2
deleted file mode 100644
index 6e91af7f8..000000000
--- a/man2/epoll_wait.2
+++ /dev/null
@@ -1,288 +0,0 @@
-.\" Copyright (C) 2003 Davide Libenzi
-.\" Davide Libenzi <davidel@xmailserver.org>
-.\" and Copyright 2007, 2012, 2014, 2018 Michael Kerrisk <tk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 2007-04-30: mtk, Added description of epoll_pwait()
-.\"
-.TH epoll_wait 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-epoll_wait, epoll_pwait, epoll_pwait2 \-
-wait for an I/O event on an epoll file descriptor
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/epoll.h>
-.PP
-.BI "int epoll_wait(int " epfd ", struct epoll_event *" events ,
-.BI " int " maxevents ", int " timeout );
-.BI "int epoll_pwait(int " epfd ", struct epoll_event *" events ,
-.BI " int " maxevents ", int " timeout ,
-.BI " const sigset_t *_Nullable " sigmask );
-.BI "int epoll_pwait2(int " epfd ", struct epoll_event *" events ,
-.BI " int " maxevents ", \
-const struct timespec *_Nullable " timeout ,
-.BI " const sigset_t *_Nullable " sigmask );
-.fi
-.SH DESCRIPTION
-The
-.BR epoll_wait ()
-system call waits for events on the
-.BR epoll (7)
-instance referred to by the file descriptor
-.IR epfd .
-The buffer pointed to by
-.I events
-is used to return information from the ready list
-about file descriptors in the interest list that
-have some events available.
-Up to
-.I maxevents
-are returned by
-.BR epoll_wait ().
-The
-.I maxevents
-argument must be greater than zero.
-.PP
-The
-.I timeout
-argument specifies the number of milliseconds that
-.BR epoll_wait ()
-will block.
-Time is measured against the
-.B CLOCK_MONOTONIC
-clock.
-.PP
-A call to
-.BR epoll_wait ()
-will block until either:
-.IP \[bu] 3
-a file descriptor delivers an event;
-.IP \[bu]
-the call is interrupted by a signal handler; or
-.IP \[bu]
-the timeout expires.
-.PP
-Note that the
-.I timeout
-interval will be rounded up to the system clock granularity,
-and kernel scheduling delays mean that the blocking interval
-may overrun by a small amount.
-Specifying a
-.I timeout
-of \-1 causes
-.BR epoll_wait ()
-to block indefinitely, while specifying a
-.I timeout
-equal to zero cause
-.BR epoll_wait ()
-to return immediately, even if no events are available.
-.PP
-The
-.I struct epoll_event
-is described in
-.BR epoll_event (3type).
-.PP
-The
-.I data
-field of each returned
-.I epoll_event
-structure contains the same data as was specified
-in the most recent call to
-.BR epoll_ctl (2)
-.RB ( EPOLL_CTL_ADD ", " EPOLL_CTL_MOD )
-for the corresponding open file descriptor.
-.PP
-The
-.I events
-field is a bit mask that indicates the events that have occurred for the
-corresponding open file description.
-See
-.BR epoll_ctl (2)
-for a list of the bits that may appear in this mask.
-.\"
-.SS epoll_pwait()
-The relationship between
-.BR epoll_wait ()
-and
-.BR epoll_pwait ()
-is analogous to the relationship between
-.BR select (2)
-and
-.BR pselect (2):
-like
-.BR pselect (2),
-.BR epoll_pwait ()
-allows an application to safely wait until either a file descriptor
-becomes ready or until a signal is caught.
-.PP
-The following
-.BR epoll_pwait ()
-call:
-.PP
-.in +4n
-.EX
-ready = epoll_pwait(epfd, &events, maxevents, timeout, &sigmask);
-.EE
-.in
-.PP
-is equivalent to
-.I atomically
-executing the following calls:
-.PP
-.in +4n
-.EX
-sigset_t origmask;
-\&
-pthread_sigmask(SIG_SETMASK, &sigmask, &origmask);
-ready = epoll_wait(epfd, &events, maxevents, timeout);
-pthread_sigmask(SIG_SETMASK, &origmask, NULL);
-.EE
-.in
-.PP
-The
-.I sigmask
-argument may be specified as NULL, in which case
-.BR epoll_pwait ()
-is equivalent to
-.BR epoll_wait ().
-.\"
-.SS epoll_pwait2()
-The
-.BR epoll_pwait2 ()
-system call is equivalent to
-.BR epoll_pwait ()
-except for the
-.I timeout
-argument.
-It takes an argument of type
-.I timespec
-to be able to specify nanosecond resolution timeout.
-This argument functions the same as in
-.BR pselect (2)
-and
-.BR ppoll (2).
-If
-.I timeout
-is NULL, then
-.BR epoll_pwait2 ()
-can block indefinitely.
-.SH RETURN VALUE
-On success,
-.BR epoll_wait ()
-returns the number of file descriptors ready for the requested I/O, or zero
-if no file descriptor became ready during the requested
-.I timeout
-milliseconds.
-On failure,
-.BR epoll_wait ()
-returns \-1 and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I epfd
-is not a valid file descriptor.
-.TP
-.B EFAULT
-The memory area pointed to by
-.I events
-is not accessible with write permissions.
-.TP
-.B EINTR
-The call was interrupted by a signal handler before either (1) any of the
-requested events occurred or (2) the
-.I timeout
-expired; see
-.BR signal (7).
-.TP
-.B EINVAL
-.I epfd
-is not an
-.B epoll
-file descriptor, or
-.I maxevents
-is less than or equal to zero.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-.TP
-.BR epoll_wait ()
-Linux 2.6,
-.\" To be precise: Linux 2.5.44.
-.\" The interface should be finalized by Linux 2.5.66.
-glibc 2.3.2.
-.TP
-.BR epoll_pwait ()
-Linux 2.6.19,
-glibc 2.6.
-.TP
-.BR epoll_pwait2 ()
-Linux 5.11.
-.SH NOTES
-While one thread is blocked in a call to
-.BR epoll_wait (),
-it is possible for another thread to add a file descriptor to the waited-upon
-.B epoll
-instance.
-If the new file descriptor becomes ready,
-it will cause the
-.BR epoll_wait ()
-call to unblock.
-.PP
-If more than
-.I maxevents
-file descriptors are ready when
-.BR epoll_wait ()
-is called, then successive
-.BR epoll_wait ()
-calls will round robin through the set of ready file descriptors.
-This behavior helps avoid starvation scenarios,
-where a process fails to notice that additional file descriptors
-are ready because it focuses on a set of file descriptors that
-are already known to be ready.
-.PP
-Note that it is possible to call
-.BR epoll_wait ()
-on an
-.B epoll
-instance whose interest list is currently empty
-(or whose interest list becomes empty because file descriptors are closed
-or removed from the interest in another thread).
-The call will block until some file descriptor is later added to the
-interest list (in another thread) and that file descriptor becomes ready.
-.SS C library/kernel differences
-The raw
-.BR epoll_pwait ()
-and
-.BR epoll_pwait2 ()
-system calls have a sixth argument,
-.IR "size_t sigsetsize" ,
-which specifies the size in bytes of the
-.I sigmask
-argument.
-The glibc
-.BR epoll_pwait ()
-wrapper function specifies this argument as a fixed value
-(equal to
-.IR sizeof(sigset_t) ).
-.SH BUGS
-Before Linux 2.6.37, a
-.I timeout
-value larger than approximately
-.I LONG_MAX / HZ
-milliseconds is treated as \-1 (i.e., infinity).
-Thus, for example, on a system where
-.I sizeof(long)
-is 4 and the kernel
-.I HZ
-value is 1000,
-this means that timeouts greater than 35.79 minutes are treated as infinity.
-.SH SEE ALSO
-.BR epoll_create (2),
-.BR epoll_ctl (2),
-.BR epoll (7)
diff --git a/man2/eventfd.2 b/man2/eventfd.2
deleted file mode 100644
index e540e3b43..000000000
--- a/man2/eventfd.2
+++ /dev/null
@@ -1,445 +0,0 @@
-'\" t
-.\" Copyright (C) 2008 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" starting from a version by Davide Libenzi <davidel@xmailserver.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 2008-10-10, mtk: describe eventfd2(), and EFD_NONBLOCK and EFD_CLOEXEC
-.\"
-.TH eventfd 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-eventfd \- create a file descriptor for event notification
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/eventfd.h>
-.PP
-.BI "int eventfd(unsigned int " initval ", int " flags );
-.fi
-.SH DESCRIPTION
-.BR eventfd ()
-creates an "eventfd object" that can be used as
-an event wait/notify mechanism by user-space applications,
-and by the kernel to notify user-space applications of events.
-The object contains an unsigned 64-bit integer
-.RI ( uint64_t )
-counter that is maintained by the kernel.
-This counter is initialized with the value specified in the argument
-.IR initval .
-.PP
-As its return value,
-.BR eventfd ()
-returns a new file descriptor that can be used to refer to the
-eventfd object.
-.PP
-The following values may be bitwise ORed in
-.I flags
-to change the behavior of
-.BR eventfd ():
-.TP
-.BR EFD_CLOEXEC " (since Linux 2.6.27)"
-Set the close-on-exec
-.RB ( FD_CLOEXEC )
-flag on the new file descriptor.
-See the description of the
-.B O_CLOEXEC
-flag in
-.BR open (2)
-for reasons why this may be useful.
-.TP
-.BR EFD_NONBLOCK " (since Linux 2.6.27)"
-Set the
-.B O_NONBLOCK
-file status flag on the open file description (see
-.BR open (2))
-referred to by the new file descriptor.
-Using this flag saves extra calls to
-.BR fcntl (2)
-to achieve the same result.
-.TP
-.BR EFD_SEMAPHORE " (since Linux 2.6.30)"
-Provide semaphore-like semantics for reads from the new file descriptor.
-See below.
-.PP
-Up to Linux 2.6.26, the
-.I flags
-argument is unused, and must be specified as zero.
-.PP
-The following operations can be performed on the file descriptor returned by
-.BR eventfd ():
-.TP
-.BR read (2)
-Each successful
-.BR read (2)
-returns an 8-byte integer.
-A
-.BR read (2)
-fails with the error
-.B EINVAL
-if the size of the supplied buffer is less than 8 bytes.
-.IP
-The value returned by
-.BR read (2)
-is in host byte order\[em]that is,
-the native byte order for integers on the host machine.
-.IP
-The semantics of
-.BR read (2)
-depend on whether the eventfd counter currently has a nonzero value
-and whether the
-.B EFD_SEMAPHORE
-flag was specified when creating the eventfd file descriptor:
-.RS
-.IP \[bu] 3
-If
-.B EFD_SEMAPHORE
-was not specified and the eventfd counter has a nonzero value, then a
-.BR read (2)
-returns 8 bytes containing that value,
-and the counter's value is reset to zero.
-.IP \[bu]
-If
-.B EFD_SEMAPHORE
-was specified and the eventfd counter has a nonzero value, then a
-.BR read (2)
-returns 8 bytes containing the value 1,
-and the counter's value is decremented by 1.
-.IP \[bu]
-If the eventfd counter is zero at the time of the call to
-.BR read (2),
-then the call either blocks until the counter becomes nonzero
-(at which time, the
-.BR read (2)
-proceeds as described above)
-or fails with the error
-.B EAGAIN
-if the file descriptor has been made nonblocking.
-.RE
-.TP
-.BR write (2)
-A
-.BR write (2)
-call adds the 8-byte integer value supplied in its
-buffer to the counter.
-The maximum value that may be stored in the counter is the largest
-unsigned 64-bit value minus 1 (i.e., 0xfffffffffffffffe).
-If the addition would cause the counter's value to exceed
-the maximum, then the
-.BR write (2)
-either blocks until a
-.BR read (2)
-is performed on the file descriptor,
-or fails with the error
-.B EAGAIN
-if the file descriptor has been made nonblocking.
-.IP
-A
-.BR write (2)
-fails with the error
-.B EINVAL
-if the size of the supplied buffer is less than 8 bytes,
-or if an attempt is made to write the value 0xffffffffffffffff.
-.TP
-.BR poll "(2), " select "(2) (and similar)"
-The returned file descriptor supports
-.BR poll (2)
-(and analogously
-.BR epoll (7))
-and
-.BR select (2),
-as follows:
-.RS
-.IP \[bu] 3
-The file descriptor is readable
-(the
-.BR select (2)
-.I readfds
-argument; the
-.BR poll (2)
-.B POLLIN
-flag)
-if the counter has a value greater than 0.
-.IP \[bu]
-The file descriptor is writable
-(the
-.BR select (2)
-.I writefds
-argument; the
-.BR poll (2)
-.B POLLOUT
-flag)
-if it is possible to write a value of at least "1" without blocking.
-.IP \[bu]
-If an overflow of the counter value was detected,
-then
-.BR select (2)
-indicates the file descriptor as being both readable and writable, and
-.BR poll (2)
-returns a
-.B POLLERR
-event.
-As noted above,
-.BR write (2)
-can never overflow the counter.
-However an overflow can occur if 2\[ha]64
-eventfd "signal posts" were performed by the KAIO
-subsystem (theoretically possible, but practically unlikely).
-If an overflow has occurred, then
-.BR read (2)
-will return that maximum
-.I uint64_t
-value (i.e., 0xffffffffffffffff).
-.RE
-.IP
-The eventfd file descriptor also supports the other file-descriptor
-multiplexing APIs:
-.BR pselect (2)
-and
-.BR ppoll (2).
-.TP
-.BR close (2)
-When the file descriptor is no longer required it should be closed.
-When all file descriptors associated with the same eventfd object
-have been closed, the resources for object are freed by the kernel.
-.PP
-A copy of the file descriptor created by
-.BR eventfd ()
-is inherited by the child produced by
-.BR fork (2).
-The duplicate file descriptor is associated with the same
-eventfd object.
-File descriptors created by
-.BR eventfd ()
-are preserved across
-.BR execve (2),
-unless the close-on-exec flag has been set.
-.SH RETURN VALUE
-On success,
-.BR eventfd ()
-returns a new eventfd file descriptor.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-An unsupported value was specified in
-.IR flags .
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been
-reached.
-.TP
-.B ENODEV
-.\" Note from Davide:
-.\" The ENODEV error is basically never going to happen if
-.\" the kernel boots correctly. That error happen only if during
-.\" the kernel initialization, some error occur in the anonymous
-.\" inode source initialization.
-Could not mount (internal) anonymous inode device.
-.TP
-.B ENOMEM
-There was insufficient memory to create a new
-eventfd file descriptor.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR eventfd ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-.SS C library/kernel differences
-There are two underlying Linux system calls:
-.BR eventfd ()
-and the more recent
-.BR eventfd2 ().
-The former system call does not implement a
-.I flags
-argument.
-The latter system call implements the
-.I flags
-values described above.
-The glibc wrapper function will use
-.BR eventfd2 ()
-where it is available.
-.SS Additional glibc features
-The GNU C library defines an additional type,
-and two functions that attempt to abstract some of the details of
-reading and writing on an eventfd file descriptor:
-.PP
-.in +4n
-.EX
-typedef uint64_t eventfd_t;
-\&
-int eventfd_read(int fd, eventfd_t *value);
-int eventfd_write(int fd, eventfd_t value);
-.EE
-.in
-.PP
-The functions perform the read and write operations on an
-eventfd file descriptor,
-returning 0 if the correct number of bytes was transferred,
-or \-1 otherwise.
-.SH STANDARDS
-Linux, GNU.
-.SH HISTORY
-.TP
-.BR eventfd ()
-Linux 2.6.22,
-glibc 2.8.
-.\" eventfd() is in glibc 2.7, but reportedly does not build
-.TP
-.BR eventfd2 ()
-Linux 2.6.27 (see VERSIONS).
-Since glibc 2.9, the
-.BR eventfd ()
-wrapper will employ the
-.BR eventfd2 ()
-system call, if it is supported by the kernel.
-.SH NOTES
-Applications can use an eventfd file descriptor instead of a pipe (see
-.BR pipe (2))
-in all cases where a pipe is used simply to signal events.
-The kernel overhead of an eventfd file descriptor
-is much lower than that of a pipe,
-and only one file descriptor is
-required (versus the two required for a pipe).
-.PP
-When used in the kernel, an eventfd
-file descriptor can provide a bridge from kernel to user space, allowing,
-for example, functionalities like KAIO (kernel AIO)
-.\" or eventually syslets/threadlets
-to signal to a file descriptor that some operation is complete.
-.PP
-A key point about an eventfd file descriptor is that it can be
-monitored just like any other file descriptor using
-.BR select (2),
-.BR poll (2),
-or
-.BR epoll (7).
-This means that an application can simultaneously monitor the
-readiness of "traditional" files and the readiness of other
-kernel mechanisms that support the eventfd interface.
-(Without the
-.BR eventfd ()
-interface, these mechanisms could not be multiplexed via
-.BR select (2),
-.BR poll (2),
-or
-.BR epoll (7).)
-.PP
-The current value of an eventfd counter can be viewed
-via the entry for the corresponding file descriptor in the process's
-.IR /proc/ pid /fdinfo
-directory.
-See
-.BR proc (5)
-for further details.
-.SH EXAMPLES
-The following program creates an eventfd file descriptor
-and then forks to create a child process.
-While the parent briefly sleeps,
-the child writes each of the integers supplied in the program's
-command-line arguments to the eventfd file descriptor.
-When the parent has finished sleeping,
-it reads from the eventfd file descriptor.
-.PP
-The following shell session shows a sample run of the program:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out 1 2 4 7 14"
-Child writing 1 to efd
-Child writing 2 to efd
-Child writing 4 to efd
-Child writing 7 to efd
-Child writing 14 to efd
-Child completed write loop
-Parent about to read
-Parent read 28 (0x1c) from efd
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (eventfd.c)
-.EX
-#include <err.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/eventfd.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int efd;
- uint64_t u;
- ssize_t s;
-\&
- if (argc < 2) {
- fprintf(stderr, "Usage: %s <num>...\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- efd = eventfd(0, 0);
- if (efd == \-1)
- err(EXIT_FAILURE, "eventfd");
-\&
- switch (fork()) {
- case 0:
- for (size_t j = 1; j < argc; j++) {
- printf("Child writing %s to efd\en", argv[j]);
- u = strtoull(argv[j], NULL, 0);
- /* strtoull() allows various bases */
- s = write(efd, &u, sizeof(uint64_t));
- if (s != sizeof(uint64_t))
- err(EXIT_FAILURE, "write");
- }
- printf("Child completed write loop\en");
-\&
- exit(EXIT_SUCCESS);
-\&
- default:
- sleep(2);
-\&
- printf("Parent about to read\en");
- s = read(efd, &u, sizeof(uint64_t));
- if (s != sizeof(uint64_t))
- err(EXIT_FAILURE, "read");
- printf("Parent read %"PRIu64" (%#"PRIx64") from efd\en", u, u);
- exit(EXIT_SUCCESS);
-\&
- case \-1:
- err(EXIT_FAILURE, "fork");
- }
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR futex (2),
-.BR pipe (2),
-.BR poll (2),
-.BR read (2),
-.BR select (2),
-.BR signalfd (2),
-.BR timerfd_create (2),
-.BR write (2),
-.BR epoll (7),
-.BR sem_overview (7)
diff --git a/man2/eventfd2.2 b/man2/eventfd2.2
deleted file mode 100644
index eddfaa8a1..000000000
--- a/man2/eventfd2.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/eventfd.2
diff --git a/man2/execve.2 b/man2/execve.2
deleted file mode 100644
index 538ebb90c..000000000
--- a/man2/execve.2
+++ /dev/null
@@ -1,884 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\" and Copyright (c) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified 1993-07-21 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1994-08-21 by Michael Chastain <mec@shell.portal.com>:
-.\" Modified 1997-01-31 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1999-11-12 by Urs Thuermann <urs@isnogud.escape.de>
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" 2006-09-04 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added list of process attributes that are not preserved on exec().
-.\" 2007-09-14 Ollie Wild <aaw@google.com>, mtk
-.\" Add text describing limits on command-line arguments + environment
-.\"
-.TH execve 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-execve \- execute program
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int execve(const char *" pathname ", char *const _Nullable " argv [],
-.BI " char *const _Nullable " envp []);
-.fi
-.SH DESCRIPTION
-.BR execve ()
-executes the program referred to by \fIpathname\fP.
-This causes the program that is currently being run by the calling process
-to be replaced with a new program, with newly initialized stack, heap,
-and (initialized and uninitialized) data segments.
-.PP
-\fIpathname\fP must be either a binary executable, or a script
-starting with a line of the form:
-.PP
-.in +4n
-.EX
-\fB#!\fP\fIinterpreter \fP[optional-arg]
-.EE
-.in
-.PP
-For details of the latter case, see "Interpreter scripts" below.
-.PP
-.I argv
-is an array of pointers to strings passed to the new program
-as its command-line arguments.
-By convention, the first of these strings (i.e.,
-.IR argv[0] )
-should contain the filename associated with the file being executed.
-The
-.I argv
-array must be terminated by a NULL pointer.
-(Thus, in the new program,
-.I argv[argc]
-will be NULL.)
-.PP
-.I envp
-is an array of pointers to strings, conventionally of the form
-.BR key=value ,
-which are passed as the environment of the new program.
-The
-.I envp
-array must be terminated by a NULL pointer.
-.PP
-This manual page describes the Linux system call in detail;
-for an overview of the nomenclature and the many, often preferable,
-standardised variants of this function provided by libc,
-including ones that search the
-.B PATH
-environment variable, see
-.BR exec (3).
-.PP
-The argument vector and environment can be accessed by the
-new program's main function, when it is defined as:
-.PP
-.in +4n
-.EX
-int main(int argc, char *argv[], char *envp[])
-.EE
-.in
-.PP
-Note, however, that the use of a third argument to the main function
-is not specified in POSIX.1;
-according to POSIX.1,
-the environment should be accessed via the external variable
-.BR environ (7).
-.PP
-.BR execve ()
-does not return on success, and the text, initialized data,
-uninitialized data (bss), and stack of the calling process are overwritten
-according to the contents of the newly loaded program.
-.PP
-If the current program is being ptraced, a \fBSIGTRAP\fP signal is sent to it
-after a successful
-.BR execve ().
-.PP
-If the set-user-ID bit is set on the program file referred to by
-\fIpathname\fP,
-then the effective user ID of the calling process is changed
-to that of the owner of the program file.
-Similarly, if the set-group-ID bit is set on the program file,
-then the effective group ID of the calling
-process is set to the group of the program file.
-.PP
-The aforementioned transformations of the effective IDs are
-.I not
-performed (i.e., the set-user-ID and set-group-ID bits are ignored)
-if any of the following is true:
-.IP \[bu] 3
-the
-.I no_new_privs
-attribute is set for the calling thread (see
-.BR prctl (2));
-.IP \[bu]
-the underlying filesystem is mounted
-.I nosuid
-(the
-.B MS_NOSUID
-flag for
-.BR mount (2));
-or
-.IP \[bu]
-the calling process is being ptraced.
-.PP
-The capabilities of the program file (see
-.BR capabilities (7))
-are also ignored if any of the above are true.
-.PP
-The effective user ID of the process is copied to the saved set-user-ID;
-similarly, the effective group ID is copied to the saved set-group-ID.
-This copying takes place after any effective ID changes that occur
-because of the set-user-ID and set-group-ID mode bits.
-.PP
-The process's real UID and real GID, as well as its supplementary group IDs,
-are unchanged by a call to
-.BR execve ().
-.PP
-If the executable is an a.out dynamically linked
-binary executable containing
-shared-library stubs, the Linux dynamic linker
-.BR ld.so (8)
-is called at the start of execution to bring
-needed shared objects into memory
-and link the executable with them.
-.PP
-If the executable is a dynamically linked ELF executable, the
-interpreter named in the PT_INTERP segment is used to load the needed
-shared objects.
-This interpreter is typically
-.I /lib/ld\-linux.so.2
-for binaries linked with glibc (see
-.BR ld\-linux.so (8)).
-.\"
-.SS Effect on process attributes
-All process attributes are preserved during an
-.BR execve (),
-except the following:
-.IP \[bu] 3
-The dispositions of any signals that are being caught are
-reset to the default
-.RB ( signal (7)).
-.IP \[bu]
-Any alternate signal stack is not preserved
-.RB ( sigaltstack (2)).
-.IP \[bu]
-Memory mappings are not preserved
-.RB ( mmap (2)).
-.IP \[bu]
-Attached System\ V shared memory segments are detached
-.RB ( shmat (2)).
-.IP \[bu]
-POSIX shared memory regions are unmapped
-.RB ( shm_open (3)).
-.IP \[bu]
-Open POSIX message queue descriptors are closed
-.RB ( mq_overview (7)).
-.IP \[bu]
-Any open POSIX named semaphores are closed
-.RB ( sem_overview (7)).
-.IP \[bu]
-POSIX timers are not preserved
-.RB ( timer_create (2)).
-.IP \[bu]
-Any open directory streams are closed
-.RB ( opendir (3)).
-.IP \[bu]
-Memory locks are not preserved
-.RB ( mlock (2),
-.BR mlockall (2)).
-.IP \[bu]
-Exit handlers are not preserved
-.RB ( atexit (3),
-.BR on_exit (3)).
-.IP \[bu]
-The floating-point environment is reset to the default (see
-.BR fenv (3)).
-.PP
-The process attributes in the preceding list are all specified
-in POSIX.1.
-The following Linux-specific process attributes are also
-not preserved during an
-.BR execve ():
-.IP \[bu] 3
-The process's "dumpable" attribute is set to the value 1,
-unless a set-user-ID program, a set-group-ID program,
-or a program with capabilities is being executed,
-in which case the dumpable flag may instead be reset to the value in
-.IR /proc/sys/fs/suid_dumpable ,
-in the circumstances described under
-.B PR_SET_DUMPABLE
-in
-.BR prctl (2).
-Note that changes to the "dumpable" attribute may cause ownership
-of files in the process's
-.IR /proc/ pid
-directory to change to
-.IR root:root ,
-as described in
-.BR proc (5).
-.IP \[bu]
-The
-.BR prctl (2)
-.B PR_SET_KEEPCAPS
-flag is cleared.
-.IP \[bu]
-(Since Linux 2.4.36 / 2.6.23)
-If a set-user-ID or set-group-ID program is being executed,
-then the parent death signal set by
-.BR prctl (2)
-.B PR_SET_PDEATHSIG
-flag is cleared.
-.IP \[bu]
-The process name, as set by
-.BR prctl (2)
-.B PR_SET_NAME
-(and displayed by
-.IR "ps\ \-o comm" ),
-is reset to the name of the new executable file.
-.IP \[bu]
-The
-.B SECBIT_KEEP_CAPS
-.I securebits
-flag is cleared.
-See
-.BR capabilities (7).
-.IP \[bu]
-The termination signal is reset to
-.B SIGCHLD
-(see
-.BR clone (2)).
-.IP \[bu]
-The file descriptor table is unshared, undoing the effect of the
-.B CLONE_FILES
-flag of
-.BR clone (2).
-.PP
-Note the following further points:
-.IP \[bu] 3
-All threads other than the calling thread are destroyed during an
-.BR execve ().
-Mutexes, condition variables, and other pthreads objects are not preserved.
-.IP \[bu]
-The equivalent of \fIsetlocale(LC_ALL, "C")\fP
-is executed at program start-up.
-.IP \[bu]
-POSIX.1 specifies that the dispositions of any signals that
-are ignored or set to the default are left unchanged.
-POSIX.1 specifies one exception: if
-.B SIGCHLD
-is being ignored,
-then an implementation may leave the disposition unchanged or
-reset it to the default; Linux does the former.
-.IP \[bu]
-Any outstanding asynchronous I/O operations are canceled
-.RB ( aio_read (3),
-.BR aio_write (3)).
-.IP \[bu]
-For the handling of capabilities during
-.BR execve (),
-see
-.BR capabilities (7).
-.IP \[bu]
-By default, file descriptors remain open across an
-.BR execve ().
-File descriptors that are marked close-on-exec are closed;
-see the description of
-.B FD_CLOEXEC
-in
-.BR fcntl (2).
-(If a file descriptor is closed, this will cause the release
-of all record locks obtained on the underlying file by this process.
-See
-.BR fcntl (2)
-for details.)
-POSIX.1 says that if file descriptors 0, 1, and 2 would
-otherwise be closed after a successful
-.BR execve (),
-and the process would gain privilege because the set-user-ID or
-set-group-ID mode bit was set on the executed file,
-then the system may open an unspecified file for each of these
-file descriptors.
-As a general principle, no portable program, whether privileged or not,
-can assume that these three file descriptors will remain
-closed across an
-.BR execve ().
-.\" On Linux it appears that these file descriptors are
-.\" always open after an execve(), and it looks like
-.\" Solaris 8 and FreeBSD 6.1 are the same. -- mtk, 30 Apr 2007
-.SS Interpreter scripts
-An interpreter script is a text file that has execute
-permission enabled and whose first line is of the form:
-.PP
-.in +4n
-.EX
-\fB#!\fP\fIinterpreter \fP[optional-arg]
-.EE
-.in
-.PP
-The
-.I interpreter
-must be a valid pathname for an executable file.
-.PP
-If the
-.I pathname
-argument of
-.BR execve ()
-specifies an interpreter script, then
-.I interpreter
-will be invoked with the following arguments:
-.PP
-.in +4n
-.EX
-\fIinterpreter\fP [optional-arg] \fIpathname\fP arg...
-.EE
-.in
-.PP
-where
-.I pathname
-is the pathname of the file specified as the first argument of
-.BR execve (),
-and
-.I arg...
-is the series of words pointed to by the
-.I argv
-argument of
-.BR execve (),
-starting at
-.IR argv[1] .
-Note that there is no way to get the
-.I argv[0]
-that was passed to the
-.BR execve ()
-call.
-.\" See the P - preserve-argv[0] option.
-.\" Documentation/admin-guide/binfmt-misc.rst
-.\" https://www.kernel.org/doc/html/latest/admin-guide/binfmt-misc.html
-.PP
-For portable use,
-.I optional-arg
-should either be absent, or be specified as a single word (i.e., it
-should not contain white space); see NOTES below.
-.PP
-Since Linux 2.6.28,
-.\" commit bf2a9a39639b8b51377905397a5005f444e9a892
-the kernel permits the interpreter of a script to itself be a script.
-This permission is recursive, up to a limit of four recursions,
-so that the interpreter may be a script which is interpreted by a script,
-and so on.
-.SS Limits on size of arguments and environment
-Most UNIX implementations impose some limit on the total size
-of the command-line argument
-.RI ( argv )
-and environment
-.RI ( envp )
-strings that may be passed to a new program.
-POSIX.1 allows an implementation to advertise this limit using the
-.B ARG_MAX
-constant (either defined in
-.I <limits.h>
-or available at run time using the call
-.IR "sysconf(_SC_ARG_MAX)" ).
-.PP
-Before Linux 2.6.23, the memory used to store the
-environment and argument strings was limited to 32 pages
-(defined by the kernel constant
-.BR MAX_ARG_PAGES ).
-On architectures with a 4-kB page size,
-this yields a maximum size of 128\ kB.
-.PP
-On Linux 2.6.23 and later, most architectures support a size limit
-derived from the soft
-.B RLIMIT_STACK
-resource limit (see
-.BR getrlimit (2))
-that is in force at the time of the
-.BR execve ()
-call.
-(Architectures with no memory management unit are excepted:
-they maintain the limit that was in effect before Linux 2.6.23.)
-This change allows programs to have a much larger
-argument and/or environment list.
-.\" For some background on the changes to ARG_MAX in Linux 2.6.23 and
-.\" Linux 2.6.25, see:
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=5786
-.\" http://bugzilla.kernel.org/show_bug.cgi?id=10095
-.\" http://thread.gmane.org/gmane.linux.kernel/646709/focus=648101,
-.\" checked into Linux 2.6.25 as commit a64e715fc74b1a7dcc5944f848acc38b2c4d4ee2.
-For these architectures, the total size is limited to 1/4 of the allowed
-stack size.
-(Imposing the 1/4-limit
-ensures that the new program always has some stack space.)
-.\" Ollie: That doesn't include the lists of pointers, though,
-.\" so the actual usage is a bit higher (1 pointer per argument).
-Additionally, the total size is limited to 3/4 of the value
-of the kernel constant
-.B _STK_LIM
-(8 MiB).
-Since Linux 2.6.25,
-the kernel also places a floor of 32 pages on this size limit,
-so that, even when
-.B RLIMIT_STACK
-is set very low,
-applications are guaranteed to have at least as much argument and
-environment space as was provided by Linux 2.6.22 and earlier.
-(This guarantee was not provided in Linux 2.6.23 and 2.6.24.)
-Additionally, the limit per string is 32 pages (the kernel constant
-.BR MAX_ARG_STRLEN ),
-and the maximum number of strings is 0x7FFFFFFF.
-.SH RETURN VALUE
-On success,
-.BR execve ()
-does not return, on error \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B E2BIG
-The total number of bytes in the environment
-.RI ( envp )
-and argument list
-.RI ( argv )
-is too large.
-.TP
-.B EACCES
-Search permission is denied on a component of the path prefix of
-.I pathname
-or the name of a script interpreter.
-(See also
-.BR path_resolution (7).)
-.TP
-.B EACCES
-The file or a script interpreter is not a regular file.
-.TP
-.B EACCES
-Execute permission is denied for the file or a script or ELF interpreter.
-.TP
-.B EACCES
-The filesystem is mounted
-.IR noexec .
-.TP
-.BR EAGAIN " (since Linux 3.1)"
-.\" commit 72fa59970f8698023045ab0713d66f3f4f96945c
-Having changed its real UID using one of the
-.BR set*uid ()
-calls, the caller was\[em]and is now still\[em]above its
-.B RLIMIT_NPROC
-resource limit (see
-.BR setrlimit (2)).
-For a more detailed explanation of this error, see NOTES.
-.TP
-.B EFAULT
-.I pathname
-or one of the pointers in the vectors
-.I argv
-or
-.I envp
-points outside your accessible address space.
-.TP
-.B EINVAL
-An ELF executable had more than one PT_INTERP segment (i.e., tried to
-name more than one interpreter).
-.TP
-.B EIO
-An I/O error occurred.
-.TP
-.B EISDIR
-An ELF interpreter was a directory.
-.TP
-.B ELIBBAD
-An ELF interpreter was not in a recognized format.
-.TP
-.B ELOOP
-Too many symbolic links were encountered in resolving
-.I pathname
-or the name of a script or ELF interpreter.
-.TP
-.B ELOOP
-The maximum recursion limit was reached during recursive script
-interpretation (see "Interpreter scripts", above).
-Before Linux 3.8,
-.\" commit d740269867021faf4ce38a449353d2b986c34a67
-the error produced for this case was
-.BR ENOEXEC .
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENAMETOOLONG
-.I pathname
-is too long.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOENT
-The file
-.I pathname
-or a script or ELF interpreter does not exist.
-.TP
-.B ENOEXEC
-An executable is not in a recognized format, is for the wrong
-architecture, or has some other format error that means it cannot be
-executed.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOTDIR
-A component of the path prefix of
-.I pathname
-or a script or ELF interpreter is not a directory.
-.TP
-.B EPERM
-The filesystem is mounted
-.IR nosuid ,
-the user is not the superuser,
-and the file has the set-user-ID or set-group-ID bit set.
-.TP
-.B EPERM
-The process is being traced, the user is not the superuser and the
-file has the set-user-ID or set-group-ID bit set.
-.TP
-.B EPERM
-A "capability-dumb" applications would not obtain the full set of
-permitted capabilities granted by the executable file.
-See
-.BR capabilities (7).
-.TP
-.B ETXTBSY
-The specified executable was open for writing by one or more processes.
-.SH VERSIONS
-POSIX does not document the #! behavior, but it exists
-(with some variations) on other UNIX systems.
-.PP
-On Linux,
-.I argv
-and
-.I envp
-can be specified as NULL.
-In both cases, this has the same effect as specifying the argument
-as a pointer to a list containing a single null pointer.
-.B "Do not take advantage of this nonstandard and nonportable misfeature!"
-On many other UNIX systems, specifying
-.I argv
-as NULL will result in an error
-.RB ( EFAULT ).
-.I Some
-other UNIX systems treat the
-.I envp==NULL
-case the same as Linux.
-.\" e.g., EFAULT on Solaris 8 and FreeBSD 6.1; but
-.\" HP-UX 11 is like Linux -- mtk, Apr 2007
-.\" Bug filed 30 Apr 2007: http://bugzilla.kernel.org/show_bug.cgi?id=8408
-.\" Bug rejected (because fix would constitute an ABI change).
-.\"
-.PP
-POSIX.1 says that values returned by
-.BR sysconf (3)
-should be invariant over the lifetime of a process.
-However, since Linux 2.6.23, if the
-.B RLIMIT_STACK
-resource limit changes, then the value reported by
-.B _SC_ARG_MAX
-will also change,
-to reflect the fact that the limit on space for holding
-command-line arguments and environment variables has changed.
-.\"
-.SS Interpreter scripts
-The kernel imposes a maximum length on the text that follows the
-"#!" characters at the start of a script;
-characters beyond the limit are ignored.
-Before Linux 5.1, the limit is 127 characters.
-Since Linux 5.1,
-.\" commit 6eb3c3d0a52dca337e327ae8868ca1f44a712e02
-the limit is 255 characters.
-.PP
-The semantics of the
-.I optional-arg
-argument of an interpreter script vary across implementations.
-On Linux, the entire string following the
-.I interpreter
-name is passed as a single argument to the interpreter,
-and this string can include white space.
-However, behavior differs on some other systems.
-Some systems
-.\" e.g., Solaris 8
-use the first white space to terminate
-.IR optional-arg .
-On some systems,
-.\" e.g., FreeBSD before 6.0, but not FreeBSD 6.0 onward
-an interpreter script can have multiple arguments,
-and white spaces in
-.I optional-arg
-are used to delimit the arguments.
-.PP
-Linux (like most other modern UNIX systems)
-ignores the set-user-ID and set-group-ID bits on scripts.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.\" SVr4 documents additional error
-.\" conditions EAGAIN, EINTR, ELIBACC, ENOLINK, EMULTIHOP; POSIX does not
-.\" document ETXTBSY, EPERM, EFAULT, ELOOP, EIO, ENFILE, EMFILE, EINVAL,
-.\" EISDIR or ELIBBAD error conditions.
-.PP
-With UNIX\ V6, the argument list of an
-.BR exec ()
-call was ended by 0,
-while the argument list of
-.I main
-was ended by \-1.
-Thus, this argument list was not directly usable in a further
-.BR exec ()
-call.
-Since UNIX\ V7, both are NULL.
-.SH NOTES
-One sometimes sees
-.BR execve ()
-(and the related functions described in
-.BR exec (3))
-described as "executing a
-.I new
-process" (or similar).
-This is a highly misleading description:
-there is no new process;
-many attributes of the calling process remain unchanged
-(in particular, its PID).
-All that
-.BR execve ()
-does is arrange for an existing process (the calling process)
-to execute a new program.
-.PP
-Set-user-ID and set-group-ID processes can not be
-.BR ptrace (2)d.
-.PP
-The result of mounting a filesystem
-.I nosuid
-varies across Linux kernel versions:
-some will refuse execution of set-user-ID and set-group-ID
-executables when this would
-give the user powers they did not have already (and return
-.BR EPERM ),
-some will just ignore the set-user-ID and set-group-ID bits and
-.BR exec ()
-successfully.
-.PP
-In most cases where
-.BR execve ()
-fails, control returns to the original executable image,
-and the caller of
-.BR execve ()
-can then handle the error.
-However, in (rare) cases (typically caused by resource exhaustion),
-failure may occur past the point of no return:
-the original executable image has been torn down,
-but the new image could not be completely built.
-In such cases, the kernel kills the process with a
-.\" commit 19d860a140beac48a1377f179e693abe86a9dac9
-.B SIGSEGV
-.RB ( SIGKILL
-until Linux 3.17)
-signal.
-.SS execve() and EAGAIN
-A more detailed explanation of the
-.B EAGAIN
-error that can occur (since Linux 3.1) when calling
-.BR execve ()
-is as follows.
-.PP
-The
-.B EAGAIN
-error can occur when a
-.I preceding
-call to
-.BR setuid (2),
-.BR setreuid (2),
-or
-.BR setresuid (2)
-caused the real user ID of the process to change,
-and that change caused the process to exceed its
-.B RLIMIT_NPROC
-resource limit (i.e., the number of processes belonging
-to the new real UID exceeds the resource limit).
-From Linux 2.6.0 to Linux 3.0, this caused the
-.BR set*uid ()
-call to fail.
-(Before Linux 2.6,
-.\" commit 909cc4ae86f3380152a18e2a3c44523893ee11c4
-the resource limit was not imposed on processes that
-changed their user IDs.)
-.PP
-Since Linux 3.1, the scenario just described no longer causes the
-.BR set*uid ()
-call to fail,
-because it too often led to security holes where buggy applications
-didn't check the return status and assumed
-that\[em]if the caller had root privileges\[em]the call would always succeed.
-Instead, the
-.BR set*uid ()
-calls now successfully change the real UID,
-but the kernel sets an internal flag, named
-.BR PF_NPROC_EXCEEDED ,
-to note that the
-.B RLIMIT_NPROC
-resource limit has been exceeded.
-If the
-.B PF_NPROC_EXCEEDED
-flag is set and the resource limit is still
-exceeded at the time of a subsequent
-.BR execve ()
-call, that call fails with the error
-.BR EAGAIN .
-This kernel logic ensures that the
-.B RLIMIT_NPROC
-resource limit is still enforced for the
-common privileged daemon workflow\[em]namely,
-.BR fork (2)
-+
-.BR set*uid ()
-+
-.BR execve ().
-.PP
-If the resource limit was not still exceeded at the time of the
-.BR execve ()
-call
-(because other processes belonging to this real UID terminated between the
-.BR set*uid ()
-call and the
-.BR execve ()
-call), then the
-.BR execve ()
-call succeeds and the kernel clears the
-.B PF_NPROC_EXCEEDED
-process flag.
-The flag is also cleared if a subsequent call to
-.BR fork (2)
-by this process succeeds.
-.\"
-.\" .SH BUGS
-.\" Some Linux versions have failed to check permissions on ELF
-.\" interpreters. This is a security hole, because it allows users to
-.\" open any file, such as a rewinding tape device, for reading. Some
-.\" Linux versions have also had other security holes in
-.\" .BR execve ()
-.\" that could be exploited for denial of service by a suitably crafted
-.\" ELF binary. There are no known problems with Linux 2.0.34 or Linux 2.2.15.
-.SH EXAMPLES
-The following program is designed to be execed by the second program below.
-It just echoes its command-line arguments, one per line.
-.PP
-.in +4n
-.\" SRC BEGIN (myecho.c)
-.EX
-/* myecho.c */
-\&
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(int argc, char *argv[])
-{
- for (size_t j = 0; j < argc; j++)
- printf("argv[%zu]: %s\en", j, argv[j]);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.in
-.PP
-This program can be used to exec the program named in its command-line
-argument:
-.PP
-.in +4n
-.\" SRC BEGIN (execve.c)
-.EX
-/* execve.c */
-\&
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- static char *newargv[] = { NULL, "hello", "world", NULL };
- static char *newenviron[] = { NULL };
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s <file\-to\-exec>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- newargv[0] = argv[1];
-\&
- execve(argv[1], newargv, newenviron);
- perror("execve"); /* execve() returns only on error */
- exit(EXIT_FAILURE);
-}
-.EE
-.\" SRC END
-.in
-.PP
-We can use the second program to exec the first as follows:
-.PP
-.in +4n
-.EX
-.RB "$" " cc myecho.c \-o myecho"
-.RB "$" " cc execve.c \-o execve"
-.RB "$" " ./execve ./myecho"
-argv[0]: ./myecho
-argv[1]: hello
-argv[2]: world
-.EE
-.in
-.PP
-We can also use these programs to demonstrate the use of a script
-interpreter.
-To do this we create a script whose "interpreter" is our
-.I myecho
-program:
-.PP
-.in +4n
-.EX
-.RB "$" " cat > script"
-.B #!./myecho script\-arg
-.B \[ha]D
-.RB "$" " chmod +x script"
-.EE
-.in
-.PP
-We can then use our program to exec the script:
-.PP
-.in +4n
-.EX
-.RB "$" " ./execve ./script"
-argv[0]: ./myecho
-argv[1]: script\-arg
-argv[2]: ./script
-argv[3]: hello
-argv[4]: world
-.EE
-.in
-.SH SEE ALSO
-.BR chmod (2),
-.BR execveat (2),
-.BR fork (2),
-.BR get_robust_list (2),
-.BR ptrace (2),
-.BR exec (3),
-.BR fexecve (3),
-.BR getauxval (3),
-.BR getopt (3),
-.BR system (3),
-.BR capabilities (7),
-.BR credentials (7),
-.BR environ (7),
-.BR path_resolution (7),
-.BR ld.so (8)
diff --git a/man2/execveat.2 b/man2/execveat.2
deleted file mode 100644
index 2dc45c0fd..000000000
--- a/man2/execveat.2
+++ /dev/null
@@ -1,220 +0,0 @@
-.\" Copyright (c) 2014 Google, Inc., written by David Drysdale
-.\" and Copyright (c) 2015, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH execveat 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-execveat \- execute program relative to a directory file descriptor
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/fcntl.h>" " /* Definition of " AT_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int execveat(int " dirfd ", const char *" pathname ,
-.BI " char *const _Nullable " argv [],
-.BI " char *const _Nullable " envp [],
-.BI " int " flags );
-.fi
-.SH DESCRIPTION
-.\" commit 51f39a1f0cea1cacf8c787f652f26dfee9611874
-The
-.BR execveat ()
-system call executes the program referred to by the combination of
-.I dirfd
-and
-.IR pathname .
-It operates in exactly the same way as
-.BR execve (2),
-except for the differences described in this manual page.
-.PP
-If the pathname given in
-.I pathname
-is relative, then it is interpreted relative to the directory
-referred to by the file descriptor
-.I dirfd
-(rather than relative to the current working directory of
-the calling process, as is done by
-.BR execve (2)
-for a relative pathname).
-.PP
-If
-.I pathname
-is relative and
-.I dirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I pathname
-is interpreted relative to the current working
-directory of the calling process (like
-.BR execve (2)).
-.PP
-If
-.I pathname
-is absolute, then
-.I dirfd
-is ignored.
-.PP
-If
-.I pathname
-is an empty string and the
-.B AT_EMPTY_PATH
-flag is specified, then the file descriptor
-.I dirfd
-specifies the file to be executed (i.e.,
-.I dirfd
-refers to an executable file, rather than a directory).
-.PP
-The
-.I flags
-argument is a bit mask that can include zero or more of the following flags:
-.TP
-.B AT_EMPTY_PATH
-If
-.I pathname
-is an empty string, operate on the file referred to by
-.I dirfd
-(which may have been obtained using the
-.BR open (2)
-.B O_PATH
-flag).
-.TP
-.B AT_SYMLINK_NOFOLLOW
-If the file identified by
-.I dirfd
-and a non-NULL
-.I pathname
-is a symbolic link, then the call fails with the error
-.BR ELOOP .
-.SH RETURN VALUE
-On success,
-.BR execveat ()
-does not return.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-The same errors that occur for
-.BR execve (2)
-can also occur for
-.BR execveat ().
-The following additional errors can occur for
-.BR execveat ():
-.TP
-.I pathname
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B EINVAL
-Invalid flag specified in
-.IR flags .
-.TP
-.B ELOOP
-.I flags
-includes
-.B AT_SYMLINK_NOFOLLOW
-and the file identified by
-.I dirfd
-and a non-NULL
-.I pathname
-is a symbolic link.
-.TP
-.B ENOENT
-The program identified by
-.I dirfd
-and
-.I pathname
-requires the use of an interpreter program
-(such as a script starting with "#!"), but the file descriptor
-.I dirfd
-was opened with the
-.B O_CLOEXEC
-flag, with the result that
-the program file is inaccessible to the launched interpreter.
-See BUGS.
-.TP
-.B ENOTDIR
-.I pathname
-is relative and
-.I dirfd
-is a file descriptor referring to a file other than a directory.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 3.19,
-glibc 2.34.
-.SH NOTES
-In addition to the reasons explained in
-.BR openat (2),
-the
-.BR execveat ()
-system call is also needed to allow
-.BR fexecve (3)
-to be implemented on systems that do not have the
-.I /proc
-filesystem mounted.
-.PP
-When asked to execute a script file, the
-.I argv[0]
-that is passed to the script interpreter is a string of the form
-.I /dev/fd/N
-or
-.IR /dev/fd/N/P ,
-where
-.I N
-is the number of the file descriptor passed via the
-.I dirfd
-argument.
-A string of the first form occurs when
-.B AT_EMPTY_PATH
-is employed.
-A string of the second form occurs when the script is specified via both
-.I dirfd
-and
-.IR pathname ;
-in this case,
-.I P
-is the value given in
-.IR pathname .
-.PP
-For the same reasons described in
-.BR fexecve (3),
-the natural idiom when using
-.BR execveat ()
-is to set the close-on-exec flag on
-.IR dirfd .
-(But see BUGS.)
-.SH BUGS
-The
-.B ENOENT
-error described above means that it is not possible to set the
-close-on-exec flag on the file descriptor given to a call of the form:
-.PP
-.in +4n
-.EX
-execveat(fd, "", argv, envp, AT_EMPTY_PATH);
-.EE
-.in
-.PP
-However, the inability to set the close-on-exec flag means that a file
-descriptor referring to the script leaks through to the script itself.
-As well as wasting a file descriptor,
-this leakage can lead to file-descriptor exhaustion in scenarios
-where scripts recursively employ
-.BR execveat ().
-.\" For an example, see Michael Kerrisk's 2015-01-10 reply in this LKML
-.\" thread (http://thread.gmane.org/gmane.linux.kernel/1836105/focus=20229):
-.\"
-.\" Subject: [PATCHv10 man-pages 5/5] execveat.2: initial man page.\" for execveat(2
-.\" Date: Mon, 24 Nov 2014 11:53:59 +0000
-.SH SEE ALSO
-.BR execve (2),
-.BR openat (2),
-.BR fexecve (3)
diff --git a/man2/exit.2 b/man2/exit.2
deleted file mode 100644
index 9f9d2e763..000000000
--- a/man2/exit.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/_exit.2
diff --git a/man2/exit_group.2 b/man2/exit_group.2
deleted file mode 100644
index 073b5135b..000000000
--- a/man2/exit_group.2
+++ /dev/null
@@ -1,38 +0,0 @@
-.\" Copyright (C) 2004 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH exit_group 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-exit_group \- exit all threads in a process
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "[[noreturn]] void syscall(SYS_exit_group, int " status );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR exit_group (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-This system call terminates all threads
-in the calling process's thread group.
-.SH RETURN VALUE
-This system call does not return.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.5.35.
-.SH NOTES
-Since glibc 2.3, this is the system call invoked when the
-.BR _exit (2)
-wrapper function is called.
-.SH SEE ALSO
-.BR _exit (2)
diff --git a/man2/faccessat.2 b/man2/faccessat.2
deleted file mode 100644
index 9d4f76e5b..000000000
--- a/man2/faccessat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/access.2
diff --git a/man2/faccessat2.2 b/man2/faccessat2.2
deleted file mode 100644
index 9d4f76e5b..000000000
--- a/man2/faccessat2.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/access.2
diff --git a/man2/fadvise64.2 b/man2/fadvise64.2
deleted file mode 100644
index 53f54a121..000000000
--- a/man2/fadvise64.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/posix_fadvise.2
diff --git a/man2/fadvise64_64.2 b/man2/fadvise64_64.2
deleted file mode 100644
index 53f54a121..000000000
--- a/man2/fadvise64_64.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/posix_fadvise.2
diff --git a/man2/fallocate.2 b/man2/fallocate.2
deleted file mode 100644
index b9a788e4a..000000000
--- a/man2/fallocate.2
+++ /dev/null
@@ -1,481 +0,0 @@
-.\" Copyright (c) 2007 Silicon Graphics, Inc. All Rights Reserved
-.\" Written by Dave Chinner <dgc@sgi.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-only
-.\"
-.\" 2011-09-19: Added FALLOC_FL_PUNCH_HOLE
-.\" 2011-09-19: Substantial restructuring of the page
-.\"
-.TH fallocate 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fallocate \- manipulate file space
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <fcntl.h>
-.PP
-.BI "int fallocate(int " fd ", int " mode ", off_t " offset \
-", off_t " len ");"
-.fi
-.SH DESCRIPTION
-This is a nonportable, Linux-specific system call.
-For the portable, POSIX.1-specified method of ensuring that space
-is allocated for a file, see
-.BR posix_fallocate (3).
-.PP
-.BR fallocate ()
-allows the caller to directly manipulate the allocated disk space
-for the file referred to by
-.I fd
-for the byte range starting at
-.I offset
-and continuing for
-.I len
-bytes.
-.PP
-The
-.I mode
-argument determines the operation to be performed on the given range.
-Details of the supported operations are given in the subsections below.
-.SS Allocating disk space
-The default operation (i.e.,
-.I mode
-is zero) of
-.BR fallocate ()
-allocates the disk space within the range specified by
-.I offset
-and
-.IR len .
-The file size (as reported by
-.BR stat (2))
-will be changed if
-.IR offset + len
-is greater than the file size.
-Any subregion within the range specified by
-.I offset
-and
-.I len
-that did not contain data before the call will be initialized to zero.
-This default behavior closely resembles the behavior of the
-.BR posix_fallocate (3)
-library function,
-and is intended as a method of optimally implementing that function.
-.PP
-After a successful call, subsequent writes into the range specified by
-.I offset
-and
-.I len
-are guaranteed not to fail because of lack of disk space.
-.PP
-If the
-.B FALLOC_FL_KEEP_SIZE
-flag is specified in
-.IR mode ,
-the behavior of the call is similar,
-but the file size will not be changed even if
-.IR offset + len
-is greater than the file size.
-Preallocating zeroed blocks beyond the end of the file in this manner
-is useful for optimizing append workloads.
-.PP
-If the
-.B FALLOC_FL_UNSHARE_RANGE
-flag is specified in
-.IR mode ,
-shared file data extents will be made private to the file to guarantee
-that a subsequent write will not fail due to lack of space.
-Typically, this will be done by performing a copy-on-write operation on
-all shared data in the file.
-This flag may not be supported by all filesystems.
-.PP
-Because allocation is done in block size chunks,
-.BR fallocate ()
-may allocate a larger range of disk space than was specified.
-.SS Deallocating file space
-Specifying the
-.B FALLOC_FL_PUNCH_HOLE
-flag (available since Linux 2.6.38) in
-.I mode
-deallocates space (i.e., creates a hole)
-in the byte range starting at
-.I offset
-and continuing for
-.I len
-bytes.
-Within the specified range, partial filesystem blocks are zeroed,
-and whole filesystem blocks are removed from the file.
-After a successful call,
-subsequent reads from this range will return zeros.
-.PP
-The
-.B FALLOC_FL_PUNCH_HOLE
-flag must be ORed with
-.B FALLOC_FL_KEEP_SIZE
-in
-.IR mode ;
-in other words, even when punching off the end of the file, the file size
-(as reported by
-.BR stat (2))
-does not change.
-.PP
-Not all filesystems support
-.BR FALLOC_FL_PUNCH_HOLE ;
-if a filesystem doesn't support the operation, an error is returned.
-The operation is supported on at least the following filesystems:
-.IP \[bu] 3
-XFS (since Linux 2.6.38)
-.IP \[bu]
-ext4 (since Linux 3.0)
-.\" commit a4bb6b64e39abc0e41ca077725f2a72c868e7622
-.IP \[bu]
-Btrfs (since Linux 3.7)
-.IP \[bu]
-.BR tmpfs (5)
-(since Linux 3.5)
-.\" commit 83e4fa9c16e4af7122e31be3eca5d57881d236fe
-.IP \[bu]
-.BR gfs2 (5)
-(since Linux 4.16)
-.\" commit 4e56a6411fbce6f859566e17298114c2434391a4
-.SS Collapsing file space
-.\" commit 00f5e61998dd17f5375d9dfc01331f104b83f841
-Specifying the
-.B FALLOC_FL_COLLAPSE_RANGE
-flag (available since Linux 3.15) in
-.I mode
-removes a byte range from a file, without leaving a hole.
-The byte range to be collapsed starts at
-.I offset
-and continues for
-.I len
-bytes.
-At the completion of the operation,
-the contents of the file starting at the location
-.I offset+len
-will be appended at the location
-.IR offset ,
-and the file will be
-.I len
-bytes smaller.
-.PP
-A filesystem may place limitations on the granularity of the operation,
-in order to ensure efficient implementation.
-Typically,
-.I offset
-and
-.I len
-must be a multiple of the filesystem logical block size,
-which varies according to the filesystem type and configuration.
-If a filesystem has such a requirement,
-.BR fallocate ()
-fails with the error
-.B EINVAL
-if this requirement is violated.
-.PP
-If the region specified by
-.I offset
-plus
-.I len
-reaches or passes the end of file, an error is returned;
-instead, use
-.BR ftruncate (2)
-to truncate a file.
-.PP
-No other flags may be specified in
-.I mode
-in conjunction with
-.BR FALLOC_FL_COLLAPSE_RANGE .
-.PP
-As at Linux 3.15,
-.B FALLOC_FL_COLLAPSE_RANGE
-is supported by
-ext4 (only for extent-based files)
-.\" commit 9eb79482a97152930b113b51dff530aba9e28c8e
-and XFS.
-.\" commit e1d8fb88a64c1f8094b9f6c3b6d2d9e6719c970d
-.SS Zeroing file space
-Specifying the
-.B FALLOC_FL_ZERO_RANGE
-flag (available since Linux 3.15)
-.\" commit 409332b65d3ed8cfa7a8030f1e9d52f372219642
-in
-.I mode
-zeros space in the byte range starting at
-.I offset
-and continuing for
-.I len
-bytes.
-Within the specified range, blocks are preallocated for the regions
-that span the holes in the file.
-After a successful call, subsequent
-reads from this range will return zeros.
-.PP
-Zeroing is done within the filesystem preferably by converting the range into
-unwritten extents.
-This approach means that the specified range will not be physically zeroed
-out on the device (except for partial blocks at the either end of the range),
-and I/O is (otherwise) required only to update metadata.
-.PP
-If the
-.B FALLOC_FL_KEEP_SIZE
-flag is additionally specified in
-.IR mode ,
-the behavior of the call is similar,
-but the file size will not be changed even if
-.IR offset + len
-is greater than the file size.
-This behavior is the same as when preallocating space with
-.B FALLOC_FL_KEEP_SIZE
-specified.
-.PP
-Not all filesystems support
-.BR FALLOC_FL_ZERO_RANGE ;
-if a filesystem doesn't support the operation, an error is returned.
-The operation is supported on at least the following filesystems:
-.IP \[bu] 3
-XFS (since Linux 3.15)
-.\" commit 376ba313147b4172f3e8cf620b9fb591f3e8cdfa
-.IP \[bu]
-ext4, for extent-based files (since Linux 3.15)
-.\" commit b8a8684502a0fc852afa0056c6bb2a9273f6fcc0
-.IP \[bu]
-SMB3 (since Linux 3.17)
-.\" commit 30175628bf7f521e9ee31ac98fa6d6fe7441a556
-.IP \[bu]
-Btrfs (since Linux 4.16)
-.\" commit f27451f229966874a8793995b8e6b74326d125df
-.SS Increasing file space
-Specifying the
-.B FALLOC_FL_INSERT_RANGE
-flag
-(available since Linux 4.1)
-.\" commit dd46c787788d5bf5b974729d43e4c405814a4c7d
-in
-.I mode
-increases the file space by inserting a hole within the file size without
-overwriting any existing data.
-The hole will start at
-.I offset
-and continue for
-.I len
-bytes.
-When inserting the hole inside file, the contents of the file starting at
-.I offset
-will be shifted upward (i.e., to a higher file offset) by
-.I len
-bytes.
-Inserting a hole inside a file increases the file size by
-.I len
-bytes.
-.PP
-This mode has the same limitations as
-.B FALLOC_FL_COLLAPSE_RANGE
-regarding the granularity of the operation.
-If the granularity requirements are not met,
-.BR fallocate ()
-fails with the error
-.BR EINVAL .
-If the
-.I offset
-is equal to or greater than the end of file, an error is returned.
-For such operations (i.e., inserting a hole at the end of file),
-.BR ftruncate (2)
-should be used.
-.PP
-No other flags may be specified in
-.I mode
-in conjunction with
-.BR FALLOC_FL_INSERT_RANGE .
-.PP
-.B FALLOC_FL_INSERT_RANGE
-requires filesystem support.
-Filesystems that support this operation include
-XFS (since Linux 4.1)
-.\" commit a904b1ca5751faf5ece8600e18cd3b674afcca1b
-and ext4 (since Linux 4.2).
-.\" commit 331573febb6a224bc50322e3670da326cb7f4cfc
-.\" f2fs also has support since Linux 4.2
-.\" commit f62185d0e283e9d311e3ac1020f159d95f0aab39
-.SH RETURN VALUE
-On success,
-.BR fallocate ()
-returns zero.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor, or is not opened for writing.
-.TP
-.B EFBIG
-.IR offset + len
-exceeds the maximum file size.
-.TP
-.B EFBIG
-.I mode
-is
-.BR FALLOC_FL_INSERT_RANGE ,
-and the current file size+\fIlen\fP exceeds the maximum file size.
-.TP
-.B EINTR
-A signal was caught during execution; see
-.BR signal (7).
-.TP
-.B EINVAL
-.I offset
-was less than 0, or
-.I len
-.\" FIXME . (raise a kernel bug) Probably the len==0 case should be
-.\" a no-op, rather than an error. That would be consistent with
-.\" similar APIs for the len==0 case.
-.\" See "Re: [PATCH] fallocate.2: add FALLOC_FL_PUNCH_HOLE flag definition"
-.\" 21 Sep 2012
-.\" http://thread.gmane.org/gmane.linux.file-systems/48331/focus=1193526
-was less than or equal to 0.
-.TP
-.B EINVAL
-.I mode
-is
-.B FALLOC_FL_COLLAPSE_RANGE
-and the range specified by
-.I offset
-plus
-.I len
-reaches or passes the end of the file.
-.TP
-.B EINVAL
-.I mode
-is
-.B FALLOC_FL_INSERT_RANGE
-and the range specified by
-.I offset
-reaches or passes the end of the file.
-.TP
-.B EINVAL
-.I mode
-is
-.B FALLOC_FL_COLLAPSE_RANGE
-or
-.BR FALLOC_FL_INSERT_RANGE ,
-but either
-.I offset
-or
-.I len
-is not a multiple of the filesystem block size.
-.TP
-.B EINVAL
-.I mode
-contains one of
-.B FALLOC_FL_COLLAPSE_RANGE
-or
-.B FALLOC_FL_INSERT_RANGE
-and also other flags;
-no other flags are permitted with
-.B FALLOC_FL_COLLAPSE_RANGE
-or
-.BR FALLOC_FL_INSERT_RANGE .
-.TP
-.B EINVAL
-.I mode
-is
-.BR FALLOC_FL_COLLAPSE_RANGE ,
-.BR FALLOC_FL_ZERO_RANGE ,
-or
-.BR FALLOC_FL_INSERT_RANGE ,
-but the file referred to by
-.I fd
-is not a regular file.
-.\" There was an inconsistency in Linux 3.15-rc1, that should be resolved so that all
-.\" filesystems use this error for this case. (Tytso says ex4 will change.)
-.\" http://thread.gmane.org/gmane.comp.file-systems.xfs.general/60485/focus=5521
-.\" From: Michael Kerrisk (man-pages <mtk.manpages@...>
-.\" Subject: Re: [PATCH v5 10/10] manpage: update FALLOC_FL_COLLAPSE_RANGE flag in fallocate
-.\" Newsgroups: gmane.linux.man, gmane.linux.file-systems
-.\" Date: 2014-04-17 13:40:05 GMT
-.TP
-.B EIO
-An I/O error occurred while reading from or writing to a filesystem.
-.TP
-.B ENODEV
-.I fd
-does not refer to a regular file or a directory.
-(If
-.I fd
-is a pipe or FIFO, a different error results.)
-.TP
-.B ENOSPC
-There is not enough space left on the device containing the file
-referred to by
-.IR fd .
-.TP
-.B ENOSYS
-This kernel does not implement
-.BR fallocate ().
-.TP
-.B EOPNOTSUPP
-The filesystem containing the file referred to by
-.I fd
-does not support this operation;
-or the
-.I mode
-is not supported by the filesystem containing the file referred to by
-.IR fd .
-.TP
-.B EPERM
-The file referred to by
-.I fd
-is marked immutable (see
-.BR chattr (1)).
-.TP
-.B EPERM
-.I mode
-specifies
-.BR FALLOC_FL_PUNCH_HOLE ,
-.BR FALLOC_FL_COLLAPSE_RANGE ,
-or
-.B FALLOC_FL_INSERT_RANGE
-and
-the file referred to by
-.I fd
-is marked append-only
-(see
-.BR chattr (1)).
-.TP
-.B EPERM
-The operation was prevented by a file seal; see
-.BR fcntl (2).
-.TP
-.B ESPIPE
-.I fd
-refers to a pipe or FIFO.
-.TP
-.B ETXTBSY
-.I mode
-specifies
-.B FALLOC_FL_COLLAPSE_RANGE
-or
-.BR FALLOC_FL_INSERT_RANGE ,
-but the file referred to by
-.I fd
-is currently being executed.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-.TP
-.BR fallocate ()
-Linux 2.6.23,
-glibc 2.10.
-.TP
-.B FALLOC_FL_*
-glibc 2.18.
-.\" See http://sourceware.org/bugzilla/show_bug.cgi?id=14964
-.SH SEE ALSO
-.BR fallocate (1),
-.BR ftruncate (2),
-.BR posix_fadvise (3),
-.BR posix_fallocate (3)
diff --git a/man2/fanotify_init.2 b/man2/fanotify_init.2
deleted file mode 100644
index 65d73565f..000000000
--- a/man2/fanotify_init.2
+++ /dev/null
@@ -1,542 +0,0 @@
-\" Copyright (C) 2013, Heinrich Schuchardt <xypron.glpk@gmx.de>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.TH fanotify_init 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fanotify_init \- create and initialize fanotify group
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <fcntl.h>" " /* Definition of " O_* " constants */"
-.B #include <sys/fanotify.h>
-.PP
-.BI "int fanotify_init(unsigned int " flags ", unsigned int " event_f_flags );
-.fi
-.SH DESCRIPTION
-For an overview of the fanotify API, see
-.BR fanotify (7).
-.PP
-.BR fanotify_init ()
-initializes a new fanotify group and returns a file descriptor for the event
-queue associated with the group.
-.PP
-The file descriptor is used in calls to
-.BR fanotify_mark (2)
-to specify the files, directories, mounts, or filesystems for which fanotify
-events shall be created.
-These events are received by reading from the file descriptor.
-Some events are only informative, indicating that a file has been accessed.
-Other events can be used to determine whether
-another application is permitted to access a file or directory.
-Permission to access filesystem objects is granted by writing to the file
-descriptor.
-.PP
-Multiple programs may be using the fanotify interface at the same time to
-monitor the same files.
-.PP
-The number of fanotify groups per user is limited.
-See
-.BR fanotify (7)
-for details about this limit.
-.PP
-The
-.I flags
-argument contains a multi-bit field defining the notification class of the
-listening application and further single bit fields specifying the behavior
-of the file descriptor.
-.PP
-If multiple listeners for permission events exist,
-the notification class is used to establish the sequence
-in which the listeners receive the events.
-.PP
-Only one of the following notification classes may be specified in
-.IR flags :
-.TP
-.B FAN_CLASS_PRE_CONTENT
-This value allows the receipt of events notifying that a file has been
-accessed and events for permission decisions if a file may be accessed.
-It is intended for event listeners that need to access files before they
-contain their final data.
-This notification class might be used by hierarchical storage managers,
-for example.
-Use of this flag requires the
-.B CAP_SYS_ADMIN
-capability.
-.TP
-.B FAN_CLASS_CONTENT
-This value allows the receipt of events notifying that a file has been
-accessed and events for permission decisions if a file may be accessed.
-It is intended for event listeners that need to access files when they
-already contain their final content.
-This notification class might be used by malware detection programs, for
-example.
-Use of this flag requires the
-.B CAP_SYS_ADMIN
-capability.
-.TP
-.B FAN_CLASS_NOTIF
-This is the default value.
-It does not need to be specified.
-This value only allows the receipt of events notifying that a file has been
-accessed.
-Permission decisions before the file is accessed are not possible.
-.PP
-Listeners with different notification classes will receive events in the
-order
-.BR FAN_CLASS_PRE_CONTENT ,
-.BR FAN_CLASS_CONTENT ,
-.BR FAN_CLASS_NOTIF .
-The order of notification for listeners in the same notification class
-is undefined.
-.PP
-The following bits can additionally be set in
-.IR flags :
-.TP
-.B FAN_CLOEXEC
-Set the close-on-exec flag
-.RB ( FD_CLOEXEC )
-on the new file descriptor.
-See the description of the
-.B O_CLOEXEC
-flag in
-.BR open (2).
-.TP
-.B FAN_NONBLOCK
-Enable the nonblocking flag
-.RB ( O_NONBLOCK )
-for the file descriptor.
-Reading from the file descriptor will not block.
-Instead, if no data is available,
-.BR read (2)
-fails with the error
-.BR EAGAIN .
-.TP
-.B FAN_UNLIMITED_QUEUE
-Remove the limit on the number of events in the event queue.
-See
-.BR fanotify (7)
-for details about this limit.
-Use of this flag requires the
-.B CAP_SYS_ADMIN
-capability.
-.TP
-.B FAN_UNLIMITED_MARKS
-Remove the limit on the number of fanotify marks per user.
-See
-.BR fanotify (7)
-for details about this limit.
-Use of this flag requires the
-.B CAP_SYS_ADMIN
-capability.
-.TP
-.BR FAN_REPORT_TID " (since Linux 4.20)"
-.\" commit d0a6a87e40da49cfc7954c491d3065a25a641b29
-Report thread ID (TID) instead of process ID (PID)
-in the
-.I pid
-field of the
-.I "struct fanotify_event_metadata"
-supplied to
-.BR read (2)
-(see
-.BR fanotify (7)).
-Use of this flag requires the
-.B CAP_SYS_ADMIN
-capability.
-.TP
-.BR FAN_ENABLE_AUDIT " (since Linux 4.15)"
-.\" commit de8cd83e91bc3ee212b3e6ec6e4283af9e4ab269
-Enable generation of audit log records about access mediation performed by
-permission events.
-The permission event response has to be marked with the
-.B FAN_AUDIT
-flag for an audit log record to be generated.
-Use of this flag requires the
-.B CAP_AUDIT_WRITE
-capability.
-.TP
-.BR FAN_REPORT_FID " (since Linux 5.1)"
-.\" commit a8b13aa20afb69161b5123b4f1acc7ea0a03d360
-This value allows the receipt of events which contain additional information
-about the underlying filesystem object correlated to an event.
-An additional record of type
-.B FAN_EVENT_INFO_TYPE_FID
-encapsulates the information about the object and is included alongside the
-generic event metadata structure.
-The file descriptor that is used to represent the object correlated to an
-event is instead substituted with a file handle.
-It is intended for applications that may find the use of a file handle to
-identify an object more suitable than a file descriptor.
-Additionally, it may be used for applications monitoring a directory or a
-filesystem that are interested in the directory entry modification events
-.BR FAN_CREATE ,
-.BR FAN_DELETE ,
-.BR FAN_MOVE ,
-and
-.BR FAN_RENAME ,
-or in events such as
-.BR FAN_ATTRIB ,
-.BR FAN_DELETE_SELF ,
-and
-.BR FAN_MOVE_SELF .
-All the events above require an fanotify group that identifies filesystem
-objects by file handles.
-Note that without the flag
-.BR FAN_REPORT_TARGET_FID ,
-for the directory entry modification events,
-there is an information record that identifies the modified directory
-and not the created/deleted/moved child object.
-The use of
-.B FAN_CLASS_CONTENT
-or
-.B FAN_CLASS_PRE_CONTENT
-is not permitted with this flag and will result in the error
-.BR EINVAL .
-See
-.BR fanotify (7)
-for additional details.
-.TP
-.BR FAN_REPORT_DIR_FID " (since Linux 5.9)"
-.\" commit 83b7a59896dd24015a34b7f00027f0ff3747972f
-Events for fanotify groups initialized with this flag will contain
-(see exceptions below) additional information about a directory object
-correlated to an event.
-An additional record of type
-.B FAN_EVENT_INFO_TYPE_DFID
-encapsulates the information about the directory object and is included
-alongside the generic event metadata structure.
-For events that occur on a non-directory object, the additional structure
-includes a file handle that identifies the parent directory filesystem object.
-Note that there is no guarantee that the directory filesystem object will be
-found at the location described by the file handle information at the time
-the event is received.
-When combined with the flag
-.BR FAN_REPORT_FID ,
-two records may be reported with events that occur on a non-directory object,
-one to identify the non-directory object itself and one to identify the parent
-directory object.
-Note that in some cases, a filesystem object does not have a parent,
-for example, when an event occurs on an unlinked but open file.
-In that case, with the
-.B FAN_REPORT_FID
-flag, the event will be reported with only one record to identify the
-non-directory object itself, because there is no directory associated with
-the event.
-Without the
-.B FAN_REPORT_FID
-flag, no event will be reported.
-See
-.BR fanotify (7)
-for additional details.
-.TP
-.BR FAN_REPORT_NAME " (since Linux 5.9)"
-.\" commit 929943b38daf817f2e6d303ea04401651fc3bc05
-Events for fanotify groups initialized with this flag will contain additional
-information about the name of the directory entry correlated to an event.
-This flag must be provided in conjunction with the flag
-.BR FAN_REPORT_DIR_FID .
-Providing this flag value without
-.B FAN_REPORT_DIR_FID
-will result in the error
-.BR EINVAL .
-This flag may be combined with the flag
-.BR FAN_REPORT_FID .
-An additional record of type
-.BR FAN_EVENT_INFO_TYPE_DFID_NAME ,
-which encapsulates the information about the directory entry, is included
-alongside the generic event metadata structure and substitutes the additional
-information record of type
-.BR FAN_EVENT_INFO_TYPE_DFID .
-The additional record includes a file handle that identifies a directory
-filesystem object followed by a name that identifies an entry in that
-directory.
-For the directory entry modification events
-.BR FAN_CREATE ,
-.BR FAN_DELETE ,
-and
-.BR FAN_MOVE ,
-the reported name is that of the created/deleted/moved directory entry.
-The event
-.B FAN_RENAME
-may contain two information records.
-One of type
-.B FAN_EVENT_INFO_TYPE_OLD_DFID_NAME
-identifying the old directory entry,
-and another of type
-.B FAN_EVENT_INFO_TYPE_NEW_DFID_NAME
-identifying the new directory entry.
-For other events that occur on a directory object, the reported file handle
-is that of the directory object itself and the reported name is '.'.
-For other events that occur on a non-directory object, the reported file handle
-is that of the parent directory object and the reported name is the name of a
-directory entry where the object was located at the time of the event.
-The rationale behind this logic is that the reported directory file handle can
-be passed to
-.BR open_by_handle_at (2)
-to get an open directory file descriptor and that file descriptor along with
-the reported name can be used to call
-.BR fstatat (2).
-The same rule that applies to record type
-.B FAN_EVENT_INFO_TYPE_DFID
-also applies to record type
-.BR FAN_EVENT_INFO_TYPE_DFID_NAME :
-if a non-directory object has no parent, either the event will not be reported
-or it will be reported without the directory entry information.
-Note that there is no guarantee that the filesystem object will be found at the
-location described by the directory entry information at the time the event is
-received.
-See
-.BR fanotify (7)
-for additional details.
-.TP
-.B FAN_REPORT_DFID_NAME
-This is a synonym for
-.RB ( FAN_REPORT_DIR_FID | FAN_REPORT_NAME ).
-.TP
-.BR FAN_REPORT_TARGET_FID " (since Linux 5.17)"
-.\" commit d61fd650e9d206a71fda789f02a1ced4b19944c4
-Events for fanotify groups initialized with this flag
-will contain additional information about the child
-correlated with directory entry modification events.
-This flag must be provided in conjunction with the flags
-.BR FAN_REPORT_FID ,
-.B FAN_REPORT_DIR_FID
-and
-.BR FAN_REPORT_NAME .
-or else the error
-.B EINVAL
-will be returned.
-For the directory entry modification events
-.BR FAN_CREATE ,
-.BR FAN_DELETE ,
-.BR FAN_MOVE ,
-and
-.BR FAN_RENAME ,
-an additional record of type
-.BR FAN_EVENT_INFO_TYPE_FID ,
-is reported in addition to the information records of type
-.BR FAN_EVENT_INFO_TYPE_DFID ,
-.BR FAN_EVENT_INFO_TYPE_DFID_NAME ,
-.BR FAN_EVENT_INFO_TYPE_OLD_DFID_NAME ,
-and
-.BR FAN_EVENT_INFO_TYPE_NEW_DFID_NAME .
-The additional record includes a file handle
-that identifies the filesystem child object
-that the directory entry is referring to.
-.TP
-.B FAN_REPORT_DFID_NAME_TARGET
-This is a synonym for
-.RB ( FAN_REPORT_DFID_NAME | FAN_REPORT_FID | FAN_REPORT_TARGET_FID ).
-.TP
-.BR FAN_REPORT_PIDFD " (since Linux 5.15)"
-.\" commit af579beb666aefb17e9a335c12c788c92932baf1
-Events for fanotify groups initialized with this flag will contain
-an additional information record alongside the generic
-.I fanotify_event_metadata
-structure.
-This information record will be of type
-.B FAN_EVENT_INFO_TYPE_PIDFD
-and will contain a pidfd for the process that
-was responsible for generating an event.
-A pidfd returned in this information record object is
-no different to the pidfd that is returned when calling
-.BR pidfd_open (2).
-Usage of this information record are for applications that
-may be interested in reliably determining whether
-the process responsible for generating an event
-has been recycled or terminated.
-The use of the
-.B FAN_REPORT_TID
-flag along with
-.B FAN_REPORT_PIDFD
-is currently not supported and
-attempting to do so will result in the error
-.B EINVAL
-being returned.
-This limitation is currently imposed by the pidfd API
-as it currently only supports
-the creation of pidfds for thread-group leaders.
-Creating pidfds for non-thread-group leaders
-may be supported at some point in the future,
-so this restriction may eventually be lifted.
-For more details on information records,
-see
-.BR fanotify (7).
-.PP
-The
-.I event_f_flags
-argument
-defines the file status flags that will be set on the open file descriptions
-that are created for fanotify events.
-For details of these flags, see the description of the
-.I flags
-values in
-.BR open (2).
-.I event_f_flags
-includes a multi-bit field for the access mode.
-This field can take the following values:
-.TP
-.B O_RDONLY
-This value allows only read access.
-.TP
-.B O_WRONLY
-This value allows only write access.
-.TP
-.B O_RDWR
-This value allows read and write access.
-.PP
-Additional bits can be set in
-.IR event_f_flags .
-The most useful values are:
-.TP
-.B O_LARGEFILE
-Enable support for files exceeding 2\ GB.
-Failing to set this flag will result in an
-.B EOVERFLOW
-error when trying to open a large file which is monitored by
-an fanotify group on a 32-bit system.
-.TP
-.BR O_CLOEXEC " (since Linux 3.18)"
-.\" commit 0b37e097a648aa71d4db1ad108001e95b69a2da4
-Enable the close-on-exec flag for the file descriptor.
-See the description of the
-.B O_CLOEXEC
-flag in
-.BR open (2)
-for reasons why this may be useful.
-.PP
-The following are also allowable:
-.BR O_APPEND ,
-.BR O_DSYNC ,
-.BR O_NOATIME ,
-.BR O_NONBLOCK ,
-and
-.BR O_SYNC .
-Specifying any other flag in
-.I event_f_flags
-yields the error
-.B EINVAL
-(but see BUGS).
-.SH RETURN VALUE
-On success,
-.BR fanotify_init ()
-returns a new file descriptor.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-An invalid value was passed in
-.I flags
-or
-.IR event_f_flags .
-.B FAN_ALL_INIT_FLAGS
-(deprecated since Linux 4.20)
-.\" commit 23c9deeb3285d34fd243abb3d6b9f07db60c3cf4
-defines all allowable bits for
-.IR flags .
-.TP
-.B EMFILE
-The number of fanotify groups for this user exceeds the limit.
-See
-.BR fanotify (7)
-for details about this limit.
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENOMEM
-The allocation of memory for the notification group failed.
-.TP
-.B ENOSYS
-This kernel does not implement
-.BR fanotify_init ().
-The fanotify API is available only if the kernel was configured with
-.BR CONFIG_FANOTIFY .
-.TP
-.B EPERM
-The operation is not permitted because the caller lacks a required capability.
-.SH VERSIONS
-Prior to Linux 5.13,
-.\" commit 7cea2a3c505e87a9d6afc78be4a7f7be636a73a7
-calling
-.BR fanotify_init ()
-required the
-.B CAP_SYS_ADMIN
-capability.
-Since Linux 5.13,
-.\" commit 7cea2a3c505e87a9d6afc78be4a7f7be636a73a7
-users may call
-.BR fanotify_init ()
-without the
-.B CAP_SYS_ADMIN
-capability to create and initialize
-an fanotify group with limited functionality.
-.TP
-The limitations imposed on an event listener created by a user without the
-.B CAP_SYS_ADMIN
-capability are as follows:
-.RS
-.IP \[bu] 3
-The user cannot request for an unlimited event queue by using
-.BR FAN_UNLIMITED_QUEUE .
-.IP \[bu]
-The user cannot request for an unlimited number of marks by using
-.BR FAN_UNLIMITED_MARKS .
-.IP \[bu]
-The user cannot request to use either notification classes
-.B FAN_CLASS_CONTENT
-or
-.BR FAN_CLASS_PRE_CONTENT .
-This means that user cannot request permission events.
-.IP \[bu]
-The user is required to create a group that identifies filesystem objects by
-file handles, for example, by providing the
-.B FAN_REPORT_FID
-flag.
-.IP \[bu]
-The user is limited to only mark inodes.
-The ability to mark a mount or filesystem via
-.BR fanotify_mark ()
-through the use of
-.B FAN_MARK_MOUNT
-or
-.B FAN_MARK_FILESYSTEM
-is not permitted.
-.IP \[bu]
-The event object in the event queue is limited in terms of the information
-that is made available to the unprivileged user.
-A user will also not receive the pid that generated the event, unless the
-listening process itself generated the event.
-.RE
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.37.
-.\" was introduced in Linux 2.6.36 and enabled in Linux 2.6.37.
-.SH BUGS
-The following bug was present before Linux 3.18:
-.IP \[bu] 3
-.\" Fixed by commit 0b37e097a648aa71d4db1ad108001e95b69a2da4
-The
-.B O_CLOEXEC
-is ignored when passed in
-.IR event_f_flags .
-.PP
-The following bug was present before Linux 3.14:
-.IP \[bu] 3
-.\" Fixed by commit 48149e9d3a7e924010a0daab30a6197b7d7b6580
-The
-.I event_f_flags
-argument is not checked for invalid flags.
-Flags that are intended only for internal use,
-such as
-.BR FMODE_EXEC ,
-can be set, and will consequently be set for the file descriptors
-returned when reading from the fanotify file descriptor.
-.SH SEE ALSO
-.BR fanotify_mark (2),
-.BR fanotify (7)
diff --git a/man2/fanotify_mark.2 b/man2/fanotify_mark.2
deleted file mode 100644
index 3f85deb23..000000000
--- a/man2/fanotify_mark.2
+++ /dev/null
@@ -1,843 +0,0 @@
-.\" Copyright (C) 2013, Heinrich Schuchardt <xypron.glpk@gmx.de>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.TH fanotify_mark 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fanotify_mark \- add, remove, or modify an fanotify mark on a filesystem
-object
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/fanotify.h>
-.PP
-.BI "int fanotify_mark(int " fanotify_fd ", unsigned int " flags ,
-.BI " uint64_t " mask ", int " dirfd ,
-.BI " const char *_Nullable " pathname );
-.fi
-.SH DESCRIPTION
-For an overview of the fanotify API, see
-.BR fanotify (7).
-.PP
-.BR fanotify_mark ()
-adds, removes, or modifies an fanotify mark on a filesystem object.
-The caller must have read permission on the filesystem object that
-is to be marked.
-.PP
-The
-.I fanotify_fd
-argument is a file descriptor returned by
-.BR fanotify_init (2).
-.PP
-.I flags
-is a bit mask describing the modification to perform.
-It must include exactly one of the following values:
-.TP
-.B FAN_MARK_ADD
-The events in
-.I mask
-will be added to the mark mask (or to the ignore mask).
-.I mask
-must be nonempty or the error
-.B EINVAL
-will occur.
-.TP
-.B FAN_MARK_REMOVE
-The events in argument
-.I mask
-will be removed from the mark mask (or from the ignore mask).
-.I mask
-must be nonempty or the error
-.B EINVAL
-will occur.
-.TP
-.B FAN_MARK_FLUSH
-Remove either all marks for filesystems, all marks for mounts, or all
-marks for directories and files from the fanotify group.
-If
-.I flags
-contains
-.BR FAN_MARK_MOUNT ,
-all marks for mounts are removed from the group.
-If
-.I flags
-contains
-.BR FAN_MARK_FILESYSTEM ,
-all marks for filesystems are removed from the group.
-Otherwise, all marks for directories and files are removed.
-No flag other than, and at most one of, the flags
-.B FAN_MARK_MOUNT
-or
-.B FAN_MARK_FILESYSTEM
-can be used in conjunction with
-.BR FAN_MARK_FLUSH .
-.I mask
-is ignored.
-.PP
-If none of the values above is specified, or more than one is specified,
-the call fails with the error
-.BR EINVAL .
-.PP
-In addition,
-zero or more of the following values may be ORed into
-.IR flags :
-.TP
-.B FAN_MARK_DONT_FOLLOW
-If
-.I pathname
-is a symbolic link, mark the link itself, rather than the file to which it
-refers.
-(By default,
-.BR fanotify_mark ()
-dereferences
-.I pathname
-if it is a symbolic link.)
-.TP
-.B FAN_MARK_ONLYDIR
-If the filesystem object to be marked is not a directory, the error
-.B ENOTDIR
-shall be raised.
-.TP
-.B FAN_MARK_MOUNT
-Mark the mount specified by
-.IR pathname .
-If
-.I pathname
-is not itself a mount point, the mount containing
-.I pathname
-will be marked.
-All directories, subdirectories, and the contained files of the mount
-will be monitored.
-The events which require that filesystem objects are identified by file handles,
-such as
-.BR FAN_CREATE ,
-.BR FAN_ATTRIB ,
-.BR FAN_MOVE ,
-and
-.BR FAN_DELETE_SELF ,
-cannot be provided as a
-.I mask
-when
-.I flags
-contains
-.BR FAN_MARK_MOUNT .
-Attempting to do so will result in the error
-.B EINVAL
-being returned.
-Use of this flag requires the
-.B CAP_SYS_ADMIN
-capability.
-.TP
-.BR FAN_MARK_FILESYSTEM " (since Linux 4.20)"
-.\" commit d54f4fba889b205e9cd8239182ca5d27d0ac3bc2
-Mark the filesystem specified by
-.IR pathname .
-The filesystem containing
-.I pathname
-will be marked.
-All the contained files and directories of the filesystem from any mount
-point will be monitored.
-Use of this flag requires the
-.B CAP_SYS_ADMIN
-capability.
-.TP
-.B FAN_MARK_IGNORED_MASK
-The events in
-.I mask
-shall be added to or removed from the ignore mask.
-Note that the flags
-.BR FAN_ONDIR ,
-and
-.B FAN_EVENT_ON_CHILD
-have no effect when provided with this flag.
-The effect of setting the flags
-.BR FAN_ONDIR ,
-and
-.B FAN_EVENT_ON_CHILD
-in the mark mask
-on the events that are set in the ignore mask
-is undefined and depends on the Linux kernel version.
-Specifically, prior to Linux 5.9,
-.\" commit 497b0c5a7c0688c1b100a9c2e267337f677c198e
-setting a mark mask on a file
-and a mark with ignore mask on its parent directory
-would not result in ignoring events on the file,
-regardless of the
-.B FAN_EVENT_ON_CHILD
-flag in the parent directory's mark mask.
-When the ignore mask is updated with the
-.B FAN_MARK_IGNORED_MASK
-flag
-on a mark that was previously updated with the
-.B FAN_MARK_IGNORE
-flag,
-the update fails with
-.B EEXIST
-error.
-.TP
-.BR FAN_MARK_IGNORE " (since Linux 6.0)"
-.\" commit e252f2ed1c8c6c3884ab5dd34e003ed21f1fe6e0
-This flag has a similar effect as setting the
-.B FAN_MARK_IGNORED_MASK
-flag.
-The events in
-.I mask
-shall be added to or removed from the ignore mask.
-Unlike the
-.B FAN_MARK_IGNORED_MASK
-flag,
-this flag also has the effect that the
-.BR FAN_ONDIR ,
-and
-.B FAN_EVENT_ON_CHILD
-flags take effect on the ignore mask.
-Specifically, unless the
-.B FAN_ONDIR
-flag is set with
-.BR FAN_MARK_IGNORE ,
-events on directories will not be ignored.
-If the flag
-.B FAN_EVENT_ON_CHILD
-is set with
-.BR FAN_MARK_IGNORE ,
-events on children will be ignored.
-For example,
-a mark on a directory with combination of
-a mask with
-.B FAN_CREATE
-event
-and
-.B FAN_ONDIR
-flag
-and an ignore mask with
-.B FAN_CREATE
-event
-and without
-.B FAN_ONDIR
-flag,
-will result in getting only
-the events for creation of sub-directories.
-When using the
-.B FAN_MARK_IGNORE
-flag to add to an ignore mask
-of a mount,
-filesystem,
-or directory inode mark,
-the
-.B FAN_MARK_IGNORED_SURV_MODIFY
-flag must be specified.
-Failure to do so will results with
-.B EINVAL
-or
-.B EISDIR
-error.
-.TP
-.B FAN_MARK_IGNORED_SURV_MODIFY
-The ignore mask shall survive modify events.
-If this flag is not set,
-the ignore mask is cleared when a modify event occurs
-on the marked object.
-Omitting this flag is typically used to suppress events
-(e.g.,
-.BR FAN_OPEN )
-for a specific file,
-until that specific file's content has been modified.
-It is far less useful to suppress events
-on an entire filesystem,
-or mount,
-or on all files inside a directory,
-until some file's content has been modified.
-For this reason,
-the
-.B FAN_MARK_IGNORE
-flag requires the
-.B FAN_MARK_IGNORED_SURV_MODIFY
-flag on a mount,
-filesystem,
-or directory inode mark.
-This flag cannot be removed from a mark once set.
-When the ignore mask is updated without this flag
-on a mark that was previously updated with the
-.B FAN_MARK_IGNORE
-and
-.B FAN_MARK_IGNORED_SURV_MODIFY
-flags,
-the update fails with
-.B EEXIST
-error.
-.TP
-.B FAN_MARK_IGNORE_SURV
-This is a synonym for
-.RB ( FAN_MARK_IGNORE | FAN_MARK_IGNORED_SURV_MODIFY ).
-.TP
-.BR FAN_MARK_EVICTABLE " (since Linux 5.19)"
-.\" commit 5f9d3bd520261fd7a850818c71809fd580e0f30c
-When an inode mark is created with this flag,
-the inode object will not be pinned to the inode cache,
-therefore,
-allowing the inode object to be evicted from the inode cache
-when the memory pressure on the system is high.
-The eviction of the inode object
-results in the evictable mark also being lost.
-When the mask of an evictable inode mark is updated
-without using the
-.B FAN_MARK_EVICATBLE
-flag,
-the marked inode is pinned to inode cache
-and the mark is no longer evictable.
-When the mask of a non-evictable inode mark is updated
-with the
-.B FAN_MARK_EVICTABLE
-flag,
-the inode mark remains non-evictable
-and the update fails with
-.B EEXIST
-error.
-Mounts and filesystems are not evictable objects,
-therefore,
-an attempt to create a mount mark or a filesystem mark
-with the
-.B FAN_MARK_EVICTABLE
-flag,
-will result in the error
-.BR EINVAL .
-For example,
-inode marks can be used in combination with mount marks
-to reduce the amount of events from noninteresting paths.
-The event listener reads events,
-checks if the path reported in the event is of interest,
-and if it is not,
-the listener sets a mark with an ignore mask on the directory.
-Evictable inode marks allow using this method for a large number of directories
-without the concern of pinning all inodes and exhausting the system's memory.
-.PP
-.I mask
-defines which events shall be listened for (or which shall be ignored).
-It is a bit mask composed of the following values:
-.TP
-.B FAN_ACCESS
-Create an event when a file or directory (but see BUGS) is accessed (read).
-.TP
-.B FAN_MODIFY
-Create an event when a file is modified (write).
-.TP
-.B FAN_CLOSE_WRITE
-Create an event when a writable file is closed.
-.TP
-.B FAN_CLOSE_NOWRITE
-Create an event when a read-only file or directory is closed.
-.TP
-.B FAN_OPEN
-Create an event when a file or directory is opened.
-.TP
-.BR FAN_OPEN_EXEC " (since Linux 5.0)"
-.\" commit 9b076f1c0f4869b838a1b7aa0edb5664d47ec8aa
-Create an event when a file is opened with the intent to be executed.
-See NOTES for additional details.
-.TP
-.BR FAN_ATTRIB " (since Linux 5.1)"
-.\" commit 235328d1fa4251c6dcb32351219bb553a58838d2
-Create an event when the metadata for a file or directory has changed.
-An fanotify group that identifies filesystem objects by file handles
-is required.
-.TP
-.BR FAN_CREATE " (since Linux 5.1)"
-.\" commit 235328d1fa4251c6dcb32351219bb553a58838d2
-Create an event when a file or directory has been created in a marked
-parent directory.
-An fanotify group that identifies filesystem objects by file handles
-is required.
-.TP
-.BR FAN_DELETE " (since Linux 5.1)"
-.\" commit 235328d1fa4251c6dcb32351219bb553a58838d2
-Create an event when a file or directory has been deleted in a marked
-parent directory.
-An fanotify group that identifies filesystem objects by file handles
-is required.
-.TP
-.BR FAN_DELETE_SELF " (since Linux 5.1)"
-.\" commit 235328d1fa4251c6dcb32351219bb553a58838d2
-Create an event when a marked file or directory itself is deleted.
-An fanotify group that identifies filesystem objects by file handles
-is required.
-.TP
-.BR FAN_FS_ERROR " (since Linux 5.16)"
-.\" commit 9709bd548f11a092d124698118013f66e1740f9b
-Create an event when a filesystem error
-leading to inconsistent filesystem metadata is detected.
-An additional information record of type
-.B FAN_EVENT_INFO_TYPE_ERROR
-is returned for each event in the read buffer.
-An fanotify group that identifies filesystem objects by file handles
-is required.
-.IP
-Events of such type are dependent on support
-from the underlying filesystem.
-At the time of writing,
-only the
-.B ext4
-filesystem reports
-.B FAN_FS_ERROR
-events.
-.IP
-See
-.BR fanotify (7)
-for additional details.
-.TP
-.BR FAN_MOVED_FROM " (since Linux 5.1)"
-.\" commit 235328d1fa4251c6dcb32351219bb553a58838d2
-Create an event when a file or directory has been moved from a marked
-parent directory.
-An fanotify group that identifies filesystem objects by file handles
-is required.
-.TP
-.BR FAN_MOVED_TO " (since Linux 5.1)"
-.\" commit 235328d1fa4251c6dcb32351219bb553a58838d2
-Create an event when a file or directory has been moved to a marked parent
-directory.
-An fanotify group that identifies filesystem objects by file handles
-is required.
-.TP
-.BR FAN_RENAME " (since Linux 5.17)"
-.\" commit 8cc3b1ccd930fe6971e1527f0c4f1bdc8cb56026
-This event contains the same information provided by events
-.B FAN_MOVED_FROM
-and
-.BR FAN_MOVED_TO ,
-however is represented by a single event with up to two information records.
-An fanotify group that identifies filesystem objects by file handles
-is required.
-If the filesystem object to be marked is not a directory, the error
-.B ENOTDIR
-shall be raised.
-.TP
-.BR FAN_MOVE_SELF " (since Linux 5.1)"
-.\" commit 235328d1fa4251c6dcb32351219bb553a58838d2
-Create an event when a marked file or directory itself has been moved.
-An fanotify group that identifies filesystem objects by file handles
-is required.
-.TP
-.B FAN_OPEN_PERM
-Create an event when a permission to open a file or directory is requested.
-An fanotify file descriptor created with
-.B FAN_CLASS_PRE_CONTENT
-or
-.B FAN_CLASS_CONTENT
-is required.
-.TP
-.BR FAN_OPEN_EXEC_PERM " (since Linux 5.0)"
-.\" commit 66917a3130f218dcef9eeab4fd11a71cd00cd7c9
-Create an event when a permission to open a file for execution is
-requested.
-An fanotify file descriptor created with
-.B FAN_CLASS_PRE_CONTENT
-or
-.B FAN_CLASS_CONTENT
-is required.
-See NOTES for additional details.
-.TP
-.B FAN_ACCESS_PERM
-Create an event when a permission to read a file or directory is requested.
-An fanotify file descriptor created with
-.B FAN_CLASS_PRE_CONTENT
-or
-.B FAN_CLASS_CONTENT
-is required.
-.TP
-.B FAN_ONDIR
-Create events for directories\[em]for example, when
-.BR opendir (3),
-.BR readdir (3)
-(but see BUGS), and
-.BR closedir (3)
-are called.
-Without this flag, events are created only for files.
-In the context of directory entry events, such as
-.BR FAN_CREATE ,
-.BR FAN_DELETE ,
-.BR FAN_MOVED_FROM ,
-and
-.BR FAN_MOVED_TO ,
-specifying the flag
-.B FAN_ONDIR
-is required in order to create events when subdirectory entries are
-modified (i.e.,
-.BR mkdir (2)/
-.BR rmdir (2)).
-.TP
-.B FAN_EVENT_ON_CHILD
-Events for the immediate children of marked directories shall be created.
-The flag has no effect when marking mounts and filesystems.
-Note that events are not generated for children of the subdirectories
-of marked directories.
-More specifically, the directory entry modification events
-.BR FAN_CREATE ,
-.BR FAN_DELETE ,
-.BR FAN_MOVED_FROM ,
-and
-.B FAN_MOVED_TO
-are not generated for any entry modifications performed inside subdirectories
-of marked directories.
-Note that the events
-.B FAN_DELETE_SELF
-and
-.B FAN_MOVE_SELF
-are not generated for children of marked directories.
-To monitor complete directory trees it is necessary to mark the relevant
-mount or filesystem.
-.PP
-The following composed values are defined:
-.TP
-.B FAN_CLOSE
-A file is closed
-.RB ( FAN_CLOSE_WRITE | FAN_CLOSE_NOWRITE ).
-.TP
-.B FAN_MOVE
-A file or directory has been moved
-.RB ( FAN_MOVED_FROM | FAN_MOVED_TO ).
-.PP
-The filesystem object to be marked is determined by the file descriptor
-.I dirfd
-and the pathname specified in
-.IR pathname :
-.IP \[bu] 3
-If
-.I pathname
-is NULL,
-.I dirfd
-defines the filesystem object to be marked.
-.IP \[bu]
-If
-.I pathname
-is NULL, and
-.I dirfd
-takes the special value
-.BR AT_FDCWD ,
-the current working directory is to be marked.
-.IP \[bu]
-If
-.I pathname
-is absolute, it defines the filesystem object to be marked, and
-.I dirfd
-is ignored.
-.IP \[bu]
-If
-.I pathname
-is relative, and
-.I dirfd
-does not have the value
-.BR AT_FDCWD ,
-then the filesystem object to be marked is determined by interpreting
-.I pathname
-relative the directory referred to by
-.IR dirfd .
-.IP \[bu]
-If
-.I pathname
-is relative, and
-.I dirfd
-has the value
-.BR AT_FDCWD ,
-then the filesystem object to be marked is determined by interpreting
-.I pathname
-relative to the current working directory.
-(See
-.BR openat (2)
-for an explanation of why the
-.I dirfd
-argument is useful.)
-.SH RETURN VALUE
-On success,
-.BR fanotify_mark ()
-returns 0.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-An invalid file descriptor was passed in
-.IR fanotify_fd .
-.TP
-.B EBADF
-.I pathname
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B EEXIST
-The filesystem object indicated by
-.I dirfd
-and
-.I pathname
-has a mark that was updated without the
-.B FAN_MARK_EVICTABLE
-flag,
-and the user attempted to update the mark with
-.B FAN_MARK_EVICTABLE
-flag.
-.TP
-.B EEXIST
-The filesystem object indicated by
-.I dirfd
-and
-.I pathname
-has a mark that was updated with the
-.B FAN_MARK_IGNORE
-flag,
-and the user attempted to update the mark with
-.B FAN_MARK_IGNORED_MASK
-flag.
-.TP
-.B EEXIST
-The filesystem object indicated by
-.I dirfd
-and
-.I pathname
-has a mark that was updated with the
-.B FAN_MARK_IGNORE
-and
-.B FAN_MARK_IGNORED_SURV_MODIFY
-flags,
-and the user attempted to update the mark only with
-.B FAN_MARK_IGNORE
-flag.
-.TP
-.B EINVAL
-An invalid value was passed in
-.I flags
-or
-.IR mask ,
-or
-.I fanotify_fd
-was not an fanotify file descriptor.
-.TP
-.B EINVAL
-The fanotify file descriptor was opened with
-.B FAN_CLASS_NOTIF
-or the fanotify group identifies filesystem objects by file handles
-and mask contains a flag for permission events
-.RB ( FAN_OPEN_PERM
-or
-.BR FAN_ACCESS_PERM ).
-.TP
-.B EINVAL
-The group was initialized without
-.B FAN_REPORT_FID
-but one or more event types specified in the
-.I mask
-require it.
-.TP
-.B EINVAL
-.I flags
-contains
-.BR FAN_MARK_IGNORE ,
-and either
-.B FAN_MARK_MOUNT
-or
-.BR FAN_MARK_FILESYSTEM ,
-but does not contain
-.BR FAN_MARK_IGNORED_SURV_MODIFY .
-.TP
-.B EISDIR
-.I flags
-contains
-.BR FAN_MARK_IGNORE ,
-but does not contain
-.BR FAN_MARK_IGNORED_SURV_MODIFY ,
-and
-.I dirfd
-and
-.I pathname
-specify a directory.
-.TP
-.B ENODEV
-The filesystem object indicated by
-.I dirfd
-and
-.I pathname
-is not associated with a filesystem that supports
-.I fsid
-(e.g.,
-.BR fuse (4)).
-.BR tmpfs (5)
-did not support
-.I fsid
-prior to Linux 5.13.
-.\" commit 59cda49ecf6c9a32fae4942420701b6e087204f6
-This error can be returned only with an fanotify group that identifies
-filesystem objects by file handles.
-.TP
-.B ENOENT
-The filesystem object indicated by
-.I dirfd
-and
-.I pathname
-does not exist.
-This error also occurs when trying to remove a mark from an object
-which is not marked.
-.TP
-.B ENOMEM
-The necessary memory could not be allocated.
-.TP
-.B ENOSPC
-The number of marks for this user exceeds the limit and the
-.B FAN_UNLIMITED_MARKS
-flag was not specified when the fanotify file descriptor was created with
-.BR fanotify_init (2).
-See
-.BR fanotify (7)
-for details about this limit.
-.TP
-.B ENOSYS
-This kernel does not implement
-.BR fanotify_mark ().
-The fanotify API is available only if the kernel was configured with
-.BR CONFIG_FANOTIFY .
-.TP
-.B ENOTDIR
-.I flags
-contains
-.BR FAN_MARK_ONLYDIR ,
-and
-.I dirfd
-and
-.I pathname
-do not specify a directory.
-.TP
-.B ENOTDIR
-.I mask
-contains
-.BR FAN_RENAME ,
-and
-.I dirfd
-and
-.I pathname
-do not specify a directory.
-.TP
-.B ENOTDIR
-.I flags
-contains
-.BR FAN_MARK_IGNORE ,
-or the fanotify group was initialized with flag
-.BR FAN_REPORT_TARGET_FID ,
-and
-.I mask
-contains directory entry modification events
-(e.g.,
-.BR FAN_CREATE ,
-.BR FAN_DELETE ),
-or directory event flags
-(e.g.,
-.BR FAN_ONDIR ,
-.BR FAN_EVENT_ON_CHILD ),
-and
-.I dirfd
-and
-.I pathname
-do not specify a directory.
-.TP
-.B EOPNOTSUPP
-The object indicated by
-.I pathname
-is associated with a filesystem that does not support the encoding of file
-handles.
-This error can be returned only with an fanotify group that identifies
-filesystem objects by file handles.
-.TP
-.B EPERM
-The operation is not permitted because the caller lacks a required capability.
-.TP
-.B EXDEV
-The filesystem object indicated by
-.I pathname
-resides within a filesystem subvolume (e.g.,
-.BR btrfs (5))
-which uses a different
-.I fsid
-than its root superblock.
-This error can be returned only with an fanotify group that identifies
-filesystem objects by file handles.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.37.
-.\" was introduced in Linux 2.6.36 and enabled in Linux 2.6.37.
-.SH NOTES
-.SS FAN_OPEN_EXEC and FAN_OPEN_EXEC_PERM
-When using either
-.B FAN_OPEN_EXEC
-or
-.B FAN_OPEN_EXEC_PERM
-within the
-.IR mask ,
-events of these types will be returned only when the direct execution of a
-program occurs.
-More specifically, this means that events of these types will be generated
-for files that are opened using
-.BR execve (2),
-.BR execveat (2),
-or
-.BR uselib (2).
-Events of these types will not be raised in the situation where an
-interpreter is passed (or reads) a file for interpretation.
-.PP
-Additionally, if a mark has also been placed on the Linux dynamic
-linker, a user should also expect to receive an event for it when
-an ELF object has been successfully opened using
-.BR execve (2)
-or
-.BR execveat (2).
-.PP
-For example, if the following ELF binary were to be invoked and a
-.B FAN_OPEN_EXEC
-mark has been placed on /:
-.PP
-.in +4n
-.EX
-$ /bin/echo foo
-.EE
-.in
-.PP
-The listening application in this case would receive
-.B FAN_OPEN_EXEC
-events for both the ELF binary and interpreter, respectively:
-.PP
-.in +4n
-.EX
-/bin/echo
-/lib64/ld\-linux\-x86\-64.so.2
-.EE
-.in
-.SH BUGS
-The following bugs were present in before Linux 3.16:
-.IP \[bu] 3
-.\" Fixed by commit 0a8dd2db579f7a0ac7033d6b857c3d5dbaa77563
-If
-.I flags
-contains
-.BR FAN_MARK_FLUSH ,
-.IR dirfd ,
-and
-.I pathname
-must specify a valid filesystem object, even though this object is not used.
-.IP \[bu]
-.\" Fixed by commit d4c7cf6cffb1bc711a833b5e304ba5bcfe76398b
-.BR readdir (2)
-does not generate a
-.B FAN_ACCESS
-event.
-.IP \[bu]
-.\" Fixed by commit cc299a98eb13a9853675a9cbb90b30b4011e1406
-If
-.BR fanotify_mark ()
-is called with
-.BR FAN_MARK_FLUSH ,
-.I flags
-is not checked for invalid values.
-.SH SEE ALSO
-.BR fanotify_init (2),
-.BR fanotify (7)
diff --git a/man2/fattach.2 b/man2/fattach.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/fattach.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/fchdir.2 b/man2/fchdir.2
deleted file mode 100644
index 60b9685da..000000000
--- a/man2/fchdir.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/chdir.2
diff --git a/man2/fchmod.2 b/man2/fchmod.2
deleted file mode 100644
index 92647d2e3..000000000
--- a/man2/fchmod.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/chmod.2
diff --git a/man2/fchmodat.2 b/man2/fchmodat.2
deleted file mode 100644
index 92647d2e3..000000000
--- a/man2/fchmodat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/chmod.2
diff --git a/man2/fchown.2 b/man2/fchown.2
deleted file mode 100644
index f0a5635ae..000000000
--- a/man2/fchown.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/chown.2
diff --git a/man2/fchown32.2 b/man2/fchown32.2
deleted file mode 100644
index b8b9452b6..000000000
--- a/man2/fchown32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/fchown.2
diff --git a/man2/fchownat.2 b/man2/fchownat.2
deleted file mode 100644
index f0a5635ae..000000000
--- a/man2/fchownat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/chown.2
diff --git a/man2/fcntl.2 b/man2/fcntl.2
deleted file mode 100644
index 7bb909912..000000000
--- a/man2/fcntl.2
+++ /dev/null
@@ -1,2111 +0,0 @@
-.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\" and Copyright (C) 1993 Michael Haardt, Ian Jackson;
-.\" and Copyright (C) 1998 Jamie Lokier;
-.\" and Copyright (C) 2002-2010, 2014 Michael Kerrisk;
-.\" and Copyright (C) 2014 Jeff Layton
-.\" and Copyright (C) 2014 David Herrmann
-.\" and Copyright (C) 2017 Jens Axboe
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1995-09-26 by Andries Brouwer <aeb@cwi.nl>
-.\" and again on 960413 and 980804 and 981223.
-.\" Modified 1998-12-11 by Jamie Lokier <jamie@imbolc.ucc.ie>
-.\" Applied correction by Christian Ehrhardt - aeb, 990712
-.\" Modified 2002-04-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added note on F_SETFL and O_DIRECT
-.\" Complete rewrite + expansion of material on file locking
-.\" Incorporated description of F_NOTIFY, drawing on
-.\" Stephen Rothwell's notes in Documentation/dnotify.txt.
-.\" Added description of F_SETLEASE and F_GETLEASE
-.\" Corrected and polished, aeb, 020527.
-.\" Modified 2004-03-03 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified description of file leases: fixed some errors of detail
-.\" Replaced the term "lease contestant" by "lease breaker"
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.\" Modified 2004-12-08, added O_NOATIME after note from Martin Pool
-.\" 2004-12-10, mtk, noted F_GETOWN bug after suggestion from aeb.
-.\" 2005-04-08 Jamie Lokier <jamie@shareable.org>, mtk
-.\" Described behavior of F_SETOWN/F_SETSIG in
-.\" multithreaded processes, and generally cleaned
-.\" up the discussion of F_SETOWN.
-.\" 2005-05-20, Johannes Nicolai <johannes.nicolai@hpi.uni-potsdam.de>,
-.\" mtk: Noted F_SETOWN bug for socket file descriptor in Linux 2.4
-.\" and earlier. Added text on permissions required to send signal.
-.\" 2009-09-30, Michael Kerrisk
-.\" Note obsolete F_SETOWN behavior with threads.
-.\" Document F_SETOWN_EX and F_GETOWN_EX
-.\" 2010-06-17, Michael Kerrisk
-.\" Document F_SETPIPE_SZ and F_GETPIPE_SZ.
-.\" 2014-07-08, David Herrmann <dh.herrmann@gmail.com>
-.\" Document F_ADD_SEALS and F_GET_SEALS
-.\" 2017-06-26, Jens Axboe <axboe@kernel.dk>
-.\" Document F_{GET,SET}_RW_HINT and F_{GET,SET}_FILE_RW_HINT
-.\"
-.TH fcntl 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fcntl \- manipulate file descriptor
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <fcntl.h>
-.PP
-.BI "int fcntl(int " fd ", int " cmd ", ... /* " arg " */ );"
-.fi
-.SH DESCRIPTION
-.BR fcntl ()
-performs one of the operations described below on the open file descriptor
-.IR fd .
-The operation is determined by
-.IR cmd .
-.PP
-.BR fcntl ()
-can take an optional third argument.
-Whether or not this argument is required is determined by
-.IR cmd .
-The required argument type is indicated in parentheses after each
-.I cmd
-name (in most cases, the required type is
-.IR int ,
-and we identify the argument using the name
-.IR arg ),
-or
-.I void
-is specified if the argument is not required.
-.PP
-Certain of the operations below are supported only since a particular
-Linux kernel version.
-The preferred method of checking whether the host kernel supports
-a particular operation is to invoke
-.BR fcntl ()
-with the desired
-.I cmd
-value and then test whether the call failed with
-.BR EINVAL ,
-indicating that the kernel does not recognize this value.
-.SS Duplicating a file descriptor
-.TP
-.BR F_DUPFD " (\fIint\fP)"
-Duplicate the file descriptor
-.I fd
-using the lowest-numbered available file descriptor greater than or equal to
-.IR arg .
-This is different from
-.BR dup2 (2),
-which uses exactly the file descriptor specified.
-.IP
-On success, the new file descriptor is returned.
-.IP
-See
-.BR dup (2)
-for further details.
-.TP
-.BR F_DUPFD_CLOEXEC " (\fIint\fP; since Linux 2.6.24)"
-As for
-.BR F_DUPFD ,
-but additionally set the
-close-on-exec flag for the duplicate file descriptor.
-Specifying this flag permits a program to avoid an additional
-.BR fcntl ()
-.B F_SETFD
-operation to set the
-.B FD_CLOEXEC
-flag.
-For an explanation of why this flag is useful,
-see the description of
-.B O_CLOEXEC
-in
-.BR open (2).
-.SS File descriptor flags
-The following commands manipulate the flags associated with
-a file descriptor.
-Currently, only one such flag is defined:
-.BR FD_CLOEXEC ,
-the close-on-exec flag.
-If the
-.B FD_CLOEXEC
-bit is set,
-the file descriptor will automatically be closed during a successful
-.BR execve (2).
-(If the
-.BR execve (2)
-fails, the file descriptor is left open.)
-If the
-.B FD_CLOEXEC
-bit is not set, the file descriptor will remain open across an
-.BR execve (2).
-.TP
-.BR F_GETFD " (\fIvoid\fP)"
-Return (as the function result) the file descriptor flags;
-.I arg
-is ignored.
-.TP
-.BR F_SETFD " (\fIint\fP)"
-Set the file descriptor flags to the value specified by
-.IR arg .
-.PP
-In multithreaded programs, using
-.BR fcntl ()
-.B F_SETFD
-to set the close-on-exec flag at the same time as another thread performs a
-.BR fork (2)
-plus
-.BR execve (2)
-is vulnerable to a race condition that may unintentionally leak
-the file descriptor to the program executed in the child process.
-See the discussion of the
-.B O_CLOEXEC
-flag in
-.BR open (2)
-for details and a remedy to the problem.
-.SS File status flags
-Each open file description has certain associated status flags,
-initialized by
-.BR open (2)
-.\" or
-.\" .BR creat (2),
-and possibly modified by
-.BR fcntl ().
-Duplicated file descriptors
-(made with
-.BR dup (2),
-.BR fcntl (F_DUPFD),
-.BR fork (2),
-etc.) refer to the same open file description, and thus
-share the same file status flags.
-.PP
-The file status flags and their semantics are described in
-.BR open (2).
-.TP
-.BR F_GETFL " (\fIvoid\fP)"
-Return (as the function result)
-the file access mode and the file status flags;
-.I arg
-is ignored.
-.TP
-.BR F_SETFL " (\fIint\fP)"
-Set the file status flags to the value specified by
-.IR arg .
-File access mode
-.RB ( O_RDONLY ", " O_WRONLY ", " O_RDWR )
-and file creation flags
-(i.e.,
-.BR O_CREAT ", " O_EXCL ", " O_NOCTTY ", " O_TRUNC )
-in
-.I arg
-are ignored.
-On Linux, this command can change only the
-.BR O_APPEND ,
-.BR O_ASYNC ,
-.BR O_DIRECT ,
-.BR O_NOATIME ,
-and
-.B O_NONBLOCK
-flags.
-It is not possible to change the
-.B O_DSYNC
-and
-.B O_SYNC
-flags; see BUGS, below.
-.SS Advisory record locking
-Linux implements traditional ("process-associated") UNIX record locks,
-as standardized by POSIX.
-For a Linux-specific alternative with better semantics,
-see the discussion of open file description locks below.
-.PP
-.BR F_SETLK ,
-.BR F_SETLKW ,
-and
-.B F_GETLK
-are used to acquire, release, and test for the existence of record
-locks (also known as byte-range, file-segment, or file-region locks).
-The third argument,
-.IR lock ,
-is a pointer to a structure that has at least the following fields
-(in unspecified order).
-.PP
-.in +4n
-.EX
-struct flock {
- ...
- short l_type; /* Type of lock: F_RDLCK,
- F_WRLCK, F_UNLCK */
- short l_whence; /* How to interpret l_start:
- SEEK_SET, SEEK_CUR, SEEK_END */
- off_t l_start; /* Starting offset for lock */
- off_t l_len; /* Number of bytes to lock */
- pid_t l_pid; /* PID of process blocking our lock
- (set by F_GETLK and F_OFD_GETLK) */
- ...
-};
-.EE
-.in
-.PP
-The
-.IR l_whence ", " l_start ", and " l_len
-fields of this structure specify the range of bytes we wish to lock.
-Bytes past the end of the file may be locked,
-but not bytes before the start of the file.
-.PP
-.I l_start
-is the starting offset for the lock, and is interpreted
-relative to either:
-the start of the file (if
-.I l_whence
-is
-.BR SEEK_SET );
-the current file offset (if
-.I l_whence
-is
-.BR SEEK_CUR );
-or the end of the file (if
-.I l_whence
-is
-.BR SEEK_END ).
-In the final two cases,
-.I l_start
-can be a negative number provided the
-offset does not lie before the start of the file.
-.PP
-.I l_len
-specifies the number of bytes to be locked.
-If
-.I l_len
-is positive, then the range to be locked covers bytes
-.I l_start
-up to and including
-.IR l_start + l_len \-1.
-Specifying 0 for
-.I l_len
-has the special meaning: lock all bytes starting at the
-location specified by
-.IR l_whence " and " l_start
-through to the end of file, no matter how large the file grows.
-.PP
-POSIX.1-2001 allows (but does not require)
-an implementation to support a negative
-.I l_len
-value; if
-.I l_len
-is negative, the interval described by
-.I lock
-covers bytes
-.IR l_start + l_len
-up to and including
-.IR l_start \-1.
-This is supported since Linux 2.4.21 and Linux 2.5.49.
-.PP
-The
-.I l_type
-field can be used to place a read
-.RB ( F_RDLCK )
-or a write
-.RB ( F_WRLCK )
-lock on a file.
-Any number of processes may hold a read lock (shared lock)
-on a file region, but only one process may hold a write lock
-(exclusive lock).
-An exclusive lock excludes all other locks,
-both shared and exclusive.
-A single process can hold only one type of lock on a file region;
-if a new lock is applied to an already-locked region,
-then the existing lock is converted to the new lock type.
-(Such conversions may involve splitting, shrinking, or coalescing with
-an existing lock if the byte range specified by the new lock does not
-precisely coincide with the range of the existing lock.)
-.TP
-.BR F_SETLK " (\fIstruct flock *\fP)"
-Acquire a lock (when
-.I l_type
-is
-.B F_RDLCK
-or
-.BR F_WRLCK )
-or release a lock (when
-.I l_type
-is
-.BR F_UNLCK )
-on the bytes specified by the
-.IR l_whence ", " l_start ", and " l_len
-fields of
-.IR lock .
-If a conflicting lock is held by another process,
-this call returns \-1 and sets
-.I errno
-to
-.B EACCES
-or
-.BR EAGAIN .
-(The error returned in this case differs across implementations,
-so POSIX requires a portable application to check for both errors.)
-.TP
-.BR F_SETLKW " (\fIstruct flock *\fP)"
-As for
-.BR F_SETLK ,
-but if a conflicting lock is held on the file, then wait for that
-lock to be released.
-If a signal is caught while waiting, then the call is interrupted
-and (after the signal handler has returned)
-returns immediately (with return value \-1 and
-.I errno
-set to
-.BR EINTR ;
-see
-.BR signal (7)).
-.TP
-.BR F_GETLK " (\fIstruct flock *\fP)"
-On input to this call,
-.I lock
-describes a lock we would like to place on the file.
-If the lock could be placed,
-.BR fcntl ()
-does not actually place it, but returns
-.B F_UNLCK
-in the
-.I l_type
-field of
-.I lock
-and leaves the other fields of the structure unchanged.
-.IP
-If one or more incompatible locks would prevent
-this lock being placed, then
-.BR fcntl ()
-returns details about one of those locks in the
-.IR l_type ", " l_whence ", " l_start ", and " l_len
-fields of
-.IR lock .
-If the conflicting lock is a traditional (process-associated) record lock,
-then the
-.I l_pid
-field is set to the PID of the process holding that lock.
-If the conflicting lock is an open file description lock, then
-.I l_pid
-is set to \-1.
-Note that the returned information
-may already be out of date by the time the caller inspects it.
-.PP
-In order to place a read lock,
-.I fd
-must be open for reading.
-In order to place a write lock,
-.I fd
-must be open for writing.
-To place both types of lock, open a file read-write.
-.PP
-When placing locks with
-.BR F_SETLKW ,
-the kernel detects
-.IR deadlocks ,
-whereby two or more processes have their
-lock requests mutually blocked by locks held by the other processes.
-For example, suppose process A holds a write lock on byte 100 of a file,
-and process B holds a write lock on byte 200.
-If each process then attempts to lock the byte already
-locked by the other process using
-.BR F_SETLKW ,
-then, without deadlock detection,
-both processes would remain blocked indefinitely.
-When the kernel detects such deadlocks,
-it causes one of the blocking lock requests to immediately fail with the error
-.BR EDEADLK ;
-an application that encounters such an error should release
-some of its locks to allow other applications to proceed before
-attempting regain the locks that it requires.
-Circular deadlocks involving more than two processes are also detected.
-Note, however, that there are limitations to the kernel's
-deadlock-detection algorithm; see BUGS.
-.PP
-As well as being removed by an explicit
-.BR F_UNLCK ,
-record locks are automatically released when the process terminates.
-.PP
-Record locks are not inherited by a child created via
-.BR fork (2),
-but are preserved across an
-.BR execve (2).
-.PP
-Because of the buffering performed by the
-.BR stdio (3)
-library, the use of record locking with routines in that package
-should be avoided; use
-.BR read (2)
-and
-.BR write (2)
-instead.
-.PP
-The record locks described above are associated with the process
-(unlike the open file description locks described below).
-This has some unfortunate consequences:
-.IP \[bu] 3
-If a process closes
-.I any
-file descriptor referring to a file,
-then all of the process's locks on that file are released,
-regardless of the file descriptor(s) on which the locks were obtained.
-.\" (Additional file descriptors referring to the same file
-.\" may have been obtained by calls to
-.\" .BR open "(2), " dup "(2), " dup2 "(2), or " fcntl ().)
-This is bad: it means that a process can lose its locks on
-a file such as
-.I /etc/passwd
-or
-.I /etc/mtab
-when for some reason a library function decides to open, read,
-and close the same file.
-.IP \[bu]
-The threads in a process share locks.
-In other words,
-a multithreaded program can't use record locking to ensure
-that threads don't simultaneously access the same region of a file.
-.PP
-Open file description locks solve both of these problems.
-.SS Open file description locks (non-POSIX)
-Open file description locks are advisory byte-range locks whose operation is
-in most respects identical to the traditional record locks described above.
-This lock type is Linux-specific,
-and available since Linux 3.15.
-(There is a proposal with the Austin Group
-.\" FIXME . Review progress into POSIX
-.\" http://austingroupbugs.net/view.php?id=768
-to include this lock type in the next revision of POSIX.1.)
-For an explanation of open file descriptions, see
-.BR open (2).
-.PP
-The principal difference between the two lock types
-is that whereas traditional record locks
-are associated with a process,
-open file description locks are associated with the
-open file description on which they are acquired,
-much like locks acquired with
-.BR flock (2).
-Consequently (and unlike traditional advisory record locks),
-open file description locks are inherited across
-.BR fork (2)
-(and
-.BR clone (2)
-with
-.BR CLONE_FILES ),
-and are only automatically released on the last close
-of the open file description,
-instead of being released on any close of the file.
-.PP
-Conflicting lock combinations
-(i.e., a read lock and a write lock or two write locks)
-where one lock is an open file description lock and the other
-is a traditional record lock conflict
-even when they are acquired by the same process on the same file descriptor.
-.PP
-Open file description locks placed via the same open file description
-(i.e., via the same file descriptor,
-or via a duplicate of the file descriptor created by
-.BR fork (2),
-.BR dup (2),
-.BR fcntl ()
-.BR F_DUPFD ,
-and so on) are always compatible:
-if a new lock is placed on an already locked region,
-then the existing lock is converted to the new lock type.
-(Such conversions may result in splitting, shrinking, or coalescing with
-an existing lock as discussed above.)
-.PP
-On the other hand, open file description locks may conflict with
-each other when they are acquired via different open file descriptions.
-Thus, the threads in a multithreaded program can use
-open file description locks to synchronize access to a file region
-by having each thread perform its own
-.BR open (2)
-on the file and applying locks via the resulting file descriptor.
-.PP
-As with traditional advisory locks, the third argument to
-.BR fcntl (),
-.IR lock ,
-is a pointer to an
-.I flock
-structure.
-By contrast with traditional record locks, the
-.I l_pid
-field of that structure must be set to zero
-when using the commands described below.
-.PP
-The commands for working with open file description locks are analogous
-to those used with traditional locks:
-.TP
-.BR F_OFD_SETLK " (\fIstruct flock *\fP)"
-Acquire an open file description lock (when
-.I l_type
-is
-.B F_RDLCK
-or
-.BR F_WRLCK )
-or release an open file description lock (when
-.I l_type
-is
-.BR F_UNLCK )
-on the bytes specified by the
-.IR l_whence ", " l_start ", and " l_len
-fields of
-.IR lock .
-If a conflicting lock is held by another process,
-this call returns \-1 and sets
-.I errno
-to
-.BR EAGAIN .
-.TP
-.BR F_OFD_SETLKW " (\fIstruct flock *\fP)"
-As for
-.BR F_OFD_SETLK ,
-but if a conflicting lock is held on the file, then wait for that lock to be
-released.
-If a signal is caught while waiting, then the call is interrupted
-and (after the signal handler has returned) returns immediately
-(with return value \-1 and
-.I errno
-set to
-.BR EINTR ;
-see
-.BR signal (7)).
-.TP
-.BR F_OFD_GETLK " (\fIstruct flock *\fP)"
-On input to this call,
-.I lock
-describes an open file description lock we would like to place on the file.
-If the lock could be placed,
-.BR fcntl ()
-does not actually place it, but returns
-.B F_UNLCK
-in the
-.I l_type
-field of
-.I lock
-and leaves the other fields of the structure unchanged.
-If one or more incompatible locks would prevent this lock being placed,
-then details about one of these locks are returned via
-.IR lock ,
-as described above for
-.BR F_GETLK .
-.PP
-In the current implementation,
-.\" commit 57b65325fe34ec4c917bc4e555144b4a94d9e1f7
-no deadlock detection is performed for open file description locks.
-(This contrasts with process-associated record locks,
-for which the kernel does perform deadlock detection.)
-.\"
-.SS Mandatory locking
-.IR Warning :
-the Linux implementation of mandatory locking is unreliable.
-See BUGS below.
-Because of these bugs,
-and the fact that the feature is believed to be little used,
-since Linux 4.5, mandatory locking has been made an optional feature,
-governed by a configuration option
-.RB ( CONFIG_MANDATORY_FILE_LOCKING ).
-This feature is no longer supported at all in Linux 5.15 and above.
-.PP
-By default, both traditional (process-associated) and open file description
-record locks are advisory.
-Advisory locks are not enforced and are useful only between
-cooperating processes.
-.PP
-Both lock types can also be mandatory.
-Mandatory locks are enforced for all processes.
-If a process tries to perform an incompatible access (e.g.,
-.BR read (2)
-or
-.BR write (2))
-on a file region that has an incompatible mandatory lock,
-then the result depends upon whether the
-.B O_NONBLOCK
-flag is enabled for its open file description.
-If the
-.B O_NONBLOCK
-flag is not enabled, then
-the system call is blocked until the lock is removed
-or converted to a mode that is compatible with the access.
-If the
-.B O_NONBLOCK
-flag is enabled, then the system call fails with the error
-.BR EAGAIN .
-.PP
-To make use of mandatory locks, mandatory locking must be enabled
-both on the filesystem that contains the file to be locked,
-and on the file itself.
-Mandatory locking is enabled on a filesystem
-using the "\-o mand" option to
-.BR mount (8),
-or the
-.B MS_MANDLOCK
-flag for
-.BR mount (2).
-Mandatory locking is enabled on a file by disabling
-group execute permission on the file and enabling the set-group-ID
-permission bit (see
-.BR chmod (1)
-and
-.BR chmod (2)).
-.PP
-Mandatory locking is not specified by POSIX.
-Some other systems also support mandatory locking,
-although the details of how to enable it vary across systems.
-.\"
-.SS Lost locks
-When an advisory lock is obtained on a networked filesystem such as
-NFS it is possible that the lock might get lost.
-This may happen due to administrative action on the server, or due to a
-network partition (i.e., loss of network connectivity with the server)
-which lasts long enough for the server to assume
-that the client is no longer functioning.
-.PP
-When the filesystem determines that a lock has been lost, future
-.BR read (2)
-or
-.BR write (2)
-requests may fail with the error
-.BR EIO .
-This error will persist until the lock is removed or the file
-descriptor is closed.
-Since Linux 3.12,
-.\" commit ef1820f9be27b6ad158f433ab38002ab8131db4d
-this happens at least for NFSv4 (including all minor versions).
-.PP
-Some versions of UNIX send a signal
-.RB ( SIGLOST )
-in this circumstance.
-Linux does not define this signal, and does not provide any
-asynchronous notification of lost locks.
-.\"
-.SS Managing signals
-.BR F_GETOWN ,
-.BR F_SETOWN ,
-.BR F_GETOWN_EX ,
-.BR F_SETOWN_EX ,
-.BR F_GETSIG ,
-and
-.B F_SETSIG
-are used to manage I/O availability signals:
-.TP
-.BR F_GETOWN " (\fIvoid\fP)"
-Return (as the function result)
-the process ID or process group ID currently receiving
-.B SIGIO
-and
-.B SIGURG
-signals for events on file descriptor
-.IR fd .
-Process IDs are returned as positive values;
-process group IDs are returned as negative values (but see BUGS below).
-.I arg
-is ignored.
-.TP
-.BR F_SETOWN " (\fIint\fP)"
-Set the process ID or process group ID that will receive
-.B SIGIO
-and
-.B SIGURG
-signals for events on the file descriptor
-.IR fd .
-The target process or process group ID is specified in
-.IR arg .
-A process ID is specified as a positive value;
-a process group ID is specified as a negative value.
-Most commonly, the calling process specifies itself as the owner
-(that is,
-.I arg
-is specified as
-.BR getpid (2)).
-.IP
-As well as setting the file descriptor owner,
-one must also enable generation of signals on the file descriptor.
-This is done by using the
-.BR fcntl ()
-.B F_SETFL
-command to set the
-.B O_ASYNC
-file status flag on the file descriptor.
-Subsequently, a
-.B SIGIO
-signal is sent whenever input or output becomes possible
-on the file descriptor.
-The
-.BR fcntl ()
-.B F_SETSIG
-command can be used to obtain delivery of a signal other than
-.BR SIGIO .
-.IP
-Sending a signal to the owner process (group) specified by
-.B F_SETOWN
-is subject to the same permissions checks as are described for
-.BR kill (2),
-where the sending process is the one that employs
-.B F_SETOWN
-(but see BUGS below).
-If this permission check fails, then the signal is
-silently discarded.
-.IR Note :
-The
-.B F_SETOWN
-operation records the caller's credentials at the time of the
-.BR fcntl ()
-call,
-and it is these saved credentials that are used for the permission checks.
-.IP
-If the file descriptor
-.I fd
-refers to a socket,
-.B F_SETOWN
-also selects
-the recipient of
-.B SIGURG
-signals that are delivered when out-of-band
-data arrives on that socket.
-.RB ( SIGURG
-is sent in any situation where
-.BR select (2)
-would report the socket as having an "exceptional condition".)
-.\" The following appears to be rubbish. It doesn't seem to
-.\" be true according to the kernel source, and I can write
-.\" a program that gets a terminal-generated SIGIO even though
-.\" it is not the foreground process group of the terminal.
-.\" -- MTK, 8 Apr 05
-.\"
-.\" If the file descriptor
-.\" .I fd
-.\" refers to a terminal device, then SIGIO
-.\" signals are sent to the foreground process group of the terminal.
-.IP
-The following was true in Linux 2.6.x up to and including Linux 2.6.11:
-.RS
-.IP
-If a nonzero value is given to
-.B F_SETSIG
-in a multithreaded process running with a threading library
-that supports thread groups (e.g., NPTL),
-then a positive value given to
-.B F_SETOWN
-has a different meaning:
-.\" The relevant place in the (2.6) kernel source is the
-.\" 'switch' in fs/fcntl.c::send_sigio_to_task() -- MTK, Apr 2005
-instead of being a process ID identifying a whole process,
-it is a thread ID identifying a specific thread within a process.
-Consequently, it may be necessary to pass
-.B F_SETOWN
-the result of
-.BR gettid (2)
-instead of
-.BR getpid (2)
-to get sensible results when
-.B F_SETSIG
-is used.
-(In current Linux threading implementations,
-a main thread's thread ID is the same as its process ID.
-This means that a single-threaded program can equally use
-.BR gettid (2)
-or
-.BR getpid (2)
-in this scenario.)
-Note, however, that the statements in this paragraph do not apply
-to the
-.B SIGURG
-signal generated for out-of-band data on a socket:
-this signal is always sent to either a process or a process group,
-depending on the value given to
-.BR F_SETOWN .
-.\" send_sigurg()/send_sigurg_to_task() bypasses
-.\" kill_fasync()/send_sigio()/send_sigio_to_task()
-.\" to directly call send_group_sig_info()
-.\" -- MTK, Apr 2005 (kernel 2.6.11)
-.RE
-.IP
-The above behavior was accidentally dropped in Linux 2.6.12,
-and won't be restored.
-From Linux 2.6.32 onward, use
-.B F_SETOWN_EX
-to target
-.B SIGIO
-and
-.B SIGURG
-signals at a particular thread.
-.TP
-.BR F_GETOWN_EX " (\fIstruct f_owner_ex *\fP) (since Linux 2.6.32)"
-Return the current file descriptor owner settings
-as defined by a previous
-.B F_SETOWN_EX
-operation.
-The information is returned in the structure pointed to by
-.IR arg ,
-which has the following form:
-.IP
-.in +4n
-.EX
-struct f_owner_ex {
- int type;
- pid_t pid;
-};
-.EE
-.in
-.IP
-The
-.I type
-field will have one of the values
-.BR F_OWNER_TID ,
-.BR F_OWNER_PID ,
-or
-.BR F_OWNER_PGRP .
-The
-.I pid
-field is a positive integer representing a thread ID, process ID,
-or process group ID.
-See
-.B F_SETOWN_EX
-for more details.
-.TP
-.BR F_SETOWN_EX " (\fIstruct f_owner_ex *\fP) (since Linux 2.6.32)"
-This operation performs a similar task to
-.BR F_SETOWN .
-It allows the caller to direct I/O availability signals
-to a specific thread, process, or process group.
-The caller specifies the target of signals via
-.IR arg ,
-which is a pointer to a
-.I f_owner_ex
-structure.
-The
-.I type
-field has one of the following values, which define how
-.I pid
-is interpreted:
-.RS
-.TP
-.B F_OWNER_TID
-Send the signal to the thread whose thread ID
-(the value returned by a call to
-.BR clone (2)
-or
-.BR gettid (2))
-is specified in
-.IR pid .
-.TP
-.B F_OWNER_PID
-Send the signal to the process whose ID
-is specified in
-.IR pid .
-.TP
-.B F_OWNER_PGRP
-Send the signal to the process group whose ID
-is specified in
-.IR pid .
-(Note that, unlike with
-.BR F_SETOWN ,
-a process group ID is specified as a positive value here.)
-.RE
-.TP
-.BR F_GETSIG " (\fIvoid\fP)"
-Return (as the function result)
-the signal sent when input or output becomes possible.
-A value of zero means
-.B SIGIO
-is sent.
-Any other value (including
-.BR SIGIO )
-is the
-signal sent instead, and in this case additional info is available to
-the signal handler if installed with
-.BR SA_SIGINFO .
-.I arg
-is ignored.
-.TP
-.BR F_SETSIG " (\fIint\fP)"
-Set the signal sent when input or output becomes possible
-to the value given in
-.IR arg .
-A value of zero means to send the default
-.B SIGIO
-signal.
-Any other value (including
-.BR SIGIO )
-is the signal to send instead, and in this case additional info
-is available to the signal handler if installed with
-.BR SA_SIGINFO .
-.\"
-.\" The following was true only up until Linux 2.6.11:
-.\"
-.\" Additionally, passing a nonzero value to
-.\" .B F_SETSIG
-.\" changes the signal recipient from a whole process to a specific thread
-.\" within a process.
-.\" See the description of
-.\" .B F_SETOWN
-.\" for more details.
-.IP
-By using
-.B F_SETSIG
-with a nonzero value, and setting
-.B SA_SIGINFO
-for the
-signal handler (see
-.BR sigaction (2)),
-extra information about I/O events is passed to
-the handler in a
-.I siginfo_t
-structure.
-If the
-.I si_code
-field indicates the source is
-.BR SI_SIGIO ,
-the
-.I si_fd
-field gives the file descriptor associated with the event.
-Otherwise,
-there is no indication which file descriptors are pending, and you
-should use the usual mechanisms
-.RB ( select (2),
-.BR poll (2),
-.BR read (2)
-with
-.B O_NONBLOCK
-set etc.) to determine which file descriptors are available for I/O.
-.IP
-Note that the file descriptor provided in
-.I si_fd
-is the one that was specified during the
-.B F_SETSIG
-operation.
-This can lead to an unusual corner case.
-If the file descriptor is duplicated
-.RB ( dup (2)
-or similar), and the original file descriptor is closed,
-then I/O events will continue to be generated, but the
-.I si_fd
-field will contain the number of the now closed file descriptor.
-.IP
-By selecting a real time signal (value >=
-.BR SIGRTMIN ),
-multiple I/O events may be queued using the same signal numbers.
-(Queuing is dependent on available memory.)
-Extra information is available
-if
-.B SA_SIGINFO
-is set for the signal handler, as above.
-.IP
-Note that Linux imposes a limit on the
-number of real-time signals that may be queued to a
-process (see
-.BR getrlimit (2)
-and
-.BR signal (7))
-and if this limit is reached, then the kernel reverts to
-delivering
-.BR SIGIO ,
-and this signal is delivered to the entire
-process rather than to a specific thread.
-.\" See fs/fcntl.c::send_sigio_to_task() (2.4/2.6) sources -- MTK, Apr 05
-.PP
-Using these mechanisms, a program can implement fully asynchronous I/O
-without using
-.BR select (2)
-or
-.BR poll (2)
-most of the time.
-.PP
-The use of
-.B O_ASYNC
-is specific to BSD and Linux.
-The only use of
-.B F_GETOWN
-and
-.B F_SETOWN
-specified in POSIX.1 is in conjunction with the use of the
-.B SIGURG
-signal on sockets.
-(POSIX does not specify the
-.B SIGIO
-signal.)
-.BR F_GETOWN_EX ,
-.BR F_SETOWN_EX ,
-.BR F_GETSIG ,
-and
-.B F_SETSIG
-are Linux-specific.
-POSIX has asynchronous I/O and the
-.I aio_sigevent
-structure to achieve similar things; these are also available
-in Linux as part of the GNU C Library (glibc).
-.SS Leases
-.B F_SETLEASE
-and
-.B F_GETLEASE
-(Linux 2.4 onward) are used to establish a new lease,
-and retrieve the current lease, on the open file description
-referred to by the file descriptor
-.IR fd .
-A file lease provides a mechanism whereby the process holding
-the lease (the "lease holder") is notified (via delivery of a signal)
-when a process (the "lease breaker") tries to
-.BR open (2)
-or
-.BR truncate (2)
-the file referred to by that file descriptor.
-.TP
-.BR F_SETLEASE " (\fIint\fP)"
-Set or remove a file lease according to which of the following
-values is specified in the integer
-.IR arg :
-.RS
-.TP
-.B F_RDLCK
-Take out a read lease.
-This will cause the calling process to be notified when
-the file is opened for writing or is truncated.
-.\" The following became true in Linux 2.6.10:
-.\" See the man-pages-2.09 Changelog for further info.
-A read lease can be placed only on a file descriptor that
-is opened read-only.
-.TP
-.B F_WRLCK
-Take out a write lease.
-This will cause the caller to be notified when
-the file is opened for reading or writing or is truncated.
-A write lease may be placed on a file only if there are no
-other open file descriptors for the file.
-.TP
-.B F_UNLCK
-Remove our lease from the file.
-.RE
-.PP
-Leases are associated with an open file description (see
-.BR open (2)).
-This means that duplicate file descriptors (created by, for example,
-.BR fork (2)
-or
-.BR dup (2))
-refer to the same lease, and this lease may be modified
-or released using any of these descriptors.
-Furthermore, the lease is released by either an explicit
-.B F_UNLCK
-operation on any of these duplicate file descriptors, or when all
-such file descriptors have been closed.
-.PP
-Leases may be taken out only on regular files.
-An unprivileged process may take out a lease only on a file whose
-UID (owner) matches the filesystem UID of the process.
-A process with the
-.B CAP_LEASE
-capability may take out leases on arbitrary files.
-.TP
-.BR F_GETLEASE " (\fIvoid\fP)"
-Indicates what type of lease is associated with the file descriptor
-.I fd
-by returning either
-.BR F_RDLCK ", " F_WRLCK ", or " F_UNLCK ,
-indicating, respectively, a read lease , a write lease, or no lease.
-.I arg
-is ignored.
-.PP
-When a process (the "lease breaker") performs an
-.BR open (2)
-or
-.BR truncate (2)
-that conflicts with a lease established via
-.BR F_SETLEASE ,
-the system call is blocked by the kernel and
-the kernel notifies the lease holder by sending it a signal
-.RB ( SIGIO
-by default).
-The lease holder should respond to receipt of this signal by doing
-whatever cleanup is required in preparation for the file to be
-accessed by another process (e.g., flushing cached buffers) and
-then either remove or downgrade its lease.
-A lease is removed by performing an
-.B F_SETLEASE
-command specifying
-.I arg
-as
-.BR F_UNLCK .
-If the lease holder currently holds a write lease on the file,
-and the lease breaker is opening the file for reading,
-then it is sufficient for the lease holder to downgrade
-the lease to a read lease.
-This is done by performing an
-.B F_SETLEASE
-command specifying
-.I arg
-as
-.BR F_RDLCK .
-.PP
-If the lease holder fails to downgrade or remove the lease within
-the number of seconds specified in
-.IR /proc/sys/fs/lease\-break\-time ,
-then the kernel forcibly removes or downgrades the lease holder's lease.
-.PP
-Once a lease break has been initiated,
-.B F_GETLEASE
-returns the target lease type (either
-.B F_RDLCK
-or
-.BR F_UNLCK ,
-depending on what would be compatible with the lease breaker)
-until the lease holder voluntarily downgrades or removes the lease or
-the kernel forcibly does so after the lease break timer expires.
-.PP
-Once the lease has been voluntarily or forcibly removed or downgraded,
-and assuming the lease breaker has not unblocked its system call,
-the kernel permits the lease breaker's system call to proceed.
-.PP
-If the lease breaker's blocked
-.BR open (2)
-or
-.BR truncate (2)
-is interrupted by a signal handler,
-then the system call fails with the error
-.BR EINTR ,
-but the other steps still occur as described above.
-If the lease breaker is killed by a signal while blocked in
-.BR open (2)
-or
-.BR truncate (2),
-then the other steps still occur as described above.
-If the lease breaker specifies the
-.B O_NONBLOCK
-flag when calling
-.BR open (2),
-then the call immediately fails with the error
-.BR EWOULDBLOCK ,
-but the other steps still occur as described above.
-.PP
-The default signal used to notify the lease holder is
-.BR SIGIO ,
-but this can be changed using the
-.B F_SETSIG
-command to
-.BR fcntl ().
-If a
-.B F_SETSIG
-command is performed (even one specifying
-.BR SIGIO ),
-and the signal
-handler is established using
-.BR SA_SIGINFO ,
-then the handler will receive a
-.I siginfo_t
-structure as its second argument, and the
-.I si_fd
-field of this argument will hold the file descriptor of the leased file
-that has been accessed by another process.
-(This is useful if the caller holds leases against multiple files.)
-.SS File and directory change notification (dnotify)
-.TP
-.BR F_NOTIFY " (\fIint\fP)"
-(Linux 2.4 onward)
-Provide notification when the directory referred to by
-.I fd
-or any of the files that it contains is changed.
-The events to be notified are specified in
-.IR arg ,
-which is a bit mask specified by ORing together zero or more of
-the following bits:
-.PP
-.RS
-.PD 0
-.TP
-.B DN_ACCESS
-A file was accessed
-.RB ( read (2),
-.BR pread (2),
-.BR readv (2),
-and similar)
-.TP
-.B DN_MODIFY
-A file was modified
-.RB ( write (2),
-.BR pwrite (2),
-.BR writev (2),
-.BR truncate (2),
-.BR ftruncate (2),
-and similar).
-.TP
-.B DN_CREATE
-A file was created
-.RB ( open (2),
-.BR creat (2),
-.BR mknod (2),
-.BR mkdir (2),
-.BR link (2),
-.BR symlink (2),
-.BR rename (2)
-into this directory).
-.TP
-.B DN_DELETE
-A file was unlinked
-.RB ( unlink (2),
-.BR rename (2)
-to another directory,
-.BR rmdir (2)).
-.TP
-.B DN_RENAME
-A file was renamed within this directory
-.RB ( rename (2)).
-.TP
-.B DN_ATTRIB
-The attributes of a file were changed
-.RB ( chown (2),
-.BR chmod (2),
-.BR utime (2),
-.BR utimensat (2),
-and similar).
-.PD
-.RE
-.IP
-(In order to obtain these definitions, the
-.B _GNU_SOURCE
-feature test macro must be defined before including
-.I any
-header files.)
-.IP
-Directory notifications are normally "one-shot", and the application
-must reregister to receive further notifications.
-Alternatively, if
-.B DN_MULTISHOT
-is included in
-.IR arg ,
-then notification will remain in effect until explicitly removed.
-.IP
-.\" The following does seem a poor API-design choice...
-A series of
-.B F_NOTIFY
-requests is cumulative, with the events in
-.I arg
-being added to the set already monitored.
-To disable notification of all events, make an
-.B F_NOTIFY
-call specifying
-.I arg
-as 0.
-.IP
-Notification occurs via delivery of a signal.
-The default signal is
-.BR SIGIO ,
-but this can be changed using the
-.B F_SETSIG
-command to
-.BR fcntl ().
-(Note that
-.B SIGIO
-is one of the nonqueuing standard signals;
-switching to the use of a real-time signal means that
-multiple notifications can be queued to the process.)
-In the latter case, the signal handler receives a
-.I siginfo_t
-structure as its second argument (if the handler was
-established using
-.BR SA_SIGINFO )
-and the
-.I si_fd
-field of this structure contains the file descriptor which
-generated the notification (useful when establishing notification
-on multiple directories).
-.IP
-Especially when using
-.BR DN_MULTISHOT ,
-a real time signal should be used for notification,
-so that multiple notifications can be queued.
-.IP
-.B NOTE:
-New applications should use the
-.I inotify
-interface (available since Linux 2.6.13),
-which provides a much superior interface for obtaining notifications of
-filesystem events.
-See
-.BR inotify (7).
-.SS Changing the capacity of a pipe
-.TP
-.BR F_SETPIPE_SZ " (\fIint\fP; since Linux 2.6.35)"
-Change the capacity of the pipe referred to by
-.I fd
-to be at least
-.I arg
-bytes.
-An unprivileged process can adjust the pipe capacity to any value
-between the system page size and the limit defined in
-.I /proc/sys/fs/pipe\-max\-size
-(see
-.BR proc (5)).
-Attempts to set the pipe capacity below the page size are silently
-rounded up to the page size.
-Attempts by an unprivileged process to set the pipe capacity above the limit in
-.I /proc/sys/fs/pipe\-max\-size
-yield the error
-.BR EPERM ;
-a privileged process
-.RB ( CAP_SYS_RESOURCE )
-can override the limit.
-.IP
-When allocating the buffer for the pipe,
-the kernel may use a capacity larger than
-.IR arg ,
-if that is convenient for the implementation.
-(In the current implementation,
-the allocation is the next higher power-of-two page-size multiple
-of the requested size.)
-The actual capacity (in bytes) that is set is returned as the function result.
-.IP
-Attempting to set the pipe capacity smaller than the amount
-of buffer space currently used to store data produces the error
-.BR EBUSY .
-.IP
-Note that because of the way the pages of the pipe buffer
-are employed when data is written to the pipe,
-the number of bytes that can be written may be less than the nominal size,
-depending on the size of the writes.
-.TP
-.BR F_GETPIPE_SZ " (\fIvoid\fP; since Linux 2.6.35)"
-Return (as the function result) the capacity of the pipe referred to by
-.IR fd .
-.\"
-.SS File Sealing
-File seals limit the set of allowed operations on a given file.
-For each seal that is set on a file,
-a specific set of operations will fail with
-.B EPERM
-on this file from now on.
-The file is said to be sealed.
-The default set of seals depends on the type of the underlying
-file and filesystem.
-For an overview of file sealing, a discussion of its purpose,
-and some code examples, see
-.BR memfd_create (2).
-.PP
-Currently,
-file seals can be applied only to a file descriptor returned by
-.BR memfd_create (2)
-(if the
-.B MFD_ALLOW_SEALING
-was employed).
-On other filesystems, all
-.BR fcntl ()
-operations that operate on seals will return
-.BR EINVAL .
-.PP
-Seals are a property of an inode.
-Thus, all open file descriptors referring to the same inode share
-the same set of seals.
-Furthermore, seals can never be removed, only added.
-.TP
-.BR F_ADD_SEALS " (\fIint\fP; since Linux 3.17)"
-Add the seals given in the bit-mask argument
-.I arg
-to the set of seals of the inode referred to by the file descriptor
-.IR fd .
-Seals cannot be removed again.
-Once this call succeeds, the seals are enforced by the kernel immediately.
-If the current set of seals includes
-.B F_SEAL_SEAL
-(see below), then this call will be rejected with
-.BR EPERM .
-Adding a seal that is already set is a no-op, in case
-.B F_SEAL_SEAL
-is not set already.
-In order to place a seal, the file descriptor
-.I fd
-must be writable.
-.TP
-.BR F_GET_SEALS " (\fIvoid\fP; since Linux 3.17)"
-Return (as the function result) the current set of seals
-of the inode referred to by
-.IR fd .
-If no seals are set, 0 is returned.
-If the file does not support sealing, \-1 is returned and
-.I errno
-is set to
-.BR EINVAL .
-.PP
-The following seals are available:
-.TP
-.B F_SEAL_SEAL
-If this seal is set, any further call to
-.BR fcntl ()
-with
-.B F_ADD_SEALS
-fails with the error
-.BR EPERM .
-Therefore, this seal prevents any modifications to the set of seals itself.
-If the initial set of seals of a file includes
-.BR F_SEAL_SEAL ,
-then this effectively causes the set of seals to be constant and locked.
-.TP
-.B F_SEAL_SHRINK
-If this seal is set, the file in question cannot be reduced in size.
-This affects
-.BR open (2)
-with the
-.B O_TRUNC
-flag as well as
-.BR truncate (2)
-and
-.BR ftruncate (2).
-Those calls fail with
-.B EPERM
-if you try to shrink the file in question.
-Increasing the file size is still possible.
-.TP
-.B F_SEAL_GROW
-If this seal is set, the size of the file in question cannot be increased.
-This affects
-.BR write (2)
-beyond the end of the file,
-.BR truncate (2),
-.BR ftruncate (2),
-and
-.BR fallocate (2).
-These calls fail with
-.B EPERM
-if you use them to increase the file size.
-If you keep the size or shrink it, those calls still work as expected.
-.TP
-.B F_SEAL_WRITE
-If this seal is set, you cannot modify the contents of the file.
-Note that shrinking or growing the size of the file is
-still possible and allowed.
-.\" One or more other seals are typically used with F_SEAL_WRITE
-.\" because, given a file with the F_SEAL_WRITE seal set, then,
-.\" while it would no longer be possible to (say) write zeros into
-.\" the last 100 bytes of a file, it would still be possible
-.\" to (say) shrink the file by 100 bytes using ftruncate(), and
-.\" then increase the file size by 100 bytes, which would have
-.\" the effect of replacing the last hundred bytes by zeros.
-.\"
-Thus, this seal is normally used in combination with one of the other seals.
-This seal affects
-.BR write (2)
-and
-.BR fallocate (2)
-(only in combination with the
-.B FALLOC_FL_PUNCH_HOLE
-flag).
-Those calls fail with
-.B EPERM
-if this seal is set.
-Furthermore, trying to create new shared, writable memory-mappings via
-.BR mmap (2)
-will also fail with
-.BR EPERM .
-.IP
-Using the
-.B F_ADD_SEALS
-operation to set the
-.B F_SEAL_WRITE
-seal fails with
-.B EBUSY
-if any writable, shared mapping exists.
-Such mappings must be unmapped before you can add this seal.
-Furthermore, if there are any asynchronous I/O operations
-.RB ( io_submit (2))
-pending on the file,
-all outstanding writes will be discarded.
-.TP
-.BR F_SEAL_FUTURE_WRITE " (since Linux 5.1)"
-The effect of this seal is similar to
-.BR F_SEAL_WRITE ,
-but the contents of the file can still be modified via
-shared writable mappings that were created prior to the seal being set.
-Any attempt to create a new writable mapping on the file via
-.BR mmap (2)
-will fail with
-.BR EPERM .
-Likewise, an attempt to write to the file via
-.BR write (2)
-will fail with
-.BR EPERM .
-.IP
-Using this seal,
-one process can create a memory buffer that it can continue to modify
-while sharing that buffer on a "read-only" basis with other processes.
-.\"
-.SS File read/write hints
-Write lifetime hints can be used to inform the kernel about the relative
-expected lifetime of writes on a given inode or
-via a particular open file description.
-(See
-.BR open (2)
-for an explanation of open file descriptions.)
-In this context, the term "write lifetime" means
-the expected time the data will live on media, before
-being overwritten or erased.
-.PP
-An application may use the different hint values specified below to
-separate writes into different write classes,
-so that multiple users or applications running on a single storage back-end
-can aggregate their I/O patterns in a consistent manner.
-However, there are no functional semantics implied by these flags,
-and different I/O classes can use the write lifetime hints
-in arbitrary ways, so long as the hints are used consistently.
-.PP
-The following operations can be applied to the file descriptor,
-.IR fd :
-.TP
-.BR F_GET_RW_HINT " (\fIuint64_t *\fP; since Linux 4.13)"
-Returns the value of the read/write hint associated with the underlying inode
-referred to by
-.IR fd .
-.TP
-.BR F_SET_RW_HINT " (\fIuint64_t *\fP; since Linux 4.13)"
-Sets the read/write hint value associated with the
-underlying inode referred to by
-.IR fd .
-This hint persists until either it is explicitly modified or
-the underlying filesystem is unmounted.
-.TP
-.BR F_GET_FILE_RW_HINT " (\fIuint64_t *\fP; since Linux 4.13)"
-Returns the value of the read/write hint associated with
-the open file description referred to by
-.IR fd .
-.TP
-.BR F_SET_FILE_RW_HINT " (\fIuint64_t *\fP; since Linux 4.13)"
-Sets the read/write hint value associated with the open file description
-referred to by
-.IR fd .
-.PP
-If an open file description has not been assigned a read/write hint,
-then it shall use the value assigned to the inode, if any.
-.PP
-The following read/write
-hints are valid since Linux 4.13:
-.TP
-.B RWH_WRITE_LIFE_NOT_SET
-No specific hint has been set.
-This is the default value.
-.TP
-.B RWH_WRITE_LIFE_NONE
-No specific write lifetime is associated with this file or inode.
-.TP
-.B RWH_WRITE_LIFE_SHORT
-Data written to this inode or via this open file description
-is expected to have a short lifetime.
-.TP
-.B RWH_WRITE_LIFE_MEDIUM
-Data written to this inode or via this open file description
-is expected to have a lifetime longer than
-data written with
-.BR RWH_WRITE_LIFE_SHORT .
-.TP
-.B RWH_WRITE_LIFE_LONG
-Data written to this inode or via this open file description
-is expected to have a lifetime longer than
-data written with
-.BR RWH_WRITE_LIFE_MEDIUM .
-.TP
-.B RWH_WRITE_LIFE_EXTREME
-Data written to this inode or via this open file description
-is expected to have a lifetime longer than
-data written with
-.BR RWH_WRITE_LIFE_LONG .
-.PP
-All the write-specific hints are relative to each other,
-and no individual absolute meaning should be attributed to them.
-.SH RETURN VALUE
-For a successful call, the return value depends on the operation:
-.TP
-.B F_DUPFD
-The new file descriptor.
-.TP
-.B F_GETFD
-Value of file descriptor flags.
-.TP
-.B F_GETFL
-Value of file status flags.
-.TP
-.B F_GETLEASE
-Type of lease held on file descriptor.
-.TP
-.B F_GETOWN
-Value of file descriptor owner.
-.TP
-.B F_GETSIG
-Value of signal sent when read or write becomes possible, or zero
-for traditional
-.B SIGIO
-behavior.
-.TP
-.BR F_GETPIPE_SZ ", " F_SETPIPE_SZ
-The pipe capacity.
-.TP
-.B F_GET_SEALS
-A bit mask identifying the seals that have been set
-for the inode referred to by
-.IR fd .
-.TP
-All other commands
-Zero.
-.PP
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.BR EACCES " or " EAGAIN
-Operation is prohibited by locks held by other processes.
-.TP
-.B EAGAIN
-The operation is prohibited because the file has been memory-mapped by
-another process.
-.TP
-.B EBADF
-.I fd
-is not an open file descriptor
-.TP
-.B EBADF
-.I cmd
-is
-.B F_SETLK
-or
-.B F_SETLKW
-and the file descriptor open mode doesn't match with the
-type of lock requested.
-.TP
-.B EBUSY
-.I cmd
-is
-.B F_SETPIPE_SZ
-and the new pipe capacity specified in
-.I arg
-is smaller than the amount of buffer space currently
-used to store data in the pipe.
-.TP
-.B EBUSY
-.I cmd
-is
-.BR F_ADD_SEALS ,
-.I arg
-includes
-.BR F_SEAL_WRITE ,
-and there exists a writable, shared mapping on the file referred to by
-.IR fd .
-.TP
-.B EDEADLK
-It was detected that the specified
-.B F_SETLKW
-command would cause a deadlock.
-.TP
-.B EFAULT
-.I lock
-is outside your accessible address space.
-.TP
-.B EINTR
-.I cmd
-is
-.B F_SETLKW
-or
-.B F_OFD_SETLKW
-and the operation was interrupted by a signal; see
-.BR signal (7).
-.TP
-.B EINTR
-.I cmd
-is
-.BR F_GETLK ,
-.BR F_SETLK ,
-.BR F_OFD_GETLK ,
-or
-.BR F_OFD_SETLK ,
-and the operation was interrupted by a signal before the lock was checked or
-acquired.
-Most likely when locking a remote file (e.g., locking over
-NFS), but can sometimes happen locally.
-.TP
-.B EINVAL
-The value specified in
-.I cmd
-is not recognized by this kernel.
-.TP
-.B EINVAL
-.I cmd
-is
-.B F_ADD_SEALS
-and
-.I arg
-includes an unrecognized sealing bit.
-.TP
-.B EINVAL
-.I cmd
-is
-.B F_ADD_SEALS
-or
-.B F_GET_SEALS
-and the filesystem containing the inode referred to by
-.I fd
-does not support sealing.
-.TP
-.B EINVAL
-.I cmd
-is
-.B F_DUPFD
-and
-.I arg
-is negative or is greater than the maximum allowable value
-(see the discussion of
-.B RLIMIT_NOFILE
-in
-.BR getrlimit (2)).
-.TP
-.B EINVAL
-.I cmd
-is
-.B F_SETSIG
-and
-.I arg
-is not an allowable signal number.
-.TP
-.B EINVAL
-.I cmd
-is
-.BR F_OFD_SETLK ,
-.BR F_OFD_SETLKW ,
-or
-.BR F_OFD_GETLK ,
-and
-.I l_pid
-was not specified as zero.
-.TP
-.B EMFILE
-.I cmd
-is
-.B F_DUPFD
-and the per-process limit on the number of open file descriptors
-has been reached.
-.TP
-.B ENOLCK
-Too many segment locks open, lock table is full, or a remote locking
-protocol failed (e.g., locking over NFS).
-.TP
-.B ENOTDIR
-.B F_NOTIFY
-was specified in
-.IR cmd ,
-but
-.I fd
-does not refer to a directory.
-.TP
-.B EPERM
-.I cmd
-is
-.B F_SETPIPE_SZ
-and the soft or hard user pipe limit has been reached; see
-.BR pipe (7).
-.TP
-.B EPERM
-Attempted to clear the
-.B O_APPEND
-flag on a file that has the append-only attribute set.
-.TP
-.B EPERM
-.I cmd
-was
-.BR F_ADD_SEALS ,
-but
-.I fd
-was not open for writing
-or the current set of seals on the file already includes
-.BR F_SEAL_SEAL .
-.SH STANDARDS
-POSIX.1-2008.
-.PP
-.BR F_GETOWN_EX ,
-.BR F_SETOWN_EX ,
-.BR F_SETPIPE_SZ ,
-.BR F_GETPIPE_SZ ,
-.BR F_GETSIG ,
-.BR F_SETSIG ,
-.BR F_NOTIFY ,
-.BR F_GETLEASE ,
-and
-.B F_SETLEASE
-are Linux-specific.
-(Define the
-.B _GNU_SOURCE
-macro to obtain these definitions.)
-.\" .PP
-.\" SVr4 documents additional EIO, ENOLINK and EOVERFLOW error conditions.
-.PP
-.BR F_OFD_SETLK ,
-.BR F_OFD_SETLKW ,
-and
-.B F_OFD_GETLK
-are Linux-specific (and one must define
-.B _GNU_SOURCE
-to obtain their definitions),
-but work is being done to have them included in the next version of POSIX.1.
-.PP
-.B F_ADD_SEALS
-and
-.B F_GET_SEALS
-are Linux-specific.
-.\" FIXME . Once glibc adds support, add a note about FTM requirements
-.SH HISTORY
-SVr4, 4.3BSD, POSIX.1-2001.
-.PP
-Only the operations
-.BR F_DUPFD ,
-.BR F_GETFD ,
-.BR F_SETFD ,
-.BR F_GETFL ,
-.BR F_SETFL ,
-.BR F_GETLK ,
-.BR F_SETLK ,
-and
-.B F_SETLKW
-are specified in POSIX.1-2001.
-.PP
-.B F_GETOWN
-and
-.B F_SETOWN
-are specified in POSIX.1-2001.
-(To get their definitions, define either
-.\" .BR _BSD_SOURCE ,
-.\" or
-.B _XOPEN_SOURCE
-with the value 500 or greater, or
-.B _POSIX_C_SOURCE
-with the value 200809L or greater.)
-.PP
-.B F_DUPFD_CLOEXEC
-is specified in POSIX.1-2008.
-(To get this definition, define
-.B _POSIX_C_SOURCE
-with the value 200809L or greater, or
-.B _XOPEN_SOURCE
-with the value 700 or greater.)
-.SH NOTES
-The errors returned by
-.BR dup2 (2)
-are different from those returned by
-.BR F_DUPFD .
-.\"
-.SS File locking
-The original Linux
-.BR fcntl ()
-system call was not designed to handle large file offsets
-(in the
-.I flock
-structure).
-Consequently, an
-.BR fcntl64 ()
-system call was added in Linux 2.4.
-The newer system call employs a different structure for file locking,
-.IR flock64 ,
-and corresponding commands,
-.BR F_GETLK64 ,
-.BR F_SETLK64 ,
-and
-.BR F_SETLKW64 .
-However, these details can be ignored by applications using glibc, whose
-.BR fcntl ()
-wrapper function transparently employs the more recent system call
-where it is available.
-.\"
-.SS Record locks
-Since Linux 2.0, there is no interaction between the types of lock
-placed by
-.BR flock (2)
-and
-.BR fcntl ().
-.PP
-Several systems have more fields in
-.I "struct flock"
-such as, for example,
-.I l_sysid
-(to identify the machine where the lock is held).
-.\" e.g., Solaris 8 documents this field in fcntl(2), and Irix 6.5
-.\" documents it in fcntl(5). mtk, May 2007
-.\" Also, FreeBSD documents it (Apr 2014).
-Clearly,
-.I l_pid
-alone is not going to be very useful if the process holding the lock
-may live on a different machine;
-on Linux, while present on some architectures (such as MIPS32),
-this field is not used.
-.PP
-The original Linux
-.BR fcntl ()
-system call was not designed to handle large file offsets
-(in the
-.I flock
-structure).
-Consequently, an
-.BR fcntl64 ()
-system call was added in Linux 2.4.
-The newer system call employs a different structure for file locking,
-.IR flock64 ,
-and corresponding commands,
-.BR F_GETLK64 ,
-.BR F_SETLK64 ,
-and
-.BR F_SETLKW64 .
-However, these details can be ignored by applications using glibc, whose
-.BR fcntl ()
-wrapper function transparently employs the more recent system call
-where it is available.
-.SS Record locking and NFS
-Before Linux 3.12, if an NFSv4 client
-loses contact with the server for a period of time
-(defined as more than 90 seconds with no communication),
-.\"
-.\" Neil Brown: With NFSv3 the failure mode is the reverse. If
-.\" the server loses contact with a client then any lock stays in place
-.\" indefinitely ("why can't I read my mail"... I remember it well).
-.\"
-it might lose and regain a lock without ever being aware of the fact.
-(The period of time after which contact is assumed lost is known as
-the NFSv4 leasetime.
-On a Linux NFS server, this can be determined by looking at
-.IR /proc/fs/nfsd/nfsv4leasetime ,
-which expresses the period in seconds.
-The default value for this file is 90.)
-.\"
-.\" Jeff Layton:
-.\" Note that this is not a firm timeout. The server runs a job
-.\" periodically to clean out expired stateful objects, and it's likely
-.\" that there is some time (maybe even up to another whole lease period)
-.\" between when the timeout expires and the job actually runs. If the
-.\" client gets a RENEW in there within that window, its lease will be
-.\" renewed and its state preserved.
-.\"
-This scenario potentially risks data corruption,
-since another process might acquire a lock in the intervening period
-and perform file I/O.
-.PP
-Since Linux 3.12,
-.\" commit ef1820f9be27b6ad158f433ab38002ab8131db4d
-if an NFSv4 client loses contact with the server,
-any I/O to the file by a process which "thinks" it holds
-a lock will fail until that process closes and reopens the file.
-A kernel parameter,
-.IR nfs.recover_lost_locks ,
-can be set to 1 to obtain the pre-3.12 behavior,
-whereby the client will attempt to recover lost locks
-when contact is reestablished with the server.
-Because of the attendant risk of data corruption,
-.\" commit f6de7a39c181dfb8a2c534661a53c73afb3081cd
-this parameter defaults to 0 (disabled).
-.SH BUGS
-.SS F_SETFL
-It is not possible to use
-.B F_SETFL
-to change the state of the
-.B O_DSYNC
-and
-.B O_SYNC
-flags.
-.\" FIXME . According to POSIX.1-2001, O_SYNC should also be modifiable
-.\" via fcntl(2), but currently Linux does not permit this
-.\" See http://bugzilla.kernel.org/show_bug.cgi?id=5994
-Attempts to change the state of these flags are silently ignored.
-.SS F_GETOWN
-A limitation of the Linux system call conventions on some
-architectures (notably i386) means that if a (negative)
-process group ID to be returned by
-.B F_GETOWN
-falls in the range \-1 to \-4095, then the return value is wrongly
-interpreted by glibc as an error in the system call;
-.\" glibc source: sysdeps/unix/sysv/linux/i386/sysdep.h
-that is, the return value of
-.BR fcntl ()
-will be \-1, and
-.I errno
-will contain the (positive) process group ID.
-The Linux-specific
-.B F_GETOWN_EX
-operation avoids this problem.
-.\" mtk, Dec 04: some limited testing on alpha and ia64 seems to
-.\" indicate that ANY negative PGID value will cause F_GETOWN
-.\" to misinterpret the return as an error. Some other architectures
-.\" seem to have the same range check as i386.
-Since glibc 2.11, glibc makes the kernel
-.B F_GETOWN
-problem invisible by implementing
-.B F_GETOWN
-using
-.BR F_GETOWN_EX .
-.SS F_SETOWN
-In Linux 2.4 and earlier, there is bug that can occur
-when an unprivileged process uses
-.B F_SETOWN
-to specify the owner
-of a socket file descriptor
-as a process (group) other than the caller.
-In this case,
-.BR fcntl ()
-can return \-1 with
-.I errno
-set to
-.BR EPERM ,
-even when the owner process (group) is one that the caller
-has permission to send signals to.
-Despite this error return, the file descriptor owner is set,
-and signals will be sent to the owner.
-.\"
-.SS Deadlock detection
-The deadlock-detection algorithm employed by the kernel when dealing with
-.B F_SETLKW
-requests can yield both
-false negatives (failures to detect deadlocks,
-leaving a set of deadlocked processes blocked indefinitely)
-and false positives
-.RB ( EDEADLK
-errors when there is no deadlock).
-For example,
-the kernel limits the lock depth of its dependency search to 10 steps,
-meaning that circular deadlock chains that exceed
-that size will not be detected.
-In addition, the kernel may falsely indicate a deadlock
-when two or more processes created using the
-.BR clone (2)
-.B CLONE_FILES
-flag place locks that appear (to the kernel) to conflict.
-.\"
-.SS Mandatory locking
-The Linux implementation of mandatory locking
-is subject to race conditions which render it unreliable:
-.\" http://marc.info/?l=linux-kernel&m=119013491707153&w=2
-.\"
-.\" Reconfirmed by Jeff Layton
-.\" From: Jeff Layton <jlayton <at> redhat.com>
-.\" Subject: Re: Status of fcntl() mandatory locking
-.\" Newsgroups: gmane.linux.file-systems
-.\" Date: 2014-04-28 10:07:57 GMT
-.\" http://thread.gmane.org/gmane.linux.file-systems/84481/focus=84518
-a
-.BR write (2)
-call that overlaps with a lock may modify data after the mandatory lock is
-acquired;
-a
-.BR read (2)
-call that overlaps with a lock may detect changes to data that were made
-only after a write lock was acquired.
-Similar races exist between mandatory locks and
-.BR mmap (2).
-It is therefore inadvisable to rely on mandatory locking.
-.SH SEE ALSO
-.BR dup2 (2),
-.BR flock (2),
-.BR open (2),
-.BR socket (2),
-.BR lockf (3),
-.BR capabilities (7),
-.BR feature_test_macros (7),
-.BR lslocks (8)
-.PP
-.IR locks.txt ,
-.IR mandatory\-locking.txt ,
-and
-.I dnotify.txt
-in the Linux kernel source directory
-.I Documentation/filesystems/
-(on older kernels, these files are directly under the
-.I Documentation/
-directory, and
-.I mandatory\-locking.txt
-is called
-.IR mandatory.txt )
diff --git a/man2/fcntl64.2 b/man2/fcntl64.2
deleted file mode 100644
index fc8ddc17d..000000000
--- a/man2/fcntl64.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/fcntl.2
diff --git a/man2/fdatasync.2 b/man2/fdatasync.2
deleted file mode 100644
index 3c7494f37..000000000
--- a/man2/fdatasync.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/fsync.2
diff --git a/man2/fdetach.2 b/man2/fdetach.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/fdetach.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/fgetxattr.2 b/man2/fgetxattr.2
deleted file mode 100644
index d9e5d9037..000000000
--- a/man2/fgetxattr.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getxattr.2
diff --git a/man2/finit_module.2 b/man2/finit_module.2
deleted file mode 100644
index 20c5c51f8..000000000
--- a/man2/finit_module.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/init_module.2
diff --git a/man2/flistxattr.2 b/man2/flistxattr.2
deleted file mode 100644
index 117bd2b53..000000000
--- a/man2/flistxattr.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/listxattr.2
diff --git a/man2/flock.2 b/man2/flock.2
deleted file mode 100644
index a136bcfe8..000000000
--- a/man2/flock.2
+++ /dev/null
@@ -1,267 +0,0 @@
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu) and
-.\" and Copyright 2002 Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Fri Jan 31 16:26:07 1997 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Fri Dec 11 17:57:27 1998 by Jamie Lokier <jamie@imbolc.ucc.ie>
-.\" Modified 24 Apr 2002 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Substantial rewrites and additions
-.\" 2005-05-10 mtk, noted that lock conversions are not atomic.
-.\"
-.\" FIXME Maybe document LOCK_MAND, LOCK_RW, LOCK_READ, LOCK_WRITE
-.\" which only have effect for SAMBA.
-.\"
-.TH flock 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-flock \- apply or remove an advisory lock on an open file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/file.h>
-.PP
-.BI "int flock(int " fd ", int " operation );
-.fi
-.SH DESCRIPTION
-Apply or remove an advisory lock on the open file specified by
-.IR fd .
-The argument
-.I operation
-is one of the following:
-.RS 4
-.TP 9
-.B LOCK_SH
-Place a shared lock.
-More than one process may hold a shared lock for a given file
-at a given time.
-.TP
-.B LOCK_EX
-Place an exclusive lock.
-Only one process may hold an exclusive lock for a given
-file at a given time.
-.TP
-.B LOCK_UN
-Remove an existing lock held by this process.
-.RE
-.PP
-A call to
-.BR flock ()
-may block if an incompatible lock is held by another process.
-To make a nonblocking request, include
-.B LOCK_NB
-(by ORing)
-with any of the above operations.
-.PP
-A single file may not simultaneously have both shared and exclusive locks.
-.PP
-Locks created by
-.BR flock ()
-are associated with an open file description (see
-.BR open (2)).
-This means that duplicate file descriptors (created by, for example,
-.BR fork (2)
-or
-.BR dup (2))
-refer to the same lock, and this lock may be modified
-or released using any of these file descriptors.
-Furthermore, the lock is released either by an explicit
-.B LOCK_UN
-operation on any of these duplicate file descriptors, or when all
-such file descriptors have been closed.
-.PP
-If a process uses
-.BR open (2)
-(or similar) to obtain more than one file descriptor for the same file,
-these file descriptors are treated independently by
-.BR flock ().
-An attempt to lock the file using one of these file descriptors
-may be denied by a lock that the calling process has
-already placed via another file descriptor.
-.PP
-A process may hold only one type of lock (shared or exclusive)
-on a file.
-Subsequent
-.BR flock ()
-calls on an already locked file will convert an existing lock to the new
-lock mode.
-.PP
-Locks created by
-.BR flock ()
-are preserved across an
-.BR execve (2).
-.PP
-A shared or exclusive lock can be placed on a file regardless of the
-mode in which the file was opened.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I fd
-is not an open file descriptor.
-.TP
-.B EINTR
-While waiting to acquire a lock, the call was interrupted by
-delivery of a signal caught by a handler; see
-.BR signal (7).
-.TP
-.B EINVAL
-.I operation
-is invalid.
-.TP
-.B ENOLCK
-The kernel ran out of memory for allocating lock records.
-.TP
-.B EWOULDBLOCK
-The file is locked and the
-.B LOCK_NB
-flag was selected.
-.SH VERSIONS
-Since Linux 2.0,
-.BR flock ()
-is implemented as a system call in its own right rather
-than being emulated in the GNU C library as a call to
-.BR fcntl (2).
-With this implementation,
-there is no interaction between the types of lock
-placed by
-.BR flock ()
-and
-.BR fcntl (2),
-and
-.BR flock ()
-does not detect deadlock.
-(Note, however, that on some systems, such as the modern BSDs,
-.\" E.g., according to the flock(2) man page, FreeBSD since at least 5.3
-.BR flock ()
-and
-.BR fcntl (2)
-locks
-.I do
-interact with one another.)
-.SS CIFS details
-Up to Linux 5.4,
-.BR flock ()
-is not propagated over SMB.
-A file with such locks will not appear locked for remote clients.
-.PP
-Since Linux 5.5,
-.BR flock ()
-locks are emulated with SMB byte-range locks on the entire file.
-Similarly to NFS, this means that
-.BR fcntl (2)
-and
-.BR flock ()
-locks interact with one another.
-Another important side-effect is that the locks are not advisory anymore:
-any IO on a locked file will always fail with
-.B EACCES
-when done from a separate file descriptor.
-This difference originates from the design of locks in the SMB protocol,
-which provides mandatory locking semantics.
-.PP
-Remote and mandatory locking semantics may vary with
-SMB protocol, mount options and server type.
-See
-.BR mount.cifs (8)
-for additional information.
-.SH STANDARDS
-BSD.
-.SH HISTORY
-4.4BSD (the
-.BR flock ()
-call first appeared in 4.2BSD).
-A version of
-.BR flock (),
-possibly implemented in terms of
-.BR fcntl (2),
-appears on most UNIX systems.
-.SS NFS details
-Up to Linux 2.6.11,
-.BR flock ()
-does not lock files over NFS
-(i.e., the scope of locks was limited to the local system).
-Instead, one could use
-.BR fcntl (2)
-byte-range locking, which does work over NFS,
-given a sufficiently recent version of
-Linux and a server which supports locking.
-.PP
-Since Linux 2.6.12, NFS clients support
-.BR flock ()
-locks by emulating them as
-.BR fcntl (2)
-byte-range locks on the entire file.
-This means that
-.BR fcntl (2)
-and
-.BR flock ()
-locks
-.I do
-interact with one another over NFS.
-It also means that in order to place an exclusive lock,
-the file must be opened for writing.
-.PP
-Since Linux 2.6.37,
-.\" commit 5eebde23223aeb0ad2d9e3be6590ff8bbfab0fc2
-the kernel supports a compatibility mode that allows
-.BR flock ()
-locks (and also
-.BR fcntl (2)
-byte region locks) to be treated as local;
-see the discussion of the
-.I "local_lock"
-option in
-.BR nfs (5).
-.SH NOTES
-.BR flock ()
-places advisory locks only; given suitable permissions on a file,
-a process is free to ignore the use of
-.BR flock ()
-and perform I/O on the file.
-.PP
-.BR flock ()
-and
-.BR fcntl (2)
-locks have different semantics with respect to forked processes and
-.BR dup (2).
-On systems that implement
-.BR flock ()
-using
-.BR fcntl (2),
-the semantics of
-.BR flock ()
-will be different from those described in this manual page.
-.PP
-Converting a lock
-(shared to exclusive, or vice versa) is not guaranteed to be atomic:
-the existing lock is first removed, and then a new lock is established.
-Between these two steps,
-a pending lock request by another process may be granted,
-with the result that the conversion either blocks, or fails if
-.B LOCK_NB
-was specified.
-(This is the original BSD behavior,
-and occurs on many other implementations.)
-.\" Kernel 2.5.21 changed things a little: during lock conversion
-.\" it is now the highest priority process that will get the lock -- mtk
-.SH SEE ALSO
-.BR flock (1),
-.BR close (2),
-.BR dup (2),
-.BR execve (2),
-.BR fcntl (2),
-.BR fork (2),
-.BR open (2),
-.BR lockf (3),
-.BR lslocks (8)
-.PP
-.I Documentation/filesystems/locks.txt
-in the Linux kernel source tree
-.RI ( Documentation/locks.txt
-in older kernels)
diff --git a/man2/fork.2 b/man2/fork.2
deleted file mode 100644
index 4b779e42b..000000000
--- a/man2/fork.2
+++ /dev/null
@@ -1,348 +0,0 @@
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" A few fragments remain from an earlier (1992) page by
-.\" Drew Eckhardt (drew@cs.colorado.edu),
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt (michael@moria.de)
-.\" Modified Sat Jul 24 13:22:07 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 21 Aug 1994 by Michael Chastain (mec@shell.portal.com):
-.\" Referenced 'clone(2)'.
-.\" Modified 1995-06-10, 1996-04-18, 1999-11-01, 2000-12-24
-.\" by Andries Brouwer (aeb@cwi.nl)
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.\" 2006-09-04, Michael Kerrisk
-.\" Greatly expanded, to describe all attributes that differ
-.\" parent and child.
-.\"
-.TH fork 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fork \- create a child process
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.B pid_t fork(void);
-.fi
-.SH DESCRIPTION
-.BR fork ()
-creates a new process by duplicating the calling process.
-The new process is referred to as the
-.I child
-process.
-The calling process is referred to as the
-.I parent
-process.
-.PP
-The child process and the parent process run in separate memory spaces.
-At the time of
-.BR fork ()
-both memory spaces have the same content.
-Memory writes, file mappings
-.RB ( mmap (2)),
-and unmappings
-.RB ( munmap (2))
-performed by one of the processes do not affect the other.
-.PP
-The child process is an exact duplicate of the parent
-process except for the following points:
-.IP \[bu] 3
-The child has its own unique process ID,
-and this PID does not match the ID of any existing process group
-.RB ( setpgid (2))
-or session.
-.IP \[bu]
-The child's parent process ID is the same as the parent's process ID.
-.IP \[bu]
-The child does not inherit its parent's memory locks
-.RB ( mlock (2),
-.BR mlockall (2)).
-.IP \[bu]
-Process resource utilizations
-.RB ( getrusage (2))
-and CPU time counters
-.RB ( times (2))
-are reset to zero in the child.
-.IP \[bu]
-The child's set of pending signals is initially empty
-.RB ( sigpending (2)).
-.IP \[bu]
-The child does not inherit semaphore adjustments from its parent
-.RB ( semop (2)).
-.IP \[bu]
-The child does not inherit process-associated record locks from its parent
-.RB ( fcntl (2)).
-(On the other hand, it does inherit
-.BR fcntl (2)
-open file description locks and
-.BR flock (2)
-locks from its parent.)
-.IP \[bu]
-The child does not inherit timers from its parent
-.RB ( setitimer (2),
-.BR alarm (2),
-.BR timer_create (2)).
-.IP \[bu]
-The child does not inherit outstanding asynchronous I/O operations
-from its parent
-.RB ( aio_read (3),
-.BR aio_write (3)),
-nor does it inherit any asynchronous I/O contexts from its parent (see
-.BR io_setup (2)).
-.PP
-The process attributes in the preceding list are all specified
-in POSIX.1.
-The parent and child also differ with respect to the following
-Linux-specific process attributes:
-.IP \[bu] 3
-The child does not inherit directory change notifications (dnotify)
-from its parent
-(see the description of
-.B F_NOTIFY
-in
-.BR fcntl (2)).
-.IP \[bu]
-The
-.BR prctl (2)
-.B PR_SET_PDEATHSIG
-setting is reset so that the child does not receive a signal
-when its parent terminates.
-.IP \[bu]
-The default timer slack value is set to the parent's
-current timer slack value.
-See the description of
-.B PR_SET_TIMERSLACK
-in
-.BR prctl (2).
-.IP \[bu]
-Memory mappings that have been marked with the
-.BR madvise (2)
-.B MADV_DONTFORK
-flag are not inherited across a
-.BR fork ().
-.IP \[bu]
-Memory in address ranges that have been marked with the
-.BR madvise (2)
-.B MADV_WIPEONFORK
-flag is zeroed in the child after a
-.BR fork ().
-(The
-.B MADV_WIPEONFORK
-setting remains in place for those address ranges in the child.)
-.IP \[bu]
-The termination signal of the child is always
-.B SIGCHLD
-(see
-.BR clone (2)).
-.IP \[bu]
-The port access permission bits set by
-.BR ioperm (2)
-are not inherited by the child;
-the child must turn on any bits that it requires using
-.BR ioperm (2).
-.PP
-Note the following further points:
-.IP \[bu] 3
-The child process is created with a single thread\[em]the
-one that called
-.BR fork ().
-The entire virtual address space of the parent is replicated in the child,
-including the states of mutexes, condition variables,
-and other pthreads objects; the use of
-.BR pthread_atfork (3)
-may be helpful for dealing with problems that this can cause.
-.IP \[bu]
-After a
-.BR fork ()
-in a multithreaded program,
-the child can safely call only async-signal-safe functions (see
-.BR signal\-safety (7))
-until such time as it calls
-.BR execve (2).
-.IP \[bu]
-The child inherits copies of the parent's set of open file descriptors.
-Each file descriptor in the child refers to the same
-open file description (see
-.BR open (2))
-as the corresponding file descriptor in the parent.
-This means that the two file descriptors share open file status flags,
-file offset,
-and signal-driven I/O attributes (see the description of
-.B F_SETOWN
-and
-.B F_SETSIG
-in
-.BR fcntl (2)).
-.IP \[bu]
-The child inherits copies of the parent's set of open message
-queue descriptors (see
-.BR mq_overview (7)).
-Each file descriptor in the child refers to the same
-open message queue description
-as the corresponding file descriptor in the parent.
-This means that the two file descriptors share the same flags
-.RI ( mq_flags ).
-.IP \[bu]
-The child inherits copies of the parent's set of open directory streams (see
-.BR opendir (3)).
-POSIX.1 says that the corresponding directory streams
-in the parent and child
-.I may
-share the directory stream positioning;
-on Linux/glibc they do not.
-.SH RETURN VALUE
-On success, the PID of the child process is returned in the parent,
-and 0 is returned in the child.
-On failure, \-1 is returned in the parent,
-no child process is created, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-.\" NOTE! The following should match the description in pthread_create(3)
-A system-imposed limit on the number of threads was encountered.
-There are a number of limits that may trigger this error:
-.RS
-.IP \[bu] 3
-the
-.B RLIMIT_NPROC
-soft resource limit (set via
-.BR setrlimit (2)),
-which limits the number of processes and threads for a real user ID,
-was reached;
-.IP \[bu]
-the kernel's system-wide limit on the number of processes and threads,
-.IR /proc/sys/kernel/threads\-max ,
-was reached (see
-.BR proc (5));
-.IP \[bu]
-the maximum number of PIDs,
-.IR /proc/sys/kernel/pid_max ,
-was reached (see
-.BR proc (5));
-or
-.IP \[bu]
-the PID limit
-.RI ( pids.max )
-imposed by the cgroup "process number" (PIDs) controller was reached.
-.RE
-.TP
-.B EAGAIN
-The caller is operating under the
-.B SCHED_DEADLINE
-scheduling policy and does not have the reset-on-fork flag set.
-See
-.BR sched (7).
-.TP
-.B ENOMEM
-.BR fork ()
-failed to allocate the necessary kernel structures because memory is tight.
-.TP
-.B ENOMEM
-An attempt was made to create a child process in a PID namespace
-whose "init" process has terminated.
-See
-.BR pid_namespaces (7).
-.TP
-.B ENOSYS
-.BR fork ()
-is not supported on this platform (for example,
-.\" e.g., arm (optionally), blackfin, c6x, frv, h8300, microblaze, xtensa
-hardware without a Memory-Management Unit).
-.TP
-.BR ERESTARTNOINTR " (since Linux 2.6.17)"
-.\" commit 4a2c7a7837da1b91468e50426066d988050e4d56
-System call was interrupted by a signal and will be restarted.
-(This can be seen only during a trace.)
-.SH VERSIONS
-.SS C library/kernel differences
-Since glibc 2.3.3,
-.\" nptl/sysdeps/unix/sysv/linux/fork.c
-rather than invoking the kernel's
-.BR fork ()
-system call,
-the glibc
-.BR fork ()
-wrapper that is provided as part of the
-NPTL threading implementation invokes
-.BR clone (2)
-with flags that provide the same effect as the traditional system call.
-(A call to
-.BR fork ()
-is equivalent to a call to
-.BR clone (2)
-specifying
-.I flags
-as just
-.BR SIGCHLD .)
-The glibc wrapper invokes any fork handlers that have been
-established using
-.BR pthread_atfork (3).
-.\" and does some magic to ensure that getpid(2) returns the right value.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.SH NOTES
-Under Linux,
-.BR fork ()
-is implemented using copy-on-write pages, so the only penalty that it incurs
-is the time and memory required to duplicate the parent's page tables,
-and to create a unique task structure for the child.
-.SH EXAMPLES
-See
-.BR pipe (2)
-and
-.BR wait (2)
-for more examples.
-.PP
-.\" SRC BEGIN (fork.c)
-.EX
-#include <signal.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-int
-main(void)
-{
- pid_t pid;
-\&
- if (signal(SIGCHLD, SIG_IGN) == SIG_ERR) {
- perror("signal");
- exit(EXIT_FAILURE);
- }
- pid = fork();
- switch (pid) {
- case \-1:
- perror("fork");
- exit(EXIT_FAILURE);
- case 0:
- puts("Child exiting.");
- exit(EXIT_SUCCESS);
- default:
- printf("Child is PID %jd\en", (intmax_t) pid);
- puts("Parent exiting.");
- exit(EXIT_SUCCESS);
- }
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR clone (2),
-.BR execve (2),
-.BR exit (2),
-.BR setrlimit (2),
-.BR unshare (2),
-.BR vfork (2),
-.BR wait (2),
-.BR daemon (3),
-.BR pthread_atfork (3),
-.BR capabilities (7),
-.BR credentials (7)
diff --git a/man2/free_hugepages.2 b/man2/free_hugepages.2
deleted file mode 100644
index d4b906a97..000000000
--- a/man2/free_hugepages.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/alloc_hugepages.2
diff --git a/man2/fremovexattr.2 b/man2/fremovexattr.2
deleted file mode 100644
index 38d01ccde..000000000
--- a/man2/fremovexattr.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/removexattr.2
diff --git a/man2/fsetxattr.2 b/man2/fsetxattr.2
deleted file mode 100644
index dc0780751..000000000
--- a/man2/fsetxattr.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/setxattr.2
diff --git a/man2/fstat.2 b/man2/fstat.2
deleted file mode 100644
index b1a86c195..000000000
--- a/man2/fstat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/stat.2
diff --git a/man2/fstat64.2 b/man2/fstat64.2
deleted file mode 100644
index 2b9971d2e..000000000
--- a/man2/fstat64.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/fstat.2
diff --git a/man2/fstatat.2 b/man2/fstatat.2
deleted file mode 100644
index b1a86c195..000000000
--- a/man2/fstatat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/stat.2
diff --git a/man2/fstatat64.2 b/man2/fstatat64.2
deleted file mode 100644
index 7791269e6..000000000
--- a/man2/fstatat64.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/fstatat.2
diff --git a/man2/fstatfs.2 b/man2/fstatfs.2
deleted file mode 100644
index 923d3c0cc..000000000
--- a/man2/fstatfs.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/statfs.2
diff --git a/man2/fstatfs64.2 b/man2/fstatfs64.2
deleted file mode 100644
index fde2b22f5..000000000
--- a/man2/fstatfs64.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/fstatfs.2
diff --git a/man2/fsync.2 b/man2/fsync.2
deleted file mode 100644
index 1043e6a1b..000000000
--- a/man2/fsync.2
+++ /dev/null
@@ -1,195 +0,0 @@
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu) and
-.\" and Copyright 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 21 Aug 1994 by Michael Chastain <mec@shell.portal.com>:
-.\" Removed note about old libc (pre-4.5.26) translating to 'sync'.
-.\" Modified 15 Apr 1995 by Michael Chastain <mec@shell.portal.com>:
-.\" Added `see also' section.
-.\" Modified 13 Apr 1996 by Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
-.\" Added remarks about fdatasync.
-.\" Modified 31 Jan 1997 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 18 Apr 2001 by Andi Kleen
-.\" Fix description to describe what it really does; add a few caveats.
-.\" 2006-04-28, mtk, substantial rewrite of various parts.
-.\" 2012-02-27 Various changes by Christoph Hellwig <hch@lst.de>
-.\"
-.TH fsync 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fsync, fdatasync \- synchronize a file's in-core state with storage device
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int fsync(int " fd );
-.PP
-.BI "int fdatasync(int " fd );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.nf
-.BR fsync ():
- glibc 2.16 and later:
- No feature test macros need be defined
- glibc up to and including 2.15:
- _BSD_SOURCE || _XOPEN_SOURCE
- || /* Since glibc 2.8: */ _POSIX_C_SOURCE >= 200112L
-.fi
-.PP
-.BR fdatasync ():
-.nf
- _POSIX_C_SOURCE >= 199309L || _XOPEN_SOURCE >= 500
-.fi
-.SH DESCRIPTION
-.BR fsync ()
-transfers ("flushes") all modified in-core data of
-(i.e., modified buffer cache pages for) the
-file referred to by the file descriptor
-.I fd
-to the disk device (or other permanent storage device) so that all
-changed information can be retrieved even if the system crashes or
-is rebooted.
-This includes writing through or flushing a disk cache if present.
-The call blocks until the device reports that the transfer has completed.
-.PP
-As well as flushing the file data,
-.BR fsync ()
-also flushes the metadata information associated with the file (see
-.BR inode (7)).
-.PP
-Calling
-.BR fsync ()
-does not necessarily ensure
-that the entry in the directory containing the file has also reached disk.
-For that an explicit
-.BR fsync ()
-on a file descriptor for the directory is also needed.
-.PP
-.BR fdatasync ()
-is similar to
-.BR fsync (),
-but does not flush modified metadata unless that metadata
-is needed in order to allow a subsequent data retrieval to be
-correctly handled.
-For example, changes to
-.I st_atime
-or
-.I st_mtime
-(respectively, time of last access and
-time of last modification; see
-.BR inode (7))
-do not require flushing because they are not necessary for
-a subsequent data read to be handled correctly.
-On the other hand, a change to the file size
-.RI ( st_size ,
-as made by say
-.BR ftruncate (2)),
-would require a metadata flush.
-.PP
-The aim of
-.BR fdatasync ()
-is to reduce disk activity for applications that do not
-require all metadata to be synchronized with the disk.
-.SH RETURN VALUE
-On success, these system calls return zero.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I fd
-is not a valid open file descriptor.
-.TP
-.B EINTR
-The function was interrupted by a signal; see
-.BR signal (7).
-.TP
-.B EIO
-An error occurred during synchronization.
-This error may relate to data written to some other file descriptor
-on the same file.
-Since Linux 4.13,
-.\" commit 088737f44bbf6378745f5b57b035e57ee3dc4750
-errors from write-back will be reported to
-all file descriptors that might have written the data which triggered
-the error.
-Some filesystems (e.g., NFS) keep close track of which data
-came through which file descriptor, and give more precise reporting.
-Other filesystems (e.g., most local filesystems) will report errors to
-all file descriptors that were open on the file when the error was recorded.
-.TP
-.B ENOSPC
-Disk space was exhausted while synchronizing.
-.TP
-.BR EROFS ", " EINVAL
-.I fd
-is bound to a special file (e.g., a pipe, FIFO, or socket)
-which does not support synchronization.
-.TP
-.BR ENOSPC ", " EDQUOT
-.I fd
-is bound to a file on NFS or another filesystem which does not allocate
-space at the time of a
-.BR write (2)
-system call, and some previous write failed due to insufficient
-storage space.
-.SH VERSIONS
-On POSIX systems on which
-.BR fdatasync ()
-is available,
-.B _POSIX_SYNCHRONIZED_IO
-is defined in
-.I <unistd.h>
-to a value greater than 0.
-(See also
-.BR sysconf (3).)
-.\" POSIX.1-2001: It shall be defined to -1 or 0 or 200112L.
-.\" -1: unavailable, 0: ask using sysconf().
-.\" glibc defines them to 1.
-.PP
-On some UNIX systems (but not Linux),
-.I fd
-must be a
-.I writable
-file descriptor.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, 4.3BSD.
-.PP
-In Linux 2.2 and earlier,
-.BR fdatasync ()
-is equivalent to
-.BR fsync (),
-and so has no performance advantage.
-.PP
-The
-.BR fsync ()
-implementations in older kernels and lesser used filesystems
-do not know how to flush disk caches.
-In these cases disk caches need to be disabled using
-.BR hdparm (8)
-or
-.BR sdparm (8)
-to guarantee safe operation.
-.SH SEE ALSO
-.BR sync (1),
-.BR bdflush (2),
-.BR open (2),
-.BR posix_fadvise (2),
-.BR pwritev (2),
-.BR sync (2),
-.BR sync_file_range (2),
-.BR fflush (3),
-.BR fileno (3),
-.BR hdparm (8),
-.BR mount (8)
diff --git a/man2/ftruncate.2 b/man2/ftruncate.2
deleted file mode 100644
index 2ed34f1ed..000000000
--- a/man2/ftruncate.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/truncate.2
diff --git a/man2/ftruncate64.2 b/man2/ftruncate64.2
deleted file mode 100644
index a8862d3ea..000000000
--- a/man2/ftruncate64.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/ftruncate.2
diff --git a/man2/futex.2 b/man2/futex.2
deleted file mode 100644
index 559990e27..000000000
--- a/man2/futex.2
+++ /dev/null
@@ -1,1976 +0,0 @@
-.\" Page by b.hubert
-.\" and Copyright (C) 2015, Thomas Gleixner <tglx@linutronix.de>
-.\" and Copyright (C) 2015, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" %%%LICENSE_START(FREELY_REDISTRIBUTABLE)
-.\" may be freely modified and distributed
-.\" %%%LICENSE_END
-.\"
-.\" Niki A. Rahimi (LTC Security Development, narahimi@us.ibm.com)
-.\" added ERRORS section.
-.\"
-.\" Modified 2004-06-17 mtk
-.\" Modified 2004-10-07 aeb, added FUTEX_REQUEUE, FUTEX_CMP_REQUEUE
-.\"
-.\" FIXME Still to integrate are some points from Torvald Riegel's mail of
-.\" 2015-01-23:
-.\" http://thread.gmane.org/gmane.linux.kernel/1703405/focus=7977
-.\"
-.\" FIXME Do we need to add some text regarding Torvald Riegel's 2015-01-24 mail
-.\" http://thread.gmane.org/gmane.linux.kernel/1703405/focus=1873242
-.\"
-.TH futex 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-futex \- fast user-space locking
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.PP
-.BR "#include <linux/futex.h>" " /* Definition of " FUTEX_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "long syscall(SYS_futex, uint32_t *" uaddr ", int " futex_op \
-", uint32_t " val ,
-.BI " const struct timespec *" timeout , \
-" \fR /* or: \fBuint32_t \fIval2\fP */"
-.BI " uint32_t *" uaddr2 ", uint32_t " val3 );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR futex (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR futex ()
-system call provides a method for waiting until a certain condition becomes
-true.
-It is typically used as a blocking construct in the context of
-shared-memory synchronization.
-When using futexes, the majority of
-the synchronization operations are performed in user space.
-A user-space program employs the
-.BR futex ()
-system call only when it is likely that the program has to block for
-a longer time until the condition becomes true.
-Other
-.BR futex ()
-operations can be used to wake any processes or threads waiting
-for a particular condition.
-.PP
-A futex is a 32-bit value\[em]referred to below as a
-.IR "futex word" \[em]whose
-address is supplied to the
-.BR futex ()
-system call.
-(Futexes are 32 bits in size on all platforms, including 64-bit systems.)
-All futex operations are governed by this value.
-In order to share a futex between processes,
-the futex is placed in a region of shared memory,
-created using (for example)
-.BR mmap (2)
-or
-.BR shmat (2).
-(Thus, the futex word may have different
-virtual addresses in different processes,
-but these addresses all refer to the same location in physical memory.)
-In a multithreaded program, it is sufficient to place the futex word
-in a global variable shared by all threads.
-.PP
-When executing a futex operation that requests to block a thread,
-the kernel will block only if the futex word has the value that the
-calling thread supplied (as one of the arguments of the
-.BR futex ()
-call) as the expected value of the futex word.
-The loading of the futex word's value,
-the comparison of that value with the expected value,
-and the actual blocking will happen atomically and will be totally ordered
-with respect to concurrent operations performed by other threads
-on the same futex word.
-.\" Notes from Darren Hart (Dec 2015):
-.\" Totally ordered with respect futex operations refers to semantics
-.\" of the ACQUIRE/RELEASE operations and how they impact ordering of
-.\" memory reads and writes. The kernel futex operations are protected
-.\" by spinlocks, which ensure that all operations are serialized
-.\" with respect to one another.
-.\"
-.\" This is a lot to attempt to define in this document. Perhaps a
-.\" reference to linux/Documentation/memory-barriers.txt as a footnote
-.\" would be sufficient? Or perhaps for this manual, "serialized" would
-.\" be sufficient, with a footnote regarding "totally ordered" and a
-.\" pointer to the memory-barrier documentation?
-Thus, the futex word is used to connect the synchronization in user space
-with the implementation of blocking by the kernel.
-Analogously to an atomic
-compare-and-exchange operation that potentially changes shared memory,
-blocking via a futex is an atomic compare-and-block operation.
-.\" FIXME(Torvald Riegel):
-.\" Eventually we want to have some text in NOTES to satisfy
-.\" the reference in the following sentence
-.\" See NOTES for a detailed specification of
-.\" the synchronization semantics.
-.PP
-One use of futexes is for implementing locks.
-The state of the lock (i.e., acquired or not acquired)
-can be represented as an atomically accessed flag in shared memory.
-In the uncontended case,
-a thread can access or modify the lock state with atomic instructions,
-for example atomically changing it from not acquired to acquired
-using an atomic compare-and-exchange instruction.
-(Such instructions are performed entirely in user mode,
-and the kernel maintains no information about the lock state.)
-On the other hand, a thread may be unable to acquire a lock because
-it is already acquired by another thread.
-It then may pass the lock's flag as a futex word and the value
-representing the acquired state as the expected value to a
-.BR futex ()
-wait operation.
-This
-.BR futex ()
-operation will block if and only if the lock is still acquired
-(i.e., the value in the futex word still matches the "acquired state").
-When releasing the lock, a thread has to first reset the
-lock state to not acquired and then execute a futex
-operation that wakes threads blocked on the lock flag used as a futex word
-(this can be further optimized to avoid unnecessary wake-ups).
-See
-.BR futex (7)
-for more detail on how to use futexes.
-.PP
-Besides the basic wait and wake-up futex functionality, there are further
-futex operations aimed at supporting more complex use cases.
-.PP
-Note that
-no explicit initialization or destruction is necessary to use futexes;
-the kernel maintains a futex
-(i.e., the kernel-internal implementation artifact)
-only while operations such as
-.BR FUTEX_WAIT ,
-described below, are being performed on a particular futex word.
-.\"
-.SS Arguments
-The
-.I uaddr
-argument points to the futex word.
-On all platforms, futexes are four-byte
-integers that must be aligned on a four-byte boundary.
-The operation to perform on the futex is specified in the
-.I futex_op
-argument;
-.I val
-is a value whose meaning and purpose depends on
-.IR futex_op .
-.PP
-The remaining arguments
-.RI ( timeout ,
-.IR uaddr2 ,
-and
-.IR val3 )
-are required only for certain of the futex operations described below.
-Where one of these arguments is not required, it is ignored.
-.PP
-For several blocking operations, the
-.I timeout
-argument is a pointer to a
-.I timespec
-structure that specifies a timeout for the operation.
-However, notwithstanding the prototype shown above, for some operations,
-the least significant four bytes of this argument are instead
-used as an integer whose meaning is determined by the operation.
-For these operations, the kernel casts the
-.I timeout
-value first to
-.IR "unsigned long",
-then to
-.IR uint32_t ,
-and in the remainder of this page, this argument is referred to as
-.I val2
-when interpreted in this fashion.
-.PP
-Where it is required, the
-.I uaddr2
-argument is a pointer to a second futex word that is employed
-by the operation.
-.PP
-The interpretation of the final integer argument,
-.IR val3 ,
-depends on the operation.
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.SS Futex operations
-The
-.I futex_op
-argument consists of two parts:
-a command that specifies the operation to be performed,
-bitwise ORed with zero or more options that
-modify the behaviour of the operation.
-The options that may be included in
-.I futex_op
-are as follows:
-.TP
-.BR FUTEX_PRIVATE_FLAG " (since Linux 2.6.22)"
-.\" commit 34f01cc1f512fa783302982776895c73714ebbc2
-This option bit can be employed with all futex operations.
-It tells the kernel that the futex is process-private and not shared
-with another process (i.e., it is being used for synchronization
-only between threads of the same process).
-This allows the kernel to make some additional performance optimizations.
-.\" I.e., It allows the kernel choose the fast path for validating
-.\" the user-space address and avoids expensive VMA lookups,
-.\" taking reference counts on file backing store, and so on.
-.IP
-As a convenience,
-.I <linux/futex.h>
-defines a set of constants with the suffix
-.B _PRIVATE
-that are equivalents of all of the operations listed below,
-.\" except the obsolete FUTEX_FD, for which the "private" flag was
-.\" meaningless
-but with the
-.B FUTEX_PRIVATE_FLAG
-ORed into the constant value.
-Thus, there are
-.BR FUTEX_WAIT_PRIVATE ,
-.BR FUTEX_WAKE_PRIVATE ,
-and so on.
-.TP
-.BR FUTEX_CLOCK_REALTIME " (since Linux 2.6.28)"
-.\" commit 1acdac104668a0834cfa267de9946fac7764d486
-This option bit can be employed only with the
-.BR FUTEX_WAIT_BITSET ,
-.BR FUTEX_WAIT_REQUEUE_PI ,
-(since Linux 4.5)
-.\" commit 337f13046ff03717a9e99675284a817527440a49
-.BR FUTEX_WAIT ,
-and
-(since Linux 5.14)
-.\" commit bf22a6976897977b0a3f1aeba6823c959fc4fdae
-.B FUTEX_LOCK_PI2
-operations.
-.IP
-If this option is set, the kernel measures the
-.I timeout
-against the
-.B CLOCK_REALTIME
-clock.
-.IP
-If this option is not set, the kernel measures the
-.I timeout
-against the
-.B CLOCK_MONOTONIC
-clock.
-.PP
-The operation specified in
-.I futex_op
-is one of the following:
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.TP
-.BR FUTEX_WAIT " (since Linux 2.6.0)"
-.\" Strictly speaking, since some time in Linux 2.5.x
-This operation tests that the value at the
-futex word pointed to by the address
-.I uaddr
-still contains the expected value
-.IR val ,
-and if so, then sleeps waiting for a
-.B FUTEX_WAKE
-operation on the futex word.
-The load of the value of the futex word is an atomic memory
-access (i.e., using atomic machine instructions of the respective
-architecture).
-This load, the comparison with the expected value, and
-starting to sleep are performed atomically
-.\" FIXME: Torvald, I think we may need to add some explanation of
-.\" "totally ordered" here.
-and totally ordered
-with respect to other futex operations on the same futex word.
-If the thread starts to sleep,
-it is considered a waiter on this futex word.
-If the futex value does not match
-.IR val ,
-then the call fails immediately with the error
-.BR EAGAIN .
-.IP
-The purpose of the comparison with the expected value is to prevent lost
-wake-ups.
-If another thread changed the value of the futex word after the
-calling thread decided to block based on the prior value,
-and if the other thread executed a
-.B FUTEX_WAKE
-operation (or similar wake-up) after the value change and before this
-.B FUTEX_WAIT
-operation, then the calling thread will observe the
-value change and will not start to sleep.
-.IP
-If the
-.I timeout
-is not NULL, the structure it points to specifies a
-timeout for the wait.
-(This interval will be rounded up to the system clock granularity,
-and is guaranteed not to expire early.)
-The timeout is by default measured according to the
-.B CLOCK_MONOTONIC
-clock, but, since Linux 4.5, the
-.B CLOCK_REALTIME
-clock can be selected by specifying
-.B FUTEX_CLOCK_REALTIME
-in
-.IR futex_op .
-If
-.I timeout
-is NULL, the call blocks indefinitely.
-.IP
-.IR Note :
-for
-.BR FUTEX_WAIT ,
-.I timeout
-is interpreted as a
-.I relative
-value.
-This differs from other futex operations, where
-.I timeout
-is interpreted as an absolute value.
-To obtain the equivalent of
-.B FUTEX_WAIT
-with an absolute timeout, employ
-.B FUTEX_WAIT_BITSET
-with
-.I val3
-specified as
-.BR FUTEX_BITSET_MATCH_ANY .
-.IP
-The arguments
-.I uaddr2
-and
-.I val3
-are ignored.
-.\" FIXME . (Torvald) I think we should remove this. Or maybe adapt to a
-.\" different example.
-.\"
-.\" For
-.\" .BR futex (7),
-.\" this call is executed if decrementing the count gave a negative value
-.\" (indicating contention),
-.\" and will sleep until another process or thread releases
-.\" the futex and executes the
-.\" .B FUTEX_WAKE
-.\" operation.
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.TP
-.BR FUTEX_WAKE " (since Linux 2.6.0)"
-.\" Strictly speaking, since Linux 2.5.x
-This operation wakes at most
-.I val
-of the waiters that are waiting (e.g., inside
-.BR FUTEX_WAIT )
-on the futex word at the address
-.IR uaddr .
-Most commonly,
-.I val
-is specified as either 1 (wake up a single waiter) or
-.B INT_MAX
-(wake up all waiters).
-No guarantee is provided about which waiters are awoken
-(e.g., a waiter with a higher scheduling priority is not guaranteed
-to be awoken in preference to a waiter with a lower priority).
-.IP
-The arguments
-.IR timeout ,
-.IR uaddr2 ,
-and
-.I val3
-are ignored.
-.\" FIXME . (Torvald) I think we should remove this. Or maybe adapt to
-.\" a different example.
-.\"
-.\" For
-.\" .BR futex (7),
-.\" this is executed if incrementing the count showed that
-.\" there were waiters,
-.\" once the futex value has been set to 1
-.\" (indicating that it is available).
-.\"
-.\" How does "incrementing the count show that there were waiters"?
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.TP
-.BR FUTEX_FD " (from Linux 2.6.0 up to and including Linux 2.6.25)"
-.\" Strictly speaking, from Linux 2.5.x to Linux 2.6.25
-This operation creates a file descriptor that is associated with
-the futex at
-.IR uaddr .
-The caller must close the returned file descriptor after use.
-When another process or thread performs a
-.B FUTEX_WAKE
-on the futex word, the file descriptor indicates as being readable with
-.BR select (2),
-.BR poll (2),
-and
-.BR epoll (7)
-.IP
-The file descriptor can be used to obtain asynchronous notifications: if
-.I val
-is nonzero, then, when another process or thread executes a
-.BR FUTEX_WAKE ,
-the caller will receive the signal number that was passed in
-.IR val .
-.IP
-The arguments
-.IR timeout ,
-.IR uaddr2 ,
-and
-.I val3
-are ignored.
-.IP
-Because it was inherently racy,
-.B FUTEX_FD
-has been removed
-.\" commit 82af7aca56c67061420d618cc5a30f0fd4106b80
-from Linux 2.6.26 onward.
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.TP
-.BR FUTEX_REQUEUE " (since Linux 2.6.0)"
-This operation performs the same task as
-.B FUTEX_CMP_REQUEUE
-(see below), except that no check is made using the value in
-.IR val3 .
-(The argument
-.I val3
-is ignored.)
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.TP
-.BR FUTEX_CMP_REQUEUE " (since Linux 2.6.7)"
-This operation first checks whether the location
-.I uaddr
-still contains the value
-.IR val3 .
-If not, the operation fails with the error
-.BR EAGAIN .
-Otherwise, the operation wakes up a maximum of
-.I val
-waiters that are waiting on the futex at
-.IR uaddr .
-If there are more than
-.I val
-waiters, then the remaining waiters are removed
-from the wait queue of the source futex at
-.I uaddr
-and added to the wait queue of the target futex at
-.IR uaddr2 .
-The
-.I val2
-argument specifies an upper limit on the number of waiters
-that are requeued to the futex at
-.IR uaddr2 .
-.IP
-.\" FIXME(Torvald) Is the following correct? Or is just the decision
-.\" which threads to wake or requeue part of the atomic operation?
-The load from
-.I uaddr
-is an atomic memory access (i.e., using atomic machine instructions of
-the respective architecture).
-This load, the comparison with
-.IR val3 ,
-and the requeueing of any waiters are performed atomically and totally
-ordered with respect to other operations on the same futex word.
-.\" Notes from a f2f conversation with Thomas Gleixner (Aug 2015): ###
-.\" The operation is serialized with respect to operations on both
-.\" source and target futex. No other waiter can enqueue itself
-.\" for waiting and no other waiter can dequeue itself because of
-.\" a timeout or signal.
-.IP
-Typical values to specify for
-.I val
-are 0 or 1.
-(Specifying
-.B INT_MAX
-is not useful, because it would make the
-.B FUTEX_CMP_REQUEUE
-operation equivalent to
-.BR FUTEX_WAKE .)
-The limit value specified via
-.I val2
-is typically either 1 or
-.BR INT_MAX .
-(Specifying the argument as 0 is not useful, because it would make the
-.B FUTEX_CMP_REQUEUE
-operation equivalent to
-.BR FUTEX_WAIT .)
-.IP
-The
-.B FUTEX_CMP_REQUEUE
-operation was added as a replacement for the earlier
-.BR FUTEX_REQUEUE .
-The difference is that the check of the value at
-.I uaddr
-can be used to ensure that requeueing happens only under certain
-conditions, which allows race conditions to be avoided in certain use cases.
-.\" But, as Rich Felker points out, there remain valid use cases for
-.\" FUTEX_REQUEUE, for example, when the calling thread is requeuing
-.\" the target(s) to a lock that the calling thread owns
-.\" From: Rich Felker <dalias@libc.org>
-.\" Date: Wed, 29 Oct 2014 22:43:17 -0400
-.\" To: Darren Hart <dvhart@infradead.org>
-.\" CC: libc-alpha@sourceware.org, ...
-.\" Subject: Re: Add futex wrapper to glibc?
-.IP
-Both
-.B FUTEX_REQUEUE
-and
-.B FUTEX_CMP_REQUEUE
-can be used to avoid "thundering herd" wake-ups that could occur when using
-.B FUTEX_WAKE
-in cases where all of the waiters that are woken need to acquire
-another futex.
-Consider the following scenario,
-where multiple waiter threads are waiting on B,
-a wait queue implemented using a futex:
-.IP
-.in +4n
-.EX
-lock(A)
-while (!check_value(V)) {
- unlock(A);
- block_on(B);
- lock(A);
-};
-unlock(A);
-.EE
-.in
-.IP
-If a waker thread used
-.BR FUTEX_WAKE ,
-then all waiters waiting on B would be woken up,
-and they would all try to acquire lock A.
-However, waking all of the threads in this manner would be pointless because
-all except one of the threads would immediately block on lock A again.
-By contrast, a requeue operation wakes just one waiter and moves
-the other waiters to lock A,
-and when the woken waiter unlocks A then the next waiter can proceed.
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.TP
-.BR FUTEX_WAKE_OP " (since Linux 2.6.14)"
-.\" commit 4732efbeb997189d9f9b04708dc26bf8613ed721
-.\" Author: Jakub Jelinek <jakub@redhat.com>
-.\" Date: Tue Sep 6 15:16:25 2005 -0700
-.\" FIXME. (Torvald) The glibc condvar implementation is currently being
-.\" revised (e.g., to not use an internal lock anymore).
-.\" It is probably more future-proof to remove this paragraph.
-.\" [Torvald, do you have an update here?]
-This operation was added to support some user-space use cases
-where more than one futex must be handled at the same time.
-The most notable example is the implementation of
-.BR pthread_cond_signal (3),
-which requires operations on two futexes,
-the one used to implement the mutex and the one used in the implementation
-of the wait queue associated with the condition variable.
-.B FUTEX_WAKE_OP
-allows such cases to be implemented without leading to
-high rates of contention and context switching.
-.IP
-The
-.B FUTEX_WAKE_OP
-operation is equivalent to executing the following code atomically
-and totally ordered with respect to other futex operations on
-any of the two supplied futex words:
-.IP
-.in +4n
-.EX
-uint32_t oldval = *(uint32_t *) uaddr2;
-*(uint32_t *) uaddr2 = oldval \fIop\fP \fIoparg\fP;
-futex(uaddr, FUTEX_WAKE, val, 0, 0, 0);
-if (oldval \fIcmp\fP \fIcmparg\fP)
- futex(uaddr2, FUTEX_WAKE, val2, 0, 0, 0);
-.EE
-.in
-.IP
-In other words,
-.B FUTEX_WAKE_OP
-does the following:
-.RS
-.IP \[bu] 3
-saves the original value of the futex word at
-.I uaddr2
-and performs an operation to modify the value of the futex at
-.IR uaddr2 ;
-this is an atomic read-modify-write memory access (i.e., using atomic
-machine instructions of the respective architecture)
-.IP \[bu]
-wakes up a maximum of
-.I val
-waiters on the futex for the futex word at
-.IR uaddr ;
-and
-.IP \[bu]
-dependent on the results of a test of the original value of the
-futex word at
-.IR uaddr2 ,
-wakes up a maximum of
-.I val2
-waiters on the futex for the futex word at
-.IR uaddr2 .
-.RE
-.IP
-The operation and comparison that are to be performed are encoded
-in the bits of the argument
-.IR val3 .
-Pictorially, the encoding is:
-.IP
-.in +4n
-.EX
-+---+---+-----------+-----------+
-|op |cmp| oparg | cmparg |
-+---+---+-----------+-----------+
- 4 4 12 12 <== # of bits
-.EE
-.in
-.IP
-Expressed in code, the encoding is:
-.IP
-.in +4n
-.EX
-#define FUTEX_OP(op, oparg, cmp, cmparg) \e
- (((op & 0xf) << 28) | \e
- ((cmp & 0xf) << 24) | \e
- ((oparg & 0xfff) << 12) | \e
- (cmparg & 0xfff))
-.EE
-.in
-.IP
-In the above,
-.I op
-and
-.I cmp
-are each one of the codes listed below.
-The
-.I oparg
-and
-.I cmparg
-components are literal numeric values, except as noted below.
-.IP
-The
-.I op
-component has one of the following values:
-.IP
-.in +4n
-.EX
-FUTEX_OP_SET 0 /* uaddr2 = oparg; */
-FUTEX_OP_ADD 1 /* uaddr2 += oparg; */
-FUTEX_OP_OR 2 /* uaddr2 |= oparg; */
-FUTEX_OP_ANDN 3 /* uaddr2 &= \[ti]oparg; */
-FUTEX_OP_XOR 4 /* uaddr2 \[ha]= oparg; */
-.EE
-.in
-.IP
-In addition, bitwise ORing the following value into
-.I op
-causes
-.I (1\~<<\~oparg)
-to be used as the operand:
-.IP
-.in +4n
-.EX
-FUTEX_OP_ARG_SHIFT 8 /* Use (1 << oparg) as operand */
-.EE
-.in
-.IP
-The
-.I cmp
-field is one of the following:
-.IP
-.in +4n
-.EX
-FUTEX_OP_CMP_EQ 0 /* if (oldval == cmparg) wake */
-FUTEX_OP_CMP_NE 1 /* if (oldval != cmparg) wake */
-FUTEX_OP_CMP_LT 2 /* if (oldval < cmparg) wake */
-FUTEX_OP_CMP_LE 3 /* if (oldval <= cmparg) wake */
-FUTEX_OP_CMP_GT 4 /* if (oldval > cmparg) wake */
-FUTEX_OP_CMP_GE 5 /* if (oldval >= cmparg) wake */
-.EE
-.in
-.IP
-The return value of
-.B FUTEX_WAKE_OP
-is the sum of the number of waiters woken on the futex
-.I uaddr
-plus the number of waiters woken on the futex
-.IR uaddr2 .
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.TP
-.BR FUTEX_WAIT_BITSET " (since Linux 2.6.25)"
-.\" commit cd689985cf49f6ff5c8eddc48d98b9d581d9475d
-This operation is like
-.B FUTEX_WAIT
-except that
-.I val3
-is used to provide a 32-bit bit mask to the kernel.
-This bit mask, in which at least one bit must be set,
-is stored in the kernel-internal state of the waiter.
-See the description of
-.B FUTEX_WAKE_BITSET
-for further details.
-.IP
-If
-.I timeout
-is not NULL, the structure it points to specifies
-an absolute timeout for the wait operation.
-If
-.I timeout
-is NULL, the operation can block indefinitely.
-.IP
-The
-.I uaddr2
-argument is ignored.
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.TP
-.BR FUTEX_WAKE_BITSET " (since Linux 2.6.25)"
-.\" commit cd689985cf49f6ff5c8eddc48d98b9d581d9475d
-This operation is the same as
-.B FUTEX_WAKE
-except that the
-.I val3
-argument is used to provide a 32-bit bit mask to the kernel.
-This bit mask, in which at least one bit must be set,
-is used to select which waiters should be woken up.
-The selection is done by a bitwise AND of the "wake" bit mask
-(i.e., the value in
-.IR val3 )
-and the bit mask which is stored in the kernel-internal
-state of the waiter (the "wait" bit mask that is set using
-.BR FUTEX_WAIT_BITSET ).
-All of the waiters for which the result of the AND is nonzero are woken up;
-the remaining waiters are left sleeping.
-.IP
-The effect of
-.B FUTEX_WAIT_BITSET
-and
-.B FUTEX_WAKE_BITSET
-is to allow selective wake-ups among multiple waiters that are blocked
-on the same futex.
-However, note that, depending on the use case,
-employing this bit-mask multiplexing feature on a
-futex can be less efficient than simply using multiple futexes,
-because employing bit-mask multiplexing requires the kernel
-to check all waiters on a futex,
-including those that are not interested in being woken up
-(i.e., they do not have the relevant bit set in their "wait" bit mask).
-.\" According to http://locklessinc.com/articles/futex_cheat_sheet/:
-.\"
-.\" "The original reason for the addition of these extensions
-.\" was to improve the performance of pthread read-write locks
-.\" in glibc. However, the pthreads library no longer uses the
-.\" same locking algorithm, and these extensions are not used
-.\" without the bitset parameter being all ones.
-.\"
-.\" The page goes on to note that the FUTEX_WAIT_BITSET operation
-.\" is nevertheless used (with a bit mask of all ones) in order to
-.\" obtain the absolute timeout functionality that is useful
-.\" for efficiently implementing Pthreads APIs (which use absolute
-.\" timeouts); FUTEX_WAIT provides only relative timeouts.
-.IP
-The constant
-.BR FUTEX_BITSET_MATCH_ANY ,
-which corresponds to all 32 bits set in the bit mask, can be used as the
-.I val3
-argument for
-.B FUTEX_WAIT_BITSET
-and
-.BR FUTEX_WAKE_BITSET .
-Other than differences in the handling of the
-.I timeout
-argument, the
-.B FUTEX_WAIT
-operation is equivalent to
-.B FUTEX_WAIT_BITSET
-with
-.I val3
-specified as
-.BR FUTEX_BITSET_MATCH_ANY ;
-that is, allow a wake-up by any waker.
-The
-.B FUTEX_WAKE
-operation is equivalent to
-.B FUTEX_WAKE_BITSET
-with
-.I val3
-specified as
-.BR FUTEX_BITSET_MATCH_ANY ;
-that is, wake up any waiter(s).
-.IP
-The
-.I uaddr2
-and
-.I timeout
-arguments are ignored.
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.SS Priority-inheritance futexes
-Linux supports priority-inheritance (PI) futexes in order to handle
-priority-inversion problems that can be encountered with
-normal futex locks.
-Priority inversion is the problem that occurs when a high-priority
-task is blocked waiting to acquire a lock held by a low-priority task,
-while tasks at an intermediate priority continuously preempt
-the low-priority task from the CPU.
-Consequently, the low-priority task makes no progress toward
-releasing the lock, and the high-priority task remains blocked.
-.PP
-Priority inheritance is a mechanism for dealing with
-the priority-inversion problem.
-With this mechanism, when a high-priority task becomes blocked
-by a lock held by a low-priority task,
-the priority of the low-priority task is temporarily raised
-to that of the high-priority task,
-so that it is not preempted by any intermediate level tasks,
-and can thus make progress toward releasing the lock.
-To be effective, priority inheritance must be transitive,
-meaning that if a high-priority task blocks on a lock
-held by a lower-priority task that is itself blocked by a lock
-held by another intermediate-priority task
-(and so on, for chains of arbitrary length),
-then both of those tasks
-(or more generally, all of the tasks in a lock chain)
-have their priorities raised to be the same as the high-priority task.
-.PP
-From a user-space perspective,
-what makes a futex PI-aware is a policy agreement (described below)
-between user space and the kernel about the value of the futex word,
-coupled with the use of the PI-futex operations described below.
-(Unlike the other futex operations described above,
-the PI-futex operations are designed
-for the implementation of very specific IPC mechanisms.)
-.\"
-.\" Quoting Darren Hart:
-.\" These opcodes paired with the PI futex value policy (described below)
-.\" defines a "futex" as PI aware. These were created very specifically
-.\" in support of PI pthread_mutexes, so it makes a lot more sense to
-.\" talk about a PI aware pthread_mutex, than a PI aware futex, since
-.\" there is a lot of policy and scaffolding that has to be built up
-.\" around it to use it properly (this is what a PI pthread_mutex is).
-.PP
-.\" mtk: The following text is drawn from the Hart/Guniguntala paper
-.\" (listed in SEE ALSO), but I have reworded some pieces
-.\" significantly.
-.\"
-The PI-futex operations described below differ from the other
-futex operations in that they impose policy on the use of the value of the
-futex word:
-.IP \[bu] 3
-If the lock is not acquired, the futex word's value shall be 0.
-.IP \[bu]
-If the lock is acquired, the futex word's value shall
-be the thread ID (TID;
-see
-.BR gettid (2))
-of the owning thread.
-.IP \[bu]
-If the lock is owned and there are threads contending for the lock,
-then the
-.B FUTEX_WAITERS
-bit shall be set in the futex word's value; in other words, this value is:
-.IP
-.in +4n
-.EX
-FUTEX_WAITERS | TID
-.EE
-.in
-.IP
-(Note that is invalid for a PI futex word to have no owner and
-.B FUTEX_WAITERS
-set.)
-.PP
-With this policy in place,
-a user-space application can acquire an unacquired
-lock or release a lock using atomic instructions executed in user mode
-(e.g., a compare-and-swap operation such as
-.I cmpxchg
-on the x86 architecture).
-Acquiring a lock simply consists of using compare-and-swap to atomically
-set the futex word's value to the caller's TID if its previous value was 0.
-Releasing a lock requires using compare-and-swap to set the futex word's
-value to 0 if the previous value was the expected TID.
-.PP
-If a futex is already acquired (i.e., has a nonzero value),
-waiters must employ the
-.B FUTEX_LOCK_PI
-or
-.B FUTEX_LOCK_PI2
-operations to acquire the lock.
-If other threads are waiting for the lock, then the
-.B FUTEX_WAITERS
-bit is set in the futex value;
-in this case, the lock owner must employ the
-.B FUTEX_UNLOCK_PI
-operation to release the lock.
-.PP
-In the cases where callers are forced into the kernel
-(i.e., required to perform a
-.BR futex ()
-call),
-they then deal directly with a so-called RT-mutex,
-a kernel locking mechanism which implements the required
-priority-inheritance semantics.
-After the RT-mutex is acquired, the futex value is updated accordingly,
-before the calling thread returns to user space.
-.PP
-It is important to note
-.\" tglx (July 2015):
-.\" If there are multiple waiters on a pi futex then a wake pi operation
-.\" will wake the first waiter and hand over the lock to this waiter. This
-.\" includes handing over the rtmutex which represents the futex in the
-.\" kernel. The strict requirement is that the futex owner and the rtmutex
-.\" owner must be the same, except for the update period which is
-.\" serialized by the futex internal locking. That means the kernel must
-.\" update the user-space value prior to returning to user space
-that the kernel will update the futex word's value prior
-to returning to user space.
-(This prevents the possibility of the futex word's value ending
-up in an invalid state, such as having an owner but the value being 0,
-or having waiters but not having the
-.B FUTEX_WAITERS
-bit set.)
-.PP
-If a futex has an associated RT-mutex in the kernel
-(i.e., there are blocked waiters)
-and the owner of the futex/RT-mutex dies unexpectedly,
-then the kernel cleans up the RT-mutex and hands it over to the next waiter.
-This in turn requires that the user-space value is updated accordingly.
-To indicate that this is required, the kernel sets the
-.B FUTEX_OWNER_DIED
-bit in the futex word along with the thread ID of the new owner.
-User space can detect this situation via the presence of the
-.B FUTEX_OWNER_DIED
-bit and is then responsible for cleaning up the stale state left over by
-the dead owner.
-.\" tglx (July 2015):
-.\" The FUTEX_OWNER_DIED bit can also be set on uncontended futexes, where
-.\" the kernel has no state associated. This happens via the robust futex
-.\" mechanism. In that case the futex value will be set to
-.\" FUTEX_OWNER_DIED. The robust futex mechanism is also available for non
-.\" PI futexes.
-.PP
-PI futexes are operated on by specifying one of the values listed below in
-.IR futex_op .
-Note that the PI futex operations must be used as paired operations
-and are subject to some additional requirements:
-.IP \[bu] 3
-.BR FUTEX_LOCK_PI ,
-.BR FUTEX_LOCK_PI2 ,
-and
-.B FUTEX_TRYLOCK_PI
-pair with
-.BR FUTEX_UNLOCK_PI .
-.B FUTEX_UNLOCK_PI
-must be called only on a futex owned by the calling thread,
-as defined by the value policy, otherwise the error
-.B EPERM
-results.
-.IP \[bu]
-.B FUTEX_WAIT_REQUEUE_PI
-pairs with
-.BR FUTEX_CMP_REQUEUE_PI .
-This must be performed from a non-PI futex to a distinct PI futex
-(or the error
-.B EINVAL
-results).
-Additionally,
-.I val
-(the number of waiters to be woken) must be 1
-(or the error
-.B EINVAL
-results).
-.PP
-The PI futex operations are as follows:
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.TP
-.BR FUTEX_LOCK_PI " (since Linux 2.6.18)"
-.\" commit c87e2837be82df479a6bae9f155c43516d2feebc
-This operation is used after an attempt to acquire
-the lock via an atomic user-mode instruction failed
-because the futex word has a nonzero value\[em]specifically,
-because it contained the (PID-namespace-specific) TID of the lock owner.
-.IP
-The operation checks the value of the futex word at the address
-.IR uaddr .
-If the value is 0, then the kernel tries to atomically set
-the futex value to the caller's TID.
-If the futex word's value is nonzero,
-the kernel atomically sets the
-.B FUTEX_WAITERS
-bit, which signals the futex owner that it cannot unlock the futex in
-user space atomically by setting the futex value to 0.
-.\" tglx (July 2015):
-.\" The operation here is similar to the FUTEX_WAIT logic. When the user
-.\" space atomic acquire does not succeed because the futex value was non
-.\" zero, then the waiter goes into the kernel, takes the kernel internal
-.\" lock and retries the acquisition under the lock. If the acquisition
-.\" does not succeed either, then it sets the FUTEX_WAITERS bit, to signal
-.\" the lock owner that it needs to go into the kernel. Here is the pseudo
-.\" code:
-.\"
-.\" lock(kernel_lock);
-.\" retry:
-.\"
-.\" /*
-.\" * Owner might have unlocked in user space before we
-.\" * were able to set the waiter bit.
-.\" */
-.\" if (atomic_acquire(futex) == SUCCESS) {
-.\" unlock(kernel_lock());
-.\" return 0;
-.\" }
-.\"
-.\" /*
-.\" * Owner might have unlocked after the above atomic_acquire()
-.\" * attempt.
-.\" */
-.\" if (atomic_set_waiters_bit(futex) != SUCCESS)
-.\" goto retry;
-.\"
-.\" queue_waiter();
-.\" unlock(kernel_lock);
-.\" block();
-.\"
-After that, the kernel:
-.RS
-.IP (1) 5
-Tries to find the thread which is associated with the owner TID.
-.IP (2)
-Creates or reuses kernel state on behalf of the owner.
-(If this is the first waiter, there is no kernel state for this
-futex, so kernel state is created by locking the RT-mutex
-and the futex owner is made the owner of the RT-mutex.
-If there are existing waiters, then the existing state is reused.)
-.IP (3)
-Attaches the waiter to the futex
-(i.e., the waiter is enqueued on the RT-mutex waiter list).
-.RE
-.IP
-If more than one waiter exists,
-the enqueueing of the waiter is in descending priority order.
-(For information on priority ordering, see the discussion of the
-.BR SCHED_DEADLINE ,
-.BR SCHED_FIFO ,
-and
-.B SCHED_RR
-scheduling policies in
-.BR sched (7).)
-The owner inherits either the waiter's CPU bandwidth
-(if the waiter is scheduled under the
-.B SCHED_DEADLINE
-policy) or the waiter's priority (if the waiter is scheduled under the
-.B SCHED_RR
-or
-.B SCHED_FIFO
-policy).
-.\" August 2015:
-.\" mtk: If the realm is restricted purely to SCHED_OTHER (SCHED_NORMAL)
-.\" processes, does the nice value come into play also?
-.\"
-.\" tglx: No. SCHED_OTHER/NORMAL tasks are handled in FIFO order
-This inheritance follows the lock chain in the case of nested locking
-.\" (i.e., task 1 blocks on lock A, held by task 2,
-.\" while task 2 blocks on lock B, held by task 3)
-and performs deadlock detection.
-.IP
-The
-.I timeout
-argument provides a timeout for the lock attempt.
-If
-.I timeout
-is not NULL, the structure it points to specifies
-an absolute timeout, measured against the
-.B CLOCK_REALTIME
-clock.
-.\" 2016-07-07 response from Thomas Gleixner on LKML:
-.\" From: Thomas Gleixner <tglx@linutronix.de>
-.\" Date: 6 July 2016 at 20:57
-.\" Subject: Re: futex: Allow FUTEX_CLOCK_REALTIME with FUTEX_WAIT op
-.\"
-.\" On Thu, 23 Jun 2016, Michael Kerrisk (man-pages) wrote:
-.\" > On 06/23/2016 08:28 PM, Darren Hart wrote:
-.\" > > And as a follow-on, what is the reason for FUTEX_LOCK_PI only using
-.\" > > CLOCK_REALTIME? It seems reasonable to me that a user may want to wait a
-.\" > > specific amount of time, regardless of wall time.
-.\" >
-.\" > Yes, that's another weird inconsistency.
-.\"
-.\" The reason is that phtread_mutex_timedlock() uses absolute timeouts based on
-.\" CLOCK_REALTIME. glibc folks asked to make that the default behaviour back
-.\" then when we added LOCK_PI.
-If
-.I timeout
-is NULL, the operation will block indefinitely.
-.IP
-The
-.IR uaddr2 ,
-.IR val ,
-and
-.I val3
-arguments are ignored.
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.TP
-.BR FUTEX_LOCK_PI2 " (since Linux 5.14)"
-.\" commit bf22a6976897977b0a3f1aeba6823c959fc4fdae
-This operation is the same as
-.BR FUTEX_LOCK_PI ,
-except that the clock against which
-.I timeout
-is measured is selectable.
-By default, the (absolute) timeout specified in
-.I timeout
-is measured against the
-.B CLOCK_MONOTONIC
-clock, but if the
-.B FUTEX_CLOCK_REALTIME
-flag is specified in
-.IR futex_op ,
-then the timeout is measured against the
-.B CLOCK_REALTIME
-clock.
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.TP
-.BR FUTEX_TRYLOCK_PI " (since Linux 2.6.18)"
-.\" commit c87e2837be82df479a6bae9f155c43516d2feebc
-This operation tries to acquire the lock at
-.IR uaddr .
-It is invoked when a user-space atomic acquire did not
-succeed because the futex word was not 0.
-.IP
-Because the kernel has access to more state information than user space,
-acquisition of the lock might succeed if performed by the
-kernel in cases where the futex word
-(i.e., the state information accessible to use-space) contains stale state
-.RB ( FUTEX_WAITERS
-and/or
-.BR FUTEX_OWNER_DIED ).
-This can happen when the owner of the futex died.
-User space cannot handle this condition in a race-free manner,
-but the kernel can fix this up and acquire the futex.
-.\" Paraphrasing a f2f conversation with Thomas Gleixner about the
-.\" above point (Aug 2015): ###
-.\" There is a rare possibility of a race condition involving an
-.\" uncontended futex with no owner, but with waiters. The
-.\" kernel-user-space contract is that if a futex is nonzero, you must
-.\" go into kernel. The futex was owned by a task, and that task dies
-.\" but there are no waiters, so the futex value is non zero.
-.\" Therefore, the next locker has to go into the kernel,
-.\" so that the kernel has a chance to clean up. (CMXCH on zero
-.\" in user space would fail, so kernel has to clean up.)
-.\" Darren Hart (Oct 2015):
-.\" The trylock in the kernel has more state, so it can independently
-.\" verify the flags that user space must trust implicitly.
-.IP
-The
-.IR uaddr2 ,
-.IR val ,
-.IR timeout ,
-and
-.I val3
-arguments are ignored.
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.TP
-.BR FUTEX_UNLOCK_PI " (since Linux 2.6.18)"
-.\" commit c87e2837be82df479a6bae9f155c43516d2feebc
-This operation wakes the top priority waiter that is waiting in
-.B FUTEX_LOCK_PI
-or
-.B FUTEX_LOCK_PI2
-on the futex address provided by the
-.I uaddr
-argument.
-.IP
-This is called when the user-space value at
-.I uaddr
-cannot be changed atomically from a TID (of the owner) to 0.
-.IP
-The
-.IR uaddr2 ,
-.IR val ,
-.IR timeout ,
-and
-.I val3
-arguments are ignored.
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.TP
-.BR FUTEX_CMP_REQUEUE_PI " (since Linux 2.6.31)"
-.\" commit 52400ba946759af28442dee6265c5c0180ac7122
-This operation is a PI-aware variant of
-.BR FUTEX_CMP_REQUEUE .
-It requeues waiters that are blocked via
-.B FUTEX_WAIT_REQUEUE_PI
-on
-.I uaddr
-from a non-PI source futex
-.RI ( uaddr )
-to a PI target futex
-.RI ( uaddr2 ).
-.IP
-As with
-.BR FUTEX_CMP_REQUEUE ,
-this operation wakes up a maximum of
-.I val
-waiters that are waiting on the futex at
-.IR uaddr .
-However, for
-.BR FUTEX_CMP_REQUEUE_PI ,
-.I val
-is required to be 1
-(since the main point is to avoid a thundering herd).
-The remaining waiters are removed from the wait queue of the source futex at
-.I uaddr
-and added to the wait queue of the target futex at
-.IR uaddr2 .
-.IP
-The
-.I val2
-.\" val2 is the cap on the number of requeued waiters.
-.\" In the glibc pthread_cond_broadcast() implementation, this argument
-.\" is specified as INT_MAX, and for pthread_cond_signal() it is 0.
-and
-.I val3
-arguments serve the same purposes as for
-.BR FUTEX_CMP_REQUEUE .
-.\"
-.\" The page at http://locklessinc.com/articles/futex_cheat_sheet/
-.\" notes that "priority-inheritance Futex to priority-inheritance
-.\" Futex requeues are currently unsupported". However, probably
-.\" the page does not need to say nothing about this, since
-.\" Thomas Gleixner commented (July 2015): "they never will be
-.\" supported because they make no sense at all"
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.TP
-.BR FUTEX_WAIT_REQUEUE_PI " (since Linux 2.6.31)"
-.\" commit 52400ba946759af28442dee6265c5c0180ac7122
-.\"
-Wait on a non-PI futex at
-.I uaddr
-and potentially be requeued (via a
-.B FUTEX_CMP_REQUEUE_PI
-operation in another task) onto a PI futex at
-.IR uaddr2 .
-The wait operation on
-.I uaddr
-is the same as for
-.BR FUTEX_WAIT .
-.IP
-The waiter can be removed from the wait on
-.I uaddr
-without requeueing on
-.I uaddr2
-via a
-.B FUTEX_WAKE
-operation in another task.
-In this case, the
-.B FUTEX_WAIT_REQUEUE_PI
-operation fails with the error
-.BR EAGAIN .
-.IP
-If
-.I timeout
-is not NULL, the structure it points to specifies
-an absolute timeout for the wait operation.
-If
-.I timeout
-is NULL, the operation can block indefinitely.
-.IP
-The
-.I val3
-argument is ignored.
-.IP
-The
-.B FUTEX_WAIT_REQUEUE_PI
-and
-.B FUTEX_CMP_REQUEUE_PI
-were added to support a fairly specific use case:
-support for priority-inheritance-aware POSIX threads condition variables.
-The idea is that these operations should always be paired,
-in order to ensure that user space and the kernel remain in sync.
-Thus, in the
-.B FUTEX_WAIT_REQUEUE_PI
-operation, the user-space application pre-specifies the target
-of the requeue that takes place in the
-.B FUTEX_CMP_REQUEUE_PI
-operation.
-.\"
-.\" Darren Hart notes that a patch to allow glibc to fully support
-.\" PI-aware pthreads condition variables has not yet been accepted into
-.\" glibc. The story is complex, and can be found at
-.\" https://sourceware.org/bugzilla/show_bug.cgi?id=11588
-.\" Darren notes that in the meantime, the patch is shipped with various
-.\" PREEMPT_RT-enabled Linux systems.
-.\"
-.\" Related to the preceding, Darren proposed that somewhere, man-pages
-.\" should document the following point:
-.\"
-.\" While the Linux kernel, since Linux 2.6.31, supports requeueing of
-.\" priority-inheritance (PI) aware mutexes via the
-.\" FUTEX_WAIT_REQUEUE_PI and FUTEX_CMP_REQUEUE_PI futex operations,
-.\" the glibc implementation does not yet take full advantage of this.
-.\" Specifically, the condvar internal data lock remains a non-PI aware
-.\" mutex, regardless of the type of the pthread_mutex associated with
-.\" the condvar. This can lead to an unbounded priority inversion on
-.\" the internal data lock even when associating a PI aware
-.\" pthread_mutex with a condvar during a pthread_cond*_wait
-.\" operation. For this reason, it is not recommended to rely on
-.\" priority inheritance when using pthread condition variables.
-.\"
-.\" The problem is that the obvious location for this text is
-.\" the pthread_cond*wait(3) man page. However, such a man page
-.\" does not currently exist.
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.SH RETURN VALUE
-In the event of an error (and assuming that
-.BR futex ()
-was invoked via
-.BR syscall (2)),
-all operations return \-1 and set
-.I errno
-to indicate the error.
-.PP
-The return value on success depends on the operation,
-as described in the following list:
-.TP
-.B FUTEX_WAIT
-Returns 0 if the caller was woken up.
-Note that a wake-up can also be caused by common futex usage patterns
-in unrelated code that happened to have previously used the futex word's
-memory location (e.g., typical futex-based implementations of
-Pthreads mutexes can cause this under some conditions).
-Therefore, callers should always conservatively assume that a return
-value of 0 can mean a spurious wake-up, and use the futex word's value
-(i.e., the user-space synchronization scheme)
-to decide whether to continue to block or not.
-.TP
-.B FUTEX_WAKE
-Returns the number of waiters that were woken up.
-.TP
-.B FUTEX_FD
-Returns the new file descriptor associated with the futex.
-.TP
-.B FUTEX_REQUEUE
-Returns the number of waiters that were woken up.
-.TP
-.B FUTEX_CMP_REQUEUE
-Returns the total number of waiters that were woken up or
-requeued to the futex for the futex word at
-.IR uaddr2 .
-If this value is greater than
-.IR val ,
-then the difference is the number of waiters requeued to the futex for the
-futex word at
-.IR uaddr2 .
-.TP
-.B FUTEX_WAKE_OP
-Returns the total number of waiters that were woken up.
-This is the sum of the woken waiters on the two futexes for
-the futex words at
-.I uaddr
-and
-.IR uaddr2 .
-.TP
-.B FUTEX_WAIT_BITSET
-Returns 0 if the caller was woken up.
-See
-.B FUTEX_WAIT
-for how to interpret this correctly in practice.
-.TP
-.B FUTEX_WAKE_BITSET
-Returns the number of waiters that were woken up.
-.TP
-.B FUTEX_LOCK_PI
-Returns 0 if the futex was successfully locked.
-.TP
-.B FUTEX_LOCK_PI2
-Returns 0 if the futex was successfully locked.
-.TP
-.B FUTEX_TRYLOCK_PI
-Returns 0 if the futex was successfully locked.
-.TP
-.B FUTEX_UNLOCK_PI
-Returns 0 if the futex was successfully unlocked.
-.TP
-.B FUTEX_CMP_REQUEUE_PI
-Returns the total number of waiters that were woken up or
-requeued to the futex for the futex word at
-.IR uaddr2 .
-If this value is greater than
-.IR val ,
-then difference is the number of waiters requeued to the futex for
-the futex word at
-.IR uaddr2 .
-.TP
-.B FUTEX_WAIT_REQUEUE_PI
-Returns 0 if the caller was successfully requeued to the futex for
-the futex word at
-.IR uaddr2 .
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.SH ERRORS
-.TP
-.B EACCES
-No read access to the memory of a futex word.
-.TP
-.B EAGAIN
-.RB ( FUTEX_WAIT ,
-.BR FUTEX_WAIT_BITSET ,
-.BR FUTEX_WAIT_REQUEUE_PI )
-The value pointed to by
-.I uaddr
-was not equal to the expected value
-.I val
-at the time of the call.
-.IP
-.BR Note :
-on Linux, the symbolic names
-.B EAGAIN
-and
-.B EWOULDBLOCK
-(both of which appear in different parts of the kernel futex code)
-have the same value.
-.TP
-.B EAGAIN
-.RB ( FUTEX_CMP_REQUEUE ,
-.BR FUTEX_CMP_REQUEUE_PI )
-The value pointed to by
-.I uaddr
-is not equal to the expected value
-.IR val3 .
-.TP
-.B EAGAIN
-.RB ( FUTEX_LOCK_PI ,
-.BR FUTEX_LOCK_PI2 ,
-.BR FUTEX_TRYLOCK_PI ,
-.BR FUTEX_CMP_REQUEUE_PI )
-The futex owner thread ID of
-.I uaddr
-(for
-.BR FUTEX_CMP_REQUEUE_PI :
-.IR uaddr2 )
-is about to exit,
-but has not yet handled the internal state cleanup.
-Try again.
-.TP
-.B EDEADLK
-.RB ( FUTEX_LOCK_PI ,
-.BR FUTEX_LOCK_PI2 ,
-.BR FUTEX_TRYLOCK_PI ,
-.BR FUTEX_CMP_REQUEUE_PI )
-The futex word at
-.I uaddr
-is already locked by the caller.
-.TP
-.B EDEADLK
-.\" FIXME . I see that kernel/locking/rtmutex.c uses EDEADLK in some
-.\" places, and EDEADLOCK in others. On almost all architectures
-.\" these constants are synonymous. Is there a reason that both
-.\" names are used?
-.\"
-.\" tglx (July 2015): "No. We should probably fix that."
-.\"
-.RB ( FUTEX_CMP_REQUEUE_PI )
-While requeueing a waiter to the PI futex for the futex word at
-.IR uaddr2 ,
-the kernel detected a deadlock.
-.TP
-.B EFAULT
-A required pointer argument (i.e.,
-.IR uaddr ,
-.IR uaddr2 ,
-or
-.IR timeout )
-did not point to a valid user-space address.
-.TP
-.B EINTR
-A
-.B FUTEX_WAIT
-or
-.B FUTEX_WAIT_BITSET
-operation was interrupted by a signal (see
-.BR signal (7)).
-Before Linux 2.6.22, this error could also be returned for
-a spurious wakeup; since Linux 2.6.22, this no longer happens.
-.TP
-.B EINVAL
-The operation in
-.I futex_op
-is one of those that employs a timeout, but the supplied
-.I timeout
-argument was invalid
-.RI ( tv_sec
-was less than zero, or
-.I tv_nsec
-was not less than 1,000,000,000).
-.TP
-.B EINVAL
-The operation specified in
-.I futex_op
-employs one or both of the pointers
-.I uaddr
-and
-.IR uaddr2 ,
-but one of these does not point to a valid object\[em]that is,
-the address is not four-byte-aligned.
-.TP
-.B EINVAL
-.RB ( FUTEX_WAIT_BITSET ,
-.BR FUTEX_WAKE_BITSET )
-The bit mask supplied in
-.I val3
-is zero.
-.TP
-.B EINVAL
-.RB ( FUTEX_CMP_REQUEUE_PI )
-.I uaddr
-equals
-.I uaddr2
-(i.e., an attempt was made to requeue to the same futex).
-.TP
-.B EINVAL
-.RB ( FUTEX_FD )
-The signal number supplied in
-.I val
-is invalid.
-.TP
-.B EINVAL
-.RB ( FUTEX_WAKE ,
-.BR FUTEX_WAKE_OP ,
-.BR FUTEX_WAKE_BITSET ,
-.BR FUTEX_REQUEUE ,
-.BR FUTEX_CMP_REQUEUE )
-The kernel detected an inconsistency between the user-space state at
-.I uaddr
-and the kernel state\[em]that is, it detected a waiter which waits in
-.B FUTEX_LOCK_PI
-or
-.B FUTEX_LOCK_PI2
-on
-.IR uaddr .
-.TP
-.B EINVAL
-.RB ( FUTEX_LOCK_PI ,
-.BR FUTEX_LOCK_PI2 ,
-.BR FUTEX_TRYLOCK_PI ,
-.BR FUTEX_UNLOCK_PI )
-The kernel detected an inconsistency between the user-space state at
-.I uaddr
-and the kernel state.
-This indicates either state corruption
-or that the kernel found a waiter on
-.I uaddr
-which is waiting via
-.B FUTEX_WAIT
-or
-.BR FUTEX_WAIT_BITSET .
-.TP
-.B EINVAL
-.RB ( FUTEX_CMP_REQUEUE_PI )
-The kernel detected an inconsistency between the user-space state at
-.I uaddr2
-and the kernel state;
-.\" From a conversation with Thomas Gleixner (Aug 2015): ###
-.\" The kernel sees: I have non PI state for a futex you tried to
-.\" tell me was PI
-that is, the kernel detected a waiter which waits via
-.B FUTEX_WAIT
-or
-.B FUTEX_WAIT_BITSET
-on
-.IR uaddr2 .
-.TP
-.B EINVAL
-.RB ( FUTEX_CMP_REQUEUE_PI )
-The kernel detected an inconsistency between the user-space state at
-.I uaddr
-and the kernel state;
-that is, the kernel detected a waiter which waits via
-.B FUTEX_WAIT
-or
-.B FUTEX_WAIT_BITSET
-on
-.IR uaddr .
-.TP
-.B EINVAL
-.RB ( FUTEX_CMP_REQUEUE_PI )
-The kernel detected an inconsistency between the user-space state at
-.I uaddr
-and the kernel state;
-that is, the kernel detected a waiter which waits on
-.I uaddr
-via
-.B FUTEX_LOCK_PI
-or
-.B FUTEX_LOCK_PI2
-(instead of
-.BR FUTEX_WAIT_REQUEUE_PI ).
-.TP
-.B EINVAL
-.RB ( FUTEX_CMP_REQUEUE_PI )
-.\" This deals with the case:
-.\" wait_requeue_pi(A, B);
-.\" requeue_pi(A, C);
-An attempt was made to requeue a waiter to a futex other than that
-specified by the matching
-.B FUTEX_WAIT_REQUEUE_PI
-call for that waiter.
-.TP
-.B EINVAL
-.RB ( FUTEX_CMP_REQUEUE_PI )
-The
-.I val
-argument is not 1.
-.TP
-.B EINVAL
-Invalid argument.
-.TP
-.B ENFILE
-.RB ( FUTEX_FD )
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOMEM
-.RB ( FUTEX_LOCK_PI ,
-.BR FUTEX_LOCK_PI2 ,
-.BR FUTEX_TRYLOCK_PI ,
-.BR FUTEX_CMP_REQUEUE_PI )
-The kernel could not allocate memory to hold state information.
-.TP
-.B ENOSYS
-Invalid operation specified in
-.IR futex_op .
-.TP
-.B ENOSYS
-The
-.B FUTEX_CLOCK_REALTIME
-option was specified in
-.IR futex_op ,
-but the accompanying operation was neither
-.BR FUTEX_WAIT ,
-.BR FUTEX_WAIT_BITSET ,
-.BR FUTEX_WAIT_REQUEUE_PI ,
-nor
-.BR FUTEX_LOCK_PI2 .
-.TP
-.B ENOSYS
-.RB ( FUTEX_LOCK_PI ,
-.BR FUTEX_LOCK_PI2 ,
-.BR FUTEX_TRYLOCK_PI ,
-.BR FUTEX_UNLOCK_PI ,
-.BR FUTEX_CMP_REQUEUE_PI ,
-.BR FUTEX_WAIT_REQUEUE_PI )
-A run-time check determined that the operation is not available.
-The PI-futex operations are not implemented on all architectures and
-are not supported on some CPU variants.
-.TP
-.B EPERM
-.RB ( FUTEX_LOCK_PI ,
-.BR FUTEX_LOCK_PI2 ,
-.BR FUTEX_TRYLOCK_PI ,
-.BR FUTEX_CMP_REQUEUE_PI )
-The caller is not allowed to attach itself to the futex at
-.I uaddr
-(for
-.BR FUTEX_CMP_REQUEUE_PI :
-the futex at
-.IR uaddr2 ).
-(This may be caused by a state corruption in user space.)
-.TP
-.B EPERM
-.RB ( FUTEX_UNLOCK_PI )
-The caller does not own the lock represented by the futex word.
-.TP
-.B ESRCH
-.RB ( FUTEX_LOCK_PI ,
-.BR FUTEX_LOCK_PI2 ,
-.BR FUTEX_TRYLOCK_PI ,
-.BR FUTEX_CMP_REQUEUE_PI )
-The thread ID in the futex word at
-.I uaddr
-does not exist.
-.TP
-.B ESRCH
-.RB ( FUTEX_CMP_REQUEUE_PI )
-The thread ID in the futex word at
-.I uaddr2
-does not exist.
-.TP
-.B ETIMEDOUT
-The operation in
-.I futex_op
-employed the timeout specified in
-.IR timeout ,
-and the timeout expired before the operation completed.
-.\"
-.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.0.
-.PP
-Initial futex support was merged in Linux 2.5.7 but with different
-semantics from what was described above.
-A four-argument system call with the semantics
-described in this page was introduced in Linux 2.5.40.
-A fifth argument was added in Linux 2.5.70,
-and a sixth argument was added in Linux 2.6.7.
-.SH EXAMPLES
-The program below demonstrates use of futexes in a program where a parent
-process and a child process use a pair of futexes located inside a
-shared anonymous mapping to synchronize access to a shared resource:
-the terminal.
-The two processes each write
-.I nloops
-(a command-line argument that defaults to 5 if omitted)
-messages to the terminal and employ a synchronization protocol
-that ensures that they alternate in writing messages.
-Upon running this program we see output such as the following:
-.PP
-.in +4n
-.EX
-$ \fB./futex_demo\fP
-Parent (18534) 0
-Child (18535) 0
-Parent (18534) 1
-Child (18535) 1
-Parent (18534) 2
-Child (18535) 2
-Parent (18534) 3
-Child (18535) 3
-Parent (18534) 4
-Child (18535) 4
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (futex.c)
-.EX
-/* futex_demo.c
-\&
- Usage: futex_demo [nloops]
- (Default: 5)
-\&
- Demonstrate the use of futexes in a program where parent and child
- use a pair of futexes located inside a shared anonymous mapping to
- synchronize access to a shared resource: the terminal. The two
- processes each write \[aq]num\-loops\[aq] messages to the terminal and employ
- a synchronization protocol that ensures that they alternate in
- writing messages.
-*/
-#define _GNU_SOURCE
-#include <err.h>
-#include <errno.h>
-#include <linux/futex.h>
-#include <stdatomic.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/mman.h>
-#include <sys/syscall.h>
-#include <sys/time.h>
-#include <sys/wait.h>
-#include <unistd.h>
-\&
-static uint32_t *futex1, *futex2, *iaddr;
-\&
-static int
-futex(uint32_t *uaddr, int futex_op, uint32_t val,
- const struct timespec *timeout, uint32_t *uaddr2, uint32_t val3)
-{
- return syscall(SYS_futex, uaddr, futex_op, val,
- timeout, uaddr2, val3);
-}
-\&
-/* Acquire the futex pointed to by \[aq]futexp\[aq]: wait for its value to
- become 1, and then set the value to 0. */
-\&
-static void
-fwait(uint32_t *futexp)
-{
- long s;
- const uint32_t one = 1;
-\&
- /* atomic_compare_exchange_strong(ptr, oldval, newval)
- atomically performs the equivalent of:
-\&
- if (*ptr == *oldval)
- *ptr = newval;
-\&
- It returns true if the test yielded true and *ptr was updated. */
-\&
- while (1) {
-\&
- /* Is the futex available? */
- if (atomic_compare_exchange_strong(futexp, &one, 0))
- break; /* Yes */
-\&
- /* Futex is not available; wait. */
-\&
- s = futex(futexp, FUTEX_WAIT, 0, NULL, NULL, 0);
- if (s == \-1 && errno != EAGAIN)
- err(EXIT_FAILURE, "futex\-FUTEX_WAIT");
- }
-}
-\&
-/* Release the futex pointed to by \[aq]futexp\[aq]: if the futex currently
- has the value 0, set its value to 1 and then wake any futex waiters,
- so that if the peer is blocked in fwait(), it can proceed. */
-\&
-static void
-fpost(uint32_t *futexp)
-{
- long s;
- const uint32_t zero = 0;
-\&
- /* atomic_compare_exchange_strong() was described
- in comments above. */
-\&
- if (atomic_compare_exchange_strong(futexp, &zero, 1)) {
- s = futex(futexp, FUTEX_WAKE, 1, NULL, NULL, 0);
- if (s == \-1)
- err(EXIT_FAILURE, "futex\-FUTEX_WAKE");
- }
-}
-\&
-int
-main(int argc, char *argv[])
-{
- pid_t childPid;
- unsigned int nloops;
-\&
- setbuf(stdout, NULL);
-\&
- nloops = (argc > 1) ? atoi(argv[1]) : 5;
-\&
- /* Create a shared anonymous mapping that will hold the futexes.
- Since the futexes are being shared between processes, we
- subsequently use the "shared" futex operations (i.e., not the
- ones suffixed "_PRIVATE"). */
-\&
- iaddr = mmap(NULL, sizeof(*iaddr) * 2, PROT_READ | PROT_WRITE,
- MAP_ANONYMOUS | MAP_SHARED, \-1, 0);
- if (iaddr == MAP_FAILED)
- err(EXIT_FAILURE, "mmap");
-\&
- futex1 = &iaddr[0];
- futex2 = &iaddr[1];
-\&
- *futex1 = 0; /* State: unavailable */
- *futex2 = 1; /* State: available */
-\&
- /* Create a child process that inherits the shared anonymous
- mapping. */
-\&
- childPid = fork();
- if (childPid == \-1)
- err(EXIT_FAILURE, "fork");
-\&
- if (childPid == 0) { /* Child */
- for (unsigned int j = 0; j < nloops; j++) {
- fwait(futex1);
- printf("Child (%jd) %u\en", (intmax_t) getpid(), j);
- fpost(futex2);
- }
-\&
- exit(EXIT_SUCCESS);
- }
-\&
- /* Parent falls through to here. */
-\&
- for (unsigned int j = 0; j < nloops; j++) {
- fwait(futex2);
- printf("Parent (%jd) %u\en", (intmax_t) getpid(), j);
- fpost(futex1);
- }
-\&
- wait(NULL);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.ad l
-.BR get_robust_list (2),
-.BR restart_syscall (2),
-.BR pthread_mutexattr_getprotocol (3),
-.BR futex (7),
-.BR sched (7)
-.PP
-The following kernel source files:
-.IP \[bu] 3
-.I Documentation/pi\-futex.txt
-.IP \[bu]
-.I Documentation/futex\-requeue\-pi.txt
-.IP \[bu]
-.I Documentation/locking/rt\-mutex.txt
-.IP \[bu]
-.I Documentation/locking/rt\-mutex\-design.txt
-.IP \[bu]
-.I Documentation/robust\-futex\-ABI.txt
-.PP
-Franke, H., Russell, R., and Kirwood, M., 2002.
-\fIFuss, Futexes and Furwocks: Fast Userlevel Locking in Linux\fP
-(from proceedings of the Ottawa Linux Symposium 2002),
-.br
-.UR http://kernel.org\:/doc\:/ols\:/2002\:/ols2002\-pages\-479\-495.pdf
-.UE
-.PP
-Hart, D., 2009. \fIA futex overview and update\fP,
-.UR http://lwn.net/Articles/360699/
-.UE
-.PP
-Hart, D.\& and Guniguntala, D., 2009.
-\fIRequeue-PI: Making glibc Condvars PI-Aware\fP
-(from proceedings of the 2009 Real-Time Linux Workshop),
-.UR http://lwn.net/images/conf/rtlws11/papers/proc/p10.pdf
-.UE
-.PP
-Drepper, U., 2011. \fIFutexes Are Tricky\fP,
-.UR http://www.akkadia.org/drepper/futex.pdf
-.UE
-.PP
-Futex example library, futex\-*.tar.bz2 at
-.br
-.UR https://mirrors.kernel.org\:/pub\:/linux\:/kernel\:/people\:/rusty/
-.UE
-.\"
-.\" FIXME(Torvald) We should probably refer to the glibc code here, in
-.\" particular the glibc-internal futex wrapper functions that are
-.\" WIP, and the generic pthread_mutex_t and perhaps condvar
-.\" implementations.
diff --git a/man2/futimesat.2 b/man2/futimesat.2
deleted file mode 100644
index 6b349ce8b..000000000
--- a/man2/futimesat.2
+++ /dev/null
@@ -1,128 +0,0 @@
-.\" This manpage is Copyright (C) 2006, Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH futimesat 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-futimesat \- change timestamps of a file relative to a \
-directory file descriptor
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <fcntl.h>" " /* Definition of " AT_* " constants */"
-.B #include <sys/time.h>
-.PP
-.BI "[[deprecated]] int futimesat(int " dirfd ", const char *" pathname ,
-.BI " const struct timeval " times [2]);
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR futimesat ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-This system call is obsolete.
-Use
-.BR utimensat (2)
-instead.
-.PP
-The
-.BR futimesat ()
-system call operates in exactly the same way as
-.BR utimes (2),
-except for the differences described in this manual page.
-.PP
-If the pathname given in
-.I pathname
-is relative, then it is interpreted relative to the directory
-referred to by the file descriptor
-.I dirfd
-(rather than relative to the current working directory of
-the calling process, as is done by
-.BR utimes (2)
-for a relative pathname).
-.PP
-If
-.I pathname
-is relative and
-.I dirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I pathname
-is interpreted relative to the current working
-directory of the calling process (like
-.BR utimes (2)).
-.PP
-If
-.I pathname
-is absolute, then
-.I dirfd
-is ignored.
-(See
-.BR openat (2)
-for an explanation of why the
-.I dirfd
-argument is useful.)
-.SH RETURN VALUE
-On success,
-.BR futimesat ()
-returns a 0.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-The same errors that occur for
-.BR utimes (2)
-can also occur for
-.BR futimesat ().
-The following additional errors can occur for
-.BR futimesat ():
-.TP
-.B EBADF
-.I pathname
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B ENOTDIR
-.I pathname
-is relative and
-.I dirfd
-is a file descriptor referring to a file other than a directory.
-.SH VERSIONS
-.SS glibc
-If
-.I pathname
-is NULL, then the glibc
-.BR futimesat ()
-wrapper function updates the times for the file referred to by
-.IR dirfd .
-.\" The Solaris futimesat() also has this strangeness.
-.SH STANDARDS
-None.
-.SH HISTORY
-Linux 2.6.16,
-glibc 2.4.
-.PP
-It was implemented from a specification that was proposed for POSIX.1,
-but that specification was replaced by the one for
-.BR utimensat (2).
-.PP
-A similar system call exists on Solaris.
-.SH NOTES
-.SH SEE ALSO
-.BR stat (2),
-.BR utimensat (2),
-.BR utimes (2),
-.BR futimes (3),
-.BR path_resolution (7)
diff --git a/man2/get_kernel_syms.2 b/man2/get_kernel_syms.2
deleted file mode 100644
index 04f9e85e8..000000000
--- a/man2/get_kernel_syms.2
+++ /dev/null
@@ -1,88 +0,0 @@
-.\" Copyright (C) 1996 Free Software Foundation, Inc.
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" 2006-02-09, some reformatting by Luc Van Oostenryck; some
-.\" reformatting and rewordings by mtk
-.\"
-.TH get_kernel_syms 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-get_kernel_syms \- retrieve exported kernel and module symbols
-.SH SYNOPSIS
-.nf
-.B #include <linux/module.h>
-.PP
-.BI "[[deprecated]] int get_kernel_syms(struct kernel_sym *" table );
-.fi
-.SH DESCRIPTION
-.BR Note :
-This system call is present only before Linux 2.6.
-.PP
-If
-.I table
-is NULL,
-.BR get_kernel_syms ()
-returns the number of symbols available for query.
-Otherwise, it fills in a table of structures:
-.PP
-.in +4n
-.EX
-struct kernel_sym {
- unsigned long value;
- char name[60];
-};
-.EE
-.in
-.PP
-The symbols are interspersed with magic symbols of the form
-.BI # module-name
-with the kernel having an empty name.
-The value associated with a symbol of this form is the address at
-which the module is loaded.
-.PP
-The symbols exported from each module follow their magic module tag
-and the modules are returned in the reverse of the
-order in which they were loaded.
-.SH RETURN VALUE
-On success, returns the number of symbols copied to
-.IR table .
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-There is only one possible error return:
-.TP
-.B ENOSYS
-.BR get_kernel_syms ()
-is not supported in this version of the kernel.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Removed in Linux 2.6.
-.\" Removed in Linux 2.5.48
-.PP
-This obsolete system call is not supported by glibc.
-No declaration is provided in glibc headers, but, through a quirk of history,
-glibc versions before glibc 2.23 did export an ABI for this system call.
-Therefore, in order to employ this system call,
-it was sufficient to manually declare the interface in your code;
-alternatively, you could invoke the system call using
-.BR syscall (2).
-.SH BUGS
-There is no way to indicate the size of the buffer allocated for
-.IR table .
-If symbols have been added to the kernel since the
-program queried for the symbol table size, memory will be corrupted.
-.PP
-The length of exported symbol names is limited to 59 characters.
-.PP
-Because of these limitations, this system call is deprecated in
-favor of
-.BR query_module (2)
-(which is itself nowadays deprecated
-in favor of other interfaces described on its manual page).
-.SH SEE ALSO
-.BR create_module (2),
-.BR delete_module (2),
-.BR init_module (2),
-.BR query_module (2)
diff --git a/man2/get_mempolicy.2 b/man2/get_mempolicy.2
deleted file mode 100644
index d1c7c667e..000000000
--- a/man2/get_mempolicy.2
+++ /dev/null
@@ -1,252 +0,0 @@
-.\" Copyright 2003,2004 Andi Kleen, SuSE Labs.
-.\" and Copyright 2007 Lee Schermerhorn, Hewlett Packard
-.\"
-.\" %%%LICENSE_START(VERBATIM_PROF)
-.\" Permission is granted to make and distribute verbatim copies of this
-.\" manual provided the copyright notice and this permission notice are
-.\" preserved on all copies.
-.\"
-.\" Permission is granted to copy and distribute modified versions of this
-.\" manual under the conditions for verbatim copying, provided that the
-.\" entire resulting derived work is distributed under the terms of a
-.\" permission notice identical to this one.
-.\"
-.\" Since the Linux kernel and libraries are constantly changing, this
-.\" manual page may be incorrect or out-of-date. The author(s) assume no
-.\" responsibility for errors or omissions, or for damages resulting from
-.\" the use of the information contained herein.
-.\"
-.\" Formatted or processed versions of this manual, if unaccompanied by
-.\" the source, must acknowledge the copyright and authors of this work.
-.\" %%%LICENSE_END
-.\"
-.\" 2006-02-03, mtk, substantial wording changes and other improvements
-.\" 2007-08-27, Lee Schermerhorn <Lee.Schermerhorn@hp.com>
-.\" more precise specification of behavior.
-.\"
-.TH get_mempolicy 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-get_mempolicy \- retrieve NUMA memory policy for a thread
-.SH LIBRARY
-NUMA (Non-Uniform Memory Access) policy library
-.RI ( libnuma ", " \-lnuma )
-.SH SYNOPSIS
-.B "#include <numaif.h>"
-.nf
-.PP
-.BI "long get_mempolicy(int *" mode ,
-.BI " unsigned long " nodemask [(. maxnode " + ULONG_WIDTH - 1)"
-.B " / ULONG_WIDTH],"
-.BI " unsigned long " maxnode ", void *" addr ,
-.BI " unsigned long " flags );
-.fi
-.SH DESCRIPTION
-.BR get_mempolicy ()
-retrieves the NUMA policy of the calling thread or of a memory address,
-depending on the setting of
-.IR flags .
-.PP
-A NUMA machine has different
-memory controllers with different distances to specific CPUs.
-The memory policy defines from which node memory is allocated for
-the thread.
-.PP
-If
-.I flags
-is specified as 0,
-then information about the calling thread's default policy
-(as set by
-.BR set_mempolicy (2))
-is returned, in the buffers pointed to by
-.I mode
-and
-.IR nodemask .
-The value returned in these arguments
-may be used to restore the thread's policy to its state at
-the time of the call to
-.BR get_mempolicy ()
-using
-.BR set_mempolicy (2).
-When
-.I flags
-is 0,
-.I addr
-must be specified as NULL.
-.PP
-If
-.I flags
-specifies
-.B MPOL_F_MEMS_ALLOWED
-(available since Linux 2.6.24), the
-.I mode
-argument is ignored and the set of nodes (memories) that the
-thread is allowed to specify in subsequent calls to
-.BR mbind (2)
-or
-.BR set_mempolicy (2)
-(in the absence of any
-.IR "mode flags" )
-is returned in
-.IR nodemask .
-It is not permitted to combine
-.B MPOL_F_MEMS_ALLOWED
-with either
-.B MPOL_F_ADDR
-or
-.BR MPOL_F_NODE .
-.PP
-If
-.I flags
-specifies
-.BR MPOL_F_ADDR ,
-then information is returned about the policy governing the memory
-address given in
-.IR addr .
-This policy may be different from the thread's default policy if
-.BR mbind (2)
-or one of the helper functions described in
-.BR numa (3)
-has been used to establish a policy for the memory range containing
-.IR addr .
-.PP
-If the
-.I mode
-argument is not NULL, then
-.BR get_mempolicy ()
-will store the policy mode and any optional
-.I "mode flags"
-of the requested NUMA policy in the location pointed to by this argument.
-If
-.I nodemask
-is not NULL, then the nodemask associated with the policy will be stored
-in the location pointed to by this argument.
-.I maxnode
-specifies the number of node IDs
-that can be stored into
-.IR nodemask \[em]that
-is, the maximum node ID plus one.
-The value specified by
-.I maxnode
-is always rounded to a multiple of
-.IR "sizeof(unsigned\ long)*8" .
-.PP
-If
-.I flags
-specifies both
-.B MPOL_F_NODE
-and
-.BR MPOL_F_ADDR ,
-.BR get_mempolicy ()
-will return the node ID of the node on which the address
-.I addr
-is allocated into the location pointed to by
-.IR mode .
-If no page has yet been allocated for the specified address,
-.BR get_mempolicy ()
-will allocate a page as if the thread had performed a read
-(load) access to that address, and return the ID of the node
-where that page was allocated.
-.PP
-If
-.I flags
-specifies
-.BR MPOL_F_NODE ,
-but not
-.BR MPOL_F_ADDR ,
-and the thread's current policy is
-.BR MPOL_INTERLEAVE ,
-then
-.BR get_mempolicy ()
-will return in the location pointed to by a non-NULL
-.I mode
-argument,
-the node ID of the next node that will be used for
-interleaving of internal kernel pages allocated on behalf of the thread.
-.\" Note: code returns next interleave node via 'mode' argument -Lee Schermerhorn
-These allocations include pages for memory-mapped files in
-process memory ranges mapped using the
-.BR mmap (2)
-call with the
-.B MAP_PRIVATE
-flag for read accesses, and in memory ranges mapped with the
-.B MAP_SHARED
-flag for all accesses.
-.PP
-Other flag values are reserved.
-.PP
-For an overview of the possible policies see
-.BR set_mempolicy (2).
-.SH RETURN VALUE
-On success,
-.BR get_mempolicy ()
-returns 0;
-on error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-Part of all of the memory range specified by
-.I nodemask
-and
-.I maxnode
-points outside your accessible address space.
-.TP
-.B EINVAL
-The value specified by
-.I maxnode
-is less than the number of node IDs supported by the system.
-Or
-.I flags
-specified values other than
-.B MPOL_F_NODE
-or
-.BR MPOL_F_ADDR ;
-or
-.I flags
-specified
-.B MPOL_F_ADDR
-and
-.I addr
-is NULL,
-or
-.I flags
-did not specify
-.B MPOL_F_ADDR
-and
-.I addr
-is not NULL.
-Or,
-.I flags
-specified
-.B MPOL_F_NODE
-but not
-.B MPOL_F_ADDR
-and the current thread policy is not
-.BR MPOL_INTERLEAVE .
-Or,
-.I flags
-specified
-.B MPOL_F_MEMS_ALLOWED
-with either
-.B MPOL_F_ADDR
-or
-.BR MPOL_F_NODE .
-(And there are other
-.B EINVAL
-cases.)
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.7.
-.SH NOTES
-For information on library support, see
-.BR numa (7).
-.SH SEE ALSO
-.BR getcpu (2),
-.BR mbind (2),
-.BR mmap (2),
-.BR set_mempolicy (2),
-.BR numa (3),
-.BR numa (7),
-.BR numactl (8)
diff --git a/man2/get_robust_list.2 b/man2/get_robust_list.2
deleted file mode 100644
index ab8c0021a..000000000
--- a/man2/get_robust_list.2
+++ /dev/null
@@ -1,156 +0,0 @@
-.\" Copyright (C) 2006 Red Hat, Inc. All Rights Reserved.
-.\" Written by Ivana Varekova <varekova@redhat.com>
-.\" and Copyright (c) 2017, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" FIXME Something could be added to this page (or exit(2))
-.\" about exit_robust_list processing
-.\"
-.TH get_robust_list 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-get_robust_list, set_robust_list \- get/set list of robust futexes
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/futex.h>" \
-" /* Definition of " "struct robust_list_head" " */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "long syscall(SYS_get_robust_list, int " pid ,
-.BI " struct robust_list_head **" head_ptr ", size_t *" len_ptr );
-.B long syscall(SYS_set_robust_list,
-.BI " struct robust_list_head *" head ", size_t " len );
-.fi
-.PP
-.IR Note :
-glibc provides no wrappers for these system calls,
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-These system calls deal with per-thread robust futex lists.
-These lists are managed in user space:
-the kernel knows only about the location of the head of the list.
-A thread can inform the kernel of the location of its robust futex list using
-.BR set_robust_list ().
-The address of a thread's robust futex list can be obtained using
-.BR get_robust_list ().
-.PP
-The purpose of the robust futex list is to ensure that if a thread
-accidentally fails to unlock a futex before terminating or calling
-.BR execve (2),
-another thread that is waiting on that futex is notified that
-the former owner of the futex has died.
-This notification consists of two pieces: the
-.B FUTEX_OWNER_DIED
-bit is set in the futex word, and the kernel performs a
-.BR futex (2)
-.B FUTEX_WAKE
-operation on one of the threads waiting on the futex.
-.PP
-The
-.BR get_robust_list ()
-system call returns the head of the robust futex list of the thread
-whose thread ID is specified in
-.IR pid .
-If
-.I pid
-is 0,
-the head of the list for the calling thread is returned.
-The list head is stored in the location pointed to by
-.IR head_ptr .
-The size of the object pointed to by
-.I **head_ptr
-is stored in
-.IR len_ptr .
-.PP
-Permission to employ
-.BR get_robust_list ()
-is governed by a ptrace access mode
-.B PTRACE_MODE_READ_REALCREDS
-check; see
-.BR ptrace (2).
-.PP
-The
-.BR set_robust_list ()
-system call requests the kernel to record the head of the list of
-robust futexes owned by the calling thread.
-The
-.I head
-argument is the list head to record.
-The
-.I len
-argument should be
-.IR sizeof(*head) .
-.SH RETURN VALUE
-The
-.BR set_robust_list ()
-and
-.BR get_robust_list ()
-system calls return zero when the operation is successful,
-an error code otherwise.
-.SH ERRORS
-The
-.BR set_robust_list ()
-system call can fail with the following error:
-.TP
-.B EINVAL
-.I len
-does not equal
-.IR "sizeof(struct\ robust_list_head)" .
-.PP
-The
-.BR get_robust_list ()
-system call can fail with the following errors:
-.TP
-.B EFAULT
-The head of the robust futex list can't be stored at the location
-.IR head .
-.TP
-.B EPERM
-The calling process does not have permission to see the robust futex list of
-the thread with the thread ID
-.IR pid ,
-and does not have the
-.B CAP_SYS_PTRACE
-capability.
-.TP
-.B ESRCH
-No thread with the thread ID
-.I pid
-could be found.
-.SH VERSIONS
-These system calls were added in Linux 2.6.17.
-.SH NOTES
-These system calls are not needed by normal applications.
-.PP
-A thread can have only one robust futex list;
-therefore applications that wish
-to use this functionality should use the robust mutexes provided by glibc.
-.PP
-In the initial implementation,
-a thread waiting on a futex was notified that the owner had died
-only if the owner terminated.
-Starting with Linux 2.6.28,
-.\" commit 8141c7f3e7aee618312fa1c15109e1219de784a7
-notification was extended to include the case where the owner performs an
-.BR execve (2).
-.PP
-The thread IDs mentioned in the main text are
-.I kernel
-thread IDs of the kind returned by
-.BR clone (2)
-and
-.BR gettid (2).
-.SH SEE ALSO
-.BR futex (2),
-.BR pthread_mutexattr_setrobust (3)
-.PP
-.I Documentation/robust\-futexes.txt
-and
-.I Documentation/robust\-futex\-ABI.txt
-in the Linux kernel source tree
-.\" http://lwn.net/Articles/172149/
diff --git a/man2/get_thread_area.2 b/man2/get_thread_area.2
deleted file mode 100644
index a03fe54fb..000000000
--- a/man2/get_thread_area.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/set_thread_area.2
diff --git a/man2/getcpu.2 b/man2/getcpu.2
deleted file mode 100644
index 629f6f15c..000000000
--- a/man2/getcpu.2
+++ /dev/null
@@ -1,152 +0,0 @@
-.\" This man page is Copyright (C) 2006 Andi Kleen <ak@muc.de>.
-.\"
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" 2008, mtk, various edits
-.\"
-.TH getcpu 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getcpu \- determine CPU and NUMA node on which the calling thread is running
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <sched.h>
-.PP
-.BI "int getcpu(unsigned int *_Nullable " cpu ", \
-unsigned int *_Nullable " node );
-.fi
-.SH DESCRIPTION
-The
-.BR getcpu ()
-system call identifies the processor and node on which the calling
-thread or process is currently running and writes them into the
-integers pointed to by the
-.I cpu
-and
-.I node
-arguments.
-The processor is a unique small integer identifying a CPU.
-The node is a unique small identifier identifying a NUMA node.
-When either
-.I cpu
-or
-.I node
-is NULL nothing is written to the respective pointer.
-.PP
-The information placed in
-.I cpu
-is guaranteed to be current only at the time of the call:
-unless the CPU affinity has been fixed using
-.BR sched_setaffinity (2),
-the kernel might change the CPU at any time.
-(Normally this does not happen
-because the scheduler tries to minimize movements between CPUs to
-keep caches hot, but it is possible.)
-The caller must allow for the possibility that the information returned in
-.I cpu
-and
-.I node
-is no longer current by the time the call returns.
-.SH RETURN VALUE
-On success, 0 is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-Arguments point outside the calling process's address space.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.19 (x86-64 and i386),
-glibc 2.29.
-.\"
-.SS C library/kernel differences
-The kernel system call has a third argument:
-.PP
-.in +4n
-.nf
-.BI "int getcpu(unsigned int *" cpu ", unsigned int *" node ,
-.BI " struct getcpu_cache *" tcache );
-.fi
-.in
-.PP
-The
-.I tcache
-argument is unused since Linux 2.6.24,
-and (when invoking the system call directly)
-should be specified as NULL,
-unless portability to Linux 2.6.23 or earlier is required.
-.PP
-.\" commit 4307d1e5ada595c87f9a4d16db16ba5edb70dcb1
-.\" Author: Ingo Molnar <mingo@elte.hu>
-.\" Date: Wed Nov 7 18:37:48 2007 +0100
-.\" x86: ignore the sys_getcpu() tcache parameter
-In Linux 2.6.23 and earlier, if the
-.I tcache
-argument was non-NULL,
-then it specified a pointer to a caller-allocated buffer in thread-local
-storage that was used to provide a caching mechanism for
-.BR getcpu ().
-Use of the cache could speed
-.BR getcpu ()
-calls, at the cost that there was a very small chance that
-the returned information would be out of date.
-The caching mechanism was considered to cause problems when
-migrating threads between CPUs, and so the argument is now ignored.
-.\"
-.\" ===== Before Linux 2.6.24: =====
-.\" .I tcache
-.\" is a pointer to a
-.\" .IR "struct getcpu_cache"
-.\" that is used as a cache by
-.\" .BR getcpu ().
-.\" The caller should put the cache into a thread-local variable
-.\" if the process is multithreaded,
-.\" because the cache cannot be shared between different threads.
-.\" .I tcache
-.\" can be NULL.
-.\" If it is not NULL
-.\" .BR getcpu ()
-.\" will use it to speed up operation.
-.\" The information inside the cache is private to the system call
-.\" and should not be accessed by the user program.
-.\" The information placed in the cache can change between Linux releases.
-.\"
-.\" When no cache is specified
-.\" .BR getcpu ()
-.\" will be slower,
-.\" but always retrieve the current CPU and node information.
-.\" With a cache
-.\" .BR getcpu ()
-.\" is faster.
-.\" However, the cached information is updated only once per jiffy (see
-.\" .BR time (7)).
-.\" This means that the information could theoretically be out of date,
-.\" although in practice the scheduler's attempt to maintain
-.\" soft CPU affinity means that the information is unlikely to change
-.\" over the course of the caching interval.
-.SH NOTES
-Linux makes a best effort to make this call as fast as possible.
-(On some architectures, this is done via an implementation in the
-.BR vdso (7).)
-The intention of
-.BR getcpu ()
-is to allow programs to make optimizations with per-CPU data
-or for NUMA optimization.
-.SH SEE ALSO
-.BR mbind (2),
-.BR sched_setaffinity (2),
-.BR set_mempolicy (2),
-.BR sched_getcpu (3),
-.BR cpuset (7),
-.BR vdso (7)
diff --git a/man2/getcwd.2 b/man2/getcwd.2
deleted file mode 100644
index f080be0fc..000000000
--- a/man2/getcwd.2
+++ /dev/null
@@ -1,2 +0,0 @@
-.so man3/getcwd.3
-.\" Because getcwd(3) is layered on a system call of the same name
diff --git a/man2/getdents.2 b/man2/getdents.2
deleted file mode 100644
index 5d373d916..000000000
--- a/man2/getdents.2
+++ /dev/null
@@ -1,319 +0,0 @@
-.\" Copyright (C) 1995 Andries Brouwer (aeb@cwi.nl)
-.\" and Copyright 2008, 2015 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Written 11 June 1995 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 22 July 1995 by Michael Chastain <mec@duracef.shout.net>:
-.\" Derived from 'readdir.2'.
-.\" Modified Tue Oct 22 08:11:14 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\"
-.TH getdents 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getdents, getdents64 \- get directory entries
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "long syscall(SYS_getdents, unsigned int " fd \
-", struct linux_dirent *" dirp ,
-.BI " unsigned int " count );
-.PP
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <dirent.h>
-.PP
-.BI "ssize_t getdents64(int " fd ", void " dirp [. count "], size_t " count );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR getdents (),
-necessitating the use of
-.BR syscall (2).
-.PP
-.IR Note :
-There is no definition of
-.I struct linux_dirent
-in glibc; see NOTES.
-.SH DESCRIPTION
-These are not the interfaces you are interested in.
-Look at
-.BR readdir (3)
-for the POSIX-conforming C library interface.
-This page documents the bare kernel system call interfaces.
-.SS getdents()
-The system call
-.BR getdents ()
-reads several
-.I linux_dirent
-structures from the directory
-referred to by the open file descriptor
-.I fd
-into the buffer pointed to by
-.IR dirp .
-The argument
-.I count
-specifies the size of that buffer.
-.PP
-The
-.I linux_dirent
-structure is declared as follows:
-.PP
-.in +4n
-.EX
-struct linux_dirent {
- unsigned long d_ino; /* Inode number */
- unsigned long d_off; /* Offset to next \fIlinux_dirent\fP */
- unsigned short d_reclen; /* Length of this \fIlinux_dirent\fP */
- char d_name[]; /* Filename (null\-terminated) */
- /* length is actually (d_reclen \- 2 \-
- offsetof(struct linux_dirent, d_name)) */
- /*
- char pad; // Zero padding byte
- char d_type; // File type (only since Linux
- // 2.6.4); offset is (d_reclen \- 1)
- */
-}
-.EE
-.in
-.PP
-.I d_ino
-is an inode number.
-.I d_off
-is the distance from the start of the directory to the start of the next
-.IR linux_dirent .
-.I d_reclen
-is the size of this entire
-.IR linux_dirent .
-.I d_name
-is a null-terminated filename.
-.PP
-.I d_type
-is a byte at the end of the structure that indicates the file type.
-It contains one of the following values (defined in
-.IR <dirent.h> ):
-.TP 12
-.B DT_BLK
-This is a block device.
-.TP
-.B DT_CHR
-This is a character device.
-.TP
-.B DT_DIR
-This is a directory.
-.TP
-.B DT_FIFO
-This is a named pipe (FIFO).
-.TP
-.B DT_LNK
-This is a symbolic link.
-.TP
-.B DT_REG
-This is a regular file.
-.TP
-.B DT_SOCK
-This is a UNIX domain socket.
-.TP
-.B DT_UNKNOWN
-The file type is unknown.
-.PP
-The
-.I d_type
-field is implemented since Linux 2.6.4.
-It occupies a space that was previously a zero-filled padding byte in the
-.I linux_dirent
-structure.
-Thus, on kernels up to and including Linux 2.6.3,
-attempting to access this field always provides the value 0
-.RB ( DT_UNKNOWN ).
-.PP
-Currently,
-.\" kernel 2.6.27
-.\" The same sentence is in readdir.2
-only some filesystems (among them: Btrfs, ext2, ext3, and ext4)
-have full support for returning the file type in
-.IR d_type .
-All applications must properly handle a return of
-.BR DT_UNKNOWN .
-.SS getdents64()
-The original Linux
-.BR getdents ()
-system call did not handle large filesystems and large file offsets.
-Consequently, Linux 2.4 added
-.BR getdents64 (),
-with wider types for the
-.I d_ino
-and
-.I d_off
-fields.
-In addition,
-.BR getdents64 ()
-supports an explicit
-.I d_type
-field.
-.PP
-The
-.BR getdents64 ()
-system call is like
-.BR getdents (),
-except that its second argument is a pointer to a buffer containing
-structures of the following type:
-.PP
-.in +4n
-.EX
-struct linux_dirent64 {
- ino64_t d_ino; /* 64\-bit inode number */
- off64_t d_off; /* 64\-bit offset to next structure */
- unsigned short d_reclen; /* Size of this dirent */
- unsigned char d_type; /* File type */
- char d_name[]; /* Filename (null\-terminated) */
-};
-.EE
-.in
-.SH RETURN VALUE
-On success, the number of bytes read is returned.
-On end of directory, 0 is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-Invalid file descriptor
-.IR fd .
-.TP
-.B EFAULT
-Argument points outside the calling process's address space.
-.TP
-.B EINVAL
-Result buffer is too small.
-.TP
-.B ENOENT
-No such directory.
-.TP
-.B ENOTDIR
-File descriptor does not refer to a directory.
-.SH STANDARDS
-None.
-.SH HISTORY
-SVr4.
-.\" SVr4 documents additional ENOLINK, EIO error conditions.
-.TP
-.BR getdents64 ()
-glibc 2.30.
-.SH NOTES
-glibc does not provide a wrapper for
-.BR getdents ();
-call
-.BR getdents ()
-using
-.BR syscall (2).
-In that case you will need to define the
-.I linux_dirent
-or
-.I linux_dirent64
-structure yourself.
-.PP
-Probably, you want to use
-.BR readdir (3)
-instead of these system calls.
-.PP
-These calls supersede
-.BR readdir (2).
-.SH EXAMPLES
-.\" FIXME The example program needs to be revised, since it uses the older
-.\" getdents() system call and the structure with smaller field widths.
-The program below demonstrates the use of
-.BR getdents ().
-The following output shows an example of what we see when running this
-program on an ext2 directory:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out /testfs/"
--\-\-\-\-\-\-\-\-\-\-\-\-\-\- nread=120 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
-inode# file type d_reclen d_off d_name
- 2 directory 16 12 .
- 2 directory 16 24 ..
- 11 directory 24 44 lost+found
- 12 regular 16 56 a
- 228929 directory 16 68 sub
- 16353 directory 16 80 sub2
- 130817 directory 16 4096 sub3
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (getdents.c)
-.EX
-#define _GNU_SOURCE
-#include <dirent.h> /* Defines DT_* constants */
-#include <err.h>
-#include <fcntl.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/syscall.h>
-#include <unistd.h>
-\&
-struct linux_dirent {
- unsigned long d_ino;
- off_t d_off;
- unsigned short d_reclen;
- char d_name[];
-};
-\&
-#define BUF_SIZE 1024
-\&
-int
-main(int argc, char *argv[])
-{
- int fd;
- char d_type;
- char buf[BUF_SIZE];
- long nread;
- struct linux_dirent *d;
-\&
- fd = open(argc > 1 ? argv[1] : ".", O_RDONLY | O_DIRECTORY);
- if (fd == \-1)
- err(EXIT_FAILURE, "open");
-\&
- for (;;) {
- nread = syscall(SYS_getdents, fd, buf, BUF_SIZE);
- if (nread == \-1)
- err(EXIT_FAILURE, "getdents");
-\&
- if (nread == 0)
- break;
-\&
- printf("\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- nread=%ld \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\en", nread);
- printf("inode# file type d_reclen d_off d_name\en");
- for (size_t bpos = 0; bpos < nread;) {
- d = (struct linux_dirent *) (buf + bpos);
- printf("%8lu ", d\->d_ino);
- d_type = *(buf + bpos + d\->d_reclen \- 1);
- printf("%\-10s ", (d_type == DT_REG) ? "regular" :
- (d_type == DT_DIR) ? "directory" :
- (d_type == DT_FIFO) ? "FIFO" :
- (d_type == DT_SOCK) ? "socket" :
- (d_type == DT_LNK) ? "symlink" :
- (d_type == DT_BLK) ? "block dev" :
- (d_type == DT_CHR) ? "char dev" : "???");
- printf("%4d %10jd %s\en", d\->d_reclen,
- (intmax_t) d\->d_off, d\->d_name);
- bpos += d\->d_reclen;
- }
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR readdir (2),
-.BR readdir (3),
-.BR inode (7)
diff --git a/man2/getdents64.2 b/man2/getdents64.2
deleted file mode 100644
index f3674bac6..000000000
--- a/man2/getdents64.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getdents.2
diff --git a/man2/getdomainname.2 b/man2/getdomainname.2
deleted file mode 100644
index b5dd066e2..000000000
--- a/man2/getdomainname.2
+++ /dev/null
@@ -1,122 +0,0 @@
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 1997-08-25 by Nicolás Lichtmaier <nick@debian.org>
-.\" Modified 2004-06-17 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2008-11-27 by mtk
-.\"
-.TH getdomainname 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getdomainname, setdomainname \- get/set NIS domain name
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int getdomainname(char *" name ", size_t " len );
-.BI "int setdomainname(const char *" name ", size_t " len );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getdomainname (),
-.BR setdomainname ():
-.nf
- Since glibc 2.21:
-.\" commit 266865c0e7b79d4196e2cc393693463f03c90bd8
- _DEFAULT_SOURCE
- In glibc 2.19 and 2.20:
- _DEFAULT_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
- Up to and including glibc 2.19:
- _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
-.fi
-.SH DESCRIPTION
-These functions are used to access or to change the NIS domain name of the
-host system.
-More precisely, they operate on the NIS domain name associated with the calling
-process's UTS namespace.
-.PP
-.BR setdomainname ()
-sets the domain name to the value given in the character array
-.IR name .
-The
-.I len
-argument specifies the number of bytes in
-.IR name .
-(Thus,
-.I name
-does not require a terminating null byte.)
-.PP
-.BR getdomainname ()
-returns the null-terminated domain name in the character array
-.IR name ,
-which has a length of
-.I len
-bytes.
-If the null-terminated domain name requires more than \fIlen\fP bytes,
-.BR getdomainname ()
-returns the first \fIlen\fP bytes (glibc) or gives an error (libc).
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.BR setdomainname ()
-can fail with the following errors:
-.TP
-.B EFAULT
-.I name
-pointed outside of user address space.
-.TP
-.B EINVAL
-.I len
-was negative or too large.
-.TP
-.B EPERM
-The caller did not have the
-.B CAP_SYS_ADMIN
-capability in the user namespace associated with its UTS namespace (see
-.BR namespaces (7)).
-.PP
-.BR getdomainname ()
-can fail with the following errors:
-.TP
-.B EINVAL
-For
-.BR getdomainname ()
-under libc:
-.I name
-is NULL or
-.I name
-is longer than
-.I len
-bytes.
-.SH VERSIONS
-On most Linux architectures (including x86),
-there is no
-.BR getdomainname ()
-system call; instead, glibc implements
-.BR getdomainname ()
-as a library function that returns a copy of the
-.I domainname
-field returned from a call to
-.BR uname (2).
-.SH STANDARDS
-None.
-.\" But they appear on most systems...
-.SH HISTORY
-Since Linux 1.0, the limit on the length of a domain name,
-including the terminating null byte, is 64 bytes.
-In older kernels, it was 8 bytes.
-.SH SEE ALSO
-.BR gethostname (2),
-.BR sethostname (2),
-.BR uname (2),
-.BR uts_namespaces (7)
diff --git a/man2/getegid.2 b/man2/getegid.2
deleted file mode 100644
index d9b10e73f..000000000
--- a/man2/getegid.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getgid.2
diff --git a/man2/getegid32.2 b/man2/getegid32.2
deleted file mode 100644
index d7da70863..000000000
--- a/man2/getegid32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getegid.2
diff --git a/man2/geteuid.2 b/man2/geteuid.2
deleted file mode 100644
index 165cfe1d0..000000000
--- a/man2/geteuid.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getuid.2
diff --git a/man2/geteuid32.2 b/man2/geteuid32.2
deleted file mode 100644
index 8e60b7798..000000000
--- a/man2/geteuid32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/geteuid.2
diff --git a/man2/getgid.2 b/man2/getgid.2
deleted file mode 100644
index 6c771bff0..000000000
--- a/man2/getgid.2
+++ /dev/null
@@ -1,70 +0,0 @@
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH getgid 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getgid, getegid \- get group identity
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.B gid_t getgid(void);
-.B gid_t getegid(void);
-.fi
-.SH DESCRIPTION
-.BR getgid ()
-returns the real group ID of the calling process.
-.PP
-.BR getegid ()
-returns the effective group ID of the calling process.
-.SH ERRORS
-These functions are always successful
-and never modify
-.\" https://www.austingroupbugs.net/view.php?id=511
-.\" 0000511: getuid and friends should not modify errno
-.IR errno .
-.SH VERSIONS
-On Alpha, instead of a pair of
-.BR getgid ()
-and
-.BR getegid ()
-system calls, a single
-.BR getxgid ()
-system call is provided, which returns a pair of real and effective GIDs.
-The glibc
-.BR getgid ()
-and
-.BR getegid ()
-wrapper functions transparently deal with this.
-See
-.BR syscall (2)
-for details regarding register mapping.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, 4.3BSD.
-.PP
-The original Linux
-.BR getgid ()
-and
-.BR getegid ()
-system calls supported only 16-bit group IDs.
-Subsequently, Linux 2.4 added
-.BR getgid32 ()
-and
-.BR getegid32 (),
-supporting 32-bit IDs.
-The glibc
-.BR getgid ()
-and
-.BR getegid ()
-wrapper functions transparently deal with the variations across kernel versions.
-.SH SEE ALSO
-.BR getresgid (2),
-.BR setgid (2),
-.BR setregid (2),
-.BR credentials (7)
diff --git a/man2/getgid32.2 b/man2/getgid32.2
deleted file mode 100644
index d9b10e73f..000000000
--- a/man2/getgid32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getgid.2
diff --git a/man2/getgroups.2 b/man2/getgroups.2
deleted file mode 100644
index 83a1508ef..000000000
--- a/man2/getgroups.2
+++ /dev/null
@@ -1,219 +0,0 @@
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
-.\" and Copyright (C) 2008, 2010, 2015, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Thu Oct 31 12:04:29 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.\" 2008-05-03, mtk, expanded and rewrote parts of DESCRIPTION and RETURN
-.\" VALUE, made style of page more consistent with man-pages style.
-.\"
-.TH getgroups 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getgroups, setgroups \- get/set list of supplementary group IDs
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int getgroups(int " size ", gid_t " list []);
-.PP
-.B #include <grp.h>
-.PP
-.BI "int setgroups(size_t " size ", const gid_t *_Nullable " list );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR setgroups ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-.BR getgroups ()
-returns the supplementary group IDs of the calling process in
-.IR list .
-The argument
-.I size
-should be set to the maximum number of items that can be stored in the
-buffer pointed to by
-.IR list .
-If the calling process is a member of more than
-.I size
-supplementary groups, then an error results.
-.PP
-It is unspecified whether the effective group ID of the calling process
-is included in the returned list.
-(Thus, an application should also call
-.BR getegid (2)
-and add or remove the resulting value.)
-.PP
-If
-.I size
-is zero,
-.I list
-is not modified, but the total number of supplementary group IDs for the
-process is returned.
-This allows the caller to determine the size of a dynamically allocated
-.I list
-to be used in a further call to
-.BR getgroups ().
-.PP
-.BR setgroups ()
-sets the supplementary group IDs for the calling process.
-Appropriate privileges are required (see the description of the
-.B EPERM
-error, below).
-The
-.I size
-argument specifies the number of supplementary group IDs
-in the buffer pointed to by
-.IR list .
-A process can drop all of its supplementary groups with the call:
-.PP
-.in +4n
-.EX
-setgroups(0, NULL);
-.EE
-.in
-.SH RETURN VALUE
-On success,
-.BR getgroups ()
-returns the number of supplementary group IDs.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.PP
-On success,
-.BR setgroups ()
-returns 0.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-.I list
-has an invalid address.
-.PP
-.BR getgroups ()
-can additionally fail with the following error:
-.TP
-.B EINVAL
-.I size
-is less than the number of supplementary group IDs, but is not zero.
-.PP
-.BR setgroups ()
-can additionally fail with the following errors:
-.TP
-.B EINVAL
-.I size
-is greater than
-.B NGROUPS_MAX
-(32 before Linux 2.6.4; 65536 since Linux 2.6.4).
-.TP
-.B ENOMEM
-Out of memory.
-.TP
-.B EPERM
-The calling process has insufficient privilege
-(the caller does not have the
-.B CAP_SETGID
-capability in the user namespace in which it resides).
-.TP
-.BR EPERM " (since Linux 3.19)"
-The use of
-.BR setgroups ()
-is denied in this user namespace.
-See the description of
-.IR /proc/ pid /setgroups
-in
-.BR user_namespaces (7).
-.SH VERSIONS
-.SS C library/kernel differences
-At the kernel level, user IDs and group IDs are a per-thread attribute.
-However, POSIX requires that all threads in a process
-share the same credentials.
-The NPTL threading implementation handles the POSIX requirements by
-providing wrapper functions for
-the various system calls that change process UIDs and GIDs.
-These wrapper functions (including the one for
-.BR setgroups ())
-employ a signal-based technique to ensure
-that when one thread changes credentials,
-all of the other threads in the process also change their credentials.
-For details, see
-.BR nptl (7).
-.SH STANDARDS
-.TP
-.BR getgroups ()
-POSIX.1-2008.
-.TP
-.BR setgroups ()
-None.
-.SH HISTORY
-.TP
-.BR getgroups ()
-SVr4, 4.3BSD, POSIX.1-2001.
-.TP
-.BR setgroups ()
-SVr4, 4.3BSD.
-Since
-.BR setgroups ()
-requires privilege, it is not covered by POSIX.1.
-.PP
-The original Linux
-.BR getgroups ()
-system call supported only 16-bit group IDs.
-Subsequently, Linux 2.4 added
-.BR getgroups32 (),
-supporting 32-bit IDs.
-The glibc
-.BR getgroups ()
-wrapper function transparently deals with the variation across kernel versions.
-.SH NOTES
-A process can have up to
-.B NGROUPS_MAX
-supplementary group IDs
-in addition to the effective group ID.
-The constant
-.B NGROUPS_MAX
-is defined in
-.IR <limits.h> .
-The set of supplementary group IDs
-is inherited from the parent process, and preserved across an
-.BR execve (2).
-.PP
-The maximum number of supplementary group IDs can be found at run time using
-.BR sysconf (3):
-.PP
-.in +4n
-.EX
-long ngroups_max;
-ngroups_max = sysconf(_SC_NGROUPS_MAX);
-.EE
-.in
-.PP
-The maximum return value of
-.BR getgroups ()
-cannot be larger than one more than this value.
-Since Linux 2.6.4, the maximum number of supplementary group IDs is also
-exposed via the Linux-specific read-only file,
-.IR /proc/sys/kernel/ngroups_max .
-.SH SEE ALSO
-.BR getgid (2),
-.BR setgid (2),
-.BR getgrouplist (3),
-.BR group_member (3),
-.BR initgroups (3),
-.BR capabilities (7),
-.BR credentials (7)
diff --git a/man2/getgroups32.2 b/man2/getgroups32.2
deleted file mode 100644
index 0ae4cc0b1..000000000
--- a/man2/getgroups32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getgroups.2
diff --git a/man2/gethostname.2 b/man2/gethostname.2
deleted file mode 100644
index 8c32a7f68..000000000
--- a/man2/gethostname.2
+++ /dev/null
@@ -1,176 +0,0 @@
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 1995-07-22 by Michael Chastain <mec@duracef.shout.net>:
-.\" 'gethostname' is real system call on Linux/Alpha.
-.\" Modified 1997-01-31 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2000-06-04, 2001-12-15 by aeb
-.\" Modified 2004-06-17 by mtk
-.\" Modified 2008-11-27 by mtk
-.\"
-.TH gethostname 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-gethostname, sethostname \- get/set hostname
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int gethostname(char *" name ", size_t " len );
-.BI "int sethostname(const char *" name ", size_t " len );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR gethostname ():
-.nf
- _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200112L
- || /* glibc 2.19 and earlier */ _BSD_SOURCE
-.\" The above is something of a simplification
-.\" also before glibc 2.3 there was a bit churn
-.fi
-.PP
-.BR sethostname ():
-.nf
- Since glibc 2.21:
-.\" commit 266865c0e7b79d4196e2cc393693463f03c90bd8
- _DEFAULT_SOURCE
- In glibc 2.19 and 2.20:
- _DEFAULT_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
- Up to and including glibc 2.19:
- _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
-.fi
-.SH DESCRIPTION
-These system calls are used to access or to change the system hostname.
-More precisely, they operate on the hostname associated with the calling
-process's UTS namespace.
-.PP
-.BR sethostname ()
-sets the hostname to the value given in the character array
-.IR name .
-The
-.I len
-argument specifies the number of bytes in
-.IR name .
-(Thus,
-.I name
-does not require a terminating null byte.)
-.PP
-.BR gethostname ()
-returns the null-terminated hostname in the character array
-.IR name ,
-which has a length of
-.I len
-bytes.
-If the null-terminated hostname is too large to fit,
-then the name is truncated, and no error is returned (but see NOTES below).
-POSIX.1 says that if such truncation occurs,
-then it is unspecified whether the returned buffer
-includes a terminating null byte.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-.I name
-is an invalid address.
-.TP
-.B EINVAL
-.I len
-is negative
-.\" Can't occur for gethostbyname() wrapper, since 'len' has an
-.\" unsigned type; can occur for the underlying system call.
-or, for
-.BR sethostname (),
-.I len
-is larger than the maximum allowed size.
-.TP
-.B ENAMETOOLONG
-.RB "(glibc " gethostname ())
-.I len
-is smaller than the actual size.
-(Before glibc 2.1, glibc uses
-.B EINVAL
-for this case.)
-.TP
-.B EPERM
-For
-.BR sethostname (),
-the caller did not have the
-.B CAP_SYS_ADMIN
-capability in the user namespace associated with its UTS namespace (see
-.BR namespaces (7)).
-.SH VERSIONS
-SUSv2 guarantees that "Host names are limited to 255 bytes".
-POSIX.1 guarantees that "Host names (not including
-the terminating null byte) are limited to
-.B HOST_NAME_MAX
-bytes".
-On Linux,
-.B HOST_NAME_MAX
-is defined with the value 64, which has been the limit since Linux 1.0
-(earlier kernels imposed a limit of 8 bytes).
-.SS C library/kernel differences
-The GNU C library does not employ the
-.BR gethostname ()
-system call; instead, it implements
-.BR gethostname ()
-as a library function that calls
-.BR uname (2)
-and copies up to
-.I len
-bytes from the returned
-.I nodename
-field into
-.IR name .
-Having performed the copy, the function then checks if the length of the
-.I nodename
-was greater than or equal to
-.IR len ,
-and if it is, then the function returns \-1 with
-.I errno
-set to
-.BR ENAMETOOLONG ;
-in this case, a terminating null byte is not included in the returned
-.IR name .
-.SH STANDARDS
-.TP
-.BR gethostname ()
-POSIX.1-2008.
-.TP
-.BR sethostname ()
-None.
-.SH HISTORY
-SVr4, 4.4BSD (these interfaces first appeared in 4.2BSD).
-POSIX.1-2001 and POSIX.1-2008 specify
-.BR gethostname ()
-but not
-.BR sethostname ().
-.PP
-Versions of glibc before glibc 2.2
-.\" At least glibc 2.0 and glibc 2.1, older versions not checked
-handle the case where the length of the
-.I nodename
-was greater than or equal to
-.I len
-differently: nothing is copied into
-.I name
-and the function returns \-1 with
-.I errno
-set to
-.BR ENAMETOOLONG .
-.SH SEE ALSO
-.BR hostname (1),
-.BR getdomainname (2),
-.BR setdomainname (2),
-.BR uname (2),
-.BR uts_namespaces (7)
diff --git a/man2/getitimer.2 b/man2/getitimer.2
deleted file mode 100644
index 7740eab9f..000000000
--- a/man2/getitimer.2
+++ /dev/null
@@ -1,278 +0,0 @@
-.\" Copyright 7/93 by Darren Senn <sinster@scintilla.santa-clara.ca.us>
-.\" and Copyright (C) 2016, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Based on a similar page Copyright 1992 by Rick Faith
-.\"
-.\" %%%LICENSE_START(FREELY_REDISTRIBUTABLE)
-.\" May be freely distributed and modified
-.\" %%%LICENSE_END
-.\"
-.\" Modified Tue Oct 22 00:22:35 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" 2005-04-06 mtk, Matthias Lang <matthias@corelatus.se>
-.\" Noted MAX_SEC_IN_JIFFIES ceiling
-.\"
-.TH getitimer 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getitimer, setitimer \- get or set value of an interval timer
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/time.h>
-.PP
-.BI "int getitimer(int " which ", struct itimerval *" curr_value );
-.BI "int setitimer(int " which ", const struct itimerval *restrict " new_value ,
-.BI " struct itimerval *_Nullable restrict " old_value );
-.fi
-.SH DESCRIPTION
-These system calls provide access to interval timers, that is,
-timers that initially expire at some point in the future,
-and (optionally) at regular intervals after that.
-When a timer expires, a signal is generated for the calling process,
-and the timer is reset to the specified interval
-(if the interval is nonzero).
-.PP
-Three types of timers\[em]specified via the
-.I which
-argument\[em]are provided,
-each of which counts against a different clock and
-generates a different signal on timer expiration:
-.TP
-.B ITIMER_REAL
-This timer counts down in real (i.e., wall clock) time.
-At each expiration, a
-.B SIGALRM
-signal is generated.
-.TP
-.B ITIMER_VIRTUAL
-This timer counts down against the user-mode CPU time consumed by the process.
-(The measurement includes CPU time consumed by all threads in the process.)
-At each expiration, a
-.B SIGVTALRM
-signal is generated.
-.TP
-.B ITIMER_PROF
-This timer counts down against the total (i.e., both user and system)
-CPU time consumed by the process.
-(The measurement includes CPU time consumed by all threads in the process.)
-At each expiration, a
-.B SIGPROF
-signal is generated.
-.IP
-In conjunction with
-.BR ITIMER_VIRTUAL ,
-this timer can be used to profile user and system CPU time
-consumed by the process.
-.PP
-A process has only one of each of the three types of timers.
-.PP
-Timer values are defined by the following structures:
-.PP
-.in +4n
-.EX
-struct itimerval {
- struct timeval it_interval; /* Interval for periodic timer */
- struct timeval it_value; /* Time until next expiration */
-};
-\&
-struct timeval {
- time_t tv_sec; /* seconds */
- suseconds_t tv_usec; /* microseconds */
-};
-.EE
-.in
-.\"
-.SS getitimer()
-The function
-.BR getitimer ()
-places the current value of the timer specified by
-.I which
-in the buffer pointed to by
-.IR curr_value .
-.PP
-The
-.I it_value
-substructure is populated with the amount of time remaining until
-the next expiration of the specified timer.
-This value changes as the timer counts down, and will be reset to
-.I it_interval
-when the timer expires.
-If both fields of
-.I it_value
-are zero, then this timer is currently disarmed (inactive).
-.PP
-The
-.I it_interval
-substructure is populated with the timer interval.
-If both fields of
-.I it_interval
-are zero, then this is a single-shot timer (i.e., it expires just once).
-.SS setitimer()
-The function
-.BR setitimer ()
-arms or disarms the timer specified by
-.IR which ,
-by setting the timer to the value specified by
-.IR new_value .
-If
-.I old_value
-is non-NULL,
-the buffer it points to is used to return the previous value of the timer
-(i.e., the same information that is returned by
-.BR getitimer ()).
-.PP
-If either field in
-.I new_value.it_value
-is nonzero,
-then the timer is armed to initially expire at the specified time.
-If both fields in
-.I new_value.it_value
-are zero, then the timer is disarmed.
-.PP
-The
-.I new_value.it_interval
-field specifies the new interval for the timer;
-if both of its subfields are zero, the timer is single-shot.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-.IR new_value ,
-.IR old_value ,
-or
-.I curr_value
-is not valid a pointer.
-.TP
-.B EINVAL
-.I which
-is not one of
-.BR ITIMER_REAL ,
-.BR ITIMER_VIRTUAL ,
-or
-.BR ITIMER_PROF ;
-or (since Linux 2.6.22) one of the
-.I tv_usec
-fields in the structure pointed to by
-.I new_value
-contains a value outside the range [0, 999999].
-.SH VERSIONS
-The standards are silent on the meaning of the call:
-.PP
-.in +4n
-.EX
-setitimer(which, NULL, &old_value);
-.EE
-.in
-.PP
-Many systems (Solaris, the BSDs, and perhaps others)
-treat this as equivalent to:
-.PP
-.in +4n
-.EX
-getitimer(which, &old_value);
-.EE
-.in
-.PP
-In Linux, this is treated as being equivalent to a call in which the
-.I new_value
-fields are zero; that is, the timer is disabled.
-.IR "Don't use this Linux misfeature" :
-it is nonportable and unnecessary.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.4BSD (this call first appeared in 4.2BSD).
-POSIX.1-2008 marks
-.BR getitimer ()
-and
-.BR setitimer ()
-obsolete, recommending the use of the POSIX timers API
-.RB ( timer_gettime (2),
-.BR timer_settime (2),
-etc.) instead.
-.SH NOTES
-Timers will never expire before the requested time,
-but may expire some (short) time afterward, which depends
-on the system timer resolution and on the system load; see
-.BR time (7).
-(But see BUGS below.)
-If the timer expires while the process is active (always true for
-.BR ITIMER_VIRTUAL ),
-the signal will be delivered immediately when generated.
-.PP
-A child created via
-.BR fork (2)
-does not inherit its parent's interval timers.
-Interval timers are preserved across an
-.BR execve (2).
-.PP
-POSIX.1 leaves the
-interaction between
-.BR setitimer ()
-and the three interfaces
-.BR alarm (2),
-.BR sleep (3),
-and
-.BR usleep (3)
-unspecified.
-.SH BUGS
-The generation and delivery of a signal are distinct, and
-only one instance of each of the signals listed above may be pending
-for a process.
-Under very heavy loading, an
-.B ITIMER_REAL
-timer may expire before the signal from a previous expiration
-has been delivered.
-The second signal in such an event will be lost.
-.PP
-Before Linux 2.6.16, timer values are represented in jiffies.
-If a request is made set a timer with a value whose jiffies
-representation exceeds
-.B MAX_SEC_IN_JIFFIES
-(defined in
-.IR include/linux/jiffies.h ),
-then the timer is silently truncated to this ceiling value.
-On Linux/i386 (where, since Linux 2.6.13,
-the default jiffy is 0.004 seconds),
-this means that the ceiling value for a timer is
-approximately 99.42 days.
-Since Linux 2.6.16,
-the kernel uses a different internal representation for times,
-and this ceiling is removed.
-.PP
-On certain systems (including i386),
-Linux kernels before Linux 2.6.12 have a bug which will produce
-premature timer expirations of up to one jiffy under some circumstances.
-This bug is fixed in Linux 2.6.12.
-.\" 4 Jul 2005: It looks like this bug may remain in Linux 2.4.x.
-.\" http://lkml.org/lkml/2005/7/1/165
-.PP
-POSIX.1-2001 says that
-.BR setitimer ()
-should fail if a
-.I tv_usec
-value is specified that is outside of the range [0, 999999].
-However, up to and including Linux 2.6.21,
-Linux does not give an error, but instead silently
-adjusts the corresponding seconds value for the timer.
-From Linux 2.6.22 onward,
-this nonconformance has been repaired:
-an improper
-.I tv_usec
-value results in an
-.B EINVAL
-error.
-.\" Bugzilla report 25 Apr 2006:
-.\" http://bugzilla.kernel.org/show_bug.cgi?id=6443
-.\" "setitimer() should reject noncanonical arguments"
-.SH SEE ALSO
-.BR gettimeofday (2),
-.BR sigaction (2),
-.BR signal (2),
-.BR timer_create (2),
-.BR timerfd_create (2),
-.BR time (7)
diff --git a/man2/getmsg.2 b/man2/getmsg.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/getmsg.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/getpagesize.2 b/man2/getpagesize.2
deleted file mode 100644
index e1c4a5755..000000000
--- a/man2/getpagesize.2
+++ /dev/null
@@ -1,89 +0,0 @@
-.\" Copyright (C) 2001 Andries Brouwer <aeb@cwi.nl>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH getpagesize 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getpagesize \- get memory page size
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.B int getpagesize(void);
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getpagesize ():
-.nf
- Since glibc 2.20:
- _DEFAULT_SOURCE || ! (_POSIX_C_SOURCE >= 200112L)
- glibc 2.12 to glibc 2.19:
- _BSD_SOURCE || ! (_POSIX_C_SOURCE >= 200112L)
- Before glibc 2.12:
- _BSD_SOURCE || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
-.fi
-.SH DESCRIPTION
-The function
-.BR getpagesize ()
-returns the number of bytes in a memory page,
-where "page" is a fixed-length block,
-the unit for memory allocation and file mapping performed by
-.BR mmap (2).
-.SH STANDARDS
-None.
-.SH HISTORY
-This call first appeared in 4.2BSD.
-SVr4, 4.4BSD, SUSv2.
-In SUSv2 the
-.BR getpagesize ()
-call is labeled LEGACY, and in POSIX.1-2001
-it has been dropped;
-HP-UX does not have this call.
-.SH NOTES
-Portable applications should employ
-.I sysconf(_SC_PAGESIZE)
-instead of
-.BR getpagesize ():
-.PP
-.in +4n
-.EX
-#include <unistd.h>
-long sz = sysconf(_SC_PAGESIZE);
-.EE
-.in
-.PP
-(Most systems allow the synonym
-.B _SC_PAGE_SIZE
-for
-.BR _SC_PAGESIZE .)
-.PP
-Whether
-.BR getpagesize ()
-is present as a Linux system call depends on the architecture.
-If it is, it returns the kernel symbol
-.BR PAGE_SIZE ,
-whose value depends on the architecture and machine model.
-Generally, one uses binaries that are dependent on the architecture but not
-on the machine model, in order to have a single binary
-distribution per architecture.
-This means that a user program
-should not find
-.B PAGE_SIZE
-at compile time from a header file,
-but use an actual system call, at least for those architectures
-(like sun4) where this dependency exists.
-Here glibc 2.0 fails because its
-.BR getpagesize ()
-returns a statically derived value, and does not use a system call.
-Things are OK in glibc 2.1.
-.SH SEE ALSO
-.BR mmap (2),
-.BR sysconf (3)
diff --git a/man2/getpeername.2 b/man2/getpeername.2
deleted file mode 100644
index a33e6ebea..000000000
--- a/man2/getpeername.2
+++ /dev/null
@@ -1,116 +0,0 @@
-.\" Copyright (c) 1983, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)getpeername.2 6.5 (Berkeley) 3/10/91
-.\"
-.\" Modified Sat Jul 24 16:37:50 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Thu Jul 30 14:37:50 1993 by Martin Schulze <joey@debian.org>
-.\" Modified Sun Mar 28 21:26:46 1999 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 17 Jul 2002, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added 'socket' to NAME, so that "man -k socket" will show this page.
-.\"
-.TH getpeername 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getpeername \- get name of connected peer socket
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.PP
-.BI "int getpeername(int " sockfd ", struct sockaddr *restrict " addr ,
-.BI " socklen_t *restrict " addrlen );
-.fi
-.SH DESCRIPTION
-.BR getpeername ()
-returns the address of the peer connected to the socket
-.IR sockfd ,
-in the buffer pointed to by
-.IR addr .
-The
-.I addrlen
-argument should be initialized to indicate the amount of space pointed to
-by
-.IR addr .
-On return it contains the actual size of the name returned (in bytes).
-The name is truncated if the buffer provided is too small.
-.PP
-The returned address is truncated if the buffer provided is too small;
-in this case,
-.I addrlen
-will return a value greater than was supplied to the call.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-The argument
-.I sockfd
-is not a valid file descriptor.
-.TP
-.B EFAULT
-The
-.I addr
-argument points to memory not in a valid part of the
-process address space.
-.TP
-.B EINVAL
-.I addrlen
-is invalid (e.g., is negative).
-.TP
-.B ENOBUFS
-Insufficient resources were available in the system
-to perform the operation.
-.TP
-.B ENOTCONN
-The socket is not connected.
-.TP
-.B ENOTSOCK
-The file descriptor
-.I sockfd
-does not refer to a socket.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.4BSD
-(first appeared in 4.2BSD).
-.SH NOTES
-For stream sockets, once a
-.BR connect (2)
-has been performed, either socket can call
-.BR getpeername ()
-to obtain the address of the peer socket.
-On the other hand, datagram sockets are connectionless.
-Calling
-.BR connect (2)
-on a datagram socket merely sets the peer address for outgoing
-datagrams sent with
-.BR write (2)
-or
-.BR recv (2).
-The caller of
-.BR connect (2)
-can use
-.BR getpeername ()
-to obtain the peer address that it earlier set for the socket.
-However, the peer socket is unaware of this information, and calling
-.BR getpeername ()
-on the peer socket will return no useful information (unless a
-.BR connect (2)
-call was also executed on the peer).
-Note also that the receiver of a datagram can obtain
-the address of the sender when using
-.BR recvfrom (2).
-.SH SEE ALSO
-.BR accept (2),
-.BR bind (2),
-.BR getsockname (2),
-.BR ip (7),
-.BR socket (7),
-.BR unix (7)
diff --git a/man2/getpgid.2 b/man2/getpgid.2
deleted file mode 100644
index d6b107a1c..000000000
--- a/man2/getpgid.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/setpgid.2
diff --git a/man2/getpgrp.2 b/man2/getpgrp.2
deleted file mode 100644
index d6b107a1c..000000000
--- a/man2/getpgrp.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/setpgid.2
diff --git a/man2/getpid.2 b/man2/getpid.2
deleted file mode 100644
index 9084b261f..000000000
--- a/man2/getpid.2
+++ /dev/null
@@ -1,150 +0,0 @@
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH getpid 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getpid, getppid \- get process identification
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.B pid_t getpid(void);
-.B pid_t getppid(void);
-.fi
-.SH DESCRIPTION
-.BR getpid ()
-returns the process ID (PID) of the calling process.
-(This is often used by
-routines that generate unique temporary filenames.)
-.PP
-.BR getppid ()
-returns the process ID of the parent of the calling process.
-This will be either the ID of the process that created this process using
-.BR fork (),
-or, if that process has already terminated,
-the ID of the process to which this process has been reparented (either
-.BR init (1)
-or a "subreaper" process defined via the
-.BR prctl (2)
-.B PR_SET_CHILD_SUBREAPER
-operation).
-.SH ERRORS
-These functions are always successful.
-.SH VERSIONS
-On Alpha, instead of a pair of
-.BR getpid ()
-and
-.BR getppid ()
-system calls, a single
-.BR getxpid ()
-system call is provided, which returns a pair of PID and parent PID.
-The glibc
-.BR getpid ()
-and
-.BR getppid ()
-wrapper functions transparently deal with this.
-See
-.BR syscall (2)
-for details regarding register mapping.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, 4.3BSD, SVr4.
-.SS C library/kernel differences
-From glibc 2.3.4 up to and including glibc 2.24,
-the glibc wrapper function for
-.BR getpid ()
-cached PIDs,
-with the goal of avoiding additional system calls when a process calls
-.BR getpid ()
-repeatedly.
-Normally this caching was invisible,
-but its correct operation relied on support in the wrapper functions for
-.BR fork (2),
-.BR vfork (2),
-and
-.BR clone (2):
-if an application bypassed the glibc wrappers for these system calls by using
-.BR syscall (2),
-then a call to
-.BR getpid ()
-in the child would return the wrong value
-(to be precise: it would return the PID of the parent process).
-.\" The following program demonstrates this "feature":
-.\"
-.\" #define _GNU_SOURCE
-.\" #include <sys/syscall.h>
-.\" #include <sys/wait.h>
-.\" #include <stdint.h>
-.\" #include <stdio.h>
-.\" #include <stdlib.h>
-.\" #include <unistd.h>
-.\"
-.\" int
-.\" main(int argc, char *argv[])
-.\" {
-.\" /* The following statement fills the getpid() cache */
-.\"
-.\" printf("parent PID = %ld\n", (intmax_t) getpid());
-.\"
-.\" if (syscall(SYS_fork) == 0) {
-.\" if (getpid() != syscall(SYS_getpid))
-.\" printf("child getpid() mismatch: getpid()=%jd; "
-.\" "syscall(SYS_getpid)=%ld\n",
-.\" (intmax_t) getpid(), (long) syscall(SYS_getpid));
-.\" exit(EXIT_SUCCESS);
-.\" }
-.\" wait(NULL);
-.\"}
-In addition, there were cases where
-.BR getpid ()
-could return the wrong value even when invoking
-.BR clone (2)
-via the glibc wrapper function.
-(For a discussion of one such case, see BUGS in
-.BR clone (2).)
-Furthermore, the complexity of the caching code had been
-the source of a few bugs within glibc over the years.
-.PP
-Because of the aforementioned problems,
-since glibc 2.25, the PID cache is removed:
-.\" commit c579f48edba88380635ab98cb612030e3ed8691e
-.\" https://sourceware.org/glibc/wiki/Release/2.25#pid_cache_removal
-calls to
-.BR getpid ()
-always invoke the actual system call, rather than returning a cached value.
-.\" FIXME .
-.\" Review progress of https://bugzilla.redhat.com/show_bug.cgi?id=1469757
-.SH NOTES
-If the caller's parent is in a different PID namespace (see
-.BR pid_namespaces (7)),
-.BR getppid ()
-returns 0.
-.PP
-From a kernel perspective,
-the PID (which is shared by all of the threads in a multithreaded process)
-is sometimes also known as the thread group ID (TGID).
-This contrasts with the kernel thread ID (TID),
-which is unique for each thread.
-For further details, see
-.BR gettid (2)
-and the discussion of the
-.B CLONE_THREAD
-flag in
-.BR clone (2).
-.SH SEE ALSO
-.BR clone (2),
-.BR fork (2),
-.BR gettid (2),
-.BR kill (2),
-.BR exec (3),
-.BR mkstemp (3),
-.BR tempnam (3),
-.BR tmpfile (3),
-.BR tmpnam (3),
-.BR credentials (7),
-.BR pid_namespaces (7)
diff --git a/man2/getpmsg.2 b/man2/getpmsg.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/getpmsg.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/getppid.2 b/man2/getppid.2
deleted file mode 100644
index fca885ee4..000000000
--- a/man2/getppid.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getpid.2
diff --git a/man2/getpriority.2 b/man2/getpriority.2
deleted file mode 100644
index d27d7f955..000000000
--- a/man2/getpriority.2
+++ /dev/null
@@ -1,209 +0,0 @@
-.\" Copyright (c) 1980, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)getpriority.2 6.9 (Berkeley) 3/10/91
-.\"
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1996-07-01 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 1996-11-06 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2001-10-21 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Corrected statement under EPERM to clarify privileges required
-.\" Modified 2002-06-21 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Clarified meaning of 0 value for 'who' argument
-.\" Modified 2004-05-27 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH getpriority 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getpriority, setpriority \- get/set program scheduling priority
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/resource.h>
-.PP
-.BI "int getpriority(int " which ", id_t " who );
-.BI "int setpriority(int " which ", id_t " who ", int " prio );
-.fi
-.SH DESCRIPTION
-The scheduling priority of the process, process group, or user, as
-indicated by
-.I which
-and
-.I who
-is obtained with the
-.BR getpriority ()
-call and set with the
-.BR setpriority ()
-call.
-The process attribute dealt with by these system calls is
-the same attribute (also known as the "nice" value) that is dealt with by
-.BR nice (2).
-.PP
-The value
-.I which
-is one of
-.BR PRIO_PROCESS ,
-.BR PRIO_PGRP ,
-or
-.BR PRIO_USER ,
-and
-.I who
-is interpreted relative to
-.I which
-(a process identifier for
-.BR PRIO_PROCESS ,
-process group
-identifier for
-.BR PRIO_PGRP ,
-and a user ID for
-.BR PRIO_USER ).
-A zero value for
-.I who
-denotes (respectively) the calling process, the process group of the
-calling process, or the real user ID of the calling process.
-.PP
-The
-.I prio
-argument is a value in the range \-20 to 19 (but see NOTES below),
-with \-20 being the highest priority and 19 being the lowest priority.
-Attempts to set a priority outside this range
-are silently clamped to the range.
-The default priority is 0;
-lower values give a process a higher scheduling priority.
-.PP
-The
-.BR getpriority ()
-call returns the highest priority (lowest numerical value)
-enjoyed by any of the specified processes.
-The
-.BR setpriority ()
-call sets the priorities of all of the specified processes
-to the specified value.
-.PP
-Traditionally, only a privileged process could lower the nice value
-(i.e., set a higher priority).
-However, since Linux 2.6.12, an unprivileged process can decrease
-the nice value of a target process that has a suitable
-.B RLIMIT_NICE
-soft limit; see
-.BR getrlimit (2)
-for details.
-.SH RETURN VALUE
-On success,
-.BR getpriority ()
-returns the calling thread's nice value, which may be a negative number.
-On error, it returns \-1 and sets
-.I errno
-to indicate the error.
-.PP
-Since a successful call to
-.BR getpriority ()
-can legitimately return the value \-1, it is necessary
-to clear
-.I errno
-prior to the
-call, then check
-.I errno
-afterward to determine
-if \-1 is an error or a legitimate value.
-.PP
-.BR setpriority ()
-returns 0 on success.
-On failure, it returns \-1 and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-The caller attempted to set a lower nice value
-(i.e., a higher process priority), but did not
-have the required privilege (on Linux: did not have the
-.B CAP_SYS_NICE
-capability).
-.TP
-.B EINVAL
-.I which
-was not one of
-.BR PRIO_PROCESS ,
-.BR PRIO_PGRP ,
-or
-.BR PRIO_USER .
-.TP
-.B EPERM
-A process was located, but its effective user ID did not match
-either the effective or the real user ID of the caller,
-and was not privileged (on Linux: did not have the
-.B CAP_SYS_NICE
-capability).
-But see NOTES below.
-.TP
-.B ESRCH
-No process was located using the
-.I which
-and
-.I who
-values specified.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001,
-SVr4, 4.4BSD (these interfaces first appeared in 4.2BSD).
-.SH NOTES
-For further details on the nice value, see
-.BR sched (7).
-.PP
-.IR Note :
-the addition of the "autogroup" feature in Linux 2.6.38 means that
-the nice value no longer has its traditional effect in many circumstances.
-For details, see
-.BR sched (7).
-.PP
-A child created by
-.BR fork (2)
-inherits its parent's nice value.
-The nice value is preserved across
-.BR execve (2).
-.PP
-The details on the condition for
-.B EPERM
-depend on the system.
-The above description is what POSIX.1-2001 says, and seems to be followed on
-all System\ V-like systems.
-Linux kernels before Linux 2.6.12 required the real or
-effective user ID of the caller to match
-the real user of the process \fIwho\fP (instead of its effective user ID).
-Linux 2.6.12 and later require
-the effective user ID of the caller to match
-the real or effective user ID of the process \fIwho\fP.
-All BSD-like systems (SunOS 4.1.3, Ultrix 4.2,
-4.3BSD, FreeBSD 4.3, OpenBSD-2.5, ...) behave in the same
-manner as Linux 2.6.12 and later.
-.\"
-.SS C library/kernel differences
-The getpriority system call returns nice values translated to the range 40..1,
-since a negative return value would be interpreted as an error.
-The glibc wrapper function for
-.BR getpriority ()
-translates the value back according to the formula
-.I unice\~=\~20\~\-\~knice
-(thus, the 40..1 range returned by the kernel
-corresponds to the range \-20..19 as seen by user space).
-.SH BUGS
-According to POSIX, the nice value is a per-process setting.
-However, under the current Linux/NPTL implementation of POSIX threads,
-the nice value is a per-thread attribute:
-different threads in the same process can have different nice values.
-Portable applications should avoid relying on the Linux behavior,
-which may be made standards conformant in the future.
-.SH SEE ALSO
-.BR nice (1),
-.BR renice (1),
-.BR fork (2),
-.BR capabilities (7),
-.BR sched (7)
-.PP
-.I Documentation/scheduler/sched\-nice\-design.txt
-in the Linux kernel source tree (since Linux 2.6.23)
diff --git a/man2/getrandom.2 b/man2/getrandom.2
deleted file mode 100644
index dbd23a0a6..000000000
--- a/man2/getrandom.2
+++ /dev/null
@@ -1,295 +0,0 @@
-.\" Copyright (C) 2014, Theodore Ts'o <tytso@mit.edu>
-.\" Copyright (C) 2014,2015 Heinrich Schuchardt <xypron.glpk@gmx.de>
-.\" Copyright (C) 2015, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH getrandom 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getrandom \- obtain a series of random bytes
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/random.h>
-.PP
-.BI "ssize_t getrandom(void " buf [. buflen "], size_t " buflen ", \
-unsigned int " flags );
-.fi
-.SH DESCRIPTION
-The
-.BR getrandom ()
-system call fills the buffer pointed to by
-.I buf
-with up to
-.I buflen
-random bytes.
-These bytes can be used to seed user-space random number generators
-or for cryptographic purposes.
-.PP
-By default,
-.BR getrandom ()
-draws entropy from the
-.I urandom
-source (i.e., the same source as the
-.I /dev/urandom
-device).
-This behavior can be changed via the
-.I flags
-argument.
-.PP
-If the
-.I urandom
-source has been initialized,
-reads of up to 256 bytes will always return as many bytes as
-requested and will not be interrupted by signals.
-No such guarantees apply for larger buffer sizes.
-For example, if the call is interrupted by a signal handler,
-it may return a partially filled buffer, or fail with the error
-.BR EINTR .
-.PP
-If the
-.I urandom
-source has not yet been initialized, then
-.BR getrandom ()
-will block, unless
-.B GRND_NONBLOCK
-is specified in
-.IR flags .
-.PP
-The
-.I flags
-argument is a bit mask that can contain zero or more of the following values
-ORed together:
-.TP
-.B GRND_RANDOM
-If this bit is set, then random bytes are drawn from the
-.I random
-source
-(i.e., the same source as the
-.I /dev/random
-device)
-instead of the
-.I urandom
-source.
-The
-.I random
-source is limited based on the entropy that can be obtained from environmental
-noise.
-If the number of available bytes in the
-.I random
-source is less than requested in
-.IR buflen ,
-the call returns just the available random bytes.
-If no random bytes are available, the behavior depends on the presence of
-.B GRND_NONBLOCK
-in the
-.I flags
-argument.
-.TP
-.B GRND_NONBLOCK
-By default, when reading from the
-.I random
-source,
-.BR getrandom ()
-blocks if no random bytes are available,
-and when reading from the
-.I urandom
-source, it blocks if the entropy pool has not yet been initialized.
-If the
-.B GRND_NONBLOCK
-flag is set, then
-.BR getrandom ()
-does not block in these cases, but instead immediately returns \-1 with
-.I errno
-set to
-.BR EAGAIN .
-.SH RETURN VALUE
-On success,
-.BR getrandom ()
-returns the number of bytes that were copied to the buffer
-.IR buf .
-This may be less than the number of bytes requested via
-.I buflen
-if either
-.B GRND_RANDOM
-was specified in
-.I flags
-and insufficient entropy was present in the
-.I random
-source or the system call was interrupted by a signal.
-.PP
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-The requested entropy was not available, and
-.BR getrandom ()
-would have blocked if the
-.B GRND_NONBLOCK
-flag was not set.
-.TP
-.B EFAULT
-The address referred to by
-.I buf
-is outside the accessible address space.
-.TP
-.B EINTR
-The call was interrupted by a signal
-handler; see the description of how interrupted
-.BR read (2)
-calls on "slow" devices are handled with and without the
-.B SA_RESTART
-flag in the
-.BR signal (7)
-man page.
-.TP
-.B EINVAL
-An invalid flag was specified in
-.IR flags .
-.TP
-.B ENOSYS
-The glibc wrapper function for
-.BR getrandom ()
-determined that the underlying kernel does not implement this system call.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 3.17,
-glibc 2.25.
-.SH NOTES
-For an overview and comparison of the various interfaces that
-can be used to obtain randomness, see
-.BR random (7).
-.PP
-Unlike
-.I /dev/random
-and
-.IR /dev/urandom ,
-.BR getrandom ()
-does not involve the use of pathnames or file descriptors.
-Thus,
-.BR getrandom ()
-can be useful in cases where
-.BR chroot (2)
-makes
-.I /dev
-pathnames invisible,
-and where an application (e.g., a daemon during start-up)
-closes a file descriptor for one of these files
-that was opened by a library.
-.\"
-.SS Maximum number of bytes returned
-As of Linux 3.19 the following limits apply:
-.IP \[bu] 3
-When reading from the
-.I urandom
-source, a maximum of 32Mi-1 bytes is returned by a single call to
-.BR getrandom ()
-on systems where
-.I int
-has a size of 32 bits.
-.IP \[bu]
-When reading from the
-.I random
-source, a maximum of 512 bytes is returned.
-.SS Interruption by a signal handler
-When reading from the
-.I urandom
-source
-.RB ( GRND_RANDOM
-is not set),
-.BR getrandom ()
-will block until the entropy pool has been initialized
-(unless the
-.B GRND_NONBLOCK
-flag was specified).
-If a request is made to read a large number of bytes (more than 256),
-.BR getrandom ()
-will block until those bytes have been generated and transferred
-from kernel memory to
-.IR buf .
-When reading from the
-.I random
-source
-.RB ( GRND_RANDOM
-is set),
-.BR getrandom ()
-will block until some random bytes become available
-(unless the
-.B GRND_NONBLOCK
-flag was specified).
-.PP
-The behavior when a call to
-.BR getrandom ()
-that is blocked while reading from the
-.I urandom
-source is interrupted by a signal handler
-depends on the initialization state of the entropy buffer
-and on the request size,
-.IR buflen .
-If the entropy is not yet initialized, then the call fails with the
-.B EINTR
-error.
-If the entropy pool has been initialized
-and the request size is large
-.RI ( buflen "\ >\ 256),"
-the call either succeeds, returning a partially filled buffer,
-or fails with the error
-.BR EINTR .
-If the entropy pool has been initialized and the request size is small
-.RI ( buflen "\ <=\ 256),"
-then
-.BR getrandom ()
-will not fail with
-.BR EINTR .
-Instead, it will return all of the bytes that have been requested.
-.PP
-When reading from the
-.I random
-source, blocking requests of any size can be interrupted by a signal handler
-(the call fails with the error
-.BR EINTR ).
-.PP
-Using
-.BR getrandom ()
-to read small buffers (<=\ 256 bytes) from the
-.I urandom
-source is the preferred mode of usage.
-.PP
-The special treatment of small values of
-.I buflen
-was designed for compatibility with
-OpenBSD's
-.BR getentropy (3),
-which is nowadays supported by glibc.
-.PP
-The user of
-.BR getrandom ()
-.I must
-always check the return value,
-to determine whether either an error occurred
-or fewer bytes than requested were returned.
-In the case where
-.B GRND_RANDOM
-is not specified and
-.I buflen
-is less than or equal to 256,
-a return of fewer bytes than requested should never happen,
-but the careful programmer will check for this anyway!
-.SH BUGS
-As of Linux 3.19, the following bug exists:
-.\" FIXME patch proposed https://lkml.org/lkml/2014/11/29/16
-.IP \[bu] 3
-Depending on CPU load,
-.BR getrandom ()
-does not react to interrupts before reading all bytes requested.
-.SH SEE ALSO
-.BR getentropy (3),
-.BR random (4),
-.BR urandom (4),
-.BR random (7),
-.BR signal (7)
diff --git a/man2/getresgid.2 b/man2/getresgid.2
deleted file mode 100644
index ac4fb7cb8..000000000
--- a/man2/getresgid.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getresuid.2
diff --git a/man2/getresgid32.2 b/man2/getresgid32.2
deleted file mode 100644
index 2b3240fa4..000000000
--- a/man2/getresgid32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getresgid.2
diff --git a/man2/getresuid.2 b/man2/getresuid.2
deleted file mode 100644
index b107238c7..000000000
--- a/man2/getresuid.2
+++ /dev/null
@@ -1,70 +0,0 @@
-.\" Copyright (C) 1997 Andries Brouwer (aeb@cwi.nl)
-.\" and Copyright (c) 2007, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified, 2003-05-26, Michael Kerrisk, <mtk.manpages@gmail.com>
-.\"
-.TH getresuid 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getresuid, getresgid \- get real, effective, and saved user/group IDs
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <unistd.h>
-.PP
-.BI "int getresuid(uid_t *" ruid ", uid_t *" euid ", uid_t *" suid );
-.BI "int getresgid(gid_t *" rgid ", gid_t *" egid ", gid_t *" sgid );
-.fi
-.SH DESCRIPTION
-.BR getresuid ()
-returns the real UID, the effective UID, and the saved set-user-ID
-of the calling process, in the arguments
-.IR ruid ,
-.IR euid ,
-and
-.IR suid ,
-respectively.
-.BR getresgid ()
-performs the analogous task for the process's group IDs.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-One of the arguments specified an address outside the calling program's
-address space.
-.SH STANDARDS
-None.
-These calls also appear on HP-UX and some of the BSDs.
-.SH HISTORY
-Linux 2.1.44,
-glibc 2.3.2.
-.PP
-The original Linux
-.BR getresuid ()
-and
-.BR getresgid ()
-system calls supported only 16-bit user and group IDs.
-Subsequently, Linux 2.4 added
-.BR getresuid32 ()
-and
-.BR getresgid32 (),
-supporting 32-bit IDs.
-The glibc
-.BR getresuid ()
-and
-.BR getresgid ()
-wrapper functions transparently deal with the variations across kernel versions.
-.SH SEE ALSO
-.BR getuid (2),
-.BR setresuid (2),
-.BR setreuid (2),
-.BR setuid (2),
-.BR credentials (7)
diff --git a/man2/getresuid32.2 b/man2/getresuid32.2
deleted file mode 100644
index ac4fb7cb8..000000000
--- a/man2/getresuid32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getresuid.2
diff --git a/man2/getrlimit.2 b/man2/getrlimit.2
deleted file mode 100644
index 21f919fdc..000000000
--- a/man2/getrlimit.2
+++ /dev/null
@@ -1,856 +0,0 @@
-'\" t
-.\" Copyright (c) 1992 Drew Eckhardt, March 28, 1992
-.\" and Copyright (c) 2002, 2004, 2005, 2008, 2010 Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified 1993-07-23 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1996-01-13 by Arnt Gulbrandsen <agulbra@troll.no>
-.\" Modified 1996-01-22 by aeb, following a remark by
-.\" Tigran Aivazian <tigran@sco.com>
-.\" Modified 1996-04-14 by aeb, following a remark by
-.\" Robert Bihlmeyer <robbe@orcus.ping.at>
-.\" Modified 1996-10-22 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2001-05-04 by aeb, following a remark by
-.\" Håvard Lygre <hklygre@online.no>
-.\" Modified 2001-04-17 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2002-06-13 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added note on nonstandard behavior when SIGCHLD is ignored.
-.\" Modified 2002-07-09 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Enhanced descriptions of 'resource' values
-.\" Modified 2003-11-28 by aeb, added RLIMIT_CORE
-.\" Modified 2004-03-26 by aeb, added RLIMIT_AS
-.\" Modified 2004-06-16 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on CAP_SYS_RESOURCE
-.\"
-.\" 2004-11-16 -- mtk: the getrlimit.2 page, which formally included
-.\" coverage of getrusage(2), has been split, so that the latter
-.\" is now covered in its own getrusage.2.
-.\"
-.\" Modified 2004-11-16, mtk: A few other minor changes
-.\" Modified 2004-11-23, mtk
-.\" Added notes on RLIMIT_MEMLOCK, RLIMIT_NPROC, and RLIMIT_RSS
-.\" to "CONFORMING TO"
-.\" Modified 2004-11-25, mtk
-.\" Rewrote discussion on RLIMIT_MEMLOCK to incorporate kernel
-.\" 2.6.9 changes.
-.\" Added note on RLIMIT_CPU error in older kernels
-.\" 2004-11-03, mtk, Added RLIMIT_SIGPENDING
-.\" 2005-07-13, mtk, documented RLIMIT_MSGQUEUE limit.
-.\" 2005-07-28, mtk, Added descriptions of RLIMIT_NICE and RLIMIT_RTPRIO
-.\" 2008-05-07, mtk / Peter Zijlstra, Added description of RLIMIT_RTTIME
-.\" 2010-11-06, mtk: Added documentation of prlimit()
-.\"
-.TH getrlimit 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getrlimit, setrlimit, prlimit \- get/set resource limits
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/resource.h>
-.PP
-.BI "int getrlimit(int " resource ", struct rlimit *" rlim );
-.BI "int setrlimit(int " resource ", const struct rlimit *" rlim );
-.PP
-.BI "int prlimit(pid_t " pid ", int " resource ,
-.BI " const struct rlimit *_Nullable " new_limit ,
-.BI " struct rlimit *_Nullable " old_limit );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR prlimit ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR getrlimit ()
-and
-.BR setrlimit ()
-system calls get and set resource limits.
-Each resource has an associated soft and hard limit, as defined by the
-.I rlimit
-structure:
-.PP
-.in +4n
-.EX
-struct rlimit {
- rlim_t rlim_cur; /* Soft limit */
- rlim_t rlim_max; /* Hard limit (ceiling for rlim_cur) */
-};
-.EE
-.in
-.PP
-The soft limit is the value that the kernel enforces for the
-corresponding resource.
-The hard limit acts as a ceiling for the soft limit:
-an unprivileged process may set only its soft limit to a value in the
-range from 0 up to the hard limit, and (irreversibly) lower its hard limit.
-A privileged process (under Linux: one with the
-.B CAP_SYS_RESOURCE
-capability in the initial user namespace)
-may make arbitrary changes to either limit value.
-.PP
-The value
-.B RLIM_INFINITY
-denotes no limit on a resource (both in the structure returned by
-.BR getrlimit ()
-and in the structure passed to
-.BR setrlimit ()).
-.PP
-The
-.I resource
-argument must be one of:
-.TP
-.B RLIMIT_AS
-This is the maximum size of the process's virtual memory
-(address space).
-The limit is specified in bytes, and is rounded down to the system page size.
-.\" since Linux 2.0.27 / Linux 2.1.12
-This limit affects calls to
-.BR brk (2),
-.BR mmap (2),
-and
-.BR mremap (2),
-which fail with the error
-.B ENOMEM
-upon exceeding this limit.
-In addition, automatic stack expansion fails
-(and generates a
-.B SIGSEGV
-that kills the process if no alternate stack
-has been made available via
-.BR sigaltstack (2)).
-Since the value is a \fIlong\fP, on machines with a 32-bit \fIlong\fP
-either this limit is at most 2\ GiB, or this resource is unlimited.
-.TP
-.B RLIMIT_CORE
-This is the maximum size of a
-.I core
-file (see
-.BR core (5))
-in bytes that the process may dump.
-When 0 no core dump files are created.
-When nonzero, larger dumps are truncated to this size.
-.TP
-.B RLIMIT_CPU
-This is a limit, in seconds,
-on the amount of CPU time that the process can consume.
-When the process reaches the soft limit, it is sent a
-.B SIGXCPU
-signal.
-The default action for this signal is to terminate the process.
-However, the signal can be caught, and the handler can return control to
-the main program.
-If the process continues to consume CPU time, it will be sent
-.B SIGXCPU
-once per second until the hard limit is reached, at which time
-it is sent
-.BR SIGKILL .
-(This latter point describes Linux behavior.
-Implementations vary in how they treat processes which continue to
-consume CPU time after reaching the soft limit.
-Portable applications that need to catch this signal should
-perform an orderly termination upon first receipt of
-.BR SIGXCPU .)
-.TP
-.B RLIMIT_DATA
-This is the maximum size
-of the process's data segment (initialized data,
-uninitialized data, and heap).
-The limit is specified in bytes, and is rounded down to the system page size.
-This limit affects calls to
-.BR brk (2),
-.BR sbrk (2),
-and (since Linux 4.7)
-.BR mmap (2),
-.\" commits 84638335900f1995495838fe1bd4870c43ec1f67
-.\" ("mm: rework virtual memory accounting"),
-.\" f4fcd55841fc9e46daac553b39361572453c2b88
-.\" (mm: enable RLIMIT_DATA by default with workaround for valgrind).
-which fail with the error
-.B ENOMEM
-upon encountering the soft limit of this resource.
-.TP
-.B RLIMIT_FSIZE
-This is the maximum size in bytes of files that the process may create.
-Attempts to extend a file beyond this limit result in delivery of a
-.B SIGXFSZ
-signal.
-By default, this signal terminates a process, but a process can
-catch this signal instead, in which case the relevant system call (e.g.,
-.BR write (2),
-.BR truncate (2))
-fails with the error
-.BR EFBIG .
-.TP
-.BR RLIMIT_LOCKS " (Linux 2.4.0 to Linux 2.4.24)"
-.\" to be precise: Linux 2.4.0-test9; no longer in Linux 2.4.25 / Linux 2.5.65
-This is a limit on the combined number of
-.BR flock (2)
-locks and
-.BR fcntl (2)
-leases that this process may establish.
-.TP
-.B RLIMIT_MEMLOCK
-This is the maximum number of bytes of memory that may be locked
-into RAM.
-This limit is in effect rounded down to the nearest multiple
-of the system page size.
-This limit affects
-.BR mlock (2),
-.BR mlockall (2),
-and the
-.BR mmap (2)
-.B MAP_LOCKED
-operation.
-Since Linux 2.6.9, it also affects the
-.BR shmctl (2)
-.B SHM_LOCK
-operation, where it sets a maximum on the total bytes in
-shared memory segments (see
-.BR shmget (2))
-that may be locked by the real user ID of the calling process.
-The
-.BR shmctl (2)
-.B SHM_LOCK
-locks are accounted for separately from the per-process memory
-locks established by
-.BR mlock (2),
-.BR mlockall (2),
-and
-.BR mmap (2)
-.BR MAP_LOCKED ;
-a process can lock bytes up to this limit in each of these
-two categories.
-.IP
-Before Linux 2.6.9, this limit controlled the amount of
-memory that could be locked by a privileged process.
-Since Linux 2.6.9, no limits are placed on the amount of memory
-that a privileged process may lock, and this limit instead governs
-the amount of memory that an unprivileged process may lock.
-.TP
-.BR RLIMIT_MSGQUEUE " (since Linux 2.6.8)"
-This is a limit on the number of bytes that can be allocated
-for POSIX message queues for the real user ID of the calling process.
-This limit is enforced for
-.BR mq_open (3).
-Each message queue that the user creates counts (until it is removed)
-against this limit according to the formula:
-.RS 4
-.IP
-Since Linux 3.5:
-.IP
-.in +4n
-.EX
-bytes = attr.mq_maxmsg * sizeof(struct msg_msg) +
- MIN(attr.mq_maxmsg, MQ_PRIO_MAX) *
- sizeof(struct posix_msg_tree_node)+
- /* For overhead */
- attr.mq_maxmsg * attr.mq_msgsize;
- /* For message data */
-.EE
-.in
-.IP
-Linux 3.4 and earlier:
-.IP
-.in +4n
-.EX
-bytes = attr.mq_maxmsg * sizeof(struct msg_msg *) +
- /* For overhead */
- attr.mq_maxmsg * attr.mq_msgsize;
- /* For message data */
-.EE
-.in
-.RE
-.IP
-where
-.I attr
-is the
-.I mq_attr
-structure specified as the fourth argument to
-.BR mq_open (3),
-and the
-.I msg_msg
-and
-.I posix_msg_tree_node
-structures are kernel-internal structures.
-.IP
-The "overhead" addend in the formula accounts for overhead
-bytes required by the implementation
-and ensures that the user cannot
-create an unlimited number of zero-length messages (such messages
-nevertheless each consume some system memory for bookkeeping overhead).
-.TP
-.BR RLIMIT_NICE " (since Linux 2.6.12, but see BUGS below)"
-This specifies a ceiling to which the process's nice value can be raised using
-.BR setpriority (2)
-or
-.BR nice (2).
-The actual ceiling for the nice value is calculated as
-.IR "20\ \-\ rlim_cur" .
-The useful range for this limit is thus from 1
-(corresponding to a nice value of 19) to 40
-(corresponding to a nice value of \-20).
-This unusual choice of range was necessary
-because negative numbers cannot be specified
-as resource limit values, since they typically have special meanings.
-For example,
-.B RLIM_INFINITY
-typically is the same as \-1.
-For more detail on the nice value, see
-.BR sched (7).
-.TP
-.B RLIMIT_NOFILE
-This specifies a value one greater than the maximum file descriptor number
-that can be opened by this process.
-Attempts
-.RB ( open (2),
-.BR pipe (2),
-.BR dup (2),
-etc.)
-to exceed this limit yield the error
-.BR EMFILE .
-(Historically, this limit was named
-.B RLIMIT_OFILE
-on BSD.)
-.IP
-Since Linux 4.5,
-this limit also defines the maximum number of file descriptors that
-an unprivileged process (one without the
-.B CAP_SYS_RESOURCE
-capability) may have "in flight" to other processes,
-by being passed across UNIX domain sockets.
-This limit applies to the
-.BR sendmsg (2)
-system call.
-For further details, see
-.BR unix (7).
-.TP
-.B RLIMIT_NPROC
-This is a limit on the number of extant process
-(or, more precisely on Linux, threads)
-for the real user ID of the calling process.
-So long as the current number of processes belonging to this
-process's real user ID is greater than or equal to this limit,
-.BR fork (2)
-fails with the error
-.BR EAGAIN .
-.IP
-The
-.B RLIMIT_NPROC
-limit is not enforced for processes that have either the
-.B CAP_SYS_ADMIN
-or the
-.B CAP_SYS_RESOURCE
-capability,
-or run with real user ID 0.
-.TP
-.B RLIMIT_RSS
-This is a limit (in bytes) on the process's resident set
-(the number of virtual pages resident in RAM).
-This limit has effect only in Linux 2.4.x, x < 30, and there
-affects only calls to
-.BR madvise (2)
-specifying
-.BR MADV_WILLNEED .
-.\" As at Linux 2.6.12, this limit still does nothing in Linux 2.6 though
-.\" talk of making it do something has surfaced from time to time in LKML
-.\" -- MTK, Jul 05
-.TP
-.BR RLIMIT_RTPRIO " (since Linux 2.6.12, but see BUGS)"
-This specifies a ceiling on the real-time priority that may be set for
-this process using
-.BR sched_setscheduler (2)
-and
-.BR sched_setparam (2).
-.IP
-For further details on real-time scheduling policies, see
-.BR sched (7)
-.TP
-.BR RLIMIT_RTTIME " (since Linux 2.6.25)"
-This is a limit (in microseconds)
-on the amount of CPU time that a process scheduled
-under a real-time scheduling policy may consume without making a blocking
-system call.
-For the purpose of this limit,
-each time a process makes a blocking system call,
-the count of its consumed CPU time is reset to zero.
-The CPU time count is not reset if the process continues trying to
-use the CPU but is preempted, its time slice expires, or it calls
-.BR sched_yield (2).
-.IP
-Upon reaching the soft limit, the process is sent a
-.B SIGXCPU
-signal.
-If the process catches or ignores this signal and
-continues consuming CPU time, then
-.B SIGXCPU
-will be generated once each second until the hard limit is reached,
-at which point the process is sent a
-.B SIGKILL
-signal.
-.IP
-The intended use of this limit is to stop a runaway
-real-time process from locking up the system.
-.IP
-For further details on real-time scheduling policies, see
-.BR sched (7)
-.TP
-.BR RLIMIT_SIGPENDING " (since Linux 2.6.8)"
-This is a limit on the number of signals
-that may be queued for the real user ID of the calling process.
-Both standard and real-time signals are counted for the purpose of
-checking this limit.
-However, the limit is enforced only for
-.BR sigqueue (3);
-it is always possible to use
-.BR kill (2)
-to queue one instance of any of the signals that are not already
-queued to the process.
-.\" This replaces the /proc/sys/kernel/rtsig-max system-wide limit
-.\" that was present in Linux <= 2.6.7. MTK Dec 04
-.TP
-.B RLIMIT_STACK
-This is the maximum size of the process stack, in bytes.
-Upon reaching this limit, a
-.B SIGSEGV
-signal is generated.
-To handle this signal, a process must employ an alternate signal stack
-.RB ( sigaltstack (2)).
-.IP
-Since Linux 2.6.23,
-this limit also determines the amount of space used for the process's
-command-line arguments and environment variables; for details, see
-.BR execve (2).
-.SS prlimit()
-.\" commit c022a0acad534fd5f5d5f17280f6d4d135e74e81
-.\" Author: Jiri Slaby <jslaby@suse.cz>
-.\" Date: Tue May 4 18:03:50 2010 +0200
-.\"
-.\" rlimits: implement prlimit64 syscall
-.\"
-.\" commit 6a1d5e2c85d06da35cdfd93f1a27675bfdc3ad8c
-.\" Author: Jiri Slaby <jslaby@suse.cz>
-.\" Date: Wed Mar 24 17:06:58 2010 +0100
-.\"
-.\" rlimits: add rlimit64 structure
-.\"
-The Linux-specific
-.BR prlimit ()
-system call combines and extends the functionality of
-.BR setrlimit ()
-and
-.BR getrlimit ().
-It can be used to both set and get the resource limits of an arbitrary process.
-.PP
-The
-.I resource
-argument has the same meaning as for
-.BR setrlimit ()
-and
-.BR getrlimit ().
-.PP
-If the
-.I new_limit
-argument is not NULL, then the
-.I rlimit
-structure to which it points is used to set new values for
-the soft and hard limits for
-.IR resource .
-If the
-.I old_limit
-argument is not NULL, then a successful call to
-.BR prlimit ()
-places the previous soft and hard limits for
-.I resource
-in the
-.I rlimit
-structure pointed to by
-.IR old_limit .
-.PP
-The
-.I pid
-argument specifies the ID of the process on which the call is to operate.
-If
-.I pid
-is 0, then the call applies to the calling process.
-To set or get the resources of a process other than itself,
-the caller must have the
-.B CAP_SYS_RESOURCE
-capability in the user namespace of the process
-whose resource limits are being changed, or the
-real, effective, and saved set user IDs of the target process
-must match the real user ID of the caller
-.I and
-the real, effective, and saved set group IDs of the target process
-must match the real group ID of the caller.
-.\" FIXME . this permission check is strange
-.\" Asked about this on LKML, 7 Nov 2010
-.\" "Inconsistent credential checking in prlimit() syscall"
-.SH RETURN VALUE
-On success, these system calls return 0.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-A pointer argument points to a location
-outside the accessible address space.
-.TP
-.B EINVAL
-The value specified in
-.I resource
-is not valid;
-or, for
-.BR setrlimit ()
-or
-.BR prlimit ():
-.I rlim\->rlim_cur
-was greater than
-.IR rlim\->rlim_max .
-.TP
-.B EPERM
-An unprivileged process tried to raise the hard limit; the
-.B CAP_SYS_RESOURCE
-capability is required to do this.
-.TP
-.B EPERM
-The caller tried to increase the hard
-.B RLIMIT_NOFILE
-limit above the maximum defined by
-.I /proc/sys/fs/nr_open
-(see
-.BR proc (5))
-.TP
-.B EPERM
-.RB ( prlimit ())
-The calling process did not have permission to set limits
-for the process specified by
-.IR pid .
-.TP
-.B ESRCH
-Could not find a process with the ID specified in
-.IR pid .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getrlimit (),
-.BR setrlimit (),
-.BR prlimit ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR getrlimit ()
-.TQ
-.BR setrlimit ()
-POSIX.1-2008.
-.TP
-.BR prlimit ()
-Linux.
-.PP
-.B RLIMIT_MEMLOCK
-and
-.B RLIMIT_NPROC
-derive from BSD and are not specified in POSIX.1;
-they are present on the BSDs and Linux, but on few other implementations.
-.B RLIMIT_RSS
-derives from BSD and is not specified in POSIX.1;
-it is nevertheless present on most implementations.
-.BR RLIMIT_MSGQUEUE ,
-.BR RLIMIT_NICE ,
-.BR RLIMIT_RTPRIO ,
-.BR RLIMIT_RTTIME ,
-and
-.B RLIMIT_SIGPENDING
-are Linux-specific.
-.SH HISTORY
-.TP
-.BR getrlimit ()
-.TQ
-.BR setrlimit ()
-POSIX.1-2001, SVr4, 4.3BSD.
-.TP
-.BR prlimit ()
-Linux 2.6.36,
-glibc 2.13.
-.SH NOTES
-A child process created via
-.BR fork (2)
-inherits its parent's resource limits.
-Resource limits are preserved across
-.BR execve (2).
-.PP
-Resource limits are per-process attributes that are shared
-by all of the threads in a process.
-.PP
-Lowering the soft limit for a resource below the process's
-current consumption of that resource will succeed
-(but will prevent the process from further increasing
-its consumption of the resource).
-.PP
-One can set the resource limits of the shell using the built-in
-.I ulimit
-command
-.RI ( limit
-in
-.BR csh (1)).
-The shell's resource limits are inherited by the processes that
-it creates to execute commands.
-.PP
-Since Linux 2.6.24, the resource limits of any process can be inspected via
-.IR /proc/ pid /limits ;
-see
-.BR proc (5).
-.PP
-Ancient systems provided a
-.BR vlimit ()
-function with a similar purpose to
-.BR setrlimit ().
-For backward compatibility, glibc also provides
-.BR vlimit ().
-All new applications should be written using
-.BR setrlimit ().
-.SS C library/kernel ABI differences
-Since glibc 2.13, the glibc
-.BR getrlimit ()
-and
-.BR setrlimit ()
-wrapper functions no longer invoke the corresponding system calls,
-but instead employ
-.BR prlimit (),
-for the reasons described in BUGS.
-.PP
-The name of the glibc wrapper function is
-.BR prlimit ();
-the underlying system call is
-.BR prlimit64 ().
-.SH BUGS
-In older Linux kernels, the
-.B SIGXCPU
-and
-.B SIGKILL
-signals delivered when a process encountered the soft and hard
-.B RLIMIT_CPU
-limits were delivered one (CPU) second later than they should have been.
-This was fixed in Linux 2.6.8.
-.PP
-In Linux 2.6.x kernels before Linux 2.6.17, a
-.B RLIMIT_CPU
-limit of 0 is wrongly treated as "no limit" (like
-.BR RLIM_INFINITY ).
-Since Linux 2.6.17, setting a limit of 0 does have an effect,
-but is actually treated as a limit of 1 second.
-.\" see http://marc.theaimsgroup.com/?l=linux-kernel&m=114008066530167&w=2
-.PP
-A kernel bug means that
-.\" See https://lwn.net/Articles/145008/
-.B RLIMIT_RTPRIO
-does not work in Linux 2.6.12; the problem is fixed in Linux 2.6.13.
-.PP
-In Linux 2.6.12, there was an off-by-one mismatch
-between the priority ranges returned by
-.BR getpriority (2)
-and
-.BR RLIMIT_NICE .
-This had the effect that the actual ceiling for the nice value
-was calculated as
-.IR "19\ \-\ rlim_cur" .
-This was fixed in Linux 2.6.13.
-.\" see http://marc.theaimsgroup.com/?l=linux-kernel&m=112256338703880&w=2
-.PP
-Since Linux 2.6.12,
-.\" The relevant patch, sent to LKML, seems to be
-.\" http://thread.gmane.org/gmane.linux.kernel/273462
-.\" From: Roland McGrath <roland <at> redhat.com>
-.\" Subject: [PATCH 7/7] make RLIMIT_CPU/SIGXCPU per-process
-.\" Date: 2005-01-23 23:27:46 GMT
-if a process reaches its soft
-.B RLIMIT_CPU
-limit and has a handler installed for
-.BR SIGXCPU ,
-then, in addition to invoking the signal handler,
-the kernel increases the soft limit by one second.
-This behavior repeats if the process continues to consume CPU time,
-until the hard limit is reached,
-at which point the process is killed.
-Other implementations
-.\" Tested Solaris 10, FreeBSD 9, OpenBSD 5.0
-do not change the
-.B RLIMIT_CPU
-soft limit in this manner,
-and the Linux behavior is probably not standards conformant;
-portable applications should avoid relying on this Linux-specific behavior.
-.\" FIXME . https://bugzilla.kernel.org/show_bug.cgi?id=50951
-The Linux-specific
-.B RLIMIT_RTTIME
-limit exhibits the same behavior when the soft limit is encountered.
-.PP
-Kernels before Linux 2.4.22 did not diagnose the error
-.B EINVAL
-for
-.BR setrlimit ()
-when
-.I rlim\->rlim_cur
-was greater than
-.IR rlim\->rlim_max .
-.\" d3561f78fd379a7110e46c87964ba7aa4120235c
-.PP
-Linux doesn't return an error when an attempt to set
-.B RLIMIT_CPU
-has failed, for compatibility reasons.
-.\"
-.SS Representation of """large""" resource limit values on 32-bit platforms
-The glibc
-.BR getrlimit ()
-and
-.BR setrlimit ()
-wrapper functions use a 64-bit
-.I rlim_t
-data type, even on 32-bit platforms.
-However, the
-.I rlim_t
-data type used in the
-.BR getrlimit ()
-and
-.BR setrlimit ()
-system calls is a (32-bit)
-.IR "unsigned long" .
-.\" Linux still uses long for limits internally:
-.\" c022a0acad534fd5f5d5f17280f6d4d135e74e81
-.\" kernel/sys.c:do_prlimit() still uses struct rlimit which
-.\" uses kernel_ulong_t for its members, i.e. 32-bit on 32-bit kernel.
-Furthermore, in Linux,
-the kernel represents resource limits on 32-bit platforms as
-.IR "unsigned long" .
-However, a 32-bit data type is not wide enough.
-.\" https://bugzilla.kernel.org/show_bug.cgi?id=5042
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=12201
-The most pertinent limit here is
-.BR RLIMIT_FSIZE ,
-which specifies the maximum size to which a file can grow:
-to be useful, this limit must be represented using a type
-that is as wide as the type used to
-represent file offsets\[em]that is, as wide as a 64-bit
-.B off_t
-(assuming a program compiled with
-.IR _FILE_OFFSET_BITS=64 ).
-.PP
-To work around this kernel limitation,
-if a program tried to set a resource limit to a value larger than
-can be represented in a 32-bit
-.IR "unsigned long" ,
-then the glibc
-.BR setrlimit ()
-wrapper function silently converted the limit value to
-.BR RLIM_INFINITY .
-In other words, the requested resource limit setting was silently ignored.
-.PP
-Since glibc 2.13,
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=12201
-glibc works around the limitations of the
-.BR getrlimit ()
-and
-.BR setrlimit ()
-system calls by implementing
-.BR setrlimit ()
-and
-.BR getrlimit ()
-as wrapper functions that call
-.BR prlimit ().
-.SH EXAMPLES
-The program below demonstrates the use of
-.BR prlimit ().
-.PP
-.\" SRC BEGIN (getrlimit.c)
-.EX
-#define _GNU_SOURCE
-#define _FILE_OFFSET_BITS 64
-#include <err.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/resource.h>
-#include <time.h>
-\&
-int
-main(int argc, char *argv[])
-{
- pid_t pid;
- struct rlimit old, new;
- struct rlimit *newp;
-\&
- if (!(argc == 2 || argc == 4)) {
- fprintf(stderr, "Usage: %s <pid> [<new\-soft\-limit> "
- "<new\-hard\-limit>]\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- pid = atoi(argv[1]); /* PID of target process */
-\&
- newp = NULL;
- if (argc == 4) {
- new.rlim_cur = atoi(argv[2]);
- new.rlim_max = atoi(argv[3]);
- newp = &new;
- }
-\&
- /* Set CPU time limit of target process; retrieve and display
- previous limit */
-\&
- if (prlimit(pid, RLIMIT_CPU, newp, &old) == \-1)
- err(EXIT_FAILURE, "prlimit\-1");
- printf("Previous limits: soft=%jd; hard=%jd\en",
- (intmax_t) old.rlim_cur, (intmax_t) old.rlim_max);
-\&
- /* Retrieve and display new CPU time limit */
-\&
- if (prlimit(pid, RLIMIT_CPU, NULL, &old) == \-1)
- err(EXIT_FAILURE, "prlimit\-2");
- printf("New limits: soft=%jd; hard=%jd\en",
- (intmax_t) old.rlim_cur, (intmax_t) old.rlim_max);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR prlimit (1),
-.BR dup (2),
-.BR fcntl (2),
-.BR fork (2),
-.BR getrusage (2),
-.BR mlock (2),
-.BR mmap (2),
-.BR open (2),
-.BR quotactl (2),
-.BR sbrk (2),
-.BR shmctl (2),
-.BR malloc (3),
-.BR sigqueue (3),
-.BR ulimit (3),
-.BR core (5),
-.BR capabilities (7),
-.BR cgroups (7),
-.BR credentials (7),
-.BR signal (7)
diff --git a/man2/getrusage.2 b/man2/getrusage.2
deleted file mode 100644
index f8b3b3591..000000000
--- a/man2/getrusage.2
+++ /dev/null
@@ -1,256 +0,0 @@
-'\" t
-.\" Copyright (c) 1992 Drew Eckhardt, March 28, 1992
-.\" and Copyright (c) 2002 Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2004-11-16 -- mtk: the getrlimit.2 page, which formerly included
-.\" coverage of getrusage(2), has been split, so that the latter is
-.\" now covered in its own getrusage.2. For older details of change
-.\" history, etc., see getrlimit.2
-.\"
-.\" Modified 2004-11-16, mtk, Noted that the nonconformance
-.\" when SIGCHLD is being ignored is fixed in Linux 2.6.9.
-.\" 2008-02-22, Sripathi Kodi <sripathik@in.ibm.com>: Document RUSAGE_THREAD
-.\" 2008-05-25, mtk, clarify RUSAGE_CHILDREN + other clean-ups.
-.\" 2010-05-24, Mark Hills <mark@pogo.org.uk>: Description of fields,
-.\" document ru_maxrss
-.\" 2010-05-24, mtk, enhanced description of various fields
-.\"
-.TH getrusage 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getrusage \- get resource usage
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/resource.h>
-.PP
-.BI "int getrusage(int " who ", struct rusage *" usage );
-.fi
-.SH DESCRIPTION
-.BR getrusage ()
-returns resource usage measures for
-.IR who ,
-which can be one of the following:
-.TP
-.B RUSAGE_SELF
-Return resource usage statistics for the calling process,
-which is the sum of resources used by all threads in the process.
-.TP
-.B RUSAGE_CHILDREN
-Return resource usage statistics for all children of the
-calling process that have terminated and been waited for.
-These statistics will include the resources used by grandchildren,
-and further removed descendants,
-if all of the intervening descendants waited on their terminated children.
-.TP
-.BR RUSAGE_THREAD " (since Linux 2.6.26)"
-Return resource usage statistics for the calling thread.
-The
-.B _GNU_SOURCE
-feature test macro must be defined (before including
-.I any
-header file)
-in order to obtain the definition of this constant from
-.IR <sys/resource.h> .
-.PP
-The resource usages are returned in the structure pointed to by
-.IR usage ,
-which has the following form:
-.PP
-.in +4n
-.EX
-struct rusage {
- struct timeval ru_utime; /* user CPU time used */
- struct timeval ru_stime; /* system CPU time used */
- long ru_maxrss; /* maximum resident set size */
- long ru_ixrss; /* integral shared memory size */
- long ru_idrss; /* integral unshared data size */
- long ru_isrss; /* integral unshared stack size */
- long ru_minflt; /* page reclaims (soft page faults) */
- long ru_majflt; /* page faults (hard page faults) */
- long ru_nswap; /* swaps */
- long ru_inblock; /* block input operations */
- long ru_oublock; /* block output operations */
- long ru_msgsnd; /* IPC messages sent */
- long ru_msgrcv; /* IPC messages received */
- long ru_nsignals; /* signals received */
- long ru_nvcsw; /* voluntary context switches */
- long ru_nivcsw; /* involuntary context switches */
-};
-.EE
-.in
-.PP
-Not all fields are completed;
-unmaintained fields are set to zero by the kernel.
-(The unmaintained fields are provided for compatibility with other systems,
-and because they may one day be supported on Linux.)
-The fields are interpreted as follows:
-.TP
-.I ru_utime
-This is the total amount of time spent executing in user mode,
-expressed in a
-.I timeval
-structure (seconds plus microseconds).
-.TP
-.I ru_stime
-This is the total amount of time spent executing in kernel mode,
-expressed in a
-.I timeval
-structure (seconds plus microseconds).
-.TP
-.IR ru_maxrss " (since Linux 2.6.32)"
-This is the maximum resident set size used (in kilobytes).
-For
-.BR RUSAGE_CHILDREN ,
-this is the resident set size of the largest child, not the maximum
-resident set size of the process tree.
-.TP
-.IR ru_ixrss " (unmaintained)"
-This field is currently unused on Linux.
-.\" On some systems,
-.\" this is the integral of the text segment memory consumption,
-.\" expressed in kilobyte-seconds.
-.TP
-.IR ru_idrss " (unmaintained)"
-This field is currently unused on Linux.
-.\" On some systems, this is the integral of the data segment memory consumption,
-.\" expressed in kilobyte-seconds.
-.TP
-.IR ru_isrss " (unmaintained)"
-This field is currently unused on Linux.
-.\" On some systems, this is the integral of the stack memory consumption,
-.\" expressed in kilobyte-seconds.
-.TP
-.I ru_minflt
-The number of page faults serviced without any I/O activity; here
-I/O activity is avoided by \*(lqreclaiming\*(rq a page frame from
-the list of pages awaiting reallocation.
-.TP
-.I ru_majflt
-The number of page faults serviced that required I/O activity.
-.TP
-.IR ru_nswap " (unmaintained)"
-This field is currently unused on Linux.
-.\" On some systems, this is the number of swaps out of physical memory.
-.TP
-.IR ru_inblock " (since Linux 2.6.22)"
-The number of times the filesystem had to perform input.
-.TP
-.IR ru_oublock " (since Linux 2.6.22)"
-The number of times the filesystem had to perform output.
-.TP
-.IR ru_msgsnd " (unmaintained)"
-This field is currently unused on Linux.
-.\" On FreeBSD 6.2, this appears to measure messages sent over sockets
-.\" On some systems,
-.\" this field records the number of messages sent over sockets.
-.TP
-.IR ru_msgrcv " (unmaintained)"
-This field is currently unused on Linux.
-.\" On FreeBSD 6.2, this appears to measure messages received over sockets
-.\" On some systems,
-.\" this field records the number of messages received over sockets.
-.TP
-.IR ru_nsignals " (unmaintained)"
-This field is currently unused on Linux.
-.\" On some systems, this field records the number of signals received.
-.TP
-.IR ru_nvcsw " (since Linux 2.6)"
-The number of times a context switch resulted due to a process
-voluntarily giving up the processor before its time slice was
-completed (usually to await availability of a resource).
-.TP
-.IR ru_nivcsw " (since Linux 2.6)"
-The number of times a context switch resulted due to a higher
-priority process becoming runnable or because the current process
-exceeded its time slice.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-.I usage
-points outside the accessible address space.
-.TP
-.B EINVAL
-.I who
-is invalid.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getrusage ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.PP
-POSIX.1 specifies
-.BR getrusage (),
-but specifies only the fields
-.I ru_utime
-and
-.IR ru_stime .
-.PP
-.B RUSAGE_THREAD
-is Linux-specific.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.PP
-Before Linux 2.6.9, if the disposition of
-.B SIGCHLD
-is set to
-.B SIG_IGN
-then the resource usages of child processes
-are automatically included in the value returned by
-.BR RUSAGE_CHILDREN ,
-although POSIX.1-2001 explicitly prohibits this.
-This nonconformance is rectified in Linux 2.6.9 and later.
-.\" See the description of getrusage() in XSH.
-.\" A similar statement was also in SUSv2.
-.PP
-The structure definition shown at the start of this page
-was taken from 4.3BSD Reno.
-.PP
-Ancient systems provided a
-.BR vtimes ()
-function with a similar purpose to
-.BR getrusage ().
-For backward compatibility, glibc (up until Linux 2.32) also provides
-.BR vtimes ().
-All new applications should be written using
-.BR getrusage ().
-(Since Linux 2.33, glibc no longer provides an
-.BR vtimes ()
-implementation.)
-.SH NOTES
-Resource usage metrics are preserved across an
-.BR execve (2).
-.PP
-See also the description of
-.IR /proc/ pid /stat
-in
-.BR proc (5).
-.SH SEE ALSO
-.BR clock_gettime (2),
-.BR getrlimit (2),
-.BR times (2),
-.BR wait (2),
-.BR wait4 (2),
-.BR clock (3)
diff --git a/man2/getsid.2 b/man2/getsid.2
deleted file mode 100644
index eccbd47b1..000000000
--- a/man2/getsid.2
+++ /dev/null
@@ -1,75 +0,0 @@
-.\" Copyright (C) 1996 Andries Brouwer (aeb@cwi.nl)
-.\" and Copyright (C) 2016 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Thu Oct 31 14:18:40 1996 by Eric S. Raymond <esr@y\thyrsus.com>
-.\" Modified 2001-12-17, aeb
-.TH getsid 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getsid \- get session ID
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "pid_t getsid(pid_t" " pid" );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getsid ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
-.fi
-.SH DESCRIPTION
-.BR getsid ()
-returns the session ID of the process with process ID
-.IR pid .
-If
-.I pid
-is 0,
-.BR getsid ()
-returns the session ID of the calling process.
-.SH RETURN VALUE
-On success, a session ID is returned.
-On error, \fI(pid_t)\ \-1\fP is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EPERM
-A process with process ID
-.I pid
-exists, but it is not in the same session as the calling process,
-and the implementation considers this an error.
-.TP
-.B ESRCH
-No process with process ID
-.I pid
-was found.
-.SH VERSIONS
-Linux does not return
-.BR EPERM .
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4.
-Linux 2.0.
-.\" Linux has this system call since Linux 1.3.44.
-.\" There is libc support since libc 5.2.19.
-.SH NOTES
-See
-.BR credentials (7)
-for a description of sessions and session IDs.
-.SH SEE ALSO
-.BR getpgid (2),
-.BR setsid (2),
-.BR credentials (7)
diff --git a/man2/getsockname.2 b/man2/getsockname.2
deleted file mode 100644
index 7ac223676..000000000
--- a/man2/getsockname.2
+++ /dev/null
@@ -1,85 +0,0 @@
-.\" Copyright (c) 1983, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)getsockname.2 6.4 (Berkeley) 3/10/91
-.\"
-.\" Modified Sat Jul 24 16:30:29 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Tue Oct 22 00:22:35 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Sun Mar 28 21:26:46 1999 by Andries Brouwer <aeb@cwi.nl>
-.\"
-.TH getsockname 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getsockname \- get socket name
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.PP
-.BI "int getsockname(int " sockfd ", struct sockaddr *restrict " addr ,
-.BI " socklen_t *restrict " addrlen );
-.fi
-.SH DESCRIPTION
-.BR getsockname ()
-returns the current address to which the socket
-.I sockfd
-is bound, in the buffer pointed to by
-.IR addr .
-The
-.I addrlen
-argument should be initialized to indicate
-the amount of space (in bytes) pointed to by
-.IR addr .
-On return it contains the actual size of the socket address.
-.PP
-The returned address is truncated if the buffer provided is too small;
-in this case,
-.I addrlen
-will return a value greater than was supplied to the call.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-The argument
-.I sockfd
-is not a valid file descriptor.
-.TP
-.B EFAULT
-The
-.I addr
-argument points to memory not in a valid part of the
-process address space.
-.TP
-.B EINVAL
-.I addrlen
-is invalid (e.g., is negative).
-.TP
-.B ENOBUFS
-Insufficient resources were available in the system
-to perform the operation.
-.TP
-.B ENOTSOCK
-The file descriptor
-.I sockfd
-does not refer to a socket.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.4BSD
-(first appeared in 4.2BSD).
-.\" SVr4 documents additional ENOMEM
-.\" and ENOSR error codes.
-.SH SEE ALSO
-.BR bind (2),
-.BR socket (2),
-.BR getifaddrs (3),
-.BR ip (7),
-.BR socket (7),
-.BR unix (7)
diff --git a/man2/getsockopt.2 b/man2/getsockopt.2
deleted file mode 100644
index a0cda8e87..000000000
--- a/man2/getsockopt.2
+++ /dev/null
@@ -1,172 +0,0 @@
-.\" Copyright (c) 1983, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" $Id: getsockopt.2,v 1.1 1999/05/24 14:57:04 freitag Exp $
-.\"
-.\" Modified Sat Jul 24 16:19:32 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Mon Apr 22 02:29:06 1996 by Martin Schulze (joey@infodrom.north.de)
-.\" Modified Tue Aug 27 10:52:51 1996 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified Thu Jan 23 13:29:34 1997 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified Sun Mar 28 21:26:46 1999 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified 1999 by Andi Kleen <ak@muc.de>.
-.\" Removed most stuff because it is in socket.7 now.
-.\"
-.TH getsockopt 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getsockopt, setsockopt \- get and set options on sockets
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.PP
-.BI "int getsockopt(int " sockfd ", int " level ", int " optname ,
-.BI " void " optval "[restrict *." optlen ],
-.BI " socklen_t *restrict " optlen );
-.BI "int setsockopt(int " sockfd ", int " level ", int " optname ,
-.BI " const void " optval [. optlen ],
-.BI " socklen_t " optlen );
-.fi
-.SH DESCRIPTION
-.BR getsockopt ()
-and
-.BR setsockopt ()
-manipulate options for the socket referred to by the file descriptor
-.IR sockfd .
-Options may exist at multiple
-protocol levels; they are always present at the uppermost
-socket level.
-.PP
-When manipulating socket options, the level at which the
-option resides and the name of the option must be specified.
-To manipulate options at the sockets API level,
-.I level
-is specified as
-.BR SOL_SOCKET .
-To manipulate options at any
-other level the protocol number of the appropriate protocol
-controlling the option is supplied.
-For example,
-to indicate that an option is to be interpreted by the
-.B TCP
-protocol,
-.I level
-should be set to the protocol number of
-.BR TCP ;
-see
-.BR getprotoent (3).
-.PP
-The arguments
-.I optval
-and
-.I optlen
-are used to access option values for
-.BR setsockopt ().
-For
-.BR getsockopt ()
-they identify a buffer in which the value for the
-requested option(s) are to be returned.
-For
-.BR getsockopt (),
-.I optlen
-is a value-result argument, initially containing the
-size of the buffer pointed to by
-.IR optval ,
-and modified on return to indicate the actual size of
-the value returned.
-If no option value is to be supplied or returned,
-.I optval
-may be NULL.
-.PP
-.I Optname
-and any specified options are passed uninterpreted to the appropriate
-protocol module for interpretation.
-The include file
-.I <sys/socket.h>
-contains definitions for socket level options, described below.
-Options at
-other protocol levels vary in format and name; consult the appropriate
-entries in section 4 of the manual.
-.PP
-Most socket-level options utilize an
-.I int
-argument for
-.IR optval .
-For
-.BR setsockopt (),
-the argument should be nonzero to enable a boolean option, or zero if the
-option is to be disabled.
-.PP
-For a description of the available socket options see
-.BR socket (7)
-and the appropriate protocol man pages.
-.SH RETURN VALUE
-On success, zero is returned for the standard options.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.PP
-Netfilter allows the programmer
-to define custom socket options with associated handlers; for such
-options, the return value on success is the value returned by the handler.
-.SH ERRORS
-.TP
-.B EBADF
-The argument
-.I sockfd
-is not a valid file descriptor.
-.TP
-.B EFAULT
-The address pointed to by
-.I optval
-is not in a valid part of the process address space.
-For
-.BR getsockopt (),
-this error may also be returned if
-.I optlen
-is not in a valid part of the process address space.
-.TP
-.B EINVAL
-.I optlen
-invalid in
-.BR setsockopt ().
-In some cases this error can also occur for an invalid value in
-.I optval
-(e.g., for the
-.B IP_ADD_MEMBERSHIP
-option described in
-.BR ip (7)).
-.TP
-.B ENOPROTOOPT
-The option is unknown at the level indicated.
-.TP
-.B ENOTSOCK
-The file descriptor
-.I sockfd
-does not refer to a socket.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001,
-SVr4, 4.4BSD (first appeared in 4.2BSD).
-.\" SVr4 documents additional ENOMEM and ENOSR error codes, but does
-.\" not document the
-.\" .BR SO_SNDLOWAT ", " SO_RCVLOWAT ", " SO_SNDTIMEO ", " SO_RCVTIMEO
-.\" options
-.SH BUGS
-Several of the socket options should be handled at lower levels of the
-system.
-.SH SEE ALSO
-.BR ioctl (2),
-.BR socket (2),
-.BR getprotoent (3),
-.BR protocols (5),
-.BR ip (7),
-.BR packet (7),
-.BR socket (7),
-.BR tcp (7),
-.BR udp (7),
-.BR unix (7)
diff --git a/man2/gettid.2 b/man2/gettid.2
deleted file mode 100644
index c1fa3006f..000000000
--- a/man2/gettid.2
+++ /dev/null
@@ -1,74 +0,0 @@
-.\" Copyright 2003 Abhijit Menon-Sen <ams@wiw.org>
-.\" and Copyright (C) 2008 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH gettid 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-gettid \- get thread identification
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #define _GNU_SOURCE
-.B #include <unistd.h>
-.PP
-.B pid_t gettid(void);
-.fi
-.SH DESCRIPTION
-.BR gettid ()
-returns the caller's thread ID (TID).
-In a single-threaded process, the thread ID
-is equal to the process ID (PID, as returned by
-.BR getpid (2)).
-In a multithreaded process, all threads
-have the same PID, but each one has a unique TID.
-For further details, see the discussion of
-.B CLONE_THREAD
-in
-.BR clone (2).
-.SH RETURN VALUE
-On success, returns the thread ID of the calling thread.
-.SH ERRORS
-This call is always successful.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.4.11,
-glibc 2.30.
-.SH NOTES
-The thread ID returned by this call is not the same thing as a
-POSIX thread ID (i.e., the opaque value returned by
-.BR pthread_self (3)).
-.PP
-In a new thread group created by a
-.BR clone (2)
-call that does not specify the
-.B CLONE_THREAD
-flag (or, equivalently, a new process created by
-.BR fork (2)),
-the new process is a thread group leader,
-and its thread group ID (the value returned by
-.BR getpid (2))
-is the same as its thread ID (the value returned by
-.BR gettid ()).
-.SH SEE ALSO
-.BR capget (2),
-.BR clone (2),
-.BR fcntl (2),
-.BR fork (2),
-.BR get_robust_list (2),
-.BR getpid (2),
-.\" .BR kcmp (2),
-.BR ioprio_set (2),
-.\" .BR move_pages (2),
-.\" .BR migrate_pages (2),
-.BR perf_event_open (2),
-.\" .BR process_vm_readv (2),
-.\" .BR ptrace (2),
-.BR sched_setaffinity (2),
-.BR sched_setparam (2),
-.BR sched_setscheduler (2),
-.BR tgkill (2),
-.BR timer_create (2)
diff --git a/man2/gettimeofday.2 b/man2/gettimeofday.2
deleted file mode 100644
index 9d134fa49..000000000
--- a/man2/gettimeofday.2
+++ /dev/null
@@ -1,285 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt (michael@moria.de)
-.\" Modified 1993-07-23 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 1994-08-21 by Michael Chastain (mec@shell.portal.com):
-.\" Fixed necessary '#include' lines.
-.\" Modified 1995-04-15 by Michael Chastain (mec@shell.portal.com):
-.\" Added reference to adjtimex.
-.\" Removed some nonsense lines pointed out by Urs Thuermann,
-.\" (urs@isnogud.escape.de), aeb, 950722.
-.\" Modified 1997-01-14 by Austin Donnelly (and1000@debian.org):
-.\" Added return values section, and bit on EFAULT
-.\" Added clarification on timezone, aeb, 971210.
-.\" Removed "#include <unistd.h>", aeb, 010316.
-.\" Modified, 2004-05-27 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirement.
-.\"
-.TH gettimeofday 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-gettimeofday, settimeofday \- get / set time
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/time.h>
-.PP
-.BI "int gettimeofday(struct timeval *restrict " tv ,
-.BI " struct timezone *_Nullable restrict " tz );
-.BI "int settimeofday(const struct timeval *" tv ,
-.BI " const struct timezone *_Nullable " tz );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR settimeofday ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The functions
-.BR gettimeofday ()
-and
-.BR settimeofday ()
-can get and set the time as well as a timezone.
-.PP
-The
-.I tv
-argument is a
-.I struct timeval
-(as specified in
-.IR <sys/time.h> ):
-.PP
-.in +4n
-.EX
-struct timeval {
- time_t tv_sec; /* seconds */
- suseconds_t tv_usec; /* microseconds */
-};
-.EE
-.in
-.PP
-and gives the number of seconds and microseconds since the Epoch (see
-.BR time (2)).
-.PP
-The
-.I tz
-argument is a
-.IR "struct timezone" :
-.PP
-.in +4n
-.EX
-struct timezone {
- int tz_minuteswest; /* minutes west of Greenwich */
- int tz_dsttime; /* type of DST correction */
-};
-.EE
-.in
-.PP
-If either
-.I tv
-or
-.I tz
-is NULL, the corresponding structure is not set or returned.
-.\" FIXME . The compilation warning looks to be going away in glibc 2.17
-.\" see glibc commit 4b7634a5e03b0da6f8875de9d3f74c1cf6f2a6e8
-(However, compilation warnings will result if
-.I tv
-is NULL.)
-.\" The following is covered under EPERM below:
-.\" .PP
-.\" Only the superuser may use
-.\" .BR settimeofday ().
-.PP
-The use of the
-.I timezone
-structure is obsolete; the
-.I tz
-argument should normally be specified as NULL.
-(See NOTES below.)
-.PP
-Under Linux, there are some peculiar "warp clock" semantics associated
-with the
-.BR settimeofday ()
-system call if on the very first call (after booting)
-that has a non-NULL
-.I tz
-argument, the
-.I tv
-argument is NULL and the
-.I tz_minuteswest
-field is nonzero.
-(The
-.I tz_dsttime
-field should be zero for this case.)
-In such a case it is assumed that the CMOS clock
-is on local time, and that it has to be incremented by this amount
-to get UTC system time.
-No doubt it is a bad idea to use this feature.
-.SH RETURN VALUE
-.BR gettimeofday ()
-and
-.BR settimeofday ()
-return 0 for success.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-One of
-.I tv
-or
-.I tz
-pointed outside the accessible address space.
-.TP
-.B EINVAL
-.RB ( settimeofday ()):
-.I timezone
-is invalid.
-.TP
-.B EINVAL
-.RB ( settimeofday ()):
-.I tv.tv_sec
-is negative or
-.I tv.tv_usec
-is outside the range [0, 999,999].
-.TP
-.BR EINVAL " (since Linux 4.3)"
-.\" commit e1d7ba8735551ed79c7a0463a042353574b96da3
-.RB ( settimeofday ()):
-An attempt was made to set the time to a value less than
-the current value of the
-.B CLOCK_MONOTONIC
-clock (see
-.BR clock_gettime (2)).
-.TP
-.B EPERM
-The calling process has insufficient privilege to call
-.BR settimeofday ();
-under Linux the
-.B CAP_SYS_TIME
-capability is required.
-.SH VERSIONS
-.SS C library/kernel differences
-On some architectures, an implementation of
-.BR gettimeofday ()
-is provided in the
-.BR vdso (7).
-.SH STANDARDS
-.TP
-.BR gettimeofday ()
-POSIX.1-2008 (obsolete).
-.TP
-.BR settimeofday ()
-None.
-.SH HISTORY
-SVr4, 4.3BSD.
-POSIX.1-2001 describes
-.BR gettimeofday ()
-but not
-.BR settimeofday ().
-POSIX.1-2008 marks
-.BR gettimeofday ()
-as obsolete, recommending the use of
-.BR clock_gettime (2)
-instead.
-.PP
-Traditionally, the fields of
-.I struct timeval
-were of type
-.IR long .
-.\"
-.SS The tz_dsttime field
-On a non-Linux kernel, with glibc, the
-.I tz_dsttime
-field of
-.I struct timezone
-will be set to a nonzero value by
-.BR gettimeofday ()
-if the current timezone has ever had or will have a daylight saving
-rule applied.
-In this sense it exactly mirrors the meaning of
-.BR daylight (3)
-for the current zone.
-On Linux, with glibc, the setting of the
-.I tz_dsttime
-field of
-.I struct timezone
-has never been used by
-.BR settimeofday ()
-or
-.BR gettimeofday ().
-.\" it has not
-.\" been and will not be supported by libc or glibc.
-.\" Each and every occurrence of this field in the kernel source
-.\" (other than the declaration) is a bug.
-Thus, the following is purely of historical interest.
-.PP
-On old systems, the field
-.I tz_dsttime
-contains a symbolic constant (values are given below)
-that indicates in which part of the year Daylight Saving Time
-is in force.
-(Note: this value is constant throughout the year:
-it does not indicate that DST is in force, it just selects an
-algorithm.)
-The daylight saving time algorithms defined are as follows:
-.PP
-.in +4n
-.EX
-\fBDST_NONE\fP /* not on DST */
-\fBDST_USA\fP /* USA style DST */
-\fBDST_AUST\fP /* Australian style DST */
-\fBDST_WET\fP /* Western European DST */
-\fBDST_MET\fP /* Middle European DST */
-\fBDST_EET\fP /* Eastern European DST */
-\fBDST_CAN\fP /* Canada */
-\fBDST_GB\fP /* Great Britain and Eire */
-\fBDST_RUM\fP /* Romania */
-\fBDST_TUR\fP /* Turkey */
-\fBDST_AUSTALT\fP /* Australian style with shift in 1986 */
-.EE
-.in
-.PP
-Of course it turned out that the period in which
-Daylight Saving Time is in force cannot be given
-by a simple algorithm, one per country; indeed,
-this period is determined by unpredictable political
-decisions.
-So this method of representing timezones
-has been abandoned.
-.SH NOTES
-The time returned by
-.BR gettimeofday ()
-.I is
-affected by discontinuous jumps in the system time
-(e.g., if the system administrator manually changes the system time).
-If you need a monotonically increasing clock, see
-.BR clock_gettime (2).
-.PP
-Macros for operating on
-.I timeval
-structures are described in
-.BR timeradd (3).
-.SH SEE ALSO
-.BR date (1),
-.BR adjtimex (2),
-.BR clock_gettime (2),
-.BR time (2),
-.BR ctime (3),
-.BR ftime (3),
-.BR timeradd (3),
-.BR capabilities (7),
-.BR time (7),
-.BR vdso (7),
-.BR hwclock (8)
diff --git a/man2/getuid.2 b/man2/getuid.2
deleted file mode 100644
index a5f3d6fe5..000000000
--- a/man2/getuid.2
+++ /dev/null
@@ -1,80 +0,0 @@
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Historical remark, aeb, 2004-06-05
-.TH getuid 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getuid, geteuid \- get user identity
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.B uid_t getuid(void);
-.B uid_t geteuid(void);
-.fi
-.SH DESCRIPTION
-.BR getuid ()
-returns the real user ID of the calling process.
-.PP
-.BR geteuid ()
-returns the effective user ID of the calling process.
-.SH ERRORS
-These functions are always successful
-and never modify
-.\" https://www.austingroupbugs.net/view.php?id=511
-.\" 0000511: getuid and friends should not modify errno
-.IR errno .
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, 4.3BSD.
-.PP
-In UNIX\ V6 the
-.BR getuid ()
-call returned
-.IR "(euid << 8) + uid" .
-UNIX\ V7 introduced separate calls
-.BR getuid ()
-and
-.BR geteuid ().
-.PP
-The original Linux
-.BR getuid ()
-and
-.BR geteuid ()
-system calls supported only 16-bit user IDs.
-Subsequently, Linux 2.4 added
-.BR getuid32 ()
-and
-.BR geteuid32 (),
-supporting 32-bit IDs.
-The glibc
-.BR getuid ()
-and
-.BR geteuid ()
-wrapper functions transparently deal with the variations across kernel versions.
-.PP
-On Alpha, instead of a pair of
-.BR getuid ()
-and
-.BR geteuid ()
-system calls, a single
-.BR getxuid ()
-system call is provided, which returns a pair of real and effective UIDs.
-The glibc
-.BR getuid ()
-and
-.BR geteuid ()
-wrapper functions transparently deal with this.
-See
-.BR syscall (2)
-for details regarding register mapping.
-.SH SEE ALSO
-.BR getresuid (2),
-.BR setreuid (2),
-.BR setuid (2),
-.BR credentials (7)
diff --git a/man2/getuid32.2 b/man2/getuid32.2
deleted file mode 100644
index 165cfe1d0..000000000
--- a/man2/getuid32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getuid.2
diff --git a/man2/getunwind.2 b/man2/getunwind.2
deleted file mode 100644
index 1a2cc3ebc..000000000
--- a/man2/getunwind.2
+++ /dev/null
@@ -1,87 +0,0 @@
-.\" Copyright (C) 2006 Red Hat, Inc. All Rights Reserved.
-.\" Written by Marcela Maslanova <mmaslano@redhat.com>
-.\" and Copyright 2013, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH getunwind 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getunwind \- copy the unwind data to caller's buffer
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <linux/unwind.h>
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "[[deprecated]] long syscall(SYS_getunwind, void " buf [. buf_size ],
-.BI " size_t " buf_size );
-.fi
-.SH DESCRIPTION
-.I Note: this system call is obsolete.
-.PP
-The
-IA-64-specific
-.BR getunwind ()
-system call copies the kernel's call frame
-unwind data into the buffer pointed to by
-.I buf
-and returns the size of the unwind data;
-this data describes the gate page (kernel code that
-is mapped into user space).
-.PP
-The size of the buffer
-.I buf
-is specified in
-.IR buf_size .
-The data is copied only if
-.I buf_size
-is greater than or equal to the size of the unwind data and
-.I buf
-is not NULL;
-otherwise, no data is copied, and the call succeeds,
-returning the size that would be needed to store the unwind data.
-.PP
-The first part of the unwind data contains an unwind table.
-The rest contains the associated unwind information, in no particular order.
-The unwind table contains entries of the following form:
-.PP
-.in +4n
-.EX
-u64 start; (64\-bit address of start of function)
-u64 end; (64\-bit address of end of function)
-u64 info; (BUF\-relative offset to unwind info)
-.EE
-.in
-.PP
-An entry whose
-.I start
-value is zero indicates the end of the table.
-For more information about the format, see the
-.I IA-64 Software Conventions and Runtime Architecture
-manual.
-.SH RETURN VALUE
-On success,
-.BR getunwind ()
-returns the size of the unwind data.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.BR getunwind ()
-fails with the error
-.B EFAULT
-if the unwind info can't be stored in the space specified by
-.IR buf .
-.SH STANDARDS
-Linux on IA-64.
-.SH HISTORY
-Linux 2.4.
-.PP
-This system call has been deprecated.
-The modern way to obtain the kernel's unwind data is via the
-.BR vdso (7).
-.SH SEE ALSO
-.BR getauxval (3)
diff --git a/man2/getxattr.2 b/man2/getxattr.2
deleted file mode 100644
index ab8342181..000000000
--- a/man2/getxattr.2
+++ /dev/null
@@ -1,144 +0,0 @@
-.\" Copyright (C) Andreas Gruenbacher, February 2001
-.\" Copyright (C) Silicon Graphics Inc, September 2001
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH getxattr 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getxattr, lgetxattr, fgetxattr \- retrieve an extended attribute value
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/xattr.h>
-.PP
-.BI "ssize_t getxattr(const char *" path ", const char *" name ,
-.BI " void " value [. size "], size_t " size );
-.BI "ssize_t lgetxattr(const char *" path ", const char *" name ,
-.BI " void " value [. size "], size_t " size );
-.BI "ssize_t fgetxattr(int " fd ", const char *" name ,
-.BI " void " value [. size "], size_t " size );
-.fi
-.SH DESCRIPTION
-Extended attributes are
-.IR name :\c
-.I value
-pairs associated with inodes (files, directories, symbolic links, etc.).
-They are extensions to the normal attributes which are associated
-with all inodes in the system (i.e., the
-.BR stat (2)
-data).
-A complete overview of extended attributes concepts can be found in
-.BR xattr (7).
-.PP
-.BR getxattr ()
-retrieves the value of the extended attribute identified by
-.I name
-and associated with the given
-.I path
-in the filesystem.
-The attribute value is placed in the buffer pointed to by
-.IR value ;
-.I size
-specifies the size of that buffer.
-The return value of the call is the number of bytes placed in
-.IR value .
-.PP
-.BR lgetxattr ()
-is identical to
-.BR getxattr (),
-except in the case of a symbolic link, where the link itself is
-interrogated, not the file that it refers to.
-.PP
-.BR fgetxattr ()
-is identical to
-.BR getxattr (),
-only the open file referred to by
-.I fd
-(as returned by
-.BR open (2))
-is interrogated in place of
-.IR path .
-.PP
-An extended attribute
-.I name
-is a null-terminated string.
-The name includes a namespace prefix; there may be several, disjoint
-namespaces associated with an individual inode.
-The value of an extended attribute is a chunk of arbitrary textual or
-binary data that was assigned using
-.BR setxattr (2).
-.PP
-If
-.I size
-is specified as zero, these calls return the current size of the
-named extended attribute (and leave
-.I value
-unchanged).
-This can be used to determine the size of the buffer that
-should be supplied in a subsequent call.
-(But, bear in mind that there is a possibility that the
-attribute value may change between the two calls,
-so that it is still necessary to check the return status
-from the second call.)
-.SH RETURN VALUE
-On success, these calls return a nonnegative value which is
-the size (in bytes) of the extended attribute value.
-On failure, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B E2BIG
-The size of the attribute value is larger than the maximum size allowed; the
-attribute cannot be retrieved.
-This can happen on filesystems that support
-very large attribute values such as NFSv4, for example.
-.TP
-.B ENODATA
-The named attribute does not exist, or the process has no access to
-this attribute.
-.\" .RB ( ENOATTR
-.\" is defined to be a synonym for
-.\" .BR ENODATA
-.\" in
-.\" .IR <attr/attributes.h> .)
-.TP
-.B ENOTSUP
-Extended attributes are not supported by the filesystem, or are disabled.
-.TP
-.B ERANGE
-The
-.I size
-of the
-.I value
-buffer is too small to hold the result.
-.PP
-In addition, the errors documented in
-.BR stat (2)
-can also occur.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.4,
-glibc 2.3.
-.\" .SH AUTHORS
-.\" Andreas Gruenbacher,
-.\" .RI < a.gruenbacher@computer.org >
-.\" and the SGI XFS development team,
-.\" .RI < linux-xfs@oss.sgi.com >.
-.\" Please send any bug reports or comments to these addresses.
-.SH EXAMPLES
-See
-.BR listxattr (2).
-.SH SEE ALSO
-.BR getfattr (1),
-.BR setfattr (1),
-.BR listxattr (2),
-.BR open (2),
-.BR removexattr (2),
-.BR setxattr (2),
-.BR stat (2),
-.BR symlink (7),
-.BR xattr (7)
diff --git a/man2/gtty.2 b/man2/gtty.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/gtty.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/idle.2 b/man2/idle.2
deleted file mode 100644
index 689183025..000000000
--- a/man2/idle.2
+++ /dev/null
@@ -1,44 +0,0 @@
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
-.\" Portions extracted from linux/mm/swap.c:
-.\" Copyright (C) 1991, 1992 Linus Torvalds
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 21 Aug 1994 by Michael Chastain <mec@shell.portal.com>:
-.\" Added text about calling restriction (new in Linux 1.1.20 I believe).
-.\" N.B. calling "idle" from user process used to hang process!
-.\" Modified Thu Oct 31 14:41:15 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" "
-.TH idle 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-idle \- make process 0 idle
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.B [[deprecated]] int idle(void);
-.fi
-.SH DESCRIPTION
-.BR idle ()
-is an internal system call used during bootstrap.
-It marks the process's pages as swappable, lowers its priority,
-and enters the main scheduling loop.
-.BR idle ()
-never returns.
-.PP
-Only process 0 may call
-.BR idle ().
-Any user process, even a process with superuser permission,
-will receive
-.BR EPERM .
-.SH RETURN VALUE
-.BR idle ()
-never returns for process 0, and always returns \-1 for a user process.
-.SH ERRORS
-.TP
-.B EPERM
-Always, for a user process.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Removed in Linux 2.3.13.
diff --git a/man2/inb.2 b/man2/inb.2
deleted file mode 100644
index 2c63c7549..000000000
--- a/man2/inb.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/outb.2
diff --git a/man2/inb_p.2 b/man2/inb_p.2
deleted file mode 100644
index 2c63c7549..000000000
--- a/man2/inb_p.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/outb.2
diff --git a/man2/init_module.2 b/man2/init_module.2
deleted file mode 100644
index 8d4831abb..000000000
--- a/man2/init_module.2
+++ /dev/null
@@ -1,342 +0,0 @@
-.\" Copyright (C) 2012 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" A few fragments remain from a version
-.\" Copyright (C) 1996 Free Software Foundation, Inc.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH init_module 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-init_module, finit_module \- load a kernel module
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/module.h>" " /* Definition of " MODULE_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_init_module, void " module_image [. len "], \
-unsigned long " len ,
-.BI " const char *" param_values );
-.BI "int syscall(SYS_finit_module, int " fd ,
-.BI " const char *" param_values ", int " flags );
-.fi
-.PP
-.IR Note :
-glibc provides no wrappers for these system calls,
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-.BR init_module ()
-loads an ELF image into kernel space,
-performs any necessary symbol relocations,
-initializes module parameters to values provided by the caller,
-and then runs the module's
-.I init
-function.
-This system call requires privilege.
-.PP
-The
-.I module_image
-argument points to a buffer containing the binary image
-to be loaded;
-.I len
-specifies the size of that buffer.
-The module image should be a valid ELF image, built for the running kernel.
-.PP
-The
-.I param_values
-argument is a string containing space-delimited specifications of the
-values for module parameters (defined inside the module using
-.BR module_param ()
-and
-.BR module_param_array ()).
-The kernel parses this string and initializes the specified
-parameters.
-Each of the parameter specifications has the form:
-.PP
-.RI " " name [\c
-.BI = value\c
-.RB [ ,\c
-.IR value ...]]
-.PP
-The parameter
-.I name
-is one of those defined within the module using
-.IR module_param ()
-(see the Linux kernel source file
-.IR include/linux/moduleparam.h ).
-The parameter
-.I value
-is optional in the case of
-.I bool
-and
-.I invbool
-parameters.
-Values for array parameters are specified as a comma-separated list.
-.SS finit_module()
-The
-.BR finit_module ()
-.\" commit 34e1169d996ab148490c01b65b4ee371cf8ffba2
-.\" https://lwn.net/Articles/519010/
-system call is like
-.BR init_module (),
-but reads the module to be loaded from the file descriptor
-.IR fd .
-It is useful when the authenticity of a kernel module
-can be determined from its location in the filesystem;
-in cases where that is possible,
-the overhead of using cryptographically signed modules to
-determine the authenticity of a module can be avoided.
-The
-.I param_values
-argument is as for
-.BR init_module ().
-.PP
-The
-.I flags
-argument modifies the operation of
-.BR finit_module ().
-It is a bit mask value created by ORing
-together zero or more of the following flags:
-.\" commit 2f3238aebedb243804f58d62d57244edec4149b2
-.TP
-.B MODULE_INIT_IGNORE_MODVERSIONS
-Ignore symbol version hashes.
-.TP
-.B MODULE_INIT_IGNORE_VERMAGIC
-Ignore kernel version magic.
-.PP
-There are some safety checks built into a module to ensure that
-it matches the kernel against which it is loaded.
-.\" http://www.tldp.org/HOWTO/Module-HOWTO/basekerncompat.html
-.\" is dated, but informative
-These checks are recorded when the module is built and
-verified when the module is loaded.
-First, the module records a "vermagic" string containing
-the kernel version number and prominent features (such as the CPU type).
-Second, if the module was built with the
-.B CONFIG_MODVERSIONS
-configuration option enabled,
-a version hash is recorded for each symbol the module uses.
-This hash is based on the types of the arguments and return value
-for the function named by the symbol.
-In this case, the kernel version number within the
-"vermagic" string is ignored,
-as the symbol version hashes are assumed to be sufficiently reliable.
-.PP
-Using the
-.B MODULE_INIT_IGNORE_VERMAGIC
-flag indicates that the "vermagic" string is to be ignored, and the
-.B MODULE_INIT_IGNORE_MODVERSIONS
-flag indicates that the symbol version hashes are to be ignored.
-If the kernel is built to permit forced loading (i.e., configured with
-.BR CONFIG_MODULE_FORCE_LOAD ),
-then loading continues, otherwise it fails with the error
-.B ENOEXEC
-as expected for malformed modules.
-.SH RETURN VALUE
-On success, these system calls return 0.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.BR EBADMSG " (since Linux 3.7)"
-Module signature is misformatted.
-.TP
-.B EBUSY
-Timeout while trying to resolve a symbol reference by this module.
-.TP
-.B EFAULT
-An address argument referred to a location that
-is outside the process's accessible address space.
-.TP
-.BR ENOKEY " (since Linux 3.7)"
-.\" commit 48ba2462ace6072741fd8d0058207d630ce93bf1
-.\" commit 1d0059f3a468825b5fc5405c636a2f6e02707ffa
-.\" commit 106a4ee258d14818467829bf0e12aeae14c16cd7
-Module signature is invalid or
-the kernel does not have a key for this module.
-This error is returned only if the kernel was configured with
-.BR CONFIG_MODULE_SIG_FORCE ;
-if the kernel was not configured with this option,
-then an invalid or unsigned module simply taints the kernel.
-.TP
-.B ENOMEM
-Out of memory.
-.TP
-.B EPERM
-The caller was not privileged
-(did not have the
-.B CAP_SYS_MODULE
-capability),
-or module loading is disabled
-(see
-.I /proc/sys/kernel/modules_disabled
-in
-.BR proc (5)).
-.PP
-The following errors may additionally occur for
-.BR init_module ():
-.TP
-.B EEXIST
-A module with this name is already loaded.
-.TP
-.B EINVAL
-.I param_values
-is invalid, or some part of the ELF image in
-.I module_image
-contains inconsistencies.
-.\" .TP
-.\" .BR EINVAL " (Linux 2.4 and earlier)"
-.\" Some
-.\" .I image
-.\" slot is filled in incorrectly,
-.\" .I image\->name
-.\" does not correspond to the original module name, some
-.\" .I image\->deps
-.\" entry does not correspond to a loaded module,
-.\" or some other similar inconsistency.
-.TP
-.B ENOEXEC
-The binary image supplied in
-.I module_image
-is not an ELF image,
-or is an ELF image that is invalid or for a different architecture.
-.PP
-The following errors may additionally occur for
-.BR finit_module ():
-.TP
-.B EBADF
-The file referred to by
-.I fd
-is not opened for reading.
-.TP
-.B EFBIG
-The file referred to by
-.I fd
-is too large.
-.TP
-.B EINVAL
-.I flags
-is invalid.
-.TP
-.B ENOEXEC
-.I fd
-does not refer to an open file.
-.TP
-.BR ETXTBSY " (since Linux 4.7)"
-.\" commit 39d637af5aa7577f655c58b9e55587566c63a0af
-The file referred to by
-.I fd
-is opened for read-write.
-.PP
-In addition to the above errors, if the module's
-.I init
-function is executed and returns an error, then
-.BR init_module ()
-or
-.BR finit_module ()
-fails and
-.I errno
-is set to the value returned by the
-.I init
-function.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-.TP
-.BR finit_module ()
-Linux 3.8.
-.PP
-The
-.BR init_module ()
-system call is not supported by glibc.
-No declaration is provided in glibc headers, but, through a quirk of history,
-glibc versions before glibc 2.23 did export an ABI for this system call.
-Therefore, in order to employ this system call,
-it is (before glibc 2.23) sufficient to
-manually declare the interface in your code;
-alternatively, you can invoke the system call using
-.BR syscall (2).
-.SS Linux 2.4 and earlier
-In Linux 2.4 and earlier, the
-.BR init_module ()
-system call was rather different:
-.PP
-.B " #include <linux/module.h>"
-.PP
-.BI " int init_module(const char *" name ", struct module *" image );
-.PP
-(User-space applications can detect which version of
-.BR init_module ()
-is available by calling
-.BR query_module ();
-the latter call fails with the error
-.B ENOSYS
-on Linux 2.6 and later.)
-.PP
-The older version of the system call
-loads the relocated module image pointed to by
-.I image
-into kernel space and runs the module's
-.I init
-function.
-The caller is responsible for providing the relocated image (since
-Linux 2.6, the
-.BR init_module ()
-system call does the relocation).
-.PP
-The module image begins with a module structure and is followed by
-code and data as appropriate.
-Since Linux 2.2, the module structure is defined as follows:
-.PP
-.in +4n
-.EX
-struct module {
- unsigned long size_of_struct;
- struct module *next;
- const char *name;
- unsigned long size;
- long usecount;
- unsigned long flags;
- unsigned int nsyms;
- unsigned int ndeps;
- struct module_symbol *syms;
- struct module_ref *deps;
- struct module_ref *refs;
- int (*init)(void);
- void (*cleanup)(void);
- const struct exception_table_entry *ex_table_start;
- const struct exception_table_entry *ex_table_end;
-#ifdef __alpha__
- unsigned long gp;
-#endif
-};
-.EE
-.in
-.PP
-All of the pointer fields, with the exception of
-.I next
-and
-.IR refs ,
-are expected to point within the module body and be
-initialized as appropriate for kernel space, that is, relocated with
-the rest of the module.
-.SH NOTES
-Information about currently loaded modules can be found in
-.I /proc/modules
-and in the file trees under the per-module subdirectories under
-.IR /sys/module .
-.PP
-See the Linux kernel source file
-.I include/linux/module.h
-for some useful background information.
-.SH SEE ALSO
-.BR create_module (2),
-.BR delete_module (2),
-.BR query_module (2),
-.BR lsmod (8),
-.BR modprobe (8)
diff --git a/man2/inl.2 b/man2/inl.2
deleted file mode 100644
index 2c63c7549..000000000
--- a/man2/inl.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/outb.2
diff --git a/man2/inl_p.2 b/man2/inl_p.2
deleted file mode 100644
index 2c63c7549..000000000
--- a/man2/inl_p.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/outb.2
diff --git a/man2/inotify_add_watch.2 b/man2/inotify_add_watch.2
deleted file mode 100644
index 548d7c924..000000000
--- a/man2/inotify_add_watch.2
+++ /dev/null
@@ -1,135 +0,0 @@
-.\" Copyright (C) 2005 Robert Love
-.\" and Copyright, 2006 Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 2005-07-19 Robert Love <rlove@rlove.org> - initial version
-.\" 2006-02-07 mtk, various changes
-.\"
-.TH inotify_add_watch 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-inotify_add_watch \- add a watch to an initialized inotify instance
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/inotify.h>
-.PP
-.BI "int inotify_add_watch(int " fd ", const char *" pathname ", uint32_t " mask );
-.fi
-.SH DESCRIPTION
-.BR inotify_add_watch ()
-adds a new watch, or modifies an existing watch,
-for the file whose location is specified in
-.IR pathname ;
-the caller must have read permission for this file.
-The
-.I fd
-argument is a file descriptor referring to the
-inotify instance whose watch list is to be modified.
-The events to be monitored for
-.I pathname
-are specified in the
-.I mask
-bit-mask argument.
-See
-.BR inotify (7)
-for a description of the bits that can be set in
-.IR mask .
-.PP
-A successful call to
-.BR inotify_add_watch ()
-returns a unique watch descriptor for this inotify instance,
-for the filesystem object (inode) that corresponds to
-.IR pathname .
-If the filesystem object
-was not previously being watched by this inotify instance,
-then the watch descriptor is newly allocated.
-If the filesystem object was already being watched
-(perhaps via a different link to the same object), then the descriptor
-for the existing watch is returned.
-.PP
-The watch descriptor is returned by later
-.BR read (2)s
-from the inotify file descriptor.
-These reads fetch
-.I inotify_event
-structures (see
-.BR inotify (7))
-indicating filesystem events;
-the watch descriptor inside this structure identifies
-the object for which the event occurred.
-.SH RETURN VALUE
-On success,
-.BR inotify_add_watch ()
-returns a watch descriptor (a nonnegative integer).
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-Read access to the given file is not permitted.
-.TP
-.B EBADF
-The given file descriptor is not valid.
-.TP
-.B EEXIST
-.I mask
-contains
-.B IN_MASK_CREATE
-and
-.I pathname
-refers to a file already being watched by the same
-.IR fd .
-.TP
-.B EFAULT
-.I pathname
-points outside of the process's accessible address space.
-.TP
-.B EINVAL
-The given event mask contains no valid events; or
-.I mask
-contains both
-.B IN_MASK_ADD
-and
-.BR IN_MASK_CREATE ;
-or
-.I fd
-is not an inotify file descriptor.
-.TP
-.B ENAMETOOLONG
-.I pathname
-is too long.
-.TP
-.B ENOENT
-A directory component in
-.I pathname
-does not exist or is a dangling symbolic link.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOSPC
-The user limit on the total number of inotify watches was reached or the
-kernel failed to allocate a needed resource.
-.TP
-.B ENOTDIR
-.I mask
-contains
-.B IN_ONLYDIR
-and
-.I pathname
-is not a directory.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.13.
-.SH EXAMPLES
-See
-.BR inotify (7).
-.SH SEE ALSO
-.BR inotify_init (2),
-.BR inotify_rm_watch (2),
-.BR inotify (7)
diff --git a/man2/inotify_init.2 b/man2/inotify_init.2
deleted file mode 100644
index cce298f6a..000000000
--- a/man2/inotify_init.2
+++ /dev/null
@@ -1,97 +0,0 @@
-.\" Copyright (C) 2005 Robert Love
-.\" and Copyright (C) 2008, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 2005-07-19 Robert Love <rlove@rlove.org> - initial version
-.\" 2006-02-07 mtk, minor changes
-.\" 2008-10-10 mtk: add description of inotify_init1()
-.\"
-.TH inotify_init 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-inotify_init, inotify_init1 \- initialize an inotify instance
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/inotify.h>
-.PP
-.B "int inotify_init(void);"
-.BI "int inotify_init1(int " flags );
-.fi
-.SH DESCRIPTION
-For an overview of the inotify API, see
-.BR inotify (7).
-.PP
-.BR inotify_init ()
-initializes a new inotify instance and returns a file descriptor associated
-with a new inotify event queue.
-.PP
-If
-.I flags
-is 0, then
-.BR inotify_init1 ()
-is the same as
-.BR inotify_init ().
-The following values can be bitwise ORed in
-.I flags
-to obtain different behavior:
-.TP
-.B IN_NONBLOCK
-Set the
-.B O_NONBLOCK
-file status flag on the open file description (see
-.BR open (2))
-referred to by the new file descriptor.
-Using this flag saves extra calls to
-.BR fcntl (2)
-to achieve the same result.
-.TP
-.B IN_CLOEXEC
-Set the close-on-exec
-.RB ( FD_CLOEXEC )
-flag on the new file descriptor.
-See the description of the
-.B O_CLOEXEC
-flag in
-.BR open (2)
-for reasons why this may be useful.
-.SH RETURN VALUE
-On success, these system calls return a new file descriptor.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.RB ( inotify_init1 ())
-An invalid value was specified in
-.IR flags .
-.TP
-.B EMFILE
-The user limit on the total number of inotify instances has been reached.
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOMEM
-Insufficient kernel memory is available.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-.TP
-.BR inotify_init ()
-Linux 2.6.13,
-glibc 2.4.
-.TP
-.BR inotify_init1 ()
-Linux 2.6.27,
-glibc 2.9.
-.SH SEE ALSO
-.BR inotify_add_watch (2),
-.BR inotify_rm_watch (2),
-.BR inotify (7)
diff --git a/man2/inotify_init1.2 b/man2/inotify_init1.2
deleted file mode 100644
index 62c5b44e6..000000000
--- a/man2/inotify_init1.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/inotify_init.2
diff --git a/man2/inotify_rm_watch.2 b/man2/inotify_rm_watch.2
deleted file mode 100644
index e3dddf905..000000000
--- a/man2/inotify_rm_watch.2
+++ /dev/null
@@ -1,60 +0,0 @@
-.\" Copyright (C) 2005 Robert Love
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 2005-07-19 Robert Love <rlove@rlove.org> - initial version
-.\" 2006-02-07 mtk, minor changes
-.\"
-.TH inotify_rm_watch 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-inotify_rm_watch \- remove an existing watch from an inotify instance
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/inotify.h>
-.PP
-.BI "int inotify_rm_watch(int " fd ", int " wd );
-.\" Before glibc 2.10, the second argument was types as uint32_t.
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=7040
-.fi
-.SH DESCRIPTION
-.BR inotify_rm_watch ()
-removes the watch associated with the watch descriptor
-.I wd
-from the inotify instance associated with the file descriptor
-.IR fd .
-.PP
-Removing a watch causes an
-.B IN_IGNORED
-event to be generated for this watch descriptor.
-(See
-.BR inotify (7).)
-.SH RETURN VALUE
-On success,
-.BR inotify_rm_watch ()
-returns zero.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor.
-.TP
-.B EINVAL
-The watch descriptor
-.I wd
-is not valid; or
-.I fd
-is not an inotify file descriptor.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.13.
-.SH SEE ALSO
-.BR inotify_add_watch (2),
-.BR inotify_init (2),
-.BR inotify (7)
diff --git a/man2/insb.2 b/man2/insb.2
deleted file mode 100644
index 2c63c7549..000000000
--- a/man2/insb.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/outb.2
diff --git a/man2/insl.2 b/man2/insl.2
deleted file mode 100644
index 2c63c7549..000000000
--- a/man2/insl.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/outb.2
diff --git a/man2/insw.2 b/man2/insw.2
deleted file mode 100644
index 2c63c7549..000000000
--- a/man2/insw.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/outb.2
diff --git a/man2/intro.2 b/man2/intro.2
deleted file mode 100644
index 27f2c2802..000000000
--- a/man2/intro.2
+++ /dev/null
@@ -1,115 +0,0 @@
-.\" Copyright (C) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2007-10-23 mtk: moved the _syscallN specific material to the
-.\" new _syscall(2) page, and substantially enhanced and rewrote
-.\" the remaining material on this page.
-.\"
-.TH intro 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-intro \- introduction to system calls
-.SH DESCRIPTION
-Section 2 of the manual describes the Linux system calls.
-A system call is an entry point into the Linux kernel.
-Usually, system calls are not invoked directly:
-instead, most system calls have corresponding C library
-wrapper functions which perform the steps required
-(e.g., trapping to kernel mode) in order to invoke
-the system call.
-Thus, making a system call looks the same as invoking a normal
-library function.
-.PP
-In many cases, the C library wrapper function does nothing more than:
-.IP \[bu] 3
-copying arguments and the unique system call number to the
-registers where the kernel expects them;
-.IP \[bu]
-trapping to kernel mode,
-at which point the kernel does the real work of the system call;
-.IP \[bu]
-setting
-.I errno
-if the system call returns an error number when the kernel returns the
-CPU to user mode.
-.PP
-However, in a few cases, a wrapper function may do rather more than this,
-for example, performing some preprocessing
-of the arguments before trapping to kernel mode,
-or postprocessing of values returned by the system call.
-Where this is the case, the manual pages in Section 2 generally
-try to note the details of both the (usually GNU) C library API
-interface and the raw system call.
-Most commonly, the main DESCRIPTION will focus on the C library interface,
-and differences for the system call are covered in the NOTES section.
-.PP
-For a list of the Linux system calls, see
-.BR syscalls (2).
-.SH RETURN VALUE
-On error, most system calls return a negative error number
-(i.e., the negated value of one of the constants described in
-.BR errno (3)).
-The C library wrapper hides this detail from the caller: when a
-system call returns a negative value, the wrapper copies the
-absolute value into the
-.I errno
-variable, and returns \-1 as the return value of the wrapper.
-.PP
-The value returned by a successful system call depends on the call.
-Many system calls return 0 on success, but some can return nonzero
-values from a successful call.
-The details are described in the individual manual pages.
-.PP
-In some cases,
-the programmer must define a feature test macro in order to obtain
-the declaration of a system call from the header file specified
-in the man page SYNOPSIS section.
-(Where required, these feature test macros must be defined before including
-.I any
-header files.)
-In such cases, the required macro is described in the man page.
-For further information on feature test macros, see
-.BR feature_test_macros (7).
-.SH STANDARDS
-Certain terms and abbreviations are used to indicate UNIX variants
-and standards to which calls in this section conform.
-See
-.BR standards (7).
-.SH NOTES
-.SS Calling directly
-In most cases, it is unnecessary to invoke a system call directly,
-but there are times when the Standard C library does not implement
-a nice wrapper function for you.
-In this case, the programmer must manually invoke the system call using
-.BR syscall (2).
-Historically, this was also possible using one of the _syscall macros
-described in
-.BR _syscall (2).
-.SS Authors and copyright conditions
-Look at the header of the manual page source for the author(s) and copyright
-conditions.
-Note that these can be different from page to page!
-.SH SEE ALSO
-.ad l
-.nh
-.BR _syscall (2),
-.BR syscall (2),
-.BR syscalls (2),
-.BR errno (3),
-.BR intro (3),
-.BR capabilities (7),
-.BR credentials (7),
-.BR feature_test_macros (7),
-.BR mq_overview (7),
-.BR path_resolution (7),
-.BR pipe (7),
-.BR pty (7),
-.BR sem_overview (7),
-.BR shm_overview (7),
-.BR signal (7),
-.BR socket (7),
-.BR standards (7),
-.BR symlink (7),
-.BR system_data_types (7),
-.BR sysvipc (7),
-.BR time (7)
diff --git a/man2/inw.2 b/man2/inw.2
deleted file mode 100644
index 2c63c7549..000000000
--- a/man2/inw.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/outb.2
diff --git a/man2/inw_p.2 b/man2/inw_p.2
deleted file mode 100644
index 2c63c7549..000000000
--- a/man2/inw_p.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/outb.2
diff --git a/man2/io_cancel.2 b/man2/io_cancel.2
deleted file mode 100644
index 5df4fb091..000000000
--- a/man2/io_cancel.2
+++ /dev/null
@@ -1,106 +0,0 @@
-.\" Copyright (C) 2003 Free Software Foundation, Inc.
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH io_cancel 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-io_cancel \- cancel an outstanding asynchronous I/O operation
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.PP
-Alternatively, Asynchronous I/O library
-.RI ( libaio ", " \-laio );
-see VERSIONS.
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/aio_abi.h>" " /* Definition of needed types */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_io_cancel, aio_context_t " ctx_id ", struct iocb *" iocb ,
-.BI " struct io_event *" result );
-.fi
-.SH DESCRIPTION
-.IR Note :
-this page describes the raw Linux system call interface.
-The wrapper function provided by
-.I libaio
-uses a different type for the
-.I ctx_id
-argument.
-See VERSIONS.
-.PP
-The
-.BR io_cancel ()
-system call
-attempts to cancel an asynchronous I/O operation previously submitted with
-.BR io_submit (2).
-The
-.I iocb
-argument describes the operation to be canceled and the
-.I ctx_id
-argument is the AIO context to which the operation was submitted.
-If the operation is successfully canceled, the event will be copied into
-the memory pointed to by
-.I result
-without being placed into the
-completion queue.
-.SH RETURN VALUE
-On success,
-.BR io_cancel ()
-returns 0.
-For the failure return, see VERSIONS.
-.SH ERRORS
-.TP
-.B EAGAIN
-The \fIiocb\fP specified was not canceled.
-.TP
-.B EFAULT
-One of the data structures points to invalid data.
-.TP
-.B EINVAL
-The AIO context specified by \fIctx_id\fP is invalid.
-.TP
-.B ENOSYS
-.BR io_cancel ()
-is not implemented on this architecture.
-.SH VERSIONS
-You probably want to use the
-.BR io_cancel ()
-wrapper function provided by
-.\" http://git.fedorahosted.org/git/?p=libaio.git
-.IR libaio .
-.PP
-Note that the
-.I libaio
-wrapper function uses a different type
-.RI ( io_context_t )
-.\" But glibc is confused, since <libaio.h> uses 'io_context_t' to declare
-.\" the system call.
-for the
-.I ctx_id
-argument.
-Note also that the
-.I libaio
-wrapper does not follow the usual C library conventions for indicating errors:
-on error it returns a negated error number
-(the negative of one of the values listed in ERRORS).
-If the system call is invoked via
-.BR syscall (2),
-then the return value follows the usual conventions for
-indicating an error: \-1, with
-.I errno
-set to a (positive) value that indicates the error.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.5.
-.SH SEE ALSO
-.BR io_destroy (2),
-.BR io_getevents (2),
-.BR io_setup (2),
-.BR io_submit (2),
-.BR aio (7)
-.\" .SH AUTHOR
-.\" Kent Yoder.
diff --git a/man2/io_destroy.2 b/man2/io_destroy.2
deleted file mode 100644
index a94600c5f..000000000
--- a/man2/io_destroy.2
+++ /dev/null
@@ -1,97 +0,0 @@
-.\" Copyright (C) 2003 Free Software Foundation, Inc.
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH io_destroy 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-io_destroy \- destroy an asynchronous I/O context
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/aio_abi.h>" " /* Definition of " aio_context_t " */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_io_destroy, aio_context_t " ctx_id );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR io_destroy (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-.IR Note :
-this page describes the raw Linux system call interface.
-The wrapper function provided by
-.I libaio
-uses a different type for the
-.I ctx_id
-argument.
-See VERSIONS.
-.PP
-The
-.BR io_destroy ()
-system call
-will attempt to cancel all outstanding asynchronous I/O operations against
-.IR ctx_id ,
-will block on the completion of all operations
-that could not be canceled, and will destroy the
-.IR ctx_id .
-.SH RETURN VALUE
-On success,
-.BR io_destroy ()
-returns 0.
-For the failure return, see VERSIONS.
-.SH ERRORS
-.TP
-.B EFAULT
-The context pointed to is invalid.
-.TP
-.B EINVAL
-The AIO context specified by \fIctx_id\fP is invalid.
-.TP
-.B ENOSYS
-.BR io_destroy ()
-is not implemented on this architecture.
-.SH VERSIONS
-You probably want to use the
-.BR io_destroy ()
-wrapper function provided by
-.\" http://git.fedorahosted.org/git/?p=libaio.git
-.IR libaio .
-.PP
-Note that the
-.I libaio
-wrapper function uses a different type
-.RI ( io_context_t )
-.\" But glibc is confused, since <libaio.h> uses 'io_context_t' to declare
-.\" the system call.
-for the
-.I ctx_id
-argument.
-Note also that the
-.I libaio
-wrapper does not follow the usual C library conventions for indicating errors:
-on error it returns a negated error number
-(the negative of one of the values listed in ERRORS).
-If the system call is invoked via
-.BR syscall (2),
-then the return value follows the usual conventions for
-indicating an error: \-1, with
-.I errno
-set to a (positive) value that indicates the error.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.5.
-.SH SEE ALSO
-.BR io_cancel (2),
-.BR io_getevents (2),
-.BR io_setup (2),
-.BR io_submit (2),
-.BR aio (7)
-.\" .SH AUTHOR
-.\" Kent Yoder.
diff --git a/man2/io_getevents.2 b/man2/io_getevents.2
deleted file mode 100644
index 0f7c7eea6..000000000
--- a/man2/io_getevents.2
+++ /dev/null
@@ -1,137 +0,0 @@
-.\" Copyright (C) 2003 Free Software Foundation, Inc.
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH io_getevents 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-io_getevents \- read asynchronous I/O events from the completion queue
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.PP
-Alternatively, Asynchronous I/O library
-.RI ( libaio ", " \-laio );
-see VERSIONS.
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/aio_abi.h>" " /* Definition of " *io_* " types */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_io_getevents, aio_context_t " ctx_id ,
-.BI " long " min_nr ", long " nr ", struct io_event *" events ,
-.BI " struct timespec *" timeout );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR io_getevents (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-.IR Note :
-this page describes the raw Linux system call interface.
-The wrapper function provided by
-.I libaio
-uses a different type for the
-.I ctx_id
-argument.
-See VERSIONS.
-.PP
-The
-.BR io_getevents ()
-system call
-attempts to read at least \fImin_nr\fP events and
-up to \fInr\fP events from the completion queue of the AIO context
-specified by \fIctx_id\fP.
-.PP
-The \fItimeout\fP argument specifies the amount of time to wait for events,
-and is specified as a relative timeout in a
-.BR timespec (3)
-structure.
-.PP
-The specified time will be rounded up to the system clock granularity
-and is guaranteed not to expire early.
-.PP
-Specifying
-.I timeout
-as NULL means block indefinitely until at least
-.I min_nr
-events have been obtained.
-.SH RETURN VALUE
-On success,
-.BR io_getevents ()
-returns the number of events read.
-This may be 0, or a value less than
-.IR min_nr ,
-if the
-.I timeout
-expired.
-It may also be a nonzero value less than
-.IR min_nr ,
-if the call was interrupted by a signal handler.
-.PP
-For the failure return, see VERSIONS.
-.SH ERRORS
-.TP
-.B EFAULT
-Either \fIevents\fP or \fItimeout\fP is an invalid pointer.
-.TP
-.B EINTR
-Interrupted by a signal handler; see
-.BR signal (7).
-.TP
-.B EINVAL
-\fIctx_id\fP is invalid.
-\fImin_nr\fP is out of range or \fInr\fP is
-out of range.
-.TP
-.B ENOSYS
-.BR io_getevents ()
-is not implemented on this architecture.
-.SH VERSIONS
-You probably want to use the
-.BR io_getevents ()
-wrapper function provided by
-.\" http://git.fedorahosted.org/git/?p=libaio.git
-.IR libaio .
-.PP
-Note that the
-.I libaio
-wrapper function uses a different type
-.RI ( io_context_t )
-.\" But glibc is confused, since <libaio.h> uses 'io_context_t' to declare
-.\" the system call.
-for the
-.I ctx_id
-argument.
-Note also that the
-.I libaio
-wrapper does not follow the usual C library conventions for indicating errors:
-on error it returns a negated error number
-(the negative of one of the values listed in ERRORS).
-If the system call is invoked via
-.BR syscall (2),
-then the return value follows the usual conventions for
-indicating an error: \-1, with
-.I errno
-set to a (positive) value that indicates the error.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.5.
-.SH BUGS
-An invalid
-.I ctx_id
-may cause a segmentation fault instead of generating the error
-.BR EINVAL .
-.SH SEE ALSO
-.BR io_cancel (2),
-.BR io_destroy (2),
-.BR io_setup (2),
-.BR io_submit (2),
-.BR timespec (3),
-.BR aio (7),
-.BR time (7)
-.\" .SH AUTHOR
-.\" Kent Yoder.
diff --git a/man2/io_setup.2 b/man2/io_setup.2
deleted file mode 100644
index 2c3a760bd..000000000
--- a/man2/io_setup.2
+++ /dev/null
@@ -1,114 +0,0 @@
-.\" Copyright (C) 2003 Free Software Foundation, Inc.
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH io_setup 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-io_setup \- create an asynchronous I/O context
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.PP
-Alternatively, Asynchronous I/O library
-.RI ( libaio ", " \-laio );
-see VERSIONS.
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/aio_abi.h>" " /* Defines needed types */"
-.PP
-.BI "long io_setup(unsigned int " nr_events ", aio_context_t *" ctx_idp );
-.fi
-.PP
-.IR Note :
-There is no glibc wrapper for this system call; see VERSIONS.
-.SH DESCRIPTION
-.IR Note :
-this page describes the raw Linux system call interface.
-The wrapper function provided by
-.I libaio
-uses a different type for the
-.I ctx_idp
-argument.
-See VERSIONS.
-.PP
-The
-.BR io_setup ()
-system call
-creates an asynchronous I/O context suitable for concurrently processing
-\fInr_events\fP operations.
-The
-.I ctx_idp
-argument must not point to an AIO context that already exists, and must
-be initialized to 0 prior to the call.
-On successful creation of the AIO context, \fI*ctx_idp\fP is filled in
-with the resulting handle.
-.SH RETURN VALUE
-On success,
-.BR io_setup ()
-returns 0.
-For the failure return, see VERSIONS.
-.SH ERRORS
-.TP
-.B EAGAIN
-The specified \fInr_events\fP exceeds the limit of available events,
-as defined in
-.I /proc/sys/fs/aio\-max\-nr
-(see
-.BR proc (5)).
-.TP
-.B EFAULT
-An invalid pointer is passed for \fIctx_idp\fP.
-.TP
-.B EINVAL
-\fIctx_idp\fP is not initialized, or the specified \fInr_events\fP
-exceeds internal limits.
-\fInr_events\fP should be greater than 0.
-.TP
-.B ENOMEM
-Insufficient kernel resources are available.
-.TP
-.B ENOSYS
-.BR io_setup ()
-is not implemented on this architecture.
-.SH VERSIONS
-glibc does not provide a wrapper for this system call.
-You could invoke it using
-.BR syscall (2).
-But instead, you probably want to use the
-.BR io_setup ()
-wrapper function provided by
-.\" http://git.fedorahosted.org/git/?p=libaio.git
-.IR libaio .
-.PP
-Note that the
-.I libaio
-wrapper function uses a different type
-.RI ( "io_context_t\ *" )
-.\" But glibc is confused, since <libaio.h> uses 'io_context_t' to declare
-.\" the system call.
-for the
-.I ctx_idp
-argument.
-Note also that the
-.I libaio
-wrapper does not follow the usual C library conventions for indicating errors:
-on error it returns a negated error number
-(the negative of one of the values listed in ERRORS).
-If the system call is invoked via
-.BR syscall (2),
-then the return value follows the usual conventions for
-indicating an error: \-1, with
-.I errno
-set to a (positive) value that indicates the error.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.5.
-.SH SEE ALSO
-.BR io_cancel (2),
-.BR io_destroy (2),
-.BR io_getevents (2),
-.BR io_submit (2),
-.BR aio (7)
-.\" .SH AUTHOR
-.\" Kent Yoder.
diff --git a/man2/io_submit.2 b/man2/io_submit.2
deleted file mode 100644
index 1030bb6cd..000000000
--- a/man2/io_submit.2
+++ /dev/null
@@ -1,289 +0,0 @@
-.\" Copyright (C) 2003 Free Software Foundation, Inc.
-.\" and Copyright (C) 2017 Goldwyn Rodrigues <rgoldwyn@suse.de>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH io_submit 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-io_submit \- submit asynchronous I/O blocks for processing
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.PP
-Alternatively, Asynchronous I/O library
-.RI ( libaio ", " \-laio );
-see VERSIONS.
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/aio_abi.h>" " /* Defines needed types */"
-.PP
-.BI "int io_submit(aio_context_t " ctx_id ", long " nr \
-", struct iocb **" iocbpp );
-.fi
-.PP
-.IR Note :
-There is no glibc wrapper for this system call; see VERSIONS.
-.SH DESCRIPTION
-.IR Note :
-this page describes the raw Linux system call interface.
-The wrapper function provided by
-.I libaio
-uses a different type for the
-.I ctx_id
-argument.
-See VERSIONS.
-.PP
-The
-.BR io_submit ()
-system call
-queues \fInr\fP I/O request blocks for processing in
-the AIO context \fIctx_id\fP.
-The
-.I iocbpp
-argument should be an array of \fInr\fP AIO control blocks,
-which will be submitted to context \fIctx_id\fP.
-.PP
-The
-.I iocb
-(I/O control block) structure defined in
-.I linux/aio_abi.h
-defines the parameters that control the I/O operation.
-.PP
-.in +4n
-.EX
-#include <linux/aio_abi.h>
-\&
-struct iocb {
- __u64 aio_data;
- __u32 PADDED(aio_key, aio_rw_flags);
- __u16 aio_lio_opcode;
- __s16 aio_reqprio;
- __u32 aio_fildes;
- __u64 aio_buf;
- __u64 aio_nbytes;
- __s64 aio_offset;
- __u64 aio_reserved2;
- __u32 aio_flags;
- __u32 aio_resfd;
-};
-.EE
-.in
-.PP
-The fields of this structure are as follows:
-.TP
-.I aio_data
-This data is copied into the
-.I data
-field of the
-.I io_event
-structure upon I/O completion (see
-.BR io_getevents (2)).
-.TP
-.I aio_key
-This is an internal field used by the kernel.
-Do not modify this field after an
-.BR io_submit ()
-call.
-.TP
-.I aio_rw_flags
-This defines the R/W flags passed with structure.
-The valid values are:
-.RS
-.TP
-.BR RWF_APPEND " (since Linux 4.16)"
-.\" commit e1fc742e14e01d84d9693c4aca4ab23da65811fb
-Append data to the end of the file.
-See the description of the flag of the same name in
-.BR pwritev2 (2)
-as well as the description of
-.B O_APPEND
-in
-.BR open (2).
-The
-.I aio_offset
-field is ignored.
-The file offset is not changed.
-.TP
-.BR RWF_DSYNC " (since Linux 4.13)"
-Write operation complete according to requirement of
-synchronized I/O data integrity.
-See the description of the flag of the same name in
-.BR pwritev2 (2)
-as well the description of
-.B O_DSYNC
-in
-.BR open (2).
-.TP
-.BR RWF_HIPRI " (since Linux 4.13)"
-High priority request, poll if possible
-.TP
-.BR RWF_NOWAIT " (since Linux 4.14)"
-Don't wait if the I/O will block for operations such as
-file block allocations, dirty page flush, mutex locks,
-or a congested block device inside the kernel.
-If any of these conditions are met, the control block is returned
-immediately with a return value of
-.B \-EAGAIN
-in the
-.I res
-field of the
-.I io_event
-structure (see
-.BR io_getevents (2)).
-.TP
-.BR RWF_SYNC " (since Linux 4.13)"
-Write operation complete according to requirement of
-synchronized I/O file integrity.
-See the description of the flag of the same name in
-.BR pwritev2 (2)
-as well the description of
-.B O_SYNC
-in
-.BR open (2).
-.RE
-.TP
-.I aio_lio_opcode
-This defines the type of I/O to be performed by the
-.I iocb
-structure.
-The
-valid values are defined by the enum defined in
-.IR linux/aio_abi.h :
-.IP
-.in +4n
-.EX
-enum {
- IOCB_CMD_PREAD = 0,
- IOCB_CMD_PWRITE = 1,
- IOCB_CMD_FSYNC = 2,
- IOCB_CMD_FDSYNC = 3,
- IOCB_CMD_POLL = 5,
- IOCB_CMD_NOOP = 6,
- IOCB_CMD_PREADV = 7,
- IOCB_CMD_PWRITEV = 8,
-};
-.EE
-.in
-.TP
-.I aio_reqprio
-This defines the requests priority.
-.TP
-.I aio_fildes
-The file descriptor on which the I/O operation is to be performed.
-.TP
-.I aio_buf
-This is the buffer used to transfer data for a read or write operation.
-.TP
-.I aio_nbytes
-This is the size of the buffer pointed to by
-.IR aio_buf .
-.TP
-.I aio_offset
-This is the file offset at which the I/O operation is to be performed.
-.TP
-.I aio_flags
-This is the set of flags associated with the
-.I iocb
-structure.
-The valid values are:
-.RS
-.TP
-.B IOCB_FLAG_RESFD
-Asynchronous I/O control must signal the file
-descriptor mentioned in
-.I aio_resfd
-upon completion.
-.TP
-.BR IOCB_FLAG_IOPRIO " (since Linux 4.18)"
-.\" commit d9a08a9e616beeccdbd0e7262b7225ffdfa49e92
-Interpret the
-.I aio_reqprio
-field as an
-.B IOPRIO_VALUE
-as defined by
-.IR linux/ioprio.h .
-.RE
-.TP
-.I aio_resfd
-The file descriptor to signal in the event of asynchronous I/O completion.
-.SH RETURN VALUE
-On success,
-.BR io_submit ()
-returns the number of \fIiocb\fPs submitted (which may be
-less than \fInr\fP, or 0 if \fInr\fP is zero).
-For the failure return, see VERSIONS.
-.SH ERRORS
-.TP
-.B EAGAIN
-Insufficient resources are available to queue any \fIiocb\fPs.
-.TP
-.B EBADF
-The file descriptor specified in the first \fIiocb\fP is invalid.
-.TP
-.B EFAULT
-One of the data structures points to invalid data.
-.TP
-.B EINVAL
-The AIO context specified by \fIctx_id\fP is invalid.
-\fInr\fP is less than 0.
-The \fIiocb\fP at
-.I *iocbpp[0]
-is not properly initialized, the operation specified is invalid for the file
-descriptor in the \fIiocb\fP, or the value in the
-.I aio_reqprio
-field is invalid.
-.TP
-.B ENOSYS
-.BR io_submit ()
-is not implemented on this architecture.
-.TP
-.B EPERM
-The
-.I aio_reqprio
-field is set with the class
-.BR IOPRIO_CLASS_RT ,
-but the submitting context does not have the
-.B CAP_SYS_ADMIN
-capability.
-.SH VERSIONS
-glibc does not provide a wrapper for this system call.
-You could invoke it using
-.BR syscall (2).
-But instead, you probably want to use the
-.BR io_submit ()
-wrapper function provided by
-.\" http://git.fedorahosted.org/git/?p=libaio.git
-.IR libaio .
-.PP
-Note that the
-.I libaio
-wrapper function uses a different type
-.RI ( io_context_t )
-.\" But glibc is confused, since <libaio.h> uses 'io_context_t' to declare
-.\" the system call.
-for the
-.I ctx_id
-argument.
-Note also that the
-.I libaio
-wrapper does not follow the usual C library conventions for indicating errors:
-on error it returns a negated error number
-(the negative of one of the values listed in ERRORS).
-If the system call is invoked via
-.BR syscall (2),
-then the return value follows the usual conventions for
-indicating an error: \-1, with
-.I errno
-set to a (positive) value that indicates the error.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.5.
-.SH SEE ALSO
-.BR io_cancel (2),
-.BR io_destroy (2),
-.BR io_getevents (2),
-.BR io_setup (2),
-.BR aio (7)
-.\" .SH AUTHOR
-.\" Kent Yoder.
diff --git a/man2/ioctl.2 b/man2/ioctl.2
deleted file mode 100644
index 6b55d47c9..000000000
--- a/man2/ioctl.2
+++ /dev/null
@@ -1,185 +0,0 @@
-.\" Copyright (c) 1980, 1991 Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)ioctl.2 6.4 (Berkeley) 3/10/91
-.\"
-.\" Modified 1993-07-23 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1996-10-22 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1999-06-25 by Rachael Munns <vashti@dream.org.uk>
-.\" Modified 2000-09-21 by Andries Brouwer <aeb@cwi.nl>
-.\"
-.TH ioctl 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ioctl \- control device
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/ioctl.h>
-.PP
-.BI "int ioctl(int " fd ", unsigned long " request ", ...);"
-.\" POSIX says 'request' is int, but glibc has the above
-.\" See https://bugzilla.kernel.org/show_bug.cgi?id=42705
-.fi
-.SH DESCRIPTION
-The
-.BR ioctl ()
-system call manipulates the underlying device parameters of special files.
-In particular, many operating characteristics of character special files
-(e.g., terminals) may be controlled with
-.BR ioctl ()
-requests.
-The argument
-.I fd
-must be an open file descriptor.
-.PP
-The second argument is a device-dependent request code.
-The third argument is an untyped pointer to memory.
-It's traditionally
-.BI "char *" argp
-(from the days before
-.B "void *"
-was valid C), and will be so named for this discussion.
-.PP
-An
-.BR ioctl ()
-.I request
-has encoded in it whether the argument is an
-.I in
-parameter or
-.I out
-parameter, and the size of the argument
-.I argp
-in bytes.
-Macros and defines used in specifying an
-.BR ioctl ()
-.I request
-are located in the file
-.IR <sys/ioctl.h> .
-See NOTES.
-.SH RETURN VALUE
-Usually, on success zero is returned.
-A few
-.BR ioctl ()
-requests use the return value as an output parameter
-and return a nonnegative value on success.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor.
-.TP
-.B EFAULT
-.I argp
-references an inaccessible memory area.
-.TP
-.B EINVAL
-.I request
-or
-.I argp
-is not valid.
-.TP
-.B ENOTTY
-.I fd
-is not associated with a character special device.
-.TP
-.B ENOTTY
-The specified request does not apply to the kind of object that the
-file descriptor
-.I fd
-references.
-.SH VERSIONS
-Arguments, returns, and semantics of
-.BR ioctl ()
-vary according to the device driver in question (the call is used as a
-catch-all for operations that don't cleanly fit the UNIX stream I/O
-model).
-.SH STANDARDS
-None.
-.SH HISTORY
-Version\~7 AT&T UNIX.
-.SH NOTES
-In order to use this call, one needs an open file descriptor.
-Often the
-.BR open (2)
-call has unwanted side effects, that can be avoided under Linux
-by giving it the
-.B O_NONBLOCK
-flag.
-.\"
-.SS ioctl structure
-.\" added two sections - aeb
-Ioctl command values are 32-bit constants.
-In principle these constants are completely arbitrary, but people have
-tried to build some structure into them.
-.PP
-The old Linux situation was that of mostly 16-bit constants, where the
-last byte is a serial number, and the preceding byte(s) give a type
-indicating the driver.
-Sometimes the major number was used: 0x03
-for the
-.B HDIO_*
-ioctls, 0x06 for the
-.B LP*
-ioctls.
-And sometimes
-one or more ASCII letters were used.
-For example,
-.B TCGETS
-has value
-0x00005401, with 0x54 = \[aq]T\[aq] indicating the terminal driver, and
-.B CYGETTIMEOUT
-has value 0x00435906, with 0x43 0x59 = \[aq]C\[aq] \[aq]Y\[aq]
-indicating the cyclades driver.
-.PP
-Later (0.98p5) some more information was built into the number.
-One has 2 direction bits
-(00: none, 01: write, 10: read, 11: read/write)
-followed by 14 size bits (giving the size of the argument),
-followed by an 8-bit type (collecting the ioctls in groups
-for a common purpose or a common driver), and an 8-bit
-serial number.
-.PP
-The macros describing this structure live in
-.I <asm/ioctl.h>
-and are
-.B _IO(type,nr)
-and
-.BR "{_IOR,_IOW,_IOWR}(type,nr,size)" .
-They use
-.I sizeof(size)
-so that size is a
-misnomer here: this third argument is a data type.
-.PP
-Note that the size bits are very unreliable: in lots of cases
-they are wrong, either because of buggy macros using
-.IR sizeof(sizeof(struct)) ,
-or because of legacy values.
-.PP
-Thus, it seems that the new structure only gave disadvantages:
-it does not help in checking, but it causes varying values
-for the various architectures.
-.SH SEE ALSO
-.BR execve (2),
-.BR fcntl (2),
-.BR ioctl_console (2),
-.BR ioctl_fat (2),
-.BR ioctl_ficlone (2),
-.BR ioctl_ficlonerange (2),
-.BR ioctl_fideduperange (2),
-.BR ioctl_fslabel (2),
-.BR ioctl_getfsmap (2),
-.BR ioctl_iflags (2),
-.BR ioctl_ns (2),
-.BR ioctl_tty (2),
-.BR ioctl_userfaultfd (2),
-.BR open (2),
-.\" .BR mt (4),
-.BR sd (4),
-.BR tty (4)
diff --git a/man2/ioctl_console.2 b/man2/ioctl_console.2
deleted file mode 100644
index 89f794c19..000000000
--- a/man2/ioctl_console.2
+++ /dev/null
@@ -1,903 +0,0 @@
-'\" t
-.\" Copyright (c) 1995 Jim Van Zandt <jrv@vanzandt.mv.com> and aeb
-.\" Sun Feb 26 11:46:23 MET 1995
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified, Sun Feb 26 15:04:20 1995, faith@cs.unc.edu
-.\" Modified, Thu Apr 20 22:08:17 1995, jrv@vanzandt.mv.com
-.\" Modified, Mon Sep 18 22:32:47 1995, hpa@storm.net (H. Peter Anvin)
-.\" FIXME The following are not documented:
-.\" KDFONTOP (since Linux 2.1.111)
-.\" KDGKBDIACRUC (since Linux 2.6.24)
-.\" KDSKBDIACR
-.\" KDSKBDIACRUC (since Linux 2.6.24)
-.\" KDKBDREP (since Linux 2.1.113)
-.\" KDMAPDISP (not implemented as at Linux 2.6.27)
-.\" KDUNMAPDISP (not implemented as at Linux 2.6.27)
-.\" VT_LOCKSWITCH (since Linux 1.3.47, needs CAP_SYS_TTY_CONFIG)
-.\" VT_UNLOCKSWITCH (since Linux 1.3.47, needs CAP_SYS_TTY_CONFIG)
-.\" VT_GETHIFONTMASK (since Linux 2.6.18)
-.\"
-.TH ioctl_console 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ioctl_console \- ioctls for console terminal and virtual consoles
-.SH DESCRIPTION
-The following Linux-specific
-.BR ioctl (2)
-requests are supported for console terminals and virtual consoles.
-Each requires a third argument, assumed here to be
-.IR argp .
-.TP
-.B KDGETLED
-Get state of LEDs.
-.I argp
-points to a
-.IR char .
-The lower three bits
-of
-.I *argp
-are set to the state of the LEDs, as follows:
-.TS
-l l l.
-LED_CAP 0x04 caps lock led
-LED_NUM 0x02 num lock led
-LED_SCR 0x01 scroll lock led
-.TE
-.TP
-.B KDSETLED
-Set the LEDs.
-The LEDs are set to correspond to the lower three bits of the
-unsigned long integer in
-.IR argp .
-However, if a higher order bit is set,
-the LEDs revert to normal: displaying the state of the
-keyboard functions of caps lock, num lock, and scroll lock.
-.PP
-Before Linux 1.1.54, the LEDs just reflected the state of the corresponding
-keyboard flags, and KDGETLED/KDSETLED would also change the keyboard
-flags.
-Since Linux 1.1.54 the LEDs can be made to display arbitrary
-information, but by default they display the keyboard flags.
-The following two ioctls are used to access the keyboard flags.
-.TP
-.B KDGKBLED
-Get keyboard flags CapsLock, NumLock, ScrollLock (not lights).
-.I argp
-points to a char which is set to the flag state.
-The low order three bits (mask 0x7) get the current flag state,
-and the low order bits of the next nibble (mask 0x70) get
-the default flag state.
-(Since Linux 1.1.54.)
-.TP
-.B KDSKBLED
-Set keyboard flags CapsLock, NumLock, ScrollLock (not lights).
-.I argp
-is an unsigned long integer that has the desired flag state.
-The low order three bits (mask 0x7) have the flag state,
-and the low order bits of the next nibble (mask 0x70) have
-the default flag state.
-(Since Linux 1.1.54.)
-.TP
-.B KDGKBTYPE
-Get keyboard type.
-This returns the value KB_101, defined as 0x02.
-.TP
-.B KDADDIO
-Add I/O port as valid.
-Equivalent to
-.IR ioperm(arg,1,1) .
-.TP
-.B KDDELIO
-Delete I/O port as valid.
-Equivalent to
-.IR ioperm(arg,1,0) .
-.TP
-.B KDENABIO
-Enable I/O to video board.
-Equivalent to
-.IR "ioperm(0x3b4, 0x3df\-0x3b4+1, 1)" .
-.TP
-.B KDDISABIO
-Disable I/O to video board.
-Equivalent to
-.IR "ioperm(0x3b4, 0x3df\-0x3b4+1, 0)" .
-.TP
-.B KDSETMODE
-Set text/graphics mode.
-.I argp
-is an unsigned integer containing one of:
-.TS
-l l.
-KD_TEXT 0x00
-KD_GRAPHICS 0x01
-.TE
-.TP
-.B KDGETMODE
-Get text/graphics mode.
-.I argp
-points to an
-.I int
-which is set to one
-of the values shown above for
-.BR KDSETMODE .
-.TP
-.B KDMKTONE
-Generate tone of specified length.
-The lower 16 bits of the unsigned long integer in
-.I argp
-specify the period in clock cycles,
-and the upper 16 bits give the duration in msec.
-If the duration is zero, the sound is turned off.
-Control returns immediately.
-For example,
-.I argp
-= (125<<16) + 0x637 would specify
-the beep normally associated with a ctrl-G.
-(Thus since Linux 0.99pl1; broken in Linux 2.1.49-50.)
-.TP
-.B KIOCSOUND
-Start or stop sound generation.
-The lower 16 bits of
-.I argp
-specify the period in clock cycles
-(that is,
-.I argp
-= 1193180/frequency).
-.I argp
-= 0 turns sound off.
-In either case, control returns immediately.
-.TP
-.B GIO_CMAP
-Get the current default color map from kernel.
-.I argp
-points to
-a 48-byte array.
-(Since Linux 1.3.3.)
-.TP
-.B PIO_CMAP
-Change the default text-mode color map.
-.I argp
-points to a
-48-byte array which contains, in order, the Red, Green, and Blue
-values for the 16 available screen colors: 0 is off, and 255 is full
-intensity.
-The default colors are, in order: black, dark red, dark
-green, brown, dark blue, dark purple, dark cyan, light grey, dark
-grey, bright red, bright green, yellow, bright blue, bright purple,
-bright cyan, and white.
-(Since Linux 1.3.3.)
-.TP
-.B GIO_FONT
-Gets 256-character screen font in expanded form.
-.I argp
-points to an 8192-byte array.
-Fails with error code
-.B EINVAL
-if the
-currently loaded font is a 512-character font, or if the console is
-not in text mode.
-.TP
-.B GIO_FONTX
-Gets screen font and associated information.
-.I argp
-points to a
-.I "struct consolefontdesc"
-(see
-.BR PIO_FONTX ).
-On call, the
-.I charcount
-field should be set to the maximum number of
-characters that would fit in the buffer pointed to by
-.IR chardata .
-On return, the
-.I charcount
-and
-.I charheight
-are filled with
-the respective data for the currently loaded font, and the
-.I chardata
-array contains the font data if the initial value of
-.I charcount
-indicated enough space was available; otherwise the
-buffer is untouched and
-.I errno
-is set to
-.BR ENOMEM .
-(Since Linux 1.3.1.)
-.TP
-.B PIO_FONT
-Sets 256-character screen font.
-Load font into the EGA/VGA character
-generator.
-.I argp
-points to an 8192-byte map, with 32 bytes per
-character.
-Only the first
-.I N
-of them are used for an 8x\fIN\fP font
-(0 <
-.I N
-<= 32).
-This call also invalidates the Unicode mapping.
-.TP
-.B PIO_FONTX
-Sets screen font and associated rendering information.
-.I argp
-points to a
-.IP
-.in +4n
-.EX
-struct consolefontdesc {
- unsigned short charcount; /* characters in font
- (256 or 512) */
- unsigned short charheight; /* scan lines per
- character (1\-32) */
- char *chardata; /* font data in
- expanded form */
-};
-.EE
-.in
-.IP
-If necessary, the screen will be appropriately resized, and
-.B SIGWINCH
-sent to the appropriate processes.
-This call also invalidates the Unicode mapping.
-(Since Linux 1.3.1.)
-.TP
-.B PIO_FONTRESET
-Resets the screen font, size, and Unicode mapping to the bootup
-defaults.
-.I argp
-is unused, but should be set to NULL to
-ensure compatibility with future versions of Linux.
-(Since Linux 1.3.28.)
-.TP
-.B GIO_SCRNMAP
-Get screen mapping from kernel.
-.I argp
-points to an area of size
-E_TABSZ, which is loaded with the font positions used to display each
-character.
-This call is likely to return useless information if the
-currently loaded font is more than 256 characters.
-.TP
-.B GIO_UNISCRNMAP
-Get full Unicode screen mapping from kernel.
-.I argp
-points to an
-area of size
-.IR "E_TABSZ*sizeof(unsigned short)" ,
-which is loaded with the
-Unicodes each character represent.
-A special set of Unicodes,
-starting at U+F000, are used to represent "direct to font" mappings.
-(Since Linux 1.3.1.)
-.TP
-.B PIO_SCRNMAP
-Loads the "user definable" (fourth) table in the kernel which maps
-bytes into console screen symbols.
-.I argp
-points to an area of
-size E_TABSZ.
-.TP
-.B PIO_UNISCRNMAP
-Loads the "user definable" (fourth) table in the kernel which maps
-bytes into Unicodes, which are then translated into screen symbols
-according to the currently loaded Unicode-to-font map.
-Special Unicodes starting at U+F000 can be used to map directly to the font
-symbols.
-(Since Linux 1.3.1.)
-.TP
-.B GIO_UNIMAP
-Get Unicode-to-font mapping from kernel.
-.I argp
-points to a
-.IP
-.in +4n
-.EX
-struct unimapdesc {
- unsigned short entry_ct;
- struct unipair *entries;
-};
-.EE
-.in
-.IP
-where
-.I entries
-points to an array of
-.IP
-.in +4n
-.EX
-struct unipair {
- unsigned short unicode;
- unsigned short fontpos;
-};
-.EE
-.in
-.IP
-(Since Linux 1.1.92.)
-.TP
-.B PIO_UNIMAP
-Put unicode-to-font mapping in kernel.
-.I argp
-points to a
-.IR "struct unimapdesc" .
-(Since Linux 1.1.92)
-.TP
-.B PIO_UNIMAPCLR
-Clear table, possibly advise hash algorithm.
-.I argp
-points to a
-.IP
-.in +4n
-.EX
-struct unimapinit {
- unsigned short advised_hashsize; /* 0 if no opinion */
- unsigned short advised_hashstep; /* 0 if no opinion */
- unsigned short advised_hashlevel; /* 0 if no opinion */
-};
-.EE
-.in
-.IP
-(Since Linux 1.1.92.)
-.TP
-.B KDGKBMODE
-Gets current keyboard mode.
-.I argp
-points to a
-.I long
-which is set to one
-of these:
-.TS
-l l.
-K_RAW 0x00 /* Raw (scancode) mode */
-K_XLATE 0x01 /* Translate keycodes using keymap */
-K_MEDIUMRAW 0x02 /* Medium raw (scancode) mode */
-K_UNICODE 0x03 /* Unicode mode */
-K_OFF 0x04 /* Disabled mode; since Linux 2.6.39 */
-.\" K_OFF: commit 9fc3de9c83565fcaa23df74c2fc414bb6e7efb0a
-.TE
-.TP
-.B KDSKBMODE
-Sets current keyboard mode.
-.I argp
-is a
-.I long
-equal to one of the values shown for
-.BR KDGKBMODE .
-.TP
-.B KDGKBMETA
-Gets meta key handling mode.
-.I argp
-points to a
-.I long
-which is
-set to one of these:
-.TS
-l l l.
-K_METABIT 0x03 set high order bit
-K_ESCPREFIX 0x04 escape prefix
-.TE
-.TP
-.B KDSKBMETA
-Sets meta key handling mode.
-.I argp
-is a
-.I long
-equal to one of the values shown above for
-.BR KDGKBMETA .
-.TP
-.B KDGKBENT
-Gets one entry in key translation table (keycode to action code).
-.I argp
-points to a
-.IP
-.in +4n
-.EX
-struct kbentry {
- unsigned char kb_table;
- unsigned char kb_index;
- unsigned short kb_value;
-};
-.EE
-.in
-.IP
-with the first two members filled in:
-.I kb_table
-selects the key table (0 <=
-.I kb_table
-< MAX_NR_KEYMAPS),
-and
-.I kb_index
-is the keycode (0 <=
-.I kb_index
-< NR_KEYS).
-.I kb_value
-is set to the corresponding action code,
-or K_HOLE if there is no such key,
-or K_NOSUCHMAP if
-.I kb_table
-is invalid.
-.TP
-.B KDSKBENT
-Sets one entry in translation table.
-.I argp
-points to a
-.IR "struct kbentry" .
-.TP
-.B KDGKBSENT
-Gets one function key string.
-.I argp
-points to a
-.IP
-.in +4n
-.EX
-struct kbsentry {
- unsigned char kb_func;
- unsigned char kb_string[512];
-};
-.EE
-.in
-.IP
-.I kb_string
-is set to the (null-terminated) string corresponding to
-the
-.IR kb_func th
-function key action code.
-.TP
-.B KDSKBSENT
-Sets one function key string entry.
-.I argp
-points to a
-.IR "struct kbsentry" .
-.TP
-.B KDGKBDIACR
-Read kernel accent table.
-.I argp
-points to a
-.IP
-.in +4n
-.EX
-struct kbdiacrs {
- unsigned int kb_cnt;
- struct kbdiacr kbdiacr[256];
-};
-.EE
-.in
-.IP
-where
-.I kb_cnt
-is the number of entries in the array, each of which
-is a
-.IP
-.in +4n
-.EX
-struct kbdiacr {
- unsigned char diacr;
- unsigned char base;
- unsigned char result;
-};
-.EE
-.in
-.TP
-.B KDGETKEYCODE
-Read kernel keycode table entry (scan code to keycode).
-.I argp
-points to a
-.IP
-.in +4n
-.EX
-struct kbkeycode {
- unsigned int scancode;
- unsigned int keycode;
-};
-.EE
-.in
-.IP
-.I keycode
-is set to correspond to the given
-.IR scancode .
-(89 <=
-.I scancode
-<= 255 only.
-For 1 <=
-.I scancode
-<= 88,
-.IR keycode == scancode .)
-(Since Linux 1.1.63.)
-.TP
-.B KDSETKEYCODE
-Write kernel keycode table entry.
-.I argp
-points to a
-.IR "struct kbkeycode" .
-(Since Linux 1.1.63.)
-.TP
-.B KDSIGACCEPT
-The calling process indicates its willingness to accept the signal
-.I argp
-when it is generated by pressing an appropriate key combination.
-(1 <=
-.I argp
-<= NSIG).
-(See
-.IR spawn_console ()
-in
-.IR linux/drivers/char/keyboard.c .)
-.TP
-.B VT_OPENQRY
-Returns the first available (non-opened) console.
-.I argp
-points to an
-.I int
-which is set to the
-number of the vt (1 <=
-.I *argp
-<= MAX_NR_CONSOLES).
-.TP
-.B VT_GETMODE
-Get mode of active vt.
-.I argp
-points to a
-.IP
-.in +4n
-.EX
-struct vt_mode {
- char mode; /* vt mode */
- char waitv; /* if set, hang on writes if not active */
- short relsig; /* signal to raise on release req */
- short acqsig; /* signal to raise on acquisition */
- short frsig; /* unused (set to 0) */
-};
-.EE
-.in
-.IP
-which is set to the mode of the active vt.
-.I mode
-is set to one of these values:
-.TS
-l l.
-VT_AUTO auto vt switching
-VT_PROCESS process controls switching
-VT_ACKACQ acknowledge switch
-.TE
-.TP
-.B VT_SETMODE
-Set mode of active vt.
-.I argp
-points to a
-.IR "struct vt_mode" .
-.TP
-.B VT_GETSTATE
-Get global vt state info.
-.I argp
-points to a
-.IP
-.in +4n
-.EX
-struct vt_stat {
- unsigned short v_active; /* active vt */
- unsigned short v_signal; /* signal to send */
- unsigned short v_state; /* vt bit mask */
-};
-.EE
-.in
-.IP
-For each vt in use, the corresponding bit in the
-.I v_state
-member is set.
-(Linux 1.0 through Linux 1.1.92.)
-.TP
-.B VT_RELDISP
-Release a display.
-.TP
-.B VT_ACTIVATE
-Switch to vt
-.I argp
-(1 <=
-.I argp
-<= MAX_NR_CONSOLES).
-.TP
-.B VT_WAITACTIVE
-Wait until vt
-.I argp
-has been activated.
-.TP
-.B VT_DISALLOCATE
-Deallocate the memory associated with vt
-.IR argp .
-(Since Linux 1.1.54.)
-.TP
-.B VT_RESIZE
-Set the kernel's idea of screensize.
-.I argp
-points to a
-.IP
-.in +4n
-.EX
-struct vt_sizes {
- unsigned short v_rows; /* # rows */
- unsigned short v_cols; /* # columns */
- unsigned short v_scrollsize; /* no longer used */
-};
-.EE
-.in
-.IP
-Note that this does not change the videomode.
-See
-.BR resizecons (8).
-(Since Linux 1.1.54.)
-.TP
-.B VT_RESIZEX
-Set the kernel's idea of various screen parameters.
-.I argp
-points to a
-.IP
-.in +4n
-.EX
-struct vt_consize {
- unsigned short v_rows; /* number of rows */
- unsigned short v_cols; /* number of columns */
- unsigned short v_vlin; /* number of pixel rows
- on screen */
- unsigned short v_clin; /* number of pixel rows
- per character */
- unsigned short v_vcol; /* number of pixel columns
- on screen */
- unsigned short v_ccol; /* number of pixel columns
- per character */
-};
-.EE
-.in
-.IP
-Any parameter may be set to zero, indicating "no change", but if
-multiple parameters are set, they must be self-consistent.
-Note that this does not change the videomode.
-See
-.BR resizecons (8).
-(Since Linux 1.3.3.)
-.PP
-The action of the following ioctls depends on the first byte in the struct
-pointed to by
-.IR argp ,
-referred to here as the
-.IR subcode .
-These are legal only for the superuser or the owner of the current terminal.
-Symbolic
-.IR subcode s
-are available in
-.I <linux/tiocl.h>
-since
-Linux 2.5.71.
-.TP
-.BR TIOCLINUX ", " subcode = 0
-Dump the screen.
-Disappeared in Linux 1.1.92.
-(With Linux 1.1.92 or later, read from
-.I /dev/vcsN
-or
-.I /dev/vcsaN
-instead.)
-.TP
-.BR TIOCLINUX ", " subcode = 1
-Get task information.
-Disappeared in Linux 1.1.92.
-.TP
-.BR TIOCLINUX ", " subcode = TIOCL_SETSEL
-Set selection.
-.I argp
-points to a
-.IP
-.in +4n
-.EX
-struct {
- char subcode;
- short xs, ys, xe, ye;
- short sel_mode;
-};
-.EE
-.in
-.IP
-.I xs
-and
-.I ys
-are the starting column and row.
-.I xe
-and
-.I ye
-are the ending
-column and row.
-(Upper left corner is row=column=1.)
-.I sel_mode
-is 0 for character-by-character selection,
-1 for word-by-word selection,
-or 2 for line-by-line selection.
-The indicated screen characters are highlighted and saved
-in a kernel buffer.
-.TP
-.BR TIOCLINUX ", " subcode = TIOCL_PASTESEL
-Paste selection.
-The characters in the selection buffer are
-written to
-.IR fd .
-.TP
-.BR TIOCLINUX ", " subcode = TIOCL_UNBLANKSCREEN
-Unblank the screen.
-.TP
-.BR TIOCLINUX ", " subcode = TIOCL_SELLOADLUT
-Sets contents of a 256-bit look up table defining characters in a "word",
-for word-by-word selection.
-(Since Linux 1.1.32.)
-.TP
-.BR TIOCLINUX ", " subcode = TIOCL_GETSHIFTSTATE
-.I argp
-points to a char which is set to the value of the kernel
-variable
-.IR shift_state .
-(Since Linux 1.1.32.)
-.TP
-.BR TIOCLINUX ", " subcode = TIOCL_GETMOUSEREPORTING
-.I argp
-points to a char which is set to the value of the kernel
-variable
-.IR report_mouse .
-(Since Linux 1.1.33.)
-.TP
-.BR TIOCLINUX ", " subcode = 8
-Dump screen width and height, cursor position, and all the
-character-attribute pairs.
-(Linux 1.1.67 through Linux 1.1.91 only.
-With Linux 1.1.92 or later, read from
-.I /dev/vcsa*
-instead.)
-.TP
-.BR TIOCLINUX ", " subcode = 9
-Restore screen width and height, cursor position, and all the
-character-attribute pairs.
-(Linux 1.1.67 through Linux 1.1.91 only.
-With Linux 1.1.92 or later, write to
-.I /dev/vcsa*
-instead.)
-.TP
-.BR TIOCLINUX ", " subcode = TIOCL_SETVESABLANK
-Handles the Power Saving
-feature of the new generation of monitors.
-VESA screen blanking mode is set to
-.IR argp[1] ,
-which governs what
-screen blanking does:
-.RS
-.TP
-.B 0
-Screen blanking is disabled.
-.TP
-.B 1
-The current video adapter
-register settings are saved, then the controller is programmed to turn off
-the vertical synchronization pulses.
-This puts the monitor into "standby" mode.
-If your monitor has an Off_Mode timer, then
-it will eventually power down by itself.
-.TP
-.B 2
-The current settings are saved, then both the vertical and horizontal
-synchronization pulses are turned off.
-This puts the monitor into "off" mode.
-If your monitor has no Off_Mode timer,
-or if you want your monitor to power down immediately when the
-blank_timer times out, then you choose this option.
-.RI ( Caution:
-Powering down frequently will damage the monitor.)
-(Since Linux 1.1.76.)
-.RE
-.TP
-.BR TIOCLINUX ", " subcode = TIOCL_SETKMSGREDIRECT
-Change target of kernel messages ("console"):
-by default, and if this is set to
-.BR 0 ,
-messages are written to the currently active VT.
-The VT to write to is a single byte following
-.BR subcode .
-(Since Linux 2.5.36.)
-.TP
-.BR TIOCLINUX ", " subcode = TIOCL_GETFGCONSOLE
-Returns the number of VT currently in foreground.
-(Since Linux 2.5.36.)
-.TP
-.BR TIOCLINUX ", " subcode = TIOCL_SCROLLCONSOLE
-Scroll the foreground VT by the specified amount of
-.I lines
-down,
-or half the screen if
-.BR 0 .
-.I lines
-is *(((int32_t *)&subcode) + 1).
-(Since Linux 2.5.67.)
-.TP
-.BR TIOCLINUX ", " subcode = TIOCL_BLANKSCREEN
-Blank the foreground VT, ignoring "pokes" (typing):
-can only be unblanked explicitly (by switching VTs, to text mode, etc.).
-(Since Linux 2.5.71.)
-.TP
-.BR TIOCLINUX ", " subcode = TIOCL_BLANKEDSCREEN
-Returns the number of VT currently blanked,
-.B 0
-if none.
-(Since Linux 2.5.71.)
-.TP
-.BR TIOCLINUX ", " subcode = 16
-Never used.
-.TP
-.BR TIOCLINUX ", " subcode = TIOCL_GETKMSGREDIRECT
-Returns target of kernel messages.
-(Since Linux 2.6.17.)
-.SH RETURN VALUE
-On success, 0 is returned (except where indicated).
-On failure, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-The file descriptor is invalid.
-.TP
-.B EINVAL
-The file descriptor or
-.I argp
-is invalid.
-.TP
-.B ENOTTY
-The file descriptor is not associated with a character special device,
-or the specified request does not apply to it.
-.TP
-.B EPERM
-Insufficient permission.
-.SH NOTES
-.BR Warning :
-Do not regard this man page as documentation of the Linux console ioctls.
-This is provided for the curious only, as an alternative to reading the
-source.
-Ioctl's are undocumented Linux internals, liable to be changed
-without warning.
-(And indeed, this page more or less describes the
-situation as of kernel version 1.1.94;
-there are many minor and not-so-minor
-differences with earlier versions.)
-.PP
-Very often, ioctls are introduced for communication between the
-kernel and one particular well-known program (fdisk, hdparm, setserial,
-tunelp, loadkeys, selection, setfont, etc.), and their behavior will be
-changed when required by this particular program.
-.PP
-Programs using these ioctls will not be portable to other versions
-of UNIX, will not work on older versions of Linux, and will not work
-on future versions of Linux.
-.PP
-Use POSIX functions.
-.SH SEE ALSO
-.BR dumpkeys (1),
-.BR kbd_mode (1),
-.BR loadkeys (1),
-.BR mknod (1),
-.BR setleds (1),
-.BR setmetamode (1),
-.BR execve (2),
-.BR fcntl (2),
-.BR ioctl_tty (2),
-.BR ioperm (2),
-.BR termios (3),
-.BR console_codes (4),
-.BR mt (4),
-.BR sd (4),
-.BR tty (4),
-.BR ttyS (4),
-.BR vcs (4),
-.BR vcsa (4),
-.BR charsets (7),
-.BR mapscrn (8),
-.BR resizecons (8),
-.BR setfont (8)
-.PP
-.IR /usr/include/linux/kd.h ,
-.I /usr/include/linux/vt.h
diff --git a/man2/ioctl_fat.2 b/man2/ioctl_fat.2
deleted file mode 100644
index 64cde8e2c..000000000
--- a/man2/ioctl_fat.2
+++ /dev/null
@@ -1,489 +0,0 @@
-.\" Copyright (C) 2014, Heinrich Schuchardt <xypron.glpk@gmx.de>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.TH ioctl_fat 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ioctl_fat \- manipulating the FAT filesystem
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/msdos_fs.h>" " /* Definition of [" V ] FAT_* " and"
-.BR " ATTR_* " constants */"
-.B #include <sys/ioctl.h>
-.PP
-.BI "int ioctl(int " fd ", FAT_IOCTL_GET_ATTRIBUTES, uint32_t *" attr );
-.BI "int ioctl(int " fd ", FAT_IOCTL_SET_ATTRIBUTES, uint32_t *" attr );
-.BI "int ioctl(int " fd ", FAT_IOCTL_GET_VOLUME_ID, uint32_t *" id );
-.BI "int ioctl(int " fd ", VFAT_IOCTL_READDIR_BOTH,"
-.BI " struct __fat_dirent " entry [2]);
-.BI "int ioctl(int " fd ", VFAT_IOCTL_READDIR_SHORT,"
-.BI " struct __fat_dirent " entry [2]);
-.fi
-.SH DESCRIPTION
-The
-.BR ioctl (2)
-system call can be used to read and write metadata of FAT filesystems that
-are not accessible using other system calls.
-.SS Reading and setting file attributes
-Files and directories in the FAT filesystem possess an attribute bit mask that
-can be read with
-.B FAT_IOCTL_GET_ATTRIBUTES
-and written with
-.BR FAT_IOCTL_SET_ATTRIBUTES .
-.PP
-The
-.I fd
-argument contains a file descriptor for a file or directory.
-It is sufficient to create the file descriptor by calling
-.BR open (2)
-with the
-.B O_RDONLY
-flag.
-.PP
-The
-.I attr
-argument contains a pointer to a bit mask.
-The bits of the bit mask are:
-.TP
-.B ATTR_RO
-This bit specifies that the file or directory is read-only.
-.TP
-.B ATTR_HIDDEN
-This bit specifies that the file or directory is hidden.
-.TP
-.B ATTR_SYS
-This bit specifies that the file is a system file.
-.TP
-.B ATTR_VOLUME
-This bit specifies that the file is a volume label.
-This attribute is read-only.
-.TP
-.B ATTR_DIR
-This bit specifies that this is a directory.
-This attribute is read-only.
-.TP
-.B ATTR_ARCH
-This bit indicates that this file or directory should be archived.
-It is set when a file is created or modified.
-It is reset by an archiving system.
-.PP
-The zero value
-.B ATTR_NONE
-can be used to indicate that no attribute bit is set.
-.SS Reading the volume ID
-FAT filesystems are identified by a volume ID.
-The volume ID can be read with
-.BR FAT_IOCTL_GET_VOLUME_ID .
-.PP
-The
-.I fd
-argument can be a file descriptor for any file or directory of the
-filesystem.
-It is sufficient to create the file descriptor by calling
-.BR open (2)
-with the
-.B O_RDONLY
-flag.
-.PP
-The
-.I id
-argument is a pointer to the field that will be filled with the volume ID.
-Typically the volume ID is displayed to the user as a group of two
-16-bit fields:
-.PP
-.in +4n
-.EX
-printf("Volume ID %04x\-%04x\en", id >> 16, id & 0xFFFF);
-.EE
-.in
-.SS Reading short filenames of a directory
-A file or directory on a FAT filesystem always has a short filename
-consisting of up to 8 capital letters, optionally followed by a period
-and up to 3 capital letters for the file extension.
-If the actual filename does not fit into this scheme, it is stored
-as a long filename of up to 255 UTF-16 characters.
-.PP
-The short filenames in a directory can be read with
-.BR VFAT_IOCTL_READDIR_SHORT .
-.B VFAT_IOCTL_READDIR_BOTH
-reads both the short and the long filenames.
-.PP
-The
-.I fd
-argument must be a file descriptor for a directory.
-It is sufficient to create the file descriptor by calling
-.BR open (2)
-with the
-.B O_RDONLY
-flag.
-The file descriptor can be used only once to iterate over the directory
-entries by calling
-.BR ioctl (2)
-repeatedly.
-.PP
-The
-.I entry
-argument is a two-element array of the following structures:
-.PP
-.in +4n
-.EX
-struct __fat_dirent {
- long d_ino;
- __kernel_off_t d_off;
- uint32_t short d_reclen;
- char d_name[256];
-};
-.EE
-.in
-.PP
-The first entry in the array is for the short filename.
-The second entry is for the long filename.
-.PP
-The
-.I d_ino
-and
-.I d_off
-fields are filled only for long filenames.
-The
-.I d_ino
-field holds the inode number of the directory.
-The
-.I d_off
-field holds the offset of the file entry in the directory.
-As these values are not available for short filenames, the user code should
-simply ignore them.
-.PP
-The field
-.I d_reclen
-contains the length of the filename in the field
-.IR d_name .
-To keep backward compatibility, a length of 0 for the short filename signals
-that the end of the directory has been reached.
-However, the preferred method for detecting the end of the directory
-is to test the
-.BR ioctl (2)
-return value.
-If no long filename exists, field
-.I d_reclen
-is set to 0 and
-.I d_name
-is a character string of length 0 for the long filename.
-.SH RETURN VALUE
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.PP
-For
-.B VFAT_IOCTL_READDIR_BOTH
-and
-.B VFAT_IOCTL_READDIR_SHORT
-a return value of 1 signals that a new directory entry has been read and
-a return value of 0 signals that the end of the directory has been reached.
-.SH ERRORS
-.TP
-.B ENOENT
-This error is returned by
-.B VFAT_IOCTL_READDIR_BOTH
-and
-.B VFAT_IOCTL_READDIR_SHORT
-if the file descriptor
-.I fd
-refers to a removed, but still open directory.
-.TP
-.B ENOTDIR
-This error is returned by
-.B VFAT_IOCTL_READDIR_BOTH
-and
-.B VFAT_IOCTL_READDIR_SHORT
-if the file descriptor
-.I fd
-does not refer to a directory.
-.TP
-.B ENOTTY
-The file descriptor
-.I fd
-does not refer to an object in a FAT filesystem.
-.PP
-For further error values, see
-.BR ioctl (2).
-.SH STANDARDS
-Linux.
-.SH HISTORY
-.TP
-.B VFAT_IOCTL_READDIR_BOTH
-.TQ
-.B VFAT_IOCTL_READDIR_SHORT
-Linux 2.0.
-.TP
-.B FAT_IOCTL_GET_ATTRIBUTES
-.TQ
-.B FAT_IOCTL_SET_ATTRIBUTES
-.\" just before we got Git history
-Linux 2.6.12.
-.TP
-.B FAT_IOCTL_GET_VOLUME_ID
-Linux 3.11.
-.\" commit 6e5b93ee55d401f1619092fb675b57c28c9ed7ec
-.SH EXAMPLES
-.SS Toggling the archive flag
-The following program demonstrates the usage of
-.BR ioctl (2)
-to manipulate file attributes.
-The program reads and displays the archive attribute of a file.
-After inverting the value of the attribute,
-the program reads and displays the attribute again.
-.PP
-The following was recorded when applying the program for the file
-.IR /mnt/user/foo :
-.PP
-.in +4n
-.EX
-# ./toggle_fat_archive_flag /mnt/user/foo
-Archive flag is set
-Toggling archive flag
-Archive flag is not set
-.EE
-.in
-.SS Program source (toggle_fat_archive_flag.c)
-\&
-.\" SRC BEGIN (toggle_fat_archive_flag.c)
-.EX
-#include <fcntl.h>
-#include <linux/msdos_fs.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-\&
-/*
- * Read file attributes of a file on a FAT filesystem.
- * Output the state of the archive flag.
- */
-static uint32_t
-readattr(int fd)
-{
- int ret;
- uint32_t attr;
-\&
- ret = ioctl(fd, FAT_IOCTL_GET_ATTRIBUTES, &attr);
- if (ret == \-1) {
- perror("ioctl");
- exit(EXIT_FAILURE);
- }
-\&
- if (attr & ATTR_ARCH)
- printf("Archive flag is set\en");
- else
- printf("Archive flag is not set\en");
-\&
- return attr;
-}
-\&
-int
-main(int argc, char *argv[])
-{
- int fd;
- int ret;
- uint32_t attr;
-\&
- if (argc != 2) {
- printf("Usage: %s FILENAME\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- fd = open(argv[1], O_RDONLY);
- if (fd == \-1) {
- perror("open");
- exit(EXIT_FAILURE);
- }
-\&
- /*
- * Read and display the FAT file attributes.
- */
- attr = readattr(fd);
-\&
- /*
- * Invert archive attribute.
- */
- printf("Toggling archive flag\en");
- attr \[ha]= ATTR_ARCH;
-\&
- /*
- * Write the changed FAT file attributes.
- */
- ret = ioctl(fd, FAT_IOCTL_SET_ATTRIBUTES, &attr);
- if (ret == \-1) {
- perror("ioctl");
- exit(EXIT_FAILURE);
- }
-\&
- /*
- * Read and display the FAT file attributes.
- */
- readattr(fd);
-\&
- close(fd);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SS Reading the volume ID
-The following program demonstrates the use of
-.BR ioctl (2)
-to display the volume ID of a FAT filesystem.
-.PP
-The following output was recorded when applying the program for
-directory
-.IR /mnt/user :
-.PP
-.in +4n
-.EX
-$ ./display_fat_volume_id /mnt/user
-Volume ID 6443\-6241
-.EE
-.in
-.SS Program source (display_fat_volume_id.c)
-\&
-.\" SRC BEGIN (display_fat_volume_id.c)
-.EX
-#include <fcntl.h>
-#include <linux/msdos_fs.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int fd;
- int ret;
- uint32_t id;
-\&
- if (argc != 2) {
- printf("Usage: %s FILENAME\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- fd = open(argv[1], O_RDONLY);
- if (fd == \-1) {
- perror("open");
- exit(EXIT_FAILURE);
- }
-\&
- /*
- * Read volume ID.
- */
- ret = ioctl(fd, FAT_IOCTL_GET_VOLUME_ID, &id);
- if (ret == \-1) {
- perror("ioctl");
- exit(EXIT_FAILURE);
- }
-\&
- /*
- * Format the output as two groups of 16 bits each.
- */
- printf("Volume ID %04x\-%04x\en", id >> 16, id & 0xFFFF);
-\&
- close(fd);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SS Listing a directory
-The following program demonstrates the use of
-.BR ioctl (2)
-to list a directory.
-.PP
-The following was recorded when applying the program to the directory
-.IR /mnt/user :
-.PP
-.in +4n
-.EX
-$ \fB./fat_dir /mnt/user\fP
-\&. \-> \[aq]\[aq]
-\&.. \-> \[aq]\[aq]
-ALONGF\[ti]1.TXT \-> \[aq]a long filename.txt\[aq]
-UPPER.TXT \-> \[aq]\[aq]
-LOWER.TXT \-> \[aq]lower.txt\[aq]
-.EE
-.in
-.\"
-.SS Program source
-.in +4n
-.\" SRC BEGIN (ioctl_fat.c)
-.EX
-#include <fcntl.h>
-#include <linux/msdos_fs.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int fd;
- int ret;
- struct __fat_dirent entry[2];
-\&
- if (argc != 2) {
- printf("Usage: %s DIRECTORY\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- /*
- * Open file descriptor for the directory.
- */
- fd = open(argv[1], O_RDONLY | O_DIRECTORY);
- if (fd == \-1) {
- perror("open");
- exit(EXIT_FAILURE);
- }
-\&
- for (;;) {
-\&
- /*
- * Read next directory entry.
- */
- ret = ioctl(fd, VFAT_IOCTL_READDIR_BOTH, entry);
-\&
- /*
- * If an error occurs, the return value is \-1.
- * If the end of the directory list has been reached,
- * the return value is 0.
- * For backward compatibility the end of the directory
- * list is also signaled by d_reclen == 0.
- */
- if (ret < 1)
- break;
-\&
- /*
- * Write both the short name and the long name.
- */
- printf("%s \-> \[aq]%s\[aq]\en", entry[0].d_name, entry[1].d_name);
- }
-\&
- if (ret == \-1) {
- perror("VFAT_IOCTL_READDIR_BOTH");
- exit(EXIT_FAILURE);
- }
-\&
- /*
- * Close the file descriptor.
- */
- close(fd);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.in
-.SH SEE ALSO
-.BR ioctl (2)
diff --git a/man2/ioctl_ficlone.2 b/man2/ioctl_ficlone.2
deleted file mode 100644
index 19bb3482d..000000000
--- a/man2/ioctl_ficlone.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/ioctl_ficlonerange.2
diff --git a/man2/ioctl_ficlonerange.2 b/man2/ioctl_ficlonerange.2
deleted file mode 100644
index 7d823dde7..000000000
--- a/man2/ioctl_ficlonerange.2
+++ /dev/null
@@ -1,129 +0,0 @@
-.\" Copyright (c) 2016, Oracle. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.TH ioctl_ficlonerange 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ioctl_ficlonerange, ioctl_ficlone \-
-share some the data of one file with another file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/fs.h>" " /* Definition of " FICLONE* " constants */"
-.B #include <sys/ioctl.h>
-.PP
-.BI "int ioctl(int " dest_fd ", FICLONERANGE, struct file_clone_range *" arg );
-.BI "int ioctl(int " dest_fd ", FICLONE, int " src_fd );
-.fi
-.SH DESCRIPTION
-If a filesystem supports files sharing physical storage between multiple
-files ("reflink"), this
-.BR ioctl (2)
-operation can be used to make some of the data in the
-.I src_fd
-file appear in the
-.I dest_fd
-file by sharing the underlying storage, which is faster than making a separate
-physical copy of the data.
-Both files must reside within the same filesystem.
-If a file write should occur to a shared region,
-the filesystem must ensure that the changes remain private to the file being
-written.
-This behavior is commonly referred to as "copy on write".
-.PP
-This ioctl reflinks up to
-.I src_length
-bytes from file descriptor
-.I src_fd
-at offset
-.I src_offset
-into the file
-.I dest_fd
-at offset
-.IR dest_offset ,
-provided that both are files.
-If
-.I src_length
-is zero, the ioctl reflinks to the end of the source file.
-This information is conveyed in a structure of
-the following form:
-.PP
-.in +4n
-.EX
-struct file_clone_range {
- __s64 src_fd;
- __u64 src_offset;
- __u64 src_length;
- __u64 dest_offset;
-};
-.EE
-.in
-.PP
-Clones are atomic with regards to concurrent writes, so no locks need to be
-taken to obtain a consistent cloned copy.
-.PP
-The
-.B FICLONE
-ioctl clones entire files.
-.SH RETURN VALUE
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-Error codes can be one of, but are not limited to, the following:
-.TP
-.B EBADF
-.I src_fd
-is not open for reading;
-.I dest_fd
-is not open for writing or is open for append-only writes;
-or the filesystem which
-.I src_fd
-resides on does not support reflink.
-.TP
-.B EINVAL
-The filesystem does not support reflinking the ranges of the given files.
-This error can also appear if either file descriptor represents
-a device, FIFO, or socket.
-Disk filesystems generally require the offset and length arguments
-to be aligned to the fundamental block size.
-XFS and Btrfs do not support
-overlapping reflink ranges in the same file.
-.TP
-.B EISDIR
-One of the files is a directory and the filesystem does not support shared
-regions in directories.
-.TP
-.B EOPNOTSUPP
-This can appear if the filesystem does not support reflinking either file
-descriptor, or if either file descriptor refers to special inodes.
-.TP
-.B EPERM
-.I dest_fd
-is immutable.
-.TP
-.B ETXTBSY
-One of the files is a swap file.
-Swap files cannot share storage.
-.TP
-.B EXDEV
-.IR dest_fd " and " src_fd
-are not on the same mounted filesystem.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 4.5.
-.PP
-They were previously known as
-.B BTRFS_IOC_CLONE
-and
-.BR BTRFS_IOC_CLONE_RANGE ,
-and were private to Btrfs.
-.SH NOTES
-Because a copy-on-write operation requires the allocation of new storage, the
-.BR fallocate (2)
-operation may unshare shared blocks to guarantee that subsequent writes will
-not fail because of lack of disk space.
-.SH SEE ALSO
-.BR ioctl (2)
diff --git a/man2/ioctl_fideduperange.2 b/man2/ioctl_fideduperange.2
deleted file mode 100644
index 34623cf7b..000000000
--- a/man2/ioctl_fideduperange.2
+++ /dev/null
@@ -1,200 +0,0 @@
-.\" Copyright (c) 2016, Oracle. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.TH ioctl_fideduperange 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ioctl_fideduperange \- share some the data of one file with another file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/fs.h>" " /* Definition of " FIDEDUPERANGE " and"
-.BR " FILE_DEDUPE_* " constants */
-.B #include <sys/ioctl.h>
-.PP
-.BI "int ioctl(int " src_fd ", FIDEDUPERANGE, struct file_dedupe_range *" arg );
-.fi
-.SH DESCRIPTION
-If a filesystem supports files sharing physical storage between multiple
-files, this
-.BR ioctl (2)
-operation can be used to make some of the data in the
-.B src_fd
-file appear in the
-.B dest_fd
-file by sharing the underlying storage if the file data is identical
-("deduplication").
-Both files must reside within the same filesystem.
-This reduces storage consumption by allowing the filesystem
-to store one shared copy of the data.
-If a file write should occur to a shared
-region, the filesystem must ensure that the changes remain private to the file
-being written.
-This behavior is commonly referred to as "copy on write".
-.PP
-This ioctl performs the "compare and share if identical" operation on up to
-.I src_length
-bytes from file descriptor
-.I src_fd
-at offset
-.IR src_offset .
-This information is conveyed in a structure of the following form:
-.PP
-.in +4n
-.EX
-struct file_dedupe_range {
- __u64 src_offset;
- __u64 src_length;
- __u16 dest_count;
- __u16 reserved1;
- __u32 reserved2;
- struct file_dedupe_range_info info[0];
-};
-.EE
-.in
-.PP
-Deduplication is atomic with regards to concurrent writes, so no locks need to
-be taken to obtain a consistent deduplicated copy.
-.PP
-The fields
-.IR reserved1 " and " reserved2
-must be zero.
-.PP
-Destinations for the deduplication operation are conveyed in the array at the
-end of the structure.
-The number of destinations is given in
-.IR dest_count ,
-and the destination information is conveyed in the following form:
-.PP
-.in +4n
-.EX
-struct file_dedupe_range_info {
- __s64 dest_fd;
- __u64 dest_offset;
- __u64 bytes_deduped;
- __s32 status;
- __u32 reserved;
-};
-.EE
-.in
-.PP
-Each deduplication operation targets
-.I src_length
-bytes in file descriptor
-.I dest_fd
-at offset
-.IR dest_offset .
-The field
-.I reserved
-must be zero.
-During the call,
-.I src_fd
-must be open for reading and
-.I dest_fd
-must be open for writing.
-The combined size of the struct
-.I file_dedupe_range
-and the struct
-.I file_dedupe_range_info
-array must not exceed the system page size.
-The maximum size of
-.I src_length
-is filesystem dependent and is typically 16\~MiB.
-This limit will be enforced silently by the filesystem.
-By convention, the storage used by
-.I src_fd
-is mapped into
-.I dest_fd
-and the previous contents in
-.I dest_fd
-are freed.
-.PP
-Upon successful completion of this ioctl, the number of bytes successfully
-deduplicated is returned in
-.I bytes_deduped
-and a status code for the deduplication operation is returned in
-.IR status .
-If even a single byte in the range does not match, the deduplication
-request will be ignored and
-.I status
-set to
-.BR FILE_DEDUPE_RANGE_DIFFERS .
-The
-.I status
-code is set to
-.B FILE_DEDUPE_RANGE_SAME
-for success, a negative error code in case of error, or
-.B FILE_DEDUPE_RANGE_DIFFERS
-if the data did not match.
-.SH RETURN VALUE
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-Possible errors include (but are not limited to) the following:
-.TP
-.B EBADF
-.I src_fd
-is not open for reading;
-.I dest_fd
-is not open for writing or is open for append-only writes; or the filesystem
-which
-.I src_fd
-resides on does not support deduplication.
-.TP
-.B EINVAL
-The filesystem does not support deduplicating the ranges of the given files.
-This error can also appear if either file descriptor represents
-a device, FIFO, or socket.
-Disk filesystems generally require the offset and length arguments
-to be aligned to the fundamental block size.
-Neither Btrfs nor XFS support
-overlapping deduplication ranges in the same file.
-.TP
-.B EISDIR
-One of the files is a directory and the filesystem does not support shared
-regions in directories.
-.TP
-.B ENOMEM
-The kernel was unable to allocate sufficient memory to perform the
-operation or
-.I dest_count
-is so large that the input argument description spans more than a single
-page of memory.
-.TP
-.B EOPNOTSUPP
-This can appear if the filesystem does not support deduplicating either file
-descriptor, or if either file descriptor refers to special inodes.
-.TP
-.B EPERM
-.I dest_fd
-is immutable.
-.TP
-.B ETXTBSY
-One of the files is a swap file.
-Swap files cannot share storage.
-.TP
-.B EXDEV
-.I dest_fd
-and
-.I src_fd
-are not on the same mounted filesystem.
-.SH VERSIONS
-Some filesystems may limit the amount of data that can be deduplicated in a
-single call.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 4.5.
-.PP
-It was previously known as
-.B BTRFS_IOC_FILE_EXTENT_SAME
-and was private to Btrfs.
-.SH NOTES
-Because a copy-on-write operation requires the allocation of new storage, the
-.BR fallocate (2)
-operation may unshare shared blocks to guarantee that subsequent writes will
-not fail because of lack of disk space.
-.SH SEE ALSO
-.BR ioctl (2)
diff --git a/man2/ioctl_fslabel.2 b/man2/ioctl_fslabel.2
deleted file mode 100644
index a7c854c6a..000000000
--- a/man2/ioctl_fslabel.2
+++ /dev/null
@@ -1,72 +0,0 @@
-.\" Copyright (c) 2018, Red Hat, Inc. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.TH ioctl_fslabel 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ioctl_fslabel \- get or set a filesystem label
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/fs.h>" " /* Definition of " *FSLABEL* " constants */"
-.B #include <sys/ioctl.h>
-.PP
-.BI "int ioctl(int " fd ", FS_IOC_GETFSLABEL, char " label [FSLABEL_MAX]);
-.BI "int ioctl(int " fd ", FS_IOC_SETFSLABEL, char " label [FSLABEL_MAX]);
-.fi
-.SH DESCRIPTION
-If a filesystem supports online label manipulation, these
-.BR ioctl (2)
-operations can be used to get or set the filesystem label for the filesystem
-on which
-.I fd
-resides.
-The
-.B FS_IOC_SETFSLABEL
-operation requires privilege
-.RB ( CAP_SYS_ADMIN ).
-.SH RETURN VALUE
-On success zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-Possible errors include (but are not limited to) the following:
-.TP
-.B EFAULT
-.I label
-references an inaccessible memory area.
-.TP
-.B EINVAL
-The specified label exceeds the maximum label length for the filesystem.
-.TP
-.B ENOTTY
-This can appear if the filesystem does not support online label manipulation.
-.TP
-.B EPERM
-The calling process does not have sufficient permissions to set the label.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 4.18.
-.PP
-They were previously known as
-.B BTRFS_IOC_GET_FSLABEL
-and
-.B BTRFS_IOC_SET_FSLABEL
-and were private to Btrfs.
-.SH NOTES
-The maximum string length for this interface is
-.BR FSLABEL_MAX ,
-including the terminating null byte (\[aq]\\0\[aq]).
-Filesystems have differing maximum label lengths, which may or
-may not include the terminating null.
-The string provided to
-.B FS_IOC_SETFSLABEL
-must always be null-terminated, and the string returned by
-.B FS_IOC_GETFSLABEL
-will always be null-terminated.
-.SH SEE ALSO
-.BR ioctl (2),
-.BR blkid (8)
diff --git a/man2/ioctl_getfsmap.2 b/man2/ioctl_getfsmap.2
deleted file mode 100644
index d995ad524..000000000
--- a/man2/ioctl_getfsmap.2
+++ /dev/null
@@ -1,351 +0,0 @@
-.\" Copyright (c) 2017, Oracle. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.TH ioctl_getfsmap 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ioctl_getfsmap \- retrieve the physical layout of the filesystem
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/fsmap.h> " "/* Definition of " FS_IOC_GETFSMAP ,
-.BR " FM?_OF_*" ", and " *FMR_OWN_* " constants */"
-.B #include <sys/ioctl.h>
-.PP
-.BI "int ioctl(int " fd ", FS_IOC_GETFSMAP, struct fsmap_head * " arg );
-.fi
-.SH DESCRIPTION
-This
-.BR ioctl (2)
-operation retrieves physical extent mappings for a filesystem.
-This information can be used to discover which files are mapped to a physical
-block, examine free space, or find known bad blocks, among other things.
-.PP
-The sole argument to this operation should be a pointer to a single
-.IR "struct fsmap_head" ":"
-.PP
-.in +4n
-.EX
-struct fsmap {
- __u32 fmr_device; /* Device ID */
- __u32 fmr_flags; /* Mapping flags */
- __u64 fmr_physical; /* Device offset of segment */
- __u64 fmr_owner; /* Owner ID */
- __u64 fmr_offset; /* File offset of segment */
- __u64 fmr_length; /* Length of segment */
- __u64 fmr_reserved[3]; /* Must be zero */
-};
-\&
-struct fsmap_head {
- __u32 fmh_iflags; /* Control flags */
- __u32 fmh_oflags; /* Output flags */
- __u32 fmh_count; /* # of entries in array incl. input */
- __u32 fmh_entries; /* # of entries filled in (output) */
- __u64 fmh_reserved[6]; /* Must be zero */
-\&
- struct fsmap fmh_keys[2]; /* Low and high keys for
- the mapping search */
- struct fsmap fmh_recs[]; /* Returned records */
-};
-.EE
-.in
-.PP
-The two
-.I fmh_keys
-array elements specify the lowest and highest reverse-mapping
-key for which the application would like physical mapping
-information.
-A reverse mapping key consists of the tuple (device, block, owner, offset).
-The owner and offset fields are part of the key because some filesystems
-support sharing physical blocks between multiple files and
-therefore may return multiple mappings for a given physical block.
-.PP
-Filesystem mappings are copied into the
-.I fmh_recs
-array, which immediately follows the header data.
-.\"
-.SS Fields of struct fsmap_head
-The
-.I fmh_iflags
-field is a bit mask passed to the kernel to alter the output.
-No flags are currently defined, so the caller must set this value to zero.
-.PP
-The
-.I fmh_oflags
-field is a bit mask of flags set by the kernel concerning the returned mappings.
-If
-.B FMH_OF_DEV_T
-is set, then the
-.I fmr_device
-field represents a
-.I dev_t
-structure containing the major and minor numbers of the block device.
-.PP
-The
-.I fmh_count
-field contains the number of elements in the array being passed to the
-kernel.
-If this value is 0,
-.I fmh_entries
-will be set to the number of records that would have been returned had
-the array been large enough;
-no mapping information will be returned.
-.PP
-The
-.I fmh_entries
-field contains the number of elements in the
-.I fmh_recs
-array that contain useful information.
-.PP
-The
-.I fmh_reserved
-fields must be set to zero.
-.\"
-.SS Keys
-The two key records in
-.I fsmap_head.fmh_keys
-specify the lowest and highest extent records in the keyspace that the caller
-wants returned.
-A filesystem that can share blocks between files likely requires the tuple
-.RI "(" "device" ", " "physical" ", " "owner" ", " "offset" ", " "flags" ")"
-to uniquely index any filesystem mapping record.
-Classic non-sharing filesystems might be able to identify any record with only
-.RI "(" "device" ", " "physical" ", " "flags" ")."
-For example, if the low key is set to (8:0, 36864, 0, 0, 0), the filesystem will
-only return records for extents starting at or above 36\ KiB on disk.
-If the high key is set to (8:0, 1048576, 0, 0, 0),
-only records below 1\ MiB will be returned.
-The format of
-.I fmr_device
-in the keys must match the format of the same field in the output records,
-as defined below.
-By convention, the field
-.I fsmap_head.fmh_keys[0]
-must contain the low key and
-.I fsmap_head.fmh_keys[1]
-must contain the high key for the request.
-.PP
-For convenience, if
-.I fmr_length
-is set in the low key, it will be added to
-.IR fmr_block " or " fmr_offset
-as appropriate.
-The caller can take advantage of this subtlety to set up subsequent calls
-by copying
-.I fsmap_head.fmh_recs[fsmap_head.fmh_entries \- 1]
-into the low key.
-The function
-.I fsmap_advance
-(defined in
-.IR linux/fsmap.h )
-provides this functionality.
-.\"
-.SS Fields of struct fsmap
-The
-.I fmr_device
-field uniquely identifies the underlying storage device.
-If the
-.B FMH_OF_DEV_T
-flag is set in the header's
-.I fmh_oflags
-field, this field contains a
-.I dev_t
-from which major and minor numbers can be extracted.
-If the flag is not set, this field contains a value that must be unique
-for each unique storage device.
-.PP
-The
-.I fmr_physical
-field contains the disk address of the extent in bytes.
-.PP
-The
-.I fmr_owner
-field contains the owner of the extent.
-This is an inode number unless
-.B FMR_OF_SPECIAL_OWNER
-is set in the
-.I fmr_flags
-field, in which case the value is determined by the filesystem.
-See the section below about owner values for more details.
-.PP
-The
-.I fmr_offset
-field contains the logical address in the mapping record in bytes.
-This field has no meaning if the
-.BR FMR_OF_SPECIAL_OWNER " or " FMR_OF_EXTENT_MAP
-flags are set in
-.IR fmr_flags "."
-.PP
-The
-.I fmr_length
-field contains the length of the extent in bytes.
-.PP
-The
-.I fmr_flags
-field is a bit mask of extent state flags.
-The bits are:
-.RS 0.4i
-.TP
-.B FMR_OF_PREALLOC
-The extent is allocated but not yet written.
-.TP
-.B FMR_OF_ATTR_FORK
-This extent contains extended attribute data.
-.TP
-.B FMR_OF_EXTENT_MAP
-This extent contains extent map information for the owner.
-.TP
-.B FMR_OF_SHARED
-Parts of this extent may be shared.
-.TP
-.B FMR_OF_SPECIAL_OWNER
-The
-.I fmr_owner
-field contains a special value instead of an inode number.
-.TP
-.B FMR_OF_LAST
-This is the last record in the data set.
-.RE
-.PP
-The
-.I fmr_reserved
-field will be set to zero.
-.\"
-.SS Owner values
-Generally, the value of the
-.I fmr_owner
-field for non-metadata extents should be an inode number.
-However, filesystems are under no obligation to report inode numbers;
-they may instead report
-.B FMR_OWN_UNKNOWN
-if the inode number cannot easily be retrieved, if the caller lacks
-sufficient privilege, if the filesystem does not support stable
-inode numbers, or for any other reason.
-If a filesystem wishes to condition the reporting of inode numbers based
-on process capabilities, it is strongly urged that the
-.B CAP_SYS_ADMIN
-capability be used for this purpose.
-.TP
-The following special owner values are generic to all filesystems:
-.RS 0.4i
-.TP
-.B FMR_OWN_FREE
-Free space.
-.TP
-.B FMR_OWN_UNKNOWN
-This extent is in use but its owner is not known or not easily retrieved.
-.TP
-.B FMR_OWN_METADATA
-This extent is filesystem metadata.
-.RE
-.PP
-XFS can return the following special owner values:
-.RS 0.4i
-.TP
-.B XFS_FMR_OWN_FREE
-Free space.
-.TP
-.B XFS_FMR_OWN_UNKNOWN
-This extent is in use but its owner is not known or not easily retrieved.
-.TP
-.B XFS_FMR_OWN_FS
-Static filesystem metadata which exists at a fixed address.
-These are the AG superblock, the AGF, the AGFL, and the AGI headers.
-.TP
-.B XFS_FMR_OWN_LOG
-The filesystem journal.
-.TP
-.B XFS_FMR_OWN_AG
-Allocation group metadata, such as the free space btrees and the
-reverse mapping btrees.
-.TP
-.B XFS_FMR_OWN_INOBT
-The inode and free inode btrees.
-.TP
-.B XFS_FMR_OWN_INODES
-Inode records.
-.TP
-.B XFS_FMR_OWN_REFC
-Reference count information.
-.TP
-.B XFS_FMR_OWN_COW
-This extent is being used to stage a copy-on-write.
-.TP
-.B XFS_FMR_OWN_DEFECTIVE:
-This extent has been marked defective either by the filesystem or the
-underlying device.
-.RE
-.PP
-ext4 can return the following special owner values:
-.RS 0.4i
-.TP
-.B EXT4_FMR_OWN_FREE
-Free space.
-.TP
-.B EXT4_FMR_OWN_UNKNOWN
-This extent is in use but its owner is not known or not easily retrieved.
-.TP
-.B EXT4_FMR_OWN_FS
-Static filesystem metadata which exists at a fixed address.
-This is the superblock and the group descriptors.
-.TP
-.B EXT4_FMR_OWN_LOG
-The filesystem journal.
-.TP
-.B EXT4_FMR_OWN_INODES
-Inode records.
-.TP
-.B EXT4_FMR_OWN_BLKBM
-Block bit map.
-.TP
-.B EXT4_FMR_OWN_INOBM
-Inode bit map.
-.RE
-.SH RETURN VALUE
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-The error placed in
-.I errno
-can be one of, but is not limited to, the following:
-.TP
-.B EBADF
-.I fd
-is not open for reading.
-.TP
-.B EBADMSG
-The filesystem has detected a checksum error in the metadata.
-.TP
-.B EFAULT
-The pointer passed in was not mapped to a valid memory address.
-.TP
-.B EINVAL
-The array is not long enough, the keys do not point to a valid part of
-the filesystem, the low key points to a higher point in the filesystem's
-physical storage address space than the high key, or a nonzero value
-was passed in one of the fields that must be zero.
-.TP
-.B ENOMEM
-Insufficient memory to process the request.
-.TP
-.B EOPNOTSUPP
-The filesystem does not support this command.
-.TP
-.B EUCLEAN
-The filesystem metadata is corrupt and needs repair.
-.SH STANDARDS
-Linux.
-.PP
-Not all filesystems support it.
-.SH HISTORY
-Linux 4.12.
-.SH EXAMPLES
-See
-.I io/fsmap.c
-in the
-.I xfsprogs
-distribution for a sample program.
-.SH SEE ALSO
-.BR ioctl (2)
diff --git a/man2/ioctl_iflags.2 b/man2/ioctl_iflags.2
deleted file mode 100644
index cf4962829..000000000
--- a/man2/ioctl_iflags.2
+++ /dev/null
@@ -1,202 +0,0 @@
-.\" Copyright (c) 2017 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH ioctl_iflags 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ioctl_iflags \- ioctl() operations for inode flags
-.SH DESCRIPTION
-Various Linux filesystems support the notion of
-.IR "inode flags" \[em]attributes
-that modify the semantics of files and directories.
-These flags can be retrieved and modified using two
-.BR ioctl (2)
-operations:
-.PP
-.in +4n
-.EX
-int attr;
-fd = open("pathname", ...);
-\&
-ioctl(fd, FS_IOC_GETFLAGS, &attr); /* Place current flags
- in \[aq]attr\[aq] */
-attr |= FS_NOATIME_FL; /* Tweak returned bit mask */
-ioctl(fd, FS_IOC_SETFLAGS, &attr); /* Update flags for inode
- referred to by \[aq]fd\[aq] */
-.EE
-.in
-.PP
-The
-.BR lsattr (1)
-and
-.BR chattr (1)
-shell commands provide interfaces to these two operations,
-allowing a user to view and modify the inode flags associated with a file.
-.PP
-The following flags are supported
-(shown along with the corresponding letter used to indicate the flag by
-.BR lsattr (1)
-and
-.BR chattr (1)):
-.TP
-.BR FS_APPEND_FL " \[aq]a\[aq]"
-The file can be opened only with the
-.B O_APPEND
-flag.
-(This restriction applies even to the superuser.)
-Only a privileged process
-.RB ( CAP_LINUX_IMMUTABLE )
-can set or clear this attribute.
-.TP
-.BR FS_COMPR_FL " \[aq]c\[aq]"
-Store the file in a compressed format on disk.
-This flag is
-.I not
-supported by most of the mainstream filesystem implementations;
-one exception is
-.BR btrfs (5).
-.TP
-.BR FS_DIRSYNC_FL " \[aq]D\[aq] (since Linux 2.6.0)"
-Write directory changes synchronously to disk.
-This flag provides semantics equivalent to the
-.BR mount (2)
-.B MS_DIRSYNC
-option, but on a per-directory basis.
-This flag can be applied only to directories.
-.\" .TP
-.\" .BR FS_EXTENT_FL " \[aq]e\[aq]"
-.\" FIXME Some support on ext4? (EXT4_EXTENTS_FL)
-.TP
-.BR FS_IMMUTABLE_FL " \[aq]i\[aq]"
-The file is immutable:
-no changes are permitted to the file contents or metadata
-(permissions, timestamps, ownership, link count, and so on).
-(This restriction applies even to the superuser.)
-Only a privileged process
-.RB ( CAP_LINUX_IMMUTABLE )
-can set or clear this attribute.
-.TP
-.BR FS_JOURNAL_DATA_FL " \[aq]j\[aq]"
-Enable journaling of file data on
-.BR ext3 (5)
-and
-.BR ext4 (5)
-filesystems.
-On a filesystem that is journaling in
-.I ordered
-or
-.I writeback
-mode, a privileged
-.RB ( CAP_SYS_RESOURCE )
-process can set this flag to enable journaling of data updates on
-a per-file basis.
-.TP
-.BR FS_NOATIME_FL " \[aq]A\[aq]"
-Don't update the file last access time when the file is accessed.
-This can provide I/O performance benefits for applications that do not care
-about the accuracy of this timestamp.
-This flag provides functionality similar to the
-.BR mount (2)
-.B MS_NOATIME
-flag, but on a per-file basis.
-.\" .TP
-.\" .BR FS_NOCOMP_FL " \[aq]\[aq]"
-.\" FIXME Support for FS_NOCOMP_FL on Btrfs?
-.TP
-.BR FS_NOCOW_FL " \[aq]C\[aq] (since Linux 2.6.39)"
-The file will not be subject to copy-on-write updates.
-This flag has an effect only on filesystems that support copy-on-write
-semantics, such as Btrfs.
-See
-.BR chattr (1)
-and
-.BR btrfs (5).
-.TP
-.BR FS_NODUMP_FL " \[aq]d\[aq]"
-Don't include this file in backups made using
-.BR dump (8).
-.TP
-.BR FS_NOTAIL_FL " \[aq]t\[aq]"
-This flag is supported only on Reiserfs.
-It disables the Reiserfs tail-packing feature,
-which tries to pack small files (and the final fragment of larger files)
-into the same disk block as the file metadata.
-.TP
-.BR FS_PROJINHERIT_FL " \[aq]P\[aq] (since Linux 4.5)"
-.\" commit 040cb3786d9b25293b8b0b05b90da0f871e1eb9b
-.\" Flag name was added in Linux 4.4
-.\" FIXME Not currently supported because not in FS_FL_USER_MODIFIABLE?
-Inherit the quota project ID.
-Files and subdirectories will inherit the project ID of the directory.
-This flag can be applied only to directories.
-.TP
-.BR FS_SECRM_FL " \[aq]s\[aq]"
-Mark the file for secure deletion.
-This feature is not implemented by any filesystem,
-since the task of securely erasing a file from a recording medium
-is surprisingly difficult.
-.TP
-.BR FS_SYNC_FL " \[aq]S\[aq]"
-Make file updates synchronous.
-For files, this makes all writes synchronous
-(as though all opens of the file were with the
-.B O_SYNC
-flag).
-For directories, this has the same effect as the
-.B FS_DIRSYNC_FL
-flag.
-.TP
-.BR FS_TOPDIR_FL " \[aq]T\[aq]"
-Mark a directory for special treatment under the Orlov block-allocation
-strategy.
-See
-.BR chattr (1)
-for details.
-This flag can be applied only to directories and
-has an effect only for ext2, ext3, and ext4.
-.TP
-.BR FS_UNRM_FL " \[aq]u\[aq]"
-Allow the file to be undeleted if it is deleted.
-This feature is not implemented by any filesystem,
-since it is possible to implement file-recovery mechanisms outside the kernel.
-.PP
-In most cases,
-when any of the above flags is set on a directory,
-the flag is inherited by files and subdirectories
-created inside that directory.
-Exceptions include
-.BR FS_TOPDIR_FL ,
-which is not inheritable, and
-.BR FS_DIRSYNC_FL ,
-which is inherited only by subdirectories.
-.SH STANDARDS
-Linux.
-.SH NOTES
-In order to change the inode flags of a file using the
-.B FS_IOC_SETFLAGS
-operation,
-the effective user ID of the caller must match the owner of the file,
-or the caller must have the
-.B CAP_FOWNER
-capability.
-.PP
-The type of the argument given to the
-.B FS_IOC_GETFLAGS
-and
-.B FS_IOC_SETFLAGS
-operations is
-.IR int\~* ,
-notwithstanding the implication in the kernel source file
-.I include/uapi/linux/fs.h
-that the argument is
-.IR long\~* .
-.SH SEE ALSO
-.BR chattr (1),
-.BR lsattr (1),
-.BR mount (2),
-.BR btrfs (5),
-.BR ext4 (5),
-.BR xfs (5),
-.BR xattr (7),
-.BR mount (8)
diff --git a/man2/ioctl_ns.2 b/man2/ioctl_ns.2
deleted file mode 100644
index 19fa3b1fe..000000000
--- a/man2/ioctl_ns.2
+++ /dev/null
@@ -1,342 +0,0 @@
-.\" Copyright (c) 2017 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH ioctl_ns 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ioctl_ns \- ioctl() operations for Linux namespaces
-.SH DESCRIPTION
-.\" ============================================================
-.\"
-.SS Discovering namespace relationships
-The following
-.BR ioctl (2)
-operations are provided to allow discovery of namespace relationships (see
-.BR user_namespaces (7)
-and
-.BR pid_namespaces (7)).
-The form of the calls is:
-.PP
-.in +4n
-.EX
-new_fd = ioctl(fd, request);
-.EE
-.in
-.PP
-In each case,
-.I fd
-refers to a
-.IR /proc/ pid /ns/*
-file.
-Both operations return a new file descriptor on success.
-.TP
-.BR NS_GET_USERNS " (since Linux 4.9)"
-.\" commit bcac25a58bfc6bd79191ac5d7afb49bea96da8c9
-.\" commit 6786741dbf99e44fb0c0ed85a37582b8a26f1c3b
-Returns a file descriptor that refers to the owning user namespace
-for the namespace referred to by
-.IR fd .
-.TP
-.BR NS_GET_PARENT " (since Linux 4.9)"
-.\" commit a7306ed8d94af729ecef8b6e37506a1c6fc14788
-Returns a file descriptor that refers to the parent namespace of
-the namespace referred to by
-.IR fd .
-This operation is valid only for hierarchical namespaces
-(i.e., PID and user namespaces).
-For user namespaces,
-.B NS_GET_PARENT
-is synonymous with
-.BR NS_GET_USERNS .
-.PP
-The new file descriptor returned by these operations is opened with the
-.B O_RDONLY
-and
-.B O_CLOEXEC
-(close-on-exec; see
-.BR fcntl (2))
-flags.
-.PP
-By applying
-.BR fstat (2)
-to the returned file descriptor, one obtains a
-.I stat
-structure whose
-.I st_dev
-(resident device) and
-.I st_ino
-(inode number) fields together identify the owning/parent namespace.
-This inode number can be matched with the inode number of another
-.IR /proc/ pid /ns/ { pid , user }
-file to determine whether that is the owning/parent namespace.
-.PP
-Either of these
-.BR ioctl (2)
-operations can fail with the following errors:
-.TP
-.B EPERM
-The requested namespace is outside of the caller's namespace scope.
-This error can occur if, for example, the owning user namespace is an
-ancestor of the caller's current user namespace.
-It can also occur on attempts to obtain the parent of the initial
-user or PID namespace.
-.TP
-.B ENOTTY
-The operation is not supported by this kernel version.
-.PP
-Additionally, the
-.B NS_GET_PARENT
-operation can fail with the following error:
-.TP
-.B EINVAL
-.I fd
-refers to a nonhierarchical namespace.
-.PP
-See the EXAMPLES section for an example of the use of these operations.
-.\" ============================================================
-.\"
-.SS Discovering the namespace type
-The
-.B NS_GET_NSTYPE
-.\" commit e5ff5ce6e20ee22511398bb31fb912466cf82a36
-operation (available since Linux 4.11) can be used to discover
-the type of namespace referred to by the file descriptor
-.IR fd :
-.PP
-.in +4n
-.EX
-nstype = ioctl(fd, NS_GET_NSTYPE);
-.EE
-.in
-.PP
-.I fd
-refers to a
-.IR /proc/ pid /ns/*
-file.
-.PP
-The return value is one of the
-.B CLONE_NEW*
-values that can be specified to
-.BR clone (2)
-or
-.BR unshare (2)
-in order to create a namespace.
-.\" ============================================================
-.\"
-.SS Discovering the owner of a user namespace
-The
-.B NS_GET_OWNER_UID
-.\" commit 015bb305b8ebe8d601a238ab70ebdc394c7a19ba
-operation (available since Linux 4.11) can be used to discover
-the owner user ID of a user namespace (i.e., the effective user ID
-of the process that created the user namespace).
-The form of the call is:
-.PP
-.in +4n
-.EX
-uid_t uid;
-ioctl(fd, NS_GET_OWNER_UID, &uid);
-.EE
-.in
-.PP
-.I fd
-refers to a
-.IR /proc/ pid /ns/user
-file.
-.PP
-The owner user ID is returned in the
-.I uid_t
-pointed to by the third argument.
-.PP
-This operation can fail with the following error:
-.TP
-.B EINVAL
-.I fd
-does not refer to a user namespace.
-.SH ERRORS
-Any of the above
-.BR ioctl ()
-operations can return the following errors:
-.TP
-.B ENOTTY
-.I fd
-does not refer to a
-.IR /proc/ pid /ns/ *
-file.
-.SH STANDARDS
-Linux.
-.SH EXAMPLES
-The example shown below uses the
-.BR ioctl (2)
-operations described above to perform simple
-discovery of namespace relationships.
-The following shell sessions show various examples of the use
-of this program.
-.PP
-Trying to get the parent of the initial user namespace fails,
-since it has no parent:
-.PP
-.in +4n
-.EX
-$ \fB./ns_show /proc/self/ns/user p\fP
-The parent namespace is outside your namespace scope
-.EE
-.in
-.PP
-Create a process running
-.BR sleep (1)
-that resides in new user and UTS namespaces,
-and show that the new UTS namespace is associated with the new user namespace:
-.PP
-.in +4n
-.EX
-$ \fBunshare \-Uu sleep 1000 &\fP
-[1] 23235
-$ \fB./ns_show /proc/23235/ns/uts u\fP
-Device/Inode of owning user namespace is: [0,3] / 4026532448
-$ \fBreadlink /proc/23235/ns/user\fP
-user:[4026532448]
-.EE
-.in
-.PP
-Then show that the parent of the new user namespace in the preceding
-example is the initial user namespace:
-.PP
-.in +4n
-.EX
-$ \fBreadlink /proc/self/ns/user\fP
-user:[4026531837]
-$ \fB./ns_show /proc/23235/ns/user p\fP
-Device/Inode of parent namespace is: [0,3] / 4026531837
-.EE
-.in
-.PP
-Start a shell in a new user namespace, and show that from within
-this shell, the parent user namespace can't be discovered.
-Similarly, the UTS namespace
-(which is associated with the initial user namespace)
-can't be discovered.
-.PP
-.in +4n
-.EX
-$ \fBPS1="sh2$ " unshare \-U bash\fP
-sh2$ \fB./ns_show /proc/self/ns/user p\fP
-The parent namespace is outside your namespace scope
-sh2$ \fB./ns_show /proc/self/ns/uts u\fP
-The owning user namespace is outside your namespace scope
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (ns_show.c)
-.EX
-/* ns_show.c
-\&
- Licensed under the GNU General Public License v2 or later.
-*/
-#include <errno.h>
-#include <fcntl.h>
-#include <linux/nsfs.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <sys/sysmacros.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int fd, userns_fd, parent_fd;
- struct stat sb;
-\&
- if (argc < 2) {
- fprintf(stderr, "Usage: %s /proc/[pid]/ns/[file] [p|u]\en",
- argv[0]);
- fprintf(stderr, "\enDisplay the result of one or both "
- "of NS_GET_USERNS (u) or NS_GET_PARENT (p)\en"
- "for the specified /proc/[pid]/ns/[file]. If neither "
- "\[aq]p\[aq] nor \[aq]u\[aq] is specified,\en"
- "NS_GET_USERNS is the default.\en");
- exit(EXIT_FAILURE);
- }
-\&
- /* Obtain a file descriptor for the \[aq]ns\[aq] file specified
- in argv[1]. */
-\&
- fd = open(argv[1], O_RDONLY);
- if (fd == \-1) {
- perror("open");
- exit(EXIT_FAILURE);
- }
-\&
- /* Obtain a file descriptor for the owning user namespace and
- then obtain and display the inode number of that namespace. */
-\&
- if (argc < 3 || strchr(argv[2], \[aq]u\[aq])) {
- userns_fd = ioctl(fd, NS_GET_USERNS);
-\&
- if (userns_fd == \-1) {
- if (errno == EPERM)
- printf("The owning user namespace is outside "
- "your namespace scope\en");
- else
- perror("ioctl\-NS_GET_USERNS");
- exit(EXIT_FAILURE);
- }
-\&
- if (fstat(userns_fd, &sb) == \-1) {
- perror("fstat\-userns");
- exit(EXIT_FAILURE);
- }
- printf("Device/Inode of owning user namespace is: "
- "[%x,%x] / %ju\en",
- major(sb.st_dev),
- minor(sb.st_dev),
- (uintmax_t) sb.st_ino);
-\&
- close(userns_fd);
- }
-\&
- /* Obtain a file descriptor for the parent namespace and
- then obtain and display the inode number of that namespace. */
-\&
- if (argc > 2 && strchr(argv[2], \[aq]p\[aq])) {
- parent_fd = ioctl(fd, NS_GET_PARENT);
-\&
- if (parent_fd == \-1) {
- if (errno == EINVAL)
- printf("Can\[aq] get parent namespace of a "
- "nonhierarchical namespace\en");
- else if (errno == EPERM)
- printf("The parent namespace is outside "
- "your namespace scope\en");
- else
- perror("ioctl\-NS_GET_PARENT");
- exit(EXIT_FAILURE);
- }
-\&
- if (fstat(parent_fd, &sb) == \-1) {
- perror("fstat\-parentns");
- exit(EXIT_FAILURE);
- }
- printf("Device/Inode of parent namespace is: [%x,%x] / %ju\en",
- major(sb.st_dev),
- minor(sb.st_dev),
- (uintmax_t) sb.st_ino);
-\&
- close(parent_fd);
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR fstat (2),
-.BR ioctl (2),
-.BR proc (5),
-.BR namespaces (7)
diff --git a/man2/ioctl_pipe.2 b/man2/ioctl_pipe.2
deleted file mode 100644
index 995e896de..000000000
--- a/man2/ioctl_pipe.2
+++ /dev/null
@@ -1,64 +0,0 @@
-.\" Copyright (c) 2022 by Cyril Hrubis <chrubi@suse.cz>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH ioctl_pipe 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ioctl_pipe \- ioctl() operations for General notification mechanism
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/watch_queue.h>" " /* Definition of " IOC_WATCH_QUEUE_ "* */"
-.B #include <sys/ioctl.h>
-.PP
-.BI "int ioctl(int " pipefd "[1], IOC_WATCH_QUEUE_SET_SIZE, int " size );
-.BI "int ioctl(int " pipefd "[1], IOC_WATCH_QUEUE_SET_FILTER,"
-.BI " struct watch_notification_filter *" filter );
-.fi
-.SH DESCRIPTION
-The following
-.BR ioctl (2)
-operations are provided to set up general notification queue parameters.
-The notification queue is built on the top of a
-.BR pipe (2)
-opened with the
-.B O_NOTIFICATION_PIPE
-flag.
-.TP
-.BR IOC_WATCH_QUEUE_SET_SIZE " (since Linux 5.8)"
-.\" commit c73be61cede5882f9605a852414db559c0ebedfd
-Preallocates the pipe buffer memory so that
-it can fit
-.I size
-notification messages.
-Currently,
-.I size
-must be between 1 and 512.
-.TP
-.BR IOC_WATCH_QUEUE_SET_FILTER " (since Linux 5.8)"
-.\" commit c73be61cede5882f9605a852414db559c0ebedfd
-Watch queue filter can limit events that are received.
-Filters are passed in a
-.I struct watch_notification_filter
-and each filter is described by a
-.I struct watch_notification_type_filter
-structure.
-.IP
-.in +4n
-.EX
-struct watch_notification_filter {
- __u32 nr_filters;
- __u32 __reserved;
- struct watch_notification_type_filter filters[];
-};
-\&
-struct watch_notification_type_filter {
- __u32 type;
- __u32 info_filter;
- __u32 info_mask;
- __u32 subtype_filter[8];
-};
-.EE
-.in
-.SH SEE ALSO
-.BR pipe (2),
-.BR ioctl (2)
diff --git a/man2/ioctl_tty.2 b/man2/ioctl_tty.2
deleted file mode 100644
index 85577f80f..000000000
--- a/man2/ioctl_tty.2
+++ /dev/null
@@ -1,913 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms <walter.harms@informatik.uni-oldenburg.de>
-.\" and Andries Brouwer <aeb@cwi.nl>.
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH ioctl_tty 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ioctl_tty \- ioctls for terminals and serial lines
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/ioctl.h>
-.BR "#include <asm/termbits.h>" " /* Definition of " "struct termios" ,
-.BR " struct termios2" ", and"
-.BR " Bnnn" ", " BOTHER ", " CBAUD ", " CLOCAL ,
-.BR " TC*" { FLUSH , ON , OFF "} and other constants */"
-.PP
-.BI "int ioctl(int " fd ", int " cmd ", ...);"
-.fi
-.SH DESCRIPTION
-The
-.BR ioctl (2)
-call for terminals and serial ports accepts many possible command arguments.
-Most require a third argument, of varying type, here called
-.I argp
-or
-.IR arg .
-.PP
-Use of
-.BR ioctl ()
-makes for nonportable programs.
-Use the POSIX interface described in
-.BR termios (3)
-whenever possible.
-.PP
-Please note that
-.B struct termios
-from
-.I <asm/termbits.h>
-is different and incompatible with
-.B struct termios
-from
-.IR <termios.h> .
-These ioctl calls require
-.B struct termios
-from
-.IR <asm/termbits.h> .
-.SS Get and set terminal attributes
-.TP
-.B TCGETS
-Argument:
-.BI "struct termios\~*" argp
-.IP
-Equivalent to
-.IR "tcgetattr(fd, argp)" .
-.IP
-Get the current serial port settings.
-.TP
-.B TCSETS
-Argument:
-.BI "const struct termios\~*" argp
-.IP
-Equivalent to
-.IR "tcsetattr(fd, TCSANOW, argp)" .
-.IP
-Set the current serial port settings.
-.TP
-.B TCSETSW
-Argument:
-.BI "const struct termios\~*" argp
-.IP
-Equivalent to
-.IR "tcsetattr(fd, TCSADRAIN, argp)" .
-.IP
-Allow the output buffer to drain, and
-set the current serial port settings.
-.TP
-.B TCSETSF
-Argument:
-.BI "const struct termios\~*" argp
-.IP
-Equivalent to
-.IR "tcsetattr(fd, TCSAFLUSH, argp)" .
-.IP
-Allow the output buffer to drain, discard pending input, and
-set the current serial port settings.
-.PP
-The following four ioctls, added in Linux 2.6.20,
-.\" commit 64bb6c5e1ddcd47c951740485026ef08975ee2e6
-.\" commit 592ee3a5e5e2a981ef2829a0380093006d045661
-are just like
-.BR TCGETS ,
-.BR TCSETS ,
-.BR TCSETSW ,
-.BR TCSETSF ,
-except that they take a
-.I "struct termios2\~*"
-instead of a
-.IR "struct termios\~*" .
-If the structure member
-.B c_cflag
-contains the flag
-.BR BOTHER ,
-then the baud rate is stored in the structure members
-.B c_ispeed
-and
-.B c_ospeed
-as integer values.
-These ioctls are not supported on all architectures.
-.RS
-.TS
-lb l.
-TCGETS2 \fBstruct termios2 *\fPargp
-TCSETS2 \fBconst struct termios2 *\fPargp
-TCSETSW2 \fBconst struct termios2 *\fPargp
-TCSETSF2 \fBconst struct termios2 *\fPargp
-.TE
-.RE
-.PP
-The following four ioctls are just like
-.BR TCGETS ,
-.BR TCSETS ,
-.BR TCSETSW ,
-.BR TCSETSF ,
-except that they take a
-.I "struct termio\~*"
-instead of a
-.IR "struct termios\~*" .
-.RS
-.TS
-lb l.
-TCGETA \fBstruct termio *\fPargp
-TCSETA \fBconst struct termio *\fPargp
-TCSETAW \fBconst struct termio *\fPargp
-TCSETAF \fBconst struct termio *\fPargp
-.TE
-.RE
-.SS Locking the termios structure
-The
-.I termios
-structure of a terminal can be locked.
-The lock is itself a
-.I termios
-structure, with nonzero bits or fields indicating a
-locked value.
-.TP
-.B TIOCGLCKTRMIOS
-Argument:
-.BI "struct termios\~*" argp
-.IP
-Gets the locking status of the
-.I termios
-structure of the terminal.
-.TP
-.B TIOCSLCKTRMIOS
-Argument:
-.BI "const struct termios\~*" argp
-.IP
-Sets the locking status of the
-.I termios
-structure of the terminal.
-Only a process with the
-.B CAP_SYS_ADMIN
-capability can do this.
-.SS Get and set window size
-Window sizes are kept in the kernel, but not used by the kernel
-(except in the case of virtual consoles, where the kernel will
-update the window size when the size of the virtual console changes,
-for example, by loading a new font).
-.TP
-.B TIOCGWINSZ
-Argument:
-.BI "struct winsize\~*" argp
-.IP
-Get window size.
-.TP
-.B TIOCSWINSZ
-Argument:
-.BI "const struct winsize\~*" argp
-.IP
-Set window size.
-.PP
-The struct used by these ioctls is defined as
-.PP
-.in +4n
-.EX
-struct winsize {
- unsigned short ws_row;
- unsigned short ws_col;
- unsigned short ws_xpixel; /* unused */
- unsigned short ws_ypixel; /* unused */
-};
-.EE
-.in
-.PP
-When the window size changes, a
-.B SIGWINCH
-signal is sent to the
-foreground process group.
-.SS Sending a break
-.TP
-.B TCSBRK
-Argument:
-.BI "int " arg
-.IP
-Equivalent to
-.IR "tcsendbreak(fd, arg)" .
-.IP
-If the terminal is using asynchronous serial data transmission, and
-.I arg
-is zero, then send a break (a stream of zero bits) for between
-0.25 and 0.5 seconds.
-If the terminal is not using asynchronous
-serial data transmission, then either a break is sent, or the function
-returns without doing anything.
-When
-.I arg
-is nonzero, nobody knows what will happen.
-.IP
-(SVr4, UnixWare, Solaris, and Linux treat
-.I "tcsendbreak(fd,arg)"
-with nonzero
-.I arg
-like
-.IR "tcdrain(fd)" .
-SunOS treats
-.I arg
-as a multiplier, and sends a stream of bits
-.I arg
-times as long as done for zero
-.IR arg .
-DG/UX and AIX treat
-.I arg
-(when nonzero) as a time interval measured in milliseconds.
-HP-UX ignores
-.IR arg .)
-.TP
-.B TCSBRKP
-Argument:
-.BI "int " arg
-.IP
-So-called "POSIX version" of
-.BR TCSBRK .
-It treats nonzero
-.I arg
-as a time interval measured in deciseconds, and does nothing
-when the driver does not support breaks.
-.TP
-.B TIOCSBRK
-Argument:
-.B void
-.IP
-Turn break on, that is, start sending zero bits.
-.TP
-.B TIOCCBRK
-Argument:
-.B void
-.IP
-Turn break off, that is, stop sending zero bits.
-.SS Software flow control
-.TP
-.B TCXONC
-Argument:
-.BI "int " arg
-.IP
-Equivalent to
-.IR "tcflow(fd, arg)" .
-.IP
-See
-.BR tcflow (3)
-for the argument values
-.BR TCOOFF ,
-.BR TCOON ,
-.BR TCIOFF ,
-.BR TCION .
-.SS Buffer count and flushing
-.TP
-.B FIONREAD
-Argument:
-.BI "int\~*" argp
-.IP
-Get the number of bytes in the input buffer.
-.TP
-.B TIOCINQ
-Argument:
-.BI "int\~*" argp
-.IP
-Same as
-.BR FIONREAD .
-.TP
-.B TIOCOUTQ
-Argument:
-.BI "int\~*" argp
-.IP
-Get the number of bytes in the output buffer.
-.TP
-.B TCFLSH
-Argument:
-.BI "int " arg
-.IP
-Equivalent to
-.IR "tcflush(fd, arg)" .
-.IP
-See
-.BR tcflush (3)
-for the argument values
-.BR TCIFLUSH ,
-.BR TCOFLUSH ,
-.BR TCIOFLUSH .
-.TP
-.B TIOCSERGETLSR
-Argument:
-.BI "int\~*" argp
-.IP
-Get line status register.
-Status register has
-.B TIOCSER_TEMT
-bit set when
-output buffer is empty and also hardware transmitter is physically empty.
-.IP
-Does not have to be supported by all serial tty drivers.
-.IP
-.BR tcdrain (3)
-does not wait and returns immediately when
-.B TIOCSER_TEMT
-bit is set.
-.SS Faking input
-.TP
-.B TIOCSTI
-Argument:
-.BI "const char\~*" argp
-.IP
-Insert the given byte in the input queue.
-.SS Redirecting console output
-.TP
-.B TIOCCONS
-Argument:
-.B void
-.IP
-Redirect output that would have gone to
-.I /dev/console
-or
-.I /dev/tty0
-to the given terminal.
-If that was a pseudoterminal master, send it to the slave.
-Before Linux 2.6.10,
-anybody can do this as long as the output was not redirected yet;
-since Linux 2.6.10, only a process with the
-.B CAP_SYS_ADMIN
-capability may do this.
-If output was redirected already, then
-.B EBUSY
-is returned,
-but redirection can be stopped by using this ioctl with
-.I fd
-pointing at
-.I /dev/console
-or
-.IR /dev/tty0 .
-.SS Controlling terminal
-.TP
-.B TIOCSCTTY
-Argument:
-.BI "int " arg
-.IP
-Make the given terminal the controlling terminal of the calling process.
-The calling process must be a session leader and not have a
-controlling terminal already.
-For this case,
-.I arg
-should be specified as zero.
-.IP
-If this terminal is already the controlling terminal
-of a different session group, then the ioctl fails with
-.BR EPERM ,
-unless the caller has the
-.B CAP_SYS_ADMIN
-capability and
-.I arg
-equals 1, in which case the terminal is stolen, and all processes that had
-it as controlling terminal lose it.
-.TP
-.B TIOCNOTTY
-Argument:
-.B void
-.IP
-If the given terminal was the controlling terminal of the calling process,
-give up this controlling terminal.
-If the process was session leader,
-then send
-.B SIGHUP
-and
-.B SIGCONT
-to the foreground process group
-and all processes in the current session lose their controlling terminal.
-.SS Process group and session ID
-.TP
-.B TIOCGPGRP
-Argument:
-.BI "pid_t\~*" argp
-.IP
-When successful, equivalent to
-.IR "*argp = tcgetpgrp(fd)" .
-.IP
-Get the process group ID of the foreground process group on this terminal.
-.TP
-.B TIOCSPGRP
-Argument:
-.BI "const pid_t\~*" argp
-.IP
-Equivalent to
-.IR "tcsetpgrp(fd, *argp)" .
-.IP
-Set the foreground process group ID of this terminal.
-.TP
-.B TIOCGSID
-Argument:
-.BI "pid_t\~*" argp
-.IP
-When successful, equivalent to
-.IR "*argp = tcgetsid(fd)" .
-.IP
-Get the session ID of the given terminal.
-This fails with the error
-.B ENOTTY
-if the terminal is not a master pseudoterminal
-and not our controlling terminal.
-Strange.
-.SS Exclusive mode
-.TP
-.B TIOCEXCL
-Argument:
-.B void
-.IP
-Put the terminal into exclusive mode.
-No further
-.BR open (2)
-operations on the terminal are permitted.
-(They fail with
-.BR EBUSY ,
-except for a process with the
-.B CAP_SYS_ADMIN
-capability.)
-.TP
-.B TIOCGEXCL
-Argument:
-.BI "int\~*" argp
-.IP
-(since Linux 3.8)
-If the terminal is currently in exclusive mode,
-place a nonzero value in the location pointed to by
-.IR argp ;
-otherwise, place zero in
-.IR *argp .
-.TP
-.B TIOCNXCL
-Argument:
-.B void
-.IP
-Disable exclusive mode.
-.SS Line discipline
-.TP
-.B TIOCGETD
-Argument:
-.BI "int\~*" argp
-.IP
-Get the line discipline of the terminal.
-.TP
-.B TIOCSETD
-Argument:
-.BI "const int\~*" argp
-.IP
-Set the line discipline of the terminal.
-.SS Pseudoterminal ioctls
-.TP
-.B TIOCPKT
-Argument:
-.BI "const int\~*" argp
-.IP
-Enable (when
-.RI * argp
-is nonzero) or disable packet mode.
-Can be applied to the master side of a pseudoterminal only (and will return
-.B ENOTTY
-otherwise).
-In packet mode, each subsequent
-.BR read (2)
-will return a packet that either contains a single nonzero control byte,
-or has a single byte containing zero (\[aq]\e0\[aq]) followed by data
-written on the slave side of the pseudoterminal.
-If the first byte is not
-.B TIOCPKT_DATA
-(0), it is an OR of one
-or more of the following bits:
-.IP
-.ad l
-.TS
-lb l.
-TIOCPKT_FLUSHREAD T{
-The read queue for the terminal is flushed.
-T}
-TIOCPKT_FLUSHWRITE T{
-The write queue for the terminal is flushed.
-T}
-TIOCPKT_STOP T{
-Output to the terminal is stopped.
-T}
-TIOCPKT_START T{
-Output to the terminal is restarted.
-T}
-TIOCPKT_DOSTOP T{
-The start and stop characters are \fB\[ha]S\fP/\fB\[ha]Q\fP.
-T}
-TIOCPKT_NOSTOP T{
-The start and stop characters are not \fB\[ha]S\fP/\fB\[ha]Q\fP.
-T}
-.TE
-.ad
-.IP
-While packet mode is in use, the presence
-of control status information to be read
-from the master side may be detected by a
-.BR select (2)
-for exceptional conditions or a
-.BR poll (2)
-for the
-.B POLLPRI
-event.
-.IP
-This mode is used by
-.BR rlogin (1)
-and
-.BR rlogind (8)
-to implement a remote-echoed,
-locally \fB\[ha]S\fP/\fB\[ha]Q\fP flow-controlled remote login.
-.TP
-.B TIOCGPKT
-Argument:
-.BI "const int\~*" argp
-.IP
-(since Linux 3.8)
-Return the current packet mode setting in the integer pointed to by
-.IR argp .
-.TP
-.B TIOCSPTLCK
-Argument:
-.BI "int\~*" argp
-.IP
-Set (if
-.I *argp
-is nonzero) or remove (if
-.I *argp
-is zero) the lock on the pseudoterminal slave device.
-(See also
-.BR unlockpt (3).)
-.TP
-.B TIOCGPTLCK
-Argument:
-.BI "int\~*" argp
-.IP
-(since Linux 3.8)
-Place the current lock state of the pseudoterminal slave device
-in the location pointed to by
-.IR argp .
-.TP
-.B TIOCGPTPEER
-Argument:
-.BI "int " flags
-.IP
-.\" commit 54ebbfb1603415d9953c150535850d30609ef077
-(since Linux 4.13)
-Given a file descriptor in
-.I fd
-that refers to a pseudoterminal master,
-open (with the given
-.BR open (2)-style
-.IR flags )
-and return a new file descriptor that refers to the peer
-pseudoterminal slave device.
-This operation can be performed
-regardless of whether the pathname of the slave device
-is accessible through the calling process's mount namespace.
-.IP
-Security-conscious programs interacting with namespaces may wish to use this
-operation rather than
-.BR open (2)
-with the pathname returned by
-.BR ptsname (3),
-and similar library functions that have insecure APIs.
-(For example, confusion can occur in some cases using
-.BR ptsname (3)
-with a pathname where a devpts filesystem
-has been mounted in a different mount namespace.)
-.PP
-The BSD ioctls
-.BR TIOCSTOP ,
-.BR TIOCSTART ,
-.BR TIOCUCNTL ,
-and
-.B TIOCREMOTE
-have not been implemented under Linux.
-.SS Modem control
-.TP
-.B TIOCMGET
-Argument:
-.BI "int\~*" argp
-.IP
-Get the status of modem bits.
-.TP
-.B TIOCMSET
-Argument:
-.BI "const int\~*" argp
-.IP
-Set the status of modem bits.
-.TP
-.B TIOCMBIC
-Argument:
-.BI "const int\~*" argp
-.IP
-Clear the indicated modem bits.
-.TP
-.B TIOCMBIS
-Argument:
-.BI "const int\~*" argp
-.IP
-Set the indicated modem bits.
-.PP
-The following bits are used by the above ioctls:
-.PP
-.TS
-lb l.
-TIOCM_LE DSR (data set ready/line enable)
-TIOCM_DTR DTR (data terminal ready)
-TIOCM_RTS RTS (request to send)
-TIOCM_ST Secondary TXD (transmit)
-TIOCM_SR Secondary RXD (receive)
-TIOCM_CTS CTS (clear to send)
-TIOCM_CAR DCD (data carrier detect)
-TIOCM_CD see TIOCM_CAR
-TIOCM_RNG RNG (ring)
-TIOCM_RI see TIOCM_RNG
-TIOCM_DSR DSR (data set ready)
-.TE
-.TP
-.B TIOCMIWAIT
-Argument:
-.BI "int " arg
-.IP
-Wait for any of the 4 modem bits (DCD, RI, DSR, CTS) to change.
-The bits of interest are specified as a bit mask in
-.IR arg ,
-by ORing together any of the bit values,
-.BR TIOCM_RNG ,
-.BR TIOCM_DSR ,
-.BR TIOCM_CD ,
-and
-.BR TIOCM_CTS .
-The caller should use
-.B TIOCGICOUNT
-to see which bit has changed.
-.TP
-.B TIOCGICOUNT
-Argument:
-.BI "struct serial_icounter_struct\~*" argp
-.IP
-Get counts of input serial line interrupts (DCD, RI, DSR, CTS).
-The counts are written to the
-.I serial_icounter_struct
-structure pointed to by
-.IR argp .
-.IP
-Note: both 1->0 and 0->1 transitions are counted, except for
-RI, where only 0->1 transitions are counted.
-.SS Marking a line as local
-.TP
-.B TIOCGSOFTCAR
-Argument:
-.BI "int\~*" argp
-.IP
-("Get software carrier flag")
-Get the status of the CLOCAL flag in the c_cflag field of the
-.I termios
-structure.
-.TP
-.B TIOCSSOFTCAR
-Argument:
-.BI "const int\~*" argp
-.IP
-("Set software carrier flag")
-Set the CLOCAL flag in the
-.I termios
-structure when
-.RI * argp
-is nonzero, and clear it otherwise.
-.PP
-If the
-.B CLOCAL
-flag for a line is off, the hardware carrier detect (DCD)
-signal is significant, and an
-.BR open (2)
-of the corresponding terminal will block until DCD is asserted,
-unless the
-.B O_NONBLOCK
-flag is given.
-If
-.B CLOCAL
-is set, the line behaves as if DCD is always asserted.
-The software carrier flag is usually turned on for local devices,
-and is off for lines with modems.
-.SS Linux-specific
-For the
-.B TIOCLINUX
-ioctl, see
-.BR ioctl_console (2).
-.SS Kernel debugging
-.B "#include <linux/tty.h>"
-.TP
-.B TIOCTTYGSTRUCT
-Argument:
-.BI "struct tty_struct\~*" argp
-.IP
-Get the
-.I tty_struct
-corresponding to
-.IR fd .
-This command was removed in Linux 2.5.67.
-.\" commit b3506a09d15dc5aee6d4bb88d759b157016e1864
-.\" Author: Andries E. Brouwer <andries.brouwer@cwi.nl>
-.\" Date: Tue Apr 1 04:42:46 2003 -0800
-.\"
-.\" [PATCH] kill TIOCTTYGSTRUCT
-.\"
-.\" Only used for (dubious) debugging purposes, and exposes
-.\" internal kernel state.
-.\"
-.\" .SS Serial info
-.\" .BR "#include <linux/serial.h>"
-.\" .PP
-.\" .TP
-.\" .BI "TIOCGSERIAL struct serial_struct *" argp
-.\" Get serial info.
-.\" .TP
-.\" .BI "TIOCSSERIAL const struct serial_struct *" argp
-.\" Set serial info.
-.SH RETURN VALUE
-The
-.BR ioctl (2)
-system call returns 0 on success.
-On error, it returns \-1 and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-Invalid command parameter.
-.TP
-.B ENOIOCTLCMD
-Unknown command.
-.TP
-.B ENOTTY
-Inappropriate
-.IR fd .
-.TP
-.B EPERM
-Insufficient permission.
-.SH EXAMPLES
-Check the condition of DTR on the serial port.
-.PP
-.\" SRC BEGIN (tiocmget.c)
-.EX
-#include <fcntl.h>
-#include <stdio.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-\&
-int
-main(void)
-{
- int fd, serial;
-\&
- fd = open("/dev/ttyS0", O_RDONLY);
- ioctl(fd, TIOCMGET, &serial);
- if (serial & TIOCM_DTR)
- puts("TIOCM_DTR is set");
- else
- puts("TIOCM_DTR is not set");
- close(fd);
-}
-.EE
-.\" SRC END
-.PP
-Get or set arbitrary baudrate on the serial port.
-.PP
-.\" SRC BEGIN (tcgets.c)
-.EX
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-\&
-#include <asm/termbits.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
-#if !defined BOTHER
- fprintf(stderr, "BOTHER is unsupported\en");
- /* Program may fallback to TCGETS/TCSETS with Bnnn constants */
- exit(EXIT_FAILURE);
-#else
- /* Declare tio structure, its type depends on supported ioctl */
-# if defined TCGETS2
- struct termios2 tio;
-# else
- struct termios tio;
-# endif
- int fd, rc;
-\&
- if (argc != 2 && argc != 3 && argc != 4) {
- fprintf(stderr, "Usage: %s device [output [input] ]\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- fd = open(argv[1], O_RDWR | O_NONBLOCK | O_NOCTTY);
- if (fd < 0) {
- perror("open");
- exit(EXIT_FAILURE);
- }
-\&
- /* Get the current serial port settings via supported ioctl */
-# if defined TCGETS2
- rc = ioctl(fd, TCGETS2, &tio);
-# else
- rc = ioctl(fd, TCGETS, &tio);
-# endif
- if (rc) {
- perror("TCGETS");
- close(fd);
- exit(EXIT_FAILURE);
- }
-\&
- /* Change baud rate when more arguments were provided */
- if (argc == 3 || argc == 4) {
- /* Clear the current output baud rate and fill a new value */
- tio.c_cflag &= \[ti]CBAUD;
- tio.c_cflag |= BOTHER;
- tio.c_ospeed = atoi(argv[2]);
-\&
- /* Clear the current input baud rate and fill a new value */
- tio.c_cflag &= \[ti](CBAUD << IBSHIFT);
- tio.c_cflag |= BOTHER << IBSHIFT;
- /* When 4th argument is not provided reuse output baud rate */
- tio.c_ispeed = (argc == 4) ? atoi(argv[3]) : atoi(argv[2]);
-\&
- /* Set new serial port settings via supported ioctl */
-# if defined TCSETS2
- rc = ioctl(fd, TCSETS2, &tio);
-# else
- rc = ioctl(fd, TCSETS, &tio);
-# endif
- if (rc) {
- perror("TCSETS");
- close(fd);
- exit(EXIT_FAILURE);
- }
-\&
- /* And get new values which were really configured */
-# if defined TCGETS2
- rc = ioctl(fd, TCGETS2, &tio);
-# else
- rc = ioctl(fd, TCGETS, &tio);
-# endif
- if (rc) {
- perror("TCGETS");
- close(fd);
- exit(EXIT_FAILURE);
- }
- }
-\&
- close(fd);
-\&
- printf("output baud rate: %u\en", tio.c_ospeed);
- printf("input baud rate: %u\en", tio.c_ispeed);
-\&
- exit(EXIT_SUCCESS);
-#endif
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR ldattach (8),
-.BR ioctl (2),
-.BR ioctl_console (2),
-.BR termios (3),
-.BR pty (7)
-.\"
-.\" FIONBIO const int *
-.\" FIONCLEX void
-.\" FIOCLEX void
-.\" FIOASYNC const int *
-.\" from serial.c:
-.\" TIOCSERCONFIG void
-.\" TIOCSERGWILD int *
-.\" TIOCSERSWILD const int *
-.\" TIOCSERGSTRUCT struct async_struct *
-.\" TIOCSERGETMULTI struct serial_multiport_struct *
-.\" TIOCSERSETMULTI const struct serial_multiport_struct *
-.\" TIOCGSERIAL, TIOCSSERIAL (see above)
diff --git a/man2/ioctl_userfaultfd.2 b/man2/ioctl_userfaultfd.2
deleted file mode 100644
index b5281ec4c..000000000
--- a/man2/ioctl_userfaultfd.2
+++ /dev/null
@@ -1,906 +0,0 @@
-.\" Copyright (c) 2016, IBM Corporation.
-.\" Written by Mike Rapoport <rppt@linux.vnet.ibm.com>
-.\" and Copyright (C) 2016 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH ioctl_userfaultfd 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ioctl_userfaultfd \- create a file descriptor for handling page faults in user
-space
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/userfaultfd.h>" " /* Definition of " UFFD* " constants */"
-.B #include <sys/ioctl.h>
-.PP
-.BI "int ioctl(int " fd ", int " cmd ", ...);"
-.fi
-.SH DESCRIPTION
-Various
-.BR ioctl (2)
-operations can be performed on a userfaultfd object (created by a call to
-.BR userfaultfd (2))
-using calls of the form:
-.PP
-.in +4n
-.EX
-ioctl(fd, cmd, argp);
-.EE
-.in
-In the above,
-.I fd
-is a file descriptor referring to a userfaultfd object,
-.I cmd
-is one of the commands listed below, and
-.I argp
-is a pointer to a data structure that is specific to
-.IR cmd .
-.PP
-The various
-.BR ioctl (2)
-operations are described below.
-The
-.BR UFFDIO_API ,
-.BR UFFDIO_REGISTER ,
-and
-.B UFFDIO_UNREGISTER
-operations are used to
-.I configure
-userfaultfd behavior.
-These operations allow the caller to choose what features will be enabled and
-what kinds of events will be delivered to the application.
-The remaining operations are
-.I range
-operations.
-These operations enable the calling application to resolve page-fault
-events.
-.\"
-.SS UFFDIO_API
-(Since Linux 4.3.)
-Enable operation of the userfaultfd and perform API handshake.
-.PP
-The
-.I argp
-argument is a pointer to a
-.I uffdio_api
-structure, defined as:
-.PP
-.in +4n
-.EX
-struct uffdio_api {
- __u64 api; /* Requested API version (input) */
- __u64 features; /* Requested features (input/output) */
- __u64 ioctls; /* Available ioctl() operations (output) */
-};
-.EE
-.in
-.PP
-The
-.I api
-field denotes the API version requested by the application.
-.PP
-The kernel verifies that it can support the requested API version,
-and sets the
-.I features
-and
-.I ioctls
-fields to bit masks representing all the available features and the generic
-.BR ioctl (2)
-operations available.
-.PP
-Before Linux 4.11, the
-.I features
-field must be initialized to zero before the call to
-.BR UFFDIO_API ,
-and zero (i.e., no feature bits) is placed in the
-.I features
-field by the kernel upon return from
-.BR ioctl (2).
-.PP
-Starting from Linux 4.11, the
-.I features
-field can be used to ask whether particular features are supported
-and explicitly enable userfaultfd features that are disabled by default.
-The kernel always reports all the available features in the
-.I features
-field.
-.PP
-To enable userfaultfd features the application should set
-a bit corresponding to each feature it wants to enable in the
-.I features
-field.
-If the kernel supports all the requested features it will enable them.
-Otherwise it will zero out the returned
-.I uffdio_api
-structure and return
-.BR EINVAL .
-.\" FIXME add more details about feature negotiation and enablement
-.PP
-The following feature bits may be set:
-.TP
-.BR UFFD_FEATURE_EVENT_FORK " (since Linux 4.11)"
-When this feature is enabled,
-the userfaultfd objects associated with a parent process are duplicated
-into the child process during
-.BR fork (2)
-and a
-.B UFFD_EVENT_FORK
-event is delivered to the userfaultfd monitor
-.TP
-.BR UFFD_FEATURE_EVENT_REMAP " (since Linux 4.11)"
-If this feature is enabled,
-when the faulting process invokes
-.BR mremap (2),
-the userfaultfd monitor will receive an event of type
-.BR UFFD_EVENT_REMAP .
-.TP
-.BR UFFD_FEATURE_EVENT_REMOVE " (since Linux 4.11)"
-If this feature is enabled,
-when the faulting process calls
-.BR madvise (2)
-with the
-.B MADV_DONTNEED
-or
-.B MADV_REMOVE
-advice value to free a virtual memory area
-the userfaultfd monitor will receive an event of type
-.BR UFFD_EVENT_REMOVE .
-.TP
-.BR UFFD_FEATURE_EVENT_UNMAP " (since Linux 4.11)"
-If this feature is enabled,
-when the faulting process unmaps virtual memory either explicitly with
-.BR munmap (2),
-or implicitly during either
-.BR mmap (2)
-or
-.BR mremap (2),
-the userfaultfd monitor will receive an event of type
-.BR UFFD_EVENT_UNMAP .
-.TP
-.BR UFFD_FEATURE_MISSING_HUGETLBFS " (since Linux 4.11)"
-If this feature bit is set,
-the kernel supports registering userfaultfd ranges on hugetlbfs
-virtual memory areas
-.TP
-.BR UFFD_FEATURE_MISSING_SHMEM " (since Linux 4.11)"
-If this feature bit is set,
-the kernel supports registering userfaultfd ranges on shared memory areas.
-This includes all kernel shared memory APIs:
-System V shared memory,
-.BR tmpfs (5),
-shared mappings of
-.IR /dev/zero ,
-.BR mmap (2)
-with the
-.B MAP_SHARED
-flag set,
-.BR memfd_create (2),
-and so on.
-.TP
-.BR UFFD_FEATURE_SIGBUS " (since Linux 4.14)"
-.\" commit 2d6d6f5a09a96cc1fec7ed992b825e05f64cb50e
-If this feature bit is set, no page-fault events
-.RB ( UFFD_EVENT_PAGEFAULT )
-will be delivered.
-Instead, a
-.B SIGBUS
-signal will be sent to the faulting process.
-Applications using this
-feature will not require the use of a userfaultfd monitor for processing
-memory accesses to the regions registered with userfaultfd.
-.TP
-.BR UFFD_FEATURE_THREAD_ID " (since Linux 4.14)"
-If this feature bit is set,
-.I uffd_msg.pagefault.feat.ptid
-will be set to the faulted thread ID for each page-fault message.
-.TP
-.BR UFFD_FEATURE_MINOR_HUGETLBFS " (since Linux 5.13)"
-If this feature bit is set,
-the kernel supports registering userfaultfd ranges
-in minor mode on hugetlbfs-backed memory areas.
-.TP
-.BR UFFD_FEATURE_MINOR_SHMEM " (since Linux 5.14)"
-If this feature bit is set,
-the kernel supports registering userfaultfd ranges
-in minor mode on shmem-backed memory areas.
-.TP
-.BR UFFD_FEATURE_EXACT_ADDRESS " (since Linux 5.18)"
-If this feature bit is set,
-.I uffd_msg.pagefault.address
-will be set to the exact page-fault address that was reported by the hardware,
-and will not mask the offset within the page.
-Note that old Linux versions might indicate the exact address as well,
-even though the feature bit is not set.
-.PP
-The returned
-.I ioctls
-field can contain the following bits:
-.\" FIXME This user-space API seems not fully polished. Why are there
-.\" not constants defined for each of the bit-mask values listed below?
-.TP
-.B 1 << _UFFDIO_API
-The
-.B UFFDIO_API
-operation is supported.
-.TP
-.B 1 << _UFFDIO_REGISTER
-The
-.B UFFDIO_REGISTER
-operation is supported.
-.TP
-.B 1 << _UFFDIO_UNREGISTER
-The
-.B UFFDIO_UNREGISTER
-operation is supported.
-.PP
-This
-.BR ioctl (2)
-operation returns 0 on success.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-Possible errors include:
-.TP
-.B EFAULT
-.I argp
-refers to an address that is outside the calling process's
-accessible address space.
-.TP
-.B EINVAL
-The userfaultfd has already been enabled by a previous
-.B UFFDIO_API
-operation.
-.TP
-.B EINVAL
-The API version requested in the
-.I api
-field is not supported by this kernel, or the
-.I features
-field passed to the kernel includes feature bits that are not supported
-by the current kernel version.
-.\" FIXME In the above error case, the returned 'uffdio_api' structure is
-.\" zeroed out. Why is this done? This should be explained in the manual page.
-.\"
-.\" Mike Rapoport:
-.\" In my understanding the uffdio_api
-.\" structure is zeroed to allow the caller
-.\" to distinguish the reasons for -EINVAL.
-.\"
-.SS UFFDIO_REGISTER
-(Since Linux 4.3.)
-Register a memory address range with the userfaultfd object.
-The pages in the range must be "compatible".
-Please refer to the list of register modes below
-for the compatible memory backends for each mode.
-.PP
-The
-.I argp
-argument is a pointer to a
-.I uffdio_register
-structure, defined as:
-.PP
-.in +4n
-.EX
-struct uffdio_range {
- __u64 start; /* Start of range */
- __u64 len; /* Length of range (bytes) */
-};
-\&
-struct uffdio_register {
- struct uffdio_range range;
- __u64 mode; /* Desired mode of operation (input) */
- __u64 ioctls; /* Available ioctl() operations (output) */
-};
-.EE
-.in
-.PP
-The
-.I range
-field defines a memory range starting at
-.I start
-and continuing for
-.I len
-bytes that should be handled by the userfaultfd.
-.PP
-The
-.I mode
-field defines the mode of operation desired for this memory region.
-The following values may be bitwise ORed to set the userfaultfd mode for
-the specified range:
-.TP
-.B UFFDIO_REGISTER_MODE_MISSING
-Track page faults on missing pages.
-Since Linux 4.3,
-only private anonymous ranges are compatible.
-Since Linux 4.11,
-hugetlbfs and shared memory ranges are also compatible.
-.TP
-.B UFFDIO_REGISTER_MODE_WP
-Track page faults on write-protected pages.
-Since Linux 5.7,
-only private anonymous ranges are compatible.
-.TP
-.B UFFDIO_REGISTER_MODE_MINOR
-Track minor page faults.
-Since Linux 5.13,
-only hugetlbfs ranges are compatible.
-Since Linux 5.14,
-compatibility with shmem ranges was added.
-.PP
-If the operation is successful, the kernel modifies the
-.I ioctls
-bit-mask field to indicate which
-.BR ioctl (2)
-operations are available for the specified range.
-This returned bit mask can contain the following bits:
-.TP
-.B 1 << _UFFDIO_COPY
-The
-.B UFFDIO_COPY
-operation is supported.
-.TP
-.B 1 << _UFFDIO_WAKE
-The
-.B UFFDIO_WAKE
-operation is supported.
-.TP
-.B 1 << _UFFDIO_WRITEPROTECT
-The
-.B UFFDIO_WRITEPROTECT
-.TP
-.B 1 << _UFFDIO_ZEROPAGE
-The
-.B UFFDIO_ZEROPAGE
-operation is supported.
-.TP
-.B 1 << _UFFDIO_CONTINUE
-The
-.B UFFDIO_CONTINUE
-operation is supported.
-.PP
-This
-.BR ioctl (2)
-operation returns 0 on success.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-Possible errors include:
-.\" FIXME Is the following error list correct?
-.\"
-.TP
-.B EBUSY
-A mapping in the specified range is registered with another
-userfaultfd object.
-.TP
-.B EFAULT
-.I argp
-refers to an address that is outside the calling process's
-accessible address space.
-.TP
-.B EINVAL
-An invalid or unsupported bit was specified in the
-.I mode
-field; or the
-.I mode
-field was zero.
-.TP
-.B EINVAL
-There is no mapping in the specified address range.
-.TP
-.B EINVAL
-.I range.start
-or
-.I range.len
-is not a multiple of the system page size; or,
-.I range.len
-is zero; or these fields are otherwise invalid.
-.TP
-.B EINVAL
-There as an incompatible mapping in the specified address range.
-.\" Mike Rapoport:
-.\" ENOMEM if the process is exiting and the
-.\" mm_struct has gone by the time userfault grabs it.
-.SS UFFDIO_UNREGISTER
-(Since Linux 4.3.)
-Unregister a memory address range from userfaultfd.
-The pages in the range must be "compatible" (see the description of
-.BR UFFDIO_REGISTER .)
-.PP
-The address range to unregister is specified in the
-.I uffdio_range
-structure pointed to by
-.IR argp .
-.PP
-This
-.BR ioctl (2)
-operation returns 0 on success.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-Possible errors include:
-.TP
-.B EINVAL
-Either the
-.I start
-or the
-.I len
-field of the
-.I ufdio_range
-structure was not a multiple of the system page size; or the
-.I len
-field was zero; or these fields were otherwise invalid.
-.TP
-.B EINVAL
-There as an incompatible mapping in the specified address range.
-.TP
-.B EINVAL
-There was no mapping in the specified address range.
-.\"
-.SS UFFDIO_COPY
-(Since Linux 4.3.)
-Atomically copy a continuous memory chunk into the userfault registered
-range and optionally wake up the blocked thread.
-The source and destination addresses and the number of bytes to copy are
-specified by the
-.IR src ", " dst ", and " len
-fields of the
-.I uffdio_copy
-structure pointed to by
-.IR argp :
-.PP
-.in +4n
-.EX
-struct uffdio_copy {
- __u64 dst; /* Destination of copy */
- __u64 src; /* Source of copy */
- __u64 len; /* Number of bytes to copy */
- __u64 mode; /* Flags controlling behavior of copy */
- __s64 copy; /* Number of bytes copied, or negated error */
-};
-.EE
-.in
-.PP
-The following value may be bitwise ORed in
-.I mode
-to change the behavior of the
-.B UFFDIO_COPY
-operation:
-.TP
-.B UFFDIO_COPY_MODE_DONTWAKE
-Do not wake up the thread that waits for page-fault resolution
-.TP
-.B UFFDIO_COPY_MODE_WP
-Copy the page with read-only permission.
-This allows the user to trap the next write to the page,
-which will block and generate another write-protect userfault message.
-This is used only when both
-.B UFFDIO_REGISTER_MODE_MISSING
-and
-.B UFFDIO_REGISTER_MODE_WP
-modes are enabled for the registered range.
-.PP
-The
-.I copy
-field is used by the kernel to return the number of bytes
-that was actually copied, or an error (a negated
-.IR errno -style
-value).
-.\" FIXME Above: Why is the 'copy' field used to return error values?
-.\" This should be explained in the manual page.
-If the value returned in
-.I copy
-doesn't match the value that was specified in
-.IR len ,
-the operation fails with the error
-.BR EAGAIN .
-The
-.I copy
-field is output-only;
-it is not read by the
-.B UFFDIO_COPY
-operation.
-.PP
-This
-.BR ioctl (2)
-operation returns 0 on success.
-In this case, the entire area was copied.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-Possible errors include:
-.TP
-.B EAGAIN
-The number of bytes copied (i.e., the value returned in the
-.I copy
-field)
-does not equal the value that was specified in the
-.I len
-field.
-.TP
-.B EINVAL
-Either
-.I dst
-or
-.I len
-was not a multiple of the system page size, or the range specified by
-.I src
-and
-.I len
-or
-.I dst
-and
-.I len
-was invalid.
-.TP
-.B EINVAL
-An invalid bit was specified in the
-.I mode
-field.
-.TP
-.BR ENOENT " (since Linux 4.11)"
-The faulting process has changed
-its virtual memory layout simultaneously with an outstanding
-.B UFFDIO_COPY
-operation.
-.TP
-.BR ENOSPC " (from Linux 4.11 until Linux 4.13)"
-The faulting process has exited at the time of a
-.B UFFDIO_COPY
-operation.
-.TP
-.BR ESRCH " (since Linux 4.13)"
-The faulting process has exited at the time of a
-.B UFFDIO_COPY
-operation.
-.\"
-.SS UFFDIO_ZEROPAGE
-(Since Linux 4.3.)
-Zero out a memory range registered with userfaultfd.
-.PP
-The requested range is specified by the
-.I range
-field of the
-.I uffdio_zeropage
-structure pointed to by
-.IR argp :
-.PP
-.in +4n
-.EX
-struct uffdio_zeropage {
- struct uffdio_range range;
- __u64 mode; /* Flags controlling behavior of copy */
- __s64 zeropage; /* Number of bytes zeroed, or negated error */
-};
-.EE
-.in
-.PP
-The following value may be bitwise ORed in
-.I mode
-to change the behavior of the
-.B UFFDIO_ZEROPAGE
-operation:
-.TP
-.B UFFDIO_ZEROPAGE_MODE_DONTWAKE
-Do not wake up the thread that waits for page-fault resolution.
-.PP
-The
-.I zeropage
-field is used by the kernel to return the number of bytes
-that was actually zeroed,
-or an error in the same manner as
-.BR UFFDIO_COPY .
-.\" FIXME Why is the 'zeropage' field used to return error values?
-.\" This should be explained in the manual page.
-If the value returned in the
-.I zeropage
-field doesn't match the value that was specified in
-.IR range.len ,
-the operation fails with the error
-.BR EAGAIN .
-The
-.I zeropage
-field is output-only;
-it is not read by the
-.B UFFDIO_ZEROPAGE
-operation.
-.PP
-This
-.BR ioctl (2)
-operation returns 0 on success.
-In this case, the entire area was zeroed.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-Possible errors include:
-.TP
-.B EAGAIN
-The number of bytes zeroed (i.e., the value returned in the
-.I zeropage
-field)
-does not equal the value that was specified in the
-.I range.len
-field.
-.TP
-.B EINVAL
-Either
-.I range.start
-or
-.I range.len
-was not a multiple of the system page size; or
-.I range.len
-was zero; or the range specified was invalid.
-.TP
-.B EINVAL
-An invalid bit was specified in the
-.I mode
-field.
-.TP
-.BR ESRCH " (since Linux 4.13)"
-The faulting process has exited at the time of a
-.B UFFDIO_ZEROPAGE
-operation.
-.\"
-.SS UFFDIO_WAKE
-(Since Linux 4.3.)
-Wake up the thread waiting for page-fault resolution on
-a specified memory address range.
-.PP
-The
-.B UFFDIO_WAKE
-operation is used in conjunction with
-.B UFFDIO_COPY
-and
-.B UFFDIO_ZEROPAGE
-operations that have the
-.B UFFDIO_COPY_MODE_DONTWAKE
-or
-.B UFFDIO_ZEROPAGE_MODE_DONTWAKE
-bit set in the
-.I mode
-field.
-The userfault monitor can perform several
-.B UFFDIO_COPY
-and
-.B UFFDIO_ZEROPAGE
-operations in a batch and then explicitly wake up the faulting thread using
-.BR UFFDIO_WAKE .
-.PP
-The
-.I argp
-argument is a pointer to a
-.I uffdio_range
-structure (shown above) that specifies the address range.
-.PP
-This
-.BR ioctl (2)
-operation returns 0 on success.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-Possible errors include:
-.TP
-.B EINVAL
-The
-.I start
-or the
-.I len
-field of the
-.I ufdio_range
-structure was not a multiple of the system page size; or
-.I len
-was zero; or the specified range was otherwise invalid.
-.SS UFFDIO_WRITEPROTECT (Since Linux 5.7)
-Write-protect or write-unprotect a userfaultfd-registered memory range
-registered with mode
-.BR UFFDIO_REGISTER_MODE_WP .
-.PP
-The
-.I argp
-argument is a pointer to a
-.I uffdio_range
-structure as shown below:
-.PP
-.in +4n
-.EX
-struct uffdio_writeprotect {
- struct uffdio_range range; /* Range to change write permission*/
- __u64 mode; /* Mode to change write permission */
-};
-.EE
-.in
-.PP
-There are two mode bits that are supported in this structure:
-.TP
-.B UFFDIO_WRITEPROTECT_MODE_WP
-When this mode bit is set,
-the ioctl will be a write-protect operation upon the memory range specified by
-.IR range .
-Otherwise it will be a write-unprotect operation upon the specified range,
-which can be used to resolve a userfaultfd write-protect page fault.
-.TP
-.B UFFDIO_WRITEPROTECT_MODE_DONTWAKE
-When this mode bit is set,
-do not wake up any thread that waits for
-page-fault resolution after the operation.
-This can be specified only if
-.B UFFDIO_WRITEPROTECT_MODE_WP
-is not specified.
-.PP
-This
-.BR ioctl (2)
-operation returns 0 on success.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-Possible errors include:
-.TP
-.B EINVAL
-The
-.I start
-or the
-.I len
-field of the
-.I ufdio_range
-structure was not a multiple of the system page size; or
-.I len
-was zero; or the specified range was otherwise invalid.
-.TP
-.B EAGAIN
-The process was interrupted; retry this call.
-.TP
-.B ENOENT
-The range specified in
-.I range
-is not valid.
-For example, the virtual address does not exist,
-or not registered with userfaultfd write-protect mode.
-.TP
-.B EFAULT
-Encountered a generic fault during processing.
-.\"
-.SS UFFDIO_CONTINUE
-(Since Linux 5.13.)
-Resolve a minor page fault
-by installing page table entries
-for existing pages in the page cache.
-.PP
-The
-.I argp
-argument is a pointer to a
-.I uffdio_continue
-structure as shown below:
-.PP
-.in +4n
-.EX
-struct uffdio_continue {
- struct uffdio_range range;
- /* Range to install PTEs for and continue */
- __u64 mode; /* Flags controlling the behavior of continue */
- __s64 mapped; /* Number of bytes mapped, or negated error */
-};
-.EE
-.in
-.PP
-The following value may be bitwise ORed in
-.I mode
-to change the behavior of the
-.B UFFDIO_CONTINUE
-operation:
-.TP
-.B UFFDIO_CONTINUE_MODE_DONTWAKE
-Do not wake up the thread that waits for page-fault resolution.
-.PP
-The
-.I mapped
-field is used by the kernel
-to return the number of bytes that were actually mapped,
-or an error in the same manner as
-.BR UFFDIO_COPY .
-If the value returned in the
-.I mapped
-field doesn't match the value that was specified in
-.IR range.len ,
-the operation fails with the error
-.BR EAGAIN .
-The
-.I mapped
-field is output-only;
-it is not read by the
-.B UFFDIO_CONTINUE
-operation.
-.PP
-This
-.BR ioctl (2)
-operation returns 0 on success.
-In this case,
-the entire area was mapped.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-Possible errors include:
-.TP
-.B EAGAIN
-The number of bytes mapped
-(i.e., the value returned in the
-.I mapped
-field)
-does not equal the value that was specified in the
-.I range.len
-field.
-.TP
-.B EINVAL
-Either
-.I range.start
-or
-.I range.len
-was not a multiple of the system page size; or
-.I range.len
-was zero; or the range specified was invalid.
-.TP
-.B EINVAL
-An invalid bit was specified in the
-.I mode
-field.
-.TP
-.B EEXIST
-One or more pages were already mapped in the given range.
-.TP
-.B ENOENT
-The faulting process has changed its virtual memory layout simultaneously with
-an outstanding
-.B UFFDIO_CONTINUE
-operation.
-.TP
-.B ENOMEM
-Allocating memory needed to setup the page table mappings failed.
-.TP
-.B EFAULT
-No existing page could be found in the page cache for the given range.
-.TP
-.B ESRCH
-The faulting process has exited at the time of a
-.B UFFDIO_CONTINUE
-operation.
-.\"
-.SH RETURN VALUE
-See descriptions of the individual operations, above.
-.SH ERRORS
-See descriptions of the individual operations, above.
-In addition, the following general errors can occur for all of the
-operations described above:
-.TP
-.B EFAULT
-.I argp
-does not point to a valid memory address.
-.TP
-.B EINVAL
-(For all operations except
-.BR UFFDIO_API .)
-The userfaultfd object has not yet been enabled (via the
-.B UFFDIO_API
-operation).
-.SH STANDARDS
-Linux.
-.SH BUGS
-In order to detect available userfault features and
-enable some subset of those features
-the userfaultfd file descriptor must be closed after the first
-.B UFFDIO_API
-operation that queries features availability and reopened before
-the second
-.B UFFDIO_API
-operation that actually enables the desired features.
-.SH EXAMPLES
-See
-.BR userfaultfd (2).
-.SH SEE ALSO
-.BR ioctl (2),
-.BR mmap (2),
-.BR userfaultfd (2)
-.PP
-.I Documentation/admin\-guide/mm/userfaultfd.rst
-in the Linux kernel source tree
diff --git a/man2/ioperm.2 b/man2/ioperm.2
deleted file mode 100644
index 41c451ef1..000000000
--- a/man2/ioperm.2
+++ /dev/null
@@ -1,105 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt
-.\" (michael@moria.de)
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sat Jul 24 15:12:05 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Tue Aug 1 16:27 1995 by Jochen Karrer
-.\" <cip307@cip.physik.uni-wuerzburg.de>
-.\" Modified Tue Oct 22 08:11:14 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Mon Feb 15 17:28:41 CET 1999 by Andries E. Brouwer <aeb@cwi.nl>
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.\"
-.TH ioperm 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ioperm \- set port input/output permissions
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/io.h>
-.PP
-.BI "int ioperm(unsigned long " from ", unsigned long " num ", int " turn_on );
-.fi
-.SH DESCRIPTION
-.BR ioperm ()
-sets the port access permission bits for the calling thread for
-.I num
-bits starting from port address
-.IR from .
-If
-.I turn_on
-is nonzero, then permission for the specified bits is enabled;
-otherwise it is disabled.
-If
-.I turn_on
-is nonzero, the calling thread must be privileged
-.RB ( CAP_SYS_RAWIO ).
-.PP
-Before Linux 2.6.8,
-only the first 0x3ff I/O ports could be specified in this manner.
-For more ports, the
-.BR iopl (2)
-system call had to be used (with a
-.I level
-argument of 3).
-Since Linux 2.6.8, 65,536 I/O ports can be specified.
-.PP
-Permissions are inherited by the child created by
-.BR fork (2)
-(but see NOTES).
-Permissions are preserved across
-.BR execve (2);
-this is useful for giving port access permissions to unprivileged
-programs.
-.PP
-This call is mostly for the i386 architecture.
-On many other architectures it does not exist or will always
-return an error.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-Invalid values for
-.I from
-or
-.IR num .
-.TP
-.B EIO
-(on PowerPC) This call is not supported.
-.TP
-.B ENOMEM
-.\" Could not allocate I/O bitmap.
-Out of memory.
-.TP
-.B EPERM
-The calling thread has insufficient privilege.
-.SH VERSIONS
-glibc has an
-.BR ioperm ()
-prototype both in
-.I <sys/io.h>
-and in
-.IR <sys/perm.h> .
-Avoid the latter, it is available on i386 only.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Before Linux 2.4,
-permissions were not inherited by a child created by
-.BR fork (2).
-.SH NOTES
-The
-.I /proc/ioports
-file shows the I/O ports that are currently allocated on the system.
-.SH SEE ALSO
-.BR iopl (2),
-.BR outb (2),
-.BR capabilities (7)
diff --git a/man2/iopl.2 b/man2/iopl.2
deleted file mode 100644
index 2ed1d038c..000000000
--- a/man2/iopl.2
+++ /dev/null
@@ -1,92 +0,0 @@
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
-.\" Portions extracted from linux/kernel/ioport.c (no copyright notice).
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Tue Aug 1 16:47 1995 by Jochen Karrer
-.\" <cip307@cip.physik.uni-wuerzburg.de>
-.\" Modified Tue Oct 22 08:11:14 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Fri Nov 27 14:50:36 CET 1998 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.\"
-.TH iopl 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iopl \- change I/O privilege level
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/io.h>
-.PP
-.BI "[[deprecated]] int iopl(int " level );
-.fi
-.SH DESCRIPTION
-.BR iopl ()
-changes the I/O privilege level of the calling thread,
-as specified by the two least significant bits in
-.IR level .
-.PP
-The I/O privilege level for a normal thread is 0.
-Permissions are inherited from parents to children.
-.PP
-This call is deprecated, is significantly slower than
-.BR ioperm (2),
-and is only provided for older X servers which require
-access to all 65536 I/O ports.
-It is mostly for the i386 architecture.
-On many other architectures it does not exist or will always
-return an error.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I level
-is greater than 3.
-.TP
-.B ENOSYS
-This call is unimplemented.
-.TP
-.B EPERM
-The calling thread has insufficient privilege to call
-.BR iopl ();
-the
-.B CAP_SYS_RAWIO
-capability is required to raise the I/O privilege level
-above its current value.
-.SH VERSIONS
-.\" Libc5 treats it as a system call and has a prototype in
-.\" .IR <unistd.h> .
-.\" glibc1 does not have a prototype.
-glibc2 has a prototype both in
-.I <sys/io.h>
-and in
-.IR <sys/perm.h> .
-Avoid the latter, it is available on i386 only.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Prior to Linux 5.5
-.BR iopl ()
-allowed the thread to disable interrupts while running
-at a higher I/O privilege level.
-This will probably crash the system, and is not recommended.
-.PP
-Prior to Linux 3.7,
-on some architectures (such as i386), permissions
-.I were
-inherited by the child produced by
-.BR fork (2)
-and were preserved across
-.BR execve (2).
-This behavior was inadvertently changed in Linux 3.7,
-and won't be reinstated.
-.SH SEE ALSO
-.BR ioperm (2),
-.BR outb (2),
-.BR capabilities (7)
diff --git a/man2/ioprio_get.2 b/man2/ioprio_get.2
deleted file mode 100644
index d6d5b3b68..000000000
--- a/man2/ioprio_get.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/ioprio_set.2
diff --git a/man2/ioprio_set.2 b/man2/ioprio_set.2
deleted file mode 100644
index a232686c8..000000000
--- a/man2/ioprio_set.2
+++ /dev/null
@@ -1,362 +0,0 @@
-.\" Copyright (c) International Business Machines orp., 2006
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" HISTORY:
-.\" 2006-04-27, created by Eduardo M. Fleury <efleury@br.ibm.com>
-.\" with various additions by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\"
-.TH ioprio_set 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ioprio_get, ioprio_set \- get/set I/O scheduling class and priority
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/ioprio.h> " "/* Definition of " IOPRIO_* " constants */"
-.BR "#include <sys/syscall.h> " "/* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_ioprio_get, int " which ", int " who );
-.BI "int syscall(SYS_ioprio_set, int " which ", int " who ", int " ioprio );
-.fi
-.PP
-.IR Note :
-glibc provides no wrappers for these system calls,
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR ioprio_get ()
-and
-.BR ioprio_set ()
-system calls get and set the I/O scheduling class and
-priority of one or more threads.
-.PP
-The
-.I which
-and
-.I who
-arguments identify the thread(s) on which the system
-calls operate.
-The
-.I which
-argument determines how
-.I who
-is interpreted, and has one of the following values:
-.TP
-.B IOPRIO_WHO_PROCESS
-.I who
-is a process ID or thread ID identifying a single process or thread.
-If
-.I who
-is 0, then operate on the calling thread.
-.TP
-.B IOPRIO_WHO_PGRP
-.I who
-is a process group ID identifying all the members of a process group.
-If
-.I who
-is 0, then operate on the process group of which the caller is a member.
-.TP
-.B IOPRIO_WHO_USER
-.I who
-is a user ID identifying all of the processes that
-have a matching real UID.
-.\" FIXME . Need to document the behavior when 'who" is specified as 0
-.\" See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=652443
-.PP
-If
-.I which
-is specified as
-.B IOPRIO_WHO_PGRP
-or
-.B IOPRIO_WHO_USER
-when calling
-.BR ioprio_get (),
-and more than one process matches
-.IR who ,
-then the returned priority will be the highest one found among
-all of the matching processes.
-One priority is said to be
-higher than another one if it belongs to a higher priority
-class
-.RB ( IOPRIO_CLASS_RT
-is the highest priority class;
-.B IOPRIO_CLASS_IDLE
-is the lowest)
-or if it belongs to the same priority class as the other process but
-has a higher priority level (a lower priority number means a
-higher priority level).
-.PP
-The
-.I ioprio
-argument given to
-.BR ioprio_set ()
-is a bit mask that specifies both the scheduling class and the
-priority to be assigned to the target process(es).
-The following macros are used for assembling and dissecting
-.I ioprio
-values:
-.TP
-.BI IOPRIO_PRIO_VALUE( class ", " data )
-Given a scheduling
-.I class
-and priority
-.RI ( data ),
-this macro combines the two values to produce an
-.I ioprio
-value, which is returned as the result of the macro.
-.TP
-.BI IOPRIO_PRIO_CLASS( mask )
-Given
-.I mask
-(an
-.I ioprio
-value), this macro returns its I/O class component, that is,
-one of the values
-.BR IOPRIO_CLASS_RT ,
-.BR IOPRIO_CLASS_BE ,
-or
-.BR IOPRIO_CLASS_IDLE .
-.TP
-.BI IOPRIO_PRIO_DATA( mask )
-Given
-.I mask
-(an
-.I ioprio
-value), this macro returns its priority
-.RI ( data )
-component.
-.PP
-See the NOTES section for more
-information on scheduling classes and priorities,
-as well as the meaning of specifying
-.I ioprio
-as 0.
-.PP
-I/O priorities are supported for reads and for synchronous
-.RB ( O_DIRECT ,
-.BR O_SYNC )
-writes.
-I/O priorities are not supported for asynchronous
-writes because they are issued outside the context of the program
-dirtying the memory, and thus program-specific priorities do not apply.
-.SH RETURN VALUE
-On success,
-.BR ioprio_get ()
-returns the
-.I ioprio
-value of the process with highest I/O priority of any of the processes
-that match the criteria specified in
-.I which
-and
-.IR who .
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.PP
-On success,
-.BR ioprio_set ()
-returns 0.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-Invalid value for
-.I which
-or
-.IR ioprio .
-Refer to the NOTES section for available scheduler
-classes and priority levels for
-.IR ioprio .
-.TP
-.B EPERM
-The calling process does not have the privilege needed to assign this
-.I ioprio
-to the specified process(es).
-See the NOTES section for more information on required
-privileges for
-.BR ioprio_set ().
-.TP
-.B ESRCH
-No process(es) could be found that matched the specification in
-.I which
-and
-.IR who .
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.13.
-.SH NOTES
-Two or more processes or threads can share an I/O context.
-This will be the case when
-.BR clone (2)
-was called with the
-.B CLONE_IO
-flag.
-However, by default, the distinct threads of a process will
-.B not
-share the same I/O context.
-This means that if you want to change the I/O
-priority of all threads in a process, you may need to call
-.BR ioprio_set ()
-on each of the threads.
-The thread ID that you would need for this operation
-is the one that is returned by
-.BR gettid (2)
-or
-.BR clone (2).
-.PP
-These system calls have an effect only when used
-in conjunction with an I/O scheduler that supports I/O priorities.
-As at kernel 2.6.17 the only such scheduler is the Completely Fair Queuing
-(CFQ) I/O scheduler.
-.PP
-If no I/O scheduler has been set for a thread,
-then by default the I/O priority will follow the CPU nice value
-.RB ( setpriority (2)).
-Before Linux 2.6.24,
-once an I/O priority had been set using
-.BR ioprio_set (),
-there was no way to reset the I/O scheduling behavior to the default.
-Since Linux 2.6.24,
-.\" commit 8ec680e4c3ec818efd1652f15199ed1c216ab550
-specifying
-.I ioprio
-as 0 can be used to reset to the default I/O scheduling behavior.
-.SS Selecting an I/O scheduler
-I/O schedulers are selected on a per-device basis via the special
-file
-.IR /sys/block/ device /queue/scheduler .
-.PP
-One can view the current I/O scheduler via the
-.I /sys
-filesystem.
-For example, the following command
-displays a list of all schedulers currently loaded in the kernel:
-.PP
-.in +4n
-.EX
-.RB "$" " cat /sys/block/sda/queue/scheduler"
-noop anticipatory deadline [cfq]
-.EE
-.in
-.PP
-The scheduler surrounded by brackets is the one actually
-in use for the device
-.RI ( sda
-in the example).
-Setting another scheduler is done by writing the name of the
-new scheduler to this file.
-For example, the following command will set the
-scheduler for the
-.I sda
-device to
-.IR cfq :
-.PP
-.in +4n
-.EX
-.RB "$" " su"
-Password:
-.RB "#" " echo cfq > /sys/block/sda/queue/scheduler"
-.EE
-.in
-.\"
-.SS The Completely Fair Queuing (CFQ) I/O scheduler
-Since version 3 (also known as CFQ Time Sliced), CFQ implements
-I/O nice levels similar to those
-of CPU scheduling.
-These nice levels are grouped into three scheduling classes,
-each one containing one or more priority levels:
-.TP
-.BR IOPRIO_CLASS_RT " (1)"
-This is the real-time I/O class.
-This scheduling class is given
-higher priority than any other class:
-processes from this class are
-given first access to the disk every time.
-Thus, this I/O class needs to be used with some
-care: one I/O real-time process can starve the entire system.
-Within the real-time class,
-there are 8 levels of class data (priority) that determine exactly
-how much time this process needs the disk for on each service.
-The highest real-time priority level is 0; the lowest is 7.
-In the future, this might change to be more directly mappable to
-performance, by passing in a desired data rate instead.
-.TP
-.BR IOPRIO_CLASS_BE " (2)"
-This is the best-effort scheduling class,
-which is the default for any process
-that hasn't set a specific I/O priority.
-The class data (priority) determines how much
-I/O bandwidth the process will get.
-Best-effort priority levels are analogous to CPU nice values
-(see
-.BR getpriority (2)).
-The priority level determines a priority relative
-to other processes in the best-effort scheduling class.
-Priority levels range from 0 (highest) to 7 (lowest).
-.TP
-.BR IOPRIO_CLASS_IDLE " (3)"
-This is the idle scheduling class.
-Processes running at this level get I/O
-time only when no one else needs the disk.
-The idle class has no class data.
-Attention is required when assigning this priority class to a process,
-since it may become starved if higher priority processes are
-constantly accessing the disk.
-.PP
-Refer to the kernel source file
-.I Documentation/block/ioprio.txt
-for more information on the CFQ I/O Scheduler and an example program.
-.SS Required permissions to set I/O priorities
-Permission to change a process's priority is granted or denied based
-on two criteria:
-.TP
-.B "Process ownership"
-An unprivileged process may set the I/O priority only for a process
-whose real UID
-matches the real or effective UID of the calling process.
-A process which has the
-.B CAP_SYS_NICE
-capability can change the priority of any process.
-.TP
-.B "What is the desired priority"
-Attempts to set very high priorities
-.RB ( IOPRIO_CLASS_RT )
-require the
-.B CAP_SYS_ADMIN
-capability.
-Up to Linux 2.6.24 also required
-.B CAP_SYS_ADMIN
-to set a very low priority
-.RB ( IOPRIO_CLASS_IDLE ),
-but since Linux 2.6.25, this is no longer required.
-.PP
-A call to
-.BR ioprio_set ()
-must follow both rules, or the call will fail with the error
-.BR EPERM .
-.SH BUGS
-.\" 6 May 07: Bug report raised:
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=4464
-.\" Ulrich Drepper replied that he wasn't going to add these
-.\" to glibc.
-glibc does not yet provide a suitable header file defining
-the function prototypes and macros described on this page.
-Suitable definitions can be found in
-.IR linux/ioprio.h .
-.SH SEE ALSO
-.BR ionice (1),
-.BR getpriority (2),
-.BR open (2),
-.BR capabilities (7),
-.BR cgroups (7)
-.PP
-.I Documentation/block/ioprio.txt
-in the Linux kernel source tree
diff --git a/man2/ipc.2 b/man2/ipc.2
deleted file mode 100644
index 45671dd93..000000000
--- a/man2/ipc.2
+++ /dev/null
@@ -1,63 +0,0 @@
-.\" Copyright (c) 1995 Michael Chastain (mec@shell.portal.com), 15 April 1995.
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Tue Oct 22 08:11:14 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
-.TH ipc 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ipc \- System V IPC system calls
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/ipc.h>" " /* Definition of needed constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_ipc, unsigned int " call ", int " first ,
-.BI " unsigned long " second ", unsigned long " third \
-", void *" ptr ,
-.BI " long " fifth );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR ipc (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-.BR ipc ()
-is a common kernel entry point for the System\ V IPC calls
-for messages, semaphores, and shared memory.
-.I call
-determines which IPC function to invoke;
-the other arguments are passed through to the appropriate call.
-.PP
-User-space programs should call the appropriate functions by their usual names.
-Only standard library implementors and kernel hackers need to know about
-.BR ipc ().
-.SH VERSIONS
-On some architectures\[em]for example x86-64 and ARM\[em]there is no
-.BR ipc ()
-system call; instead,
-.BR msgctl (2),
-.BR semctl (2),
-.BR shmctl (2),
-and so on really are implemented as separate system calls.
-.SH STANDARDS
-Linux.
-.SH SEE ALSO
-.BR msgctl (2),
-.BR msgget (2),
-.BR msgrcv (2),
-.BR msgsnd (2),
-.BR semctl (2),
-.BR semget (2),
-.BR semop (2),
-.BR semtimedop (2),
-.BR shmat (2),
-.BR shmctl (2),
-.BR shmdt (2),
-.BR shmget (2),
-.BR sysvipc (7)
diff --git a/man2/isastream.2 b/man2/isastream.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/isastream.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/kcmp.2 b/man2/kcmp.2
deleted file mode 100644
index d1c24130c..000000000
--- a/man2/kcmp.2
+++ /dev/null
@@ -1,420 +0,0 @@
-.\" Copyright (C) 2012, Cyrill Gorcunov <gorcunov@openvz.org>
-.\" and Copyright (C) 2012, 2016, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Kernel commit d97b46a64674a267bc41c9e16132ee2a98c3347d
-.\"
-.TH kcmp 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-kcmp \- compare two processes to determine if they share a kernel resource
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/kcmp.h>" " /* Definition of " KCMP_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_kcmp, pid_t " pid1 ", pid_t " pid2 ", int " type ,
-.BI " unsigned long " idx1 ", unsigned long " idx2 );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR kcmp (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR kcmp ()
-system call can be used to check whether the two processes identified by
-.I pid1
-and
-.I pid2
-share a kernel resource such as virtual memory, file descriptors,
-and so on.
-.PP
-Permission to employ
-.BR kcmp ()
-is governed by ptrace access mode
-.B PTRACE_MODE_READ_REALCREDS
-checks against both
-.I pid1
-and
-.IR pid2 ;
-see
-.BR ptrace (2).
-.PP
-The
-.I type
-argument specifies which resource is to be compared in the two processes.
-It has one of the following values:
-.TP
-.B KCMP_FILE
-Check whether a file descriptor
-.I idx1
-in the process
-.I pid1
-refers to the same open file description (see
-.BR open (2))
-as file descriptor
-.I idx2
-in the process
-.IR pid2 .
-The existence of two file descriptors that refer to the same
-open file description can occur as a result of
-.BR dup (2)
-(and similar)
-.BR fork (2),
-or passing file descriptors via a domain socket (see
-.BR unix (7)).
-.TP
-.B KCMP_FILES
-Check whether the processes share the same set of open file descriptors.
-The arguments
-.I idx1
-and
-.I idx2
-are ignored.
-See the discussion of the
-.B CLONE_FILES
-flag in
-.BR clone (2).
-.TP
-.B KCMP_FS
-Check whether the processes share the same filesystem information
-(i.e., file mode creation mask, working directory, and filesystem root).
-The arguments
-.I idx1
-and
-.I idx2
-are ignored.
-See the discussion of the
-.B CLONE_FS
-flag in
-.BR clone (2).
-.TP
-.B KCMP_IO
-Check whether the processes share I/O context.
-The arguments
-.I idx1
-and
-.I idx2
-are ignored.
-See the discussion of the
-.B CLONE_IO
-flag in
-.BR clone (2).
-.TP
-.B KCMP_SIGHAND
-Check whether the processes share the same table of signal dispositions.
-The arguments
-.I idx1
-and
-.I idx2
-are ignored.
-See the discussion of the
-.B CLONE_SIGHAND
-flag in
-.BR clone (2).
-.TP
-.B KCMP_SYSVSEM
-Check whether the processes share the same
-list of System\ V semaphore undo operations.
-The arguments
-.I idx1
-and
-.I idx2
-are ignored.
-See the discussion of the
-.B CLONE_SYSVSEM
-flag in
-.BR clone (2).
-.TP
-.B KCMP_VM
-Check whether the processes share the same address space.
-The arguments
-.I idx1
-and
-.I idx2
-are ignored.
-See the discussion of the
-.B CLONE_VM
-flag in
-.BR clone (2).
-.TP
-.BR KCMP_EPOLL_TFD " (since Linux 4.13)"
-.\" commit 0791e3644e5ef21646fe565b9061788d05ec71d4
-Check whether the file descriptor
-.I idx1
-of the process
-.I pid1
-is present in the
-.BR epoll (7)
-instance described by
-.I idx2
-of the process
-.IR pid2 .
-The argument
-.I idx2
-is a pointer to a structure where the target file is described.
-This structure has the form:
-.PP
-.in +4n
-.EX
-struct kcmp_epoll_slot {
- __u32 efd;
- __u32 tfd;
- __u64 toff;
-};
-.EE
-.in
-.PP
-Within this structure,
-.I efd
-is an epoll file descriptor returned from
-.BR epoll_create (2),
-.I tfd
-is a target file descriptor number, and
-.I toff
-is a target file offset counted from zero.
-Several different targets may be registered with
-the same file descriptor number and setting a specific
-offset helps to investigate each of them.
-.PP
-Note the
-.BR kcmp ()
-is not protected against false positives which may occur if
-the processes are currently running.
-One should stop the processes by sending
-.B SIGSTOP
-(see
-.BR signal (7))
-prior to inspection with this system call to obtain meaningful results.
-.SH RETURN VALUE
-The return value of a successful call to
-.BR kcmp ()
-is simply the result of arithmetic comparison
-of kernel pointers (when the kernel compares resources, it uses their
-memory addresses).
-.PP
-The easiest way to explain is to consider an example.
-Suppose that
-.I v1
-and
-.I v2
-are the addresses of appropriate resources, then the return value
-is one of the following:
-.RS
-.TP
-.B 0
-.I v1
-is equal to
-.IR v2 ;
-in other words, the two processes share the resource.
-.TP
-.B 1
-.I v1
-is less than
-.IR v2 .
-.TP
-.B 2
-.I v1
-is greater than
-.IR v2 .
-.TP
-.B 3
-.I v1
-is not equal to
-.IR v2 ,
-but ordering information is unavailable.
-.RE
-.PP
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.PP
-.BR kcmp ()
-was designed to return values suitable for sorting.
-This is particularly handy if one needs to compare
-a large number of file descriptors.
-.SH ERRORS
-.TP
-.B EBADF
-.I type
-is
-.B KCMP_FILE
-and
-.I fd1
-or
-.I fd2
-is not an open file descriptor.
-.TP
-.B EFAULT
-The epoll slot addressed by
-.I idx2
-is outside of the user's address space.
-.TP
-.B EINVAL
-.I type
-is invalid.
-.TP
-.B ENOENT
-The target file is not present in
-.BR epoll (7)
-instance.
-.TP
-.B EPERM
-Insufficient permission to inspect process resources.
-The
-.B CAP_SYS_PTRACE
-capability is required to inspect processes that you do not own.
-Other ptrace limitations may also apply, such as
-.BR CONFIG_SECURITY_YAMA ,
-which, when
-.I /proc/sys/kernel/yama/ptrace_scope
-is 2, limits
-.BR kcmp ()
-to child processes;
-see
-.BR ptrace (2).
-.TP
-.B ESRCH
-Process
-.I pid1
-or
-.I pid2
-does not exist.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 3.5.
-.PP
-Before Linux 5.12,
-this system call is available only if the kernel is configured with
-.BR CONFIG_CHECKPOINT_RESTORE ,
-since the original purpose of the system call was for the
-checkpoint/restore in user space (CRIU) feature.
-(The alternative to this system call would have been to expose suitable
-process information via the
-.BR proc (5)
-filesystem; this was deemed to be unsuitable for security reasons.)
-Since Linux 5.12,
-this system call is also available if the kernel is configured with
-.BR CONFIG_KCMP .
-.SH NOTES
-See
-.BR clone (2)
-for some background information on the shared resources
-referred to on this page.
-.SH EXAMPLES
-The program below uses
-.BR kcmp ()
-to test whether pairs of file descriptors refer to
-the same open file description.
-The program tests different cases for the file descriptor pairs,
-as described in the program output.
-An example run of the program is as follows:
-.PP
-.in +4n
-.EX
-$ \fB./a.out\fP
-Parent PID is 1144
-Parent opened file on FD 3
-\&
-PID of child of fork() is 1145
- Compare duplicate FDs from different processes:
- kcmp(1145, 1144, KCMP_FILE, 3, 3) ==> same
-Child opened file on FD 4
- Compare FDs from distinct open()s in same process:
- kcmp(1145, 1145, KCMP_FILE, 3, 4) ==> different
-Child duplicated FD 3 to create FD 5
- Compare duplicated FDs in same process:
- kcmp(1145, 1145, KCMP_FILE, 3, 5) ==> same
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (kcmp.c)
-.EX
-#define _GNU_SOURCE
-#include <err.h>
-#include <fcntl.h>
-#include <linux/kcmp.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/syscall.h>
-#include <sys/wait.h>
-#include <unistd.h>
-\&
-static int
-kcmp(pid_t pid1, pid_t pid2, int type,
- unsigned long idx1, unsigned long idx2)
-{
- return syscall(SYS_kcmp, pid1, pid2, type, idx1, idx2);
-}
-\&
-static void
-test_kcmp(char *msg, pid_t pid1, pid_t pid2, int fd_a, int fd_b)
-{
- printf("\et%s\en", msg);
- printf("\et\etkcmp(%jd, %jd, KCMP_FILE, %d, %d) ==> %s\en",
- (intmax_t) pid1, (intmax_t) pid2, fd_a, fd_b,
- (kcmp(pid1, pid2, KCMP_FILE, fd_a, fd_b) == 0) ?
- "same" : "different");
-}
-\&
-int
-main(void)
-{
- int fd1, fd2, fd3;
- static const char pathname[] = "/tmp/kcmp.test";
-\&
- fd1 = open(pathname, O_CREAT | O_RDWR, 0600);
- if (fd1 == \-1)
- err(EXIT_FAILURE, "open");
-\&
- printf("Parent PID is %jd\en", (intmax_t) getpid());
- printf("Parent opened file on FD %d\en\en", fd1);
-\&
- switch (fork()) {
- case \-1:
- err(EXIT_FAILURE, "fork");
-\&
- case 0:
- printf("PID of child of fork() is %jd\en", (intmax_t) getpid());
-\&
- test_kcmp("Compare duplicate FDs from different processes:",
- getpid(), getppid(), fd1, fd1);
-\&
- fd2 = open(pathname, O_CREAT | O_RDWR, 0600);
- if (fd2 == \-1)
- err(EXIT_FAILURE, "open");
- printf("Child opened file on FD %d\en", fd2);
-\&
- test_kcmp("Compare FDs from distinct open()s in same process:",
- getpid(), getpid(), fd1, fd2);
-\&
- fd3 = dup(fd1);
- if (fd3 == \-1)
- err(EXIT_FAILURE, "dup");
- printf("Child duplicated FD %d to create FD %d\en", fd1, fd3);
-\&
- test_kcmp("Compare duplicated FDs in same process:",
- getpid(), getpid(), fd1, fd3);
- break;
-\&
- default:
- wait(NULL);
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR clone (2),
-.BR unshare (2)
diff --git a/man2/kexec_file_load.2 b/man2/kexec_file_load.2
deleted file mode 100644
index 6c20331d3..000000000
--- a/man2/kexec_file_load.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/kexec_load.2
diff --git a/man2/kexec_load.2 b/man2/kexec_load.2
deleted file mode 100644
index 3063f4364..000000000
--- a/man2/kexec_load.2
+++ /dev/null
@@ -1,331 +0,0 @@
-.\" Copyright (C) 2010 Intel Corporation, Author: Andi Kleen
-.\" and Copyright 2014, Vivek Goyal <vgoyal@redhat.com>
-.\" and Copyright (c) 2015, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH kexec_load 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-kexec_load, kexec_file_load \- load a new kernel for later execution
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/kexec.h>" " /* Definition of " KEXEC_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "long syscall(SYS_kexec_load, unsigned long " entry ,
-.BI " unsigned long " nr_segments \
-", struct kexec_segment *" segments ,
-.BI " unsigned long " flags );
-.BI "long syscall(SYS_kexec_file_load, int " kernel_fd ", int " initrd_fd ,
-.BI " unsigned long " cmdline_len ", const char *" cmdline ,
-.BI " unsigned long " flags );
-.fi
-.PP
-.IR Note :
-glibc provides no wrappers for these system calls,
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR kexec_load ()
-system call loads a new kernel that can be executed later by
-.BR reboot (2).
-.PP
-The
-.I flags
-argument is a bit mask that controls the operation of the call.
-The following values can be specified in
-.IR flags :
-.TP
-.BR KEXEC_ON_CRASH " (since Linux 2.6.13)"
-Execute the new kernel automatically on a system crash.
-This "crash kernel" is loaded into an area of reserved memory that
-is determined at boot time using the
-.I crashkernel
-kernel command-line parameter.
-The location of this reserved memory is exported to user space via the
-.I /proc/iomem
-file, in an entry labeled "Crash kernel".
-A user-space application can parse this file and prepare a list of
-segments (see below) that specify this reserved memory as destination.
-If this flag is specified, the kernel checks that the
-target segments specified in
-.I segments
-fall within the reserved region.
-.TP
-.BR KEXEC_PRESERVE_CONTEXT " (since Linux 2.6.27)"
-Preserve the system hardware and
-software states before executing the new kernel.
-This could be used for system suspend.
-This flag is available only if the kernel was configured with
-.BR CONFIG_KEXEC_JUMP ,
-and is effective only if
-.I nr_segments
-is greater than 0.
-.PP
-The high-order bits (corresponding to the mask 0xffff0000) of
-.I flags
-contain the architecture of the to-be-executed kernel.
-Specify (OR) the constant
-.B KEXEC_ARCH_DEFAULT
-to use the current architecture,
-or one of the following architecture constants
-.BR KEXEC_ARCH_386 ,
-.BR KEXEC_ARCH_68K ,
-.BR KEXEC_ARCH_X86_64 ,
-.BR KEXEC_ARCH_PPC ,
-.BR KEXEC_ARCH_PPC64 ,
-.BR KEXEC_ARCH_IA_64 ,
-.BR KEXEC_ARCH_ARM ,
-.BR KEXEC_ARCH_S390 ,
-.BR KEXEC_ARCH_SH ,
-.BR KEXEC_ARCH_MIPS ,
-and
-.BR KEXEC_ARCH_MIPS_LE .
-The architecture must be executable on the CPU of the system.
-.PP
-The
-.I entry
-argument is the physical entry address in the kernel image.
-The
-.I nr_segments
-argument is the number of segments pointed to by the
-.I segments
-pointer;
-the kernel imposes an (arbitrary) limit of 16 on the number of segments.
-The
-.I segments
-argument is an array of
-.I kexec_segment
-structures which define the kernel layout:
-.PP
-.in +4n
-.EX
-struct kexec_segment {
- void *buf; /* Buffer in user space */
- size_t bufsz; /* Buffer length in user space */
- void *mem; /* Physical address of kernel */
- size_t memsz; /* Physical address length */
-};
-.EE
-.in
-.PP
-The kernel image defined by
-.I segments
-is copied from the calling process into
-the kernel either in regular
-memory or in reserved memory (if
-.B KEXEC_ON_CRASH
-is set).
-The kernel first performs various sanity checks on the
-information passed in
-.IR segments .
-If these checks pass, the kernel copies the segment data to kernel memory.
-Each segment specified in
-.I segments
-is copied as follows:
-.IP \[bu] 3
-.I buf
-and
-.I bufsz
-identify a memory region in the caller's virtual address space
-that is the source of the copy.
-The value in
-.I bufsz
-may not exceed the value in the
-.I memsz
-field.
-.IP \[bu]
-.I mem
-and
-.I memsz
-specify a physical address range that is the target of the copy.
-The values specified in both fields must be multiples of
-the system page size.
-.IP \[bu]
-.I bufsz
-bytes are copied from the source buffer to the target kernel buffer.
-If
-.I bufsz
-is less than
-.IR memsz ,
-then the excess bytes in the kernel buffer are zeroed out.
-.PP
-In case of a normal kexec (i.e., the
-.B KEXEC_ON_CRASH
-flag is not set), the segment data is loaded in any available memory
-and is moved to the final destination at kexec reboot time (e.g., when the
-.BR kexec (8)
-command is executed with the
-.I \-e
-option).
-.PP
-In case of kexec on panic (i.e., the
-.B KEXEC_ON_CRASH
-flag is set), the segment data is
-loaded to reserved memory at the time of the call, and, after a crash,
-the kexec mechanism simply passes control to that kernel.
-.PP
-The
-.BR kexec_load ()
-system call is available only if the kernel was configured with
-.BR CONFIG_KEXEC .
-.SS kexec_file_load()
-The
-.BR kexec_file_load ()
-system call is similar to
-.BR kexec_load (),
-but it takes a different set of arguments.
-It reads the kernel to be loaded from the file referred to by
-the file descriptor
-.IR kernel_fd ,
-and the initrd (initial RAM disk)
-to be loaded from file referred to by the file descriptor
-.IR initrd_fd .
-The
-.I cmdline
-argument is a pointer to a buffer containing the command line
-for the new kernel.
-The
-.I cmdline_len
-argument specifies size of the buffer.
-The last byte in the buffer must be a null byte (\[aq]\e0\[aq]).
-.PP
-The
-.I flags
-argument is a bit mask which modifies the behavior of the call.
-The following values can be specified in
-.IR flags :
-.TP
-.B KEXEC_FILE_UNLOAD
-Unload the currently loaded kernel.
-.TP
-.B KEXEC_FILE_ON_CRASH
-Load the new kernel in the memory region reserved for the crash kernel
-(as for
-.BR KEXEC_ON_CRASH ).
-This kernel is booted if the currently running kernel crashes.
-.TP
-.B KEXEC_FILE_NO_INITRAMFS
-Loading initrd/initramfs is optional.
-Specify this flag if no initramfs is being loaded.
-If this flag is set, the value passed in
-.I initrd_fd
-is ignored.
-.PP
-The
-.BR kexec_file_load ()
-.\" See also http://lwn.net/Articles/603116/
-system call was added to provide support for systems
-where "kexec" loading should be restricted to
-only kernels that are signed.
-This system call is available only if the kernel was configured with
-.BR CONFIG_KEXEC_FILE .
-.SH RETURN VALUE
-On success, these system calls returns 0.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EADDRNOTAVAIL
-.\" See kernel/kexec.::sanity_check_segment_list in the 3.19 kernel source
-The
-.B KEXEC_ON_CRASH
-flags was specified, but the region specified by the
-.I mem
-and
-.I memsz
-fields of one of the
-.I segments
-entries lies outside the range of memory reserved for the crash kernel.
-.TP
-.B EADDRNOTAVAIL
-The value in a
-.I mem
-or
-.I memsz
-field in one of the
-.I segments
-entries is not a multiple of the system page size.
-.TP
-.B EBADF
-.I kernel_fd
-or
-.I initrd_fd
-is not a valid file descriptor.
-.TP
-.B EBUSY
-Another crash kernel is already being loaded
-or a crash kernel is already in use.
-.TP
-.B EINVAL
-.I flags
-is invalid.
-.TP
-.B EINVAL
-The value of a
-.I bufsz
-field in one of the
-.I segments
-entries exceeds the value in the corresponding
-.I memsz
-field.
-.TP
-.B EINVAL
-.I nr_segments
-exceeds
-.B KEXEC_SEGMENT_MAX
-(16).
-.TP
-.B EINVAL
-Two or more of the kernel target buffers overlap.
-.TP
-.B EINVAL
-The value in
-.I cmdline[cmdline_len\-1]
-is not \[aq]\e0\[aq].
-.TP
-.B EINVAL
-The file referred to by
-.I kernel_fd
-or
-.I initrd_fd
-is empty (length zero).
-.TP
-.B ENOEXEC
-.I kernel_fd
-does not refer to an open file, or the kernel can't load this file.
-Currently, the file must be a bzImage and contain an x86 kernel that
-is loadable above 4\ GiB in memory (see the kernel source file
-.IR Documentation/x86/boot.txt ).
-.TP
-.B ENOMEM
-Could not allocate memory.
-.TP
-.B EPERM
-The caller does not have the
-.B CAP_SYS_BOOT
-capability.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-.TP
-.BR kexec_load ()
-Linux 2.6.13.
-.TP
-.BR kexec_file_load ()
-Linux 3.17.
-.SH SEE ALSO
-.BR reboot (2),
-.BR syscall (2),
-.BR kexec (8)
-.PP
-The kernel source files
-.I Documentation/kdump/kdump.txt
-and
-.I Documentation/admin\-guide/kernel\-parameters.txt
diff --git a/man2/keyctl.2 b/man2/keyctl.2
deleted file mode 100644
index e6972cb03..000000000
--- a/man2/keyctl.2
+++ /dev/null
@@ -1,2297 +0,0 @@
-.\" Copyright (C) 2016 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (C) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
-.\" A very few fragments remain from an earlier version of this page
-.\" written by David Howells (dhowells@redhat.com)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH keyctl 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-keyctl \- manipulate the kernel's key management facility
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.PP
-Alternatively, Linux Key Management Utilities
-.RI ( libkeyutils ", " \-lkeyutils );
-see VERSIONS.
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/keyctl.h>" " /* Definition of " KEY* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "long syscall(SYS_keyctl, int " operation ", unsigned long " arg2 ,
-.BI " unsigned long " arg3 ", unsigned long " arg4 ,
-.BI " unsigned long " arg5 );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR keyctl (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-.BR keyctl ()
-allows user-space programs to perform key manipulation.
-.PP
-The operation performed by
-.BR keyctl ()
-is determined by the value of the
-.I operation
-argument.
-Each of these operations is wrapped by the
-.I libkeyutils
-library (provided by the
-.I keyutils
-package) into individual functions (noted below)
-to permit the compiler to check types.
-.PP
-The permitted values for
-.I operation
-are:
-.TP
-.BR KEYCTL_GET_KEYRING_ID " (since Linux 2.6.10)"
-Map a special key ID to a real key ID for this process.
-.IP
-This operation looks up the special key whose ID is provided in
-.I arg2
-(cast to
-.IR key_serial_t ).
-If the special key is found,
-the ID of the corresponding real key is returned as the function result.
-The following values may be specified in
-.IR arg2 :
-.RS
-.TP
-.B KEY_SPEC_THREAD_KEYRING
-This specifies the calling thread's thread-specific keyring.
-See
-.BR thread\-keyring (7).
-.TP
-.B KEY_SPEC_PROCESS_KEYRING
-This specifies the caller's process-specific keyring.
-See
-.BR process\-keyring (7).
-.TP
-.B KEY_SPEC_SESSION_KEYRING
-This specifies the caller's session-specific keyring.
-See
-.BR session\-keyring (7).
-.TP
-.B KEY_SPEC_USER_KEYRING
-This specifies the caller's UID-specific keyring.
-See
-.BR user\-keyring (7).
-.TP
-.B KEY_SPEC_USER_SESSION_KEYRING
-This specifies the caller's UID-session keyring.
-See
-.BR user\-session\-keyring (7).
-.TP
-.BR KEY_SPEC_REQKEY_AUTH_KEY " (since Linux 2.6.16)"
-.\" commit b5f545c880a2a47947ba2118b2509644ab7a2969
-This specifies the authorization key created by
-.BR request_key (2)
-and passed to the process it spawns to generate a key.
-This key is available only in a
-.BR request\-key (8)-style
-program that was passed an authorization key by the kernel and
-ceases to be available once the requested key has been instantiated; see
-.BR request_key (2).
-.TP
-.BR KEY_SPEC_REQUESTOR_KEYRING " (since Linux 2.6.29)"
-.\" commit 8bbf4976b59fc9fc2861e79cab7beb3f6d647640
-This specifies the key ID for the
-.BR request_key (2)
-destination keyring.
-This keyring is available only in a
-.BR request\-key (8)-style
-program that was passed an authorization key by the kernel and
-ceases to be available once the requested key has been instantiated; see
-.BR request_key (2).
-.RE
-.IP
-The behavior if the key specified in
-.I arg2
-does not exist depends on the value of
-.I arg3
-(cast to
-.IR int ).
-If
-.I arg3
-contains a nonzero value, then\[em]if it is appropriate to do so
-(e.g., when looking up the user, user-session, or session key)\[em]a new key
-is created and its real key ID returned as the function result.
-.\" The keyctl_get_keyring_ID.3 page says that a new key
-.\" "will be created *if it is appropriate to do so**. What is the
-.\" determiner for appropriate?
-.\" David Howells: Some special keys such as KEY_SPEC_REQKEY_AUTH_KEY
-.\" wouldn't get created but user/user-session/session keyring would
-.\" be created.
-Otherwise, the operation fails with the error
-.BR ENOKEY .
-.IP
-If a valid key ID is specified in
-.IR arg2 ,
-and the key exists, then this operation simply returns the key ID.
-If the key does not exist, the call fails with error
-.BR ENOKEY .
-.IP
-The caller must have
-.I search
-permission on a keyring in order for it to be found.
-.IP
-The arguments
-.I arg4
-and
-.I arg5
-are ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_get_keyring_ID (3).
-.TP
-.BR KEYCTL_JOIN_SESSION_KEYRING " (since Linux 2.6.10)"
-Replace the session keyring this process subscribes to with
-a new session keyring.
-.\" This may be useful in conjunction with some sort of
-.\" session management framework that is employed by the application.
-.IP
-If
-.I arg2
-is NULL,
-an anonymous keyring with the description "_ses" is created
-and the process is subscribed to that keyring as its session keyring,
-displacing the previous session keyring.
-.IP
-Otherwise,
-.I arg2
-(cast to
-.IR "char\ *" )
-is treated as the description (name) of a keyring,
-and the behavior is as follows:
-.RS
-.IP \[bu] 3
-If a keyring with a matching description exists,
-the process will attempt to subscribe to that keyring
-as its session keyring if possible;
-if that is not possible, an error is returned.
-In order to subscribe to the keyring,
-the caller must have
-.I search
-permission on the keyring.
-.IP \[bu]
-If a keyring with a matching description does not exist,
-then a new keyring with the specified description is created,
-and the process is subscribed to that keyring as its session keyring.
-.RE
-.IP
-The arguments
-.IR arg3 ,
-.IR arg4 ,
-and
-.I arg5
-are ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_join_session_keyring (3).
-.TP
-.BR KEYCTL_UPDATE " (since Linux 2.6.10)"
-Update a key's data payload.
-.IP
-The
-.I arg2
-argument (cast to
-.IR key_serial_t )
-specifies the ID of the key to be updated.
-The
-.I arg3
-argument (cast to
-.IR "void\ *" )
-points to the new payload and
-.I arg4
-(cast to
-.IR size_t )
-contains the new payload size in bytes.
-.IP
-The caller must have
-.I write
-permission on the key specified and the key type must support updating.
-.IP
-A negatively instantiated key (see the description of
-.BR KEYCTL_REJECT )
-can be positively instantiated with this operation.
-.IP
-The
-.I arg5
-argument is ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_update (3).
-.TP
-.BR KEYCTL_REVOKE " (since Linux 2.6.10)"
-Revoke the key with the ID provided in
-.I arg2
-(cast to
-.IR key_serial_t ).
-The key is scheduled for garbage collection;
-it will no longer be findable,
-and will be unavailable for further operations.
-Further attempts to use the key will fail with the error
-.BR EKEYREVOKED .
-.IP
-The caller must have
-.I write
-or
-.I setattr
-permission on the key.
-.\" Keys with the KEY_FLAG_KEEP bit set cause an EPERM
-.\" error for KEYCTL_REVOKE. Does this need to be documented?
-.\" David Howells: No significance for user space.
-.IP
-The arguments
-.IR arg3 ,
-.IR arg4 ,
-and
-.I arg5
-are ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_revoke (3).
-.TP
-.BR KEYCTL_CHOWN " (since Linux 2.6.10)"
-Change the ownership (user and group ID) of a key.
-.IP
-The
-.I arg2
-argument (cast to
-.IR key_serial_t )
-contains the key ID.
-The
-.I arg3
-argument (cast to
-.IR uid_t )
-contains the new user ID (or \-1 in case the user ID shouldn't be changed).
-The
-.I arg4
-argument (cast to
-.IR gid_t )
-contains the new group ID (or \-1 in case the group ID shouldn't be changed).
-.IP
-The key must grant the caller
-.I setattr
-permission.
-.IP
-For the UID to be changed, or for the GID to be changed to a group
-the caller is not a member of, the caller must have the
-.B CAP_SYS_ADMIN
-capability (see
-.BR capabilities (7)).
-.IP
-If the UID is to be changed, the new user must have sufficient
-quota to accept the key.
-The quota deduction will be removed from the old user
-to the new user should the UID be changed.
-.IP
-The
-.I arg5
-argument is ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_chown (3).
-.TP
-.BR KEYCTL_SETPERM " (since Linux 2.6.10)"
-Change the permissions of the key with the ID provided in the
-.I arg2
-argument (cast to
-.IR key_serial_t )
-to the permissions provided in the
-.I arg3
-argument (cast to
-.IR key_perm_t ).
-.IP
-If the caller doesn't have the
-.B CAP_SYS_ADMIN
-capability, it can change permissions only for the keys it owns.
-(More precisely: the caller's filesystem UID must match the UID of the key.)
-.IP
-The key must grant
-.I setattr
-permission to the caller
-.I regardless
-of the caller's capabilities.
-.\" FIXME Above, is it really intended that a privileged process can't
-.\" override the lack of the 'setattr' permission?
-.IP
-The permissions in
-.I arg3
-specify masks of available operations
-for each of the following user categories:
-.RS
-.TP
-.IR possessor " (since Linux 2.6.14)"
-.\" commit 664cceb0093b755739e56572b836a99104ee8a75
-This is the permission granted to a process that possesses the key
-(has it attached searchably to one of the process's keyrings);
-see
-.BR keyrings (7).
-.TP
-.I user
-This is the permission granted to a process
-whose filesystem UID matches the UID of the key.
-.TP
-.I group
-This is the permission granted to a process
-whose filesystem GID or any of its supplementary GIDs
-matches the GID of the key.
-.TP
-.I other
-This is the permission granted to other processes
-that do not match the
-.I user
-and
-.I group
-categories.
-.RE
-.IP
-The
-.IR user ,
-.IR group ,
-and
-.I other
-categories are exclusive: if a process matches the
-.I user
-category, it will not receive permissions granted in the
-.I group
-category; if a process matches the
-.I user
-or
-.I group
-category, then it will not receive permissions granted in the
-.I other
-category.
-.IP
-The
-.I possessor
-category grants permissions that are cumulative with the grants from the
-.IR user ,
-.IR group ,
-or
-.I other
-category.
-.IP
-Each permission mask is eight bits in size,
-with only six bits currently used.
-The available permissions are:
-.RS
-.TP
-.I view
-This permission allows reading attributes of a key.
-.IP
-This permission is required for the
-.B KEYCTL_DESCRIBE
-operation.
-.IP
-The permission bits for each category are
-.BR KEY_POS_VIEW ,
-.BR KEY_USR_VIEW ,
-.BR KEY_GRP_VIEW ,
-and
-.BR KEY_OTH_VIEW .
-.TP
-.I read
-This permission allows reading a key's payload.
-.IP
-This permission is required for the
-.B KEYCTL_READ
-operation.
-.IP
-The permission bits for each category are
-.BR KEY_POS_READ ,
-.BR KEY_USR_READ ,
-.BR KEY_GRP_READ ,
-and
-.BR KEY_OTH_READ .
-.TP
-.I write
-This permission allows update or instantiation of a key's payload.
-For a keyring, it allows keys to be linked and unlinked from the keyring,
-.IP
-This permission is required for the
-.BR KEYCTL_UPDATE ,
-.BR KEYCTL_REVOKE ,
-.BR KEYCTL_CLEAR ,
-.BR KEYCTL_LINK ,
-and
-.B KEYCTL_UNLINK
-operations.
-.IP
-The permission bits for each category are
-.BR KEY_POS_WRITE ,
-.BR KEY_USR_WRITE ,
-.BR KEY_GRP_WRITE ,
-and
-.BR KEY_OTH_WRITE .
-.TP
-.I search
-This permission allows keyrings to be searched and keys to be found.
-Searches can recurse only into nested keyrings that have
-.I search
-permission set.
-.IP
-This permission is required for the
-.BR KEYCTL_GET_KEYRING_ID ,
-.BR KEYCTL_JOIN_SESSION_KEYRING ,
-.BR KEYCTL_SEARCH ,
-and
-.B KEYCTL_INVALIDATE
-operations.
-.IP
-The permission bits for each category are
-.BR KEY_POS_SEARCH ,
-.BR KEY_USR_SEARCH ,
-.BR KEY_GRP_SEARCH ,
-and
-.BR KEY_OTH_SEARCH .
-.TP
-.I link
-This permission allows a key or keyring to be linked to.
-.IP
-This permission is required for the
-.B KEYCTL_LINK
-and
-.B KEYCTL_SESSION_TO_PARENT
-operations.
-.IP
-The permission bits for each category are
-.BR KEY_POS_LINK ,
-.BR KEY_USR_LINK ,
-.BR KEY_GRP_LINK ,
-and
-.BR KEY_OTH_LINK .
-.TP
-.IR setattr " (since Linux 2.6.15)."
-This permission allows a key's UID, GID, and permissions mask to be changed.
-.IP
-This permission is required for the
-.BR KEYCTL_REVOKE ,
-.BR KEYCTL_CHOWN ,
-and
-.B KEYCTL_SETPERM
-operations.
-.IP
-The permission bits for each category are
-.BR KEY_POS_SETATTR ,
-.BR KEY_USR_SETATTR ,
-.BR KEY_GRP_SETATTR ,
-and
-.BR KEY_OTH_SETATTR .
-.RE
-.IP
-As a convenience, the following macros are defined as masks for
-all of the permission bits in each of the user categories:
-.BR KEY_POS_ALL ,
-.BR KEY_USR_ALL ,
-.BR KEY_GRP_ALL ,
-and
-.BR KEY_OTH_ALL .
-.IP
-The
-.I arg4
-and
-.I arg5
-arguments are ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_setperm (3).
-.TP
-.BR KEYCTL_DESCRIBE " (since Linux 2.6.10)"
-Obtain a string describing the attributes of a specified key.
-.IP
-The ID of the key to be described is specified in
-.I arg2
-(cast to
-.IR key_serial_t ).
-The descriptive string is returned in the buffer pointed to by
-.I arg3
-(cast to
-.IR char\~* );
-.I arg4
-(cast to
-.IR size_t )
-specifies the size of that buffer in bytes.
-.IP
-The key must grant the caller
-.I view
-permission.
-.IP
-The returned string is null-terminated and
-contains the following information about the key:
-.IP
-.in +4n
-.IR type ; uid ; gid ; perm ; description
-.in
-.IP
-In the above,
-.I type
-and
-.I description
-are strings,
-.I uid
-and
-.I gid
-are decimal strings, and
-.I perm
-is a hexadecimal permissions mask.
-The descriptive string is written with the following format:
-.IP
-.in +4n
-.EX
-%s;%d;%d;%08x;%s
-.EE
-.in
-.IP
-.B Note: the intention is that the descriptive string should
-.B be extensible in future kernel versions.
-In particular, the
-.I description
-field will not contain semicolons;
-.\" FIXME But, the kernel does not enforce the requirement
-.\" that the key description contains no semicolons!
-.\" So, user space has no guarantee here??
-.\" Either something more needs to be said here,
-.\" or a kernel fix is required.
-it should be parsed by working backwards from the end of the string
-to find the last semicolon.
-This allows future semicolon-delimited fields to be inserted
-in the descriptive string in the future.
-.IP
-Writing to the buffer is attempted only when
-.I arg3
-is non-NULL and the specified buffer size
-is large enough to accept the descriptive string
-(including the terminating null byte).
-.\" Function commentary says it copies up to buflen bytes, but see the
-.\" (buffer && buflen >= ret) condition in keyctl_describe_key() in
-.\" security/keyctl.c
-In order to determine whether the buffer size was too small,
-check to see if the return value of the operation is greater than
-.IR arg4 .
-.IP
-The
-.I arg5
-argument is ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_describe (3).
-.TP
-.B KEYCTL_CLEAR
-Clear the contents of (i.e., unlink all keys from) a keyring.
-.IP
-The ID of the key
-(which must be of keyring type)
-.\" or the error ENOTDIR results
-is provided in
-.I arg2
-(cast to
-.IR key_serial_t ).
-.\" According to Documentation/security/keys.txt:
-.\" This function can also be used to clear special kernel keyrings if they
-.\" are appropriately marked if the user has CAP_SYS_ADMIN capability. The
-.\" DNS resolver cache keyring is an example of this.
-.IP
-The caller must have
-.I write
-permission on the keyring.
-.IP
-The arguments
-.IR arg3 ,
-.IR arg4 ,
-and
-.I arg5
-are ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_clear (3).
-.TP
-.BR KEYCTL_LINK " (since Linux 2.6.10)"
-Create a link from a keyring to a key.
-.IP
-The key to be linked is specified in
-.I arg2
-(cast to
-.IR key_serial_t );
-the keyring is specified in
-.I arg3
-(cast to
-.IR key_serial_t ).
-.IP
-If a key with the same type and description is already linked in the keyring,
-then that key is displaced from the keyring.
-.IP
-Before creating the link,
-the kernel checks the nesting of the keyrings and returns appropriate errors
-if the link would produce a cycle
-or if the nesting of keyrings would be too deep
-(The limit on the nesting of keyrings is determined by the kernel constant
-.BR KEYRING_SEARCH_MAX_DEPTH ,
-defined with the value 6, and is necessary to prevent overflows
-on the kernel stack when recursively searching keyrings).
-.IP
-The caller must have
-.I link
-permission on the key being added and
-.I write
-permission on the keyring.
-.IP
-The arguments
-.I arg4
-and
-.I arg5
-are ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_link (3).
-.TP
-.BR KEYCTL_UNLINK " (since Linux 2.6.10)"
-Unlink a key from a keyring.
-.IP
-The ID of the key to be unlinked is specified in
-.I arg2
-(cast to
-.IR key_serial_t );
-the ID of the keyring from which it is to be unlinked is specified in
-.I arg3
-(cast to
-.IR key_serial_t ).
-.IP
-If the key is not currently linked into the keyring, an error results.
-.IP
-The caller must have
-.I write
-permission on the keyring from which the key is being removed.
-.IP
-If the last link to a key is removed,
-then that key will be scheduled for destruction.
-.IP
-The arguments
-.I arg4
-and
-.I arg5
-are ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_unlink (3).
-.TP
-.BR KEYCTL_SEARCH " (since Linux 2.6.10)"
-Search for a key in a keyring tree,
-returning its ID and optionally linking it to a specified keyring.
-.IP
-The tree to be searched is specified by passing
-the ID of the head keyring in
-.I arg2
-(cast to
-.IR key_serial_t ).
-The search is performed breadth-first and recursively.
-.IP
-The
-.I arg3
-and
-.I arg4
-arguments specify the key to be searched for:
-.I arg3
-(cast as
-.IR char\~* )
-contains the key type
-(a null-terminated character string up to 32 bytes in size,
-including the terminating null byte), and
-.I arg4
-(cast as
-.IR char\~* )
-contains the description of the key
-(a null-terminated character string up to 4096 bytes in size,
-including the terminating null byte).
-.IP
-The source keyring must grant
-.I search
-permission to the caller.
-When performing the recursive search, only keyrings that grant the caller
-.I search
-permission will be searched.
-Only keys with for which the caller has
-.I search
-permission can be found.
-.IP
-If the key is found, its ID is returned as the function result.
-.IP
-If the key is found and
-.I arg5
-(cast to
-.IR key_serial_t )
-is nonzero, then, subject to the same constraints and rules as
-.BR KEYCTL_LINK ,
-the key is linked into the keyring whose ID is specified in
-.IR arg5 .
-If the destination keyring specified in
-.I arg5
-already contains a link to a key that has the same type and description,
-then that link will be displaced by a link to
-the key found by this operation.
-.IP
-Instead of valid existing keyring IDs, the source
-.RI ( arg2 )
-and destination
-.RI ( arg5 )
-keyrings can be one of the special keyring IDs listed under
-.BR KEYCTL_GET_KEYRING_ID .
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_search (3).
-.TP
-.BR KEYCTL_READ " (since Linux 2.6.10)"
-Read the payload data of a key.
-.IP
-The ID of the key whose payload is to be read is specified in
-.I arg2
-(cast to
-.IR key_serial_t ).
-This can be the ID of an existing key,
-or any of the special key IDs listed for
-.BR KEYCTL_GET_KEYRING_ID .
-.\" including KEY_SPEC_REQKEY_AUTH_KEY
-.IP
-The payload is placed in the buffer pointed by
-.I arg3
-(cast to
-.IR "char\ *" );
-the size of that buffer must be specified in
-.I arg4
-(cast to
-.IR size_t ).
-.IP
-The returned data will be processed for presentation
-according to the key type.
-For example, a keyring will return an array of
-.I key_serial_t
-entries representing the IDs of all the keys that are linked to it.
-The
-.I user
-key type will return its data as is.
-If a key type does not implement this function,
-the operation fails with the error
-.BR EOPNOTSUPP .
-.IP
-If
-.I arg3
-is not NULL,
-as much of the payload data as will fit is copied into the buffer.
-On a successful return,
-the return value is always the total size of the payload data.
-To determine whether the buffer was of sufficient size,
-check to see that the return value is less than or equal to
-the value supplied in
-.IR arg4 .
-.IP
-The key must either grant the caller
-.I read
-permission, or grant the caller
-.I search
-permission when searched for from the process keyrings
-(i.e., the key is possessed).
-.IP
-The
-.I arg5
-argument is ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_read (3).
-.TP
-.BR KEYCTL_INSTANTIATE " (since Linux 2.6.10)"
-(Positively) instantiate an uninstantiated key with a specified payload.
-.IP
-The ID of the key to be instantiated is provided in
-.I arg2
-(cast to
-.IR key_serial_t ).
-.IP
-The key payload is specified in the buffer pointed to by
-.I arg3
-(cast to
-.IR "void\ *");
-the size of that buffer is specified in
-.I arg4
-(cast to
-.IR size_t ).
-.IP
-The payload may be a NULL pointer and the buffer size may be 0
-if this is supported by the key type (e.g., it is a keyring).
-.IP
-The operation may be fail if the payload data is in the wrong format
-or is otherwise invalid.
-.IP
-If
-.I arg5
-(cast to
-.IR key_serial_t )
-is nonzero, then, subject to the same constraints and rules as
-.BR KEYCTL_LINK ,
-the instantiated key is linked into the keyring whose ID specified in
-.IR arg5 .
-.IP
-The caller must have the appropriate authorization key,
-and once the uninstantiated key has been instantiated,
-the authorization key is revoked.
-In other words, this operation is available only from a
-.BR request\-key (8)-style
-program.
-See
-.BR request_key (2)
-for an explanation of uninstantiated keys and key instantiation.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_instantiate (3).
-.TP
-.BR KEYCTL_NEGATE " (since Linux 2.6.10)"
-Negatively instantiate an uninstantiated key.
-.IP
-This operation is equivalent to the call:
-.IP
-.in +4n
-.EX
-keyctl(KEYCTL_REJECT, arg2, arg3, ENOKEY, arg4);
-.EE
-.in
-.IP
-The
-.I arg5
-argument is ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_negate (3).
-.TP
-.BR KEYCTL_SET_REQKEY_KEYRING " (since Linux 2.6.13)"
-Set the default keyring to which implicitly requested keys
-will be linked for this thread, and return the previous setting.
-Implicit key requests are those made by internal kernel components,
-.\" I.e., calls to the kernel's internal request_key() interface,
-.\" which is distinct from the request_key(2) system call (which
-.\" ultimately employs the kernel-internal interface).
-such as can occur when, for example, opening files
-on an AFS or NFS filesystem.
-Setting the default keyring also has an effect when requesting
-a key from user space; see
-.BR request_key (2)
-for details.
-.IP
-The
-.I arg2
-argument (cast to
-.IR int )
-should contain one of the following values,
-to specify the new default keyring:
-.RS
-.TP
-.B KEY_REQKEY_DEFL_NO_CHANGE
-Don't change the default keyring.
-This can be used to discover the current default keyring
-(without changing it).
-.TP
-.B KEY_REQKEY_DEFL_DEFAULT
-This selects the default behaviour,
-which is to use the thread-specific keyring if there is one,
-otherwise the process-specific keyring if there is one,
-otherwise the session keyring if there is one,
-otherwise the UID-specific session keyring,
-otherwise the user-specific keyring.
-.TP
-.B KEY_REQKEY_DEFL_THREAD_KEYRING
-Use the thread-specific keyring
-.RB ( thread\-keyring (7))
-as the new default keyring.
-.TP
-.B KEY_REQKEY_DEFL_PROCESS_KEYRING
-Use the process-specific keyring
-.RB ( process\-keyring (7))
-as the new default keyring.
-.TP
-.B KEY_REQKEY_DEFL_SESSION_KEYRING
-Use the session-specific keyring
-.RB ( session\-keyring (7))
-as the new default keyring.
-.TP
-.B KEY_REQKEY_DEFL_USER_KEYRING
-Use the UID-specific keyring
-.RB ( user\-keyring (7))
-as the new default keyring.
-.TP
-.B KEY_REQKEY_DEFL_USER_SESSION_KEYRING
-Use the UID-specific session keyring
-.RB ( user\-session\-keyring (7))
-as the new default keyring.
-.TP
-.BR KEY_REQKEY_DEFL_REQUESTOR_KEYRING " (since Linux 2.6.29)"
-.\" 8bbf4976b59fc9fc2861e79cab7beb3f6d647640
-Use the requestor keyring.
-.\" FIXME The preceding explanation needs to be expanded.
-.\" Is the following correct:
-.\"
-.\" The requestor keyring is the dest_keyring that
-.\" was supplied to a call to request_key(2)?
-.\"
-.\" David Howells said: to be checked
-.RE
-.IP
-All other values are invalid.
-.\" (including the still-unsupported KEY_REQKEY_DEFL_GROUP_KEYRING)
-.IP
-The arguments
-.IR arg3 ,
-.IR arg4 ,
-and
-.I arg5
-are ignored.
-.IP
-The setting controlled by this operation is inherited by the child of
-.BR fork (2)
-and preserved across
-.BR execve (2).
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_set_reqkey_keyring (3).
-.TP
-.BR KEYCTL_SET_TIMEOUT " (since Linux 2.6.16)"
-Set a timeout on a key.
-.IP
-The ID of the key is specified in
-.I arg2
-(cast to
-.IR key_serial_t ).
-The timeout value, in seconds from the current time,
-is specified in
-.I arg3
-(cast to
-.IR "unsigned int" ).
-The timeout is measured against the realtime clock.
-.IP
-Specifying the timeout value as 0 clears any existing timeout on the key.
-.IP
-The
-.I /proc/keys
-file displays the remaining time until each key will expire.
-(This is the only method of discovering the timeout on a key.)
-.IP
-The caller must either have the
-.I setattr
-permission on the key
-or hold an instantiation authorization token for the key (see
-.BR request_key (2)).
-.IP
-The key and any links to the key will be
-automatically garbage collected after the timeout expires.
-Subsequent attempts to access the key will then fail with the error
-.BR EKEYEXPIRED .
-.IP
-This operation cannot be used to set timeouts on revoked, expired,
-or negatively instantiated keys.
-.IP
-The arguments
-.I arg4
-and
-.I arg5
-are ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_set_timeout (3).
-.TP
-.BR KEYCTL_ASSUME_AUTHORITY " (since Linux 2.6.16)"
-Assume (or divest) the authority for the calling thread
-to instantiate a key.
-.IP
-The
-.I arg2
-argument (cast to
-.IR key_serial_t )
-specifies either a nonzero key ID to assume authority,
-or the value 0 to divest authority.
-.IP
-If
-.I arg2
-is nonzero, then it specifies the ID of an uninstantiated key for which
-authority is to be assumed.
-That key can then be instantiated using one of
-.BR KEYCTL_INSTANTIATE ,
-.BR KEYCTL_INSTANTIATE_IOV ,
-.BR KEYCTL_REJECT ,
-or
-.BR KEYCTL_NEGATE .
-Once the key has been instantiated,
-the thread is automatically divested of authority to instantiate the key.
-.IP
-Authority over a key can be assumed only if the calling thread has present
-in its keyrings the authorization key that is
-associated with the specified key.
-(In other words, the
-.B KEYCTL_ASSUME_AUTHORITY
-operation is available only from a
-.BR request\-key (8)-style
-program; see
-.BR request_key (2)
-for an explanation of how this operation is used.)
-The caller must have
-.I search
-permission on the authorization key.
-.IP
-If the specified key has a matching authorization key,
-then the ID of that key is returned.
-The authorization key can be read
-.RB ( KEYCTL_READ )
-to obtain the callout information passed to
-.BR request_key (2).
-.IP
-If the ID given in
-.I arg2
-is 0, then the currently assumed authority is cleared (divested),
-and the value 0 is returned.
-.IP
-The
-.B KEYCTL_ASSUME_AUTHORITY
-mechanism allows a program such as
-.BR request\-key (8)
-to assume the necessary authority to instantiate a new uninstantiated key
-that was created as a consequence of a call to
-.BR request_key (2).
-For further information, see
-.BR request_key (2)
-and the kernel source file
-.IR Documentation/security/keys\-request\-key.txt .
-.IP
-The arguments
-.IR arg3 ,
-.IR arg4 ,
-and
-.I arg5
-are ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_assume_authority (3).
-.TP
-.BR KEYCTL_GET_SECURITY " (since Linux 2.6.26)"
-.\" commit 70a5bb72b55e82fbfbf1e22cae6975fac58a1e2d
-Get the LSM (Linux Security Module) security label of the specified key.
-.IP
-The ID of the key whose security label is to be fetched is specified in
-.I arg2
-(cast to
-.IR key_serial_t ).
-The security label (terminated by a null byte)
-will be placed in the buffer pointed to by
-.I arg3
-argument (cast to
-.IR "char\ *" );
-the size of the buffer must be provided in
-.I arg4
-(cast to
-.IR size_t ).
-.IP
-If
-.I arg3
-is specified as NULL or the buffer size specified in
-.I arg4
-is too small, the full size of the security label string
-(including the terminating null byte)
-is returned as the function result,
-and nothing is copied to the buffer.
-.IP
-The caller must have
-.I view
-permission on the specified key.
-.IP
-The returned security label string will be rendered in a form appropriate
-to the LSM in force.
-For example, with SELinux, it may look like:
-.IP
-.in +4n
-.EX
-unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
-.EE
-.in
-.IP
-If no LSM is currently in force,
-then an empty string is placed in the buffer.
-.IP
-The
-.I arg5
-argument is ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the functions
-.BR keyctl_get_security (3)
-and
-.BR keyctl_get_security_alloc (3).
-.TP
-.BR KEYCTL_SESSION_TO_PARENT " (since Linux 2.6.32)"
-.\" commit ee18d64c1f632043a02e6f5ba5e045bb26a5465f
-Replace the session keyring to which the
-.I parent
-of the calling process
-subscribes with the session keyring of the calling process.
-.\" What is the use case for KEYCTL_SESSION_TO_PARENT?
-.\" David Howells: the Process Authentication Groups people requested this,
-.\" but then didn't use it; maybe there are no users.
-.IP
-The keyring will be replaced in the parent process at the point
-where the parent next transitions from kernel space to user space.
-.IP
-The keyring must exist and must grant the caller
-.I link
-permission.
-The parent process must be single-threaded and have
-the same effective ownership as this process
-and must not be set-user-ID or set-group-ID.
-The UID of the parent process's existing session keyring (f it has one),
-as well as the UID of the caller's session keyring
-much match the caller's effective UID.
-.IP
-The fact that it is the parent process that is affected by this operation
-allows a program such as the shell to start a child process that
-uses this operation to change the shell's session keyring.
-(This is what the
-.BR keyctl (1)
-.B new_session
-command does.)
-.IP
-The arguments
-.IR arg2 ,
-.IR arg3 ,
-.IR arg4 ,
-and
-.I arg5
-are ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_session_to_parent (3).
-.TP
-.BR KEYCTL_REJECT " (since Linux 2.6.39)"
-.\" commit fdd1b94581782a2ddf9124414e5b7a5f48ce2f9c
-Mark a key as negatively instantiated and set an expiration timer
-on the key.
-This operation provides a superset of the functionality of the earlier
-.B KEYCTL_NEGATE
-operation.
-.IP
-The ID of the key that is to be negatively instantiated is specified in
-.I arg2
-(cast to
-.IR key_serial_t ).
-The
-.I arg3
-(cast to
-.IR "unsigned int" )
-argument specifies the lifetime of the key, in seconds.
-The
-.I arg4
-argument (cast to
-.IR "unsigned int" )
-specifies the error to be returned when a search hits this key;
-typically, this is one of
-.BR EKEYREJECTED ,
-.BR EKEYREVOKED ,
-or
-.BR EKEYEXPIRED .
-.IP
-If
-.I arg5
-(cast to
-.IR key_serial_t )
-is nonzero, then, subject to the same constraints and rules as
-.BR KEYCTL_LINK ,
-the negatively instantiated key is linked into the keyring
-whose ID is specified in
-.IR arg5 .
-.IP
-The caller must have the appropriate authorization key.
-In other words, this operation is available only from a
-.BR request\-key (8)-style
-program.
-See
-.BR request_key (2).
-.IP
-The caller must have the appropriate authorization key,
-and once the uninstantiated key has been instantiated,
-the authorization key is revoked.
-In other words, this operation is available only from a
-.BR request\-key (8)-style
-program.
-See
-.BR request_key (2)
-for an explanation of uninstantiated keys and key instantiation.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_reject (3).
-.TP
-.BR KEYCTL_INSTANTIATE_IOV " (since Linux 2.6.39)"
-.\" commit ee009e4a0d4555ed522a631bae9896399674f063
-Instantiate an uninstantiated key with a payload specified
-via a vector of buffers.
-.IP
-This operation is the same as
-.BR KEYCTL_INSTANTIATE ,
-but the payload data is specified as an array of
-.I iovec
-structures (see
-.BR iovec (3type)).
-.IP
-The pointer to the payload vector is specified in
-.I arg3
-(cast as
-.IR "const struct iovec\~*" ).
-The number of items in the vector is specified in
-.I arg4
-(cast as
-.IR "unsigned int" ).
-.IP
-The
-.I arg2
-(key ID)
-and
-.I arg5
-(keyring ID)
-are interpreted as for
-.BR KEYCTL_INSTANTIATE .
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_instantiate_iov (3).
-.TP
-.BR KEYCTL_INVALIDATE " (since Linux 3.5)"
-.\" commit fd75815f727f157a05f4c96b5294a4617c0557da
-Mark a key as invalid.
-.IP
-The ID of the key to be invalidated is specified in
-.I arg2
-(cast to
-.IR key_serial_t ).
-.IP
-To invalidate a key,
-the caller must have
-.I search
-permission on the key.
-.\" CAP_SYS_ADMIN is permitted to invalidate certain special keys
-.IP
-This operation marks the key as invalid
-and schedules immediate garbage collection.
-The garbage collector removes the invalidated key from all keyrings and
-deletes the key when its reference count reaches zero.
-After this operation,
-the key will be ignored by all searches,
-even if it is not yet deleted.
-.IP
-Keys that are marked invalid become invisible to normal key operations
-immediately, though they are still visible in
-.I /proc/keys
-(marked with an 'i' flag)
-until they are actually removed.
-.IP
-The arguments
-.IR arg3 ,
-.IR arg4 ,
-and
-.I arg5
-are ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_invalidate (3).
-.TP
-.BR KEYCTL_GET_PERSISTENT " (since Linux 3.13)"
-.\" commit f36f8c75ae2e7d4da34f4c908cebdb4aa42c977e
-Get the persistent keyring
-.RB ( persistent\-keyring (7))
-for a specified user and link it to a specified keyring.
-.IP
-The user ID is specified in
-.I arg2
-(cast to
-.IR uid_t ).
-If the value \-1 is specified, the caller's real user ID is used.
-The ID of the destination keyring is specified in
-.I arg3
-(cast to
-.IR key_serial_t ).
-.IP
-The caller must have the
-.B CAP_SETUID
-capability in its user namespace in order to fetch the persistent keyring
-for a user ID that does not match either the real or effective user ID
-of the caller.
-.IP
-If the call is successful,
-a link to the persistent keyring is added to the keyring
-whose ID was specified in
-.IR arg3 .
-.IP
-The caller must have
-.I write
-permission on the keyring.
-.IP
-The persistent keyring will be created by the kernel
-if it does not yet exist.
-.IP
-Each time the
-.B KEYCTL_GET_PERSISTENT
-operation is performed, the persistent keyring will
-have its expiration timeout reset to the value in:
-.IP
-.in +4n
-.EX
-/proc/sys/kernel/keys/persistent_keyring_expiry
-.EE
-.in
-.IP
-Should the timeout be reached,
-the persistent keyring will be removed and
-everything it pins can then be garbage collected.
-.IP
-Persistent keyrings were added in Linux 3.13.
-.IP
-The arguments
-.I arg4
-and
-.I arg5
-are ignored.
-.IP
-This operation is exposed by
-.I libkeyutils
-via the function
-.BR keyctl_get_persistent (3).
-.TP
-.BR KEYCTL_DH_COMPUTE " (since Linux 4.7)"
-.\" commit ddbb41148724367394d0880c516bfaeed127b52e
-Compute a Diffie-Hellman shared secret or public key,
-optionally applying key derivation function (KDF) to the result.
-.IP
-The
-.I arg2
-argument is a pointer to a set of parameters containing
-serial numbers for three
-.I """user"""
-keys used in the Diffie-Hellman calculation,
-packaged in a structure of the following form:
-.IP
-.in +4n
-.EX
-struct keyctl_dh_params {
- int32_t private; /* The local private key */
- int32_t prime; /* The prime, known to both parties */
- int32_t base; /* The base integer: either a shared
- generator or the remote public key */
-};
-.EE
-.in
-.IP
-Each of the three keys specified in this structure must grant the caller
-.I read
-permission.
-The payloads of these keys are used to calculate the Diffie-Hellman
-result as:
-.IP
-.in +4n
-.EX
-base \[ha] private mod prime
-.EE
-.in
-.IP
-If the base is the shared generator, the result is the local public key.
-If the base is the remote public key, the result is the shared secret.
-.IP
-The
-.I arg3
-argument (cast to
-.IR char\~* )
-points to a buffer where the result of the calculation is placed.
-The size of that buffer is specified in
-.I arg4
-(cast to
-.IR size_t ).
-.IP
-The buffer must be large enough to accommodate the output data,
-otherwise an error is returned.
-If
-.I arg4
-is specified zero,
-in which case the buffer is not used and
-the operation returns the minimum required buffer size
-(i.e., the length of the prime).
-.IP
-Diffie-Hellman computations can be performed in user space,
-but require a multiple-precision integer (MPI) library.
-Moving the implementation into the kernel gives access to
-the kernel MPI implementation,
-and allows access to secure or acceleration hardware.
-.IP
-Adding support for DH computation to the
-.BR keyctl ()
-system call was considered a good fit due to the DH algorithm's use
-for deriving shared keys;
-it also allows the type of the key to determine
-which DH implementation (software or hardware) is appropriate.
-.\" commit f1c316a3ab9d24df6022682422fe897492f2c0c8
-.IP
-If the
-.I arg5
-argument is
-.BR NULL ,
-then the DH result itself is returned.
-Otherwise (since Linux 4.12), it is a pointer to a structure which specifies
-parameters of the KDF operation to be applied:
-.IP
-.in +4n
-.EX
-struct keyctl_kdf_params {
- char *hashname; /* Hash algorithm name */
- char *otherinfo; /* SP800\-56A OtherInfo */
- __u32 otherinfolen; /* Length of otherinfo data */
- __u32 __spare[8]; /* Reserved */
-};
-.EE
-.in
-.IP
-The
-.I hashname
-field is a null-terminated string which specifies a hash name
-(available in the kernel's crypto API; the list of the hashes available
-is rather tricky to observe; please refer to the
-.UR https://www.kernel.org\:/doc\:/html\:/latest\:/crypto\:/architecture.html
-"Kernel Crypto API Architecture"
-.UE
-documentation for the information regarding how hash names are constructed and
-your kernel's source and configuration regarding what ciphers
-and templates with type
-.B CRYPTO_ALG_TYPE_SHASH
-are available)
-to be applied to DH result in KDF operation.
-.IP
-The
-.I otherinfo
-field is an
-.I OtherInfo
-data as described in SP800-56A section 5.8.1.2 and is algorithm-specific.
-This data is concatenated with the result of DH operation and is provided as
-an input to the KDF operation.
-Its size is provided in the
-.I otherinfolen
-field and is limited by
-.B KEYCTL_KDF_MAX_OI_LEN
-constant that defined in
-.I security/keys/internal.h
-to a value of 64.
-.IP
-The
-.B __spare
-field is currently unused.
-.\" commit 4f9dabfaf8df971f8a3b6aa324f8f817be38d538
-It was ignored until Linux 4.13 (but still should be
-user-addressable since it is copied to the kernel),
-and should contain zeros since Linux 4.13.
-.IP
-The KDF implementation complies with SP800-56A as well
-as with SP800-108 (the counter KDF).
-.IP
-.\" keyutils commit 742c9d7b94051d3b21f9f61a73ed6b5f3544cb82
-.\" keyutils commit d68a981e5db41d059ac782071c35d1e8f3aaf61c
-This operation is exposed by
-.I libkeyutils
-(from
-.I libkeyutils
-1.5.10 onwards) via the functions
-.BR keyctl_dh_compute (3)
-and
-.BR keyctl_dh_compute_alloc (3).
-.TP
-.BR KEYCTL_RESTRICT_KEYRING " (since Linux 4.12)"
-.\" commit 6563c91fd645556c7801748f15bc727c77fcd311
-.\" commit 7228b66aaf723a623e578aa4db7d083bb39546c9
-Apply a key-linking restriction to the keyring with the ID provided in
-.I arg2
-(cast to
-.IR key_serial_t ).
-The caller must have
-.I setattr
-permission on the key.
-If
-.I arg3
-is NULL, any attempt to add a key to the keyring is blocked;
-otherwise it contains a pointer to a string with a key type name and
-.I arg4
-contains a pointer to string that describes the type-specific restriction.
-As of Linux 4.12, only the type "asymmetric" has restrictions defined:
-.RS
-.TP
-.B builtin_trusted
-Allows only keys that are signed by a key linked to the built-in keyring
-(".builtin_trusted_keys").
-.TP
-.B builtin_and_secondary_trusted
-Allows only keys that are signed by a key linked to the secondary keyring
-(".secondary_trusted_keys") or, by extension, a key in a built-in keyring,
-as the latter is linked to the former.
-.TP
-.BI key_or_keyring: key
-.TQ
-.BI key_or_keyring: key :chain
-If
-.I key
-specifies the ID of a key of type "asymmetric",
-then only keys that are signed by this key are allowed.
-.IP
-If
-.I key
-specifies the ID of a keyring,
-then only keys that are signed by a key linked
-to this keyring are allowed.
-.IP
-If ":chain" is specified, keys that are signed by a keys linked to the
-destination keyring (that is, the keyring with the ID specified in the
-.I arg2
-argument) are also allowed.
-.RE
-.IP
-Note that a restriction can be configured only once for the specified keyring;
-once a restriction is set, it can't be overridden.
-.IP
-The argument
-.I arg5
-is ignored.
-.\" FIXME Document KEYCTL_RESTRICT_KEYRING, added in Linux 4.12
-.\" commit 6563c91fd645556c7801748f15bc727c77fcd311
-.\" Author: Mat Martineau <mathew.j.martineau@linux.intel.com>
-.\" See Documentation/security/keys.txt
-.SH RETURN VALUE
-For a successful call, the return value depends on the operation:
-.TP
-.B KEYCTL_GET_KEYRING_ID
-The ID of the requested keyring.
-.TP
-.B KEYCTL_JOIN_SESSION_KEYRING
-The ID of the joined session keyring.
-.TP
-.B KEYCTL_DESCRIBE
-The size of the description (including the terminating null byte),
-irrespective of the provided buffer size.
-.TP
-.B KEYCTL_SEARCH
-The ID of the key that was found.
-.TP
-.B KEYCTL_READ
-The amount of data that is available in the key,
-irrespective of the provided buffer size.
-.TP
-.B KEYCTL_SET_REQKEY_KEYRING
-The ID of the previous default keyring
-to which implicitly requested keys were linked
-(one of
-.BR KEY_REQKEY_DEFL_USER_* ).
-.TP
-.B KEYCTL_ASSUME_AUTHORITY
-Either 0, if the ID given was 0,
-or the ID of the authorization key matching the specified key,
-if a nonzero key ID was provided.
-.TP
-.B KEYCTL_GET_SECURITY
-The size of the LSM security label string
-(including the terminating null byte),
-irrespective of the provided buffer size.
-.TP
-.B KEYCTL_GET_PERSISTENT
-The ID of the persistent keyring.
-.TP
-.B KEYCTL_DH_COMPUTE
-The number of bytes copied to the buffer, or, if
-.I arg4
-is 0, the required buffer size.
-.TP
-All other operations
-Zero.
-.PP
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-The requested operation wasn't permitted.
-.TP
-.B EAGAIN
-.I operation
-was
-.B KEYCTL_DH_COMPUTE
-and there was an error during crypto module initialization.
-.TP
-.B EDEADLK
-.I operation
-was
-.B KEYCTL_LINK
-and the requested link would result in a cycle.
-.TP
-.B EDEADLK
-.I operation
-was
-.B KEYCTL_RESTRICT_KEYRING
-and the requested keyring restriction would result in a cycle.
-.TP
-.B EDQUOT
-The key quota for the caller's user would be exceeded by creating a key or
-linking it to the keyring.
-.TP
-.B EEXIST
-.I operation
-was
-.B KEYCTL_RESTRICT_KEYRING
-and keyring provided in
-.I arg2
-argument already has a restriction set.
-.TP
-.B EFAULT
-.I operation
-was
-.B KEYCTL_DH_COMPUTE
-and one of the following has failed:
-.RS
-.IP \[bu] 3
-copying of the
-.IR "struct keyctl_dh_params" ,
-provided in the
-.I arg2
-argument, from user space;
-.IP \[bu]
-copying of the
-.IR "struct keyctl_kdf_params" ,
-provided in the non-NULL
-.I arg5
-argument, from user space
-(in case kernel supports performing KDF operation on DH operation result);
-.IP \[bu]
-copying of data pointed by the
-.I hashname
-field of the
-.I "struct keyctl_kdf_params"
-from user space;
-.IP \[bu]
-copying of data pointed by the
-.I otherinfo
-field of the
-.I struct keyctl_kdf_params
-from user space if the
-.I otherinfolen
-field was nonzero;
-.IP \[bu]
-copying of the result to user space.
-.RE
-.TP
-.B EINVAL
-.I operation
-was
-.B KEYCTL_SETPERM
-and an invalid permission bit was specified in
-.IR arg3 .
-.TP
-.B EINVAL
-.I operation
-was
-.B KEYCTL_SEARCH
-and the size of the description in
-.I arg4
-(including the terminating null byte) exceeded 4096 bytes.
-.TP
-.B EINVAL
-size of the string (including the terminating null byte) specified in
-.I arg3
-(the key type)
-or
-.I arg4
-(the key description)
-exceeded the limit (32 bytes and 4096 bytes respectively).
-.TP
-.BR EINVAL " (before Linux 4.12)"
-.I operation
-was
-.BR KEYCTL_DH_COMPUTE ,
-argument
-.I arg5
-was non-NULL.
-.TP
-.B EINVAL
-.I operation
-was
-.B KEYCTL_DH_COMPUTE
-And the digest size of the hashing algorithm supplied is zero.
-.TP
-.B EINVAL
-.I operation
-was
-.B KEYCTL_DH_COMPUTE
-and the buffer size provided is not enough to hold the result.
-Provide 0 as a buffer size in order to obtain the minimum buffer size.
-.TP
-.B EINVAL
-.I operation
-was
-.B KEYCTL_DH_COMPUTE
-and the hash name provided in the
-.I hashname
-field of the
-.I struct keyctl_kdf_params
-pointed by
-.I arg5
-argument is too big (the limit is implementation-specific and varies between
-kernel versions, but it is deemed big enough for all valid algorithm names).
-.TP
-.B EINVAL
-.\" commit 4f9dabfaf8df971f8a3b6aa324f8f817be38d538
-.I operation
-was
-.B KEYCTL_DH_COMPUTE
-and the
-.I __spare
-field of the
-.I struct keyctl_kdf_params
-provided in the
-.I arg5
-argument contains nonzero values.
-.TP
-.B EKEYEXPIRED
-An expired key was found or specified.
-.TP
-.B EKEYREJECTED
-A rejected key was found or specified.
-.TP
-.B EKEYREVOKED
-A revoked key was found or specified.
-.TP
-.B ELOOP
-.I operation
-was
-.B KEYCTL_LINK
-and the requested link would cause the maximum nesting depth
-for keyrings to be exceeded.
-.TP
-.B EMSGSIZE
-.I operation
-was
-.B KEYCTL_DH_COMPUTE
-and the buffer length exceeds
-.B KEYCTL_KDF_MAX_OUTPUT_LEN
-(which is 1024 currently)
-or the
-.I otherinfolen
-field of the
-.I struct keyctl_kdf_parms
-passed in
-.I arg5
-exceeds
-.B KEYCTL_KDF_MAX_OI_LEN
-(which is 64 currently).
-.TP
-.BR ENFILE " (before Linux 3.13)"
-.I operation
-was
-.B KEYCTL_LINK
-and the keyring is full.
-(Before Linux 3.13,
-.\" commit b2a4df200d570b2c33a57e1ebfa5896e4bc81b69
-the available space for storing keyring links was limited to
-a single page of memory; since Linux 3.13, there is no fixed limit.)
-.TP
-.B ENOENT
-.I operation
-was
-.B KEYCTL_UNLINK
-and the key to be unlinked isn't linked to the keyring.
-.TP
-.B ENOENT
-.I operation
-was
-.B KEYCTL_DH_COMPUTE
-and the hashing algorithm specified in the
-.I hashname
-field of the
-.I struct keyctl_kdf_params
-pointed by
-.I arg5
-argument hasn't been found.
-.TP
-.B ENOENT
-.I operation
-was
-.B KEYCTL_RESTRICT_KEYRING
-and the type provided in
-.I arg3
-argument doesn't support setting key linking restrictions.
-.TP
-.B ENOKEY
-No matching key was found or an invalid key was specified.
-.TP
-.B ENOKEY
-The value
-.B KEYCTL_GET_KEYRING_ID
-was specified in
-.IR operation ,
-the key specified in
-.I arg2
-did not exist, and
-.I arg3
-was zero (meaning don't create the key if it didn't exist).
-.TP
-.B ENOMEM
-One of kernel memory allocation routines failed during the execution of the
-syscall.
-.TP
-.B ENOTDIR
-A key of keyring type was expected but the ID of a key with
-a different type was provided.
-.TP
-.B EOPNOTSUPP
-.I operation
-was
-.B KEYCTL_READ
-and the key type does not support reading
-(e.g., the type is
-.IR """login""" ).
-.TP
-.B EOPNOTSUPP
-.I operation
-was
-.B KEYCTL_UPDATE
-and the key type does not support updating.
-.TP
-.B EOPNOTSUPP
-.I operation
-was
-.BR KEYCTL_RESTRICT_KEYRING ,
-the type provided in
-.I arg3
-argument was "asymmetric",
-and the key specified in the restriction specification provided in
-.I arg4
-has type other than "asymmetric" or "keyring".
-.TP
-.B EPERM
-.I operation
-was
-.BR KEYCTL_GET_PERSISTENT ,
-.I arg2
-specified a UID other than the calling thread's real or effective UID,
-and the caller did not have the
-.B CAP_SETUID
-capability.
-.TP
-.B EPERM
-.I operation
-was
-.B KEYCTL_SESSION_TO_PARENT
-and either:
-all of the UIDs (GIDs) of the parent process do not match
-the effective UID (GID) of the calling process;
-the UID of the parent's existing session keyring or
-the UID of the caller's session keyring did not match
-the effective UID of the caller;
-the parent process is not single-thread;
-or the parent process is
-.BR init (1)
-or a kernel thread.
-.TP
-.B ETIMEDOUT
-.I operation
-was
-.B KEYCTL_DH_COMPUTE
-and the initialization of crypto modules has timed out.
-.SH VERSIONS
-A wrapper is provided in the
-.I libkeyutils
-library.
-(The accompanying package provides the
-.I <keyutils.h>
-header file.)
-However, rather than using this system call directly,
-you probably want to use the various library functions
-mentioned in the descriptions of individual operations above.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.10.
-.SH EXAMPLES
-The program below provide subset of the functionality of the
-.BR request\-key (8)
-program provided by the
-.I keyutils
-package.
-For informational purposes,
-the program records various information in a log file.
-.PP
-As described in
-.BR request_key (2),
-the
-.BR request\-key (8)
-program is invoked with command-line arguments that
-describe a key that is to be instantiated.
-The example program fetches and logs these arguments.
-The program assumes authority to instantiate the requested key,
-and then instantiates that key.
-.PP
-The following shell session demonstrates the use of this program.
-In the session,
-we compile the program and then use it to temporarily replace the standard
-.BR request\-key (8)
-program.
-(Note that temporarily disabling the standard
-.BR request\-key (8)
-program may not be safe on some systems.)
-While our example program is installed,
-we use the example program shown in
-.BR request_key (2)
-to request a key.
-.PP
-.in +4n
-.EX
-$ \fBcc \-o key_instantiate key_instantiate.c \-lkeyutils\fP
-$ \fBsudo mv /sbin/request\-key /sbin/request\-key.backup\fP
-$ \fBsudo cp key_instantiate /sbin/request\-key\fP
-$ \fB./t_request_key user mykey somepayloaddata\fP
-Key ID is 20d035bf
-$ \fBsudo mv /sbin/request\-key.backup /sbin/request\-key\fP
-.EE
-.in
-.PP
-Looking at the log file created by this program,
-we can see the command-line arguments supplied to our example program:
-.PP
-.in +4n
-.EX
-$ \fBcat /tmp/key_instantiate.log\fP
-Time: Mon Nov 7 13:06:47 2016
-\&
-Command line arguments:
- argv[0]: /sbin/request\-key
- operation: create
- key_to_instantiate: 20d035bf
- UID: 1000
- GID: 1000
- thread_keyring: 0
- process_keyring: 0
- session_keyring: 256e6a6
-\&
-Key description: user;1000;1000;3f010000;mykey
-Auth key payload: somepayloaddata
-Destination keyring: 256e6a6
-Auth key description: .request_key_auth;1000;1000;0b010000;20d035bf
-.EE
-.in
-.PP
-The last few lines of the above output show that the example program
-was able to fetch:
-.IP \[bu] 3
-the description of the key to be instantiated,
-which included the name of the key
-.RI ( mykey );
-.IP \[bu]
-the payload of the authorization key, which consisted of the data
-.RI ( somepayloaddata )
-passed to
-.BR request_key (2);
-.IP \[bu]
-the destination keyring that was specified in the call to
-.BR request_key (2);
-and
-.IP \[bu]
-the description of the authorization key,
-where we can see that the name of the authorization key matches
-the ID of the key that is to be instantiated
-.RI ( 20d035bf ).
-.PP
-The example program in
-.BR request_key (2)
-specified the destination keyring as
-.BR KEY_SPEC_SESSION_KEYRING .
-By examining the contents of
-.IR /proc/keys ,
-we can see that this was translated to the ID of the destination keyring
-.RI ( 0256e6a6 )
-shown in the log output above;
-we can also see the newly created key with the name
-.I mykey
-and ID
-.IR 20d035bf .
-.PP
-.in +4n
-.EX
-$ \fBcat /proc/keys | egrep \[aq]mykey|256e6a6\[aq]\fP
-0256e6a6 I\-\-Q\-\-\- 194 perm 3f030000 1000 1000 keyring _ses: 3
-20d035bf I\-\-Q\-\-\- 1 perm 3f010000 1000 1000 user mykey: 16
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (key_instantiate.c)
-.EX
-/* key_instantiate.c */
-\&
-#include <errno.h>
-#include <keyutils.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <time.h>
-\&
-#ifndef KEY_SPEC_REQUESTOR_KEYRING
-#define KEY_SPEC_REQUESTOR_KEYRING (\-8)
-#endif
-\&
-int
-main(int argc, char *argv[])
-{
- int akp_size; /* Size of auth_key_payload */
- int auth_key;
- char dbuf[256];
- char auth_key_payload[256];
- char *operation;
- FILE *fp;
- gid_t gid;
- uid_t uid;
- time_t t;
- key_serial_t key_to_instantiate, dest_keyring;
- key_serial_t thread_keyring, process_keyring, session_keyring;
-\&
- if (argc != 8) {
- fprintf(stderr, "Usage: %s op key uid gid thread_keyring "
- "process_keyring session_keyring\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- fp = fopen("/tmp/key_instantiate.log", "w");
- if (fp == NULL)
- exit(EXIT_FAILURE);
-\&
- setbuf(fp, NULL);
-\&
- t = time(NULL);
- fprintf(fp, "Time: %s\en", ctime(&t));
-\&
- /*
- * The kernel passes a fixed set of arguments to the program
- * that it execs; fetch them.
- */
- operation = argv[1];
- key_to_instantiate = atoi(argv[2]);
- uid = atoi(argv[3]);
- gid = atoi(argv[4]);
- thread_keyring = atoi(argv[5]);
- process_keyring = atoi(argv[6]);
- session_keyring = atoi(argv[7]);
-\&
- fprintf(fp, "Command line arguments:\en");
- fprintf(fp, " argv[0]: %s\en", argv[0]);
- fprintf(fp, " operation: %s\en", operation);
- fprintf(fp, " key_to_instantiate: %jx\en",
- (uintmax_t) key_to_instantiate);
- fprintf(fp, " UID: %jd\en", (intmax_t) uid);
- fprintf(fp, " GID: %jd\en", (intmax_t) gid);
- fprintf(fp, " thread_keyring: %jx\en",
- (uintmax_t) thread_keyring);
- fprintf(fp, " process_keyring: %jx\en",
- (uintmax_t) process_keyring);
- fprintf(fp, " session_keyring: %jx\en",
- (uintmax_t) session_keyring);
- fprintf(fp, "\en");
-\&
- /*
- * Assume the authority to instantiate the key named in argv[2].
- */
- if (keyctl(KEYCTL_ASSUME_AUTHORITY, key_to_instantiate) == \-1) {
- fprintf(fp, "KEYCTL_ASSUME_AUTHORITY failed: %s\en",
- strerror(errno));
- exit(EXIT_FAILURE);
- }
-\&
- /*
- * Fetch the description of the key that is to be instantiated.
- */
- if (keyctl(KEYCTL_DESCRIBE, key_to_instantiate,
- dbuf, sizeof(dbuf)) == \-1) {
- fprintf(fp, "KEYCTL_DESCRIBE failed: %s\en", strerror(errno));
- exit(EXIT_FAILURE);
- }
-\&
- fprintf(fp, "Key description: %s\en", dbuf);
-\&
- /*
- * Fetch the payload of the authorization key, which is
- * actually the callout data given to request_key().
- */
- akp_size = keyctl(KEYCTL_READ, KEY_SPEC_REQKEY_AUTH_KEY,
- auth_key_payload, sizeof(auth_key_payload));
- if (akp_size == \-1) {
- fprintf(fp, "KEYCTL_READ failed: %s\en", strerror(errno));
- exit(EXIT_FAILURE);
- }
-\&
- auth_key_payload[akp_size] = \[aq]\e0\[aq];
- fprintf(fp, "Auth key payload: %s\en", auth_key_payload);
-\&
- /*
- * For interest, get the ID of the authorization key and
- * display it.
- */
- auth_key = keyctl(KEYCTL_GET_KEYRING_ID,
- KEY_SPEC_REQKEY_AUTH_KEY);
- if (auth_key == \-1) {
- fprintf(fp, "KEYCTL_GET_KEYRING_ID failed: %s\en",
- strerror(errno));
- exit(EXIT_FAILURE);
- }
-\&
- fprintf(fp, "Auth key ID: %jx\en", (uintmax_t) auth_key);
-\&
- /*
- * Fetch key ID for the request_key(2) destination keyring.
- */
- dest_keyring = keyctl(KEYCTL_GET_KEYRING_ID,
- KEY_SPEC_REQUESTOR_KEYRING);
- if (dest_keyring == \-1) {
- fprintf(fp, "KEYCTL_GET_KEYRING_ID failed: %s\en",
- strerror(errno));
- exit(EXIT_FAILURE);
- }
-\&
- fprintf(fp, "Destination keyring: %jx\en", (uintmax_t) dest_keyring);
-\&
- /*
- * Fetch the description of the authorization key. This
- * allows us to see the key type, UID, GID, permissions,
- * and description (name) of the key. Among other things,
- * we will see that the name of the key is a hexadecimal
- * string representing the ID of the key to be instantiated.
- */
- if (keyctl(KEYCTL_DESCRIBE, KEY_SPEC_REQKEY_AUTH_KEY,
- dbuf, sizeof(dbuf)) == \-1)
- {
- fprintf(fp, "KEYCTL_DESCRIBE failed: %s\en", strerror(errno));
- exit(EXIT_FAILURE);
- }
-\&
- fprintf(fp, "Auth key description: %s\en", dbuf);
-\&
- /*
- * Instantiate the key using the callout data that was supplied
- * in the payload of the authorization key.
- */
- if (keyctl(KEYCTL_INSTANTIATE, key_to_instantiate,
- auth_key_payload, akp_size + 1, dest_keyring) == \-1)
- {
- fprintf(fp, "KEYCTL_INSTANTIATE failed: %s\en",
- strerror(errno));
- exit(EXIT_FAILURE);
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.ad l
-.nh
-.BR keyctl (1),
-.BR add_key (2),
-.BR request_key (2),
-.\" .BR find_key_by_type_and_name (3)
-.\" There is a man page, but this function seems not to exist
-.BR keyctl (3),
-.BR keyctl_assume_authority (3),
-.BR keyctl_chown (3),
-.BR keyctl_clear (3),
-.BR keyctl_describe (3),
-.BR keyctl_describe_alloc (3),
-.BR keyctl_dh_compute (3),
-.BR keyctl_dh_compute_alloc (3),
-.BR keyctl_get_keyring_ID (3),
-.BR keyctl_get_persistent (3),
-.BR keyctl_get_security (3),
-.BR keyctl_get_security_alloc (3),
-.BR keyctl_instantiate (3),
-.BR keyctl_instantiate_iov (3),
-.BR keyctl_invalidate (3),
-.BR keyctl_join_session_keyring (3),
-.BR keyctl_link (3),
-.BR keyctl_negate (3),
-.BR keyctl_read (3),
-.BR keyctl_read_alloc (3),
-.BR keyctl_reject (3),
-.BR keyctl_revoke (3),
-.BR keyctl_search (3),
-.BR keyctl_session_to_parent (3),
-.BR keyctl_set_reqkey_keyring (3),
-.BR keyctl_set_timeout (3),
-.BR keyctl_setperm (3),
-.BR keyctl_unlink (3),
-.BR keyctl_update (3),
-.BR recursive_key_scan (3),
-.BR recursive_session_key_scan (3),
-.BR capabilities (7),
-.BR credentials (7),
-.BR keyrings (7),
-.BR keyutils (7),
-.BR persistent\-keyring (7),
-.BR process\-keyring (7),
-.BR session\-keyring (7),
-.BR thread\-keyring (7),
-.BR user\-keyring (7),
-.BR user_namespaces (7),
-.BR user\-session\-keyring (7),
-.BR request\-key (8)
-.PP
-The kernel source files under
-.I Documentation/security/keys/
-(or, before Linux 4.13, in the file
-.IR Documentation/security/keys.txt ).
diff --git a/man2/kill.2 b/man2/kill.2
deleted file mode 100644
index b3a6e012d..000000000
--- a/man2/kill.2
+++ /dev/null
@@ -1,165 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified by Thomas Koenig <ig25@rz.uni-karlsruhe.de>
-.\" Modified 1993-07-23 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1993-07-25 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1995-11-01 by Michael Haardt
-.\" <michael@cantor.informatik.rwth-aachen.de>
-.\" Modified 1996-04-14 by Andries Brouwer <aeb@cwi.nl>
-.\" [added some polishing contributed by Mike Battersby <mib@deakin.edu.au>]
-.\" Modified 1996-07-21 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 1997-01-17 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 2001-12-18 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 2002-07-24 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added note on historical rules enforced when an unprivileged process
-.\" sends a signal.
-.\" Modified 2004-06-16 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added note on CAP_KILL
-.\" Modified 2004-06-24 by aeb
-.\" Modified, 2004-11-30, after idea from emmanuel.colbus@ensimag.imag.fr
-.\"
-.TH kill 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-kill \- send signal to a process
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.BI "int kill(pid_t " pid ", int " sig );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR kill ():
-.nf
- _POSIX_C_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR kill ()
-system call
-can be used to send any signal to any process group or process.
-.PP
-If \fIpid\fP is positive, then signal \fIsig\fP is sent to the
-process with the ID specified by \fIpid\fP.
-.PP
-If \fIpid\fP equals 0, then \fIsig\fP is sent to every process in the
-process group of the calling process.
-.PP
-If \fIpid\fP equals \-1, then \fIsig\fP is sent to every process
-for which the calling process has permission to send signals,
-except for process 1 (\fIinit\fP), but see below.
-.PP
-If \fIpid\fP is less than \-1, then \fIsig\fP is sent to every process
-in the process group whose ID is \fI\-pid\fP.
-.PP
-If \fIsig\fP is 0, then no signal is sent,
-but existence and permission checks are still performed;
-this can be used to check for the existence of a process ID or
-process group ID that the caller is permitted to signal.
-.PP
-For a process to have permission to send a signal,
-it must either be privileged (under Linux: have the
-.B CAP_KILL
-capability in the user namespace of the target process),
-or the real or effective user ID of the sending process must equal
-the real or saved set-user-ID of the target process.
-In the case of
-.BR SIGCONT ,
-it suffices when the sending and receiving
-processes belong to the same session.
-(Historically, the rules were different; see NOTES.)
-.SH RETURN VALUE
-On success (at least one signal was sent), zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-An invalid signal was specified.
-.TP
-.B EPERM
-The calling process does not have permission to send the signal
-to any of the target processes.
-.TP
-.B ESRCH
-The target process or process group does not exist.
-Note that an existing process might be a zombie,
-a process that has terminated execution, but
-has not yet been
-.BR wait (2)ed
-for.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.SS Linux notes
-Across different kernel versions, Linux has enforced different rules
-for the permissions required for an unprivileged process
-to send a signal to another process.
-.\" In the 0.* kernels things chopped and changed quite
-.\" a bit - MTK, 24 Jul 02
-In Linux 1.0 to 1.2.2, a signal could be sent if the
-effective user ID of the sender matched effective user ID of the target,
-or the real user ID of the sender matched the real user ID of the target.
-From Linux 1.2.3 until 1.3.77, a signal could be sent if the
-effective user ID of the sender matched either the real or effective
-user ID of the target.
-The current rules, which conform to POSIX.1, were adopted
-in Linux 1.3.78.
-.SH NOTES
-The only signals that can be sent to process ID 1, the
-.I init
-process, are those for which
-.I init
-has explicitly installed signal handlers.
-This is done to assure the
-system is not brought down accidentally.
-.PP
-POSIX.1 requires that \fIkill(\-1,sig)\fP send \fIsig\fP
-to all processes that the calling process may send signals to,
-except possibly for some implementation-defined system processes.
-Linux allows a process to signal itself, but on Linux the call
-\fIkill(\-1,sig)\fP does not signal the calling process.
-.PP
-POSIX.1 requires that if a process sends a signal to itself,
-and the sending thread does not have the signal blocked,
-and no other thread
-has it unblocked or is waiting for it in
-.BR sigwait (3),
-at least one
-unblocked signal must be delivered to the sending thread before the
-.BR kill ()
-returns.
-.SH BUGS
-In Linux 2.6 up to and including Linux 2.6.7,
-there was a bug that meant that when sending signals to a process group,
-.BR kill ()
-failed with the error
-.B EPERM
-if the caller did not have permission to send the signal to \fIany\fP (rather
-than \fIall\fP) of the members of the process group.
-Notwithstanding this error return, the signal was still delivered
-to all of the processes for which the caller had permission to signal.
-.SH SEE ALSO
-.BR kill (1),
-.BR _exit (2),
-.BR pidfd_send_signal (2),
-.BR signal (2),
-.BR tkill (2),
-.BR exit (3),
-.BR killpg (3),
-.BR sigqueue (3),
-.BR capabilities (7),
-.BR credentials (7),
-.BR signal (7)
diff --git a/man2/landlock_add_rule.2 b/man2/landlock_add_rule.2
deleted file mode 100644
index 43a70a2a5..000000000
--- a/man2/landlock_add_rule.2
+++ /dev/null
@@ -1,131 +0,0 @@
-.\" Copyright © 2017-2020 Mickaël Salaün <mic@digikod.net>
-.\" Copyright © 2019-2020 ANSSI
-.\" Copyright © 2021 Microsoft Corporation
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH landlock_add_rule 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-landlock_add_rule \- add a new Landlock rule to a ruleset
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/landlock.h>" " /* Definition of " LANDLOCK_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.PP
-.BI "int syscall(SYS_landlock_add_rule, int " ruleset_fd ,
-.BI " enum landlock_rule_type " rule_type ,
-.BI " const void *" rule_attr ", uint32_t " flags );
-.fi
-.SH DESCRIPTION
-A Landlock rule describes an action on an object.
-An object is currently a file hierarchy,
-and the related filesystem actions
-are defined with a set of access rights.
-This
-.BR landlock_add_rule ()
-system call enables adding a new Landlock rule to an existing ruleset
-created with
-.BR landlock_create_ruleset (2).
-See
-.BR landlock (7)
-for a global overview.
-.PP
-.I ruleset_fd
-is a Landlock ruleset file descriptor obtained with
-.BR landlock_create_ruleset (2).
-.PP
-.I rule_type
-identifies the structure type pointed to by
-.IR rule_attr .
-Currently, Linux supports the following
-.I rule_type
-value:
-.TP
-.B LANDLOCK_RULE_PATH_BENEATH
-This defines the object type as a file hierarchy.
-In this case,
-.I rule_attr
-points to the following structure:
-.IP
-.in +4n
-.EX
-struct landlock_path_beneath_attr {
- __u64 allowed_access;
- __s32 parent_fd;
-} __attribute__((packed));
-.EE
-.in
-.IP
-.I allowed_access
-contains a bitmask of allowed filesystem actions for this file hierarchy
-(see
-.B Filesystem actions
-in
-.BR landlock (7)).
-.IP
-.I parent_fd
-is an opened file descriptor, preferably with the
-.I O_PATH
-flag,
-which identifies the parent directory of the file hierarchy or
-just a file.
-.PP
-.I flags
-must be 0.
-.SH RETURN VALUE
-On success,
-.BR landlock_add_rule ()
-returns 0.
-.SH ERRORS
-.BR landlock_add_rule ()
-can failed for the following reasons:
-.TP
-.B EOPNOTSUPP
-Landlock is supported by the kernel but disabled at boot time.
-.TP
-.B EINVAL
-.I flags
-is not 0, or the rule accesses are inconsistent (i.e.,
-.I rule_attr\->allowed_access
-is not a subset of the ruleset handled accesses).
-.TP
-.B ENOMSG
-Empty accesses (i.e.,
-.I rule_attr\->allowed_access
-is 0).
-.TP
-.B EBADF
-.I ruleset_fd
-is not a file descriptor for the current thread,
-or a member of
-.I rule_attr
-is not a file descriptor as expected.
-.TP
-.B EBADFD
-.I ruleset_fd
-is not a ruleset file descriptor,
-or a member of
-.I rule_attr
-is not the expected file descriptor type.
-.TP
-.B EPERM
-.I ruleset_fd
-has no write access to the underlying ruleset.
-.TP
-.B EFAULT
-.I rule_attr
-was not a valid address.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 5.13.
-.SH EXAMPLES
-See
-.BR landlock (7).
-.SH SEE ALSO
-.BR landlock_create_ruleset (2),
-.BR landlock_restrict_self (2),
-.BR landlock (7)
diff --git a/man2/landlock_create_ruleset.2 b/man2/landlock_create_ruleset.2
deleted file mode 100644
index 902862f7f..000000000
--- a/man2/landlock_create_ruleset.2
+++ /dev/null
@@ -1,124 +0,0 @@
-.\" Copyright © 2017-2020 Mickaël Salaün <mic@digikod.net>
-.\" Copyright © 2019-2020 ANSSI
-.\" Copyright © 2021 Microsoft Corporation
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH landlock_create_ruleset 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-landlock_create_ruleset \- create a new Landlock ruleset
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/landlock.h>" " /* Definition of " LANDLOCK_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.PP
-.B int syscall(SYS_landlock_create_ruleset,
-.BI " const struct landlock_ruleset_attr *" attr ,
-.BI " size_t " size " , uint32_t " flags );
-.fi
-.SH DESCRIPTION
-A Landlock ruleset identifies a set of rules (i.e., actions on objects).
-This
-.BR landlock_create_ruleset ()
-system call enables creating a new file descriptor identifying a ruleset.
-This file descriptor can then be used by
-.BR landlock_add_rule (2)
-and
-.BR landlock_restrict_self (2).
-See
-.BR landlock (7)
-for a global overview.
-.PP
-.I attr
-specifies the properties of the new ruleset.
-It points to the following structure:
-.IP
-.in +4n
-.EX
-struct landlock_ruleset_attr {
- __u64 handled_access_fs;
-};
-.EE
-.in
-.IP
-.I handled_access_fs
-is a bitmask of actions that is handled by this ruleset and
-should then be forbidden if no rule explicitly allows them
-(see
-.B Filesystem actions
-in
-.BR landlock (7)).
-This enables simply restricting ambient rights
-(e.g., global filesystem access) and is needed for compatibility reasons.
-.PP
-.I size
-must be specified as
-.I sizeof(struct landlock_ruleset_attr)
-for compatibility reasons.
-.PP
-.I flags
-must be 0 if
-.I attr
-is used.
-Otherwise,
-.I flags
-can be set to:
-.TP
-.B LANDLOCK_CREATE_RULESET_VERSION
-If
-.I attr
-is NULL and
-.I size
-is 0, then the returned value is the highest supported Landlock ABI version
-(starting at 1).
-This version can be used for a best-effort security approach,
-which is encouraged when user space is not pinned to a specific kernel
-version.
-All features documented in these man pages are available with the version
-1.
-.SH RETURN VALUE
-On success,
-.BR landlock_create_ruleset ()
-returns a new Landlock ruleset file descriptor,
-or a Landlock ABI version,
-according to
-.IR flags .
-.SH ERRORS
-.BR landlock_create_ruleset ()
-can fail for the following reasons:
-.TP
-.B EOPNOTSUPP
-Landlock is supported by the kernel but disabled at boot time.
-.TP
-.B EINVAL
-Unknown
-.IR flags ,
-or unknown access, or too small
-.IR size .
-.TP
-.B E2BIG
-.I size
-is too big.
-.TP
-.B EFAULT
-.I attr
-was not a valid address.
-.TP
-.B ENOMSG
-Empty accesses (i.e.,
-.I attr\->handled_access_fs
-is 0).
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 5.13.
-.SH EXAMPLES
-See
-.BR landlock (7).
-.SH SEE ALSO
-.BR landlock_add_rule (2),
-.BR landlock_restrict_self (2),
-.BR landlock (7)
diff --git a/man2/landlock_restrict_self.2 b/man2/landlock_restrict_self.2
deleted file mode 100644
index 6cf900f0b..000000000
--- a/man2/landlock_restrict_self.2
+++ /dev/null
@@ -1,116 +0,0 @@
-.\" Copyright © 2017-2020 Mickaël Salaün <mic@digikod.net>
-.\" Copyright © 2019-2020 ANSSI
-.\" Copyright © 2021 Microsoft Corporation
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH landlock_restrict_self 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-landlock_restrict_self \- enforce a Landlock ruleset
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/landlock.h>" " /* Definition of " LANDLOCK_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.PP
-.BI "int syscall(SYS_landlock_restrict_self, int " ruleset_fd ,
-.BI " uint32_t " flags );
-.SH DESCRIPTION
-Once a Landlock ruleset is populated with the desired rules, the
-.BR landlock_restrict_self ()
-system call enables enforcing this ruleset on the calling thread.
-See
-.BR landlock (7)
-for a global overview.
-.PP
-A thread can be restricted with multiple rulesets that are then
-composed together to form the thread's Landlock domain.
-This can be seen as a stack of rulesets but
-it is implemented in a more efficient way.
-A domain can only be updated in such a way that
-the constraints of each past and future composed rulesets
-will restrict the thread and its future children for their entire life.
-It is then possible to gradually enforce tailored access control policies
-with multiple independent rulesets coming from different sources
-(e.g., init system configuration, user session policy,
-built-in application policy).
-However, most applications should only need one call to
-.BR landlock_restrict_self ()
-and they should avoid arbitrary numbers of such calls because of the
-composed rulesets limit.
-Instead, developers are encouraged to build a tailored ruleset thanks to
-multiple calls to
-.BR landlock_add_rule (2).
-.PP
-In order to enforce a ruleset, either the caller must have the
-.B CAP_SYS_ADMIN
-capability in its user namespace, or the thread must already have the
-.I no_new_privs
-bit set.
-As for
-.BR seccomp (2),
-this avoids scenarios where unprivileged processes can affect
-the behavior of privileged children (e.g., because of set-user-ID binaries).
-If that bit was not already set by an ancestor of this thread,
-the thread must make the following call:
-.IP
-.EX
-prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);
-.EE
-.PP
-.I ruleset_fd
-is a Landlock ruleset file descriptor obtained with
-.BR landlock_create_ruleset (2)
-and fully populated with a set of calls to
-.BR landlock_add_rule (2).
-.PP
-.I flags
-must be 0.
-.SH RETURN VALUE
-On success,
-.BR landlock_restrict_self ()
-returns 0.
-.SH ERRORS
-.BR landlock_restrict_self ()
-can fail for the following reasons:
-.TP
-.B EOPNOTSUPP
-Landlock is supported by the kernel but disabled at boot time.
-.TP
-.B EINVAL
-.I flags
-is not 0.
-.TP
-.B EBADF
-.I ruleset_fd
-is not a file descriptor for the current thread.
-.TP
-.B EBADFD
-.I ruleset_fd
-is not a ruleset file descriptor.
-.TP
-.B EPERM
-.I ruleset_fd
-has no read access to the underlying ruleset,
-or the calling thread is not running with
-.IR no_new_privs ,
-or it doesn't have the
-.B CAP_SYS_ADMIN
-in its user namespace.
-.TP
-.B E2BIG
-The maximum number of composed rulesets is reached for the calling thread.
-This limit is currently 64.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 5.13.
-.SH EXAMPLES
-See
-.BR landlock (7).
-.SH SEE ALSO
-.BR landlock_create_ruleset (2),
-.BR landlock_add_rule (2),
-.BR landlock (7)
diff --git a/man2/lchown.2 b/man2/lchown.2
deleted file mode 100644
index f0a5635ae..000000000
--- a/man2/lchown.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/chown.2
diff --git a/man2/lchown32.2 b/man2/lchown32.2
deleted file mode 100644
index 8ed3964e0..000000000
--- a/man2/lchown32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/lchown.2
diff --git a/man2/lgetxattr.2 b/man2/lgetxattr.2
deleted file mode 100644
index d9e5d9037..000000000
--- a/man2/lgetxattr.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getxattr.2
diff --git a/man2/link.2 b/man2/link.2
deleted file mode 100644
index 6271934bd..000000000
--- a/man2/link.2
+++ /dev/null
@@ -1,425 +0,0 @@
-.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\" and Copyright (C) 1993 Michael Haardt, Ian Jackson.
-.\" and Copyright (C) 2006, 2014 Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 1993-07-23 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1994-08-21 by Michael Haardt
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2005-04-04, as per suggestion by Michael Hardt for rename.2
-.\"
-.TH link 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-link, linkat \- make a new name for a file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int link(const char *" oldpath ", const char *" newpath );
-.PP
-.BR "#include <fcntl.h> " "/* Definition of " AT_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int linkat(int " olddirfd ", const char *" oldpath ,
-.BI " int " newdirfd ", const char *" newpath ", int " flags );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR linkat ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _ATFILE_SOURCE
-.fi
-.SH DESCRIPTION
-.BR link ()
-creates a new link (also known as a hard link) to an existing file.
-.PP
-If
-.I newpath
-exists, it will
-.I not
-be overwritten.
-.PP
-This new name may be used exactly as the old one for any operation;
-both names refer to the same file (and so have the same permissions
-and ownership) and it is impossible to tell which name was the
-"original".
-.SS linkat()
-The
-.BR linkat ()
-system call operates in exactly the same way as
-.BR link (),
-except for the differences described here.
-.PP
-If the pathname given in
-.I oldpath
-is relative, then it is interpreted relative to the directory
-referred to by the file descriptor
-.I olddirfd
-(rather than relative to the current working directory of
-the calling process, as is done by
-.BR link ()
-for a relative pathname).
-.PP
-If
-.I oldpath
-is relative and
-.I olddirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I oldpath
-is interpreted relative to the current working
-directory of the calling process (like
-.BR link ()).
-.PP
-If
-.I oldpath
-is absolute, then
-.I olddirfd
-is ignored.
-.PP
-The interpretation of
-.I newpath
-is as for
-.IR oldpath ,
-except that a relative pathname is interpreted relative
-to the directory referred to by the file descriptor
-.IR newdirfd .
-.PP
-The following values can be bitwise ORed in
-.IR flags :
-.TP
-.BR AT_EMPTY_PATH " (since Linux 2.6.39)"
-.\" commit 11a7b371b64ef39fc5fb1b6f2218eef7c4d035e3
-If
-.I oldpath
-is an empty string, create a link to the file referenced by
-.I olddirfd
-(which may have been obtained using the
-.BR open (2)
-.B O_PATH
-flag).
-In this case,
-.I olddirfd
-can refer to any type of file except a directory.
-This will generally not work if the file has a link count of zero (files
-created with
-.B O_TMPFILE
-and without
-.B O_EXCL
-are an exception).
-The caller must have the
-.B CAP_DAC_READ_SEARCH
-capability in order to use this flag.
-This flag is Linux-specific; define
-.B _GNU_SOURCE
-.\" Before glibc 2.16, defining _ATFILE_SOURCE sufficed
-to obtain its definition.
-.TP
-.BR AT_SYMLINK_FOLLOW " (since Linux 2.6.18)"
-By default,
-.BR linkat (),
-does not dereference
-.I oldpath
-if it is a symbolic link (like
-.BR link ()).
-The flag
-.B AT_SYMLINK_FOLLOW
-can be specified in
-.I flags
-to cause
-.I oldpath
-to be dereferenced if it is a symbolic link.
-If procfs is mounted,
-this can be used as an alternative to
-.BR AT_EMPTY_PATH ,
-like this:
-.IP
-.in +4n
-.EX
-linkat(AT_FDCWD, "/proc/self/fd/<fd>", newdirfd,
- newname, AT_SYMLINK_FOLLOW);
-.EE
-.in
-.PP
-Before Linux 2.6.18, the
-.I flags
-argument was unused, and had to be specified as 0.
-.PP
-See
-.BR openat (2)
-for an explanation of the need for
-.BR linkat ().
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-Write access to the directory containing
-.I newpath
-is denied, or search permission is denied for one of the directories
-in the path prefix of
-.I oldpath
-or
-.IR newpath .
-(See also
-.BR path_resolution (7).)
-.TP
-.B EDQUOT
-The user's quota of disk blocks on the filesystem has been exhausted.
-.TP
-.B EEXIST
-.I newpath
-already exists.
-.TP
-.B EFAULT
-.IR oldpath " or " newpath " points outside your accessible address space."
-.TP
-.B EIO
-An I/O error occurred.
-.TP
-.B ELOOP
-Too many symbolic links were encountered in resolving
-.IR oldpath " or " newpath .
-.TP
-.B EMLINK
-The file referred to by
-.I oldpath
-already has the maximum number of links to it.
-For example, on an
-.BR ext4 (5)
-filesystem that does not employ the
-.I dir_index
-feature, the limit on the number of hard links to a file is 65,000; on
-.BR btrfs (5),
-the limit is 65,535 links.
-.TP
-.B ENAMETOOLONG
-.IR oldpath " or " newpath " was too long."
-.TP
-.B ENOENT
-A directory component in
-.IR oldpath " or " newpath
-does not exist or is a dangling symbolic link.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOSPC
-The device containing the file has no room for the new directory
-entry.
-.TP
-.B ENOTDIR
-A component used as a directory in
-.IR oldpath " or " newpath
-is not, in fact, a directory.
-.TP
-.B EPERM
-.I oldpath
-is a directory.
-.TP
-.B EPERM
-The filesystem containing
-.IR oldpath " and " newpath
-does not support the creation of hard links.
-.TP
-.BR EPERM " (since Linux 3.6)"
-The caller does not have permission to create a hard link to this file
-(see the description of
-.I /proc/sys/fs/protected_hardlinks
-in
-.BR proc (5)).
-.TP
-.B EPERM
-.I oldpath
-is marked immutable or append-only.
-(See
-.BR ioctl_iflags (2).)
-.TP
-.B EROFS
-The file is on a read-only filesystem.
-.TP
-.B EXDEV
-.IR oldpath " and " newpath
-are not on the same mounted filesystem.
-(Linux permits a filesystem to be mounted at multiple points, but
-.BR link ()
-does not work across different mounts,
-even if the same filesystem is mounted on both.)
-.PP
-The following additional errors can occur for
-.BR linkat ():
-.TP
-.B EBADF
-.I oldpath
-.RI ( newpath )
-is relative but
-.I olddirfd
-.RI ( newdirfd )
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B EINVAL
-An invalid flag value was specified in
-.IR flags .
-.TP
-.B ENOENT
-.B AT_EMPTY_PATH
-was specified in
-.IR flags ,
-but the caller did not have the
-.B CAP_DAC_READ_SEARCH
-capability.
-.TP
-.B ENOENT
-An attempt was made to link to the
-.I /proc/self/fd/NN
-file corresponding to a file descriptor created with
-.IP
-.in +4n
-.EX
-open(path, O_TMPFILE | O_EXCL, mode);
-.EE
-.in
-.IP
-See
-.BR open (2).
-.TP
-.B ENOENT
-An attempt was made to link to a
-.I /proc/self/fd/NN
-file corresponding to a file that has been deleted.
-.TP
-.B ENOENT
-.I oldpath
-is a relative pathname and
-.I olddirfd
-refers to a directory that has been deleted,
-or
-.I newpath
-is a relative pathname and
-.I newdirfd
-refers to a directory that has been deleted.
-.TP
-.B ENOTDIR
-.I oldpath
-is relative and
-.I olddirfd
-is a file descriptor referring to a file other than a directory;
-or similar for
-.I newpath
-and
-.I newdirfd
-.TP
-.B EPERM
-.B AT_EMPTY_PATH
-was specified in
-.IR flags ,
-.I oldpath
-is an empty string, and
-.I olddirfd
-refers to a directory.
-.SH VERSIONS
-POSIX.1-2001 says that
-.BR link ()
-should dereference
-.I oldpath
-if it is a symbolic link.
-However, since Linux 2.0,
-.\" more precisely: since Linux 1.3.56
-Linux does not do so: if
-.I oldpath
-is a symbolic link, then
-.I newpath
-is created as a (hard) link to the same symbolic link file
-(i.e.,
-.I newpath
-becomes a symbolic link to the same file that
-.I oldpath
-refers to).
-Some other implementations behave in the same manner as Linux.
-.\" For example, the default Solaris compilation environment
-.\" behaves like Linux, and contributors to a March 2005
-.\" thread in the Austin mailing list reported that some
-.\" other (System V) implementations did/do the same -- MTK, Apr 05
-POSIX.1-2008 changes the specification of
-.BR link (),
-making it implementation-dependent whether or not
-.I oldpath
-is dereferenced if it is a symbolic link.
-For precise control over the treatment of symbolic links when
-creating a link, use
-.BR linkat ().
-.SS glibc
-On older kernels where
-.BR linkat ()
-is unavailable, the glibc wrapper function falls back to the use of
-.BR link (),
-unless the
-.B AT_SYMLINK_FOLLOW
-is specified.
-When
-.I oldpath
-and
-.I newpath
-are relative pathnames,
-glibc constructs pathnames based on the symbolic links in
-.I /proc/self/fd
-that correspond to the
-.I olddirfd
-and
-.I newdirfd
-arguments.
-.SH STANDARDS
-.TP
-.BR link ()
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR link ()
-SVr4, 4.3BSD, POSIX.1-2001 (but see VERSIONS).
-.\" SVr4 documents additional ENOLINK and
-.\" EMULTIHOP error conditions; POSIX.1 does not document ELOOP.
-.\" X/OPEN does not document EFAULT, ENOMEM or EIO.
-.TP
-.BR linkat ()
-POSIX.1-2008.
-Linux 2.6.16,
-glibc 2.4.
-.SH NOTES
-Hard links, as created by
-.BR link (),
-cannot span filesystems.
-Use
-.BR symlink (2)
-if this is required.
-.SH BUGS
-On NFS filesystems, the return code may be wrong in case the NFS server
-performs the link creation and dies before it can say so.
-Use
-.BR stat (2)
-to find out if the link got created.
-.SH SEE ALSO
-.BR ln (1),
-.BR open (2),
-.BR rename (2),
-.BR stat (2),
-.BR symlink (2),
-.BR unlink (2),
-.BR path_resolution (7),
-.BR symlink (7)
diff --git a/man2/linkat.2 b/man2/linkat.2
deleted file mode 100644
index a7d6da568..000000000
--- a/man2/linkat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/link.2
diff --git a/man2/listen.2 b/man2/listen.2
deleted file mode 100644
index 482314357..000000000
--- a/man2/listen.2
+++ /dev/null
@@ -1,155 +0,0 @@
-.\" Copyright (c) 1983, 1991 The Regents of the University of California.
-.\" and Copyright (C) 2007, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" $Id: listen.2,v 1.6 1999/05/18 14:10:32 freitag Exp $
-.\"
-.\" Modified Fri Jul 23 22:07:54 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 950727 by aeb, following a suggestion by Urs Thuermann
-.\" <urs@isnogud.escape.de>
-.\" Modified Tue Oct 22 08:11:14 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1998 by Andi Kleen
-.\" Modified 11 May 2001 by Sam Varshavchik <mrsam@courier-mta.com>
-.\"
-.\"
-.TH listen 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-listen \- listen for connections on a socket
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.PP
-.BI "int listen(int " sockfd ", int " backlog );
-.fi
-.SH DESCRIPTION
-.BR listen ()
-marks the socket referred to by
-.I sockfd
-as a passive socket, that is, as a socket that will
-be used to accept incoming connection requests using
-.BR accept (2).
-.PP
-The
-.I sockfd
-argument is a file descriptor that refers to a socket of type
-.B SOCK_STREAM
-or
-.BR SOCK_SEQPACKET .
-.PP
-The
-.I backlog
-argument defines the maximum length
-to which the queue of pending connections for
-.I sockfd
-may grow.
-If a connection request arrives when the queue is full, the client
-may receive an error with an indication of
-.B ECONNREFUSED
-or, if the underlying protocol supports retransmission, the request may be
-ignored so that a later reattempt at connection succeeds.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EADDRINUSE
-Another socket is already listening on the same port.
-.TP
-.B EADDRINUSE
-(Internet domain sockets)
-The socket referred to by
-.I sockfd
-had not previously been bound to an address and,
-upon attempting to bind it to an ephemeral port,
-it was determined that all port numbers in the ephemeral port range
-are currently in use.
-See the discussion of
-.I /proc/sys/net/ipv4/ip_local_port_range
-in
-.BR ip (7).
-.TP
-.B EBADF
-The argument
-.I sockfd
-is not a valid file descriptor.
-.TP
-.B ENOTSOCK
-The file descriptor
-.I sockfd
-does not refer to a socket.
-.TP
-.B EOPNOTSUPP
-The socket is not of a type that supports the
-.BR listen ()
-operation.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, 4.4BSD
-(first appeared in 4.2BSD).
-.SH NOTES
-To accept connections, the following steps are performed:
-.RS 4
-.IP (1) 5
-A socket is created with
-.BR socket (2).
-.IP (2)
-The socket is bound to a local address using
-.BR bind (2),
-so that other sockets may be
-.BR connect (2)ed
-to it.
-.IP (3)
-A willingness to accept incoming connections and a queue limit for incoming
-connections are specified with
-.BR listen ().
-.IP (4)
-Connections are accepted with
-.BR accept (2).
-.RE
-.PP
-The behavior of the
-.I backlog
-argument on TCP sockets changed with Linux 2.2.
-Now it specifies the queue length for
-.I completely
-established sockets waiting to be accepted,
-instead of the number of incomplete connection requests.
-The maximum length of the queue for incomplete sockets
-can be set using
-.IR /proc/sys/net/ipv4/tcp_max_syn_backlog .
-When syncookies are enabled there is no logical maximum
-length and this setting is ignored.
-See
-.BR tcp (7)
-for more information.
-.PP
-If the
-.I backlog
-argument is greater than the value in
-.IR /proc/sys/net/core/somaxconn ,
-then it is silently capped to that value.
-Since Linux 5.4, the default in this file is 4096;
-in earlier kernels, the default value is 128.
-Before Linux 2.4.25, this limit was a hard coded value,
-.BR SOMAXCONN ,
-with the value 128.
-.\" The following is now rather historic information (MTK, Jun 05)
-.\" Don't rely on this value in portable applications since BSD
-.\" (and some BSD-derived systems) limit the backlog to 5.
-.SH EXAMPLES
-See
-.BR bind (2).
-.SH SEE ALSO
-.BR accept (2),
-.BR bind (2),
-.BR connect (2),
-.BR socket (2),
-.BR socket (7)
diff --git a/man2/listxattr.2 b/man2/listxattr.2
deleted file mode 100644
index 30a4d8230..000000000
--- a/man2/listxattr.2
+++ /dev/null
@@ -1,322 +0,0 @@
-.\" Copyright (C) Andreas Gruenbacher, February 2001
-.\" Copyright (C) Silicon Graphics Inc, September 2001
-.\" Copyright (C) 2015 Heinrich Schuchardt <xypron.glpk@gmx.de>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH listxattr 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-listxattr, llistxattr, flistxattr \- list extended attribute names
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/xattr.h>
-.PP
-.BI "ssize_t listxattr(const char *" path ", char *_Nullable " list \
-", size_t " size );
-.BI "ssize_t llistxattr(const char *" path ", char *_Nullable " list \
-", size_t " size );
-.BI "ssize_t flistxattr(int " fd ", char *_Nullable " list ", size_t " size );
-.fi
-.SH DESCRIPTION
-Extended attributes are
-.IR name : value
-pairs associated with inodes (files, directories, symbolic links, etc.).
-They are extensions to the normal attributes which are associated
-with all inodes in the system (i.e., the
-.BR stat (2)
-data).
-A complete overview of extended attributes concepts can be found in
-.BR xattr (7).
-.PP
-.BR listxattr ()
-retrieves the list
-of extended attribute names associated with the given
-.I path
-in the filesystem.
-The retrieved list is placed in
-.IR list ,
-a caller-allocated buffer whose size (in bytes) is specified in the argument
-.IR size .
-The list is the set of (null-terminated) names, one after the other.
-Names of extended attributes to which the calling process does not
-have access may be omitted from the list.
-The length of the attribute name
-.I list
-is returned.
-.PP
-.BR llistxattr ()
-is identical to
-.BR listxattr (),
-except in the case of a symbolic link, where the list of names of
-extended attributes associated with the link itself is retrieved,
-not the file that it refers to.
-.PP
-.BR flistxattr ()
-is identical to
-.BR listxattr (),
-only the open file referred to by
-.I fd
-(as returned by
-.BR open (2))
-is interrogated in place of
-.IR path .
-.PP
-A single extended attribute
-.I name
-is a null-terminated string.
-The name includes a namespace prefix; there may be several, disjoint
-namespaces associated with an individual inode.
-.PP
-If
-.I size
-is specified as zero, these calls return the current size of the
-list of extended attribute names (and leave
-.I list
-unchanged).
-This can be used to determine the size of the buffer that
-should be supplied in a subsequent call.
-(But, bear in mind that there is a possibility that the
-set of extended attributes may change between the two calls,
-so that it is still necessary to check the return status
-from the second call.)
-.SS Example
-The
-.I list
-of names is returned as an unordered array of null-terminated character strings
-(attribute names are separated by null bytes (\[aq]\e0\[aq])),
-like this:
-.PP
-.in +4n
-.EX
-user.name1\e0system.name1\e0user.name2\e0
-.EE
-.in
-.PP
-Filesystems that implement POSIX ACLs using
-extended attributes might return a
-.I list
-like this:
-.PP
-.in +4n
-.EX
-system.posix_acl_access\e0system.posix_acl_default\e0
-.EE
-.in
-.SH RETURN VALUE
-On success, a nonnegative number is returned indicating the size of the
-extended attribute name list.
-On failure, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B E2BIG
-The size of the list of extended attribute names is larger than the maximum
-size allowed; the list cannot be retrieved.
-This can happen on filesystems that support an unlimited number of
-extended attributes per file such as XFS, for example.
-See BUGS.
-.TP
-.B ENOTSUP
-Extended attributes are not supported by the filesystem, or are disabled.
-.TP
-.B ERANGE
-The
-.I size
-of the
-.I list
-buffer is too small to hold the result.
-.PP
-In addition, the errors documented in
-.BR stat (2)
-can also occur.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.4,
-glibc 2.3.
-.\" .SH AUTHORS
-.\" Andreas Gruenbacher,
-.\" .RI < a.gruenbacher@computer.org >
-.\" and the SGI XFS development team,
-.\" .RI < linux-xfs@oss.sgi.com >.
-.\" Please send any bug reports or comments to these addresses.
-.SH BUGS
-.\" The xattr(7) page refers to this text:
-As noted in
-.BR xattr (7),
-the VFS imposes a limit of 64\ kB on the size of the extended
-attribute name list returned by
-.BR listxattr ().
-If the total size of attribute names attached to a file exceeds this limit,
-it is no longer possible to retrieve the list of attribute names.
-.SH EXAMPLES
-The following program demonstrates the usage of
-.BR listxattr ()
-and
-.BR getxattr (2).
-For the file whose pathname is provided as a command-line argument,
-it lists all extended file attributes and their values.
-.PP
-To keep the code simple, the program assumes that attribute keys and
-values are constant during the execution of the program.
-A production program should expect and handle changes during
-execution of the program.
-For example,
-the number of bytes required for attribute keys
-might increase between the two calls to
-.BR listxattr ().
-An application could handle this possibility using
-a loop that retries the call
-(perhaps up to a predetermined maximum number of attempts)
-with a larger buffer each time it fails with the error
-.BR ERANGE .
-Calls to
-.BR getxattr (2)
-could be handled similarly.
-.PP
-The following output was recorded by first creating a file, setting
-some extended file attributes,
-and then listing the attributes with the example program.
-.SS Example output
-.in +4n
-.EX
-$ \fBtouch /tmp/foo\fP
-$ \fBsetfattr \-n user.fred \-v chocolate /tmp/foo\fP
-$ \fBsetfattr \-n user.frieda \-v bar /tmp/foo\fP
-$ \fBsetfattr \-n user.empty /tmp/foo\fP
-$ \fB./listxattr /tmp/foo\fP
-user.fred: chocolate
-user.frieda: bar
-user.empty: <no value>
-.EE
-.in
-.SS Program source (listxattr.c)
-.\" SRC BEGIN (listxattr.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/xattr.h>
-\&
-int
-main(int argc, char *argv[])
-{
- char *buf, *key, *val;
- ssize_t buflen, keylen, vallen;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s path\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- /*
- * Determine the length of the buffer needed.
- */
- buflen = listxattr(argv[1], NULL, 0);
- if (buflen == \-1) {
- perror("listxattr");
- exit(EXIT_FAILURE);
- }
- if (buflen == 0) {
- printf("%s has no attributes.\en", argv[1]);
- exit(EXIT_SUCCESS);
- }
-\&
- /*
- * Allocate the buffer.
- */
- buf = malloc(buflen);
- if (buf == NULL) {
- perror("malloc");
- exit(EXIT_FAILURE);
- }
-\&
- /*
- * Copy the list of attribute keys to the buffer.
- */
- buflen = listxattr(argv[1], buf, buflen);
- if (buflen == \-1) {
- perror("listxattr");
- exit(EXIT_FAILURE);
- }
-\&
- /*
- * Loop over the list of zero terminated strings with the
- * attribute keys. Use the remaining buffer length to determine
- * the end of the list.
- */
- key = buf;
- while (buflen > 0) {
-\&
- /*
- * Output attribute key.
- */
- printf("%s: ", key);
-\&
- /*
- * Determine length of the value.
- */
- vallen = getxattr(argv[1], key, NULL, 0);
- if (vallen == \-1)
- perror("getxattr");
-\&
- if (vallen > 0) {
-\&
- /*
- * Allocate value buffer.
- * One extra byte is needed to append 0x00.
- */
- val = malloc(vallen + 1);
- if (val == NULL) {
- perror("malloc");
- exit(EXIT_FAILURE);
- }
-\&
- /*
- * Copy value to buffer.
- */
- vallen = getxattr(argv[1], key, val, vallen);
- if (vallen == \-1) {
- perror("getxattr");
- } else {
- /*
- * Output attribute value.
- */
- val[vallen] = 0;
- printf("%s", val);
- }
-\&
- free(val);
- } else if (vallen == 0) {
- printf("<no value>");
- }
-\&
- printf("\en");
-\&
- /*
- * Forward to next attribute key.
- */
- keylen = strlen(key) + 1;
- buflen \-= keylen;
- key += keylen;
- }
-\&
- free(buf);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR getfattr (1),
-.BR setfattr (1),
-.BR getxattr (2),
-.BR open (2),
-.BR removexattr (2),
-.BR setxattr (2),
-.BR stat (2),
-.BR symlink (7),
-.BR xattr (7)
diff --git a/man2/llistxattr.2 b/man2/llistxattr.2
deleted file mode 100644
index 117bd2b53..000000000
--- a/man2/llistxattr.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/listxattr.2
diff --git a/man2/llseek.2 b/man2/llseek.2
deleted file mode 100644
index d317ed1e1..000000000
--- a/man2/llseek.2
+++ /dev/null
@@ -1,92 +0,0 @@
-.\" Copyright (C) 1995 Andries Brouwer (aeb@cwi.nl)
-.\" Written 10 June 1995 by Andries Brouwer <aeb@cwi.nl>
-.\" and Copyright (C) 2007, 2015, 2020, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Thu Oct 31 15:16:23 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\"
-.TH _llseek 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-_llseek \- reposition read/write file offset
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS__llseek, unsigned int " fd ", unsigned long " offset_high ,
-.BI " unsigned long " offset_low ", loff_t *" result ,
-.BI " unsigned int " whence );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR _llseek (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-Note: for information about the
-.BR llseek (3)
-library function, see
-.BR lseek64 (3).
-.PP
-The
-.BR _llseek ()
-system call repositions the offset of the open file description associated
-with the file descriptor
-.I fd
-to the value
-.IP
-(offset_high << 32) | offset_low
-.PP
-This new offset is a byte offset
-relative to the beginning of the file, the current file offset,
-or the end of the file, depending on whether
-.I whence
-is
-.BR SEEK_SET ,
-.BR SEEK_CUR ,
-or
-.BR SEEK_END ,
-respectively.
-.PP
-The new file offset is returned in the argument
-.IR result .
-The type
-.I loff_t
-is a 64-bit signed type.
-.PP
-This system call exists on various 32-bit platforms to support
-seeking to large file offsets.
-.SH RETURN VALUE
-Upon successful completion,
-.BR _llseek ()
-returns 0.
-Otherwise, a value of \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I fd
-is not an open file descriptor.
-.TP
-.B EFAULT
-Problem with copying results to user space.
-.TP
-.B EINVAL
-.I whence
-is invalid.
-.SH VERSIONS
-You probably want to use the
-.BR lseek (2)
-wrapper function instead.
-.SH STANDARDS
-Linux.
-.SH SEE ALSO
-.BR lseek (2),
-.BR open (2),
-.BR lseek64 (3)
diff --git a/man2/lock.2 b/man2/lock.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/lock.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/lookup_dcookie.2 b/man2/lookup_dcookie.2
deleted file mode 100644
index 82c1ef3a7..000000000
--- a/man2/lookup_dcookie.2
+++ /dev/null
@@ -1,86 +0,0 @@
-.\" Copyright (C) 2003 John Levon <levon@movementarian.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 2004-06-17 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH lookup_dcookie 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-lookup_dcookie \- return a directory entry's path
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_lookup_dcookie, uint64_t " cookie ", char *" buffer ,
-.BI " size_t " len );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR lookup_dcookie (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-Look up the full path of the directory entry specified by the value
-.IR cookie .
-The cookie is an opaque identifier uniquely identifying a particular
-directory entry.
-The buffer given is filled in with the full path of the directory entry.
-.PP
-For
-.BR lookup_dcookie ()
-to return successfully,
-the kernel must still hold a cookie reference to the directory entry.
-.SH RETURN VALUE
-On success,
-.BR lookup_dcookie ()
-returns the length of the path string copied into the buffer.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-The buffer was not valid.
-.TP
-.B EINVAL
-The kernel has no registered cookie/directory entry mappings at the
-time of lookup, or the cookie does not refer to a valid directory entry.
-.TP
-.B ENAMETOOLONG
-The name could not fit in the buffer.
-.TP
-.B ENOMEM
-The kernel could not allocate memory for the temporary buffer holding
-the path.
-.TP
-.B EPERM
-The process does not have the capability
-.B CAP_SYS_ADMIN
-required to look up cookie values.
-.TP
-.B ERANGE
-The buffer was not large enough to hold the path of the directory entry.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.5.43.
-.PP
-The
-.B ENAMETOOLONG
-error was added in Linux 2.5.70.
-.SH NOTES
-.BR lookup_dcookie ()
-is a special-purpose system call, currently used only by the
-.BR oprofile (1)
-profiler.
-It relies on a kernel driver to register cookies for directory entries.
-.PP
-The path returned may be suffixed by the string " (deleted)" if the directory
-entry has been removed.
-.SH SEE ALSO
-.BR oprofile (1)
diff --git a/man2/lremovexattr.2 b/man2/lremovexattr.2
deleted file mode 100644
index 38d01ccde..000000000
--- a/man2/lremovexattr.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/removexattr.2
diff --git a/man2/lseek.2 b/man2/lseek.2
deleted file mode 100644
index ae46244af..000000000
--- a/man2/lseek.2
+++ /dev/null
@@ -1,252 +0,0 @@
-.\" Copyright (c) 1980, 1991 Regents of the University of California.
-.\" and Copyright (c) 2011, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)lseek.2 6.5 (Berkeley) 3/10/91
-.\"
-.\" Modified 1993-07-23 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1995-06-10 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 1996-10-31 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1998-01-17 by Michael Haardt
-.\" <michael@cantor.informatik.rwth-aachen.de>
-.\" Modified 2001-09-24 by Michael Haardt <michael@moria.de>
-.\" Modified 2003-08-21 by Andries Brouwer <aeb@cwi.nl>
-.\" 2011-09-18, mtk, Added SEEK_DATA + SEEK_HOLE
-.\"
-.TH lseek 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-lseek \- reposition read/write file offset
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "off_t lseek(int " fd ", off_t " offset ", int " whence );
-.fi
-.SH DESCRIPTION
-.BR lseek ()
-repositions the file offset of the open file description
-associated with the file descriptor
-.I fd
-to the argument
-.I offset
-according to the directive
-.I whence
-as follows:
-.TP
-.B SEEK_SET
-The file offset is set to
-.I offset
-bytes.
-.TP
-.B SEEK_CUR
-The file offset is set to its current location plus
-.I offset
-bytes.
-.TP
-.B SEEK_END
-The file offset is set to the size of the file plus
-.I offset
-bytes.
-.PP
-.BR lseek ()
-allows the file offset to be set beyond the end
-of the file (but this does not change the size of the file).
-If data is later written at this point, subsequent reads of the data
-in the gap (a "hole") return null bytes (\[aq]\e0\[aq]) until
-data is actually written into the gap.
-.SS Seeking file data and holes
-Since Linux 3.1, Linux supports the following additional values for
-.IR whence :
-.TP
-.B SEEK_DATA
-Adjust the file offset to the next location
-in the file greater than or equal to
-.I offset
-containing data.
-If
-.I offset
-points to data,
-then the file offset is set to
-.IR offset .
-.TP
-.B SEEK_HOLE
-Adjust the file offset to the next hole in the file
-greater than or equal to
-.IR offset .
-If
-.I offset
-points into the middle of a hole,
-then the file offset is set to
-.IR offset .
-If there is no hole past
-.IR offset ,
-then the file offset is adjusted to the end of the file
-(i.e., there is an implicit hole at the end of any file).
-.PP
-In both of the above cases,
-.BR lseek ()
-fails if
-.I offset
-points past the end of the file.
-.PP
-These operations allow applications to map holes in a sparsely
-allocated file.
-This can be useful for applications such as file backup tools,
-which can save space when creating backups and preserve holes,
-if they have a mechanism for discovering holes.
-.PP
-For the purposes of these operations, a hole is a sequence of zeros that
-(normally) has not been allocated in the underlying file storage.
-However, a filesystem is not obliged to report holes,
-so these operations are not a guaranteed mechanism for
-mapping the storage space actually allocated to a file.
-(Furthermore, a sequence of zeros that actually has been written
-to the underlying storage may not be reported as a hole.)
-In the simplest implementation,
-a filesystem can support the operations by making
-.B SEEK_HOLE
-always return the offset of the end of the file,
-and making
-.B SEEK_DATA
-always return
-.I offset
-(i.e., even if the location referred to by
-.I offset
-is a hole,
-it can be considered to consist of data that is a sequence of zeros).
-.\" https://lkml.org/lkml/2011/4/22/79
-.\" http://lwn.net/Articles/440255/
-.\" http://blogs.oracle.com/bonwick/entry/seek_hole_and_seek_data
-.PP
-The
-.B _GNU_SOURCE
-feature test macro must be defined in order to obtain the definitions of
-.B SEEK_DATA
-and
-.B SEEK_HOLE
-from
-.IR <unistd.h> .
-.PP
-The
-.B SEEK_HOLE
-and
-.B SEEK_DATA
-operations are supported for the following filesystems:
-.IP \[bu] 3
-Btrfs (since Linux 3.1)
-.IP \[bu]
-OCFS (since Linux 3.2)
-.\" commit 93862d5e1ab875664c6cc95254fc365028a48bb1
-.IP \[bu]
-XFS (since Linux 3.5)
-.IP \[bu]
-ext4 (since Linux 3.8)
-.IP \[bu]
-.BR tmpfs (5)
-(since Linux 3.8)
-.IP \[bu]
-NFS (since Linux 3.18)
-.\" commit 1c6dcbe5ceff81c2cf8d929646af675cd59fe7c0
-.\" commit 24bab491220faa446d945624086d838af41d616c
-.IP \[bu]
-FUSE (since Linux 4.5)
-.\" commit 0b5da8db145bfd44266ac964a2636a0cf8d7c286
-.IP \[bu]
-GFS2 (since Linux 4.15)
-.\" commit 3a27411cb4bc3ce31db228e3569ad01b462a4310
-.SH RETURN VALUE
-Upon successful completion,
-.BR lseek ()
-returns the resulting offset location as measured in bytes from the
-beginning of the file.
-On error, the value \fI(off_t)\ \-1\fP is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I fd
-is not an open file descriptor.
-.TP
-.B EINVAL
-.I whence
-is not valid.
-Or: the resulting file offset would be negative,
-or beyond the end of a seekable device.
-.\" Some systems may allow negative offsets for character devices
-.\" and/or for remote filesystems.
-.TP
-.B ENXIO
-.I whence
-is
-.B SEEK_DATA
-or
-.BR SEEK_HOLE ,
-and
-.I offset
-is beyond the end of the file, or
-.I whence
-is
-.B SEEK_DATA
-and
-.I offset
-is within a hole at the end of the file.
-.TP
-.B EOVERFLOW
-.\" HP-UX 11 says EINVAL for this case (but POSIX.1 says EOVERFLOW)
-The resulting file offset cannot be represented in an
-.IR off_t .
-.TP
-.B ESPIPE
-.I fd
-is associated with a pipe, socket, or FIFO.
-.SH VERSIONS
-On Linux, using
-.BR lseek ()
-on a terminal device fails with the error
-.BR ESPIPE .
-.\" Other systems return the number of written characters,
-.\" using SEEK_SET to set the counter. (Of written characters.)
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.PP
-.B SEEK_DATA
-and
-.B SEEK_HOLE
-are nonstandard extensions also present in Solaris,
-FreeBSD, and DragonFly BSD;
-they are proposed for inclusion in the next POSIX revision (Issue 8).
-.\" FIXME . Review http://austingroupbugs.net/view.php?id=415 in the future
-.SH NOTES
-See
-.BR open (2)
-for a discussion of the relationship between file descriptors,
-open file descriptions, and files.
-.PP
-If the
-.B O_APPEND
-file status flag is set on the open file description,
-then a
-.BR write (2)
-.I always
-moves the file offset to the end of the file, regardless of the use of
-.BR lseek ().
-.PP
-Some devices are incapable of seeking and POSIX does not specify which
-devices must support
-.BR lseek ().
-.SH SEE ALSO
-.BR dup (2),
-.BR fallocate (2),
-.BR fork (2),
-.BR open (2),
-.BR fseek (3),
-.BR lseek64 (3),
-.BR posix_fallocate (3)
diff --git a/man2/lsetxattr.2 b/man2/lsetxattr.2
deleted file mode 100644
index dc0780751..000000000
--- a/man2/lsetxattr.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/setxattr.2
diff --git a/man2/lstat.2 b/man2/lstat.2
deleted file mode 100644
index b1a86c195..000000000
--- a/man2/lstat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/stat.2
diff --git a/man2/lstat64.2 b/man2/lstat64.2
deleted file mode 100644
index 89b1c84d9..000000000
--- a/man2/lstat64.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/lstat.2
diff --git a/man2/madvise.2 b/man2/madvise.2
deleted file mode 100644
index 529b14835..000000000
--- a/man2/madvise.2
+++ /dev/null
@@ -1,898 +0,0 @@
-.\" Copyright (C) 2001 David Gómez <davidge@jazzfree.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Based on comments from mm/filemap.c. Last modified on 10-06-2001
-.\" Modified, 25 Feb 2002, Michael Kerrisk, <mtk.manpages@gmail.com>
-.\" Added notes on MADV_DONTNEED
-.\" 2010-06-19, mtk, Added documentation of MADV_MERGEABLE and
-.\" MADV_UNMERGEABLE
-.\" 2010-06-15, Andi Kleen, Add documentation of MADV_HWPOISON.
-.\" 2010-06-19, Andi Kleen, Add documentation of MADV_SOFT_OFFLINE.
-.\" 2011-09-18, Doug Goldstein <cardoe@cardoe.com>
-.\" Document MADV_HUGEPAGE and MADV_NOHUGEPAGE
-.\"
-.TH madvise 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-madvise \- give advice about use of memory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/mman.h>
-.PP
-.BI "int madvise(void " addr [. length "], size_t " length ", int " advice );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR madvise ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- Up to and including glibc 2.19:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR madvise ()
-system call is used to give advice or directions to the kernel
-about the address range beginning at address
-.I addr
-and with size
-.IR length .
-.BR madvise ()
-only operates on whole pages, therefore
-.I addr
-must be page-aligned.
-The value of
-.I length
-is rounded up to a multiple of page size.
-In most cases,
-the goal of such advice is to improve system or application performance.
-.PP
-Initially, the system call supported a set of "conventional"
-.I advice
-values, which are also available on several other implementations.
-(Note, though, that
-.BR madvise ()
-is not specified in POSIX.)
-Subsequently, a number of Linux-specific
-.I advice
-values have been added.
-.\"
-.\" ======================================================================
-.\"
-.SS Conventional advice values
-The
-.I advice
-values listed below
-allow an application to tell the kernel how it expects to use
-some mapped or shared memory areas, so that the kernel can choose
-appropriate read-ahead and caching techniques.
-These
-.I advice
-values do not influence the semantics of the application
-(except in the case of
-.BR MADV_DONTNEED ),
-but may influence its performance.
-All of the
-.I advice
-values listed here have analogs in the POSIX-specified
-.BR posix_madvise (3)
-function, and the values have the same meanings, with the exception of
-.BR MADV_DONTNEED .
-.PP
-The advice is indicated in the
-.I advice
-argument, which is one of the following:
-.TP
-.B MADV_NORMAL
-No special treatment.
-This is the default.
-.TP
-.B MADV_RANDOM
-Expect page references in random order.
-(Hence, read ahead may be less useful than normally.)
-.TP
-.B MADV_SEQUENTIAL
-Expect page references in sequential order.
-(Hence, pages in the given range can be aggressively read ahead,
-and may be freed soon after they are accessed.)
-.TP
-.B MADV_WILLNEED
-Expect access in the near future.
-(Hence, it might be a good idea to read some pages ahead.)
-.TP
-.B MADV_DONTNEED
-Do not expect access in the near future.
-(For the time being, the application is finished with the given range,
-so the kernel can free resources associated with it.)
-.IP
-After a successful
-.B MADV_DONTNEED
-operation,
-the semantics of memory access in the specified region are changed:
-subsequent accesses of pages in the range will succeed, but will result
-in either repopulating the memory contents from the
-up-to-date contents of the underlying mapped file
-(for shared file mappings, shared anonymous mappings,
-and shmem-based techniques such as System V shared memory segments)
-or zero-fill-on-demand pages for anonymous private mappings.
-.IP
-Note that, when applied to shared mappings,
-.B MADV_DONTNEED
-might not lead to immediate freeing of the pages in the range.
-The kernel is free to delay freeing the pages until an appropriate moment.
-The resident set size (RSS) of the calling process will be immediately
-reduced however.
-.IP
-.B MADV_DONTNEED
-cannot be applied to locked pages, or
-.B VM_PFNMAP
-pages.
-(Pages marked with the kernel-internal
-.B VM_PFNMAP
-.\" http://lwn.net/Articles/162860/
-flag are special memory areas that are not managed
-by the virtual memory subsystem.
-Such pages are typically created by device drivers that
-map the pages into user space.)
-.IP
-Support for Huge TLB pages was added in Linux v5.18.
-Addresses within a mapping backed by Huge TLB pages must be aligned
-to the underlying Huge TLB page size,
-and the range length is rounded up
-to a multiple of the underlying Huge TLB page size.
-.\"
-.\" ======================================================================
-.\"
-.SS Linux-specific advice values
-The following Linux-specific
-.I advice
-values have no counterparts in the POSIX-specified
-.BR posix_madvise (3),
-and may or may not have counterparts in the
-.BR madvise ()
-interface available on other implementations.
-Note that some of these operations change the semantics of memory accesses.
-.TP
-.BR MADV_REMOVE " (since Linux 2.6.16)"
-.\" commit f6b3ec238d12c8cc6cc71490c6e3127988460349
-Free up a given range of pages
-and its associated backing store.
-This is equivalent to punching a hole in the corresponding
-range of the backing store (see
-.BR fallocate (2)).
-Subsequent accesses in the specified address range will see
-data with a value of zero.
-.\" Databases want to use this feature to drop a section of their
-.\" bufferpool (shared memory segments) - without writing back to
-.\" disk/swap space. This feature is also useful for supporting
-.\" hot-plug memory on UML.
-.IP
-The specified address range must be mapped shared and writable.
-This flag cannot be applied to locked pages, or
-.B VM_PFNMAP
-pages.
-.IP
-In the initial implementation, only
-.BR tmpfs (5)
-supported
-.BR MADV_REMOVE ;
-but since Linux 3.5,
-.\" commit 3f31d07571eeea18a7d34db9af21d2285b807a17
-any filesystem which supports the
-.BR fallocate (2)
-.B FALLOC_FL_PUNCH_HOLE
-mode also supports
-.BR MADV_REMOVE .
-Filesystems which do not support
-.B MADV_REMOVE
-fail with the error
-.BR EOPNOTSUPP .
-.IP
-Support for the Huge TLB filesystem was added in Linux v4.3.
-.TP
-.BR MADV_DONTFORK " (since Linux 2.6.16)"
-.\" commit f822566165dd46ff5de9bf895cfa6c51f53bb0c4
-.\" See http://lwn.net/Articles/171941/
-Do not make the pages in this range available to the child after a
-.BR fork (2).
-This is useful to prevent copy-on-write semantics from changing
-the physical location of a page if the parent writes to it after a
-.BR fork (2).
-(Such page relocations cause problems for hardware that
-DMAs into the page.)
-.\" [PATCH] madvise MADV_DONTFORK/MADV_DOFORK
-.\" Currently, copy-on-write may change the physical address of
-.\" a page even if the user requested that the page is pinned in
-.\" memory (either by mlock or by get_user_pages). This happens
-.\" if the process forks meanwhile, and the parent writes to that
-.\" page. As a result, the page is orphaned: in case of
-.\" get_user_pages, the application will never see any data hardware
-.\" DMA's into this page after the COW. In case of mlock'd memory,
-.\" the parent is not getting the realtime/security benefits of mlock.
-.\"
-.\" In particular, this affects the Infiniband modules which do DMA from
-.\" and into user pages all the time.
-.\"
-.\" This patch adds madvise options to control whether memory range is
-.\" inherited across fork. Useful e.g. for when hardware is doing DMA
-.\" from/into these pages. Could also be useful to an application
-.\" wanting to speed up its forks by cutting large areas out of
-.\" consideration.
-.\"
-.\" SEE ALSO: http://lwn.net/Articles/171941/
-.\" "Tweaks to madvise() and posix_fadvise()", 14 Feb 2006
-.TP
-.BR MADV_DOFORK " (since Linux 2.6.16)"
-Undo the effect of
-.BR MADV_DONTFORK ,
-restoring the default behavior, whereby a mapping is inherited across
-.BR fork (2).
-.TP
-.BR MADV_HWPOISON " (since Linux 2.6.32)"
-.\" commit 9893e49d64a4874ea67849ee2cfbf3f3d6817573
-Poison the pages in the range specified by
-.I addr
-and
-.I length
-and handle subsequent references to those pages
-like a hardware memory corruption.
-This operation is available only for privileged
-.RB ( CAP_SYS_ADMIN )
-processes.
-This operation may result in the calling process receiving a
-.B SIGBUS
-and the page being unmapped.
-.IP
-This feature is intended for testing of memory error-handling code;
-it is available only if the kernel was configured with
-.BR CONFIG_MEMORY_FAILURE .
-.TP
-.BR MADV_MERGEABLE " (since Linux 2.6.32)"
-.\" commit f8af4da3b4c14e7267c4ffb952079af3912c51c5
-Enable Kernel Samepage Merging (KSM) for the pages in the range specified by
-.I addr
-and
-.IR length .
-The kernel regularly scans those areas of user memory that have
-been marked as mergeable,
-looking for pages with identical content.
-These are replaced by a single write-protected page (which is automatically
-copied if a process later wants to update the content of the page).
-KSM merges only private anonymous pages (see
-.BR mmap (2)).
-.IP
-The KSM feature is intended for applications that generate many
-instances of the same data (e.g., virtualization systems such as KVM).
-It can consume a lot of processing power; use with care.
-See the Linux kernel source file
-.I Documentation/admin\-guide/mm/ksm.rst
-for more details.
-.IP
-The
-.B MADV_MERGEABLE
-and
-.B MADV_UNMERGEABLE
-operations are available only if the kernel was configured with
-.BR CONFIG_KSM .
-.TP
-.BR MADV_UNMERGEABLE " (since Linux 2.6.32)"
-Undo the effect of an earlier
-.B MADV_MERGEABLE
-operation on the specified address range;
-KSM unmerges whatever pages it had merged in the address range specified by
-.I addr
-and
-.IR length .
-.TP
-.BR MADV_SOFT_OFFLINE " (since Linux 2.6.33)"
-.\" commit afcf938ee0aac4ef95b1a23bac704c6fbeb26de6
-Soft offline the pages in the range specified by
-.I addr
-and
-.IR length .
-The memory of each page in the specified range is preserved
-(i.e., when next accessed, the same content will be visible,
-but in a new physical page frame),
-and the original page is offlined
-(i.e., no longer used, and taken out of normal memory management).
-The effect of the
-.B MADV_SOFT_OFFLINE
-operation is invisible to (i.e., does not change the semantics of)
-the calling process.
-.IP
-This feature is intended for testing of memory error-handling code;
-it is available only if the kernel was configured with
-.BR CONFIG_MEMORY_FAILURE .
-.TP
-.BR MADV_HUGEPAGE " (since Linux 2.6.38)"
-.\" commit 0af4e98b6b095c74588af04872f83d333c958c32
-.\" http://lwn.net/Articles/358904/
-.\" https://lwn.net/Articles/423584/
-Enable Transparent Huge Pages (THP) for pages in the range specified by
-.I addr
-and
-.IR length .
-The kernel will regularly scan the areas marked as huge page candidates
-to replace them with huge pages.
-The kernel will also allocate huge pages directly when the region is
-naturally aligned to the huge page size (see
-.BR posix_memalign (2)).
-.IP
-This feature is primarily aimed at applications that use large mappings of
-data and access large regions of that memory at a time (e.g., virtualization
-systems such as QEMU).
-It can very easily waste memory (e.g., a 2\ MB mapping that only ever accesses
-1 byte will result in 2\ MB of wired memory instead of one 4\ KB page).
-See the Linux kernel source file
-.I Documentation/admin\-guide/mm/transhuge.rst
-for more details.
-.IP
-Most common kernels configurations provide
-.BR MADV_HUGEPAGE -style
-behavior by default, and thus
-.B MADV_HUGEPAGE
-is normally not necessary.
-It is mostly intended for embedded systems, where
-.BR MADV_HUGEPAGE -style
-behavior may not be enabled by default in the kernel.
-On such systems,
-this flag can be used in order to selectively enable THP.
-Whenever
-.B MADV_HUGEPAGE
-is used, it should always be in regions of memory with
-an access pattern that the developer knows in advance won't risk
-to increase the memory footprint of the application when transparent
-hugepages are enabled.
-.IP
-.\" commit 99cb0dbd47a15d395bf3faa78dc122bc5efe3fc0
-Since Linux 5.4,
-automatic scan of eligible areas and replacement by huge pages works with
-private anonymous pages (see
-.BR mmap (2)),
-shmem pages,
-and file-backed pages.
-For all memory types,
-memory may only be replaced by huge pages on hugepage-aligned boundaries.
-For file-mapped memory
-\[em]including tmpfs (see
-.BR tmpfs (2))\[em]
-the mapping must also be naturally hugepage-aligned within the file.
-Additionally,
-for file-backed,
-non-tmpfs memory,
-the file must not be open for write and the mapping must be executable.
-.IP
-The VMA must not be marked
-.BR VM_NOHUGEPAGE ,
-.BR VM_HUGETLB ,
-.BR VM_IO ,
-.BR VM_DONTEXPAND ,
-.BR VM_MIXEDMAP ,
-or
-.BR VM_PFNMAP ,
-nor can it be stack memory or backed by a DAX-enabled device
-(unless the DAX device is hot-plugged as System RAM).
-The process must also not have
-.B PR_SET_THP_DISABLE
-set (see
-.BR prctl (2)).
-.IP
-The
-.BR MADV_HUGEPAGE ,
-.BR MADV_NOHUGEPAGE ,
-and
-.B MADV_COLLAPSE
-operations are available only if the kernel was configured with
-.B CONFIG_TRANSPARENT_HUGEPAGE
-and file/shmem memory is only supported if the kernel was configured with
-.BR CONFIG_READ_ONLY_THP_FOR_FS .
-.TP
-.BR MADV_NOHUGEPAGE " (since Linux 2.6.38)"
-Ensures that memory in the address range specified by
-.I addr
-and
-.I length
-will not be backed by transparent hugepages.
-.TP
-.BR MADV_COLLAPSE " (since Linux 6.1)"
-.\" commit 7d8faaf155454f8798ec56404faca29a82689c77
-.\" commit 34488399fa08faaf664743fa54b271eb6f9e1321
-Perform a best-effort synchronous collapse of
-the native pages mapped by the memory range
-into Transparent Huge Pages (THPs).
-.B MADV_COLLAPSE
-operates on the current state of memory of the calling process and
-makes no persistent changes or guarantees on how pages will be mapped,
-constructed,
-or faulted in the future.
-.IP
-.B MADV_COLLAPSE
-supports private anonymous pages (see
-.BR mmap (2)),
-shmem pages,
-and file-backed pages.
-See
-.B MADV_HUGEPAGE
-for general information on memory requirements for THP.
-If the range provided spans multiple VMAs,
-the semantics of the collapse over each VMA is independent from the others.
-If collapse of a given huge page-aligned/sized region fails,
-the operation may continue to attempt collapsing
-the remainder of the specified memory.
-.B MADV_COLLAPSE
-will automatically clamp the provided range to be hugepage-aligned.
-.IP
-All non-resident pages covered by the range
-will first be swapped/faulted-in,
-before being copied onto a freshly allocated hugepage.
-If the native pages compose the same PTE-mapped hugepage,
-and are suitably aligned,
-allocation of a new hugepage may be elided and
-collapse may happen in-place.
-Unmapped pages will have their data directly initialized to 0
-in the new hugepage.
-However,
-for every eligible hugepage-aligned/sized region to be collapsed,
-at least one page must currently be backed by physical memory.
-.IP
-.B MADV_COLLAPSE
-is independent of any sysfs
-(see
-.BR sysfs (5))
-setting under
-.IR /sys/kernel/mm/transparent_hugepage ,
-both in terms of determining THP eligibility,
-and allocation semantics.
-See Linux kernel source file
-.I Documentation/admin\-guide/mm/transhuge.rst
-for more information.
-.B MADV_COLLAPSE
-also ignores
-.B huge=
-tmpfs mount when operating on tmpfs files.
-Allocation for the new hugepage may enter direct reclaim and/or compaction,
-regardless of VMA flags
-(though
-.B VM_NOHUGEPAGE
-is still respected).
-.IP
-When the system has multiple NUMA nodes,
-the hugepage will be allocated from
-the node providing the most native pages.
-.IP
-If all hugepage-sized/aligned regions covered by the provided range were
-either successfully collapsed,
-or were already PMD-mapped THPs,
-this operation will be deemed successful.
-Note that this doesn't guarantee anything about
-other possible mappings of the memory.
-In the event multiple hugepage-aligned/sized areas fail to collapse,
-only the most-recently\[en]failed code will be set in
-.IR errno .
-.TP
-.BR MADV_DONTDUMP " (since Linux 3.4)"
-.\" commit 909af768e88867016f427264ae39d27a57b6a8ed
-.\" commit accb61fe7bb0f5c2a4102239e4981650f9048519
-Exclude from a core dump those pages in the range specified by
-.I addr
-and
-.IR length .
-This is useful in applications that have large areas of memory
-that are known not to be useful in a core dump.
-The effect of
-.B MADV_DONTDUMP
-takes precedence over the bit mask that is set via the
-.IR /proc/ pid /coredump_filter
-file (see
-.BR core (5)).
-.TP
-.BR MADV_DODUMP " (since Linux 3.4)"
-Undo the effect of an earlier
-.BR MADV_DONTDUMP .
-.TP
-.BR MADV_FREE " (since Linux 4.5)"
-The application no longer requires the pages in the range specified by
-.I addr
-and
-.IR len .
-The kernel can thus free these pages,
-but the freeing could be delayed until memory pressure occurs.
-For each of the pages that has been marked to be freed
-but has not yet been freed,
-the free operation will be canceled if the caller writes into the page.
-After a successful
-.B MADV_FREE
-operation, any stale data (i.e., dirty, unwritten pages) will be lost
-when the kernel frees the pages.
-However, subsequent writes to pages in the range will succeed
-and then kernel cannot free those dirtied pages,
-so that the caller can always see just written data.
-If there is no subsequent write,
-the kernel can free the pages at any time.
-Once pages in the range have been freed, the caller will
-see zero-fill-on-demand pages upon subsequent page references.
-.IP
-The
-.B MADV_FREE
-operation
-can be applied only to private anonymous pages (see
-.BR mmap (2)).
-Before Linux 4.12,
-.\" commit 93e06c7a645343d222c9a838834a51042eebbbf7
-when freeing pages on a swapless system,
-the pages in the given range are freed instantly,
-regardless of memory pressure.
-.TP
-.BR MADV_WIPEONFORK " (since Linux 4.14)"
-.\" commit d2cd9ede6e193dd7d88b6d27399e96229a551b19
-Present the child process with zero-filled memory in this range after a
-.BR fork (2).
-This is useful in forking servers in order to ensure
-that sensitive per-process data
-(for example, PRNG seeds, cryptographic secrets, and so on)
-is not handed to child processes.
-.IP
-The
-.B MADV_WIPEONFORK
-operation can be applied only to private anonymous pages (see
-.BR mmap (2)).
-.IP
-Within the child created by
-.BR fork (2),
-the
-.B MADV_WIPEONFORK
-setting remains in place on the specified address range.
-This setting is cleared during
-.BR execve (2).
-.TP
-.BR MADV_KEEPONFORK " (since Linux 4.14)"
-.\" commit d2cd9ede6e193dd7d88b6d27399e96229a551b19
-Undo the effect of an earlier
-.BR MADV_WIPEONFORK .
-.TP
-.BR MADV_COLD " (since Linux 5.4)"
-.\" commit 9c276cc65a58faf98be8e56962745ec99ab87636
-Deactivate a given range of pages.
-This will make the pages a more probable
-reclaim target should there be a memory pressure.
-This is a nondestructive operation.
-The advice might be ignored for some pages in the range when it is not
-applicable.
-.TP
-.BR MADV_PAGEOUT " (since Linux 5.4)"
-.\" commit 1a4e58cce84ee88129d5d49c064bd2852b481357
-Reclaim a given range of pages.
-This is done to free up memory occupied by these pages.
-If a page is anonymous, it will be swapped out.
-If a page is file-backed and dirty, it will be written back to the backing
-storage.
-The advice might be ignored for some pages in the range when it is not
-applicable.
-.TP
-.BR MADV_POPULATE_READ " (since Linux 5.14)"
-"Populate (prefault) page tables readable,
-faulting in all pages in the range just as if manually reading from each page;
-however,
-avoid the actual memory access that would have been performed after handling
-the fault.
-.IP
-In contrast to
-.BR MAP_POPULATE ,
-.B MADV_POPULATE_READ
-does not hide errors,
-can be applied to (parts of) existing mappings and will always populate
-(prefault) page tables readable.
-One example use case is prefaulting a file mapping,
-reading all file content from disk;
-however,
-pages won't be dirtied and consequently won't have to be written back to disk
-when evicting the pages from memory.
-.IP
-Depending on the underlying mapping,
-map the shared zeropage,
-preallocate memory or read the underlying file;
-files with holes might or might not preallocate blocks.
-If populating fails,
-a
-.B SIGBUS
-signal is not generated; instead, an error is returned.
-.IP
-If
-.B MADV_POPULATE_READ
-succeeds,
-all page tables have been populated (prefaulted) readable once.
-If
-.B MADV_POPULATE_READ
-fails,
-some page tables might have been populated.
-.IP
-.B MADV_POPULATE_READ
-cannot be applied to mappings without read permissions
-and special mappings,
-for example,
-mappings marked with kernel-internal flags such as
-.B VM_PFNMAP
-or
-.BR VM_IO ,
-or secret memory regions created using
-.BR memfd_secret(2) .
-.IP
-Note that with
-.BR MADV_POPULATE_READ ,
-the process can be killed at any moment when the system runs out of memory.
-.TP
-.BR MADV_POPULATE_WRITE " (since Linux 5.14)"
-Populate (prefault) page tables writable,
-faulting in all pages in the range just as if manually writing to each
-each page;
-however,
-avoid the actual memory access that would have been performed after handling
-the fault.
-.IP
-In contrast to
-.BR MAP_POPULATE ,
-MADV_POPULATE_WRITE does not hide errors,
-can be applied to (parts of) existing mappings and will always populate
-(prefault) page tables writable.
-One example use case is preallocating memory,
-breaking any CoW (Copy on Write).
-.IP
-Depending on the underlying mapping,
-preallocate memory or read the underlying file;
-files with holes will preallocate blocks.
-If populating fails,
-a
-.B SIGBUS
-signal is not generated; instead, an error is returned.
-.IP
-If
-.B MADV_POPULATE_WRITE
-succeeds,
-all page tables have been populated (prefaulted) writable once.
-If
-.B MADV_POPULATE_WRITE
-fails,
-some page tables might have been populated.
-.IP
-.B MADV_POPULATE_WRITE
-cannot be applied to mappings without write permissions
-and special mappings,
-for example,
-mappings marked with kernel-internal flags such as
-.B VM_PFNMAP
-or
-.BR VM_IO ,
-or secret memory regions created using
-.BR memfd_secret(2) .
-.IP
-Note that with
-.BR MADV_POPULATE_WRITE ,
-the process can be killed at any moment when the system runs out of memory.
-.SH RETURN VALUE
-On success,
-.BR madvise ()
-returns zero.
-On error, it returns \-1 and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-.I advice
-is
-.BR MADV_REMOVE ,
-but the specified address range is not a shared writable mapping.
-.TP
-.B EAGAIN
-A kernel resource was temporarily unavailable.
-.TP
-.B EBADF
-The map exists, but the area maps something that isn't a file.
-.TP
-.B EBUSY
-(for
-.BR MADV_COLLAPSE )
-Could not charge hugepage to cgroup: cgroup limit exceeded.
-.TP
-.B EFAULT
-.I advice
-is
-.B MADV_POPULATE_READ
-or
-.BR MADV_POPULATE_WRITE ,
-and populating (prefaulting) page tables failed because a
-.B SIGBUS
-would have been generated on actual memory access and the reason is not a
-HW poisoned page
-(HW poisoned pages can,
-for example,
-be created using the
-.B MADV_HWPOISON
-flag described elsewhere in this page).
-.TP
-.B EINVAL
-.I addr
-is not page-aligned or
-.I length
-is negative.
-.\" .I length
-.\" is zero,
-.TP
-.B EINVAL
-.I advice
-is not a valid.
-.TP
-.B EINVAL
-.I advice
-is
-.B MADV_COLD
-or
-.B MADV_PAGEOUT
-and the specified address range includes locked, Huge TLB pages, or
-.B VM_PFNMAP
-pages.
-.TP
-.B EINVAL
-.I advice
-is
-.B MADV_DONTNEED
-or
-.B MADV_REMOVE
-and the specified address range includes locked, Huge TLB pages, or
-.B VM_PFNMAP
-pages.
-.TP
-.B EINVAL
-.I advice
-is
-.B MADV_MERGEABLE
-or
-.BR MADV_UNMERGEABLE ,
-but the kernel was not configured with
-.BR CONFIG_KSM .
-.TP
-.B EINVAL
-.I advice
-is
-.B MADV_FREE
-or
-.B MADV_WIPEONFORK
-but the specified address range includes file, Huge TLB,
-.BR MAP_SHARED ,
-or
-.B VM_PFNMAP
-ranges.
-.TP
-.B EINVAL
-.I advice
-is
-.B MADV_POPULATE_READ
-or
-.BR MADV_POPULATE_WRITE ,
-but the specified address range includes ranges with insufficient permissions
-or special mappings,
-for example,
-mappings marked with kernel-internal flags such a
-.B VM_IO
-or
-.BR VM_PFNMAP ,
-or secret memory regions created using
-.BR memfd_secret(2) .
-.TP
-.B EIO
-(for
-.BR MADV_WILLNEED )
-Paging in this area would exceed the process's
-maximum resident set size.
-.TP
-.B ENOMEM
-(for
-.BR MADV_WILLNEED )
-Not enough memory: paging in failed.
-.TP
-.B ENOMEM
-(for
-.BR MADV_COLLAPSE )
-Not enough memory: could not allocate hugepage.
-.TP
-.B ENOMEM
-Addresses in the specified range are not currently
-mapped, or are outside the address space of the process.
-.TP
-.B ENOMEM
-.I advice
-is
-.B MADV_POPULATE_READ
-or
-.BR MADV_POPULATE_WRITE ,
-and populating (prefaulting) page tables failed because there was not enough
-memory.
-.TP
-.B EPERM
-.I advice
-is
-.BR MADV_HWPOISON ,
-but the caller does not have the
-.B CAP_SYS_ADMIN
-capability.
-.TP
-.B EHWPOISON
-.I advice
-is
-.B MADV_POPULATE_READ
-or
-.BR MADV_POPULATE_WRITE ,
-and populating (prefaulting) page tables failed because a HW poisoned page
-(HW poisoned pages can,
-for example,
-be created using the
-.B MADV_HWPOISON
-flag described elsewhere in this page)
-was encountered.
-.SH VERSIONS
-Versions of this system call, implementing a wide variety of
-.I advice
-values, exist on many other implementations.
-Other implementations typically implement at least the flags listed
-above under
-.IR "Conventional advice flags" ,
-albeit with some variation in semantics.
-.PP
-POSIX.1-2001 describes
-.BR posix_madvise (3)
-with constants
-.BR POSIX_MADV_NORMAL ,
-.BR POSIX_MADV_RANDOM ,
-.BR POSIX_MADV_SEQUENTIAL ,
-.BR POSIX_MADV_WILLNEED ,
-and
-.BR POSIX_MADV_DONTNEED ,
-and so on, with behavior close to the similarly named flags listed above.
-.SS Linux
-The Linux implementation requires that the address
-.I addr
-be page-aligned, and allows
-.I length
-to be zero.
-If there are some parts of the specified address range
-that are not mapped, the Linux version of
-.BR madvise ()
-ignores them and applies the call to the rest (but returns
-.B ENOMEM
-from the system call, as it should).
-.PP
-.I madvise(0,\ 0,\ advice)
-will return zero iff
-.I advice
-is supported by the kernel and can be relied on to probe for support.
-.SH STANDARDS
-None.
-.SH HISTORY
-First appeared in 4.4BSD.
-.PP
-Since Linux 3.18,
-.\" commit d3ac21cacc24790eb45d735769f35753f5b56ceb
-support for this system call is optional,
-depending on the setting of the
-.B CONFIG_ADVISE_SYSCALLS
-configuration option.
-.SH SEE ALSO
-.BR getrlimit (2),
-.BR memfd_secret (2),
-.BR mincore (2),
-.BR mmap (2),
-.BR mprotect (2),
-.BR msync (2),
-.BR munmap (2),
-.BR prctl (2),
-.BR process_madvise (2),
-.BR posix_madvise (3),
-.BR core (5)
diff --git a/man2/madvise1.2 b/man2/madvise1.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/madvise1.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/mbind.2 b/man2/mbind.2
deleted file mode 100644
index 73ca95efe..000000000
--- a/man2/mbind.2
+++ /dev/null
@@ -1,503 +0,0 @@
-.\" Copyright 2003,2004 Andi Kleen, SuSE Labs.
-.\" and Copyright 2007 Lee Schermerhorn, Hewlett Packard
-.\"
-.\" %%%LICENSE_START(VERBATIM_PROF)
-.\" Permission is granted to make and distribute verbatim copies of this
-.\" manual provided the copyright notice and this permission notice are
-.\" preserved on all copies.
-.\"
-.\" Permission is granted to copy and distribute modified versions of this
-.\" manual under the conditions for verbatim copying, provided that the
-.\" entire resulting derived work is distributed under the terms of a
-.\" permission notice identical to this one.
-.\"
-.\" Since the Linux kernel and libraries are constantly changing, this
-.\" manual page may be incorrect or out-of-date. The author(s) assume no
-.\" responsibility for errors or omissions, or for damages resulting from
-.\" the use of the information contained herein.
-.\"
-.\" Formatted or processed versions of this manual, if unaccompanied by
-.\" the source, must acknowledge the copyright and authors of this work.
-.\" %%%LICENSE_END
-.\"
-.\" 2006-02-03, mtk, substantial wording changes and other improvements
-.\" 2007-08-27, Lee Schermerhorn <Lee.Schermerhorn@hp.com>
-.\" more precise specification of behavior.
-.\"
-.\" FIXME
-.\" Linux 3.8 added MPOL_MF_LAZY, which needs to be documented.
-.\" Does it also apply for move_pages()?
-.\"
-.\" commit b24f53a0bea38b266d219ee651b22dba727c44ae
-.\" Author: Lee Schermerhorn <lee.schermerhorn@hp.com>
-.\" Date: Thu Oct 25 14:16:32 2012 +0200
-.\"
-.TH mbind 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mbind \- set memory policy for a memory range
-.SH LIBRARY
-NUMA (Non-Uniform Memory Access) policy library
-.RI ( libnuma ", " \-lnuma )
-.SH SYNOPSIS
-.nf
-.B "#include <numaif.h>"
-.PP
-.BI "long mbind(void " addr [. len "], unsigned long " len ", int " mode ,
-.BI " const unsigned long " nodemask [(. maxnode " + ULONG_WIDTH - 1)"
-.B " / ULONG_WIDTH],"
-.BI " unsigned long " maxnode ", unsigned int " flags );
-.fi
-.SH DESCRIPTION
-.BR mbind ()
-sets the NUMA memory policy,
-which consists of a policy mode and zero or more nodes,
-for the memory range starting with
-.I addr
-and continuing for
-.I len
-bytes.
-The memory policy defines from which node memory is allocated.
-.PP
-If the memory range specified by the
-.IR addr " and " len
-arguments includes an "anonymous" region of memory\[em]that is
-a region of memory created using the
-.BR mmap (2)
-system call with the
-.BR MAP_ANONYMOUS \[em]or
-a memory-mapped file, mapped using the
-.BR mmap (2)
-system call with the
-.B MAP_PRIVATE
-flag, pages will be allocated only according to the specified
-policy when the application writes (stores) to the page.
-For anonymous regions, an initial read access will use a shared
-page in the kernel containing all zeros.
-For a file mapped with
-.BR MAP_PRIVATE ,
-an initial read access will allocate pages according to the
-memory policy of the thread that causes the page to be allocated.
-This may not be the thread that called
-.BR mbind ().
-.PP
-The specified policy will be ignored for any
-.B MAP_SHARED
-mappings in the specified memory range.
-Rather the pages will be allocated according to the memory policy
-of the thread that caused the page to be allocated.
-Again, this may not be the thread that called
-.BR mbind ().
-.PP
-If the specified memory range includes a shared memory region
-created using the
-.BR shmget (2)
-system call and attached using the
-.BR shmat (2)
-system call,
-pages allocated for the anonymous or shared memory region will
-be allocated according to the policy specified, regardless of which
-process attached to the shared memory segment causes the allocation.
-If, however, the shared memory region was created with the
-.B SHM_HUGETLB
-flag,
-the huge pages will be allocated according to the policy specified
-only if the page allocation is caused by the process that calls
-.BR mbind ()
-for that region.
-.PP
-By default,
-.BR mbind ()
-has an effect only for new allocations; if the pages inside
-the range have been already touched before setting the policy,
-then the policy has no effect.
-This default behavior may be overridden by the
-.B MPOL_MF_MOVE
-and
-.B MPOL_MF_MOVE_ALL
-flags described below.
-.PP
-The
-.I mode
-argument must specify one of
-.BR MPOL_DEFAULT ,
-.BR MPOL_BIND ,
-.BR MPOL_INTERLEAVE ,
-.BR MPOL_PREFERRED ,
-or
-.B MPOL_LOCAL
-(which are described in detail below).
-All policy modes except
-.B MPOL_DEFAULT
-require the caller to specify the node or nodes to which the mode applies,
-via the
-.I nodemask
-argument.
-.PP
-The
-.I mode
-argument may also include an optional
-.IR "mode flag" .
-The supported
-.I "mode flags"
-are:
-.TP
-.BR MPOL_F_STATIC_NODES " (since Linux-2.6.26)"
-A nonempty
-.I nodemask
-specifies physical node IDs.
-Linux does not remap the
-.I nodemask
-when the thread moves to a different cpuset context,
-nor when the set of nodes allowed by the thread's
-current cpuset context changes.
-.TP
-.BR MPOL_F_RELATIVE_NODES " (since Linux-2.6.26)"
-A nonempty
-.I nodemask
-specifies node IDs that are relative to the set of
-node IDs allowed by the thread's current cpuset.
-.PP
-.I nodemask
-points to a bit mask of nodes containing up to
-.I maxnode
-bits.
-The bit mask size is rounded to the next multiple of
-.IR "sizeof(unsigned long)" ,
-but the kernel will use bits only up to
-.IR maxnode .
-A NULL value of
-.I nodemask
-or a
-.I maxnode
-value of zero specifies the empty set of nodes.
-If the value of
-.I maxnode
-is zero,
-the
-.I nodemask
-argument is ignored.
-Where a
-.I nodemask
-is required, it must contain at least one node that is on-line,
-allowed by the thread's current cpuset context
-(unless the
-.B MPOL_F_STATIC_NODES
-mode flag is specified),
-and contains memory.
-.PP
-The
-.I mode
-argument must include one of the following values:
-.TP
-.B MPOL_DEFAULT
-This mode requests that any nondefault policy be removed,
-restoring default behavior.
-When applied to a range of memory via
-.BR mbind (),
-this means to use the thread memory policy,
-which may have been set with
-.BR set_mempolicy (2).
-If the mode of the thread memory policy is also
-.BR MPOL_DEFAULT ,
-the system-wide default policy will be used.
-The system-wide default policy allocates
-pages on the node of the CPU that triggers the allocation.
-For
-.BR MPOL_DEFAULT ,
-the
-.I nodemask
-and
-.I maxnode
-arguments must be specify the empty set of nodes.
-.TP
-.B MPOL_BIND
-This mode specifies a strict policy that restricts memory allocation to
-the nodes specified in
-.IR nodemask .
-If
-.I nodemask
-specifies more than one node, page allocations will come from
-the node with sufficient free memory that is closest to
-the node where the allocation takes place.
-Pages will not be allocated from any node not specified in the
-IR nodemask .
-(Before Linux 2.6.26,
-.\" commit 19770b32609b6bf97a3dece2529089494cbfc549
-page allocations came from
-the node with the lowest numeric node ID first, until that node
-contained no free memory.
-Allocations then came from the node with the next highest
-node ID specified in
-.I nodemask
-and so forth, until none of the specified nodes contained free memory.)
-.TP
-.B MPOL_INTERLEAVE
-This mode specifies that page allocations be interleaved across the
-set of nodes specified in
-.IR nodemask .
-This optimizes for bandwidth instead of latency
-by spreading out pages and memory accesses to those pages across
-multiple nodes.
-To be effective the memory area should be fairly large,
-at least 1\ MB or bigger with a fairly uniform access pattern.
-Accesses to a single page of the area will still be limited to
-the memory bandwidth of a single node.
-.TP
-.B MPOL_PREFERRED
-This mode sets the preferred node for allocation.
-The kernel will try to allocate pages from this
-node first and fall back to other nodes if the
-preferred nodes is low on free memory.
-If
-.I nodemask
-specifies more than one node ID, the first node in the
-mask will be selected as the preferred node.
-If the
-.I nodemask
-and
-.I maxnode
-arguments specify the empty set, then the memory is allocated on
-the node of the CPU that triggered the allocation.
-.TP
-.BR MPOL_LOCAL " (since Linux 3.8)"
-.\" commit 479e2802d09f1e18a97262c4c6f8f17ae5884bd8
-.\" commit f2a07f40dbc603c15f8b06e6ec7f768af67b424f
-This mode specifies "local allocation"; the memory is allocated on
-the node of the CPU that triggered the allocation (the "local node").
-The
-.I nodemask
-and
-.I maxnode
-arguments must specify the empty set.
-If the "local node" is low on free memory,
-the kernel will try to allocate memory from other nodes.
-The kernel will allocate memory from the "local node"
-whenever memory for this node is available.
-If the "local node" is not allowed by the thread's current cpuset context,
-the kernel will try to allocate memory from other nodes.
-The kernel will allocate memory from the "local node" whenever
-it becomes allowed by the thread's current cpuset context.
-By contrast,
-.B MPOL_DEFAULT
-reverts to the memory policy of the thread (which may be set via
-.BR set_mempolicy (2));
-that policy may be something other than "local allocation".
-.PP
-If
-.B MPOL_MF_STRICT
-is passed in
-.I flags
-and
-.I mode
-is not
-.BR MPOL_DEFAULT ,
-then the call fails with the error
-.B EIO
-if the existing pages in the memory range don't follow the policy.
-.\" According to the kernel code, the following is not true
-.\" --Lee Schermerhorn
-.\" In Linux 2.6.16 or later the kernel will also try to move pages
-.\" to the requested node with this flag.
-.PP
-If
-.B MPOL_MF_MOVE
-is specified in
-.IR flags ,
-then the kernel will attempt to move all the existing pages
-in the memory range so that they follow the policy.
-Pages that are shared with other processes will not be moved.
-If
-.B MPOL_MF_STRICT
-is also specified, then the call fails with the error
-.B EIO
-if some pages could not be moved.
-If the
-.B MPOL_INTERLEAVE
-policy was specified,
-pages already residing on the specified nodes
-will not be moved such that they are interleaved.
-.PP
-If
-.B MPOL_MF_MOVE_ALL
-is passed in
-.IR flags ,
-then the kernel will attempt to move all existing pages in the memory range
-regardless of whether other processes use the pages.
-The calling thread must be privileged
-.RB ( CAP_SYS_NICE )
-to use this flag.
-If
-.B MPOL_MF_STRICT
-is also specified, then the call fails with the error
-.B EIO
-if some pages could not be moved.
-If the
-.B MPOL_INTERLEAVE
-policy was specified,
-pages already residing on the specified nodes
-will not be moved such that they are interleaved.
-.\" ---------------------------------------------------------------
-.SH RETURN VALUE
-On success,
-.BR mbind ()
-returns 0;
-on error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.\" ---------------------------------------------------------------
-.SH ERRORS
-.\" I think I got all of the error returns. --Lee Schermerhorn
-.TP
-.B EFAULT
-Part or all of the memory range specified by
-.I nodemask
-and
-.I maxnode
-points outside your accessible address space.
-Or, there was an unmapped hole in the specified memory range specified by
-.I addr
-and
-.IR len .
-.TP
-.B EINVAL
-An invalid value was specified for
-.I flags
-or
-.IR mode ;
-or
-.I addr + len
-was less than
-.IR addr ;
-or
-.I addr
-is not a multiple of the system page size.
-Or,
-.I mode
-is
-.B MPOL_DEFAULT
-and
-.I nodemask
-specified a nonempty set;
-or
-.I mode
-is
-.B MPOL_BIND
-or
-.B MPOL_INTERLEAVE
-and
-.I nodemask
-is empty.
-Or,
-.I maxnode
-exceeds a kernel-imposed limit.
-.\" As at 2.6.23, this limit is "a page worth of bits", e.g.,
-.\" 8 * 4096 bits, assuming a 4kB page size.
-Or,
-.I nodemask
-specifies one or more node IDs that are
-greater than the maximum supported node ID.
-Or, none of the node IDs specified by
-.I nodemask
-are on-line and allowed by the thread's current cpuset context,
-or none of the specified nodes contain memory.
-Or, the
-.I mode
-argument specified both
-.B MPOL_F_STATIC_NODES
-and
-.BR MPOL_F_RELATIVE_NODES .
-.TP
-.B EIO
-.B MPOL_MF_STRICT
-was specified and an existing page was already on a node
-that does not follow the policy;
-or
-.B MPOL_MF_MOVE
-or
-.B MPOL_MF_MOVE_ALL
-was specified and the kernel was unable to move all existing
-pages in the range.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B EPERM
-The
-.I flags
-argument included the
-.B MPOL_MF_MOVE_ALL
-flag and the caller does not have the
-.B CAP_SYS_NICE
-privilege.
-.\" ---------------------------------------------------------------
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.7.
-.PP
-Support for huge page policy was added with Linux 2.6.16.
-For interleave policy to be effective on huge page mappings the
-policied memory needs to be tens of megabytes or larger.
-.PP
-Before Linux 5.7.
-.\" commit dcf1763546d76c372f3136c8d6b2b6e77f140cf0
-.B MPOL_MF_STRICT
-was ignored on huge page mappings.
-.PP
-.B MPOL_MF_MOVE
-and
-.B MPOL_MF_MOVE_ALL
-are available only on Linux 2.6.16 and later.
-.SH NOTES
-For information on library support, see
-.BR numa (7).
-.PP
-NUMA policy is not supported on a memory-mapped file range
-that was mapped with the
-.B MAP_SHARED
-flag.
-.PP
-The
-.B MPOL_DEFAULT
-mode can have different effects for
-.BR mbind ()
-and
-.BR set_mempolicy (2).
-When
-.B MPOL_DEFAULT
-is specified for
-.BR set_mempolicy (2),
-the thread's memory policy reverts to the system default policy
-or local allocation.
-When
-.B MPOL_DEFAULT
-is specified for a range of memory using
-.BR mbind (),
-any pages subsequently allocated for that range will use
-the thread's memory policy, as set by
-.BR set_mempolicy (2).
-This effectively removes the explicit policy from the
-specified range, "falling back" to a possibly nondefault
-policy.
-To select explicit "local allocation" for a memory range,
-specify a
-.I mode
-of
-.B MPOL_LOCAL
-or
-.B MPOL_PREFERRED
-with an empty set of nodes.
-This method will work for
-.BR set_mempolicy (2),
-as well.
-.SH SEE ALSO
-.BR get_mempolicy (2),
-.BR getcpu (2),
-.BR mmap (2),
-.BR set_mempolicy (2),
-.BR shmat (2),
-.BR shmget (2),
-.BR numa (3),
-.BR cpuset (7),
-.BR numa (7),
-.BR numactl (8)
diff --git a/man2/membarrier.2 b/man2/membarrier.2
deleted file mode 100644
index eeb52f6de..000000000
--- a/man2/membarrier.2
+++ /dev/null
@@ -1,460 +0,0 @@
-'\" t
-.\" Copyright 2015-2017 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH membarrier 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-membarrier \- issue memory barriers on a set of threads
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.PP
-.BR "#include <linux/membarrier.h>" \
-" /* Definition of " MEMBARRIER_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_membarrier, int " cmd ", unsigned int " flags \
-", int " cpu_id );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR membarrier (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR membarrier ()
-system call helps reducing the overhead of the memory barrier
-instructions required to order memory accesses on multi-core systems.
-However, this system call is heavier than a memory barrier, so using it
-effectively is
-.I not
-as simple as replacing memory barriers with this
-system call, but requires understanding of the details below.
-.PP
-Use of memory barriers needs to be done taking into account that a
-memory barrier always needs to be either matched with its memory barrier
-counterparts, or that the architecture's memory model doesn't require the
-matching barriers.
-.PP
-There are cases where one side of the matching barriers (which we will
-refer to as "fast side") is executed much more often than the other
-(which we will refer to as "slow side").
-This is a prime target for the use of
-.BR membarrier ().
-The key idea is to replace, for these matching
-barriers, the fast-side memory barriers by simple compiler barriers,
-for example:
-.PP
-.in +4n
-.EX
-asm volatile ("" : : : "memory")
-.EE
-.in
-.PP
-and replace the slow-side memory barriers by calls to
-.BR membarrier ().
-.PP
-This will add overhead to the slow side, and remove overhead from the
-fast side, thus resulting in an overall performance increase as long as
-the slow side is infrequent enough that the overhead of the
-.BR membarrier ()
-calls does not outweigh the performance gain on the fast side.
-.PP
-The
-.I cmd
-argument is one of the following:
-.TP
-.BR MEMBARRIER_CMD_QUERY " (since Linux 4.3)"
-Query the set of supported commands.
-The return value of the call is a bit mask of supported
-commands.
-.BR MEMBARRIER_CMD_QUERY ,
-which has the value 0,
-is not itself included in this bit mask.
-This command is always supported (on kernels where
-.BR membarrier ()
-is provided).
-.TP
-.BR MEMBARRIER_CMD_GLOBAL " (since Linux 4.16)"
-Ensure that all threads from all processes on the system pass through a
-state where all memory accesses to user-space addresses match program
-order between entry to and return from the
-.BR membarrier ()
-system call.
-All threads on the system are targeted by this command.
-.TP
-.BR MEMBARRIER_CMD_GLOBAL_EXPEDITED " (since Linux 4.16)"
-Execute a memory barrier on all running threads of all processes that
-previously registered with
-.BR MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED .
-.IP
-Upon return from the system call, the calling thread has a guarantee that all
-running threads have passed through a state where all memory accesses to
-user-space addresses match program order between entry to and return
-from the system call (non-running threads are de facto in such a state).
-This guarantee is provided only for the threads of processes that
-previously registered with
-.BR MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED .
-.IP
-Given that registration is about the intent to receive the barriers, it
-is valid to invoke
-.B MEMBARRIER_CMD_GLOBAL_EXPEDITED
-from a process that has not employed
-.BR MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED .
-.IP
-The "expedited" commands complete faster than the non-expedited ones;
-they never block, but have the downside of causing extra overhead.
-.TP
-.BR MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED " (since Linux 4.16)"
-Register the process's intent to receive
-.B MEMBARRIER_CMD_GLOBAL_EXPEDITED
-memory barriers.
-.TP
-.BR MEMBARRIER_CMD_PRIVATE_EXPEDITED " (since Linux 4.14)"
-Execute a memory barrier on each running thread belonging to the same
-process as the calling thread.
-.IP
-Upon return from the system call, the calling
-thread has a guarantee that all its running thread siblings have passed
-through a state where all memory accesses to user-space addresses match
-program order between entry to and return from the system call
-(non-running threads are de facto in such a state).
-This guarantee is provided only for threads in
-the same process as the calling thread.
-.IP
-The "expedited" commands complete faster than the non-expedited ones;
-they never block, but have the downside of causing extra overhead.
-.IP
-A process must register its intent to use the private
-expedited command prior to using it.
-.TP
-.BR MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED " (since Linux 4.14)"
-Register the process's intent to use
-.BR MEMBARRIER_CMD_PRIVATE_EXPEDITED .
-.TP
-.BR MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE " (since Linux 4.16)"
-In addition to providing the memory ordering guarantees described in
-.BR MEMBARRIER_CMD_PRIVATE_EXPEDITED ,
-upon return from system call the calling thread has a guarantee that all its
-running thread siblings have executed a core serializing instruction.
-This guarantee is provided only for threads in
-the same process as the calling thread.
-.IP
-The "expedited" commands complete faster than the non-expedited ones,
-they never block, but have the downside of causing extra overhead.
-.IP
-A process must register its intent to use the private expedited sync
-core command prior to using it.
-.TP
-.BR MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE " (since Linux 4.16)"
-Register the process's intent to use
-.BR MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE .
-.TP
-.BR MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ " (since Linux 5.10)"
-Ensure the caller thread, upon return from system call, that all its
-running thread siblings have any currently running rseq critical sections
-restarted if
-.I flags
-parameter is 0; if
-.I flags
-parameter is
-.BR MEMBARRIER_CMD_FLAG_CPU ,
-then this operation is performed only on CPU indicated by
-.IR cpu_id .
-This guarantee is provided only for threads in
-the same process as the calling thread.
-.IP
-RSEQ membarrier is only available in the "private expedited" form.
-.IP
-A process must register its intent to use the private expedited rseq
-command prior to using it.
-.TP
-.BR MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ " (since Linux 5.10)"
-Register the process's intent to use
-.BR MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ .
-.TP
-.BR MEMBARRIER_CMD_SHARED " (since Linux 4.3)"
-This is an alias for
-.B MEMBARRIER_CMD_GLOBAL
-that exists for header backward compatibility.
-.PP
-The
-.I flags
-argument must be specified as 0 unless the command is
-.BR MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ ,
-in which case
-.I flags
-can be either 0 or
-.BR MEMBARRIER_CMD_FLAG_CPU .
-.PP
-The
-.I cpu_id
-argument is ignored unless
-.I flags
-is
-.BR MEMBARRIER_CMD_FLAG_CPU ,
-in which case it must specify the CPU targeted by this membarrier
-command.
-.PP
-All memory accesses performed in program order from each targeted thread
-are guaranteed to be ordered with respect to
-.BR membarrier ().
-.PP
-If we use the semantic
-.I barrier()
-to represent a compiler barrier forcing memory
-accesses to be performed in program order across the barrier, and
-.I smp_mb()
-to represent explicit memory barriers forcing full memory
-ordering across the barrier, we have the following ordering table for
-each pairing of
-.IR barrier() ,
-.BR membarrier (),
-and
-.IR smp_mb() .
-The pair ordering is detailed as (O: ordered, X: not ordered):
-.PP
-.RS
-.TS
-l c c c.
-\& barrier() smp_mb() membarrier()
-barrier() X X O
-smp_mb() X O O
-membarrier() O O O
-.TE
-.RE
-.SH RETURN VALUE
-On success, the
-.B MEMBARRIER_CMD_QUERY
-operation returns a bit mask of supported commands, and the
-.BR MEMBARRIER_CMD_GLOBAL ,
-.BR MEMBARRIER_CMD_GLOBAL_EXPEDITED ,
-.BR MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED ,
-.BR MEMBARRIER_CMD_PRIVATE_EXPEDITED ,
-.BR MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED ,
-.BR MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE ,
-and
-.B MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE
-operations return zero.
-On error, \-1 is returned,
-and
-.I errno
-is set to indicate the error.
-.PP
-For a given command, with
-.I flags
-set to 0, this system call is
-guaranteed to always return the same value until reboot.
-Further calls with the same arguments will lead to the same result.
-Therefore, with
-.I flags
-set to 0, error handling is required only for the first call to
-.BR membarrier ().
-.SH ERRORS
-.TP
-.B EINVAL
-.I cmd
-is invalid, or
-.I flags
-is nonzero, or the
-.B MEMBARRIER_CMD_GLOBAL
-command is disabled because the
-.I nohz_full
-CPU parameter has been set, or the
-.B MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE
-and
-.B MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE
-commands are not implemented by the architecture.
-.TP
-.B ENOSYS
-The
-.BR membarrier ()
-system call is not implemented by this kernel.
-.TP
-.B EPERM
-The current process was not registered prior to using private expedited
-commands.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 4.3.
-.PP
-Before Linux 5.10, the prototype was:
-.PP
-.in +4n
-.EX
-.BI "int membarrier(int " cmd ", int " flags );
-.EE
-.in
-.SH NOTES
-A memory barrier instruction is part of the instruction set of
-architectures with weakly ordered memory models.
-It orders memory
-accesses prior to the barrier and after the barrier with respect to
-matching barriers on other cores.
-For instance, a load fence can order
-loads prior to and following that fence with respect to stores ordered
-by store fences.
-.PP
-Program order is the order in which instructions are ordered in the
-program assembly code.
-.PP
-Examples where
-.BR membarrier ()
-can be useful include implementations
-of Read-Copy-Update libraries and garbage collectors.
-.SH EXAMPLES
-Assuming a multithreaded application where "fast_path()" is executed
-very frequently, and where "slow_path()" is executed infrequently, the
-following code (x86) can be transformed using
-.BR membarrier ():
-.PP
-.in +4n
-.\" SRC BEGIN (membarrier.c)
-.EX
-#include <stdlib.h>
-\&
-static volatile int a, b;
-\&
-static void
-fast_path(int *read_b)
-{
- a = 1;
- asm volatile ("mfence" : : : "memory");
- *read_b = b;
-}
-\&
-static void
-slow_path(int *read_a)
-{
- b = 1;
- asm volatile ("mfence" : : : "memory");
- *read_a = a;
-}
-\&
-int
-main(void)
-{
- int read_a, read_b;
-\&
- /*
- * Real applications would call fast_path() and slow_path()
- * from different threads. Call those from main() to keep
- * this example short.
- */
-\&
- slow_path(&read_a);
- fast_path(&read_b);
-\&
- /*
- * read_b == 0 implies read_a == 1 and
- * read_a == 0 implies read_b == 1.
- */
-\&
- if (read_b == 0 && read_a == 0)
- abort();
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.in
-.PP
-The code above transformed to use
-.BR membarrier ()
-becomes:
-.PP
-.in +4n
-.EX
-#define _GNU_SOURCE
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/syscall.h>
-#include <linux/membarrier.h>
-\&
-static volatile int a, b;
-\&
-static int
-membarrier(int cmd, unsigned int flags, int cpu_id)
-{
- return syscall(__NR_membarrier, cmd, flags, cpu_id);
-}
-\&
-static int
-init_membarrier(void)
-{
- int ret;
-\&
- /* Check that membarrier() is supported. */
-\&
- ret = membarrier(MEMBARRIER_CMD_QUERY, 0, 0);
- if (ret < 0) {
- perror("membarrier");
- return \-1;
- }
-\&
- if (!(ret & MEMBARRIER_CMD_GLOBAL)) {
- fprintf(stderr,
- "membarrier does not support MEMBARRIER_CMD_GLOBAL\en");
- return \-1;
- }
-\&
- return 0;
-}
-\&
-static void
-fast_path(int *read_b)
-{
- a = 1;
- asm volatile ("" : : : "memory");
- *read_b = b;
-}
-\&
-static void
-slow_path(int *read_a)
-{
- b = 1;
- membarrier(MEMBARRIER_CMD_GLOBAL, 0, 0);
- *read_a = a;
-}
-\&
-int
-main(int argc, char *argv[])
-{
- int read_a, read_b;
-\&
- if (init_membarrier())
- exit(EXIT_FAILURE);
-\&
- /*
- * Real applications would call fast_path() and slow_path()
- * from different threads. Call those from main() to keep
- * this example short.
- */
-\&
- slow_path(&read_a);
- fast_path(&read_b);
-\&
- /*
- * read_b == 0 implies read_a == 1 and
- * read_a == 0 implies read_b == 1.
- */
-\&
- if (read_b == 0 && read_a == 0)
- abort();
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.in
-.\" .SH SEE ALSO
-.\" FIXME See if the following syscalls make it into Linux 4.15 or later
-.\" .BR cpu_opv (2),
-.\" .BR rseq (2)
diff --git a/man2/memfd_create.2 b/man2/memfd_create.2
deleted file mode 100644
index 873163719..000000000
--- a/man2/memfd_create.2
+++ /dev/null
@@ -1,545 +0,0 @@
-.\" Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (C) 2014 David Herrmann <dh.herrmann@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH memfd_create 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-memfd_create \- create an anonymous file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <sys/mman.h>
-.PP
-.BI "int memfd_create(const char *" name ", unsigned int " flags ");"
-.fi
-.SH DESCRIPTION
-.BR memfd_create ()
-creates an anonymous file and returns a file descriptor that refers to it.
-The file behaves like a regular file, and so can be modified,
-truncated, memory-mapped, and so on.
-However, unlike a regular file,
-it lives in RAM and has a volatile backing storage.
-Once all references to the file are dropped, it is automatically released.
-Anonymous memory is used for all backing pages of the file.
-Therefore, files created by
-.BR memfd_create ()
-have the same semantics as other anonymous
-.\" David Herrmann:
-.\" memfd uses VM_NORESERVE so each page is accounted on first access.
-.\" This means, the overcommit-limits (see __vm_enough_memory()) and the
-.\" memory-cgroup limits (mem_cgroup_try_charge()) are applied. Note that
-.\" those are accounted on "current" and "current->mm", that is, the
-.\" process doing the first page access.
-memory allocations such as those allocated using
-.BR mmap (2)
-with the
-.B MAP_ANONYMOUS
-flag.
-.PP
-The initial size of the file is set to 0.
-Following the call, the file size should be set using
-.BR ftruncate (2).
-(Alternatively, the file may be populated by calls to
-.BR write (2)
-or similar.)
-.PP
-The name supplied in
-.I name
-is used as a filename and will be displayed
-as the target of the corresponding symbolic link in the directory
-.IR /proc/self/fd/ .
-The displayed name is always prefixed with
-.I memfd:
-and serves only for debugging purposes.
-Names do not affect the behavior of the file descriptor,
-and as such multiple files can have the same name without any side effects.
-.PP
-The following values may be bitwise ORed in
-.I flags
-to change the behavior of
-.BR memfd_create ():
-.TP
-.B MFD_CLOEXEC
-Set the close-on-exec
-.RB ( FD_CLOEXEC )
-flag on the new file descriptor.
-See the description of the
-.B O_CLOEXEC
-flag in
-.BR open (2)
-for reasons why this may be useful.
-.TP
-.B MFD_ALLOW_SEALING
-Allow sealing operations on this file.
-See the discussion of the
-.B F_ADD_SEALS
-and
-.B F_GET_SEALS
-operations in
-.BR fcntl (2),
-and also NOTES, below.
-The initial set of seals is empty.
-If this flag is not set, the initial set of seals will be
-.BR F_SEAL_SEAL ,
-meaning that no other seals can be set on the file.
-.\" FIXME Why is the MFD_ALLOW_SEALING behavior not simply the default?
-.\" Is it worth adding some text explaining this?
-.TP
-.BR MFD_HUGETLB " (since Linux 4.14)"
-.\" commit 749df87bd7bee5a79cef073f5d032ddb2b211de8
-The anonymous file will be created in the hugetlbfs filesystem using
-huge pages.
-See the Linux kernel source file
-.I Documentation/admin\-guide/mm/hugetlbpage.rst
-for more information about hugetlbfs.
-.\" commit 47b9012ecdc747f6936395265e677d41e11a31ff
-Specifying both
-.B MFD_HUGETLB
-and
-.B MFD_ALLOW_SEALING
-in
-.I flags
-is supported since Linux 4.16.
-.TP
-.BR MFD_HUGE_2MB ", " MFD_HUGE_1GB ", " "..."
-Used in conjunction with
-.B MFD_HUGETLB
-to select alternative hugetlb page sizes (respectively, 2\ MB, 1\ GB, ...)
-on systems that support multiple hugetlb page sizes.
-Definitions for known
-huge page sizes are included in the header file
-.I <linux/memfd.h>.
-.IP
-For details on encoding huge page sizes not included in the header file,
-see the discussion of the similarly named constants in
-.BR mmap (2).
-.PP
-Unused bits in
-.I flags
-must be 0.
-.PP
-As its return value,
-.BR memfd_create ()
-returns a new file descriptor that can be used to refer to the file.
-This file descriptor is opened for both reading and writing
-.RB ( O_RDWR )
-and
-.B O_LARGEFILE
-is set for the file descriptor.
-.PP
-With respect to
-.BR fork (2)
-and
-.BR execve (2),
-the usual semantics apply for the file descriptor created by
-.BR memfd_create ().
-A copy of the file descriptor is inherited by the child produced by
-.BR fork (2)
-and refers to the same file.
-The file descriptor is preserved across
-.BR execve (2),
-unless the close-on-exec flag has been set.
-.SH RETURN VALUE
-On success,
-.BR memfd_create ()
-returns a new file descriptor.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-The address in
-.I name
-points to invalid memory.
-.TP
-.B EINVAL
-.I flags
-included unknown bits.
-.TP
-.B EINVAL
-.I name
-was too long.
-(The limit is
-.\" NAME_MAX - strlen("memfd:")
-249 bytes, excluding the terminating null byte.)
-.TP
-.B EINVAL
-Both
-.B MFD_HUGETLB
-and
-.B MFD_ALLOW_SEALING
-were specified in
-.IR flags .
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOMEM
-There was insufficient memory to create a new anonymous file.
-.TP
-.B EPERM
-The
-.B MFD_HUGETLB
-flag was specified, but the caller was not privileged (did not have the
-.B CAP_IPC_LOCK
-capability)
-and is not a member of the
-.I sysctl_hugetlb_shm_group
-group; see the description of
-.I /proc/sys/vm/sysctl_hugetlb_shm_group
-in
-.BR proc (5).
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 3.17,
-glibc 2.27.
-.SH NOTES
-.\" See also http://lwn.net/Articles/593918/
-.\" and http://lwn.net/Articles/594919/ and http://lwn.net/Articles/591108/
-The
-.BR memfd_create ()
-system call provides a simple alternative to manually mounting a
-.BR tmpfs (5)
-filesystem and creating and opening a file in that filesystem.
-The primary purpose of
-.BR memfd_create ()
-is to create files and associated file descriptors that are
-used with the file-sealing APIs provided by
-.BR fcntl (2).
-.PP
-The
-.BR memfd_create ()
-system call also has uses without file sealing
-(which is why file-sealing is disabled, unless explicitly requested with the
-.B MFD_ALLOW_SEALING
-flag).
-In particular, it can be used as an alternative to creating files in
-.I tmp
-or as an alternative to using the
-.BR open (2)
-.B O_TMPFILE
-in cases where there is no intention to actually link the
-resulting file into the filesystem.
-.SS File sealing
-In the absence of file sealing,
-processes that communicate via shared memory must either trust each other,
-or take measures to deal with the possibility that an untrusted peer
-may manipulate the shared memory region in problematic ways.
-For example, an untrusted peer might modify the contents of the
-shared memory at any time, or shrink the shared memory region.
-The former possibility leaves the local process vulnerable to
-time-of-check-to-time-of-use race conditions
-(typically dealt with by copying data from
-the shared memory region before checking and using it).
-The latter possibility leaves the local process vulnerable to
-.B SIGBUS
-signals when an attempt is made to access a now-nonexistent
-location in the shared memory region.
-(Dealing with this possibility necessitates the use of a handler for the
-.B SIGBUS
-signal.)
-.PP
-Dealing with untrusted peers imposes extra complexity on
-code that employs shared memory.
-Memory sealing enables that extra complexity to be eliminated,
-by allowing a process to operate secure in the knowledge that
-its peer can't modify the shared memory in an undesired fashion.
-.PP
-An example of the usage of the sealing mechanism is as follows:
-.IP (1) 5
-The first process creates a
-.BR tmpfs (5)
-file using
-.BR memfd_create ().
-The call yields a file descriptor used in subsequent steps.
-.IP (2)
-The first process
-sizes the file created in the previous step using
-.BR ftruncate (2),
-maps it using
-.BR mmap (2),
-and populates the shared memory with the desired data.
-.IP (3)
-The first process uses the
-.BR fcntl (2)
-.B F_ADD_SEALS
-operation to place one or more seals on the file,
-in order to restrict further modifications on the file.
-(If placing the seal
-.BR F_SEAL_WRITE ,
-then it will be necessary to first unmap the shared writable mapping
-created in the previous step.
-Otherwise, behavior similar to
-.B F_SEAL_WRITE
-can be achieved by using
-.BR F_SEAL_FUTURE_WRITE ,
-which will prevent future writes via
-.BR mmap (2)
-and
-.BR write (2)
-from succeeding while keeping existing shared writable mappings).
-.IP (4)
-A second process obtains a file descriptor for the
-.BR tmpfs (5)
-file and maps it.
-Among the possible ways in which this could happen are the following:
-.RS
-.IP \[bu] 3
-The process that called
-.BR memfd_create ()
-could transfer the resulting file descriptor to the second process
-via a UNIX domain socket (see
-.BR unix (7)
-and
-.BR cmsg (3)).
-The second process then maps the file using
-.BR mmap (2).
-.IP \[bu]
-The second process is created via
-.BR fork (2)
-and thus automatically inherits the file descriptor and mapping.
-(Note that in this case and the next,
-there is a natural trust relationship between the two processes,
-since they are running under the same user ID.
-Therefore, file sealing would not normally be necessary.)
-.IP \[bu]
-The second process opens the file
-.IR /proc/ pid /fd/ fd,
-where
-.I <pid>
-is the PID of the first process (the one that called
-.BR memfd_create ()),
-and
-.I <fd>
-is the number of the file descriptor returned by the call to
-.BR memfd_create ()
-in that process.
-The second process then maps the file using
-.BR mmap (2).
-.RE
-.IP (5)
-The second process uses the
-.BR fcntl (2)
-.B F_GET_SEALS
-operation to retrieve the bit mask of seals
-that has been applied to the file.
-This bit mask can be inspected in order to determine
-what kinds of restrictions have been placed on file modifications.
-If desired, the second process can apply further seals
-to impose additional restrictions (so long as the
-.B F_SEAL_SEAL
-seal has not yet been applied).
-.SH EXAMPLES
-Below are shown two example programs that demonstrate the use of
-.BR memfd_create ()
-and the file sealing API.
-.PP
-The first program,
-.IR t_memfd_create.c ,
-creates a
-.BR tmpfs (5)
-file using
-.BR memfd_create (),
-sets a size for the file, maps it into memory,
-and optionally places some seals on the file.
-The program accepts up to three command-line arguments,
-of which the first two are required.
-The first argument is the name to associate with the file,
-the second argument is the size to be set for the file,
-and the optional third argument is a string of characters that specify
-seals to be set on the file.
-.PP
-The second program,
-.IR t_get_seals.c ,
-can be used to open an existing file that was created via
-.BR memfd_create ()
-and inspect the set of seals that have been applied to that file.
-.PP
-The following shell session demonstrates the use of these programs.
-First we create a
-.BR tmpfs (5)
-file and set some seals on it:
-.PP
-.in +4n
-.EX
-$ \fB./t_memfd_create my_memfd_file 4096 sw &\fP
-[1] 11775
-PID: 11775; fd: 3; /proc/11775/fd/3
-.EE
-.in
-.PP
-At this point, the
-.I t_memfd_create
-program continues to run in the background.
-From another program, we can obtain a file descriptor for the
-file created by
-.BR memfd_create ()
-by opening the
-.IR /proc/ pid /fd
-file that corresponds to the file descriptor opened by
-.BR memfd_create ().
-Using that pathname, we inspect the content of the
-.IR /proc/ pid /fd
-symbolic link, and use our
-.I t_get_seals
-program to view the seals that have been placed on the file:
-.PP
-.in +4n
-.EX
-$ \fBreadlink /proc/11775/fd/3\fP
-/memfd:my_memfd_file (deleted)
-$ \fB./t_get_seals /proc/11775/fd/3\fP
-Existing seals: WRITE SHRINK
-.EE
-.in
-.SS Program source: t_memfd_create.c
-\&
-.\" SRC BEGIN (t_memfd_create.c)
-.EX
-#define _GNU_SOURCE
-#include <err.h>
-#include <fcntl.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/mman.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int fd;
- char *name, *seals_arg;
- ssize_t len;
- unsigned int seals;
-\&
- if (argc < 3) {
- fprintf(stderr, "%s name size [seals]\en", argv[0]);
- fprintf(stderr, "\et\[aq]seals\[aq] can contain any of the "
- "following characters:\en");
- fprintf(stderr, "\et\etg \- F_SEAL_GROW\en");
- fprintf(stderr, "\et\ets \- F_SEAL_SHRINK\en");
- fprintf(stderr, "\et\etw \- F_SEAL_WRITE\en");
- fprintf(stderr, "\et\etW \- F_SEAL_FUTURE_WRITE\en");
- fprintf(stderr, "\et\etS \- F_SEAL_SEAL\en");
- exit(EXIT_FAILURE);
- }
-\&
- name = argv[1];
- len = atoi(argv[2]);
- seals_arg = argv[3];
-\&
- /* Create an anonymous file in tmpfs; allow seals to be
- placed on the file. */
-\&
- fd = memfd_create(name, MFD_ALLOW_SEALING);
- if (fd == \-1)
- err(EXIT_FAILURE, "memfd_create");
-\&
- /* Size the file as specified on the command line. */
-\&
- if (ftruncate(fd, len) == \-1)
- err(EXIT_FAILURE, "truncate");
-\&
- printf("PID: %jd; fd: %d; /proc/%jd/fd/%d\en",
- (intmax_t) getpid(), fd, (intmax_t) getpid(), fd);
-\&
- /* Code to map the file and populate the mapping with data
- omitted. */
-\&
- /* If a \[aq]seals\[aq] command\-line argument was supplied, set some
- seals on the file. */
-\&
- if (seals_arg != NULL) {
- seals = 0;
-\&
- if (strchr(seals_arg, \[aq]g\[aq]) != NULL)
- seals |= F_SEAL_GROW;
- if (strchr(seals_arg, \[aq]s\[aq]) != NULL)
- seals |= F_SEAL_SHRINK;
- if (strchr(seals_arg, \[aq]w\[aq]) != NULL)
- seals |= F_SEAL_WRITE;
- if (strchr(seals_arg, \[aq]W\[aq]) != NULL)
- seals |= F_SEAL_FUTURE_WRITE;
- if (strchr(seals_arg, \[aq]S\[aq]) != NULL)
- seals |= F_SEAL_SEAL;
-\&
- if (fcntl(fd, F_ADD_SEALS, seals) == \-1)
- err(EXIT_FAILURE, "fcntl");
- }
-\&
- /* Keep running, so that the file created by memfd_create()
- continues to exist. */
-\&
- pause();
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SS Program source: t_get_seals.c
-\&
-.\" SRC BEGIN (t_get_seals.c)
-.EX
-#define _GNU_SOURCE
-#include <err.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int fd;
- unsigned int seals;
-\&
- if (argc != 2) {
- fprintf(stderr, "%s /proc/PID/fd/FD\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- fd = open(argv[1], O_RDWR);
- if (fd == \-1)
- err(EXIT_FAILURE, "open");
-\&
- seals = fcntl(fd, F_GET_SEALS);
- if (seals == \-1)
- err(EXIT_FAILURE, "fcntl");
-\&
- printf("Existing seals:");
- if (seals & F_SEAL_SEAL)
- printf(" SEAL");
- if (seals & F_SEAL_GROW)
- printf(" GROW");
- if (seals & F_SEAL_WRITE)
- printf(" WRITE");
- if (seals & F_SEAL_FUTURE_WRITE)
- printf(" FUTURE_WRITE");
- if (seals & F_SEAL_SHRINK)
- printf(" SHRINK");
- printf("\en");
-\&
- /* Code to map the file and access the contents of the
- resulting mapping omitted. */
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR fcntl (2),
-.BR ftruncate (2),
-.BR memfd_secret (2),
-.BR mmap (2),
-.BR shmget (2),
-.BR shm_open (3)
diff --git a/man2/memfd_secret.2 b/man2/memfd_secret.2
deleted file mode 100644
index 552985c51..000000000
--- a/man2/memfd_secret.2
+++ /dev/null
@@ -1,204 +0,0 @@
-.\" Copyright (c) 2021, IBM Corporation.
-.\" Written by Mike Rapoport <rppt@linux.ibm.com>
-.\"
-.\" Based on memfd_create(2) man page
-.\" Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (C) 2014 David Herrmann <dh.herrmann@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH memfd_secret 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-memfd_secret \- create an anonymous RAM-based file
-to access secret memory regions
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.PP
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_memfd_secret, unsigned int " flags );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR memfd_secret (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-.BR memfd_secret ()
-creates an anonymous RAM-based file and returns a file descriptor
-that refers to it.
-The file provides a way to create and access memory regions
-with stronger protection than usual RAM-based files and
-anonymous memory mappings.
-Once all open references to the file are closed,
-it is automatically released.
-The initial size of the file is set to 0.
-Following the call, the file size should be set using
-.BR ftruncate (2).
-.PP
-The memory areas backing the file created with
-.BR memfd_secret (2)
-are visible only to the processes that have access to the file descriptor.
-The memory region is removed from the kernel page tables
-and only the page tables of the processes holding the file descriptor
-map the corresponding physical memory.
-(Thus, the pages in the region can't be accessed by the kernel itself,
-so that, for example, pointers to the region can't be passed to
-system calls.)
-.PP
-The following values may be bitwise ORed in
-.I flags
-to control the behavior of
-.BR memfd_secret ():
-.TP
-.B FD_CLOEXEC
-Set the close-on-exec flag on the new file descriptor,
-which causes the region to be removed from the process on
-.BR execve (2).
-See the description of the
-.B O_CLOEXEC
-flag in
-.BR open (2)
-.PP
-As its return value,
-.BR memfd_secret ()
-returns a new file descriptor that refers to an anonymous file.
-This file descriptor is opened for both reading and writing
-.RB ( O_RDWR )
-and
-.B O_LARGEFILE
-is set for the file descriptor.
-.PP
-With respect to
-.BR fork (2)
-and
-.BR execve (2),
-the usual semantics apply for the file descriptor created by
-.BR memfd_secret ().
-A copy of the file descriptor is inherited by the child produced by
-.BR fork (2)
-and refers to the same file.
-The file descriptor is preserved across
-.BR execve (2),
-unless the close-on-exec flag has been set.
-.PP
-The memory region is locked into memory in the same way as with
-.BR mlock (2),
-so that it will never be written into swap,
-and hibernation is inhibited for as long as any
-.BR memfd_secret ()
-descriptions exist.
-However the implementation of
-.BR memfd_secret ()
-will not try to populate the whole range during the
-.BR mmap (2)
-call that attaches the region into the process's address space;
-instead, the pages are only actually allocated
-as they are faulted in.
-The amount of memory allowed for memory mappings
-of the file descriptor obeys the same rules as
-.BR mlock (2)
-and cannot exceed
-.BR RLIMIT_MEMLOCK .
-.SH RETURN VALUE
-On success,
-.BR memfd_secret ()
-returns a new file descriptor.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I flags
-included unknown bits.
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B EMFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOMEM
-There was insufficient memory to create a new anonymous file.
-.TP
-.B ENOSYS
-.BR memfd_secret ()
-is not implemented on this architecture,
-or has not been enabled on the kernel command-line with
-.BR secretmem_enable =1.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 5.14.
-.SH NOTES
-The
-.BR memfd_secret ()
-system call is designed to allow a user-space process
-to create a range of memory that is inaccessible to anybody else -
-kernel included.
-There is no 100% guarantee that kernel won't be able to access
-memory ranges backed by
-.BR memfd_secret ()
-in any circumstances, but nevertheless,
-it is much harder to exfiltrate data from these regions.
-.PP
-.BR memfd_secret ()
-provides the following protections:
-.IP \[bu] 3
-Enhanced protection
-(in conjunction with all the other in-kernel attack prevention systems)
-against ROP attacks.
-Absence of any in-kernel primitive for accessing memory backed by
-.BR memfd_secret ()
-means that one-gadget ROP attack
-can't work to perform data exfiltration.
-The attacker would need to find enough ROP gadgets
-to reconstruct the missing page table entries,
-which significantly increases difficulty of the attack,
-especially when other protections like the kernel stack size limit
-and address space layout randomization are in place.
-.IP \[bu]
-Prevent cross-process user-space memory exposures.
-Once a region for a
-.BR memfd_secret ()
-memory mapping is allocated,
-the user can't accidentally pass it into the kernel
-to be transmitted somewhere.
-The memory pages in this region cannot be accessed via the direct map
-and they are disallowed in get_user_pages.
-.IP \[bu]
-Harden against exploited kernel flaws.
-In order to access memory areas backed by
-.BR memfd_secret (),
-a kernel-side attack would need to
-either walk the page tables and create new ones,
-or spawn a new privileged user-space process to perform
-secrets exfiltration using
-.BR ptrace (2).
-.PP
-The way
-.BR memfd_secret ()
-allocates and locks the memory may impact overall system performance,
-therefore the system call is disabled by default and only available
-if the system administrator turned it on using
-"secretmem.enable=y" kernel parameter.
-.PP
-To prevent potential data leaks of memory regions backed by
-.BR memfd_secret ()
-from a hybernation image,
-hybernation is prevented when there are active
-.BR memfd_secret ()
-users.
-.SH SEE ALSO
-.BR fcntl (2),
-.BR ftruncate (2),
-.BR mlock (2),
-.BR memfd_create (2),
-.BR mmap (2),
-.BR setrlimit (2)
diff --git a/man2/migrate_pages.2 b/man2/migrate_pages.2
deleted file mode 100644
index babc08b83..000000000
--- a/man2/migrate_pages.2
+++ /dev/null
@@ -1,183 +0,0 @@
-.\" Copyright 2009 Intel Corporation
-.\" Author: Andi Kleen
-.\" Based on the move_pages manpage which was
-.\" This manpage is Copyright (C) 2006 Silicon Graphics, Inc.
-.\" Christoph Lameter
-.\"
-.\" %%%LICENSE_START(VERBATIM_TWO_PARA)
-.\" Permission is granted to make and distribute verbatim copies of this
-.\" manual provided the copyright notice and this permission notice are
-.\" preserved on all copies.
-.\"
-.\" Permission is granted to copy and distribute modified versions of this
-.\" manual under the conditions for verbatim copying, provided that the
-.\" entire resulting derived work is distributed under the terms of a
-.\" permission notice identical to this one.
-.\" %%%LICENSE_END
-.\"
-.TH migrate_pages 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-migrate_pages \- move all pages in a process to another set of nodes
-.SH LIBRARY
-NUMA (Non-Uniform Memory Access) policy library
-.RI ( libnuma ", " \-lnuma )
-.SH SYNOPSIS
-.nf
-.B #include <numaif.h>
-.PP
-.BI "long migrate_pages(int " pid ", unsigned long " maxnode,
-.BI " const unsigned long *" old_nodes,
-.BI " const unsigned long *" new_nodes );
-.fi
-.SH DESCRIPTION
-.BR migrate_pages ()
-attempts to move all pages of the process
-.I pid
-that are in memory nodes
-.I old_nodes
-to the memory nodes in
-.IR new_nodes .
-Pages not located in any node in
-.I old_nodes
-will not be migrated.
-As far as possible,
-the kernel maintains the relative topology relationship inside
-.I old_nodes
-during the migration to
-.IR new_nodes .
-.PP
-The
-.I old_nodes
-and
-.I new_nodes
-arguments are pointers to bit masks of node numbers, with up to
-.I maxnode
-bits in each mask.
-These masks are maintained as arrays of unsigned
-.I long
-integers (in the last
-.I long
-integer, the bits beyond those specified by
-.I maxnode
-are ignored).
-The
-.I maxnode
-argument is the maximum node number in the bit mask plus one (this is the same
-as in
-.BR mbind (2),
-but different from
-.BR select (2)).
-.PP
-The
-.I pid
-argument is the ID of the process whose pages are to be moved.
-To move pages in another process,
-the caller must be privileged
-.RB ( CAP_SYS_NICE )
-or the real or effective user ID of the calling process must match the
-real or saved-set user ID of the target process.
-If
-.I pid
-is 0, then
-.BR migrate_pages ()
-moves pages of the calling process.
-.PP
-Pages shared with another process will be moved only if the initiating
-process has the
-.B CAP_SYS_NICE
-privilege.
-.SH RETURN VALUE
-On success
-.BR migrate_pages ()
-returns the number of pages that could not be moved
-(i.e., a return of zero means that all pages were successfully moved).
-On error, it returns \-1, and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-Part or all of the memory range specified by
-.IR old_nodes / new_nodes
-and
-.I maxnode
-points outside your accessible address space.
-.TP
-.B EINVAL
-The value specified by
-.I maxnode
-exceeds a kernel-imposed limit.
-.\" As at 3.5, this limit is "a page worth of bits", e.g.,
-.\" 8 * 4096 bits, assuming a 4kB page size.
-Or,
-.I old_nodes
-or
-.I new_nodes
-specifies one or more node IDs that are
-greater than the maximum supported node ID.
-Or, none of the node IDs specified by
-.I new_nodes
-are on-line and allowed by the process's current cpuset context,
-or none of the specified nodes contain memory.
-.TP
-.B EPERM
-Insufficient privilege
-.RB ( CAP_SYS_NICE )
-to move pages of the process specified by
-.IR pid ,
-or insufficient privilege
-.RB ( CAP_SYS_NICE )
-to access the specified target nodes.
-.TP
-.B ESRCH
-No process matching
-.I pid
-could be found.
-.\" FIXME Document the other errors that can occur for migrate_pages()
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.16.
-.SH NOTES
-For information on library support, see
-.BR numa (7).
-.PP
-Use
-.BR get_mempolicy (2)
-with the
-.B MPOL_F_MEMS_ALLOWED
-flag to obtain the set of nodes that are allowed by
-the calling process's cpuset.
-Note that this information is subject to change at any
-time by manual or automatic reconfiguration of the cpuset.
-.PP
-Use of
-.BR migrate_pages ()
-may result in pages whose location
-(node) violates the memory policy established for the
-specified addresses (see
-.BR mbind (2))
-and/or the specified process (see
-.BR set_mempolicy (2)).
-That is, memory policy does not constrain the destination
-nodes used by
-.BR migrate_pages ().
-.PP
-The
-.I <numaif.h>
-header is not included with glibc, but requires installing
-.I libnuma\-devel
-or a similar package.
-.SH SEE ALSO
-.BR get_mempolicy (2),
-.BR mbind (2),
-.BR set_mempolicy (2),
-.BR numa (3),
-.BR numa_maps (5),
-.BR cpuset (7),
-.BR numa (7),
-.BR migratepages (8),
-.BR numastat (8)
-.PP
-.I Documentation/vm/page_migration.rst
-in the Linux kernel source tree
diff --git a/man2/mincore.2 b/man2/mincore.2
deleted file mode 100644
index 167841aac..000000000
--- a/man2/mincore.2
+++ /dev/null
@@ -1,158 +0,0 @@
-.\" Copyright (C) 2001 Bert Hubert <ahu@ds9a.nl>
-.\" and Copyright (C) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Created Sun Jun 3 17:23:32 2001 by bert hubert <ahu@ds9a.nl>
-.\" Slightly adapted, following comments by Hugh Dickins, aeb, 2001-06-04.
-.\" Modified, 20 May 2003, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified, 30 Apr 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" 2005-04-05 mtk, Fixed error descriptions
-.\" after message from <gordon.jin@intel.com>
-.\" 2007-01-08 mtk, rewrote various parts
-.\"
-.TH mincore 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mincore \- determine whether pages are resident in memory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/mman.h>
-.PP
-.BI "int mincore(void " addr [. length "], size_t " length ", unsigned char *" vec );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR mincore ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-.BR mincore ()
-returns a vector that indicates whether pages
-of the calling process's virtual memory are resident in core (RAM),
-and so will not cause a disk access (page fault) if referenced.
-The kernel returns residency information about the pages
-starting at the address
-.IR addr ,
-and continuing for
-.I length
-bytes.
-.PP
-The
-.I addr
-argument must be a multiple of the system page size.
-The
-.I length
-argument need not be a multiple of the page size,
-but since residency information is returned for whole pages,
-.I length
-is effectively rounded up to the next multiple of the page size.
-One may obtain the page size
-.RB ( PAGE_SIZE )
-using
-.IR sysconf(_SC_PAGESIZE) .
-.PP
-The
-.I vec
-argument must point to an array containing at least
-.I "(length+PAGE_SIZE\-1) / PAGE_SIZE"
-bytes.
-On return,
-the least significant bit of each byte will be set if
-the corresponding page is currently resident in memory,
-and be clear otherwise.
-(The settings of the other bits in each byte are undefined;
-these bits are reserved for possible later use.)
-Of course the information returned in
-.I vec
-is only a snapshot: pages that are not
-locked in memory can come and go at any moment, and the contents of
-.I vec
-may already be stale by the time this call returns.
-.SH RETURN VALUE
-On success,
-.BR mincore ()
-returns zero.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.B EAGAIN
-kernel is temporarily out of resources.
-.TP
-.B EFAULT
-.I vec
-points to an invalid address.
-.TP
-.B EINVAL
-.I addr
-is not a multiple of the page size.
-.TP
-.B ENOMEM
-.I length
-is greater than
-.RI ( TASK_SIZE " \- " addr ).
-(This could occur if a negative value is specified for
-.IR length ,
-since that value will be interpreted as a large
-unsigned integer.)
-In Linux 2.6.11 and earlier, the error
-.B EINVAL
-was returned for this condition.
-.TP
-.B ENOMEM
-.I addr
-to
-.I addr
-+
-.I length
-contained unmapped memory.
-.SH STANDARDS
-None.
-.SH HISTORY
-Linux 2.3.99pre1,
-glibc 2.2.
-.PP
-First appeared in 4.4BSD.
-.PP
-NetBSD, FreeBSD, OpenBSD, Solaris 8,
-AIX 5.1, SunOS 4.1.
-.SH BUGS
-Before Linux 2.6.21,
-.BR mincore ()
-did not return correct information for
-.B MAP_PRIVATE
-mappings, or for nonlinear mappings (established using
-.BR remap_file_pages (2)).
-.\" Linux (up to now, 2.6.5),
-.\" .B mincore
-.\" does not return correct information for MAP_PRIVATE mappings:
-.\" for a MAP_PRIVATE file mapping,
-.\" .B mincore
-.\" returns the residency of the file pages, rather than any
-.\" modified process-private pages that have been copied on write;
-.\" for a MAP_PRIVATE mapping of
-.\" .IR /dev/zero ,
-.\" .B mincore
-.\" always reports pages as nonresident;
-.\" and for a MAP_PRIVATE, MAP_ANONYMOUS mapping,
-.\" .B mincore
-.\" always fails with the error
-.\" .BR ENOMEM .
-.SH SEE ALSO
-.BR fincore (1),
-.BR madvise (2),
-.BR mlock (2),
-.BR mmap (2),
-.BR posix_fadvise (2),
-.BR posix_madvise (3)
diff --git a/man2/mkdir.2 b/man2/mkdir.2
deleted file mode 100644
index 3d643fbbf..000000000
--- a/man2/mkdir.2
+++ /dev/null
@@ -1,250 +0,0 @@
-.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\" and Copyright (C) 1993 Michael Haardt
-.\" and Copyright (C) 1993,1994 Ian Jackson
-.\" and Copyright (C) 2006, 2014 Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH mkdir 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mkdir, mkdirat \- create a directory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/stat.h>
-.\" .B #include <unistd.h>
-.PP
-.BI "int mkdir(const char *" pathname ", mode_t " mode );
-.PP
-.BR "#include <fcntl.h> " "/* Definition of AT_* constants */"
-.B #include <sys/stat.h>
-.PP
-.BI "int mkdirat(int " dirfd ", const char *" pathname ", mode_t " mode );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR mkdirat ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _ATFILE_SOURCE
-.fi
-.SH DESCRIPTION
-.BR mkdir ()
-attempts to create a directory named
-.IR pathname .
-.PP
-The argument
-.I mode
-specifies the mode for the new directory (see
-.BR inode (7)).
-It is modified by the process's
-.I umask
-in the usual way: in the absence of a default ACL, the mode of the
-created directory is
-.RI ( mode " & \[ti]" umask " & 0777)."
-Whether other
-.I mode
-bits are honored for the created directory depends on the operating system.
-For Linux, see NOTES below.
-.PP
-The newly created directory will be owned by the effective user ID of the
-process.
-If the directory containing the file has the set-group-ID
-bit set, or if the filesystem is mounted with BSD group semantics
-.RI ( "mount \-o bsdgroups"
-or, synonymously
-.IR "mount \-o grpid" ),
-the new directory will inherit the group ownership from its parent;
-otherwise it will be owned by the effective group ID of the process.
-.PP
-If the parent directory has the set-group-ID bit set, then so will the
-newly created directory.
-.\"
-.\"
-.SS mkdirat()
-The
-.BR mkdirat ()
-system call operates in exactly the same way as
-.BR mkdir (),
-except for the differences described here.
-.PP
-If the pathname given in
-.I pathname
-is relative, then it is interpreted relative to the directory
-referred to by the file descriptor
-.I dirfd
-(rather than relative to the current working directory of
-the calling process, as is done by
-.BR mkdir ()
-for a relative pathname).
-.PP
-If
-.I pathname
-is relative and
-.I dirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I pathname
-is interpreted relative to the current working
-directory of the calling process (like
-.BR mkdir ()).
-.PP
-If
-.I pathname
-is absolute, then
-.I dirfd
-is ignored.
-.PP
-See
-.BR openat (2)
-for an explanation of the need for
-.BR mkdirat ().
-.SH RETURN VALUE
-.BR mkdir ()
-and
-.BR mkdirat ()
-return zero on success.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-The parent directory does not allow write permission to the process,
-or one of the directories in
-.I pathname
-did not allow search permission.
-(See also
-.BR path_resolution (7).)
-.TP
-.B EBADF
-.RB ( mkdirat ())
-.I pathname
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B EDQUOT
-The user's quota of disk blocks or inodes on the filesystem has been
-exhausted.
-.TP
-.B EEXIST
-.I pathname
-already exists (not necessarily as a directory).
-This includes the case where
-.I pathname
-is a symbolic link, dangling or not.
-.TP
-.B EFAULT
-.IR pathname " points outside your accessible address space."
-.TP
-.B EINVAL
-The final component ("basename") of the new directory's
-.I pathname
-is invalid
-(e.g., it contains characters not permitted by the underlying filesystem).
-.TP
-.B ELOOP
-Too many symbolic links were encountered in resolving
-.IR pathname .
-.TP
-.B EMLINK
-The number of links to the parent directory would exceed
-.BR LINK_MAX .
-.TP
-.B ENAMETOOLONG
-.IR pathname " was too long."
-.TP
-.B ENOENT
-A directory component in
-.I pathname
-does not exist or is a dangling symbolic link.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOSPC
-The device containing
-.I pathname
-has no room for the new directory.
-.TP
-.B ENOSPC
-The new directory cannot be created because the user's disk quota is
-exhausted.
-.TP
-.B ENOTDIR
-A component used as a directory in
-.I pathname
-is not, in fact, a directory.
-.TP
-.B ENOTDIR
-.RB ( mkdirat ())
-.I pathname
-is relative and
-.I dirfd
-is a file descriptor referring to a file other than a directory.
-.TP
-.B EPERM
-The filesystem containing
-.I pathname
-does not support the creation of directories.
-.TP
-.B EROFS
-.I pathname
-refers to a file on a read-only filesystem.
-.SH VERSIONS
-Under Linux, apart from the permission bits, the
-.B S_ISVTX
-.I mode
-bit is also honored.
-.SS glibc notes
-On older kernels where
-.BR mkdirat ()
-is unavailable, the glibc wrapper function falls back to the use of
-.BR mkdir ().
-When
-.I pathname
-is a relative pathname,
-glibc constructs a pathname based on the symbolic link in
-.I /proc/self/fd
-that corresponds to the
-.I dirfd
-argument.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR mkdir ()
-SVr4, BSD, POSIX.1-2001.
-.\" SVr4 documents additional EIO, EMULTIHOP
-.TP
-.BR mkdirat ()
-Linux 2.6.16,
-glibc 2.4.
-.SH NOTES
-There are many infelicities in the protocol underlying NFS.
-Some of these affect
-.BR mkdir ().
-.SH SEE ALSO
-.BR mkdir (1),
-.BR chmod (2),
-.BR chown (2),
-.BR mknod (2),
-.BR mount (2),
-.BR rmdir (2),
-.BR stat (2),
-.BR umask (2),
-.BR unlink (2),
-.BR acl (5),
-.BR path_resolution (7)
diff --git a/man2/mkdirat.2 b/man2/mkdirat.2
deleted file mode 100644
index 467b98a8b..000000000
--- a/man2/mkdirat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/mkdir.2
diff --git a/man2/mknod.2 b/man2/mknod.2
deleted file mode 100644
index 9d17ca88f..000000000
--- a/man2/mknod.2
+++ /dev/null
@@ -1,302 +0,0 @@
-.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\" and Copyright (C) 1993 Michael Haardt
-.\" and Copyright (C) 1993,1994 Ian Jackson
-.\" and Copyright (C) 2006, 2014, Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" Modified 1996-08-18 by urs
-.\" Modified 2003-04-23 by Michael Kerrisk
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH mknod 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mknod, mknodat \- create a special or ordinary file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/stat.h>
-.PP
-.BI "int mknod(const char *" pathname ", mode_t " mode ", dev_t " dev );
-.PP
-.BR "#include <fcntl.h> " "/* Definition of AT_* constants */"
-.B #include <sys/stat.h>
-.PP
-.BI "int mknodat(int " dirfd ", const char *" pathname ", mode_t " mode \
-", dev_t " dev );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR mknod ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The system call
-.BR mknod ()
-creates a filesystem node (file, device special file, or
-named pipe) named
-.IR pathname ,
-with attributes specified by
-.I mode
-and
-.IR dev .
-.PP
-The
-.I mode
-argument specifies both the file mode to use and the type of node
-to be created.
-It should be a combination (using bitwise OR) of one of the file types
-listed below and zero or more of the file mode bits listed in
-.BR inode (7).
-.PP
-The file mode is modified by the process's
-.I umask
-in the usual way: in the absence of a default ACL, the permissions of the
-created node are
-.RI ( mode " & \[ti]" umask ).
-.PP
-The file type must be one of
-.BR S_IFREG ,
-.BR S_IFCHR ,
-.BR S_IFBLK ,
-.BR S_IFIFO ,
-or
-.B S_IFSOCK
-.\" (S_IFSOCK since Linux 1.2.4)
-to specify a regular file (which will be created empty), character
-special file, block special file, FIFO (named pipe), or UNIX domain socket,
-respectively.
-(Zero file type is equivalent to type
-.BR S_IFREG .)
-.PP
-If the file type is
-.B S_IFCHR
-or
-.BR S_IFBLK ,
-then
-.I dev
-specifies the major and minor numbers of the newly created device
-special file
-.RB ( makedev (3)
-may be useful to build the value for
-.IR dev );
-otherwise it is ignored.
-.PP
-If
-.I pathname
-already exists, or is a symbolic link, this call fails with an
-.B EEXIST
-error.
-.PP
-The newly created node will be owned by the effective user ID of the
-process.
-If the directory containing the node has the set-group-ID
-bit set, or if the filesystem is mounted with BSD group semantics, the
-new node will inherit the group ownership from its parent directory;
-otherwise it will be owned by the effective group ID of the process.
-.\"
-.\"
-.SS mknodat()
-The
-.BR mknodat ()
-system call operates in exactly the same way as
-.BR mknod (),
-except for the differences described here.
-.PP
-If the pathname given in
-.I pathname
-is relative, then it is interpreted relative to the directory
-referred to by the file descriptor
-.I dirfd
-(rather than relative to the current working directory of
-the calling process, as is done by
-.BR mknod ()
-for a relative pathname).
-.PP
-If
-.I pathname
-is relative and
-.I dirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I pathname
-is interpreted relative to the current working
-directory of the calling process (like
-.BR mknod ()).
-.PP
-If
-.I pathname
-is absolute, then
-.I dirfd
-is ignored.
-.PP
-See
-.BR openat (2)
-for an explanation of the need for
-.BR mknodat ().
-.SH RETURN VALUE
-.BR mknod ()
-and
-.BR mknodat ()
-return zero on success.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-The parent directory does not allow write permission to the process,
-or one of the directories in the path prefix of
-.I pathname
-did not allow search permission.
-(See also
-.BR path_resolution (7).)
-.TP
-.B EBADF
-.RB ( mknodat ())
-.I pathname
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B EDQUOT
-The user's quota of disk blocks or inodes on the filesystem has been
-exhausted.
-.TP
-.B EEXIST
-.I pathname
-already exists.
-This includes the case where
-.I pathname
-is a symbolic link, dangling or not.
-.TP
-.B EFAULT
-.IR pathname " points outside your accessible address space."
-.TP
-.B EINVAL
-.I mode
-requested creation of something other than a regular file, device
-special file, FIFO or socket.
-.TP
-.B ELOOP
-Too many symbolic links were encountered in resolving
-.IR pathname .
-.TP
-.B ENAMETOOLONG
-.IR pathname " was too long."
-.TP
-.B ENOENT
-A directory component in
-.I pathname
-does not exist or is a dangling symbolic link.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOSPC
-The device containing
-.I pathname
-has no room for the new node.
-.TP
-.B ENOTDIR
-A component used as a directory in
-.I pathname
-is not, in fact, a directory.
-.TP
-.B ENOTDIR
-.RB ( mknodat ())
-.I pathname
-is relative and
-.I dirfd
-is a file descriptor referring to a file other than a directory.
-.TP
-.B EPERM
-.I mode
-requested creation of something other than a regular file,
-FIFO (named pipe), or UNIX domain socket, and the caller
-is not privileged (Linux: does not have the
-.B CAP_MKNOD
-capability);
-.\" For UNIX domain sockets and regular files, EPERM is returned only in
-.\" Linux 2.2 and earlier; in Linux 2.4 and later, unprivileged can
-.\" use mknod() to make these files.
-also returned if the filesystem containing
-.I pathname
-does not support the type of node requested.
-.TP
-.B EROFS
-.I pathname
-refers to a file on a read-only filesystem.
-.SH VERSIONS
-POSIX.1-2001 says: "The only portable use of
-.BR mknod ()
-is to create a FIFO-special file.
-If
-.I mode
-is not
-.B S_IFIFO
-or
-.I dev
-is not 0, the behavior of
-.BR mknod ()
-is unspecified."
-However, nowadays one should never use
-.BR mknod ()
-for this purpose; one should use
-.BR mkfifo (3),
-a function especially defined for this purpose.
-.PP
-Under Linux,
-.BR mknod ()
-cannot be used to create directories.
-One should make directories with
-.BR mkdir (2).
-.\" and one should make UNIX domain sockets with socket(2) and bind(2).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR mknod ()
-SVr4, 4.4BSD, POSIX.1-2001 (but see VERSIONS).
-.\" The Linux version differs from the SVr4 version in that it
-.\" does not require root permission to create pipes, also in that no
-.\" EMULTIHOP, ENOLINK, or EINTR error is documented.
-.TP
-.BR mknodat ()
-Linux 2.6.16,
-glibc 2.4.
-POSIX.1-2008.
-.SH NOTES
-There are many infelicities in the protocol underlying NFS.
-Some of these affect
-.BR mknod ()
-and
-.BR mknodat ().
-.SH SEE ALSO
-.BR mknod (1),
-.BR chmod (2),
-.BR chown (2),
-.BR fcntl (2),
-.BR mkdir (2),
-.BR mount (2),
-.BR socket (2),
-.BR stat (2),
-.BR umask (2),
-.BR unlink (2),
-.BR makedev (3),
-.BR mkfifo (3),
-.BR acl (5),
-.BR path_resolution (7)
diff --git a/man2/mknodat.2 b/man2/mknodat.2
deleted file mode 100644
index 3db228243..000000000
--- a/man2/mknodat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/mknod.2
diff --git a/man2/mlock.2 b/man2/mlock.2
deleted file mode 100644
index 513c161b6..000000000
--- a/man2/mlock.2
+++ /dev/null
@@ -1,507 +0,0 @@
-.\" Copyright (C) Michael Kerrisk, 2004
-.\" using some material drawn from earlier man pages
-.\" written by Thomas Kuhn, Copyright 1996
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH mlock 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mlock, mlock2, munlock, mlockall, munlockall \- lock and unlock memory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/mman.h>
-.PP
-.BI "int mlock(const void " addr [. len "], size_t " len );
-.BI "int mlock2(const void " addr [. len "], size_t " len ", \
-unsigned int " flags );
-.BI "int munlock(const void " addr [. len "], size_t " len );
-.PP
-.BI "int mlockall(int " flags );
-.B int munlockall(void);
-.fi
-.SH DESCRIPTION
-.BR mlock (),
-.BR mlock2 (),
-and
-.BR mlockall ()
-lock part or all of the calling process's virtual address
-space into RAM, preventing that memory from being paged to the
-swap area.
-.PP
-.BR munlock ()
-and
-.BR munlockall ()
-perform the converse operation,
-unlocking part or all of the calling process's virtual address space,
-so that pages in the specified virtual address range
-can be swapped out again if required by the kernel memory manager.
-.PP
-Memory locking and unlocking are performed in units of whole pages.
-.SS mlock(), mlock2(), and munlock()
-.BR mlock ()
-locks pages in the address range starting at
-.I addr
-and continuing for
-.I len
-bytes.
-All pages that contain a part of the specified address range are
-guaranteed to be resident in RAM when the call returns successfully;
-the pages are guaranteed to stay in RAM until later unlocked.
-.PP
-.BR mlock2 ()
-.\" commit a8ca5d0ecbdde5cc3d7accacbd69968b0c98764e
-.\" commit de60f5f10c58d4f34b68622442c0e04180367f3f
-.\" commit b0f205c2a3082dd9081f9a94e50658c5fa906ff1
-also locks pages in the specified range starting at
-.I addr
-and continuing for
-.I len
-bytes.
-However, the state of the pages contained in that range after the call
-returns successfully will depend on the value in the
-.I flags
-argument.
-.PP
-The
-.I flags
-argument can be either 0 or the following constant:
-.TP
-.B MLOCK_ONFAULT
-Lock pages that are currently resident and mark the entire range so
-that the remaining nonresident pages are locked when they are populated
-by a page fault.
-.PP
-If
-.I flags
-is 0,
-.BR mlock2 ()
-behaves exactly the same as
-.BR mlock ().
-.PP
-.BR munlock ()
-unlocks pages in the address range starting at
-.I addr
-and continuing for
-.I len
-bytes.
-After this call, all pages that contain a part of the specified
-memory range can be moved to external swap space again by the kernel.
-.SS mlockall() and munlockall()
-.BR mlockall ()
-locks all pages mapped into the address space of the
-calling process.
-This includes the pages of the code, data, and stack
-segment, as well as shared libraries, user space kernel data, shared
-memory, and memory-mapped files.
-All mapped pages are guaranteed
-to be resident in RAM when the call returns successfully;
-the pages are guaranteed to stay in RAM until later unlocked.
-.PP
-The
-.I flags
-argument is constructed as the bitwise OR of one or more of the
-following constants:
-.TP
-.B MCL_CURRENT
-Lock all pages which are currently mapped into the address space of
-the process.
-.TP
-.B MCL_FUTURE
-Lock all pages which will become mapped into the address space of the
-process in the future.
-These could be, for instance, new pages required
-by a growing heap and stack as well as new memory-mapped files or
-shared memory regions.
-.TP
-.BR MCL_ONFAULT " (since Linux 4.4)"
-Used together with
-.BR MCL_CURRENT ,
-.BR MCL_FUTURE ,
-or both.
-Mark all current (with
-.BR MCL_CURRENT )
-or future (with
-.BR MCL_FUTURE )
-mappings to lock pages when they are faulted in.
-When used with
-.BR MCL_CURRENT ,
-all present pages are locked, but
-.BR mlockall ()
-will not fault in non-present pages.
-When used with
-.BR MCL_FUTURE ,
-all future mappings will be marked to lock pages when they are faulted
-in, but they will not be populated by the lock when the mapping is
-created.
-.B MCL_ONFAULT
-must be used with either
-.B MCL_CURRENT
-or
-.B MCL_FUTURE
-or both.
-.PP
-If
-.B MCL_FUTURE
-has been specified, then a later system call (e.g.,
-.BR mmap (2),
-.BR sbrk (2),
-.BR malloc (3)),
-may fail if it would cause the number of locked bytes to exceed
-the permitted maximum (see below).
-In the same circumstances, stack growth may likewise fail:
-the kernel will deny stack expansion and deliver a
-.B SIGSEGV
-signal to the process.
-.PP
-.BR munlockall ()
-unlocks all pages mapped into the address space of the
-calling process.
-.SH RETURN VALUE
-On success, these system calls return 0.
-On error, \-1 is returned,
-.I errno
-is set to indicate the error,
-and no changes are made to any locks in the
-address space of the process.
-.SH ERRORS
-.\"SVr4 documents an additional EAGAIN error code.
-.TP
-.B EAGAIN
-.RB ( mlock (),
-.BR mlock2 (),
-and
-.BR munlock ())
-Some or all of the specified address range could not be locked.
-.TP
-.B EINVAL
-.RB ( mlock (),
-.BR mlock2 (),
-and
-.BR munlock ())
-The result of the addition
-.IR addr + len
-was less than
-.I addr
-(e.g., the addition may have resulted in an overflow).
-.TP
-.B EINVAL
-.RB ( mlock2 ())
-Unknown \fIflags\fP were specified.
-.TP
-.B EINVAL
-.RB ( mlockall ())
-Unknown \fIflags\fP were specified or
-.B MCL_ONFAULT
-was specified without either
-.B MCL_FUTURE
-or
-.BR MCL_CURRENT .
-.TP
-.B EINVAL
-(Not on Linux)
-.I addr
-was not a multiple of the page size.
-.TP
-.B ENOMEM
-.RB ( mlock (),
-.BR mlock2 (),
-and
-.BR munlock ())
-Some of the specified address range does not correspond to mapped
-pages in the address space of the process.
-.TP
-.B ENOMEM
-.RB ( mlock (),
-.BR mlock2 (),
-and
-.BR munlock ())
-Locking or unlocking a region would result in the total number of
-mappings with distinct attributes (e.g., locked versus unlocked)
-exceeding the allowed maximum.
-.\" I.e., the number of VMAs would exceed the 64kB maximum
-(For example, unlocking a range in the middle of a currently locked
-mapping would result in three mappings:
-two locked mappings at each end and an unlocked mapping in the middle.)
-.TP
-.B ENOMEM
-(Linux 2.6.9 and later) the caller had a nonzero
-.B RLIMIT_MEMLOCK
-soft resource limit, but tried to lock more memory than the limit
-permitted.
-This limit is not enforced if the process is privileged
-.RB ( CAP_IPC_LOCK ).
-.TP
-.B ENOMEM
-(Linux 2.4 and earlier) the calling process tried to lock more than
-half of RAM.
-.\" In the case of mlock(), this check is somewhat buggy: it doesn't
-.\" take into account whether the to-be-locked range overlaps with
-.\" already locked pages. Thus, suppose we allocate
-.\" (num_physpages / 4 + 1) of memory, and lock those pages once using
-.\" mlock(), and then lock the *same* page range a second time.
-.\" In the case, the second mlock() call will fail, since the check
-.\" calculates that the process is trying to lock (num_physpages / 2 + 2)
-.\" pages, which of course is not true. (MTK, Nov 04, kernel 2.4.28)
-.TP
-.B EPERM
-The caller is not privileged, but needs privilege
-.RB ( CAP_IPC_LOCK )
-to perform the requested operation.
-.TP
-.B EPERM
-.RB ( munlockall ())
-(Linux 2.6.8 and earlier) The caller was not privileged
-.RB ( CAP_IPC_LOCK ).
-.SH VERSIONS
-.SS Linux
-Under Linux,
-.BR mlock (),
-.BR mlock2 (),
-and
-.BR munlock ()
-automatically round
-.I addr
-down to the nearest page boundary.
-However, the POSIX.1 specification of
-.BR mlock ()
-and
-.BR munlock ()
-allows an implementation to require that
-.I addr
-is page aligned, so portable applications should ensure this.
-.PP
-The
-.I VmLck
-field of the Linux-specific
-.IR /proc/ pid /status
-file shows how many kilobytes of memory the process with ID
-.I PID
-has locked using
-.BR mlock (),
-.BR mlock2 (),
-.BR mlockall (),
-and
-.BR mmap (2)
-.BR MAP_LOCKED .
-.SH STANDARDS
-.TP
-.BR mlock ()
-.TQ
-.BR munlock ()
-.TQ
-.BR mlockall ()
-.TQ
-.BR munlockall ()
-POSIX.1-2008.
-.TP
-.BR mlock2 ()
-Linux.
-.PP
-On POSIX systems on which
-.BR mlock ()
-and
-.BR munlock ()
-are available,
-.B _POSIX_MEMLOCK_RANGE
-is defined in \fI<unistd.h>\fP and the number of bytes in a page
-can be determined from the constant
-.B PAGESIZE
-(if defined) in \fI<limits.h>\fP or by calling
-.IR sysconf(_SC_PAGESIZE) .
-.PP
-On POSIX systems on which
-.BR mlockall ()
-and
-.BR munlockall ()
-are available,
-.B _POSIX_MEMLOCK
-is defined in \fI<unistd.h>\fP to a value greater than 0.
-(See also
-.BR sysconf (3).)
-.\" POSIX.1-2001: It shall be defined to -1 or 0 or 200112L.
-.\" -1: unavailable, 0: ask using sysconf().
-.\" glibc defines it to 1.
-.SH HISTORY
-.TP
-.BR mlock ()
-.TQ
-.BR munlock ()
-.TQ
-.BR mlockall ()
-.TQ
-.BR munlockall ()
-POSIX.1-2001, POSIX.1-2008, SVr4.
-.TP
-.BR mlock2 ()
-Linux 4.4,
-glibc 2.27.
-.SH NOTES
-Memory locking has two main applications: real-time algorithms and
-high-security data processing.
-Real-time applications require
-deterministic timing, and, like scheduling, paging is one major cause
-of unexpected program execution delays.
-Real-time applications will
-usually also switch to a real-time scheduler with
-.BR sched_setscheduler (2).
-Cryptographic security software often handles critical bytes like
-passwords or secret keys as data structures.
-As a result of paging,
-these secrets could be transferred onto a persistent swap store medium,
-where they might be accessible to the enemy long after the security
-software has erased the secrets in RAM and terminated.
-(But be aware that the suspend mode on laptops and some desktop
-computers will save a copy of the system's RAM to disk, regardless
-of memory locks.)
-.PP
-Real-time processes that are using
-.BR mlockall ()
-to prevent delays on page faults should reserve enough
-locked stack pages before entering the time-critical section,
-so that no page fault can be caused by function calls.
-This can be achieved by calling a function that allocates a
-sufficiently large automatic variable (an array) and writes to the
-memory occupied by this array in order to touch these stack pages.
-This way, enough pages will be mapped for the stack and can be
-locked into RAM.
-The dummy writes ensure that not even copy-on-write
-page faults can occur in the critical section.
-.PP
-Memory locks are not inherited by a child created via
-.BR fork (2)
-and are automatically removed (unlocked) during an
-.BR execve (2)
-or when the process terminates.
-The
-.BR mlockall ()
-.B MCL_FUTURE
-and
-.B MCL_FUTURE | MCL_ONFAULT
-settings are not inherited by a child created via
-.BR fork (2)
-and are cleared during an
-.BR execve (2).
-.PP
-Note that
-.BR fork (2)
-will prepare the address space for a copy-on-write operation.
-The consequence is that any write access that follows will cause
-a page fault that in turn may cause high latencies for a real-time process.
-Therefore, it is crucial not to invoke
-.BR fork (2)
-after an
-.BR mlockall ()
-or
-.BR mlock ()
-operation\[em]not even from a thread which runs at a low priority within
-a process which also has a thread running at elevated priority.
-.PP
-The memory lock on an address range is automatically removed
-if the address range is unmapped via
-.BR munmap (2).
-.PP
-Memory locks do not stack, that is, pages which have been locked several times
-by calls to
-.BR mlock (),
-.BR mlock2 (),
-or
-.BR mlockall ()
-will be unlocked by a single call to
-.BR munlock ()
-for the corresponding range or by
-.BR munlockall ().
-Pages which are mapped to several locations or by several processes stay
-locked into RAM as long as they are locked at least at one location or by
-at least one process.
-.PP
-If a call to
-.BR mlockall ()
-which uses the
-.B MCL_FUTURE
-flag is followed by another call that does not specify this flag, the
-changes made by the
-.B MCL_FUTURE
-call will be lost.
-.PP
-The
-.BR mlock2 ()
-.B MLOCK_ONFAULT
-flag and the
-.BR mlockall ()
-.B MCL_ONFAULT
-flag allow efficient memory locking for applications that deal with
-large mappings where only a (small) portion of pages in the mapping are touched.
-In such cases, locking all of the pages in a mapping would incur
-a significant penalty for memory locking.
-.SS Limits and permissions
-In Linux 2.6.8 and earlier,
-a process must be privileged
-.RB ( CAP_IPC_LOCK )
-in order to lock memory and the
-.B RLIMIT_MEMLOCK
-soft resource limit defines a limit on how much memory the process may lock.
-.PP
-Since Linux 2.6.9, no limits are placed on the amount of memory
-that a privileged process can lock and the
-.B RLIMIT_MEMLOCK
-soft resource limit instead defines a limit on how much memory an
-unprivileged process may lock.
-.SH BUGS
-In Linux 4.8 and earlier,
-a bug in the kernel's accounting of locked memory for unprivileged processes
-(i.e., without
-.BR CAP_IPC_LOCK )
-meant that if the region specified by
-.I addr
-and
-.I len
-overlapped an existing lock,
-then the already locked bytes in the overlapping region were counted twice
-when checking against the limit.
-Such double accounting could incorrectly calculate a "total locked memory"
-value for the process that exceeded the
-.B RLIMIT_MEMLOCK
-limit, with the result that
-.BR mlock ()
-and
-.BR mlock2 ()
-would fail on requests that should have succeeded.
-This bug was fixed
-.\" commit 0cf2f6f6dc605e587d2c1120f295934c77e810e8
-in Linux 4.9.
-.PP
-In Linux 2.4 series of kernels up to and including Linux 2.4.17,
-a bug caused the
-.BR mlockall ()
-.B MCL_FUTURE
-flag to be inherited across a
-.BR fork (2).
-This was rectified in Linux 2.4.18.
-.PP
-Since Linux 2.6.9, if a privileged process calls
-.I mlockall(MCL_FUTURE)
-and later drops privileges (loses the
-.B CAP_IPC_LOCK
-capability by, for example,
-setting its effective UID to a nonzero value),
-then subsequent memory allocations (e.g.,
-.BR mmap (2),
-.BR brk (2))
-will fail if the
-.B RLIMIT_MEMLOCK
-resource limit is encountered.
-.\" See the following LKML thread:
-.\" http://marc.theaimsgroup.com/?l=linux-kernel&m=113801392825023&w=2
-.\" "Rationale for RLIMIT_MEMLOCK"
-.\" 23 Jan 2006
-.SH SEE ALSO
-.BR mincore (2),
-.BR mmap (2),
-.BR setrlimit (2),
-.BR shmctl (2),
-.BR sysconf (3),
-.BR proc (5),
-.BR capabilities (7)
diff --git a/man2/mlock2.2 b/man2/mlock2.2
deleted file mode 100644
index 5e5b3c741..000000000
--- a/man2/mlock2.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/mlock.2
diff --git a/man2/mlockall.2 b/man2/mlockall.2
deleted file mode 100644
index 5e5b3c741..000000000
--- a/man2/mlockall.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/mlock.2
diff --git a/man2/mmap.2 b/man2/mmap.2
deleted file mode 100644
index 3d8181ebb..000000000
--- a/man2/mmap.2
+++ /dev/null
@@ -1,1037 +0,0 @@
-'\" t
-.\" Copyright (C) 1996 Andries Brouwer <aeb@cwi.nl>
-.\" and Copyright (C) 2006, 2007 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 1997-01-31 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2000-03-25 by Jim Van Zandt <jrv@vanzandt.mv.com>
-.\" Modified 2001-10-04 by John Levon <moz@compsoc.man.ac.uk>
-.\" Modified 2003-02-02 by Andi Kleen <ak@muc.de>
-.\" Modified 2003-05-21 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" MAP_LOCKED works from Linux 2.5.37
-.\" Modified 2004-06-17 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2004-09-11 by aeb
-.\" Modified 2004-12-08, from Eric Estievenart <eric.estievenart@free.fr>
-.\" Modified 2004-12-08, mtk, formatting tidy-ups
-.\" Modified 2006-12-04, mtk, various parts rewritten
-.\" 2007-07-10, mtk, Added an example program.
-.\" 2008-11-18, mtk, document MAP_STACK
-.\"
-.TH mmap 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mmap, munmap \- map or unmap files or devices into memory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/mman.h>
-.PP
-.BI "void *mmap(void " addr [. length "], size_t " length \
-", int " prot ", int " flags ,
-.BI " int " fd ", off_t " offset );
-.BI "int munmap(void " addr [. length "], size_t " length );
-.fi
-.PP
-See NOTES for information on feature test macro requirements.
-.SH DESCRIPTION
-.BR mmap ()
-creates a new mapping in the virtual address space of
-the calling process.
-The starting address for the new mapping is specified in
-.IR addr .
-The
-.I length
-argument specifies the length of the mapping (which must be greater than 0).
-.PP
-If
-.I addr
-is NULL,
-then the kernel chooses the (page-aligned) address
-at which to create the mapping;
-this is the most portable method of creating a new mapping.
-If
-.I addr
-is not NULL,
-then the kernel takes it as a hint about where to place the mapping;
-on Linux, the kernel will pick a nearby page boundary (but always above
-or equal to the value specified by
-.IR /proc/sys/vm/mmap_min_addr )
-and attempt to create the mapping there.
-If another mapping already exists there, the kernel picks a new address that
-may or may not depend on the hint.
-.\" Before Linux 2.6.24, the address was rounded up to the next page
-.\" boundary; since Linux 2.6.24, it is rounded down!
-The address of the new mapping is returned as the result of the call.
-.PP
-The contents of a file mapping (as opposed to an anonymous mapping; see
-.B MAP_ANONYMOUS
-below), are initialized using
-.I length
-bytes starting at offset
-.I offset
-in the file (or other object) referred to by the file descriptor
-.IR fd .
-.I offset
-must be a multiple of the page size as returned by
-.IR sysconf(_SC_PAGE_SIZE) .
-.PP
-After the
-.BR mmap ()
-call has returned, the file descriptor,
-.IR fd ,
-can be closed immediately without invalidating the mapping.
-.PP
-The
-.I prot
-argument describes the desired memory protection of the mapping
-(and must not conflict with the open mode of the file).
-It is either
-.B PROT_NONE
-or the bitwise OR of one or more of the following flags:
-.TP 1.1i
-.B PROT_EXEC
-Pages may be executed.
-.TP
-.B PROT_READ
-Pages may be read.
-.TP
-.B PROT_WRITE
-Pages may be written.
-.TP
-.B PROT_NONE
-Pages may not be accessed.
-.\"
-.SS The flags argument
-The
-.I flags
-argument determines whether updates to the mapping
-are visible to other processes mapping the same region,
-and whether updates are carried through to the underlying file.
-This behavior is determined by including exactly one
-of the following values in
-.IR flags :
-.TP
-.B MAP_SHARED
-Share this mapping.
-Updates to the mapping are visible to other processes mapping the same region,
-and (in the case of file-backed mappings)
-are carried through to the underlying file.
-(To precisely control when updates are carried through
-to the underlying file requires the use of
-.BR msync (2).)
-.TP
-.BR MAP_SHARED_VALIDATE " (since Linux 4.15)"
-This flag provides the same behavior as
-.B MAP_SHARED
-except that
-.B MAP_SHARED
-mappings ignore unknown flags in
-.IR flags .
-By contrast, when creating a mapping using
-.BR MAP_SHARED_VALIDATE ,
-the kernel verifies all passed flags are known and fails the
-mapping with the error
-.B EOPNOTSUPP
-for unknown flags.
-This mapping type is also required to be able to use some mapping flags
-(e.g.,
-.BR MAP_SYNC ).
-.TP
-.B MAP_PRIVATE
-Create a private copy-on-write mapping.
-Updates to the mapping are not visible to other processes
-mapping the same file, and are not carried through to
-the underlying file.
-It is unspecified whether changes made to the file after the
-.BR mmap ()
-call are visible in the mapped region.
-.PP
-Both
-.B MAP_SHARED
-and
-.B MAP_PRIVATE
-are described in POSIX.1-2001 and POSIX.1-2008.
-.B MAP_SHARED_VALIDATE
-is a Linux extension.
-.PP
-In addition, zero or more of the following values can be ORed in
-.IR flags :
-.TP
-.BR MAP_32BIT " (since Linux 2.4.20, 2.6)"
-Put the mapping into the first 2 Gigabytes of the process address space.
-This flag is supported only on x86-64, for 64-bit programs.
-It was added to allow thread stacks to be allocated somewhere
-in the first 2\ GB of memory,
-so as to improve context-switch performance on some early
-64-bit processors.
-.\" See http://lwn.net/Articles/294642 "Tangled up in threads", 19 Aug 08
-Modern x86-64 processors no longer have this performance problem,
-so use of this flag is not required on those systems.
-The
-.B MAP_32BIT
-flag is ignored when
-.B MAP_FIXED
-is set.
-.TP
-.B MAP_ANON
-Synonym for
-.BR MAP_ANONYMOUS ;
-provided for compatibility with other implementations.
-.TP
-.B MAP_ANONYMOUS
-The mapping is not backed by any file;
-its contents are initialized to zero.
-The
-.I fd
-argument is ignored;
-however, some implementations require
-.I fd
-to be \-1 if
-.B MAP_ANONYMOUS
-(or
-.BR MAP_ANON )
-is specified,
-and portable applications should ensure this.
-The
-.I offset
-argument should be zero.
-.\" See the pgoff overflow check in do_mmap().
-.\" See the offset check in sys_mmap in arch/x86/kernel/sys_x86_64.c.
-Support for
-.B MAP_ANONYMOUS
-in conjunction with
-.B MAP_SHARED
-was added in Linux 2.4.
-.TP
-.B MAP_DENYWRITE
-This flag is ignored.
-.\" Introduced in 1.1.36, removed in 1.3.24.
-(Long ago\[em]Linux 2.0 and earlier\[em]it signaled
-that attempts to write to the underlying file should fail with
-.BR ETXTBSY .
-But this was a source of denial-of-service attacks.)
-.TP
-.B MAP_EXECUTABLE
-This flag is ignored.
-.\" Introduced in 1.1.38, removed in 1.3.24. Flag tested in proc_follow_link.
-.\" (Long ago, it signaled that the underlying file is an executable.
-.\" However, that information was not really used anywhere.)
-.\" Linus talked about DOS related to MAP_EXECUTABLE, but he was thinking of
-.\" MAP_DENYWRITE?
-.TP
-.B MAP_FILE
-Compatibility flag.
-Ignored.
-.\" On some systems, this was required as the opposite of
-.\" MAP_ANONYMOUS -- mtk, 1 May 2007
-.TP
-.B MAP_FIXED
-Don't interpret
-.I addr
-as a hint: place the mapping at exactly that address.
-.I addr
-must be suitably aligned: for most architectures a multiple of the page
-size is sufficient; however, some architectures may impose additional
-restrictions.
-If the memory region specified by
-.I addr
-and
-.I length
-overlaps pages of any existing mapping(s), then the overlapped
-part of the existing mapping(s) will be discarded.
-If the specified address cannot be used,
-.BR mmap ()
-will fail.
-.IP
-Software that aspires to be portable should use the
-.B MAP_FIXED
-flag with care,
-keeping in mind that the exact layout of a process's memory mappings
-is allowed to change significantly between Linux versions,
-C library versions, and operating system releases.
-.I Carefully read the discussion of this flag in NOTES!
-.TP
-.BR MAP_FIXED_NOREPLACE " (since Linux 4.17)"
-.\" commit a4ff8e8620d3f4f50ac4b41e8067b7d395056843
-This flag provides behavior that is similar to
-.B MAP_FIXED
-with respect to the
-.I addr
-enforcement, but differs in that
-.B MAP_FIXED_NOREPLACE
-never clobbers a preexisting mapped range.
-If the requested range would collide with an existing mapping,
-then this call fails with the error
-.B EEXIST.
-This flag can therefore be used as a way to atomically
-(with respect to other threads) attempt to map an address range:
-one thread will succeed; all others will report failure.
-.IP
-Note that older kernels which do not recognize the
-.B MAP_FIXED_NOREPLACE
-flag will typically (upon detecting a collision with a preexisting mapping)
-fall back to a
-.RB \[lq]non- MAP_FIXED \[rq]
-type of behavior:
-they will return an address that is different from the requested address.
-Therefore, backward-compatible software
-should check the returned address against the requested address.
-.TP
-.B MAP_GROWSDOWN
-This flag is used for stacks.
-It indicates to the kernel virtual memory system that the mapping
-should extend downward in memory.
-The return address is one page lower than the memory area that is
-actually created in the process's virtual address space.
-Touching an address in the "guard" page below the mapping will cause
-the mapping to grow by a page.
-This growth can be repeated until the mapping grows to within a
-page of the high end of the next lower mapping,
-at which point touching the "guard" page will result in a
-.B SIGSEGV
-signal.
-.TP
-.BR MAP_HUGETLB " (since Linux 2.6.32)"
-Allocate the mapping using "huge" pages.
-See the Linux kernel source file
-.I Documentation/admin\-guide/mm/hugetlbpage.rst
-for further information, as well as NOTES, below.
-.TP
-.BR MAP_HUGE_2MB ", " MAP_HUGE_1GB " (since Linux 3.8)"
-.\" See https://lwn.net/Articles/533499/
-Used in conjunction with
-.B MAP_HUGETLB
-to select alternative hugetlb page sizes (respectively, 2\ MB and 1\ GB)
-on systems that support multiple hugetlb page sizes.
-.IP
-More generally, the desired huge page size can be configured by encoding
-the base-2 logarithm of the desired page size in the six bits at the offset
-.BR MAP_HUGE_SHIFT .
-(A value of zero in this bit field provides the default huge page size;
-the default huge page size can be discovered via the
-.I Hugepagesize
-field exposed by
-.IR /proc/meminfo .)
-Thus, the above two constants are defined as:
-.IP
-.in +4n
-.EX
-#define MAP_HUGE_2MB (21 << MAP_HUGE_SHIFT)
-#define MAP_HUGE_1GB (30 << MAP_HUGE_SHIFT)
-.EE
-.in
-.IP
-The range of huge page sizes that are supported by the system
-can be discovered by listing the subdirectories in
-.IR /sys/kernel/mm/hugepages .
-.TP
-.BR MAP_LOCKED " (since Linux 2.5.37)"
-Mark the mapped region to be locked in the same way as
-.BR mlock (2).
-This implementation will try to populate (prefault) the whole range but the
-.BR mmap ()
-call doesn't fail with
-.B ENOMEM
-if this fails.
-Therefore major faults might happen later on.
-So the semantic is not as strong as
-.BR mlock (2).
-One should use
-.BR mmap ()
-plus
-.BR mlock (2)
-when major faults are not acceptable after the initialization of the mapping.
-The
-.B MAP_LOCKED
-flag is ignored in older kernels.
-.\" If set, the mapped pages will not be swapped out.
-.TP
-.BR MAP_NONBLOCK " (since Linux 2.5.46)"
-This flag is meaningful only in conjunction with
-.BR MAP_POPULATE .
-Don't perform read-ahead:
-create page tables entries only for pages
-that are already present in RAM.
-Since Linux 2.6.23,
-.\" commit 54cb8821de07f2ffcd28c380ce9b93d5784b40d7
-this flag causes
-.B MAP_POPULATE
-to do nothing.
-One day, the combination of
-.B MAP_POPULATE
-and
-.B MAP_NONBLOCK
-may be reimplemented.
-.TP
-.B MAP_NORESERVE
-Do not reserve swap space for this mapping.
-When swap space is reserved, one has the guarantee
-that it is possible to modify the mapping.
-When swap space is not reserved one might get
-.B SIGSEGV
-upon a write
-if no physical memory is available.
-See also the discussion of the file
-.I /proc/sys/vm/overcommit_memory
-in
-.BR proc (5).
-Before Linux 2.6, this flag had effect only for
-private writable mappings.
-.TP
-.BR MAP_POPULATE " (since Linux 2.5.46)"
-Populate (prefault) page tables for a mapping.
-For a file mapping, this causes read-ahead on the file.
-This will help to reduce blocking on page faults later.
-The
-.BR mmap ()
-call doesn't fail if the mapping cannot be populated (for example, due
-to limitations on the number of mapped huge pages when using
-.BR MAP_HUGETLB ).
-Support for
-.B MAP_POPULATE
-in conjunction with private mappings was added in Linux 2.6.23.
-.TP
-.BR MAP_STACK " (since Linux 2.6.27)"
-Allocate the mapping at an address suitable for a process
-or thread stack.
-.IP
-This flag is currently a no-op on Linux.
-However, by employing this flag, applications can ensure that
-they transparently obtain support if the flag
-is implemented in the future.
-Thus, it is used in the glibc threading implementation to allow for
-the fact that some architectures may (later) require special treatment
-for stack allocations.
-.\" See http://lwn.net/Articles/294642 "Tangled up in threads", 19 Aug 08
-.\" commit cd98a04a59e2f94fa64d5bf1e26498d27427d5e7
-.\" http://thread.gmane.org/gmane.linux.kernel/720412
-.\" "pthread_create() slow for many threads; also time to revisit 64b
-.\" context switch optimization?"
-A further reason to employ this flag is portability:
-.B MAP_STACK
-exists (and has an effect) on some other systems (e.g., some of the BSDs).
-.TP
-.BR MAP_SYNC " (since Linux 4.15)"
-This flag is available only with the
-.B MAP_SHARED_VALIDATE
-mapping type;
-mappings of type
-.B MAP_SHARED
-will silently ignore this flag.
-This flag is supported only for files supporting DAX
-(direct mapping of persistent memory).
-For other files, creating a mapping with this flag results in an
-.B EOPNOTSUPP
-error.
-.IP
-Shared file mappings with this flag provide the guarantee that while
-some memory is mapped writable in the address space of the process,
-it will be visible in the same file at the same offset even after
-the system crashes or is rebooted.
-In conjunction with the use of appropriate CPU instructions,
-this provides users of such mappings with a more efficient way
-of making data modifications persistent.
-.TP
-.BR MAP_UNINITIALIZED " (since Linux 2.6.33)"
-Don't clear anonymous pages.
-This flag is intended to improve performance on embedded devices.
-This flag is honored only if the kernel was configured with the
-.B CONFIG_MMAP_ALLOW_UNINITIALIZED
-option.
-Because of the security implications,
-that option is normally enabled only on embedded devices
-(i.e., devices where one has complete control of the contents of user memory).
-.PP
-Of the above flags, only
-.B MAP_FIXED
-is specified in POSIX.1-2001 and POSIX.1-2008.
-However, most systems also support
-.B MAP_ANONYMOUS
-(or its synonym
-.BR MAP_ANON ).
-.\" FIXME . for later review when Issue 8 is one day released...
-.\" POSIX may add MAP_ANON in the future
-.\" http://austingroupbugs.net/tag_view_page.php?tag_id=8
-.\" http://austingroupbugs.net/view.php?id=850
-.SS munmap()
-The
-.BR munmap ()
-system call deletes the mappings for the specified address range, and
-causes further references to addresses within the range to generate
-invalid memory references.
-The region is also automatically unmapped
-when the process is terminated.
-On the other hand, closing the file
-descriptor does not unmap the region.
-.PP
-The address
-.I addr
-must be a multiple of the page size (but
-.I length
-need not be).
-All pages containing a part
-of the indicated range are unmapped, and subsequent references
-to these pages will generate
-.BR SIGSEGV .
-It is not an error if the
-indicated range does not contain any mapped pages.
-.SH RETURN VALUE
-On success,
-.BR mmap ()
-returns a pointer to the mapped area.
-On error, the value
-.B MAP_FAILED
-(that is,
-.IR "(void\ *)\ \-1" )
-is returned, and
-.I errno
-is set to indicate the error.
-.PP
-On success,
-.BR munmap ()
-returns 0.
-On failure, it returns \-1, and
-.I errno
-is set to indicate the error (probably to
-.BR EINVAL ).
-.SH ERRORS
-.TP
-.B EACCES
-A file descriptor refers to a non-regular file.
-Or a file mapping was requested, but
-.I fd
-is not open for reading.
-Or
-.B MAP_SHARED
-was requested and
-.B PROT_WRITE
-is set, but
-.I fd
-is not open in read/write
-.RB ( O_RDWR )
-mode.
-Or
-.B PROT_WRITE
-is set, but the file is append-only.
-.TP
-.B EAGAIN
-The file has been locked, or too much memory has been locked (see
-.BR setrlimit (2)).
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor (and
-.B MAP_ANONYMOUS
-was not set).
-.TP
-.B EEXIST
-.B MAP_FIXED_NOREPLACE
-was specified in
-.IR flags ,
-and the range covered by
-.I addr
-and
-.I length
-clashes with an existing mapping.
-.TP
-.B EINVAL
-We don't like
-.IR addr ,
-.IR length ,
-or
-.I offset
-(e.g., they are too large, or not aligned on a page boundary).
-.TP
-.B EINVAL
-(since Linux 2.6.12)
-.I length
-was 0.
-.TP
-.B EINVAL
-.I flags
-contained none of
-.BR MAP_PRIVATE ,
-.BR MAP_SHARED ,
-or
-.BR MAP_SHARED_VALIDATE .
-.TP
-.B ENFILE
-.\" This is for shared anonymous segments
-.\" [2.6.7] shmem_zero_setup()-->shmem_file_setup()-->get_empty_filp()
-The system-wide limit on the total number of open files has been reached.
-.\" .TP
-.\" .B ENOEXEC
-.\" A file could not be mapped for reading.
-.TP
-.B ENODEV
-The underlying filesystem of the specified file does not support
-memory mapping.
-.TP
-.B ENOMEM
-No memory is available.
-.TP
-.B ENOMEM
-The process's maximum number of mappings would have been exceeded.
-This error can also occur for
-.BR munmap (),
-when unmapping a region in the middle of an existing mapping,
-since this results in two smaller mappings on either side of
-the region being unmapped.
-.TP
-.B ENOMEM
-(since Linux 4.7)
-The process's
-.B RLIMIT_DATA
-limit, described in
-.BR getrlimit (2),
-would have been exceeded.
-.TP
-.B ENOMEM
-We don't like
-.IR addr ,
-because it exceeds the virtual address space of the CPU.
-.TP
-.B EOVERFLOW
-On 32-bit architecture together with the large file extension
-(i.e., using 64-bit
-.IR off_t ):
-the number of pages used for
-.I length
-plus number of pages used for
-.I offset
-would overflow
-.I "unsigned long"
-(32 bits).
-.TP
-.B EPERM
-The
-.I prot
-argument asks for
-.B PROT_EXEC
-but the mapped area belongs to a file on a filesystem that
-was mounted no-exec.
-.\" (Since Linux 2.4.25 / Linux 2.6.0.)
-.TP
-.B EPERM
-The operation was prevented by a file seal; see
-.BR fcntl (2).
-.TP
-.B EPERM
-The
-.B MAP_HUGETLB
-flag was specified, but the caller was not privileged (did not have the
-.B CAP_IPC_LOCK
-capability)
-and is not a member of the
-.I sysctl_hugetlb_shm_group
-group; see the description of
-.I /proc/sys/vm/sysctl_hugetlb_shm_group
-in
-.TP
-.B ETXTBSY
-.B MAP_DENYWRITE
-was set but the object specified by
-.I fd
-is open for writing.
-.PP
-Use of a mapped region can result in these signals:
-.TP
-.B SIGSEGV
-Attempted write into a region mapped as read-only.
-.TP
-.B SIGBUS
-Attempted access to a page of the buffer that lies beyond the
-end of the mapped file.
-For an explanation of the treatment of the bytes in the page that
-corresponds to the end of a mapped file that is not a multiple
-of the page size, see NOTES.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mmap (),
-.BR munmap ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-On some hardware architectures (e.g., i386),
-.B PROT_WRITE
-implies
-.BR PROT_READ .
-It is architecture dependent whether
-.B PROT_READ
-implies
-.B PROT_EXEC
-or not.
-Portable programs should always set
-.B PROT_EXEC
-if they intend to execute code in the new mapping.
-.PP
-The portable way to create a mapping is to specify
-.I addr
-as 0 (NULL), and omit
-.B MAP_FIXED
-from
-.IR flags .
-In this case, the system chooses the address for the mapping;
-the address is chosen so as not to conflict with any existing mapping,
-and will not be 0.
-If the
-.B MAP_FIXED
-flag is specified, and
-.I addr
-is 0 (NULL), then the mapped address will be 0 (NULL).
-.PP
-Certain
-.I flags
-constants are defined only if suitable feature test macros are defined
-(possibly by default):
-.B _DEFAULT_SOURCE
-with glibc 2.19 or later;
-or
-.B _BSD_SOURCE
-or
-.B _SVID_SOURCE
-in glibc 2.19 and earlier.
-(Employing
-.B _GNU_SOURCE
-also suffices,
-and requiring that macro specifically would have been more logical,
-since these flags are all Linux-specific.)
-The relevant flags are:
-.BR MAP_32BIT ,
-.B MAP_ANONYMOUS
-(and the synonym
-.BR MAP_ANON ),
-.BR MAP_DENYWRITE ,
-.BR MAP_EXECUTABLE ,
-.BR MAP_FILE ,
-.BR MAP_GROWSDOWN ,
-.BR MAP_HUGETLB ,
-.BR MAP_LOCKED ,
-.BR MAP_NONBLOCK ,
-.BR MAP_NORESERVE ,
-.BR MAP_POPULATE ,
-and
-.BR MAP_STACK .
-.SS C library/kernel differences
-This page describes the interface provided by the glibc
-.BR mmap ()
-wrapper function.
-Originally, this function invoked a system call of the same name.
-Since Linux 2.4, that system call has been superseded by
-.BR mmap2 (2),
-and nowadays
-.\" Since around glibc 2.1/2.2, depending on the platform.
-the glibc
-.BR mmap ()
-wrapper function invokes
-.BR mmap2 (2)
-with a suitably adjusted value for
-.IR offset .
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.4BSD.
-.\" SVr4 documents additional error codes ENXIO and ENODEV.
-.\" SUSv2 documents additional error codes EMFILE and EOVERFLOW.
-.PP
-On POSIX systems on which
-.BR mmap (),
-.BR msync (2),
-and
-.BR munmap ()
-are available,
-.B _POSIX_MAPPED_FILES
-is defined in \fI<unistd.h>\fP to a value greater than 0.
-(See also
-.BR sysconf (3).)
-.\" POSIX.1-2001: It shall be defined to -1 or 0 or 200112L.
-.\" -1: unavailable, 0: ask using sysconf().
-.\" glibc defines it to 1.
-.SH NOTES
-Memory mapped by
-.BR mmap ()
-is preserved across
-.BR fork (2),
-with the same attributes.
-.PP
-A file is mapped in multiples of the page size.
-For a file that is not
-a multiple of the page size,
-the remaining bytes in the partial page at the end of the mapping
-are zeroed when mapped,
-and modifications to that region are not written out to the file.
-The effect of
-changing the size of the underlying file of a mapping on the pages that
-correspond to added or removed regions of the file is unspecified.
-.PP
-An application can determine which pages of a mapping are
-currently resident in the buffer/page cache using
-.BR mincore (2).
-.\"
-.SS Using MAP_FIXED safely
-The only safe use for
-.B MAP_FIXED
-is where the address range specified by
-.I addr
-and
-.I length
-was previously reserved using another mapping;
-otherwise, the use of
-.B MAP_FIXED
-is hazardous because it forcibly removes preexisting mappings,
-making it easy for a multithreaded process to corrupt its own address space.
-.PP
-For example, suppose that thread A looks through
-.IR /proc/ pid /maps
-in order to locate an unused address range that it can map using
-.BR MAP_FIXED ,
-while thread B simultaneously acquires part or all of that same
-address range.
-When thread A subsequently employs
-.BR mmap(MAP_FIXED) ,
-it will effectively clobber the mapping that thread B created.
-In this scenario,
-thread B need not create a mapping directly; simply making a library call
-that, internally, uses
-.BR dlopen (3)
-to load some other shared library, will suffice.
-The
-.BR dlopen (3)
-call will map the library into the process's address space.
-Furthermore, almost any library call may be implemented in a way that
-adds memory mappings to the address space, either with this technique,
-or by simply allocating memory.
-Examples include
-.BR brk (2),
-.BR malloc (3),
-.BR pthread_create (3),
-and the PAM libraries
-.UR http://www.linux-pam.org
-.UE .
-.PP
-Since Linux 4.17, a multithreaded program can use the
-.B MAP_FIXED_NOREPLACE
-flag to avoid the hazard described above
-when attempting to create a mapping at a fixed address
-that has not been reserved by a preexisting mapping.
-.\"
-.SS Timestamps changes for file-backed mappings
-For file-backed mappings, the
-.I st_atime
-field for the mapped file may be updated at any time between the
-.BR mmap ()
-and the corresponding unmapping; the first reference to a mapped
-page will update the field if it has not been already.
-.PP
-The
-.I st_ctime
-and
-.I st_mtime
-field for a file mapped with
-.B PROT_WRITE
-and
-.B MAP_SHARED
-will be updated after
-a write to the mapped region, and before a subsequent
-.BR msync (2)
-with the
-.B MS_SYNC
-or
-.B MS_ASYNC
-flag, if one occurs.
-.\"
-.SS Huge page (Huge TLB) mappings
-For mappings that employ huge pages, the requirements for the arguments of
-.BR mmap ()
-and
-.BR munmap ()
-differ somewhat from the requirements for mappings
-that use the native system page size.
-.PP
-For
-.BR mmap (),
-.I offset
-must be a multiple of the underlying huge page size.
-The system automatically aligns
-.I length
-to be a multiple of the underlying huge page size.
-.PP
-For
-.BR munmap (),
-.IR addr ,
-and
-.I length
-must both be a multiple of the underlying huge page size.
-.\"
-.SH BUGS
-On Linux, there are no guarantees like those suggested above under
-.BR MAP_NORESERVE .
-By default, any process can be killed
-at any moment when the system runs out of memory.
-.PP
-Before Linux 2.6.7, the
-.B MAP_POPULATE
-flag has effect only if
-.I prot
-is specified as
-.BR PROT_NONE .
-.PP
-SUSv3 specifies that
-.BR mmap ()
-should fail if
-.I length
-is 0.
-However, before Linux 2.6.12,
-.BR mmap ()
-succeeded in this case: no mapping was created and the call returned
-.IR addr .
-Since Linux 2.6.12,
-.BR mmap ()
-fails with the error
-.B EINVAL
-for this case.
-.PP
-POSIX specifies that the system shall always
-zero fill any partial page at the end
-of the object and that system will never write any modification of the
-object beyond its end.
-On Linux, when you write data to such partial page after the end
-of the object, the data stays in the page cache even after the file
-is closed and unmapped
-and even though the data is never written to the file itself,
-subsequent mappings may see the modified content.
-In some cases, this could be fixed by calling
-.BR msync (2)
-before the unmap takes place;
-however, this doesn't work on
-.BR tmpfs (5)
-(for example, when using the POSIX shared memory interface documented in
-.BR shm_overview (7)).
-.SH EXAMPLES
-.\" FIXME . Add an example here that uses an anonymous shared region for
-.\" IPC between parent and child.
-The following program prints part of the file specified in
-its first command-line argument to standard output.
-The range of bytes to be printed is specified via offset and length
-values in the second and third command-line arguments.
-The program creates a memory mapping of the required
-pages of the file and then uses
-.BR write (2)
-to output the desired bytes.
-.SS Program source
-.\" SRC BEGIN (mmap.c)
-.EX
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <unistd.h>
-\&
-#define handle_error(msg) \e
- do { perror(msg); exit(EXIT_FAILURE); } while (0)
-\&
-int
-main(int argc, char *argv[])
-{
- int fd;
- char *addr;
- off_t offset, pa_offset;
- size_t length;
- ssize_t s;
- struct stat sb;
-\&
- if (argc < 3 || argc > 4) {
- fprintf(stderr, "%s file offset [length]\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- fd = open(argv[1], O_RDONLY);
- if (fd == \-1)
- handle_error("open");
-\&
- if (fstat(fd, &sb) == \-1) /* To obtain file size */
- handle_error("fstat");
-\&
- offset = atoi(argv[2]);
- pa_offset = offset & \[ti](sysconf(_SC_PAGE_SIZE) \- 1);
- /* offset for mmap() must be page aligned */
-\&
- if (offset >= sb.st_size) {
- fprintf(stderr, "offset is past end of file\en");
- exit(EXIT_FAILURE);
- }
-\&
- if (argc == 4) {
- length = atoi(argv[3]);
- if (offset + length > sb.st_size)
- length = sb.st_size \- offset;
- /* Can\[aq]t display bytes past end of file */
-\&
- } else { /* No length arg ==> display to end of file */
- length = sb.st_size \- offset;
- }
-\&
- addr = mmap(NULL, length + offset \- pa_offset, PROT_READ,
- MAP_PRIVATE, fd, pa_offset);
- if (addr == MAP_FAILED)
- handle_error("mmap");
-\&
- s = write(STDOUT_FILENO, addr + offset \- pa_offset, length);
- if (s != length) {
- if (s == \-1)
- handle_error("write");
-\&
- fprintf(stderr, "partial write");
- exit(EXIT_FAILURE);
- }
-\&
- munmap(addr, length + offset \- pa_offset);
- close(fd);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR ftruncate (2),
-.BR getpagesize (2),
-.BR memfd_create (2),
-.BR mincore (2),
-.BR mlock (2),
-.BR mmap2 (2),
-.BR mprotect (2),
-.BR mremap (2),
-.BR msync (2),
-.BR remap_file_pages (2),
-.BR setrlimit (2),
-.BR shmat (2),
-.BR userfaultfd (2),
-.BR shm_open (3),
-.BR shm_overview (7)
-.PP
-The descriptions of the following files in
-.BR proc (5):
-.IR /proc/ pid /maps ,
-.IR /proc/ pid /map_files ,
-and
-.IR /proc/ pid /smaps .
-.PP
-B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128\[en]129 and 389\[en]391.
-.\"
-.\" Repeat after me: private read-only mappings are 100% equivalent to
-.\" shared read-only mappings. No ifs, buts, or maybes. -- Linus
diff --git a/man2/mmap2.2 b/man2/mmap2.2
deleted file mode 100644
index dfddef0af..000000000
--- a/man2/mmap2.2
+++ /dev/null
@@ -1,85 +0,0 @@
-.\" Copyright (C) 2002, Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 31 Jan 2002, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added description of mmap2
-.\" Modified, 2004-11-25, mtk -- removed stray #endif in prototype
-.\"
-.TH mmap2 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mmap2 \- map files or devices into memory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/mman.h>" " /* Definition of " MAP_* " and " PROT_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "void *syscall(SYS_mmap2, unsigned long " addr ", unsigned long " length ,
-.BI " unsigned long " prot ", unsigned long " flags ,
-.BI " unsigned long " fd ", unsigned long " pgoffset );
-.fi
-.SH DESCRIPTION
-This is probably not the system call that you are interested in; instead, see
-.BR mmap (2),
-which describes the glibc wrapper function that invokes this system call.
-.PP
-The
-.BR mmap2 ()
-system call provides the same interface as
-.BR mmap (2),
-except that the final argument specifies the offset into the
-file in 4096-byte units (instead of bytes, as is done by
-.BR mmap (2)).
-This enables applications that use a 32-bit
-.I off_t
-to map large files (up to 2\[ha]44 bytes).
-.SH RETURN VALUE
-On success,
-.BR mmap2 ()
-returns a pointer to the mapped area.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-Problem with getting the data from user space.
-.TP
-.B EINVAL
-(Various platforms where the page size is not 4096 bytes.)
-.I "offset\ *\ 4096"
-is not a multiple of the system page size.
-.PP
-.BR mmap2 ()
-can also return any of the errors described in
-.BR mmap (2).
-.SH VERSIONS
-On architectures where this system call is present,
-the glibc
-.BR mmap ()
-wrapper function invokes this system call rather than the
-.BR mmap (2)
-system call.
-.PP
-This system call does not exist on x86-64.
-.PP
-On ia64, the unit for
-.I offset
-is actually the system page size, rather than 4096 bytes.
-.\" ia64 can have page sizes ranging from 4 kB to 64 kB.
-.\" On cris, it looks like the unit might also be the page size,
-.\" which is 8192 bytes. -- mtk, June 2007
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.3.31.
-.SH SEE ALSO
-.BR getpagesize (2),
-.BR mmap (2),
-.BR mremap (2),
-.BR msync (2),
-.BR shm_open (3)
diff --git a/man2/modify_ldt.2 b/man2/modify_ldt.2
deleted file mode 100644
index 07f3cddb0..000000000
--- a/man2/modify_ldt.2
+++ /dev/null
@@ -1,196 +0,0 @@
-.\" Copyright (c) 1995 Michael Chastain (mec@duracef.shout.net), 22 July 1995.
-.\" Copyright (c) 2015 Andrew Lutomirski
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH modify_ldt 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-modify_ldt \- get or set a per-process LDT entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <asm/ldt.h>" " /* Definition of " "struct user_desc" " */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_modify_ldt, int " func ", void " ptr [. bytecount ],
-.BI " unsigned long " bytecount );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR modify_ldt (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-.BR modify_ldt ()
-reads or writes the local descriptor table (LDT) for a process.
-The LDT
-is an array of segment descriptors that can be referenced by user code.
-Linux allows processes to configure a per-process (actually per-mm) LDT.
-For more information about the LDT, see the Intel Software Developer's
-Manual or the AMD Architecture Programming Manual.
-.PP
-When
-.I func
-is 0,
-.BR modify_ldt ()
-reads the LDT into the memory pointed to by
-.IR ptr .
-The number of bytes read is the smaller of
-.I bytecount
-and the actual size of the LDT, although the kernel may act as though
-the LDT is padded with additional trailing zero bytes.
-On success,
-.BR modify_ldt ()
-will return the number of bytes read.
-.PP
-When
-.I func
-is 1 or 0x11,
-.BR modify_ldt ()
-modifies the LDT entry indicated by
-.IR ptr\->entry_number .
-.I ptr
-points to a
-.I user_desc
-structure
-and
-.I bytecount
-must equal the size of this structure.
-.PP
-The
-.I user_desc
-structure is defined in \fI<asm/ldt.h>\fP as:
-.PP
-.in +4n
-.EX
-struct user_desc {
- unsigned int entry_number;
- unsigned int base_addr;
- unsigned int limit;
- unsigned int seg_32bit:1;
- unsigned int contents:2;
- unsigned int read_exec_only:1;
- unsigned int limit_in_pages:1;
- unsigned int seg_not_present:1;
- unsigned int useable:1;
-};
-.EE
-.in
-.PP
-In Linux 2.4 and earlier, this structure was named
-.IR modify_ldt_ldt_s .
-.PP
-The
-.I contents
-field is the segment type (data, expand-down data, non-conforming code, or
-conforming code).
-The other fields match their descriptions in the CPU manual, although
-.BR modify_ldt ()
-cannot set the hardware-defined "accessed" bit described in the CPU manual.
-.PP
-A
-.I user_desc
-is considered "empty" if
-.I read_exec_only
-and
-.I seg_not_present
-are set to 1 and all of the other fields are 0.
-An LDT entry can be cleared by setting it to an "empty"
-.I user_desc
-or, if
-.I func
-is 1, by setting both
-.I base
-and
-.I limit
-to 0.
-.PP
-A conforming code segment (i.e., one with
-.IR contents==3 )
-will be rejected if
-.I
-func
-is 1 or if
-.I seg_not_present
-is 0.
-.PP
-When
-.I func
-is 2,
-.BR modify_ldt ()
-will read zeros.
-This appears to be a leftover from Linux 2.4.
-.SH RETURN VALUE
-On success,
-.BR modify_ldt ()
-returns either the actual number of bytes read (for reading)
-or 0 (for writing).
-On failure,
-.BR modify_ldt ()
-returns \-1 and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-.I ptr
-points outside the address space.
-.TP
-.B EINVAL
-.I ptr
-is 0,
-or
-.I func
-is 1 and
-.I bytecount
-is not equal to the size of the structure
-.IR user_desc ,
-or
-.I func
-is 1 or 0x11 and the new LDT entry has invalid values.
-.TP
-.B ENOSYS
-.I func
-is neither 0, 1, 2, nor 0x11.
-.SH STANDARDS
-Linux.
-.SH NOTES
-.BR modify_ldt ()
-should not be used for thread-local storage, as it slows down context
-switches and only supports a limited number of threads.
-Threading libraries should use
-.BR set_thread_area (2)
-or
-.BR arch_prctl (2)
-instead, except on extremely old kernels that do not support those system
-calls.
-.PP
-The normal use for
-.BR modify_ldt ()
-is to run legacy 16-bit or segmented 32-bit code.
-Not all kernels allow 16-bit segments to be installed, however.
-.PP
-Even on 64-bit kernels,
-.BR modify_ldt ()
-cannot be used to create a long mode (i.e., 64-bit) code segment.
-The undocumented field "lm" in
-.I user_desc
-is not useful, and, despite its name,
-does not result in a long mode segment.
-.SH BUGS
-On 64-bit kernels before Linux 3.19,
-.\" commit e30ab185c490e9a9381385529e0fd32f0a399495
-setting the "lm" bit in
-.I user_desc
-prevents the descriptor from being considered empty.
-Keep in mind that the
-"lm" bit does not exist in the 32-bit headers, but these buggy kernels
-will still notice the bit even when set in a 32-bit process.
-.SH SEE ALSO
-.BR arch_prctl (2),
-.BR set_thread_area (2),
-.BR vm86 (2)
diff --git a/man2/mount.2 b/man2/mount.2
deleted file mode 100644
index 7a9cf4f82..000000000
--- a/man2/mount.2
+++ /dev/null
@@ -1,971 +0,0 @@
-.\" Copyright (C) 1993 Rickard E. Faith <faith@cs.unc.edu>
-.\" and Copyright (C) 1994 Andries E. Brouwer <aeb@cwi.nl>
-.\" and Copyright (C) 2002, 2005, 2016 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 1996-11-04 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2001-10-13 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added note on historical behavior of MS_NOSUID
-.\" Modified 2002-05-16 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Extensive changes and additions
-.\" Modified 2002-05-27 by aeb
-.\" Modified 2002-06-11 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Enhanced descriptions of MS_MOVE, MS_BIND, and MS_REMOUNT
-.\" Modified 2004-06-17 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" 2005-05-18, mtk, Added MNT_EXPIRE, plus a few other tidy-ups.
-.\" 2008-10-06, mtk: move umount*() material into separate umount.2 page.
-.\" 2008-10-06, mtk: Add discussion of namespaces.
-.\"
-.TH mount 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mount \- mount filesystem
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B "#include <sys/mount.h>"
-.PP
-.BI "int mount(const char *" source ", const char *" target ,
-.BI " const char *" filesystemtype ", unsigned long " mountflags ,
-.BI " const void *_Nullable " data );
-.fi
-.SH DESCRIPTION
-.BR mount ()
-attaches the filesystem specified by
-.I source
-(which is often a pathname referring to a device,
-but can also be the pathname of a directory or file,
-or a dummy string) to the location (a directory or file)
-specified by the pathname in
-.IR target .
-.PP
-Appropriate privilege (Linux: the
-.B CAP_SYS_ADMIN
-capability) is required to mount filesystems.
-.PP
-Values for the
-.I filesystemtype
-argument supported by the kernel are listed in
-.I /proc/filesystems
-(e.g., "btrfs", "ext4", "jfs", "xfs", "vfat", "fuse",
-"tmpfs", "cgroup", "proc", "mqueue", "nfs", "cifs", "iso9660").
-Further types may become available when the appropriate modules
-are loaded.
-.PP
-The
-.I data
-argument is interpreted by the different filesystems.
-Typically it is a string of comma-separated options
-understood by this filesystem.
-See
-.BR mount (8)
-for details of the options available for each filesystem type.
-This argument may be specified as NULL, if there are no options.
-.PP
-A call to
-.BR mount ()
-performs one of a number of general types of operation,
-depending on the bits specified in
-.IR mountflags .
-The choice of which operation to perform is determined by
-testing the bits set in
-.IR mountflags ,
-with the tests being conducted in the order listed here:
-.IP \[bu] 3
-Remount an existing mount:
-.I mountflags
-includes
-.BR MS_REMOUNT .
-.IP \[bu]
-Create a bind mount:
-.I mountflags
-includes
-.BR MS_BIND .
-.IP \[bu]
-Change the propagation type of an existing mount:
-.I mountflags
-includes one of
-.BR MS_SHARED ,
-.BR MS_PRIVATE ,
-.BR MS_SLAVE ,
-or
-.BR MS_UNBINDABLE .
-.IP \[bu]
-Move an existing mount to a new location:
-.I mountflags
-includes
-.BR MS_MOVE .
-.IP \[bu]
-Create a new mount:
-.I mountflags
-includes none of the above flags.
-.PP
-Each of these operations is detailed later in this page.
-Further flags may be specified in
-.I mountflags
-to modify the behavior of
-.BR mount (),
-as described below.
-.\"
-.SS Additional mount flags
-The list below describes the additional flags that can be specified in
-.IR mountflags .
-Note that some operation types ignore some or all of these flags,
-as described later in this page.
-.\"
-.\" FIXME 2.6.25 Added MS_I_VERSION, which needs to be documented.
-.\" commit 7a224228ed79d587ece2304869000aad1b8e97dd
-.\" (This is a per-superblock flag)
-.\"
-.TP
-.BR MS_DIRSYNC " (since Linux 2.5.19)"
-Make directory changes on this filesystem synchronous.
-(This property can be obtained for individual directories
-or subtrees using
-.BR chattr (1).)
-.TP
-.BR MS_LAZYTIME " (since Linux 4.0)"
-.\" commit 0ae45f63d4ef8d8eeec49c7d8b44a1775fff13e8
-.\" commit fe032c422c5ba562ba9c2d316f55e258e03259c6
-.\" commit a26f49926da938f47561f386be56a83dd37a496d
-Reduce on-disk updates of inode timestamps (atime, mtime, ctime)
-by maintaining these changes only in memory.
-The on-disk timestamps are updated only when:
-.RS
-.IP \[bu] 3
-the inode needs to be updated for some change unrelated to file timestamps;
-.IP \[bu]
-the application employs
-.BR fsync (2),
-.BR syncfs (2),
-or
-.BR sync (2);
-.IP \[bu]
-an undeleted inode is evicted from memory; or
-.IP \[bu]
-more than 24 hours have passed since the inode was written to disk.
-.RE
-.IP
-This mount option significantly reduces writes
-needed to update the inode's timestamps, especially mtime and atime.
-However, in the event of a system crash, the atime and mtime fields
-on disk might be out of date by up to 24 hours.
-.IP
-Examples of workloads where this option could be of significant benefit
-include frequent random writes to preallocated files,
-as well as cases where the
-.B MS_STRICTATIME
-mount option is also enabled.
-(The advantage of combining
-.B MS_STRICTATIME
-and
-.B MS_LAZYTIME
-is that
-.BR stat (2)
-will return the correctly updated atime, but the atime updates
-will be flushed to disk only in the cases listed above.)
-.TP
-.B MS_MANDLOCK
-Permit mandatory locking on files in this filesystem.
-(Mandatory locking must still be enabled on a per-file basis,
-as described in
-.BR fcntl (2).)
-Since Linux 4.5,
-.\" commit 95ace75414f312f9a7b93d873f386987b92a5301
-this mount option requires the
-.B CAP_SYS_ADMIN
-capability and a kernel configured with the
-.B CONFIG_MANDATORY_FILE_LOCKING
-option.
-Mandatory locking has been fully deprecated in Linux 5.15, so
-this flag should be considered deprecated.
-.TP
-.B MS_NOATIME
-Do not update access times for (all types of) files on this filesystem.
-.TP
-.B MS_NODEV
-Do not allow access to devices (special files) on this filesystem.
-.TP
-.B MS_NODIRATIME
-Do not update access times for directories on this filesystem.
-This flag provides a subset of the functionality provided by
-.BR MS_NOATIME ;
-that is,
-.B MS_NOATIME
-implies
-.BR MS_NODIRATIME .
-.TP
-.B MS_NOEXEC
-Do not allow programs to be executed from this filesystem.
-.\" (Possibly useful for a filesystem that contains non-Linux executables.
-.\" Often used as a security feature, e.g., to make sure that restricted
-.\" users cannot execute files uploaded using ftp or so.)
-.TP
-.B MS_NOSUID
-Do not honor set-user-ID and set-group-ID bits or file capabilities
-when executing programs from this filesystem.
-In addition, SELinux domain
-transitions require the permission
-.IR nosuid_transition ,
-which in turn needs
-also the policy capability
-.IR nnp_nosuid_transition .
-.\" (This is a security feature to prevent users executing set-user-ID and
-.\" set-group-ID programs from removable disk devices.)
-.TP
-.B MS_RDONLY
-Mount filesystem read-only.
-.TP
-.BR MS_REC " (since Linux 2.4.11)"
-Used in conjunction with
-.B MS_BIND
-to create a recursive bind mount,
-and in conjunction with the propagation type flags to recursively change
-the propagation type of all of the mounts in a subtree.
-See below for further details.
-.TP
-.BR MS_RELATIME " (since Linux 2.6.20)"
-When a file on this filesystem is accessed,
-update the file's last access time (atime) only if the current value
-of atime is less than or equal to the file's last modification time (mtime)
-or last status change time (ctime).
-This option is useful for programs, such as
-.BR mutt (1),
-that need to know when a file has been read since it was last modified.
-Since Linux 2.6.30, the kernel defaults to the behavior provided
-by this flag (unless
-.B MS_NOATIME
-was specified), and the
-.B MS_STRICTATIME
-flag is required to obtain traditional semantics.
-In addition, since Linux 2.6.30,
-the file's last access time is always updated if it
-is more than 1 day old.
-.\" Matthew Garrett notes in the patch that added this behavior
-.\" that this lets utilities such as tmpreaper (which deletes
-.\" files based on last access time) work correctly.
-.TP
-.BR MS_SILENT " (since Linux 2.6.17)"
-Suppress the display of certain
-.RI ( printk ())
-warning messages in the kernel log.
-This flag supersedes the misnamed and obsolete
-.B MS_VERBOSE
-flag (available since Linux 2.4.12), which has the same meaning.
-.TP
-.BR MS_STRICTATIME " (since Linux 2.6.30)"
-Always update the last access time (atime) when files on this
-filesystem are accessed.
-(This was the default behavior before Linux 2.6.30.)
-Specifying this flag overrides the effect of setting the
-.B MS_NOATIME
-and
-.B MS_RELATIME
-flags.
-.TP
-.B MS_SYNCHRONOUS
-Make writes on this filesystem synchronous (as though
-the
-.B O_SYNC
-flag to
-.BR open (2)
-was specified for all file opens to this filesystem).
-.TP
-.BR MS_NOSYMFOLLOW " (since Linux 5.10)"
-.\" dab741e0e02bd3c4f5e2e97be74b39df2523fc6e
-Do not follow symbolic links when resolving paths.
-Symbolic links can still be created,
-and
-.BR readlink (1),
-.BR readlink (2),
-.BR realpath (1),
-and
-.BR realpath (3)
-all still work properly.
-.PP
-From Linux 2.4 onward, some of the above flags are
-settable on a per-mount basis,
-while others apply to the superblock of the mounted filesystem,
-meaning that all mounts of the same filesystem share those flags.
-(Previously, all of the flags were per-superblock.)
-.PP
-The per-mount-point flags are as follows:
-.IP \[bu] 3
-Since Linux 2.4:
-.BR MS_NODEV ", " MS_NOEXEC ", and " MS_NOSUID
-flags are settable on a per-mount-point basis.
-.IP \[bu]
-Additionally, since Linux 2.6.16:
-.B MS_NOATIME
-and
-.BR MS_NODIRATIME .
-.IP \[bu]
-Additionally, since Linux 2.6.20:
-.BR MS_RELATIME .
-.PP
-The following flags are per-superblock:
-.BR MS_DIRSYNC ,
-.BR MS_LAZYTIME ,
-.BR MS_MANDLOCK ,
-.BR MS_SILENT ,
-and
-.BR MS_SYNCHRONOUS .
-.\" And MS_I_VERSION?
-The initial settings of these flags are determined on the first
-mount of the filesystem, and will be shared by all subsequent mounts
-of the same filesystem.
-Subsequently, the settings of the flags can be changed
-via a remount operation (see below).
-Such changes will be visible via all mounts associated
-with the filesystem.
-.PP
-Since Linux 2.6.16,
-.B MS_RDONLY
-can be set or cleared on a per-mount-point basis as well as on
-the underlying filesystem superblock.
-The mounted filesystem will be writable only if neither the filesystem
-nor the mountpoint are flagged as read-only.
-.\"
-.SS Remounting an existing mount
-An existing mount may be remounted by specifying
-.B MS_REMOUNT
-in
-.IR mountflags .
-This allows you to change the
-.I mountflags
-and
-.I data
-of an existing mount without having to unmount and remount the filesystem.
-.I target
-should be the same value specified in the initial
-.BR mount ()
-call.
-.PP
-The
-.I source
-and
-.I filesystemtype
-arguments are ignored.
-.PP
-The
-.I mountflags
-and
-.I data
-arguments should match the values used in the original
-.BR mount ()
-call, except for those parameters that are being deliberately changed.
-.PP
-The following
-.I mountflags
-can be changed:
-.BR MS_LAZYTIME ,
-.\" FIXME
-.\" MS_LAZYTIME seems to be available only on a few filesystems,
-.\" and on ext4, it seems (from experiment that this flag
-.\" can only be enabled (but not disabled) on a remount.
-.\" The following code in ext4_remount() (kernel 4.17) seems to
-.\" confirm this:
-.\"
-.\" if (*flags & SB_LAZYTIME)
-.\" sb->s_flags |= SB_LAZYTIME;
-.BR MS_MANDLOCK ,
-.BR MS_NOATIME ,
-.BR MS_NODEV ,
-.BR MS_NODIRATIME ,
-.BR MS_NOEXEC ,
-.BR MS_NOSUID ,
-.BR MS_RELATIME ,
-.BR MS_RDONLY ,
-.B MS_STRICTATIME
-(whose effect is to clear the
-.B MS_NOATIME
-and
-.B MS_RELATIME
-flags),
-and
-.BR MS_SYNCHRONOUS .
-Attempts to change the setting of the
-.\" See the definition of MS_RMT_MASK in include/uapi/linux/fs.h,
-.\" which excludes MS_DIRSYNC and MS_SILENT, although SB_DIRSYNC
-.\" and SB_SILENT are split out as per-superblock flags in do_mount()
-.\" (Linux 4.17 source code)
-.B MS_DIRSYNC
-and
-.B MS_SILENT
-flags during a remount are silently ignored.
-Note that changes to per-superblock flags are visible via
-all mounts of the associated filesystem
-(because the per-superblock flags are shared by all mounts).
-.PP
-Since Linux 3.17,
-.\" commit ffbc6f0ead47fa5a1dc9642b0331cb75c20a640e
-if none of
-.BR MS_NOATIME ,
-.BR MS_NODIRATIME ,
-.BR MS_RELATIME ,
-or
-.B MS_STRICTATIME
-is specified in
-.IR mountflags ,
-then the remount operation preserves the existing values of these flags
-(rather than defaulting to
-.BR MS_RELATIME ).
-.PP
-Since Linux 2.6.26, the
-.B MS_REMOUNT
-flag can be used with
-.B MS_BIND
-to modify only the per-mount-point flags.
-.\" See https://lwn.net/Articles/281157/
-This is particularly useful for setting or clearing the "read-only"
-flag on a mount without changing the underlying filesystem.
-Specifying
-.I mountflags
-as:
-.PP
-.in +4n
-.EX
-MS_REMOUNT | MS_BIND | MS_RDONLY
-.EE
-.in
-.PP
-will make access through this mountpoint read-only, without affecting
-other mounts.
-.\"
-.SS Creating a bind mount
-If
-.I mountflags
-includes
-.B MS_BIND
-(available since Linux 2.4),
-.\" since Linux 2.4.0-test9
-then perform a bind mount.
-A bind mount makes a file or a directory subtree visible at
-another point within the single directory hierarchy.
-Bind mounts may cross filesystem boundaries and span
-.BR chroot (2)
-jails.
-.PP
-The
-.I filesystemtype
-and
-.I data
-arguments are ignored.
-.PP
-The remaining bits (other than
-.BR MS_REC ,
-described below) in the
-.I mountflags
-argument are also ignored.
-(The bind mount has the same mount options as
-the underlying mount.)
-However, see the discussion of remounting above,
-for a method of making an existing bind mount read-only.
-.PP
-By default, when a directory is bind mounted,
-only that directory is mounted;
-if there are any submounts under the directory tree,
-they are not bind mounted.
-If the
-.B MS_REC
-flag is also specified, then a recursive bind mount operation is performed:
-all submounts under the
-.I source
-subtree (other than unbindable mounts)
-are also bind mounted at the corresponding location in the
-.I target
-subtree.
-.\"
-.SS Changing the propagation type of an existing mount
-If
-.I mountflags
-includes one of
-.BR MS_SHARED ,
-.BR MS_PRIVATE ,
-.BR MS_SLAVE ,
-or
-.B MS_UNBINDABLE
-(all available since Linux 2.6.15),
-then the propagation type of an existing mount is changed.
-If more than one of these flags is specified, an error results.
-.PP
-The only other flags that can be specified while changing
-the propagation type are
-.B MS_REC
-(described below) and
-.B MS_SILENT
-(which is ignored).
-.PP
-The
-.IR source ,
-.IR filesystemtype ,
-and
-.I data
-arguments are ignored.
-.PP
-The meanings of the propagation type flags are as follows:
-.TP
-.B MS_SHARED
-Make this mount shared.
-Mount and unmount events immediately under this mount will propagate
-to the other mounts that are members of this mount's peer group.
-Propagation here means that the same mount or unmount will automatically
-occur under all of the other mounts in the peer group.
-Conversely, mount and unmount events that take place under
-peer mounts will propagate to this mount.
-.TP
-.B MS_PRIVATE
-Make this mount private.
-Mount and unmount events do not propagate into or out of this mount.
-.TP
-.B MS_SLAVE
-If this is a shared mount that is a member of a peer group
-that contains other members, convert it to a slave mount.
-If this is a shared mount that is a member of a peer group
-that contains no other members, convert it to a private mount.
-Otherwise, the propagation type of the mount is left unchanged.
-.IP
-When a mount is a slave,
-mount and unmount events propagate into this mount from
-the (master) shared peer group of which it was formerly a member.
-Mount and unmount events under this mount do not propagate to any peer.
-.IP
-A mount can be the slave of another peer group
-while at the same time sharing mount and unmount events
-with a peer group of which it is a member.
-.TP
-.B MS_UNBINDABLE
-Make this mount unbindable.
-This is like a private mount,
-and in addition this mount can't be bind mounted.
-When a recursive bind mount
-.RB ( mount ()
-with the
-.B MS_BIND
-and
-.B MS_REC
-flags) is performed on a directory subtree,
-any unbindable mounts within the subtree are automatically pruned
-(i.e., not replicated)
-when replicating that subtree to produce the target subtree.
-.PP
-By default, changing the propagation type affects only the
-.I target
-mount.
-If the
-.B MS_REC
-flag is also specified in
-.IR mountflags ,
-then the propagation type of all mounts under
-.I target
-is also changed.
-.PP
-For further details regarding mount propagation types
-(including the default propagation type assigned to new mounts), see
-.BR mount_namespaces (7).
-.\"
-.SS Moving a mount
-If
-.I mountflags
-contains the flag
-.B MS_MOVE
-(available since Linux 2.4.18),
-then move a subtree:
-.I source
-specifies an existing mount and
-.I target
-specifies the new location to which that mount is to be relocated.
-The move is atomic: at no point is the subtree unmounted.
-.PP
-The remaining bits in the
-.I mountflags
-argument are ignored, as are the
-.I filesystemtype
-and
-.I data
-arguments.
-.\"
-.SS Creating a new mount
-If none of
-.BR MS_REMOUNT ,
-.BR MS_BIND ,
-.BR MS_MOVE ,
-.BR MS_SHARED ,
-.BR MS_PRIVATE ,
-.BR MS_SLAVE ,
-or
-.B MS_UNBINDABLE
-is specified in
-.IR mountflags ,
-then
-.BR mount ()
-performs its default action: creating a new mount.
-.I source
-specifies the source for the new mount, and
-.I target
-specifies the directory at which to create the mount point.
-.PP
-The
-.I filesystemtype
-and
-.I data
-arguments are employed, and further bits may be specified in
-.I mountflags
-to modify the behavior of the call.
-.\"
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-The error values given below result from filesystem type independent
-errors.
-Each filesystem type may have its own special errors and its
-own special behavior.
-See the Linux kernel source code for details.
-.TP
-.B EACCES
-A component of a path was not searchable.
-(See also
-.BR path_resolution (7).)
-.TP
-.B EACCES
-Mounting a read-only filesystem was attempted without giving the
-.B MS_RDONLY
-flag.
-.IP
-The filesystem may be read-only for various reasons, including:
-it resides on a read-only optical disk;
-it is resides on a device with a physical switch that has been set to
-mark the device read-only;
-the filesystem implementation was compiled with read-only support;
-or errors were detected when initially mounting the filesystem,
-so that it was marked read-only
-and can't be remounted as read-write (until the errors are fixed).
-.IP
-Some filesystems instead return the error
-.B EROFS
-on an attempt to mount a read-only filesystem.
-.TP
-.B EACCES
-The block device
-.I source
-is located on a filesystem mounted with the
-.B MS_NODEV
-option.
-.\" mtk: Probably: write permission is required for MS_BIND, with
-.\" the error EPERM if not present; CAP_DAC_OVERRIDE is required.
-.TP
-.B EBUSY
-An attempt was made to stack a new mount directly on
-top of an existing mount point that was created in this
-mount namespace with the same
-.I source
-and
-.IR target .
-.TP
-.B EBUSY
-.I source
-cannot be remounted read-only,
-because it still holds files open for writing.
-.TP
-.B EFAULT
-One of the pointer arguments points outside the user address space.
-.TP
-.B EINVAL
-.I source
-had an invalid superblock.
-.TP
-.B EINVAL
-A remount operation
-.RB ( MS_REMOUNT )
-was attempted, but
-.I source
-was not already mounted on
-.IR target .
-.TP
-.B EINVAL
-A move operation
-.RB ( MS_MOVE )
-was attempted, but the mount tree under
-.I source
-includes unbindable mounts and
-.I target
-is a mount that has propagation type
-.BR MS_SHARED .
-.TP
-.B EINVAL
-A move operation
-.RB ( MS_MOVE )
-was attempted, but the parent mount of
-.I source
-mount has propagation type
-.BR MS_SHARED .
-.TP
-.B EINVAL
-A move operation
-.RB ( MS_MOVE )
-was attempted, but
-.I source
-was not a mount, or was \[aq]/\[aq].
-.TP
-.B EINVAL
-A bind operation
-.RB ( MS_BIND )
-was requested where
-.I source
-referred a mount namespace magic link (i.e., a
-.IR /proc/ pid /ns/mnt
-magic link or a bind mount to such a link)
-and the propagation type of the parent mount of
-.I target
-was
-.BR MS_SHARED ,
-.\" See commit 8823c079ba7136dc1948d6f6dcb5f8022bde438e
-but propagation of the requested bind mount could lead to a circular
-dependency that might prevent the mount namespace from ever being freed.
-.TP
-.B EINVAL
-.I mountflags
-includes more than one of
-.BR MS_SHARED ,
-.BR MS_PRIVATE ,
-.BR MS_SLAVE ,
-or
-.BR MS_UNBINDABLE .
-.TP
-.B EINVAL
-.I mountflags
-includes
-.BR MS_SHARED ,
-.BR MS_PRIVATE ,
-.BR MS_SLAVE ,
-or
-.B MS_UNBINDABLE
-and also includes a flag other than
-.B MS_REC
-or
-.BR MS_SILENT .
-.TP
-.B EINVAL
-An attempt was made to bind mount an unbindable mount.
-.TP
-.B EINVAL
-In an unprivileged mount namespace
-(i.e., a mount namespace owned by a user namespace
-that was created by an unprivileged user),
-a bind mount operation
-.RB ( MS_BIND )
-was attempted without specifying
-.RB ( MS_REC ),
-which would have revealed the filesystem tree underneath one of
-the submounts of the directory being bound.
-.TP
-.B ELOOP
-Too many links encountered during pathname resolution.
-.TP
-.B ELOOP
-A move operation was attempted, and
-.I target
-is a descendant of
-.IR source .
-.TP
-.B EMFILE
-(In case no block device is required:)
-Table of dummy devices is full.
-.TP
-.B ENAMETOOLONG
-A pathname was longer than
-.BR MAXPATHLEN .
-.TP
-.B ENODEV
-.I filesystemtype
-not configured in the kernel.
-.TP
-.B ENOENT
-A pathname was empty or had a nonexistent component.
-.TP
-.B ENOMEM
-The kernel could not allocate a free page to copy filenames or data into.
-.TP
-.B ENOTBLK
-.I source
-is not a block device (and a device was required).
-.TP
-.B ENOTDIR
-.IR target ,
-or a prefix of
-.IR source ,
-is not a directory.
-.TP
-.B ENXIO
-The major number of the block device
-.I source
-is out of range.
-.TP
-.B EPERM
-The caller does not have the required privileges.
-.TP
-.B EPERM
-An attempt was made to modify
-.RB ( MS_REMOUNT )
-the
-.BR MS_RDONLY ,
-.BR MS_NOSUID ,
-or
-.B MS_NOEXEC
-flag, or one of the "atime" flags
-.RB ( MS_NOATIME ,
-.BR MS_NODIRATIME ,
-.BR MS_RELATIME )
-of an existing mount, but the mount is locked; see
-.BR mount_namespaces (7).
-.TP
-.B EROFS
-Mounting a read-only filesystem was attempted without giving the
-.B MS_RDONLY
-flag.
-See
-.BR EACCES ,
-above.
-.\"
-.SH STANDARDS
-Linux.
-.SH HISTORY
-The definitions of
-.BR MS_DIRSYNC ,
-.BR MS_MOVE ,
-.BR MS_PRIVATE ,
-.BR MS_REC ,
-.BR MS_RELATIME ,
-.BR MS_SHARED ,
-.BR MS_SLAVE ,
-.BR MS_STRICTATIME ,
-and
-.B MS_UNBINDABLE
-were added to glibc headers in glibc 2.12.
-.PP
-Since Linux 2.4 a single filesystem can be mounted at
-multiple mount points, and multiple mounts can be stacked
-on the same mount point.
-.\" Multiple mounts on same mount point: since Linux 2.3.99pre7.
-.PP
-The
-.I mountflags
-argument may have the magic number 0xC0ED (\fBMS_MGC_VAL\fP)
-in the top 16 bits.
-(All of the other flags discussed in DESCRIPTION
-occupy the low order 16 bits of
-.IR mountflags .)
-Specifying
-.B MS_MGC_VAL
-was required before Linux 2.4,
-but since Linux 2.4 is no longer required and is ignored if specified.
-.PP
-The original
-.B MS_SYNC
-flag was renamed
-.B MS_SYNCHRONOUS
-in 1.1.69
-when a different
-.B MS_SYNC
-was added to \fI<mman.h>\fP.
-.PP
-Before Linux 2.4 an attempt to execute a set-user-ID or set-group-ID program
-on a filesystem mounted with
-.B MS_NOSUID
-would fail with
-.BR EPERM .
-Since Linux 2.4 the set-user-ID and set-group-ID bits are
-just silently ignored in this case.
-.\" The change is in patch-2.4.0-prerelease.
-.\"
-.SH NOTES
-.SS Mount namespaces
-Starting with Linux 2.4.19, Linux provides mount namespaces.
-A mount namespace is the set of filesystem mounts that
-are visible to a process.
-Mount namespaces can be (and usually are)
-shared between multiple processes,
-and changes to the namespace (i.e., mounts and unmounts) by one process
-are visible to all other processes sharing the same namespace.
-(The pre-2.4.19 Linux situation can be considered as one in which
-a single namespace was shared by every process on the system.)
-.PP
-A child process created by
-.BR fork (2)
-shares its parent's mount namespace;
-the mount namespace is preserved across an
-.BR execve (2).
-.PP
-A process can obtain a private mount namespace if:
-it was created using the
-.BR clone (2)
-.B CLONE_NEWNS
-flag,
-in which case its new namespace is initialized to be a
-.I copy
-of the namespace of the process that called
-.BR clone (2);
-or it calls
-.BR unshare (2)
-with the
-.B CLONE_NEWNS
-flag,
-which causes the caller's mount namespace to obtain a private copy
-of the namespace that it was previously sharing with other processes,
-so that future mounts and unmounts by the caller are invisible
-to other processes (except child processes that the caller
-subsequently creates) and vice versa.
-.PP
-For further details on mount namespaces, see
-.BR mount_namespaces (7).
-.\"
-.SS Parental relationship between mounts
-Each mount has a parent mount.
-The overall parental relationship of all mounts defines
-the single directory hierarchy seen by the processes within a mount namespace.
-.PP
-The parent of a new mount is defined when the mount is created.
-In the usual case,
-the parent of a new mount is the mount of the filesystem
-containing the directory or file at which the new mount is attached.
-In the case where a new mount is stacked on top of an existing mount,
-the parent of the new mount is the previous mount that was stacked
-at that location.
-.PP
-The parental relationship between mounts can be discovered via the
-.IR /proc/ pid /mountinfo
-file (see below).
-.\"
-.SS \fI/proc/\fPpid\fI/mounts\fP and \fI/proc/\fPpid\fI/mountinfo\fP
-The Linux-specific
-.IR /proc/ pid /mounts
-file exposes the list of mounts in the mount
-namespace of the process with the specified ID.
-The
-.IR /proc/ pid /mountinfo
-file exposes even more information about mounts,
-including the propagation type and mount ID information that makes it
-possible to discover the parental relationship between mounts.
-See
-.BR proc (5)
-and
-.BR mount_namespaces (7)
-for details of this file.
-.SH SEE ALSO
-.BR mountpoint (1),
-.BR chroot (2),
-.BR ioctl_iflags (2),
-.BR mount_setattr (2),
-.BR pivot_root (2),
-.BR umount (2),
-.BR mount_namespaces (7),
-.BR path_resolution (7),
-.BR findmnt (8),
-.BR lsblk (8),
-.BR mount (8),
-.BR umount (8)
diff --git a/man2/mount_setattr.2 b/man2/mount_setattr.2
deleted file mode 100644
index efccd5b53..000000000
--- a/man2/mount_setattr.2
+++ /dev/null
@@ -1,1055 +0,0 @@
-.\" Copyright (c) 2021 by Christian Brauner <christian.brauner@ubuntu.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH mount_setattr 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mount_setattr \- change properties of a mount or mount tree
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/fcntl.h>" " /* Definition of " AT_* " constants */"
-.BR "#include <linux/mount.h>" " /* Definition of " MOUNT_ATTR_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_mount_setattr, int " dirfd ", const char *" pathname ,
-.BI " unsigned int " flags ", struct mount_attr *" attr \
-", size_t " size );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR mount_setattr (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR mount_setattr ()
-system call changes the mount properties of a mount or an entire mount tree.
-If
-.I pathname
-is a relative pathname,
-then it is interpreted relative to
-the directory referred to by the file descriptor
-.IR dirfd .
-If
-.I dirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I pathname
-is interpreted relative to
-the current working directory of the calling process.
-If
-.I pathname
-is the empty string and
-.B AT_EMPTY_PATH
-is specified in
-.IR flags ,
-then the mount properties of the mount identified by
-.I dirfd
-are changed.
-(See
-.BR openat (2)
-for an explanation of why the
-.I dirfd
-argument is useful.)
-.PP
-The
-.BR mount_setattr ()
-system call uses an extensible structure
-.RI ( "struct mount_attr" )
-to allow for future extensions.
-Any non-flag extensions to
-.BR mount_setattr ()
-will be implemented as new fields appended to the this structure,
-with a zero value in a new field resulting in the kernel behaving
-as though that extension field was not present.
-Therefore,
-the caller
-.I must
-zero-fill this structure on initialization.
-See the "Extensibility" subsection under
-.B NOTES
-for more details.
-.PP
-The
-.I size
-argument should usually be specified as
-.IR "sizeof(struct mount_attr)" .
-However, if the caller is using a kernel that supports an extended
-.IR "struct mount_attr" ,
-but the caller does not intend to make use of these features,
-it is possible to pass the size of an earlier
-version of the structure together with the extended structure.
-This allows the kernel to not copy later parts of the structure
-that aren't used anyway.
-With each extension that changes the size of
-.IR "struct mount_attr" ,
-the kernel will expose a definition of the form
-.BI MOUNT_ATTR_SIZE_VER number\c
-\&.
-For example, the macro for the size of the initial version of
-.I struct mount_attr
-is
-.BR MOUNT_ATTR_SIZE_VER0 .
-.PP
-The
-.I flags
-argument can be used to alter the pathname resolution behavior.
-The supported values are:
-.TP
-.B AT_EMPTY_PATH
-If
-.I pathname
-is the empty string,
-change the mount properties on
-.I dirfd
-itself.
-.TP
-.B AT_RECURSIVE
-Change the mount properties of the entire mount tree.
-.TP
-.B AT_SYMLINK_NOFOLLOW
-Don't follow trailing symbolic links.
-.TP
-.B AT_NO_AUTOMOUNT
-Don't trigger automounts.
-.PP
-The
-.I attr
-argument of
-.BR mount_setattr ()
-is a structure of the following form:
-.PP
-.in +4n
-.EX
-struct mount_attr {
- __u64 attr_set; /* Mount properties to set */
- __u64 attr_clr; /* Mount properties to clear */
- __u64 propagation; /* Mount propagation type */
- __u64 userns_fd; /* User namespace file descriptor */
-};
-.EE
-.in
-.PP
-The
-.I attr_set
-and
-.I attr_clr
-members are used to specify the mount properties that
-are supposed to be set or cleared for a mount or mount tree.
-Flags set in
-.I attr_set
-enable a property on a mount or mount tree,
-and flags set in
-.I attr_clr
-remove a property from a mount or mount tree.
-.PP
-When changing mount properties,
-the kernel will first clear the flags specified
-in the
-.I attr_clr
-field,
-and then set the flags specified in the
-.I attr_set
-field.
-For example, these settings:
-.PP
-.in +4n
-.EX
-struct mount_attr attr = {
- .attr_clr = MOUNT_ATTR_NOEXEC | MOUNT_ATTR_NODEV,
- .attr_set = MOUNT_ATTR_RDONLY | MOUNT_ATTR_NOSUID,
-};
-.EE
-.in
-.PP
-are equivalent to the following steps:
-.PP
-.in +4n
-.EX
-unsigned int current_mnt_flags = mnt\->mnt_flags;
-\&
-/*
- * Clear all flags set in .attr_clr,
- * clearing MOUNT_ATTR_NOEXEC and MOUNT_ATTR_NODEV.
- */
-current_mnt_flags &= \(tiattr\->attr_clr;
-\&
-/*
- * Now set all flags set in .attr_set,
- * applying MOUNT_ATTR_RDONLY and MOUNT_ATTR_NOSUID.
- */
-current_mnt_flags |= attr\->attr_set;
-\&
-mnt\->mnt_flags = current_mnt_flags;
-.EE
-.in
-.PP
-As a result of this change, the mount or mount tree (a) is read-only;
-(b) blocks the execution of set-user-ID and set-group-ID programs;
-(c) allows execution of programs; and (d) allows access to devices.
-.PP
-Multiple changes with the same set of flags requested
-in
-.I attr_clr
-and
-.I attr_set
-are guaranteed to be idempotent after the changes have been applied.
-.PP
-The following mount attributes can be specified in the
-.I attr_set
-or
-.I attr_clr
-fields:
-.TP
-.B MOUNT_ATTR_RDONLY
-If set in
-.IR attr_set ,
-makes the mount read-only.
-If set in
-.IR attr_clr ,
-removes the read-only setting if set on the mount.
-.TP
-.B MOUNT_ATTR_NOSUID
-If set in
-.IR attr_set ,
-causes the mount not to honor the set-user-ID and set-group-ID mode bits and
-file capabilities when executing programs.
-If set in
-.IR attr_clr ,
-clears the set-user-ID, set-group-ID,
-and file capability restriction if set on this mount.
-.TP
-.B MOUNT_ATTR_NODEV
-If set in
-.IR attr_set ,
-prevents access to devices on this mount.
-If set in
-.IR attr_clr ,
-removes the restriction that prevented accessing devices on this mount.
-.TP
-.B MOUNT_ATTR_NOEXEC
-If set in
-.IR attr_set ,
-prevents executing programs on this mount.
-If set in
-.IR attr_clr ,
-removes the restriction that prevented executing programs on this mount.
-.TP
-.B MOUNT_ATTR_NOSYMFOLLOW
-If set in
-.IR attr_set ,
-prevents following symbolic links on this mount.
-If set in
-.IR attr_clr ,
-removes the restriction that prevented following symbolic links on this mount.
-.TP
-.B MOUNT_ATTR_NODIRATIME
-If set in
-.IR attr_set ,
-prevents updating access time for directories on this mount.
-If set in
-.IR attr_clr ,
-removes the restriction that prevented updating access time for directories.
-Note that
-.B MOUNT_ATTR_NODIRATIME
-can be combined with other access-time settings
-and is implied by the noatime setting.
-All other access-time settings are mutually exclusive.
-.TP
-.BR MOUNT_ATTR__ATIME " - changing access-time settings"
-The access-time values listed below are an enumeration that
-includes the value zero, expressed in the bits defined by the mask
-.BR MOUNT_ATTR__ATIME .
-Even though these bits are an enumeration
-(in contrast to the other mount flags such as
-.BR MOUNT_ATTR_NOEXEC ),
-they are nonetheless passed in
-.I attr_set
-and
-.I attr_clr
-for consistency with
-.BR fsmount (2),
-which introduced this behavior.
-.IP
-Note that,
-since the access-time values are an enumeration rather than bit values,
-a caller wanting to transition to a different access-time setting
-cannot simply specify the access-time setting in
-.IR attr_set ,
-but must also include
-.B MOUNT_ATTR__ATIME
-in the
-.I attr_clr
-field.
-The kernel will verify that
-.B MOUNT_ATTR__ATIME
-isn't partially set in
-.I attr_clr
-(i.e., either all bits in the
-.B MOUNT_ATTR__ATIME
-bit field are either set or clear), and that
-.I attr_set
-doesn't have any access-time bits set if
-.B MOUNT_ATTR__ATIME
-isn't set in
-.IR attr_clr .
-.RS
-.TP
-.B MOUNT_ATTR_RELATIME
-When a file is accessed via this mount,
-update the file's last access time (atime)
-only if the current value of atime is less than or equal to
-the file's last modification time (mtime) or last status change time (ctime).
-.IP
-To enable this access-time setting on a mount or mount tree,
-.B MOUNT_ATTR_RELATIME
-must be set in
-.I attr_set
-and
-.B MOUNT_ATTR__ATIME
-must be set in the
-.I attr_clr
-field.
-.TP
-.B MOUNT_ATTR_NOATIME
-Do not update access times for (all types of) files on this mount.
-.IP
-To enable this access-time setting on a mount or mount tree,
-.B MOUNT_ATTR_NOATIME
-must be set in
-.I attr_set
-and
-.B MOUNT_ATTR__ATIME
-must be set in the
-.I attr_clr
-field.
-.TP
-.B MOUNT_ATTR_STRICTATIME
-Always update the last access time (atime)
-when files are accessed on this mount.
-.IP
-To enable this access-time setting on a mount or mount tree,
-.B MOUNT_ATTR_STRICTATIME
-must be set in
-.I attr_set
-and
-.B MOUNT_ATTR__ATIME
-must be set in the
-.I attr_clr
-field.
-.RE
-.TP
-.B MOUNT_ATTR_IDMAP
-If set in
-.IR attr_set ,
-creates an ID-mapped mount.
-The ID mapping is taken from the user namespace specified in
-.I userns_fd
-and attached to the mount.
-.IP
-Since it is not supported to
-change the ID mapping of a mount after it has been ID mapped,
-it is invalid to specify
-.B MOUNT_ATTR_IDMAP
-in
-.IR attr_clr .
-.IP
-For further details, see the subsection "ID-mapped mounts" under NOTES.
-.PP
-The
-.I propagation
-field is used to specify the propagation type of the mount or mount tree.
-This field either has the value zero,
-meaning leave the propagation type unchanged, or it has one of
-the following values:
-.TP
-.B MS_PRIVATE
-Turn all mounts into private mounts.
-.TP
-.B MS_SHARED
-Turn all mounts into shared mounts.
-.TP
-.B MS_SLAVE
-Turn all mounts into dependent mounts.
-.TP
-.B MS_UNBINDABLE
-Turn all mounts into unbindable mounts.
-.PP
-For further details on the above propagation types, see
-.BR mount_namespaces (7).
-.SH RETURN VALUE
-On success,
-.BR mount_setattr ()
-returns zero.
-On error,
-\-1 is returned and
-.I errno
-is set to indicate the cause of the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I pathname
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B EBADF
-.I userns_fd
-is not a valid file descriptor.
-.TP
-.B EBUSY
-The caller tried to change the mount to
-.BR MOUNT_ATTR_RDONLY ,
-but the mount still holds files open for writing.
-.TP
-.B EBUSY
-The caller tried to create an ID-mapped mount raising
-.B MOUNT_ATTR_IDMAP
-and specifying
-.I userns_fd
-but the mount still holds files open for writing.
-.TP
-.B EINVAL
-The pathname specified via the
-.I dirfd
-and
-.I pathname
-arguments to
-.BR mount_setattr ()
-isn't a mount point.
-.TP
-.B EINVAL
-An unsupported value was set in
-.IR flags .
-.TP
-.B EINVAL
-An unsupported value was specified in the
-.I attr_set
-field of
-.IR mount_attr .
-.TP
-.B EINVAL
-An unsupported value was specified in the
-.I attr_clr
-field of
-.IR mount_attr .
-.TP
-.B EINVAL
-An unsupported value was specified in the
-.I propagation
-field of
-.IR mount_attr .
-.TP
-.B EINVAL
-More than one of
-.BR MS_SHARED ,
-.BR MS_SLAVE ,
-.BR MS_PRIVATE ,
-or
-.B MS_UNBINDABLE
-was set in the
-.I propagation
-field of
-.IR mount_attr .
-.TP
-.B EINVAL
-An access-time setting was specified in the
-.I attr_set
-field without
-.B MOUNT_ATTR__ATIME
-being set in the
-.I attr_clr
-field.
-.TP
-.B EINVAL
-.B MOUNT_ATTR_IDMAP
-was specified in
-.IR attr_clr .
-.TP
-.B EINVAL
-A file descriptor value was specified in
-.I userns_fd
-which exceeds
-.BR INT_MAX .
-.TP
-.B EINVAL
-A valid file descriptor value was specified in
-.IR userns_fd ,
-but the file descriptor did not refer to a user namespace.
-.TP
-.B EINVAL
-The underlying filesystem does not support ID-mapped mounts.
-.TP
-.B EINVAL
-The mount that is to be ID mapped is not a detached mount;
-that is, the mount has not previously been visible in a mount namespace.
-.TP
-.B EINVAL
-A partial access-time setting was specified in
-.I attr_clr
-instead of
-.B MOUNT_ATTR__ATIME
-being set.
-.TP
-.B EINVAL
-The mount is located outside the caller's mount namespace.
-.TP
-.B EINVAL
-The underlying filesystem has been mounted in a mount namespace that is
-owned by a noninitial user namespace
-.TP
-.B ENOENT
-A pathname was empty or had a nonexistent component.
-.TP
-.B ENOMEM
-When changing mount propagation to
-.BR MS_SHARED ,
-a new peer group ID needs to be allocated for all mounts without a peer group
-ID set.
-This allocation failed because there was not
-enough memory to allocate the relevant internal structures.
-.TP
-.B ENOSPC
-When changing mount propagation to
-.BR MS_SHARED ,
-a new peer group ID needs to be allocated for all mounts without a peer group
-ID set.
-This allocation failed because
-the kernel has run out of IDs.
-.\" Christian Brauner: i.e. someone has somehow managed to
-.\" allocate so many peer groups and managed to keep the kernel running
-.\" (???) that the ida has ran out of ids
-.\" Note that technically further error codes are possible that are
-.\" specific to the ID allocation implementation used.
-.TP
-.B EPERM
-One of the mounts had at least one of
-.BR MOUNT_ATTR_NOATIME ,
-.BR MOUNT_ATTR_NODEV ,
-.BR MOUNT_ATTR_NODIRATIME ,
-.BR MOUNT_ATTR_NOEXEC ,
-.BR MOUNT_ATTR_NOSUID ,
-or
-.B MOUNT_ATTR_RDONLY
-set and the flag is locked.
-Mount attributes become locked on a mount if:
-.RS
-.IP \[bu] 3
-A new mount or mount tree is created causing mount propagation across user
-namespaces
-(i.e., propagation to a mount namespace owned by a different user namespace).
-The kernel will lock the aforementioned flags to prevent these sensitive
-properties from being altered.
-.IP \[bu]
-A new mount and user namespace pair is created.
-This happens for example when specifying
-.B CLONE_NEWUSER | CLONE_NEWNS
-in
-.BR unshare (2),
-.BR clone (2),
-or
-.BR clone3 (2).
-The aforementioned flags become locked in the new mount namespace
-to prevent sensitive mount properties from being altered.
-Since the newly created mount namespace will be owned by the
-newly created user namespace,
-a calling process that is privileged in the new
-user namespace would\[em]in the absence of such locking\[em]be
-able to alter sensitive mount properties (e.g., to remount a mount
-that was marked read-only as read-write in the new mount namespace).
-.RE
-.TP
-.B EPERM
-A valid file descriptor value was specified in
-.IR userns_fd ,
-but the file descriptor refers to the initial user namespace.
-.TP
-.B EPERM
-An attempt was made to add an ID mapping to a mount that is already ID mapped.
-.TP
-.B EPERM
-The caller does not have
-.B CAP_SYS_ADMIN
-in the initial user namespace.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 5.12.
-.\" commit 7d6beb71da3cc033649d641e1e608713b8220290
-.\" commit 2a1867219c7b27f928e2545782b86daaf9ad50bd
-.\" commit 9caccd41541a6f7d6279928d9f971f6642c361af
-.SH NOTES
-.SS ID-mapped mounts
-Creating an ID-mapped mount makes it possible to
-change the ownership of all files located under a mount.
-Thus, ID-mapped mounts make it possible to
-change ownership in a temporary and localized way.
-It is a localized change because the ownership changes are
-visible only via a specific mount.
-All other users and locations where the filesystem is exposed are unaffected.
-It is a temporary change because
-the ownership changes are tied to the lifetime of the mount.
-.PP
-Whenever callers interact with the filesystem through an ID-mapped mount,
-the ID mapping of the mount will be applied to
-user and group IDs associated with filesystem objects.
-This encompasses the user and group IDs associated with inodes
-and also the following
-.BR xattr (7)
-keys:
-.IP \[bu] 3
-.IR security.capability ,
-whenever filesystem capabilities
-are stored or returned in the
-.B VFS_CAP_REVISION_3
-format,
-which stores a root user ID alongside the capabilities
-(see
-.BR capabilities (7)).
-.IP \[bu]
-.I system.posix_acl_access
-and
-.IR system.posix_acl_default ,
-whenever user IDs or group IDs are stored in
-.B ACL_USER
-or
-.B ACL_GROUP
-entries.
-.PP
-The following conditions must be met in order to create an ID-mapped mount:
-.IP \[bu] 3
-The caller must have the
-.B CAP_SYS_ADMIN
-capability in the user namespace the filesystem was mounted in.
-.\" commit bd303368b776eead1c29e6cdda82bde7128b82a7
-.\" Christian Brauner
-.\" Note, currently no filesystems mountable in non-initial user namespaces
-.\" support ID-mapped mounts.
-.IP \[bu]
-The underlying filesystem must support ID-mapped mounts.
-Currently, the following filesystems support ID-mapped mounts:
-.\" fs_flags = FS_ALLOW_IDMAP in kernel sources
-.RS
-.IP \[bu] 3
-.PD 0
-.BR xfs (5)
-(since Linux 5.12)
-.IP \[bu]
-.BR ext4 (5)
-(since Linux 5.12)
-.IP \[bu]
-.B FAT
-(since Linux 5.12)
-.IP \[bu]
-.BR btrfs (5)
-(since Linux 5.15)
-.\" commit 5b9b26f5d0b88b74001dcfe4ab8a8f2f4e744112
-.IP \[bu]
-.B ntfs3
-(since Linux 5.15)
-.\" commit 82cae269cfa953032fbb8980a7d554d60fb00b17
-.IP \[bu]
-.B f2fs
-(since Linux 5.18)
-.\" commit 984fc4e76d63345499f01c0c198a4b44860cf027
-.IP \[bu]
-.B erofs
-(since Linux 5.19)
-.\" commit 6c459b78d4793afbba6d864c466cc5cd2932459d
-.IP \[bu]
-.B overlayfs
-(ID-mapped lower and upper layers supported since Linux 5.19)
-.PD
-.RE
-.IP \[bu]
-The mount must not already be ID-mapped.
-This also implies that the ID mapping of a mount cannot be altered.
-.IP \[bu]
-The mount must not have any writers.
-.\" commit 1bbcd277a53e08d619ffeec56c5c9287f2bf42f
-.IP \[bu]
-The mount must be a detached mount;
-that is,
-it must have been created by calling
-.BR open_tree (2)
-with the
-.B OPEN_TREE_CLONE
-flag and it must not already have been visible in a mount namespace.
-(To put things another way:
-the mount must not have been attached to the filesystem hierarchy
-with a system call such as
-.BR move_mount (2).)
-.PP
-ID mappings can be created for user IDs, group IDs, and project IDs.
-An ID mapping is essentially a mapping of a range of user or group IDs into
-another or the same range of user or group IDs.
-ID mappings are written to map files as three numbers
-separated by white space.
-The first two numbers specify the starting user or group ID
-in each of the two user namespaces.
-The third number specifies the range of the ID mapping.
-For example,
-a mapping for user IDs such as "1000\ 1001\ 1" would indicate that
-user ID 1000 in the caller's user namespace is mapped to
-user ID 1001 in its ancestor user namespace.
-Since the map range is 1,
-only user ID 1000 is mapped.
-.PP
-It is possible to specify up to 340 ID mappings for each ID mapping type.
-If any user IDs or group IDs are not mapped,
-all files owned by that unmapped user or group ID will appear as
-being owned by the overflow user ID or overflow group ID respectively.
-.PP
-Further details on setting up ID mappings can be found in
-.BR user_namespaces (7).
-.PP
-In the common case, the user namespace passed in
-.I userns_fd
-(together with
-.B MOUNT_ATTR_IDMAP
-in
-.IR attr_set )
-to create an ID-mapped mount will be the user namespace of a container.
-In other scenarios it will be a dedicated user namespace associated with
-a user's login session as is the case for portable home directories in
-.BR systemd-homed.service (8)).
-It is also perfectly fine to create a dedicated user namespace
-for the sake of ID mapping a mount.
-.PP
-ID-mapped mounts can be useful in the following
-and a variety of other scenarios:
-.IP \[bu] 3
-Sharing files or filesystems
-between multiple users or multiple machines,
-especially in complex scenarios.
-For example,
-ID-mapped mounts are used to implement portable home directories in
-.BR systemd-homed.service (8),
-where they allow users to move their home directory
-to an external storage device
-and use it on multiple computers
-where they are assigned different user IDs and group IDs.
-This effectively makes it possible to
-assign random user IDs and group IDs at login time.
-.IP \[bu]
-Sharing files or filesystems
-from the host with unprivileged containers.
-This allows a user to avoid having to change ownership permanently through
-.BR chown (2).
-.IP \[bu]
-ID mapping a container's root filesystem.
-Users don't need to change ownership permanently through
-.BR chown (2).
-Especially for large root filesystems, using
-.BR chown (2)
-can be prohibitively expensive.
-.IP \[bu]
-Sharing files or filesystems
-between containers with non-overlapping ID mappings.
-.IP \[bu]
-Implementing discretionary access (DAC) permission checking
-for filesystems lacking a concept of ownership.
-.IP \[bu]
-Efficiently changing ownership on a per-mount basis.
-In contrast to
-.BR chown (2),
-changing ownership of large sets of files is instantaneous with
-ID-mapped mounts.
-This is especially useful when ownership of
-an entire root filesystem of a virtual machine or container
-is to be changed as mentioned above.
-With ID-mapped mounts,
-a single
-.BR mount_setattr ()
-system call will be sufficient to change the ownership of all files.
-.IP \[bu]
-Taking the current ownership into account.
-ID mappings specify precisely
-what a user or group ID is supposed to be mapped to.
-This contrasts with the
-.BR chown (2)
-system call which cannot by itself
-take the current ownership of the files it changes into account.
-It simply changes the ownership to the specified user ID and group ID.
-.IP \[bu]
-Locally and temporarily restricted ownership changes.
-ID-mapped mounts make it possible to change ownership locally,
-restricting the ownership changes to specific mounts,
-and temporarily as the ownership changes only apply as long as the mount exists.
-By contrast,
-changing ownership via the
-.BR chown (2)
-system call changes the ownership globally and permanently.
-.\"
-.SS Extensibility
-In order to allow for future extensibility,
-.BR mount_setattr ()
-requires the user-space application to specify the size of the
-.I mount_attr
-structure that it is passing.
-By providing this information, it is possible for
-.BR mount_setattr ()
-to provide both forwards- and backwards-compatibility, with
-.I size
-acting as an implicit version number.
-(Because new extension fields will always
-be appended, the structure size will always increase.)
-This extensibility design is very similar to other system calls such as
-.BR perf_setattr (2),
-.BR perf_event_open (2),
-.BR clone3 (2)
-and
-.BR openat2 (2).
-.PP
-Let
-.I usize
-be the size of the structure as specified by the user-space application,
-and let
-.I ksize
-be the size of the structure which the kernel supports,
-then there are three cases to consider:
-.IP \[bu] 3
-If
-.I ksize
-equals
-.IR usize ,
-then there is no version mismatch and
-.I attr
-can be used verbatim.
-.IP \[bu]
-If
-.I ksize
-is larger than
-.IR usize ,
-then there are some extension fields that the kernel supports
-which the user-space application is unaware of.
-Because a zero value in any added extension field signifies a no-op,
-the kernel treats all of the extension fields
-not provided by the user-space application
-as having zero values.
-This provides backwards-compatibility.
-.IP \[bu]
-If
-.I ksize
-is smaller than
-.IR usize ,
-then there are some extension fields which the user-space application is aware
-of but which the kernel does not support.
-Because any extension field must have its zero values signify a no-op,
-the kernel can safely ignore the unsupported extension fields
-if they are all zero.
-If any unsupported extension fields are non-zero,
-then \-1 is returned and
-.I errno
-is set to
-.BR E2BIG .
-This provides forwards-compatibility.
-.PP
-Because the definition of
-.I struct mount_attr
-may change in the future
-(with new fields being added when system headers are updated),
-user-space applications should zero-fill
-.I struct mount_attr
-to ensure that recompiling the program with new headers will not result in
-spurious errors at run time.
-The simplest way is to use a designated initializer:
-.PP
-.in +4n
-.EX
-struct mount_attr attr = {
- .attr_set = MOUNT_ATTR_RDONLY,
- .attr_clr = MOUNT_ATTR_NODEV
-};
-.EE
-.in
-.PP
-Alternatively, the structure can be zero-filled using
-.BR memset (3)
-or similar functions:
-.PP
-.in +4n
-.EX
-struct mount_attr attr;
-memset(&attr, 0, sizeof(attr));
-attr.attr_set = MOUNT_ATTR_RDONLY;
-attr.attr_clr = MOUNT_ATTR_NODEV;
-.EE
-.in
-.PP
-A user-space application that wishes to determine which extensions the running
-kernel supports can do so by conducting a binary search on
-.I size
-with a structure which has every byte nonzero
-(to find the largest value which doesn't produce an error of
-.BR E2BIG ).
-.SH EXAMPLES
-.\" SRC BEGIN (mount_setattr.c)
-.EX
-/*
- * This program allows the caller to create a new detached mount
- * and set various properties on it.
- */
-#define _GNU_SOURCE
-#include <err.h>
-#include <fcntl.h>
-#include <getopt.h>
-#include <linux/mount.h>
-#include <linux/types.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/syscall.h>
-#include <unistd.h>
-\&
-static inline int
-mount_setattr(int dirfd, const char *pathname, unsigned int flags,
- struct mount_attr *attr, size_t size)
-{
- return syscall(SYS_mount_setattr, dirfd, pathname, flags,
- attr, size);
-}
-\&
-static inline int
-open_tree(int dirfd, const char *filename, unsigned int flags)
-{
- return syscall(SYS_open_tree, dirfd, filename, flags);
-}
-\&
-static inline int
-move_mount(int from_dirfd, const char *from_pathname,
- int to_dirfd, const char *to_pathname, unsigned int flags)
-{
- return syscall(SYS_move_mount, from_dirfd, from_pathname,
- to_dirfd, to_pathname, flags);
-}
-\&
-static const struct option longopts[] = {
- {"map\-mount", required_argument, NULL, \[aq]a\[aq]},
- {"recursive", no_argument, NULL, \[aq]b\[aq]},
- {"read\-only", no_argument, NULL, \[aq]c\[aq]},
- {"block\-setid", no_argument, NULL, \[aq]d\[aq]},
- {"block\-devices", no_argument, NULL, \[aq]e\[aq]},
- {"block\-exec", no_argument, NULL, \[aq]f\[aq]},
- {"no\-access\-time", no_argument, NULL, \[aq]g\[aq]},
- { NULL, 0, NULL, 0 },
-};
-\&
-int
-main(int argc, char *argv[])
-{
- int fd_userns = \-1;
- int fd_tree;
- int index = 0;
- int ret;
- bool recursive = false;
- const char *source;
- const char *target;
- struct mount_attr *attr = &(struct mount_attr){};
-\&
- while ((ret = getopt_long_only(argc, argv, "",
- longopts, &index)) != \-1) {
- switch (ret) {
- case \[aq]a\[aq]:
- fd_userns = open(optarg, O_RDONLY | O_CLOEXEC);
- if (fd_userns == \-1)
- err(EXIT_FAILURE, "open(%s)", optarg);
- break;
- case \[aq]b\[aq]:
- recursive = true;
- break;
- case \[aq]c\[aq]:
- attr\->attr_set |= MOUNT_ATTR_RDONLY;
- break;
- case \[aq]d\[aq]:
- attr\->attr_set |= MOUNT_ATTR_NOSUID;
- break;
- case \[aq]e\[aq]:
- attr\->attr_set |= MOUNT_ATTR_NODEV;
- break;
- case \[aq]f\[aq]:
- attr\->attr_set |= MOUNT_ATTR_NOEXEC;
- break;
- case \[aq]g\[aq]:
- attr\->attr_set |= MOUNT_ATTR_NOATIME;
- attr\->attr_clr |= MOUNT_ATTR__ATIME;
- break;
- default:
- errx(EXIT_FAILURE, "Invalid argument specified");
- }
- }
-\&
- if ((argc \- optind) < 2)
- errx(EXIT_FAILURE, "Missing source or target mount point");
-\&
- source = argv[optind];
- target = argv[optind + 1];
-\&
- /* In the following, \-1 as the \[aq]dirfd\[aq] argument ensures that
- open_tree() fails if \[aq]source\[aq] is not an absolute pathname. */
-.\" Christian Brauner
-.\" When writing programs I like to never use relative paths with AT_FDCWD
-.\" because. Because making assumptions about the current working directory
-.\" of the calling process is just too easy to get wrong; especially when
-.\" pivot_root() or chroot() are in play.
-.\" My absolut preference (joke intended) is to open a well-known starting
-.\" point with an absolute path to get a dirfd and then scope all future
-.\" operations beneath that dirfd. This already works with old-style
-.\" openat() and _very_ cautious programming but openat2() and its
-.\" resolve-flag space have made this **chef's kiss**.
-.\" If I can't operate based on a well-known dirfd I use absolute paths
-.\" with a -EBADF dirfd passed to *at() functions.
-\&
- fd_tree = open_tree(\-1, source,
- OPEN_TREE_CLONE | OPEN_TREE_CLOEXEC |
- AT_EMPTY_PATH | (recursive ? AT_RECURSIVE : 0));
- if (fd_tree == \-1)
- err(EXIT_FAILURE, "open(%s)", source);
-\&
- if (fd_userns >= 0) {
- attr\->attr_set |= MOUNT_ATTR_IDMAP;
- attr\->userns_fd = fd_userns;
- }
-\&
- ret = mount_setattr(fd_tree, "",
- AT_EMPTY_PATH | (recursive ? AT_RECURSIVE : 0),
- attr, sizeof(struct mount_attr));
- if (ret == \-1)
- err(EXIT_FAILURE, "mount_setattr");
-\&
- close(fd_userns);
-\&
- /* In the following, \-1 as the \[aq]to_dirfd\[aq] argument ensures that
- open_tree() fails if \[aq]target\[aq] is not an absolute pathname. */
-\&
- ret = move_mount(fd_tree, "", \-1, target,
- MOVE_MOUNT_F_EMPTY_PATH);
- if (ret == \-1)
- err(EXIT_FAILURE, "move_mount() to %s", target);
-\&
- close(fd_tree);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR newgidmap (1),
-.BR newuidmap (1),
-.BR clone (2),
-.BR mount (2),
-.BR unshare (2),
-.BR proc (5),
-.BR capabilities (7),
-.BR mount_namespaces (7),
-.BR user_namespaces (7),
-.BR xattr (7)
diff --git a/man2/move_pages.2 b/man2/move_pages.2
deleted file mode 100644
index c98edf7ff..000000000
--- a/man2/move_pages.2
+++ /dev/null
@@ -1,262 +0,0 @@
-.\" This manpage is Copyright (C) 2006 Silicon Graphics, Inc.
-.\" Christoph Lameter
-.\"
-.\" %%%LICENSE_START(VERBATIM_TWO_PARA)
-.\" Permission is granted to make and distribute verbatim copies of this
-.\" manual provided the copyright notice and this permission notice are
-.\" preserved on all copies.
-.\"
-.\" Permission is granted to copy and distribute modified versions of this
-.\" manual under the conditions for verbatim copying, provided that the
-.\" entire resulting derived work is distributed under the terms of a
-.\" permission notice identical to this one.
-.\" %%%LICENSE_END
-.\"
-.\" FIXME Should programs normally be using move_pages() directly, or should
-.\" they rather be using interfaces in the numactl package?
-.\" (e.g., compare with recommendation in mbind(2)).
-.\" Does this page need to give advice on this topic?
-.\"
-.TH move_pages 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-move_pages \- move individual pages of a process to another node
-.SH LIBRARY
-NUMA (Non-Uniform Memory Access) policy library
-.RI ( libnuma ", " \-lnuma )
-.SH SYNOPSIS
-.nf
-.B #include <numaif.h>
-.PP
-.BI "long move_pages(int " pid ", unsigned long " count ", \
-void *" pages [. count ],
-.BI " const int " nodes [. count "], int " status [. count "], \
-int " flags );
-.fi
-.SH DESCRIPTION
-.BR move_pages ()
-moves the specified
-.I pages
-of the process
-.I pid
-to the memory nodes specified by
-.IR nodes .
-The result of the move is reflected in
-.IR status .
-The
-.I flags
-indicate constraints on the pages to be moved.
-.PP
-.I pid
-is the ID of the process in which pages are to be moved.
-If
-.I pid
-is 0, then
-.BR move_pages ()
-moves pages of the calling process.
-.PP
-To move pages in another process requires the following privileges:
-.IP \[bu] 3
-Up to and including Linux 4.12:
-the caller must be privileged
-.RB ( CAP_SYS_NICE )
-or the real or effective user ID of the calling process must match the
-real or saved-set user ID of the target process.
-.IP \[bu]
-The older rules allowed the caller to discover various
-virtual address choices made by the kernel that could lead
-to the defeat of address-space-layout randomization
-for a process owned by the same UID as the caller,
-the rules were changed starting with Linux 4.13.
-Since Linux 4.13,
-.\" commit 197e7e521384a23b9e585178f3f11c9fa08274b9
-permission is governed by a ptrace access mode
-.B PTRACE_MODE_READ_REALCREDS
-check with respect to the target process; see
-.BR ptrace (2).
-.PP
-.I count
-is the number of pages to move.
-It defines the size of the three arrays
-.IR pages ,
-.IR nodes ,
-and
-.IR status .
-.PP
-.I pages
-is an array of pointers to the pages that should be moved.
-These are pointers that should be aligned to page boundaries.
-.\" FIXME Describe the result if pointers in the 'pages' array are
-.\" not aligned to page boundaries
-Addresses are specified as seen by the process specified by
-.IR pid .
-.PP
-.I nodes
-is an array of integers that specify the desired location for each page.
-Each element in the array is a node number.
-.I nodes
-can also be NULL, in which case
-.BR move_pages ()
-does not move any pages but instead will return the node
-where each page currently resides, in the
-.I status
-array.
-Obtaining the status of each page may be necessary to determine
-pages that need to be moved.
-.PP
-.I status
-is an array of integers that return the status of each page.
-The array contains valid values only if
-.BR move_pages ()
-did not return an error.
-Preinitialization of the array to a value
-which cannot represent a real numa node or valid error of status array
-could help to identify pages that have been migrated.
-.PP
-.I flags
-specify what types of pages to move.
-.B MPOL_MF_MOVE
-means that only pages that are in exclusive use by the process
-are to be moved.
-.B MPOL_MF_MOVE_ALL
-means that pages shared between multiple processes can also be moved.
-The process must be privileged
-.RB ( CAP_SYS_NICE )
-to use
-.BR MPOL_MF_MOVE_ALL .
-.SS Page states in the status array
-The following values can be returned in each element of the
-.I status
-array.
-.TP
-.B 0..MAX_NUMNODES
-Identifies the node on which the page resides.
-.TP
-.B \-EACCES
-The page is mapped by multiple processes and can be moved only if
-.B MPOL_MF_MOVE_ALL
-is specified.
-.TP
-.B \-EBUSY
-The page is currently busy and cannot be moved.
-Try again later.
-This occurs if a page is undergoing I/O or another kernel subsystem
-is holding a reference to the page.
-.TP
-.B \-EFAULT
-This is a zero page or the memory area is not mapped by the process.
-.TP
-.B \-EIO
-Unable to write back a page.
-The page has to be written back
-in order to move it since the page is dirty and the filesystem
-does not provide a migration function that would allow the move
-of dirty pages.
-.TP
-.B \-EINVAL
-A dirty page cannot be moved.
-The filesystem does not
-provide a migration function and has no ability to write back pages.
-.TP
-.B \-ENOENT
-The page is not present.
-.TP
-.B \-ENOMEM
-Unable to allocate memory on target node.
-.SH RETURN VALUE
-On success
-.BR move_pages ()
-returns zero.
-.\" FIXME . Is the following quite true: does the wrapper in numactl
-.\" do the right thing?
-On error, it returns \-1, and sets
-.I errno
-to indicate the error.
-If positive value is returned, it is the number of
-nonmigrated pages.
-.SH ERRORS
-.TP
-.B Positive value
-The number of nonmigrated pages if they were the result of nonfatal
-reasons (since
-.\" commit a49bd4d7163707de377aee062f17befef6da891b
-Linux 4.17).
-.TP
-.B E2BIG
-Too many pages to move.
-Since Linux 2.6.29,
-.\" commit 3140a2273009c01c27d316f35ab76a37e105fdd8
-the kernel no longer generates this error.
-.TP
-.B EACCES
-.\" FIXME Clarify "current cpuset" in the description of the EACCES error.
-.\" Is that the cpuset of the caller or the target?
-One of the target nodes is not allowed by the current cpuset.
-.TP
-.B EFAULT
-Parameter array could not be accessed.
-.TP
-.B EINVAL
-Flags other than
-.B MPOL_MF_MOVE
-and
-.B MPOL_MF_MOVE_ALL
-was specified or an attempt was made to migrate pages of a kernel thread.
-.TP
-.B ENODEV
-One of the target nodes is not online.
-.TP
-.B EPERM
-The caller specified
-.B MPOL_MF_MOVE_ALL
-without sufficient privileges
-.RB ( CAP_SYS_NICE ).
-Or, the caller attempted to move pages of a process belonging
-to another user but did not have privilege to do so
-.RB ( CAP_SYS_NICE ).
-.TP
-.B ESRCH
-Process does not exist.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.18.
-.SH NOTES
-For information on library support, see
-.BR numa (7).
-.PP
-Use
-.BR get_mempolicy (2)
-with the
-.B MPOL_F_MEMS_ALLOWED
-flag to obtain the set of nodes that are allowed by
-.\" FIXME Clarify "current cpuset". Is that the cpuset of the caller
-.\" or the target?
-the current cpuset.
-Note that this information is subject to change at any
-time by manual or automatic reconfiguration of the cpuset.
-.PP
-Use of this function may result in pages whose location
-(node) violates the memory policy established for the
-specified addresses (See
-.BR mbind (2))
-and/or the specified process (See
-.BR set_mempolicy (2)).
-That is, memory policy does not constrain the destination
-nodes used by
-.BR move_pages ().
-.PP
-The
-.I <numaif.h>
-header is not included with glibc, but requires installing
-.I libnuma\-devel
-or a similar package.
-.SH SEE ALSO
-.BR get_mempolicy (2),
-.BR mbind (2),
-.BR set_mempolicy (2),
-.BR numa (3),
-.BR numa_maps (5),
-.BR cpuset (7),
-.BR numa (7),
-.BR migratepages (8),
-.BR numastat (8)
diff --git a/man2/mprotect.2 b/man2/mprotect.2
deleted file mode 100644
index 1fe3e6a13..000000000
--- a/man2/mprotect.2
+++ /dev/null
@@ -1,363 +0,0 @@
-.\" Copyright (C) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (C) 1995 Michael Shields <shields@tembel.org>.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 1996-10-22 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1997-05-31 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 2003-08-24 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 2004-08-16 by Andi Kleen <ak@muc.de>
-.\" 2007-06-02, mtk: Fairly substantial rewrites and additions, and
-.\" a much improved example program.
-.\"
-.TH mprotect 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mprotect, pkey_mprotect \- set protection on a region of memory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/mman.h>
-.PP
-.BI "int mprotect(void " addr [. len "], size_t " len ", int " prot );
-.PP
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <sys/mman.h>
-.PP
-.BI "int pkey_mprotect(void " addr [. len "], size_t " len ", int " prot ", int " pkey ");"
-.fi
-.SH DESCRIPTION
-.BR mprotect ()
-changes the access protections for the calling process's memory pages
-containing any part of the address range in the
-interval [\fIaddr\fP,\ \fIaddr\fP+\fIlen\fP\-1].
-.I addr
-must be aligned to a page boundary.
-.PP
-If the calling process tries to access memory in a manner
-that violates the protections, then the kernel generates a
-.B SIGSEGV
-signal for the process.
-.PP
-.I prot
-is a combination of the following access flags:
-.B PROT_NONE
-or a bitwise OR of the other values in the following list:
-.TP
-.B PROT_NONE
-The memory cannot be accessed at all.
-.TP
-.B PROT_READ
-The memory can be read.
-.TP
-.B PROT_WRITE
-The memory can be modified.
-.TP
-.B PROT_EXEC
-The memory can be executed.
-.TP
-.BR PROT_SEM " (since Linux 2.5.7)"
-The memory can be used for atomic operations.
-This flag was introduced as part of the
-.BR futex (2)
-implementation (in order to guarantee the ability to perform atomic
-operations required by commands such as
-.BR FUTEX_WAIT ),
-but is not currently used in on any architecture.
-.TP
-.BR PROT_SAO " (since Linux 2.6.26)"
-.\" commit aba46c5027cb59d98052231b36efcbbde9c77a1d
-.\" commit ef3d3246a0d06be622867d21af25f997aeeb105f
-The memory should have strong access ordering.
-This feature is specific to
-the PowerPC architecture
-(version 2.06 of the architecture specification adds the SAO CPU feature,
-and it is available on POWER 7 or PowerPC A2, for example).
-.PP
-Additionally (since Linux 2.6.0),
-.I prot
-can have one of the following flags set:
-.TP
-.\" mm/mmap.c:
-.\" vm_flags |= calc_vm_prot_bits(prot, pkey) | calc_vm_flag_bits(flags) |
-.\" mm->def_flags | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC;
-.\" And calc_vm_flag_bits converts only GROWSDOWN/DENYWRITE/LOCKED.
-.B PROT_GROWSUP
-Apply the protection mode up to the end of a mapping
-that grows upwards.
-(Such mappings are created for the stack area on
-architectures\[em]for example, HP-PARISC\[em]that
-have an upwardly growing stack.)
-.\" The VMA is one that was marked with VM_GROWSUP by the kernel
-.\" when the stack was created. Note that (unlike VM_GROWSDOWN),
-.\" there is no mmap() flag (analogous to MAP_GROWSDOWN) for
-.\" creating a VMA that is marked VM_GROWSUP.
-.TP
-.B PROT_GROWSDOWN
-Apply the protection mode down to the beginning of a mapping
-that grows downward
-(which should be a stack segment or a segment mapped with the
-.B MAP_GROWSDOWN
-flag set).
-.PP
-Like
-.BR mprotect (),
-.BR pkey_mprotect ()
-changes the protection on the pages specified by
-.I addr
-and
-.IR len .
-The
-.I pkey
-argument specifies the protection key (see
-.BR pkeys (7))
-to assign to the memory.
-The protection key must be allocated with
-.BR pkey_alloc (2)
-before it is passed to
-.BR pkey_mprotect ().
-For an example of the use of this system call, see
-.BR pkeys (7).
-.SH RETURN VALUE
-On success,
-.BR mprotect ()
-and
-.BR pkey_mprotect ()
-return zero.
-On error, these system calls return \-1, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-The memory cannot be given the specified access.
-This can happen, for example, if you
-.BR mmap (2)
-a file to which you have read-only access, then ask
-.BR mprotect ()
-to mark it
-.BR PROT_WRITE .
-.TP
-.B EINVAL
-\fIaddr\fP is not a valid pointer,
-or not a multiple of the system page size.
-.TP
-.B EINVAL
-.RB ( pkey_mprotect ())
-\fIpkey\fP has not been allocated with
-.BR pkey_alloc (2)
-.TP
-.B EINVAL
-Both
-.B PROT_GROWSUP
-and
-.B PROT_GROWSDOWN
-were specified in
-.IR prot .
-.TP
-.B EINVAL
-Invalid flags specified in
-.IR prot .
-.TP
-.B EINVAL
-(PowerPC architecture)
-.B PROT_SAO
-was specified in
-.IR prot ,
-but SAO hardware feature is not available.
-.TP
-.B ENOMEM
-Internal kernel structures could not be allocated.
-.TP
-.B ENOMEM
-Addresses in the range
-.RI [ addr ,
-.IR addr + len \-1]
-are invalid for the address space of the process,
-or specify one or more pages that are not mapped.
-(Before Linux 2.4.19, the error
-.B EFAULT
-was incorrectly produced for these cases.)
-.TP
-.B ENOMEM
-Changing the protection of a memory region would result in the total number of
-mappings with distinct attributes (e.g., read versus read/write protection)
-exceeding the allowed maximum.
-.\" I.e., the number of VMAs would exceed the 64 kB maximum
-(For example, making the protection of a range
-.B PROT_READ
-in the middle of a region currently protected as
-.B PROT_READ|PROT_WRITE
-would result in three mappings:
-two read/write mappings at each end and a read-only mapping in the middle.)
-.SH VERSIONS
-.\" SVr4 defines an additional error
-.\" code EAGAIN. The SVr4 error conditions don't map neatly onto Linux's.
-POSIX says that the behavior of
-.BR mprotect ()
-is unspecified if it is applied to a region of memory that
-was not obtained via
-.BR mmap (2).
-.PP
-On Linux, it is always permissible to call
-.BR mprotect ()
-on any address in a process's address space (except for the
-kernel vsyscall area).
-In particular, it can be used
-to change existing code mappings to be writable.
-.PP
-Whether
-.B PROT_EXEC
-has any effect different from
-.B PROT_READ
-depends on processor architecture, kernel version, and process state.
-If
-.B READ_IMPLIES_EXEC
-is set in the process's personality flags (see
-.BR personality (2)),
-specifying
-.B PROT_READ
-will implicitly add
-.BR PROT_EXEC .
-.PP
-On some hardware architectures (e.g., i386),
-.B PROT_WRITE
-implies
-.BR PROT_READ .
-.PP
-POSIX.1 says that an implementation may permit access
-other than that specified in
-.IR prot ,
-but at a minimum can allow write access only if
-.B PROT_WRITE
-has been set, and must not allow any access if
-.B PROT_NONE
-has been set.
-.PP
-Applications should be careful when mixing use of
-.BR mprotect ()
-and
-.BR pkey_mprotect ().
-On x86, when
-.BR mprotect ()
-is used with
-.I prot
-set to
-.B PROT_EXEC
-a pkey may be allocated and set on the memory implicitly
-by the kernel, but only when the pkey was 0 previously.
-.PP
-On systems that do not support protection keys in hardware,
-.BR pkey_mprotect ()
-may still be used, but
-.I pkey
-must be set to \-1.
-When called this way, the operation of
-.BR pkey_mprotect ()
-is equivalent to
-.BR mprotect ().
-.SH STANDARDS
-.TP
-.BR mprotect ()
-POSIX.1-2008.
-.TP
-.BR pkey_mprotect ()
-Linux.
-.SH HISTORY
-.TP
-.BR mprotect ()
-POSIX.1-2001, SVr4.
-.TP
-.BR pkey_mprotect ()
-Linux 4.9,
-glibc 2.27.
-.SH NOTES
-.SH EXAMPLES
-.\" sigaction.2 refers to this example
-The program below demonstrates the use of
-.BR mprotect ().
-The program allocates four pages of memory, makes the third
-of these pages read-only, and then executes a loop that walks upward
-through the allocated region modifying bytes.
-.PP
-An example of what we might see when running the program is the
-following:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out"
-Start of region: 0x804c000
-Got SIGSEGV at address: 0x804e000
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (mprotect.c)
-.EX
-#include <malloc.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/mman.h>
-#include <unistd.h>
-\&
-#define handle_error(msg) \e
- do { perror(msg); exit(EXIT_FAILURE); } while (0)
-\&
-static char *buffer;
-\&
-static void
-handler(int sig, siginfo_t *si, void *unused)
-{
- /* Note: calling printf() from a signal handler is not safe
- (and should not be done in production programs), since
- printf() is not async\-signal\-safe; see signal\-safety(7).
- Nevertheless, we use printf() here as a simple way of
- showing that the handler was called. */
-\&
- printf("Got SIGSEGV at address: %p\en", si\->si_addr);
- exit(EXIT_FAILURE);
-}
-\&
-int
-main(void)
-{
- int pagesize;
- struct sigaction sa;
-\&
- sa.sa_flags = SA_SIGINFO;
- sigemptyset(&sa.sa_mask);
- sa.sa_sigaction = handler;
- if (sigaction(SIGSEGV, &sa, NULL) == \-1)
- handle_error("sigaction");
-\&
- pagesize = sysconf(_SC_PAGE_SIZE);
- if (pagesize == \-1)
- handle_error("sysconf");
-\&
- /* Allocate a buffer aligned on a page boundary;
- initial protection is PROT_READ | PROT_WRITE. */
-\&
- buffer = memalign(pagesize, 4 * pagesize);
- if (buffer == NULL)
- handle_error("memalign");
-\&
- printf("Start of region: %p\en", buffer);
-\&
- if (mprotect(buffer + pagesize * 2, pagesize,
- PROT_READ) == \-1)
- handle_error("mprotect");
-\&
- for (char *p = buffer ; ; )
- *(p++) = \[aq]a\[aq];
-\&
- printf("Loop completed\en"); /* Should never happen */
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR mmap (2),
-.BR sysconf (3),
-.BR pkeys (7)
diff --git a/man2/mpx.2 b/man2/mpx.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/mpx.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/mq_getsetattr.2 b/man2/mq_getsetattr.2
deleted file mode 100644
index ebdb42e79..000000000
--- a/man2/mq_getsetattr.2
+++ /dev/null
@@ -1,33 +0,0 @@
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH mq_getsetattr 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mq_getsetattr \- get/set message queue attributes
-.SH SYNOPSIS
-.nf
-.BR "#include <mqueue.h>" " /* Definition of " "struct mq_attr" " */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_mq_getsetattr, mqd_t " mqdes ,
-.BI " const struct mq_attr *" newattr ", struct mq_attr *" oldattr );
-.fi
-.SH DESCRIPTION
-Do not use this system call.
-.PP
-This is the low-level system call used to implement
-.BR mq_getattr (3)
-and
-.BR mq_setattr (3).
-For an explanation of how this system call operates,
-see the description of
-.BR mq_setattr (3).
-.SH STANDARDS
-None.
-.SH NOTES
-Never call it unless you are writing a C library!
-.SH SEE ALSO
-.BR mq_getattr (3),
-.BR mq_overview (7)
diff --git a/man2/mq_notify.2 b/man2/mq_notify.2
deleted file mode 100644
index 505a45e2e..000000000
--- a/man2/mq_notify.2
+++ /dev/null
@@ -1,2 +0,0 @@
-.so man3/mq_notify.3
-.\" Because mq_notify(3) is layered on a system call of the same name
diff --git a/man2/mq_open.2 b/man2/mq_open.2
deleted file mode 100644
index ce82835e6..000000000
--- a/man2/mq_open.2
+++ /dev/null
@@ -1,2 +0,0 @@
-.so man3/mq_open.3
-.\" Because mq_open(3) is layered on a system call of the same name
diff --git a/man2/mq_timedreceive.2 b/man2/mq_timedreceive.2
deleted file mode 100644
index b4184f8c2..000000000
--- a/man2/mq_timedreceive.2
+++ /dev/null
@@ -1,2 +0,0 @@
-.so man3/mq_timedreceive.3
-.\" Because mq_timedreceive(3) is layered on a system call of the same name
diff --git a/man2/mq_timedsend.2 b/man2/mq_timedsend.2
deleted file mode 100644
index db95863ad..000000000
--- a/man2/mq_timedsend.2
+++ /dev/null
@@ -1,2 +0,0 @@
-.so man3/mq_timedsend.3
-.\" Because mq_timedsend(3) is layered on a system call of the same name
diff --git a/man2/mq_unlink.2 b/man2/mq_unlink.2
deleted file mode 100644
index c5f276826..000000000
--- a/man2/mq_unlink.2
+++ /dev/null
@@ -1,2 +0,0 @@
-.so man3/mq_unlink.3
-.\" Because mq_unlink(3) is layered on a system call of the same name
diff --git a/man2/mremap.2 b/man2/mremap.2
deleted file mode 100644
index be215f34d..000000000
--- a/man2/mremap.2
+++ /dev/null
@@ -1,352 +0,0 @@
-.\" Copyright (c) 1996 Tom Bjorkholm <tomb@mydata.se>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 1996-04-11 Tom Bjorkholm <tomb@mydata.se>
-.\" First version written (1.3.86)
-.\" 1996-04-12 Tom Bjorkholm <tomb@mydata.se>
-.\" Update for Linux 1.3.87 and later
-.\" 2005-10-11 mtk: Added NOTES for MREMAP_FIXED; revised EINVAL text.
-.\"
-.TH mremap 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mremap \- remap a virtual memory address
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <sys/mman.h>
-.PP
-.BI "void *mremap(void " old_address [. old_size "], size_t " old_size ,
-.BI " size_t " new_size ", int " flags ", ... /* void *" new_address " */);"
-.fi
-.SH DESCRIPTION
-.BR mremap ()
-expands (or shrinks) an existing memory mapping, potentially
-moving it at the same time (controlled by the \fIflags\fP argument and
-the available virtual address space).
-.PP
-\fIold_address\fP is the old address of the virtual memory block that you
-want to expand (or shrink).
-Note that \fIold_address\fP has to be page
-aligned.
-\fIold_size\fP is the old size of the
-virtual memory block.
-\fInew_size\fP is the requested size of the
-virtual memory block after the resize.
-An optional fifth argument,
-.IR new_address ,
-may be provided; see the description of
-.B MREMAP_FIXED
-below.
-.PP
-If the value of \fIold_size\fP is zero, and \fIold_address\fP refers to
-a shareable mapping (see
-.BR mmap (2)
-.BR MAP_SHARED ),
-then
-.BR mremap ()
-will create a new mapping of the same pages.
-\fInew_size\fP
-will be the size of the new mapping and the location of the new mapping
-may be specified with \fInew_address\fP; see the description of
-.B MREMAP_FIXED
-below.
-If a new mapping is requested via this method, then the
-.B MREMAP_MAYMOVE
-flag must also be specified.
-.PP
-The \fIflags\fP bit-mask argument may be 0, or include the following flags:
-.TP
-.B MREMAP_MAYMOVE
-By default, if there is not sufficient space to expand a mapping
-at its current location, then
-.BR mremap ()
-fails.
-If this flag is specified, then the kernel is permitted to
-relocate the mapping to a new virtual address, if necessary.
-If the mapping is relocated,
-then absolute pointers into the old mapping location
-become invalid (offsets relative to the starting address of
-the mapping should be employed).
-.TP
-.BR MREMAP_FIXED " (since Linux 2.3.31)"
-This flag serves a similar purpose to the
-.B MAP_FIXED
-flag of
-.BR mmap (2).
-If this flag is specified, then
-.BR mremap ()
-accepts a fifth argument,
-.IR "void\ *new_address" ,
-which specifies a page-aligned address to which the mapping must
-be moved.
-Any previous mapping at the address range specified by
-.I new_address
-and
-.I new_size
-is unmapped.
-.IP
-If
-.B MREMAP_FIXED
-is specified, then
-.B MREMAP_MAYMOVE
-must also be specified.
-.TP
-.BR MREMAP_DONTUNMAP " (since Linux 5.7)"
-.\" commit e346b3813067d4b17383f975f197a9aa28a3b077
-This flag, which must be used in conjunction with
-.BR MREMAP_MAYMOVE ,
-remaps a mapping to a new address but does not unmap the mapping at
-.IR old_address .
-.IP
-The
-.B MREMAP_DONTUNMAP
-flag can be used only with private anonymous mappings
-(see the description of
-.B MAP_PRIVATE
-and
-.B MAP_ANONYMOUS
-in
-.BR mmap (2)).
-.IP
-After completion,
-any access to the range specified by
-.I old_address
-and
-.I old_size
-will result in a page fault.
-The page fault will be handled by a
-.BR userfaultfd (2)
-handler
-if the address is in a range previously registered with
-.BR userfaultfd (2).
-Otherwise, the kernel allocates a zero-filled page to handle the fault.
-.IP
-The
-.B MREMAP_DONTUNMAP
-flag may be used to atomically move a mapping while leaving the source
-mapped.
-See NOTES for some possible applications of
-.BR MREMAP_DONTUNMAP .
-.PP
-If the memory segment specified by
-.I old_address
-and
-.I old_size
-is locked (using
-.BR mlock (2)
-or similar), then this lock is maintained when the segment is
-resized and/or relocated.
-As a consequence, the amount of memory locked by the process may change.
-.SH RETURN VALUE
-On success
-.BR mremap ()
-returns a pointer to the new virtual memory area.
-On error, the value
-.B MAP_FAILED
-(that is, \fI(void\ *)\ \-1\fP) is returned,
-and \fIerrno\fP is set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-The caller tried to expand a memory segment that is locked,
-but this was not possible without exceeding the
-.B RLIMIT_MEMLOCK
-resource limit.
-.TP
-.B EFAULT
-Some address in the range
-\fIold_address\fP to \fIold_address\fP+\fIold_size\fP is an invalid
-virtual memory address for this process.
-You can also get
-.B EFAULT
-even if there exist mappings that cover the
-whole address space requested, but those mappings are of different types.
-.TP
-.B EINVAL
-An invalid argument was given.
-Possible causes are:
-.RS
-.IP \[bu] 3
-\fIold_address\fP was not
-page aligned;
-.IP \[bu]
-a value other than
-.B MREMAP_MAYMOVE
-or
-.B MREMAP_FIXED
-or
-.B MREMAP_DONTUNMAP
-was specified in
-.IR flags ;
-.IP \[bu]
-.I new_size
-was zero;
-.IP \[bu]
-.I new_size
-or
-.I new_address
-was invalid;
-.IP \[bu]
-the new address range specified by
-.I new_address
-and
-.I new_size
-overlapped the old address range specified by
-.I old_address
-and
-.IR old_size ;
-.IP \[bu]
-.B MREMAP_FIXED
-or
-.B MREMAP_DONTUNMAP
-was specified without also specifying
-.BR MREMAP_MAYMOVE ;
-.IP \[bu]
-.B MREMAP_DONTUNMAP
-was specified, but one or more pages in the range specified by
-.I old_address
-and
-.I old_size
-were not private anonymous;
-.IP \[bu]
-.B MREMAP_DONTUNMAP
-was specified and
-.I old_size
-was not equal to
-.IR new_size ;
-.IP \[bu]
-\fIold_size\fP was zero and \fIold_address\fP does not refer to a
-shareable mapping (but see BUGS);
-.IP \[bu]
-\fIold_size\fP was zero and the
-.B MREMAP_MAYMOVE
-flag was not specified.
-.RE
-.TP
-.B ENOMEM
-Not enough memory was available to complete the operation.
-Possible causes are:
-.RS
-.IP \[bu] 3
-The memory area cannot be expanded at the current virtual address, and the
-.B MREMAP_MAYMOVE
-flag is not set in \fIflags\fP.
-Or, there is not enough (virtual) memory available.
-.IP \[bu]
-.B MREMAP_DONTUNMAP
-was used causing a new mapping to be created that would exceed the
-(virtual) memory available.
-Or, it would exceed the maximum number of allowed mappings.
-.RE
-.SH STANDARDS
-Linux.
-.SH HISTORY
-.\" 4.2BSD had a (never actually implemented)
-.\" .BR mremap (2)
-.\" call with completely different semantics.
-.\" .PP
-Prior to glibc 2.4, glibc did not expose the definition of
-.BR MREMAP_FIXED ,
-and the prototype for
-.BR mremap ()
-did not allow for the
-.I new_address
-argument.
-.SH NOTES
-.BR mremap ()
-changes the
-mapping between virtual addresses and memory pages.
-This can be used to implement a very efficient
-.BR realloc (3).
-.PP
-In Linux, memory is divided into pages.
-A process has (one or)
-several linear virtual memory segments.
-Each virtual memory segment has one
-or more mappings to real memory pages (in the page table).
-Each virtual memory segment has its own
-protection (access rights), which may cause
-a segmentation violation
-.RB ( SIGSEGV )
-if the memory is accessed incorrectly (e.g.,
-writing to a read-only segment).
-Accessing virtual memory outside of the
-segments will also cause a segmentation violation.
-.PP
-If
-.BR mremap ()
-is used to move or expand an area locked with
-.BR mlock (2)
-or equivalent, the
-.BR mremap ()
-call will make a best effort to populate the new area but will not fail
-with
-.B ENOMEM
-if the area cannot be populated.
-.\"
-.SS MREMAP_DONTUNMAP use cases
-Possible applications for
-.B MREMAP_DONTUNMAP
-include:
-.IP \[bu] 3
-Non-cooperative
-.BR userfaultfd (2):
-an application can yank out a virtual address range using
-.B MREMAP_DONTUNMAP
-and then employ a
-.BR userfaultfd (2)
-handler to handle the page faults that subsequently occur
-as other threads in the process touch pages in the yanked range.
-.IP \[bu]
-Garbage collection:
-.B MREMAP_DONTUNMAP
-can be used in conjunction with
-.BR userfaultfd (2)
-to implement garbage collection algorithms (e.g., in a Java virtual machine).
-Such an implementation can be cheaper (and simpler)
-than conventional garbage collection techniques that involve
-marking pages with protection
-.B PROT_NONE
-in conjunction with the use of a
-.B SIGSEGV
-handler to catch accesses to those pages.
-.SH BUGS
-Before Linux 4.14,
-if
-.I old_size
-was zero and the mapping referred to by
-.I old_address
-was a private mapping
-.RB ( mmap "(2) " MAP_PRIVATE ),
-.BR mremap ()
-created a new private mapping unrelated to the original mapping.
-This behavior was unintended
-and probably unexpected in user-space applications
-(since the intention of
-.BR mremap ()
-is to create a new mapping based on the original mapping).
-Since Linux 4.14,
-.\" commit dba58d3b8c5045ad89c1c95d33d01451e3964db7
-.BR mremap ()
-fails with the error
-.B EINVAL
-in this scenario.
-.SH SEE ALSO
-.BR brk (2),
-.BR getpagesize (2),
-.BR getrlimit (2),
-.BR mlock (2),
-.BR mmap (2),
-.BR sbrk (2),
-.BR malloc (3),
-.BR realloc (3)
-.PP
-Your favorite text book on operating systems
-for more information on paged memory
-(e.g., \fIModern Operating Systems\fP by Andrew S.\& Tanenbaum,
-\fIInside Linux\fP by Randolph Bentson,
-\fIThe Design of the UNIX Operating System\fP by Maurice J.\& Bach)
diff --git a/man2/msgctl.2 b/man2/msgctl.2
deleted file mode 100644
index 926f683a9..000000000
--- a/man2/msgctl.2
+++ /dev/null
@@ -1,424 +0,0 @@
-'\" t
-.\" Copyright 1993 Giorgio Ciucci (giorgio@crcc.it)
-.\" and Copyright 2004, 2005 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Tue Oct 22 08:11:14 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Sun Feb 18 01:59:29 2001 by Andries E. Brouwer <aeb@cwi.nl>
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on CAP_IPC_OWNER requirement
-.\" Modified, 17 Jun 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on CAP_SYS_ADMIN requirement for IPC_SET and IPC_RMID
-.\" Modified, 11 Nov 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Language and formatting clean-ups
-.\" Added msqid_ds and ipc_perm structure definitions
-.\" 2005-08-02, mtk: Added IPC_INFO, MSG_INFO, MSG_STAT descriptions
-.\" 2018-03-20, dbueso: Added MSG_STAT_ANY description.
-.\"
-.TH msgctl 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-msgctl \- System V message control operations
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/msg.h>
-.PP
-.BI "int msgctl(int " msqid ", int " cmd ", struct msqid_ds *" buf );
-.fi
-.SH DESCRIPTION
-.BR msgctl ()
-performs the control operation specified by
-.I cmd
-on the System\ V message queue with identifier
-.IR msqid .
-.PP
-The
-.I msqid_ds
-data structure is defined in \fI<sys/msg.h>\fP as follows:
-.PP
-.in +4n
-.EX
-struct msqid_ds {
- struct ipc_perm msg_perm; /* Ownership and permissions */
- time_t msg_stime; /* Time of last msgsnd(2) */
- time_t msg_rtime; /* Time of last msgrcv(2) */
- time_t msg_ctime; /* Time of creation or last
- modification by msgctl() */
- unsigned long msg_cbytes; /* # of bytes in queue */
- msgqnum_t msg_qnum; /* # number of messages in queue */
- msglen_t msg_qbytes; /* Maximum # of bytes in queue */
- pid_t msg_lspid; /* PID of last msgsnd(2) */
- pid_t msg_lrpid; /* PID of last msgrcv(2) */
-};
-.EE
-.in
-.PP
-The fields of the
-.I msqid_ds
-structure are as follows:
-.TP 11
-.I msg_perm
-This is an
-.I ipc_perm
-structure (see below) that specifies the access permissions on the message
-queue.
-.TP
-.I msg_stime
-Time of the last
-.BR msgsnd (2)
-system call.
-.TP
-.I msg_rtime
-Time of the last
-.BR msgrcv (2)
-system call.
-.TP
-.I msg_ctime
-Time of creation of queue or time of last
-.BR msgctl ()
-.B IPC_SET
-operation.
-.TP
-.I msg_cbytes
-Number of bytes in all messages currently on the message queue.
-This is a nonstandard Linux extension that is not specified in POSIX.
-.TP
-.I msg_qnum
-Number of messages currently on the message queue.
-.TP
-.I msg_qbytes
-Maximum number of bytes of message text allowed on the message
-queue.
-.TP
-.I msg_lspid
-ID of the process that performed the last
-.BR msgsnd (2)
-system call.
-.TP
-.I msg_lrpid
-ID of the process that performed the last
-.BR msgrcv (2)
-system call.
-.PP
-The
-.I ipc_perm
-structure is defined as follows
-(the highlighted fields are settable using
-.BR IPC_SET ):
-.PP
-.in +4n
-.EX
-struct ipc_perm {
- key_t __key; /* Key supplied to msgget(2) */
- uid_t \fBuid\fP; /* Effective UID of owner */
- gid_t \fBgid\fP; /* Effective GID of owner */
- uid_t cuid; /* Effective UID of creator */
- gid_t cgid; /* Effective GID of creator */
- unsigned short \fBmode\fP; /* Permissions */
- unsigned short __seq; /* Sequence number */
-};
-.EE
-.in
-.PP
-The least significant 9 bits of the
-.I mode
-field of the
-.I ipc_perm
-structure define the access permissions for the message queue.
-The permission bits are as follows:
-.TS
-l l.
-0400 Read by user
-0200 Write by user
-0040 Read by group
-0020 Write by group
-0004 Read by others
-0002 Write by others
-.TE
-.PP
-Bits 0100, 0010, and 0001 (the execute bits) are unused by the system.
-.PP
-Valid values for
-.I cmd
-are:
-.TP
-.B IPC_STAT
-Copy information from the kernel data structure associated with
-.I msqid
-into the
-.I msqid_ds
-structure pointed to by
-.IR buf .
-The caller must have read permission on the message queue.
-.TP
-.B IPC_SET
-Write the values of some members of the
-.I msqid_ds
-structure pointed to by
-.I buf
-to the kernel data structure associated with this message queue,
-updating also its
-.I msg_ctime
-member.
-.IP
-The following members of the structure are updated:
-.IR msg_qbytes ,
-.IR msg_perm.uid ,
-.IR msg_perm.gid ,
-and (the least significant 9 bits of)
-.IR msg_perm.mode .
-.IP
-The effective UID of the calling process must match the owner
-.RI ( msg_perm.uid )
-or creator
-.RI ( msg_perm.cuid )
-of the message queue, or the caller must be privileged.
-Appropriate privilege (Linux: the
-.B CAP_SYS_RESOURCE
-capability) is required to raise the
-.I msg_qbytes
-value beyond the system parameter
-.BR MSGMNB .
-.TP
-.B IPC_RMID
-Immediately remove the message queue,
-awakening all waiting reader and writer processes (with an error
-return and
-.I errno
-set to
-.BR EIDRM ).
-The calling process must have appropriate privileges
-or its effective user ID must be either that of the creator or owner
-of the message queue.
-The third argument to
-.BR msgctl ()
-is ignored in this case.
-.TP
-.BR IPC_INFO " (Linux-specific)"
-Return information about system-wide message queue limits and
-parameters in the structure pointed to by
-.IR buf .
-This structure is of type
-.I msginfo
-(thus, a cast is required),
-defined in
-.I <sys/msg.h>
-if the
-.B _GNU_SOURCE
-feature test macro is defined:
-.IP
-.in +4n
-.EX
-struct msginfo {
- int msgpool; /* Size in kibibytes of buffer pool
- used to hold message data;
- unused within kernel */
- int msgmap; /* Maximum number of entries in message
- map; unused within kernel */
- int msgmax; /* Maximum number of bytes that can be
- written in a single message */
- int msgmnb; /* Maximum number of bytes that can be
- written to queue; used to initialize
- msg_qbytes during queue creation
- (msgget(2)) */
- int msgmni; /* Maximum number of message queues */
- int msgssz; /* Message segment size;
- unused within kernel */
- int msgtql; /* Maximum number of messages on all queues
- in system; unused within kernel */
- unsigned short msgseg;
- /* Maximum number of segments;
- unused within kernel */
-};
-.EE
-.in
-.IP
-The
-.IR msgmni ,
-.IR msgmax ,
-and
-.I msgmnb
-settings can be changed via
-.I /proc
-files of the same name; see
-.BR proc (5)
-for details.
-.TP
-.BR MSG_INFO " (Linux-specific)"
-Return a
-.I msginfo
-structure containing the same information as for
-.BR IPC_INFO ,
-except that the following fields are returned with information
-about system resources consumed by message queues: the
-.I msgpool
-field returns the number of message queues that currently exist
-on the system; the
-.I msgmap
-field returns the total number of messages in all queues
-on the system; and the
-.I msgtql
-field returns the total number of bytes in all messages
-in all queues on the system.
-.TP
-.BR MSG_STAT " (Linux-specific)"
-Return a
-.I msqid_ds
-structure as for
-.BR IPC_STAT .
-However, the
-.I msqid
-argument is not a queue identifier, but instead an index into
-the kernel's internal array that maintains information about
-all message queues on the system.
-.TP
-.BR MSG_STAT_ANY " (Linux-specific, since Linux 4.17)"
-Return a
-.I msqid_ds
-structure as for
-.BR MSG_STAT .
-However,
-.I msg_perm.mode
-is not checked for read access for
-.I msqid
-meaning that any user can employ this operation (just as any user may read
-.I /proc/sysvipc/msg
-to obtain the same information).
-.SH RETURN VALUE
-On success,
-.BR IPC_STAT ,
-.BR IPC_SET ,
-and
-.B IPC_RMID
-return 0.
-A successful
-.B IPC_INFO
-or
-.B MSG_INFO
-operation returns the index of the highest used entry in the
-kernel's internal array recording information about all
-message queues.
-(This information can be used with repeated
-.B MSG_STAT
-or
-.B MSG_STAT_ANY
-operations to obtain information about all queues on the system.)
-A successful
-.B MSG_STAT
-or
-.B MSG_STAT_ANY
-operation returns the identifier of the queue whose index was given in
-.IR msqid .
-.PP
-On failure, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-The argument
-.I cmd
-is equal to
-.B IPC_STAT
-or
-.BR MSG_STAT ,
-but the calling process does not have read permission on the message queue
-.IR msqid ,
-and does not have the
-.B CAP_IPC_OWNER
-capability in the user namespace that governs its IPC namespace.
-.TP
-.B EFAULT
-The argument
-.I cmd
-has the value
-.B IPC_SET
-or
-.BR IPC_STAT ,
-but the address pointed to by
-.I buf
-isn't accessible.
-.TP
-.B EIDRM
-The message queue was removed.
-.TP
-.B EINVAL
-Invalid value for
-.I cmd
-or
-.IR msqid .
-Or: for a
-.B MSG_STAT
-operation, the index value specified in
-.I msqid
-referred to an array slot that is currently unused.
-.TP
-.B EPERM
-The argument
-.I cmd
-has the value
-.B IPC_SET
-or
-.BR IPC_RMID ,
-but the effective user ID of the calling process is not the creator
-(as found in
-.IR msg_perm.cuid )
-or the owner
-(as found in
-.IR msg_perm.uid )
-of the message queue,
-and the caller is not privileged (Linux: does not have the
-.B CAP_SYS_ADMIN
-capability).
-.TP
-.B EPERM
-An attempt
-.RB ( IPC_SET )
-was made to increase
-.I msg_qbytes
-beyond the system parameter
-.BR MSGMNB ,
-but the caller is not privileged (Linux: does not have the
-.B CAP_SYS_RESOURCE
-capability).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4.
-.\" SVID does not document the EIDRM error condition.
-.PP
-Various fields in the \fIstruct msqid_ds\fP were
-typed as
-.I short
-under Linux 2.2
-and have become
-.I long
-under Linux 2.4.
-To take advantage of this,
-a recompilation under glibc-2.1.91 or later should suffice.
-(The kernel distinguishes old and new calls by an
-.B IPC_64
-flag in
-.IR cmd .)
-.SH NOTES
-The
-.BR IPC_INFO ,
-.BR MSG_STAT ,
-and
-.B MSG_INFO
-operations are used by the
-.BR ipcs (1)
-program to provide information on allocated resources.
-In the future these may modified or moved to a
-.I /proc
-filesystem interface.
-.SH SEE ALSO
-.BR msgget (2),
-.BR msgrcv (2),
-.BR msgsnd (2),
-.BR capabilities (7),
-.BR mq_overview (7),
-.BR sysvipc (7)
diff --git a/man2/msgget.2 b/man2/msgget.2
deleted file mode 100644
index 60c9aa52d..000000000
--- a/man2/msgget.2
+++ /dev/null
@@ -1,217 +0,0 @@
-.\" Copyright 1993 Giorgio Ciucci <giorgio@crcc.it>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Added correction due to Nick Duffek <nsd@bbc.com>, aeb, 960426
-.\" Modified Wed Nov 6 04:00:31 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified, 8 Jan 2003, Michael Kerrisk, <mtk.manpages@gmail.com>
-.\" Removed EIDRM from errors - that can't happen...
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.\" Modified, 11 Nov 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Language and formatting clean-ups
-.\" Added notes on /proc files
-.\"
-.TH msgget 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-msgget \- get a System V message queue identifier
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/msg.h>
-.PP
-.BI "int msgget(key_t " key ", int " msgflg );
-.fi
-.SH DESCRIPTION
-The
-.BR msgget ()
-system call returns the System\ V message queue identifier associated
-with the value of the
-.I key
-argument.
-It may be used either to obtain the identifier of a previously created
-message queue (when
-.I msgflg
-is zero and
-.I key
-does not have the value
-.BR IPC_PRIVATE ),
-or to create a new set.
-.PP
-A new message queue is created if
-.I key
-has the value
-.B IPC_PRIVATE
-or
-.I key
-isn't
-.BR IPC_PRIVATE ,
-no message queue with the given key
-.I key
-exists, and
-.B IPC_CREAT
-is specified in
-.IR msgflg .
-.PP
-If
-.I msgflg
-specifies both
-.B IPC_CREAT
-and
-.B IPC_EXCL
-and a message queue already exists for
-.IR key ,
-then
-.BR msgget ()
-fails with
-.I errno
-set to
-.BR EEXIST .
-(This is analogous to the effect of the combination
-.B O_CREAT | O_EXCL
-for
-.BR open (2).)
-.PP
-Upon creation, the least significant bits of the argument
-.I msgflg
-define the permissions of the message queue.
-These permission bits have the same format and semantics
-as the permissions specified for the
-.I mode
-argument of
-.BR open (2).
-(The execute permissions are not used.)
-.PP
-If a new message queue is created,
-then its associated data structure
-.I msqid_ds
-(see
-.BR msgctl (2))
-is initialized as follows:
-.IP \[bu] 3
-.I msg_perm.cuid
-and
-.I msg_perm.uid
-are set to the effective user ID of the calling process.
-.IP \[bu]
-.I msg_perm.cgid
-and
-.I msg_perm.gid
-are set to the effective group ID of the calling process.
-.IP \[bu]
-The least significant 9 bits of
-.I msg_perm.mode
-are set to the least significant 9 bits of
-.IR msgflg .
-.IP \[bu]
-.IR msg_qnum ,
-.IR msg_lspid ,
-.IR msg_lrpid ,
-.IR msg_stime ,
-and
-.I msg_rtime
-are set to 0.
-.IP \[bu]
-.I msg_ctime
-is set to the current time.
-.IP \[bu]
-.I msg_qbytes
-is set to the system limit
-.BR MSGMNB .
-.PP
-If the message queue already exists the permissions are
-verified, and a check is made to see if it is marked for
-destruction.
-.SH RETURN VALUE
-On success,
-.BR msgget ()
-returns the message queue identifier (a nonnegative integer).
-On failure, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-A message queue exists for
-.IR key ,
-but the calling process does not have permission to access the queue,
-and does not have the
-.B CAP_IPC_OWNER
-capability in the user namespace that governs its IPC namespace.
-.TP
-.B EEXIST
-.B IPC_CREAT
-and
-.B IPC_EXCL
-were specified in
-.IR msgflg ,
-but a message queue already exists for
-.IR key .
-.TP
-.B ENOENT
-No message queue exists for
-.I key
-and
-.I msgflg
-did not specify
-.BR IPC_CREAT .
-.TP
-.B ENOMEM
-A message queue has to be created but the system does not have enough
-memory for the new data structure.
-.TP
-.B ENOSPC
-A message queue has to be created but the system limit for the maximum
-number of message queues
-.RB ( MSGMNI )
-would be exceeded.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4.
-.SS Linux
-Until Linux 2.3.20, Linux would return
-.B EIDRM
-for a
-.BR msgget ()
-on a message queue scheduled for deletion.
-.SH NOTES
-.B IPC_PRIVATE
-isn't a flag field but a
-.I key_t
-type.
-If this special value is used for
-.IR key ,
-the system call ignores everything but the least significant 9 bits of
-.I msgflg
-and creates a new message queue (on success).
-.PP
-The following is a system limit on message queue resources affecting a
-.BR msgget ()
-call:
-.TP
-.B MSGMNI
-System-wide limit on the number of message queues.
-Before Linux 3.19,
-.\" commit 0050ee059f7fc86b1df2527aaa14ed5dc72f9973
-the default value for this limit was calculated using a formula
-based on available system memory.
-Since Linux 3.19, the default value is 32,000.
-On Linux, this limit can be read and modified via
-.IR /proc/sys/kernel/msgmni .
-.SH BUGS
-The name choice
-.B IPC_PRIVATE
-was perhaps unfortunate,
-.B IPC_NEW
-would more clearly show its function.
-.SH SEE ALSO
-.BR msgctl (2),
-.BR msgrcv (2),
-.BR msgsnd (2),
-.BR ftok (3),
-.BR capabilities (7),
-.BR mq_overview (7),
-.BR sysvipc (7)
diff --git a/man2/msgop.2 b/man2/msgop.2
deleted file mode 100644
index 55e78ddc2..000000000
--- a/man2/msgop.2
+++ /dev/null
@@ -1,684 +0,0 @@
-.\" Copyright 1993 Giorgio Ciucci <giorgio@crcc.it>
-.\" and Copyright 2015 Bill Pemberton <wfp5p@worldbroken.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Tue Oct 22 16:40:11 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Mon Jul 10 21:09:59 2000 by aeb
-.\" Modified 1 Jun 2002, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Language clean-ups.
-.\" Enhanced and corrected information on msg_qbytes, MSGMNB and MSGMAX
-.\" Added note on restart behavior of msgsnd() and msgrcv()
-.\" Formatting clean-ups (argument and field names marked as .I
-.\" instead of .B)
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.\" Modified, 11 Nov 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Language and formatting clean-ups
-.\" Added notes on /proc files
-.\"
-.TH MSGOP 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-msgrcv, msgsnd \- System V message queue operations
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/msg.h>
-.PP
-.BI "int msgsnd(int " msqid ", const void " msgp [. msgsz "], size_t " msgsz ,
-.BI " int " msgflg );
-.PP
-.BI "ssize_t msgrcv(int " msqid ", void " msgp [. msgsz "], size_t " msgsz \
-", long " msgtyp ,
-.BI " int " msgflg );
-.fi
-.SH DESCRIPTION
-The
-.BR msgsnd ()
-and
-.BR msgrcv ()
-system calls are used to send messages to,
-and receive messages from, a System\ V message queue.
-The calling process must have write permission on the message queue
-in order to send a message, and read permission to receive a message.
-.PP
-The
-.I msgp
-argument is a pointer to a caller-defined structure
-of the following general form:
-.PP
-.in +4n
-.EX
-struct msgbuf {
- long mtype; /* message type, must be > 0 */
- char mtext[1]; /* message data */
-};
-.EE
-.in
-.PP
-The
-.I mtext
-field is an array (or other structure) whose size is specified by
-.IR msgsz ,
-a nonnegative integer value.
-Messages of zero length (i.e., no
-.I mtext
-field) are permitted.
-The
-.I mtype
-field must have a strictly positive integer value.
-This value can be
-used by the receiving process for message selection
-(see the description of
-.BR msgrcv ()
-below).
-.SS msgsnd()
-The
-.BR msgsnd ()
-system call appends a copy of the message pointed to by
-.I msgp
-to the message queue whose identifier is specified
-by
-.IR msqid .
-.PP
-If sufficient space is available in the queue,
-.BR msgsnd ()
-succeeds immediately.
-The queue capacity is governed by the
-.I msg_qbytes
-field in the associated data structure for the message queue.
-During queue creation this field is initialized to
-.B MSGMNB
-bytes, but this limit can be modified using
-.BR msgctl (2).
-A message queue is considered to be full if either of the following
-conditions is true:
-.IP \[bu] 3
-Adding a new message to the queue would cause the total number of bytes
-in the queue to exceed the queue's maximum size (the
-.I msg_qbytes
-field).
-.IP \[bu]
-Adding another message to the queue would cause the total number of messages
-in the queue to exceed the queue's maximum size (the
-.I msg_qbytes
-field).
-This check is necessary to prevent an unlimited number of zero-length
-messages being placed on the queue.
-Although such messages contain no data,
-they nevertheless consume (locked) kernel memory.
-.PP
-If insufficient space is available in the queue, then the default
-behavior of
-.BR msgsnd ()
-is to block until space becomes available.
-If
-.B IPC_NOWAIT
-is specified in
-.IR msgflg ,
-then the call instead fails with the error
-.BR EAGAIN .
-.PP
-A blocked
-.BR msgsnd ()
-call may also fail if:
-.IP \[bu] 3
-the queue is removed,
-in which case the system call fails with
-.I errno
-set to
-.BR EIDRM ;
-or
-.IP \[bu]
-a signal is caught, in which case the system call fails
-with
-.I errno
-set to
-.BR EINTR ; see
-.BR signal (7).
-.RB ( msgsnd ()
-is never automatically restarted after being interrupted by a
-signal handler, regardless of the setting of the
-.B SA_RESTART
-flag when establishing a signal handler.)
-.PP
-Upon successful completion the message queue data structure is updated
-as follows:
-.IP \[bu] 3
-.I msg_lspid
-is set to the process ID of the calling process.
-.IP \[bu]
-.I msg_qnum
-is incremented by 1.
-.IP \[bu]
-.I msg_stime
-is set to the current time.
-.SS msgrcv()
-The
-.BR msgrcv ()
-system call removes a message from the queue specified by
-.I msqid
-and places it in the buffer
-pointed to by
-.IR msgp .
-.PP
-The argument
-.I msgsz
-specifies the maximum size in bytes for the member
-.I mtext
-of the structure pointed to by the
-.I msgp
-argument.
-If the message text has length greater than
-.IR msgsz ,
-then the behavior depends on whether
-.B MSG_NOERROR
-is specified in
-.IR msgflg .
-If
-.B MSG_NOERROR
-is specified, then
-the message text will be truncated (and the truncated part will be
-lost); if
-.B MSG_NOERROR
-is not specified, then
-the message isn't removed from the queue and
-the system call fails returning \-1 with
-.I errno
-set to
-.BR E2BIG .
-.PP
-Unless
-.B MSG_COPY
-is specified in
-.I msgflg
-(see below),
-the
-.I msgtyp
-argument specifies the type of message requested, as follows:
-.IP \[bu] 3
-If
-.I msgtyp
-is 0,
-then the first message in the queue is read.
-.IP \[bu]
-If
-.I msgtyp
-is greater than 0,
-then the first message in the queue of type
-.I msgtyp
-is read, unless
-.B MSG_EXCEPT
-was specified in
-.IR msgflg ,
-in which case
-the first message in the queue of type not equal to
-.I msgtyp
-will be read.
-.IP \[bu]
-If
-.I msgtyp
-is less than 0,
-then the first message in the queue with the lowest type less than or
-equal to the absolute value of
-.I msgtyp
-will be read.
-.PP
-The
-.I msgflg
-argument is a bit mask constructed by ORing together zero or more
-of the following flags:
-.TP
-.B IPC_NOWAIT
-Return immediately if no message of the requested type is in the queue.
-The system call fails with
-.I errno
-set to
-.BR ENOMSG .
-.TP
-.BR MSG_COPY " (since Linux 3.8)"
-.\" commit 4a674f34ba04a002244edaf891b5da7fc1473ae8
-Nondestructively fetch a copy of the message at the ordinal position
-in the queue specified by
-.I msgtyp
-(messages are considered to be numbered starting at 0).
-.IP
-This flag must be specified in conjunction with
-.BR IPC_NOWAIT ,
-with the result that, if there is no message available at the given position,
-the call fails immediately with the error
-.BR ENOMSG .
-Because they alter the meaning of
-.I msgtyp
-in orthogonal ways,
-.B MSG_COPY
-and
-.B MSG_EXCEPT
-may not both be specified in
-.IR msgflg .
-.IP
-The
-.B MSG_COPY
-flag was added for the implementation of
-the kernel checkpoint-restore facility and
-is available only if the kernel was built with the
-.B CONFIG_CHECKPOINT_RESTORE
-option.
-.TP
-.B MSG_EXCEPT
-Used with
-.I msgtyp
-greater than 0
-to read the first message in the queue with message type that differs
-from
-.IR msgtyp .
-.TP
-.B MSG_NOERROR
-To truncate the message text if longer than
-.I msgsz
-bytes.
-.PP
-If no message of the requested type is available and
-.B IPC_NOWAIT
-isn't specified in
-.IR msgflg ,
-the calling process is blocked until one of the following conditions occurs:
-.IP \[bu] 3
-A message of the desired type is placed in the queue.
-.IP \[bu]
-The message queue is removed from the system.
-In this case, the system call fails with
-.I errno
-set to
-.BR EIDRM .
-.IP \[bu]
-The calling process catches a signal.
-In this case, the system call fails with
-.I errno
-set to
-.BR EINTR .
-.RB ( msgrcv ()
-is never automatically restarted after being interrupted by a
-signal handler, regardless of the setting of the
-.B SA_RESTART
-flag when establishing a signal handler.)
-.PP
-Upon successful completion the message queue data structure is updated
-as follows:
-.IP
-.I msg_lrpid
-is set to the process ID of the calling process.
-.IP
-.I msg_qnum
-is decremented by 1.
-.IP
-.I msg_rtime
-is set to the current time.
-.SH RETURN VALUE
-On success,
-.BR msgsnd ()
-returns 0
-and
-.BR msgrcv ()
-returns the number of bytes actually copied into the
-.I mtext
-array.
-On failure, both functions return \-1, and set
-.I errno
-to indicate the error.
-.SH ERRORS
-.BR msgsnd ()
-can fail with the following errors:
-.TP
-.B EACCES
-The calling process does not have write permission on the message queue,
-and does not have the
-.B CAP_IPC_OWNER
-capability in the user namespace that governs its IPC namespace.
-.TP
-.B EAGAIN
-The message can't be sent due to the
-.I msg_qbytes
-limit for the queue and
-.B IPC_NOWAIT
-was specified in
-.IR msgflg .
-.TP
-.B EFAULT
-The address pointed to by
-.I msgp
-isn't accessible.
-.TP
-.B EIDRM
-The message queue was removed.
-.TP
-.B EINTR
-Sleeping on a full message queue condition, the process caught a signal.
-.TP
-.B EINVAL
-Invalid
-.I msqid
-value, or nonpositive
-.I mtype
-value, or
-invalid
-.I msgsz
-value (less than 0 or greater than the system value
-.BR MSGMAX ).
-.TP
-.B ENOMEM
-The system does not have enough memory to make a copy of the
-message pointed to by
-.IR msgp .
-.PP
-.BR msgrcv ()
-can fail with the following errors:
-.TP
-.B E2BIG
-The message text length is greater than
-.I msgsz
-and
-.B MSG_NOERROR
-isn't specified in
-.IR msgflg .
-.TP
-.B EACCES
-The calling process does not have read permission on the message queue,
-and does not have the
-.B CAP_IPC_OWNER
-capability in the user namespace that governs its IPC namespace.
-.TP
-.B EFAULT
-The address pointed to by
-.I msgp
-isn't accessible.
-.TP
-.B EIDRM
-While the process was sleeping to receive a message,
-the message queue was removed.
-.TP
-.B EINTR
-While the process was sleeping to receive a message,
-the process caught a signal; see
-.BR signal (7).
-.TP
-.B EINVAL
-.I msqid
-was invalid, or
-.I msgsz
-was less than 0.
-.TP
-.BR EINVAL " (since Linux 3.14)"
-.I msgflg
-specified
-.BR MSG_COPY ,
-but not
-.BR IPC_NOWAIT .
-.TP
-.BR EINVAL " (since Linux 3.14)"
-.I msgflg
-specified both
-.B MSG_COPY
-and
-.BR MSG_EXCEPT .
-.TP
-.B ENOMSG
-.B IPC_NOWAIT
-was specified in
-.I msgflg
-and no message of the requested type existed on the message queue.
-.TP
-.B ENOMSG
-.B IPC_NOWAIT
-and
-.B MSG_COPY
-were specified in
-.I msgflg
-and the queue contains less than
-.I msgtyp
-messages.
-.TP
-.BR ENOSYS " (since Linux 3.8)"
-Both
-.B MSG_COPY
-and
-.B IPC_NOWAIT
-were specified in
-.IR msgflg ,
-and this kernel was configured without
-.BR CONFIG_CHECKPOINT_RESTORE .
-.SH STANDARDS
-POSIX.1-2008.
-.PP
-The
-.B MSG_EXCEPT
-and
-.B MSG_COPY
-flags are Linux-specific;
-their definitions can be obtained by defining the
-.B _GNU_SOURCE
-.\" MSG_COPY since glibc 2.18
-feature test macro.
-.SH HISTORY
-POSIX.1-2001, SVr4.
-.PP
-The
-.I msgp
-argument is declared as \fIstruct msgbuf\ *\fP in
-glibc 2.0 and 2.1.
-It is declared as \fIvoid\ *\fP
-in glibc 2.2 and later, as required by SUSv2 and SUSv3.
-.SH NOTES
-The following limits on message queue resources affect the
-.BR msgsnd ()
-call:
-.TP
-.B MSGMAX
-Maximum size of a message text, in bytes (default value: 8192 bytes).
-On Linux, this limit can be read and modified via
-.IR /proc/sys/kernel/msgmax .
-.TP
-.B MSGMNB
-Maximum number of bytes that can be held in a message queue
-(default value: 16384 bytes).
-On Linux, this limit can be read and modified via
-.IR /proc/sys/kernel/msgmnb .
-A privileged process
-(Linux: a process with the
-.B CAP_SYS_RESOURCE
-capability)
-can increase the size of a message queue beyond
-.B MSGMNB
-using the
-.BR msgctl (2)
-.B IPC_SET
-operation.
-.PP
-The implementation has no intrinsic system-wide limits on the
-number of message headers
-.RB ( MSGTQL )
-and the number of bytes in the message pool
-.RB ( MSGPOOL ).
-.SH BUGS
-In Linux 3.13 and earlier,
-if
-.BR msgrcv ()
-was called with the
-.B MSG_COPY
-flag, but without
-.BR IPC_NOWAIT ,
-and the message queue contained less than
-.I msgtyp
-messages, then the call would block until the next message is written
-to the queue.
-.\" http://marc.info/?l=linux-kernel&m=139048542803605&w=2
-At that point, the call would return a copy of the message,
-.I regardless
-of whether that message was at the ordinal position
-.IR msgtyp .
-This bug is fixed
-.\" commit 4f87dac386cc43d5525da7a939d4b4e7edbea22c
-in Linux 3.14.
-.PP
-Specifying both
-.B MSG_COPY
-and
-.B MSC_EXCEPT
-in
-.I msgflg
-is a logical error (since these flags impose different interpretations on
-.IR msgtyp ).
-In Linux 3.13 and earlier,
-.\" http://marc.info/?l=linux-kernel&m=139048542803605&w=2
-this error was not diagnosed by
-.BR msgrcv ().
-This bug is fixed
-.\" commit 4f87dac386cc43d5525da7a939d4b4e7edbea22c
-in Linux 3.14.
-.SH EXAMPLES
-The program below demonstrates the use of
-.BR msgsnd ()
-and
-.BR msgrcv ().
-.PP
-The example program is first run with the \fB\-s\fP option to send a
-message and then run again with the \fB\-r\fP option to receive a
-message.
-.PP
-The following shell session shows a sample run of the program:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out \-s"
-sent: a message at Wed Mar 4 16:25:45 2015
-.PP
-.RB "$" " ./a.out \-r"
-message received: a message at Wed Mar 4 16:25:45 2015
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (msgop.c)
-.EX
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/ipc.h>
-#include <sys/msg.h>
-#include <time.h>
-#include <unistd.h>
-\&
-struct msgbuf {
- long mtype;
- char mtext[80];
-};
-\&
-static void
-usage(char *prog_name, char *msg)
-{
- if (msg != NULL)
- fputs(msg, stderr);
-\&
- fprintf(stderr, "Usage: %s [options]\en", prog_name);
- fprintf(stderr, "Options are:\en");
- fprintf(stderr, "\-s send message using msgsnd()\en");
- fprintf(stderr, "\-r read message using msgrcv()\en");
- fprintf(stderr, "\-t message type (default is 1)\en");
- fprintf(stderr, "\-k message queue key (default is 1234)\en");
- exit(EXIT_FAILURE);
-}
-\&
-static void
-send_msg(int qid, int msgtype)
-{
- time_t t;
- struct msgbuf msg;
-\&
- msg.mtype = msgtype;
-\&
- time(&t);
- snprintf(msg.mtext, sizeof(msg.mtext), "a message at %s",
- ctime(&t));
-\&
- if (msgsnd(qid, &msg, sizeof(msg.mtext),
- IPC_NOWAIT) == \-1)
- {
- perror("msgsnd error");
- exit(EXIT_FAILURE);
- }
- printf("sent: %s\en", msg.mtext);
-}
-\&
-static void
-get_msg(int qid, int msgtype)
-{
- struct msgbuf msg;
-\&
- if (msgrcv(qid, &msg, sizeof(msg.mtext), msgtype,
- MSG_NOERROR | IPC_NOWAIT) == \-1) {
- if (errno != ENOMSG) {
- perror("msgrcv");
- exit(EXIT_FAILURE);
- }
- printf("No message available for msgrcv()\en");
- } else {
- printf("message received: %s\en", msg.mtext);
- }
-}
-\&
-int
-main(int argc, char *argv[])
-{
- int qid, opt;
- int mode = 0; /* 1 = send, 2 = receive */
- int msgtype = 1;
- int msgkey = 1234;
-\&
- while ((opt = getopt(argc, argv, "srt:k:")) != \-1) {
- switch (opt) {
- case \[aq]s\[aq]:
- mode = 1;
- break;
- case \[aq]r\[aq]:
- mode = 2;
- break;
- case \[aq]t\[aq]:
- msgtype = atoi(optarg);
- if (msgtype <= 0)
- usage(argv[0], "\-t option must be greater than 0\en");
- break;
- case \[aq]k\[aq]:
- msgkey = atoi(optarg);
- break;
- default:
- usage(argv[0], "Unrecognized option\en");
- }
- }
-\&
- if (mode == 0)
- usage(argv[0], "must use either \-s or \-r option\en");
-\&
- qid = msgget(msgkey, IPC_CREAT | 0666);
-\&
- if (qid == \-1) {
- perror("msgget");
- exit(EXIT_FAILURE);
- }
-\&
- if (mode == 2)
- get_msg(qid, msgtype);
- else
- send_msg(qid, msgtype);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR msgctl (2),
-.BR msgget (2),
-.BR capabilities (7),
-.BR mq_overview (7),
-.BR sysvipc (7)
diff --git a/man2/msgrcv.2 b/man2/msgrcv.2
deleted file mode 100644
index b34869edf..000000000
--- a/man2/msgrcv.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/msgop.2
diff --git a/man2/msgsnd.2 b/man2/msgsnd.2
deleted file mode 100644
index b34869edf..000000000
--- a/man2/msgsnd.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/msgop.2
diff --git a/man2/msync.2 b/man2/msync.2
deleted file mode 100644
index 4cd38d19a..000000000
--- a/man2/msync.2
+++ /dev/null
@@ -1,140 +0,0 @@
-.\" Copyright (C) 1996 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH msync 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-msync \- synchronize a file with a memory map
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/mman.h>
-.PP
-.BI "int msync(void " addr [. length "], size_t " length ", int " flags );
-.fi
-.SH DESCRIPTION
-.BR msync ()
-flushes changes made to the in-core copy of a file that was mapped
-into memory using
-.BR mmap (2)
-back to the filesystem.
-Without use of this call,
-there is no guarantee that changes are written back before
-.BR munmap (2)
-is called.
-To be more precise, the part of the file that
-corresponds to the memory area starting at
-.I addr
-and having length
-.I length
-is updated.
-.PP
-The
-.I flags
-argument should specify exactly one of
-.B MS_ASYNC
-and
-.BR MS_SYNC ,
-and may additionally include the
-.B MS_INVALIDATE
-bit.
-These bits have the following meanings:
-.TP
-.B MS_ASYNC
-Specifies that an update be scheduled, but the call returns immediately.
-.TP
-.B MS_SYNC
-Requests an update and waits for it to complete.
-.TP
-.B MS_INVALIDATE
-.\" Since Linux 2.4, this seems to be a no-op (other than the
-.\" EBUSY check for VM_LOCKED).
-Asks to invalidate other mappings of the same file
-(so that they can be updated with the fresh values just written).
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBUSY
-.B MS_INVALIDATE
-was specified in
-.IR flags ,
-and a memory lock exists for the specified address range.
-.TP
-.B EINVAL
-.I addr
-is not a multiple of PAGESIZE; or any bit other than
-.BR MS_ASYNC " | " MS_INVALIDATE " | " MS_SYNC
-is set in
-.IR flags ;
-or both
-.B MS_SYNC
-and
-.B MS_ASYNC
-are set in
-.IR flags .
-.TP
-.B ENOMEM
-The indicated memory (or part of it) was not mapped.
-.SH VERSIONS
-According to POSIX, either
-.B MS_SYNC
-or
-.B MS_ASYNC
-must be specified in
-.IR flags ,
-and indeed failure to include one of these flags will cause
-.BR msync ()
-to fail on some systems.
-However, Linux permits a call to
-.BR msync ()
-that specifies neither of these flags,
-with semantics that are (currently) equivalent to specifying
-.BR MS_ASYNC .
-(Since Linux 2.6.19,
-.\" commit 204ec841fbea3e5138168edbc3a76d46747cc987
-.B MS_ASYNC
-is in fact a no-op, since the kernel properly tracks dirty
-pages and flushes them to storage as necessary.)
-Notwithstanding the Linux behavior,
-portable, future-proof applications should ensure that they specify either
-.B MS_SYNC
-or
-.B MS_ASYNC
-in
-.IR flags .
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.PP
-This call was introduced in Linux 1.3.21, and then used
-.B EFAULT
-instead of
-.BR ENOMEM .
-In Linux 2.4.19, this was changed to the POSIX value
-.BR ENOMEM .
-.PP
-On POSIX systems on which
-.BR msync ()
-is available, both
-.B _POSIX_MAPPED_FILES
-and
-.B _POSIX_SYNCHRONIZED_IO
-are defined in
-.I <unistd.h>
-to a value greater than 0.
-(See also
-.BR sysconf (3).)
-.\" POSIX.1-2001: It shall be defined to -1 or 0 or 200112L.
-.\" -1: unavailable, 0: ask using sysconf().
-.\" glibc defines them to 1.
-.SH SEE ALSO
-.BR mmap (2)
-.PP
-B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128\[en]129 and 389\[en]391.
diff --git a/man2/munlock.2 b/man2/munlock.2
deleted file mode 100644
index 5e5b3c741..000000000
--- a/man2/munlock.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/mlock.2
diff --git a/man2/munlockall.2 b/man2/munlockall.2
deleted file mode 100644
index 5e5b3c741..000000000
--- a/man2/munlockall.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/mlock.2
diff --git a/man2/munmap.2 b/man2/munmap.2
deleted file mode 100644
index 8902d1b35..000000000
--- a/man2/munmap.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/mmap.2
diff --git a/man2/name_to_handle_at.2 b/man2/name_to_handle_at.2
deleted file mode 100644
index 090521c86..000000000
--- a/man2/name_to_handle_at.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/open_by_handle_at.2
diff --git a/man2/nanosleep.2 b/man2/nanosleep.2
deleted file mode 100644
index 122419296..000000000
--- a/man2/nanosleep.2
+++ /dev/null
@@ -1,220 +0,0 @@
-.\" Copyright (C) Markus Kuhn, 1996
-.\" and Copyright (C) Linux Foundation, 2008, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 1996-04-10 Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
-.\" First version written
-.\" Modified, 2004-10-24, aeb
-.\" 2008-06-24, mtk
-.\" Minor rewrites of some parts.
-.\" NOTES: describe case where clock_nanosleep() can be preferable.
-.\" NOTES: describe CLOCK_REALTIME versus CLOCK_NANOSLEEP
-.\" Replace crufty discussion of HZ with a pointer to time(7).
-.TH nanosleep 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-nanosleep \- high-resolution sleep
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <time.h>
-.PP
-.BI "int nanosleep(const struct timespec *" req ,
-.BI " struct timespec *_Nullable " rem );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR nanosleep ():
-.nf
- _POSIX_C_SOURCE >= 199309L
-.fi
-.SH DESCRIPTION
-.BR nanosleep ()
-suspends the execution of the calling thread
-until either at least the time specified in
-.I *req
-has elapsed, or the delivery of a signal
-that triggers the invocation of a handler in the calling thread or
-that terminates the process.
-.PP
-If the call is interrupted by a signal handler,
-.BR nanosleep ()
-returns \-1, sets
-.I errno
-to
-.BR EINTR ,
-and writes the remaining time into the structure pointed to by
-.I rem
-unless
-.I rem
-is NULL.
-The value of
-.I *rem
-can then be used to call
-.BR nanosleep ()
-again and complete the specified pause (but see NOTES).
-.PP
-The
-.BR timespec (3)
-structure
-is used to specify intervals of time with nanosecond precision.
-.PP
-The value of the nanoseconds field must be in the range [0, 999999999].
-.PP
-Compared to
-.BR sleep (3)
-and
-.BR usleep (3),
-.BR nanosleep ()
-has the following advantages:
-it provides a higher resolution for specifying the sleep interval;
-POSIX.1 explicitly specifies that it
-does not interact with signals;
-and it makes the task of resuming a sleep that has been
-interrupted by a signal handler easier.
-.SH RETURN VALUE
-On successfully sleeping for the requested interval,
-.BR nanosleep ()
-returns 0.
-If the call is interrupted by a signal handler or encounters an error,
-then it returns \-1, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-Problem with copying information from user space.
-.TP
-.B EINTR
-The pause has been interrupted by a signal that was
-delivered to the thread (see
-.BR signal (7)).
-The remaining sleep time has been written
-into
-.I *rem
-so that the thread can easily call
-.BR nanosleep ()
-again and continue with the pause.
-.TP
-.B EINVAL
-The value in the
-.I tv_nsec
-field was not in the range [0, 999999999] or
-.I tv_sec
-was negative.
-.SH VERSIONS
-POSIX.1 specifies that
-.BR nanosleep ()
-should measure time against the
-.B CLOCK_REALTIME
-clock.
-However, Linux measures the time using the
-.B CLOCK_MONOTONIC
-clock.
-.\" See also http://thread.gmane.org/gmane.linux.kernel/696854/
-.\" Subject: nanosleep() uses CLOCK_MONOTONIC, should be CLOCK_REALTIME?
-.\" Date: 2008-06-22 07:35:41 GMT
-This probably does not matter, since the POSIX.1 specification for
-.BR clock_settime (2)
-says that discontinuous changes in
-.B CLOCK_REALTIME
-should not affect
-.BR nanosleep ():
-.RS
-.PP
-Setting the value of the
-.B CLOCK_REALTIME
-clock via
-.BR clock_settime (2)
-shall
-have no effect on threads that are blocked waiting for a relative time
-service based upon this clock, including the
-.BR nanosleep ()
-function; ...
-Consequently, these time services shall expire when the requested relative
-interval elapses, independently of the new or old value of the clock.
-.RE
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.PP
-In order to support applications requiring much more precise pauses
-(e.g., in order to control some time-critical hardware),
-.BR nanosleep ()
-would handle pauses of up to 2 milliseconds by busy waiting with microsecond
-precision when called from a thread scheduled under a real-time policy
-like
-.B SCHED_FIFO
-or
-.BR SCHED_RR .
-This special extension was removed in Linux 2.5.39,
-and is thus not available in Linux 2.6.0 and later kernels.
-.SH NOTES
-If the interval specified in
-.I req
-is not an exact multiple of the granularity underlying clock (see
-.BR time (7)),
-then the interval will be rounded up to the next multiple.
-Furthermore, after the sleep completes, there may still be a delay before
-the CPU becomes free to once again execute the calling thread.
-.PP
-The fact that
-.BR nanosleep ()
-sleeps for a relative interval can be problematic if the call
-is repeatedly restarted after being interrupted by signals,
-since the time between the interruptions and restarts of the call
-will lead to drift in the time when the sleep finally completes.
-This problem can be avoided by using
-.BR clock_nanosleep (2)
-with an absolute time value.
-.SH BUGS
-If a program that catches signals and uses
-.BR nanosleep ()
-receives signals at a very high rate,
-then scheduling delays and rounding errors in the kernel's
-calculation of the sleep interval and the returned
-.I remain
-value mean that the
-.I remain
-value may steadily
-.I increase
-on successive restarts of the
-.BR nanosleep ()
-call.
-To avoid such problems, use
-.BR clock_nanosleep (2)
-with the
-.B TIMER_ABSTIME
-flag to sleep to an absolute deadline.
-.PP
-In Linux 2.4, if
-.BR nanosleep ()
-is stopped by a signal (e.g.,
-.BR SIGTSTP ),
-then the call fails with the error
-.B EINTR
-after the thread is resumed by a
-.B SIGCONT
-signal.
-If the system call is subsequently restarted,
-then the time that the thread spent in the stopped state is
-.I not
-counted against the sleep interval.
-This problem is fixed in Linux 2.6.0 and later kernels.
-.SH SEE ALSO
-.BR clock_nanosleep (2),
-.BR restart_syscall (2),
-.BR sched_setscheduler (2),
-.BR timer_create (2),
-.BR sleep (3),
-.BR timespec (3),
-.BR usleep (3),
-.BR time (7)
diff --git a/man2/newfstatat.2 b/man2/newfstatat.2
deleted file mode 100644
index 7791269e6..000000000
--- a/man2/newfstatat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/fstatat.2
diff --git a/man2/nfsservctl.2 b/man2/nfsservctl.2
deleted file mode 100644
index 846c88595..000000000
--- a/man2/nfsservctl.2
+++ /dev/null
@@ -1,70 +0,0 @@
-.\" %%%LICENSE_START(PUBLIC_DOMAIN)
-.\" This text is in the public domain.
-.\" %%%LICENSE_END
-.\"
-.TH nfsservctl 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-nfsservctl \- syscall interface to kernel nfs daemon
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <linux/nfsd/syscall.h>
-.PP
-.BI "long nfsservctl(int " cmd ", struct nfsctl_arg *" argp ,
-.BI " union nfsctl_res *" resp );
-.fi
-.SH DESCRIPTION
-.IR Note :
-Since Linux 3.1, this system call no longer exists.
-It has been replaced by a set of files in the
-.I nfsd
-filesystem; see
-.BR nfsd (7).
-.PP
-.in +4n
-.EX
-/*
- * These are the commands understood by nfsctl().
- */
-#define NFSCTL_SVC 0 /* This is a server process. */
-#define NFSCTL_ADDCLIENT 1 /* Add an NFS client. */
-#define NFSCTL_DELCLIENT 2 /* Remove an NFS client. */
-#define NFSCTL_EXPORT 3 /* Export a filesystem. */
-#define NFSCTL_UNEXPORT 4 /* Unexport a filesystem. */
-#define NFSCTL_UGIDUPDATE 5 /* Update a client\[aq]s UID/GID map
- (only in Linux 2.4.x and earlier). */
-#define NFSCTL_GETFH 6 /* Get a file handle (used by mountd(8))
- (only in Linux 2.4.x and earlier). */
-\&
-struct nfsctl_arg {
- int ca_version; /* safeguard */
- union {
- struct nfsctl_svc u_svc;
- struct nfsctl_client u_client;
- struct nfsctl_export u_export;
- struct nfsctl_uidmap u_umap;
- struct nfsctl_fhparm u_getfh;
- unsigned int u_debug;
- } u;
-}
-\&
-union nfsctl_res {
- struct knfs_fh cr_getfh;
- unsigned int cr_debug;
-};
-.EE
-.in
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Removed in Linux 3.1.
-Removed in glibc 2.28.
-.SH SEE ALSO
-.BR nfsd (7)
diff --git a/man2/nice.2 b/man2/nice.2
deleted file mode 100644
index c97fb0935..000000000
--- a/man2/nice.2
+++ /dev/null
@@ -1,118 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt <drew@cs.colorado.edu>, March 28, 1992
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1996-11-04 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2001-06-04 by aeb
-.\" Modified 2004-05-27 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH nice 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-nice \- change process priority
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int nice(int " inc );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR nice ():
-.nf
- _XOPEN_SOURCE
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-.BR nice ()
-adds
-.I inc
-to the nice value for the calling thread.
-(A higher nice value means a lower priority.)
-.PP
-The range of the nice value is +19 (low priority) to \-20 (high priority).
-Attempts to set a nice value outside the range are clamped to the range.
-.PP
-Traditionally, only a privileged process could lower the nice value
-(i.e., set a higher priority).
-However, since Linux 2.6.12, an unprivileged process can decrease
-the nice value of a target process that has a suitable
-.B RLIMIT_NICE
-soft limit; see
-.BR getrlimit (2)
-for details.
-.SH RETURN VALUE
-On success, the new nice value is returned (but see NOTES below).
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.PP
-A successful call can legitimately return \-1.
-To detect an error, set
-.I errno
-to 0 before the call, and check whether it is nonzero after
-.BR nice ()
-returns \-1.
-.SH ERRORS
-.TP
-.B EPERM
-The calling process attempted to increase its priority by
-supplying a negative
-.I inc
-but has insufficient privileges.
-Under Linux, the
-.B CAP_SYS_NICE
-capability is required.
-(But see the discussion of the
-.B RLIMIT_NICE
-resource limit in
-.BR setrlimit (2).)
-.SH VERSIONS
-.SS C library/kernel differences
-POSIX.1 specifies that
-.BR nice ()
-should return the new nice value.
-However, the raw Linux system call returns 0 on success.
-Likewise, the
-.BR nice ()
-wrapper function provided in glibc 2.2.3 and earlier returns 0 on success.
-.PP
-Since glibc 2.2.4, the
-.BR nice ()
-wrapper function provided by glibc provides conformance to POSIX.1 by calling
-.BR getpriority (2)
-to obtain the new nice value, which is then returned to the caller.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.\" SVr4 documents an additional
-.\" .B EINVAL
-.\" error code.
-.SH NOTES
-For further details on the nice value, see
-.BR sched (7).
-.PP
-.IR Note :
-the addition of the "autogroup" feature in Linux 2.6.38 means that
-the nice value no longer has its traditional effect in many circumstances.
-For details, see
-.BR sched (7).
-.SH SEE ALSO
-.BR nice (1),
-.BR renice (1),
-.BR fork (2),
-.BR getpriority (2),
-.BR getrlimit (2),
-.BR setpriority (2),
-.BR capabilities (7),
-.BR sched (7)
diff --git a/man2/oldfstat.2 b/man2/oldfstat.2
deleted file mode 100644
index b1a86c195..000000000
--- a/man2/oldfstat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/stat.2
diff --git a/man2/oldlstat.2 b/man2/oldlstat.2
deleted file mode 100644
index b1a86c195..000000000
--- a/man2/oldlstat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/stat.2
diff --git a/man2/oldolduname.2 b/man2/oldolduname.2
deleted file mode 100644
index 450f7b1ca..000000000
--- a/man2/oldolduname.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/uname.2
diff --git a/man2/oldstat.2 b/man2/oldstat.2
deleted file mode 100644
index b1a86c195..000000000
--- a/man2/oldstat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/stat.2
diff --git a/man2/olduname.2 b/man2/olduname.2
deleted file mode 100644
index 450f7b1ca..000000000
--- a/man2/olduname.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/uname.2
diff --git a/man2/open.2 b/man2/open.2
deleted file mode 100644
index 4c921723c..000000000
--- a/man2/open.2
+++ /dev/null
@@ -1,1934 +0,0 @@
-.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\" and Copyright (C) 1993 Michael Haardt, Ian Jackson.
-.\" and Copyright (C) 2008 Greg Banks
-.\" and Copyright (C) 2006, 2008, 2013, 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 1993-07-21 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1994-08-21 by Michael Haardt
-.\" Modified 1996-04-13 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 1996-05-13 by Thomas Koenig
-.\" Modified 1996-12-20 by Michael Haardt
-.\" Modified 1999-02-19 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 1998-11-28 by Joseph S. Myers <jsm28@hermes.cam.ac.uk>
-.\" Modified 1999-06-03 by Michael Haardt
-.\" Modified 2002-05-07 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" 2004-12-08, mtk, reordered flags list alphabetically
-.\" 2004-12-08, Martin Pool <mbp@sourcefrog.net> (& mtk), added O_NOATIME
-.\" 2007-09-18, mtk, Added description of O_CLOEXEC + other minor edits
-.\" 2008-01-03, mtk, with input from Trond Myklebust
-.\" <trond.myklebust@fys.uio.no> and Timo Sirainen <tss@iki.fi>
-.\" Rewrite description of O_EXCL.
-.\" 2008-01-11, Greg Banks <gnb@melbourne.sgi.com>: add more detail
-.\" on O_DIRECT.
-.\" 2008-02-26, Michael Haardt: Reorganized text for O_CREAT and mode
-.\"
-.\" FIXME . Apr 08: The next POSIX revision has O_EXEC, O_SEARCH, and
-.\" O_TTYINIT. Eventually these may need to be documented. --mtk
-.\"
-.TH open 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-open, openat, creat \- open and possibly create a file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <fcntl.h>
-.PP
-.BI "int open(const char *" pathname ", int " flags ", ..."
-.BI " \fR/*\fP mode_t " mode " \fR*/\fP );"
-.PP
-.BI "int creat(const char *" pathname ", mode_t " mode );
-.PP
-.BI "int openat(int " dirfd ", const char *" pathname ", int " flags ", ..."
-.BI " \fR/*\fP mode_t " mode " \fR*/\fP );"
-.PP
-/* Documented separately, in \fBopenat2\fP(2): */
-.BI "int openat2(int " dirfd ", const char *" pathname ,
-.BI " const struct open_how *" how ", size_t " size );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR openat ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _ATFILE_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR open ()
-system call opens the file specified by
-.IR pathname .
-If the specified file does not exist,
-it may optionally (if
-.B O_CREAT
-is specified in
-.IR flags )
-be created by
-.BR open ().
-.PP
-The return value of
-.BR open ()
-is a file descriptor, a small, nonnegative integer that is an index
-to an entry in the process's table of open file descriptors.
-The file descriptor is used
-in subsequent system calls
-.RB ( read "(2), " write "(2), " lseek "(2), " fcntl (2),
-etc.) to refer to the open file.
-The file descriptor returned by a successful call will be
-the lowest-numbered file descriptor not currently open for the process.
-.PP
-By default, the new file descriptor is set to remain open across an
-.BR execve (2)
-(i.e., the
-.B FD_CLOEXEC
-file descriptor flag described in
-.BR fcntl (2)
-is initially disabled); the
-.B O_CLOEXEC
-flag, described below, can be used to change this default.
-The file offset is set to the beginning of the file (see
-.BR lseek (2)).
-.PP
-A call to
-.BR open ()
-creates a new
-.IR "open file description" ,
-an entry in the system-wide table of open files.
-The open file description records the file offset and the file status flags
-(see below).
-A file descriptor is a reference to an open file description;
-this reference is unaffected if
-.I pathname
-is subsequently removed or modified to refer to a different file.
-For further details on open file descriptions, see NOTES.
-.PP
-The argument
-.I flags
-must include one of the following
-.IR "access modes" :
-.BR O_RDONLY ", " O_WRONLY ", or " O_RDWR .
-These request opening the file read-only, write-only, or read/write,
-respectively.
-.PP
-In addition, zero or more file creation flags and file status flags
-can be
-bitwise ORed
-in
-.IR flags .
-The
-.I file creation flags
-are
-.BR O_CLOEXEC ,
-.BR O_CREAT ,
-.BR O_DIRECTORY ,
-.BR O_EXCL ,
-.BR O_NOCTTY ,
-.BR O_NOFOLLOW ,
-.BR O_TMPFILE ,
-and
-.BR O_TRUNC .
-The
-.I file status flags
-are all of the remaining flags listed below.
-.\" SUSv4 divides the flags into:
-.\" * Access mode
-.\" * File creation
-.\" * File status
-.\" * Other (O_CLOEXEC, O_DIRECTORY, O_NOFOLLOW)
-.\" though it's not clear what the difference between "other" and
-.\" "File creation" flags is. I raised an Aardvark to see if this
-.\" can be clarified in SUSv4; 10 Oct 2008.
-.\" http://thread.gmane.org/gmane.comp.standards.posix.austin.general/64/focus=67
-.\" TC1 (balloted in 2013), resolved this, so that those three constants
-.\" are also categorized" as file status flags.
-.\"
-The distinction between these two groups of flags is that
-the file creation flags affect the semantics of the open operation itself,
-while the file status flags affect the semantics of subsequent I/O operations.
-The file status flags can be retrieved and (in some cases)
-modified; see
-.BR fcntl (2)
-for details.
-.PP
-The full list of file creation flags and file status flags is as follows:
-.TP
-.B O_APPEND
-The file is opened in append mode.
-Before each
-.BR write (2),
-the file offset is positioned at the end of the file,
-as if with
-.BR lseek (2).
-The modification of the file offset and the write operation
-are performed as a single atomic step.
-.IP
-.B O_APPEND
-may lead to corrupted files on NFS filesystems if more than one process
-appends data to a file at once.
-.\" For more background, see
-.\" http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=453946
-.\" http://nfs.sourceforge.net/
-This is because NFS does not support
-appending to a file, so the client kernel has to simulate it, which
-can't be done without a race condition.
-.TP
-.B O_ASYNC
-Enable signal-driven I/O:
-generate a signal
-.RB ( SIGIO
-by default, but this can be changed via
-.BR fcntl (2))
-when input or output becomes possible on this file descriptor.
-This feature is available only for terminals, pseudoterminals,
-sockets, and (since Linux 2.6) pipes and FIFOs.
-See
-.BR fcntl (2)
-for further details.
-See also BUGS, below.
-.TP
-.BR O_CLOEXEC " (since Linux 2.6.23)"
-.\" NOTE! several other man pages refer to this text
-Enable the close-on-exec flag for the new file descriptor.
-.\" FIXME . for later review when Issue 8 is one day released...
-.\" POSIX proposes to fix many APIs that provide hidden FDs
-.\" http://austingroupbugs.net/tag_view_page.php?tag_id=8
-.\" http://austingroupbugs.net/view.php?id=368
-Specifying this flag permits a program to avoid additional
-.BR fcntl (2)
-.B F_SETFD
-operations to set the
-.B FD_CLOEXEC
-flag.
-.IP
-Note that the use of this flag is essential in some multithreaded programs,
-because using a separate
-.BR fcntl (2)
-.B F_SETFD
-operation to set the
-.B FD_CLOEXEC
-flag does not suffice to avoid race conditions
-where one thread opens a file descriptor and
-attempts to set its close-on-exec flag using
-.BR fcntl (2)
-at the same time as another thread does a
-.BR fork (2)
-plus
-.BR execve (2).
-Depending on the order of execution,
-the race may lead to the file descriptor returned by
-.BR open ()
-being unintentionally leaked to the program executed by the child process
-created by
-.BR fork (2).
-(This kind of race is in principle possible for any system call
-that creates a file descriptor whose close-on-exec flag should be set,
-and various other Linux system calls provide an equivalent of the
-.B O_CLOEXEC
-flag to deal with this problem.)
-.\" This flag fixes only one form of the race condition;
-.\" The race can also occur with, for example, file descriptors
-.\" returned by accept(), pipe(), etc.
-.TP
-.B O_CREAT
-If
-.I pathname
-does not exist, create it as a regular file.
-.IP
-The owner (user ID) of the new file is set to the effective user ID
-of the process.
-.IP
-The group ownership (group ID) of the new file is set either to
-the effective group ID of the process (System V semantics)
-or to the group ID of the parent directory (BSD semantics).
-On Linux, the behavior depends on whether the
-set-group-ID mode bit is set on the parent directory:
-if that bit is set, then BSD semantics apply;
-otherwise, System V semantics apply.
-For some filesystems, the behavior also depends on the
-.I bsdgroups
-and
-.I sysvgroups
-mount options described in
-.BR mount (8).
-.\" As at Linux 2.6.25, bsdgroups is supported by ext2, ext3, ext4, and
-.\" XFS (since Linux 2.6.14).
-.IP
-The
-.I mode
-argument specifies the file mode bits to be applied when a new file is created.
-If neither
-.B O_CREAT
-nor
-.B O_TMPFILE
-is specified in
-.IR flags ,
-then
-.I mode
-is ignored (and can thus be specified as 0, or simply omitted).
-The
-.I mode
-argument
-.B must
-be supplied if
-.B O_CREAT
-or
-.B O_TMPFILE
-is specified in
-.IR flags ;
-if it is not supplied,
-some arbitrary bytes from the stack will be applied as the file mode.
-.IP
-The effective mode is modified by the process's
-.I umask
-in the usual way: in the absence of a default ACL, the mode of the
-created file is
-.IR "(mode\ &\ \[ti]umask)" .
-.IP
-Note that
-.I mode
-applies only to future accesses of the
-newly created file; the
-.BR open ()
-call that creates a read-only file may well return a read/write
-file descriptor.
-.IP
-The following symbolic constants are provided for
-.IR mode :
-.RS
-.TP 9
-.B S_IRWXU
-00700 user (file owner) has read, write, and execute permission
-.TP
-.B S_IRUSR
-00400 user has read permission
-.TP
-.B S_IWUSR
-00200 user has write permission
-.TP
-.B S_IXUSR
-00100 user has execute permission
-.TP
-.B S_IRWXG
-00070 group has read, write, and execute permission
-.TP
-.B S_IRGRP
-00040 group has read permission
-.TP
-.B S_IWGRP
-00020 group has write permission
-.TP
-.B S_IXGRP
-00010 group has execute permission
-.TP
-.B S_IRWXO
-00007 others have read, write, and execute permission
-.TP
-.B S_IROTH
-00004 others have read permission
-.TP
-.B S_IWOTH
-00002 others have write permission
-.TP
-.B S_IXOTH
-00001 others have execute permission
-.RE
-.IP
-According to POSIX, the effect when other bits are set in
-.I mode
-is unspecified.
-On Linux, the following bits are also honored in
-.IR mode :
-.RS
-.TP 9
-.B S_ISUID
-0004000 set-user-ID bit
-.TP
-.B S_ISGID
-0002000 set-group-ID bit (see
-.BR inode (7)).
-.TP
-.B S_ISVTX
-0001000 sticky bit (see
-.BR inode (7)).
-.RE
-.TP
-.BR O_DIRECT " (since Linux 2.4.10)"
-Try to minimize cache effects of the I/O to and from this file.
-In general this will degrade performance, but it is useful in
-special situations, such as when applications do their own caching.
-File I/O is done directly to/from user-space buffers.
-The
-.B O_DIRECT
-flag on its own makes an effort to transfer data synchronously,
-but does not give the guarantees of the
-.B O_SYNC
-flag that data and necessary metadata are transferred.
-To guarantee synchronous I/O,
-.B O_SYNC
-must be used in addition to
-.BR O_DIRECT .
-See NOTES below for further discussion.
-.IP
-A semantically similar (but deprecated) interface for block devices
-is described in
-.BR raw (8).
-.TP
-.B O_DIRECTORY
-If \fIpathname\fP is not a directory, cause the open to fail.
-.\" But see the following and its replies:
-.\" http://marc.theaimsgroup.com/?t=112748702800001&r=1&w=2
-.\" [PATCH] open: O_DIRECTORY and O_CREAT together should fail
-.\" O_DIRECTORY | O_CREAT causes O_DIRECTORY to be ignored.
-This flag was added in Linux 2.1.126, to
-avoid denial-of-service problems if
-.BR opendir (3)
-is called on a
-FIFO or tape device.
-.TP
-.B O_DSYNC
-Write operations on the file will complete according to the requirements of
-synchronized I/O
-.I data
-integrity completion.
-.IP
-By the time
-.BR write (2)
-(and similar)
-return, the output data
-has been transferred to the underlying hardware,
-along with any file metadata that would be required to retrieve that data
-(i.e., as though each
-.BR write (2)
-was followed by a call to
-.BR fdatasync (2)).
-.IR "See NOTES below" .
-.TP
-.B O_EXCL
-Ensure that this call creates the file:
-if this flag is specified in conjunction with
-.BR O_CREAT ,
-and
-.I pathname
-already exists, then
-.BR open ()
-fails with the error
-.BR EEXIST .
-.IP
-When these two flags are specified, symbolic links are not followed:
-.\" POSIX.1-2001 explicitly requires this behavior.
-if
-.I pathname
-is a symbolic link, then
-.BR open ()
-fails regardless of where the symbolic link points.
-.IP
-In general, the behavior of
-.B O_EXCL
-is undefined if it is used without
-.BR O_CREAT .
-There is one exception: on Linux 2.6 and later,
-.B O_EXCL
-can be used without
-.B O_CREAT
-if
-.I pathname
-refers to a block device.
-If the block device is in use by the system (e.g., mounted),
-.BR open ()
-fails with the error
-.BR EBUSY .
-.IP
-On NFS,
-.B O_EXCL
-is supported only when using NFSv3 or later on kernel 2.6 or later.
-In NFS environments where
-.B O_EXCL
-support is not provided, programs that rely on it
-for performing locking tasks will contain a race condition.
-Portable programs that want to perform atomic file locking using a lockfile,
-and need to avoid reliance on NFS support for
-.BR O_EXCL ,
-can create a unique file on
-the same filesystem (e.g., incorporating hostname and PID), and use
-.BR link (2)
-to make a link to the lockfile.
-If
-.BR link (2)
-returns 0, the lock is successful.
-Otherwise, use
-.BR stat (2)
-on the unique file to check if its link count has increased to 2,
-in which case the lock is also successful.
-.TP
-.B O_LARGEFILE
-(LFS)
-Allow files whose sizes cannot be represented in an
-.I off_t
-(but can be represented in an
-.IR off64_t )
-to be opened.
-The
-.B _LARGEFILE64_SOURCE
-macro must be defined
-(before including
-.I any
-header files)
-in order to obtain this definition.
-Setting the
-.B _FILE_OFFSET_BITS
-feature test macro to 64 (rather than using
-.BR O_LARGEFILE )
-is the preferred
-method of accessing large files on 32-bit systems (see
-.BR feature_test_macros (7)).
-.TP
-.BR O_NOATIME " (since Linux 2.6.8)"
-Do not update the file last access time
-.RI ( st_atime
-in the inode)
-when the file is
-.BR read (2).
-.IP
-This flag can be employed only if one of the following conditions is true:
-.RS
-.IP \[bu] 3
-The effective UID of the process
-.\" Strictly speaking: the filesystem UID
-matches the owner UID of the file.
-.IP \[bu]
-The calling process has the
-.B CAP_FOWNER
-capability in its user namespace and
-the owner UID of the file has a mapping in the namespace.
-.RE
-.IP
-This flag is intended for use by indexing or backup programs,
-where its use can significantly reduce the amount of disk activity.
-This flag may not be effective on all filesystems.
-One example is NFS, where the server maintains the access time.
-.\" The O_NOATIME flag also affects the treatment of st_atime
-.\" by mmap() and readdir(2), MTK, Dec 04.
-.TP
-.B O_NOCTTY
-If
-.I pathname
-refers to a terminal device\[em]see
-.BR tty (4)\[em]it
-will not become the process's controlling terminal even if the
-process does not have one.
-.TP
-.B O_NOFOLLOW
-If the trailing component (i.e., basename) of
-.I pathname
-is a symbolic link, then the open fails, with the error
-.BR ELOOP .
-Symbolic links in earlier components of the pathname will still be
-followed.
-(Note that the
-.B ELOOP
-error that can occur in this case is indistinguishable from the case where
-an open fails because there are too many symbolic links found
-while resolving components in the prefix part of the pathname.)
-.IP
-This flag is a FreeBSD extension, which was added in Linux 2.1.126,
-and has subsequently been standardized in POSIX.1-2008.
-.IP
-See also
-.B O_PATH
-below.
-.\" The headers from glibc 2.0.100 and later include a
-.\" definition of this flag; \fIkernels before Linux 2.1.126 will ignore it if
-.\" used\fP.
-.TP
-.BR O_NONBLOCK " or " O_NDELAY
-When possible, the file is opened in nonblocking mode.
-Neither the
-.BR open ()
-nor any subsequent I/O operations on the file descriptor which is
-returned will cause the calling process to wait.
-.IP
-Note that the setting of this flag has no effect on the operation of
-.BR poll (2),
-.BR select (2),
-.BR epoll (7),
-and similar,
-since those interfaces merely inform the caller about whether
-a file descriptor is "ready",
-meaning that an I/O operation performed on
-the file descriptor with the
-.B O_NONBLOCK
-flag
-.I clear
-would not block.
-.IP
-Note that this flag has no effect for regular files and block devices;
-that is, I/O operations will (briefly) block when device activity
-is required, regardless of whether
-.B O_NONBLOCK
-is set.
-Since
-.B O_NONBLOCK
-semantics might eventually be implemented,
-applications should not depend upon blocking behavior
-when specifying this flag for regular files and block devices.
-.IP
-For the handling of FIFOs (named pipes), see also
-.BR fifo (7).
-For a discussion of the effect of
-.B O_NONBLOCK
-in conjunction with mandatory file locks and with file leases, see
-.BR fcntl (2).
-.TP
-.BR O_PATH " (since Linux 2.6.39)"
-.\" commit 1abf0c718f15a56a0a435588d1b104c7a37dc9bd
-.\" commit 326be7b484843988afe57566b627fb7a70beac56
-.\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d
-.\"
-.\" http://thread.gmane.org/gmane.linux.man/2790/focus=3496
-.\" Subject: Re: [PATCH] open(2): document O_PATH
-.\" Newsgroups: gmane.linux.man, gmane.linux.kernel
-.\"
-Obtain a file descriptor that can be used for two purposes:
-to indicate a location in the filesystem tree and
-to perform operations that act purely at the file descriptor level.
-The file itself is not opened, and other file operations (e.g.,
-.BR read (2),
-.BR write (2),
-.BR fchmod (2),
-.BR fchown (2),
-.BR fgetxattr (2),
-.BR ioctl (2),
-.BR mmap (2))
-fail with the error
-.BR EBADF .
-.IP
-The following operations
-.I can
-be performed on the resulting file descriptor:
-.RS
-.IP \[bu] 3
-.BR close (2).
-.IP \[bu]
-.BR fchdir (2),
-if the file descriptor refers to a directory
-(since Linux 3.5).
-.\" commit 332a2e1244bd08b9e3ecd378028513396a004a24
-.IP \[bu]
-.BR fstat (2)
-(since Linux 3.6).
-.IP \[bu]
-.\" fstat(): commit 55815f70147dcfa3ead5738fd56d3574e2e3c1c2
-.BR fstatfs (2)
-(since Linux 3.12).
-.\" fstatfs(): commit 9d05746e7b16d8565dddbe3200faa1e669d23bbf
-.IP \[bu]
-Duplicating the file descriptor
-.RB ( dup (2),
-.BR fcntl (2)
-.BR F_DUPFD ,
-etc.).
-.IP \[bu]
-Getting and setting file descriptor flags
-.RB ( fcntl (2)
-.B F_GETFD
-and
-.BR F_SETFD ).
-.IP \[bu]
-Retrieving open file status flags using the
-.BR fcntl (2)
-.B F_GETFL
-operation: the returned flags will include the bit
-.BR O_PATH .
-.IP \[bu]
-Passing the file descriptor as the
-.I dirfd
-argument of
-.BR openat ()
-and the other "*at()" system calls.
-This includes
-.BR linkat (2)
-with
-.B AT_EMPTY_PATH
-(or via procfs using
-.BR AT_SYMLINK_FOLLOW )
-even if the file is not a directory.
-.IP \[bu]
-Passing the file descriptor to another process via a UNIX domain socket
-(see
-.B SCM_RIGHTS
-in
-.BR unix (7)).
-.RE
-.IP
-When
-.B O_PATH
-is specified in
-.IR flags ,
-flag bits other than
-.BR O_CLOEXEC ,
-.BR O_DIRECTORY ,
-and
-.B O_NOFOLLOW
-are ignored.
-.IP
-Opening a file or directory with the
-.B O_PATH
-flag requires no permissions on the object itself
-(but does require execute permission on the directories in the path prefix).
-Depending on the subsequent operation,
-a check for suitable file permissions may be performed (e.g.,
-.BR fchdir (2)
-requires execute permission on the directory referred to
-by its file descriptor argument).
-By contrast,
-obtaining a reference to a filesystem object by opening it with the
-.B O_RDONLY
-flag requires that the caller have read permission on the object,
-even when the subsequent operation (e.g.,
-.BR fchdir (2),
-.BR fstat (2))
-does not require read permission on the object.
-.IP
-If
-.I pathname
-is a symbolic link and the
-.B O_NOFOLLOW
-flag is also specified,
-then the call returns a file descriptor referring to the symbolic link.
-This file descriptor can be used as the
-.I dirfd
-argument in calls to
-.BR fchownat (2),
-.BR fstatat (2),
-.BR linkat (2),
-and
-.BR readlinkat (2)
-with an empty pathname to have the calls operate on the symbolic link.
-.IP
-If
-.I pathname
-refers to an automount point that has not yet been triggered, so no
-other filesystem is mounted on it, then the call returns a file
-descriptor referring to the automount directory without triggering a mount.
-.BR fstatfs (2)
-can then be used to determine if it is, in fact, an untriggered
-automount point
-.RB ( ".f_type == AUTOFS_SUPER_MAGIC" ).
-.IP
-One use of
-.B O_PATH
-for regular files is to provide the equivalent of POSIX.1's
-.B O_EXEC
-functionality.
-This permits us to open a file for which we have execute
-permission but not read permission, and then execute that file,
-with steps something like the following:
-.IP
-.in +4n
-.EX
-char buf[PATH_MAX];
-fd = open("some_prog", O_PATH);
-snprintf(buf, PATH_MAX, "/proc/self/fd/%d", fd);
-execl(buf, "some_prog", (char *) NULL);
-.EE
-.in
-.IP
-An
-.B O_PATH
-file descriptor can also be passed as the argument of
-.BR fexecve (3).
-.TP
-.B O_SYNC
-Write operations on the file will complete according to the requirements of
-synchronized I/O
-.I file
-integrity completion
-(by contrast with the
-synchronized I/O
-.I data
-integrity completion
-provided by
-.BR O_DSYNC .)
-.IP
-By the time
-.BR write (2)
-(or similar)
-returns, the output data and associated file metadata
-have been transferred to the underlying hardware
-(i.e., as though each
-.BR write (2)
-was followed by a call to
-.BR fsync (2)).
-.IR "See NOTES below" .
-.TP
-.BR O_TMPFILE " (since Linux 3.11)"
-.\" commit 60545d0d4610b02e55f65d141c95b18ccf855b6e
-.\" commit f4e0c30c191f87851c4a53454abb55ee276f4a7e
-.\" commit bb458c644a59dbba3a1fe59b27106c5e68e1c4bd
-Create an unnamed temporary regular file.
-The
-.I pathname
-argument specifies a directory;
-an unnamed inode will be created in that directory's filesystem.
-Anything written to the resulting file will be lost when
-the last file descriptor is closed, unless the file is given a name.
-.IP
-.B O_TMPFILE
-must be specified with one of
-.B O_RDWR
-or
-.B O_WRONLY
-and, optionally,
-.BR O_EXCL .
-If
-.B O_EXCL
-is not specified, then
-.BR linkat (2)
-can be used to link the temporary file into the filesystem, making it
-permanent, using code like the following:
-.IP
-.in +4n
-.EX
-char path[PATH_MAX];
-fd = open("/path/to/dir", O_TMPFILE | O_RDWR,
- S_IRUSR | S_IWUSR);
-\&
-/* File I/O on \[aq]fd\[aq]... */
-\&
-linkat(fd, "", AT_FDCWD, "/path/for/file", AT_EMPTY_PATH);
-\&
-/* If the caller doesn\[aq]t have the CAP_DAC_READ_SEARCH
- capability (needed to use AT_EMPTY_PATH with linkat(2)),
- and there is a proc(5) filesystem mounted, then the
- linkat(2) call above can be replaced with:
-\&
-snprintf(path, PATH_MAX, "/proc/self/fd/%d", fd);
-linkat(AT_FDCWD, path, AT_FDCWD, "/path/for/file",
- AT_SYMLINK_FOLLOW);
-*/
-.EE
-.in
-.IP
-In this case,
-the
-.BR open ()
-.I mode
-argument determines the file permission mode, as with
-.BR O_CREAT .
-.IP
-Specifying
-.B O_EXCL
-in conjunction with
-.B O_TMPFILE
-prevents a temporary file from being linked into the filesystem
-in the above manner.
-(Note that the meaning of
-.B O_EXCL
-in this case is different from the meaning of
-.B O_EXCL
-otherwise.)
-.IP
-There are two main use cases for
-.\" Inspired by http://lwn.net/Articles/559147/
-.BR O_TMPFILE :
-.RS
-.IP \[bu] 3
-Improved
-.BR tmpfile (3)
-functionality: race-free creation of temporary files that
-(1) are automatically deleted when closed;
-(2) can never be reached via any pathname;
-(3) are not subject to symlink attacks; and
-(4) do not require the caller to devise unique names.
-.IP \[bu]
-Creating a file that is initially invisible, which is then populated
-with data and adjusted to have appropriate filesystem attributes
-.RB ( fchown (2),
-.BR fchmod (2),
-.BR fsetxattr (2),
-etc.)
-before being atomically linked into the filesystem
-in a fully formed state (using
-.BR linkat (2)
-as described above).
-.RE
-.IP
-.B O_TMPFILE
-requires support by the underlying filesystem;
-only a subset of Linux filesystems provide that support.
-In the initial implementation, support was provided in
-the ext2, ext3, ext4, UDF, Minix, and tmpfs filesystems.
-.\" To check for support, grep for "tmpfile" in kernel sources
-Support for other filesystems has subsequently been added as follows:
-XFS (Linux 3.15);
-.\" commit 99b6436bc29e4f10e4388c27a3e4810191cc4788
-.\" commit ab29743117f9f4c22ac44c13c1647fb24fb2bafe
-Btrfs (Linux 3.16);
-.\" commit ef3b9af50bfa6a1f02cd7b3f5124b712b1ba3e3c
-F2FS (Linux 3.16);
-.\" commit 50732df02eefb39ab414ef655979c2c9b64ad21c
-and ubifs (Linux 4.9)
-.TP
-.B O_TRUNC
-If the file already exists and is a regular file and the access mode allows
-writing (i.e., is
-.B O_RDWR
-or
-.BR O_WRONLY )
-it will be truncated to length 0.
-If the file is a FIFO or terminal device file, the
-.B O_TRUNC
-flag is ignored.
-Otherwise, the effect of
-.B O_TRUNC
-is unspecified.
-.SS creat()
-A call to
-.BR creat ()
-is equivalent to calling
-.BR open ()
-with
-.I flags
-equal to
-.BR O_CREAT|O_WRONLY|O_TRUNC .
-.SS openat()
-The
-.BR openat ()
-system call operates in exactly the same way as
-.BR open (),
-except for the differences described here.
-.PP
-The
-.I dirfd
-argument is used in conjunction with the
-.I pathname
-argument as follows:
-.IP \[bu] 3
-If the pathname given in
-.I pathname
-is absolute, then
-.I dirfd
-is ignored.
-.IP \[bu]
-If the pathname given in
-.I pathname
-is relative and
-.I dirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I pathname
-is interpreted relative to the current working
-directory of the calling process (like
-.BR open ()).
-.IP \[bu]
-If the pathname given in
-.I pathname
-is relative, then it is interpreted relative to the directory
-referred to by the file descriptor
-.I dirfd
-(rather than relative to the current working directory of
-the calling process, as is done by
-.BR open ()
-for a relative pathname).
-In this case,
-.I dirfd
-must be a directory that was opened for reading
-.RB ( O_RDONLY )
-or using the
-.B O_PATH
-flag.
-.PP
-If the pathname given in
-.I pathname
-is relative, and
-.I dirfd
-is not a valid file descriptor, an error
-.RB ( EBADF )
-results.
-(Specifying an invalid file descriptor number in
-.I dirfd
-can be used as a means to ensure that
-.I pathname
-is absolute.)
-.\"
-.SS openat2(2)
-The
-.BR openat2 (2)
-system call is an extension of
-.BR openat (),
-and provides a superset of the features of
-.BR openat ().
-It is documented separately, in
-.BR openat2 (2).
-.SH RETURN VALUE
-On success,
-.BR open (),
-.BR openat (),
-and
-.BR creat ()
-return the new file descriptor (a nonnegative integer).
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.BR open (),
-.BR openat (),
-and
-.BR creat ()
-can fail with the following errors:
-.TP
-.B EACCES
-The requested access to the file is not allowed, or search permission
-is denied for one of the directories in the path prefix of
-.IR pathname ,
-or the file did not exist yet and write access to the parent directory
-is not allowed.
-(See also
-.BR path_resolution (7).)
-.TP
-.B EACCES
-.\" commit 30aba6656f61ed44cba445a3c0d38b296fa9e8f5
-Where
-.B O_CREAT
-is specified, the
-.I protected_fifos
-or
-.I protected_regular
-sysctl is enabled, the file already exists and is a FIFO or regular file, the
-owner of the file is neither the current user nor the owner of the
-containing directory, and the containing directory is both world- or
-group-writable and sticky.
-For details, see the descriptions of
-.I /proc/sys/fs/protected_fifos
-and
-.I /proc/sys/fs/protected_regular
-in
-.BR proc (5).
-.TP
-.B EBADF
-.RB ( openat ())
-.I pathname
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B EBUSY
-.B O_EXCL
-was specified in
-.I flags
-and
-.I pathname
-refers to a block device that is in use by the system (e.g., it is mounted).
-.TP
-.B EDQUOT
-Where
-.B O_CREAT
-is specified, the file does not exist, and the user's quota of disk
-blocks or inodes on the filesystem has been exhausted.
-.TP
-.B EEXIST
-.I pathname
-already exists and
-.BR O_CREAT " and " O_EXCL
-were used.
-.TP
-.B EFAULT
-.I pathname
-points outside your accessible address space.
-.TP
-.B EFBIG
-See
-.BR EOVERFLOW .
-.TP
-.B EINTR
-While blocked waiting to complete an open of a slow device
-(e.g., a FIFO; see
-.BR fifo (7)),
-the call was interrupted by a signal handler; see
-.BR signal (7).
-.TP
-.B EINVAL
-The filesystem does not support the
-.B O_DIRECT
-flag.
-See
-.B NOTES
-for more information.
-.TP
-.B EINVAL
-Invalid value in
-.\" In particular, __O_TMPFILE instead of O_TMPFILE
-.IR flags .
-.TP
-.B EINVAL
-.B O_TMPFILE
-was specified in
-.IR flags ,
-but neither
-.B O_WRONLY
-nor
-.B O_RDWR
-was specified.
-.TP
-.B EINVAL
-.B O_CREAT
-was specified in
-.I flags
-and the final component ("basename") of the new file's
-.I pathname
-is invalid
-(e.g., it contains characters not permitted by the underlying filesystem).
-.TP
-.B EINVAL
-The final component ("basename") of
-.I pathname
-is invalid
-(e.g., it contains characters not permitted by the underlying filesystem).
-.TP
-.B EISDIR
-.I pathname
-refers to a directory and the access requested involved writing
-(that is,
-.B O_WRONLY
-or
-.B O_RDWR
-is set).
-.TP
-.B EISDIR
-.I pathname
-refers to an existing directory,
-.B O_TMPFILE
-and one of
-.B O_WRONLY
-or
-.B O_RDWR
-were specified in
-.IR flags ,
-but this kernel version does not provide the
-.B O_TMPFILE
-functionality.
-.TP
-.B ELOOP
-Too many symbolic links were encountered in resolving
-.IR pathname .
-.TP
-.B ELOOP
-.I pathname
-was a symbolic link, and
-.I flags
-specified
-.B O_NOFOLLOW
-but not
-.BR O_PATH .
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached
-(see the description of
-.B RLIMIT_NOFILE
-in
-.BR getrlimit (2)).
-.TP
-.B ENAMETOOLONG
-.I pathname
-was too long.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENODEV
-.I pathname
-refers to a device special file and no corresponding device exists.
-(This is a Linux kernel bug; in this situation
-.B ENXIO
-must be returned.)
-.TP
-.B ENOENT
-.B O_CREAT
-is not set and the named file does not exist.
-.TP
-.B ENOENT
-A directory component in
-.I pathname
-does not exist or is a dangling symbolic link.
-.TP
-.B ENOENT
-.I pathname
-refers to a nonexistent directory,
-.B O_TMPFILE
-and one of
-.B O_WRONLY
-or
-.B O_RDWR
-were specified in
-.IR flags ,
-but this kernel version does not provide the
-.B O_TMPFILE
-functionality.
-.TP
-.B ENOMEM
-The named file is a FIFO,
-but memory for the FIFO buffer can't be allocated because
-the per-user hard limit on memory allocation for pipes has been reached
-and the caller is not privileged; see
-.BR pipe (7).
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOSPC
-.I pathname
-was to be created but the device containing
-.I pathname
-has no room for the new file.
-.TP
-.B ENOTDIR
-A component used as a directory in
-.I pathname
-is not, in fact, a directory, or \fBO_DIRECTORY\fP was specified and
-.I pathname
-was not a directory.
-.TP
-.B ENOTDIR
-.RB ( openat ())
-.I pathname
-is a relative pathname and
-.I dirfd
-is a file descriptor referring to a file other than a directory.
-.TP
-.B ENXIO
-.BR O_NONBLOCK " | " O_WRONLY
-is set, the named file is a FIFO, and
-no process has the FIFO open for reading.
-.TP
-.B ENXIO
-The file is a device special file and no corresponding device exists.
-.TP
-.B ENXIO
-The file is a UNIX domain socket.
-.TP
-.B EOPNOTSUPP
-The filesystem containing
-.I pathname
-does not support
-.BR O_TMPFILE .
-.TP
-.B EOVERFLOW
-.I pathname
-refers to a regular file that is too large to be opened.
-The usual scenario here is that an application compiled
-on a 32-bit platform without
-.I \-D_FILE_OFFSET_BITS=64
-tried to open a file whose size exceeds
-.I (1<<31)\-1
-bytes;
-see also
-.B O_LARGEFILE
-above.
-This is the error specified by POSIX.1;
-before Linux 2.6.24, Linux gave the error
-.B EFBIG
-for this case.
-.\" See http://bugzilla.kernel.org/show_bug.cgi?id=7253
-.\" "Open of a large file on 32-bit fails with EFBIG, should be EOVERFLOW"
-.\" Reported 2006-10-03
-.TP
-.B EPERM
-The
-.B O_NOATIME
-flag was specified, but the effective user ID of the caller
-.\" Strictly speaking, it's the filesystem UID... (MTK)
-did not match the owner of the file and the caller was not privileged.
-.TP
-.B EPERM
-The operation was prevented by a file seal; see
-.BR fcntl (2).
-.TP
-.B EROFS
-.I pathname
-refers to a file on a read-only filesystem and write access was
-requested.
-.TP
-.B ETXTBSY
-.I pathname
-refers to an executable image which is currently being executed and
-write access was requested.
-.TP
-.B ETXTBSY
-.I pathname
-refers to a file that is currently in use as a swap file, and the
-.B O_TRUNC
-flag was specified.
-.TP
-.B ETXTBSY
-.I pathname
-refers to a file that is currently being read by the kernel (e.g., for
-module/firmware loading), and write access was requested.
-.TP
-.B EWOULDBLOCK
-The
-.B O_NONBLOCK
-flag was specified, and an incompatible lease was held on the file
-(see
-.BR fcntl (2)).
-.SH VERSIONS
-The (undefined) effect of
-.B O_RDONLY | O_TRUNC
-varies among implementations.
-On many systems the file is actually truncated.
-.\" Linux 2.0, 2.5: truncate
-.\" Solaris 5.7, 5.8: truncate
-.\" Irix 6.5: truncate
-.\" Tru64 5.1B: truncate
-.\" HP-UX 11.22: truncate
-.\" FreeBSD 4.7: truncate
-.SS Synchronized I/O
-The POSIX.1-2008 "synchronized I/O" option
-specifies different variants of synchronized I/O,
-and specifies the
-.BR open ()
-flags
-.BR O_SYNC ,
-.BR O_DSYNC ,
-and
-.B O_RSYNC
-for controlling the behavior.
-Regardless of whether an implementation supports this option,
-it must at least support the use of
-.B O_SYNC
-for regular files.
-.PP
-Linux implements
-.B O_SYNC
-and
-.BR O_DSYNC ,
-but not
-.BR O_RSYNC .
-Somewhat incorrectly, glibc defines
-.B O_RSYNC
-to have the same value as
-.BR O_SYNC .
-.RB ( O_RSYNC
-is defined in the Linux header file
-.I <asm/fcntl.h>
-on HP PA-RISC, but it is not used.)
-.PP
-.B O_SYNC
-provides synchronized I/O
-.I file
-integrity completion,
-meaning write operations will flush data and all associated metadata
-to the underlying hardware.
-.B O_DSYNC
-provides synchronized I/O
-.I data
-integrity completion,
-meaning write operations will flush data
-to the underlying hardware,
-but will only flush metadata updates that are required
-to allow a subsequent read operation to complete successfully.
-Data integrity completion can reduce the number of disk operations
-that are required for applications that don't need the guarantees
-of file integrity completion.
-.PP
-To understand the difference between the two types of completion,
-consider two pieces of file metadata:
-the file last modification timestamp
-.RI ( st_mtime )
-and the file length.
-All write operations will update the last file modification timestamp,
-but only writes that add data to the end of the
-file will change the file length.
-The last modification timestamp is not needed to ensure that
-a read completes successfully, but the file length is.
-Thus,
-.B O_DSYNC
-would only guarantee to flush updates to the file length metadata
-(whereas
-.B O_SYNC
-would also always flush the last modification timestamp metadata).
-.PP
-Before Linux 2.6.33, Linux implemented only the
-.B O_SYNC
-flag for
-.BR open ().
-However, when that flag was specified,
-most filesystems actually provided the equivalent of synchronized I/O
-.I data
-integrity completion (i.e.,
-.B O_SYNC
-was actually implemented as the equivalent of
-.BR O_DSYNC ).
-.PP
-Since Linux 2.6.33, proper
-.B O_SYNC
-support is provided.
-However, to ensure backward binary compatibility,
-.B O_DSYNC
-was defined with the same value as the historical
-.BR O_SYNC ,
-and
-.B O_SYNC
-was defined as a new (two-bit) flag value that includes the
-.B O_DSYNC
-flag value.
-This ensures that applications compiled against
-new headers get at least
-.B O_DSYNC
-semantics before Linux 2.6.33.
-.\"
-.SS C library/kernel differences
-Since glibc 2.26,
-the glibc wrapper function for
-.BR open ()
-employs the
-.BR openat ()
-system call, rather than the kernel's
-.BR open ()
-system call.
-For certain architectures, this is also true before glibc 2.26.
-.\"
-.SH STANDARDS
-.TP
-.BR open ()
-.TQ
-.BR creat ()
-.TQ
-.BR openat ()
-POSIX.1-2008.
-.PP
-.BR openat2 (2)
-Linux.
-.PP
-The
-.BR O_DIRECT ,
-.BR O_NOATIME ,
-.BR O_PATH ,
-and
-.B O_TMPFILE
-flags are Linux-specific.
-One must define
-.B _GNU_SOURCE
-to obtain their definitions.
-.PP
-The
-.BR O_CLOEXEC ,
-.BR O_DIRECTORY ,
-and
-.B O_NOFOLLOW
-flags are not specified in POSIX.1-2001,
-but are specified in POSIX.1-2008.
-Since glibc 2.12, one can obtain their definitions by defining either
-.B _POSIX_C_SOURCE
-with a value greater than or equal to 200809L or
-.B _XOPEN_SOURCE
-with a value greater than or equal to 700.
-In glibc 2.11 and earlier, one obtains the definitions by defining
-.BR _GNU_SOURCE .
-.SH HISTORY
-.TP
-.BR open ()
-.TQ
-.BR creat ()
-SVr4, 4.3BSD, POSIX.1-2001.
-.TP
-.BR openat ()
-POSIX.1-2008.
-Linux 2.6.16,
-glibc 2.4.
-.SH NOTES
-Under Linux, the
-.B O_NONBLOCK
-flag is sometimes used in cases where one wants to open
-but does not necessarily have the intention to read or write.
-For example,
-this may be used to open a device in order to get a file descriptor
-for use with
-.BR ioctl (2).
-.PP
-Note that
-.BR open ()
-can open device special files, but
-.BR creat ()
-cannot create them; use
-.BR mknod (2)
-instead.
-.PP
-If the file is newly created, its
-.IR st_atime ,
-.IR st_ctime ,
-.I st_mtime
-fields
-(respectively, time of last access, time of last status change, and
-time of last modification; see
-.BR stat (2))
-are set
-to the current time, and so are the
-.I st_ctime
-and
-.I st_mtime
-fields of the
-parent directory.
-Otherwise, if the file is modified because of the
-.B O_TRUNC
-flag, its
-.I st_ctime
-and
-.I st_mtime
-fields are set to the current time.
-.PP
-The files in the
-.IR /proc/ pid /fd
-directory show the open file descriptors of the process with the PID
-.IR pid .
-The files in the
-.IR /proc/ pid /fdinfo
-directory show even more information about these file descriptors.
-See
-.BR proc (5)
-for further details of both of these directories.
-.PP
-The Linux header file
-.B <asm/fcntl.h>
-doesn't define
-.BR O_ASYNC ;
-the (BSD-derived)
-.B FASYNC
-synonym is defined instead.
-.\"
-.\"
-.SS Open file descriptions
-The term open file description is the one used by POSIX to refer to the
-entries in the system-wide table of open files.
-In other contexts, this object is
-variously also called an "open file object",
-a "file handle", an "open file table entry",
-or\[em]in kernel-developer parlance\[em]a
-.IR "struct file" .
-.PP
-When a file descriptor is duplicated (using
-.BR dup (2)
-or similar),
-the duplicate refers to the same open file description
-as the original file descriptor,
-and the two file descriptors consequently share
-the file offset and file status flags.
-Such sharing can also occur between processes:
-a child process created via
-.BR fork (2)
-inherits duplicates of its parent's file descriptors,
-and those duplicates refer to the same open file descriptions.
-.PP
-Each
-.BR open ()
-of a file creates a new open file description;
-thus, there may be multiple open file descriptions
-corresponding to a file inode.
-.PP
-On Linux, one can use the
-.BR kcmp (2)
-.B KCMP_FILE
-operation to test whether two file descriptors
-(in the same process or in two different processes)
-refer to the same open file description.
-.\"
-.SS NFS
-There are many infelicities in the protocol underlying NFS, affecting
-amongst others
-.BR O_SYNC " and " O_NDELAY .
-.PP
-On NFS filesystems with UID mapping enabled,
-.BR open ()
-may
-return a file descriptor but, for example,
-.BR read (2)
-requests are denied
-with
-.BR EACCES .
-This is because the client performs
-.BR open ()
-by checking the
-permissions, but UID mapping is performed by the server upon
-read and write requests.
-.\"
-.\"
-.SS FIFOs
-Opening the read or write end of a FIFO blocks until the other
-end is also opened (by another process or thread).
-See
-.BR fifo (7)
-for further details.
-.\"
-.\"
-.SS File access mode
-Unlike the other values that can be specified in
-.IR flags ,
-the
-.I "access mode"
-values
-.BR O_RDONLY ", " O_WRONLY ", and " O_RDWR
-do not specify individual bits.
-Rather, they define the low order two bits of
-.IR flags ,
-and are defined respectively as 0, 1, and 2.
-In other words, the combination
-.B "O_RDONLY | O_WRONLY"
-is a logical error, and certainly does not have the same meaning as
-.BR O_RDWR .
-.PP
-Linux reserves the special, nonstandard access mode 3 (binary 11) in
-.I flags
-to mean:
-check for read and write permission on the file and return a file descriptor
-that can't be used for reading or writing.
-This nonstandard access mode is used by some Linux drivers to return a
-file descriptor that is to be used only for device-specific
-.BR ioctl (2)
-operations.
-.\" See for example util-linux's disk-utils/setfdprm.c
-.\" For some background on access mode 3, see
-.\" http://thread.gmane.org/gmane.linux.kernel/653123
-.\" "[RFC] correct flags to f_mode conversion in __dentry_open"
-.\" LKML, 12 Mar 2008
-.\"
-.\"
-.SS Rationale for openat() and other "directory file descriptor" APIs
-.BR openat ()
-and the other system calls and library functions that take
-a directory file descriptor argument
-(i.e.,
-.BR execveat (2),
-.BR faccessat (2),
-.BR fanotify_mark (2),
-.BR fchmodat (2),
-.BR fchownat (2),
-.BR fspick (2),
-.BR fstatat (2),
-.BR futimesat (2),
-.BR linkat (2),
-.BR mkdirat (2),
-.BR mknodat (2),
-.BR mount_setattr (2),
-.BR move_mount (2),
-.BR name_to_handle_at (2),
-.BR open_tree (2),
-.BR openat2 (2),
-.BR readlinkat (2),
-.BR renameat (2),
-.BR renameat2 (2),
-.BR statx (2),
-.BR symlinkat (2),
-.BR unlinkat (2),
-.BR utimensat (2),
-.BR mkfifoat (3),
-and
-.BR scandirat (3))
-address two problems with the older interfaces that preceded them.
-Here, the explanation is in terms of the
-.BR openat ()
-call, but the rationale is analogous for the other interfaces.
-.PP
-First,
-.BR openat ()
-allows an application to avoid race conditions that could
-occur when using
-.BR open ()
-to open files in directories other than the current working directory.
-These race conditions result from the fact that some component
-of the directory prefix given to
-.BR open ()
-could be changed in parallel with the call to
-.BR open ().
-Suppose, for example, that we wish to create the file
-.I dir1/dir2/xxx.dep
-if the file
-.I dir1/dir2/xxx
-exists.
-The problem is that between the existence check and the file-creation step,
-.I dir1
-or
-.I dir2
-(which might be symbolic links)
-could be modified to point to a different location.
-Such races can be avoided by
-opening a file descriptor for the target directory,
-and then specifying that file descriptor as the
-.I dirfd
-argument of (say)
-.BR fstatat (2)
-and
-.BR openat ().
-The use of the
-.I dirfd
-file descriptor also has other benefits:
-.IP \[bu] 3
-the file descriptor is a stable reference to the directory,
-even if the directory is renamed; and
-.IP \[bu]
-the open file descriptor prevents the underlying filesystem from
-being dismounted,
-just as when a process has a current working directory on a filesystem.
-.PP
-Second,
-.BR openat ()
-allows the implementation of a per-thread "current working
-directory", via file descriptor(s) maintained by the application.
-(This functionality can also be obtained by tricks based
-on the use of
-.IR /proc/self/fd/ dirfd,
-but less efficiently.)
-.PP
-The
-.I dirfd
-argument for these APIs can be obtained by using
-.BR open ()
-or
-.BR openat ()
-to open a directory (with either the
-.B O_RDONLY
-or the
-.B O_PATH
-flag).
-Alternatively, such a file descriptor can be obtained by applying
-.BR dirfd (3)
-to a directory stream created using
-.BR opendir (3).
-.PP
-When these APIs are given a
-.I dirfd
-argument of
-.B AT_FDCWD
-or the specified pathname is absolute,
-then they handle their pathname argument in the same way as
-the corresponding conventional APIs.
-However, in this case, several of the APIs have a
-.I flags
-argument that provides access to functionality that is not available with
-the corresponding conventional APIs.
-.\"
-.\"
-.SS O_DIRECT
-The
-.B O_DIRECT
-flag may impose alignment restrictions on the length and address
-of user-space buffers and the file offset of I/Os.
-In Linux alignment
-restrictions vary by filesystem and kernel version and might be
-absent entirely.
-The handling of misaligned
-.B O_DIRECT
-I/Os also varies;
-they can either fail with
-.B EINVAL
-or fall back to buffered I/O.
-.PP
-Since Linux 6.1,
-.B O_DIRECT
-support and alignment restrictions for a file can be queried using
-.BR statx (2),
-using the
-.B STATX_DIOALIGN
-flag.
-Support for
-.B STATX_DIOALIGN
-varies by filesystem;
-see
-.BR statx (2).
-.PP
-Some filesystems provide their own interfaces for querying
-.B O_DIRECT
-alignment restrictions,
-for example the
-.B XFS_IOC_DIOINFO
-operation in
-.BR xfsctl (3).
-.B STATX_DIOALIGN
-should be used instead when it is available.
-.PP
-If none of the above is available,
-then direct I/O support and alignment restrictions
-can only be assumed from known characteristics of the filesystem,
-the individual file,
-the underlying storage device(s),
-and the kernel version.
-In Linux 2.4,
-most filesystems based on block devices require that
-the file offset and the length and memory address of all I/O segments
-be multiples of the filesystem block size
-(typically 4096 bytes).
-In Linux 2.6.0,
-this was relaxed to the logical block size of the block device
-(typically 512 bytes).
-A block device's logical block size can be determined using the
-.BR ioctl (2)
-.B BLKSSZGET
-operation or from the shell using the command:
-.PP
-.in +4n
-.EX
-blockdev \-\-getss
-.EE
-.in
-.PP
-.B O_DIRECT
-I/Os should never be run concurrently with the
-.BR fork (2)
-system call,
-if the memory buffer is a private mapping
-(i.e., any mapping created with the
-.BR mmap (2)
-.B MAP_PRIVATE
-flag;
-this includes memory allocated on the heap and statically allocated buffers).
-Any such I/Os, whether submitted via an asynchronous I/O interface or from
-another thread in the process,
-should be completed before
-.BR fork (2)
-is called.
-Failure to do so can result in data corruption and undefined behavior in
-parent and child processes.
-This restriction does not apply when the memory buffer for the
-.B O_DIRECT
-I/Os was created using
-.BR shmat (2)
-or
-.BR mmap (2)
-with the
-.B MAP_SHARED
-flag.
-Nor does this restriction apply when the memory buffer has been advised as
-.B MADV_DONTFORK
-with
-.BR madvise (2),
-ensuring that it will not be available
-to the child after
-.BR fork (2).
-.PP
-The
-.B O_DIRECT
-flag was introduced in SGI IRIX, where it has alignment
-restrictions similar to those of Linux 2.4.
-IRIX has also a
-.BR fcntl (2)
-call to query appropriate alignments, and sizes.
-FreeBSD 4.x introduced
-a flag of the same name, but without alignment restrictions.
-.PP
-.B O_DIRECT
-support was added in Linux 2.4.10.
-Older Linux kernels simply ignore this flag.
-Some filesystems may not implement the flag, in which case
-.BR open ()
-fails with the error
-.B EINVAL
-if it is used.
-.PP
-Applications should avoid mixing
-.B O_DIRECT
-and normal I/O to the same file,
-and especially to overlapping byte regions in the same file.
-Even when the filesystem correctly handles the coherency issues in
-this situation, overall I/O throughput is likely to be slower than
-using either mode alone.
-Likewise, applications should avoid mixing
-.BR mmap (2)
-of files with direct I/O to the same files.
-.PP
-The behavior of
-.B O_DIRECT
-with NFS will differ from local filesystems.
-Older kernels, or
-kernels configured in certain ways, may not support this combination.
-The NFS protocol does not support passing the flag to the server, so
-.B O_DIRECT
-I/O will bypass the page cache only on the client; the server may
-still cache the I/O.
-The client asks the server to make the I/O
-synchronous to preserve the synchronous semantics of
-.BR O_DIRECT .
-Some servers will perform poorly under these circumstances, especially
-if the I/O size is small.
-Some servers may also be configured to
-lie to clients about the I/O having reached stable storage; this
-will avoid the performance penalty at some risk to data integrity
-in the event of server power failure.
-The Linux NFS client places no alignment restrictions on
-.B O_DIRECT
-I/O.
-.PP
-In summary,
-.B O_DIRECT
-is a potentially powerful tool that should be used with caution.
-It is recommended that applications treat use of
-.B O_DIRECT
-as a performance option which is disabled by default.
-.SH BUGS
-Currently, it is not possible to enable signal-driven
-I/O by specifying
-.B O_ASYNC
-when calling
-.BR open ();
-use
-.BR fcntl (2)
-to enable this flag.
-.\" FIXME . Check bugzilla report on open(O_ASYNC)
-.\" See http://bugzilla.kernel.org/show_bug.cgi?id=5993
-.PP
-One must check for two different error codes,
-.B EISDIR
-and
-.BR ENOENT ,
-when trying to determine whether the kernel supports
-.B O_TMPFILE
-functionality.
-.PP
-When both
-.B O_CREAT
-and
-.B O_DIRECTORY
-are specified in
-.I flags
-and the file specified by
-.I pathname
-does not exist,
-.BR open ()
-will create a regular file (i.e.,
-.B O_DIRECTORY
-is ignored).
-.SH SEE ALSO
-.BR chmod (2),
-.BR chown (2),
-.BR close (2),
-.BR dup (2),
-.BR fcntl (2),
-.BR link (2),
-.BR lseek (2),
-.BR mknod (2),
-.BR mmap (2),
-.BR mount (2),
-.BR open_by_handle_at (2),
-.BR openat2 (2),
-.BR read (2),
-.BR socket (2),
-.BR stat (2),
-.BR umask (2),
-.BR unlink (2),
-.BR write (2),
-.BR fopen (3),
-.BR acl (5),
-.BR fifo (7),
-.BR inode (7),
-.BR path_resolution (7),
-.BR symlink (7)
diff --git a/man2/open_by_handle_at.2 b/man2/open_by_handle_at.2
deleted file mode 100644
index 4061faea9..000000000
--- a/man2/open_by_handle_at.2
+++ /dev/null
@@ -1,751 +0,0 @@
-.\" Copyright (c) 2014 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH open_by_handle_at 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-name_to_handle_at, open_by_handle_at \- obtain handle
-for a pathname and open file via a handle
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <fcntl.h>
-.PP
-.BI "int name_to_handle_at(int " dirfd ", const char *" pathname ,
-.BI " struct file_handle *" handle ,
-.BI " int *" mount_id ", int " flags );
-.BI "int open_by_handle_at(int " mount_fd ", struct file_handle *" handle ,
-.BI " int " flags );
-.fi
-.SH DESCRIPTION
-The
-.BR name_to_handle_at ()
-and
-.BR open_by_handle_at ()
-system calls split the functionality of
-.BR openat (2)
-into two parts:
-.BR name_to_handle_at ()
-returns an opaque handle that corresponds to a specified file;
-.BR open_by_handle_at ()
-opens the file corresponding to a handle returned by a previous call to
-.BR name_to_handle_at ()
-and returns an open file descriptor.
-.\"
-.\"
-.SS name_to_handle_at()
-The
-.BR name_to_handle_at ()
-system call returns a file handle and a mount ID corresponding to
-the file specified by the
-.I dirfd
-and
-.I pathname
-arguments.
-The file handle is returned via the argument
-.IR handle ,
-which is a pointer to a structure of the following form:
-.PP
-.in +4n
-.EX
-struct file_handle {
- unsigned int handle_bytes; /* Size of f_handle [in, out] */
- int handle_type; /* Handle type [out] */
- unsigned char f_handle[0]; /* File identifier (sized by
- caller) [out] */
-};
-.EE
-.in
-.PP
-It is the caller's responsibility to allocate the structure
-with a size large enough to hold the handle returned in
-.IR f_handle .
-Before the call, the
-.I handle_bytes
-field should be initialized to contain the allocated size for
-.IR f_handle .
-(The constant
-.BR MAX_HANDLE_SZ ,
-defined in
-.IR <fcntl.h> ,
-specifies the maximum expected size for a file handle.
-It is not a
-guaranteed upper limit as future filesystems may require more space.)
-Upon successful return, the
-.I handle_bytes
-field is updated to contain the number of bytes actually written to
-.IR f_handle .
-.PP
-The caller can discover the required size for the
-.I file_handle
-structure by making a call in which
-.I handle\->handle_bytes
-is zero;
-in this case, the call fails with the error
-.B EOVERFLOW
-and
-.I handle\->handle_bytes
-is set to indicate the required size;
-the caller can then use this information to allocate a structure
-of the correct size (see EXAMPLES below).
-Some care is needed here as
-.B EOVERFLOW
-can also indicate that no file handle is available for this particular
-name in a filesystem which does normally support file-handle lookup.
-This case can be detected when the
-.B EOVERFLOW
-error is returned without
-.I handle_bytes
-being increased.
-.PP
-Other than the use of the
-.I handle_bytes
-field, the caller should treat the
-.I file_handle
-structure as an opaque data type: the
-.I handle_type
-and
-.I f_handle
-fields are needed only by a subsequent call to
-.BR open_by_handle_at ().
-.PP
-The
-.I flags
-argument is a bit mask constructed by ORing together zero or more of
-.B AT_EMPTY_PATH
-and
-.BR AT_SYMLINK_FOLLOW ,
-described below.
-.PP
-Together, the
-.I pathname
-and
-.I dirfd
-arguments identify the file for which a handle is to be obtained.
-There are four distinct cases:
-.IP \[bu] 3
-If
-.I pathname
-is a nonempty string containing an absolute pathname,
-then a handle is returned for the file referred to by that pathname.
-In this case,
-.I dirfd
-is ignored.
-.IP \[bu]
-If
-.I pathname
-is a nonempty string containing a relative pathname and
-.I dirfd
-has the special value
-.BR AT_FDCWD ,
-then
-.I pathname
-is interpreted relative to the current working directory of the caller,
-and a handle is returned for the file to which it refers.
-.IP \[bu]
-If
-.I pathname
-is a nonempty string containing a relative pathname and
-.I dirfd
-is a file descriptor referring to a directory, then
-.I pathname
-is interpreted relative to the directory referred to by
-.IR dirfd ,
-and a handle is returned for the file to which it refers.
-(See
-.BR openat (2)
-for an explanation of why "directory file descriptors" are useful.)
-.IP \[bu]
-If
-.I pathname
-is an empty string and
-.I flags
-specifies the value
-.BR AT_EMPTY_PATH ,
-then
-.I dirfd
-can be an open file descriptor referring to any type of file,
-or
-.BR AT_FDCWD ,
-meaning the current working directory,
-and a handle is returned for the file to which it refers.
-.PP
-The
-.I mount_id
-argument returns an identifier for the filesystem
-mount that corresponds to
-.IR pathname .
-This corresponds to the first field in one of the records in
-.IR /proc/self/mountinfo .
-Opening the pathname in the fifth field of that record yields a file
-descriptor for the mount point;
-that file descriptor can be used in a subsequent call to
-.BR open_by_handle_at ().
-.I mount_id
-is returned both for a successful call and for a call that results
-in the error
-.BR EOVERFLOW .
-.PP
-By default,
-.BR name_to_handle_at ()
-does not dereference
-.I pathname
-if it is a symbolic link, and thus returns a handle for the link itself.
-If
-.B AT_SYMLINK_FOLLOW
-is specified in
-.IR flags ,
-.I pathname
-is dereferenced if it is a symbolic link
-(so that the call returns a handle for the file referred to by the link).
-.PP
-.BR name_to_handle_at ()
-does not trigger a mount when the final component of the pathname is an
-automount point.
-When a filesystem supports both file handles and
-automount points, a
-.BR name_to_handle_at ()
-call on an automount point will return with error
-.B EOVERFLOW
-without having increased
-.IR handle_bytes .
-This can happen since Linux 4.13
-.\" commit 20fa19027286983ab2734b5910c4a687436e0c31
-with NFS when accessing a directory
-which is on a separate filesystem on the server.
-In this case, the automount can be triggered by adding a "/" to the end
-of the pathname.
-.SS open_by_handle_at()
-The
-.BR open_by_handle_at ()
-system call opens the file referred to by
-.IR handle ,
-a file handle returned by a previous call to
-.BR name_to_handle_at ().
-.PP
-The
-.I mount_fd
-argument is a file descriptor for any object (file, directory, etc.)
-in the mounted filesystem with respect to which
-.I handle
-should be interpreted.
-The special value
-.B AT_FDCWD
-can be specified, meaning the current working directory of the caller.
-.PP
-The
-.I flags
-argument
-is as for
-.BR open (2).
-If
-.I handle
-refers to a symbolic link, the caller must specify the
-.B O_PATH
-flag, and the symbolic link is not dereferenced; the
-.B O_NOFOLLOW
-flag, if specified, is ignored.
-.PP
-The caller must have the
-.B CAP_DAC_READ_SEARCH
-capability to invoke
-.BR open_by_handle_at ().
-.SH RETURN VALUE
-On success,
-.BR name_to_handle_at ()
-returns 0,
-and
-.BR open_by_handle_at ()
-returns a file descriptor (a nonnegative integer).
-.PP
-In the event of an error, both system calls return \-1 and set
-.I errno
-to indicate the error.
-.SH ERRORS
-.BR name_to_handle_at ()
-and
-.BR open_by_handle_at ()
-can fail for the same errors as
-.BR openat (2).
-In addition, they can fail with the errors noted below.
-.PP
-.BR name_to_handle_at ()
-can fail with the following errors:
-.TP
-.B EFAULT
-.IR pathname ,
-.IR mount_id ,
-or
-.I handle
-points outside your accessible address space.
-.TP
-.B EINVAL
-.I flags
-includes an invalid bit value.
-.TP
-.B EINVAL
-.I handle\->handle_bytes
-is greater than
-.BR MAX_HANDLE_SZ .
-.TP
-.B ENOENT
-.I pathname
-is an empty string, but
-.B AT_EMPTY_PATH
-was not specified in
-.IR flags .
-.TP
-.B ENOTDIR
-The file descriptor supplied in
-.I dirfd
-does not refer to a directory,
-and it is not the case that both
-.I flags
-includes
-.B AT_EMPTY_PATH
-and
-.I pathname
-is an empty string.
-.TP
-.B EOPNOTSUPP
-The filesystem does not support decoding of a pathname to a file handle.
-.TP
-.B EOVERFLOW
-The
-.I handle\->handle_bytes
-value passed into the call was too small.
-When this error occurs,
-.I handle\->handle_bytes
-is updated to indicate the required size for the handle.
-.\"
-.\"
-.PP
-.BR open_by_handle_at ()
-can fail with the following errors:
-.TP
-.B EBADF
-.I mount_fd
-is not an open file descriptor.
-.TP
-.B EBADF
-.I pathname
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B EFAULT
-.I handle
-points outside your accessible address space.
-.TP
-.B EINVAL
-.I handle\->handle_bytes
-is greater than
-.B MAX_HANDLE_SZ
-or is equal to zero.
-.TP
-.B ELOOP
-.I handle
-refers to a symbolic link, but
-.B O_PATH
-was not specified in
-.IR flags .
-.TP
-.B EPERM
-The caller does not have the
-.B CAP_DAC_READ_SEARCH
-capability.
-.TP
-.B ESTALE
-The specified
-.I handle
-is not valid.
-This error will occur if, for example, the file has been deleted.
-.SH VERSIONS
-FreeBSD has a broadly similar pair of system calls in the form of
-.BR getfh ()
-and
-.BR openfh ().
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.39,
-glibc 2.14.
-.SH NOTES
-A file handle can be generated in one process using
-.BR name_to_handle_at ()
-and later used in a different process that calls
-.BR open_by_handle_at ().
-.PP
-Some filesystem don't support the translation of pathnames to
-file handles, for example,
-.IR /proc ,
-.IR /sys ,
-and various network filesystems.
-.PP
-A file handle may become invalid ("stale") if a file is deleted,
-or for other filesystem-specific reasons.
-Invalid handles are notified by an
-.B ESTALE
-error from
-.BR open_by_handle_at ().
-.PP
-These system calls are designed for use by user-space file servers.
-For example, a user-space NFS server might generate a file handle
-and pass it to an NFS client.
-Later, when the client wants to open the file,
-it could pass the handle back to the server.
-.\" https://lwn.net/Articles/375888/
-.\" "Open by handle" - Jonathan Corbet, 2010-02-23
-This sort of functionality allows a user-space file server to operate in
-a stateless fashion with respect to the files it serves.
-.PP
-If
-.I pathname
-refers to a symbolic link and
-.I flags
-does not specify
-.BR AT_SYMLINK_FOLLOW ,
-then
-.BR name_to_handle_at ()
-returns a handle for the link (rather than the file to which it refers).
-.\" commit bcda76524cd1fa32af748536f27f674a13e56700
-The process receiving the handle can later perform operations
-on the symbolic link by converting the handle to a file descriptor using
-.BR open_by_handle_at ()
-with the
-.B O_PATH
-flag, and then passing the file descriptor as the
-.I dirfd
-argument in system calls such as
-.BR readlinkat (2)
-and
-.BR fchownat (2).
-.SS Obtaining a persistent filesystem ID
-The mount IDs in
-.I /proc/self/mountinfo
-can be reused as filesystems are unmounted and mounted.
-Therefore, the mount ID returned by
-.BR name_to_handle_at ()
-(in
-.IR *mount_id )
-should not be treated as a persistent identifier
-for the corresponding mounted filesystem.
-However, an application can use the information in the
-.I mountinfo
-record that corresponds to the mount ID
-to derive a persistent identifier.
-.PP
-For example, one can use the device name in the fifth field of the
-.I mountinfo
-record to search for the corresponding device UUID via the symbolic links in
-.IR /dev/disks/by\-uuid .
-(A more comfortable way of obtaining the UUID is to use the
-.\" e.g., http://stackoverflow.com/questions/6748429/using-libblkid-to-find-uuid-of-a-partition
-.BR libblkid (3)
-library.)
-That process can then be reversed,
-using the UUID to look up the device name,
-and then obtaining the corresponding mount point,
-in order to produce the
-.I mount_fd
-argument used by
-.BR open_by_handle_at ().
-.SH EXAMPLES
-The two programs below demonstrate the use of
-.BR name_to_handle_at ()
-and
-.BR open_by_handle_at ().
-The first program
-.RI ( t_name_to_handle_at.c )
-uses
-.BR name_to_handle_at ()
-to obtain the file handle and mount ID
-for the file specified in its command-line argument;
-the handle and mount ID are written to standard output.
-.PP
-The second program
-.RI ( t_open_by_handle_at.c )
-reads a mount ID and file handle from standard input.
-The program then employs
-.BR open_by_handle_at ()
-to open the file using that handle.
-If an optional command-line argument is supplied, then the
-.I mount_fd
-argument for
-.BR open_by_handle_at ()
-is obtained by opening the directory named in that argument.
-Otherwise,
-.I mount_fd
-is obtained by scanning
-.I /proc/self/mountinfo
-to find a record whose mount ID matches the mount ID
-read from standard input,
-and the mount directory specified in that record is opened.
-(These programs do not deal with the fact that mount IDs are not persistent.)
-.PP
-The following shell session demonstrates the use of these two programs:
-.PP
-.in +4n
-.EX
-$ \fBecho \[aq]Can you please think about it?\[aq] > cecilia.txt\fP
-$ \fB./t_name_to_handle_at cecilia.txt > fh\fP
-$ \fB./t_open_by_handle_at < fh\fP
-open_by_handle_at: Operation not permitted
-$ \fBsudo ./t_open_by_handle_at < fh\fP # Need CAP_SYS_ADMIN
-Read 31 bytes
-$ \fBrm cecilia.txt\fP
-.EE
-.in
-.PP
-Now we delete and (quickly) re-create the file so that
-it has the same content and (by chance) the same inode.
-Nevertheless,
-.BR open_by_handle_at ()
-.\" Christoph Hellwig: That's why the file handles contain a generation
-.\" counter that gets incremented in this case.
-recognizes that the original file referred to by the file handle
-no longer exists.
-.PP
-.in +4n
-.EX
-$ \fBstat \-\-printf="%i\en" cecilia.txt\fP # Display inode number
-4072121
-$ \fBrm cecilia.txt\fP
-$ \fBecho \[aq]Can you please think about it?\[aq] > cecilia.txt\fP
-$ \fBstat \-\-printf="%i\en" cecilia.txt\fP # Check inode number
-4072121
-$ \fBsudo ./t_open_by_handle_at < fh\fP
-open_by_handle_at: Stale NFS file handle
-.EE
-.in
-.SS Program source: t_name_to_handle_at.c
-\&
-.\" SRC BEGIN (t_name_to_handle_at.c)
-.EX
-#define _GNU_SOURCE
-#include <err.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int mount_id, fhsize, flags, dirfd;
- char *pathname;
- struct file_handle *fhp;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s pathname\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- pathname = argv[1];
-\&
- /* Allocate file_handle structure. */
-\&
- fhsize = sizeof(*fhp);
- fhp = malloc(fhsize);
- if (fhp == NULL)
- err(EXIT_FAILURE, "malloc");
-\&
- /* Make an initial call to name_to_handle_at() to discover
- the size required for file handle. */
-\&
- dirfd = AT_FDCWD; /* For name_to_handle_at() calls */
- flags = 0; /* For name_to_handle_at() calls */
- fhp\->handle_bytes = 0;
- if (name_to_handle_at(dirfd, pathname, fhp,
- &mount_id, flags) != \-1
- || errno != EOVERFLOW)
- {
- fprintf(stderr, "Unexpected result from name_to_handle_at()\en");
- exit(EXIT_FAILURE);
- }
-\&
- /* Reallocate file_handle structure with correct size. */
-\&
- fhsize = sizeof(*fhp) + fhp\->handle_bytes;
- fhp = realloc(fhp, fhsize); /* Copies fhp\->handle_bytes */
- if (fhp == NULL)
- err(EXIT_FAILURE, "realloc");
-\&
- /* Get file handle from pathname supplied on command line. */
-\&
- if (name_to_handle_at(dirfd, pathname, fhp, &mount_id, flags) == \-1)
- err(EXIT_FAILURE, "name_to_handle_at");
-\&
- /* Write mount ID, file handle size, and file handle to stdout,
- for later reuse by t_open_by_handle_at.c. */
-\&
- printf("%d\en", mount_id);
- printf("%u %d ", fhp\->handle_bytes, fhp\->handle_type);
- for (size_t j = 0; j < fhp\->handle_bytes; j++)
- printf(" %02x", fhp\->f_handle[j]);
- printf("\en");
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SS Program source: t_open_by_handle_at.c
-\&
-.\" SRC BEGIN (t_open_by_handle_at.c)
-.EX
-#define _GNU_SOURCE
-#include <err.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-\&
-/* Scan /proc/self/mountinfo to find the line whose mount ID matches
- \[aq]mount_id\[aq]. (An easier way to do this is to install and use the
- \[aq]libmount\[aq] library provided by the \[aq]util\-linux\[aq] project.)
- Open the corresponding mount path and return the resulting file
- descriptor. */
-\&
-static int
-open_mount_path_by_id(int mount_id)
-{
- int mi_mount_id, found;
- char mount_path[PATH_MAX];
- char *linep;
- FILE *fp;
- size_t lsize;
- ssize_t nread;
-\&
- fp = fopen("/proc/self/mountinfo", "r");
- if (fp == NULL)
- err(EXIT_FAILURE, "fopen");
-\&
- found = 0;
- linep = NULL;
- while (!found) {
- nread = getline(&linep, &lsize, fp);
- if (nread == \-1)
- break;
-\&
- nread = sscanf(linep, "%d %*d %*s %*s %s",
- &mi_mount_id, mount_path);
- if (nread != 2) {
- fprintf(stderr, "Bad sscanf()\en");
- exit(EXIT_FAILURE);
- }
-\&
- if (mi_mount_id == mount_id)
- found = 1;
- }
- free(linep);
-\&
- fclose(fp);
-\&
- if (!found) {
- fprintf(stderr, "Could not find mount point\en");
- exit(EXIT_FAILURE);
- }
-\&
- return open(mount_path, O_RDONLY);
-}
-\&
-int
-main(int argc, char *argv[])
-{
- int mount_id, fd, mount_fd, handle_bytes;
- char buf[1000];
-#define LINE_SIZE 100
- char line1[LINE_SIZE], line2[LINE_SIZE];
- char *nextp;
- ssize_t nread;
- struct file_handle *fhp;
-\&
- if ((argc > 1 && strcmp(argv[1], "\-\-help") == 0) || argc > 2) {
- fprintf(stderr, "Usage: %s [mount\-path]\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- /* Standard input contains mount ID and file handle information:
-\&
- Line 1: <mount_id>
- Line 2: <handle_bytes> <handle_type> <bytes of handle in hex>
- */
-\&
- if (fgets(line1, sizeof(line1), stdin) == NULL ||
- fgets(line2, sizeof(line2), stdin) == NULL)
- {
- fprintf(stderr, "Missing mount_id / file handle\en");
- exit(EXIT_FAILURE);
- }
-\&
- mount_id = atoi(line1);
-\&
- handle_bytes = strtoul(line2, &nextp, 0);
-\&
- /* Given handle_bytes, we can now allocate file_handle structure. */
-\&
- fhp = malloc(sizeof(*fhp) + handle_bytes);
- if (fhp == NULL)
- err(EXIT_FAILURE, "malloc");
-\&
- fhp\->handle_bytes = handle_bytes;
-\&
- fhp\->handle_type = strtoul(nextp, &nextp, 0);
-\&
- for (size_t j = 0; j < fhp\->handle_bytes; j++)
- fhp\->f_handle[j] = strtoul(nextp, &nextp, 16);
-\&
- /* Obtain file descriptor for mount point, either by opening
- the pathname specified on the command line, or by scanning
- /proc/self/mounts to find a mount that matches the \[aq]mount_id\[aq]
- that we received from stdin. */
-\&
- if (argc > 1)
- mount_fd = open(argv[1], O_RDONLY);
- else
- mount_fd = open_mount_path_by_id(mount_id);
-\&
- if (mount_fd == \-1)
- err(EXIT_FAILURE, "opening mount fd");
-\&
- /* Open file using handle and mount point. */
-\&
- fd = open_by_handle_at(mount_fd, fhp, O_RDONLY);
- if (fd == \-1)
- err(EXIT_FAILURE, "open_by_handle_at");
-\&
- /* Try reading a few bytes from the file. */
-\&
- nread = read(fd, buf, sizeof(buf));
- if (nread == \-1)
- err(EXIT_FAILURE, "read");
-\&
- printf("Read %zd bytes\en", nread);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR open (2),
-.BR libblkid (3),
-.BR blkid (8),
-.BR findfs (8),
-.BR mount (8)
-.PP
-The
-.I libblkid
-and
-.I libmount
-documentation in the latest
-.I util\-linux
-release at
-.UR https://www.kernel.org/pub/linux/utils/util\-linux/
-.UE
diff --git a/man2/openat.2 b/man2/openat.2
deleted file mode 100644
index 604e1213a..000000000
--- a/man2/openat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/open.2
diff --git a/man2/openat2.2 b/man2/openat2.2
deleted file mode 100644
index 182851089..000000000
--- a/man2/openat2.2
+++ /dev/null
@@ -1,582 +0,0 @@
-.\" Copyright (C) 2019 Aleksa Sarai <cyphar@cyphar.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.TH openat2 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-openat2 \- open and possibly create a file (extended)
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <fcntl.h>" \
-" /* Definition of " O_* " and " S_* " constants */"
-.BR "#include <linux/openat2.h>" " /* Definition of " RESOLVE_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "long syscall(SYS_openat2, int " dirfd ", const char *" pathname ,
-.BI " struct open_how *" how ", size_t " size );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR openat2 (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR openat2 ()
-system call is an extension of
-.BR openat (2)
-and provides a superset of its functionality.
-.PP
-The
-.BR openat2 ()
-system call opens the file specified by
-.IR pathname .
-If the specified file does not exist, it may optionally (if
-.B O_CREAT
-is specified in
-.IR how.flags )
-be created.
-.PP
-As with
-.BR openat (2),
-if
-.I pathname
-is a relative pathname, then it is interpreted relative to the
-directory referred to by the file descriptor
-.I dirfd
-(or the current working directory of the calling process, if
-.I dirfd
-is the special value
-.BR AT_FDCWD ).
-If
-.I pathname
-is an absolute pathname, then
-.I dirfd
-is ignored (unless
-.I how.resolve
-contains
-.BR RESOLVE_IN_ROOT ,
-in which case
-.I pathname
-is resolved relative to
-.IR dirfd ).
-.PP
-Rather than taking a single
-.I flags
-argument, an extensible structure (\fIhow\fP) is passed to allow for
-future extensions.
-The
-.I size
-argument must be specified as
-.IR "sizeof(struct open_how)" .
-.\"
-.SS The open_how structure
-The
-.I how
-argument specifies how
-.I pathname
-should be opened, and acts as a superset of the
-.I flags
-and
-.I mode
-arguments to
-.BR openat (2).
-This argument is a pointer to an
-.I open_how
-structure,
-described in
-.BR open_how (2type).
-.PP
-Any future extensions to
-.BR openat2 ()
-will be implemented as new fields appended to the
-.I open_how
-structure,
-with a zero value in a new field resulting in the kernel behaving
-as though that extension field was not present.
-Therefore, the caller
-.I must
-zero-fill this structure on
-initialization.
-(See the "Extensibility" section of the
-.B NOTES
-for more detail on why this is necessary.)
-.PP
-The fields of the
-.I open_how
-structure are as follows:
-.TP
-.I flags
-This field specifies
-the file creation and file status flags to use when opening the file.
-All of the
-.B O_*
-flags defined for
-.BR openat (2)
-are valid
-.BR openat2 ()
-flag values.
-.IP
-Whereas
-.BR openat (2)
-ignores unknown bits in its
-.I flags
-argument,
-.BR openat2 ()
-returns an error if unknown or conflicting flags are specified in
-.IR how.flags .
-.TP
-.I mode
-This field specifies the
-mode for the new file, with identical semantics to the
-.I mode
-argument of
-.BR openat (2).
-.IP
-Whereas
-.BR openat (2)
-ignores bits other than those in the range
-.I 07777
-in its
-.I mode
-argument,
-.BR openat2 ()
-returns an error if
-.I how.mode
-contains bits other than
-.IR 07777 .
-Similarly, an error is returned if
-.BR openat2 ()
-is called with a nonzero
-.I how.mode
-and
-.I how.flags
-does not contain
-.B O_CREAT
-or
-.BR O_TMPFILE .
-.TP
-.I resolve
-This is a bit-mask of flags that modify the way in which
-.B all
-components of
-.I pathname
-will be resolved.
-(See
-.BR path_resolution (7)
-for background information.)
-.IP
-The primary use case for these flags is to allow trusted programs to restrict
-how untrusted paths (or paths inside untrusted directories) are resolved.
-The full list of
-.I resolve
-flags is as follows:
-.RS
-.TP
-.B RESOLVE_BENEATH
-.\" commit adb21d2b526f7f196b2f3fdca97d80ba05dd14a0
-Do not permit the path resolution to succeed if any component of the resolution
-is not a descendant of the directory indicated by
-.IR dirfd .
-This causes absolute symbolic links (and absolute values of
-.IR pathname )
-to be rejected.
-.IP
-Currently, this flag also disables magic-link resolution (see below).
-However, this may change in the future.
-Therefore, to ensure that magic links are not resolved,
-the caller should explicitly specify
-.BR RESOLVE_NO_MAGICLINKS .
-.TP
-.B RESOLVE_IN_ROOT
-.\" commit 8db52c7e7ee1bd861b6096fcafc0fe7d0f24a994
-Treat the directory referred to by
-.I dirfd
-as the root directory while resolving
-.IR pathname .
-Absolute symbolic links are interpreted relative to
-.IR dirfd .
-If a prefix component of
-.I pathname
-equates to
-.IR dirfd ,
-then an immediately following
-.I ..\&
-component likewise equates to
-.I dirfd
-(just as
-.I /..\&
-is traditionally equivalent to
-.IR / ).
-If
-.I pathname
-is an absolute path, it is also interpreted relative to
-.IR dirfd .
-.IP
-The effect of this flag is as though the calling process had used
-.BR chroot (2)
-to (temporarily) modify its root directory (to the directory
-referred to by
-.IR dirfd ).
-However, unlike
-.BR chroot (2)
-(which changes the filesystem root permanently for a process),
-.B RESOLVE_IN_ROOT
-allows a program to efficiently restrict path resolution on a per-open basis.
-.IP
-Currently, this flag also disables magic-link resolution.
-However, this may change in the future.
-Therefore, to ensure that magic links are not resolved,
-the caller should explicitly specify
-.BR RESOLVE_NO_MAGICLINKS .
-.TP
-.B RESOLVE_NO_MAGICLINKS
-.\" commit 278121417a72d87fb29dd8c48801f80821e8f75a
-Disallow all magic-link resolution during path resolution.
-.IP
-Magic links are symbolic link-like objects that are most notably found in
-.BR proc (5);
-examples include
-.IR /proc/ pid /exe
-and
-.IR /proc/ pid /fd/* .
-(See
-.BR symlink (7)
-for more details.)
-.IP
-Unknowingly opening magic links can be risky for some applications.
-Examples of such risks include the following:
-.RS
-.IP \[bu] 3
-If the process opening a pathname is a controlling process that
-currently has no controlling terminal (see
-.BR credentials (7)),
-then opening a magic link inside
-.IR /proc/ pid /fd
-that happens to refer to a terminal
-would cause the process to acquire a controlling terminal.
-.IP \[bu]
-.\" From https://lwn.net/Articles/796868/:
-.\" The presence of this flag will prevent a path lookup operation
-.\" from traversing through one of these magic links, thus blocking
-.\" (for example) attempts to escape from a container via a /proc
-.\" entry for an open file descriptor.
-In a containerized environment,
-a magic link inside
-.I /proc
-may refer to an object outside the container,
-and thus may provide a means to escape from the container.
-.RE
-.IP
-Because of such risks,
-an application may prefer to disable magic link resolution using the
-.B RESOLVE_NO_MAGICLINKS
-flag.
-.IP
-If the trailing component (i.e., basename) of
-.I pathname
-is a magic link,
-.I how.resolve
-contains
-.BR RESOLVE_NO_MAGICLINKS ,
-and
-.I how.flags
-contains both
-.B O_PATH
-and
-.BR O_NOFOLLOW ,
-then an
-.B O_PATH
-file descriptor referencing the magic link will be returned.
-.TP
-.B RESOLVE_NO_SYMLINKS
-.\" commit 278121417a72d87fb29dd8c48801f80821e8f75a
-Disallow resolution of symbolic links during path resolution.
-This option implies
-.BR RESOLVE_NO_MAGICLINKS .
-.IP
-If the trailing component (i.e., basename) of
-.I pathname
-is a symbolic link,
-.I how.resolve
-contains
-.BR RESOLVE_NO_SYMLINKS ,
-and
-.I how.flags
-contains both
-.B O_PATH
-and
-.BR O_NOFOLLOW ,
-then an
-.B O_PATH
-file descriptor referencing the symbolic link will be returned.
-.IP
-Note that the effect of the
-.B RESOLVE_NO_SYMLINKS
-flag,
-which affects the treatment of symbolic links in all of the components of
-.IR pathname ,
-differs from the effect of the
-.B O_NOFOLLOW
-file creation flag (in
-.IR how.flags ),
-which affects the handling of symbolic links only in the final component of
-.IR pathname .
-.IP
-Applications that employ the
-.B RESOLVE_NO_SYMLINKS
-flag are encouraged to make its use configurable
-(unless it is used for a specific security purpose),
-as symbolic links are very widely used by end-users.
-Setting this flag indiscriminately\[em]i.e.,
-for purposes not specifically related to security\[em]for all uses of
-.BR openat2 ()
-may result in spurious errors on previously functional systems.
-This may occur if, for example,
-a system pathname that is used by an application is modified
-(e.g., in a new distribution release)
-so that a pathname component (now) contains a symbolic link.
-.TP
-.B RESOLVE_NO_XDEV
-.\" commit 72ba29297e1439efaa54d9125b866ae9d15df339
-Disallow traversal of mount points during path resolution (including all bind
-mounts).
-Consequently,
-.I pathname
-must either be on the same mount as the directory referred to by
-.IR dirfd ,
-or on the same mount as the current working directory if
-.I dirfd
-is specified as
-.BR AT_FDCWD .
-.IP
-Applications that employ the
-.B RESOLVE_NO_XDEV
-flag are encouraged to make its use configurable (unless it is
-used for a specific security purpose),
-as bind mounts are widely used by end-users.
-Setting this flag indiscriminately\[em]i.e.,
-for purposes not specifically related to security\[em]for all uses of
-.BR openat2 ()
-may result in spurious errors on previously functional systems.
-This may occur if, for example,
-a system pathname that is used by an application is modified
-(e.g., in a new distribution release)
-so that a pathname component (now) contains a bind mount.
-.TP
-.B RESOLVE_CACHED
-Make the open operation fail unless all path components are already present
-in the kernel's lookup cache.
-If any kind of revalidation or I/O is needed to satisfy the lookup,
-.BR openat2 ()
-fails with the error
-.B EAGAIN .
-This is useful in providing a fast-path open that can be performed without
-resorting to thread offload, or other mechanisms that an application might
-use to offload slower operations.
-.RE
-.IP
-If any bits other than those listed above are set in
-.IR how.resolve ,
-an error is returned.
-.SH RETURN VALUE
-On success, a new file descriptor is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-The set of errors returned by
-.BR openat2 ()
-includes all of the errors returned by
-.BR openat (2),
-as well as the following additional errors:
-.TP
-.B E2BIG
-An extension that this kernel does not support was specified in
-.IR how .
-(See the "Extensibility" section of
-.B NOTES
-for more detail on how extensions are handled.)
-.TP
-.B EAGAIN
-.I how.resolve
-contains either
-.B RESOLVE_IN_ROOT
-or
-.BR RESOLVE_BENEATH ,
-and the kernel could not ensure that a ".." component didn't escape (due to a
-race condition or potential attack).
-The caller may choose to retry the
-.BR openat2 ()
-call.
-.TP
-.B EAGAIN
-.B RESOLVE_CACHED
-was set, and the open operation cannot be performed using only cached
-information.
-The caller should retry without
-.B RESOLVE_CACHED
-set in
-.I how.resolve .
-.TP
-.B EINVAL
-An unknown flag or invalid value was specified in
-.IR how .
-.TP
-.B EINVAL
-.I mode
-is nonzero, but
-.I how.flags
-does not contain
-.B O_CREAT
-or
-.BR O_TMPFILE .
-.TP
-.B EINVAL
-.I size
-was smaller than any known version of
-.IR "struct open_how" .
-.TP
-.B ELOOP
-.I how.resolve
-contains
-.BR RESOLVE_NO_SYMLINKS ,
-and one of the path components was a symbolic link (or magic link).
-.TP
-.B ELOOP
-.I how.resolve
-contains
-.BR RESOLVE_NO_MAGICLINKS ,
-and one of the path components was a magic link.
-.TP
-.B EXDEV
-.I how.resolve
-contains either
-.B RESOLVE_IN_ROOT
-or
-.BR RESOLVE_BENEATH ,
-and an escape from the root during path resolution was detected.
-.TP
-.B EXDEV
-.I how.resolve
-contains
-.BR RESOLVE_NO_XDEV ,
-and a path component crosses a mount point.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 5.6.
-.\" commit fddb5d430ad9fa91b49b1d34d0202ffe2fa0e179
-.PP
-The semantics of
-.B RESOLVE_BENEATH
-were modeled after FreeBSD's
-.BR O_BENEATH .
-.SH NOTES
-.SS Extensibility
-In order to allow for future extensibility,
-.BR openat2 ()
-requires the user-space application to specify the size of the
-.I open_how
-structure that it is passing.
-By providing this information, it is possible for
-.BR openat2 ()
-to provide both forwards- and backwards-compatibility, with
-.I size
-acting as an implicit version number.
-(Because new extension fields will always
-be appended, the structure size will always increase.)
-This extensibility design is very similar to other system calls such as
-.BR sched_setattr (2),
-.BR perf_event_open (2),
-and
-.BR clone3 (2).
-.PP
-If we let
-.I usize
-be the size of the structure as specified by the user-space application, and
-.I ksize
-be the size of the structure which the kernel supports, then there are
-three cases to consider:
-.IP \[bu] 3
-If
-.I ksize
-equals
-.IR usize ,
-then there is no version mismatch and
-.I how
-can be used verbatim.
-.IP \[bu]
-If
-.I ksize
-is larger than
-.IR usize ,
-then there are some extension fields that the kernel supports
-which the user-space application
-is unaware of.
-Because a zero value in any added extension field signifies a no-op,
-the kernel
-treats all of the extension fields not provided by the user-space application
-as having zero values.
-This provides backwards-compatibility.
-.IP \[bu]
-If
-.I ksize
-is smaller than
-.IR usize ,
-then there are some extension fields which the user-space application
-is aware of but which the kernel does not support.
-Because any extension field must have its zero values signify a no-op,
-the kernel can
-safely ignore the unsupported extension fields if they are all-zero.
-If any unsupported extension fields are nonzero, then \-1 is returned and
-.I errno
-is set to
-.BR E2BIG .
-This provides forwards-compatibility.
-.PP
-Because the definition of
-.I struct open_how
-may change in the future (with new fields being added when system headers are
-updated), user-space applications should zero-fill
-.I struct open_how
-to ensure that recompiling the program with new headers will not result in
-spurious errors at run time.
-The simplest way is to use a designated
-initializer:
-.PP
-.in +4n
-.EX
-struct open_how how = { .flags = O_RDWR,
- .resolve = RESOLVE_IN_ROOT };
-.EE
-.in
-.PP
-or explicitly using
-.BR memset (3)
-or similar:
-.PP
-.in +4n
-.EX
-struct open_how how;
-memset(&how, 0, sizeof(how));
-how.flags = O_RDWR;
-how.resolve = RESOLVE_IN_ROOT;
-.EE
-.in
-.PP
-A user-space application that wishes to determine which extensions
-the running kernel supports can do so by conducting a binary search on
-.I size
-with a structure which has every byte nonzero (to find the largest value
-which doesn't produce an error of
-.BR E2BIG ).
-.SH SEE ALSO
-.BR openat (2),
-.BR open_how (2type),
-.BR path_resolution (7),
-.BR symlink (7)
diff --git a/man2/outb.2 b/man2/outb.2
deleted file mode 100644
index 11aafcdce..000000000
--- a/man2/outb.2
+++ /dev/null
@@ -1,84 +0,0 @@
-.\" Copyright (c) 1995 Paul Gortmaker
-.\" (gpg109@rsphy1.anu.edu.au)
-.\" Wed Nov 29 10:58:54 EST 1995
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH outb 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-outb, outw, outl, outsb, outsw, outsl,
-inb, inw, inl, insb, insw, insl,
-outb_p, outw_p, outl_p, inb_p, inw_p, inl_p \- port I/O
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/io.h>
-.PP
-.BI "unsigned char inb(unsigned short " port );
-.BI "unsigned char inb_p(unsigned short " port );
-.BI "unsigned short inw(unsigned short " port );
-.BI "unsigned short inw_p(unsigned short " port );
-.BI "unsigned int inl(unsigned short " port );
-.BI "unsigned int inl_p(unsigned short " port );
-.PP
-.BI "void outb(unsigned char " value ", unsigned short " port );
-.BI "void outb_p(unsigned char " value ", unsigned short " port );
-.BI "void outw(unsigned short " value ", unsigned short " port );
-.BI "void outw_p(unsigned short " value ", unsigned short " port );
-.BI "void outl(unsigned int " value ", unsigned short " port );
-.BI "void outl_p(unsigned int " value ", unsigned short " port );
-.PP
-.BI "void insb(unsigned short " port ", void " addr [. count ],
-.BI " unsigned long " count );
-.BI "void insw(unsigned short " port ", void " addr [. count ],
-.BI " unsigned long " count );
-.BI "void insl(unsigned short " port ", void " addr [. count ],
-.BI " unsigned long " count );
-.BI "void outsb(unsigned short " port ", const void " addr [. count ],
-.BI " unsigned long " count );
-.BI "void outsw(unsigned short " port ", const void " addr [. count ],
-.BI " unsigned long " count );
-.BI "void outsl(unsigned short " port ", const void " addr [. count ],
-.BI " unsigned long " count );
-.fi
-.SH DESCRIPTION
-This family of functions is used to do low-level port input and output.
-The out* functions do port output, the in* functions do port input;
-the b-suffix functions are byte-width and the w-suffix functions
-word-width; the _p-suffix functions pause until the I/O completes.
-.PP
-They are primarily designed for internal kernel use,
-but can be used from user space.
-.\" , given the following information
-.\" in addition to that given in
-.\" .BR outb (9).
-.PP
-You must compile with \fB\-O\fP or \fB\-O2\fP or similar.
-The functions
-are defined as inline macros, and will not be substituted in without
-optimization enabled, causing unresolved references at link time.
-.PP
-You use
-.BR ioperm (2)
-or alternatively
-.BR iopl (2)
-to tell the kernel to allow the user space application to access the
-I/O ports in question.
-Failure to do this will cause the application
-to receive a segmentation fault.
-.SH VERSIONS
-.BR outb ()
-and friends are hardware-specific.
-The
-.I value
-argument is passed first and the
-.I port
-argument is passed second,
-which is the opposite order from most DOS implementations.
-.SH STANDARDS
-None.
-.SH SEE ALSO
-.BR ioperm (2),
-.BR iopl (2)
diff --git a/man2/outb_p.2 b/man2/outb_p.2
deleted file mode 100644
index 2c63c7549..000000000
--- a/man2/outb_p.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/outb.2
diff --git a/man2/outl.2 b/man2/outl.2
deleted file mode 100644
index 2c63c7549..000000000
--- a/man2/outl.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/outb.2
diff --git a/man2/outl_p.2 b/man2/outl_p.2
deleted file mode 100644
index 2c63c7549..000000000
--- a/man2/outl_p.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/outb.2
diff --git a/man2/outsb.2 b/man2/outsb.2
deleted file mode 100644
index 2c63c7549..000000000
--- a/man2/outsb.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/outb.2
diff --git a/man2/outsl.2 b/man2/outsl.2
deleted file mode 100644
index 2c63c7549..000000000
--- a/man2/outsl.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/outb.2
diff --git a/man2/outsw.2 b/man2/outsw.2
deleted file mode 100644
index 2c63c7549..000000000
--- a/man2/outsw.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/outb.2
diff --git a/man2/outw.2 b/man2/outw.2
deleted file mode 100644
index 2c63c7549..000000000
--- a/man2/outw.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/outb.2
diff --git a/man2/outw_p.2 b/man2/outw_p.2
deleted file mode 100644
index 2c63c7549..000000000
--- a/man2/outw_p.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/outb.2
diff --git a/man2/pause.2 b/man2/pause.2
deleted file mode 100644
index 7cc7b0b8d..000000000
--- a/man2/pause.2
+++ /dev/null
@@ -1,50 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt (michael@moria.de)
-.\" Modified Sat Jul 24 14:48:00 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 1995 by Mike Battersby (mib@deakin.edu.au)
-.\" Modified 2000 by aeb, following Michael Kerrisk
-.\"
-.TH pause 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pause \- wait for signal
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.B int pause(void);
-.fi
-.SH DESCRIPTION
-.BR pause ()
-causes the calling process (or thread) to sleep
-until a signal is delivered that either terminates the process or causes
-the invocation of a signal-catching function.
-.SH RETURN VALUE
-.BR pause ()
-returns only when a signal was caught and the
-signal-catching function returned.
-In this case,
-.BR pause ()
-returns \-1, and
-.I errno
-is set to
-.\" .BR ERESTARTNOHAND .
-.BR EINTR .
-.SH ERRORS
-.TP
-.B EINTR
-a signal was caught and the signal-catching function returned.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR kill (2),
-.BR select (2),
-.BR signal (2),
-.BR sigsuspend (2)
diff --git a/man2/pciconfig_iobase.2 b/man2/pciconfig_iobase.2
deleted file mode 100644
index 5ab299588..000000000
--- a/man2/pciconfig_iobase.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/pciconfig_read.2
diff --git a/man2/pciconfig_read.2 b/man2/pciconfig_read.2
deleted file mode 100644
index 1f5d512a3..000000000
--- a/man2/pciconfig_read.2
+++ /dev/null
@@ -1,122 +0,0 @@
-.\" Contributed by Niki A. Rahimi, LTC Security Development
-.\" narahimi@us.ibm.com
-.\"
-.\" %%%LICENSE_START(FREELY_REDISTRIBUTABLE)
-.\" May be freely distributed and modified.
-.\" %%%LICENSE_END
-.\"
-.TH pciconfig_read 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pciconfig_read, pciconfig_write, pciconfig_iobase \-
-pci device information handling
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <pci.h>
-.PP
-.BI "int pciconfig_read(unsigned long " bus ", unsigned long " dfn ,
-.BI " unsigned long " off ", unsigned long " len ,
-.BI " unsigned char *" buf );
-.BI "int pciconfig_write(unsigned long " bus ", unsigned long " dfn ,
-.BI " unsigned long " off ", unsigned long " len ,
-.BI " unsigned char *" buf );
-.BI "int pciconfig_iobase(int " which ", unsigned long " bus ,
-.BI " unsigned long " devfn );
-.fi
-.SH DESCRIPTION
-Most of the interaction with PCI devices is already handled by the
-kernel PCI layer,
-and thus these calls should not normally need to be accessed from user space.
-.TP
-.BR pciconfig_read ()
-Reads to
-.I buf
-from device
-.I dev
-at offset
-.I off
-value.
-.TP
-.BR pciconfig_write ()
-Writes from
-.I buf
-to device
-.I dev
-at offset
-.I off
-value.
-.TP
-.BR pciconfig_iobase ()
-You pass it a bus/devfn pair and get a physical address for either the
-memory offset (for things like prep, this is 0xc0000000),
-the IO base for PIO cycles, or the ISA holes if any.
-.SH RETURN VALUE
-.TP
-.BR pciconfig_read ()
-On success, zero is returned.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.TP
-.BR pciconfig_write ()
-On success, zero is returned.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.TP
-.BR pciconfig_iobase ()
-Returns information on locations of various I/O
-regions in physical memory according to the
-.I which
-value.
-Values for
-.I which
-are:
-.BR IOBASE_BRIDGE_NUMBER ,
-.BR IOBASE_MEMORY ,
-.BR IOBASE_IO ,
-.BR IOBASE_ISA_IO ,
-.BR IOBASE_ISA_MEM .
-.SH ERRORS
-.TP
-.B EINVAL
-.I len
-value is invalid.
-This does not apply to
-.BR pciconfig_iobase ().
-.TP
-.B EIO
-I/O error.
-.TP
-.B ENODEV
-For
-.BR pciconfig_iobase (),
-"hose" value is NULL.
-For the other calls, could not find a slot.
-.TP
-.B ENOSYS
-The system has not implemented these calls
-.RB ( CONFIG_PCI
-not defined).
-.TP
-.B EOPNOTSUPP
-This return value is valid only for
-.BR pciconfig_iobase ().
-It is returned if the value for
-.I which
-is invalid.
-.TP
-.B EPERM
-User does not have the
-.B CAP_SYS_ADMIN
-capability.
-This does not apply to
-.BR pciconfig_iobase ().
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.0.26/2.1.11.
-.SH SEE ALSO
-.BR capabilities (7)
diff --git a/man2/pciconfig_write.2 b/man2/pciconfig_write.2
deleted file mode 100644
index 5ab299588..000000000
--- a/man2/pciconfig_write.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/pciconfig_read.2
diff --git a/man2/perf_event_open.2 b/man2/perf_event_open.2
deleted file mode 100644
index aa23a4977..000000000
--- a/man2/perf_event_open.2
+++ /dev/null
@@ -1,3989 +0,0 @@
-.\" Copyright (c) 2012, Vincent Weaver
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" This document is based on the perf_event.h header file, the
-.\" tools/perf/design.txt file, and a lot of bitter experience.
-.\"
-.TH perf_event_open 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-perf_event_open \- set up performance monitoring
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/perf_event.h>" " /* Definition of " PERF_* " constants */"
-.BR "#include <linux/hw_breakpoint.h>" " /* Definition of " HW_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_perf_event_open, struct perf_event_attr *" attr ,
-.BI " pid_t " pid ", int " cpu ", int " group_fd \
-", unsigned long " flags );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR perf_event_open (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-Given a list of parameters,
-.BR perf_event_open ()
-returns a file descriptor, for use in subsequent system calls
-.RB ( read "(2), " mmap "(2), " prctl "(2), " fcntl "(2), etc.)."
-.PP
-A call to
-.BR perf_event_open ()
-creates a file descriptor that allows measuring performance
-information.
-Each file descriptor corresponds to one
-event that is measured; these can be grouped together
-to measure multiple events simultaneously.
-.PP
-Events can be enabled and disabled in two ways: via
-.BR ioctl (2)
-and via
-.BR prctl (2).
-When an event is disabled it does not count or generate overflows but does
-continue to exist and maintain its count value.
-.PP
-Events come in two flavors: counting and sampled.
-A
-.I counting
-event is one that is used for counting the aggregate number of events
-that occur.
-In general, counting event results are gathered with a
-.BR read (2)
-call.
-A
-.I sampling
-event periodically writes measurements to a buffer that can then
-be accessed via
-.BR mmap (2).
-.SS Arguments
-The
-.I pid
-and
-.I cpu
-arguments allow specifying which process and CPU to monitor:
-.TP
-.BR "pid == 0" " and " "cpu == \-1"
-This measures the calling process/thread on any CPU.
-.TP
-.BR "pid == 0" " and " "cpu >= 0"
-This measures the calling process/thread only
-when running on the specified CPU.
-.TP
-.BR "pid > 0" " and " "cpu == \-1"
-This measures the specified process/thread on any CPU.
-.TP
-.BR "pid > 0" " and " "cpu >= 0"
-This measures the specified process/thread only
-when running on the specified CPU.
-.TP
-.BR "pid == \-1" " and " "cpu >= 0"
-This measures all processes/threads on the specified CPU.
-This requires
-.B CAP_PERFMON
-(since Linux 5.8) or
-.B CAP_SYS_ADMIN
-capability or a
-.I /proc/sys/kernel/perf_event_paranoid
-value of less than 1.
-.TP
-.BR "pid == \-1" " and " "cpu == \-1"
-This setting is invalid and will return an error.
-.PP
-When
-.I pid
-is greater than zero, permission to perform this system call
-is governed by
-.B CAP_PERFMON
-(since Linux 5.9) and a ptrace access mode
-.B PTRACE_MODE_READ_REALCREDS
-check on older Linux versions; see
-.BR ptrace (2).
-.PP
-The
-.I group_fd
-argument allows event groups to be created.
-An event group has one event which is the group leader.
-The leader is created first, with
-.IR group_fd " = \-1."
-The rest of the group members are created with subsequent
-.BR perf_event_open ()
-calls with
-.I group_fd
-being set to the file descriptor of the group leader.
-(A single event on its own is created with
-.IR group_fd " = \-1"
-and is considered to be a group with only 1 member.)
-An event group is scheduled onto the CPU as a unit:
-it will be put onto the CPU
-only if all of the events in the group can be put onto the CPU.
-This means that the values of the member events can be meaningfully compared
-\[em]added, divided (to get ratios), and so on\[em]
-with each other,
-since they have counted events for the same set of executed instructions.
-.PP
-The
-.I flags
-argument is formed by ORing together zero or more of the following values:
-.TP
-.BR PERF_FLAG_FD_CLOEXEC " (since Linux 3.14)"
-.\" commit a21b0b354d4ac39be691f51c53562e2c24443d9e
-This flag enables the close-on-exec flag for the created
-event file descriptor,
-so that the file descriptor is automatically closed on
-.BR execve (2).
-Setting the close-on-exec flags at creation time, rather than later with
-.BR fcntl (2),
-avoids potential race conditions where the calling thread invokes
-.BR perf_event_open ()
-and
-.BR fcntl (2)
-at the same time as another thread calls
-.BR fork (2)
-then
-.BR execve (2).
-.TP
-.B PERF_FLAG_FD_NO_GROUP
-This flag tells the event to ignore the
-.I group_fd
-parameter except for the purpose of setting up output redirection
-using the
-.B PERF_FLAG_FD_OUTPUT
-flag.
-.TP
-.BR PERF_FLAG_FD_OUTPUT " (broken since Linux 2.6.35)"
-.\" commit ac9721f3f54b27a16c7e1afb2481e7ee95a70318
-This flag re-routes the event's sampled output to instead
-be included in the mmap buffer of the event specified by
-.IR group_fd .
-.TP
-.BR PERF_FLAG_PID_CGROUP " (since Linux 2.6.39)"
-.\" commit e5d1367f17ba6a6fed5fd8b74e4d5720923e0c25
-This flag activates per-container system-wide monitoring.
-A container
-is an abstraction that isolates a set of resources for finer-grained
-control (CPUs, memory, etc.).
-In this mode, the event is measured
-only if the thread running on the monitored CPU belongs to the designated
-container (cgroup).
-The cgroup is identified by passing a file descriptor
-opened on its directory in the cgroupfs filesystem.
-For instance, if the
-cgroup to monitor is called
-.IR test ,
-then a file descriptor opened on
-.I /dev/cgroup/test
-(assuming cgroupfs is mounted on
-.IR /dev/cgroup )
-must be passed as the
-.I pid
-parameter.
-cgroup monitoring is available only
-for system-wide events and may therefore require extra permissions.
-.PP
-The
-.I perf_event_attr
-structure provides detailed configuration information
-for the event being created.
-.PP
-.in +4n
-.EX
-struct perf_event_attr {
- __u32 type; /* Type of event */
- __u32 size; /* Size of attribute structure */
- __u64 config; /* Type\-specific configuration */
-\&
- union {
- __u64 sample_period; /* Period of sampling */
- __u64 sample_freq; /* Frequency of sampling */
- };
-\&
- __u64 sample_type; /* Specifies values included in sample */
- __u64 read_format; /* Specifies values returned in read */
-\&
- __u64 disabled : 1, /* off by default */
- inherit : 1, /* children inherit it */
- pinned : 1, /* must always be on PMU */
- exclusive : 1, /* only group on PMU */
- exclude_user : 1, /* don\[aq]t count user */
- exclude_kernel : 1, /* don\[aq]t count kernel */
- exclude_hv : 1, /* don\[aq]t count hypervisor */
- exclude_idle : 1, /* don\[aq]t count when idle */
- mmap : 1, /* include mmap data */
- comm : 1, /* include comm data */
- freq : 1, /* use freq, not period */
- inherit_stat : 1, /* per task counts */
- enable_on_exec : 1, /* next exec enables */
- task : 1, /* trace fork/exit */
- watermark : 1, /* wakeup_watermark */
- precise_ip : 2, /* skid constraint */
- mmap_data : 1, /* non\-exec mmap data */
- sample_id_all : 1, /* sample_type all events */
- exclude_host : 1, /* don\[aq]t count in host */
- exclude_guest : 1, /* don\[aq]t count in guest */
- exclude_callchain_kernel : 1,
- /* exclude kernel callchains */
- exclude_callchain_user : 1,
- /* exclude user callchains */
- mmap2 : 1, /* include mmap with inode data */
- comm_exec : 1, /* flag comm events that are
- due to exec */
- use_clockid : 1, /* use clockid for time fields */
- context_switch : 1, /* context switch data */
- write_backward : 1, /* Write ring buffer from end
- to beginning */
- namespaces : 1, /* include namespaces data */
- ksymbol : 1, /* include ksymbol events */
- bpf_event : 1, /* include bpf events */
- aux_output : 1, /* generate AUX records
- instead of events */
- cgroup : 1, /* include cgroup events */
- text_poke : 1, /* include text poke events */
- build_id : 1, /* use build id in mmap2 events */
- inherit_thread : 1, /* children only inherit */
- /* if cloned with CLONE_THREAD */
- remove_on_exec : 1, /* event is removed from task
- on exec */
- sigtrap : 1, /* send synchronous SIGTRAP
- on event */
-\&
- __reserved_1 : 26;
-\&
- union {
- __u32 wakeup_events; /* wakeup every n events */
- __u32 wakeup_watermark; /* bytes before wakeup */
- };
-\&
- __u32 bp_type; /* breakpoint type */
-\&
- union {
- __u64 bp_addr; /* breakpoint address */
- __u64 kprobe_func; /* for perf_kprobe */
- __u64 uprobe_path; /* for perf_uprobe */
- __u64 config1; /* extension of config */
- };
-\&
- union {
- __u64 bp_len; /* breakpoint length */
- __u64 kprobe_addr; /* with kprobe_func == NULL */
- __u64 probe_offset; /* for perf_[k,u]probe */
- __u64 config2; /* extension of config1 */
- };
- __u64 branch_sample_type; /* enum perf_branch_sample_type */
- __u64 sample_regs_user; /* user regs to dump on samples */
- __u32 sample_stack_user; /* size of stack to dump on
- samples */
- __s32 clockid; /* clock to use for time fields */
- __u64 sample_regs_intr; /* regs to dump on samples */
- __u32 aux_watermark; /* aux bytes before wakeup */
- __u16 sample_max_stack; /* max frames in callchain */
- __u16 __reserved_2; /* align to u64 */
- __u32 aux_sample_size; /* max aux sample size */
- __u32 __reserved_3; /* align to u64 */
- __u64 sig_data; /* user data for sigtrap */
-\&
-};
-.EE
-.in
-.PP
-The fields of the
-.I perf_event_attr
-structure are described in more detail below:
-.TP
-.I type
-This field specifies the overall event type.
-It has one of the following values:
-.RS
-.TP
-.B PERF_TYPE_HARDWARE
-This indicates one of the "generalized" hardware events provided
-by the kernel.
-See the
-.I config
-field definition for more details.
-.TP
-.B PERF_TYPE_SOFTWARE
-This indicates one of the software-defined events provided by the kernel
-(even if no hardware support is available).
-.TP
-.B PERF_TYPE_TRACEPOINT
-This indicates a tracepoint
-provided by the kernel tracepoint infrastructure.
-.TP
-.B PERF_TYPE_HW_CACHE
-This indicates a hardware cache event.
-This has a special encoding, described in the
-.I config
-field definition.
-.TP
-.B PERF_TYPE_RAW
-This indicates a "raw" implementation-specific event in the
-.IR config " field."
-.TP
-.BR PERF_TYPE_BREAKPOINT " (since Linux 2.6.33)"
-.\" commit 24f1e32c60c45c89a997c73395b69c8af6f0a84e
-This indicates a hardware breakpoint as provided by the CPU.
-Breakpoints can be read/write accesses to an address as well as
-execution of an instruction address.
-.TP
-dynamic PMU
-Since Linux 2.6.38,
-.\" commit 2e80a82a49c4c7eca4e35734380f28298ba5db19
-.BR perf_event_open ()
-can support multiple PMUs.
-To enable this, a value exported by the kernel can be used in the
-.I type
-field to indicate which PMU to use.
-The value to use can be found in the sysfs filesystem:
-there is a subdirectory per PMU instance under
-.IR /sys/bus/event_source/devices .
-In each subdirectory there is a
-.I type
-file whose content is an integer that can be used in the
-.I type
-field.
-For instance,
-.I /sys/bus/event_source/devices/cpu/type
-contains the value for the core CPU PMU, which is usually 4.
-.TP
-.BR kprobe " and " uprobe " (since Linux 4.17)"
-.\" commit 65074d43fc77bcae32776724b7fa2696923c78e4
-.\" commit e12f03d7031a977356e3d7b75a68c2185ff8d155
-.\" commit 33ea4b24277b06dbc55d7f5772a46f029600255e
-These two dynamic PMUs create a kprobe/uprobe and attach it to the
-file descriptor generated by perf_event_open.
-The kprobe/uprobe will be destroyed on the destruction of the file descriptor.
-See fields
-.IR kprobe_func ,
-.IR uprobe_path ,
-.IR kprobe_addr ,
-and
-.I probe_offset
-for more details.
-.RE
-.TP
-.I "size"
-The size of the
-.I perf_event_attr
-structure for forward/backward compatibility.
-Set this using
-.I sizeof(struct perf_event_attr)
-to allow the kernel to see
-the struct size at the time of compilation.
-.IP
-The related define
-.B PERF_ATTR_SIZE_VER0
-is set to 64; this was the size of the first published struct.
-.B PERF_ATTR_SIZE_VER1
-is 72, corresponding to the addition of breakpoints in Linux 2.6.33.
-.\" commit cb5d76999029ae7a517cb07dfa732c1b5a934fc2
-.\" this was added much later when PERF_ATTR_SIZE_VER2 happened
-.\" but the actual attr_size had increased in Linux 2.6.33
-.B PERF_ATTR_SIZE_VER2
-is 80 corresponding to the addition of branch sampling in Linux 3.4.
-.\" commit cb5d76999029ae7a517cb07dfa732c1b5a934fc2
-.B PERF_ATTR_SIZE_VER3
-is 96 corresponding to the addition
-of
-.I sample_regs_user
-and
-.I sample_stack_user
-in Linux 3.7.
-.\" commit 1659d129ed014b715b0b2120e6fd929bdd33ed03
-.B PERF_ATTR_SIZE_VER4
-is 104 corresponding to the addition of
-.I sample_regs_intr
-in Linux 3.19.
-.\" commit 60e2364e60e86e81bc6377f49779779e6120977f
-.B PERF_ATTR_SIZE_VER5
-is 112 corresponding to the addition of
-.I aux_watermark
-in Linux 4.1.
-.\" commit 1a5941312414c71dece6717da9a0fa1303127afa
-.TP
-.I "config"
-This specifies which event you want, in conjunction with
-the
-.I type
-field.
-The
-.I config1
-and
-.I config2
-fields are also taken into account in cases where 64 bits is not
-enough to fully specify the event.
-The encoding of these fields are event dependent.
-.IP
-There are various ways to set the
-.I config
-field that are dependent on the value of the previously
-described
-.I type
-field.
-What follows are various possible settings for
-.I config
-separated out by
-.IR type .
-.IP
-If
-.I type
-is
-.BR PERF_TYPE_HARDWARE ,
-we are measuring one of the generalized hardware CPU events.
-Not all of these are available on all platforms.
-Set
-.I config
-to one of the following:
-.RS 12
-.TP
-.B PERF_COUNT_HW_CPU_CYCLES
-Total cycles.
-Be wary of what happens during CPU frequency scaling.
-.TP
-.B PERF_COUNT_HW_INSTRUCTIONS
-Retired instructions.
-Be careful, these can be affected by various
-issues, most notably hardware interrupt counts.
-.TP
-.B PERF_COUNT_HW_CACHE_REFERENCES
-Cache accesses.
-Usually this indicates Last Level Cache accesses but this may
-vary depending on your CPU.
-This may include prefetches and coherency messages; again this
-depends on the design of your CPU.
-.TP
-.B PERF_COUNT_HW_CACHE_MISSES
-Cache misses.
-Usually this indicates Last Level Cache misses; this is intended to be
-used in conjunction with the
-.B PERF_COUNT_HW_CACHE_REFERENCES
-event to calculate cache miss rates.
-.TP
-.B PERF_COUNT_HW_BRANCH_INSTRUCTIONS
-Retired branch instructions.
-Prior to Linux 2.6.35, this used
-the wrong event on AMD processors.
-.\" commit f287d332ce835f77a4f5077d2c0ef1e3f9ea42d2
-.TP
-.B PERF_COUNT_HW_BRANCH_MISSES
-Mispredicted branch instructions.
-.TP
-.B PERF_COUNT_HW_BUS_CYCLES
-Bus cycles, which can be different from total cycles.
-.TP
-.BR PERF_COUNT_HW_STALLED_CYCLES_FRONTEND " (since Linux 3.0)"
-.\" commit 8f62242246351b5a4bc0c1f00c0c7003edea128a
-Stalled cycles during issue.
-.TP
-.BR PERF_COUNT_HW_STALLED_CYCLES_BACKEND " (since Linux 3.0)"
-.\" commit 8f62242246351b5a4bc0c1f00c0c7003edea128a
-Stalled cycles during retirement.
-.TP
-.BR PERF_COUNT_HW_REF_CPU_CYCLES " (since Linux 3.3)"
-.\" commit c37e17497e01fc0f5d2d6feb5723b210b3ab8890
-Total cycles; not affected by CPU frequency scaling.
-.RE
-.IP
-If
-.I type
-is
-.BR PERF_TYPE_SOFTWARE ,
-we are measuring software events provided by the kernel.
-Set
-.I config
-to one of the following:
-.RS 12
-.TP
-.B PERF_COUNT_SW_CPU_CLOCK
-This reports the CPU clock, a high-resolution per-CPU timer.
-.TP
-.B PERF_COUNT_SW_TASK_CLOCK
-This reports a clock count specific to the task that is running.
-.TP
-.B PERF_COUNT_SW_PAGE_FAULTS
-This reports the number of page faults.
-.TP
-.B PERF_COUNT_SW_CONTEXT_SWITCHES
-This counts context switches.
-Until Linux 2.6.34, these were all reported as user-space
-events, after that they are reported as happening in the kernel.
-.\" commit e49a5bd38159dfb1928fd25b173bc9de4bbadb21
-.TP
-.B PERF_COUNT_SW_CPU_MIGRATIONS
-This reports the number of times the process
-has migrated to a new CPU.
-.TP
-.B PERF_COUNT_SW_PAGE_FAULTS_MIN
-This counts the number of minor page faults.
-These did not require disk I/O to handle.
-.TP
-.B PERF_COUNT_SW_PAGE_FAULTS_MAJ
-This counts the number of major page faults.
-These required disk I/O to handle.
-.TP
-.BR PERF_COUNT_SW_ALIGNMENT_FAULTS " (since Linux 2.6.33)"
-.\" commit f7d7986060b2890fc26db6ab5203efbd33aa2497
-This counts the number of alignment faults.
-These happen when unaligned memory accesses happen; the kernel
-can handle these but it reduces performance.
-This happens only on some architectures (never on x86).
-.TP
-.BR PERF_COUNT_SW_EMULATION_FAULTS " (since Linux 2.6.33)"
-.\" commit f7d7986060b2890fc26db6ab5203efbd33aa2497
-This counts the number of emulation faults.
-The kernel sometimes traps on unimplemented instructions
-and emulates them for user space.
-This can negatively impact performance.
-.TP
-.BR PERF_COUNT_SW_DUMMY " (since Linux 3.12)"
-.\" commit fa0097ee690693006ab1aea6c01ad3c851b65c77
-This is a placeholder event that counts nothing.
-Informational sample record types such as mmap or comm
-must be associated with an active event.
-This dummy event allows gathering such records without requiring
-a counting event.
-.TP
-.BR PERF_COUNT_SW_BPF_OUTPUT " (since Linux 4.4)"
-.\" commit a43eec304259a6c637f4014a6d4767159b6a3aa3
-This is used to generate raw sample data from BPF.
-BPF programs can write to this event using
-.B bpf_perf_event_output
-helper.
-.TP
-.BR PERF_COUNT_SW_CGROUP_SWITCHES " (since Linux 5.13)"
-.\" commit d0d1dd628527c77db2391ce0293c1ed344b2365f
-This counts context switches to a task in a different cgroup.
-In other words, if the next task is in the same cgroup,
-it won't count the switch.
-.RE
-.PP
-.RS
-If
-.I type
-is
-.BR PERF_TYPE_TRACEPOINT ,
-then we are measuring kernel tracepoints.
-The value to use in
-.I config
-can be obtained from under debugfs
-.I tracing/events/*/*/id
-if ftrace is enabled in the kernel.
-.RE
-.PP
-.RS
-If
-.I type
-is
-.BR PERF_TYPE_HW_CACHE ,
-then we are measuring a hardware CPU cache event.
-To calculate the appropriate
-.I config
-value, use the following equation:
-.RS 4
-.PP
-.in +4n
-.EX
-config = (perf_hw_cache_id) |
- (perf_hw_cache_op_id << 8) |
- (perf_hw_cache_op_result_id << 16);
-.EE
-.in
-.PP
-where
-.I perf_hw_cache_id
-is one of:
-.RS 4
-.TP
-.B PERF_COUNT_HW_CACHE_L1D
-for measuring Level 1 Data Cache
-.TP
-.B PERF_COUNT_HW_CACHE_L1I
-for measuring Level 1 Instruction Cache
-.TP
-.B PERF_COUNT_HW_CACHE_LL
-for measuring Last-Level Cache
-.TP
-.B PERF_COUNT_HW_CACHE_DTLB
-for measuring the Data TLB
-.TP
-.B PERF_COUNT_HW_CACHE_ITLB
-for measuring the Instruction TLB
-.TP
-.B PERF_COUNT_HW_CACHE_BPU
-for measuring the branch prediction unit
-.TP
-.BR PERF_COUNT_HW_CACHE_NODE " (since Linux 3.1)"
-.\" commit 89d6c0b5bdbb1927775584dcf532d98b3efe1477
-for measuring local memory accesses
-.RE
-.PP
-and
-.I perf_hw_cache_op_id
-is one of:
-.RS 4
-.TP
-.B PERF_COUNT_HW_CACHE_OP_READ
-for read accesses
-.TP
-.B PERF_COUNT_HW_CACHE_OP_WRITE
-for write accesses
-.TP
-.B PERF_COUNT_HW_CACHE_OP_PREFETCH
-for prefetch accesses
-.RE
-.PP
-and
-.I perf_hw_cache_op_result_id
-is one of:
-.RS 4
-.TP
-.B PERF_COUNT_HW_CACHE_RESULT_ACCESS
-to measure accesses
-.TP
-.B PERF_COUNT_HW_CACHE_RESULT_MISS
-to measure misses
-.RE
-.RE
-.PP
-If
-.I type
-is
-.BR PERF_TYPE_RAW ,
-then a custom "raw"
-.I config
-value is needed.
-Most CPUs support events that are not covered by the "generalized" events.
-These are implementation defined; see your CPU manual (for example
-the Intel Volume 3B documentation or the AMD BIOS and Kernel Developer
-Guide).
-The libpfm4 library can be used to translate from the name in the
-architectural manuals to the raw hex value
-.BR perf_event_open ()
-expects in this field.
-.PP
-If
-.I type
-is
-.BR PERF_TYPE_BREAKPOINT ,
-then leave
-.I config
-set to zero.
-Its parameters are set in other places.
-.PP
-If
-.I type
-is
-.B kprobe
-or
-.BR uprobe ,
-set
-.I retprobe
-(bit 0 of
-.IR config ,
-see
-.IR /sys/bus/event_source/devices/[k,u]probe/format/retprobe )
-for kretprobe/uretprobe.
-See fields
-.IR kprobe_func ,
-.IR uprobe_path ,
-.IR kprobe_addr ,
-and
-.I probe_offset
-for more details.
-.RE
-.TP
-.IR kprobe_func ", " uprobe_path ", " kprobe_addr ", and " probe_offset
-These fields describe the kprobe/uprobe for dynamic PMUs
-.B kprobe
-and
-.BR uprobe .
-For
-.BR kprobe :
-use
-.I kprobe_func
-and
-.IR probe_offset ,
-or use
-.I kprobe_addr
-and leave
-.I kprobe_func
-as NULL.
-For
-.BR uprobe :
-use
-.I uprobe_path
-and
-.IR probe_offset .
-.TP
-.IR sample_period ", " sample_freq
-A "sampling" event is one that generates an overflow notification
-every N events, where N is given by
-.IR sample_period .
-A sampling event has
-.IR sample_period " > 0."
-When an overflow occurs, requested data is recorded
-in the mmap buffer.
-The
-.I sample_type
-field controls what data is recorded on each overflow.
-.IP
-.I sample_freq
-can be used if you wish to use frequency rather than period.
-In this case, you set the
-.I freq
-flag.
-The kernel will adjust the sampling period
-to try and achieve the desired rate.
-The rate of adjustment is a
-timer tick.
-.TP
-.I sample_type
-The various bits in this field specify which values to include
-in the sample.
-They will be recorded in a ring-buffer,
-which is available to user space using
-.BR mmap (2).
-The order in which the values are saved in the
-sample are documented in the MMAP Layout subsection below;
-it is not the
-.I "enum perf_event_sample_format"
-order.
-.RS
-.TP
-.B PERF_SAMPLE_IP
-Records instruction pointer.
-.TP
-.B PERF_SAMPLE_TID
-Records the process and thread IDs.
-.TP
-.B PERF_SAMPLE_TIME
-Records a timestamp.
-.TP
-.B PERF_SAMPLE_ADDR
-Records an address, if applicable.
-.TP
-.B PERF_SAMPLE_READ
-Record counter values for all events in a group, not just the group leader.
-.TP
-.B PERF_SAMPLE_CALLCHAIN
-Records the callchain (stack backtrace).
-.TP
-.B PERF_SAMPLE_ID
-Records a unique ID for the opened event's group leader.
-.TP
-.B PERF_SAMPLE_CPU
-Records CPU number.
-.TP
-.B PERF_SAMPLE_PERIOD
-Records the current sampling period.
-.TP
-.B PERF_SAMPLE_STREAM_ID
-Records a unique ID for the opened event.
-Unlike
-.B PERF_SAMPLE_ID
-the actual ID is returned, not the group leader.
-This ID is the same as the one returned by
-.BR PERF_FORMAT_ID .
-.TP
-.B PERF_SAMPLE_RAW
-Records additional data, if applicable.
-Usually returned by tracepoint events.
-.TP
-.BR PERF_SAMPLE_BRANCH_STACK " (since Linux 3.4)"
-.\" commit bce38cd53e5ddba9cb6d708c4ef3d04a4016ec7e
-This provides a record of recent branches, as provided
-by CPU branch sampling hardware (such as Intel Last Branch Record).
-Not all hardware supports this feature.
-.IP
-See the
-.I branch_sample_type
-field for how to filter which branches are reported.
-.TP
-.BR PERF_SAMPLE_REGS_USER " (since Linux 3.7)"
-.\" commit 4018994f3d8785275ef0e7391b75c3462c029e56
-Records the current user-level CPU register state
-(the values in the process before the kernel was called).
-.TP
-.BR PERF_SAMPLE_STACK_USER " (since Linux 3.7)"
-.\" commit c5ebcedb566ef17bda7b02686e0d658a7bb42ee7
-Records the user level stack, allowing stack unwinding.
-.TP
-.BR PERF_SAMPLE_WEIGHT " (since Linux 3.10)"
-.\" commit c3feedf2aaf9ac8bad6f19f5d21e4ee0b4b87e9c
-Records a hardware provided weight value that expresses how
-costly the sampled event was.
-This allows the hardware to highlight expensive events in
-a profile.
-.TP
-.BR PERF_SAMPLE_DATA_SRC " (since Linux 3.10)"
-.\" commit d6be9ad6c960f43800a6f118932bc8a5a4eadcd1
-Records the data source: where in the memory hierarchy
-the data associated with the sampled instruction came from.
-This is available only if the underlying hardware
-supports this feature.
-.TP
-.BR PERF_SAMPLE_IDENTIFIER " (since Linux 3.12)"
-.\" commit ff3d527cebc1fa3707c617bfe9e74f53fcfb0955
-Places the
-.B SAMPLE_ID
-value in a fixed position in the record,
-either at the beginning (for sample events) or at the end
-(if a non-sample event).
-.IP
-This was necessary because a sample stream may have
-records from various different event sources with different
-.I sample_type
-settings.
-Parsing the event stream properly was not possible because the
-format of the record was needed to find
-.BR SAMPLE_ID ,
-but
-the format could not be found without knowing what
-event the sample belonged to (causing a circular
-dependency).
-.IP
-The
-.B PERF_SAMPLE_IDENTIFIER
-setting makes the event stream always parsable
-by putting
-.B SAMPLE_ID
-in a fixed location, even though
-it means having duplicate
-.B SAMPLE_ID
-values in records.
-.TP
-.BR PERF_SAMPLE_TRANSACTION " (since Linux 3.13)"
-.\" commit fdfbbd07e91f8fe387140776f3fd94605f0c89e5
-Records reasons for transactional memory abort events
-(for example, from Intel TSX transactional memory support).
-.IP
-The
-.I precise_ip
-setting must be greater than 0 and a transactional memory abort
-event must be measured or no values will be recorded.
-Also note that some perf_event measurements, such as sampled
-cycle counting, may cause extraneous aborts (by causing an
-interrupt during a transaction).
-.TP
-.BR PERF_SAMPLE_REGS_INTR " (since Linux 3.19)"
-.\" commit 60e2364e60e86e81bc6377f49779779e6120977f
-Records a subset of the current CPU register state
-as specified by
-.IR sample_regs_intr .
-Unlike
-.B PERF_SAMPLE_REGS_USER
-the register values will return kernel register
-state if the overflow happened while kernel
-code is running.
-If the CPU supports hardware sampling of
-register state (i.e., PEBS on Intel x86) and
-.I precise_ip
-is set higher than zero then the register
-values returned are those captured by
-hardware at the time of the sampled
-instruction's retirement.
-.TP
-.BR PERF_SAMPLE_PHYS_ADDR " (since Linux 4.13)"
-.\" commit fc7ce9c74c3ad232b084d80148654f926d01ece7
-Records physical address of data like in
-.BR PERF_SAMPLE_ADDR .
-.TP
-.BR PERF_SAMPLE_CGROUP " (since Linux 5.7)"
-.\" commit 96aaab686505c449e24d76e76507290dcc30e008
-Records (perf_event) cgroup ID of the process.
-This corresponds to the
-.I id
-field in the
-.B PERF_RECORD_CGROUP
-event.
-.TP
-.BR PERF_SAMPLE_DATA_PAGE_SIZE " (since Linux 5.11)"
-.\" commit 8d97e71811aaafe4abf611dc24822fd6e73df1a1
-Records page size of data like in
-.BR PERF_SAMPLE_ADDR .
-.TP
-.BR PERF_SAMPLE_CODE_PAGE_SIZE " (since Linux 5.11)"
-.\" commit 995f088efebe1eba0282a6ffa12411b37f8990c2
-Records page size of ip like in
-.BR PERF_SAMPLE_IP .
-.TP
-.BR PERF_SAMPLE_WEIGHT_STRUCT " (since Linux 5.12)"
-.\" commit 2a6c6b7d7ad346f0679d0963cb19b3f0ea7ef32c
-Records hardware provided weight values like in
-.BR PERF_SAMPLE_WEIGHT ,
-but it can represent multiple values in a struct.
-This shares the same space as
-.BR PERF_SAMPLE_WEIGHT ,
-so users can apply either of those,
-not both.
-It has the following format and
-the meaning of each field is
-dependent on the hardware implementation.
-.PP
-.in +4n
-.EX
-union perf_sample_weight {
- u64 full; /* PERF_SAMPLE_WEIGHT */
- struct { /* PERF_SAMPLE_WEIGHT_STRUCT */
- u32 var1_dw;
- u16 var2_w;
- u16 var3_w;
- };
-};
-.EE
-.in
-.RE
-.TP
-.I read_format
-This field specifies the format of the data returned by
-.BR read (2)
-on a
-.BR perf_event_open ()
-file descriptor.
-.RS
-.TP
-.B PERF_FORMAT_TOTAL_TIME_ENABLED
-Adds the 64-bit
-.I time_enabled
-field.
-This can be used to calculate estimated totals if
-the PMU is overcommitted and multiplexing is happening.
-.TP
-.B PERF_FORMAT_TOTAL_TIME_RUNNING
-Adds the 64-bit
-.I time_running
-field.
-This can be used to calculate estimated totals if
-the PMU is overcommitted and multiplexing is happening.
-.TP
-.B PERF_FORMAT_ID
-Adds a 64-bit unique value that corresponds to the event group.
-.TP
-.B PERF_FORMAT_GROUP
-Allows all counter values in an event group to be read with one read.
-.TP
-.B PERF_FORMAT_LOST " (since Linux 6.0)"
-.\" commit 119a784c81270eb88e573174ed2209225d646656
-Adds a 64-bit value that is the number of lost samples for this event.
-This would be only meaningful when
-.I sample_period
-or
-.I sample_freq
-is set.
-.RE
-.TP
-.I disabled
-The
-.I disabled
-bit specifies whether the counter starts out disabled or enabled.
-If disabled, the event can later be enabled by
-.BR ioctl (2),
-.BR prctl (2),
-or
-.IR enable_on_exec .
-.IP
-When creating an event group, typically the group leader is initialized
-with
-.I disabled
-set to 1 and any child events are initialized with
-.I disabled
-set to 0.
-Despite
-.I disabled
-being 0, the child events will not start until the group leader
-is enabled.
-.TP
-.I inherit
-The
-.I inherit
-bit specifies that this counter should count events of child
-tasks as well as the task specified.
-This applies only to new children, not to any existing children at
-the time the counter is created (nor to any new children of
-existing children).
-.IP
-Inherit does not work for some combinations of
-.I read_format
-values, such as
-.BR PERF_FORMAT_GROUP .
-.TP
-.I pinned
-The
-.I pinned
-bit specifies that the counter should always be on the CPU if at all
-possible.
-It applies only to hardware counters and only to group leaders.
-If a pinned counter cannot be put onto the CPU (e.g., because there are
-not enough hardware counters or because of a conflict with some other
-event), then the counter goes into an 'error' state, where reads
-return end-of-file (i.e.,
-.BR read (2)
-returns 0) until the counter is subsequently enabled or disabled.
-.TP
-.I exclusive
-The
-.I exclusive
-bit specifies that when this counter's group is on the CPU,
-it should be the only group using the CPU's counters.
-In the future this may allow monitoring programs to
-support PMU features that need to run alone so that they do not
-disrupt other hardware counters.
-.IP
-Note that many unexpected situations may prevent events with the
-.I exclusive
-bit set from ever running.
-This includes any users running a system-wide
-measurement as well as any kernel use of the performance counters
-(including the commonly enabled NMI Watchdog Timer interface).
-.TP
-.I exclude_user
-If this bit is set, the count excludes events that happen in user space.
-.TP
-.I exclude_kernel
-If this bit is set, the count excludes events that happen in kernel space.
-.TP
-.I exclude_hv
-If this bit is set, the count excludes events that happen in the
-hypervisor.
-This is mainly for PMUs that have built-in support for handling this
-(such as POWER).
-Extra support is needed for handling hypervisor measurements on most
-machines.
-.TP
-.I exclude_idle
-If set, don't count when the CPU is running the idle task.
-While you can currently enable this for any event type, it is ignored
-for all but software events.
-.TP
-.I mmap
-The
-.I mmap
-bit enables generation of
-.B PERF_RECORD_MMAP
-samples for every
-.BR mmap (2)
-call that has
-.B PROT_EXEC
-set.
-This allows tools to notice new executable code being mapped into
-a program (dynamic shared libraries for example)
-so that addresses can be mapped back to the original code.
-.TP
-.I comm
-The
-.I comm
-bit enables tracking of process command name as modified by the
-.BR execve (2)
-and
-.BR prctl (PR_SET_NAME)
-system calls as well as writing to
-.IR /proc/self/comm .
-If the
-.I comm_exec
-flag is also successfully set (possible since Linux 3.16),
-.\" commit 82b897782d10fcc4930c9d4a15b175348fdd2871
-then the misc flag
-.B PERF_RECORD_MISC_COMM_EXEC
-can be used to differentiate the
-.BR execve (2)
-case from the others.
-.TP
-.I freq
-If this bit is set, then
-.I sample_frequency
-not
-.I sample_period
-is used when setting up the sampling interval.
-.TP
-.I inherit_stat
-This bit enables saving of event counts on context switch for
-inherited tasks.
-This is meaningful only if the
-.I inherit
-field is set.
-.TP
-.I enable_on_exec
-If this bit is set, a counter is automatically
-enabled after a call to
-.BR execve (2).
-.TP
-.I task
-If this bit is set, then
-fork/exit notifications are included in the ring buffer.
-.TP
-.I watermark
-If set, have an overflow notification happen when we cross the
-.I wakeup_watermark
-boundary.
-Otherwise, overflow notifications happen after
-.I wakeup_events
-samples.
-.TP
-.IR precise_ip " (since Linux 2.6.35)"
-.\" commit ab608344bcbde4f55ec4cd911b686b0ce3eae076
-This controls the amount of skid.
-Skid is how many instructions
-execute between an event of interest happening and the kernel
-being able to stop and record the event.
-Smaller skid is
-better and allows more accurate reporting of which events
-correspond to which instructions, but hardware is often limited
-with how small this can be.
-.IP
-The possible values of this field are the following:
-.RS
-.TP
-.B 0
-.B SAMPLE_IP
-can have arbitrary skid.
-.TP
-.B 1
-.B SAMPLE_IP
-must have constant skid.
-.TP
-.B 2
-.B SAMPLE_IP
-requested to have 0 skid.
-.TP
-.B 3
-.B SAMPLE_IP
-must have 0 skid.
-See also the description of
-.BR PERF_RECORD_MISC_EXACT_IP .
-.RE
-.TP
-.IR mmap_data " (since Linux 2.6.36)"
-.\" commit 3af9e859281bda7eb7c20b51879cf43aa788ac2e
-This is the counterpart of the
-.I mmap
-field.
-This enables generation of
-.B PERF_RECORD_MMAP
-samples for
-.BR mmap (2)
-calls that do not have
-.B PROT_EXEC
-set (for example data and SysV shared memory).
-.TP
-.IR sample_id_all " (since Linux 2.6.38)"
-.\" commit c980d1091810df13f21aabbce545fd98f545bbf7
-If set, then TID, TIME, ID, STREAM_ID, and CPU can
-additionally be included in
-.RB non- PERF_RECORD_SAMPLE s
-if the corresponding
-.I sample_type
-is selected.
-.IP
-If
-.B PERF_SAMPLE_IDENTIFIER
-is specified, then an additional ID value is included
-as the last value to ease parsing the record stream.
-This may lead to the
-.I id
-value appearing twice.
-.IP
-The layout is described by this pseudo-structure:
-.IP
-.in +4n
-.EX
-struct sample_id {
- { u32 pid, tid; } /* if PERF_SAMPLE_TID set */
- { u64 time; } /* if PERF_SAMPLE_TIME set */
- { u64 id; } /* if PERF_SAMPLE_ID set */
- { u64 stream_id;} /* if PERF_SAMPLE_STREAM_ID set */
- { u32 cpu, res; } /* if PERF_SAMPLE_CPU set */
- { u64 id; } /* if PERF_SAMPLE_IDENTIFIER set */
-};
-.EE
-.in
-.TP
-.IR exclude_host " (since Linux 3.2)"
-.\" commit a240f76165e6255384d4bdb8139895fac7988799
-When conducting measurements that include processes running
-VM instances (i.e., have executed a
-.B KVM_RUN
-.BR ioctl (2)),
-only measure events happening inside a guest instance.
-This is only meaningful outside the guests; this setting does
-not change counts gathered inside of a guest.
-Currently, this functionality is x86 only.
-.TP
-.IR exclude_guest " (since Linux 3.2)"
-.\" commit a240f76165e6255384d4bdb8139895fac7988799
-When conducting measurements that include processes running
-VM instances (i.e., have executed a
-.B KVM_RUN
-.BR ioctl (2)),
-do not measure events happening inside guest instances.
-This is only meaningful outside the guests; this setting does
-not change counts gathered inside of a guest.
-Currently, this functionality is x86 only.
-.TP
-.IR exclude_callchain_kernel " (since Linux 3.7)"
-.\" commit d077526485d5c9b12fe85d0b2b3b7041e6bc5f91
-Do not include kernel callchains.
-.TP
-.IR exclude_callchain_user " (since Linux 3.7)"
-.\" commit d077526485d5c9b12fe85d0b2b3b7041e6bc5f91
-Do not include user callchains.
-.TP
-.IR mmap2 " (since Linux 3.16)"
-.\" commit 13d7a2410fa637f450a29ecb515ac318ee40c741
-.\" This is tricky; was committed during 3.12 development
-.\" but right before release was disabled.
-.\" So while you could select mmap2 starting with Linux 3.12
-.\" it did not work until Linux 3.16
-.\" commit a5a5ba72843dd05f991184d6cb9a4471acce1005
-Generate an extended executable mmap record that contains enough
-additional information to uniquely identify shared mappings.
-The
-.I mmap
-flag must also be set for this to work.
-.TP
-.IR comm_exec " (since Linux 3.16)"
-.\" commit 82b897782d10fcc4930c9d4a15b175348fdd2871
-This is purely a feature-detection flag, it does not change
-kernel behavior.
-If this flag can successfully be set, then, when
-.I comm
-is enabled, the
-.B PERF_RECORD_MISC_COMM_EXEC
-flag will be set in the
-.I misc
-field of a comm record header if the rename event being
-reported was caused by a call to
-.BR execve (2).
-This allows tools to distinguish between the various
-types of process renaming.
-.TP
-.IR use_clockid " (since Linux 4.1)"
-.\" commit 34f439278cef7b1177f8ce24f9fc81dfc6221d3b
-This allows selecting which internal Linux clock to use
-when generating timestamps via the
-.I clockid
-field.
-This can make it easier to correlate perf sample times with
-timestamps generated by other tools.
-.TP
-.IR context_switch " (since Linux 4.3)"
-.\" commit 45ac1403f564f411c6a383a2448688ba8dd705a4
-This enables the generation of
-.B PERF_RECORD_SWITCH
-records when a context switch occurs.
-It also enables the generation of
-.B PERF_RECORD_SWITCH_CPU_WIDE
-records when sampling in CPU-wide mode.
-This functionality is in addition to existing tracepoint and
-software events for measuring context switches.
-The advantage of this method is that it will give full
-information even with strict
-.I perf_event_paranoid
-settings.
-.TP
-.IR write_backward " (since Linux 4.6)"
-.\" commit 9ecda41acb971ebd07c8fb35faf24005c0baea12
-This causes the ring buffer to be written from the end to the beginning.
-This is to support reading from overwritable ring buffer.
-.TP
-.IR namespaces " (since Linux 4.11)"
-.\" commit e422267322cd319e2695a535e47c5b1feeac45eb
-This enables the generation of
-.B PERF_RECORD_NAMESPACES
-records when a task enters a new namespace.
-Each namespace has a combination of device and inode numbers.
-.TP
-.IR ksymbol " (since Linux 5.0)"
-.\" commit 76193a94522f1d4edf2447a536f3f796ce56343b
-This enables the generation of
-.B PERF_RECORD_KSYMBOL
-records when new kernel symbols are registered or unregistered.
-This is analyzing dynamic kernel functions like eBPF.
-.TP
-.IR bpf_event " (since Linux 5.0)"
-.\" commit 6ee52e2a3fe4ea35520720736e6791df1fb67106
-This enables the generation of
-.B PERF_RECORD_BPF_EVENT
-records when an eBPF program is loaded or unloaded.
-.TP
-.IR aux_output " (since Linux 5.4)"
-.\" commit ab43762ef010967e4ccd53627f70a2eecbeafefb
-This allows normal (non-AUX) events to generate data for AUX events
-if the hardware supports it.
-.TP
-.IR cgroup " (since Linux 5.7)"
-.\" commit 96aaab686505c449e24d76e76507290dcc30e008
-This enables the generation of
-.B PERF_RECORD_CGROUP
-records when a new cgroup is created (and activated).
-.TP
-.IR text_poke " (since Linux 5.8)"
-.\" commit e17d43b93e544f5016c0251d2074c15568d5d963
-This enables the generation of
-.B PERF_RECORD_TEXT_POKE
-records when there's a change to the kernel text
-(i.e., self-modifying code).
-.TP
-.IR build_id " (since Linux 5.12)"
-.\" commit 88a16a1309333e43d328621ece3e9fa37027e8eb
-This changes the contents in the
-.B PERF_RECORD_MMAP2
-to have a build-id instead of device and inode numbers.
-.TP
-.IR inherit_thread " (since Linux 5.13)"
-.\" commit 2b26f0aa004995f49f7b6f4100dd0e4c39a9ed5f
-This disables the inheritance of the event to a child process.
-Only new threads in the same process
-(which is cloned with
-.BR CLONE_THREAD )
-will inherit the event.
-.TP
-.IR remove_on_exec " (since Linux 5.13)"
-.\" commit 2e498d0a74e5b88a6689ae1b811f247f91ff188e
-This closes the event when it starts a new process image by
-.BR execve (2).
-.TP
-.IR sigtrap " (since Linux 5.13)"
-.\" commit 97ba62b278674293762c3d91f724f1bb922f04e0
-This enables synchronous signal delivery of
-.B SIGTRAP
-on event overflow.
-.TP
-.IR wakeup_events ", " wakeup_watermark
-This union sets how many samples
-.RI ( wakeup_events )
-or bytes
-.RI ( wakeup_watermark )
-happen before an overflow notification happens.
-Which one is used is selected by the
-.I watermark
-bit flag.
-.IP
-.I wakeup_events
-counts only
-.B PERF_RECORD_SAMPLE
-record types.
-To receive overflow notification for all
-.B PERF_RECORD
-types choose watermark and set
-.I wakeup_watermark
-to 1.
-.IP
-Prior to Linux 3.0, setting
-.\" commit f506b3dc0ec454a16d40cab9ee5d75435b39dc50
-.I wakeup_events
-to 0 resulted in no overflow notifications;
-more recent kernels treat 0 the same as 1.
-.TP
-.IR bp_type " (since Linux 2.6.33)"
-.\" commit 24f1e32c60c45c89a997c73395b69c8af6f0a84e
-This chooses the breakpoint type.
-It is one of:
-.RS
-.TP
-.B HW_BREAKPOINT_EMPTY
-No breakpoint.
-.TP
-.B HW_BREAKPOINT_R
-Count when we read the memory location.
-.TP
-.B HW_BREAKPOINT_W
-Count when we write the memory location.
-.TP
-.B HW_BREAKPOINT_RW
-Count when we read or write the memory location.
-.TP
-.B HW_BREAKPOINT_X
-Count when we execute code at the memory location.
-.PP
-The values can be combined via a bitwise or, but the
-combination of
-.B HW_BREAKPOINT_R
-or
-.B HW_BREAKPOINT_W
-with
-.B HW_BREAKPOINT_X
-is not allowed.
-.RE
-.TP
-.IR bp_addr " (since Linux 2.6.33)"
-.\" commit 24f1e32c60c45c89a997c73395b69c8af6f0a84e
-This is the address of the breakpoint.
-For execution breakpoints, this is the memory address of the instruction
-of interest; for read and write breakpoints, it is the memory address
-of the memory location of interest.
-.TP
-.IR config1 " (since Linux 2.6.39)"
-.\" commit a7e3ed1e470116c9d12c2f778431a481a6be8ab6
-.I config1
-is used for setting events that need an extra register or otherwise
-do not fit in the regular config field.
-Raw OFFCORE_EVENTS on Nehalem/Westmere/SandyBridge use this field
-on Linux 3.3 and later kernels.
-.TP
-.IR bp_len " (since Linux 2.6.33)"
-.\" commit 24f1e32c60c45c89a997c73395b69c8af6f0a84e
-.I bp_len
-is the length of the breakpoint being measured if
-.I type
-is
-.BR PERF_TYPE_BREAKPOINT .
-Options are
-.BR HW_BREAKPOINT_LEN_1 ,
-.BR HW_BREAKPOINT_LEN_2 ,
-.BR HW_BREAKPOINT_LEN_4 ,
-and
-.BR HW_BREAKPOINT_LEN_8 .
-For an execution breakpoint, set this to
-.IR sizeof(long) .
-.TP
-.IR config2 " (since Linux 2.6.39)"
-.\" commit a7e3ed1e470116c9d12c2f778431a481a6be8ab6
-.I config2
-is a further extension of the
-.I config1
-field.
-.TP
-.IR branch_sample_type " (since Linux 3.4)"
-.\" commit bce38cd53e5ddba9cb6d708c4ef3d04a4016ec7e
-If
-.B PERF_SAMPLE_BRANCH_STACK
-is enabled, then this specifies what branches to include
-in the branch record.
-.IP
-The first part of the value is the privilege level, which
-is a combination of one of the values listed below.
-If the user does not set privilege level explicitly, the kernel
-will use the event's privilege level.
-Event and branch privilege levels do not have to match.
-.RS
-.TP
-.B PERF_SAMPLE_BRANCH_USER
-Branch target is in user space.
-.TP
-.B PERF_SAMPLE_BRANCH_KERNEL
-Branch target is in kernel space.
-.TP
-.B PERF_SAMPLE_BRANCH_HV
-Branch target is in hypervisor.
-.TP
-.B PERF_SAMPLE_BRANCH_PLM_ALL
-A convenience value that is the three preceding values ORed together.
-.PP
-In addition to the privilege value, at least one or more of the
-following bits must be set.
-.TP
-.B PERF_SAMPLE_BRANCH_ANY
-Any branch type.
-.TP
-.B PERF_SAMPLE_BRANCH_ANY_CALL
-Any call branch (includes direct calls, indirect calls, and far jumps).
-.TP
-.B PERF_SAMPLE_BRANCH_IND_CALL
-Indirect calls.
-.TP
-.BR PERF_SAMPLE_BRANCH_CALL " (since Linux 4.4)"
-.\" commit c229bf9dc179d2023e185c0f705bdf68484c1e73
-Direct calls.
-.TP
-.B PERF_SAMPLE_BRANCH_ANY_RETURN
-Any return branch.
-.TP
-.BR PERF_SAMPLE_BRANCH_IND_JUMP " (since Linux 4.2)"
-.\" commit c9fdfa14c3792c0160849c484e83aa57afd80ccc
-Indirect jumps.
-.TP
-.BR PERF_SAMPLE_BRANCH_COND " (since Linux 3.16)"
-.\" commit bac52139f0b7ab31330e98fd87fc5a2664951050
-Conditional branches.
-.TP
-.BR PERF_SAMPLE_BRANCH_ABORT_TX " (since Linux 3.11)"
-.\" commit 135c5612c460f89657c4698fe2ea753f6f667963
-Transactional memory aborts.
-.TP
-.BR PERF_SAMPLE_BRANCH_IN_TX " (since Linux 3.11)"
-.\" commit 135c5612c460f89657c4698fe2ea753f6f667963
-Branch in transactional memory transaction.
-.TP
-.BR PERF_SAMPLE_BRANCH_NO_TX " (since Linux 3.11)"
-.\" commit 135c5612c460f89657c4698fe2ea753f6f667963
-Branch not in transactional memory transaction.
-.BR PERF_SAMPLE_BRANCH_CALL_STACK " (since Linux 4.1)"
-.\" commit 2c44b1936bb3b135a3fac8b3493394d42e51cf70
-Branch is part of a hardware-generated call stack.
-This requires hardware support, currently only found
-on Intel x86 Haswell or newer.
-.RE
-.TP
-.IR sample_regs_user " (since Linux 3.7)"
-.\" commit 4018994f3d8785275ef0e7391b75c3462c029e56
-This bit mask defines the set of user CPU registers to dump on samples.
-The layout of the register mask is architecture-specific and
-is described in the kernel header file
-.IR arch/ARCH/include/uapi/asm/perf_regs.h .
-.TP
-.IR sample_stack_user " (since Linux 3.7)"
-.\" commit c5ebcedb566ef17bda7b02686e0d658a7bb42ee7
-This defines the size of the user stack to dump if
-.B PERF_SAMPLE_STACK_USER
-is specified.
-.TP
-.IR clockid " (since Linux 4.1)"
-.\" commit 34f439278cef7b1177f8ce24f9fc81dfc6221d3b
-If
-.I use_clockid
-is set, then this field selects which internal Linux timer to
-use for timestamps.
-The available timers are defined in
-.IR linux/time.h ,
-with
-.BR CLOCK_MONOTONIC ,
-.BR CLOCK_MONOTONIC_RAW ,
-.BR CLOCK_REALTIME ,
-.BR CLOCK_BOOTTIME ,
-and
-.B CLOCK_TAI
-currently supported.
-.TP
-.IR aux_watermark " (since Linux 4.1)"
-.\" commit 1a5941312414c71dece6717da9a0fa1303127afa
-This specifies how much data is required to trigger a
-.B PERF_RECORD_AUX
-sample.
-.TP
-.IR sample_max_stack " (since Linux 4.8)"
-.\" commit 97c79a38cd454602645f0470ffb444b3b75ce574
-When
-.I sample_type
-includes
-.BR PERF_SAMPLE_CALLCHAIN ,
-this field specifies how many stack frames to report when
-generating the callchain.
-.TP
-.IR aux_sample_size " (since Linux 5.5)"
-.\" commit a4faf00d994c40e64f656805ac375c65e324eefb
-When
-.B PERF_SAMPLE_AUX
-flag is set,
-specify the desired size of AUX data.
-Note that it can get smaller data than the specified size.
-.TP
-.IR sig_data " (since Linux 5.13)"
-.\" commit 97ba62b278674293762c3d91f724f1bb922f04e0
-This data will be copied to user's signal handler
-(through
-.I si_perf
-in the
-.IR siginfo_t )
-to disambiguate which event triggered the signal.
-.SS Reading results
-Once a
-.BR perf_event_open ()
-file descriptor has been opened, the values
-of the events can be read from the file descriptor.
-The values that are there are specified by the
-.I read_format
-field in the
-.I attr
-structure at open time.
-.PP
-If you attempt to read into a buffer that is not big enough to hold the
-data, the error
-.B ENOSPC
-results.
-.PP
-Here is the layout of the data returned by a read:
-.IP \[bu] 3
-If
-.B PERF_FORMAT_GROUP
-was specified to allow reading all events in a group at once:
-.IP
-.in +4n
-.EX
-struct read_format {
- u64 nr; /* The number of events */
- u64 time_enabled; /* if PERF_FORMAT_TOTAL_TIME_ENABLED */
- u64 time_running; /* if PERF_FORMAT_TOTAL_TIME_RUNNING */
- struct {
- u64 value; /* The value of the event */
- u64 id; /* if PERF_FORMAT_ID */
- u64 lost; /* if PERF_FORMAT_LOST */
- } values[nr];
-};
-.EE
-.in
-.IP \[bu]
-If
-.B PERF_FORMAT_GROUP
-was
-.I not
-specified:
-.IP
-.in +4n
-.EX
-struct read_format {
- u64 value; /* The value of the event */
- u64 time_enabled; /* if PERF_FORMAT_TOTAL_TIME_ENABLED */
- u64 time_running; /* if PERF_FORMAT_TOTAL_TIME_RUNNING */
- u64 id; /* if PERF_FORMAT_ID */
- u64 lost; /* if PERF_FORMAT_LOST */
-};
-.EE
-.in
-.PP
-The values read are as follows:
-.TP
-.I nr
-The number of events in this file descriptor.
-Available only if
-.B PERF_FORMAT_GROUP
-was specified.
-.TP
-.IR time_enabled ", " time_running
-Total time the event was enabled and running.
-Normally these values are the same.
-Multiplexing happens if the number of events is more than the
-number of available PMU counter slots.
-In that case the events run only part of the time and the
-.I time_enabled
-and
-.I time running
-values can be used to scale an estimated value for the count.
-.TP
-.I value
-An unsigned 64-bit value containing the counter result.
-.TP
-.I id
-A globally unique value for this particular event; only present if
-.B PERF_FORMAT_ID
-was specified in
-.IR read_format .
-.TP
-.I lost
-The number of lost samples of this event;
-only present if
-.B PERF_FORMAT_LOST
-was specified in
-.IR read_format .
-.SS MMAP layout
-When using
-.BR perf_event_open ()
-in sampled mode, asynchronous events
-(like counter overflow or
-.B PROT_EXEC
-mmap tracking)
-are logged into a ring-buffer.
-This ring-buffer is created and accessed through
-.BR mmap (2).
-.PP
-The mmap size should be 1+2\[ha]n pages, where the first page is a
-metadata page
-.RI ( "struct perf_event_mmap_page" )
-that contains various
-bits of information such as where the ring-buffer head is.
-.PP
-Before Linux 2.6.39, there is a bug that means you must allocate an mmap
-ring buffer when sampling even if you do not plan to access it.
-.PP
-The structure of the first metadata mmap page is as follows:
-.PP
-.in +4n
-.EX
-struct perf_event_mmap_page {
- __u32 version; /* version number of this structure */
- __u32 compat_version; /* lowest version this is compat with */
- __u32 lock; /* seqlock for synchronization */
- __u32 index; /* hardware counter identifier */
- __s64 offset; /* add to hardware counter value */
- __u64 time_enabled; /* time event active */
- __u64 time_running; /* time event on CPU */
- union {
- __u64 capabilities;
- struct {
- __u64 cap_usr_time / cap_usr_rdpmc / cap_bit0 : 1,
- cap_bit0_is_deprecated : 1,
- cap_user_rdpmc : 1,
- cap_user_time : 1,
- cap_user_time_zero : 1,
- };
- };
- __u16 pmc_width;
- __u16 time_shift;
- __u32 time_mult;
- __u64 time_offset;
- __u64 __reserved[120]; /* Pad to 1 k */
- __u64 data_head; /* head in the data section */
- __u64 data_tail; /* user\-space written tail */
- __u64 data_offset; /* where the buffer starts */
- __u64 data_size; /* data buffer size */
- __u64 aux_head;
- __u64 aux_tail;
- __u64 aux_offset;
- __u64 aux_size;
-\&
-}
-.EE
-.in
-.PP
-The following list describes the fields in the
-.I perf_event_mmap_page
-structure in more detail:
-.TP
-.I version
-Version number of this structure.
-.TP
-.I compat_version
-The lowest version this is compatible with.
-.TP
-.I lock
-A seqlock for synchronization.
-.TP
-.I index
-A unique hardware counter identifier.
-.TP
-.I offset
-When using rdpmc for reads this offset value
-must be added to the one returned by rdpmc to get
-the current total event count.
-.TP
-.I time_enabled
-Time the event was active.
-.TP
-.I time_running
-Time the event was running.
-.TP
-.IR cap_usr_time " / " cap_usr_rdpmc " / " cap_bit0 " (since Linux 3.4)"
-.\" commit c7206205d00ab375839bd6c7ddb247d600693c09
-There was a bug in the definition of
-.I cap_usr_time
-and
-.I cap_usr_rdpmc
-from Linux 3.4 until Linux 3.11.
-Both bits were defined to point to the same location, so it was
-impossible to know if
-.I cap_usr_time
-or
-.I cap_usr_rdpmc
-were actually set.
-.IP
-Starting with Linux 3.12, these are renamed to
-.\" commit fa7315871046b9a4c48627905691dbde57e51033
-.I cap_bit0
-and you should use the
-.I cap_user_time
-and
-.I cap_user_rdpmc
-fields instead.
-.TP
-.IR cap_bit0_is_deprecated " (since Linux 3.12)"
-.\" commit fa7315871046b9a4c48627905691dbde57e51033
-If set, this bit indicates that the kernel supports
-the properly separated
-.I cap_user_time
-and
-.I cap_user_rdpmc
-bits.
-.IP
-If not-set, it indicates an older kernel where
-.I cap_usr_time
-and
-.I cap_usr_rdpmc
-map to the same bit and thus both features should
-be used with caution.
-.TP
-.IR cap_user_rdpmc " (since Linux 3.12)"
-.\" commit fa7315871046b9a4c48627905691dbde57e51033
-If the hardware supports user-space read of performance counters
-without syscall (this is the "rdpmc" instruction on x86), then
-the following code can be used to do a read:
-.IP
-.in +4n
-.EX
-u32 seq, time_mult, time_shift, idx, width;
-u64 count, enabled, running;
-u64 cyc, time_offset;
-\&
-do {
- seq = pc\->lock;
- barrier();
- enabled = pc\->time_enabled;
- running = pc\->time_running;
-\&
- if (pc\->cap_usr_time && enabled != running) {
- cyc = rdtsc();
- time_offset = pc\->time_offset;
- time_mult = pc\->time_mult;
- time_shift = pc\->time_shift;
- }
-\&
- idx = pc\->index;
- count = pc\->offset;
-\&
- if (pc\->cap_usr_rdpmc && idx) {
- width = pc\->pmc_width;
- count += rdpmc(idx \- 1);
- }
-\&
- barrier();
-} while (pc\->lock != seq);
-.EE
-.in
-.TP
-.IR cap_user_time " (since Linux 3.12)"
-.\" commit fa7315871046b9a4c48627905691dbde57e51033
-This bit indicates the hardware has a constant, nonstop
-timestamp counter (TSC on x86).
-.TP
-.IR cap_user_time_zero " (since Linux 3.12)"
-.\" commit fa7315871046b9a4c48627905691dbde57e51033
-Indicates the presence of
-.I time_zero
-which allows mapping timestamp values to
-the hardware clock.
-.TP
-.I pmc_width
-If
-.IR cap_usr_rdpmc ,
-this field provides the bit-width of the value
-read using the rdpmc or equivalent instruction.
-This can be used to sign extend the result like:
-.IP
-.in +4n
-.EX
-pmc <<= 64 \- pmc_width;
-pmc >>= 64 \- pmc_width; // signed shift right
-count += pmc;
-.EE
-.in
-.TP
-.IR time_shift ", " time_mult ", " time_offset
-.IP
-If
-.IR cap_usr_time ,
-these fields can be used to compute the time
-delta since
-.I time_enabled
-(in nanoseconds) using rdtsc or similar.
-.IP
-.in +4n
-.EX
-u64 quot, rem;
-u64 delta;
-\&
-quot = cyc >> time_shift;
-rem = cyc & (((u64)1 << time_shift) \- 1);
-delta = time_offset + quot * time_mult +
- ((rem * time_mult) >> time_shift);
-.EE
-.in
-.IP
-Where
-.IR time_offset ,
-.IR time_mult ,
-.IR time_shift ,
-and
-.I cyc
-are read in the
-seqcount loop described above.
-This delta can then be added to
-enabled and possible running (if idx), improving the scaling:
-.IP
-.in +4n
-.EX
-enabled += delta;
-if (idx)
- running += delta;
-quot = count / running;
-rem = count % running;
-count = quot * enabled + (rem * enabled) / running;
-.EE
-.in
-.TP
-.IR time_zero " (since Linux 3.12)"
-.\" commit fa7315871046b9a4c48627905691dbde57e51033
-.IP
-If
-.I cap_usr_time_zero
-is set, then the hardware clock (the TSC timestamp counter on x86)
-can be calculated from the
-.IR time_zero ,
-.IR time_mult ,
-and
-.I time_shift
-values:
-.IP
-.in +4n
-.EX
-time = timestamp \- time_zero;
-quot = time / time_mult;
-rem = time % time_mult;
-cyc = (quot << time_shift) + (rem << time_shift) / time_mult;
-.EE
-.in
-.IP
-And vice versa:
-.IP
-.in +4n
-.EX
-quot = cyc >> time_shift;
-rem = cyc & (((u64)1 << time_shift) \- 1);
-timestamp = time_zero + quot * time_mult +
- ((rem * time_mult) >> time_shift);
-.EE
-.in
-.TP
-.I data_head
-This points to the head of the data section.
-The value continuously increases, it does not wrap.
-The value needs to be manually wrapped by the size of the mmap buffer
-before accessing the samples.
-.IP
-On SMP-capable platforms, after reading the
-.I data_head
-value,
-user space should issue an rmb().
-.TP
-.I data_tail
-When the mapping is
-.BR PROT_WRITE ,
-the
-.I data_tail
-value should be written by user space to reflect the last read data.
-In this case, the kernel will not overwrite unread data.
-.TP
-.IR data_offset " (since Linux 4.1)"
-.\" commit e8c6deac69629c0cb97c3d3272f8631ef17f8f0f
-Contains the offset of the location in the mmap buffer
-where perf sample data begins.
-.TP
-.IR data_size " (since Linux 4.1)"
-.\" commit e8c6deac69629c0cb97c3d3272f8631ef17f8f0f
-Contains the size of the perf sample region within
-the mmap buffer.
-.TP
-.IR aux_head ", " aux_tail ", " aux_offset ", " aux_size " (since Linux 4.1)"
-.\" commit 45bfb2e50471abbbfd83d40d28c986078b0d24ff
-The AUX region allows
-.BR mmap (2)-ing
-a separate sample buffer for
-high-bandwidth data streams (separate from the main perf sample buffer).
-An example of a high-bandwidth stream is instruction tracing support,
-as is found in newer Intel processors.
-.IP
-To set up an AUX area, first
-.I aux_offset
-needs to be set with an offset greater than
-.IR data_offset + data_size
-and
-.I aux_size
-needs to be set to the desired buffer size.
-The desired offset and size must be page aligned, and the size
-must be a power of two.
-These values are then passed to mmap in order to map the AUX buffer.
-Pages in the AUX buffer are included as part of the
-.B RLIMIT_MEMLOCK
-resource limit (see
-.BR setrlimit (2)),
-and also as part of the
-.I perf_event_mlock_kb
-allowance.
-.IP
-By default, the AUX buffer will be truncated if it will not fit
-in the available space in the ring buffer.
-If the AUX buffer is mapped as a read only buffer, then it will
-operate in ring buffer mode where old data will be overwritten
-by new.
-In overwrite mode, it might not be possible to infer where the
-new data began, and it is the consumer's job to disable
-measurement while reading to avoid possible data races.
-.IP
-The
-.I aux_head
-and
-.I aux_tail
-ring buffer pointers have the same behavior and ordering
-rules as the previous described
-.I data_head
-and
-.IR data_tail .
-.PP
-The following 2^n ring-buffer pages have the layout described below.
-.PP
-If
-.I perf_event_attr.sample_id_all
-is set, then all event types will
-have the sample_type selected fields related to where/when (identity)
-an event took place (TID, TIME, ID, CPU, STREAM_ID) described in
-.B PERF_RECORD_SAMPLE
-below, it will be stashed just after the
-.I perf_event_header
-and the fields already present for the existing
-fields, that is, at the end of the payload.
-This allows a newer perf.data
-file to be supported by older perf tools, with the new optional
-fields being ignored.
-.PP
-The mmap values start with a header:
-.PP
-.in +4n
-.EX
-struct perf_event_header {
- __u32 type;
- __u16 misc;
- __u16 size;
-};
-.EE
-.in
-.PP
-Below, we describe the
-.I perf_event_header
-fields in more detail.
-For ease of reading,
-the fields with shorter descriptions are presented first.
-.TP
-.I size
-This indicates the size of the record.
-.TP
-.I misc
-The
-.I misc
-field contains additional information about the sample.
-.IP
-The CPU mode can be determined from this value by masking with
-.B PERF_RECORD_MISC_CPUMODE_MASK
-and looking for one of the following (note these are not
-bit masks, only one can be set at a time):
-.RS
-.TP
-.B PERF_RECORD_MISC_CPUMODE_UNKNOWN
-Unknown CPU mode.
-.TP
-.B PERF_RECORD_MISC_KERNEL
-Sample happened in the kernel.
-.TP
-.B PERF_RECORD_MISC_USER
-Sample happened in user code.
-.TP
-.B PERF_RECORD_MISC_HYPERVISOR
-Sample happened in the hypervisor.
-.TP
-.BR PERF_RECORD_MISC_GUEST_KERNEL " (since Linux 2.6.35)"
-.\" commit 39447b386c846bbf1c56f6403c5282837486200f
-Sample happened in the guest kernel.
-.TP
-.B PERF_RECORD_MISC_GUEST_USER " (since Linux 2.6.35)"
-.\" commit 39447b386c846bbf1c56f6403c5282837486200f
-Sample happened in guest user code.
-.RE
-.PP
-.RS
-Since the following three statuses are generated by
-different record types, they alias to the same bit:
-.TP
-.BR PERF_RECORD_MISC_MMAP_DATA " (since Linux 3.10)"
-.\" commit 2fe85427e3bf65d791700d065132772fc26e4d75
-This is set when the mapping is not executable;
-otherwise the mapping is executable.
-.TP
-.BR PERF_RECORD_MISC_COMM_EXEC " (since Linux 3.16)"
-.\" commit 82b897782d10fcc4930c9d4a15b175348fdd2871
-This is set for a
-.B PERF_RECORD_COMM
-record on kernels more recent than Linux 3.16
-if a process name change was caused by an
-.BR execve (2)
-system call.
-.TP
-.BR PERF_RECORD_MISC_SWITCH_OUT " (since Linux 4.3)"
-.\" commit 45ac1403f564f411c6a383a2448688ba8dd705a4
-When a
-.B PERF_RECORD_SWITCH
-or
-.B PERF_RECORD_SWITCH_CPU_WIDE
-record is generated, this bit indicates that the
-context switch is away from the current process
-(instead of into the current process).
-.RE
-.PP
-.RS
-In addition, the following bits can be set:
-.TP
-.B PERF_RECORD_MISC_EXACT_IP
-This indicates that the content of
-.B PERF_SAMPLE_IP
-points
-to the actual instruction that triggered the event.
-See also
-.IR perf_event_attr.precise_ip .
-.TP
-.BR PERF_RECORD_MISC_SWITCH_OUT_PREEMPT " (since Linux 4.17)"
-.\" commit 101592b4904ecf6b8ed2a4784d41d180319d95a1
-When a
-.B PERF_RECORD_SWITCH
-or
-.B PERF_RECORD_SWITCH_CPU_WIDE
-record is generated,
-this indicates the context switch was a preemption.
-.TP
-.BR PERF_RECORD_MISC_MMAP_BUILD_ID " (since Linux 5.12)"
-.\" commit 88a16a1309333e43d328621ece3e9fa37027e8eb
-This indicates that the content of
-.B PERF_SAMPLE_MMAP2
-contains build-ID data instead of device major and minor numbers
-as well as the inode number.
-.TP
-.BR PERF_RECORD_MISC_EXT_RESERVED " (since Linux 2.6.35)"
-.\" commit 1676b8a077c352085d52578fb4f29350b58b6e74
-This indicates there is extended data available (currently not used).
-.TP
-.B PERF_RECORD_MISC_PROC_MAP_PARSE_TIMEOUT
-.\" commit 930e6fcd2bcce9bcd9d4aa7e755678d33f3fe6f4
-This bit is not set by the kernel.
-It is reserved for the user-space perf utility to indicate that
-.IR /proc/ pid /maps
-parsing was taking too long and was stopped, and thus the mmap
-records may be truncated.
-.RE
-.TP
-.I type
-The
-.I type
-value is one of the below.
-The values in the corresponding record (that follows the header)
-depend on the
-.I type
-selected as shown.
-.RS
-.TP 4
-.B PERF_RECORD_MMAP
-The MMAP events record the
-.B PROT_EXEC
-mappings so that we can correlate
-user-space IPs to code.
-They have the following structure:
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u32 pid, tid;
- u64 addr;
- u64 len;
- u64 pgoff;
- char filename[];
-};
-.EE
-.in
-.RS
-.TP
-.I pid
-is the process ID.
-.TP
-.I tid
-is the thread ID.
-.TP
-.I addr
-is the address of the allocated memory.
-.I len
-is the length of the allocated memory.
-.I pgoff
-is the page offset of the allocated memory.
-.I filename
-is a string describing the backing of the allocated memory.
-.RE
-.TP
-.B PERF_RECORD_LOST
-This record indicates when events are lost.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u64 id;
- u64 lost;
- struct sample_id sample_id;
-};
-.EE
-.in
-.RS
-.TP
-.I id
-is the unique event ID for the samples that were lost.
-.TP
-.I lost
-is the number of events that were lost.
-.RE
-.TP
-.B PERF_RECORD_COMM
-This record indicates a change in the process name.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u32 pid;
- u32 tid;
- char comm[];
- struct sample_id sample_id;
-};
-.EE
-.in
-.RS
-.TP
-.I pid
-is the process ID.
-.TP
-.I tid
-is the thread ID.
-.TP
-.I comm
-is a string containing the new name of the process.
-.RE
-.TP
-.B PERF_RECORD_EXIT
-This record indicates a process exit event.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u32 pid, ppid;
- u32 tid, ptid;
- u64 time;
- struct sample_id sample_id;
-};
-.EE
-.in
-.TP
-.BR PERF_RECORD_THROTTLE ", " PERF_RECORD_UNTHROTTLE
-This record indicates a throttle/unthrottle event.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u64 time;
- u64 id;
- u64 stream_id;
- struct sample_id sample_id;
-};
-.EE
-.in
-.TP
-.B PERF_RECORD_FORK
-This record indicates a fork event.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u32 pid, ppid;
- u32 tid, ptid;
- u64 time;
- struct sample_id sample_id;
-};
-.EE
-.in
-.TP
-.B PERF_RECORD_READ
-This record indicates a read event.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u32 pid, tid;
- struct read_format values;
- struct sample_id sample_id;
-};
-.EE
-.in
-.TP
-.B PERF_RECORD_SAMPLE
-This record indicates a sample.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u64 sample_id; /* if PERF_SAMPLE_IDENTIFIER */
- u64 ip; /* if PERF_SAMPLE_IP */
- u32 pid, tid; /* if PERF_SAMPLE_TID */
- u64 time; /* if PERF_SAMPLE_TIME */
- u64 addr; /* if PERF_SAMPLE_ADDR */
- u64 id; /* if PERF_SAMPLE_ID */
- u64 stream_id; /* if PERF_SAMPLE_STREAM_ID */
- u32 cpu, res; /* if PERF_SAMPLE_CPU */
- u64 period; /* if PERF_SAMPLE_PERIOD */
- struct read_format v;
- /* if PERF_SAMPLE_READ */
- u64 nr; /* if PERF_SAMPLE_CALLCHAIN */
- u64 ips[nr]; /* if PERF_SAMPLE_CALLCHAIN */
- u32 size; /* if PERF_SAMPLE_RAW */
- char data[size]; /* if PERF_SAMPLE_RAW */
- u64 bnr; /* if PERF_SAMPLE_BRANCH_STACK */
- struct perf_branch_entry lbr[bnr];
- /* if PERF_SAMPLE_BRANCH_STACK */
- u64 abi; /* if PERF_SAMPLE_REGS_USER */
- u64 regs[weight(mask)];
- /* if PERF_SAMPLE_REGS_USER */
- u64 size; /* if PERF_SAMPLE_STACK_USER */
- char data[size]; /* if PERF_SAMPLE_STACK_USER */
- u64 dyn_size; /* if PERF_SAMPLE_STACK_USER &&
- size != 0 */
- union perf_sample_weight weight;
- /* if PERF_SAMPLE_WEIGHT */
- /* || PERF_SAMPLE_WEIGHT_STRUCT */
- u64 data_src; /* if PERF_SAMPLE_DATA_SRC */
- u64 transaction; /* if PERF_SAMPLE_TRANSACTION */
- u64 abi; /* if PERF_SAMPLE_REGS_INTR */
- u64 regs[weight(mask)];
- /* if PERF_SAMPLE_REGS_INTR */
- u64 phys_addr; /* if PERF_SAMPLE_PHYS_ADDR */
- u64 cgroup; /* if PERF_SAMPLE_CGROUP */
- u64 data_page_size;
- /* if PERF_SAMPLE_DATA_PAGE_SIZE */
- u64 code_page_size;
- /* if PERF_SAMPLE_CODE_PAGE_SIZE */
- u64 size; /* if PERF_SAMPLE_AUX */
- char data[size]; /* if PERF_SAMPLE_AUX */
-};
-.EE
-.in
-.RS 4
-.TP 4
-.I sample_id
-If
-.B PERF_SAMPLE_IDENTIFIER
-is enabled, a 64-bit unique ID is included.
-This is a duplication of the
-.B PERF_SAMPLE_ID
-.I id
-value, but included at the beginning of the sample
-so parsers can easily obtain the value.
-.TP
-.I ip
-If
-.B PERF_SAMPLE_IP
-is enabled, then a 64-bit instruction
-pointer value is included.
-.TP
-.IR pid ", " tid
-If
-.B PERF_SAMPLE_TID
-is enabled, then a 32-bit process ID
-and 32-bit thread ID are included.
-.TP
-.I time
-If
-.B PERF_SAMPLE_TIME
-is enabled, then a 64-bit timestamp
-is included.
-This is obtained via local_clock() which is a hardware timestamp
-if available and the jiffies value if not.
-.TP
-.I addr
-If
-.B PERF_SAMPLE_ADDR
-is enabled, then a 64-bit address is included.
-This is usually the address of a tracepoint,
-breakpoint, or software event; otherwise the value is 0.
-.TP
-.I id
-If
-.B PERF_SAMPLE_ID
-is enabled, a 64-bit unique ID is included.
-If the event is a member of an event group, the group leader ID is returned.
-This ID is the same as the one returned by
-.BR PERF_FORMAT_ID .
-.TP
-.I stream_id
-If
-.B PERF_SAMPLE_STREAM_ID
-is enabled, a 64-bit unique ID is included.
-Unlike
-.B PERF_SAMPLE_ID
-the actual ID is returned, not the group leader.
-This ID is the same as the one returned by
-.BR PERF_FORMAT_ID .
-.TP
-.IR cpu ", " res
-If
-.B PERF_SAMPLE_CPU
-is enabled, this is a 32-bit value indicating
-which CPU was being used, in addition to a reserved (unused)
-32-bit value.
-.TP
-.I period
-If
-.B PERF_SAMPLE_PERIOD
-is enabled, a 64-bit value indicating
-the current sampling period is written.
-.TP
-.I v
-If
-.B PERF_SAMPLE_READ
-is enabled, a structure of type read_format
-is included which has values for all events in the event group.
-The values included depend on the
-.I read_format
-value used at
-.BR perf_event_open ()
-time.
-.TP
-.IR nr ", " ips[nr]
-If
-.B PERF_SAMPLE_CALLCHAIN
-is enabled, then a 64-bit number is included
-which indicates how many following 64-bit instruction pointers will
-follow.
-This is the current callchain.
-.TP
-.IR size ", " data[size]
-If
-.B PERF_SAMPLE_RAW
-is enabled, then a 32-bit value indicating size
-is included followed by an array of 8-bit values of length size.
-The values are padded with 0 to have 64-bit alignment.
-.IP
-This RAW record data is opaque with respect to the ABI.
-The ABI doesn't make any promises with respect to the stability
-of its content, it may vary depending
-on event, hardware, and kernel version.
-.TP
-.IR bnr ", " lbr[bnr]
-If
-.B PERF_SAMPLE_BRANCH_STACK
-is enabled, then a 64-bit value indicating
-the number of records is included, followed by
-.I bnr
-.I perf_branch_entry
-structures which each include the fields:
-.RS
-.TP
-.I from
-This indicates the source instruction (may not be a branch).
-.TP
-.I to
-The branch target.
-.TP
-.I mispred
-The branch target was mispredicted.
-.TP
-.I predicted
-The branch target was predicted.
-.TP
-.IR in_tx " (since Linux 3.11)"
-.\" commit 135c5612c460f89657c4698fe2ea753f6f667963
-The branch was in a transactional memory transaction.
-.TP
-.IR abort " (since Linux 3.11)"
-.\" commit 135c5612c460f89657c4698fe2ea753f6f667963
-The branch was in an aborted transactional memory transaction.
-.TP
-.IR cycles " (since Linux 4.3)"
-.\" commit 71ef3c6b9d4665ee7afbbe4c208a98917dcfc32f
-This reports the number of cycles elapsed since the
-previous branch stack update.
-.PP
-The entries are from most to least recent, so the first entry
-has the most recent branch.
-.PP
-Support for
-.IR mispred ,
-.IR predicted ,
-and
-.I cycles
-is optional; if not supported, those
-values will be 0.
-.PP
-The type of branches recorded is specified by the
-.I branch_sample_type
-field.
-.RE
-.TP
-.IR abi ", " regs[weight(mask)]
-If
-.B PERF_SAMPLE_REGS_USER
-is enabled, then the user CPU registers are recorded.
-.IP
-The
-.I abi
-field is one of
-.BR PERF_SAMPLE_REGS_ABI_NONE ,
-.BR PERF_SAMPLE_REGS_ABI_32 ,
-or
-.BR PERF_SAMPLE_REGS_ABI_64 .
-.IP
-The
-.I regs
-field is an array of the CPU registers that were specified by
-the
-.I sample_regs_user
-attr field.
-The number of values is the number of bits set in the
-.I sample_regs_user
-bit mask.
-.TP
-.IR size ", " data[size] ", " dyn_size
-If
-.B PERF_SAMPLE_STACK_USER
-is enabled, then the user stack is recorded.
-This can be used to generate stack backtraces.
-.I size
-is the size requested by the user in
-.I sample_stack_user
-or else the maximum record size.
-.I data
-is the stack data (a raw dump of the memory pointed to by the
-stack pointer at the time of sampling).
-.I dyn_size
-is the amount of data actually dumped (can be less than
-.IR size ).
-Note that
-.I dyn_size
-is omitted if
-.I size
-is 0.
-.TP
-.I weight
-If
-.B PERF_SAMPLE_WEIGHT
-or
-.B PERF_SAMPLE_WEIGHT_STRUCT
-is enabled, then a 64-bit value provided by the hardware
-is recorded that indicates how costly the event was.
-This allows expensive events to stand out more clearly
-in profiles.
-.TP
-.I data_src
-If
-.B PERF_SAMPLE_DATA_SRC
-is enabled, then a 64-bit value is recorded that is made up of
-the following fields:
-.RS
-.TP 4
-.I mem_op
-Type of opcode, a bitwise combination of:
-.IP
-.PD 0
-.RS
-.TP 24
-.B PERF_MEM_OP_NA
-Not available
-.TP
-.B PERF_MEM_OP_LOAD
-Load instruction
-.TP
-.B PERF_MEM_OP_STORE
-Store instruction
-.TP
-.B PERF_MEM_OP_PFETCH
-Prefetch
-.TP
-.B PERF_MEM_OP_EXEC
-Executable code
-.RE
-.PD
-.TP
-.I mem_lvl
-Memory hierarchy level hit or miss, a bitwise combination of
-the following, shifted left by
-.BR PERF_MEM_LVL_SHIFT :
-.IP
-.PD 0
-.RS
-.TP 24
-.B PERF_MEM_LVL_NA
-Not available
-.TP
-.B PERF_MEM_LVL_HIT
-Hit
-.TP
-.B PERF_MEM_LVL_MISS
-Miss
-.TP
-.B PERF_MEM_LVL_L1
-Level 1 cache
-.TP
-.B PERF_MEM_LVL_LFB
-Line fill buffer
-.TP
-.B PERF_MEM_LVL_L2
-Level 2 cache
-.TP
-.B PERF_MEM_LVL_L3
-Level 3 cache
-.TP
-.B PERF_MEM_LVL_LOC_RAM
-Local DRAM
-.TP
-.B PERF_MEM_LVL_REM_RAM1
-Remote DRAM 1 hop
-.TP
-.B PERF_MEM_LVL_REM_RAM2
-Remote DRAM 2 hops
-.TP
-.B PERF_MEM_LVL_REM_CCE1
-Remote cache 1 hop
-.TP
-.B PERF_MEM_LVL_REM_CCE2
-Remote cache 2 hops
-.TP
-.B PERF_MEM_LVL_IO
-I/O memory
-.TP
-.B PERF_MEM_LVL_UNC
-Uncached memory
-.RE
-.PD
-.TP
-.I mem_snoop
-Snoop mode, a bitwise combination of the following, shifted left by
-.BR PERF_MEM_SNOOP_SHIFT :
-.IP
-.PD 0
-.RS
-.TP 24
-.B PERF_MEM_SNOOP_NA
-Not available
-.TP
-.B PERF_MEM_SNOOP_NONE
-No snoop
-.TP
-.B PERF_MEM_SNOOP_HIT
-Snoop hit
-.TP
-.B PERF_MEM_SNOOP_MISS
-Snoop miss
-.TP
-.B PERF_MEM_SNOOP_HITM
-Snoop hit modified
-.RE
-.PD
-.TP
-.I mem_lock
-Lock instruction, a bitwise combination of the following, shifted left by
-.BR PERF_MEM_LOCK_SHIFT :
-.IP
-.PD 0
-.RS
-.TP 24
-.B PERF_MEM_LOCK_NA
-Not available
-.TP
-.B PERF_MEM_LOCK_LOCKED
-Locked transaction
-.RE
-.PD
-.TP
-.I mem_dtlb
-TLB access hit or miss, a bitwise combination of the following, shifted
-left by
-.BR PERF_MEM_TLB_SHIFT :
-.IP
-.PD 0
-.RS
-.TP 24
-.B PERF_MEM_TLB_NA
-Not available
-.TP
-.B PERF_MEM_TLB_HIT
-Hit
-.TP
-.B PERF_MEM_TLB_MISS
-Miss
-.TP
-.B PERF_MEM_TLB_L1
-Level 1 TLB
-.TP
-.B PERF_MEM_TLB_L2
-Level 2 TLB
-.TP
-.B PERF_MEM_TLB_WK
-Hardware walker
-.TP
-.B PERF_MEM_TLB_OS
-OS fault handler
-.RE
-.PD
-.RE
-.TP
-.I transaction
-If the
-.B PERF_SAMPLE_TRANSACTION
-flag is set, then a 64-bit field is recorded describing
-the sources of any transactional memory aborts.
-.IP
-The field is a bitwise combination of the following values:
-.RS
-.TP
-.B PERF_TXN_ELISION
-Abort from an elision type transaction (Intel-CPU-specific).
-.TP
-.B PERF_TXN_TRANSACTION
-Abort from a generic transaction.
-.TP
-.B PERF_TXN_SYNC
-Synchronous abort (related to the reported instruction).
-.TP
-.B PERF_TXN_ASYNC
-Asynchronous abort (not related to the reported instruction).
-.TP
-.B PERF_TXN_RETRY
-Retryable abort (retrying the transaction may have succeeded).
-.TP
-.B PERF_TXN_CONFLICT
-Abort due to memory conflicts with other threads.
-.TP
-.B PERF_TXN_CAPACITY_WRITE
-Abort due to write capacity overflow.
-.TP
-.B PERF_TXN_CAPACITY_READ
-Abort due to read capacity overflow.
-.RE
-.IP
-In addition, a user-specified abort code can be obtained from
-the high 32 bits of the field by shifting right by
-.B PERF_TXN_ABORT_SHIFT
-and masking with the value
-.BR PERF_TXN_ABORT_MASK .
-.TP
-.IR abi ", " regs[weight(mask)]
-If
-.B PERF_SAMPLE_REGS_INTR
-is enabled, then the user CPU registers are recorded.
-.IP
-The
-.I abi
-field is one of
-.BR PERF_SAMPLE_REGS_ABI_NONE ,
-.BR PERF_SAMPLE_REGS_ABI_32 ,
-or
-.BR PERF_SAMPLE_REGS_ABI_64 .
-.IP
-The
-.I regs
-field is an array of the CPU registers that were specified by
-the
-.I sample_regs_intr
-attr field.
-The number of values is the number of bits set in the
-.I sample_regs_intr
-bit mask.
-.TP
-.I phys_addr
-If the
-.B PERF_SAMPLE_PHYS_ADDR
-flag is set, then the 64-bit physical address is recorded.
-.TP
-.I cgroup
-If the
-.B PERF_SAMPLE_CGROUP
-flag is set,
-then the 64-bit cgroup ID (for the perf_event subsystem) is recorded.
-To get the pathname of the cgroup, the ID should match to one in a
-.BR PERF_RECORD_CGROUP .
-.TP
-.I data_page_size
-If the
-.B PERF_SAMPLE_DATA_PAGE_SIZE
-flag is set,
-then the 64-bit page size value of the
-.B data
-address is recorded.
-.TP
-.I code_page_size
-If the
-.B PERF_SAMPLE_CODE_PAGE_SIZE
-flag is set,
-then the 64-bit page size value of the
-.B ip
-address is recorded.
-.TP
-.I size
-.TQ
-.IR data [ size ]
-If
-.B PERF_SAMPLE_AUX
-is enabled,
-a snapshot of the aux buffer is recorded.
-.RE
-.TP
-.B PERF_RECORD_MMAP2
-This record includes extended information on
-.BR mmap (2)
-calls returning executable mappings.
-The format is similar to that of the
-.B PERF_RECORD_MMAP
-record, but includes extra values that allow uniquely identifying
-shared mappings.
-Depending on the
-.B PERF_RECORD_MISC_MMAP_BUILD_ID
-bit in the header,
-the extra values have different layout and meanings.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u32 pid;
- u32 tid;
- u64 addr;
- u64 len;
- u64 pgoff;
- union {
- struct {
- u32 maj;
- u32 min;
- u64 ino;
- u64 ino_generation;
- };
- struct { /* if PERF_RECORD_MISC_MMAP_BUILD_ID */
- u8 build_id_size;
- u8 __reserved_1;
- u16 __reserved_2;
- u8 build_id[20];
- };
- };
- u32 prot;
- u32 flags;
- char filename[];
- struct sample_id sample_id;
-};
-.EE
-.in
-.RS
-.TP
-.I pid
-is the process ID.
-.TP
-.I tid
-is the thread ID.
-.TP
-.I addr
-is the address of the allocated memory.
-.TP
-.I len
-is the length of the allocated memory.
-.TP
-.I pgoff
-is the page offset of the allocated memory.
-.TP
-.I maj
-is the major ID of the underlying device.
-.TP
-.I min
-is the minor ID of the underlying device.
-.TP
-.I ino
-is the inode number.
-.TP
-.I ino_generation
-is the inode generation.
-.TP
-.I build_id_size
-is the actual size of
-.I build_id
-field (up to 20).
-.TP
-.I build_id
-is a raw data to identify a binary.
-.TP
-.I prot
-is the protection information.
-.TP
-.I flags
-is the flags information.
-.TP
-.I filename
-is a string describing the backing of the allocated memory.
-.RE
-.TP
-.BR PERF_RECORD_AUX " (since Linux 4.1)"
-.\" commit 68db7e98c3a6ebe7284b6cf14906ed7c55f3f7f0
-This record reports that new data is available in the separate
-AUX buffer region.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u64 aux_offset;
- u64 aux_size;
- u64 flags;
- struct sample_id sample_id;
-};
-.EE
-.in
-.RS
-.TP
-.I aux_offset
-offset in the AUX mmap region where the new data begins.
-.TP
-.I aux_size
-size of the data made available.
-.TP
-.I flags
-describes the AUX update.
-.RS
-.TP
-.B PERF_AUX_FLAG_TRUNCATED
-if set, then the data returned was truncated to fit the available
-buffer size.
-.TP
-.B PERF_AUX_FLAG_OVERWRITE
-.\" commit 2023a0d2829e521fe6ad6b9907f3f90bfbf57142
-if set, then the data returned has overwritten previous data.
-.RE
-.RE
-.TP
-.BR PERF_RECORD_ITRACE_START " (since Linux 4.1)"
-.\" ec0d7729bbaed4b9d2d3fada693278e13a3d1368
-This record indicates which process has initiated an instruction
-trace event, allowing tools to properly correlate the instruction
-addresses in the AUX buffer with the proper executable.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u32 pid;
- u32 tid;
-};
-.EE
-.in
-.RS
-.TP
-.I pid
-process ID of the thread starting an instruction trace.
-.TP
-.I tid
-thread ID of the thread starting an instruction trace.
-.RE
-.TP
-.BR PERF_RECORD_LOST_SAMPLES " (since Linux 4.2)"
-.\" f38b0dbb491a6987e198aa6b428db8692a6480f8
-When using hardware sampling (such as Intel PEBS) this record
-indicates some number of samples that may have been lost.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u64 lost;
- struct sample_id sample_id;
-};
-.EE
-.in
-.RS
-.TP
-.I lost
-the number of potentially lost samples.
-.RE
-.TP
-.BR PERF_RECORD_SWITCH " (since Linux 4.3)"
-.\" commit 45ac1403f564f411c6a383a2448688ba8dd705a4
-This record indicates a context switch has happened.
-The
-.B PERF_RECORD_MISC_SWITCH_OUT
-bit in the
-.I misc
-field indicates whether it was a context switch into
-or away from the current process.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- struct sample_id sample_id;
-};
-.EE
-.in
-.TP
-.BR PERF_RECORD_SWITCH_CPU_WIDE " (since Linux 4.3)"
-.\" commit 45ac1403f564f411c6a383a2448688ba8dd705a4
-As with
-.B PERF_RECORD_SWITCH
-this record indicates a context switch has happened,
-but it only occurs when sampling in CPU-wide mode
-and provides additional information on the process
-being switched to/from.
-The
-.B PERF_RECORD_MISC_SWITCH_OUT
-bit in the
-.I misc
-field indicates whether it was a context switch into
-or away from the current process.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u32 next_prev_pid;
- u32 next_prev_tid;
- struct sample_id sample_id;
-};
-.EE
-.in
-.RS
-.TP
-.I next_prev_pid
-The process ID of the previous (if switching in)
-or next (if switching out) process on the CPU.
-.TP
-.I next_prev_tid
-The thread ID of the previous (if switching in)
-or next (if switching out) thread on the CPU.
-.RE
-.TP
-.BR PERF_RECORD_NAMESPACES " (since Linux 4.11)"
-.\" commit e422267322cd319e2695a535e47c5b1feeac45eb
-This record includes various namespace information of a process.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u32 pid;
- u32 tid;
- u64 nr_namespaces;
- struct { u64 dev, inode } [nr_namespaces];
- struct sample_id sample_id;
-};
-.EE
-.in
-.RS
-.TP
-.I pid
-is the process ID
-.TP
-.I tid
-is the thread ID
-.TP
-.I nr_namespace
-is the number of namespaces in this record
-.RE
-.IP
-Each namespace has
-.I dev
-and
-.I inode
-fields and is recorded in the
-fixed position like below:
-.RS
-.TP
-.BR NET_NS_INDEX = 0
-Network namespace
-.TP
-.BR UTS_NS_INDEX = 1
-UTS namespace
-.TP
-.BR IPC_NS_INDEX = 2
-IPC namespace
-.TP
-.BR PID_NS_INDEX = 3
-PID namespace
-.TP
-.BR USER_NS_INDEX = 4
-User namespace
-.TP
-.BR MNT_NS_INDEX = 5
-Mount namespace
-.TP
-.BR CGROUP_NS_INDEX = 6
-Cgroup namespace
-.RE
-.TP
-.BR PERF_RECORD_KSYMBOL " (since Linux 5.0)"
-.\" commit 76193a94522f1d4edf2447a536f3f796ce56343b
-This record indicates kernel symbol register/unregister events.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u64 addr;
- u32 len;
- u16 ksym_type;
- u16 flags;
- char name[];
- struct sample_id sample_id;
-};
-.EE
-.in
-.RS
-.TP
-.I addr
-is the address of the kernel symbol.
-.TP
-.I len
-is the length of the kernel symbol.
-.TP
-.I ksym_type
-is the type of the kernel symbol.
-Currently the following types are available:
-.RS
-.TP
-.B PERF_RECORD_KSYMBOL_TYPE_BPF
-The kernel symbol is a BPF function.
-.RE
-.TP
-.I flags
-If the
-.B PERF_RECORD_KSYMBOL_FLAGS_UNREGISTER
-is set, then this event is for unregistering the kernel symbol.
-.RE
-.TP
-.BR PERF_RECORD_BPF_EVENT " (since Linux 5.0)"
-.\" commit 6ee52e2a3fe4ea35520720736e6791df1fb67106
-This record indicates BPF program is loaded or unloaded.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u16 type;
- u16 flags;
- u32 id;
- u8 tag[BPF_TAG_SIZE];
- struct sample_id sample_id;
-};
-.EE
-.in
-.RS
-.TP
-.I type
-is one of the following values:
-.RS
-.TP
-.B PERF_BPF_EVENT_PROG_LOAD
-A BPF program is loaded
-.TP
-.B PERF_BPF_EVENT_PROG_UNLOAD
-A BPF program is unloaded
-.RE
-.TP
-.I id
-is the ID of the BPF program.
-.TP
-.I tag
-is the tag of the BPF program.
-Currently,
-.B BPF_TAG_SIZE
-is defined as 8.
-.RE
-.TP
-.BR PERF_RECORD_CGROUP " (since Linux 5.7)"
-.\" commit 96aaab686505c449e24d76e76507290dcc30e008
-This record indicates a new cgroup is created and activated.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u64 id;
- char path[];
- struct sample_id sample_id;
-};
-.EE
-.in
-.RS
-.TP
-.I id
-is the cgroup identifier.
-This can be also retrieved by
-.BR name_to_handle_at (2)
-on the cgroup path (as a file handle).
-.TP
-.I path
-is the path of the cgroup from the root.
-.RE
-.TP
-.BR PERF_RECORD_TEXT_POKE " (since Linux 5.8)"
-.\" commit e17d43b93e544f5016c0251d2074c15568d5d963
-This record indicates a change in the kernel text.
-This includes addition and removal of the text
-and the corresponding length is zero in this case.
-.IP
-.in +4n
-.EX
-struct {
- struct perf_event_header header;
- u64 addr;
- u16 old_len;
- u16 new_len;
- u8 bytes[];
- struct sample_id sample_id;
-};
-.EE
-.in
-.RS
-.TP
-.I addr
-is the address of the change
-.TP
-.I old_len
-is the old length
-.TP
-.I new_len
-is the new length
-.TP
-.I bytes
-contains old bytes immediately followed by new bytes.
-.RE
-.RE
-.SS Overflow handling
-Events can be set to notify when a threshold is crossed,
-indicating an overflow.
-Overflow conditions can be captured by monitoring the
-event file descriptor with
-.BR poll (2),
-.BR select (2),
-or
-.BR epoll (7).
-Alternatively, the overflow events can be captured via sa signal handler,
-by enabling I/O signaling on the file descriptor; see the discussion of the
-.B F_SETOWN
-and
-.B F_SETSIG
-operations in
-.BR fcntl (2).
-.PP
-Overflows are generated only by sampling events
-.RI ( sample_period
-must have a nonzero value).
-.PP
-There are two ways to generate overflow notifications.
-.PP
-The first is to set a
-.I wakeup_events
-or
-.I wakeup_watermark
-value that will trigger if a certain number of samples
-or bytes have been written to the mmap ring buffer.
-In this case,
-.B POLL_IN
-is indicated.
-.PP
-The other way is by use of the
-.B PERF_EVENT_IOC_REFRESH
-ioctl.
-This ioctl adds to a counter that decrements each time the event overflows.
-When nonzero,
-.B POLL_IN
-is indicated, but
-once the counter reaches 0
-.B POLL_HUP
-is indicated and
-the underlying event is disabled.
-.PP
-Refreshing an event group leader refreshes all siblings and
-refreshing with a parameter of 0 currently enables infinite
-refreshes;
-these behaviors are unsupported and should not be relied on.
-.\" See https://lkml.org/lkml/2011/5/24/337
-.PP
-Starting with Linux 3.18,
-.\" commit 179033b3e064d2cd3f5f9945e76b0a0f0fbf4883
-.B POLL_HUP
-is indicated if the event being monitored is attached to a different
-process and that process exits.
-.SS rdpmc instruction
-Starting with Linux 3.4 on x86, you can use the
-.\" commit c7206205d00ab375839bd6c7ddb247d600693c09
-.I rdpmc
-instruction to get low-latency reads without having to enter the kernel.
-Note that using
-.I rdpmc
-is not necessarily faster than other methods for reading event values.
-.PP
-Support for this can be detected with the
-.I cap_usr_rdpmc
-field in the mmap page; documentation on how
-to calculate event values can be found in that section.
-.PP
-Originally, when rdpmc support was enabled, any process (not just ones
-with an active perf event) could use the rdpmc instruction to access
-the counters.
-Starting with Linux 4.0,
-.\" 7911d3f7af14a614617e38245fedf98a724e46a9
-rdpmc support is only allowed if an event is currently enabled
-in a process's context.
-To restore the old behavior, write the value 2 to
-.IR /sys/devices/cpu/rdpmc .
-.SS perf_event ioctl calls
-Various ioctls act on
-.BR perf_event_open ()
-file descriptors:
-.TP
-.B PERF_EVENT_IOC_ENABLE
-This enables the individual event or event group specified by the
-file descriptor argument.
-.IP
-If the
-.B PERF_IOC_FLAG_GROUP
-bit is set in the ioctl argument, then all events in a group are
-enabled, even if the event specified is not the group leader
-(but see BUGS).
-.TP
-.B PERF_EVENT_IOC_DISABLE
-This disables the individual counter or event group specified by the
-file descriptor argument.
-.IP
-Enabling or disabling the leader of a group enables or disables the
-entire group; that is, while the group leader is disabled, none of the
-counters in the group will count.
-Enabling or disabling a member of a group other than the leader
-affects only that counter; disabling a non-leader
-stops that counter from counting but doesn't affect any other counter.
-.IP
-If the
-.B PERF_IOC_FLAG_GROUP
-bit is set in the ioctl argument, then all events in a group are
-disabled, even if the event specified is not the group leader
-(but see BUGS).
-.TP
-.B PERF_EVENT_IOC_REFRESH
-Non-inherited overflow counters can use this
-to enable a counter for a number of overflows specified by the argument,
-after which it is disabled.
-Subsequent calls of this ioctl add the argument value to the current
-count.
-An overflow notification with
-.B POLL_IN
-set will happen on each overflow until the
-count reaches 0; when that happens a notification with
-.B POLL_HUP
-set is sent and the event is disabled.
-Using an argument of 0 is considered undefined behavior.
-.TP
-.B PERF_EVENT_IOC_RESET
-Reset the event count specified by the
-file descriptor argument to zero.
-This resets only the counts; there is no way to reset the
-multiplexing
-.I time_enabled
-or
-.I time_running
-values.
-.IP
-If the
-.B PERF_IOC_FLAG_GROUP
-bit is set in the ioctl argument, then all events in a group are
-reset, even if the event specified is not the group leader
-(but see BUGS).
-.TP
-.B PERF_EVENT_IOC_PERIOD
-This updates the overflow period for the event.
-.IP
-Since Linux 3.7 (on ARM)
-.\" commit 3581fe0ef37ce12ac7a4f74831168352ae848edc
-and Linux 3.14 (all other architectures),
-.\" commit bad7192b842c83e580747ca57104dd51fe08c223
-the new period takes effect immediately.
-On older kernels, the new period did not take effect until
-after the next overflow.
-.IP
-The argument is a pointer to a 64-bit value containing the
-desired new period.
-.IP
-Prior to Linux 2.6.36,
-.\" commit ad0cf3478de8677f720ee06393b3147819568d6a
-this ioctl always failed due to a bug
-in the kernel.
-.TP
-.B PERF_EVENT_IOC_SET_OUTPUT
-This tells the kernel to report event notifications to the specified
-file descriptor rather than the default one.
-The file descriptors must all be on the same CPU.
-.IP
-The argument specifies the desired file descriptor, or \-1 if
-output should be ignored.
-.TP
-.BR PERF_EVENT_IOC_SET_FILTER " (since Linux 2.6.33)"
-.\" commit 6fb2915df7f0747d9044da9dbff5b46dc2e20830
-This adds an ftrace filter to this event.
-.IP
-The argument is a pointer to the desired ftrace filter.
-.TP
-.BR PERF_EVENT_IOC_ID " (since Linux 3.12)"
-.\" commit cf4957f17f2a89984915ea808876d9c82225b862
-This returns the event ID value for the given event file descriptor.
-.IP
-The argument is a pointer to a 64-bit unsigned integer
-to hold the result.
-.TP
-.BR PERF_EVENT_IOC_SET_BPF " (since Linux 4.1)"
-.\" commit 2541517c32be2531e0da59dfd7efc1ce844644f5
-This allows attaching a Berkeley Packet Filter (BPF)
-program to an existing kprobe tracepoint event.
-You need
-.B CAP_PERFMON
-(since Linux 5.8) or
-.B CAP_SYS_ADMIN
-privileges to use this ioctl.
-.IP
-The argument is a BPF program file descriptor that was created by
-a previous
-.BR bpf (2)
-system call.
-.TP
-.BR PERF_EVENT_IOC_PAUSE_OUTPUT " (since Linux 4.7)"
-.\" commit 86e7972f690c1017fd086cdfe53d8524e68c661c
-This allows pausing and resuming the event's ring-buffer.
-A paused ring-buffer does not prevent generation of samples,
-but simply discards them.
-The discarded samples are considered lost, and cause a
-.B PERF_RECORD_LOST
-sample to be generated when possible.
-An overflow signal may still be triggered by the discarded sample
-even though the ring-buffer remains empty.
-.IP
-The argument is an unsigned 32-bit integer.
-A nonzero value pauses the ring-buffer, while a
-zero value resumes the ring-buffer.
-.TP
-.BR PERF_EVENT_MODIFY_ATTRIBUTES " (since Linux 4.17)"
-.\" commit 32ff77e8cc9e66cc4fb38098f64fd54cc8f54573
-This allows modifying an existing event without the overhead
-of closing and reopening a new event.
-Currently this is supported only for breakpoint events.
-.IP
-The argument is a pointer to a
-.I perf_event_attr
-structure containing the updated event settings.
-.TP
-.BR PERF_EVENT_IOC_QUERY_BPF " (since Linux 4.16)"
-.\" commit f371b304f12e31fe30207c41ca7754564e0ea4dc
-This allows querying which Berkeley Packet Filter (BPF)
-programs are attached to an existing kprobe tracepoint.
-You can only attach one BPF program per event, but you can
-have multiple events attached to a tracepoint.
-Querying this value on one tracepoint event returns the ID
-of all BPF programs in all events attached to the tracepoint.
-You need
-.B CAP_PERFMON
-(since Linux 5.8) or
-.B CAP_SYS_ADMIN
-privileges to use this ioctl.
-.IP
-The argument is a pointer to a structure
-.in +4n
-.EX
-struct perf_event_query_bpf {
- __u32 ids_len;
- __u32 prog_cnt;
- __u32 ids[0];
-};
-.EE
-.in
-.IP
-The
-.I ids_len
-field indicates the number of ids that can fit in the provided
-.I ids
-array.
-The
-.I prog_cnt
-value is filled in by the kernel with the number of attached
-BPF programs.
-The
-.I ids
-array is filled with the ID of each attached BPF program.
-If there are more programs than will fit in the array, then the
-kernel will return
-.B ENOSPC
-and
-.I ids_len
-will indicate the number of program IDs that were successfully copied.
-.\"
-.SS Using prctl(2)
-A process can enable or disable all currently open event groups
-using the
-.BR prctl (2)
-.B PR_TASK_PERF_EVENTS_ENABLE
-and
-.B PR_TASK_PERF_EVENTS_DISABLE
-operations.
-This applies only to events created locally by the calling process.
-This does not apply to events created by other processes attached
-to the calling process or inherited events from a parent process.
-Only group leaders are enabled and disabled,
-not any other members of the groups.
-.SS perf_event related configuration files
-Files in
-.I /proc/sys/kernel/
-.RS 4
-.TP
-.I /proc/sys/kernel/perf_event_paranoid
-The
-.I perf_event_paranoid
-file can be set to restrict access to the performance counters.
-.IP
-.PD 0
-.RS
-.TP
-.B 2
-allow only user-space measurements (default since Linux 4.6).
-.\" default changed in commit 0161028b7c8aebef64194d3d73e43bc3b53b5c66
-.TP
-.B 1
-allow both kernel and user measurements (default before Linux 4.6).
-.TP
-.B 0
-allow access to CPU-specific data but not raw tracepoint samples.
-.TP
-.B \-1
-no restrictions.
-.RE
-.PD
-.IP
-The existence of the
-.I perf_event_paranoid
-file is the official method for determining if a kernel supports
-.BR perf_event_open ().
-.TP
-.I /proc/sys/kernel/perf_event_max_sample_rate
-This sets the maximum sample rate.
-Setting this too high can allow
-users to sample at a rate that impacts overall machine performance
-and potentially lock up the machine.
-The default value is
-100000 (samples per second).
-.TP
-.I /proc/sys/kernel/perf_event_max_stack
-.\" Introduced in c5dfd78eb79851e278b7973031b9ca363da87a7e
-This file sets the maximum depth of stack frame entries reported
-when generating a call trace.
-.TP
-.I /proc/sys/kernel/perf_event_mlock_kb
-Maximum number of pages an unprivileged user can
-.BR mlock (2).
-The default is 516 (kB).
-.RE
-.PP
-Files in
-.I /sys/bus/event_source/devices/
-.PP
-.RS 4
-Since Linux 2.6.34, the kernel supports having multiple PMUs
-available for monitoring.
-Information on how to program these PMUs can be found under
-.IR /sys/bus/event_source/devices/ .
-Each subdirectory corresponds to a different PMU.
-.TP
-.IR /sys/bus/event_source/devices/*/type " (since Linux 2.6.38)"
-.\" commit abe43400579d5de0078c2d3a760e6598e183f871
-This contains an integer that can be used in the
-.I type
-field of
-.I perf_event_attr
-to indicate that you wish to use this PMU.
-.TP
-.IR /sys/bus/event_source/devices/cpu/rdpmc " (since Linux 3.4)"
-.\" commit 0c9d42ed4cee2aa1dfc3a260b741baae8615744f
-If this file is 1, then direct user-space access to the
-performance counter registers is allowed via the rdpmc instruction.
-This can be disabled by echoing 0 to the file.
-.IP
-As of Linux 4.0
-.\" a66734297f78707ce39d756b656bfae861d53f62
-.\" 7911d3f7af14a614617e38245fedf98a724e46a9
-the behavior has changed, so that 1 now means only allow access
-to processes with active perf events, with 2 indicating the old
-allow-anyone-access behavior.
-.TP
-.IR /sys/bus/event_source/devices/*/format/ " (since Linux 3.4)"
-.\" commit 641cc938815dfd09f8fa1ec72deb814f0938ac33
-This subdirectory contains information on the architecture-specific
-subfields available for programming the various
-.I config
-fields in the
-.I perf_event_attr
-struct.
-.IP
-The content of each file is the name of the config field, followed
-by a colon, followed by a series of integer bit ranges separated by
-commas.
-For example, the file
-.I event
-may contain the value
-.I config1:1,6\-10,44
-which indicates that event is an attribute that occupies bits 1,6\[en]10, and 44
-of
-.IR perf_event_attr::config1 .
-.TP
-.IR /sys/bus/event_source/devices/*/events/ " (since Linux 3.4)"
-.\" commit 641cc938815dfd09f8fa1ec72deb814f0938ac33
-This subdirectory contains files with predefined events.
-The contents are strings describing the event settings
-expressed in terms of the fields found in the previously mentioned
-.I ./format/
-directory.
-These are not necessarily complete lists of all events supported by
-a PMU, but usually a subset of events deemed useful or interesting.
-.IP
-The content of each file is a list of attribute names
-separated by commas.
-Each entry has an optional value (either hex or decimal).
-If no value is specified, then it is assumed to be a single-bit
-field with a value of 1.
-An example entry may look like this:
-.IR event=0x2,inv,ldlat=3 .
-.TP
-.I /sys/bus/event_source/devices/*/uevent
-This file is the standard kernel device interface
-for injecting hotplug events.
-.TP
-.IR /sys/bus/event_source/devices/*/cpumask " (since Linux 3.7)"
-.\" commit 314d9f63f385096580e9e2a06eaa0745d92fe4ac
-The
-.I cpumask
-file contains a comma-separated list of integers that
-indicate a representative CPU number for each socket (package)
-on the motherboard.
-This is needed when setting up uncore or northbridge events, as
-those PMUs present socket-wide events.
-.RE
-.SH RETURN VALUE
-On success,
-.BR perf_event_open ()
-returns the new file descriptor.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-The errors returned by
-.BR perf_event_open ()
-can be inconsistent, and may
-vary across processor architectures and performance monitoring units.
-.TP
-.B E2BIG
-Returned if the
-.I perf_event_attr
-.I size
-value is too small
-(smaller than
-.BR PERF_ATTR_SIZE_VER0 ),
-too big (larger than the page size),
-or larger than the kernel supports and the extra bytes are not zero.
-When
-.B E2BIG
-is returned, the
-.I perf_event_attr
-.I size
-field is overwritten by the kernel to be the size of the structure
-it was expecting.
-.TP
-.B EACCES
-Returned when the requested event requires
-.B CAP_PERFMON
-(since Linux 5.8) or
-.B CAP_SYS_ADMIN
-permissions (or a more permissive perf_event paranoid setting).
-Some common cases where an unprivileged process
-may encounter this error:
-attaching to a process owned by a different user;
-monitoring all processes on a given CPU (i.e., specifying the
-.I pid
-argument as \-1);
-and not setting
-.I exclude_kernel
-when the paranoid setting requires it.
-.TP
-.B EBADF
-Returned if the
-.I group_fd
-file descriptor is not valid, or, if
-.B PERF_FLAG_PID_CGROUP
-is set,
-the cgroup file descriptor in
-.I pid
-is not valid.
-.TP
-.BR EBUSY " (since Linux 4.1)"
-.\" bed5b25ad9c8a2f5d735ef0bc746ec870c01c1b0
-Returned if another event already has exclusive
-access to the PMU.
-.TP
-.B EFAULT
-Returned if the
-.I attr
-pointer points at an invalid memory address.
-.TP
-.B EINTR
-Returned when trying to mix perf and ftrace handling
-for a uprobe.
-.TP
-.B EINVAL
-Returned if the specified event is invalid.
-There are many possible reasons for this.
-A not-exhaustive list:
-.I sample_freq
-is higher than the maximum setting;
-the
-.I cpu
-to monitor does not exist;
-.I read_format
-is out of range;
-.I sample_type
-is out of range;
-the
-.I flags
-value is out of range;
-.I exclusive
-or
-.I pinned
-set and the event is not a group leader;
-the event
-.I config
-values are out of range or set reserved bits;
-the generic event selected is not supported; or
-there is not enough room to add the selected event.
-.TP
-.B EMFILE
-Each opened event uses one file descriptor.
-If a large number of events are opened,
-the per-process limit on the number of open file descriptors will be reached,
-and no more events can be created.
-.TP
-.B ENODEV
-Returned when the event involves a feature not supported
-by the current CPU.
-.TP
-.B ENOENT
-Returned if the
-.I type
-setting is not valid.
-This error is also returned for
-some unsupported generic events.
-.TP
-.B ENOSPC
-Prior to Linux 3.3, if there was not enough room for the event,
-.\" commit aa2bc1ade59003a379ffc485d6da2d92ea3370a6
-.B ENOSPC
-was returned.
-In Linux 3.3, this was changed to
-.BR EINVAL .
-.B ENOSPC
-is still returned if you try to add more breakpoint events
-than supported by the hardware.
-.TP
-.B ENOSYS
-Returned if
-.B PERF_SAMPLE_STACK_USER
-is set in
-.I sample_type
-and it is not supported by hardware.
-.TP
-.B EOPNOTSUPP
-Returned if an event requiring a specific hardware feature is
-requested but there is no hardware support.
-This includes requesting low-skid events if not supported,
-branch tracing if it is not available, sampling if no PMU
-interrupt is available, and branch stacks for software events.
-.TP
-.BR EOVERFLOW " (since Linux 4.8)"
-.\" 97c79a38cd454602645f0470ffb444b3b75ce574
-Returned if
-.B PERF_SAMPLE_CALLCHAIN
-is requested and
-.I sample_max_stack
-is larger than the maximum specified in
-.IR /proc/sys/kernel/perf_event_max_stack .
-.TP
-.B EPERM
-Returned on many (but not all) architectures when an unsupported
-.IR exclude_hv ", " exclude_idle ", " exclude_user ", or " exclude_kernel
-setting is specified.
-.IP
-It can also happen, as with
-.BR EACCES ,
-when the requested event requires
-.B CAP_PERFMON
-(since Linux 5.8) or
-.B CAP_SYS_ADMIN
-permissions (or a more permissive perf_event paranoid setting).
-This includes setting a breakpoint on a kernel address,
-and (since Linux 3.13) setting a kernel function-trace tracepoint.
-.\" commit a4e95fc2cbb31d70a65beffeaf8773f881328c34
-.TP
-.B ESRCH
-Returned if attempting to attach to a process that does not exist.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-.BR perf_event_open ()
-was introduced in Linux 2.6.31 but was called
-.\" commit 0793a61d4df8daeac6492dbf8d2f3e5713caae5e
-.BR perf_counter_open ().
-It was renamed in Linux 2.6.32.
-.\" commit cdd6c482c9ff9c55475ee7392ec8f672eddb7be6
-.SH NOTES
-The official way of knowing if
-.BR perf_event_open ()
-support is enabled is checking
-for the existence of the file
-.IR /proc/sys/kernel/perf_event_paranoid .
-.PP
-.B CAP_PERFMON
-capability (since Linux 5.8) provides secure approach to
-performance monitoring and observability operations in a system
-according to the principal of least privilege (POSIX IEEE 1003.1e).
-Accessing system performance monitoring and observability operations
-using
-.B CAP_PERFMON
-rather than the much more powerful
-.B CAP_SYS_ADMIN
-excludes chances to misuse credentials and makes operations more secure.
-.B CAP_SYS_ADMIN
-usage for secure system performance monitoring and observability
-is discouraged in favor of the
-.B CAP_PERFMON
-capability.
-.SH BUGS
-The
-.B F_SETOWN_EX
-option to
-.BR fcntl (2)
-is needed to properly get overflow signals in threads.
-This was introduced in Linux 2.6.32.
-.\" commit ba0a6c9f6fceed11c6a99e8326f0477fe383e6b5
-.PP
-Prior to Linux 2.6.33 (at least for x86),
-.\" commit b690081d4d3f6a23541493f1682835c3cd5c54a1
-the kernel did not check
-if events could be scheduled together until read time.
-The same happens on all known kernels if the NMI watchdog is enabled.
-This means to see if a given set of events works you have to
-.BR perf_event_open (),
-start, then read before you know for sure you
-can get valid measurements.
-.PP
-Prior to Linux 2.6.34,
-.\" FIXME . cannot find a kernel commit for this one
-event constraints were not enforced by the kernel.
-In that case, some events would silently return "0" if the kernel
-scheduled them in an improper counter slot.
-.PP
-Prior to Linux 2.6.34, there was a bug when multiplexing where the
-wrong results could be returned.
-.\" commit 45e16a6834b6af098702e5ea6c9a40de42ff77d8
-.PP
-Kernels from Linux 2.6.35 to Linux 2.6.39 can quickly crash the kernel if
-"inherit" is enabled and many threads are started.
-.\" commit 38b435b16c36b0d863efcf3f07b34a6fac9873fd
-.PP
-Prior to Linux 2.6.35,
-.\" commit 050735b08ca8a016bbace4445fa025b88fee770b
-.B PERF_FORMAT_GROUP
-did not work with attached processes.
-.PP
-There is a bug in the kernel code between
-Linux 2.6.36 and Linux 3.0 that ignores the
-"watermark" field and acts as if a wakeup_event
-was chosen if the union has a
-nonzero value in it.
-.\" commit 4ec8363dfc1451f8c8f86825731fe712798ada02
-.PP
-From Linux 2.6.31 to Linux 3.4, the
-.B PERF_IOC_FLAG_GROUP
-ioctl argument was broken and would repeatedly operate
-on the event specified rather than iterating across
-all sibling events in a group.
-.\" commit 724b6daa13e100067c30cfc4d1ad06629609dc4e
-.PP
-From Linux 3.4 to Linux 3.11, the mmap
-.\" commit fa7315871046b9a4c48627905691dbde57e51033
-.I cap_usr_rdpmc
-and
-.I cap_usr_time
-bits mapped to the same location.
-Code should migrate to the new
-.I cap_user_rdpmc
-and
-.I cap_user_time
-fields instead.
-.PP
-Always double-check your results!
-Various generalized events have had wrong values.
-For example, retired branches measured
-the wrong thing on AMD machines until Linux 2.6.35.
-.\" commit f287d332ce835f77a4f5077d2c0ef1e3f9ea42d2
-.SH EXAMPLES
-The following is a short example that measures the total
-instruction count of a call to
-.BR printf (3).
-.PP
-.\" SRC BEGIN (perf_event_open.c)
-.EX
-#include <linux/perf_event.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <sys/syscall.h>
-#include <unistd.h>
-\&
-static long
-perf_event_open(struct perf_event_attr *hw_event, pid_t pid,
- int cpu, int group_fd, unsigned long flags)
-{
- int ret;
-\&
- ret = syscall(SYS_perf_event_open, hw_event, pid, cpu,
- group_fd, flags);
- return ret;
-}
-\&
-int
-main(void)
-{
- int fd;
- long long count;
- struct perf_event_attr pe;
-\&
- memset(&pe, 0, sizeof(pe));
- pe.type = PERF_TYPE_HARDWARE;
- pe.size = sizeof(pe);
- pe.config = PERF_COUNT_HW_INSTRUCTIONS;
- pe.disabled = 1;
- pe.exclude_kernel = 1;
- pe.exclude_hv = 1;
-\&
- fd = perf_event_open(&pe, 0, \-1, \-1, 0);
- if (fd == \-1) {
- fprintf(stderr, "Error opening leader %llx\en", pe.config);
- exit(EXIT_FAILURE);
- }
-\&
- ioctl(fd, PERF_EVENT_IOC_RESET, 0);
- ioctl(fd, PERF_EVENT_IOC_ENABLE, 0);
-\&
- printf("Measuring instruction count for this printf\en");
-\&
- ioctl(fd, PERF_EVENT_IOC_DISABLE, 0);
- read(fd, &count, sizeof(count));
-\&
- printf("Used %lld instructions\en", count);
-\&
- close(fd);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR perf (1),
-.BR fcntl (2),
-.BR mmap (2),
-.BR open (2),
-.BR prctl (2),
-.BR read (2)
-.PP
-.I Documentation/admin\-guide/perf\-security.rst
-in the kernel source tree
diff --git a/man2/perfmonctl.2 b/man2/perfmonctl.2
deleted file mode 100644
index d6d36a0a0..000000000
--- a/man2/perfmonctl.2
+++ /dev/null
@@ -1,193 +0,0 @@
-.\" Copyright (C) 2006 Red Hat, Inc. All Rights Reserved.
-.\" and Copyright (C) 2013 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Written by Ivana Varekova <varekova@redhat.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH perfmonctl 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-perfmonctl \- interface to IA-64 performance monitoring unit
-.SH SYNOPSIS
-.nf
-.B #include <syscall.h>
-.B #include <perfmon.h>
-.PP
-.BI "long perfmonctl(int " fd ", int " cmd ", void " arg [. narg "], int " narg ");"
-.fi
-.PP
-.IR Note :
-There is no glibc wrapper for this system call; see HISTORY.
-.SH DESCRIPTION
-The IA-64-specific
-.BR perfmonctl ()
-system call provides an interface to the
-PMU (performance monitoring unit).
-The PMU consists of PMD (performance monitoring data) registers and
-PMC (performance monitoring control) registers,
-which gather hardware statistics.
-.PP
-.BR perfmonctl ()
-applies the operation
-.I cmd
-to the input arguments specified by
-.IR arg .
-The number of arguments is defined by \fInarg\fR.
-The
-.I fd
-argument specifies the perfmon context to operate on.
-.PP
-Supported values for
-.I cmd
-are:
-.TP
-.B PFM_CREATE_CONTEXT
-.nf
-.BI "perfmonctl(int " fd ", PFM_CREATE_CONTEXT, pfarg_context_t *" ctxt ", 1);"
-.fi
-Set up a context.
-.IP
-The
-.I fd
-parameter is ignored.
-A new perfmon context is created as specified in
-.I ctxt
-and its file descriptor is returned in \fIctxt\->ctx_fd\fR.
-.IP
-The file descriptor can be used in subsequent calls to
-.BR perfmonctl ()
-and can be used to read event notifications (type
-.IR pfm_msg_t )
-using
-.BR read (2).
-The file descriptor is pollable using
-.BR select (2),
-.BR poll (2),
-and
-.BR epoll (7).
-.IP
-The context can be destroyed by calling
-.BR close (2)
-on the file descriptor.
-.TP
-.B PFM_WRITE_PMCS
-.\" pfm_write_pmcs()
-.nf
-.BI "perfmonctl(int " fd ", PFM_WRITE_PMCS, pfarg_reg_t *" pmcs ", n);"
-.fi
-Set PMC registers.
-.TP
-.B PFM_WRITE_PMDS
-.nf
-.BI "perfmonctl(int " fd ", PFM_WRITE_PMDS, pfarg_reg_t *" pmds ", n);"
-.fi
-.\" pfm_write_pmds()
-Set PMD registers.
-.TP
-.B PFM_READ_PMDS
-.\" pfm_read_pmds()
-.nf
-.BI "perfmonctl(int " fd ", PFM_READ_PMDS, pfarg_reg_t *" pmds ", n);"
-.fi
-Read PMD registers.
-.TP
-.B PFM_START
-.\" pfm_start()
-.nf
-.\" .BI "perfmonctl(int " fd ", PFM_START, arg, 1);
-.BI "perfmonctl(int " fd ", PFM_START, NULL, 0);"
-.fi
-Start monitoring.
-.TP
-.B PFM_STOP
-.\" pfm_stop()
-.nf
-.BI "perfmonctl(int " fd ", PFM_STOP, NULL, 0);"
-.fi
-Stop monitoring.
-.TP
-.B PFM_LOAD_CONTEXT
-.\" pfm_context_load()
-.nf
-.BI "perfmonctl(int " fd ", PFM_LOAD_CONTEXT, pfarg_load_t *" largs ", 1);"
-.fi
-Attach the context to a thread.
-.TP
-.B PFM_UNLOAD_CONTEXT
-.\" pfm_context_unload()
-.nf
-.BI "perfmonctl(int " fd ", PFM_UNLOAD_CONTEXT, NULL, 0);"
-.fi
-Detach the context from a thread.
-.TP
-.B PFM_RESTART
-.\" pfm_restart()
-.nf
-.BI "perfmonctl(int " fd ", PFM_RESTART, NULL, 0);"
-.fi
-Restart monitoring after receiving an overflow notification.
-.TP
-.B PFM_GET_FEATURES
-.\" pfm_get_features()
-.nf
-.BI "perfmonctl(int " fd ", PFM_GET_FEATURES, pfarg_features_t *" arg ", 1);"
-.fi
-.TP
-.B PFM_DEBUG
-.\" pfm_debug()
-.nf
-.BI "perfmonctl(int " fd ", PFM_DEBUG, " val ", 0);"
-.fi
-If
-.I val
-is nonzero, enable debugging mode, otherwise disable.
-.TP
-.B PFM_GET_PMC_RESET_VAL
-.\" pfm_get_pmc_reset()
-.nf
-.BI "perfmonctl(int " fd ", PFM_GET_PMC_RESET_VAL, pfarg_reg_t *" req ", n);"
-.fi
-Reset PMC registers to default values.
-.\"
-.\"
-.\" .TP
-.\" .B PFM_CREATE_EVTSETS
-.\"
-.\" create or modify event sets
-.\" .nf
-.\" .BI "perfmonctl(int " fd ", PFM_CREATE_EVTSETS, pfarg_setdesc_t *desc , n);
-.\" .fi
-.\" .TP
-.\" .B PFM_DELETE_EVTSETS
-.\" delete event sets
-.\" .nf
-.\" .BI "perfmonctl(int " fd ", PFM_DELETE_EVTSET, pfarg_setdesc_t *desc , n);
-.\" .fi
-.\" .TP
-.\" .B PFM_GETINFO_EVTSETS
-.\" get information about event sets
-.\" .nf
-.\" .BI "perfmonctl(int " fd ", PFM_GETINFO_EVTSETS, pfarg_setinfo_t *info, n);
-.\" .fi
-.SH RETURN VALUE
-.BR perfmonctl ()
-returns zero when the operation is successful.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH STANDARDS
-Linux on IA-64.
-.SH HISTORY
-Added in Linux 2.4;
-.\" commit ecf5b72d5f66af843f189dfe9ce31598c3e48ad7
-removed in Linux 5.10.
-.PP
-This system call was broken for many years,
-and ultimately removed in Linux 5.10.
-.PP
-glibc does not provide a wrapper for this system call;
-on kernels where it exists, call it using
-.BR syscall (2).
-.SH SEE ALSO
-.BR gprof (1)
-.PP
-The perfmon2 interface specification
diff --git a/man2/personality.2 b/man2/personality.2
deleted file mode 100644
index dc916b05c..000000000
--- a/man2/personality.2
+++ /dev/null
@@ -1,296 +0,0 @@
-.\" Copyright (C) 1995, Thomas K. Dyas <tdyas@eden.rutgers.edu>
-.\" and Copyright (C) 2016, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Created Sat Aug 21 1995 Thomas K. Dyas <tdyas@eden.rutgers.edu>
-.\"
-.\" typo corrected, aeb, 950825
-.\" added layout change from joey, 960722
-.\" changed prototype, documented 0xffffffff, aeb, 030101
-.\" Modified 2004-11-03 patch from Martin Schulze <joey@infodrom.org>
-.\"
-.TH personality 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-personality \- set the process execution domain
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/personality.h>
-.PP
-.BI "int personality(unsigned long " persona );
-.fi
-.SH DESCRIPTION
-Linux supports different execution domains, or personalities, for each
-process.
-Among other things, execution domains tell Linux how to map
-signal numbers into signal actions.
-The execution domain system allows
-Linux to provide limited support for binaries compiled under other
-UNIX-like operating systems.
-.PP
-If
-.I persona
-is not
-0xffffffff, then
-.BR personality ()
-sets the caller's execution domain to the value specified by
-.IR persona .
-Specifying
-.I persona
-as 0xffffffff provides a way of retrieving
-the current persona without changing it.
-.PP
-A list of the available execution domains can be found in
-.IR <sys/personality.h> .
-The execution domain is a 32-bit value in which the top three
-bytes are set aside for flags that cause the kernel to modify the
-behavior of certain system calls so as to emulate historical or
-architectural quirks.
-The least significant byte is a value defining the personality
-the kernel should assume.
-The flag values are as follows:
-.TP
-.BR ADDR_COMPAT_LAYOUT " (since Linux 2.6.9)"
-With this flag set, provide legacy virtual address space layout.
-.TP
-.BR ADDR_NO_RANDOMIZE " (since Linux 2.6.12)"
-With this flag set, disable address-space-layout randomization.
-.TP
-.BR ADDR_LIMIT_32BIT " (since Linux 2.2)"
-Limit the address space to 32 bits.
-.TP
-.BR ADDR_LIMIT_3GB " (since Linux 2.4.0)"
-With this flag set, use 0xc0000000 as the offset at which to search
-a virtual memory chunk on
-.BR mmap (2);
-otherwise use 0xffffe000.
-Applies to 32-bit x86 processes only.
-.TP
-.BR FDPIC_FUNCPTRS " (since Linux 2.6.11)"
-User-space function pointers to signal handlers point
-to descriptors.
-Applies only to ARM if BINFMT_ELF_FDPIC and SuperH.
-.TP
-.BR MMAP_PAGE_ZERO " (since Linux 2.4.0)"
-Map page 0 as read-only
-(to support binaries that depend on this SVr4 behavior).
-.TP
-.BR READ_IMPLIES_EXEC " (since Linux 2.6.8)"
-With this flag set,
-.B PROT_READ
-implies
-.B PROT_EXEC
-for
-.BR mmap (2).
-.TP
-.BR SHORT_INODE " (since Linux 2.4.0)"
-No effect.
-.TP
-.BR STICKY_TIMEOUTS " (since Linux 1.2.0)"
-With this flag set,
-.BR select (2),
-.BR pselect (2),
-and
-.BR ppoll (2)
-do not modify the returned timeout argument when
-interrupted by a signal handler.
-.TP
-.BR UNAME26 " (since Linux 3.1)"
-Have
-.BR uname (2)
-report a 2.6.(40+x) version number rather than a MAJOR.x version number.
-Added as a stopgap measure to support broken applications that
-could not handle the
-kernel version-numbering switch from Linux 2.6.x to Linux 3.x.
-.TP
-.BR WHOLE_SECONDS " (since Linux 1.2.0)"
-No effect.
-.PP
-The available execution domains are:
-.TP
-.BR PER_BSD " (since Linux 1.2.0)"
-BSD. (No effects.)
-.TP
-.BR PER_HPUX " (since Linux 2.4)"
-Support for 32-bit HP/UX.
-This support was never complete, and was dropped so that since Linux 4.0,
-this value has no effect.
-.TP
-.BR PER_IRIX32 " (since Linux 2.2)"
-IRIX 5 32-bit.
-Never fully functional; support dropped in Linux 2.6.27.
-Implies
-.BR STICKY_TIMEOUTS .
-.TP
-.BR PER_IRIX64 " (since Linux 2.2)"
-IRIX 6 64-bit.
-Implies
-.BR STICKY_TIMEOUTS ;
-otherwise no effect.
-.TP
-.BR PER_IRIXN32 " (since Linux 2.2)"
-IRIX 6 new 32-bit.
-Implies
-.BR STICKY_TIMEOUTS ;
-otherwise no effect.
-.TP
-.BR PER_ISCR4 " (since Linux 1.2.0)"
-Implies
-.BR STICKY_TIMEOUTS ;
-otherwise no effect.
-.TP
-.BR PER_LINUX " (since Linux 1.2.0)"
-Linux.
-.TP
-.BR PER_LINUX32 " (since Linux 2.2)"
-.BR uname (2)
-returns the name of the 32-bit architecture in the
-.I machine
-field ("i686" instead of "x86_64", &c.).
-.IP
-Under ia64 (Itanium), processes with this personality don't have the
-O_LARGEFILE
-.BR open (2)
-flag forced.
-.IP
-Under 64-bit ARM, setting this personality is forbidden if
-.BR execve (2)ing
-a 32-bit process would also be forbidden
-(cf. the allow_mismatched_32bit_el0 kernel parameter and
-.IR Documentation/arm64/asymmetric-32bit.rst ).
-.TP
-.BR PER_LINUX32_3GB " (since Linux 2.4)"
-Same as
-.BR PER_LINUX32 ,
-but implies
-.BR ADDR_LIMIT_3GB .
-.TP
-.BR PER_LINUX_32BIT " (since Linux 2.0)"
-Same as
-.BR PER_LINUX ,
-but implies
-.BR ADDR_LIMIT_32BIT .
-.TP
-.BR PER_LINUX_FDPIC " (since Linux 2.6.11)"
-Same as
-.BR PER_LINUX ,
-but implies
-.BR FDPIC_FUNCPTRS .
-.TP
-.BR PER_OSF4 " (since Linux 2.4)"
-OSF/1 v4.
-.\" commit 987f20a9dcce3989e48d87cff3952c095c994445
-No effect since Linux 6.1, which removed a.out binary support.
-Before, on alpha,
-.\" Following is from a comment in arch/alpha/kernel/osf_sys.c
-would clear top 32 bits of iov_len in the user's buffer for
-compatibility with old versions of OSF/1 where iov_len
-was defined as.
-.IR int .
-.TP
-.BR PER_OSR5 " (since Linux 2.4)"
-SCO OpenServer 5.
-Implies
-.B STICKY_TIMEOUTS
-and
-.BR WHOLE_SECONDS ;
-otherwise no effect.
-.TP
-.BR PER_RISCOS " (since Linux 2.3.7; macro since Linux 2.3.13)"
-Acorn RISC OS/Arthur (MIPS).
-No effect.
-.\" commit 125ec7b4e90cbae4eed5a7ff1ee479cc331dcf3c
-Up to Linux v4.0, would set the emulation altroot to
-.I /usr/gnemul/riscos
-(cf.\&
-.BR PER_SUNOS ,
-below).
-Before then, up to Linux 2.6.3, just Arthur emulation.
-.TP
-.BR PER_SCOSVR3 " (since Linux 1.2.0)"
-SCO UNIX System V Release 3.
-Same as
-.BR PER_OSR5 ,
-but also implies
-.BR SHORT_INODE .
-.TP
-.BR PER_SOLARIS " (since Linux 2.4)"
-Solaris.
-Implies
-.BR STICKY_TIMEOUTS ;
-otherwise no effect.
-.TP
-.BR PER_SUNOS " (since Linux 2.4.0)"
-Sun OS.
-Same as
-.BR PER_BSD ,
-but implies
-.BR STICKY_TIMEOUTS .
-Prior to Linux 2.6.26,
-diverted library and dynamic linker searches to
-.IR /usr/gnemul .
-Buggy, largely unmaintained, and almost entirely unused.
-.TP
-.BR PER_SVR3 " (since Linux 1.2.0)"
-AT&T UNIX System V Release 3.
-Implies
-.B STICKY_TIMEOUTS
-and
-.BR SHORT_INODE ;
-otherwise no effect.
-.TP
-.BR PER_SVR4 " (since Linux 1.2.0)"
-AT&T UNIX System V Release 4.
-Implies
-.B STICKY_TIMEOUTS
-and
-.BR MMAP_PAGE_ZERO ;
-otherwise no effect.
-.TP
-.BR PER_UW7 " (since Linux 2.4)"
-UnixWare 7.
-Implies
-.B STICKY_TIMEOUTS
-and
-.BR MMAP_PAGE_ZERO ;
-otherwise no effect.
-.TP
-.BR PER_WYSEV386 " (since Linux 1.2.0)"
-WYSE UNIX System V/386.
-Implies
-.B STICKY_TIMEOUTS
-and
-.BR SHORT_INODE ;
-otherwise no effect.
-.TP
-.BR PER_XENIX " (since Linux 1.2.0)"
-XENIX.
-Implies
-.B STICKY_TIMEOUTS
-and
-.BR SHORT_INODE ;
-otherwise no effect.
-.SH RETURN VALUE
-On success, the previous
-.I persona
-is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-The kernel was unable to change the personality.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 1.1.20,
-.\" (and thus first in a stable kernel release with Linux 1.2.0)
-glibc 2.3.
-.\" personality wrapper first appeared in glibc 1.90,
-.\" <sys/personality.h> was added later in glibc 2.2.91.
-.SH SEE ALSO
-.BR setarch (8)
diff --git a/man2/phys.2 b/man2/phys.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/phys.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/pidfd_getfd.2 b/man2/pidfd_getfd.2
deleted file mode 100644
index fe4831b58..000000000
--- a/man2/pidfd_getfd.2
+++ /dev/null
@@ -1,144 +0,0 @@
-.\" Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pidfd_getfd 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pidfd_getfd \- obtain a duplicate of another process's file descriptor
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_pidfd_getfd, int " pidfd ", int " targetfd ,
-.BI " unsigned int " flags );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR pidfd_getfd (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR pidfd_getfd ()
-system call allocates a new file descriptor in the calling process.
-This new file descriptor is a duplicate of an existing file descriptor,
-.IR targetfd ,
-in the process referred to by the PID file descriptor
-.IR pidfd .
-.PP
-The duplicate file descriptor refers to the same open file description (see
-.BR open (2))
-as the original file descriptor in the process referred to by
-.IR pidfd .
-The two file descriptors thus share file status flags and file offset.
-Furthermore, operations on the underlying file object
-(for example, assigning an address to a socket object using
-.BR bind (2))
-can equally be performed via the duplicate file descriptor.
-.PP
-The close-on-exec flag
-.RB ( FD_CLOEXEC ;
-see
-.BR fcntl (2))
-is set on the file descriptor returned by
-.BR pidfd_getfd ().
-.PP
-The
-.I flags
-argument is reserved for future use.
-Currently, it must be specified as 0.
-.PP
-Permission to duplicate another process's file descriptor
-is governed by a ptrace access mode
-.B PTRACE_MODE_ATTACH_REALCREDS
-check (see
-.BR ptrace (2)).
-.SH RETURN VALUE
-On success,
-.BR pidfd_getfd ()
-returns a file descriptor (a nonnegative integer).
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I pidfd
-is not a valid PID file descriptor.
-.TP
-.B EBADF
-.I targetfd
-is not an open file descriptor in the process referred to by
-.IR pidfd .
-.TP
-.B EINVAL
-.I flags
-is not 0.
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached
-(see the description of
-.B RLIMIT_NOFILE
-in
-.BR getrlimit (2)).
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B EPERM
-The calling process did not have
-.B PTRACE_MODE_ATTACH_REALCREDS
-permissions (see
-.BR ptrace (2))
-over the process referred to by
-.IR pidfd .
-.TP
-.B ESRCH
-The process referred to by
-.I pidfd
-does not exist
-(i.e., it has terminated and been waited on).
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 5.6.
-.\" commit 8649c322f75c96e7ced2fec201e123b2b073bf09
-.SH NOTES
-For a description of PID file descriptors, see
-.BR pidfd_open (2).
-.PP
-The effect of
-.BR pidfd_getfd ()
-is similar to the use of
-.B SCM_RIGHTS
-messages described in
-.BR unix (7),
-but differs in the following respects:
-.IP \[bu] 3
-In order to pass a file descriptor using an
-.B SCM_RIGHTS
-message,
-the two processes must first establish a UNIX domain socket connection.
-.IP \[bu]
-The use of
-.B SCM_RIGHTS
-requires cooperation on the part of the process whose
-file descriptor is being copied.
-By contrast, no such cooperation is necessary when using
-.BR pidfd_getfd ().
-.IP \[bu]
-The ability to use
-.BR pidfd_getfd ()
-is restricted by a
-.B PTRACE_MODE_ATTACH_REALCREDS
-ptrace access mode check.
-.SH SEE ALSO
-.BR clone3 (2),
-.BR dup (2),
-.BR kcmp (2),
-.BR pidfd_open (2)
diff --git a/man2/pidfd_open.2 b/man2/pidfd_open.2
deleted file mode 100644
index a1eac4cf3..000000000
--- a/man2/pidfd_open.2
+++ /dev/null
@@ -1,269 +0,0 @@
-.\" Copyright (c) 2019 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pidfd_open 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pidfd_open \- obtain a file descriptor that refers to a process
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_pidfd_open, pid_t " pid ", unsigned int " flags );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR pidfd_open (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR pidfd_open ()
-system call creates a file descriptor that refers to
-the process whose PID is specified in
-.IR pid .
-The file descriptor is returned as the function result;
-the close-on-exec flag is set on the file descriptor.
-.PP
-The
-.I flags
-argument either has the value 0, or contains the following flag:
-.TP
-.BR PIDFD_NONBLOCK " (since Linux 5.10)"
-.\" commit 4da9af0014b51c8b015ed8c622440ef28912efe6
-Return a nonblocking file descriptor.
-If the process referred to by the file descriptor has not yet terminated,
-then an attempt to wait on the file descriptor using
-.BR waitid (2)
-will immediately return the error
-.B EAGAIN
-rather than blocking.
-.SH RETURN VALUE
-On success,
-.BR pidfd_open ()
-returns a file descriptor (a nonnegative integer).
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I flags
-is not valid.
-.TP
-.B EINVAL
-.I pid
-is not valid.
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached
-(see the description of
-.B RLIMIT_NOFILE
-in
-.BR getrlimit (2)).
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENODEV
-The anonymous inode filesystem is not available in this kernel.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ESRCH
-The process specified by
-.I pid
-does not exist.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 5.3.
-.SH NOTES
-The following code sequence can be used to obtain a file descriptor
-for the child of
-.BR fork (2):
-.PP
-.in +4n
-.EX
-pid = fork();
-if (pid > 0) { /* If parent */
- pidfd = pidfd_open(pid, 0);
- ...
-}
-.EE
-.in
-.PP
-Even if the child has already terminated by the time of the
-.BR pidfd_open ()
-call, its PID will not have been recycled and the returned
-file descriptor will refer to the resulting zombie process.
-Note, however, that this is guaranteed only if the following
-conditions hold true:
-.IP \[bu] 3
-the disposition of
-.B SIGCHLD
-has not been explicitly set to
-.B SIG_IGN
-(see
-.BR sigaction (2));
-.IP \[bu]
-the
-.B SA_NOCLDWAIT
-flag was not specified while establishing a handler for
-.B SIGCHLD
-or while setting the disposition of that signal to
-.B SIG_DFL
-(see
-.BR sigaction (2));
-and
-.IP \[bu]
-the zombie process was not reaped elsewhere in the program
-(e.g., either by an asynchronously executed signal handler or by
-.BR wait (2)
-or similar in another thread).
-.PP
-If any of these conditions does not hold,
-then the child process (along with a PID file descriptor that refers to it)
-should instead be created using
-.BR clone (2)
-with the
-.B CLONE_PIDFD
-flag.
-.\"
-.SS Use cases for PID file descriptors
-A PID file descriptor returned by
-.BR pidfd_open ()
-(or by
-.BR clone (2)
-with the
-.B CLONE_PID
-flag) can be used for the following purposes:
-.IP \[bu] 3
-The
-.BR pidfd_send_signal (2)
-system call can be used to send a signal to the process referred to by
-a PID file descriptor.
-.IP \[bu]
-A PID file descriptor can be monitored using
-.BR poll (2),
-.BR select (2),
-and
-.BR epoll (7).
-When the process that it refers to terminates,
-these interfaces indicate the file descriptor as readable.
-Note, however, that in the current implementation,
-nothing can be read from the file descriptor
-.RB ( read (2)
-on the file descriptor fails with the error
-.BR EINVAL ).
-.IP \[bu]
-If the PID file descriptor refers to a child of the calling process,
-then it can be waited on using
-.BR waitid (2).
-.IP \[bu]
-The
-.BR pidfd_getfd (2)
-system call can be used to obtain a duplicate of a file descriptor
-of another process referred to by a PID file descriptor.
-.IP \[bu]
-A PID file descriptor can be used as the argument of
-.BR setns (2)
-in order to move into one or more of the same namespaces as the process
-referred to by the file descriptor.
-.IP \[bu]
-A PID file descriptor can be used as the argument of
-.BR process_madvise (2)
-in order to provide advice on the memory usage patterns of the process
-referred to by the file descriptor.
-.PP
-The
-.BR pidfd_open ()
-system call is the preferred way of obtaining a PID file descriptor
-for an already existing process.
-The alternative is to obtain a file descriptor by opening a
-.IR /proc/ pid
-directory.
-However, the latter technique is possible only if the
-.BR proc (5)
-filesystem is mounted;
-furthermore, the file descriptor obtained in this way is
-.I not
-pollable and can't be waited on with
-.BR waitid (2).
-.SH EXAMPLES
-The program below opens a PID file descriptor for the
-process whose PID is specified as its command-line argument.
-It then uses
-.BR poll (2)
-to monitor the file descriptor for process exit, as indicated by an
-.B EPOLLIN
-event.
-.\"
-.SS Program source
-\&
-.\" SRC BEGIN (pidfd_open.c)
-.EX
-#define _GNU_SOURCE
-#include <poll.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/syscall.h>
-#include <unistd.h>
-\&
-static int
-pidfd_open(pid_t pid, unsigned int flags)
-{
- return syscall(SYS_pidfd_open, pid, flags);
-}
-\&
-int
-main(int argc, char *argv[])
-{
- int pidfd, ready;
- struct pollfd pollfd;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s <pid>\en", argv[0]);
- exit(EXIT_SUCCESS);
- }
-\&
- pidfd = pidfd_open(atoi(argv[1]), 0);
- if (pidfd == \-1) {
- perror("pidfd_open");
- exit(EXIT_FAILURE);
- }
-\&
- pollfd.fd = pidfd;
- pollfd.events = POLLIN;
-\&
- ready = poll(&pollfd, 1, \-1);
- if (ready == \-1) {
- perror("poll");
- exit(EXIT_FAILURE);
- }
-\&
- printf("Events (%#x): POLLIN is %sset\en", pollfd.revents,
- (pollfd.revents & POLLIN) ? "" : "not ");
-\&
- close(pidfd);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR clone (2),
-.BR kill (2),
-.BR pidfd_getfd (2),
-.BR pidfd_send_signal (2),
-.BR poll (2),
-.BR process_madvise (2),
-.BR select (2),
-.BR setns (2),
-.BR waitid (2),
-.BR epoll (7)
diff --git a/man2/pidfd_send_signal.2 b/man2/pidfd_send_signal.2
deleted file mode 100644
index 3693664c0..000000000
--- a/man2/pidfd_send_signal.2
+++ /dev/null
@@ -1,240 +0,0 @@
-.\" Copyright (c) 2019 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pidfd_send_signal 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pidfd_send_signal \- send a signal to a process specified by a file descriptor
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/signal.h>" " /* Definition of " SIG* " constants */"
-.BR "#include <signal.h>" " /* Definition of " SI_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_pidfd_send_signal, int " pidfd ", int " sig ,
-.BI " siginfo_t *_Nullable " info ", unsigned int " flags );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR pidfd_send_signal (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR pidfd_send_signal ()
-system call sends the signal
-.I sig
-to the target process referred to by
-.IR pidfd ,
-a PID file descriptor that refers to a process.
-.\" See the very detailed commit message for kernel commit
-.\" 3eb39f47934f9d5a3027fe00d906a45fe3a15fad
-.PP
-If the
-.I info
-argument points to a
-.I siginfo_t
-buffer, that buffer should be populated as described in
-.BR rt_sigqueueinfo (2).
-.PP
-If the
-.I info
-argument is a NULL pointer,
-this is equivalent to specifying a pointer to a
-.I siginfo_t
-buffer whose fields match the values that are
-implicitly supplied when a signal is sent using
-.BR kill (2):
-.PP
-.PD 0
-.IP \[bu] 3
-.I si_signo
-is set to the signal number;
-.IP \[bu]
-.I si_errno
-is set to 0;
-.IP \[bu]
-.I si_code
-is set to
-.BR SI_USER ;
-.IP \[bu]
-.I si_pid
-is set to the caller's PID; and
-.IP \[bu]
-.I si_uid
-is set to the caller's real user ID.
-.PD
-.PP
-The calling process must either be in the same PID namespace as the
-process referred to by
-.IR pidfd ,
-or be in an ancestor of that namespace.
-.PP
-The
-.I flags
-argument is reserved for future use;
-currently, this argument must be specified as 0.
-.SH RETURN VALUE
-On success,
-.BR pidfd_send_signal ()
-returns 0.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I pidfd
-is not a valid PID file descriptor.
-.TP
-.B EINVAL
-.I sig
-is not a valid signal.
-.TP
-.B EINVAL
-The calling process is not in a PID namespace from which it can
-send a signal to the target process.
-.TP
-.B EINVAL
-.I flags
-is not 0.
-.TP
-.B EPERM
-The calling process does not have permission to send the signal
-to the target process.
-.TP
-.B EPERM
-.I pidfd
-doesn't refer to the calling process, and
-.I info.si_code
-is invalid (see
-.BR rt_sigqueueinfo (2)).
-.TP
-.B ESRCH
-The target process does not exist
-(i.e., it has terminated and been waited on).
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 5.1.
-.SH NOTES
-.SS PID file descriptors
-The
-.I pidfd
-argument is a PID file descriptor,
-a file descriptor that refers to process.
-Such a file descriptor can be obtained in any of the following ways:
-.IP \[bu] 3
-by opening a
-.IR /proc/ pid
-directory;
-.IP \[bu]
-using
-.BR pidfd_open (2);
-or
-.IP \[bu]
-via the PID file descriptor that is returned by a call to
-.BR clone (2)
-or
-.BR clone3 (2)
-that specifies the
-.B CLONE_PIDFD
-flag.
-.PP
-The
-.BR pidfd_send_signal ()
-system call allows the avoidance of race conditions that occur
-when using traditional interfaces (such as
-.BR kill (2))
-to signal a process.
-The problem is that the traditional interfaces specify the target process
-via a process ID (PID),
-with the result that the sender may accidentally send a signal to
-the wrong process if the originally intended target process
-has terminated and its PID has been recycled for another process.
-By contrast,
-a PID file descriptor is a stable reference to a specific process;
-if that process terminates,
-.BR pidfd_send_signal ()
-fails with the error
-.BR ESRCH .
-.SH EXAMPLES
-.\" SRC BEGIN (pidfd_send_signal.c)
-.EX
-#define _GNU_SOURCE
-#include <fcntl.h>
-#include <limits.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/syscall.h>
-#include <unistd.h>
-\&
-static int
-pidfd_send_signal(int pidfd, int sig, siginfo_t *info,
- unsigned int flags)
-{
- return syscall(SYS_pidfd_send_signal, pidfd, sig, info, flags);
-}
-\&
-int
-main(int argc, char *argv[])
-{
- int pidfd, sig;
- char path[PATH_MAX];
- siginfo_t info;
-\&
- if (argc != 3) {
- fprintf(stderr, "Usage: %s <pid> <signal>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- sig = atoi(argv[2]);
-\&
- /* Obtain a PID file descriptor by opening the /proc/PID directory
- of the target process. */
-\&
- snprintf(path, sizeof(path), "/proc/%s", argv[1]);
-\&
- pidfd = open(path, O_RDONLY);
- if (pidfd == \-1) {
- perror("open");
- exit(EXIT_FAILURE);
- }
-\&
- /* Populate a \[aq]siginfo_t\[aq] structure for use with
- pidfd_send_signal(). */
-\&
- memset(&info, 0, sizeof(info));
- info.si_code = SI_QUEUE;
- info.si_signo = sig;
- info.si_errno = 0;
- info.si_uid = getuid();
- info.si_pid = getpid();
- info.si_value.sival_int = 1234;
-\&
- /* Send the signal. */
-\&
- if (pidfd_send_signal(pidfd, sig, &info, 0) == \-1) {
- perror("pidfd_send_signal");
- exit(EXIT_FAILURE);
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR clone (2),
-.BR kill (2),
-.BR pidfd_open (2),
-.BR rt_sigqueueinfo (2),
-.BR sigaction (2),
-.BR pid_namespaces (7),
-.BR signal (7)
diff --git a/man2/pipe.2 b/man2/pipe.2
deleted file mode 100644
index 3634a8c27..000000000
--- a/man2/pipe.2
+++ /dev/null
@@ -1,304 +0,0 @@
-.\" Copyright (C) 2005, 2008, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" (A few fragments remain from an earlier (1992) version by
-.\" Drew Eckhardt <drew@cs.colorado.edu>.)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified 1993-07-23 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1996-10-22 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2004-06-17 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2005, mtk: added an example program
-.\" Modified 2008-01-09, mtk: rewrote DESCRIPTION; minor additions
-.\" to EXAMPLE text.
-.\" 2008-10-10, mtk: add description of pipe2()
-.\"
-.TH pipe 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pipe, pipe2 \- create pipe
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int pipe(int " pipefd [2]);
-.PP
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.BR "#include <fcntl.h>" " /* Definition of " O_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int pipe2(int " pipefd "[2], int " flags );
-.PP
-/* On Alpha, IA-64, MIPS, SuperH, and SPARC/SPARC64, pipe() has the
- following prototype; see NOTES */
-.PP
-.B #include <unistd.h>
-.PP
-.B struct fd_pair {
-.B " long fd[2];"
-.B "};"
-.B struct fd_pair pipe(void);
-.fi
-.SH DESCRIPTION
-.BR pipe ()
-creates a pipe, a unidirectional data channel that
-can be used for interprocess communication.
-The array
-.I pipefd
-is used to return two file descriptors referring to the ends of the pipe.
-.I pipefd[0]
-refers to the read end of the pipe.
-.I pipefd[1]
-refers to the write end of the pipe.
-Data written to the write end of the pipe is buffered by the kernel
-until it is read from the read end of the pipe.
-For further details, see
-.BR pipe (7).
-.PP
-If
-.I flags
-is 0, then
-.BR pipe2 ()
-is the same as
-.BR pipe ().
-The following values can be bitwise ORed in
-.I flags
-to obtain different behavior:
-.TP
-.B O_CLOEXEC
-Set the close-on-exec
-.RB ( FD_CLOEXEC )
-flag on the two new file descriptors.
-See the description of the same flag in
-.BR open (2)
-for reasons why this may be useful.
-.TP
-.BR O_DIRECT " (since Linux 3.4)"
-.\" commit 9883035ae7edef3ec62ad215611cb8e17d6a1a5d
-Create a pipe that performs I/O in "packet" mode.
-Each
-.BR write (2)
-to the pipe is dealt with as a separate packet, and
-.BR read (2)s
-from the pipe will read one packet at a time.
-Note the following points:
-.RS
-.IP \[bu] 3
-Writes of greater than
-.B PIPE_BUF
-bytes (see
-.BR pipe (7))
-will be split into multiple packets.
-The constant
-.B PIPE_BUF
-is defined in
-.IR <limits.h> .
-.IP \[bu]
-If a
-.BR read (2)
-specifies a buffer size that is smaller than the next packet,
-then the requested number of bytes are read,
-and the excess bytes in the packet are discarded.
-Specifying a buffer size of
-.B PIPE_BUF
-will be sufficient to read the largest possible packets
-(see the previous point).
-.IP \[bu]
-Zero-length packets are not supported.
-(A
-.BR read (2)
-that specifies a buffer size of zero is a no-op, and returns 0.)
-.RE
-.IP
-Older kernels that do not support this flag will indicate this via an
-.B EINVAL
-error.
-.IP
-Since Linux 4.5,
-.\" commit 0dbf5f20652108106cb822ad7662c786baaa03ff
-.\" FIXME . But, it is not possible to specify O_DIRECT when opening a FIFO
-it is possible to change the
-.B O_DIRECT
-setting of a pipe file descriptor using
-.BR fcntl (2).
-.TP
-.B O_NONBLOCK
-Set the
-.B O_NONBLOCK
-file status flag on the open file descriptions
-referred to by the new file descriptors.
-Using this flag saves extra calls to
-.BR fcntl (2)
-to achieve the same result.
-.TP
-.B O_NOTIFICATION_PIPE
-Since Linux 5.8,
-.\" commit c73be61cede5882f9605a852414db559c0ebedfd
-general notification mechanism is built on the top of the pipe where
-kernel splices notification messages into pipes opened by user space.
-The owner of the pipe has to tell the kernel which sources of events to watch
-and filters can also be applied to select
-which subevents should be placed into the pipe.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned,
-.I errno
-is set to indicate the error, and
-.I pipefd
-is left unchanged.
-.PP
-On Linux (and other systems),
-.BR pipe ()
-does not modify
-.I pipefd
-on failure.
-A requirement standardizing this behavior was added in POSIX.1-2008 TC2.
-.\" http://austingroupbugs.net/view.php?id=467
-The Linux-specific
-.BR pipe2 ()
-system call
-likewise does not modify
-.I pipefd
-on failure.
-.SH ERRORS
-.TP
-.B EFAULT
-.I pipefd
-is not valid.
-.TP
-.B EINVAL
-.RB ( pipe2 ())
-Invalid value in
-.IR flags .
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENFILE
-The user hard limit on memory that can be allocated for pipes
-has been reached and the caller is not privileged; see
-.BR pipe (7).
-.TP
-.B ENOPKG
-.RB ( pipe2 ())
-.B O_NOTIFICATION_PIPE
-was passed in
-.I flags
-and support for notifications
-.RB ( CONFIG_WATCH_QUEUE )
-is not compiled into the kernel.
-.SH VERSIONS
-.\" See http://math-atlas.sourceforge.net/devel/assembly/64.psabi.1.33.ps.Z
-.\" for example, section 3.2.1 "Registers and the Stack Frame".
-The System V ABI on some architectures allows the use of more than one register
-for returning multiple values; several architectures
-(namely, Alpha, IA-64, MIPS, SuperH, and SPARC/SPARC64)
-(ab)use this feature in order to implement the
-.BR pipe ()
-system call in a functional manner:
-the call doesn't take any arguments and returns
-a pair of file descriptors as the return value on success.
-The glibc
-.BR pipe ()
-wrapper function transparently deals with this.
-See
-.BR syscall (2)
-for information regarding registers used for storing second file descriptor.
-.SH STANDARDS
-.TP
-.BR pipe ()
-POSIX.1-2008.
-.TP
-.BR pipe2 ()
-Linux.
-.SH HISTORY
-.TP
-.BR pipe ()
-POSIX.1-2001.
-.TP
-.BR pipe2 ()
-Linux 2.6.27,
-glibc 2.9.
-.SH EXAMPLES
-.\" fork.2 refers to this example program.
-The following program creates a pipe, and then
-.BR fork (2)s
-to create a child process;
-the child inherits a duplicate set of file
-descriptors that refer to the same pipe.
-After the
-.BR fork (2),
-each process closes the file descriptors that it doesn't need for the pipe
-(see
-.BR pipe (7)).
-The parent then writes the string contained in the program's
-command-line argument to the pipe,
-and the child reads this string a byte at a time from the pipe
-and echoes it on standard output.
-.SS Program source
-.\" SRC BEGIN (pipe.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/wait.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int pipefd[2];
- char buf;
- pid_t cpid;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s <string>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- if (pipe(pipefd) == \-1) {
- perror("pipe");
- exit(EXIT_FAILURE);
- }
-\&
- cpid = fork();
- if (cpid == \-1) {
- perror("fork");
- exit(EXIT_FAILURE);
- }
-\&
- if (cpid == 0) { /* Child reads from pipe */
- close(pipefd[1]); /* Close unused write end */
-\&
- while (read(pipefd[0], &buf, 1) > 0)
- write(STDOUT_FILENO, &buf, 1);
-\&
- write(STDOUT_FILENO, "\en", 1);
- close(pipefd[0]);
- _exit(EXIT_SUCCESS);
-\&
- } else { /* Parent writes argv[1] to pipe */
- close(pipefd[0]); /* Close unused read end */
- write(pipefd[1], argv[1], strlen(argv[1]));
- close(pipefd[1]); /* Reader will see EOF */
- wait(NULL); /* Wait for child */
- exit(EXIT_SUCCESS);
- }
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR fork (2),
-.BR read (2),
-.BR socketpair (2),
-.BR splice (2),
-.BR tee (2),
-.BR vmsplice (2),
-.BR write (2),
-.BR popen (3),
-.BR pipe (7)
diff --git a/man2/pipe2.2 b/man2/pipe2.2
deleted file mode 100644
index 980e2406b..000000000
--- a/man2/pipe2.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/pipe.2
diff --git a/man2/pivot_root.2 b/man2/pivot_root.2
deleted file mode 100644
index 2035b58dd..000000000
--- a/man2/pivot_root.2
+++ /dev/null
@@ -1,409 +0,0 @@
-.\" Copyright (C) 2019 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" A very few fragments remain from an earlier page written by
-.\" Werner Almesberger in 2000
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pivot_root 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pivot_root \- change the root mount
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_pivot_root, const char *" new_root \
-", const char *" put_old );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR pivot_root (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-.BR pivot_root ()
-changes the root mount in the mount namespace of the calling process.
-More precisely, it moves the root mount to the
-directory \fIput_old\fP and makes \fInew_root\fP the new root mount.
-The calling process must have the
-.B CAP_SYS_ADMIN
-capability in the user namespace that owns the caller's mount namespace.
-.PP
-.BR pivot_root ()
-changes the root directory and the current working directory
-of each process or thread in the same mount namespace to
-.I new_root
-if they point to the old root directory.
-(See also NOTES.)
-On the other hand,
-.BR pivot_root ()
-does not change the caller's current working directory
-(unless it is on the old root directory),
-and thus it should be followed by a
-\fBchdir("/")\fP call.
-.PP
-The following restrictions apply:
-.IP \[bu] 3
-.I new_root
-and
-.I put_old
-must be directories.
-.IP \[bu]
-.I new_root
-and
-.I put_old
-must not be on the same mount as the current root.
-.IP \[bu]
-\fIput_old\fP must be at or underneath \fInew_root\fP;
-that is, adding some nonnegative
-number of "\fI/..\fP" suffixes to the pathname pointed to by
-.I put_old
-must yield the same directory as \fInew_root\fP.
-.IP \[bu]
-.I new_root
-must be a path to a mount point, but can't be
-.IR """/""" .
-A path that is not already a mount point can be converted into one by
-bind mounting the path onto itself.
-.IP \[bu]
-The propagation type of the parent mount of
-.I new_root
-and the parent mount of the current root directory must not be
-.BR MS_SHARED ;
-similarly, if
-.I put_old
-is an existing mount point, its propagation type must not be
-.BR MS_SHARED .
-These restrictions ensure that
-.BR pivot_root ()
-never propagates any changes to another mount namespace.
-.IP \[bu]
-The current root directory must be a mount point.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-\fIerrno\fP is set to indicate the error.
-.SH ERRORS
-.BR pivot_root ()
-may fail with any of the same errors as
-.BR stat (2).
-Additionally, it may fail with the following errors:
-.TP
-.B EBUSY
-.\" Reconfirmed that the following error occurs on Linux 5.0 by
-.\" specifying 'new_root' as "/rootfs" and 'put_old' as
-.\" "/rootfs/oldrootfs", and *not* bind mounting "/rootfs" on top of
-.\" itself. Of course, this is an odd situation, since a later check
-.\" in the kernel code will in any case yield EINVAL if 'new_root' is
-.\" not a mount point. However, when the system call was first added,
-.\" 'new_root' was not required to be a mount point. So, this
-.\" error is nowadays probably just the result of crufty accumulation.
-.\" This error can also occur if we bind mount "/" on top of itself
-.\" and try to specify "/" as the 'new' (again, an odd situation). So,
-.\" the EBUSY check in the kernel does still seem necessary to prevent
-.\" that case. Furthermore, the "or put_old" piece is probably
-.\" redundant text (although the check is in the kernel), since,
-.\" in another check, 'put_old' is required to be under 'new_root'.
-.I new_root
-or
-.I put_old
-is on the current root mount.
-(This error covers the pathological case where
-.I new_root
-is
-.IR """/""" .)
-.TP
-.B EINVAL
-.I new_root
-is not a mount point.
-.TP
-.B EINVAL
-\fIput_old\fP is not at or underneath \fInew_root\fP.
-.TP
-.B EINVAL
-The current root directory is not a mount point
-(because of an earlier
-.BR chroot (2)).
-.TP
-.B EINVAL
-The current root is on the rootfs (initial ramfs) mount; see NOTES.
-.TP
-.B EINVAL
-Either the mount point at
-.IR new_root ,
-or the parent mount of that mount point,
-has propagation type
-.BR MS_SHARED .
-.TP
-.B EINVAL
-.I put_old
-is a mount point and has the propagation type
-.BR MS_SHARED .
-.TP
-.B ENOTDIR
-\fInew_root\fP or \fIput_old\fP is not a directory.
-.TP
-.B EPERM
-The calling process does not have the
-.B CAP_SYS_ADMIN
-capability.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.3.41.
-.SH NOTES
-A command-line interface for this system call is provided by
-.BR pivot_root (8).
-.PP
-.BR pivot_root ()
-allows the caller to switch to a new root filesystem while at the same time
-placing the old root mount at a location under
-.I new_root
-from where it can subsequently be unmounted.
-(The fact that it moves all processes that have a root directory
-or current working directory on the old root directory to the
-new root frees the old root directory of users,
-allowing the old root mount to be unmounted more easily.)
-.PP
-One use of
-.BR pivot_root ()
-is during system startup, when the
-system mounts a temporary root filesystem (e.g., an
-.BR initrd (4)),
-then mounts the real root filesystem, and eventually turns the latter into
-the root directory of all relevant processes and threads.
-A modern use is to set up a root filesystem during
-the creation of a container.
-.PP
-The fact that
-.BR pivot_root ()
-modifies process root and current working directories in the
-manner noted in DESCRIPTION
-is necessary in order to prevent kernel threads from keeping the old
-root mount busy with their root and current working directories,
-even if they never access
-the filesystem in any way.
-.PP
-The rootfs (initial ramfs) cannot be
-.BR pivot_root ()ed.
-The recommended method of changing the root filesystem in this case is
-to delete everything in rootfs, overmount rootfs with the new root, attach
-.IR stdin / stdout / stderr
-to the new
-.IR /dev/console ,
-and exec the new
-.BR init (1).
-Helper programs for this process exist; see
-.BR switch_root (8).
-.\"
-.SS pivot_root(\[dq].\[dq], \[dq].\[dq])
-.I new_root
-and
-.I put_old
-may be the same directory.
-In particular, the following sequence allows a pivot-root operation
-without needing to create and remove a temporary directory:
-.PP
-.in +4n
-.EX
-chdir(new_root);
-pivot_root(".", ".");
-umount2(".", MNT_DETACH);
-.EE
-.in
-.PP
-This sequence succeeds because the
-.BR pivot_root ()
-call stacks the old root mount point
-on top of the new root mount point at
-.IR / .
-At that point, the calling process's root directory and current
-working directory refer to the new root mount point
-.RI ( new_root ).
-During the subsequent
-.BR umount ()
-call, resolution of
-.I """."""
-starts with
-.I new_root
-and then moves up the list of mounts stacked at
-.IR / ,
-with the result that old root mount point is unmounted.
-.\"
-.SS Historical notes
-For many years, this manual page carried the following text:
-.RS
-.PP
-.BR pivot_root ()
-may or may not change the current root and the current
-working directory of any processes or threads which use the old
-root directory.
-The caller of
-.BR pivot_root ()
-must ensure that processes with root or current working directory
-at the old root operate correctly in either case.
-An easy way to ensure this is to change their
-root and current working directory to \fInew_root\fP before invoking
-.BR pivot_root ().
-.RE
-.PP
-This text, written before the system call implementation was
-even finalized in the kernel, was probably intended to warn users
-at that time that the implementation might change before final release.
-However, the behavior stated in DESCRIPTION
-has remained consistent since this system call
-was first implemented and will not change now.
-.SH EXAMPLES
-.\" FIXME
-.\" Would it be better, because simpler, to use unshare(2)
-.\" rather than clone(2) in the example below?
-The program below demonstrates the use of
-.BR pivot_root ()
-inside a mount namespace that is created using
-.BR clone (2).
-After pivoting to the root directory named in the program's
-first command-line argument, the child created by
-.BR clone (2)
-then executes the program named in the remaining command-line arguments.
-.PP
-We demonstrate the program by creating a directory that will serve as
-the new root filesystem and placing a copy of the (statically linked)
-.BR busybox (1)
-executable in that directory.
-.PP
-.in +4n
-.EX
-$ \fBmkdir /tmp/rootfs\fP
-$ \fBls \-id /tmp/rootfs\fP # Show inode number of new root directory
-319459 /tmp/rootfs
-$ \fBcp $(which busybox) /tmp/rootfs\fP
-$ \fBPS1=\[aq]bbsh$ \[aq] sudo ./pivot_root_demo /tmp/rootfs /busybox sh\fP
-bbsh$ \fBPATH=/\fP
-bbsh$ \fBbusybox ln busybox ln\fP
-bbsh$ \fBln busybox echo\fP
-bbsh$ \fBln busybox ls\fP
-bbsh$ \fBls\fP
-busybox echo ln ls
-bbsh$ \fBls \-id /\fP # Compare with inode number above
-319459 /
-bbsh$ \fBecho \[aq]hello world\[aq]\fP
-hello world
-.EE
-.in
-.SS Program source
-\&
-.PP
-.\" SRC BEGIN (pivot_root.c)
-.EX
-/* pivot_root_demo.c */
-\&
-#define _GNU_SOURCE
-#include <err.h>
-#include <limits.h>
-#include <sched.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/mman.h>
-#include <sys/mount.h>
-#include <sys/stat.h>
-#include <sys/syscall.h>
-#include <sys/wait.h>
-#include <unistd.h>
-\&
-static int
-pivot_root(const char *new_root, const char *put_old)
-{
- return syscall(SYS_pivot_root, new_root, put_old);
-}
-\&
-#define STACK_SIZE (1024 * 1024)
-\&
-static int /* Startup function for cloned child */
-child(void *arg)
-{
- char path[PATH_MAX];
- char **args = arg;
- char *new_root = args[0];
- const char *put_old = "/oldrootfs";
-\&
- /* Ensure that \[aq]new_root\[aq] and its parent mount don\[aq]t have
- shared propagation (which would cause pivot_root() to
- return an error), and prevent propagation of mount
- events to the initial mount namespace. */
-\&
- if (mount(NULL, "/", NULL, MS_REC | MS_PRIVATE, NULL) == \-1)
- err(EXIT_FAILURE, "mount\-MS_PRIVATE");
-\&
- /* Ensure that \[aq]new_root\[aq] is a mount point. */
-\&
- if (mount(new_root, new_root, NULL, MS_BIND, NULL) == \-1)
- err(EXIT_FAILURE, "mount\-MS_BIND");
-\&
- /* Create directory to which old root will be pivoted. */
-\&
- snprintf(path, sizeof(path), "%s/%s", new_root, put_old);
- if (mkdir(path, 0777) == \-1)
- err(EXIT_FAILURE, "mkdir");
-\&
- /* And pivot the root filesystem. */
-\&
- if (pivot_root(new_root, path) == \-1)
- err(EXIT_FAILURE, "pivot_root");
-\&
- /* Switch the current working directory to "/". */
-\&
- if (chdir("/") == \-1)
- err(EXIT_FAILURE, "chdir");
-\&
- /* Unmount old root and remove mount point. */
-\&
- if (umount2(put_old, MNT_DETACH) == \-1)
- perror("umount2");
- if (rmdir(put_old) == \-1)
- perror("rmdir");
-\&
- /* Execute the command specified in argv[1]... */
-\&
- execv(args[1], &args[1]);
- err(EXIT_FAILURE, "execv");
-}
-\&
-int
-main(int argc, char *argv[])
-{
- char *stack;
-\&
- /* Create a child process in a new mount namespace. */
-\&
- stack = mmap(NULL, STACK_SIZE, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, \-1, 0);
- if (stack == MAP_FAILED)
- err(EXIT_FAILURE, "mmap");
-\&
- if (clone(child, stack + STACK_SIZE,
- CLONE_NEWNS | SIGCHLD, &argv[1]) == \-1)
- err(EXIT_FAILURE, "clone");
-\&
- /* Parent falls through to here; wait for child. */
-\&
- if (wait(NULL) == \-1)
- err(EXIT_FAILURE, "wait");
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR chdir (2),
-.BR chroot (2),
-.BR mount (2),
-.BR stat (2),
-.BR initrd (4),
-.BR mount_namespaces (7),
-.BR pivot_root (8),
-.BR switch_root (8)
diff --git a/man2/pkey_alloc.2 b/man2/pkey_alloc.2
deleted file mode 100644
index f0c9149f7..000000000
--- a/man2/pkey_alloc.2
+++ /dev/null
@@ -1,115 +0,0 @@
-.\" Copyright (C) 2016 Intel Corporation
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pkey_alloc 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pkey_alloc, pkey_free \- allocate or free a protection key
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <sys/mman.h>
-.PP
-.BI "int pkey_alloc(unsigned int " flags ", unsigned int " access_rights ");"
-.BI "int pkey_free(int " pkey ");"
-.fi
-.SH DESCRIPTION
-.BR pkey_alloc ()
-allocates a protection key (pkey) and allows it to be passed to
-.BR pkey_mprotect (2).
-.PP
-The
-.BR pkey_alloc ()
-.I flags
-is reserved for future use and currently must always be specified as 0.
-.PP
-The
-.BR pkey_alloc ()
-.I access_rights
-argument may contain zero or more disable operations:
-.TP
-.B PKEY_DISABLE_ACCESS
-Disable all data access to memory covered by the returned protection key.
-.TP
-.B PKEY_DISABLE_WRITE
-Disable write access to memory covered by the returned protection key.
-.PP
-.BR pkey_free ()
-frees a protection key and makes it available for later
-allocations.
-After a protection key has been freed, it may no longer be used
-in any protection-key-related operations.
-.PP
-An application should not call
-.BR pkey_free ()
-on any protection key which has been assigned to an address
-range by
-.BR pkey_mprotect (2)
-and which is still in use.
-The behavior in this case is undefined and may result in an error.
-.SH RETURN VALUE
-On success,
-.BR pkey_alloc ()
-returns a positive protection key value.
-On success,
-.BR pkey_free ()
-returns zero.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.IR pkey ,
-.IR flags ,
-or
-.I access_rights
-is invalid.
-.TP
-.B ENOSPC
-.RB ( pkey_alloc ())
-All protection keys available for the current process have
-been allocated.
-The number of keys available is architecture-specific and
-implementation-specific and may be reduced by kernel-internal use
-of certain keys.
-There are currently 15 keys available to user programs on x86.
-.IP
-This error will also be returned if the processor or operating system
-does not support protection keys.
-Applications should always be prepared to handle this error, since
-factors outside of the application's control can reduce the number
-of available pkeys.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 4.9,
-glibc 2.27.
-.SH NOTES
-.BR pkey_alloc ()
-is always safe to call regardless of whether or not the operating system
-supports protection keys.
-It can be used in lieu of any other mechanism for detecting pkey support
-and will simply fail with the error
-.B ENOSPC
-if the operating system has no pkey support.
-.PP
-The kernel guarantees that the contents of the hardware rights
-register (PKRU) will be preserved only for allocated protection
-keys.
-Any time a key is unallocated (either before the first call
-returning that key from
-.BR pkey_alloc ()
-or after it is freed via
-.BR pkey_free ()),
-the kernel may make arbitrary changes to the parts of the
-rights register affecting access to that key.
-.SH EXAMPLES
-See
-.BR pkeys (7).
-.SH SEE ALSO
-.BR pkey_mprotect (2),
-.BR pkeys (7)
diff --git a/man2/pkey_free.2 b/man2/pkey_free.2
deleted file mode 100644
index 5b524cbbf..000000000
--- a/man2/pkey_free.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/pkey_alloc.2
diff --git a/man2/pkey_mprotect.2 b/man2/pkey_mprotect.2
deleted file mode 100644
index b4f9309a3..000000000
--- a/man2/pkey_mprotect.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/mprotect.2
diff --git a/man2/poll.2 b/man2/poll.2
deleted file mode 100644
index 0b834306a..000000000
--- a/man2/poll.2
+++ /dev/null
@@ -1,641 +0,0 @@
-.\" Copyright (C) 2006, 2019 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Additions from Richard Gooch <rgooch@atnf.CSIRO.AU> and aeb, 971207
-.\" 2006-03-13, mtk, Added ppoll() + various other rewordings
-.\" 2006-07-01, mtk, Added POLLRDHUP + various other wording and
-.\" formatting changes.
-.\"
-.TH poll 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-poll, ppoll \- wait for some event on a file descriptor
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <poll.h>
-.PP
-.BI "int poll(struct pollfd *" fds ", nfds_t " nfds ", int " timeout );
-.PP
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <poll.h>
-.PP
-.BI "int ppoll(struct pollfd *" fds ", nfds_t " nfds ,
-.BI " const struct timespec *_Nullable " tmo_p ,
-.BI " const sigset_t *_Nullable " sigmask );
-.fi
-.SH DESCRIPTION
-.BR poll ()
-performs a similar task to
-.BR select (2):
-it waits for one of a set of file descriptors to become ready
-to perform I/O.
-The Linux-specific
-.BR epoll (7)
-API performs a similar task, but offers features beyond those found in
-.BR poll ().
-.PP
-The set of file descriptors to be monitored is specified in the
-.I fds
-argument, which is an array of structures of the following form:
-.PP
-.in +4n
-.EX
-struct pollfd {
- int fd; /* file descriptor */
- short events; /* requested events */
- short revents; /* returned events */
-};
-.EE
-.in
-.PP
-The caller should specify the number of items in the
-.I fds
-array in
-.IR nfds .
-.PP
-The field
-.I fd
-contains a file descriptor for an open file.
-If this field is negative, then the corresponding
-.I events
-field is ignored and the
-.I revents
-field returns zero.
-(This provides an easy way of ignoring a
-file descriptor for a single
-.BR poll ()
-call: simply set the
-.I fd
-field to its bitwise complement.)
-.PP
-The field
-.I events
-is an input parameter, a bit mask specifying the events the application
-is interested in for the file descriptor
-.IR fd .
-This field may be specified as zero,
-in which case the only events that can be returned in
-.I revents
-are
-.BR POLLHUP ,
-.BR POLLERR ,
-and
-.B POLLNVAL
-(see below).
-.PP
-The field
-.I revents
-is an output parameter, filled by the kernel with the events that
-actually occurred.
-The bits returned in
-.I revents
-can include any of those specified in
-.IR events ,
-or one of the values
-.BR POLLERR ,
-.BR POLLHUP ,
-or
-.BR POLLNVAL .
-(These three bits are meaningless in the
-.I events
-field, and will be set in the
-.I revents
-field whenever the corresponding condition is true.)
-.PP
-If none of the events requested (and no error) has occurred for any
-of the file descriptors, then
-.BR poll ()
-blocks until one of the events occurs.
-.PP
-The
-.I timeout
-argument specifies the number of milliseconds that
-.BR poll ()
-should block waiting for a file descriptor to become ready.
-The call will block until either:
-.IP \[bu] 3
-a file descriptor becomes ready;
-.IP \[bu]
-the call is interrupted by a signal handler; or
-.IP \[bu]
-the timeout expires.
-.PP
-Note that the
-.I timeout
-interval will be rounded up to the system clock granularity,
-and kernel scheduling delays mean that the blocking interval
-may overrun by a small amount.
-Specifying a negative value in
-.I timeout
-means an infinite timeout.
-Specifying a
-.I timeout
-of zero causes
-.BR poll ()
-to return immediately, even if no file descriptors are ready.
-.PP
-The bits that may be set/returned in
-.I events
-and
-.I revents
-are defined in \fI<poll.h>\fP:
-.TP
-.B POLLIN
-There is data to read.
-.TP
-.B POLLPRI
-There is some exceptional condition on the file descriptor.
-Possibilities include:
-.RS
-.IP \[bu] 3
-There is out-of-band data on a TCP socket (see
-.BR tcp (7)).
-.IP \[bu]
-A pseudoterminal master in packet mode has seen a state change on the slave
-(see
-.BR ioctl_tty (2)).
-.IP \[bu]
-A
-.I cgroup.events
-file has been modified (see
-.BR cgroups (7)).
-.RE
-.TP
-.B POLLOUT
-Writing is now possible, though a write larger than the available space
-in a socket or pipe will still block (unless
-.B O_NONBLOCK
-is set).
-.TP
-.BR POLLRDHUP " (since Linux 2.6.17)"
-Stream socket peer closed connection,
-or shut down writing half of connection.
-The
-.B _GNU_SOURCE
-feature test macro must be defined
-(before including
-.I any
-header files)
-in order to obtain this definition.
-.TP
-.B POLLERR
-Error condition (only returned in
-.IR revents ;
-ignored in
-.IR events ).
-This bit is also set for a file descriptor referring
-to the write end of a pipe when the read end has been closed.
-.TP
-.B POLLHUP
-Hang up (only returned in
-.IR revents ;
-ignored in
-.IR events ).
-Note that when reading from a channel such as a pipe or a stream socket,
-this event merely indicates that the peer closed its end of the channel.
-Subsequent reads from the channel will return 0 (end of file)
-only after all outstanding data in the channel has been consumed.
-.TP
-.B POLLNVAL
-Invalid request:
-.I fd
-not open (only returned in
-.IR revents ;
-ignored in
-.IR events ).
-.PP
-When compiling with
-.B _XOPEN_SOURCE
-defined, one also has the following,
-which convey no further information beyond the bits listed above:
-.TP
-.B POLLRDNORM
-Equivalent to
-.BR POLLIN .
-.TP
-.B POLLRDBAND
-Priority band data can be read (generally unused on Linux).
-.\" POLLRDBAND is used in the DECnet protocol.
-.TP
-.B POLLWRNORM
-Equivalent to
-.BR POLLOUT .
-.TP
-.B POLLWRBAND
-Priority data may be written.
-.PP
-Linux also knows about, but does not use
-.BR POLLMSG .
-.SS ppoll()
-The relationship between
-.BR poll ()
-and
-.BR ppoll ()
-is analogous to the relationship between
-.BR select (2)
-and
-.BR pselect (2):
-like
-.BR pselect (2),
-.BR ppoll ()
-allows an application to safely wait until either a file descriptor
-becomes ready or until a signal is caught.
-.PP
-Other than the difference in the precision of the
-.I timeout
-argument, the following
-.BR ppoll ()
-call:
-.PP
-.in +4n
-.EX
-ready = ppoll(&fds, nfds, tmo_p, &sigmask);
-.EE
-.in
-.PP
-is nearly equivalent to
-.I atomically
-executing the following calls:
-.PP
-.in +4n
-.EX
-sigset_t origmask;
-int timeout;
-\&
-timeout = (tmo_p == NULL) ? \-1 :
- (tmo_p\->tv_sec * 1000 + tmo_p\->tv_nsec / 1000000);
-pthread_sigmask(SIG_SETMASK, &sigmask, &origmask);
-ready = poll(&fds, nfds, timeout);
-pthread_sigmask(SIG_SETMASK, &origmask, NULL);
-.EE
-.in
-.PP
-The above code segment is described as
-.I nearly
-equivalent because whereas a negative
-.I timeout
-value for
-.BR poll ()
-is interpreted as an infinite timeout, a negative value expressed in
-.I *tmo_p
-results in an error from
-.BR ppoll ().
-.PP
-See the description of
-.BR pselect (2)
-for an explanation of why
-.BR ppoll ()
-is necessary.
-.PP
-If the
-.I sigmask
-argument is specified as NULL, then
-no signal mask manipulation is performed
-(and thus
-.BR ppoll ()
-differs from
-.BR poll ()
-only in the precision of the
-.I timeout
-argument).
-.PP
-The
-.I tmo_p
-argument specifies an upper limit on the amount of time that
-.BR ppoll ()
-will block.
-This argument is a pointer to a
-.BR timespec (3)
-structure.
-.PP
-If
-.I tmo_p
-is specified as NULL, then
-.BR ppoll ()
-can block indefinitely.
-.SH RETURN VALUE
-On success,
-.BR poll ()
-returns a nonnegative value which is the number of elements in the
-.I pollfds
-whose
-.I revents
-fields have been set to a nonzero value (indicating an event or an error).
-A return value of zero indicates that the system call timed out
-before any file descriptors became ready.
-.PP
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-.I fds
-points outside the process's accessible address space.
-The array given as argument was not contained in the calling program's
-address space.
-.TP
-.B EINTR
-A signal occurred before any requested event; see
-.BR signal (7).
-.TP
-.B EINVAL
-The
-.I nfds
-value exceeds the
-.B RLIMIT_NOFILE
-value.
-.TP
-.B EINVAL
-.RB ( ppoll ())
-The timeout value expressed in
-.I *tmo_p
-is invalid (negative).
-.TP
-.B ENOMEM
-Unable to allocate memory for kernel data structures.
-.SH VERSIONS
-On some other UNIX systems,
-.\" Darwin, according to a report by Jeremy Sequoia, relayed by Josh Triplett
-.BR poll ()
-can fail with the error
-.B EAGAIN
-if the system fails to allocate kernel-internal resources, rather than
-.B ENOMEM
-as Linux does.
-POSIX permits this behavior.
-Portable programs may wish to check for
-.B EAGAIN
-and loop, just as with
-.BR EINTR .
-.PP
-Some implementations define the nonstandard constant
-.B INFTIM
-with the value \-1 for use as a
-.I timeout
-for
-.BR poll ().
-This constant is not provided in glibc.
-.SS C library/kernel differences
-The Linux
-.BR ppoll ()
-system call modifies its
-.I tmo_p
-argument.
-However, the glibc wrapper function hides this behavior
-by using a local variable for the timeout argument that
-is passed to the system call.
-Thus, the glibc
-.BR ppoll ()
-function does not modify its
-.I tmo_p
-argument.
-.PP
-The raw
-.BR ppoll ()
-system call has a fifth argument,
-.IR "size_t sigsetsize" ,
-which specifies the size in bytes of the
-.I sigmask
-argument.
-The glibc
-.BR ppoll ()
-wrapper function specifies this argument as a fixed value
-(equal to
-.IR sizeof(kernel_sigset_t) ).
-See
-.BR sigprocmask (2)
-for a discussion on the differences between the kernel and the libc
-notion of the sigset.
-.SH STANDARDS
-.TP
-.BR poll ()
-POSIX.1-2008.
-.TP
-.BR ppoll ()
-Linux.
-.\" FIXME .
-.\" ppoll() is proposed for inclusion in POSIX:
-.\" https://www.austingroupbugs.net/view.php?id=1263
-.\" NetBSD 3.0 has a pollts() which is like Linux ppoll().
-.SH HISTORY
-.TP
-.BR poll ()
-POSIX.1-2001.
-Linux 2.1.23.
-.IP
-On older kernels that lack this system call,
-the glibc
-.BR poll ()
-wrapper function provides emulation using
-.BR select (2).
-.TP
-.BR ppoll ()
-Linux 2.6.16,
-glibc 2.4.
-.SH NOTES
-The operation of
-.BR poll ()
-and
-.BR ppoll ()
-is not affected by the
-.B O_NONBLOCK
-flag.
-.PP
-For a discussion of what may happen if a file descriptor being monitored by
-.BR poll ()
-is closed in another thread, see
-.BR select (2).
-.SH BUGS
-See the discussion of spurious readiness notifications under the
-BUGS section of
-.BR select (2).
-.SH EXAMPLES
-The program below opens each of the files named in its command-line
-arguments and monitors the resulting file descriptors for readiness to read
-.RB ( POLLIN ).
-The program loops, repeatedly using
-.BR poll ()
-to monitor the file descriptors,
-printing the number of ready file descriptors on return.
-For each ready file descriptor, the program:
-.IP \[bu] 3
-displays the returned
-.I revents
-field in a human-readable form;
-.IP \[bu]
-if the file descriptor is readable, reads some data from it,
-and displays that data on standard output; and
-.IP \[bu]
-if the file descriptor was not readable,
-but some other event occurred (presumably
-.BR POLLHUP ),
-closes the file descriptor.
-.PP
-Suppose we run the program in one terminal, asking it to open a FIFO:
-.PP
-.in +4n
-.EX
-$ \fBmkfifo myfifo\fP
-$ \fB./poll_input myfifo\fP
-.EE
-.in
-.PP
-In a second terminal window, we then open the FIFO for writing,
-write some data to it, and close the FIFO:
-.PP
-.in +4n
-.EX
-$ \fBecho aaaaabbbbbccccc > myfifo\fP
-.EE
-.in
-.PP
-In the terminal where we are running the program, we would then see:
-.PP
-.in +4n
-.EX
-Opened "myfifo" on fd 3
-About to poll()
-Ready: 1
- fd=3; events: POLLIN POLLHUP
- read 10 bytes: aaaaabbbbb
-About to poll()
-Ready: 1
- fd=3; events: POLLIN POLLHUP
- read 6 bytes: ccccc
-\&
-About to poll()
-Ready: 1
- fd=3; events: POLLHUP
- closing fd 3
-All file descriptors closed; bye
-.EE
-.in
-.PP
-In the above output, we see that
-.BR poll ()
-returned three times:
-.IP \[bu] 3
-On the first return, the bits returned in the
-.I revents
-field were
-.BR POLLIN ,
-indicating that the file descriptor is readable, and
-.BR POLLHUP ,
-indicating that the other end of the FIFO has been closed.
-The program then consumed some of the available input.
-.IP \[bu]
-The second return from
-.BR poll ()
-also indicated
-.B POLLIN
-and
-.BR POLLHUP ;
-the program then consumed the last of the available input.
-.IP \[bu]
-On the final return,
-.BR poll ()
-indicated only
-.B POLLHUP
-on the FIFO,
-at which point the file descriptor was closed and the program terminated.
-.\"
-.SS Program source
-\&
-.\" SRC BEGIN (poll_input.c)
-.EX
-/* poll_input.c
-\&
- Licensed under GNU General Public License v2 or later.
-*/
-#include <fcntl.h>
-#include <poll.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \e
- } while (0)
-\&
-int
-main(int argc, char *argv[])
-{
- int ready;
- char buf[10];
- nfds_t num_open_fds, nfds;
- ssize_t s;
- struct pollfd *pfds;
-\&
- if (argc < 2) {
- fprintf(stderr, "Usage: %s file...\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- num_open_fds = nfds = argc \- 1;
- pfds = calloc(nfds, sizeof(struct pollfd));
- if (pfds == NULL)
- errExit("malloc");
-\&
- /* Open each file on command line, and add it to \[aq]pfds\[aq] array. */
-\&
- for (nfds_t j = 0; j < nfds; j++) {
- pfds[j].fd = open(argv[j + 1], O_RDONLY);
- if (pfds[j].fd == \-1)
- errExit("open");
-\&
- printf("Opened \e"%s\e" on fd %d\en", argv[j + 1], pfds[j].fd);
-\&
- pfds[j].events = POLLIN;
- }
-\&
- /* Keep calling poll() as long as at least one file descriptor is
- open. */
-\&
- while (num_open_fds > 0) {
- printf("About to poll()\en");
- ready = poll(pfds, nfds, \-1);
- if (ready == \-1)
- errExit("poll");
-\&
- printf("Ready: %d\en", ready);
-\&
- /* Deal with array returned by poll(). */
-\&
- for (nfds_t j = 0; j < nfds; j++) {
- if (pfds[j].revents != 0) {
- printf(" fd=%d; events: %s%s%s\en", pfds[j].fd,
- (pfds[j].revents & POLLIN) ? "POLLIN " : "",
- (pfds[j].revents & POLLHUP) ? "POLLHUP " : "",
- (pfds[j].revents & POLLERR) ? "POLLERR " : "");
-\&
- if (pfds[j].revents & POLLIN) {
- s = read(pfds[j].fd, buf, sizeof(buf));
- if (s == \-1)
- errExit("read");
- printf(" read %zd bytes: %.*s\en",
- s, (int) s, buf);
- } else { /* POLLERR | POLLHUP */
- printf(" closing fd %d\en", pfds[j].fd);
- if (close(pfds[j].fd) == \-1)
- errExit("close");
- num_open_fds\-\-;
- }
- }
- }
- }
-\&
- printf("All file descriptors closed; bye\en");
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR restart_syscall (2),
-.BR select (2),
-.BR select_tut (2),
-.BR timespec (3),
-.BR epoll (7),
-.BR time (7)
diff --git a/man2/posix_fadvise.2 b/man2/posix_fadvise.2
deleted file mode 100644
index 64ba39227..000000000
--- a/man2/posix_fadvise.2
+++ /dev/null
@@ -1,227 +0,0 @@
-.\" Copyright 2003 Abhijit Menon-Sen <ams@wiw.org>
-.\" and Copyright (C) 2010, 2015, 2017 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2005-04-08 mtk, noted kernel version and added BUGS
-.\" 2010-10-09, mtk, document arm_fadvise64_64()
-.\"
-.TH posix_fadvise 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-posix_fadvise \- predeclare an access pattern for file data
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <fcntl.h>
-.PP
-.BI "int posix_fadvise(int " fd ", off_t " offset ", off_t " len \
-", int " advice ");"
-.fi
-.PP
-.ad l
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR posix_fadvise ():
-.nf
- _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-Programs can use
-.BR posix_fadvise ()
-to announce an intention to access
-file data in a specific pattern in the future, thus allowing the kernel
-to perform appropriate optimizations.
-.PP
-The \fIadvice\fP applies to a (not necessarily existent) region starting
-at \fIoffset\fP and extending for \fIlen\fP bytes (or until the end of
-the file if \fIlen\fP is 0) within the file referred to by \fIfd\fP.
-The \fIadvice\fP is not binding;
-it merely constitutes an expectation on behalf of
-the application.
-.PP
-Permissible values for \fIadvice\fP include:
-.TP
-.B POSIX_FADV_NORMAL
-Indicates that the application has no advice to give about its access
-pattern for the specified data.
-If no advice is given for an open file,
-this is the default assumption.
-.TP
-.B POSIX_FADV_SEQUENTIAL
-The application expects to access the specified data sequentially (with
-lower offsets read before higher ones).
-.TP
-.B POSIX_FADV_RANDOM
-The specified data will be accessed in random order.
-.TP
-.B POSIX_FADV_NOREUSE
-The specified data will be accessed only once.
-.IP
-Before Linux 2.6.18, \fBPOSIX_FADV_NOREUSE\fP had the
-same semantics as \fBPOSIX_FADV_WILLNEED\fP.
-This was probably a bug; since Linux 2.6.18, this flag is a no-op.
-.TP
-.B POSIX_FADV_WILLNEED
-The specified data will be accessed in the near future.
-.IP
-\fBPOSIX_FADV_WILLNEED\fP initiates a
-nonblocking read of the specified region into the page cache.
-The amount of data read may be decreased by the kernel depending
-on virtual memory load.
-(A few megabytes will usually be fully satisfied,
-and more is rarely useful.)
-.TP
-.B POSIX_FADV_DONTNEED
-The specified data will not be accessed in the near future.
-.IP
-\fBPOSIX_FADV_DONTNEED\fP attempts to free cached pages associated with
-the specified region.
-This is useful, for example, while streaming large
-files.
-A program may periodically request the kernel to free cached data
-that has already been used, so that more useful cached pages are not
-discarded instead.
-.IP
-Requests to discard partial pages are ignored.
-It is preferable to preserve needed data than discard unneeded data.
-If the application requires that data be considered for discarding, then
-.I offset
-and
-.I len
-must be page-aligned.
-.IP
-The implementation
-.I may
-attempt to write back dirty pages in the specified region,
-but this is not guaranteed.
-Any unwritten dirty pages will not be freed.
-If the application wishes to ensure that dirty pages will be released,
-it should call
-.BR fsync (2)
-or
-.BR fdatasync (2)
-first.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, an error number is returned.
-.SH ERRORS
-.TP
-.B EBADF
-The \fIfd\fP argument was not a valid file descriptor.
-.TP
-.B EINVAL
-An invalid value was specified for \fIadvice\fP.
-.TP
-.B ESPIPE
-The specified file descriptor refers to a pipe or FIFO.
-.RB ( ESPIPE
-is the error specified by POSIX,
-but before Linux 2.6.16,
-.\" commit 87ba81dba431232548ce29d5d224115d0c2355ac
-Linux returned
-.B EINVAL
-in this case.)
-.SH VERSIONS
-Under Linux, \fBPOSIX_FADV_NORMAL\fP sets the readahead window to the
-default size for the backing device; \fBPOSIX_FADV_SEQUENTIAL\fP doubles
-this size, and \fBPOSIX_FADV_RANDOM\fP disables file readahead entirely.
-These changes affect the entire file, not just the specified region
-(but other open file handles to the same file are unaffected).
-.SS C library/kernel differences
-The name of the wrapper function in the C library is
-.BR posix_fadvise ().
-The underlying system call is called
-.BR fadvise64 ()
-(or, on some architectures,
-.BR fadvise64_64 ());
-the difference between the two is that the former system call
-assumes that the type of the \fIlen\fP argument is \fIsize_t\fP,
-while the latter expects \fIloff_t\fP there.
-.SS Architecture-specific variants
-Some architectures require
-64-bit arguments to be aligned in a suitable pair of registers (see
-.BR syscall (2)
-for further detail).
-On such architectures, the call signature of
-.BR posix_fadvise ()
-shown in the SYNOPSIS would force
-a register to be wasted as padding between the
-.I fd
-and
-.I offset
-arguments.
-Therefore, these architectures define a version of the
-system call that orders the arguments suitably,
-but is otherwise exactly the same as
-.BR posix_fadvise ().
-.PP
-For example, since Linux 2.6.14, ARM has the following system call:
-.PP
-.in +4n
-.EX
-.BI "long arm_fadvise64_64(int " fd ", int " advice ,
-.BI " loff_t " offset ", loff_t " len );
-.EE
-.in
-.PP
-These architecture-specific details are generally
-hidden from applications by the glibc
-.BR posix_fadvise ()
-wrapper function,
-which invokes the appropriate architecture-specific system call.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.PP
-Kernel support first appeared in Linux 2.5.60;
-the underlying system call is called
-.BR fadvise64 ().
-.\" of fadvise64_64()
-Library support has been provided since glibc 2.2,
-via the wrapper function
-.BR posix_fadvise ().
-.PP
-Since Linux 3.18,
-.\" commit d3ac21cacc24790eb45d735769f35753f5b56ceb
-support for the underlying system call is optional,
-depending on the setting of the
-.B CONFIG_ADVISE_SYSCALLS
-configuration option.
-.PP
-The type of the
-.I len
-argument was changed from
-.I size_t
-to
-.I off_t
-in POSIX.1-2001 TC1.
-.SH NOTES
-The contents of the kernel buffer cache can be cleared via the
-.I /proc/sys/vm/drop_caches
-interface described in
-.BR proc (5).
-.PP
-One can obtain a snapshot of which pages of a file are resident
-in the buffer cache by opening a file, mapping it with
-.BR mmap (2),
-and then applying
-.BR mincore (2)
-to the mapping.
-.SH BUGS
-Before Linux 2.6.6, if
-.I len
-was specified as 0, then this was interpreted literally as "zero bytes",
-rather than as meaning "all bytes through to the end of the file".
-.SH SEE ALSO
-.BR fincore (1),
-.BR mincore (2),
-.BR readahead (2),
-.BR sync_file_range (2),
-.BR posix_fallocate (3),
-.BR posix_madvise (3)
diff --git a/man2/ppoll.2 b/man2/ppoll.2
deleted file mode 100644
index 227cd0e47..000000000
--- a/man2/ppoll.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/poll.2
diff --git a/man2/prctl.2 b/man2/prctl.2
deleted file mode 100644
index 09e9072fa..000000000
--- a/man2/prctl.2
+++ /dev/null
@@ -1,2529 +0,0 @@
-.\" Copyright (C) 1998 Andries Brouwer (aeb@cwi.nl)
-.\" and Copyright (C) 2002, 2006, 2008, 2012, 2013, 2015 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright Guillem Jover <guillem@hadrons.org>
-.\" and Copyright (C) 2010 Andi Kleen <andi@firstfloor.org>
-.\" and Copyright (C) 2012 Cyrill Gorcunov <gorcunov@openvz.org>
-.\" and Copyright (C) 2014 Dave Hansen / Intel
-.\" and Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
-.\" and Copyright (c) 2018 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
-.\" and Copyright (c) 2020 Dave Martin <Dave.Martin@arm.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Thu Nov 11 04:19:42 MET 1999, aeb: added PR_GET_PDEATHSIG
-.\" Modified 27 Jun 02, Michael Kerrisk
-.\" Added PR_SET_DUMPABLE, PR_GET_DUMPABLE,
-.\" PR_SET_KEEPCAPS, PR_GET_KEEPCAPS
-.\" Modified 2006-08-30 Guillem Jover <guillem@hadrons.org>
-.\" Updated Linux versions where the options where introduced.
-.\" Added PR_SET_TIMING, PR_GET_TIMING, PR_SET_NAME, PR_GET_NAME,
-.\" PR_SET_UNALIGN, PR_GET_UNALIGN, PR_SET_FPEMU, PR_GET_FPEMU,
-.\" PR_SET_FPEXC, PR_GET_FPEXC
-.\" 2008-04-29 Serge Hallyn, Document PR_CAPBSET_READ and PR_CAPBSET_DROP
-.\" 2008-06-13 Erik Bosman, <ejbosman@cs.vu.nl>
-.\" Document PR_GET_TSC and PR_SET_TSC.
-.\" 2008-06-15 mtk, Document PR_SET_SECCOMP, PR_GET_SECCOMP
-.\" 2009-10-03 Andi Kleen, document PR_MCE_KILL
-.\" 2012-04 Cyrill Gorcunov, Document PR_SET_MM
-.\" 2012-04-25 Michael Kerrisk, Document PR_TASK_PERF_EVENTS_DISABLE and
-.\" PR_TASK_PERF_EVENTS_ENABLE
-.\" 2012-09-20 Kees Cook, update PR_SET_SECCOMP for mode 2
-.\" 2012-09-20 Kees Cook, document PR_SET_NO_NEW_PRIVS, PR_GET_NO_NEW_PRIVS
-.\" 2012-10-25 Michael Kerrisk, Document PR_SET_TIMERSLACK and
-.\" PR_GET_TIMERSLACK
-.\" 2013-01-10 Kees Cook, document PR_SET_PTRACER
-.\" 2012-02-04 Michael Kerrisk, document PR_{SET,GET}_CHILD_SUBREAPER
-.\" 2014-11-10 Dave Hansen, document PR_MPX_{EN,DIS}ABLE_MANAGEMENT
-.\"
-.\"
-.TH prctl 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-prctl \- operations on a process or thread
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/prctl.h>
-.PP
-.BI "int prctl(int " option ", ..."
-.BI " \fR/*\fP unsigned long " arg2 ", unsigned long " arg3 ,
-.BI " unsigned long " arg4 ", unsigned long " arg5 " \fR*/\fP );"
-.fi
-.SH DESCRIPTION
-.BR prctl ()
-manipulates various aspects of the behavior
-of the calling thread or process.
-.PP
-Note that careless use of some
-.BR prctl ()
-operations can confuse the user-space run-time environment,
-so these operations should be used with care.
-.PP
-.BR prctl ()
-is called with a first argument describing what to do
-(with values defined in \fI<linux/prctl.h>\fP), and further
-arguments with a significance depending on the first one.
-The first argument can be:
-.\"
-.\" prctl PR_CAP_AMBIENT
-.TP
-.BR PR_CAP_AMBIENT " (since Linux 4.3)"
-.\" commit 58319057b7847667f0c9585b9de0e8932b0fdb08
-Reads or changes the ambient capability set of the calling thread,
-according to the value of
-.IR arg2 ,
-which must be one of the following:
-.RS
-.\"
-.TP
-.B PR_CAP_AMBIENT_RAISE
-The capability specified in
-.I arg3
-is added to the ambient set.
-The specified capability must already be present in
-both the permitted and the inheritable sets of the process.
-This operation is not permitted if the
-.B SECBIT_NO_CAP_AMBIENT_RAISE
-securebit is set.
-.TP
-.B PR_CAP_AMBIENT_LOWER
-The capability specified in
-.I arg3
-is removed from the ambient set.
-.TP
-.B PR_CAP_AMBIENT_IS_SET
-The
-.BR prctl ()
-call returns 1 if the capability in
-.I arg3
-is in the ambient set and 0 if it is not.
-.TP
-.B PR_CAP_AMBIENT_CLEAR_ALL
-All capabilities will be removed from the ambient set.
-This operation requires setting
-.I arg3
-to zero.
-.RE
-.IP
-In all of the above operations,
-.I arg4
-and
-.I arg5
-must be specified as 0.
-.IP
-Higher-level interfaces layered on top of the above operations are
-provided in the
-.BR libcap (3)
-library in the form of
-.BR cap_get_ambient (3),
-.BR cap_set_ambient (3),
-and
-.BR cap_reset_ambient (3).
-.\" prctl PR_CAPBSET_READ
-.TP
-.BR PR_CAPBSET_READ " (since Linux 2.6.25)"
-Return (as the function result) 1 if the capability specified in
-.I arg2
-is in the calling thread's capability bounding set,
-or 0 if it is not.
-(The capability constants are defined in
-.IR <linux/capability.h> .)
-The capability bounding set dictates
-whether the process can receive the capability through a
-file's permitted capability set on a subsequent call to
-.BR execve (2).
-.IP
-If the capability specified in
-.I arg2
-is not valid, then the call fails with the error
-.BR EINVAL .
-.IP
-A higher-level interface layered on top of this operation is provided in the
-.BR libcap (3)
-library in the form of
-.BR cap_get_bound (3).
-.\" prctl PR_CAPBSET_DROP
-.TP
-.BR PR_CAPBSET_DROP " (since Linux 2.6.25)"
-If the calling thread has the
-.B CAP_SETPCAP
-capability within its user namespace, then drop the capability specified by
-.I arg2
-from the calling thread's capability bounding set.
-Any children of the calling thread will inherit the newly
-reduced bounding set.
-.IP
-The call fails with the error:
-.B EPERM
-if the calling thread does not have the
-.BR CAP_SETPCAP ;
-.B EINVAL
-if
-.I arg2
-does not represent a valid capability; or
-.B EINVAL
-if file capabilities are not enabled in the kernel,
-in which case bounding sets are not supported.
-.IP
-A higher-level interface layered on top of this operation is provided in the
-.BR libcap (3)
-library in the form of
-.BR cap_drop_bound (3).
-.\" prctl PR_SET_CHILD_SUBREAPER
-.TP
-.BR PR_SET_CHILD_SUBREAPER " (since Linux 3.4)"
-.\" commit ebec18a6d3aa1e7d84aab16225e87fd25170ec2b
-If
-.I arg2
-is nonzero,
-set the "child subreaper" attribute of the calling process;
-if
-.I arg2
-is zero, unset the attribute.
-.IP
-A subreaper fulfills the role of
-.BR init (1)
-for its descendant processes.
-When a process becomes orphaned
-(i.e., its immediate parent terminates),
-then that process will be reparented to
-the nearest still living ancestor subreaper.
-Subsequently, calls to
-.BR getppid (2)
-in the orphaned process will now return the PID of the subreaper process,
-and when the orphan terminates, it is the subreaper process that
-will receive a
-.B SIGCHLD
-signal and will be able to
-.BR wait (2)
-on the process to discover its termination status.
-.IP
-The setting of the "child subreaper" attribute
-is not inherited by children created by
-.BR fork (2)
-and
-.BR clone (2).
-The setting is preserved across
-.BR execve (2).
-.IP
-Establishing a subreaper process is useful in session management frameworks
-where a hierarchical group of processes is managed by a subreaper process
-that needs to be informed when one of the processes\[em]for example,
-a double-forked daemon\[em]terminates
-(perhaps so that it can restart that process).
-Some
-.BR init (1)
-frameworks (e.g.,
-.BR systemd (1))
-employ a subreaper process for similar reasons.
-.\" prctl PR_GET_CHILD_SUBREAPER
-.TP
-.BR PR_GET_CHILD_SUBREAPER " (since Linux 3.4)"
-Return the "child subreaper" setting of the caller,
-in the location pointed to by
-.IR "(int\~*) arg2" .
-.\" prctl PR_SET_DUMPABLE
-.TP
-.BR PR_SET_DUMPABLE " (since Linux 2.3.20)"
-Set the state of the "dumpable" attribute,
-which determines whether core dumps are produced for the calling process
-upon delivery of a signal whose default behavior is to produce a core dump.
-.IP
-Up to and including Linux 2.6.12,
-.I arg2
-must be either 0
-.RB ( SUID_DUMP_DISABLE ,
-process is not dumpable) or 1
-.RB ( SUID_DUMP_USER ,
-process is dumpable).
-Between Linux 2.6.13 and Linux 2.6.17,
-.\" commit abf75a5033d4da7b8a7e92321d74021d1fcfb502
-the value 2 was also permitted,
-which caused any binary which normally would not be dumped
-to be dumped readable by root only;
-for security reasons, this feature has been removed.
-.\" See http://marc.theaimsgroup.com/?l=linux-kernel&m=115270289030630&w=2
-.\" Subject: Fix prctl privilege escalation (CVE-2006-2451)
-.\" From: Marcel Holtmann <marcel () holtmann ! org>
-.\" Date: 2006-07-12 11:12:00
-(See also the description of
-.I /proc/sys/fs/\:suid_dumpable
-in
-.BR proc (5).)
-.IP
-Normally, the "dumpable" attribute is set to 1.
-However, it is reset to the current value contained in the file
-.I /proc/sys/fs/\:suid_dumpable
-(which by default has the value 0),
-in the following circumstances:
-.\" See kernel/cred.c::commit_creds() (Linux 3.18 sources)
-.RS
-.IP \[bu] 3
-The process's effective user or group ID is changed.
-.IP \[bu]
-The process's filesystem user or group ID is changed (see
-.BR credentials (7)).
-.IP \[bu]
-The process executes
-.RB ( execve (2))
-a set-user-ID or set-group-ID program, resulting in a change
-of either the effective user ID or the effective group ID.
-.IP \[bu]
-The process executes
-.RB ( execve (2))
-a program that has file capabilities (see
-.BR capabilities (7)),
-.\" See kernel/cred.c::commit_creds()
-but only if the permitted capabilities
-gained exceed those already permitted for the process.
-.\" Also certain namespace operations;
-.RE
-.IP
-Processes that are not dumpable can not be attached via
-.BR ptrace (2)
-.BR PTRACE_ATTACH ;
-see
-.BR ptrace (2)
-for further details.
-.IP
-If a process is not dumpable,
-the ownership of files in the process's
-.IR /proc/ pid
-directory is affected as described in
-.BR proc (5).
-.\" prctl PR_GET_DUMPABLE
-.TP
-.BR PR_GET_DUMPABLE " (since Linux 2.3.20)"
-Return (as the function result) the current state of the calling
-process's dumpable attribute.
-.\" Since Linux 2.6.13, the dumpable flag can have the value 2,
-.\" but in Linux 2.6.13 PR_GET_DUMPABLE simply returns 1 if the dumpable
-.\" flags has a nonzero value. This was fixed in Linux 2.6.14.
-.\" prctl PR_SET_ENDIAN
-.TP
-.BR PR_SET_ENDIAN " (since Linux 2.6.18, PowerPC only)"
-Set the endian-ness of the calling process to the value given
-in \fIarg2\fP, which should be one of the following:
-.\" Respectively 0, 1, 2
-.BR PR_ENDIAN_BIG ,
-.BR PR_ENDIAN_LITTLE ,
-or
-.B PR_ENDIAN_PPC_LITTLE
-(PowerPC pseudo little endian).
-.\" prctl PR_GET_ENDIAN
-.TP
-.BR PR_GET_ENDIAN " (since Linux 2.6.18, PowerPC only)"
-Return the endian-ness of the calling process,
-in the location pointed to by
-.IR "(int\~*) arg2" .
-.\" prctl PR_SET_FP_MODE
-.TP
-.BR PR_SET_FP_MODE " (since Linux 4.0, only on MIPS)"
-.\" commit 9791554b45a2acc28247f66a5fd5bbc212a6b8c8
-On the MIPS architecture,
-user-space code can be built using an ABI which permits linking
-with code that has more restrictive floating-point (FP) requirements.
-For example, user-space code may be built to target the O32 FPXX ABI
-and linked with code built for either one of the more restrictive
-FP32 or FP64 ABIs.
-When more restrictive code is linked in,
-the overall requirement for the process is to use the more
-restrictive floating-point mode.
-.IP
-Because the kernel has no means of knowing in advance
-which mode the process should be executed in,
-and because these restrictions can
-change over the lifetime of the process, the
-.B PR_SET_FP_MODE
-operation is provided to allow control of the floating-point mode
-from user space.
-.IP
-.\" https://dmz-portal.mips.com/wiki/MIPS_O32_ABI_-_FR0_and_FR1_Interlinking
-The
-.I (unsigned int) arg2
-argument is a bit mask describing the floating-point mode used:
-.RS
-.TP
-.B PR_FP_MODE_FR
-When this bit is
-.I unset
-(so called
-.BR FR=0 " or " FR0
-mode), the 32 floating-point registers are 32 bits wide,
-and 64-bit registers are represented as a pair of registers
-(even- and odd- numbered,
-with the even-numbered register containing the lower 32 bits,
-and the odd-numbered register containing the higher 32 bits).
-.IP
-When this bit is
-.I set
-(on supported hardware),
-the 32 floating-point registers are 64 bits wide (so called
-.BR FR=1 " or " FR1
-mode).
-Note that modern MIPS implementations (MIPS R6 and newer) support
-.B FR=1
-mode only.
-.IP
-Applications that use the O32 FP32 ABI can operate only when this bit is
-.I unset
-.RB ( FR=0 ;
-or they can be used with FRE enabled, see below).
-Applications that use the O32 FP64 ABI
-(and the O32 FP64A ABI, which exists to
-provide the ability to operate with existing FP32 code; see below)
-can operate only when this bit is
-.I set
-.RB ( FR=1 ).
-Applications that use the O32 FPXX ABI can operate with either
-.B FR=0
-or
-.B FR=1 .
-.TP
-.B PR_FP_MODE_FRE
-Enable emulation of 32-bit floating-point mode.
-When this mode is enabled,
-it emulates 32-bit floating-point operations
-by raising a reserved-instruction exception
-on every instruction that uses 32-bit formats and
-the kernel then handles the instruction in software.
-(The problem lies in the discrepancy of handling odd-numbered registers
-which are the high 32 bits of 64-bit registers with even numbers in
-.B FR=0
-mode and the lower 32-bit parts of odd-numbered 64-bit registers in
-.B FR=1
-mode.)
-Enabling this bit is necessary when code with the O32 FP32 ABI should operate
-with code with compatible the O32 FPXX or O32 FP64A ABIs (which require
-.B FR=1
-FPU mode) or when it is executed on newer hardware (MIPS R6 onwards)
-which lacks
-.B FR=0
-mode support when a binary with the FP32 ABI is used.
-.IP
-Note that this mode makes sense only when the FPU is in 64-bit mode
-.RB ( FR=1 ).
-.IP
-Note that the use of emulation inherently has a significant performance hit
-and should be avoided if possible.
-.RE
-.IP
-In the N32/N64 ABI, 64-bit floating-point mode is always used,
-so FPU emulation is not required and the FPU always operates in
-.B FR=1
-mode.
-.IP
-This option is mainly intended for use by the dynamic linker
-.RB ( ld.so (8)).
-.IP
-The arguments
-.IR arg3 ,
-.IR arg4 ,
-and
-.I arg5
-are ignored.
-.\" prctl PR_GET_FP_MODE
-.TP
-.BR PR_GET_FP_MODE " (since Linux 4.0, only on MIPS)"
-Return (as the function result)
-the current floating-point mode (see the description of
-.B PR_SET_FP_MODE
-for details).
-.IP
-On success,
-the call returns a bit mask which represents the current floating-point mode.
-.IP
-The arguments
-.IR arg2 ,
-.IR arg3 ,
-.IR arg4 ,
-and
-.I arg5
-are ignored.
-.\" prctl PR_SET_FPEMU
-.TP
-.BR PR_SET_FPEMU " (since Linux 2.4.18, 2.5.9, only on ia64)"
-Set floating-point emulation control bits to \fIarg2\fP.
-Pass
-.B PR_FPEMU_NOPRINT
-to silently emulate floating-point operation accesses, or
-.B PR_FPEMU_SIGFPE
-to not emulate floating-point operations and send
-.B SIGFPE
-instead.
-.\" prctl PR_GET_FPEMU
-.TP
-.BR PR_GET_FPEMU " (since Linux 2.4.18, 2.5.9, only on ia64)"
-Return floating-point emulation control bits,
-in the location pointed to by
-.IR "(int\~*) arg2" .
-.\" prctl PR_SET_FPEXC
-.TP
-.BR PR_SET_FPEXC " (since Linux 2.4.21, 2.5.32, only on PowerPC)"
-Set floating-point exception mode to \fIarg2\fP.
-Pass \fBPR_FP_EXC_SW_ENABLE\fP to use FPEXC for FP exception enables,
-\fBPR_FP_EXC_DIV\fP for floating-point divide by zero,
-\fBPR_FP_EXC_OVF\fP for floating-point overflow,
-\fBPR_FP_EXC_UND\fP for floating-point underflow,
-\fBPR_FP_EXC_RES\fP for floating-point inexact result,
-\fBPR_FP_EXC_INV\fP for floating-point invalid operation,
-\fBPR_FP_EXC_DISABLED\fP for FP exceptions disabled,
-\fBPR_FP_EXC_NONRECOV\fP for async nonrecoverable exception mode,
-\fBPR_FP_EXC_ASYNC\fP for async recoverable exception mode,
-\fBPR_FP_EXC_PRECISE\fP for precise exception mode.
-.\" prctl PR_GET_FPEXC
-.TP
-.BR PR_GET_FPEXC " (since Linux 2.4.21, 2.5.32, only on PowerPC)"
-Return floating-point exception mode,
-in the location pointed to by
-.IR "(int\~*) arg2" .
-.\" prctl PR_SET_IO_FLUSHER
-.TP
-.BR PR_SET_IO_FLUSHER " (since Linux 5.6)"
-If a user process is involved in the block layer or filesystem I/O path,
-and can allocate memory while processing I/O requests it must set
-\fIarg2\fP to 1.
-This will put the process in the IO_FLUSHER state,
-which allows it special treatment to make progress when allocating memory.
-If \fIarg2\fP is 0, the process will clear the IO_FLUSHER state, and
-the default behavior will be used.
-.IP
-The calling process must have the
-.B CAP_SYS_RESOURCE
-capability.
-.IP
-.IR arg3 ,
-.IR arg4 ,
-and
-.I arg5
-must be zero.
-.IP
-The IO_FLUSHER state is inherited by a child process created via
-.BR fork (2)
-and is preserved across
-.BR execve (2).
-.IP
-Examples of IO_FLUSHER applications are FUSE daemons, SCSI device
-emulation daemons, and daemons that perform error handling like multipath
-path recovery applications.
-.\" prctl PR_GET_IO_FLUSHER
-.TP
-.B PR_GET_IO_FLUSHER (Since Linux 5.6)
-Return (as the function result) the IO_FLUSHER state of the caller.
-A value of 1 indicates that the caller is in the IO_FLUSHER state;
-0 indicates that the caller is not in the IO_FLUSHER state.
-.IP
-The calling process must have the
-.B CAP_SYS_RESOURCE
-capability.
-.IP
-.IR arg2 ,
-.IR arg3 ,
-.IR arg4 ,
-and
-.I arg5
-must be zero.
-.\" prctl PR_SET_KEEPCAPS
-.TP
-.BR PR_SET_KEEPCAPS " (since Linux 2.2.18)"
-Set the state of the calling thread's "keep capabilities" flag.
-The effect of this flag is described in
-.BR capabilities (7).
-.I arg2
-must be either 0 (clear the flag)
-or 1 (set the flag).
-The "keep capabilities" value will be reset to 0 on subsequent calls to
-.BR execve (2).
-.\" prctl PR_GET_KEEPCAPS
-.TP
-.BR PR_GET_KEEPCAPS " (since Linux 2.2.18)"
-Return (as the function result) the current state of the calling thread's
-"keep capabilities" flag.
-See
-.BR capabilities (7)
-for a description of this flag.
-.\" prctl PR_MCE_KILL
-.TP
-.BR PR_MCE_KILL " (since Linux 2.6.32)"
-Set the machine check memory corruption kill policy for the calling thread.
-If
-.I arg2
-is
-.BR PR_MCE_KILL_CLEAR ,
-clear the thread memory corruption kill policy and use the system-wide default.
-(The system-wide default is defined by
-.IR /proc/sys/vm/memory_failure_early_kill ;
-see
-.BR proc (5).)
-If
-.I arg2
-is
-.BR PR_MCE_KILL_SET ,
-use a thread-specific memory corruption kill policy.
-In this case,
-.I arg3
-defines whether the policy is
-.I early kill
-.RB ( PR_MCE_KILL_EARLY ),
-.I late kill
-.RB ( PR_MCE_KILL_LATE ),
-or the system-wide default
-.RB ( PR_MCE_KILL_DEFAULT ).
-Early kill means that the thread receives a
-.B SIGBUS
-signal as soon as hardware memory corruption is detected inside
-its address space.
-In late kill mode, the process is killed only when it accesses a corrupted page.
-See
-.BR sigaction (2)
-for more information on the
-.B SIGBUS
-signal.
-The policy is inherited by children.
-The remaining unused
-.BR prctl ()
-arguments must be zero for future compatibility.
-.\" prctl PR_MCE_KILL_GET
-.TP
-.BR PR_MCE_KILL_GET " (since Linux 2.6.32)"
-Return (as the function result)
-the current per-process machine check kill policy.
-All unused
-.BR prctl ()
-arguments must be zero.
-.\" prctl PR_SET_MM
-.TP
-.BR PR_SET_MM " (since Linux 3.3)"
-.\" commit 028ee4be34a09a6d48bdf30ab991ae933a7bc036
-Modify certain kernel memory map descriptor fields
-of the calling process.
-Usually these fields are set by the kernel and dynamic loader (see
-.BR ld.so (8)
-for more information) and a regular application should not use this feature.
-However, there are cases, such as self-modifying programs,
-where a program might find it useful to change its own memory map.
-.IP
-The calling process must have the
-.B CAP_SYS_RESOURCE
-capability.
-The value in
-.I arg2
-is one of the options below, while
-.I arg3
-provides a new value for the option.
-The
-.I arg4
-and
-.I arg5
-arguments must be zero if unused.
-.IP
-Before Linux 3.10,
-.\" commit 52b3694157e3aa6df871e283115652ec6f2d31e0
-this feature is available only if the kernel is built with the
-.B CONFIG_CHECKPOINT_RESTORE
-option enabled.
-.RS
-.TP
-.B PR_SET_MM_START_CODE
-Set the address above which the program text can run.
-The corresponding memory area must be readable and executable,
-but not writable or shareable (see
-.BR mprotect (2)
-and
-.BR mmap (2)
-for more information).
-.TP
-.B PR_SET_MM_END_CODE
-Set the address below which the program text can run.
-The corresponding memory area must be readable and executable,
-but not writable or shareable.
-.TP
-.B PR_SET_MM_START_DATA
-Set the address above which initialized and
-uninitialized (bss) data are placed.
-The corresponding memory area must be readable and writable,
-but not executable or shareable.
-.TP
-.B PR_SET_MM_END_DATA
-Set the address below which initialized and
-uninitialized (bss) data are placed.
-The corresponding memory area must be readable and writable,
-but not executable or shareable.
-.TP
-.B PR_SET_MM_START_STACK
-Set the start address of the stack.
-The corresponding memory area must be readable and writable.
-.TP
-.B PR_SET_MM_START_BRK
-Set the address above which the program heap can be expanded with
-.BR brk (2)
-call.
-The address must be greater than the ending address of
-the current program data segment.
-In addition, the combined size of the resulting heap and
-the size of the data segment can't exceed the
-.B RLIMIT_DATA
-resource limit (see
-.BR setrlimit (2)).
-.TP
-.B PR_SET_MM_BRK
-Set the current
-.BR brk (2)
-value.
-The requirements for the address are the same as for the
-.B PR_SET_MM_START_BRK
-option.
-.PP
-The following options are available since Linux 3.5.
-.\" commit fe8c7f5cbf91124987106faa3bdf0c8b955c4cf7
-.TP
-.B PR_SET_MM_ARG_START
-Set the address above which the program command line is placed.
-.TP
-.B PR_SET_MM_ARG_END
-Set the address below which the program command line is placed.
-.TP
-.B PR_SET_MM_ENV_START
-Set the address above which the program environment is placed.
-.TP
-.B PR_SET_MM_ENV_END
-Set the address below which the program environment is placed.
-.IP
-The address passed with
-.BR PR_SET_MM_ARG_START ,
-.BR PR_SET_MM_ARG_END ,
-.BR PR_SET_MM_ENV_START ,
-and
-.B PR_SET_MM_ENV_END
-should belong to a process stack area.
-Thus, the corresponding memory area must be readable, writable, and
-(depending on the kernel configuration) have the
-.B MAP_GROWSDOWN
-attribute set (see
-.BR mmap (2)).
-.TP
-.B PR_SET_MM_AUXV
-Set a new auxiliary vector.
-The
-.I arg3
-argument should provide the address of the vector.
-The
-.I arg4
-is the size of the vector.
-.TP
-.B PR_SET_MM_EXE_FILE
-.\" commit b32dfe377102ce668775f8b6b1461f7ad428f8b6
-Supersede the
-.IR /proc/ pid /exe
-symbolic link with a new one pointing to a new executable file
-identified by the file descriptor provided in
-.I arg3
-argument.
-The file descriptor should be obtained with a regular
-.BR open (2)
-call.
-.IP
-To change the symbolic link, one needs to unmap all existing
-executable memory areas, including those created by the kernel itself
-(for example the kernel usually creates at least one executable
-memory area for the ELF
-.I .text
-section).
-.IP
-In Linux 4.9 and earlier, the
-.\" commit 3fb4afd9a504c2386b8435028d43283216bf588e
-.B PR_SET_MM_EXE_FILE
-operation can be performed only once in a process's lifetime;
-attempting to perform the operation a second time results in the error
-.BR EPERM .
-This restriction was enforced for security reasons that were subsequently
-deemed specious,
-and the restriction was removed in Linux 4.10 because some
-user-space applications needed to perform this operation more than once.
-.PP
-The following options are available since Linux 3.18.
-.\" commit f606b77f1a9e362451aca8f81d8f36a3a112139e
-.TP
-.B PR_SET_MM_MAP
-Provides one-shot access to all the addresses by passing in a
-.I struct prctl_mm_map
-(as defined in \fI<linux/prctl.h>\fP).
-The
-.I arg4
-argument should provide the size of the struct.
-.IP
-This feature is available only if the kernel is built with the
-.B CONFIG_CHECKPOINT_RESTORE
-option enabled.
-.TP
-.B PR_SET_MM_MAP_SIZE
-Returns the size of the
-.I struct prctl_mm_map
-the kernel expects.
-This allows user space to find a compatible struct.
-The
-.I arg4
-argument should be a pointer to an unsigned int.
-.IP
-This feature is available only if the kernel is built with the
-.B CONFIG_CHECKPOINT_RESTORE
-option enabled.
-.RE
-.\" prctl PR_SET_VMA
-.TP
-.BR PR_SET_VMA " (since Linux 5.17)"
-.\" Commit 9a10064f5625d5572c3626c1516e0bebc6c9fe9b
-Sets an attribute specified in
-.I arg2
-for virtual memory areas starting from the address specified in
-.I arg3
-and spanning the size specified in
-.IR arg4 .
-.I arg5
-specifies the value of the attribute to be set.
-.IP
-Note that assigning an attribute to a virtual memory area
-might prevent it from being merged with adjacent virtual memory areas
-due to the difference in that attribute's value.
-.IP
-Currently,
-.I arg2
-must be one of:
-.RS
-.TP
-.B PR_SET_VMA_ANON_NAME
-Set a name for anonymous virtual memory areas.
-.I arg5
-should be a pointer to a null-terminated string containing the name.
-The name length including null byte cannot exceed 80 bytes.
-If
-.I arg5
-is NULL, the name of the appropriate anonymous virtual memory areas
-will be reset.
-The name can contain only printable ascii characters (including space),
-except \[aq][\[aq], \[aq]]\[aq], \[aq]\e\[aq], \[aq]$\[aq], and \[aq]\[ga]\[aq].
-.RE
-.\" prctl PR_MPX_ENABLE_MANAGEMENT
-.TP
-.BR PR_MPX_ENABLE_MANAGEMENT ", " PR_MPX_DISABLE_MANAGEMENT " (since Linux 3.19, removed in Linux 5.4; only on x86)"
-.\" commit fe3d197f84319d3bce379a9c0dc17b1f48ad358c
-.\" See also http://lwn.net/Articles/582712/
-.\" See also https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler
-Enable or disable kernel management of Memory Protection eXtensions (MPX)
-bounds tables.
-The
-.IR arg2 ,
-.IR arg3 ,
-.IR arg4 ,
-and
-.I arg5
-.\" commit e9d1b4f3c60997fe197bf0243cb4a41a44387a88
-arguments must be zero.
-.IP
-MPX is a hardware-assisted mechanism for performing bounds checking on
-pointers.
-It consists of a set of registers storing bounds information
-and a set of special instruction prefixes that tell the CPU on which
-instructions it should do bounds enforcement.
-There is a limited number of these registers and
-when there are more pointers than registers,
-their contents must be "spilled" into a set of tables.
-These tables are called "bounds tables" and the MPX
-.BR prctl ()
-operations control
-whether the kernel manages their allocation and freeing.
-.IP
-When management is enabled, the kernel will take over allocation
-and freeing of the bounds tables.
-It does this by trapping the #BR exceptions that result
-at first use of missing bounds tables and
-instead of delivering the exception to user space,
-it allocates the table and populates the bounds directory
-with the location of the new table.
-For freeing, the kernel checks to see if bounds tables are
-present for memory which is not allocated, and frees them if so.
-.IP
-Before enabling MPX management using
-.BR PR_MPX_ENABLE_MANAGEMENT ,
-the application must first have allocated a user-space buffer for
-the bounds directory and placed the location of that directory in the
-.I bndcfgu
-register.
-.IP
-These calls fail if the CPU or kernel does not support MPX.
-Kernel support for MPX is enabled via the
-.B CONFIG_X86_INTEL_MPX
-configuration option.
-You can check whether the CPU supports MPX by looking for the
-.I mpx
-CPUID bit, like with the following command:
-.IP
-.in +4n
-.EX
-cat /proc/cpuinfo | grep \[aq] mpx \[aq]
-.EE
-.in
-.IP
-A thread may not switch in or out of long (64-bit) mode while MPX is
-enabled.
-.IP
-All threads in a process are affected by these calls.
-.IP
-The child of a
-.BR fork (2)
-inherits the state of MPX management.
-During
-.BR execve (2),
-MPX management is reset to a state as if
-.B PR_MPX_DISABLE_MANAGEMENT
-had been called.
-.IP
-For further information on Intel MPX, see the kernel source file
-.IR Documentation/x86/intel_mpx.txt .
-.IP
-.\" commit f240652b6032b48ad7fa35c5e701cc4c8d697c0b
-.\" See also https://lkml.kernel.org/r/20190705175321.DB42F0AD@viggo.jf.intel.com
-Due to a lack of toolchain support,
-.BR PR_MPX_ENABLE_MANAGEMENT " and " PR_MPX_DISABLE_MANAGEMENT
-are not supported in Linux 5.4 and later.
-.\" prctl PR_SET_NAME
-.TP
-.BR PR_SET_NAME " (since Linux 2.6.9)"
-Set the name of the calling thread,
-using the value in the location pointed to by
-.IR "(char\~*) arg2" .
-The name can be up to 16 bytes long,
-.\" TASK_COMM_LEN in include/linux/sched.h
-including the terminating null byte.
-(If the length of the string, including the terminating null byte,
-exceeds 16 bytes, the string is silently truncated.)
-This is the same attribute that can be set via
-.BR pthread_setname_np (3)
-and retrieved using
-.BR pthread_getname_np (3).
-The attribute is likewise accessible via
-.IR /proc/self/task/ tid /comm
-(see
-.BR proc (5)),
-where
-.I tid
-is the thread ID of the calling thread, as returned by
-.BR gettid (2).
-.\" prctl PR_GET_NAME
-.TP
-.BR PR_GET_NAME " (since Linux 2.6.11)"
-Return the name of the calling thread,
-in the buffer pointed to by
-.IR "(char\~*) arg2" .
-The buffer should allow space for up to 16 bytes;
-the returned string will be null-terminated.
-.\" prctl PR_SET_NO_NEW_PRIVS
-.TP
-.BR PR_SET_NO_NEW_PRIVS " (since Linux 3.5)"
-Set the calling thread's
-.I no_new_privs
-attribute to the value in
-.IR arg2 .
-With
-.I no_new_privs
-set to 1,
-.BR execve (2)
-promises not to grant privileges to do anything
-that could not have been done without the
-.BR execve (2)
-call (for example,
-rendering the set-user-ID and set-group-ID mode bits,
-and file capabilities non-functional).
-Once set, the
-.I no_new_privs
-attribute cannot be unset.
-The setting of this attribute is inherited by children created by
-.BR fork (2)
-and
-.BR clone (2),
-and preserved across
-.BR execve (2).
-.IP
-Since Linux 4.10,
-the value of a thread's
-.I no_new_privs
-attribute can be viewed via the
-.I NoNewPrivs
-field in the
-.IR /proc/ pid /status
-file.
-.IP
-For more information, see the kernel source file
-.I Documentation/userspace\-api/no_new_privs.rst
-.\" commit 40fde647ccb0ae8c11d256d271e24d385eed595b
-(or
-.I Documentation/prctl/no_new_privs.txt
-before Linux 4.13).
-See also
-.BR seccomp (2).
-.\" prctl PR_GET_NO_NEW_PRIVS
-.TP
-.BR PR_GET_NO_NEW_PRIVS " (since Linux 3.5)"
-Return (as the function result) the value of the
-.I no_new_privs
-attribute for the calling thread.
-A value of 0 indicates the regular
-.BR execve (2)
-behavior.
-A value of 1 indicates
-.BR execve (2)
-will operate in the privilege-restricting mode described above.
-.\" prctl PR_PAC_RESET_KEYS
-.\" commit ba830885656414101b2f8ca88786524d4bb5e8c1
-.TP
-.BR PR_PAC_RESET_KEYS " (since Linux 5.0, only on arm64)"
-Securely reset the thread's pointer authentication keys
-to fresh random values generated by the kernel.
-.IP
-The set of keys to be reset is specified by
-.IR arg2 ,
-which must be a logical OR of zero or more of the following:
-.RS
-.TP
-.B PR_PAC_APIAKEY
-instruction authentication key A
-.TP
-.B PR_PAC_APIBKEY
-instruction authentication key B
-.TP
-.B PR_PAC_APDAKEY
-data authentication key A
-.TP
-.B PR_PAC_APDBKEY
-data authentication key B
-.TP
-.B PR_PAC_APGAKEY
-generic authentication \[lq]A\[rq] key.
-.IP
-(Yes folks, there really is no generic B key.)
-.RE
-.IP
-As a special case, if
-.I arg2
-is zero, then all the keys are reset.
-Since new keys could be added in future,
-this is the recommended way to completely wipe the existing keys
-when establishing a clean execution context.
-Note that there is no need to use
-.B PR_PAC_RESET_KEYS
-in preparation for calling
-.BR execve (2),
-since
-.BR execve (2)
-resets all the pointer authentication keys.
-.IP
-The remaining arguments
-.IR arg3 ", " arg4 ", and " arg5
-must all be zero.
-.IP
-If the arguments are invalid,
-and in particular if
-.I arg2
-contains set bits that are unrecognized
-or that correspond to a key not available on this platform,
-then the call fails with error
-.BR EINVAL .
-.IP
-.B Warning:
-Because the compiler or run-time environment
-may be using some or all of the keys,
-a successful
-.B PR_PAC_RESET_KEYS
-may crash the calling process.
-The conditions for using it safely are complex and system-dependent.
-Don't use it unless you know what you are doing.
-.IP
-For more information, see the kernel source file
-.I Documentation/arm64/pointer\-authentication.rst
-.\"commit b693d0b372afb39432e1c49ad7b3454855bc6bed
-(or
-.I Documentation/arm64/pointer\-authentication.txt
-before Linux 5.3).
-.\" prctl PR_SET_PDEATHSIG
-.TP
-.BR PR_SET_PDEATHSIG " (since Linux 2.1.57)"
-Set the parent-death signal
-of the calling process to \fIarg2\fP (either a signal value
-in the range 1..\c
-.BR NSIG "\-1" ,
-or 0 to clear).
-This is the signal that the calling process will get when its
-parent dies.
-.IP
-.IR Warning :
-.\" https://bugzilla.kernel.org/show_bug.cgi?id=43300
-the "parent" in this case is considered to be the
-.I thread
-that created this process.
-In other words, the signal will be sent when that thread terminates
-(via, for example,
-.BR pthread_exit (3)),
-rather than after all of the threads in the parent process terminate.
-.IP
-The parent-death signal is sent upon subsequent termination of the parent
-thread and also upon termination of each subreaper process
-(see the description of
-.B PR_SET_CHILD_SUBREAPER
-above) to which the caller is subsequently reparented.
-If the parent thread and all ancestor subreapers have already terminated
-by the time of the
-.B PR_SET_PDEATHSIG
-operation, then no parent-death signal is sent to the caller.
-.IP
-The parent-death signal is process-directed (see
-.BR signal (7))
-and, if the child installs a handler using the
-.BR sigaction (2)
-.B SA_SIGINFO
-flag, the
-.I si_pid
-field of the
-.I siginfo_t
-argument of the handler contains the PID of the terminating parent process.
-.IP
-The parent-death signal setting is cleared for the child of a
-.BR fork (2).
-It is also
-(since Linux 2.4.36 / 2.6.23)
-.\" commit d2d56c5f51028cb9f3d800882eb6f4cbd3f9099f
-cleared when executing a set-user-ID or set-group-ID binary,
-or a binary that has associated capabilities (see
-.BR capabilities (7));
-otherwise, this value is preserved across
-.BR execve (2).
-The parent-death signal setting is also cleared upon changes to
-any of the following thread credentials:
-.\" FIXME capability changes can also trigger this; see
-.\" kernel/cred.c::commit_creds in the Linux 5.6 source.
-effective user ID, effective group ID, filesystem user ID,
-or filesystem group ID.
-.\" prctl PR_GET_PDEATHSIG
-.TP
-.BR PR_GET_PDEATHSIG " (since Linux 2.3.15)"
-Return the current value of the parent process death signal,
-in the location pointed to by
-.IR "(int\~*) arg2" .
-.\" prctl PR_SET_PTRACER
-.TP
-.BR PR_SET_PTRACER " (since Linux 3.4)"
-.\" commit 2d514487faf188938a4ee4fb3464eeecfbdcf8eb
-.\" commit bf06189e4d14641c0148bea16e9dd24943862215
-This is meaningful only when the Yama LSM is enabled and in mode 1
-("restricted ptrace", visible via
-.IR /proc/sys/kernel/yama/ptrace_scope ).
-When a "ptracer process ID" is passed in \fIarg2\fP,
-the caller is declaring that the ptracer process can
-.BR ptrace (2)
-the calling process as if it were a direct process ancestor.
-Each
-.B PR_SET_PTRACER
-operation replaces the previous "ptracer process ID".
-Employing
-.B PR_SET_PTRACER
-with
-.I arg2
-set to 0 clears the caller's "ptracer process ID".
-If
-.I arg2
-is
-.BR PR_SET_PTRACER_ANY ,
-the ptrace restrictions introduced by Yama are effectively disabled for the
-calling process.
-.IP
-For further information, see the kernel source file
-.I Documentation/admin\-guide/LSM/Yama.rst
-.\" commit 90bb766440f2147486a2acc3e793d7b8348b0c22
-(or
-.I Documentation/security/Yama.txt
-before Linux 4.13).
-.\" prctl PR_SET_SECCOMP
-.TP
-.BR PR_SET_SECCOMP " (since Linux 2.6.23)"
-.\" See http://thread.gmane.org/gmane.linux.kernel/542632
-.\" [PATCH 0 of 2] seccomp updates
-.\" andrea@cpushare.com
-Set the secure computing (seccomp) mode for the calling thread, to limit
-the available system calls.
-The more recent
-.BR seccomp (2)
-system call provides a superset of the functionality of
-.BR PR_SET_SECCOMP ,
-and is the preferred interface for new applications.
-.IP
-The seccomp mode is selected via
-.IR arg2 .
-(The seccomp constants are defined in
-.IR <linux/seccomp.h> .)
-The following values can be specified:
-.RS
-.TP
-.BR SECCOMP_MODE_STRICT " (since Linux 2.6.23)"
-See the description of
-.B SECCOMP_SET_MODE_STRICT
-in
-.BR seccomp (2).
-.IP
-This operation is available only
-if the kernel is configured with
-.B CONFIG_SECCOMP
-enabled.
-.TP
-.BR SECCOMP_MODE_FILTER " (since Linux 3.5)"
-The allowed system calls are defined by a pointer
-to a Berkeley Packet Filter passed in
-.IR arg3 .
-This argument is a pointer to
-.IR "struct sock_fprog" ;
-it can be designed to filter
-arbitrary system calls and system call arguments.
-See the description of
-.B SECCOMP_SET_MODE_FILTER
-in
-.BR seccomp (2).
-.IP
-This operation is available only
-if the kernel is configured with
-.B CONFIG_SECCOMP_FILTER
-enabled.
-.RE
-.IP
-For further details on seccomp filtering, see
-.BR seccomp (2).
-.\" prctl PR_GET_SECCOMP
-.TP
-.BR PR_GET_SECCOMP " (since Linux 2.6.23)"
-Return (as the function result)
-the secure computing mode of the calling thread.
-If the caller is not in secure computing mode, this operation returns 0;
-if the caller is in strict secure computing mode, then the
-.BR prctl ()
-call will cause a
-.B SIGKILL
-signal to be sent to the process.
-If the caller is in filter mode, and this system call is allowed by the
-seccomp filters, it returns 2; otherwise, the process is killed with a
-.B SIGKILL
-signal.
-.IP
-This operation is available only
-if the kernel is configured with
-.B CONFIG_SECCOMP
-enabled.
-.IP
-Since Linux 3.8, the
-.I Seccomp
-field of the
-.IR /proc/ pid /status
-file provides a method of obtaining the same information,
-without the risk that the process is killed; see
-.BR proc (5).
-.\" prctl PR_SET_SECUREBITS
-.TP
-.BR PR_SET_SECUREBITS " (since Linux 2.6.26)"
-Set the "securebits" flags of the calling thread to the value supplied in
-.IR arg2 .
-See
-.BR capabilities (7).
-.\" prctl PR_GET_SECUREBITS
-.TP
-.BR PR_GET_SECUREBITS " (since Linux 2.6.26)"
-Return (as the function result)
-the "securebits" flags of the calling thread.
-See
-.BR capabilities (7).
-.\" prctl PR_GET_SPECULATION_CTRL
-.TP
-.BR PR_GET_SPECULATION_CTRL " (since Linux 4.17)"
-Return (as the function result)
-the state of the speculation misfeature specified in
-.IR arg2 .
-Currently, the only permitted value for this argument is
-.B PR_SPEC_STORE_BYPASS
-(otherwise the call fails with the error
-.BR ENODEV ).
-.IP
-The return value uses bits 0-3 with the following meaning:
-.RS
-.TP
-.B PR_SPEC_PRCTL
-Mitigation can be controlled per thread by
-.BR PR_SET_SPECULATION_CTRL .
-.TP
-.B PR_SPEC_ENABLE
-The speculation feature is enabled, mitigation is disabled.
-.TP
-.B PR_SPEC_DISABLE
-The speculation feature is disabled, mitigation is enabled.
-.TP
-.B PR_SPEC_FORCE_DISABLE
-Same as
-.B PR_SPEC_DISABLE
-but cannot be undone.
-.TP
-.BR PR_SPEC_DISABLE_NOEXEC " (since Linux 5.1)"
-Same as
-.BR PR_SPEC_DISABLE ,
-but the state will be cleared on
-.BR execve (2).
-.RE
-.IP
-If all bits are 0,
-then the CPU is not affected by the speculation misfeature.
-.IP
-If
-.B PR_SPEC_PRCTL
-is set, then per-thread control of the mitigation is available.
-If not set,
-.BR prctl ()
-for the speculation misfeature will fail.
-.IP
-The
-.IR arg3 ,
-.IR arg4 ,
-and
-.I arg5
-arguments must be specified as 0; otherwise the call fails with the error
-.BR EINVAL .
-.\" prctl PR_SET_SPECULATION_CTRL
-.TP
-.BR PR_SET_SPECULATION_CTRL " (since Linux 4.17)"
-.\" commit b617cfc858161140d69cc0b5cc211996b557a1c7
-.\" commit 356e4bfff2c5489e016fdb925adbf12a1e3950ee
-Sets the state of the speculation misfeature specified in
-.IR arg2 .
-The speculation-misfeature settings are per-thread attributes.
-.IP
-Currently,
-.I arg2
-must be one of:
-.RS
-.TP
-.B PR_SPEC_STORE_BYPASS
-Set the state of the speculative store bypass misfeature.
-.\" commit 9137bb27e60e554dab694eafa4cca241fa3a694f
-.TP
-.BR PR_SPEC_INDIRECT_BRANCH " (since Linux 4.20)"
-Set the state of the indirect branch speculation misfeature.
-.RE
-.IP
-If
-.I arg2
-does not have one of the above values,
-then the call fails with the error
-.BR ENODEV .
-.IP
-The
-.I arg3
-argument is used to hand in the control value,
-which is one of the following:
-.RS
-.TP
-.B PR_SPEC_ENABLE
-The speculation feature is enabled, mitigation is disabled.
-.TP
-.B PR_SPEC_DISABLE
-The speculation feature is disabled, mitigation is enabled.
-.TP
-.B PR_SPEC_FORCE_DISABLE
-Same as
-.BR PR_SPEC_DISABLE ,
-but cannot be undone.
-A subsequent
-.BR prctl (\c
-.IR arg2 ,
-.BR PR_SPEC_ENABLE )
-with the same value for
-.I arg2
-will fail with the error
-.BR EPERM .
-.\" commit 71368af9027f18fe5d1c6f372cfdff7e4bde8b48
-.TP
-.BR PR_SPEC_DISABLE_NOEXEC " (since Linux 5.1)"
-Same as
-.BR PR_SPEC_DISABLE ,
-but the state will be cleared on
-.BR execve (2).
-Currently only supported for
-.I arg2
-equal to
-.B PR_SPEC_STORE_BYPASS.
-.RE
-.IP
-Any unsupported value in
-.I arg3
-will result in the call failing with the error
-.BR ERANGE .
-.IP
-The
-.I arg4
-and
-.I arg5
-arguments must be specified as 0; otherwise the call fails with the error
-.BR EINVAL .
-.IP
-The speculation feature can also be controlled by the
-.B spec_store_bypass_disable
-boot parameter.
-This parameter may enforce a read-only policy which will result in the
-.BR prctl ()
-call failing with the error
-.BR ENXIO .
-For further details, see the kernel source file
-.IR Documentation/admin\-guide/kernel\-parameters.txt .
-.\" prctl PR_SVE_SET_VL
-.\" commit 2d2123bc7c7f843aa9db87720de159a049839862
-.\" linux-5.6/Documentation/arm64/sve.rst
-.TP
-.BR PR_SVE_SET_VL " (since Linux 4.15, only on arm64)"
-Configure the thread's SVE vector length,
-as specified by
-.IR "(int) arg2" .
-Arguments
-.IR arg3 ,
-.IR arg4 ,
-and
-.I arg5
-are ignored.
-.IP
-The bits of
-.I arg2
-corresponding to
-.B PR_SVE_VL_LEN_MASK
-must be set to the desired vector length in bytes.
-This is interpreted as an upper bound:
-the kernel will select the greatest available vector length
-that does not exceed the value specified.
-In particular, specifying
-.B SVE_VL_MAX
-(defined in
-.I <asm/sigcontext.h>)
-for the
-.B PR_SVE_VL_LEN_MASK
-bits requests the maximum supported vector length.
-.IP
-In addition, the other bits of
-.I arg2
-must be set to one of the following combinations of flags:
-.RS
-.TP
-.B 0
-Perform the change immediately.
-At the next
-.BR execve (2)
-in the thread,
-the vector length will be reset to the value configured in
-.IR /proc/sys/abi/sve_default_vector_length .
-.TP
-.B PR_SVE_VL_INHERIT
-Perform the change immediately.
-Subsequent
-.BR execve (2)
-calls will preserve the new vector length.
-.TP
-.B PR_SVE_SET_VL_ONEXEC
-Defer the change, so that it is performed at the next
-.BR execve (2)
-in the thread.
-Further
-.BR execve (2)
-calls will reset the vector length to the value configured in
-.IR /proc/sys/abi/sve_default_vector_length .
-.TP
-.B "PR_SVE_SET_VL_ONEXEC | PR_SVE_VL_INHERIT"
-Defer the change, so that it is performed at the next
-.BR execve (2)
-in the thread.
-Further
-.BR execve (2)
-calls will preserve the new vector length.
-.RE
-.IP
-In all cases,
-any previously pending deferred change is canceled.
-.IP
-The call fails with error
-.B EINVAL
-if SVE is not supported on the platform, if
-.I arg2
-is unrecognized or invalid, or the value in the bits of
-.I arg2
-corresponding to
-.B PR_SVE_VL_LEN_MASK
-is outside the range
-.BR SVE_VL_MIN .. SVE_VL_MAX
-or is not a multiple of 16.
-.IP
-On success,
-a nonnegative value is returned that describes the
-.I selected
-configuration.
-If
-.B PR_SVE_SET_VL_ONEXEC
-was included in
-.IR arg2 ,
-then the configuration described by the return value
-will take effect at the next
-.BR execve (2).
-Otherwise, the configuration is already in effect when the
-.B PR_SVE_SET_VL
-call returns.
-In either case, the value is encoded in the same way as the return value of
-.BR PR_SVE_GET_VL .
-Note that there is no explicit flag in the return value
-corresponding to
-.BR PR_SVE_SET_VL_ONEXEC .
-.IP
-The configuration (including any pending deferred change)
-is inherited across
-.BR fork (2)
-and
-.BR clone (2).
-.IP
-For more information, see the kernel source file
-.I Documentation/arm64/sve.rst
-.\"commit b693d0b372afb39432e1c49ad7b3454855bc6bed
-(or
-.I Documentation/arm64/sve.txt
-before Linux 5.3).
-.IP
-.B Warning:
-Because the compiler or run-time environment
-may be using SVE, using this call without the
-.B PR_SVE_SET_VL_ONEXEC
-flag may crash the calling process.
-The conditions for using it safely are complex and system-dependent.
-Don't use it unless you really know what you are doing.
-.\" prctl PR_SVE_GET_VL
-.TP
-.BR PR_SVE_GET_VL " (since Linux 4.15, only on arm64)"
-Get the thread's current SVE vector length configuration.
-.IP
-Arguments
-.IR arg2 ", " arg3 ", " arg4 ", and " arg5
-are ignored.
-.IP
-Provided that the kernel and platform support SVE,
-this operation always succeeds,
-returning a nonnegative value that describes the
-.I current
-configuration.
-The bits corresponding to
-.B PR_SVE_VL_LEN_MASK
-contain the currently configured vector length in bytes.
-The bit corresponding to
-.B PR_SVE_VL_INHERIT
-indicates whether the vector length will be inherited
-across
-.BR execve (2).
-.IP
-Note that there is no way to determine whether there is
-a pending vector length change that has not yet taken effect.
-.IP
-For more information, see the kernel source file
-.I Documentation/arm64/sve.rst
-.\"commit b693d0b372afb39432e1c49ad7b3454855bc6bed
-(or
-.I Documentation/arm64/sve.txt
-before Linux 5.3).
-.TP
-.\" prctl PR_SET_SYSCALL_USER_DISPATCH
-.\" commit 1446e1df9eb183fdf81c3f0715402f1d7595d4
-.BR PR_SET_SYSCALL_USER_DISPATCH " (since Linux 5.11, x86 only)"
-Configure the Syscall User Dispatch mechanism
-for the calling thread.
-This mechanism allows an application
-to selectively intercept system calls
-so that they can be handled within the application itself.
-Interception takes the form of a thread-directed
-.B SIGSYS
-signal that is delivered to the thread
-when it makes a system call.
-If intercepted,
-the system call is not executed by the kernel.
-.IP
-To enable this mechanism,
-.I arg2
-should be set to
-.BR PR_SYS_DISPATCH_ON .
-Once enabled, further system calls will be selectively intercepted,
-depending on a control variable provided by user space.
-In this case,
-.I arg3
-and
-.I arg4
-respectively identify the
-.I offset
-and
-.I length
-of a single contiguous memory region in the process address space
-from where system calls are always allowed to be executed,
-regardless of the control variable.
-(Typically, this area would include the area of memory
-containing the C library.)
-.IP
-.I arg5
-points to a char-sized variable
-that is a fast switch to allow/block system call execution
-without the overhead of doing another system call
-to re-configure Syscall User Dispatch.
-This control variable can either be set to
-.B SYSCALL_DISPATCH_FILTER_BLOCK
-to block system calls from executing
-or to
-.B SYSCALL_DISPATCH_FILTER_ALLOW
-to temporarily allow them to be executed.
-This value is checked by the kernel
-on every system call entry,
-and any unexpected value will raise
-an uncatchable
-.B SIGSYS
-at that time,
-killing the application.
-.IP
-When a system call is intercepted,
-the kernel sends a thread-directed
-.B SIGSYS
-signal to the triggering thread.
-Various fields will be set in the
-.I siginfo_t
-structure (see
-.BR sigaction (2))
-associated with the signal:
-.RS
-.IP \[bu] 3
-.I si_signo
-will contain
-.BR SIGSYS .
-.IP \[bu]
-.I si_call_addr
-will show the address of the system call instruction.
-.IP \[bu]
-.I si_syscall
-and
-.I si_arch
-will indicate which system call was attempted.
-.IP \[bu]
-.I si_code
-will contain
-.BR SYS_USER_DISPATCH .
-.IP \[bu]
-.I si_errno
-will be set to 0.
-.RE
-.IP
-The program counter will be as though the system call happened
-(i.e., the program counter will not point to the system call instruction).
-.IP
-When the signal handler returns to the kernel,
-the system call completes immediately
-and returns to the calling thread,
-without actually being executed.
-If necessary
-(i.e., when emulating the system call on user space.),
-the signal handler should set the system call return value
-to a sane value,
-by modifying the register context stored in the
-.I ucontext
-argument of the signal handler.
-See
-.BR sigaction (2),
-.BR sigreturn (2),
-and
-.BR getcontext (3)
-for more information.
-.IP
-If
-.I arg2
-is set to
-.BR PR_SYS_DISPATCH_OFF ,
-Syscall User Dispatch is disabled for that thread.
-the remaining arguments must be set to 0.
-.IP
-The setting is not preserved across
-.BR fork (2),
-.BR clone (2),
-or
-.BR execve (2).
-.IP
-For more information,
-see the kernel source file
-.I Documentation/admin\-guide/syscall\-user\-dispatch.rst
-.\" prctl PR_SET_TAGGED_ADDR_CTRL
-.\" commit 63f0c60379650d82250f22e4cf4137ef3dc4f43d
-.TP
-.BR PR_SET_TAGGED_ADDR_CTRL " (since Linux 5.4, only on arm64)"
-Controls support for passing tagged user-space addresses to the kernel
-(i.e., addresses where bits 56\[em]63 are not all zero).
-.IP
-The level of support is selected by
-.IR "arg2" ,
-which can be one of the following:
-.RS
-.TP
-.B 0
-Addresses that are passed
-for the purpose of being dereferenced by the kernel
-must be untagged.
-.TP
-.B PR_TAGGED_ADDR_ENABLE
-Addresses that are passed
-for the purpose of being dereferenced by the kernel
-may be tagged, with the exceptions summarized below.
-.RE
-.IP
-The remaining arguments
-.IR arg3 ", " arg4 ", and " arg5
-must all be zero.
-.\" Enforcement added in
-.\" commit 3e91ec89f527b9870fe42dcbdb74fd389d123a95
-.IP
-On success, the mode specified in
-.I arg2
-is set for the calling thread and the return value is 0.
-If the arguments are invalid,
-the mode specified in
-.I arg2
-is unrecognized,
-or if this feature is unsupported by the kernel
-or disabled via
-.IR /proc/sys/abi/tagged_addr_disabled ,
-the call fails with the error
-.BR EINVAL .
-.IP
-In particular, if
-.BR prctl ( PR_SET_TAGGED_ADDR_CTRL ,
-0, 0, 0, 0)
-fails with
-.BR EINVAL ,
-then all addresses passed to the kernel must be untagged.
-.IP
-Irrespective of which mode is set,
-addresses passed to certain interfaces
-must always be untagged:
-.RS
-.IP \[bu] 3
-.BR brk (2),
-.BR mmap (2),
-.BR shmat (2),
-.BR shmdt (2),
-and the
-.I new_address
-argument of
-.BR mremap (2).
-.IP
-(Prior to Linux 5.6 these accepted tagged addresses,
-but the behaviour may not be what you expect.
-Don't rely on it.)
-.IP \[bu]
-\[oq]polymorphic\[cq] interfaces
-that accept pointers to arbitrary types cast to a
-.I void *
-or other generic type, specifically
-.BR prctl (),
-.BR ioctl (2),
-and in general
-.BR setsockopt (2)
-(only certain specific
-.BR setsockopt (2)
-options allow tagged addresses).
-.RE
-.IP
-This list of exclusions may shrink
-when moving from one kernel version to a later kernel version.
-While the kernel may make some guarantees
-for backwards compatibility reasons,
-for the purposes of new software
-the effect of passing tagged addresses to these interfaces
-is unspecified.
-.IP
-The mode set by this call is inherited across
-.BR fork (2)
-and
-.BR clone (2).
-The mode is reset by
-.BR execve (2)
-to 0
-(i.e., tagged addresses not permitted in the user/kernel ABI).
-.IP
-For more information, see the kernel source file
-.IR Documentation/arm64/tagged\-address\-abi.rst .
-.IP
-.B Warning:
-This call is primarily intended for use by the run-time environment.
-A successful
-.B PR_SET_TAGGED_ADDR_CTRL
-call elsewhere may crash the calling process.
-The conditions for using it safely are complex and system-dependent.
-Don't use it unless you know what you are doing.
-.\" prctl PR_GET_TAGGED_ADDR_CTRL
-.\" commit 63f0c60379650d82250f22e4cf4137ef3dc4f43d
-.TP
-.BR PR_GET_TAGGED_ADDR_CTRL " (since Linux 5.4, only on arm64)"
-Returns the current tagged address mode
-for the calling thread.
-.IP
-Arguments
-.IR arg2 ", " arg3 ", " arg4 ", and " arg5
-must all be zero.
-.IP
-If the arguments are invalid
-or this feature is disabled or unsupported by the kernel,
-the call fails with
-.BR EINVAL .
-In particular, if
-.BR prctl ( PR_GET_TAGGED_ADDR_CTRL ,
-0, 0, 0, 0)
-fails with
-.BR EINVAL ,
-then this feature is definitely either unsupported,
-or disabled via
-.IR /proc/sys/abi/tagged_addr_disabled .
-In this case,
-all addresses passed to the kernel must be untagged.
-.IP
-Otherwise, the call returns a nonnegative value
-describing the current tagged address mode,
-encoded in the same way as the
-.I arg2
-argument of
-.BR PR_SET_TAGGED_ADDR_CTRL .
-.IP
-For more information, see the kernel source file
-.IR Documentation/arm64/tagged\-address\-abi.rst .
-.\"
-.\" prctl PR_TASK_PERF_EVENTS_DISABLE
-.TP
-.BR PR_TASK_PERF_EVENTS_DISABLE " (since Linux 2.6.31)"
-Disable all performance counters attached to the calling process,
-regardless of whether the counters were created by
-this process or another process.
-Performance counters created by the calling process for other
-processes are unaffected.
-For more information on performance counters, see the Linux kernel source file
-.IR tools/perf/design.txt .
-.IP
-Originally called
-.BR PR_TASK_PERF_COUNTERS_DISABLE ;
-.\" commit 1d1c7ddbfab358445a542715551301b7fc363e28
-renamed (retaining the same numerical value)
-in Linux 2.6.32.
-.\"
-.\" prctl PR_TASK_PERF_EVENTS_ENABLE
-.TP
-.BR PR_TASK_PERF_EVENTS_ENABLE " (since Linux 2.6.31)"
-The converse of
-.BR PR_TASK_PERF_EVENTS_DISABLE ;
-enable performance counters attached to the calling process.
-.IP
-Originally called
-.BR PR_TASK_PERF_COUNTERS_ENABLE ;
-.\" commit 1d1c7ddbfab358445a542715551301b7fc363e28
-renamed
-.\" commit cdd6c482c9ff9c55475ee7392ec8f672eddb7be6
-in Linux 2.6.32.
-.\"
-.\" prctl PR_SET_THP_DISABLE
-.TP
-.BR PR_SET_THP_DISABLE " (since Linux 3.15)"
-.\" commit a0715cc22601e8830ace98366c0c2bd8da52af52
-Set the state of the "THP disable" flag for the calling thread.
-If
-.I arg2
-has a nonzero value, the flag is set, otherwise it is cleared.
-Setting this flag provides a method
-for disabling transparent huge pages
-for jobs where the code cannot be modified, and using a malloc hook with
-.BR madvise (2)
-is not an option (i.e., statically allocated data).
-The setting of the "THP disable" flag is inherited by a child created via
-.BR fork (2)
-and is preserved across
-.BR execve (2).
-.\" prctl PR_GET_THP_DISABLE
-.TP
-.BR PR_GET_THP_DISABLE " (since Linux 3.15)"
-Return (as the function result) the current setting of the "THP disable"
-flag for the calling thread:
-either 1, if the flag is set, or 0, if it is not.
-.\" prctl PR_GET_TID_ADDRESS
-.TP
-.BR PR_GET_TID_ADDRESS " (since Linux 3.5)"
-.\" commit 300f786b2683f8bb1ec0afb6e1851183a479c86d
-Return the
-.I clear_child_tid
-address set by
-.BR set_tid_address (2)
-and the
-.BR clone (2)
-.B CLONE_CHILD_CLEARTID
-flag, in the location pointed to by
-.IR "(int\~**)\~arg2" .
-This feature is available only if the kernel is built with the
-.B CONFIG_CHECKPOINT_RESTORE
-option enabled.
-Note that since the
-.BR prctl ()
-system call does not have a compat implementation for
-the AMD64 x32 and MIPS n32 ABIs,
-and the kernel writes out a pointer using the kernel's pointer size,
-this operation expects a user-space buffer of 8 (not 4) bytes on these ABIs.
-.\" prctl PR_SET_TIMERSLACK
-.TP
-.BR PR_SET_TIMERSLACK " (since Linux 2.6.28)"
-.\" See https://lwn.net/Articles/369549/
-.\" commit 6976675d94042fbd446231d1bd8b7de71a980ada
-Each thread has two associated timer slack values:
-a "default" value, and a "current" value.
-This operation sets the "current" timer slack value for the calling thread.
-.I arg2
-is an unsigned long value, then maximum "current" value is ULONG_MAX and
-the minimum "current" value is 1.
-If the nanosecond value supplied in
-.I arg2
-is greater than zero, then the "current" value is set to this value.
-If
-.I arg2
-is equal to zero,
-the "current" timer slack is reset to the
-thread's "default" timer slack value.
-.IP
-The "current" timer slack is used by the kernel to group timer expirations
-for the calling thread that are close to one another;
-as a consequence, timer expirations for the thread may be
-up to the specified number of nanoseconds late (but will never expire early).
-Grouping timer expirations can help reduce system power consumption
-by minimizing CPU wake-ups.
-.IP
-The timer expirations affected by timer slack are those set by
-.BR select (2),
-.BR pselect (2),
-.BR poll (2),
-.BR ppoll (2),
-.BR epoll_wait (2),
-.BR epoll_pwait (2),
-.BR clock_nanosleep (2),
-.BR nanosleep (2),
-and
-.BR futex (2)
-(and thus the library functions implemented via futexes, including
-.\" List obtained by grepping for futex usage in glibc source
-.BR pthread_cond_timedwait (3),
-.BR pthread_mutex_timedlock (3),
-.BR pthread_rwlock_timedrdlock (3),
-.BR pthread_rwlock_timedwrlock (3),
-and
-.BR sem_timedwait (3)).
-.IP
-Timer slack is not applied to threads that are scheduled under
-a real-time scheduling policy (see
-.BR sched_setscheduler (2)).
-.IP
-When a new thread is created,
-the two timer slack values are made the same as the "current" value
-of the creating thread.
-Thereafter, a thread can adjust its "current" timer slack value via
-.BR PR_SET_TIMERSLACK .
-The "default" value can't be changed.
-The timer slack values of
-.I init
-(PID 1), the ancestor of all processes,
-are 50,000 nanoseconds (50 microseconds).
-The timer slack value is inherited by a child created via
-.BR fork (2),
-and is preserved across
-.BR execve (2).
-.IP
-Since Linux 4.6, the "current" timer slack value of any process
-can be examined and changed via the file
-.IR /proc/ pid /timerslack_ns .
-See
-.BR proc (5).
-.\" prctl PR_GET_TIMERSLACK
-.TP
-.BR PR_GET_TIMERSLACK " (since Linux 2.6.28)"
-Return (as the function result)
-the "current" timer slack value of the calling thread.
-.\" prctl PR_SET_TIMING
-.TP
-.BR PR_SET_TIMING " (since Linux 2.6.0)"
-.\" Precisely: Linux 2.6.0-test4
-Set whether to use (normal, traditional) statistical process timing or
-accurate timestamp-based process timing, by passing
-.B PR_TIMING_STATISTICAL
-.\" 0
-or
-.B PR_TIMING_TIMESTAMP
-.\" 1
-to \fIarg2\fP.
-.B PR_TIMING_TIMESTAMP
-is not currently implemented
-(attempting to set this mode will yield the error
-.BR EINVAL ).
-.\" PR_TIMING_TIMESTAMP doesn't do anything in Linux 2.6.26-rc8,
-.\" and looking at the patch history, it appears
-.\" that it never did anything.
-.\" prctl PR_GET_TIMING
-.TP
-.BR PR_GET_TIMING " (since Linux 2.6.0)"
-.\" Precisely: Linux 2.6.0-test4
-Return (as the function result) which process timing method is currently
-in use.
-.\" prctl PR_SET_TSC
-.TP
-.BR PR_SET_TSC " (since Linux 2.6.26, x86 only)"
-Set the state of the flag determining whether the timestamp counter
-can be read by the process.
-Pass
-.B PR_TSC_ENABLE
-to
-.I arg2
-to allow it to be read, or
-.B PR_TSC_SIGSEGV
-to generate a
-.B SIGSEGV
-when the process tries to read the timestamp counter.
-.\" prctl PR_GET_TSC
-.TP
-.BR PR_GET_TSC " (since Linux 2.6.26, x86 only)"
-Return the state of the flag determining whether the timestamp counter
-can be read,
-in the location pointed to by
-.IR "(int\~*) arg2" .
-.\" prctl PR_SET_UNALIGN
-.TP
-.B PR_SET_UNALIGN
-(Only on: ia64, since Linux 2.3.48; parisc, since Linux 2.6.15;
-PowerPC, since Linux 2.6.18; Alpha, since Linux 2.6.22;
-.\" sh: 94ea5e449ae834af058ef005d16a8ad44fcf13d6
-.\" tile: 2f9ac29eec71a696cb0dcc5fb82c0f8d4dac28c9
-sh, since Linux 2.6.34; tile, since Linux 3.12)
-Set unaligned access control bits to \fIarg2\fP.
-Pass
-\fBPR_UNALIGN_NOPRINT\fP to silently fix up unaligned user accesses,
-or \fBPR_UNALIGN_SIGBUS\fP to generate
-.B SIGBUS
-on unaligned user access.
-Alpha also supports an additional flag with the value
-of 4 and no corresponding named constant,
-which instructs kernel to not fix up
-unaligned accesses (it is analogous to providing the
-.B UAC_NOFIX
-flag in
-.B SSI_NVPAIRS
-operation of the
-.BR setsysinfo ()
-system call on Tru64).
-.\" prctl PR_GET_UNALIGN
-.TP
-.B PR_GET_UNALIGN
-(See
-.B PR_SET_UNALIGN
-for information on versions and architectures.)
-Return unaligned access control bits, in the location pointed to by
-.IR "(unsigned int\~*) arg2" .
-.SH RETURN VALUE
-On success,
-.BR PR_CAP_AMBIENT + PR_CAP_AMBIENT_IS_SET ,
-.BR PR_CAPBSET_READ ,
-.BR PR_GET_DUMPABLE ,
-.BR PR_GET_FP_MODE ,
-.BR PR_GET_IO_FLUSHER ,
-.BR PR_GET_KEEPCAPS ,
-.BR PR_MCE_KILL_GET ,
-.BR PR_GET_NO_NEW_PRIVS ,
-.BR PR_GET_SECUREBITS ,
-.BR PR_GET_SPECULATION_CTRL ,
-.BR PR_SVE_GET_VL ,
-.BR PR_SVE_SET_VL ,
-.BR PR_GET_TAGGED_ADDR_CTRL ,
-.BR PR_GET_THP_DISABLE ,
-.BR PR_GET_TIMING ,
-.BR PR_GET_TIMERSLACK ,
-and (if it returns)
-.B PR_GET_SECCOMP
-return the nonnegative values described above.
-All other
-.I option
-values return 0 on success.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-.I option
-is
-.B PR_SET_SECCOMP
-and
-.I arg2
-is
-.BR SECCOMP_MODE_FILTER ,
-but the process does not have the
-.B CAP_SYS_ADMIN
-capability or has not set the
-.I no_new_privs
-attribute (see the discussion of
-.B PR_SET_NO_NEW_PRIVS
-above).
-.TP
-.B EACCES
-.I option
-is
-.BR PR_SET_MM ,
-and
-.I arg3
-is
-.BR PR_SET_MM_EXE_FILE ,
-the file is not executable.
-.TP
-.B EBADF
-.I option
-is
-.BR PR_SET_MM ,
-.I arg3
-is
-.BR PR_SET_MM_EXE_FILE ,
-and the file descriptor passed in
-.I arg4
-is not valid.
-.TP
-.B EBUSY
-.I option
-is
-.BR PR_SET_MM ,
-.I arg3
-is
-.BR PR_SET_MM_EXE_FILE ,
-and this the second attempt to change the
-.IR /proc/ pid /exe
-symbolic link, which is prohibited.
-.TP
-.B EFAULT
-.I arg2
-is an invalid address.
-.TP
-.B EFAULT
-.I option
-is
-.BR PR_SET_SECCOMP ,
-.I arg2
-is
-.BR SECCOMP_MODE_FILTER ,
-the system was built with
-.BR CONFIG_SECCOMP_FILTER ,
-and
-.I arg3
-is an invalid address.
-.TP
-.B EFAULT
-.I option
-is
-.B PR_SET_SYSCALL_USER_DISPATCH
-and
-.I arg5
-has an invalid address.
-.TP
-.B EINVAL
-The value of
-.I option
-is not recognized,
-or not supported on this system.
-.TP
-.B EINVAL
-.I option
-is
-.B PR_MCE_KILL
-or
-.B PR_MCE_KILL_GET
-or
-.BR PR_SET_MM ,
-and unused
-.BR prctl ()
-arguments were not specified as zero.
-.TP
-.B EINVAL
-.I arg2
-is not valid value for this
-.IR option .
-.TP
-.B EINVAL
-.I option
-is
-.B PR_SET_SECCOMP
-or
-.BR PR_GET_SECCOMP ,
-and the kernel was not configured with
-.BR CONFIG_SECCOMP .
-.TP
-.B EINVAL
-.I option
-is
-.BR PR_SET_SECCOMP ,
-.I arg2
-is
-.BR SECCOMP_MODE_FILTER ,
-and the kernel was not configured with
-.BR CONFIG_SECCOMP_FILTER .
-.TP
-.B EINVAL
-.I option
-is
-.BR PR_SET_MM ,
-and one of the following is true
-.RS
-.IP \[bu] 3
-.I arg4
-or
-.I arg5
-is nonzero;
-.IP \[bu]
-.I arg3
-is greater than
-.B TASK_SIZE
-(the limit on the size of the user address space for this architecture);
-.IP \[bu]
-.I arg2
-is
-.BR PR_SET_MM_START_CODE ,
-.BR PR_SET_MM_END_CODE ,
-.BR PR_SET_MM_START_DATA ,
-.BR PR_SET_MM_END_DATA ,
-or
-.BR PR_SET_MM_START_STACK ,
-and the permissions of the corresponding memory area are not as required;
-.IP \[bu]
-.I arg2
-is
-.B PR_SET_MM_START_BRK
-or
-.BR PR_SET_MM_BRK ,
-and
-.I arg3
-is less than or equal to the end of the data segment
-or specifies a value that would cause the
-.B RLIMIT_DATA
-resource limit to be exceeded.
-.RE
-.TP
-.B EINVAL
-.I option
-is
-.B PR_SET_PTRACER
-and
-.I arg2
-is not 0,
-.BR PR_SET_PTRACER_ANY ,
-or the PID of an existing process.
-.TP
-.B EINVAL
-.I option
-is
-.B PR_SET_PDEATHSIG
-and
-.I arg2
-is not a valid signal number.
-.TP
-.B EINVAL
-.I option
-is
-.B PR_SET_DUMPABLE
-and
-.I arg2
-is neither
-.B SUID_DUMP_DISABLE
-nor
-.BR SUID_DUMP_USER .
-.TP
-.B EINVAL
-.I option
-is
-.B PR_SET_TIMING
-and
-.I arg2
-is not
-.BR PR_TIMING_STATISTICAL .
-.TP
-.B EINVAL
-.I option
-is
-.B PR_SET_NO_NEW_PRIVS
-and
-.I arg2
-is not equal to 1
-or
-.IR arg3 ,
-.IR arg4 ,
-or
-.I arg5
-is nonzero.
-.TP
-.B EINVAL
-.I option
-is
-.B PR_GET_NO_NEW_PRIVS
-and
-.IR arg2 ,
-.IR arg3 ,
-.IR arg4 ,
-or
-.I arg5
-is nonzero.
-.TP
-.B EINVAL
-.I option
-is
-.B PR_SET_THP_DISABLE
-and
-.IR arg3 ,
-.IR arg4 ,
-or
-.I arg5
-is nonzero.
-.TP
-.B EINVAL
-.I option
-is
-.B PR_GET_THP_DISABLE
-and
-.IR arg2 ,
-.IR arg3 ,
-.IR arg4 ,
-or
-.I arg5
-is nonzero.
-.TP
-.B EINVAL
-.I option
-is
-.B PR_CAP_AMBIENT
-and an unused argument
-.RI ( arg4 ,
-.IR arg5 ,
-or,
-in the case of
-.BR PR_CAP_AMBIENT_CLEAR_ALL ,
-.IR arg3 )
-is nonzero; or
-.I arg2
-has an invalid value;
-or
-.I arg2
-is
-.BR PR_CAP_AMBIENT_LOWER ,
-.BR PR_CAP_AMBIENT_RAISE ,
-or
-.B PR_CAP_AMBIENT_IS_SET
-and
-.I arg3
-does not specify a valid capability.
-.TP
-.B EINVAL
-.I option
-was
-.B PR_GET_SPECULATION_CTRL
-or
-.B PR_SET_SPECULATION_CTRL
-and unused arguments to
-.BR prctl ()
-are not 0.
-.B EINVAL
-.I option
-is
-.B PR_PAC_RESET_KEYS
-and the arguments are invalid or unsupported.
-See the description of
-.B PR_PAC_RESET_KEYS
-above for details.
-.TP
-.B EINVAL
-.I option
-is
-.B PR_SVE_SET_VL
-and the arguments are invalid or unsupported,
-or SVE is not available on this platform.
-See the description of
-.B PR_SVE_SET_VL
-above for details.
-.TP
-.B EINVAL
-.I option
-is
-.B PR_SVE_GET_VL
-and SVE is not available on this platform.
-.TP
-.B EINVAL
-.I option
-is
-.B PR_SET_SYSCALL_USER_DISPATCH
-and one of the following is true:
-.RS
-.IP \[bu] 3
-.I arg2
-is
-.B PR_SYS_DISPATCH_OFF
-and the remaining arguments are not 0;
-.IP \[bu]
-.I arg2
-is
-.B PR_SYS_DISPATCH_ON
-and the memory range specified is outside the
-address space of the process.
-.IP \[bu]
-.I arg2
-is invalid.
-.RE
-.TP
-.B EINVAL
-.I option
-is
-.B PR_SET_TAGGED_ADDR_CTRL
-and the arguments are invalid or unsupported.
-See the description of
-.B PR_SET_TAGGED_ADDR_CTRL
-above for details.
-.TP
-.B EINVAL
-.I option
-is
-.B PR_GET_TAGGED_ADDR_CTRL
-and the arguments are invalid or unsupported.
-See the description of
-.B PR_GET_TAGGED_ADDR_CTRL
-above for details.
-.TP
-.B ENODEV
-.I option
-was
-.B PR_SET_SPECULATION_CTRL
-the kernel or CPU does not support the requested speculation misfeature.
-.TP
-.B ENXIO
-.I option
-was
-.B PR_MPX_ENABLE_MANAGEMENT
-or
-.B PR_MPX_DISABLE_MANAGEMENT
-and the kernel or the CPU does not support MPX management.
-Check that the kernel and processor have MPX support.
-.TP
-.B ENXIO
-.I option
-was
-.B PR_SET_SPECULATION_CTRL
-implies that the control of the selected speculation misfeature is not possible.
-See
-.B PR_GET_SPECULATION_CTRL
-for the bit fields to determine which option is available.
-.TP
-.B EOPNOTSUPP
-.I option
-is
-.B PR_SET_FP_MODE
-and
-.I arg2
-has an invalid or unsupported value.
-.TP
-.B EPERM
-.I option
-is
-.BR PR_SET_SECUREBITS ,
-and the caller does not have the
-.B CAP_SETPCAP
-capability,
-or tried to unset a "locked" flag,
-or tried to set a flag whose corresponding locked flag was set
-(see
-.BR capabilities (7)).
-.TP
-.B EPERM
-.I option
-is
-.B PR_SET_SPECULATION_CTRL
-wherein the speculation was disabled with
-.B PR_SPEC_FORCE_DISABLE
-and caller tried to enable it again.
-.TP
-.B EPERM
-.I option
-is
-.BR PR_SET_KEEPCAPS ,
-and the caller's
-.B SECBIT_KEEP_CAPS_LOCKED
-flag is set
-(see
-.BR capabilities (7)).
-.TP
-.B EPERM
-.I option
-is
-.BR PR_CAPBSET_DROP ,
-and the caller does not have the
-.B CAP_SETPCAP
-capability.
-.TP
-.B EPERM
-.I option
-is
-.BR PR_SET_MM ,
-and the caller does not have the
-.B CAP_SYS_RESOURCE
-capability.
-.TP
-.B EPERM
-.I option
-is
-.B PR_CAP_AMBIENT
-and
-.I arg2
-is
-.BR PR_CAP_AMBIENT_RAISE ,
-but either the capability specified in
-.I arg3
-is not present in the process's permitted and inheritable capability sets,
-or the
-.B PR_CAP_AMBIENT_LOWER
-securebit has been set.
-.TP
-.B ERANGE
-.I option
-was
-.B PR_SET_SPECULATION_CTRL
-and
-.I arg3
-is not
-.BR PR_SPEC_ENABLE ,
-.BR PR_SPEC_DISABLE ,
-.BR PR_SPEC_FORCE_DISABLE ,
-nor
-.BR PR_SPEC_DISABLE_NOEXEC .
-.SH VERSIONS
-IRIX has a
-.BR prctl ()
-system call (also introduced in Linux 2.1.44
-as irix_prctl on the MIPS architecture),
-with prototype
-.PP
-.in +4n
-.EX
-.BI "ptrdiff_t prctl(int " option ", int " arg2 ", int " arg3 );
-.EE
-.in
-.PP
-and options to get the maximum number of processes per user,
-get the maximum number of processors the calling process can use,
-find out whether a specified process is currently blocked,
-get or set the maximum stack size, and so on.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.1.57,
-glibc 2.0.6
-.SH SEE ALSO
-.BR signal (2),
-.BR core (5)
diff --git a/man2/pread.2 b/man2/pread.2
deleted file mode 100644
index 5d4e0969a..000000000
--- a/man2/pread.2
+++ /dev/null
@@ -1,146 +0,0 @@
-.\" Copyright (C) 1999 Joseph Samuel Myers.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pread 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pread, pwrite \- read from or write to a file descriptor at a given offset
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "ssize_t pread(int " fd ", void " buf [. count "], size_t " count ,
-.BI " off_t " offset );
-.BI "ssize_t pwrite(int " fd ", const void " buf [. count "], size_t " count ,
-.BI " off_t " offset );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR pread (),
-.BR pwrite ():
-.nf
- _XOPEN_SOURCE >= 500
- || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
-.fi
-.SH DESCRIPTION
-.BR pread ()
-reads up to
-.I count
-bytes from file descriptor
-.I fd
-at offset
-.I offset
-(from the start of the file) into the buffer starting at
-.IR buf .
-The file offset is not changed.
-.PP
-.BR pwrite ()
-writes up to
-.I count
-bytes from the buffer starting at
-.I buf
-to the file descriptor
-.I fd
-at offset
-.IR offset .
-The file offset is not changed.
-.PP
-The file referenced by
-.I fd
-must be capable of seeking.
-.SH RETURN VALUE
-On success,
-.BR pread ()
-returns the number of bytes read
-(a return of zero indicates end of file)
-and
-.BR pwrite ()
-returns the number of bytes written.
-.PP
-Note that it is not an error for a successful call to transfer fewer bytes
-than requested (see
-.BR read (2)
-and
-.BR write (2)).
-.PP
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.BR pread ()
-can fail and set
-.I errno
-to any error specified for
-.BR read (2)
-or
-.BR lseek (2).
-.BR pwrite ()
-can fail and set
-.I errno
-to any error specified for
-.BR write (2)
-or
-.BR lseek (2).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.PP
-Added in Linux 2.1.60;
-the entries in the i386 system call table were added in Linux 2.1.69.
-C library support (including emulation using
-.BR lseek (2)
-on older kernels without the system calls) was added in glibc 2.1.
-.SS C library/kernel differences
-On Linux, the underlying system calls were renamed
-in Linux 2.6:
-.BR pread ()
-became
-.BR pread64 (),
-and
-.BR pwrite ()
-became
-.BR pwrite64 ().
-The system call numbers remained the same.
-The glibc
-.BR pread ()
-and
-.BR pwrite ()
-wrapper functions transparently deal with the change.
-.PP
-On some 32-bit architectures,
-the calling signature for these system calls differ,
-for the reasons described in
-.BR syscall (2).
-.SH NOTES
-The
-.BR pread ()
-and
-.BR pwrite ()
-system calls are especially useful in multithreaded applications.
-They allow multiple threads to perform I/O on the same file descriptor
-without being affected by changes to the file offset by other threads.
-.SH BUGS
-POSIX requires that opening a file with the
-.B O_APPEND
-flag should have no effect on the location at which
-.BR pwrite ()
-writes data.
-However, on Linux, if a file is opened with
-.\" FIXME . https://bugzilla.kernel.org/show_bug.cgi?id=43178
-.BR O_APPEND ,
-.BR pwrite ()
-appends data to the end of the file, regardless of the value of
-.IR offset .
-.SH SEE ALSO
-.BR lseek (2),
-.BR read (2),
-.BR readv (2),
-.BR write (2)
diff --git a/man2/pread64.2 b/man2/pread64.2
deleted file mode 100644
index 87eacb238..000000000
--- a/man2/pread64.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/pread.2
diff --git a/man2/preadv.2 b/man2/preadv.2
deleted file mode 100644
index 54e3384ef..000000000
--- a/man2/preadv.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/readv.2
diff --git a/man2/preadv2.2 b/man2/preadv2.2
deleted file mode 100644
index 54e3384ef..000000000
--- a/man2/preadv2.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/readv.2
diff --git a/man2/prlimit.2 b/man2/prlimit.2
deleted file mode 100644
index df6d7362a..000000000
--- a/man2/prlimit.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getrlimit.2
diff --git a/man2/prlimit64.2 b/man2/prlimit64.2
deleted file mode 100644
index df6d7362a..000000000
--- a/man2/prlimit64.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getrlimit.2
diff --git a/man2/process_madvise.2 b/man2/process_madvise.2
deleted file mode 100644
index 1cee5be24..000000000
--- a/man2/process_madvise.2
+++ /dev/null
@@ -1,209 +0,0 @@
-.\" Copyright (C) 2021 Suren Baghdasaryan <surenb@google.com>
-.\" and Copyright (C) 2021 Minchan Kim <minchan@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Commit ecb8ac8b1f146915aa6b96449b66dd48984caacc
-.\"
-.TH process_madvise 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-process_madvise \- give advice about use of memory to a process
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/mman.h>" " /* Definition of " MADV_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.BR "#include <sys/uio.h>" " /* Definition of " "struct iovec" " type */"
-.B #include <unistd.h>
-.PP
-.BI "ssize_t syscall(SYS_process_madvise, int " pidfd ,
-.BI " const struct iovec *" iovec ", size_t " vlen \
-", int " advice ,
-.BI " unsigned int " flags ");"
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR process_madvise (),
-necessitating the use of
-.BR syscall (2).
-.\" FIXME: See <https://sourceware.org/bugzilla/show_bug.cgi?id=27380>
-.SH DESCRIPTION
-The
-.BR process_madvise ()
-system call is used to give advice or directions to the kernel about the
-address ranges of another process or of the calling process.
-It provides the advice for the address ranges described by
-.I iovec
-and
-.IR vlen .
-The goal of such advice is to improve system or application performance.
-.PP
-The
-.I pidfd
-argument is a PID file descriptor (see
-.BR pidfd_open (2))
-that specifies the process to which the advice is to be applied.
-.PP
-The pointer
-.I iovec
-points to an array of
-.I iovec
-structures, described in
-.BR iovec (3type).
-.PP
-.I vlen
-specifies the number of elements in the array of
-.I iovec
-structures.
-This value must be less than or equal to
-.B IOV_MAX
-(defined in
-.I <limits.h>
-or accessible via the call
-.IR sysconf(_SC_IOV_MAX) ).
-.PP
-The
-.I advice
-argument is one of the following values:
-.TP
-.B MADV_COLD
-See
-.BR madvise (2).
-.TP
-.B MADV_COLLAPSE
-See
-.BR madvise (2).
-.TP
-.B MADV_PAGEOUT
-See
-.BR madvise (2).
-.TP
-.B MADV_WILLNEED
-See
-.BR madvise (2).
-.PP
-The
-.I flags
-argument is reserved for future use; currently, this argument must be
-specified as 0.
-.PP
-The
-.I vlen
-and
-.I iovec
-arguments are checked before applying any advice.
-If
-.I vlen
-is too big, or
-.I iovec
-is invalid,
-then an error will be returned immediately and no advice will be applied.
-.PP
-The advice might be applied to only a part of
-.I iovec
-if one of its elements points to an invalid memory region in the
-remote process.
-No further elements will be processed beyond that point.
-(See the discussion regarding partial advice in RETURN VALUE.)
-.PP
-.\" commit 96cfe2c0fd23ea7c2368d14f769d287e7ae1082e
-Starting in Linux 5.12,
-permission to apply advice to another process is governed by
-ptrace access mode
-.B PTRACE_MODE_READ_FSCREDS
-check (see
-.BR ptrace (2));
-in addition,
-because of the performance implications of applying the advice,
-the caller must have the
-.B CAP_SYS_NICE
-capability
-(see
-.BR capabilities (7)).
-.SH RETURN VALUE
-On success,
-.BR process_madvise ()
-returns the number of bytes advised.
-This return value may be less than the total number of requested bytes,
-if an error occurred after some
-.I iovec
-elements were already processed.
-The caller should check the return value to determine whether a partial
-advice occurred.
-.PP
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I pidfd
-is not a valid PID file descriptor.
-.TP
-.B EFAULT
-The memory described by
-.I iovec
-is outside the accessible address space of the process referred to by
-.IR pidfd .
-.TP
-.B EINVAL
-.I flags
-is not 0.
-.TP
-.B EINVAL
-The sum of the
-.I iov_len
-values of
-.I iovec
-overflows a
-.I ssize_t
-value.
-.TP
-.B EINVAL
-.I vlen
-is too large.
-.TP
-.B ENOMEM
-Could not allocate memory for internal copies of the
-.I iovec
-structures.
-.TP
-.B EPERM
-The caller does not have permission to access the address space of the process
-.IR pidfd .
-.TP
-.B ESRCH
-The target process does not exist (i.e., it has terminated and been waited on).
-.PP
-See
-.BR madvise (2)
-for
-.IR advice -specific
-errors.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 5.10.
-.\" commit ecb8ac8b1f146915aa6b96449b66dd48984caacc
-.PP
-Support for this system call is optional,
-depending on the setting of the
-.B CONFIG_ADVISE_SYSCALLS
-configuration option.
-.PP
-When this system call first appeared in Linux 5.10,
-permission to apply advice to another process was entirely governed by
-ptrace access mode
-.B PTRACE_MODE_ATTACH_FSCREDS
-check (see
-.BR ptrace (2)).
-This requirement was relaxed in Linux 5.12 so that the caller didn't require
-full control over the target process.
-.SH SEE ALSO
-.BR madvise (2),
-.BR pidfd_open (2),
-.BR process_vm_readv (2),
-.BR process_vm_write (2)
diff --git a/man2/process_vm_readv.2 b/man2/process_vm_readv.2
deleted file mode 100644
index 4f484b161..000000000
--- a/man2/process_vm_readv.2
+++ /dev/null
@@ -1,314 +0,0 @@
-.\" Copyright (C) 2011 Christopher Yeoh <cyeoh@au1.ibm.com>
-.\" and Copyright (C) 2012 Mike Frysinger <vapier@gentoo.org>
-.\" and Copyright (C) 2012 Michael Kerrisk <mtk.man-pages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Commit fcf634098c00dd9cd247447368495f0b79be12d1
-.\"
-.TH process_vm_readv 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-process_vm_readv, process_vm_writev \-
-transfer data between process address spaces
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/uio.h>
-.PP
-.BI "ssize_t process_vm_readv(pid_t " pid ,
-.BI " const struct iovec *" local_iov ,
-.BI " unsigned long " liovcnt ,
-.BI " const struct iovec *" remote_iov ,
-.BI " unsigned long " riovcnt ,
-.BI " unsigned long " flags ");"
-.BI "ssize_t process_vm_writev(pid_t " pid ,
-.BI " const struct iovec *" local_iov ,
-.BI " unsigned long " liovcnt ,
-.BI " const struct iovec *" remote_iov ,
-.BI " unsigned long " riovcnt ,
-.BI " unsigned long " flags ");"
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR process_vm_readv (),
-.BR process_vm_writev ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-These system calls transfer data between the address space
-of the calling process ("the local process") and the process identified by
-.I pid
-("the remote process").
-The data moves directly between the address spaces of the two processes,
-without passing through kernel space.
-.PP
-The
-.BR process_vm_readv ()
-system call transfers data from the remote process to the local process.
-The data to be transferred is identified by
-.I remote_iov
-and
-.IR riovcnt :
-.I remote_iov
-is a pointer to an array describing address ranges in the process
-.IR pid ,
-and
-.I riovcnt
-specifies the number of elements in
-.IR remote_iov .
-The data is transferred to the locations specified by
-.I local_iov
-and
-.IR liovcnt :
-.I local_iov
-is a pointer to an array describing address ranges in the calling process,
-and
-.I liovcnt
-specifies the number of elements in
-.IR local_iov .
-.PP
-The
-.BR process_vm_writev ()
-system call is the converse of
-.BR process_vm_readv ()\[em]it
-transfers data from the local process to the remote process.
-Other than the direction of the transfer, the arguments
-.IR liovcnt ,
-.IR local_iov ,
-.IR riovcnt ,
-and
-.I remote_iov
-have the same meaning as for
-.BR process_vm_readv ().
-.PP
-The
-.I local_iov
-and
-.I remote_iov
-arguments point to an array of
-.I iovec
-structures, described in
-.BR iovec (3type).
-.PP
-Buffers are processed in array order.
-This means that
-.BR process_vm_readv ()
-completely fills
-.I local_iov[0]
-before proceeding to
-.IR local_iov[1] ,
-and so on.
-Likewise,
-.I remote_iov[0]
-is completely read before proceeding to
-.IR remote_iov[1] ,
-and so on.
-.PP
-Similarly,
-.BR process_vm_writev ()
-writes out the entire contents of
-.I local_iov[0]
-before proceeding to
-.IR local_iov[1] ,
-and it completely fills
-.I remote_iov[0]
-before proceeding to
-.IR remote_iov[1] .
-.PP
-The lengths of
-.I remote_iov[i].iov_len
-and
-.I local_iov[i].iov_len
-do not have to be the same.
-Thus, it is possible to split a single local buffer
-into multiple remote buffers, or vice versa.
-.PP
-The
-.I flags
-argument is currently unused and must be set to 0.
-.PP
-The values specified in the
-.I liovcnt
-and
-.I riovcnt
-arguments must be less than or equal to
-.B IOV_MAX
-(defined in
-.I <limits.h>
-or accessible via the call
-.IR sysconf(_SC_IOV_MAX) ).
-.\" In time, glibc might provide a wrapper that works around this limit,
-.\" as is done for readv()/writev()
-.PP
-The count arguments and
-.I local_iov
-are checked before doing any transfers.
-If the counts are too big, or
-.I local_iov
-is invalid,
-or the addresses refer to regions that are inaccessible to the local process,
-none of the vectors will be processed
-and an error will be returned immediately.
-.PP
-Note, however, that these system calls do not check the memory regions
-in the remote process until just before doing the read/write.
-Consequently, a partial read/write (see RETURN VALUE)
-may result if one of the
-.I remote_iov
-elements points to an invalid memory region in the remote process.
-No further reads/writes will be attempted beyond that point.
-Keep this in mind when attempting to read data of unknown length
-(such as C strings that are null-terminated) from a remote process,
-by avoiding spanning memory pages (typically 4\ KiB) in a single remote
-.I iovec
-element.
-(Instead, split the remote read into two
-.I remote_iov
-elements and have them merge back into a single write
-.I local_iov
-entry.
-The first read entry goes up to the page boundary,
-while the second starts on the next page boundary.)
-.PP
-Permission to read from or write to another process
-is governed by a ptrace access mode
-.B PTRACE_MODE_ATTACH_REALCREDS
-check; see
-.BR ptrace (2).
-.SH RETURN VALUE
-On success,
-.BR process_vm_readv ()
-returns the number of bytes read and
-.BR process_vm_writev ()
-returns the number of bytes written.
-This return value may be less than the total number of requested bytes,
-if a partial read/write occurred.
-(Partial transfers apply at the granularity of
-.I iovec
-elements.
-These system calls won't perform a partial transfer that splits a single
-.I iovec
-element.)
-The caller should check the return value to determine whether
-a partial read/write occurred.
-.PP
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-The memory described by
-.I local_iov
-is outside the caller's accessible address space.
-.TP
-.B EFAULT
-The memory described by
-.I remote_iov
-is outside the accessible address space of the process
-.IR pid .
-.TP
-.B EINVAL
-The sum of the
-.I iov_len
-values of either
-.I local_iov
-or
-.I remote_iov
-overflows a
-.I ssize_t
-value.
-.TP
-.B EINVAL
-.I flags
-is not 0.
-.TP
-.B EINVAL
-.I liovcnt
-or
-.I riovcnt
-is too large.
-.TP
-.B ENOMEM
-Could not allocate memory for internal copies of the
-.I iovec
-structures.
-.TP
-.B EPERM
-The caller does not have permission to access the address space of the process
-.IR pid .
-.TP
-.B ESRCH
-No process with ID
-.I pid
-exists.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 3.2,
-glibc 2.15.
-.SH NOTES
-The data transfers performed by
-.BR process_vm_readv ()
-and
-.BR process_vm_writev ()
-are not guaranteed to be atomic in any way.
-.PP
-These system calls were designed to permit fast message passing
-by allowing messages to be exchanged with a single copy operation
-(rather than the double copy that would be required
-when using, for example, shared memory or pipes).
-.\" Original user is MPI, http://www.mcs.anl.gov/research/projects/mpi/
-.\" See also some benchmarks at http://lwn.net/Articles/405284/
-.\" and http://marc.info/?l=linux-mm&m=130105930902915&w=2
-.SH EXAMPLES
-The following code sample demonstrates the use of
-.BR process_vm_readv ().
-It reads 20 bytes at the address 0x10000 from the process with PID 10
-and writes the first 10 bytes into
-.I buf1
-and the second 10 bytes into
-.IR buf2 .
-.PP
-.\" SRC BEGIN (process_vm_readv.c)
-.EX
-#define _GNU_SOURCE
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/uio.h>
-\&
-int
-main(void)
-{
- char buf1[10];
- char buf2[10];
- pid_t pid = 10; /* PID of remote process */
- ssize_t nread;
- struct iovec local[2];
- struct iovec remote[1];
-\&
- local[0].iov_base = buf1;
- local[0].iov_len = 10;
- local[1].iov_base = buf2;
- local[1].iov_len = 10;
- remote[0].iov_base = (void *) 0x10000;
- remote[0].iov_len = 20;
-\&
- nread = process_vm_readv(pid, local, 2, remote, 1, 0);
- if (nread != 20)
- exit(EXIT_FAILURE);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR readv (2),
-.BR writev (2)
diff --git a/man2/process_vm_writev.2 b/man2/process_vm_writev.2
deleted file mode 100644
index 7b198a9a4..000000000
--- a/man2/process_vm_writev.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/process_vm_readv.2
diff --git a/man2/prof.2 b/man2/prof.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/prof.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/pselect.2 b/man2/pselect.2
deleted file mode 100644
index e17784318..000000000
--- a/man2/pselect.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/select.2
diff --git a/man2/pselect6.2 b/man2/pselect6.2
deleted file mode 100644
index e17784318..000000000
--- a/man2/pselect6.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/select.2
diff --git a/man2/ptrace.2 b/man2/ptrace.2
deleted file mode 100644
index 34152c09c..000000000
--- a/man2/ptrace.2
+++ /dev/null
@@ -1,2974 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt <michael@moria.de>
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" and changes Copyright (C) 1999 Mike Coleman (mkc@acm.org)
-.\" -- major revision to fully document ptrace semantics per recent Linux
-.\" kernel (2.2.10) and glibc (2.1.2)
-.\" Sun Nov 7 03:18:35 CST 1999
-.\"
-.\" and Copyright (c) 2011, Denys Vlasenko <vda.linux@googlemail.com>
-.\" and Copyright (c) 2015, 2016, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Fri Jul 23 23:47:18 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Fri Jan 31 16:46:30 1997 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Thu Oct 7 17:28:49 1999 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.\"
-.\" 2006-03-24, Chuck Ebbert <76306.1226@compuserve.com>
-.\" Added PTRACE_SETOPTIONS, PTRACE_GETEVENTMSG, PTRACE_GETSIGINFO,
-.\" PTRACE_SETSIGINFO, PTRACE_SYSEMU, PTRACE_SYSEMU_SINGLESTEP
-.\" (Thanks to Blaisorblade, Daniel Jacobowitz and others who helped.)
-.\" 2011-09, major update by Denys Vlasenko <vda.linux@googlemail.com>
-.\" 2015-01, Kees Cook <keescook@chromium.org>
-.\" Added PTRACE_O_TRACESECCOMP, PTRACE_EVENT_SECCOMP
-.\"
-.\" FIXME The following are undocumented:
-.\"
-.\" PTRACE_GETWMMXREGS
-.\" PTRACE_SETWMMXREGS
-.\" ARM
-.\" Linux 2.6.12
-.\"
-.\" PTRACE_SET_SYSCALL
-.\" ARM and ARM64
-.\" Linux 2.6.16
-.\" commit 3f471126ee53feb5e9b210ea2f525ed3bb9b7a7f
-.\" Author: Nicolas Pitre <nico@cam.org>
-.\" Date: Sat Jan 14 19:30:04 2006 +0000
-.\"
-.\" PTRACE_GETCRUNCHREGS
-.\" PTRACE_SETCRUNCHREGS
-.\" ARM
-.\" Linux 2.6.18
-.\" commit 3bec6ded282b331552587267d67a06ed7fd95ddd
-.\" Author: Lennert Buytenhek <buytenh@wantstofly.org>
-.\" Date: Tue Jun 27 22:56:18 2006 +0100
-.\"
-.\" PTRACE_GETVFPREGS
-.\" PTRACE_SETVFPREGS
-.\" ARM and ARM64
-.\" Linux 2.6.30
-.\" commit 3d1228ead618b88e8606015cbabc49019981805d
-.\" Author: Catalin Marinas <catalin.marinas@arm.com>
-.\" Date: Wed Feb 11 13:12:56 2009 +0100
-.\"
-.\" PTRACE_GETHBPREGS
-.\" PTRACE_SETHBPREGS
-.\" ARM and ARM64
-.\" Linux 2.6.37
-.\" commit 864232fa1a2f8dfe003438ef0851a56722740f3e
-.\" Author: Will Deacon <will.deacon@arm.com>
-.\" Date: Fri Sep 3 10:42:55 2010 +0100
-.\"
-.\" PTRACE_SINGLEBLOCK
-.\" Since at least Linux 2.4.0 on various architectures
-.\" Since Linux 2.6.25 on x86 (and others?)
-.\" commit 5b88abbf770a0e1975c668743100f42934f385e8
-.\" Author: Roland McGrath <roland@redhat.com>
-.\" Date: Wed Jan 30 13:30:53 2008 +0100
-.\" ptrace: generic PTRACE_SINGLEBLOCK
-.\"
-.\" PTRACE_GETFPXREGS
-.\" PTRACE_SETFPXREGS
-.\" Since at least Linux 2.4.0 on various architectures
-.\"
-.\" PTRACE_GETFDPIC
-.\" PTRACE_GETFDPIC_EXEC
-.\" PTRACE_GETFDPIC_INTERP
-.\" blackfin, c6x, frv, sh
-.\" First appearance in Linux 2.6.11 on frv
-.\"
-.\" and others that can be found in the arch/*/include/uapi/asm/ptrace files
-.\"
-.TH ptrace 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ptrace \- process trace
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/ptrace.h>
-.PP
-.BI "long ptrace(enum __ptrace_request " request ", pid_t " pid ,
-.BI " void *" addr ", void *" data );
-.fi
-.SH DESCRIPTION
-The
-.BR ptrace ()
-system call provides a means by which one process (the "tracer")
-may observe and control the execution of another process (the "tracee"),
-and examine and change the tracee's memory and registers.
-It is primarily used to implement breakpoint debugging and system
-call tracing.
-.PP
-A tracee first needs to be attached to the tracer.
-Attachment and subsequent commands are per thread:
-in a multithreaded process,
-every thread can be individually attached to a
-(potentially different) tracer,
-or left not attached and thus not debugged.
-Therefore, "tracee" always means "(one) thread",
-never "a (possibly multithreaded) process".
-Ptrace commands are always sent to
-a specific tracee using a call of the form
-.PP
-.in +4n
-.EX
-ptrace(PTRACE_foo, pid, ...)
-.EE
-.in
-.PP
-where
-.I pid
-is the thread ID of the corresponding Linux thread.
-.PP
-(Note that in this page, a "multithreaded process"
-means a thread group consisting of threads created using the
-.BR clone (2)
-.B CLONE_THREAD
-flag.)
-.PP
-A process can initiate a trace by calling
-.BR fork (2)
-and having the resulting child do a
-.BR PTRACE_TRACEME ,
-followed (typically) by an
-.BR execve (2).
-Alternatively, one process may commence tracing another process using
-.B PTRACE_ATTACH
-or
-.BR PTRACE_SEIZE .
-.PP
-While being traced, the tracee will stop each time a signal is delivered,
-even if the signal is being ignored.
-(An exception is
-.BR SIGKILL ,
-which has its usual effect.)
-The tracer will be notified at its next call to
-.BR waitpid (2)
-(or one of the related "wait" system calls); that call will return a
-.I status
-value containing information that indicates
-the cause of the stop in the tracee.
-While the tracee is stopped,
-the tracer can use various ptrace requests to inspect and modify the tracee.
-The tracer then causes the tracee to continue,
-optionally ignoring the delivered signal
-(or even delivering a different signal instead).
-.PP
-If the
-.B PTRACE_O_TRACEEXEC
-option is not in effect, all successful calls to
-.BR execve (2)
-by the traced process will cause it to be sent a
-.B SIGTRAP
-signal,
-giving the parent a chance to gain control before the new program
-begins execution.
-.PP
-When the tracer is finished tracing, it can cause the tracee to continue
-executing in a normal, untraced mode via
-.BR PTRACE_DETACH .
-.PP
-The value of
-.I request
-determines the action to be performed:
-.TP
-.B PTRACE_TRACEME
-Indicate that this process is to be traced by its parent.
-A process probably shouldn't make this request if its parent
-isn't expecting to trace it.
-.RI ( pid ,
-.IR addr ,
-and
-.I data
-are ignored.)
-.IP
-The
-.B PTRACE_TRACEME
-request is used only by the tracee;
-the remaining requests are used only by the tracer.
-In the following requests,
-.I pid
-specifies the thread ID of the tracee to be acted on.
-For requests other than
-.BR PTRACE_ATTACH ,
-.BR PTRACE_SEIZE ,
-.BR PTRACE_INTERRUPT ,
-and
-.BR PTRACE_KILL ,
-the tracee must be stopped.
-.TP
-.BR PTRACE_PEEKTEXT ", " PTRACE_PEEKDATA
-Read a word at the address
-.I addr
-in the tracee's memory, returning the word as the result of the
-.BR ptrace ()
-call.
-Linux does not have separate text and data address spaces,
-so these two requests are currently equivalent.
-.RI ( data
-is ignored; but see NOTES.)
-.TP
-.B PTRACE_PEEKUSER
-.\" PTRACE_PEEKUSR in kernel source, but glibc uses PTRACE_PEEKUSER,
-.\" and that is the name that seems common on other systems.
-Read a word at offset
-.I addr
-in the tracee's USER area,
-which holds the registers and other information about the process
-(see
-.IR <sys/user.h> ).
-The word is returned as the result of the
-.BR ptrace ()
-call.
-Typically, the offset must be word-aligned, though this might vary by
-architecture.
-See NOTES.
-.RI ( data
-is ignored; but see NOTES.)
-.TP
-.BR PTRACE_POKETEXT ", " PTRACE_POKEDATA
-Copy the word
-.I data
-to the address
-.I addr
-in the tracee's memory.
-As for
-.B PTRACE_PEEKTEXT
-and
-.BR PTRACE_PEEKDATA ,
-these two requests are currently equivalent.
-.TP
-.B PTRACE_POKEUSER
-.\" PTRACE_POKEUSR in kernel source, but glibc uses PTRACE_POKEUSER,
-.\" and that is the name that seems common on other systems.
-Copy the word
-.I data
-to offset
-.I addr
-in the tracee's USER area.
-As for
-.BR PTRACE_PEEKUSER ,
-the offset must typically be word-aligned.
-In order to maintain the integrity of the kernel,
-some modifications to the USER area are disallowed.
-.\" FIXME In the preceding sentence, which modifications are disallowed,
-.\" and when they are disallowed, how does user space discover that fact?
-.TP
-.BR PTRACE_GETREGS ", " PTRACE_GETFPREGS
-Copy the tracee's general-purpose or floating-point registers,
-respectively, to the address
-.I data
-in the tracer.
-See
-.I <sys/user.h>
-for information on the format of this data.
-.RI ( addr
-is ignored.)
-Note that SPARC systems have the meaning of
-.I data
-and
-.I addr
-reversed; that is,
-.I data
-is ignored and the registers are copied to the address
-.IR addr .
-.B PTRACE_GETREGS
-and
-.B PTRACE_GETFPREGS
-are not present on all architectures.
-.TP
-.BR PTRACE_GETREGSET " (since Linux 2.6.34)"
-Read the tracee's registers.
-.I addr
-specifies, in an architecture-dependent way, the type of registers to be read.
-.B NT_PRSTATUS
-(with numerical value 1)
-usually results in reading of general-purpose registers.
-If the CPU has, for example,
-floating-point and/or vector registers, they can be retrieved by setting
-.I addr
-to the corresponding
-.B NT_foo
-constant.
-.I data
-points to a
-.BR "struct iovec" ,
-which describes the destination buffer's location and length.
-On return, the kernel modifies
-.B iov.len
-to indicate the actual number of bytes returned.
-.TP
-.BR PTRACE_SETREGS ", " PTRACE_SETFPREGS
-Modify the tracee's general-purpose or floating-point registers,
-respectively, from the address
-.I data
-in the tracer.
-As for
-.BR PTRACE_POKEUSER ,
-some general-purpose register modifications may be disallowed.
-.\" FIXME . In the preceding sentence, which modifications are disallowed,
-.\" and when they are disallowed, how does user space discover that fact?
-.RI ( addr
-is ignored.)
-Note that SPARC systems have the meaning of
-.I data
-and
-.I addr
-reversed; that is,
-.I data
-is ignored and the registers are copied from the address
-.IR addr .
-.B PTRACE_SETREGS
-and
-.B PTRACE_SETFPREGS
-are not present on all architectures.
-.TP
-.BR PTRACE_SETREGSET " (since Linux 2.6.34)"
-Modify the tracee's registers.
-The meaning of
-.I addr
-and
-.I data
-is analogous to
-.BR PTRACE_GETREGSET .
-.TP
-.BR PTRACE_GETSIGINFO " (since Linux 2.3.99-pre6)"
-Retrieve information about the signal that caused the stop.
-Copy a
-.I siginfo_t
-structure (see
-.BR sigaction (2))
-from the tracee to the address
-.I data
-in the tracer.
-.RI ( addr
-is ignored.)
-.TP
-.BR PTRACE_SETSIGINFO " (since Linux 2.3.99-pre6)"
-Set signal information:
-copy a
-.I siginfo_t
-structure from the address
-.I data
-in the tracer to the tracee.
-This will affect only signals that would normally be delivered to
-the tracee and were caught by the tracer.
-It may be difficult to tell
-these normal signals from synthetic signals generated by
-.BR ptrace ()
-itself.
-.RI ( addr
-is ignored.)
-.TP
-.BR PTRACE_PEEKSIGINFO " (since Linux 3.10)"
-.\" commit 84c751bd4aebbaae995fe32279d3dba48327bad4
-Retrieve
-.I siginfo_t
-structures without removing signals from a queue.
-.I addr
-points to a
-.I ptrace_peeksiginfo_args
-structure that specifies the ordinal position from which
-copying of signals should start,
-and the number of signals to copy.
-.I siginfo_t
-structures are copied into the buffer pointed to by
-.IR data .
-The return value contains the number of copied signals (zero indicates
-that there is no signal corresponding to the specified ordinal position).
-Within the returned
-.I siginfo
-structures,
-the
-.I si_code
-field includes information
-.RB ( __SI_CHLD ,
-.BR __SI_FAULT ,
-etc.) that are not otherwise exposed to user space.
-.PP
-.in +4n
-.EX
-struct ptrace_peeksiginfo_args {
- u64 off; /* Ordinal position in queue at which
- to start copying signals */
- u32 flags; /* PTRACE_PEEKSIGINFO_SHARED or 0 */
- s32 nr; /* Number of signals to copy */
-};
-.EE
-.in
-.IP
-Currently, there is only one flag,
-.BR PTRACE_PEEKSIGINFO_SHARED ,
-for dumping signals from the process-wide signal queue.
-If this flag is not set,
-signals are read from the per-thread queue of the specified thread.
-.in
-.TP
-.BR PTRACE_GETSIGMASK " (since Linux 3.11)"
-.\" commit 29000caecbe87b6b66f144f72111f0d02fbbf0c1
-Place a copy of the mask of blocked signals (see
-.BR sigprocmask (2))
-in the buffer pointed to by
-.IR data ,
-which should be a pointer to a buffer of type
-.IR sigset_t .
-The
-.I addr
-argument contains the size of the buffer pointed to by
-.I data
-(i.e.,
-.IR sizeof(sigset_t) ).
-.TP
-.BR PTRACE_SETSIGMASK " (since Linux 3.11)"
-Change the mask of blocked signals (see
-.BR sigprocmask (2))
-to the value specified in the buffer pointed to by
-.IR data ,
-which should be a pointer to a buffer of type
-.IR sigset_t .
-The
-.I addr
-argument contains the size of the buffer pointed to by
-.I data
-(i.e.,
-.IR sizeof(sigset_t) ).
-.TP
-.BR PTRACE_SETOPTIONS " (since Linux 2.4.6; see BUGS for caveats)"
-Set ptrace options from
-.IR data .
-.RI ( addr
-is ignored.)
-.I data
-is interpreted as a bit mask of options,
-which are specified by the following flags:
-.RS
-.TP
-.BR PTRACE_O_EXITKILL " (since Linux 3.8)"
-.\" commit 992fb6e170639b0849bace8e49bf31bd37c4123
-Send a
-.B SIGKILL
-signal to the tracee if the tracer exits.
-This option is useful for ptrace jailers that
-want to ensure that tracees can never escape the tracer's control.
-.TP
-.BR PTRACE_O_TRACECLONE " (since Linux 2.5.46)"
-Stop the tracee at the next
-.BR clone (2)
-and automatically start tracing the newly cloned process,
-which will start with a
-.BR SIGSTOP ,
-or
-.B PTRACE_EVENT_STOP
-if
-.B PTRACE_SEIZE
-was used.
-A
-.BR waitpid (2)
-by the tracer will return a
-.I status
-value such that
-.IP
-.nf
- status>>8 == (SIGTRAP | (PTRACE_EVENT_CLONE<<8))
-.fi
-.IP
-The PID of the new process can be retrieved with
-.BR PTRACE_GETEVENTMSG .
-.IP
-This option may not catch
-.BR clone (2)
-calls in all cases.
-If the tracee calls
-.BR clone (2)
-with the
-.B CLONE_VFORK
-flag,
-.B PTRACE_EVENT_VFORK
-will be delivered instead
-if
-.B PTRACE_O_TRACEVFORK
-is set; otherwise if the tracee calls
-.BR clone (2)
-with the exit signal set to
-.BR SIGCHLD ,
-.B PTRACE_EVENT_FORK
-will be delivered if
-.B PTRACE_O_TRACEFORK
-is set.
-.TP
-.BR PTRACE_O_TRACEEXEC " (since Linux 2.5.46)"
-Stop the tracee at the next
-.BR execve (2).
-A
-.BR waitpid (2)
-by the tracer will return a
-.I status
-value such that
-.IP
-.nf
- status>>8 == (SIGTRAP | (PTRACE_EVENT_EXEC<<8))
-.fi
-.IP
-If the execing thread is not a thread group leader,
-the thread ID is reset to thread group leader's ID before this stop.
-Since Linux 3.0, the former thread ID can be retrieved with
-.BR PTRACE_GETEVENTMSG .
-.TP
-.BR PTRACE_O_TRACEEXIT " (since Linux 2.5.60)"
-Stop the tracee at exit.
-A
-.BR waitpid (2)
-by the tracer will return a
-.I status
-value such that
-.IP
-.nf
- status>>8 == (SIGTRAP | (PTRACE_EVENT_EXIT<<8))
-.fi
-.IP
-The tracee's exit status can be retrieved with
-.BR PTRACE_GETEVENTMSG .
-.IP
-The tracee is stopped early during process exit,
-when registers are still available,
-allowing the tracer to see where the exit occurred,
-whereas the normal exit notification is done after the process
-is finished exiting.
-Even though context is available,
-the tracer cannot prevent the exit from happening at this point.
-.TP
-.BR PTRACE_O_TRACEFORK " (since Linux 2.5.46)"
-Stop the tracee at the next
-.BR fork (2)
-and automatically start tracing the newly forked process,
-which will start with a
-.BR SIGSTOP ,
-or
-.B PTRACE_EVENT_STOP
-if
-.B PTRACE_SEIZE
-was used.
-A
-.BR waitpid (2)
-by the tracer will return a
-.I status
-value such that
-.IP
-.nf
- status>>8 == (SIGTRAP | (PTRACE_EVENT_FORK<<8))
-.fi
-.IP
-The PID of the new process can be retrieved with
-.BR PTRACE_GETEVENTMSG .
-.TP
-.BR PTRACE_O_TRACESYSGOOD " (since Linux 2.4.6)"
-When delivering system call traps, set bit 7 in the signal number
-(i.e., deliver
-.IR "SIGTRAP|0x80" ).
-This makes it easy for the tracer to distinguish
-normal traps from those caused by a system call.
-.TP
-.BR PTRACE_O_TRACEVFORK " (since Linux 2.5.46)"
-Stop the tracee at the next
-.BR vfork (2)
-and automatically start tracing the newly vforked process,
-which will start with a
-.BR SIGSTOP ,
-or
-.B PTRACE_EVENT_STOP
-if
-.B PTRACE_SEIZE
-was used.
-A
-.BR waitpid (2)
-by the tracer will return a
-.I status
-value such that
-.IP
-.nf
- status>>8 == (SIGTRAP | (PTRACE_EVENT_VFORK<<8))
-.fi
-.IP
-The PID of the new process can be retrieved with
-.BR PTRACE_GETEVENTMSG .
-.TP
-.BR PTRACE_O_TRACEVFORKDONE " (since Linux 2.5.60)"
-Stop the tracee at the completion of the next
-.BR vfork (2).
-A
-.BR waitpid (2)
-by the tracer will return a
-.I status
-value such that
-.IP
-.nf
- status>>8 == (SIGTRAP | (PTRACE_EVENT_VFORK_DONE<<8))
-.fi
-.IP
-The PID of the new process can (since Linux 2.6.18) be retrieved with
-.BR PTRACE_GETEVENTMSG .
-.TP
-.BR PTRACE_O_TRACESECCOMP " (since Linux 3.5)"
-Stop the tracee when a
-.BR seccomp (2)
-.B SECCOMP_RET_TRACE
-rule is triggered.
-A
-.BR waitpid (2)
-by the tracer will return a
-.I status
-value such that
-.IP
-.nf
- status>>8 == (SIGTRAP | (PTRACE_EVENT_SECCOMP<<8))
-.fi
-.IP
-While this triggers a
-.B PTRACE_EVENT
-stop, it is similar to a syscall-enter-stop.
-For details, see the note on
-.B PTRACE_EVENT_SECCOMP
-below.
-The seccomp event message data (from the
-.B SECCOMP_RET_DATA
-portion of the seccomp filter rule) can be retrieved with
-.BR PTRACE_GETEVENTMSG .
-.TP
-.BR PTRACE_O_SUSPEND_SECCOMP " (since Linux 4.3)"
-.\" commit 13c4a90119d28cfcb6b5bdd820c233b86c2b0237
-Suspend the tracee's seccomp protections.
-This applies regardless of mode, and
-can be used when the tracee has not yet installed seccomp filters.
-That is, a valid use case is to suspend a tracee's seccomp protections
-before they are installed by the tracee,
-let the tracee install the filters,
-and then clear this flag when the filters should be resumed.
-Setting this option requires that the tracer have the
-.B CAP_SYS_ADMIN
-capability,
-not have any seccomp protections installed, and not have
-.B PTRACE_O_SUSPEND_SECCOMP
-set on itself.
-.RE
-.TP
-.BR PTRACE_GETEVENTMSG " (since Linux 2.5.46)"
-Retrieve a message (as an
-.IR "unsigned long" )
-about the ptrace event
-that just happened, placing it at the address
-.I data
-in the tracer.
-For
-.BR PTRACE_EVENT_EXIT ,
-this is the tracee's exit status.
-For
-.BR PTRACE_EVENT_FORK ,
-.BR PTRACE_EVENT_VFORK ,
-.BR PTRACE_EVENT_VFORK_DONE ,
-and
-.BR PTRACE_EVENT_CLONE ,
-this is the PID of the new process.
-For
-.BR PTRACE_EVENT_SECCOMP ,
-this is the
-.BR seccomp (2)
-filter's
-.B SECCOMP_RET_DATA
-associated with the triggered rule.
-.RI ( addr
-is ignored.)
-.TP
-.B PTRACE_CONT
-Restart the stopped tracee process.
-If
-.I data
-is nonzero,
-it is interpreted as the number of a signal to be delivered to the tracee;
-otherwise, no signal is delivered.
-Thus, for example, the tracer can control
-whether a signal sent to the tracee is delivered or not.
-.RI ( addr
-is ignored.)
-.TP
-.BR PTRACE_SYSCALL ", " PTRACE_SINGLESTEP
-Restart the stopped tracee as for
-.BR PTRACE_CONT ,
-but arrange for the tracee to be stopped at
-the next entry to or exit from a system call,
-or after execution of a single instruction, respectively.
-(The tracee will also, as usual, be stopped upon receipt of a signal.)
-From the tracer's perspective, the tracee will appear to have been
-stopped by receipt of a
-.BR SIGTRAP .
-So, for
-.BR PTRACE_SYSCALL ,
-for example, the idea is to inspect
-the arguments to the system call at the first stop,
-then do another
-.B PTRACE_SYSCALL
-and inspect the return value of the system call at the second stop.
-The
-.I data
-argument is treated as for
-.BR PTRACE_CONT .
-.RI ( addr
-is ignored.)
-.TP
-.BR PTRACE_SET_SYSCALL " (since Linux 2.6.16)"
-.\" commit 3f471126ee53feb5e9b210ea2f525ed3bb9b7a7f
-When in syscall-enter-stop,
-change the number of the system call that is about to
-be executed to the number specified in the
-.I data
-argument.
-The
-.I addr
-argument is ignored.
-This request is currently
-.\" As of 4.19-rc2
-supported only on arm (and arm64, though only for backwards compatibility),
-.\" commit 27aa55c5e5123fa8b8ad0156559d34d7edff58ca
-but most other architectures have other means of accomplishing this
-(usually by changing the register that the userland code passed the
-system call number in).
-.\" see change_syscall in tools/testing/selftests/seccomp/seccomp_bpf.c
-.\" and also strace's linux/*/set_scno.c files.
-.TP
-.BR PTRACE_SYSEMU ", " PTRACE_SYSEMU_SINGLESTEP " (since Linux 2.6.14)"
-For
-.BR PTRACE_SYSEMU ,
-continue and stop on entry to the next system call,
-which will not be executed.
-See the documentation on syscall-stops below.
-For
-.BR PTRACE_SYSEMU_SINGLESTEP ,
-do the same but also singlestep if not a system call.
-This call is used by programs like
-User Mode Linux that want to emulate all the tracee's system calls.
-The
-.I data
-argument is treated as for
-.BR PTRACE_CONT .
-The
-.I addr
-argument is ignored.
-These requests are currently
-.\" As at 3.7
-supported only on x86.
-.TP
-.BR PTRACE_LISTEN " (since Linux 3.4)"
-Restart the stopped tracee, but prevent it from executing.
-The resulting state of the tracee is similar to a process which
-has been stopped by a
-.B SIGSTOP
-(or other stopping signal).
-See the "group-stop" subsection for additional information.
-.B PTRACE_LISTEN
-works only on tracees attached by
-.BR PTRACE_SEIZE .
-.TP
-.B PTRACE_KILL
-Send the tracee a
-.B SIGKILL
-to terminate it.
-.RI ( addr
-and
-.I data
-are ignored.)
-.IP
-.I This operation is deprecated; do not use it!
-Instead, send a
-.B SIGKILL
-directly using
-.BR kill (2)
-or
-.BR tgkill (2).
-The problem with
-.B PTRACE_KILL
-is that it requires the tracee to be in signal-delivery-stop,
-otherwise it may not work
-(i.e., may complete successfully but won't kill the tracee).
-By contrast, sending a
-.B SIGKILL
-directly has no such limitation.
-.\" [Note from Denys Vlasenko:
-.\" deprecation suggested by Oleg Nesterov. He prefers to deprecate it
-.\" instead of describing (and needing to support) PTRACE_KILL's quirks.]
-.TP
-.BR PTRACE_INTERRUPT " (since Linux 3.4)"
-Stop a tracee.
-If the tracee is running or sleeping in kernel space and
-.B PTRACE_SYSCALL
-is in effect,
-the system call is interrupted and syscall-exit-stop is reported.
-(The interrupted system call is restarted when the tracee is restarted.)
-If the tracee was already stopped by a signal and
-.B PTRACE_LISTEN
-was sent to it,
-the tracee stops with
-.B PTRACE_EVENT_STOP
-and
-.I WSTOPSIG(status)
-returns the stop signal.
-If any other ptrace-stop is generated at the same time (for example,
-if a signal is sent to the tracee), this ptrace-stop happens.
-If none of the above applies (for example, if the tracee is running in user
-space), it stops with
-.B PTRACE_EVENT_STOP
-with
-.I WSTOPSIG(status)
-==
-.BR SIGTRAP .
-.B PTRACE_INTERRUPT
-only works on tracees attached by
-.BR PTRACE_SEIZE .
-.TP
-.B PTRACE_ATTACH
-Attach to the process specified in
-.IR pid ,
-making it a tracee of the calling process.
-.\" No longer true (removed by Denys Vlasenko, 2011, who remarks:
-.\" "I think it isn't true in non-ancient 2.4 and in Linux 2.6/3.x.
-.\" Basically, it's not true for any Linux in practical use.
-.\" ; the behavior of the tracee is as if it had done a
-.\" .BR PTRACE_TRACEME .
-.\" The calling process actually becomes the parent of the tracee
-.\" process for most purposes (e.g., it will receive
-.\" notification of tracee events and appears in
-.\" .BR ps (1)
-.\" output as the tracee's parent), but a
-.\" .BR getppid (2)
-.\" by the tracee will still return the PID of the original parent.
-The tracee is sent a
-.BR SIGSTOP ,
-but will not necessarily have stopped
-by the completion of this call; use
-.BR waitpid (2)
-to wait for the tracee to stop.
-See the "Attaching and detaching" subsection for additional information.
-.RI ( addr
-and
-.I data
-are ignored.)
-.IP
-Permission to perform a
-.B PTRACE_ATTACH
-is governed by a ptrace access mode
-.B PTRACE_MODE_ATTACH_REALCREDS
-check; see below.
-.TP
-.BR PTRACE_SEIZE " (since Linux 3.4)"
-.\"
-.\" Noted by Dmitry Levin:
-.\"
-.\" PTRACE_SEIZE was introduced by commit v3.1-rc1~308^2~28, but
-.\" it had to be used along with a temporary flag PTRACE_SEIZE_DEVEL,
-.\" which was removed later by commit v3.4-rc1~109^2~20.
-.\"
-.\" That is, [before] v3.4 we had a test mode of PTRACE_SEIZE API,
-.\" which was not compatible with the current PTRACE_SEIZE API introduced
-.\" in Linux 3.4.
-.\"
-Attach to the process specified in
-.IR pid ,
-making it a tracee of the calling process.
-Unlike
-.BR PTRACE_ATTACH ,
-.B PTRACE_SEIZE
-does not stop the process.
-Group-stops are reported as
-.B PTRACE_EVENT_STOP
-and
-.I WSTOPSIG(status)
-returns the stop signal.
-Automatically attached children stop with
-.B PTRACE_EVENT_STOP
-and
-.I WSTOPSIG(status)
-returns
-.B SIGTRAP
-instead of having
-.B SIGSTOP
-signal delivered to them.
-.BR execve (2)
-does not deliver an extra
-.BR SIGTRAP .
-Only a
-.BR PTRACE_SEIZE d
-process can accept
-.B PTRACE_INTERRUPT
-and
-.B PTRACE_LISTEN
-commands.
-The "seized" behavior just described is inherited by
-children that are automatically attached using
-.BR PTRACE_O_TRACEFORK ,
-.BR PTRACE_O_TRACEVFORK ,
-and
-.BR PTRACE_O_TRACECLONE .
-.I addr
-must be zero.
-.I data
-contains a bit mask of ptrace options to activate immediately.
-.IP
-Permission to perform a
-.B PTRACE_SEIZE
-is governed by a ptrace access mode
-.B PTRACE_MODE_ATTACH_REALCREDS
-check; see below.
-.\"
-.TP
-.BR PTRACE_SECCOMP_GET_FILTER " (since Linux 4.4)"
-.\" commit f8e529ed941ba2bbcbf310b575d968159ce7e895
-This operation allows the tracer to dump the tracee's
-classic BPF filters.
-.IP
-.I addr
-is an integer specifying the index of the filter to be dumped.
-The most recently installed filter has the index 0.
-If
-.I addr
-is greater than the number of installed filters,
-the operation fails with the error
-.BR ENOENT .
-.IP
-.I data
-is either a pointer to a
-.I struct sock_filter
-array that is large enough to store the BPF program,
-or NULL if the program is not to be stored.
-.IP
-Upon success,
-the return value is the number of instructions in the BPF program.
-If
-.I data
-was NULL, then this return value can be used to correctly size the
-.I struct sock_filter
-array passed in a subsequent call.
-.IP
-This operation fails with the error
-.B EACCES
-if the caller does not have the
-.B CAP_SYS_ADMIN
-capability or if the caller is in strict or filter seccomp mode.
-If the filter referred to by
-.I addr
-is not a classic BPF filter, the operation fails with the error
-.BR EMEDIUMTYPE .
-.IP
-This operation is available if the kernel was configured with both the
-.B CONFIG_SECCOMP_FILTER
-and the
-.B CONFIG_CHECKPOINT_RESTORE
-options.
-.TP
-.B PTRACE_DETACH
-Restart the stopped tracee as for
-.BR PTRACE_CONT ,
-but first detach from it.
-Under Linux, a tracee can be detached in this way regardless
-of which method was used to initiate tracing.
-.RI ( addr
-is ignored.)
-.\"
-.TP
-.BR PTRACE_GET_THREAD_AREA " (since Linux 2.6.0)"
-This operation performs a similar task to
-.BR get_thread_area (2).
-It reads the TLS entry in the GDT whose index is given in
-.IR addr ,
-placing a copy of the entry into the
-.I struct user_desc
-pointed to by
-.IR data .
-(By contrast with
-.BR get_thread_area (2),
-the
-.I entry_number
-of the
-.I struct user_desc
-is ignored.)
-.TP
-.BR PTRACE_SET_THREAD_AREA " (since Linux 2.6.0)"
-This operation performs a similar task to
-.BR set_thread_area (2).
-It sets the TLS entry in the GDT whose index is given in
-.IR addr ,
-assigning it the data supplied in the
-.I struct user_desc
-pointed to by
-.IR data .
-(By contrast with
-.BR set_thread_area (2),
-the
-.I entry_number
-of the
-.I struct user_desc
-is ignored; in other words,
-this ptrace operation can't be used to allocate a free TLS entry.)
-.TP
-.BR PTRACE_GET_SYSCALL_INFO " (since Linux 5.3)"
-.\" commit 201766a20e30f982ccfe36bebfad9602c3ff574a
-Retrieve information about the system call that caused the stop.
-The information is placed into the buffer pointed by the
-.I data
-argument, which should be a pointer to a buffer of type
-.IR "struct ptrace_syscall_info" .
-The
-.I addr
-argument contains the size of the buffer pointed to
-by the
-.I data
-argument (i.e.,
-.IR "sizeof(struct ptrace_syscall_info)" ).
-The return value contains the number of bytes available
-to be written by the kernel.
-If the size of the data to be written by the kernel exceeds the size
-specified by the
-.I addr
-argument, the output data is truncated.
-.IP
-The
-.I ptrace_syscall_info
-structure contains the following fields:
-.IP
-.in +4n
-.EX
-struct ptrace_syscall_info {
- __u8 op; /* Type of system call stop */
- __u32 arch; /* AUDIT_ARCH_* value; see seccomp(2) */
- __u64 instruction_pointer; /* CPU instruction pointer */
- __u64 stack_pointer; /* CPU stack pointer */
- union {
- struct { /* op == PTRACE_SYSCALL_INFO_ENTRY */
- __u64 nr; /* System call number */
- __u64 args[6]; /* System call arguments */
- } entry;
- struct { /* op == PTRACE_SYSCALL_INFO_EXIT */
- __s64 rval; /* System call return value */
- __u8 is_error; /* System call error flag;
- Boolean: does rval contain
- an error value (\-ERRCODE) or
- a nonerror return value? */
- } exit;
- struct { /* op == PTRACE_SYSCALL_INFO_SECCOMP */
- __u64 nr; /* System call number */
- __u64 args[6]; /* System call arguments */
- __u32 ret_data; /* SECCOMP_RET_DATA portion
- of SECCOMP_RET_TRACE
- return value */
- } seccomp;
- };
-};
-.EE
-.in
-.IP
-The
-.IR op ,
-.IR arch ,
-.IR instruction_pointer ,
-and
-.I stack_pointer
-fields are defined for all kinds of ptrace system call stops.
-The rest of the structure is a union; one should read only those fields
-that are meaningful for the kind of system call stop specified by the
-.I op
-field.
-.IP
-The
-.I op
-field has one of the following values (defined in
-.IR <linux/ptrace.h> )
-indicating what type of stop occurred and
-which part of the union is filled:
-.RS
-.TP
-.B PTRACE_SYSCALL_INFO_ENTRY
-The
-.I entry
-component of the union contains information relating to a
-system call entry stop.
-.TP
-.B PTRACE_SYSCALL_INFO_EXIT
-The
-.I exit
-component of the union contains information relating to a
-system call exit stop.
-.TP
-.B PTRACE_SYSCALL_INFO_SECCOMP
-The
-.I seccomp
-component of the union contains information relating to a
-.B PTRACE_EVENT_SECCOMP
-stop.
-.TP
-.B PTRACE_SYSCALL_INFO_NONE
-No component of the union contains relevant information.
-.RE
-.IP
-In case of system call entry or exit stops,
-the data returned by
-.B PTRACE_GET_SYSCALL_INFO
-is limited to type
-.B PTRACE_SYSCALL_INFO_NONE
-unless
-.B PTRACE_O_TRACESYSGOOD
-option is set before the corresponding system call stop has occurred.
-.\"
-.SS Death under ptrace
-When a (possibly multithreaded) process receives a killing signal
-(one whose disposition is set to
-.B SIG_DFL
-and whose default action is to kill the process),
-all threads exit.
-Tracees report their death to their tracer(s).
-Notification of this event is delivered via
-.BR waitpid (2).
-.PP
-Note that the killing signal will first cause signal-delivery-stop
-(on one tracee only),
-and only after it is injected by the tracer
-(or after it was dispatched to a thread which isn't traced),
-will death from the signal happen on
-.I all
-tracees within a multithreaded process.
-(The term "signal-delivery-stop" is explained below.)
-.PP
-.B SIGKILL
-does not generate signal-delivery-stop and
-therefore the tracer can't suppress it.
-.B SIGKILL
-kills even within system calls
-(syscall-exit-stop is not generated prior to death by
-.BR SIGKILL ).
-The net effect is that
-.B SIGKILL
-always kills the process (all its threads),
-even if some threads of the process are ptraced.
-.PP
-When the tracee calls
-.BR _exit (2),
-it reports its death to its tracer.
-Other threads are not affected.
-.PP
-When any thread executes
-.BR exit_group (2),
-every tracee in its thread group reports its death to its tracer.
-.PP
-If the
-.B PTRACE_O_TRACEEXIT
-option is on,
-.B PTRACE_EVENT_EXIT
-will happen before actual death.
-This applies to exits via
-.BR exit (2),
-.BR exit_group (2),
-and signal deaths (except
-.BR SIGKILL ,
-depending on the kernel version; see BUGS below),
-and when threads are torn down on
-.BR execve (2)
-in a multithreaded process.
-.PP
-The tracer cannot assume that the ptrace-stopped tracee exists.
-There are many scenarios when the tracee may die while stopped (such as
-.BR SIGKILL ).
-Therefore, the tracer must be prepared to handle an
-.B ESRCH
-error on any ptrace operation.
-Unfortunately, the same error is returned if the tracee
-exists but is not ptrace-stopped
-(for commands which require a stopped tracee),
-or if it is not traced by the process which issued the ptrace call.
-The tracer needs to keep track of the stopped/running state of the tracee,
-and interpret
-.B ESRCH
-as "tracee died unexpectedly" only if it knows that the tracee has
-been observed to enter ptrace-stop.
-Note that there is no guarantee that
-.I waitpid(WNOHANG)
-will reliably report the tracee's death status if a
-ptrace operation returned
-.BR ESRCH .
-.I waitpid(WNOHANG)
-may return 0 instead.
-In other words, the tracee may be "not yet fully dead",
-but already refusing ptrace requests.
-.PP
-The tracer can't assume that the tracee
-.I always
-ends its life by reporting
-.I WIFEXITED(status)
-or
-.IR WIFSIGNALED(status) ;
-there are cases where this does not occur.
-For example, if a thread other than thread group leader does an
-.BR execve (2),
-it disappears;
-its PID will never be seen again,
-and any subsequent ptrace stops will be reported under
-the thread group leader's PID.
-.SS Stopped states
-A tracee can be in two states: running or stopped.
-For the purposes of ptrace, a tracee which is blocked in a system call
-(such as
-.BR read (2),
-.BR pause (2),
-etc.)
-is nevertheless considered to be running, even if the tracee is blocked
-for a long time.
-The state of the tracee after
-.B PTRACE_LISTEN
-is somewhat of a gray area: it is not in any ptrace-stop (ptrace commands
-won't work on it, and it will deliver
-.BR waitpid (2)
-notifications),
-but it also may be considered "stopped" because
-it is not executing instructions (is not scheduled), and if it was
-in group-stop before
-.BR PTRACE_LISTEN ,
-it will not respond to signals until
-.B SIGCONT
-is received.
-.PP
-There are many kinds of states when the tracee is stopped, and in ptrace
-discussions they are often conflated.
-Therefore, it is important to use precise terms.
-.PP
-In this manual page, any stopped state in which the tracee is ready
-to accept ptrace commands from the tracer is called
-.IR ptrace-stop .
-Ptrace-stops can
-be further subdivided into
-.IR signal-delivery-stop ,
-.IR group-stop ,
-.IR syscall-stop ,
-.IR "PTRACE_EVENT stops" ,
-and so on.
-These stopped states are described in detail below.
-.PP
-When the running tracee enters ptrace-stop, it notifies its tracer using
-.BR waitpid (2)
-(or one of the other "wait" system calls).
-Most of this manual page assumes that the tracer waits with:
-.PP
-.in +4n
-.EX
-pid = waitpid(pid_or_minus_1, &status, __WALL);
-.EE
-.in
-.PP
-Ptrace-stopped tracees are reported as returns with
-.I pid
-greater than 0 and
-.I WIFSTOPPED(status)
-true.
-.\" Denys Vlasenko:
-.\" Do we require __WALL usage, or will just using 0 be ok? (With 0,
-.\" I am not 100% sure there aren't ugly corner cases.) Are the
-.\" rules different if user wants to use waitid? Will waitid require
-.\" WEXITED?
-.\"
-.PP
-The
-.B __WALL
-flag does not include the
-.B WSTOPPED
-and
-.B WEXITED
-flags, but implies their functionality.
-.PP
-Setting the
-.B WCONTINUED
-flag when calling
-.BR waitpid (2)
-is not recommended: the "continued" state is per-process and
-consuming it can confuse the real parent of the tracee.
-.PP
-Use of the
-.B WNOHANG
-flag may cause
-.BR waitpid (2)
-to return 0 ("no wait results available yet")
-even if the tracer knows there should be a notification.
-Example:
-.PP
-.in +4n
-.EX
-errno = 0;
-ptrace(PTRACE_CONT, pid, 0L, 0L);
-if (errno == ESRCH) {
- /* tracee is dead */
- r = waitpid(tracee, &status, __WALL | WNOHANG);
- /* r can still be 0 here! */
-}
-.EE
-.in
-.\" FIXME .
-.\" waitid usage? WNOWAIT?
-.\" describe how wait notifications queue (or not queue)
-.PP
-The following kinds of ptrace-stops exist: signal-delivery-stops,
-group-stops,
-.B PTRACE_EVENT
-stops, syscall-stops.
-They all are reported by
-.BR waitpid (2)
-with
-.I WIFSTOPPED(status)
-true.
-They may be differentiated by examining the value
-.IR status>>8 ,
-and if there is ambiguity in that value, by querying
-.BR PTRACE_GETSIGINFO .
-(Note: the
-.I WSTOPSIG(status)
-macro can't be used to perform this examination,
-because it returns the value
-.IR "(status>>8)\ &\ 0xff" .)
-.SS Signal-delivery-stop
-When a (possibly multithreaded) process receives any signal except
-.BR SIGKILL ,
-the kernel selects an arbitrary thread which handles the signal.
-(If the signal is generated with
-.BR tgkill (2),
-the target thread can be explicitly selected by the caller.)
-If the selected thread is traced, it enters signal-delivery-stop.
-At this point, the signal is not yet delivered to the process,
-and can be suppressed by the tracer.
-If the tracer doesn't suppress the signal,
-it passes the signal to the tracee in the next ptrace restart request.
-This second step of signal delivery is called
-.I "signal injection"
-in this manual page.
-Note that if the signal is blocked,
-signal-delivery-stop doesn't happen until the signal is unblocked,
-with the usual exception that
-.B SIGSTOP
-can't be blocked.
-.PP
-Signal-delivery-stop is observed by the tracer as
-.BR waitpid (2)
-returning with
-.I WIFSTOPPED(status)
-true, with the signal returned by
-.IR WSTOPSIG(status) .
-If the signal is
-.BR SIGTRAP ,
-this may be a different kind of ptrace-stop;
-see the "Syscall-stops" and "execve" sections below for details.
-If
-.I WSTOPSIG(status)
-returns a stopping signal, this may be a group-stop; see below.
-.SS Signal injection and suppression
-After signal-delivery-stop is observed by the tracer,
-the tracer should restart the tracee with the call
-.PP
-.in +4n
-.EX
-ptrace(PTRACE_restart, pid, 0, sig)
-.EE
-.in
-.PP
-where
-.B PTRACE_restart
-is one of the restarting ptrace requests.
-If
-.I sig
-is 0, then a signal is not delivered.
-Otherwise, the signal
-.I sig
-is delivered.
-This operation is called
-.I "signal injection"
-in this manual page, to distinguish it from signal-delivery-stop.
-.PP
-The
-.I sig
-value may be different from the
-.I WSTOPSIG(status)
-value: the tracer can cause a different signal to be injected.
-.PP
-Note that a suppressed signal still causes system calls to return
-prematurely.
-In this case, system calls will be restarted: the tracer will
-observe the tracee to reexecute the interrupted system call (or
-.BR restart_syscall (2)
-system call for a few system calls which use a different mechanism
-for restarting) if the tracer uses
-.BR PTRACE_SYSCALL .
-Even system calls (such as
-.BR poll (2))
-which are not restartable after signal are restarted after
-signal is suppressed;
-however, kernel bugs exist which cause some system calls to fail with
-.B EINTR
-even though no observable signal is injected to the tracee.
-.PP
-Restarting ptrace commands issued in ptrace-stops other than
-signal-delivery-stop are not guaranteed to inject a signal, even if
-.I sig
-is nonzero.
-No error is reported; a nonzero
-.I sig
-may simply be ignored.
-Ptrace users should not try to "create a new signal" this way: use
-.BR tgkill (2)
-instead.
-.PP
-The fact that signal injection requests may be ignored
-when restarting the tracee after
-ptrace stops that are not signal-delivery-stops
-is a cause of confusion among ptrace users.
-One typical scenario is that the tracer observes group-stop,
-mistakes it for signal-delivery-stop, restarts the tracee with
-.PP
-.in +4n
-.EX
-ptrace(PTRACE_restart, pid, 0, stopsig)
-.EE
-.in
-.PP
-with the intention of injecting
-.IR stopsig ,
-but
-.I stopsig
-gets ignored and the tracee continues to run.
-.PP
-The
-.B SIGCONT
-signal has a side effect of waking up (all threads of)
-a group-stopped process.
-This side effect happens before signal-delivery-stop.
-The tracer can't suppress this side effect (it can
-only suppress signal injection, which only causes the
-.B SIGCONT
-handler to not be executed in the tracee, if such a handler is installed).
-In fact, waking up from group-stop may be followed by
-signal-delivery-stop for signal(s)
-.I other than
-.BR SIGCONT ,
-if they were pending when
-.B SIGCONT
-was delivered.
-In other words,
-.B SIGCONT
-may be not the first signal observed by the tracee after it was sent.
-.PP
-Stopping signals cause (all threads of) a process to enter group-stop.
-This side effect happens after signal injection, and therefore can be
-suppressed by the tracer.
-.PP
-In Linux 2.4 and earlier, the
-.B SIGSTOP
-signal can't be injected.
-.\" In the Linux 2.4 sources, in arch/i386/kernel/signal.c::do_signal(),
-.\" there is:
-.\"
-.\" /* The debugger continued. Ignore SIGSTOP. */
-.\" if (signr == SIGSTOP)
-.\" continue;
-.PP
-.B PTRACE_GETSIGINFO
-can be used to retrieve a
-.I siginfo_t
-structure which corresponds to the delivered signal.
-.B PTRACE_SETSIGINFO
-may be used to modify it.
-If
-.B PTRACE_SETSIGINFO
-has been used to alter
-.IR siginfo_t ,
-the
-.I si_signo
-field and the
-.I sig
-parameter in the restarting command must match,
-otherwise the result is undefined.
-.SS Group-stop
-When a (possibly multithreaded) process receives a stopping signal,
-all threads stop.
-If some threads are traced, they enter a group-stop.
-Note that the stopping signal will first cause signal-delivery-stop
-(on one tracee only), and only after it is injected by the tracer
-(or after it was dispatched to a thread which isn't traced),
-will group-stop be initiated on
-.I all
-tracees within the multithreaded process.
-As usual, every tracee reports its group-stop separately
-to the corresponding tracer.
-.PP
-Group-stop is observed by the tracer as
-.BR waitpid (2)
-returning with
-.I WIFSTOPPED(status)
-true, with the stopping signal available via
-.IR WSTOPSIG(status) .
-The same result is returned by some other classes of ptrace-stops,
-therefore the recommended practice is to perform the call
-.PP
-.in +4n
-.EX
-ptrace(PTRACE_GETSIGINFO, pid, 0, &siginfo)
-.EE
-.in
-.PP
-The call can be avoided if the signal is not
-.BR SIGSTOP ,
-.BR SIGTSTP ,
-.BR SIGTTIN ,
-or
-.BR SIGTTOU ;
-only these four signals are stopping signals.
-If the tracer sees something else, it can't be a group-stop.
-Otherwise, the tracer needs to call
-.BR PTRACE_GETSIGINFO .
-If
-.B PTRACE_GETSIGINFO
-fails with
-.BR EINVAL ,
-then it is definitely a group-stop.
-(Other failure codes are possible, such as
-.B ESRCH
-("no such process") if a
-.B SIGKILL
-killed the tracee.)
-.PP
-If tracee was attached using
-.BR PTRACE_SEIZE ,
-group-stop is indicated by
-.BR PTRACE_EVENT_STOP :
-.IR "status>>16 == PTRACE_EVENT_STOP" .
-This allows detection of group-stops
-without requiring an extra
-.B PTRACE_GETSIGINFO
-call.
-.PP
-As of Linux 2.6.38,
-after the tracer sees the tracee ptrace-stop and until it
-restarts or kills it, the tracee will not run,
-and will not send notifications (except
-.B SIGKILL
-death) to the tracer, even if the tracer enters into another
-.BR waitpid (2)
-call.
-.PP
-The kernel behavior described in the previous paragraph
-causes a problem with transparent handling of stopping signals.
-If the tracer restarts the tracee after group-stop,
-the stopping signal
-is effectively ignored\[em]the tracee doesn't remain stopped, it runs.
-If the tracer doesn't restart the tracee before entering into the next
-.BR waitpid (2),
-future
-.B SIGCONT
-signals will not be reported to the tracer;
-this would cause the
-.B SIGCONT
-signals to have no effect on the tracee.
-.PP
-Since Linux 3.4, there is a method to overcome this problem: instead of
-.BR PTRACE_CONT ,
-a
-.B PTRACE_LISTEN
-command can be used to restart a tracee in a way where it does not execute,
-but waits for a new event which it can report via
-.BR waitpid (2)
-(such as when
-it is restarted by a
-.BR SIGCONT ).
-.SS PTRACE_EVENT stops
-If the tracer sets
-.B PTRACE_O_TRACE_*
-options, the tracee will enter ptrace-stops called
-.B PTRACE_EVENT
-stops.
-.PP
-.B PTRACE_EVENT
-stops are observed by the tracer as
-.BR waitpid (2)
-returning with
-.IR WIFSTOPPED(status) ,
-and
-.I WSTOPSIG(status)
-returns
-.B SIGTRAP
-(or for
-.BR PTRACE_EVENT_STOP ,
-returns the stopping signal if tracee is in a group-stop).
-An additional bit is set in the higher byte of the status word:
-the value
-.I status>>8
-will be
-.PP
-.in +4n
-.EX
-((PTRACE_EVENT_foo<<8) | SIGTRAP).
-.EE
-.in
-.PP
-The following events exist:
-.TP
-.B PTRACE_EVENT_VFORK
-Stop before return from
-.BR vfork (2)
-or
-.BR clone (2)
-with the
-.B CLONE_VFORK
-flag.
-When the tracee is continued after this stop, it will wait for child to
-exit/exec before continuing its execution
-(in other words, the usual behavior on
-.BR vfork (2)).
-.TP
-.B PTRACE_EVENT_FORK
-Stop before return from
-.BR fork (2)
-or
-.BR clone (2)
-with the exit signal set to
-.BR SIGCHLD .
-.TP
-.B PTRACE_EVENT_CLONE
-Stop before return from
-.BR clone (2).
-.TP
-.B PTRACE_EVENT_VFORK_DONE
-Stop before return from
-.BR vfork (2)
-or
-.BR clone (2)
-with the
-.B CLONE_VFORK
-flag,
-but after the child unblocked this tracee by exiting or execing.
-.PP
-For all four stops described above,
-the stop occurs in the parent (i.e., the tracee),
-not in the newly created thread.
-.B PTRACE_GETEVENTMSG
-can be used to retrieve the new thread's ID.
-.TP
-.B PTRACE_EVENT_EXEC
-Stop before return from
-.BR execve (2).
-Since Linux 3.0,
-.B PTRACE_GETEVENTMSG
-returns the former thread ID.
-.TP
-.B PTRACE_EVENT_EXIT
-Stop before exit (including death from
-.BR exit_group (2)),
-signal death, or exit caused by
-.BR execve (2)
-in a multithreaded process.
-.B PTRACE_GETEVENTMSG
-returns the exit status.
-Registers can be examined
-(unlike when "real" exit happens).
-The tracee is still alive; it needs to be
-.BR PTRACE_CONT ed
-or
-.BR PTRACE_DETACH ed
-to finish exiting.
-.TP
-.B PTRACE_EVENT_STOP
-Stop induced by
-.B PTRACE_INTERRUPT
-command, or group-stop, or initial ptrace-stop when a new child is attached
-(only if attached using
-.BR PTRACE_SEIZE ).
-.TP
-.B PTRACE_EVENT_SECCOMP
-Stop triggered by a
-.BR seccomp (2)
-rule on tracee syscall entry when
-.B PTRACE_O_TRACESECCOMP
-has been set by the tracer.
-The seccomp event message data (from the
-.B SECCOMP_RET_DATA
-portion of the seccomp filter rule) can be retrieved with
-.BR PTRACE_GETEVENTMSG .
-The semantics of this stop are described in
-detail in a separate section below.
-.PP
-.B PTRACE_GETSIGINFO
-on
-.B PTRACE_EVENT
-stops returns
-.B SIGTRAP
-in
-.IR si_signo ,
-with
-.I si_code
-set to
-.IR "(event<<8)\ |\ SIGTRAP" .
-.SS Syscall-stops
-If the tracee was restarted by
-.B PTRACE_SYSCALL
-or
-.BR PTRACE_SYSEMU ,
-the tracee enters
-syscall-enter-stop just prior to entering any system call (which
-will not be executed if the restart was using
-.BR PTRACE_SYSEMU ,
-regardless of any change made to registers at this point or how the
-tracee is restarted after this stop).
-No matter which method caused the syscall-entry-stop,
-if the tracer restarts the tracee with
-.BR PTRACE_SYSCALL ,
-the tracee enters syscall-exit-stop when the system call is finished,
-or if it is interrupted by a signal.
-(That is, signal-delivery-stop never happens between syscall-enter-stop
-and syscall-exit-stop; it happens
-.I after
-syscall-exit-stop.).
-If the tracee is continued using any other method (including
-.BR PTRACE_SYSEMU ),
-no syscall-exit-stop occurs.
-Note that all mentions
-.B PTRACE_SYSEMU
-apply equally to
-.BR PTRACE_SYSEMU_SINGLESTEP .
-.PP
-However, even if the tracee was continued using
-.BR PTRACE_SYSCALL ,
-it is not guaranteed that the next stop will be a syscall-exit-stop.
-Other possibilities are that the tracee may stop in a
-.B PTRACE_EVENT
-stop (including seccomp stops), exit (if it entered
-.BR _exit (2)
-or
-.BR exit_group (2)),
-be killed by
-.BR SIGKILL ,
-or die silently (if it is a thread group leader, the
-.BR execve (2)
-happened in another thread,
-and that thread is not traced by the same tracer;
-this situation is discussed later).
-.PP
-Syscall-enter-stop and syscall-exit-stop are observed by the tracer as
-.BR waitpid (2)
-returning with
-.I WIFSTOPPED(status)
-true, and
-.I WSTOPSIG(status)
-giving
-.BR SIGTRAP .
-If the
-.B PTRACE_O_TRACESYSGOOD
-option was set by the tracer, then
-.I WSTOPSIG(status)
-will give the value
-.IR "(SIGTRAP\ |\ 0x80)" .
-.PP
-Syscall-stops can be distinguished from signal-delivery-stop with
-.B SIGTRAP
-by querying
-.B PTRACE_GETSIGINFO
-for the following cases:
-.TP
-.IR si_code " <= 0"
-.B SIGTRAP
-was delivered as a result of a user-space action,
-for example, a system call
-.RB ( tgkill (2),
-.BR kill (2),
-.BR sigqueue (3),
-etc.),
-expiration of a POSIX timer,
-change of state on a POSIX message queue,
-or completion of an asynchronous I/O request.
-.TP
-.IR si_code " == SI_KERNEL (0x80)"
-.B SIGTRAP
-was sent by the kernel.
-.TP
-.IR si_code " == SIGTRAP or " si_code " == (SIGTRAP|0x80)"
-This is a syscall-stop.
-.PP
-However, syscall-stops happen very often (twice per system call),
-and performing
-.B PTRACE_GETSIGINFO
-for every syscall-stop may be somewhat expensive.
-.PP
-Some architectures allow the cases to be distinguished
-by examining registers.
-For example, on x86,
-.I rax
-==
-.RB \- ENOSYS
-in syscall-enter-stop.
-Since
-.B SIGTRAP
-(like any other signal) always happens
-.I after
-syscall-exit-stop,
-and at this point
-.I rax
-almost never contains
-.RB \- ENOSYS ,
-the
-.B SIGTRAP
-looks like "syscall-stop which is not syscall-enter-stop";
-in other words, it looks like a
-"stray syscall-exit-stop" and can be detected this way.
-But such detection is fragile and is best avoided.
-.PP
-Using the
-.B PTRACE_O_TRACESYSGOOD
-option is the recommended method to distinguish syscall-stops
-from other kinds of ptrace-stops,
-since it is reliable and does not incur a performance penalty.
-.PP
-Syscall-enter-stop and syscall-exit-stop are
-indistinguishable from each other by the tracer.
-The tracer needs to keep track of the sequence of
-ptrace-stops in order to not misinterpret syscall-enter-stop as
-syscall-exit-stop or vice versa.
-In general, a syscall-enter-stop is
-always followed by syscall-exit-stop,
-.B PTRACE_EVENT
-stop, or the tracee's death;
-no other kinds of ptrace-stop can occur in between.
-However, note that seccomp stops (see below) can cause syscall-exit-stops,
-without preceding syscall-entry-stops.
-If seccomp is in use, care needs
-to be taken not to misinterpret such stops as syscall-entry-stops.
-.PP
-If after syscall-enter-stop,
-the tracer uses a restarting command other than
-.BR PTRACE_SYSCALL ,
-syscall-exit-stop is not generated.
-.PP
-.B PTRACE_GETSIGINFO
-on syscall-stops returns
-.B SIGTRAP
-in
-.IR si_signo ,
-with
-.I si_code
-set to
-.B SIGTRAP
-or
-.IR (SIGTRAP|0x80) .
-.\"
-.SS PTRACE_EVENT_SECCOMP stops (Linux 3.5 to Linux 4.7)
-The behavior of
-.B PTRACE_EVENT_SECCOMP
-stops and their interaction with other kinds
-of ptrace stops has changed between kernel versions.
-This documents the behavior
-from their introduction until Linux 4.7 (inclusive).
-The behavior in later kernel versions is documented in the next section.
-.PP
-A
-.B PTRACE_EVENT_SECCOMP
-stop occurs whenever a
-.B SECCOMP_RET_TRACE
-rule is triggered.
-This is independent of which methods was used to restart the system call.
-Notably, seccomp still runs even if the tracee was restarted using
-.B PTRACE_SYSEMU
-and this system call is unconditionally skipped.
-.PP
-Restarts from this stop will behave as if the stop had occurred right
-before the system call in question.
-In particular, both
-.B PTRACE_SYSCALL
-and
-.B PTRACE_SYSEMU
-will normally cause a subsequent syscall-entry-stop.
-However, if after the
-.B PTRACE_EVENT_SECCOMP
-the system call number is negative,
-both the syscall-entry-stop and the system call itself will be skipped.
-This means that if the system call number is negative after a
-.B PTRACE_EVENT_SECCOMP
-and the tracee is restarted using
-.BR PTRACE_SYSCALL ,
-the next observed stop will be a syscall-exit-stop,
-rather than the syscall-entry-stop that might have been expected.
-.\"
-.SS PTRACE_EVENT_SECCOMP stops (since Linux 4.8)
-Starting with Linux 4.8,
-.\" commit 93e35efb8de45393cf61ed07f7b407629bf698ea
-the
-.B PTRACE_EVENT_SECCOMP
-stop was reordered to occur between syscall-entry-stop and
-syscall-exit-stop.
-Note that seccomp no longer runs (and no
-.B PTRACE_EVENT_SECCOMP
-will be reported) if the system call is skipped due to
-.BR PTRACE_SYSEMU .
-.PP
-Functionally, a
-.B PTRACE_EVENT_SECCOMP
-stop functions comparably
-to a syscall-entry-stop (i.e., continuations using
-.B PTRACE_SYSCALL
-will cause syscall-exit-stops,
-the system call number may be changed and any other modified registers
-are visible to the to-be-executed system call as well).
-Note that there may be,
-but need not have been a preceding syscall-entry-stop.
-.PP
-After a
-.B PTRACE_EVENT_SECCOMP
-stop, seccomp will be rerun, with a
-.B SECCOMP_RET_TRACE
-rule now functioning the same as a
-.BR SECCOMP_RET_ALLOW .
-Specifically, this means that if registers are not modified during the
-.B PTRACE_EVENT_SECCOMP
-stop, the system call will then be allowed.
-.\"
-.SS PTRACE_SINGLESTEP stops
-[Details of these kinds of stops are yet to be documented.]
-.\"
-.\" FIXME .
-.\" document stops occurring with PTRACE_SINGLESTEP
-.\"
-.SS Informational and restarting ptrace commands
-Most ptrace commands (all except
-.BR PTRACE_ATTACH ,
-.BR PTRACE_SEIZE ,
-.BR PTRACE_TRACEME ,
-.BR PTRACE_INTERRUPT ,
-and
-.BR PTRACE_KILL )
-require the tracee to be in a ptrace-stop, otherwise they fail with
-.BR ESRCH .
-.PP
-When the tracee is in ptrace-stop,
-the tracer can read and write data to
-the tracee using informational commands.
-These commands leave the tracee in ptrace-stopped state:
-.PP
-.in +4n
-.EX
-ptrace(PTRACE_PEEKTEXT/PEEKDATA/PEEKUSER, pid, addr, 0);
-ptrace(PTRACE_POKETEXT/POKEDATA/POKEUSER, pid, addr, long_val);
-ptrace(PTRACE_GETREGS/GETFPREGS, pid, 0, &struct);
-ptrace(PTRACE_SETREGS/SETFPREGS, pid, 0, &struct);
-ptrace(PTRACE_GETREGSET, pid, NT_foo, &iov);
-ptrace(PTRACE_SETREGSET, pid, NT_foo, &iov);
-ptrace(PTRACE_GETSIGINFO, pid, 0, &siginfo);
-ptrace(PTRACE_SETSIGINFO, pid, 0, &siginfo);
-ptrace(PTRACE_GETEVENTMSG, pid, 0, &long_var);
-ptrace(PTRACE_SETOPTIONS, pid, 0, PTRACE_O_flags);
-.EE
-.in
-.PP
-Note that some errors are not reported.
-For example, setting signal information
-.RI ( siginfo )
-may have no effect in some ptrace-stops, yet the call may succeed
-(return 0 and not set
-.IR errno );
-querying
-.B PTRACE_GETEVENTMSG
-may succeed and return some random value if current ptrace-stop
-is not documented as returning a meaningful event message.
-.PP
-The call
-.PP
-.in +4n
-.EX
-ptrace(PTRACE_SETOPTIONS, pid, 0, PTRACE_O_flags);
-.EE
-.in
-.PP
-affects one tracee.
-The tracee's current flags are replaced.
-Flags are inherited by new tracees created and "auto-attached" via active
-.BR PTRACE_O_TRACEFORK ,
-.BR PTRACE_O_TRACEVFORK ,
-or
-.B PTRACE_O_TRACECLONE
-options.
-.PP
-Another group of commands makes the ptrace-stopped tracee run.
-They have the form:
-.PP
-.in +4n
-.EX
-ptrace(cmd, pid, 0, sig);
-.EE
-.in
-.PP
-where
-.I cmd
-is
-.BR PTRACE_CONT ,
-.BR PTRACE_LISTEN ,
-.BR PTRACE_DETACH ,
-.BR PTRACE_SYSCALL ,
-.BR PTRACE_SINGLESTEP ,
-.BR PTRACE_SYSEMU ,
-or
-.BR PTRACE_SYSEMU_SINGLESTEP .
-If the tracee is in signal-delivery-stop,
-.I sig
-is the signal to be injected (if it is nonzero).
-Otherwise,
-.I sig
-may be ignored.
-(When restarting a tracee from a ptrace-stop other than signal-delivery-stop,
-recommended practice is to always pass 0 in
-.IR sig .)
-.SS Attaching and detaching
-A thread can be attached to the tracer using the call
-.PP
-.in +4n
-.EX
-ptrace(PTRACE_ATTACH, pid, 0, 0);
-.EE
-.in
-.PP
-or
-.PP
-.in +4n
-.EX
-ptrace(PTRACE_SEIZE, pid, 0, PTRACE_O_flags);
-.EE
-.in
-.PP
-.B PTRACE_ATTACH
-sends
-.B SIGSTOP
-to this thread.
-If the tracer wants this
-.B SIGSTOP
-to have no effect, it needs to suppress it.
-Note that if other signals are concurrently sent to
-this thread during attach,
-the tracer may see the tracee enter signal-delivery-stop
-with other signal(s) first!
-The usual practice is to reinject these signals until
-.B SIGSTOP
-is seen, then suppress
-.B SIGSTOP
-injection.
-The design bug here is that a ptrace attach and a concurrently delivered
-.B SIGSTOP
-may race and the concurrent
-.B SIGSTOP
-may be lost.
-.\"
-.\" FIXME Describe how to attach to a thread which is already group-stopped.
-.PP
-Since attaching sends
-.B SIGSTOP
-and the tracer usually suppresses it, this may cause a stray
-.B EINTR
-return from the currently executing system call in the tracee,
-as described in the "Signal injection and suppression" section.
-.PP
-Since Linux 3.4,
-.B PTRACE_SEIZE
-can be used instead of
-.BR PTRACE_ATTACH .
-.B PTRACE_SEIZE
-does not stop the attached process.
-If you need to stop
-it after attach (or at any other time) without sending it any signals,
-use
-.B PTRACE_INTERRUPT
-command.
-.PP
-The request
-.PP
-.in +4n
-.EX
-ptrace(PTRACE_TRACEME, 0, 0, 0);
-.EE
-.in
-.PP
-turns the calling thread into a tracee.
-The thread continues to run (doesn't enter ptrace-stop).
-A common practice is to follow the
-.B PTRACE_TRACEME
-with
-.PP
-.in +4n
-.EX
-raise(SIGSTOP);
-.EE
-.in
-.PP
-and allow the parent (which is our tracer now) to observe our
-signal-delivery-stop.
-.PP
-If the
-.BR PTRACE_O_TRACEFORK ,
-.BR PTRACE_O_TRACEVFORK ,
-or
-.B PTRACE_O_TRACECLONE
-options are in effect, then children created by, respectively,
-.BR vfork (2)
-or
-.BR clone (2)
-with the
-.B CLONE_VFORK
-flag,
-.BR fork (2)
-or
-.BR clone (2)
-with the exit signal set to
-.BR SIGCHLD ,
-and other kinds of
-.BR clone (2),
-are automatically attached to the same tracer which traced their parent.
-.B SIGSTOP
-is delivered to the children, causing them to enter
-signal-delivery-stop after they exit the system call which created them.
-.PP
-Detaching of the tracee is performed by:
-.PP
-.in +4n
-.EX
-ptrace(PTRACE_DETACH, pid, 0, sig);
-.EE
-.in
-.PP
-.B PTRACE_DETACH
-is a restarting operation;
-therefore it requires the tracee to be in ptrace-stop.
-If the tracee is in signal-delivery-stop, a signal can be injected.
-Otherwise, the
-.I sig
-parameter may be silently ignored.
-.PP
-If the tracee is running when the tracer wants to detach it,
-the usual solution is to send
-.B SIGSTOP
-(using
-.BR tgkill (2),
-to make sure it goes to the correct thread),
-wait for the tracee to stop in signal-delivery-stop for
-.B SIGSTOP
-and then detach it (suppressing
-.B SIGSTOP
-injection).
-A design bug is that this can race with concurrent
-.BR SIGSTOP s.
-Another complication is that the tracee may enter other ptrace-stops
-and needs to be restarted and waited for again, until
-.B SIGSTOP
-is seen.
-Yet another complication is to be sure that
-the tracee is not already ptrace-stopped,
-because no signal delivery happens while it is\[em]not even
-.BR SIGSTOP .
-.\" FIXME Describe how to detach from a group-stopped tracee so that it
-.\" doesn't run, but continues to wait for SIGCONT.
-.PP
-If the tracer dies, all tracees are automatically detached and restarted,
-unless they were in group-stop.
-Handling of restart from group-stop is currently buggy,
-but the "as planned" behavior is to leave tracee stopped and waiting for
-.BR SIGCONT .
-If the tracee is restarted from signal-delivery-stop,
-the pending signal is injected.
-.SS execve(2) under ptrace
-.\" clone(2) CLONE_THREAD says:
-.\" If any of the threads in a thread group performs an execve(2),
-.\" then all threads other than the thread group leader are terminated,
-.\" and the new program is executed in the thread group leader.
-.\"
-When one thread in a multithreaded process calls
-.BR execve (2),
-the kernel destroys all other threads in the process,
-.\" In Linux 3.1 sources, see fs/exec.c::de_thread()
-and resets the thread ID of the execing thread to the
-thread group ID (process ID).
-(Or, to put things another way, when a multithreaded process does an
-.BR execve (2),
-at completion of the call, it appears as though the
-.BR execve (2)
-occurred in the thread group leader, regardless of which thread did the
-.BR execve (2).)
-This resetting of the thread ID looks very confusing to tracers:
-.IP \[bu] 3
-All other threads stop in
-.B PTRACE_EVENT_EXIT
-stop, if the
-.B PTRACE_O_TRACEEXIT
-option was turned on.
-Then all other threads except the thread group leader report
-death as if they exited via
-.BR _exit (2)
-with exit code 0.
-.IP \[bu]
-The execing tracee changes its thread ID while it is in the
-.BR execve (2).
-(Remember, under ptrace, the "pid" returned from
-.BR waitpid (2),
-or fed into ptrace calls, is the tracee's thread ID.)
-That is, the tracee's thread ID is reset to be the same as its process ID,
-which is the same as the thread group leader's thread ID.
-.IP \[bu]
-Then a
-.B PTRACE_EVENT_EXEC
-stop happens, if the
-.B PTRACE_O_TRACEEXEC
-option was turned on.
-.IP \[bu]
-If the thread group leader has reported its
-.B PTRACE_EVENT_EXIT
-stop by this time,
-it appears to the tracer that
-the dead thread leader "reappears from nowhere".
-(Note: the thread group leader does not report death via
-.I WIFEXITED(status)
-until there is at least one other live thread.
-This eliminates the possibility that the tracer will see
-it dying and then reappearing.)
-If the thread group leader was still alive,
-for the tracer this may look as if thread group leader
-returns from a different system call than it entered,
-or even "returned from a system call even though
-it was not in any system call".
-If the thread group leader was not traced
-(or was traced by a different tracer), then during
-.BR execve (2)
-it will appear as if it has become a tracee of
-the tracer of the execing tracee.
-.PP
-All of the above effects are the artifacts of
-the thread ID change in the tracee.
-.PP
-The
-.B PTRACE_O_TRACEEXEC
-option is the recommended tool for dealing with this situation.
-First, it enables
-.B PTRACE_EVENT_EXEC
-stop,
-which occurs before
-.BR execve (2)
-returns.
-In this stop, the tracer can use
-.B PTRACE_GETEVENTMSG
-to retrieve the tracee's former thread ID.
-(This feature was introduced in Linux 3.0.)
-Second, the
-.B PTRACE_O_TRACEEXEC
-option disables legacy
-.B SIGTRAP
-generation on
-.BR execve (2).
-.PP
-When the tracer receives
-.B PTRACE_EVENT_EXEC
-stop notification,
-it is guaranteed that except this tracee and the thread group leader,
-no other threads from the process are alive.
-.PP
-On receiving the
-.B PTRACE_EVENT_EXEC
-stop notification,
-the tracer should clean up all its internal
-data structures describing the threads of this process,
-and retain only one data structure\[em]one which
-describes the single still running tracee, with
-.PP
-.in +4n
-.EX
-thread ID == thread group ID == process ID.
-.EE
-.in
-.PP
-Example: two threads call
-.BR execve (2)
-at the same time:
-.PP
-.nf
-*** we get syscall-enter-stop in thread 1: **
-PID1 execve("/bin/foo", "foo" <unfinished ...>
-*** we issue PTRACE_SYSCALL for thread 1 **
-*** we get syscall-enter-stop in thread 2: **
-PID2 execve("/bin/bar", "bar" <unfinished ...>
-*** we issue PTRACE_SYSCALL for thread 2 **
-*** we get PTRACE_EVENT_EXEC for PID0, we issue PTRACE_SYSCALL **
-*** we get syscall-exit-stop for PID0: **
-PID0 <... execve resumed> ) = 0
-.fi
-.PP
-If the
-.B PTRACE_O_TRACEEXEC
-option is
-.I not
-in effect for the execing tracee,
-and if the tracee was
-.BR PTRACE_ATTACH ed
-rather that
-.BR PTRACE_SEIZE d,
-the kernel delivers an extra
-.B SIGTRAP
-to the tracee after
-.BR execve (2)
-returns.
-This is an ordinary signal (similar to one which can be
-generated by
-.IR "kill \-TRAP" ),
-not a special kind of ptrace-stop.
-Employing
-.B PTRACE_GETSIGINFO
-for this signal returns
-.I si_code
-set to 0
-.RI ( SI_USER ).
-This signal may be blocked by signal mask,
-and thus may be delivered (much) later.
-.PP
-Usually, the tracer (for example,
-.BR strace (1))
-would not want to show this extra post-execve
-.B SIGTRAP
-signal to the user, and would suppress its delivery to the tracee (if
-.B SIGTRAP
-is set to
-.BR SIG_DFL ,
-it is a killing signal).
-However, determining
-.I which
-.B SIGTRAP
-to suppress is not easy.
-Setting the
-.B PTRACE_O_TRACEEXEC
-option or using
-.B PTRACE_SEIZE
-and thus suppressing this extra
-.B SIGTRAP
-is the recommended approach.
-.SS Real parent
-The ptrace API (ab)uses the standard UNIX parent/child signaling over
-.BR waitpid (2).
-This used to cause the real parent of the process to stop receiving
-several kinds of
-.BR waitpid (2)
-notifications when the child process is traced by some other process.
-.PP
-Many of these bugs have been fixed, but as of Linux 2.6.38 several still
-exist; see BUGS below.
-.PP
-As of Linux 2.6.38, the following is believed to work correctly:
-.IP \[bu] 3
-exit/death by signal is reported first to the tracer, then,
-when the tracer consumes the
-.BR waitpid (2)
-result, to the real parent (to the real parent only when the
-whole multithreaded process exits).
-If the tracer and the real parent are the same process,
-the report is sent only once.
-.SH RETURN VALUE
-On success, the
-.B PTRACE_PEEK*
-requests return the requested data (but see NOTES),
-the
-.B PTRACE_SECCOMP_GET_FILTER
-request returns the number of instructions in the BPF program,
-the
-.B PTRACE_GET_SYSCALL_INFO
-request returns the number of bytes available to be written by the kernel,
-and other requests return zero.
-.PP
-On error, all requests return \-1, and
-.I errno
-is set to indicate the error.
-Since the value returned by a successful
-.B PTRACE_PEEK*
-request may be \-1, the caller must clear
-.I errno
-before the call, and then check it afterward
-to determine whether or not an error occurred.
-.SH ERRORS
-.TP
-.B EBUSY
-(i386 only) There was an error with allocating or freeing a debug register.
-.TP
-.B EFAULT
-There was an attempt to read from or write to an invalid area in
-the tracer's or the tracee's memory,
-probably because the area wasn't mapped or accessible.
-Unfortunately, under Linux, different variations of this fault
-will return
-.B EIO
-or
-.B EFAULT
-more or less arbitrarily.
-.TP
-.B EINVAL
-An attempt was made to set an invalid option.
-.TP
-.B EIO
-.I request
-is invalid, or an attempt was made to read from or
-write to an invalid area in the tracer's or the tracee's memory,
-or there was a word-alignment violation,
-or an invalid signal was specified during a restart request.
-.TP
-.B EPERM
-The specified process cannot be traced.
-This could be because the
-tracer has insufficient privileges (the required capability is
-.BR CAP_SYS_PTRACE );
-unprivileged processes cannot trace processes that they
-cannot send signals to or those running
-set-user-ID/set-group-ID programs, for obvious reasons.
-Alternatively, the process may already be being traced,
-or (before Linux 2.6.26) be
-.BR init (1)
-(PID 1).
-.TP
-.B ESRCH
-The specified process does not exist, or is not currently being traced
-by the caller, or is not stopped
-(for requests that require a stopped tracee).
-.SH STANDARDS
-None.
-.SH HISTORY
-SVr4, 4.3BSD.
-.PP
-Before Linux 2.6.26,
-.\" See commit 00cd5c37afd5f431ac186dd131705048c0a11fdb
-.BR init (1),
-the process with PID 1, may not be traced.
-.SH NOTES
-Although arguments to
-.BR ptrace ()
-are interpreted according to the prototype given,
-glibc currently declares
-.BR ptrace ()
-as a variadic function with only the
-.I request
-argument fixed.
-It is recommended to always supply four arguments,
-even if the requested operation does not use them,
-setting unused/ignored arguments to
-.I 0L
-or
-.IR "(void\ *)\ 0".
-.PP
-A tracees parent continues to be the tracer even if that tracer calls
-.BR execve (2).
-.PP
-The layout of the contents of memory and the USER area are
-quite operating-system- and architecture-specific.
-The offset supplied, and the data returned,
-might not entirely match with the definition of
-.IR "struct user" .
-.\" See http://lkml.org/lkml/2008/5/8/375
-.PP
-The size of a "word" is determined by the operating-system variant
-(e.g., for 32-bit Linux it is 32 bits).
-.PP
-This page documents the way the
-.BR ptrace ()
-call works currently in Linux.
-Its behavior differs significantly on other flavors of UNIX.
-In any case, use of
-.BR ptrace ()
-is highly specific to the operating system and architecture.
-.\"
-.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.SS Ptrace access mode checking
-Various parts of the kernel-user-space API (not just
-.BR ptrace ()
-operations), require so-called "ptrace access mode" checks,
-whose outcome determines whether an operation is permitted
-(or, in a few cases, causes a "read" operation to return sanitized data).
-These checks are performed in cases where one process can
-inspect sensitive information about,
-or in some cases modify the state of, another process.
-The checks are based on factors such as the credentials and capabilities
-of the two processes,
-whether or not the "target" process is dumpable,
-and the results of checks performed by any enabled Linux Security Module
-(LSM)\[em]for example, SELinux, Yama, or Smack\[em]and by the commoncap LSM
-(which is always invoked).
-.PP
-Prior to Linux 2.6.27, all access checks were of a single type.
-Since Linux 2.6.27,
-.\" commit 006ebb40d3d65338bd74abb03b945f8d60e362bd
-two access mode levels are distinguished:
-.TP
-.B PTRACE_MODE_READ
-For "read" operations or other operations that are less dangerous,
-such as:
-.BR get_robust_list (2);
-.BR kcmp (2);
-reading
-.IR /proc/ pid /auxv ,
-.IR /proc/ pid /environ ,
-or
-.IR /proc/ pid /stat ;
-or
-.BR readlink (2)
-of a
-.IR /proc/ pid /ns/*
-file.
-.TP
-.B PTRACE_MODE_ATTACH
-For "write" operations, or other operations that are more dangerous,
-such as: ptrace attaching
-.RB ( PTRACE_ATTACH )
-to another process
-or calling
-.BR process_vm_writev (2).
-.RB ( PTRACE_MODE_ATTACH
-was effectively the default before Linux 2.6.27.)
-.\"
-.\" Regarding the above description of the distinction between
-.\" PTRACE_MODE_READ and PTRACE_MODE_ATTACH, Stephen Smalley notes:
-.\"
-.\" That was the intent when the distinction was introduced, but it doesn't
-.\" appear to have been properly maintained, e.g. there is now a common
-.\" helper lock_trace() that is used for
-.\" /proc/pid/{stack,syscall,personality} but checks PTRACE_MODE_ATTACH, and
-.\" PTRACE_MODE_ATTACH is also used in timerslack_ns_write/show(). Likely
-.\" should review and make them consistent. There was also some debate
-.\" about proper handling of /proc/pid/fd. Arguably that one might belong
-.\" back in the _ATTACH camp.
-.\"
-.PP
-Since Linux 4.5,
-.\" commit caaee6234d05a58c5b4d05e7bf766131b810a657
-the above access mode checks are combined (ORed) with
-one of the following modifiers:
-.TP
-.B PTRACE_MODE_FSCREDS
-Use the caller's filesystem UID and GID (see
-.BR credentials (7))
-or effective capabilities for LSM checks.
-.TP
-.B PTRACE_MODE_REALCREDS
-Use the caller's real UID and GID or permitted capabilities for LSM checks.
-This was effectively the default before Linux 4.5.
-.PP
-Because combining one of the credential modifiers with one of
-the aforementioned access modes is typical,
-some macros are defined in the kernel sources for the combinations:
-.TP
-.B PTRACE_MODE_READ_FSCREDS
-Defined as
-.BR "PTRACE_MODE_READ | PTRACE_MODE_FSCREDS" .
-.TP
-.B PTRACE_MODE_READ_REALCREDS
-Defined as
-.BR "PTRACE_MODE_READ | PTRACE_MODE_REALCREDS" .
-.TP
-.B PTRACE_MODE_ATTACH_FSCREDS
-Defined as
-.BR "PTRACE_MODE_ATTACH | PTRACE_MODE_FSCREDS" .
-.TP
-.B PTRACE_MODE_ATTACH_REALCREDS
-Defined as
-.BR "PTRACE_MODE_ATTACH | PTRACE_MODE_REALCREDS" .
-.PP
-One further modifier can be ORed with the access mode:
-.TP
-.BR PTRACE_MODE_NOAUDIT " (since Linux 3.3)"
-.\" commit 69f594a38967f4540ce7a29b3fd214e68a8330bd
-.\" Just for /proc/pid/stat
-Don't audit this access mode check.
-This modifier is employed for ptrace access mode checks
-(such as checks when reading
-.IR /proc/ pid /stat )
-that merely cause the output to be filtered or sanitized,
-rather than causing an error to be returned to the caller.
-In these cases, accessing the file is not a security violation and
-there is no reason to generate a security audit record.
-This modifier suppresses the generation of
-such an audit record for the particular access check.
-.PP
-Note that all of the
-.B PTRACE_MODE_*
-constants described in this subsection are kernel-internal,
-and not visible to user space.
-The constant names are mentioned here in order to label the various kinds of
-ptrace access mode checks that are performed for various system calls
-and accesses to various pseudofiles (e.g., under
-.IR /proc ).
-These names are used in other manual pages to provide a simple
-shorthand for labeling the different kernel checks.
-.PP
-The algorithm employed for ptrace access mode checking determines whether
-the calling process is allowed to perform the corresponding action
-on the target process.
-(In the case of opening
-.IR /proc/ pid
-files, the "calling process" is the one opening the file,
-and the process with the corresponding PID is the "target process".)
-The algorithm is as follows:
-.IP (1) 5
-If the calling thread and the target thread are in the same
-thread group, access is always allowed.
-.IP (2)
-If the access mode specifies
-.BR PTRACE_MODE_FSCREDS ,
-then, for the check in the next step,
-employ the caller's filesystem UID and GID.
-(As noted in
-.BR credentials (7),
-the filesystem UID and GID almost always have the same values
-as the corresponding effective IDs.)
-.IP
-Otherwise, the access mode specifies
-.BR PTRACE_MODE_REALCREDS ,
-so use the caller's real UID and GID for the checks in the next step.
-(Most APIs that check the caller's UID and GID use the effective IDs.
-For historical reasons, the
-.B PTRACE_MODE_REALCREDS
-check uses the real IDs instead.)
-.IP (3)
-Deny access if
-.I neither
-of the following is true:
-.RS
-.IP \[bu] 3
-The real, effective, and saved-set user IDs of the target
-match the caller's user ID,
-.I and
-the real, effective, and saved-set group IDs of the target
-match the caller's group ID.
-.IP \[bu]
-The caller has the
-.B CAP_SYS_PTRACE
-capability in the user namespace of the target.
-.RE
-.IP (4)
-Deny access if the target process "dumpable" attribute has a value other than 1
-.RB ( SUID_DUMP_USER ;
-see the discussion of
-.B PR_SET_DUMPABLE
-in
-.BR prctl (2)),
-and the caller does not have the
-.B CAP_SYS_PTRACE
-capability in the user namespace of the target process.
-.IP (5)
-The kernel LSM
-.IR security_ptrace_access_check ()
-interface is invoked to see if ptrace access is permitted.
-The results depend on the LSM(s).
-The implementation of this interface in the commoncap LSM performs
-the following steps:
-.\" (in cap_ptrace_access_check()):
-.RS
-.IP (5.1) 7
-If the access mode includes
-.BR PTRACE_MODE_FSCREDS ,
-then use the caller's
-.I effective
-capability set
-in the following check;
-otherwise (the access mode specifies
-.BR PTRACE_MODE_REALCREDS ,
-so) use the caller's
-.I permitted
-capability set.
-.IP (5.2)
-Deny access if
-.I neither
-of the following is true:
-.RS
-.IP \[bu] 3
-The caller and the target process are in the same user namespace,
-and the caller's capabilities are a superset of the target process's
-.I permitted
-capabilities.
-.IP \[bu]
-The caller has the
-.B CAP_SYS_PTRACE
-capability in the target process's user namespace.
-.RE
-.IP
-Note that the commoncap LSM does not distinguish between
-.B PTRACE_MODE_READ
-and
-.BR PTRACE_MODE_ATTACH .
-.RE
-.IP (6)
-If access has not been denied by any of the preceding steps,
-then access is allowed.
-.\"
-.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.SS /proc/sys/kernel/yama/ptrace_scope
-On systems with the Yama Linux Security Module (LSM) installed
-(i.e., the kernel was configured with
-.BR CONFIG_SECURITY_YAMA ),
-the
-.I /proc/sys/kernel/yama/ptrace_scope
-file (available since Linux 3.4)
-.\" commit 2d514487faf188938a4ee4fb3464eeecfbdcf8eb
-can be used to restrict the ability to trace a process with
-.BR ptrace ()
-(and thus also the ability to use tools such as
-.BR strace (1)
-and
-.BR gdb (1)).
-The goal of such restrictions is to prevent attack escalation whereby
-a compromised process can ptrace-attach to other sensitive processes
-(e.g., a GPG agent or an SSH session) owned by the user in order
-to gain additional credentials that may exist in memory
-and thus expand the scope of the attack.
-.PP
-More precisely, the Yama LSM limits two types of operations:
-.IP \[bu] 3
-Any operation that performs a ptrace access mode
-.B PTRACE_MODE_ATTACH
-check\[em]for example,
-.BR ptrace ()
-.BR PTRACE_ATTACH .
-(See the "Ptrace access mode checking" discussion above.)
-.IP \[bu]
-.BR ptrace ()
-.BR PTRACE_TRACEME .
-.PP
-A process that has the
-.B CAP_SYS_PTRACE
-capability can update the
-.I /proc/sys/kernel/yama/ptrace_scope
-file with one of the following values:
-.TP
-0 ("classic ptrace permissions")
-No additional restrictions on operations that perform
-.B PTRACE_MODE_ATTACH
-checks (beyond those imposed by the commoncap and other LSMs).
-.IP
-The use of
-.B PTRACE_TRACEME
-is unchanged.
-.TP
-1 ("restricted ptrace") [default value]
-When performing an operation that requires a
-.B PTRACE_MODE_ATTACH
-check, the calling process must either have the
-.B CAP_SYS_PTRACE
-capability in the user namespace of the target process or
-it must have a predefined relationship with the target process.
-By default,
-the predefined relationship is that the target process
-must be a descendant of the caller.
-.IP
-A target process can employ the
-.BR prctl (2)
-.B PR_SET_PTRACER
-operation to declare an additional PID that is allowed to perform
-.B PTRACE_MODE_ATTACH
-operations on the target.
-See the kernel source file
-.I Documentation/admin\-guide/LSM/Yama.rst
-.\" commit 90bb766440f2147486a2acc3e793d7b8348b0c22
-(or
-.I Documentation/security/Yama.txt
-before Linux 4.13)
-for further details.
-.IP
-The use of
-.B PTRACE_TRACEME
-is unchanged.
-.TP
-2 ("admin-only attach")
-Only processes with the
-.B CAP_SYS_PTRACE
-capability in the user namespace of the target process may perform
-.B PTRACE_MODE_ATTACH
-operations or trace children that employ
-.BR PTRACE_TRACEME .
-.TP
-3 ("no attach")
-No process may perform
-.B PTRACE_MODE_ATTACH
-operations or trace children that employ
-.BR PTRACE_TRACEME .
-.IP
-Once this value has been written to the file, it cannot be changed.
-.PP
-With respect to values 1 and 2,
-note that creating a new user namespace effectively removes the
-protection offered by Yama.
-This is because a process in the parent user namespace whose effective
-UID matches the UID of the creator of a child namespace
-has all capabilities (including
-.BR CAP_SYS_PTRACE )
-when performing operations within the child user namespace
-(and further-removed descendants of that namespace).
-Consequently, when a process tries to use user namespaces to sandbox itself,
-it inadvertently weakens the protections offered by the Yama LSM.
-.\"
-.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.\"
-.SS C library/kernel differences
-At the system call level, the
-.BR PTRACE_PEEKTEXT ,
-.BR PTRACE_PEEKDATA ,
-and
-.B PTRACE_PEEKUSER
-requests have a different API: they store the result
-at the address specified by the
-.I data
-parameter, and the return value is the error flag.
-The glibc wrapper function provides the API given in DESCRIPTION above,
-with the result being returned via the function return value.
-.SH BUGS
-On hosts with Linux 2.6 kernel headers,
-.B PTRACE_SETOPTIONS
-is declared with a different value than the one for Linux 2.4.
-This leads to applications compiled with Linux 2.6 kernel
-headers failing when run on Linux 2.4.
-This can be worked around by redefining
-.B PTRACE_SETOPTIONS
-to
-.BR PTRACE_OLDSETOPTIONS ,
-if that is defined.
-.PP
-Group-stop notifications are sent to the tracer, but not to real parent.
-Last confirmed on 2.6.38.6.
-.PP
-If a thread group leader is traced and exits by calling
-.BR _exit (2),
-.\" Note from Denys Vlasenko:
-.\" Here "exits" means any kind of death - _exit, exit_group,
-.\" signal death. Signal death and exit_group cases are trivial,
-.\" though: since signal death and exit_group kill all other threads
-.\" too, "until all other threads exit" thing happens rather soon
-.\" in these cases. Therefore, only _exit presents observably
-.\" puzzling behavior to ptrace users: thread leader _exit's,
-.\" but WIFEXITED isn't reported! We are trying to explain here
-.\" why it is so.
-a
-.B PTRACE_EVENT_EXIT
-stop will happen for it (if requested), but the subsequent
-.B WIFEXITED
-notification will not be delivered until all other threads exit.
-As explained above, if one of other threads calls
-.BR execve (2),
-the death of the thread group leader will
-.I never
-be reported.
-If the execed thread is not traced by this tracer,
-the tracer will never know that
-.BR execve (2)
-happened.
-One possible workaround is to
-.B PTRACE_DETACH
-the thread group leader instead of restarting it in this case.
-Last confirmed on 2.6.38.6.
-.\" FIXME . need to test/verify this scenario
-.PP
-A
-.B SIGKILL
-signal may still cause a
-.B PTRACE_EVENT_EXIT
-stop before actual signal death.
-This may be changed in the future;
-.B SIGKILL
-is meant to always immediately kill tasks even under ptrace.
-Last confirmed on Linux 3.13.
-.PP
-Some system calls return with
-.B EINTR
-if a signal was sent to a tracee, but delivery was suppressed by the tracer.
-(This is very typical operation: it is usually
-done by debuggers on every attach, in order to not introduce
-a bogus
-.BR SIGSTOP ).
-As of Linux 3.2.9, the following system calls are affected
-(this list is likely incomplete):
-.BR epoll_wait (2),
-and
-.BR read (2)
-from an
-.BR inotify (7)
-file descriptor.
-The usual symptom of this bug is that when you attach to
-a quiescent process with the command
-.PP
-.in +4n
-.EX
-strace \-p <process\-ID>
-.EE
-.in
-.PP
-then, instead of the usual
-and expected one-line output such as
-.PP
-.in +4n
-.EX
-restart_syscall(<... resuming interrupted call ...>_
-.EE
-.in
-.PP
-or
-.PP
-.in +4n
-.EX
-select(6, [5], NULL, [5], NULL_
-.EE
-.in
-.PP
-('_' denotes the cursor position), you observe more than one line.
-For example:
-.PP
-.in +4n
-.EX
- clock_gettime(CLOCK_MONOTONIC, {15370, 690928118}) = 0
- epoll_wait(4,_
-.EE
-.in
-.PP
-What is not visible here is that the process was blocked in
-.BR epoll_wait (2)
-before
-.BR strace (1)
-has attached to it.
-Attaching caused
-.BR epoll_wait (2)
-to return to user space with the error
-.BR EINTR .
-In this particular case, the program reacted to
-.B EINTR
-by checking the current time, and then executing
-.BR epoll_wait (2)
-again.
-(Programs which do not expect such "stray"
-.B EINTR
-errors may behave in an unintended way upon an
-.BR strace (1)
-attach.)
-.PP
-Contrary to the normal rules, the glibc wrapper for
-.BR ptrace ()
-can set
-.I errno
-to zero.
-.SH SEE ALSO
-.BR gdb (1),
-.BR ltrace (1),
-.BR strace (1),
-.BR clone (2),
-.BR execve (2),
-.BR fork (2),
-.BR gettid (2),
-.BR prctl (2),
-.BR seccomp (2),
-.BR sigaction (2),
-.BR tgkill (2),
-.BR vfork (2),
-.BR waitpid (2),
-.BR exec (3),
-.BR capabilities (7),
-.BR signal (7)
diff --git a/man2/putmsg.2 b/man2/putmsg.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/putmsg.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/putpmsg.2 b/man2/putpmsg.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/putpmsg.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/pwrite.2 b/man2/pwrite.2
deleted file mode 100644
index 87eacb238..000000000
--- a/man2/pwrite.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/pread.2
diff --git a/man2/pwrite64.2 b/man2/pwrite64.2
deleted file mode 100644
index 9290e0a58..000000000
--- a/man2/pwrite64.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/pwrite.2
diff --git a/man2/pwritev.2 b/man2/pwritev.2
deleted file mode 100644
index 54e3384ef..000000000
--- a/man2/pwritev.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/readv.2
diff --git a/man2/pwritev2.2 b/man2/pwritev2.2
deleted file mode 100644
index 54e3384ef..000000000
--- a/man2/pwritev2.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/readv.2
diff --git a/man2/query_module.2 b/man2/query_module.2
deleted file mode 100644
index 9cc7349db..000000000
--- a/man2/query_module.2
+++ /dev/null
@@ -1,194 +0,0 @@
-.\" Copyright (C) 1996 Free Software Foundation, Inc.
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" 2006-02-09, some reformatting by Luc Van Oostenryck; some
-.\" reformatting and rewordings by mtk
-.\"
-.TH query_module 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-query_module \- query the kernel for various bits pertaining to modules
-.SH SYNOPSIS
-.nf
-.B #include <linux/module.h>
-.PP
-.BI "[[deprecated]] int query_module(const char *" name ", int " which ,
-.BI " void " buf [. bufsize "], \
-size_t " bufsize ,
-.BI " size_t *" ret );
-.fi
-.SH DESCRIPTION
-.IR Note :
-This system call is present only before Linux 2.6.
-.PP
-.BR query_module ()
-requests information from the kernel about loadable modules.
-The returned information is placed in the buffer pointed to by
-.IR buf .
-The caller must specify the size of
-.I buf
-in
-.IR bufsize .
-The precise nature and format of the returned information
-depend on the operation specified by
-.IR which .
-Some operations require
-.I name
-to identify a currently loaded module, some allow
-.I name
-to be NULL, indicating the kernel proper.
-.PP
-The following values can be specified for
-.IR which :
-.TP
-.B 0
-Returns success, if the kernel supports
-.BR query_module ().
-Used to probe for availability of the system call.
-.TP
-.B QM_MODULES
-Returns the names of all loaded modules.
-The returned buffer consists of a sequence of null-terminated strings;
-.I ret
-is set to the number of
-modules.
-.\" ret is set on ENOSPC
-.TP
-.B QM_DEPS
-Returns the names of all modules used by the indicated module.
-The returned buffer consists of a sequence of null-terminated strings;
-.I ret
-is set to the number of modules.
-.\" ret is set on ENOSPC
-.TP
-.B QM_REFS
-Returns the names of all modules using the indicated module.
-This is the inverse of
-.BR QM_DEPS .
-The returned buffer consists of a sequence of null-terminated strings;
-.I ret
-is set to the number of modules.
-.\" ret is set on ENOSPC
-.TP
-.B QM_SYMBOLS
-Returns the symbols and values exported by the kernel or the indicated
-module.
-The returned buffer is an array of structures of the following form
-.\" ret is set on ENOSPC
-.IP
-.in +4n
-.EX
-struct module_symbol {
- unsigned long value;
- unsigned long name;
-};
-.EE
-.in
-.IP
-followed by null-terminated strings.
-The value of
-.I name
-is the character offset of the string relative to the start of
-.IR buf ;
-.I ret
-is set to the number of symbols.
-.TP
-.B QM_INFO
-Returns miscellaneous information about the indicated module.
-The output buffer format is:
-.IP
-.in +4n
-.EX
-struct module_info {
- unsigned long address;
- unsigned long size;
- unsigned long flags;
-};
-.EE
-.in
-.IP
-where
-.I address
-is the kernel address at which the module resides,
-.I size
-is the size of the module in bytes, and
-.I flags
-is a mask of
-.BR MOD_RUNNING ,
-.BR MOD_AUTOCLEAN ,
-and so on, that indicates the current status of the module
-(see the Linux kernel source file
-.IR include/linux/module.h ).
-.I ret
-is set to the size of the
-.I module_info
-structure.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-At least one of
-.IR name ,
-.IR buf ,
-or
-.I ret
-was outside the program's accessible address space.
-.TP
-.B EINVAL
-Invalid
-.IR which ;
-or
-.I name
-is NULL (indicating "the kernel"),
-but this is not permitted with the specified value of
-.IR which .
-.\" Not permitted with QM_DEPS, QM_REFS, or QM_INFO.
-.TP
-.B ENOENT
-No module by that
-.I name
-exists.
-.TP
-.B ENOSPC
-The buffer size provided was too small.
-.I ret
-is set to the minimum size needed.
-.TP
-.B ENOSYS
-.BR query_module ()
-is not supported in this version of the kernel
-(e.g., Linux 2.6 or later).
-.SH STANDARDS
-Linux.
-.SH VERSIONS
-Removed in Linux 2.6.
-.\" Removed in Linux 2.5.48
-.PP
-Some of the information that was formerly available via
-.BR query_module ()
-can be obtained from
-.IR /proc/modules ,
-.IR /proc/kallsyms ,
-and the files under the directory
-.IR /sys/module .
-.PP
-The
-.BR query_module ()
-system call is not supported by glibc.
-No declaration is provided in glibc headers, but,
-through a quirk of history, glibc does export an ABI for this system call.
-Therefore, in order to employ this system call,
-it is sufficient to manually declare the interface in your code;
-alternatively, you can invoke the system call using
-.BR syscall (2).
-.SH SEE ALSO
-.BR create_module (2),
-.BR delete_module (2),
-.BR get_kernel_syms (2),
-.BR init_module (2),
-.BR lsmod (8),
-.BR modinfo (8)
diff --git a/man2/quotactl.2 b/man2/quotactl.2
deleted file mode 100644
index 5bf9ae71e..000000000
--- a/man2/quotactl.2
+++ /dev/null
@@ -1,806 +0,0 @@
-.\" Copyright (c) 2010, Jan Kara
-.\" A few pieces copyright (c) 1996 Andries Brouwer (aeb@cwi.nl)
-.\" and copyright 2010 (c) Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH quotactl 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-quotactl \- manipulate disk quotas
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/quota.h>
-.BR "#include <xfs/xqm.h>" " /* Definition of " Q_X* " and " XFS_QUOTA_* \
-" constants"
-.RB " (or " <linux/dqblk_xfs.h> "; see NOTES) */"
-.PP
-.BI "int quotactl(int " cmd ", const char *_Nullable " special ", int " id ,
-.BI " caddr_t " addr );
-.fi
-.SH DESCRIPTION
-The quota system can be used to set per-user, per-group, and per-project limits
-on the amount of disk space used on a filesystem.
-For each user and/or group,
-a soft limit and a hard limit can be set for each filesystem.
-The hard limit can't be exceeded.
-The soft limit can be exceeded, but warnings will ensue.
-Moreover, the user can't exceed the soft limit for more than grace period
-duration (one week by default) at a time;
-after this, the soft limit counts as a hard limit.
-.PP
-The
-.BR quotactl ()
-call manipulates disk quotas.
-The
-.I cmd
-argument indicates a command to be applied to the user or
-group ID specified in
-.IR id .
-To initialize the
-.I cmd
-argument, use the
-.I QCMD(subcmd, type)
-macro.
-The
-.I type
-value is either
-.BR USRQUOTA ,
-for user quotas,
-.BR GRPQUOTA ,
-for group quotas, or (since Linux 4.1)
-.\" 847aac644e92e5624f2c153bab409bf713d5ff9a
-.BR PRJQUOTA ,
-for project quotas.
-The
-.I subcmd
-value is described below.
-.PP
-The
-.I special
-argument is a pointer to a null-terminated string containing the pathname
-of the (mounted) block special device for the filesystem being manipulated.
-.PP
-The
-.I addr
-argument is the address of an optional, command-specific, data structure
-that is copied in or out of the system.
-The interpretation of
-.I addr
-is given with each operation below.
-.PP
-The
-.I subcmd
-value is one of the following operations:
-.TP
-.B Q_QUOTAON
-Turn on quotas for a filesystem.
-The
-.I id
-argument is the identification number of the quota format to be used.
-Currently, there are three supported quota formats:
-.RS
-.TP 13
-.B QFMT_VFS_OLD
-The original quota format.
-.TP
-.B QFMT_VFS_V0
-The standard VFS v0 quota format, which can handle 32-bit UIDs and GIDs
-and quota limits up to 2\[ha]42 bytes and 2\[ha]32 inodes.
-.TP
-.B QFMT_VFS_V1
-A quota format that can handle 32-bit UIDs and GIDs
-and quota limits of 2\[ha]63 \- 1 bytes and 2\[ha]63 \- 1 inodes.
-.RE
-.IP
-The
-.I addr
-argument points to the pathname of a file containing the quotas for
-the filesystem.
-The quota file must exist; it is normally created with the
-.BR quotacheck (8)
-program
-.IP
-Quota information can be also stored in hidden system inodes
-for ext4, XFS, and other filesystems if the filesystem is configured so.
-In this case, there are no visible quota files and there is no need to
-use
-.BR quotacheck (8).
-Quota information is always kept consistent by the filesystem and the
-.B Q_QUOTAON
-operation serves only to enable enforcement of quota limits.
-The presence of hidden
-system inodes with quota information is indicated by the
-.B DQF_SYS_FILE
-flag in the
-.I dqi_flags
-field returned by the
-.B Q_GETINFO
-operation.
-.IP
-This operation requires privilege
-.RB ( CAP_SYS_ADMIN ).
-.TP
-.B Q_QUOTAOFF
-Turn off quotas for a filesystem.
-The
-.I addr
-and
-.I id
-arguments are ignored.
-This operation requires privilege
-.RB ( CAP_SYS_ADMIN ).
-.TP
-.B Q_GETQUOTA
-Get disk quota limits and current usage for user or group
-.IR id .
-The
-.I addr
-argument is a pointer to a
-.I dqblk
-structure defined in
-.I <sys/quota.h>
-as follows:
-.IP
-.in +4n
-.EX
-/* uint64_t is an unsigned 64\-bit integer;
- uint32_t is an unsigned 32\-bit integer */
-\&
-struct dqblk { /* Definition since Linux 2.4.22 */
- uint64_t dqb_bhardlimit; /* Absolute limit on disk
- quota blocks alloc */
- uint64_t dqb_bsoftlimit; /* Preferred limit on
- disk quota blocks */
- uint64_t dqb_curspace; /* Current occupied space
- (in bytes) */
- uint64_t dqb_ihardlimit; /* Maximum number of
- allocated inodes */
- uint64_t dqb_isoftlimit; /* Preferred inode limit */
- uint64_t dqb_curinodes; /* Current number of
- allocated inodes */
- uint64_t dqb_btime; /* Time limit for excessive
- disk use */
- uint64_t dqb_itime; /* Time limit for excessive
- files */
- uint32_t dqb_valid; /* Bit mask of QIF_*
- constants */
-};
-\&
-/* Flags in dqb_valid that indicate which fields in
- dqblk structure are valid. */
-\&
-#define QIF_BLIMITS 1
-#define QIF_SPACE 2
-#define QIF_ILIMITS 4
-#define QIF_INODES 8
-#define QIF_BTIME 16
-#define QIF_ITIME 32
-#define QIF_LIMITS (QIF_BLIMITS | QIF_ILIMITS)
-#define QIF_USAGE (QIF_SPACE | QIF_INODES)
-#define QIF_TIMES (QIF_BTIME | QIF_ITIME)
-#define QIF_ALL (QIF_LIMITS | QIF_USAGE | QIF_TIMES)
-.EE
-.in
-.IP
-The
-.I dqb_valid
-field is a bit mask that is set to indicate the entries in the
-.I dqblk
-structure that are valid.
-Currently, the kernel fills in all entries of the
-.I dqblk
-structure and marks them as valid in the
-.I dqb_valid
-field.
-Unprivileged users may retrieve only their own quotas;
-a privileged user
-.RB ( CAP_SYS_ADMIN )
-can retrieve the quotas of any user.
-.TP
-.BR Q_GETNEXTQUOTA " (since Linux 4.6)"
-.\" commit 926132c0257a5a8d149a6a395cc3405e55420566
-This operation is the same as
-.BR Q_GETQUOTA ,
-but it returns quota information for the next ID greater than or equal to
-.I id
-that has a quota set.
-.IP
-The
-.I addr
-argument is a pointer to a
-.I nextdqblk
-structure whose fields are as for the
-.IR dqblk ,
-except for the addition of a
-.I dqb_id
-field that is used to return the ID for which
-quota information is being returned:
-.IP
-.in +4n
-.EX
-struct nextdqblk {
- uint64_t dqb_bhardlimit;
- uint64_t dqb_bsoftlimit;
- uint64_t dqb_curspace;
- uint64_t dqb_ihardlimit;
- uint64_t dqb_isoftlimit;
- uint64_t dqb_curinodes;
- uint64_t dqb_btime;
- uint64_t dqb_itime;
- uint32_t dqb_valid;
- uint32_t dqb_id;
-};
-.EE
-.in
-.TP
-.B Q_SETQUOTA
-Set quota information for user or group
-.IR id ,
-using the information supplied in the
-.I dqblk
-structure pointed to by
-.IR addr .
-The
-.I dqb_valid
-field of the
-.I dqblk
-structure indicates which entries in the structure have been set by the caller.
-This operation supersedes the
-.B Q_SETQLIM
-and
-.B Q_SETUSE
-operations in the previous quota interfaces.
-This operation requires privilege
-.RB ( CAP_SYS_ADMIN ).
-.TP
-.BR Q_GETINFO " (since Linux 2.4.22)"
-Get information (like grace times) about quotafile.
-The
-.I addr
-argument should be a pointer to a
-.I dqinfo
-structure.
-This structure is defined in
-.I <sys/quota.h>
-as follows:
-.IP
-.in +4n
-.EX
-/* uint64_t is an unsigned 64\-bit integer;
- uint32_t is an unsigned 32\-bit integer */
-\&
-struct dqinfo { /* Defined since Linux 2.4.22 */
- uint64_t dqi_bgrace; /* Time before block soft limit
- becomes hard limit */
- uint64_t dqi_igrace; /* Time before inode soft limit
- becomes hard limit */
- uint32_t dqi_flags; /* Flags for quotafile
- (DQF_*) */
- uint32_t dqi_valid;
-};
-\&
-/* Bits for dqi_flags */
-\&
-/* Quota format QFMT_VFS_OLD */
-\&
-#define DQF_ROOT_SQUASH (1 << 0) /* Root squash enabled */
- /* Before Linux v4.0, this had been defined
- privately as V1_DQF_RSQUASH */
-\&
-/* Quota format QFMT_VFS_V0 / QFMT_VFS_V1 */
-\&
-#define DQF_SYS_FILE (1 << 16) /* Quota stored in
- a system file */
-\&
-/* Flags in dqi_valid that indicate which fields in
- dqinfo structure are valid. */
-\&
-#define IIF_BGRACE 1
-#define IIF_IGRACE 2
-#define IIF_FLAGS 4
-#define IIF_ALL (IIF_BGRACE | IIF_IGRACE | IIF_FLAGS)
-.EE
-.in
-.IP
-The
-.I dqi_valid
-field in the
-.I dqinfo
-structure indicates the entries in the structure that are valid.
-Currently, the kernel fills in all entries of the
-.I dqinfo
-structure and marks them all as valid in the
-.I dqi_valid
-field.
-The
-.I id
-argument is ignored.
-.TP
-.BR Q_SETINFO " (since Linux 2.4.22)"
-Set information about quotafile.
-The
-.I addr
-argument should be a pointer to a
-.I dqinfo
-structure.
-The
-.I dqi_valid
-field of the
-.I dqinfo
-structure indicates the entries in the structure
-that have been set by the caller.
-This operation supersedes the
-.B Q_SETGRACE
-and
-.B Q_SETFLAGS
-operations in the previous quota interfaces.
-The
-.I id
-argument is ignored.
-This operation requires privilege
-.RB ( CAP_SYS_ADMIN ).
-.TP
-.BR Q_GETFMT " (since Linux 2.4.22)"
-Get quota format used on the specified filesystem.
-The
-.I addr
-argument should be a pointer to a 4-byte buffer
-where the format number will be stored.
-.TP
-.B Q_SYNC
-Update the on-disk copy of quota usages for a filesystem.
-If
-.I special
-is NULL, then all filesystems with active quotas are sync'ed.
-The
-.I addr
-and
-.I id
-arguments are ignored.
-.TP
-.BR Q_GETSTATS " (supported up to Linux 2.4.21)"
-Get statistics and other generic information about the quota subsystem.
-The
-.I addr
-argument should be a pointer to a
-.I dqstats
-structure in which data should be stored.
-This structure is defined in
-.IR <sys/quota.h> .
-The
-.I special
-and
-.I id
-arguments are ignored.
-.IP
-This operation is obsolete and was removed in Linux 2.4.22.
-Files in
-.I /proc/sys/fs/quota/
-carry the information instead.
-.PP
-For XFS filesystems making use of the XFS Quota Manager (XQM),
-the above operations are bypassed and the following operations are used:
-.TP
-.B Q_XQUOTAON
-Turn on quotas for an XFS filesystem.
-XFS provides the ability to turn on/off quota limit enforcement
-with quota accounting.
-Therefore, XFS expects
-.I addr
-to be a pointer to an
-.I "unsigned int"
-that contains a bitwise combination of the following flags (defined in
-.IR <xfs/xqm.h> ):
-.IP
-.in +4n
-.EX
-XFS_QUOTA_UDQ_ACCT /* User quota accounting */
-XFS_QUOTA_UDQ_ENFD /* User quota limits enforcement */
-XFS_QUOTA_GDQ_ACCT /* Group quota accounting */
-XFS_QUOTA_GDQ_ENFD /* Group quota limits enforcement */
-XFS_QUOTA_PDQ_ACCT /* Project quota accounting */
-XFS_QUOTA_PDQ_ENFD /* Project quota limits enforcement */
-.EE
-.in
-.IP
-This operation requires privilege
-.RB ( CAP_SYS_ADMIN ).
-The
-.I id
-argument is ignored.
-.TP
-.B Q_XQUOTAOFF
-Turn off quotas for an XFS filesystem.
-As with
-.BR Q_QUOTAON ,
-XFS filesystems expect a pointer to an
-.I "unsigned int"
-that specifies whether quota accounting and/or limit enforcement need
-to be turned off (using the same flags as for
-.B Q_XQUOTAON
-operation).
-This operation requires privilege
-.RB ( CAP_SYS_ADMIN ).
-The
-.I id
-argument is ignored.
-.TP
-.B Q_XGETQUOTA
-Get disk quota limits and current usage for user
-.IR id .
-The
-.I addr
-argument is a pointer to an
-.I fs_disk_quota
-structure, which is defined in
-.I <xfs/xqm.h>
-as follows:
-.IP
-.in +4n
-.EX
-/* All the blk units are in BBs (Basic Blocks) of
- 512 bytes. */
-\&
-#define FS_DQUOT_VERSION 1 /* fs_disk_quota.d_version */
-\&
-#define XFS_USER_QUOTA (1<<0) /* User quota type */
-#define XFS_PROJ_QUOTA (1<<1) /* Project quota type */
-#define XFS_GROUP_QUOTA (1<<2) /* Group quota type */
-\&
-struct fs_disk_quota {
- int8_t d_version; /* Version of this structure */
- int8_t d_flags; /* XFS_{USER,PROJ,GROUP}_QUOTA */
- uint16_t d_fieldmask; /* Field specifier */
- uint32_t d_id; /* User, project, or group ID */
- uint64_t d_blk_hardlimit; /* Absolute limit on
- disk blocks */
- uint64_t d_blk_softlimit; /* Preferred limit on
- disk blocks */
- uint64_t d_ino_hardlimit; /* Maximum # allocated
- inodes */
- uint64_t d_ino_softlimit; /* Preferred inode limit */
- uint64_t d_bcount; /* # disk blocks owned by
- the user */
- uint64_t d_icount; /* # inodes owned by the user */
- int32_t d_itimer; /* Zero if within inode limits */
- /* If not, we refuse service */
- int32_t d_btimer; /* Similar to above; for
- disk blocks */
- uint16_t d_iwarns; /* # warnings issued with
- respect to # of inodes */
- uint16_t d_bwarns; /* # warnings issued with
- respect to disk blocks */
- int32_t d_padding2; /* Padding \- for future use */
- uint64_t d_rtb_hardlimit; /* Absolute limit on realtime
- (RT) disk blocks */
- uint64_t d_rtb_softlimit; /* Preferred limit on RT
- disk blocks */
- uint64_t d_rtbcount; /* # realtime blocks owned */
- int32_t d_rtbtimer; /* Similar to above; for RT
- disk blocks */
- uint16_t d_rtbwarns; /* # warnings issued with
- respect to RT disk blocks */
- int16_t d_padding3; /* Padding \- for future use */
- char d_padding4[8]; /* Yet more padding */
-};
-.EE
-.in
-.IP
-Unprivileged users may retrieve only their own quotas;
-a privileged user
-.RB ( CAP_SYS_ADMIN )
-may retrieve the quotas of any user.
-.TP
-.BR Q_XGETNEXTQUOTA " (since Linux 4.6)"
-.\" commit 8b37524962b9c54423374717786198f5c0820a28
-This operation is the same as
-.BR Q_XGETQUOTA ,
-but it returns (in the
-.I fs_disk_quota
-structure pointed by
-.IR addr )
-quota information for the next ID greater than or equal to
-.I id
-that has a quota set.
-Note that since
-.I fs_disk_quota
-already has
-.I q_id
-field, no separate structure type is needed (in contrast with
-.B Q_GETQUOTA
-and
-.B Q_GETNEXTQUOTA
-operations)
-.TP
-.B Q_XSETQLIM
-Set disk quota limits for user
-.IR id .
-The
-.I addr
-argument is a pointer to an
-.I fs_disk_quota
-structure.
-This operation requires privilege
-.RB ( CAP_SYS_ADMIN ).
-.TP
-.B Q_XGETQSTAT
-Returns XFS filesystem-specific quota information in the
-.I fs_quota_stat
-structure pointed by
-.IR addr .
-This is useful for finding out how much space is used to store quota
-information, and also to get the quota on/off status of a given local XFS
-filesystem.
-The
-.I fs_quota_stat
-structure itself is defined as follows:
-.IP
-.in +4n
-.EX
-#define FS_QSTAT_VERSION 1 /* fs_quota_stat.qs_version */
-\&
-struct fs_qfilestat {
- uint64_t qfs_ino; /* Inode number */
- uint64_t qfs_nblks; /* Number of BBs
- 512\-byte\-blocks */
- uint32_t qfs_nextents; /* Number of extents */
-};
-\&
-struct fs_quota_stat {
- int8_t qs_version; /* Version number for
- future changes */
- uint16_t qs_flags; /* XFS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */
- int8_t qs_pad; /* Unused */
- struct fs_qfilestat qs_uquota; /* User quota storage
- information */
- struct fs_qfilestat qs_gquota; /* Group quota storage
- information */
- uint32_t qs_incoredqs; /* Number of dquots in core */
- int32_t qs_btimelimit; /* Limit for blocks timer */
- int32_t qs_itimelimit; /* Limit for inodes timer */
- int32_t qs_rtbtimelimit;/* Limit for RT
- blocks timer */
- uint16_t qs_bwarnlimit; /* Limit for # of warnings */
- uint16_t qs_iwarnlimit; /* Limit for # of warnings */
-};
-.EE
-.in
-.IP
-The
-.I id
-argument is ignored.
-.TP
-.B Q_XGETQSTATV
-Returns XFS filesystem-specific quota information in the
-.I fs_quota_statv
-pointed to by
-.IR addr .
-This version of the operation uses a structure with proper versioning support,
-along with appropriate layout (all fields are naturally aligned) and
-padding to avoiding special compat handling;
-it also provides the ability to get statistics regarding
-the project quota file.
-The
-.I fs_quota_statv
-structure itself is defined as follows:
-.IP
-.in +4n
-.EX
-#define FS_QSTATV_VERSION1 1 /* fs_quota_statv.qs_version */
-\&
-struct fs_qfilestatv {
- uint64_t qfs_ino; /* Inode number */
- uint64_t qfs_nblks; /* Number of BBs
- 512\-byte\-blocks */
- uint32_t qfs_nextents; /* Number of extents */
- uint32_t qfs_pad; /* Pad for 8\-byte alignment */
-};
-\&
-struct fs_quota_statv {
- int8_t qs_version; /* Version for future
- changes */
- uint8_t qs_pad1; /* Pad for 16\-bit alignment */
- uint16_t qs_flags; /* XFS_QUOTA_.* flags */
- uint32_t qs_incoredqs; /* Number of dquots incore */
- struct fs_qfilestatv qs_uquota; /* User quota
- information */
- struct fs_qfilestatv qs_gquota; /* Group quota
- information */
- struct fs_qfilestatv qs_pquota; /* Project quota
- information */
- int32_t qs_btimelimit; /* Limit for blocks timer */
- int32_t qs_itimelimit; /* Limit for inodes timer */
- int32_t qs_rtbtimelimit; /* Limit for RT blocks
- timer */
- uint16_t qs_bwarnlimit; /* Limit for # of warnings */
- uint16_t qs_iwarnlimit; /* Limit for # of warnings */
- uint64_t qs_pad2[8]; /* For future proofing */
-};
-.EE
-.in
-.IP
-The
-.I qs_version
-field of the structure should be filled with the version of the structure
-supported by the callee (for now, only
-.I FS_QSTAT_VERSION1
-is supported).
-The kernel will fill the structure in accordance with
-version provided.
-The
-.I id
-argument is ignored.
-.TP
-.BR Q_XQUOTARM " (buggy until Linux 3.16)"
-.\" 9da93f9b7cdf8ab28da6b364cdc1fafc8670b4dc
-Free the disk space taken by disk quotas.
-The
-.I addr
-argument should be a pointer to an
-.I "unsigned int"
-value containing flags (the same as in
-.I d_flags
-field of
-.I fs_disk_quota
-structure)
-which identify what types of quota
-should be removed.
-(Note that the quota type passed in the
-.I cmd
-argument is ignored, but should remain valid in order to pass preliminary
-quotactl syscall handler checks.)
-.IP
-Quotas must have already been turned off.
-The
-.I id
-argument is ignored.
-.TP
-.BR Q_XQUOTASYNC " (since Linux 2.6.15; no-op since Linux 3.4)"
-.\" Added in commit ee34807a65aa0c5911dc27682863afca780a003e
-This operation was an XFS quota equivalent to
-.BR Q_SYNC ,
-but it is no-op since Linux 3.4,
-.\" 4b217ed9e30f94b6e8e5e262020ef0ceab6113af
-as
-.BR sync (1)
-writes quota information to disk now
-(in addition to the other filesystem metadata that it writes out).
-The
-.IR special ", " id " and " addr
-arguments are ignored.
-.SH RETURN VALUE
-On success,
-.BR quotactl ()
-returns 0; on error \-1
-is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-.I cmd
-is
-.BR Q_QUOTAON ,
-and the quota file pointed to by
-.I addr
-exists, but is not a regular file or
-is not on the filesystem pointed to by
-.IR special .
-.TP
-.B EBUSY
-.I cmd
-is
-.BR Q_QUOTAON ,
-but another
-.B Q_QUOTAON
-had already been performed.
-.TP
-.B EFAULT
-.I addr
-or
-.I special
-is invalid.
-.TP
-.B EINVAL
-.I cmd
-or
-.I type
-is invalid.
-.TP
-.B EINVAL
-.I cmd
-is
-.BR Q_QUOTAON ,
-but the specified quota file is corrupted.
-.TP
-.BR EINVAL " (since Linux 5.5)"
-.\" 3dd4d40b420846dd35869ccc8f8627feef2cff32
-.I cmd
-is
-.BR Q_XQUOTARM ,
-but
-.I addr
-does not point to valid quota types.
-.TP
-.B ENOENT
-The file specified by
-.I special
-or
-.I addr
-does not exist.
-.TP
-.B ENOSYS
-The kernel has not been compiled with the
-.B CONFIG_QUOTA
-option.
-.TP
-.B ENOTBLK
-.I special
-is not a block device.
-.TP
-.B EPERM
-The caller lacked the required privilege
-.RB ( CAP_SYS_ADMIN )
-for the specified operation.
-.TP
-.B ERANGE
-.I cmd
-is
-.BR Q_SETQUOTA ,
-but the specified limits are out of the range allowed by the quota format.
-.TP
-.B ESRCH
-No disk quota is found for the indicated user.
-Quotas have not been turned on for this filesystem.
-.TP
-.B ESRCH
-.I cmd
-is
-.BR Q_QUOTAON ,
-but the specified quota format was not found.
-.TP
-.B ESRCH
-.I cmd
-is
-.B Q_GETNEXTQUOTA
-or
-.BR Q_XGETNEXTQUOTA ,
-but there is no ID greater than or equal to
-.I id
-that has an active quota.
-.SH NOTES
-Instead of
-.I <xfs/xqm.h>
-one can use
-.IR <linux/dqblk_xfs.h> ,
-taking into account that there are several naming discrepancies:
-.IP \[bu] 3
-Quota enabling flags (of format
-.BR XFS_QUOTA_[UGP]DQ_{ACCT,ENFD} )
-are defined without a leading "X", as
-.BR FS_QUOTA_[UGP]DQ_{ACCT,ENFD} .
-.IP \[bu]
-The same is true for
-.B XFS_{USER,GROUP,PROJ}_QUOTA
-quota type flags, which are defined as
-.BR FS_{USER,GROUP,PROJ}_QUOTA .
-.IP \[bu]
-The
-.I dqblk_xfs.h
-header file defines its own
-.BR XQM_USRQUOTA ,
-.BR XQM_GRPQUOTA ,
-and
-.B XQM_PRJQUOTA
-constants for the available quota types, but their values are the same as for
-constants without the
-.B XQM_
-prefix.
-.SH SEE ALSO
-.BR quota (1),
-.BR getrlimit (2),
-.BR quotacheck (8),
-.BR quotaon (8)
diff --git a/man2/read.2 b/man2/read.2
deleted file mode 100644
index c8ca506e9..000000000
--- a/man2/read.2
+++ /dev/null
@@ -1,245 +0,0 @@
-.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\" and Copyright (C) 1993 Michael Haardt, Ian Jackson.
-.\" and Copyright (C) 2009-2015 Michael Kerrisk, <mtk.manpages.gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 00:06:00 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Wed Jan 17 16:02:32 1996 by Michael Haardt
-.\" <michael@cantor.informatik.rwth-aachen.de>
-.\" Modified Thu Apr 11 19:26:35 1996 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified Sun Jul 21 18:59:33 1996 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified Fri Jan 31 16:47:33 1997 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Sat Jul 12 20:45:39 1997 by Michael Haardt
-.\" <michael@cantor.informatik.rwth-aachen.de>
-.\"
-.TH read 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-read \- read from a file descriptor
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "ssize_t read(int " fd ", void " buf [. count "], size_t " count );
-.fi
-.SH DESCRIPTION
-.BR read ()
-attempts to read up to
-.I count
-bytes from file descriptor
-.I fd
-into the buffer starting at
-.IR buf .
-.PP
-On files that support seeking,
-the read operation commences at the file offset,
-and the file offset is incremented by the number of bytes read.
-If the file offset is at or past the end of file,
-no bytes are read, and
-.BR read ()
-returns zero.
-.PP
-If
-.I count
-is zero,
-.BR read ()
-.I may
-detect the errors described below.
-In the absence of any errors,
-or if
-.BR read ()
-does not check for errors, a
-.BR read ()
-with a
-.I count
-of 0 returns zero and has no other effects.
-.PP
-According to POSIX.1, if
-.I count
-is greater than
-.BR SSIZE_MAX ,
-the result is implementation-defined;
-see NOTES for the upper limit on Linux.
-.SH RETURN VALUE
-On success, the number of bytes read is returned (zero indicates end of
-file), and the file position is advanced by this number.
-It is not an error if this number is smaller than the number of bytes
-requested; this may happen for example because fewer bytes are actually
-available right now (maybe because we were close to end-of-file, or
-because we are reading from a pipe, or from a terminal), or because
-.BR read ()
-was interrupted by a signal.
-See also NOTES.
-.PP
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-In this case, it is left unspecified whether
-the file position (if any) changes.
-.SH ERRORS
-.TP
-.B EAGAIN
-The file descriptor
-.I fd
-refers to a file other than a socket and has been marked nonblocking
-.RB ( O_NONBLOCK ),
-and the read would block.
-See
-.BR open (2)
-for further details on the
-.B O_NONBLOCK
-flag.
-.TP
-.BR EAGAIN " or " EWOULDBLOCK
-.\" Actually EAGAIN on Linux
-The file descriptor
-.I fd
-refers to a socket and has been marked nonblocking
-.RB ( O_NONBLOCK ),
-and the read would block.
-POSIX.1-2001 allows either error to be returned for this case,
-and does not require these constants to have the same value,
-so a portable application should check for both possibilities.
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor or is not open for reading.
-.TP
-.B EFAULT
-.I buf
-is outside your accessible address space.
-.TP
-.B EINTR
-The call was interrupted by a signal before any data was read; see
-.BR signal (7).
-.TP
-.B EINVAL
-.I fd
-is attached to an object which is unsuitable for reading;
-or the file was opened with the
-.B O_DIRECT
-flag, and either the address specified in
-.IR buf ,
-the value specified in
-.IR count ,
-or the file offset is not suitably aligned.
-.TP
-.B EINVAL
-.I fd
-was created via a call to
-.BR timerfd_create (2)
-and the wrong size buffer was given to
-.BR read ();
-see
-.BR timerfd_create (2)
-for further information.
-.TP
-.B EIO
-I/O error.
-This will happen for example when the process is in a
-background process group, tries to read from its controlling terminal,
-and either it is ignoring or blocking
-.B SIGTTIN
-or its process group
-is orphaned.
-It may also occur when there is a low-level I/O error
-while reading from a disk or tape.
-A further possible cause of
-.B EIO
-on networked filesystems is when an advisory lock had been taken
-out on the file descriptor and this lock has been lost.
-See the
-.I "Lost locks"
-section of
-.BR fcntl (2)
-for further details.
-.TP
-.B EISDIR
-.I fd
-refers to a directory.
-.PP
-Other errors may occur, depending on the object connected to
-.IR fd .
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-SVr4, 4.3BSD, POSIX.1-2001.
-.SH NOTES
-On Linux,
-.BR read ()
-(and similar system calls) will transfer at most
-0x7ffff000 (2,147,479,552) bytes,
-returning the number of bytes actually transferred.
-.\" commit e28cc71572da38a5a12c1cfe4d7032017adccf69
-(This is true on both 32-bit and 64-bit systems.)
-.PP
-On NFS filesystems, reading small amounts of data will update the
-timestamp only the first time, subsequent calls may not do so.
-This is caused
-by client side attribute caching, because most if not all NFS clients
-leave
-.I st_atime
-(last file access time)
-updates to the server, and client side reads satisfied from the
-client's cache will not cause
-.I st_atime
-updates on the server as there are no
-server-side reads.
-UNIX semantics can be obtained by disabling client-side attribute caching,
-but in most situations this will substantially
-increase server load and decrease performance.
-.SH BUGS
-According to POSIX.1-2008/SUSv4 Section XSI 2.9.7
-("Thread Interactions with Regular File Operations"):
-.PP
-.RS 4
-All of the following functions shall be atomic with respect to
-each other in the effects specified in POSIX.1-2008 when they
-operate on regular files or symbolic links: ...
-.RE
-.PP
-Among the APIs subsequently listed are
-.BR read ()
-and
-.BR readv (2).
-And among the effects that should be atomic across threads (and processes)
-are updates of the file offset.
-However, before Linux 3.14,
-this was not the case: if two processes that share
-an open file description (see
-.BR open (2))
-perform a
-.BR read ()
-(or
-.BR readv (2))
-at the same time, then the I/O operations were not atomic
-with respect updating the file offset,
-with the result that the reads in the two processes
-might (incorrectly) overlap in the blocks of data that they obtained.
-This problem was fixed in Linux 3.14.
-.\" http://thread.gmane.org/gmane.linux.kernel/1649458
-.\" From: Michael Kerrisk (man-pages <mtk.manpages <at> gmail.com>
-.\" Subject: Update of file offset on write() etc. is non-atomic with I/O
-.\" Date: 2014-02-17 15:41:37 GMT
-.\" Newsgroups: gmane.linux.kernel, gmane.linux.file-systems
-.\" commit 9c225f2655e36a470c4f58dbbc99244c5fc7f2d4
-.\" Author: Linus Torvalds <torvalds@linux-foundation.org>
-.\" Date: Mon Mar 3 09:36:58 2014 -0800
-.\"
-.\" vfs: atomic f_pos accesses as per POSIX
-.SH SEE ALSO
-.BR close (2),
-.BR fcntl (2),
-.BR ioctl (2),
-.BR lseek (2),
-.BR open (2),
-.BR pread (2),
-.BR readdir (2),
-.BR readlink (2),
-.BR readv (2),
-.BR select (2),
-.BR write (2),
-.BR fread (3)
diff --git a/man2/readahead.2 b/man2/readahead.2
deleted file mode 100644
index d69795979..000000000
--- a/man2/readahead.2
+++ /dev/null
@@ -1,90 +0,0 @@
-.\" This manpage is Copyright (C) 2004, Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2004-05-40 Created by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" 2004-10-05 aeb, minor correction
-.\"
-.TH readahead 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-readahead \- initiate file readahead into page cache
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <fcntl.h>
-.PP
-.BI "ssize_t readahead(int " fd ", off64_t " offset ", size_t " count );
-.fi
-.SH DESCRIPTION
-.BR readahead ()
-initiates readahead on a file so that subsequent reads from that file will
-be satisfied from the cache, and not block on disk I/O
-(assuming the readahead was initiated early enough and that other activity
-on the system did not in the meantime flush pages from the cache).
-.PP
-The
-.I fd
-argument is a file descriptor identifying the file which is
-to be read.
-The
-.I offset
-argument specifies the starting point from which data is to be read
-and
-.I count
-specifies the number of bytes to be read.
-I/O is performed in whole pages, so that
-.I offset
-is effectively rounded down to a page boundary
-and bytes are read up to the next page boundary greater than or
-equal to
-.IR "(offset+count)" .
-.BR readahead ()
-does not read beyond the end of the file.
-The file offset of the open file description referred to by the file descriptor
-.I fd
-is left unchanged.
-.SH RETURN VALUE
-On success,
-.BR readahead ()
-returns 0; on failure, \-1 is returned, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor or is not open for reading.
-.TP
-.B EINVAL
-.I fd
-does not refer to a file type to which
-.BR readahead ()
-can be applied.
-.SH VERSIONS
-On some 32-bit architectures,
-the calling signature for this system call differs,
-for the reasons described in
-.BR syscall (2).
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.4.13,
-glibc 2.3.
-.SH BUGS
-.BR readahead ()
-attempts to schedule the reads in the background and return immediately.
-However, it may block while it reads the filesystem metadata needed
-to locate the requested blocks.
-This occurs frequently with ext[234] on large files
-using indirect blocks instead of extents,
-giving the appearance that the call blocks until the requested data has
-been read.
-.SH SEE ALSO
-.BR lseek (2),
-.BR madvise (2),
-.BR mmap (2),
-.BR posix_fadvise (2),
-.BR read (2)
diff --git a/man2/readdir.2 b/man2/readdir.2
deleted file mode 100644
index 106f0e68f..000000000
--- a/man2/readdir.2
+++ /dev/null
@@ -1,116 +0,0 @@
-.\" Copyright (C) 1995 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Written 11 June 1995 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 22 July 1995 by Michael Chastain <mec@duracef.shout.net>:
-.\" In 1.3.X, returns only one entry each time; return value is different.
-.\" Modified 2004-12-01, mtk, fixed headers listed in SYNOPSIS
-.\"
-.TH readdir 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-readdir \- read directory entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_readdir, unsigned int " fd ,
-.BI " struct old_linux_dirent *" dirp ", unsigned int " count );
-.fi
-.PP
-.IR Note :
-There is no definition of
-.BR "struct old_linux_dirent" ;
-see NOTES.
-.SH DESCRIPTION
-This is not the function you are interested in.
-Look at
-.BR readdir (3)
-for the POSIX conforming C library interface.
-This page documents the bare kernel system call interface,
-which is superseded by
-.BR getdents (2).
-.PP
-.BR readdir ()
-reads one
-.I old_linux_dirent
-structure from the directory
-referred to by the file descriptor
-.I fd
-into the buffer pointed to by
-.IR dirp .
-The argument
-.I count
-is ignored; at most one
-.I old_linux_dirent
-structure is read.
-.PP
-The
-.I old_linux_dirent
-structure is declared (privately in Linux kernel file
-.BR fs/readdir.c )
-as follows:
-.PP
-.in +4n
-.EX
-struct old_linux_dirent {
- unsigned long d_ino; /* inode number */
- unsigned long d_offset; /* offset to this \fIold_linux_dirent\fP */
- unsigned short d_namlen; /* length of this \fId_name\fP */
- char d_name[1]; /* filename (null\-terminated) */
-}
-.EE
-.in
-.PP
-.I d_ino
-is an inode number.
-.I d_offset
-is the distance from the start of the directory to this
-.IR old_linux_dirent .
-.I d_reclen
-is the size of
-.IR d_name ,
-not counting the terminating null byte (\[aq]\e0\[aq]).
-.I d_name
-is a null-terminated filename.
-.SH RETURN VALUE
-On success, 1 is returned.
-On end of directory, 0 is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-Invalid file descriptor
-.IR fd .
-.TP
-.B EFAULT
-Argument points outside the calling process's address space.
-.TP
-.B EINVAL
-Result buffer is too small.
-.TP
-.B ENOENT
-No such directory.
-.TP
-.B ENOTDIR
-File descriptor does not refer to a directory.
-.SH VERSIONS
-You will need to define the
-.I old_linux_dirent
-structure yourself.
-However, probably you should use
-.BR readdir (3)
-instead.
-.PP
-This system call does not exist on x86-64.
-.SH STANDARDS
-Linux.
-.SH SEE ALSO
-.BR getdents (2),
-.BR readdir (3)
diff --git a/man2/readlink.2 b/man2/readlink.2
deleted file mode 100644
index e0d191884..000000000
--- a/man2/readlink.2
+++ /dev/null
@@ -1,331 +0,0 @@
-.\" Copyright (c) 1983, 1991 The Regents of the University of California.
-.\" And Copyright (C) 2011 Guillem Jover <guillem@hadrons.org>
-.\" And Copyright (C) 2006, 2014 Michael Kerrisk
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)readlink.2 6.8 (Berkeley) 3/10/91
-.\"
-.\" Modified Sat Jul 24 00:10:21 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Tue Jul 9 23:55:17 1996 by aeb
-.\" Modified Fri Jan 24 00:26:00 1997 by aeb
-.\" 2011-09-20, Guillem Jover <guillem@hadrons.org>:
-.\" Added text on dynamically allocating buffer + example program
-.\"
-.TH readlink 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-readlink, readlinkat \- read value of a symbolic link
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "ssize_t readlink(const char *restrict " pathname ", char *restrict " buf ,
-.BI " size_t " bufsiz );
-.PP
-.BR "#include <fcntl.h> " "/* Definition of " AT_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "ssize_t readlinkat(int " dirfd ", const char *restrict " pathname ,
-.BI " char *restrict " buf ", size_t " bufsiz );
-.PP
-.fi
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR readlink ():
-.nf
- _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200112L
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* glibc <= 2.19: */ _BSD_SOURCE
-.fi
-.PP
-.BR readlinkat ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _ATFILE_SOURCE
-.fi
-.SH DESCRIPTION
-.BR readlink ()
-places the contents of the symbolic link
-.I pathname
-in the buffer
-.IR buf ,
-which has size
-.IR bufsiz .
-.BR readlink ()
-does not append a terminating null byte to
-.IR buf .
-It will (silently) truncate the contents (to a length of
-.I bufsiz
-characters), in case the buffer is too small to hold all of the contents.
-.SS readlinkat()
-The
-.BR readlinkat ()
-system call operates in exactly the same way as
-.BR readlink (),
-except for the differences described here.
-.PP
-If the pathname given in
-.I pathname
-is relative, then it is interpreted relative to the directory
-referred to by the file descriptor
-.I dirfd
-(rather than relative to the current working directory of
-the calling process, as is done by
-.BR readlink ()
-for a relative pathname).
-.PP
-If
-.I pathname
-is relative and
-.I dirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I pathname
-is interpreted relative to the current working
-directory of the calling process (like
-.BR readlink ()).
-.PP
-If
-.I pathname
-is absolute, then
-.I dirfd
-is ignored.
-.PP
-Since Linux 2.6.39,
-.\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d
-.I pathname
-can be an empty string,
-in which case the call operates on the symbolic link referred to by
-.I dirfd
-(which should have been obtained using
-.BR open (2)
-with the
-.B O_PATH
-and
-.B O_NOFOLLOW
-flags).
-.PP
-See
-.BR openat (2)
-for an explanation of the need for
-.BR readlinkat ().
-.SH RETURN VALUE
-On success, these calls return the number of bytes placed in
-.IR buf .
-(If the returned value equals
-.IR bufsiz ,
-then truncation may have occurred.)
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-Search permission is denied for a component of the path prefix.
-(See also
-.BR path_resolution (7).)
-.TP
-.B EBADF
-.RB ( readlinkat ())
-.I pathname
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B EFAULT
-.I buf
-extends outside the process's allocated address space.
-.TP
-.B EINVAL
-.I bufsiz
-is not positive.
-.\" At the glibc level, bufsiz is unsigned, so this error can only occur
-.\" if bufsiz==0. However, the in the kernel syscall, bufsiz is signed,
-.\" and this error can also occur if bufsiz < 0.
-.\" See: http://thread.gmane.org/gmane.linux.man/380
-.\" Subject: [patch 0/3] [RFC] kernel/glibc mismatch of "readlink" syscall?
-.TP
-.B EINVAL
-The named file (i.e., the final filename component of
-.IR pathname )
-is not a symbolic link.
-.TP
-.B EIO
-An I/O error occurred while reading from the filesystem.
-.TP
-.B ELOOP
-Too many symbolic links were encountered in translating the pathname.
-.TP
-.B ENAMETOOLONG
-A pathname, or a component of a pathname, was too long.
-.TP
-.B ENOENT
-The named file does not exist.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOTDIR
-A component of the path prefix is not a directory.
-.TP
-.B ENOTDIR
-.RB ( readlinkat ())
-.I pathname
-is relative and
-.I dirfd
-is a file descriptor referring to a file other than a directory.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR readlink ()
-4.4BSD
-(first appeared in 4.2BSD),
-POSIX.1-2001, POSIX.1-2008.
-.TP
-.BR readlinkat ()
-POSIX.1-2008.
-Linux 2.6.16,
-glibc 2.4.
-.PP
-Up to and including glibc 2.4, the return type of
-.BR readlink ()
-was declared as
-.IR int .
-Nowadays, the return type is declared as
-.IR ssize_t ,
-as (newly) required in POSIX.1-2001.
-.SS glibc
-On older kernels where
-.BR readlinkat ()
-is unavailable, the glibc wrapper function falls back to the use of
-.BR readlink ().
-When
-.I pathname
-is a relative pathname,
-glibc constructs a pathname based on the symbolic link in
-.I /proc/self/fd
-that corresponds to the
-.I dirfd
-argument.
-.SH NOTES
-Using a statically sized buffer might not provide enough room for the
-symbolic link contents.
-The required size for the buffer can be obtained from the
-.I stat.st_size
-value returned by a call to
-.BR lstat (2)
-on the link.
-However, the number of bytes written by
-.BR readlink ()
-and
-.BR readlinkat ()
-should be checked to make sure that the size of the
-symbolic link did not increase between the calls.
-Dynamically allocating the buffer for
-.BR readlink ()
-and
-.BR readlinkat ()
-also addresses a common portability problem when using
-.B PATH_MAX
-for the buffer size,
-as this constant is not guaranteed to be defined per POSIX
-if the system does not have such limit.
-.SH EXAMPLES
-The following program allocates the buffer needed by
-.BR readlink ()
-dynamically from the information provided by
-.BR lstat (2),
-falling back to a buffer of size
-.B PATH_MAX
-in cases where
-.BR lstat (2)
-reports a size of zero.
-.PP
-.\" SRC BEGIN (readlink.c)
-.EX
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- char *buf;
- ssize_t nbytes, bufsiz;
- struct stat sb;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s <pathname>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- if (lstat(argv[1], &sb) == \-1) {
- perror("lstat");
- exit(EXIT_FAILURE);
- }
-\&
- /* Add one to the link size, so that we can determine whether
- the buffer returned by readlink() was truncated. */
-\&
- bufsiz = sb.st_size + 1;
-\&
- /* Some magic symlinks under (for example) /proc and /sys
- report \[aq]st_size\[aq] as zero. In that case, take PATH_MAX as
- a "good enough" estimate. */
-\&
- if (sb.st_size == 0)
- bufsiz = PATH_MAX;
-\&
- buf = malloc(bufsiz);
- if (buf == NULL) {
- perror("malloc");
- exit(EXIT_FAILURE);
- }
-\&
- nbytes = readlink(argv[1], buf, bufsiz);
- if (nbytes == \-1) {
- perror("readlink");
- exit(EXIT_FAILURE);
- }
-\&
- /* Print only \[aq]nbytes\[aq] of \[aq]buf\[aq], as it doesn't contain a terminating
- null byte (\[aq]\e0\[aq]). */
- printf("\[aq]%s\[aq] points to \[aq]%.*s\[aq]\en", argv[1], (int) nbytes, buf);
-\&
- /* If the return value was equal to the buffer size, then the
- the link target was larger than expected (perhaps because the
- target was changed between the call to lstat() and the call to
- readlink()). Warn the user that the returned target may have
- been truncated. */
-\&
- if (nbytes == bufsiz)
- printf("(Returned buffer may have been truncated)\en");
-\&
- free(buf);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR readlink (1),
-.BR lstat (2),
-.BR stat (2),
-.BR symlink (2),
-.BR realpath (3),
-.BR path_resolution (7),
-.BR symlink (7)
diff --git a/man2/readlinkat.2 b/man2/readlinkat.2
deleted file mode 100644
index b29d1b541..000000000
--- a/man2/readlinkat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/readlink.2
diff --git a/man2/readv.2 b/man2/readv.2
deleted file mode 100644
index fa9b0e4e4..000000000
--- a/man2/readv.2
+++ /dev/null
@@ -1,427 +0,0 @@
-.\" Copyright (C) 2007, 2010 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 18:34:44 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Merged readv.[23], 2002-10-17, aeb
-.\" 2007-04-30 mtk, A fairly major rewrite to fix errors and
-.\" add more details.
-.\" 2010-11-16, mtk, Added documentation of preadv() and pwritev()
-.\"
-.TH readv 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-readv, writev, preadv, pwritev, preadv2, pwritev2 \-
-read or write data into multiple buffers
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/uio.h>
-.PP
-.BI "ssize_t readv(int " fd ", const struct iovec *" iov ", int " iovcnt );
-.BI "ssize_t writev(int " fd ", const struct iovec *" iov ", int " iovcnt );
-.PP
-.BI "ssize_t preadv(int " fd ", const struct iovec *" iov ", int " iovcnt ,
-.BI " off_t " offset );
-.BI "ssize_t pwritev(int " fd ", const struct iovec *" iov ", int " iovcnt ,
-.BI " off_t " offset );
-.PP
-.BI "ssize_t preadv2(int " fd ", const struct iovec *" iov ", int " iovcnt ,
-.BI " off_t " offset ", int " flags );
-.BI "ssize_t pwritev2(int " fd ", const struct iovec *" iov ", int " iovcnt ,
-.BI " off_t " offset ", int " flags );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR preadv (),
-.BR pwritev ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR readv ()
-system call reads
-.I iovcnt
-buffers from the file associated with the file descriptor
-.I fd
-into the buffers described by
-.I iov
-("scatter input").
-.PP
-The
-.BR writev ()
-system call writes
-.I iovcnt
-buffers of data described by
-.I iov
-to the file associated with the file descriptor
-.I fd
-("gather output").
-.PP
-The pointer
-.I iov
-points to an array of
-.I iovec
-structures,
-described in
-.BR iovec (3type).
-.PP
-The
-.BR readv ()
-system call works just like
-.BR read (2)
-except that multiple buffers are filled.
-.PP
-The
-.BR writev ()
-system call works just like
-.BR write (2)
-except that multiple buffers are written out.
-.PP
-Buffers are processed in array order.
-This means that
-.BR readv ()
-completely fills
-.I iov[0]
-before proceeding to
-.IR iov[1] ,
-and so on.
-(If there is insufficient data, then not all buffers pointed to by
-.I iov
-may be filled.)
-Similarly,
-.BR writev ()
-writes out the entire contents of
-.I iov[0]
-before proceeding to
-.IR iov[1] ,
-and so on.
-.PP
-The data transfers performed by
-.BR readv ()
-and
-.BR writev ()
-are atomic: the data written by
-.\" Regarding atomicity, see https://bugzilla.kernel.org/show_bug.cgi?id=10596
-.BR writev ()
-is written as a single block that is not intermingled with output
-from writes in other processes;
-analogously,
-.BR readv ()
-is guaranteed to read a contiguous block of data from the file,
-regardless of read operations performed in other threads or processes
-that have file descriptors referring to the same open file description
-(see
-.BR open (2)).
-.SS preadv() and pwritev()
-The
-.BR preadv ()
-system call combines the functionality of
-.BR readv ()
-and
-.BR pread (2).
-It performs the same task as
-.BR readv (),
-but adds a fourth argument,
-.IR offset ,
-which specifies the file offset at which the input operation
-is to be performed.
-.PP
-The
-.BR pwritev ()
-system call combines the functionality of
-.BR writev ()
-and
-.BR pwrite (2).
-It performs the same task as
-.BR writev (),
-but adds a fourth argument,
-.IR offset ,
-which specifies the file offset at which the output operation
-is to be performed.
-.PP
-The file offset is not changed by these system calls.
-The file referred to by
-.I fd
-must be capable of seeking.
-.SS preadv2() and pwritev2()
-These system calls are similar to
-.BR preadv ()
-and
-.BR pwritev ()
-calls, but add a fifth argument,
-.IR flags ,
-which modifies the behavior on a per-call basis.
-.PP
-Unlike
-.BR preadv ()
-and
-.BR pwritev (),
-if the
-.I offset
-argument is \-1, then the current file offset is used and updated.
-.PP
-The
-.I flags
-argument contains a bitwise OR of zero or more of the following flags:
-.TP
-.BR RWF_DSYNC " (since Linux 4.7)"
-.\" commit e864f39569f4092c2b2bc72c773b6e486c7e3bd9
-Provide a per-write equivalent of the
-.B O_DSYNC
-.BR open (2)
-flag.
-This flag is meaningful only for
-.BR pwritev2 (),
-and its effect applies only to the data range written by the system call.
-.TP
-.BR RWF_HIPRI " (since Linux 4.6)"
-High priority read/write.
-Allows block-based filesystems to use polling of the device,
-which provides lower latency, but may use additional resources.
-(Currently, this feature is usable only on a file descriptor opened using the
-.B O_DIRECT
-flag.)
-.TP
-.BR RWF_SYNC " (since Linux 4.7)"
-.\" commit e864f39569f4092c2b2bc72c773b6e486c7e3bd9
-Provide a per-write equivalent of the
-.B O_SYNC
-.BR open (2)
-flag.
-This flag is meaningful only for
-.BR pwritev2 (),
-and its effect applies only to the data range written by the system call.
-.TP
-.BR RWF_NOWAIT " (since Linux 4.14)"
-.\" commit 3239d834847627b6634a4139cf1dc58f6f137a46
-.\" commit 91f9943e1c7b6638f27312d03fe71fcc67b23571
-Do not wait for data which is not immediately available.
-If this flag is specified, the
-.BR preadv2 ()
-system call will return instantly if it would have to read data from
-the backing storage or wait for a lock.
-If some data was successfully read, it will return the number of bytes read.
-If no bytes were read, it will return \-1 and set
-.I errno
-to
-.B EAGAIN
-(but see
-.BR BUGS ).
-Currently, this flag is meaningful only for
-.BR preadv2 ().
-.TP
-.BR RWF_APPEND " (since Linux 4.16)"
-.\" commit e1fc742e14e01d84d9693c4aca4ab23da65811fb
-Provide a per-write equivalent of the
-.B O_APPEND
-.BR open (2)
-flag.
-This flag is meaningful only for
-.BR pwritev2 (),
-and its effect applies only to the data range written by the system call.
-The
-.I offset
-argument does not affect the write operation;
-the data is always appended to the end of the file.
-However, if the
-.I offset
-argument is \-1, the current file offset is updated.
-.SH RETURN VALUE
-On success,
-.BR readv (),
-.BR preadv (),
-and
-.BR preadv2 ()
-return the number of bytes read;
-.BR writev (),
-.BR pwritev (),
-and
-.BR pwritev2 ()
-return the number of bytes written.
-.PP
-Note that it is not an error for a successful call to transfer fewer bytes
-than requested (see
-.BR read (2)
-and
-.BR write (2)).
-.PP
-On error, \-1 is returned, and \fIerrno\fP is set to indicate the error.
-.SH ERRORS
-The errors are as given for
-.BR read (2)
-and
-.BR write (2).
-Furthermore,
-.BR preadv (),
-.BR preadv2 (),
-.BR pwritev (),
-and
-.BR pwritev2 ()
-can also fail for the same reasons as
-.BR lseek (2).
-Additionally, the following errors are defined:
-.TP
-.B EINVAL
-The sum of the
-.I iov_len
-values overflows an
-.I ssize_t
-value.
-.TP
-.B EINVAL
-The vector count,
-.IR iovcnt ,
-is less than zero or greater than the permitted maximum.
-.TP
-.B EOPNOTSUPP
-An unknown flag is specified in \fIflags\fP.
-.SH VERSIONS
-.SS C library/kernel differences
-The raw
-.BR preadv ()
-and
-.BR pwritev ()
-system calls have call signatures that differ slightly from that of the
-corresponding GNU C library wrapper functions shown in the SYNOPSIS.
-The final argument,
-.IR offset ,
-is unpacked by the wrapper functions into two arguments in the system calls:
-.PP
-.BI " unsigned long " pos_l ", unsigned long " pos
-.PP
-These arguments contain, respectively, the low order and high order 32 bits of
-.IR offset .
-.SH STANDARDS
-.TP
-.BR readv ()
-.TQ
-.BR writev ()
-POSIX.1-2008.
-.TP
-.BR preadv ()
-.TQ
-.BR pwritev ()
-BSD.
-.TP
-.BR preadv2 ()
-.TQ
-.BR pwritev2 ()
-Linux.
-.SH HISTORY
-.TP
-.BR readv ()
-.TQ
-.BR writev ()
-POSIX.1-2001,
-4.4BSD (first appeared in 4.2BSD).
-.\" Linux libc5 used \fIsize_t\fP as the type of the \fIiovcnt\fP argument,
-.\" and \fIint\fP as the return type.
-.\" The readv/writev system calls were buggy before Linux 1.3.40.
-.\" (Says release.libc.)
-.PP
-.BR preadv (),
-.BR pwritev ():
-Linux 2.6.30,
-glibc 2.10.
-.PP
-.BR preadv2 (),
-.BR pwritev2 ():
-Linux 4.6,
-glibc 2.26.
-.SS Historical C library/kernel differences
-To deal with the fact that
-.B IOV_MAX
-was so low on early versions of Linux,
-the glibc wrapper functions for
-.BR readv ()
-and
-.BR writev ()
-did some extra work if they detected that the underlying kernel
-system call failed because this limit was exceeded.
-In the case of
-.BR readv (),
-the wrapper function allocated a temporary buffer large enough
-for all of the items specified by
-.IR iov ,
-passed that buffer in a call to
-.BR read (2),
-copied data from the buffer to the locations specified by the
-.I iov_base
-fields of the elements of
-.IR iov ,
-and then freed the buffer.
-The wrapper function for
-.BR writev ()
-performed the analogous task using a temporary buffer and a call to
-.BR write (2).
-.PP
-The need for this extra effort in the glibc wrapper functions
-went away with Linux 2.2 and later.
-However, glibc continued to provide this behavior until glibc 2.10.
-Starting with glibc 2.9,
-the wrapper functions provide this behavior only if the library detects
-that the system is running a Linux kernel older than Linux 2.6.18
-(an arbitrarily selected kernel version).
-And since glibc 2.20
-(which requires a minimum of Linux 2.6.32),
-the glibc wrapper functions always just directly invoke the system calls.
-.SH NOTES
-POSIX.1 allows an implementation to place a limit on
-the number of items that can be passed in
-.IR iov .
-An implementation can advertise its limit by defining
-.B IOV_MAX
-in
-.I <limits.h>
-or at run time via the return value from
-.IR sysconf(_SC_IOV_MAX) .
-On modern Linux systems, the limit is 1024.
-Back in Linux 2.0 days, this limit was 16.
-.\"
-.\"
-.SH BUGS
-Linux 5.9 and Linux 5.10 have a bug where
-.BR preadv2 ()
-with the
-.B RWF_NOWAIT
-flag may return 0 even when not at end of file.
-.\" See
-.\" <https://lore.kernel.org/linux-fsdevel/fea8b16d-5a69-40f9-b123-e84dcd6e8f2e@www.fastmail.com/T/#u>
-.\" The bug was introduced in
-.\" efa8480a831 fs: RWF_NOWAIT should imply IOCB_NOIO
-.\"and fixed in
-.\" 06c0444290 mm/filemap.c: generic_file_buffered_read() now uses find_get_pages_contig
-.SH EXAMPLES
-The following code sample demonstrates the use of
-.BR writev ():
-.PP
-.in +4n
-.EX
-char *str0 = "hello ";
-char *str1 = "world\en";
-ssize_t nwritten;
-struct iovec iov[2];
-\&
-iov[0].iov_base = str0;
-iov[0].iov_len = strlen(str0);
-iov[1].iov_base = str1;
-iov[1].iov_len = strlen(str1);
-\&
-nwritten = writev(STDOUT_FILENO, iov, 2);
-.EE
-.in
-.SH SEE ALSO
-.BR pread (2),
-.BR read (2),
-.BR write (2)
diff --git a/man2/reboot.2 b/man2/reboot.2
deleted file mode 100644
index 2896ed517..000000000
--- a/man2/reboot.2
+++ /dev/null
@@ -1,236 +0,0 @@
-.\" Copyright (c) 1998 Andries Brouwer (aeb@cwi.nl), 24 September 1998
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.\"
-.TH reboot 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-reboot \- reboot or enable/disable Ctrl-Alt-Del
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.RB "/* Since Linux 2.1.30 there are symbolic names " LINUX_REBOOT_*
- for the constants and a fourth argument to the call: */
-.PP
-.BR "#include <linux/reboot.h> " \
-"/* Definition of " LINUX_REBOOT_* " constants */"
-.BR "#include <sys/syscall.h> " "/* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_reboot, int " magic ", int " magic2 ", int " cmd ", void *" arg );
-.PP
-/* Under glibc and most alternative libc's (including uclibc, dietlibc,
- musl and a few others), some of the constants involved have gotten
-.RB " symbolic names " RB_* ", and the library call is a 1-argument"
- wrapper around the system call: */
-.PP
-.BR "#include <sys/reboot.h> " "/* Definition of " RB_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int reboot(int " cmd );
-.fi
-.SH DESCRIPTION
-The
-.BR reboot ()
-call reboots the system, or enables/disables the reboot keystroke
-(abbreviated CAD, since the default is Ctrl-Alt-Delete;
-it can be changed using
-.BR loadkeys (1)).
-.PP
-This system call fails (with the error
-.BR EINVAL )
-unless
-.I magic
-equals
-.B LINUX_REBOOT_MAGIC1
-(that is, 0xfee1dead) and
-.I magic2
-equals
-.B LINUX_REBOOT_MAGIC2
-(that is, 0x28121969).
-However, since Linux 2.1.17 also
-.B LINUX_REBOOT_MAGIC2A
-(that is, 0x05121996)
-and since Linux 2.1.97 also
-.B LINUX_REBOOT_MAGIC2B
-(that is, 0x16041998)
-and since Linux 2.5.71 also
-.B LINUX_REBOOT_MAGIC2C
-(that is, 0x20112000)
-are permitted as values for
-.IR magic2 .
-(The hexadecimal values of these constants are meaningful.)
-.PP
-The
-.I cmd
-argument can have the following values:
-.TP
-.B LINUX_REBOOT_CMD_CAD_OFF
-.RB ( RB_DISABLE_CAD ,
-0).
-CAD is disabled.
-This means that the CAD keystroke will cause a
-.B SIGINT
-signal to be
-sent to init (process 1), whereupon this process may decide upon a
-proper action (maybe: kill all processes, sync, reboot).
-.TP
-.B LINUX_REBOOT_CMD_CAD_ON
-.RB ( RB_ENABLE_CAD ,
-0x89abcdef).
-CAD is enabled.
-This means that the CAD keystroke will immediately cause
-the action associated with
-.BR LINUX_REBOOT_CMD_RESTART .
-.TP
-.B LINUX_REBOOT_CMD_HALT
-.RB ( RB_HALT_SYSTEM ,
-0xcdef0123; since Linux 1.1.76).
-The message "System halted." is printed, and the system is halted.
-Control is given to the ROM monitor, if there is one.
-If not preceded by a
-.BR sync (2),
-data will be lost.
-.TP
-.B LINUX_REBOOT_CMD_KEXEC
-.RB ( RB_KEXEC ,
-0x45584543, since Linux 2.6.13).
-Execute a kernel that has been loaded earlier with
-.BR kexec_load (2).
-This option is available only if the kernel was configured with
-.BR CONFIG_KEXEC .
-.TP
-.B LINUX_REBOOT_CMD_POWER_OFF
-.RB ( RB_POWER_OFF ,
-0x4321fedc; since Linux 2.1.30).
-The message "Power down." is printed, the system is stopped,
-and all power is removed from the system, if possible.
-If not preceded by a
-.BR sync (2),
-data will be lost.
-.TP
-.B LINUX_REBOOT_CMD_RESTART
-.RB ( RB_AUTOBOOT ,
-0x1234567).
-The message "Restarting system." is printed, and a default
-restart is performed immediately.
-If not preceded by a
-.BR sync (2),
-data will be lost.
-.TP
-.B LINUX_REBOOT_CMD_RESTART2
-(0xa1b2c3d4; since Linux 2.1.30).
-The message "Restarting system with command \[aq]%s\[aq]" is printed,
-and a restart (using the command string given in
-.IR arg )
-is performed immediately.
-If not preceded by a
-.BR sync (2),
-data will be lost.
-.TP
-.B LINUX_REBOOT_CMD_SW_SUSPEND
-.RB ( RB_SW_SUSPEND ,
-0xd000fce1; since Linux 2.5.18).
-The system is suspended (hibernated) to disk.
-This option is available only if the kernel was configured with
-.BR CONFIG_HIBERNATION .
-.PP
-Only the superuser may call
-.BR reboot ().
-.PP
-The precise effect of the above actions depends on the architecture.
-For the i386 architecture, the additional argument does not do
-anything at present (2.1.122), but the type of reboot can be
-determined by kernel command-line arguments ("reboot=...") to be
-either warm or cold, and either hard or through the BIOS.
-.\"
-.SS Behavior inside PID namespaces
-.\" commit cf3f89214ef6a33fad60856bc5ffd7bb2fc4709b
-.\" see also commit 923c7538236564c46ee80c253a416705321f13e3
-Since Linux 3.4,
-if
-.BR reboot ()
-is called
-from a PID namespace other than the initial PID namespace
-with one of the
-.I cmd
-values listed below,
-it performs a "reboot" of that namespace:
-the "init" process of the PID namespace is immediately terminated,
-with the effects described in
-.BR pid_namespaces (7).
-.PP
-The values that can be supplied in
-.I cmd
-when calling
-.BR reboot ()
-in this case are as follows:
-.TP
-.BR LINUX_REBOOT_CMD_RESTART ", " LINUX_REBOOT_CMD_RESTART2
-The "init" process is terminated,
-and
-.BR wait (2)
-in the parent process reports that the child was killed with a
-.B SIGHUP
-signal.
-.TP
-.BR LINUX_REBOOT_CMD_POWER_OFF ", " LINUX_REBOOT_CMD_HALT
-The "init" process is terminated,
-and
-.BR wait (2)
-in the parent process reports that the child was killed with a
-.B SIGINT
-signal.
-.PP
-For the other
-.I cmd
-values,
-.BR reboot ()
-returns \-1 and
-.I errno
-is set to
-.BR EINVAL .
-.SH RETURN VALUE
-For the values of
-.I cmd
-that stop or restart the system,
-a successful call to
-.BR reboot ()
-does not return.
-For the other
-.I cmd
-values, zero is returned on success.
-In all cases, \-1 is returned on failure, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-Problem with getting user-space data under
-.BR LINUX_REBOOT_CMD_RESTART2 .
-.TP
-.B EINVAL
-Bad magic numbers or \fIcmd\fP.
-.TP
-.B EPERM
-The calling process has insufficient privilege to call
-.BR reboot ();
-the caller must have the
-.B CAP_SYS_BOOT
-inside its user namespace.
-.SH STANDARDS
-Linux.
-.SH SEE ALSO
-.BR systemctl (1),
-.BR systemd (1),
-.BR kexec_load (2),
-.BR sync (2),
-.BR bootparam (7),
-.BR capabilities (7),
-.BR ctrlaltdel (8),
-.BR halt (8),
-.BR shutdown (8)
diff --git a/man2/recv.2 b/man2/recv.2
deleted file mode 100644
index 660c103fb..000000000
--- a/man2/recv.2
+++ /dev/null
@@ -1,554 +0,0 @@
-.\" Copyright (c) 1983, 1990, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" $Id: recv.2,v 1.3 1999/05/13 11:33:38 freitag Exp $
-.\"
-.\" Modified Sat Jul 24 00:22:20 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Tue Oct 22 17:45:19 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1998,1999 by Andi Kleen
-.\" 2001-06-19 corrected SO_EE_OFFENDER, bug report by James Hawtin
-.\"
-.TH recv 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-recv, recvfrom, recvmsg \- receive a message from a socket
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.PP
-.BI "ssize_t recv(int " sockfd ", void " buf [. len "], size_t " len ,
-.BI " int " flags );
-.BI "ssize_t recvfrom(int " sockfd ", void " buf "[restrict ." len "], size_t " len ,
-.BI " int " flags ,
-.BI " struct sockaddr *_Nullable restrict " src_addr ,
-.BI " socklen_t *_Nullable restrict " addrlen );
-.BI "ssize_t recvmsg(int " sockfd ", struct msghdr *" msg ", int " flags );
-.fi
-.SH DESCRIPTION
-The
-.BR recv (),
-.BR recvfrom (),
-and
-.BR recvmsg ()
-calls are used to receive messages from a socket.
-They may be used
-to receive data on both connectionless and connection-oriented sockets.
-This page first describes common features of all three system calls,
-and then describes the differences between the calls.
-.PP
-The only difference between
-.BR recv ()
-and
-.BR read (2)
-is the presence of
-.IR flags .
-With a zero
-.I flags
-argument,
-.BR recv ()
-is generally equivalent to
-.BR read (2)
-(but see NOTES).
-Also, the following call
-.PP
-.in +4n
-.EX
-recv(sockfd, buf, len, flags);
-.EE
-.in
-.PP
-is equivalent to
-.PP
-.in +4n
-.EX
-recvfrom(sockfd, buf, len, flags, NULL, NULL);
-.EE
-.in
-.PP
-All three calls return the length of the message on successful
-completion.
-If a message is too long to fit in the supplied buffer, excess
-bytes may be discarded depending on the type of socket the message is
-received from.
-.PP
-If no messages are available at the socket, the receive calls wait for a
-message to arrive, unless the socket is nonblocking (see
-.BR fcntl (2)),
-in which case the value \-1 is returned and
-.I errno
-is set to
-.BR EAGAIN " or " EWOULDBLOCK .
-The receive calls normally return any data available, up to the requested
-amount, rather than waiting for receipt of the full amount requested.
-.PP
-An application can use
-.BR select (2),
-.BR poll (2),
-or
-.BR epoll (7)
-to determine when more data arrives on a socket.
-.SS The flags argument
-The
-.I flags
-argument is formed by ORing one or more of the following values:
-.TP
-.BR MSG_CMSG_CLOEXEC " (" recvmsg "() only; since Linux 2.6.23)"
-Set the close-on-exec flag for the file descriptor received
-via a UNIX domain file descriptor using the
-.B SCM_RIGHTS
-operation (described in
-.BR unix (7)).
-This flag is useful for the same reasons as the
-.B O_CLOEXEC
-flag of
-.BR open (2).
-.TP
-.BR MSG_DONTWAIT " (since Linux 2.2)"
-Enables nonblocking operation; if the operation would block,
-the call fails with the error
-.BR EAGAIN " or " EWOULDBLOCK .
-This provides similar behavior to setting the
-.B O_NONBLOCK
-flag (via the
-.BR fcntl (2)
-.B F_SETFL
-operation), but differs in that
-.B MSG_DONTWAIT
-is a per-call option, whereas
-.B O_NONBLOCK
-is a setting on the open file description (see
-.BR open (2)),
-which will affect all threads in the calling process
-and as well as other processes that hold file descriptors
-referring to the same open file description.
-.TP
-.BR MSG_ERRQUEUE " (since Linux 2.2)"
-This flag
-specifies that queued errors should be received from the socket error queue.
-The error is passed in
-an ancillary message with a type dependent on the protocol (for IPv4
-.BR IP_RECVERR ).
-The user should supply a buffer of sufficient size.
-See
-.BR cmsg (3)
-and
-.BR ip (7)
-for more information.
-The payload of the original packet that caused the error
-is passed as normal data via
-.IR msg_iovec .
-The original destination address of the datagram that caused the error
-is supplied via
-.IR msg_name .
-.IP
-The error is supplied in a
-.I sock_extended_err
-structure:
-.IP
-.in +4n
-.EX
-#define SO_EE_ORIGIN_NONE 0
-#define SO_EE_ORIGIN_LOCAL 1
-#define SO_EE_ORIGIN_ICMP 2
-#define SO_EE_ORIGIN_ICMP6 3
-\&
-struct sock_extended_err
-{
- uint32_t ee_errno; /* Error number */
- uint8_t ee_origin; /* Where the error originated */
- uint8_t ee_type; /* Type */
- uint8_t ee_code; /* Code */
- uint8_t ee_pad; /* Padding */
- uint32_t ee_info; /* Additional information */
- uint32_t ee_data; /* Other data */
- /* More data may follow */
-};
-\&
-struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);
-.EE
-.in
-.IP
-.I ee_errno
-contains the
-.I errno
-number of the queued error.
-.I ee_origin
-is the origin code of where the error originated.
-The other fields are protocol-specific.
-The macro
-.B SO_EE_OFFENDER
-returns a pointer to the address of the network object
-where the error originated from given a pointer to the ancillary message.
-If this address is not known, the
-.I sa_family
-member of the
-.I sockaddr
-contains
-.B AF_UNSPEC
-and the other fields of the
-.I sockaddr
-are undefined.
-The payload of the packet that caused the error is passed as normal data.
-.IP
-For local errors, no address is passed (this
-can be checked with the
-.I cmsg_len
-member of the
-.IR cmsghdr ).
-For error receives,
-the
-.B MSG_ERRQUEUE
-flag is set in the
-.IR msghdr .
-After an error has been passed, the pending socket error
-is regenerated based on the next queued error and will be passed
-on the next socket operation.
-.TP
-.B MSG_OOB
-This flag requests receipt of out-of-band data that would not be received
-in the normal data stream.
-Some protocols place expedited data
-at the head of the normal data queue, and thus this flag cannot
-be used with such protocols.
-.TP
-.B MSG_PEEK
-This flag causes the receive operation to
-return data from the beginning of the
-receive queue without removing that data from the queue.
-Thus, a
-subsequent receive call will return the same data.
-.TP
-.BR MSG_TRUNC " (since Linux 2.2)"
-For raw
-.RB ( AF_PACKET ),
-Internet datagram (since Linux 2.4.27/2.6.8),
-netlink (since Linux 2.6.22),
-and UNIX datagram as well as sequenced-packet
-.\" commit 9f6f9af7694ede6314bed281eec74d588ba9474f
-(since Linux 3.4) sockets:
-return the real length of the packet or datagram,
-even when it was longer than the passed buffer.
-.IP
-For use with Internet stream sockets, see
-.BR tcp (7).
-.TP
-.BR MSG_WAITALL " (since Linux 2.2)"
-This flag requests that the operation block until the full request is
-satisfied.
-However, the call may still return less data than requested if
-a signal is caught, an error or disconnect occurs, or the next data to be
-received is of a different type than that returned.
-This flag has no effect for datagram sockets.
-.\"
-.SS recvfrom()
-.BR recvfrom ()
-places the received message into the buffer
-.IR buf .
-The caller must specify the size of the buffer in
-.IR len .
-.PP
-If
-.I src_addr
-is not NULL,
-and the underlying protocol provides the source address of the message,
-that source address is placed in the buffer pointed to by
-.IR src_addr .
-.\" (Note: for datagram sockets in both the UNIX and Internet domains,
-.\" .I src_addr
-.\" is filled in.
-.\" .I src_addr
-.\" is also filled in for stream sockets in the UNIX domain, but is not
-.\" filled in for stream sockets in the Internet domain.)
-.\" [The above notes on AF_UNIX and AF_INET sockets apply as at
-.\" Kernel 2.4.18. (MTK, 22 Jul 02)]
-In this case,
-.I addrlen
-is a value-result argument.
-Before the call,
-it should be initialized to the size of the buffer associated with
-.IR src_addr .
-Upon return,
-.I addrlen
-is updated to contain the actual size of the source address.
-The returned address is truncated if the buffer provided is too small;
-in this case,
-.I addrlen
-will return a value greater than was supplied to the call.
-.PP
-If the caller is not interested in the source address,
-.I src_addr
-and
-.I addrlen
-should be specified as NULL.
-.\"
-.SS recv()
-The
-.BR recv ()
-call is normally used only on a
-.I connected
-socket (see
-.BR connect (2)).
-It is equivalent to the call:
-.PP
-.in +4n
-.EX
-recvfrom(fd, buf, len, flags, NULL, 0);
-.EE
-.in
-.\"
-.SS recvmsg()
-The
-.BR recvmsg ()
-call uses a
-.I msghdr
-structure to minimize the number of directly supplied arguments.
-This structure is defined as follows in
-.IR <sys/socket.h> :
-.PP
-.in +4n
-.EX
-struct msghdr {
- void *msg_name; /* Optional address */
- socklen_t msg_namelen; /* Size of address */
- struct iovec *msg_iov; /* Scatter/gather array */
- size_t msg_iovlen; /* # elements in msg_iov */
- void *msg_control; /* Ancillary data, see below */
- size_t msg_controllen; /* Ancillary data buffer len */
- int msg_flags; /* Flags on received message */
-};
-.EE
-.in
-.PP
-The
-.I msg_name
-field points to a caller-allocated buffer that is used to
-return the source address if the socket is unconnected.
-The caller should set
-.I msg_namelen
-to the size of this buffer before this call;
-upon return from a successful call,
-.I msg_namelen
-will contain the length of the returned address.
-If the application does not need to know the source address,
-.I msg_name
-can be specified as NULL.
-.PP
-The fields
-.I msg_iov
-and
-.I msg_iovlen
-describe scatter-gather locations, as discussed in
-.BR readv (2).
-.PP
-The field
-.IR msg_control ,
-which has length
-.IR msg_controllen ,
-points to a buffer for other protocol control-related messages or
-miscellaneous ancillary data.
-When
-.BR recvmsg ()
-is called,
-.I msg_controllen
-should contain the length of the available buffer in
-.IR msg_control ;
-upon return from a successful call it will contain the length
-of the control message sequence.
-.PP
-The messages are of the form:
-.PP
-.in +4n
-.EX
-struct cmsghdr {
- size_t cmsg_len; /* Data byte count, including header
- (type is socklen_t in POSIX) */
- int cmsg_level; /* Originating protocol */
- int cmsg_type; /* Protocol\-specific type */
-/* followed by
- unsigned char cmsg_data[]; */
-};
-.EE
-.in
-.PP
-Ancillary data should be accessed only by the macros defined in
-.BR cmsg (3).
-.PP
-As an example, Linux uses this ancillary data mechanism to pass extended
-errors, IP options, or file descriptors over UNIX domain sockets.
-For further information on the use of ancillary data in various
-socket domains, see
-.BR unix (7)
-and
-.BR ip (7).
-.PP
-The
-.I msg_flags
-field in the
-.I msghdr
-is set on return of
-.BR recvmsg ().
-It can contain several flags:
-.TP
-.B MSG_EOR
-indicates end-of-record; the data returned completed a record (generally
-used with sockets of type
-.BR SOCK_SEQPACKET ).
-.TP
-.B MSG_TRUNC
-indicates that the trailing portion of a datagram was discarded because the
-datagram was larger than the buffer supplied.
-.TP
-.B MSG_CTRUNC
-indicates that some control data was discarded due to lack of space in the
-buffer for ancillary data.
-.TP
-.B MSG_OOB
-is returned to indicate that expedited or out-of-band data was received.
-.TP
-.B MSG_ERRQUEUE
-indicates that no data was received but an extended error from the socket
-error queue.
-.SH RETURN VALUE
-These calls return the number of bytes received, or \-1
-if an error occurred.
-In the event of an error,
-.I errno
-is set to indicate the error.
-.PP
-When a stream socket peer has performed an orderly shutdown,
-the return value will be 0 (the traditional "end-of-file" return).
-.PP
-Datagram sockets in various domains (e.g., the UNIX and Internet domains)
-permit zero-length datagrams.
-When such a datagram is received, the return value is 0.
-.PP
-The value 0 may also be returned if the requested number of bytes
-to receive from a stream socket was 0.
-.SH ERRORS
-These are some standard errors generated by the socket layer.
-Additional errors
-may be generated and returned from the underlying protocol modules;
-see their manual pages.
-.TP
-.BR EAGAIN " or " EWOULDBLOCK
-.\" Actually EAGAIN on Linux
-The socket is marked nonblocking and the receive operation
-would block, or a receive timeout had been set and the timeout expired
-before data was received.
-POSIX.1 allows either error to be returned for this case,
-and does not require these constants to have the same value,
-so a portable application should check for both possibilities.
-.TP
-.B EBADF
-The argument
-.I sockfd
-is an invalid file descriptor.
-.TP
-.B ECONNREFUSED
-A remote host refused to allow the network connection (typically
-because it is not running the requested service).
-.TP
-.B EFAULT
-The receive buffer pointer(s) point outside the process's
-address space.
-.TP
-.B EINTR
-The receive was interrupted by delivery of a signal before
-any data was available; see
-.BR signal (7).
-.TP
-.B EINVAL
-Invalid argument passed.
-.\" e.g., msg_namelen < 0 for recvmsg() or addrlen < 0 for recvfrom()
-.TP
-.B ENOMEM
-Could not allocate memory for
-.BR recvmsg ().
-.TP
-.B ENOTCONN
-The socket is associated with a connection-oriented protocol
-and has not been connected (see
-.BR connect (2)
-and
-.BR accept (2)).
-.TP
-.B ENOTSOCK
-The file descriptor
-.I sockfd
-does not refer to a socket.
-.SH VERSIONS
-According to POSIX.1,
-.\" POSIX.1-2001, POSIX.1-2008
-the
-.I msg_controllen
-field of the
-.I msghdr
-structure should be typed as
-.IR socklen_t ,
-and the
-.I msg_iovlen
-field should be typed as
-.IR int ,
-but glibc currently types both as
-.IR size_t .
-.\" glibc bug for msg_controllen raised 12 Mar 2006
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=2448
-.\" The problem is an underlying kernel issue: the size of the
-.\" __kernel_size_t type used to type these fields varies
-.\" across architectures, but socklen_t is always 32 bits,
-.\" as (at least with GCC) is int.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001,
-4.4BSD (first appeared in 4.2BSD).
-.PP
-POSIX.1 describes only the
-.BR MSG_OOB ,
-.BR MSG_PEEK ,
-and
-.B MSG_WAITALL
-flags.
-.SH NOTES
-If a zero-length datagram is pending,
-.BR read (2)
-and
-.BR recv ()
-with a
-.I flags
-argument of zero provide different behavior.
-In this circumstance,
-.BR read (2)
-has no effect (the datagram remains pending), while
-.BR recv ()
-consumes the pending datagram.
-.PP
-See
-.BR recvmmsg (2)
-for information about a Linux-specific system call
-that can be used to receive multiple datagrams in a single call.
-.SH EXAMPLES
-An example of the use of
-.BR recvfrom ()
-is shown in
-.BR getaddrinfo (3).
-.SH SEE ALSO
-.BR fcntl (2),
-.BR getsockopt (2),
-.BR read (2),
-.BR recvmmsg (2),
-.BR select (2),
-.BR shutdown (2),
-.BR socket (2),
-.BR cmsg (3),
-.BR sockatmark (3),
-.BR ip (7),
-.BR ipv6 (7),
-.BR socket (7),
-.BR tcp (7),
-.BR udp (7),
-.BR unix (7)
diff --git a/man2/recvfrom.2 b/man2/recvfrom.2
deleted file mode 100644
index 13228c391..000000000
--- a/man2/recvfrom.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/recv.2
diff --git a/man2/recvmmsg.2 b/man2/recvmmsg.2
deleted file mode 100644
index 1cd76e526..000000000
--- a/man2/recvmmsg.2
+++ /dev/null
@@ -1,276 +0,0 @@
-.\" Copyright (C) 2011 by Andi Kleen <andi@firstfloor.org>
-.\" and Copyright (c) 2011 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Syscall added in following commit
-.\" commit a2e2725541fad72416326798c2d7fa4dafb7d337
-.\" Author: Arnaldo Carvalho de Melo <acme@redhat.com>
-.\" Date: Mon Oct 12 23:40:10 2009 -0700
-.\"
-.TH recvmmsg 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-recvmmsg \- receive multiple messages on a socket
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <sys/socket.h>
-.PP
-.BI "int recvmmsg(int " sockfd ", struct mmsghdr *" msgvec \
-", unsigned int " vlen ","
-.BI " int " flags ", struct timespec *" timeout ");"
-.fi
-.SH DESCRIPTION
-The
-.BR recvmmsg ()
-system call is an extension of
-.BR recvmsg (2)
-that allows the caller to receive multiple messages from a socket
-using a single system call.
-(This has performance benefits for some applications.)
-A further extension over
-.BR recvmsg (2)
-is support for a timeout on the receive operation.
-.PP
-The
-.I sockfd
-argument is the file descriptor of the socket to receive data from.
-.PP
-The
-.I msgvec
-argument is a pointer to an array of
-.I mmsghdr
-structures.
-The size of this array is specified in
-.IR vlen .
-.PP
-The
-.I mmsghdr
-structure is defined in
-.I <sys/socket.h>
-as:
-.PP
-.in +4n
-.EX
-struct mmsghdr {
- struct msghdr msg_hdr; /* Message header */
- unsigned int msg_len; /* Number of received bytes for header */
-};
-.EE
-.in
-.PP
-The
-.I msg_hdr
-field is a
-.I msghdr
-structure, as described in
-.BR recvmsg (2).
-The
-.I msg_len
-field is the number of bytes returned for the message in the entry.
-This field has the same value as the return value of a single
-.BR recvmsg (2)
-on the header.
-.PP
-The
-.I flags
-argument contains flags ORed together.
-The flags are the same as documented for
-.BR recvmsg (2),
-with the following addition:
-.TP
-.BR MSG_WAITFORONE " (since Linux 2.6.34)"
-Turns on
-.B MSG_DONTWAIT
-after the first message has been received.
-.PP
-The
-.I timeout
-argument points to a
-.I struct timespec
-(see
-.BR clock_gettime (2))
-defining a timeout (seconds plus nanoseconds) for the receive operation
-.RI ( "but see BUGS!" ).
-(This interval will be rounded up to the system clock granularity,
-and kernel scheduling delays mean that the blocking interval
-may overrun by a small amount.)
-If
-.I timeout
-is NULL, then the operation blocks indefinitely.
-.PP
-A blocking
-.BR recvmmsg ()
-call blocks until
-.I vlen
-messages have been received
-or until the timeout expires.
-A nonblocking call reads as many messages as are available
-(up to the limit specified by
-.IR vlen )
-and returns immediately.
-.PP
-On return from
-.BR recvmmsg (),
-successive elements of
-.I msgvec
-are updated to contain information about each received message:
-.I msg_len
-contains the size of the received message;
-the subfields of
-.I msg_hdr
-are updated as described in
-.BR recvmsg (2).
-The return value of the call indicates the number of elements of
-.I msgvec
-that have been updated.
-.SH RETURN VALUE
-On success,
-.BR recvmmsg ()
-returns the number of messages received in
-.IR msgvec ;
-on error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-Errors are as for
-.BR recvmsg (2).
-In addition, the following error can occur:
-.TP
-.B EINVAL
-.I timeout
-is invalid.
-.PP
-See also BUGS.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.33,
-glibc 2.12.
-.SH BUGS
-The
-.I timeout
-argument does not work as intended.
-.\" FIXME . https://bugzilla.kernel.org/show_bug.cgi?id=75371
-.\" http://thread.gmane.org/gmane.linux.man/5677
-The timeout is checked only after the receipt of each datagram,
-so that if up to
-.I vlen\-1
-datagrams are received before the timeout expires,
-but then no further datagrams are received, the call will block forever.
-.PP
-If an error occurs after at least one message has been received,
-the call succeeds, and returns the number of messages received.
-The error code is expected to be returned on a subsequent call to
-.BR recvmmsg ().
-In the current implementation, however, the error code can be overwritten
-in the meantime by an unrelated network event on a socket,
-for example an incoming ICMP packet.
-.SH EXAMPLES
-The following program uses
-.BR recvmmsg ()
-to receive multiple messages on a socket and stores
-them in multiple buffers.
-The call returns if all buffers are filled or if the
-timeout specified has expired.
-.PP
-The following snippet periodically generates UDP datagrams
-containing a random number:
-.PP
-.in +4n
-.EX
-.RB "$" " while true; do echo $RANDOM > /dev/udp/127.0.0.1/1234;"
-.B " sleep 0.25; done"
-.EE
-.in
-.PP
-These datagrams are read by the example application, which
-can give the following output:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out"
-5 messages received
-1 11782
-2 11345
-3 304
-4 13514
-5 28421
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (recvmmsg.c)
-.EX
-#define _GNU_SOURCE
-#include <arpa/inet.h>
-#include <netinet/in.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <time.h>
-\&
-int
-main(void)
-{
-#define VLEN 10
-#define BUFSIZE 200
-#define TIMEOUT 1
- int sockfd, retval;
- char bufs[VLEN][BUFSIZE+1];
- struct iovec iovecs[VLEN];
- struct mmsghdr msgs[VLEN];
- struct timespec timeout;
- struct sockaddr_in addr;
-\&
- sockfd = socket(AF_INET, SOCK_DGRAM, 0);
- if (sockfd == \-1) {
- perror("socket()");
- exit(EXIT_FAILURE);
- }
-\&
- addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
- addr.sin_port = htons(1234);
- if (bind(sockfd, (struct sockaddr *) &addr, sizeof(addr)) == \-1) {
- perror("bind()");
- exit(EXIT_FAILURE);
- }
-\&
- memset(msgs, 0, sizeof(msgs));
- for (size_t i = 0; i < VLEN; i++) {
- iovecs[i].iov_base = bufs[i];
- iovecs[i].iov_len = BUFSIZE;
- msgs[i].msg_hdr.msg_iov = &iovecs[i];
- msgs[i].msg_hdr.msg_iovlen = 1;
- }
-\&
- timeout.tv_sec = TIMEOUT;
- timeout.tv_nsec = 0;
-\&
- retval = recvmmsg(sockfd, msgs, VLEN, 0, &timeout);
- if (retval == \-1) {
- perror("recvmmsg()");
- exit(EXIT_FAILURE);
- }
-\&
- printf("%d messages received\en", retval);
- for (size_t i = 0; i < retval; i++) {
- bufs[i][msgs[i].msg_len] = 0;
- printf("%zu %s", i+1, bufs[i]);
- }
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR clock_gettime (2),
-.BR recvmsg (2),
-.BR sendmmsg (2),
-.BR sendmsg (2),
-.BR socket (2),
-.BR socket (7)
diff --git a/man2/recvmsg.2 b/man2/recvmsg.2
deleted file mode 100644
index 13228c391..000000000
--- a/man2/recvmsg.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/recv.2
diff --git a/man2/remap_file_pages.2 b/man2/remap_file_pages.2
deleted file mode 100644
index 8f9b5b394..000000000
--- a/man2/remap_file_pages.2
+++ /dev/null
@@ -1,170 +0,0 @@
-.\" Copyright (C) 2003, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2003-12-10 Initial creation, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" 2004-10-28 aeb, corrected prototype, prot must be 0
-.\"
-.TH remap_file_pages 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-remap_file_pages \- create a nonlinear file mapping
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <sys/mman.h>
-.PP
-.BI "[[deprecated]] int remap_file_pages(void " addr [. size "], size_t " size ,
-.BI " int " prot ", size_t " pgoff ", \
-int " flags );
-.fi
-.SH DESCRIPTION
-.BR Note :
-.\" commit 33041a0d76d3c3e0aff28ac95a2ffdedf1282dbc
-.\" http://lwn.net/Articles/597632/
-this system call was marked as deprecated starting with Linux 3.16.
-In Linux 4.0, the implementation was replaced
-.\" commit c8d78c1823f46519473949d33f0d1d33fe21ea16
-by a slower in-kernel emulation.
-Those few applications that use this system call should
-consider migrating to alternatives.
-This change was made because the kernel code for this system call was complex,
-and it is believed to be little used or perhaps even completely unused.
-While it had some use cases in database applications on 32-bit systems,
-those use cases don't exist on 64-bit systems.
-.PP
-The
-.BR remap_file_pages ()
-system call is used to create a nonlinear mapping, that is, a mapping
-in which the pages of the file are mapped into a nonsequential order
-in memory.
-The advantage of using
-.BR remap_file_pages ()
-over using repeated calls to
-.BR mmap (2)
-is that the former approach does not require the kernel to create
-additional VMA (Virtual Memory Area) data structures.
-.PP
-To create a nonlinear mapping we perform the following steps:
-.TP 3
-1.
-Use
-.BR mmap (2)
-to create a mapping (which is initially linear).
-This mapping must be created with the
-.B MAP_SHARED
-flag.
-.TP
-2.
-Use one or more calls to
-.BR remap_file_pages ()
-to rearrange the correspondence between the pages of the mapping
-and the pages of the file.
-It is possible to map the same page of a file
-into multiple locations within the mapped region.
-.PP
-The
-.I pgoff
-and
-.I size
-arguments specify the region of the file that is to be relocated
-within the mapping:
-.I pgoff
-is a file offset in units of the system page size;
-.I size
-is the length of the region in bytes.
-.PP
-The
-.I addr
-argument serves two purposes.
-First, it identifies the mapping whose pages we want to rearrange.
-Thus,
-.I addr
-must be an address that falls within
-a region previously mapped by a call to
-.BR mmap (2).
-Second,
-.I addr
-specifies the address at which the file pages
-identified by
-.I pgoff
-and
-.I size
-will be placed.
-.PP
-The values specified in
-.I addr
-and
-.I size
-should be multiples of the system page size.
-If they are not, then the kernel rounds
-.I both
-values
-.I down
-to the nearest multiple of the page size.
-.\" This rounding is weird, and not consistent with the treatment of
-.\" the analogous arguments for munmap()/mprotect() and for mlock().
-.\" MTK, 14 Sep 2005
-.PP
-The
-.I prot
-argument must be specified as 0.
-.PP
-The
-.I flags
-argument has the same meaning as for
-.BR mmap (2),
-but all flags other than
-.B MAP_NONBLOCK
-are ignored.
-.SH RETURN VALUE
-On success,
-.BR remap_file_pages ()
-returns 0.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I addr
-does not refer to a valid mapping
-created with the
-.B MAP_SHARED
-flag.
-.TP
-.B EINVAL
-.IR addr ,
-.IR size ,
-.IR prot ,
-or
-.I pgoff
-is invalid.
-.\" And possibly others from vma->vm_ops->populate()
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.5.46,
-glibc 2.3.3.
-.SH NOTES
-Since Linux 2.6.23,
-.\" commit 3ee6dafc677a68e461a7ddafc94a580ebab80735
-.BR remap_file_pages ()
-creates non-linear mappings only
-on in-memory filesystems such as
-.BR tmpfs (5),
-hugetlbfs or ramfs.
-On filesystems with a backing store,
-.BR remap_file_pages ()
-is not much more efficient than using
-.BR mmap (2)
-to adjust which parts of the file are mapped to which addresses.
-.SH SEE ALSO
-.BR getpagesize (2),
-.BR mmap (2),
-.BR mmap2 (2),
-.BR mprotect (2),
-.BR mremap (2),
-.BR msync (2)
diff --git a/man2/removexattr.2 b/man2/removexattr.2
deleted file mode 100644
index e51ed935f..000000000
--- a/man2/removexattr.2
+++ /dev/null
@@ -1,100 +0,0 @@
-.\" Copyright (C) Andreas Gruenbacher, February 2001
-.\" Copyright (C) Silicon Graphics Inc, September 2001
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH removexattr 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-removexattr, lremovexattr, fremovexattr \- remove an extended attribute
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/xattr.h>
-.PP
-.BI "int removexattr(const char *" path ", const char *" name );
-.BI "int lremovexattr(const char *" path ", const char *" name );
-.BI "int fremovexattr(int " fd ", const char *" name );
-.fi
-.SH DESCRIPTION
-Extended attributes are
-.IR name : value
-pairs associated with inodes (files, directories, symbolic links, etc.).
-They are extensions to the normal attributes which are associated
-with all inodes in the system (i.e., the
-.BR stat (2)
-data).
-A complete overview of extended attributes concepts can be found in
-.BR xattr (7).
-.PP
-.BR removexattr ()
-removes the extended attribute identified by
-.I name
-and associated with the given
-.I path
-in the filesystem.
-.PP
-.BR lremovexattr ()
-is identical to
-.BR removexattr (),
-except in the case of a symbolic link, where the extended attribute is
-removed from the link itself, not the file that it refers to.
-.PP
-.BR fremovexattr ()
-is identical to
-.BR removexattr (),
-only the extended attribute is removed from the open file referred to by
-.I fd
-(as returned by
-.BR open (2))
-in place of
-.IR path .
-.PP
-An extended attribute name is a null-terminated string.
-The
-.I name
-includes a namespace prefix; there may be several, disjoint
-namespaces associated with an individual inode.
-.SH RETURN VALUE
-On success, zero is returned.
-On failure, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B ENODATA
-The named attribute does not exist.
-.\" .RB ( ENOATTR
-.\" is defined to be a synonym for
-.\" .BR ENODATA
-.\" in
-.\" .IR <attr/attributes.h> .)
-.TP
-.B ENOTSUP
-Extended attributes are not supported by the filesystem, or are disabled.
-.PP
-In addition, the errors documented in
-.BR stat (2)
-can also occur.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.4,
-glibc 2.3.
-.\" .SH AUTHORS
-.\" Andreas Gruenbacher,
-.\" .RI < a.gruenbacher@computer.org >
-.\" and the SGI XFS development team,
-.\" .RI < linux-xfs@oss.sgi.com >.
-.\" Please send any bug reports or comments to these addresses.
-.SH SEE ALSO
-.BR getfattr (1),
-.BR setfattr (1),
-.BR getxattr (2),
-.BR listxattr (2),
-.BR open (2),
-.BR setxattr (2),
-.BR stat (2),
-.BR symlink (7),
-.BR xattr (7)
diff --git a/man2/rename.2 b/man2/rename.2
deleted file mode 100644
index 1391e2023..000000000
--- a/man2/rename.2
+++ /dev/null
@@ -1,549 +0,0 @@
-.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\" and Copyright (C) 1993 Michael Haardt;
-.\" and Copyright (C) 1993,1995 Ian Jackson
-.\" and Copyright (C) 2006, 2014 Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 00:35:52 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Thu Jun 4 12:21:13 1998 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified Thu Mar 3 09:49:35 2005 by Michael Haardt <michael@moria.de>
-.\" 2007-03-25, mtk, added various text to DESCRIPTION.
-.\"
-.TH rename 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-rename, renameat, renameat2 \- change the name or location of a file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "int rename(const char *" oldpath ", const char *" newpath );
-.PP
-.BR "#include <fcntl.h> " "/* Definition of " AT_* " constants */"
-.B #include <stdio.h>
-.PP
-.BI "int renameat(int " olddirfd ", const char *" oldpath ,
-.BI " int " newdirfd ", const char *" newpath );
-.BI "int renameat2(int " olddirfd ", const char *" oldpath ,
-.BI " int " newdirfd ", const char *" newpath \
-", unsigned int " flags );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.nf
-.BR renameat ():
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _ATFILE_SOURCE
-.PP
-.BR renameat2 ():
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-.BR rename ()
-renames a file, moving it between directories if required.
-Any other hard links to the file (as created using
-.BR link (2))
-are unaffected.
-Open file descriptors for
-.I oldpath
-are also unaffected.
-.PP
-Various restrictions determine whether or not the rename operation succeeds:
-see ERRORS below.
-.PP
-If
-.I newpath
-already exists, it will be atomically replaced, so that there is
-no point at which another process attempting to access
-.I newpath
-will find it missing.
-However, there will probably be a window in which both
-.I oldpath
-and
-.I newpath
-refer to the file being renamed.
-.PP
-If
-.I oldpath
-and
-.I newpath
-are existing hard links referring to the same file, then
-.BR rename ()
-does nothing, and returns a success status.
-.PP
-If
-.I newpath
-exists but the operation fails for some reason,
-.BR rename ()
-guarantees to leave an instance of
-.I newpath
-in place.
-.PP
-.I oldpath
-can specify a directory.
-In this case,
-.I newpath
-must either not exist, or it must specify an empty directory.
-.PP
-If
-.I oldpath
-refers to a symbolic link, the link is renamed; if
-.I newpath
-refers to a symbolic link, the link will be overwritten.
-.SS renameat()
-The
-.BR renameat ()
-system call operates in exactly the same way as
-.BR rename (),
-except for the differences described here.
-.PP
-If the pathname given in
-.I oldpath
-is relative, then it is interpreted relative to the directory
-referred to by the file descriptor
-.I olddirfd
-(rather than relative to the current working directory of
-the calling process, as is done by
-.BR rename ()
-for a relative pathname).
-.PP
-If
-.I oldpath
-is relative and
-.I olddirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I oldpath
-is interpreted relative to the current working
-directory of the calling process (like
-.BR rename ()).
-.PP
-If
-.I oldpath
-is absolute, then
-.I olddirfd
-is ignored.
-.PP
-The interpretation of
-.I newpath
-is as for
-.IR oldpath ,
-except that a relative pathname is interpreted relative
-to the directory referred to by the file descriptor
-.IR newdirfd .
-.PP
-See
-.BR openat (2)
-for an explanation of the need for
-.BR renameat ().
-.SS renameat2()
-.BR renameat2 ()
-has an additional
-.I flags
-argument.
-A
-.BR renameat2 ()
-call with a zero
-.I flags
-argument is equivalent to
-.BR renameat ().
-.PP
-The
-.I flags
-argument is a bit mask consisting of zero or more of the following flags:
-.TP
-.B RENAME_EXCHANGE
-Atomically exchange
-.I oldpath
-and
-.IR newpath .
-Both pathnames must exist
-but may be of different types (e.g., one could be a non-empty directory
-and the other a symbolic link).
-.TP
-.B RENAME_NOREPLACE
-Don't overwrite
-.I newpath
-of the rename.
-Return an error if
-.I newpath
-already exists.
-.IP
-.B RENAME_NOREPLACE
-can't be employed together with
-.BR RENAME_EXCHANGE .
-.IP
-.B RENAME_NOREPLACE
-requires support from the underlying filesystem.
-Support for various filesystems was added as follows:
-.RS
-.IP \[bu] 3
-ext4 (Linux 3.15);
-.\" ext4: commit 0a7c3937a1f23f8cb5fc77ae01661e9968a51d0c
-.IP \[bu]
-btrfs, tmpfs, and cifs (Linux 3.17);
-.IP \[bu]
-xfs (Linux 4.0);
-.\" btrfs: commit 80ace85c915d0f41016f82917218997b72431258
-.\" tmpfs: commit 3b69ff51d087d265aa4af3a532fc4f20bf33e718
-.\" cifs: commit 7c33d5972ce382bcc506d16235f1e9b7d22cbef8
-.\"
-.\" gfs2 in Linux 4.2?
-.IP \[bu]
-Support for many other filesystems was added in Linux 4.9, including
-ext2, minix, reiserfs, jfs, vfat, and bpf.
-.\" Also affs, bfs, exofs, hfs, hfsplus, jffs2, logfs, msdos,
-.\" nilfs2, omfs, sysvfs, ubifs, udf, ufs
-.\" hugetlbfs, ramfs
-.\" local filesystems: commit f03b8ad8d38634d13e802165cc15917481b47835
-.\" libfs: commit e0e0be8a835520e2f7c89f214dfda570922a1b90
-.RE
-.TP
-.BR RENAME_WHITEOUT " (since Linux 3.18)"
-.\" commit 0d7a855526dd672e114aff2ac22b60fc6f155b08
-.\" commit 787fb6bc9682ec7c05fb5d9561b57100fbc1cc41
-This operation makes sense only for overlay/union
-filesystem implementations.
-.IP
-Specifying
-.B RENAME_WHITEOUT
-creates a "whiteout" object at the source of
-the rename at the same time as performing the rename.
-The whole operation is atomic,
-so that if the rename succeeds then the whiteout will also have been created.
-.IP
-A "whiteout" is an object that has special meaning in union/overlay
-filesystem constructs.
-In these constructs,
-multiple layers exist and only the top one is ever modified.
-A whiteout on an upper layer will effectively hide a
-matching file in the lower layer,
-making it appear as if the file didn't exist.
-.IP
-When a file that exists on the lower layer is renamed,
-the file is first copied up (if not already on the upper layer)
-and then renamed on the upper, read-write layer.
-At the same time, the source file needs to be "whiteouted"
-(so that the version of the source file in the lower layer
-is rendered invisible).
-The whole operation needs to be done atomically.
-.IP
-When not part of a union/overlay,
-the whiteout appears as a character device with a {0,0} device number.
-.\" https://www.freebsd.org/cgi/man.cgi?query=mount_unionfs&manpath=FreeBSD+11.0-RELEASE
-(Note that other union/overlay implementations may employ different methods
-for storing whiteout entries; specifically, BSD union mount employs
-a separate inode type,
-.BR DT_WHT ,
-which, while supported by some filesystems available in Linux,
-such as CODA and XFS, is ignored by the kernel's whiteout support code,
-as of Linux 4.19, at least.)
-.IP
-.B RENAME_WHITEOUT
-requires the same privileges as creating a device node (i.e., the
-.B CAP_MKNOD
-capability).
-.IP
-.B RENAME_WHITEOUT
-can't be employed together with
-.BR RENAME_EXCHANGE .
-.IP
-.B RENAME_WHITEOUT
-requires support from the underlying filesystem.
-Among the filesystems that support it are
-tmpfs (since Linux 3.18),
-.\" tmpfs: commit 46fdb794e3f52ef18b859ebc92f0a9d7db21c5df
-ext4 (since Linux 3.18),
-.\" ext4: commit cd808deced431b66b5fa4e5c193cb7ec0059eaff
-XFS (since Linux 4.1),
-.\" XFS: commit 7dcf5c3e4527cfa2807567b00387cf2ed5e07f00
-f2fs (since Linux 4.2),
-.\" f2fs: commit 7e01e7ad746bc8198a8b46163ddc73a1c7d22339
-btrfs (since Linux 4.7),
-.\" btrfs: commit cdd1fedf8261cd7a73c0596298902ff4f0f04492
-and ubifs (since Linux 4.9).
-.\" ubifs: commit 9e0a1fff8db56eaaebb74b4a3ef65f86811c4798
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-Write permission is denied for the directory containing
-.I oldpath
-or
-.IR newpath ,
-or, search permission is denied for one of the directories
-in the path prefix of
-.I oldpath
-or
-.IR newpath ,
-or
-.I oldpath
-is a directory and does not allow write permission (needed to update
-the
-.I ..
-entry).
-(See also
-.BR path_resolution (7).)
-.TP
-.B EBUSY
-The rename fails because
-.IR oldpath " or " newpath
-is a directory that is in use by some process (perhaps as
-current working directory, or as root directory, or because
-it was open for reading) or is in use by the system
-(for example as a mount point), while the system considers
-this an error.
-(Note that there is no requirement to return
-.B EBUSY
-in such
-cases\[em]there is nothing wrong with doing the rename anyway\[em]but
-it is allowed to return
-.B EBUSY
-if the system cannot otherwise
-handle such situations.)
-.TP
-.B EDQUOT
-The user's quota of disk blocks on the filesystem has been exhausted.
-.TP
-.B EFAULT
-.IR oldpath " or " newpath " points outside your accessible address space."
-.TP
-.B EINVAL
-The new pathname contained a path prefix of the old, or, more generally,
-an attempt was made to make a directory a subdirectory of itself.
-.TP
-.B EISDIR
-.I newpath
-is an existing directory, but
-.I oldpath
-is not a directory.
-.TP
-.B ELOOP
-Too many symbolic links were encountered in resolving
-.IR oldpath " or " newpath .
-.TP
-.B EMLINK
-.I oldpath
-already has the maximum number of links to it, or
-it was a directory and the directory containing
-.I newpath
-has the maximum number of links.
-.TP
-.B ENAMETOOLONG
-.IR oldpath " or " newpath " was too long."
-.TP
-.B ENOENT
-The link named by
-.I oldpath
-does not exist;
-or, a directory component in
-.I newpath
-does not exist;
-or,
-.I oldpath
-or
-.I newpath
-is an empty string.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOSPC
-The device containing the file has no room for the new directory
-entry.
-.TP
-.B ENOTDIR
-A component used as a directory in
-.IR oldpath " or " newpath
-is not, in fact, a directory.
-Or,
-.I oldpath
-is a directory, and
-.I newpath
-exists but is not a directory.
-.TP
-.BR ENOTEMPTY " or " EEXIST
-.I newpath
-is a nonempty directory, that is, contains entries other than "." and "..".
-.TP
-.BR EPERM " or " EACCES
-The directory containing
-.I oldpath
-has the sticky bit
-.RB ( S_ISVTX )
-set and the process's effective user ID is neither
-the user ID of the file to be deleted nor that of the directory
-containing it, and the process is not privileged
-(Linux: does not have the
-.B CAP_FOWNER
-capability);
-or
-.I newpath
-is an existing file and the directory containing it has the sticky bit set
-and the process's effective user ID is neither the user ID of the file
-to be replaced nor that of the directory containing it,
-and the process is not privileged
-(Linux: does not have the
-.B CAP_FOWNER
-capability);
-or the filesystem containing
-.I oldpath
-does not support renaming of the type requested.
-.TP
-.B EROFS
-The file is on a read-only filesystem.
-.TP
-.B EXDEV
-.IR oldpath " and " newpath
-are not on the same mounted filesystem.
-(Linux permits a filesystem to be mounted at multiple points, but
-.BR rename ()
-does not work across different mount points,
-even if the same filesystem is mounted on both.)
-.PP
-The following additional errors can occur for
-.BR renameat ()
-and
-.BR renameat2 ():
-.TP
-.B EBADF
-.I oldpath
-.RI ( newpath )
-is relative but
-.I olddirfd
-.RI ( newdirfd )
-is not a valid file descriptor.
-.TP
-.B ENOTDIR
-.I oldpath
-is relative and
-.I olddirfd
-is a file descriptor referring to a file other than a directory;
-or similar for
-.I newpath
-and
-.I newdirfd
-.PP
-The following additional errors can occur for
-.BR renameat2 ():
-.TP
-.B EEXIST
-.I flags
-contains
-.B RENAME_NOREPLACE
-and
-.I newpath
-already exists.
-.TP
-.B EINVAL
-An invalid flag was specified in
-.IR flags .
-.TP
-.B EINVAL
-Both
-.B RENAME_NOREPLACE
-and
-.B RENAME_EXCHANGE
-were specified in
-.IR flags .
-.TP
-.B EINVAL
-Both
-.B RENAME_WHITEOUT
-and
-.B RENAME_EXCHANGE
-were specified in
-.IR flags .
-.TP
-.B EINVAL
-The filesystem does not support one of the flags in
-.IR flags .
-.TP
-.B ENOENT
-.I flags
-contains
-.B RENAME_EXCHANGE
-and
-.I newpath
-does not exist.
-.TP
-.B EPERM
-.B RENAME_WHITEOUT
-was specified in
-.IR flags ,
-but the caller does not have the
-.B CAP_MKNOD
-capability.
-.SH STANDARDS
-.TP
-.BR rename ()
-C11, POSIX.1-2008.
-.TP
-.BR renameat ()
-POSIX.1-2008.
-.TP
-.BR renameat2 ()
-Linux.
-.SH HISTORY
-.TP
-.BR rename ()
-4.3BSD, C89, POSIX.1-2001.
-.TP
-.BR renameat ()
-Linux 2.6.16,
-glibc 2.4.
-.TP
-.BR renameat2 ()
-Linux 3.15,
-glibc 2.28.
-.SS glibc notes
-On older kernels where
-.BR renameat ()
-is unavailable, the glibc wrapper function falls back to the use of
-.BR rename ().
-When
-.I oldpath
-and
-.I newpath
-are relative pathnames,
-glibc constructs pathnames based on the symbolic links in
-.I /proc/self/fd
-that correspond to the
-.I olddirfd
-and
-.I newdirfd
-arguments.
-.SH BUGS
-On NFS filesystems, you can not assume that if the operation
-failed, the file was not renamed.
-If the server does the rename operation
-and then crashes, the retransmitted RPC which will be processed when the
-server is up again causes a failure.
-The application is expected to
-deal with this.
-See
-.BR link (2)
-for a similar problem.
-.SH SEE ALSO
-.BR mv (1),
-.BR rename (1),
-.BR chmod (2),
-.BR link (2),
-.BR symlink (2),
-.BR unlink (2),
-.BR path_resolution (7),
-.BR symlink (7)
diff --git a/man2/renameat.2 b/man2/renameat.2
deleted file mode 100644
index 9b74442c8..000000000
--- a/man2/renameat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/rename.2
diff --git a/man2/renameat2.2 b/man2/renameat2.2
deleted file mode 100644
index 9b74442c8..000000000
--- a/man2/renameat2.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/rename.2
diff --git a/man2/request_key.2 b/man2/request_key.2
deleted file mode 100644
index e090f647d..000000000
--- a/man2/request_key.2
+++ /dev/null
@@ -1,562 +0,0 @@
-.\" Copyright (C) 2006 Red Hat, Inc. All Rights Reserved.
-.\" Written by David Howells (dhowells@redhat.com)
-.\" and Copyright (C) 2016 Michael Kerrisk <mtk.man-pages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH request_key 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-request_key \- request a key from the kernel's key management facility
-.SH LIBRARY
-Linux Key Management Utilities
-.RI ( libkeyutils ", " \-lkeyutils )
-.SH SYNOPSIS
-.nf
-.B #include <keyutils.h>
-.PP
-.BI "key_serial_t request_key(const char *" type ", const char *" description ,
-.BI " const char *_Nullable " callout_info ,
-.BI " key_serial_t " dest_keyring );
-.fi
-.SH DESCRIPTION
-.BR request_key ()
-attempts to find a key of the given
-.I type
-with a description (name) that matches the specified
-.IR description .
-If such a key could not be found, then the key is optionally created.
-If the key is found or created,
-.BR request_key ()
-attaches it to the keyring whose ID is specified in
-.I dest_keyring
-and returns the key's serial number.
-.PP
-.BR request_key ()
-first recursively searches for a matching key in all of the keyrings
-attached to the calling process.
-The keyrings are searched in the order: thread-specific keyring,
-process-specific keyring, and then session keyring.
-.PP
-If
-.BR request_key ()
-is called from a program invoked by
-.BR request_key ()
-on behalf of some other process to generate a key, then the keyrings of that
-other process will be searched next,
-using that other process's user ID, group ID,
-supplementary group IDs, and security context to determine access.
-.\" David Howells: we can then have an arbitrarily long sequence
-.\" of "recursive" request-key upcalls. There is no limit, other
-.\" than number of PIDs, etc.
-.PP
-The search of the keyring tree is breadth-first:
-the keys in each keyring searched are checked for a match before any child
-keyrings are recursed into.
-Only keys for which the caller has
-.I search
-permission be found, and only keyrings for which the caller has
-.I search
-permission may be searched.
-.PP
-If the key is not found and
-.I callout
-is NULL, then the call fails with the error
-.BR ENOKEY .
-.PP
-If the key is not found and
-.I callout
-is not NULL, then the kernel attempts to invoke a user-space
-program to instantiate the key.
-The details are given below.
-.PP
-The
-.I dest_keyring
-serial number may be that of a valid keyring for which the caller has
-.I write
-permission, or it may be one of the following special keyring IDs:
-.TP
-.B KEY_SPEC_THREAD_KEYRING
-This specifies the caller's thread-specific keyring (see
-.BR thread\-keyring (7)).
-.TP
-.B KEY_SPEC_PROCESS_KEYRING
-This specifies the caller's process-specific keyring (see
-.BR process\-keyring (7)).
-.TP
-.B KEY_SPEC_SESSION_KEYRING
-This specifies the caller's session-specific keyring (see
-.BR session\-keyring (7)).
-.TP
-.B KEY_SPEC_USER_KEYRING
-This specifies the caller's UID-specific keyring (see
-.BR user\-keyring (7)).
-.TP
-.B KEY_SPEC_USER_SESSION_KEYRING
-This specifies the caller's UID-session keyring (see
-.BR user\-session\-keyring (7)).
-.PP
-When the
-.I dest_keyring
-is specified as 0
-and no key construction has been performed,
-then no additional linking is done.
-.PP
-Otherwise, if
-.I dest_keyring
-is 0 and a new key is constructed, the new key will be linked
-to the "default" keyring.
-More precisely, when the kernel tries to determine to which keyring the
-newly constructed key should be linked,
-it tries the following keyrings,
-beginning with the keyring set via the
-.BR keyctl (2)
-.B KEYCTL_SET_REQKEY_KEYRING
-operation and continuing in the order shown below
-until it finds the first keyring that exists:
-.IP \[bu] 3
-.\" 8bbf4976b59fc9fc2861e79cab7beb3f6d647640
-The requestor keyring
-.RB ( KEY_REQKEY_DEFL_REQUESTOR_KEYRING ,
-since Linux 2.6.29).
-.\" FIXME
-.\" Actually, is the preceding point correct?
-.\" If I understand correctly, we'll only get here if
-.\" 'dest_keyring' is zero, in which case KEY_REQKEY_DEFL_REQUESTOR_KEYRING
-.\" won't refer to a keyring. Have I misunderstood?
-.IP \[bu]
-The thread-specific keyring
-.RB ( KEY_REQKEY_DEFL_THREAD_KEYRING ;
-see
-.BR thread\-keyring (7)).
-.IP \[bu]
-The process-specific keyring
-.RB ( KEY_REQKEY_DEFL_PROCESS_KEYRING ;
-see
-.BR process\-keyring (7)).
-.IP \[bu]
-The session-specific keyring
-.RB ( KEY_REQKEY_DEFL_SESSION_KEYRING ;
-see
-.BR session\-keyring (7)).
-.IP \[bu]
-The session keyring for the process's user ID
-.RB ( KEY_REQKEY_DEFL_USER_SESSION_KEYRING ;
-see
-.BR user\-session\-keyring (7)).
-This keyring is expected to always exist.
-.IP \[bu]
-The UID-specific keyring
-.RB ( KEY_REQKEY_DEFL_USER_KEYRING ;
-see
-.BR user\-keyring (7)).
-This keyring is also expected to always exist.
-.\" mtk: Are there circumstances where the user sessions and UID-specific
-.\" keyrings do not exist?
-.\"
-.\" David Howells:
-.\" The uid keyrings don't exist until someone tries to access them -
-.\" at which point they're both created. When you log in, pam_keyinit
-.\" creates a link to your user keyring in the session keyring it just
-.\" created, thereby creating the user and user-session keyrings.
-.\"
-.\" and David elaborated that "access" means:
-.\"
-.\" It means lookup_user_key() was passed KEY_LOOKUP_CREATE. So:
-.\"
-.\" add_key() - destination keyring
-.\" request_key() - destination keyring
-.\" KEYCTL_GET_KEYRING_ID - if create arg is true
-.\" KEYCTL_CLEAR
-.\" KEYCTL_LINK - both args
-.\" KEYCTL_SEARCH - destination keyring
-.\" KEYCTL_CHOWN
-.\" KEYCTL_SETPERM
-.\" KEYCTL_SET_TIMEOUT
-.\" KEYCTL_INSTANTIATE - destination keyring
-.\" KEYCTL_INSTANTIATE_IOV - destination keyring
-.\" KEYCTL_NEGATE - destination keyring
-.\" KEYCTL_REJECT - destination keyring
-.\" KEYCTL_GET_PERSISTENT - destination keyring
-.\"
-.\" will all create a keyring under some circumstances. Whereas the rest,
-.\" such as KEYCTL_GET_SECURITY, KEYCTL_READ and KEYCTL_REVOKE, won't.
-.PP
-If the
-.BR keyctl (2)
-.B KEYCTL_SET_REQKEY_KEYRING
-operation specifies
-.B KEY_REQKEY_DEFL_DEFAULT
-(or no
-.B KEYCTL_SET_REQKEY_KEYRING
-operation is performed),
-then the kernel looks for a keyring
-starting from the beginning of the list.
-.\"
-.SS Requesting user-space instantiation of a key
-If the kernel cannot find a key matching
-.I type
-and
-.IR description ,
-and
-.I callout
-is not NULL, then the kernel attempts to invoke a user-space
-program to instantiate a key with the given
-.I type
-and
-.IR description .
-In this case, the following steps are performed:
-.IP (1) 5
-The kernel creates an uninstantiated key, U, with the requested
-.I type
-and
-.IR description .
-.IP (2)
-The kernel creates an authorization key, V,
-.\" struct request_key_auth, defined in security/keys/internal.h
-that refers to the key U and records the facts that the caller of
-.BR request_key ()
-is:
-.RS
-.IP (2.1) 7
-the context in which the key U should be instantiated and secured, and
-.IP (2.2)
-the context from which associated key requests may be satisfied.
-.RE
-.IP
-The authorization key is constructed as follows:
-.RS
-.IP \[bu] 3
-The key type is
-.IR """.request_key_auth""" .
-.IP \[bu]
-The key's UID and GID are the same as the corresponding filesystem IDs
-of the requesting process.
-.IP \[bu]
-The key grants
-.IR view ,
-.IR read ,
-and
-.I search
-permissions to the key possessor as well as
-.I view
-permission for the key user.
-.IP \[bu]
-The description (name) of the key is the hexadecimal
-string representing the ID of the key that is to be instantiated
-in the requesting program.
-.IP \[bu]
-The payload of the key is taken from the data specified in
-.IR callout_info .
-.IP \[bu]
-Internally, the kernel also records the PID of the process that called
-.BR request_key ().
-.RE
-.IP (3)
-The kernel creates a process that executes a user-space service such as
-.BR request\-key (8)
-with a new session keyring that contains a link to the authorization key, V.
-.\" The request\-key(8) program can be invoked in circumstances *other* than
-.\" when triggered by request_key(2). For example, upcalls from places such
-.\" as the DNS resolver.
-.IP
-This program is supplied with the following command-line arguments:
-.RS
-.IP [0] 5
-The string
-.IR """/sbin/request\-key""" .
-.IP [1]
-The string
-.I """create"""
-(indicating that a key is to be created).
-.IP [2]
-The ID of the key that is to be instantiated.
-.IP [3]
-The filesystem UID of the caller of
-.BR request_key ().
-.IP [4]
-The filesystem GID of the caller of
-.BR request_key ().
-.IP [5]
-The ID of the thread keyring of the caller of
-.BR request_key ().
-This may be zero if that keyring hasn't been created.
-.IP [6]
-The ID of the process keyring of the caller of
-.BR request_key ().
-This may be zero if that keyring hasn't been created.
-.IP [7]
-The ID of the session keyring of the caller of
-.BR request_key ().
-.RE
-.IP
-.IR Note :
-each of the command-line arguments that is a key ID is encoded in
-.I decimal
-(unlike the key IDs shown in
-.IR /proc/keys ,
-which are shown as hexadecimal values).
-.IP (4)
-The program spawned in the previous step:
-.RS
-.IP \[bu] 3
-Assumes the authority to instantiate the key U using the
-.BR keyctl (2)
-.B KEYCTL_ASSUME_AUTHORITY
-operation (typically via the
-.BR keyctl_assume_authority (3)
-function).
-.IP \[bu]
-Obtains the callout data from the payload of the authorization key V
-(using the
-.BR keyctl (2)
-.B KEYCTL_READ
-operation (or, more commonly, the
-.BR keyctl_read (3)
-function) with a key ID value of
-.BR KEY_SPEC_REQKEY_AUTH_KEY ).
-.IP \[bu]
-Instantiates the key
-(or execs another program that performs that task),
-specifying the payload and destination keyring.
-(The destination keyring that the requestor specified when calling
-.BR request_key ()
-can be accessed using the special key ID
-.BR KEY_SPEC_REQUESTOR_KEYRING .)
-.\" Should an instantiating program be using KEY_SPEC_REQUESTOR_KEYRING?
-.\" I couldn't find a use in the keyutils git repo.
-.\" According to David Howells:
-.\" * This feature is provided, but not used at the moment.
-.\" * A key added to that ring is then owned by the requester
-Instantiation is performed using the
-.BR keyctl (2)
-.B KEYCTL_INSTANTIATE
-operation (or, more commonly, the
-.BR keyctl_instantiate (3)
-function).
-At this point, the
-.BR request_key ()
-call completes, and the requesting program can continue execution.
-.RE
-.PP
-If these steps are unsuccessful, then an
-.B ENOKEY
-error will be returned to the caller of
-.BR request_key ()
-and a temporary, negatively instantiated key will be installed
-in the keyring specified by
-.IR dest_keyring .
-This will expire after a few seconds, but will cause subsequent calls to
-.BR request_key ()
-to fail until it does.
-The purpose of this negatively instantiated key is to prevent
-(possibly different) processes making repeated requests
-(that require expensive
-.BR request\-key (8)
-upcalls) for a key that can't (at the moment) be positively instantiated.
-.PP
-Once the key has been instantiated, the authorization key
-.RB ( KEY_SPEC_REQKEY_AUTH_KEY )
-is revoked, and the destination keyring
-.RB ( KEY_SPEC_REQUESTOR_KEYRING )
-is no longer accessible from the
-.BR request\-key (8)
-program.
-.PP
-If a key is created, then\[em]regardless of whether it is a valid key or
-a negatively instantiated key\[em]it will displace any other key with
-the same type and description from the keyring specified in
-.IR dest_keyring .
-.SH RETURN VALUE
-On success,
-.BR request_key ()
-returns the serial number of the key it found or caused to be created.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-The keyring wasn't available for modification by the user.
-.TP
-.B EDQUOT
-The key quota for this user would be exceeded by creating this key or linking
-it to the keyring.
-.TP
-.B EFAULT
-One of
-.IR type ,
-.IR description ,
-or
-.I callout_info
-points outside the process's accessible address space.
-.TP
-.B EINTR
-The request was interrupted by a signal; see
-.BR signal (7).
-.TP
-.B EINVAL
-The size of the string (including the terminating null byte) specified in
-.I type
-or
-.I description
-exceeded the limit (32 bytes and 4096 bytes respectively).
-.TP
-.B EINVAL
-The size of the string (including the terminating null byte) specified in
-.I callout_info
-exceeded the system page size.
-.TP
-.B EKEYEXPIRED
-An expired key was found, but no replacement could be obtained.
-.TP
-.B EKEYREJECTED
-The attempt to generate a new key was rejected.
-.TP
-.B EKEYREVOKED
-A revoked key was found, but no replacement could be obtained.
-.TP
-.B ENOKEY
-No matching key was found.
-.TP
-.B ENOMEM
-Insufficient memory to create a key.
-.TP
-.B EPERM
-The
-.I type
-argument started with a period (\[aq].\[aq]).
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.10.
-.PP
-The ability to instantiate keys upon request was added
-.\" commit 3e30148c3d524a9c1c63ca28261bc24c457eb07a
-in Linux 2.6.13.
-.SH EXAMPLES
-The program below demonstrates the use of
-.BR request_key ().
-The
-.IR type ,
-.IR description ,
-and
-.I callout_info
-arguments for the system call are taken from the values
-supplied in the command-line arguments.
-The call specifies the session keyring as the target keyring.
-.PP
-In order to demonstrate this program,
-we first create a suitable entry in the file
-.IR /etc/request\-key.conf .
-.PP
-.in +4n
-.EX
-$ sudo sh
-# \fBecho \[aq]create user mtk:* * /bin/keyctl instantiate %k %c %S\[aq] \e\fP
- \fB> /etc/request\-key.conf\fP
-# \fBexit\fP
-.EE
-.in
-.PP
-This entry specifies that when a new "user" key with the prefix
-"mtk:" must be instantiated, that task should be performed via the
-.BR keyctl (1)
-command's
-.B instantiate
-operation.
-The arguments supplied to the
-.B instantiate
-operation are:
-the ID of the uninstantiated key
-.RI ( %k );
-the callout data supplied to the
-.BR request_key ()
-call
-.RI ( %c );
-and the session keyring
-.RI ( %S )
-of the requestor (i.e., the caller of
-.BR request_key ()).
-See
-.BR request\-key.conf (5)
-for details of these
-.I %
-specifiers.
-.PP
-Then we run the program and check the contents of
-.I /proc/keys
-to verify that the requested key has been instantiated:
-.PP
-.in +4n
-.EX
-$ \fB./t_request_key user mtk:key1 "Payload data"\fP
-$ \fBgrep \[aq]2dddaf50\[aq] /proc/keys\fP
-2dddaf50 I\-\-Q\-\-\- 1 perm 3f010000 1000 1000 user mtk:key1: 12
-.EE
-.in
-.PP
-For another example of the use of this program, see
-.BR keyctl (2).
-.SS Program source
-\&
-.\" SRC BEGIN (t_request_key.c)
-.EX
-/* t_request_key.c */
-\&
-#include <keyutils.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(int argc, char *argv[])
-{
- key_serial_t key;
-\&
- if (argc != 4) {
- fprintf(stderr, "Usage: %s type description callout\-data\en",
- argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- key = request_key(argv[1], argv[2], argv[3],
- KEY_SPEC_SESSION_KEYRING);
- if (key == \-1) {
- perror("request_key");
- exit(EXIT_FAILURE);
- }
-\&
- printf("Key ID is %jx\en", (uintmax_t) key);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.ad l
-.nh
-.BR keyctl (1),
-.BR add_key (2),
-.BR keyctl (2),
-.BR keyctl (3),
-.BR capabilities (7),
-.BR keyrings (7),
-.BR keyutils (7),
-.BR persistent\-keyring (7),
-.BR process\-keyring (7),
-.BR session\-keyring (7),
-.BR thread\-keyring (7),
-.BR user\-keyring (7),
-.BR user\-session\-keyring (7),
-.BR request\-key (8)
-.PP
-The kernel source files
-.I Documentation/security/keys/core.rst
-and
-.I Documentation/keys/request\-key.rst
-(or, before Linux 4.13, in the files
-.\" commit b68101a1e8f0263dbc7b8375d2a7c57c6216fb76
-.I Documentation/security/keys.txt
-and
-.\" commit 3db38ed76890565772fcca3279cc8d454ea6176b
-.IR Documentation/security/keys\-request\-key.txt ).
diff --git a/man2/restart_syscall.2 b/man2/restart_syscall.2
deleted file mode 100644
index 64e28b063..000000000
--- a/man2/restart_syscall.2
+++ /dev/null
@@ -1,123 +0,0 @@
-.\" Copyright (c) 2013 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" http://thread.gmane.org/gmane.linux.kernel/76552/focus=76803
-.\" From: Linus Torvalds <torvalds <at> transmeta.com>
-.\" Subject: Re: [PATCH] compatibility syscall layer (lets try again)
-.\" Newsgroups: gmane.linux.kernel
-.\" Date: 2002-12-05 02:51:12 GMT
-.\"
-.\" See also Section 11.3.3 of Understanding the Linux Kernel, 3rd edition
-.\"
-.TH restart_syscall 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-restart_syscall \- restart a system call after interruption by a stop signal
-.SH SYNOPSIS
-.nf
-.B long restart_syscall(void);
-.fi
-.PP
-.IR Note :
-There is no glibc wrapper for this system call; see NOTES.
-.SH DESCRIPTION
-The
-.BR restart_syscall ()
-system call is used to restart certain system calls
-after a process that was stopped by a signal (e.g.,
-.B SIGSTOP
-or
-.BR SIGTSTP )
-is later resumed after receiving a
-.B SIGCONT
-signal.
-This system call is designed only for internal use by the kernel.
-.PP
-.BR restart_syscall ()
-is used for restarting only those system calls that,
-when restarted, should adjust their time-related parameters\[em]namely
-.BR poll (2)
-(since Linux 2.6.24),
-.BR nanosleep (2)
-(since Linux 2.6),
-.BR clock_nanosleep (2)
-(since Linux 2.6),
-and
-.BR futex (2),
-when employed with the
-.B FUTEX_WAIT
-(since Linux 2.6.22)
-and
-.B FUTEX_WAIT_BITSET
-(since Linux 2.6.31)
-operations.
-.\" These system calls correspond to the special internal errno value
-.\" ERESTART_RESTARTBLOCK. Each of the system calls has a "restart"
-.\" helper function that is invoked by restart_syscall().
-.\" Notable (as at Linux 3.17) is that poll() has such a "restart"
-.\" function, but ppoll(), select(), and pselect() do not.
-.\" This means that the latter system calls do not take account of the
-.\" time spent in the stopped state when restarting.
-.BR restart_syscall ()
-restarts the interrupted system call with a
-time argument that is suitably adjusted to account for the
-time that has already elapsed (including the time where the process
-was stopped by a signal).
-Without the
-.BR restart_syscall ()
-mechanism, restarting these system calls would not correctly deduct the
-already elapsed time when the process continued execution.
-.SH RETURN VALUE
-The return value of
-.BR restart_syscall ()
-is the return value of whatever system call is being restarted.
-.SH ERRORS
-.I errno
-is set as per the errors for whatever system call is being restarted by
-.BR restart_syscall ().
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.
-.SH NOTES
-There is no glibc wrapper for this system call,
-because it is intended for use only by the kernel and
-should never be called by applications.
-.PP
-The kernel uses
-.BR restart_syscall ()
-to ensure that when a system call is restarted
-after a process has been stopped by a signal and then resumed by
-.BR SIGCONT ,
-then the time that the process spent in the stopped state is counted
-against the timeout interval specified in the original system call.
-In the case of system calls that take a timeout argument and
-automatically restart after a stop signal plus
-.BR SIGCONT ,
-but which do not have the
-.BR restart_syscall ()
-mechanism built in, then, after the process resumes execution,
-the time that the process spent in the stop state is
-.I not
-counted against the timeout value.
-Notable examples of system calls that suffer this problem are
-.BR ppoll (2),
-.BR select (2),
-and
-.BR pselect (2).
-.PP
-From user space, the operation of
-.BR restart_syscall ()
-is largely invisible:
-to the process that made the system call that is restarted,
-it appears as though that system call executed and
-returned in the usual fashion.
-.SH SEE ALSO
-.BR sigaction (2),
-.BR sigreturn (2),
-.BR signal (7)
-.\" FIXME . ppoll(2), select(2), and pselect(2)
-.\" should probably get the restart_syscall() treatment:
-.\" If a select() call is suspended by stop-sig+SIGCONT, the time
-.\" spent suspended is *not* deducted when the select() is restarted.
-.\" FIXME . check whether recvmmsg() handles stop-sig+SIGCONT properly.
diff --git a/man2/rmdir.2 b/man2/rmdir.2
deleted file mode 100644
index 73b7d690d..000000000
--- a/man2/rmdir.2
+++ /dev/null
@@ -1,128 +0,0 @@
-.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\" and Copyright (C) 1993 Michael Haardt, Ian Jackson.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1997-01-31 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH rmdir 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-rmdir \- delete a directory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int rmdir(const char *" pathname );
-.fi
-.SH DESCRIPTION
-.BR rmdir ()
-deletes a directory, which must be empty.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-Write access to the directory containing
-.I pathname
-was not allowed, or one of the directories in the path prefix of
-.I pathname
-did not allow search permission.
-(See also
-.BR path_resolution (7).)
-.TP
-.B EBUSY
-.I pathname
-is currently in use by the system or some process that prevents its
-removal.
-On Linux, this means
-.I pathname
-is currently used as a mount point
-or is the root directory of the calling process.
-.TP
-.B EFAULT
-.IR pathname " points outside your accessible address space."
-.TP
-.B EINVAL
-.I pathname
-has
-.I .
-as last component.
-.TP
-.B ELOOP
-Too many symbolic links were encountered in resolving
-.IR pathname .
-.TP
-.B ENAMETOOLONG
-.IR pathname " was too long."
-.TP
-.B ENOENT
-A directory component in
-.I pathname
-does not exist or is a dangling symbolic link.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOTDIR
-.IR pathname ,
-or a component used as a directory in
-.IR pathname ,
-is not, in fact, a directory.
-.TP
-.B ENOTEMPTY
-.I pathname
-contains entries other than
-.IR . " and " .. " ;"
-or,
-.I pathname
-has
-.I ..
-as its final component.
-POSIX.1 also allows
-.\" POSIX.1-2001, POSIX.1-2008
-.B EEXIST
-for this condition.
-.TP
-.B EPERM
-The directory containing
-.I pathname
-has the sticky bit
-.RB ( S_ISVTX )
-set and the process's effective user ID is neither the user ID
-of the file to be deleted nor that of the directory containing it,
-and the process is not privileged (Linux: does not have the
-.B CAP_FOWNER
-capability).
-.TP
-.B EPERM
-The filesystem containing
-.I pathname
-does not support the removal of directories.
-.TP
-.B EROFS
-.I pathname
-refers to a directory on a read-only filesystem.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.SH BUGS
-Infelicities in the protocol underlying NFS can cause the unexpected
-disappearance of directories which are still being used.
-.SH SEE ALSO
-.BR rm (1),
-.BR rmdir (1),
-.BR chdir (2),
-.BR chmod (2),
-.BR mkdir (2),
-.BR rename (2),
-.BR unlink (2),
-.BR unlinkat (2)
diff --git a/man2/rt_sigaction.2 b/man2/rt_sigaction.2
deleted file mode 100644
index d642d26cf..000000000
--- a/man2/rt_sigaction.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sigaction.2
diff --git a/man2/rt_sigpending.2 b/man2/rt_sigpending.2
deleted file mode 100644
index 304adff9e..000000000
--- a/man2/rt_sigpending.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sigpending.2
diff --git a/man2/rt_sigprocmask.2 b/man2/rt_sigprocmask.2
deleted file mode 100644
index 5eab7ac86..000000000
--- a/man2/rt_sigprocmask.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sigprocmask.2
diff --git a/man2/rt_sigqueueinfo.2 b/man2/rt_sigqueueinfo.2
deleted file mode 100644
index 046b5f382..000000000
--- a/man2/rt_sigqueueinfo.2
+++ /dev/null
@@ -1,195 +0,0 @@
-.\" Copyright (c) 2002, 2011 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH rt_sigqueueinfo 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-rt_sigqueueinfo, rt_tgsigqueueinfo \- queue a signal and data
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/signal.h>" " /* Definition of " SI_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_rt_sigqueueinfo, pid_t " tgid ,
-.BI " int " sig ", siginfo_t *" info );
-.BI "int syscall(SYS_rt_tgsigqueueinfo, pid_t " tgid ", pid_t " tid ,
-.BI " int " sig ", siginfo_t *" info );
-.fi
-.PP
-.IR Note :
-There are no glibc wrappers for these system calls; see NOTES.
-.SH DESCRIPTION
-The
-.BR rt_sigqueueinfo ()
-and
-.BR rt_tgsigqueueinfo ()
-system calls are the low-level interfaces used to send a signal plus data
-to a process or thread.
-The receiver of the signal can obtain the accompanying data
-by establishing a signal handler with the
-.BR sigaction (2)
-.B SA_SIGINFO
-flag.
-.PP
-These system calls are not intended for direct application use;
-they are provided to allow the implementation of
-.BR sigqueue (3)
-and
-.BR pthread_sigqueue (3).
-.PP
-The
-.BR rt_sigqueueinfo ()
-system call sends the signal
-.I sig
-to the thread group with the ID
-.IR tgid .
-(The term "thread group" is synonymous with "process", and
-.I tid
-corresponds to the traditional UNIX process ID.)
-The signal will be delivered to an arbitrary member of the thread group
-(i.e., one of the threads that is not currently blocking the signal).
-.PP
-The
-.I info
-argument specifies the data to accompany the signal.
-This argument is a pointer to a structure of type
-.IR siginfo_t ,
-described in
-.BR sigaction (2)
-(and defined by including
-.IR <sigaction.h> ).
-The caller should set the following fields in this structure:
-.TP
-.I si_code
-This should be one of the
-.B SI_*
-codes in the Linux kernel source file
-.IR include/asm\-generic/siginfo.h .
-If the signal is being sent to any process other than the caller itself,
-the following restrictions apply:
-.RS
-.IP \[bu] 3
-The code can't be a value greater than or equal to zero.
-In particular, it can't be
-.BR SI_USER ,
-which is used by the kernel to indicate a signal sent by
-.BR kill (2),
-and nor can it be
-.BR SI_KERNEL ,
-which is used to indicate a signal generated by the kernel.
-.IP \[bu]
-The code can't (since Linux 2.6.39) be
-.BR SI_TKILL ,
-which is used by the kernel to indicate a signal sent using
-.\" tkill(2) or
-.BR tgkill (2).
-.RE
-.TP
-.I si_pid
-This should be set to a process ID,
-typically the process ID of the sender.
-.TP
-.I si_uid
-This should be set to a user ID,
-typically the real user ID of the sender.
-.TP
-.I si_value
-This field contains the user data to accompany the signal.
-For more information, see the description of the last
-.RI ( "union sigval" )
-argument of
-.BR sigqueue (3).
-.PP
-Internally, the kernel sets the
-.I si_signo
-field to the value specified in
-.IR sig ,
-so that the receiver of the signal can also obtain
-the signal number via that field.
-.PP
-The
-.BR rt_tgsigqueueinfo ()
-system call is like
-.BR rt_sigqueueinfo (),
-but sends the signal and data to the single thread
-specified by the combination of
-.IR tgid ,
-a thread group ID,
-and
-.IR tid ,
-a thread in that thread group.
-.SH RETURN VALUE
-On success, these system calls return 0.
-On error, they return \-1 and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-The limit of signals which may be queued has been reached.
-(See
-.BR signal (7)
-for further information.)
-.TP
-.B EINVAL
-.IR sig ,
-.IR tgid ,
-or
-.I tid
-was invalid.
-.TP
-.B EPERM
-The caller does not have permission to send the signal to the target.
-For the required permissions, see
-.BR kill (2).
-.TP
-.B EPERM
-.I tgid
-specifies a process other than the caller and
-.I info\->si_code
-is invalid.
-.TP
-.B ESRCH
-.BR rt_sigqueueinfo ():
-No thread group matching
-.I tgid
-was found.
-.PP
-.BR rt_tgsigqueinfo ():
-No thread matching
-.I tgid
-and
-.I tid
-was found.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-.TP
-.BR rt_sigqueueinfo ()
-Linux 2.2.
-.TP
-.BR rt_tgsigqueueinfo ()
-Linux 2.6.31.
-.SH NOTES
-Since these system calls are not intended for application use,
-there are no glibc wrapper functions; use
-.BR syscall (2)
-in the unlikely case that you want to call them directly.
-.PP
-As with
-.BR kill (2),
-the null signal (0) can be used to check if the specified process
-or thread exists.
-.SH SEE ALSO
-.BR kill (2),
-.BR pidfd_send_signal (2),
-.BR sigaction (2),
-.BR sigprocmask (2),
-.BR tgkill (2),
-.BR pthread_sigqueue (3),
-.BR sigqueue (3),
-.BR signal (7)
diff --git a/man2/rt_sigreturn.2 b/man2/rt_sigreturn.2
deleted file mode 100644
index 830b7b99f..000000000
--- a/man2/rt_sigreturn.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sigreturn.2
diff --git a/man2/rt_sigsuspend.2 b/man2/rt_sigsuspend.2
deleted file mode 100644
index 96d99c4c0..000000000
--- a/man2/rt_sigsuspend.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sigsuspend.2
diff --git a/man2/rt_sigtimedwait.2 b/man2/rt_sigtimedwait.2
deleted file mode 100644
index ca098e5fc..000000000
--- a/man2/rt_sigtimedwait.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sigtimedwait.2
diff --git a/man2/rt_tgsigqueueinfo.2 b/man2/rt_tgsigqueueinfo.2
deleted file mode 100644
index 7b6cf6814..000000000
--- a/man2/rt_tgsigqueueinfo.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/rt_sigqueueinfo.2
diff --git a/man2/s390_guarded_storage.2 b/man2/s390_guarded_storage.2
deleted file mode 100644
index 4fa085c97..000000000
--- a/man2/s390_guarded_storage.2
+++ /dev/null
@@ -1,162 +0,0 @@
-.\" Copyright (C) 2018 Eugene Syromyatnikov <evgsyr@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH s390_guarded_storage 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-s390_guarded_storage \- operations with z/Architecture guarded storage facility
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <asm/guarded_storage.h> " "/* Definition of " GS_* " constants */"
-.BR "#include <sys/syscall.h> " \
-"/* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_s390_guarded_storage, int " command ,
-.BI " struct gs_cb *" gs_cb );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR s390_guarded_storage (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR s390_guarded_storage ()
-system call enables the use of the Guarded Storage Facility
-(a z/Architecture-specific feature) for user-space processes.
-.PP
-.\" The description is based on
-.\" http://www-05.ibm.com/de/linux-on-z-ws-us/agenda/pdfs/8_-_Linux_Whats_New_-_Stefan_Raspl.pdf
-.\" and "z/Architecture Principles of Operation" obtained from
-.\" http://publibfi.boulder.ibm.com/epubs/pdf/dz9zr011.pdf
-The guarded storage facility is a hardware feature that allows marking up to
-64 memory regions (as of z14) as guarded;
-reading a pointer with a newly introduced "Load Guarded" (LGG)
-or "Load Logical and Shift Guarded" (LLGFSG) instructions will cause
-a range check on the loaded value and invoke a (previously set up)
-user-space handler if one of the guarded regions is affected.
-.PP
-The
-.\" The command description is copied from v4.12-rc1~139^2~56^2 commit message
-.I command
-argument indicates which function to perform.
-The following commands are supported:
-.TP
-.B GS_ENABLE
-Enable the guarded storage facility for the calling task.
-The initial content of the guarded storage control block will be all zeros.
-After enablement, user-space code can use the "Load Guarded Storage
-Controls" (LGSC) instruction (or the
-.BR load_gs_cb ()
-function wrapper provided in the
-.I asm/guarded_storage.h
-header) to load an arbitrary control block.
-While a task is enabled, the kernel will save and restore the calling content
-of the guarded storage registers on context switch.
-.TP
-.B GS_DISABLE
-Disables the use of the guarded storage facility for the calling task.
-The kernel will cease to save and restore the content of the guarded storage
-registers, the task-specific content of these registers is lost.
-.TP
-.B GS_SET_BC_CB
-Set a broadcast guarded storage control block to the one provided in the
-.I gs_cb
-argument.
-This is called per thread and associates a specific guarded storage control
-block with the calling task.
-This control block will be used in the broadcast command
-.BR GS_BROADCAST .
-.TP
-.B GS_CLEAR_BC_CB
-Clears the broadcast guarded storage control block.
-The guarded storage control block will no longer have the association
-established by the
-.B GS_SET_BC_CB
-command.
-.TP
-.B GS_BROADCAST
-Sends a broadcast to all thread siblings of the calling task.
-Every sibling that has established a broadcast guarded storage control block
-will load this control block and will be enabled for guarded storage.
-The broadcast guarded storage control block is consumed; a second broadcast
-without a refresh of the stored control block with
-.B GS_SET_BC_CB
-will not have any effect.
-.PP
-The
-.I gs_cb
-argument specifies the address of a guarded storage control block structure
-and is currently used only by the
-.B GS_SET_BC_CB
-command; all other aforementioned commands ignore this argument.
-.SH RETURN VALUE
-On success, the return value of
-.BR s390_guarded_storage ()
-is 0.
-.PP
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-.I command
-was
-.B GS_SET_BC_CB
-and the copying of the guarded storage control block structure pointed by the
-.I gs_cb
-argument has failed.
-.TP
-.B EINVAL
-The value provided in the
-.I command
-argument was not valid.
-.TP
-.B ENOMEM
-.I command
-was one of
-.BR GS_ENABLE " or " GS_SET_BC_CB ,
-and the allocation of a new guarded storage control block has failed.
-.TP
-.B EOPNOTSUPP
-The guarded storage facility is not supported by the hardware.
-.SH STANDARDS
-Linux on s390.
-.SH HISTORY
-.\" 916cda1aa1b412d7cf2991c3af7479544942d121, v4.12-rc1~139^2~56^2
-Linux 4.12.
-System z14.
-.SH NOTES
-The description of the guarded storage facility along with related
-instructions and Guarded Storage Control Block and
-Guarded Storage Event Parameter List structure layouts
-is available in "z/Architecture Principles of Operations"
-beginning from the twelfth edition.
-.PP
-The
-.I gs_cb
-structure has a field
-.I gsepla
-(Guarded Storage Event Parameter List Address), which is a user-space pointer
-to a Guarded Storage Event Parameter List structure
-(that contains the address
-of the aforementioned event handler in the
-.I gseha
-field), and its layout is available as a
-.B gs_epl
-structure type definition in the
-.I asm/guarded_storage.h
-header.
-.\" .PP
-.\" For the example of using the guarded storage facility, see
-.\" .UR https://developer.ibm.com/javasdk/2017/09/25/concurrent-scavenge-using-guarded-storage-facility-works/
-.\" the article with the description of its usage in the Java Garbage Collection
-.\" .UE
-.SH SEE ALSO
-.BR syscall (2)
diff --git a/man2/s390_pci_mmio_read.2 b/man2/s390_pci_mmio_read.2
deleted file mode 100644
index dedc39050..000000000
--- a/man2/s390_pci_mmio_read.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/s390_pci_mmio_write.2
diff --git a/man2/s390_pci_mmio_write.2 b/man2/s390_pci_mmio_write.2
deleted file mode 100644
index be0075508..000000000
--- a/man2/s390_pci_mmio_write.2
+++ /dev/null
@@ -1,94 +0,0 @@
-.\" Copyright (c) IBM Corp. 2015
-.\" Author: Alexey Ishchuk <aishchuk@linux.vnet.ibm.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH s390_pci_mmio_write 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-s390_pci_mmio_write, s390_pci_mmio_read \- transfer data to/from PCI
-MMIO memory page
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_s390_pci_mmio_write, unsigned long " mmio_addr ,
-.BI " const void " user_buffer [. length "], \
-size_t " length );
-.BI "int syscall(SYS_s390_pci_mmio_read, unsigned long " mmio_addr ,
-.BI " void " user_buffer [. length "], size_t " length );
-.fi
-.PP
-.IR Note :
-glibc provides no wrappers for these system calls,
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR s390_pci_mmio_write ()
-system call writes
-.I length
-bytes of data from the user-space buffer
-.I user_buffer
-to the PCI MMIO memory location specified by
-.IR mmio_addr .
-The
-.BR s390_pci_mmio_read ()
-system call reads
-.I length
-bytes of
-data from the PCI MMIO memory location specified by
-.I mmio_addr
-to the user-space buffer
-.IR user_buffer .
-.PP
-These system calls must be used instead of the simple assignment
-or data-transfer operations that are used to access the PCI MMIO
-memory areas mapped to user space on the Linux System z platform.
-The address specified by
-.I mmio_addr
-must belong to a PCI MMIO memory page mapping in the caller's address space,
-and the data being written or read must not cross a page boundary.
-The
-.I length
-value cannot be greater than the system page size.
-.SH RETURN VALUE
-On success,
-.BR s390_pci_mmio_write ()
-and
-.BR s390_pci_mmio_read ()
-return 0.
-On failure, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-The address in
-.I mmio_addr
-is invalid.
-.TP
-.B EFAULT
-.I user_buffer
-does not point to a valid location in the caller's address space.
-.TP
-.B EINVAL
-Invalid
-.I length
-argument.
-.TP
-.B ENODEV
-PCI support is not enabled.
-.TP
-.B ENOMEM
-Insufficient memory.
-.SH STANDARDS
-Linux on s390.
-.SH HISTORY
-Linux 3.19.
-System z EC12.
-.SH SEE ALSO
-.BR syscall (2)
diff --git a/man2/s390_runtime_instr.2 b/man2/s390_runtime_instr.2
deleted file mode 100644
index da256bb60..000000000
--- a/man2/s390_runtime_instr.2
+++ /dev/null
@@ -1,104 +0,0 @@
-.\" Copyright (c) IBM Corp. 2012
-.\" Author: Jan Glauber <jang@linux.vnet.ibm.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH s390_runtime_instr 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-s390_runtime_instr \- enable/disable s390 CPU run-time instrumentation
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <asm/runtime_instr.h>" " /* Definition of " S390_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_s390_runtime_instr, int " command ", int " signum );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR s390_runtime_instr (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR s390_runtime_instr ()
-system call starts or stops CPU run-time instrumentation for the
-calling thread.
-.PP
-The
-.I command
-argument controls whether run-time instrumentation is started
-.RB ( S390_RUNTIME_INSTR_START ,
-1) or stopped
-.RB ( S390_RUNTIME_INSTR_STOP ,
-2) for the calling thread.
-.PP
-The
-.I signum
-argument specifies the number of a real-time signal.
-This argument was used to specify a signal number that should be delivered
-to the thread if the run-time instrumentation buffer was full or if
-the run-time-instrumentation-halted interrupt had occurred.
-This feature was never used,
-and in Linux 4.4 support for this feature was removed;
-.\" commit b38feccd663b55ab07116208b68e1ffc7c3c7e78
-thus, in current kernels, this argument is ignored.
-.SH RETURN VALUE
-On success,
-.BR s390_runtime_instr ()
-returns 0 and enables the thread for
-run-time instrumentation by assigning the thread a default run-time
-instrumentation control block.
-The caller can then read and modify the control block and start the run-time
-instrumentation.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-The value specified in
-.I command
-is not a valid command.
-.TP
-.B EINVAL
-The value specified in
-.I signum
-is not a real-time signal number.
-From Linux 4.4 onwards, the
-.I signum
-argument has no effect,
-so that an invalid signal number will not result in an error.
-.TP
-.B ENOMEM
-Allocating memory for the run-time instrumentation control block failed.
-.TP
-.B EOPNOTSUPP
-The run-time instrumentation facility is not available.
-.SH STANDARDS
-Linux on s390.
-.SH HISTORY
-Linux 3.7.
-System z EC12.
-.SH NOTES
-The
-.I asm/runtime_instr.h
-header file is available
-.\" commit df2f815a7df7edb5335a3bdeee6a8f9f6f9c35c4
-since Linux 4.16.
-.PP
-Starting with Linux 4.4,
-support for signalling was removed, as was the check whether
-.I signum
-is a valid real-time signal.
-For backwards compatibility with older kernels, it is recommended to pass
-a valid real-time signal number in
-.I signum
-and install a handler for that signal.
-.SH SEE ALSO
-.BR syscall (2),
-.BR signal (7)
diff --git a/man2/s390_sthyi.2 b/man2/s390_sthyi.2
deleted file mode 100644
index 4c3c3ba2e..000000000
--- a/man2/s390_sthyi.2
+++ /dev/null
@@ -1,133 +0,0 @@
-.\" Copyright IBM Corp. 2017
-.\" Author: QingFeng Hao <haoqf@linux.vnet.ibm.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH s390_sthyi 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-s390_sthyi \- emulate STHYI instruction
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <asm/sthyi.h>" " /* Definition of " STHYI_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_s390_sthyi, unsigned long " function_code ,
-.BI " void *" resp_buffer ", uint64_t *" return_code ,
-.BI " unsigned long " flags );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR s390_sthyi (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR s390_sthyi ()
-system call emulates the STHYI (Store Hypervisor Information) instruction.
-It provides hardware resource information for the machine and its
-virtualization levels.
-This includes CPU type and capacity, as well as the machine model and
-other metrics.
-.PP
-The
-.I function_code
-argument indicates which function to perform.
-The following code(s) are supported:
-.TP
-.B STHYI_FC_CP_IFL_CAP
-Return CP (Central Processor) and IFL (Integrated Facility for Linux)
-capacity information.
-.PP
-The
-.I resp_buffer
-argument specifies the address of a response buffer.
-When the
-.I function_code
-is
-.BR STHYI_FC_CP_IFL_CAP ,
-the buffer must be one page (4K) in size.
-If the system call returns 0,
-the response buffer will be filled with CPU capacity information.
-Otherwise, the response buffer's content is unchanged.
-.PP
-The
-.I return_code
-argument stores the return code of the STHYI instruction,
-using one of the following values:
-.TP
-0
-Success.
-.TP
-4
-Unsupported function code.
-.PP
-For further details about
-.IR return_code ,
-.IR function_code ,
-and
-.IR resp_buffer ,
-see the reference given in NOTES.
-.PP
-The
-.I flags
-argument is provided to allow for future extensions and currently
-must be set to 0.
-.SH RETURN VALUE
-On success (that is: emulation succeeded), the return value of
-.BR s390_sthyi ()
-matches the condition code of the STHYI instructions, which is a value
-in the range [0..3].
-A return value of 0 indicates that CPU capacity information is stored in
-.IR *resp_buffer .
-A return value of 3 indicates "unsupported function code" and the content of
-.I *resp_buffer
-is unchanged.
-The return values 1 and 2 are reserved.
-.PP
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-The value specified in
-.I resp_buffer
-or
-.I return_code
-is not a valid address.
-.TP
-.B EINVAL
-The value specified in
-.I flags
-is nonzero.
-.TP
-.B ENOMEM
-Allocating memory for handling the CPU capacity information failed.
-.TP
-.B EOPNOTSUPP
-The value specified in
-.I function_code
-is not valid.
-.SH STANDARDS
-Linux on s390.
-.SH HISTORY
-Linux 4.15.
-.SH NOTES
-For details of the STHYI instruction, see
-.UR https://www.ibm.com\:/support\:/knowledgecenter\:/SSB27U_6.3.0\:/com.ibm.zvm.v630.hcpb4\:/hcpb4sth.htm
-the documentation page
-.UE .
-.PP
-When the system call interface is used, the response buffer doesn't
-have to fulfill alignment requirements described in the STHYI
-instruction definition.
-.PP
-The kernel caches the response (for up to one second, as of Linux 4.16).
-Subsequent system call invocations may return the cached response.
-.SH SEE ALSO
-.BR syscall (2)
diff --git a/man2/sbrk.2 b/man2/sbrk.2
deleted file mode 100644
index a3711a537..000000000
--- a/man2/sbrk.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/brk.2
diff --git a/man2/sched_get_priority_max.2 b/man2/sched_get_priority_max.2
deleted file mode 100644
index 5185e6039..000000000
--- a/man2/sched_get_priority_max.2
+++ /dev/null
@@ -1,112 +0,0 @@
-.\" Copyright (C) Tom Bjorkholm & Markus Kuhn, 1996
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 1996-04-01 Tom Bjorkholm <tomb@mydata.se>
-.\" First version written
-.\" 1996-04-10 Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
-.\" revision
-.\"
-.TH sched_get_priority_max 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sched_get_priority_max, sched_get_priority_min \- get static priority range
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sched.h>
-.PP
-.BI "int sched_get_priority_max(int " policy );
-.BI "int sched_get_priority_min(int " policy );
-.fi
-.SH DESCRIPTION
-.BR sched_get_priority_max ()
-returns the maximum priority value that can be used with the
-scheduling algorithm identified by
-.IR policy .
-.BR sched_get_priority_min ()
-returns the minimum priority value that can be used with the
-scheduling algorithm identified by
-.IR policy .
-Supported
-.I policy
-values are
-.BR SCHED_FIFO ,
-.BR SCHED_RR ,
-.BR SCHED_OTHER ,
-.BR SCHED_BATCH ,
-.BR SCHED_IDLE ,
-and
-.BR SCHED_DEADLINE .
-Further details about these policies can be found in
-.BR sched (7).
-.PP
-Processes with numerically higher priority values are scheduled before
-processes with numerically lower priority values.
-Thus, the value
-returned by
-.BR sched_get_priority_max ()
-will be greater than the
-value returned by
-.BR sched_get_priority_min ().
-.PP
-Linux allows the static priority range 1 to 99 for the
-.B SCHED_FIFO
-and
-.B SCHED_RR
-policies, and the priority 0 for the remaining policies.
-Scheduling priority ranges for the various policies
-are not alterable.
-.PP
-The range of scheduling priorities may vary on other POSIX systems,
-thus it is a good idea for portable applications to use a virtual
-priority range and map it to the interval given by
-.BR sched_get_priority_max ()
-and
-.BR sched_get_priority_min ()
-POSIX.1 requires
-.\" POSIX.1-2001, POSIX.1-2008 (XBD 2.8.4)
-a spread of at least 32 between the maximum and the minimum values for
-.B SCHED_FIFO
-and
-.BR SCHED_RR .
-.PP
-POSIX systems on which
-.BR sched_get_priority_max ()
-and
-.BR sched_get_priority_min ()
-are available define
-.B _POSIX_PRIORITY_SCHEDULING
-in
-.IR <unistd.h> .
-.SH RETURN VALUE
-On success,
-.BR sched_get_priority_max ()
-and
-.BR sched_get_priority_min ()
-return the maximum/minimum priority value for the named scheduling
-policy.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-The argument
-.I policy
-does not identify a defined scheduling policy.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH SEE ALSO
-.ad l
-.nh
-.BR sched_getaffinity (2),
-.BR sched_getparam (2),
-.BR sched_getscheduler (2),
-.BR sched_setaffinity (2),
-.BR sched_setparam (2),
-.BR sched_setscheduler (2),
-.BR sched (7)
diff --git a/man2/sched_get_priority_min.2 b/man2/sched_get_priority_min.2
deleted file mode 100644
index 17b99f0e3..000000000
--- a/man2/sched_get_priority_min.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sched_get_priority_max.2
diff --git a/man2/sched_getaffinity.2 b/man2/sched_getaffinity.2
deleted file mode 100644
index f376c11f4..000000000
--- a/man2/sched_getaffinity.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sched_setaffinity.2
diff --git a/man2/sched_getattr.2 b/man2/sched_getattr.2
deleted file mode 100644
index cb2c346ee..000000000
--- a/man2/sched_getattr.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sched_setattr.2
diff --git a/man2/sched_getparam.2 b/man2/sched_getparam.2
deleted file mode 100644
index d39facd91..000000000
--- a/man2/sched_getparam.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sched_setparam.2
diff --git a/man2/sched_getscheduler.2 b/man2/sched_getscheduler.2
deleted file mode 100644
index 13aa82793..000000000
--- a/man2/sched_getscheduler.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sched_setscheduler.2
diff --git a/man2/sched_rr_get_interval.2 b/man2/sched_rr_get_interval.2
deleted file mode 100644
index 328e4a4f7..000000000
--- a/man2/sched_rr_get_interval.2
+++ /dev/null
@@ -1,110 +0,0 @@
-.\" Copyright (C) Tom Bjorkholm & Markus Kuhn, 1996
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 1996-04-01 Tom Bjorkholm <tomb@mydata.se>
-.\" First version written
-.\" 1996-04-10 Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
-.\" revision
-.\"
-.TH sched_rr_get_interval 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sched_rr_get_interval \- get the SCHED_RR interval for the named process
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sched.h>
-.PP
-.BI "int sched_rr_get_interval(pid_t " pid ", struct timespec *" tp );
-.fi
-.SH DESCRIPTION
-.BR sched_rr_get_interval ()
-writes into the
-.BR timespec (3)
-structure pointed to by
-.I tp
-the round-robin time quantum for the process identified by
-.IR pid .
-The specified process should be running under the
-.B SCHED_RR
-scheduling policy.
-.PP
-If
-.I pid
-is zero, the time quantum for the calling process is written into
-.IR *tp .
-.\" FIXME . On Linux, sched_rr_get_interval()
-.\" returns the timeslice for SCHED_OTHER processes -- this timeslice
-.\" is influenced by the nice value.
-.\" For SCHED_FIFO processes, this always returns 0.
-.\"
-.\" The round-robin time quantum value is not alterable under Linux
-.\" 1.3.81.
-.\"
-.SH RETURN VALUE
-On success,
-.BR sched_rr_get_interval ()
-returns 0.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-Problem with copying information to user space.
-.TP
-.B EINVAL
-Invalid pid.
-.TP
-.B ENOSYS
-The system call is not yet implemented (only on rather old kernels).
-.TP
-.B ESRCH
-Could not find a process with the ID
-.IR pid .
-.SH VERSIONS
-.SS Linux
-Linux 3.9 added
-.\" commit ce0dbbbb30aee6a835511d5be446462388ba9eee
-a new mechanism for adjusting (and viewing) the
-.B SCHED_RR
-quantum: the
-.I /proc/sys/kernel/sched_rr_timeslice_ms
-file exposes the quantum as a millisecond value, whose default is 100.
-Writing 0 to this file resets the quantum to the default value.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SS Linux
-POSIX does not specify any mechanism for controlling the size of the
-round-robin time quantum.
-Older Linux kernels provide a (nonportable) method of doing this.
-The quantum can be controlled by adjusting the process's nice value (see
-.BR setpriority (2)).
-Assigning a negative (i.e., high) nice value results in a longer quantum;
-assigning a positive (i.e., low) nice value results in a shorter quantum.
-The default quantum is 0.1 seconds;
-the degree to which changing the nice value affects the
-quantum has varied somewhat across kernel versions.
-This method of adjusting the quantum was removed
-.\" commit a4ec24b48ddef1e93f7578be53270f0b95ad666c
-starting with Linux 2.6.24.
-.SH NOTES
-POSIX systems on which
-.BR sched_rr_get_interval ()
-is available define
-.B _POSIX_PRIORITY_SCHEDULING
-in
-.IR <unistd.h> .
-.\" .SH BUGS
-.\" As of Linux 1.3.81
-.\" .BR sched_rr_get_interval ()
-.\" returns with error
-.\" ENOSYS, because SCHED_RR has not yet been fully implemented and tested
-.\" properly.
-.SH SEE ALSO
-.BR timespec (3),
-.BR sched (7)
diff --git a/man2/sched_setaffinity.2 b/man2/sched_setaffinity.2
deleted file mode 100644
index 958d14cd2..000000000
--- a/man2/sched_setaffinity.2
+++ /dev/null
@@ -1,427 +0,0 @@
-.\" Copyright (C) 2002 Robert Love
-.\" and Copyright (C) 2006, 2015 Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 2002-11-19 Robert Love <rml@tech9.net> - initial version
-.\" 2004-04-20 mtk - fixed description of return value
-.\" 2004-04-22 aeb - added glibc prototype history
-.\" 2005-05-03 mtk - noted that sched_setaffinity may cause thread
-.\" migration and that CPU affinity is a per-thread attribute.
-.\" 2006-02-03 mtk -- Major rewrite
-.\" 2008-11-12, mtk, removed CPU_*() macro descriptions to a
-.\" separate CPU_SET(3) page.
-.\"
-.TH sched_setaffinity 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sched_setaffinity, sched_getaffinity \- \
-set and get a thread's CPU affinity mask
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <sched.h>
-.PP
-.BI "int sched_setaffinity(pid_t " pid ", size_t " cpusetsize ,
-.BI " const cpu_set_t *" mask );
-.BI "int sched_getaffinity(pid_t " pid ", size_t " cpusetsize ,
-.BI " cpu_set_t *" mask );
-.fi
-.SH DESCRIPTION
-A thread's CPU affinity mask determines the set of CPUs on which
-it is eligible to run.
-On a multiprocessor system, setting the CPU affinity mask
-can be used to obtain performance benefits.
-For example,
-by dedicating one CPU to a particular thread
-(i.e., setting the affinity mask of that thread to specify a single CPU,
-and setting the affinity mask of all other threads to exclude that CPU),
-it is possible to ensure maximum execution speed for that thread.
-Restricting a thread to run on a single CPU also avoids
-the performance cost caused by the cache invalidation that occurs
-when a thread ceases to execute on one CPU and then
-recommences execution on a different CPU.
-.PP
-A CPU affinity mask is represented by the
-.I cpu_set_t
-structure, a "CPU set", pointed to by
-.IR mask .
-A set of macros for manipulating CPU sets is described in
-.BR CPU_SET (3).
-.PP
-.BR sched_setaffinity ()
-sets the CPU affinity mask of the thread whose ID is
-.I pid
-to the value specified by
-.IR mask .
-If
-.I pid
-is zero, then the calling thread is used.
-The argument
-.I cpusetsize
-is the length (in bytes) of the data pointed to by
-.IR mask .
-Normally this argument would be specified as
-.IR "sizeof(cpu_set_t)" .
-.PP
-If the thread specified by
-.I pid
-is not currently running on one of the CPUs specified in
-.IR mask ,
-then that thread is migrated to one of the CPUs specified in
-.IR mask .
-.PP
-.BR sched_getaffinity ()
-writes the affinity mask of the thread whose ID is
-.I pid
-into the
-.I cpu_set_t
-structure pointed to by
-.IR mask .
-The
-.I cpusetsize
-argument specifies the size (in bytes) of
-.IR mask .
-If
-.I pid
-is zero, then the mask of the calling thread is returned.
-.SH RETURN VALUE
-On success,
-.BR sched_setaffinity ()
-and
-.BR sched_getaffinity ()
-return 0 (but see "C library/kernel differences" below,
-which notes that the underlying
-.BR sched_getaffinity ()
-differs in its return value).
-On failure, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-A supplied memory address was invalid.
-.TP
-.B EINVAL
-The affinity bit mask
-.I mask
-contains no processors that are currently physically on the system
-and permitted to the thread according to any restrictions that
-may be imposed by
-.I cpuset
-cgroups or the "cpuset" mechanism described in
-.BR cpuset (7).
-.TP
-.B EINVAL
-.RB ( sched_getaffinity ()
-and, before Linux 2.6.9,
-.BR sched_setaffinity ())
-.I cpusetsize
-is smaller than the size of the affinity mask used by the kernel.
-.TP
-.B EPERM
-.RB ( sched_setaffinity ())
-The calling thread does not have appropriate privileges.
-The caller needs an effective user ID equal to the real user ID
-or effective user ID of the thread identified by
-.IR pid ,
-or it must possess the
-.B CAP_SYS_NICE
-capability in the user namespace of the thread
-.IR pid .
-.TP
-.B ESRCH
-The thread whose ID is \fIpid\fP could not be found.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.5.8,
-glibc 2.3.
-.PP
-Initially, the glibc interfaces included a
-.I cpusetsize
-argument, typed as
-.IR "unsigned int" .
-In glibc 2.3.3, the
-.I cpusetsize
-argument was removed, but was then restored in glibc 2.3.4, with type
-.IR size_t .
-.SH NOTES
-After a call to
-.BR sched_setaffinity (),
-the set of CPUs on which the thread will actually run is
-the intersection of the set specified in the
-.I mask
-argument and the set of CPUs actually present on the system.
-The system may further restrict the set of CPUs on which the thread
-runs if the "cpuset" mechanism described in
-.BR cpuset (7)
-is being used.
-These restrictions on the actual set of CPUs on which the thread
-will run are silently imposed by the kernel.
-.PP
-There are various ways of determining the number of CPUs
-available on the system, including: inspecting the contents of
-.IR /proc/cpuinfo ;
-using
-.BR sysconf (3)
-to obtain the values of the
-.B _SC_NPROCESSORS_CONF
-and
-.B _SC_NPROCESSORS_ONLN
-parameters; and inspecting the list of CPU directories under
-.IR /sys/devices/system/cpu/ .
-.PP
-.BR sched (7)
-has a description of the Linux scheduling scheme.
-.PP
-The affinity mask is a per-thread attribute that can be
-adjusted independently for each of the threads in a thread group.
-The value returned from a call to
-.BR gettid (2)
-can be passed in the argument
-.IR pid .
-Specifying
-.I pid
-as 0 will set the attribute for the calling thread,
-and passing the value returned from a call to
-.BR getpid (2)
-will set the attribute for the main thread of the thread group.
-(If you are using the POSIX threads API, then use
-.BR pthread_setaffinity_np (3)
-instead of
-.BR sched_setaffinity ().)
-.PP
-The
-.I isolcpus
-boot option can be used to isolate one or more CPUs at boot time,
-so that no processes are scheduled onto those CPUs.
-Following the use of this boot option,
-the only way to schedule processes onto the isolated CPUs is via
-.BR sched_setaffinity ()
-or the
-.BR cpuset (7)
-mechanism.
-For further information, see the kernel source file
-.IR Documentation/admin\-guide/kernel\-parameters.txt .
-As noted in that file,
-.I isolcpus
-is the preferred mechanism of isolating CPUs
-(versus the alternative of manually setting the CPU affinity
-of all processes on the system).
-.PP
-A child created via
-.BR fork (2)
-inherits its parent's CPU affinity mask.
-The affinity mask is preserved across an
-.BR execve (2).
-.SS C library/kernel differences
-This manual page describes the glibc interface for the CPU affinity calls.
-The actual system call interface is slightly different, with the
-.I mask
-being typed as
-.IR "unsigned long\ *" ,
-reflecting the fact that the underlying implementation of CPU
-sets is a simple bit mask.
-.PP
-On success, the raw
-.BR sched_getaffinity ()
-system call returns the number of bytes placed copied into the
-.I mask
-buffer;
-this will be the minimum of
-.I cpusetsize
-and the size (in bytes) of the
-.I cpumask_t
-data type that is used internally by the kernel to
-represent the CPU set bit mask.
-.SS Handling systems with large CPU affinity masks
-The underlying system calls (which represent CPU masks as bit masks of type
-.IR "unsigned long\ *" )
-impose no restriction on the size of the CPU mask.
-However, the
-.I cpu_set_t
-data type used by glibc has a fixed size of 128 bytes,
-meaning that the maximum CPU number that can be represented is 1023.
-.\" FIXME . See https://sourceware.org/bugzilla/show_bug.cgi?id=15630
-.\" and https://sourceware.org/ml/libc-alpha/2013-07/msg00288.html
-If the kernel CPU affinity mask is larger than 1024,
-then calls of the form:
-.PP
-.in +4n
-.EX
-sched_getaffinity(pid, sizeof(cpu_set_t), &mask);
-.EE
-.in
-.PP
-fail with the error
-.BR EINVAL ,
-the error produced by the underlying system call for the case where the
-.I mask
-size specified in
-.I cpusetsize
-is smaller than the size of the affinity mask used by the kernel.
-(Depending on the system CPU topology, the kernel affinity mask can
-be substantially larger than the number of active CPUs in the system.)
-.PP
-When working on systems with large kernel CPU affinity masks,
-one must dynamically allocate the
-.I mask
-argument (see
-.BR CPU_ALLOC (3)).
-Currently, the only way to do this is by probing for the size
-of the required mask using
-.BR sched_getaffinity ()
-calls with increasing mask sizes (until the call does not fail with the error
-.BR EINVAL ).
-.PP
-Be aware that
-.BR CPU_ALLOC (3)
-may allocate a slightly larger CPU set than requested
-(because CPU sets are implemented as bit masks allocated in units of
-.IR sizeof(long) ).
-Consequently,
-.BR sched_getaffinity ()
-can set bits beyond the requested allocation size, because the kernel
-sees a few additional bits.
-Therefore, the caller should iterate over the bits in the returned set,
-counting those which are set, and stop upon reaching the value returned by
-.BR CPU_COUNT (3)
-(rather than iterating over the number of bits
-requested to be allocated).
-.SH EXAMPLES
-The program below creates a child process.
-The parent and child then each assign themselves to a specified CPU
-and execute identical loops that consume some CPU time.
-Before terminating, the parent waits for the child to complete.
-The program takes three command-line arguments:
-the CPU number for the parent,
-the CPU number for the child,
-and the number of loop iterations that both processes should perform.
-.PP
-As the sample runs below demonstrate, the amount of real and CPU time
-consumed when running the program will depend on intra-core caching effects
-and whether the processes are using the same CPU.
-.PP
-We first employ
-.BR lscpu (1)
-to determine that this (x86)
-system has two cores, each with two CPUs:
-.PP
-.in +4n
-.EX
-$ \fBlscpu | egrep \-i \[aq]core.*:|socket\[aq]\fP
-Thread(s) per core: 2
-Core(s) per socket: 2
-Socket(s): 1
-.EE
-.in
-.PP
-We then time the operation of the example program for three cases:
-both processes running on the same CPU;
-both processes running on different CPUs on the same core;
-and both processes running on different CPUs on different cores.
-.PP
-.in +4n
-.EX
-$ \fBtime \-p ./a.out 0 0 100000000\fP
-real 14.75
-user 3.02
-sys 11.73
-$ \fBtime \-p ./a.out 0 1 100000000\fP
-real 11.52
-user 3.98
-sys 19.06
-$ \fBtime \-p ./a.out 0 3 100000000\fP
-real 7.89
-user 3.29
-sys 12.07
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (sched_setaffinity.c)
-.EX
-#define _GNU_SOURCE
-#include <err.h>
-#include <sched.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/wait.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int parentCPU, childCPU;
- cpu_set_t set;
- unsigned int nloops;
-\&
- if (argc != 4) {
- fprintf(stderr, "Usage: %s parent\-cpu child\-cpu num\-loops\en",
- argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- parentCPU = atoi(argv[1]);
- childCPU = atoi(argv[2]);
- nloops = atoi(argv[3]);
-\&
- CPU_ZERO(&set);
-\&
- switch (fork()) {
- case \-1: /* Error */
- err(EXIT_FAILURE, "fork");
-\&
- case 0: /* Child */
- CPU_SET(childCPU, &set);
-\&
- if (sched_setaffinity(getpid(), sizeof(set), &set) == \-1)
- err(EXIT_FAILURE, "sched_setaffinity");
-\&
- for (unsigned int j = 0; j < nloops; j++)
- getppid();
-\&
- exit(EXIT_SUCCESS);
-\&
- default: /* Parent */
- CPU_SET(parentCPU, &set);
-\&
- if (sched_setaffinity(getpid(), sizeof(set), &set) == \-1)
- err(EXIT_FAILURE, "sched_setaffinity");
-\&
- for (unsigned int j = 0; j < nloops; j++)
- getppid();
-\&
- wait(NULL); /* Wait for child to terminate */
- exit(EXIT_SUCCESS);
- }
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.ad l
-.nh
-.BR lscpu (1),
-.BR nproc (1),
-.BR taskset (1),
-.BR clone (2),
-.BR getcpu (2),
-.BR getpriority (2),
-.BR gettid (2),
-.BR nice (2),
-.BR sched_get_priority_max (2),
-.BR sched_get_priority_min (2),
-.BR sched_getscheduler (2),
-.BR sched_setscheduler (2),
-.BR setpriority (2),
-.BR CPU_SET (3),
-.BR get_nprocs (3),
-.BR pthread_setaffinity_np (3),
-.BR sched_getcpu (3),
-.BR capabilities (7),
-.BR cpuset (7),
-.BR sched (7),
-.BR numactl (8)
diff --git a/man2/sched_setattr.2 b/man2/sched_setattr.2
deleted file mode 100644
index fd92a86b2..000000000
--- a/man2/sched_setattr.2
+++ /dev/null
@@ -1,447 +0,0 @@
-.\" Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (C) 2014 Peter Zijlstra <peterz@infradead.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sched_setattr 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sched_setattr, sched_getattr \-
-set and get scheduling policy and attributes
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sched.h>" " /* Definition of " SCHED_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_sched_setattr, pid_t " pid ", struct sched_attr *" attr ,
-.BI " unsigned int " flags );
-.BI "int syscall(SYS_sched_getattr, pid_t " pid ", struct sched_attr *" attr ,
-.BI " unsigned int " size ", unsigned int " flags );
-.fi
-.\" FIXME . Add feature test macro requirements
-.PP
-.IR Note :
-glibc provides no wrappers for these system calls,
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-.SS sched_setattr()
-The
-.BR sched_setattr ()
-system call sets the scheduling policy and
-associated attributes for the thread whose ID is specified in
-.IR pid .
-If
-.I pid
-equals zero,
-the scheduling policy and attributes of the calling thread will be set.
-.PP
-Currently, Linux supports the following "normal"
-(i.e., non-real-time) scheduling policies as values that may be specified in
-.IR policy :
-.TP 14
-.B SCHED_OTHER
-the standard round-robin time-sharing policy;
-.\" In the 2.6 kernel sources, SCHED_OTHER is actually called
-.\" SCHED_NORMAL.
-.TP
-.B SCHED_BATCH
-for "batch" style execution of processes; and
-.TP
-.B SCHED_IDLE
-for running
-.I very
-low priority background jobs.
-.PP
-Various "real-time" policies are also supported,
-for special time-critical applications that need precise control over
-the way in which runnable threads are selected for execution.
-For the rules governing when a process may use these policies, see
-.BR sched (7).
-The real-time policies that may be specified in
-.I policy
-are:
-.TP 14
-.B SCHED_FIFO
-a first-in, first-out policy; and
-.TP
-.B SCHED_RR
-a round-robin policy.
-.PP
-Linux also provides the following policy:
-.TP 14
-.B SCHED_DEADLINE
-a deadline scheduling policy; see
-.BR sched (7)
-for details.
-.PP
-The
-.I attr
-argument is a pointer to a structure that defines
-the new scheduling policy and attributes for the specified thread.
-This structure has the following form:
-.PP
-.in +4n
-.EX
-struct sched_attr {
- u32 size; /* Size of this structure */
- u32 sched_policy; /* Policy (SCHED_*) */
- u64 sched_flags; /* Flags */
- s32 sched_nice; /* Nice value (SCHED_OTHER,
- SCHED_BATCH) */
- u32 sched_priority; /* Static priority (SCHED_FIFO,
- SCHED_RR) */
- /* Remaining fields are for SCHED_DEADLINE */
- u64 sched_runtime;
- u64 sched_deadline;
- u64 sched_period;
-};
-.EE
-.in
-.PP
-The fields of the
-.I sched_attr
-structure are as follows:
-.TP
-.B size
-This field should be set to the size of the structure in bytes, as in
-.IR "sizeof(struct sched_attr)" .
-If the provided structure is smaller than the kernel structure,
-any additional fields are assumed to be '0'.
-If the provided structure is larger than the kernel structure,
-the kernel verifies that all additional fields are 0;
-if they are not,
-.BR sched_setattr ()
-fails with the error
-.B E2BIG
-and updates
-.I size
-to contain the size of the kernel structure.
-.IP
-The above behavior when the size of the user-space
-.I sched_attr
-structure does not match the size of the kernel structure
-allows for future extensibility of the interface.
-Malformed applications that pass oversize structures
-won't break in the future if the size of the kernel
-.I sched_attr
-structure is increased.
-In the future,
-it could also allow applications that know about a larger user-space
-.I sched_attr
-structure to determine whether they are running on an older kernel
-that does not support the larger structure.
-.TP
-.I sched_policy
-This field specifies the scheduling policy, as one of the
-.B SCHED_*
-values listed above.
-.TP
-.I sched_flags
-This field contains zero or more of the following flags
-that are ORed together to control scheduling behavior:
-.RS
-.TP
-.B SCHED_FLAG_RESET_ON_FORK
-Children created by
-.BR fork (2)
-do not inherit privileged scheduling policies.
-See
-.BR sched (7)
-for details.
-.TP
-.BR SCHED_FLAG_RECLAIM " (since Linux 4.13)"
-.\" 2d4283e9d583a3ee8cfb1cbb9c1270614df4c29d
-This flag allows a
-.B SCHED_DEADLINE
-thread to reclaim bandwidth unused by other real-time threads.
-.\" Bandwidth reclaim is done via the GRUB algorithm; see
-.\" Documentation/scheduler/sched-deadline.txt
-.TP
-.BR SCHED_FLAG_DL_OVERRUN " (since Linux 4.16)"
-.\" commit 34be39305a77b8b1ec9f279163c7cdb6cc719b91
-This flag allows an application to get informed about run-time overruns in
-.B SCHED_DEADLINE
-threads.
-Such overruns may be caused by (for example) coarse execution time accounting
-or incorrect parameter assignment.
-Notification takes the form of a
-.B SIGXCPU
-signal which is generated on each overrun.
-.IP
-This
-.B SIGXCPU
-signal is
-.I process-directed
-(see
-.BR signal (7))
-rather than thread-directed.
-This is probably a bug.
-On the one hand,
-.BR sched_setattr ()
-is being used to set a per-thread attribute.
-On the other hand, if the process-directed signal is delivered to
-a thread inside the process other than the one that had a run-time overrun,
-the application has no way of knowing which thread overran.
-.RE
-.TP
-.I sched_nice
-This field specifies the nice value to be set when specifying
-.I sched_policy
-as
-.B SCHED_OTHER
-or
-.BR SCHED_BATCH .
-The nice value is a number in the range \-20 (high priority)
-to +19 (low priority); see
-.BR sched (7).
-.TP
-.I sched_priority
-This field specifies the static priority to be set when specifying
-.I sched_policy
-as
-.B SCHED_FIFO
-or
-.BR SCHED_RR .
-The allowed range of priorities for these policies can be determined using
-.BR sched_get_priority_min (2)
-and
-.BR sched_get_priority_max (2).
-For other policies, this field must be specified as 0.
-.TP
-.I sched_runtime
-This field specifies the "Runtime" parameter for deadline scheduling.
-The value is expressed in nanoseconds.
-This field, and the next two fields,
-are used only for
-.B SCHED_DEADLINE
-scheduling; for further details, see
-.BR sched (7).
-.TP
-.I sched_deadline
-This field specifies the "Deadline" parameter for deadline scheduling.
-The value is expressed in nanoseconds.
-.TP
-.I sched_period
-This field specifies the "Period" parameter for deadline scheduling.
-The value is expressed in nanoseconds.
-.PP
-The
-.I flags
-argument is provided to allow for future extensions to the interface;
-in the current implementation it must be specified as 0.
-.\"
-.\"
-.SS sched_getattr()
-The
-.BR sched_getattr ()
-system call fetches the scheduling policy and the
-associated attributes for the thread whose ID is specified in
-.IR pid .
-If
-.I pid
-equals zero,
-the scheduling policy and attributes of the calling thread
-will be retrieved.
-.PP
-The
-.I size
-argument should be set to the size of the
-.I sched_attr
-structure as known to user space.
-The value must be at least as large as the size of the initially published
-.I sched_attr
-structure, or the call fails with the error
-.BR EINVAL .
-.PP
-The retrieved scheduling attributes are placed in the fields of the
-.I sched_attr
-structure pointed to by
-.IR attr .
-The kernel sets
-.I attr.size
-to the size of its
-.I sched_attr
-structure.
-.PP
-If the caller-provided
-.I attr
-buffer is larger than the kernel's
-.I sched_attr
-structure,
-the additional bytes in the user-space structure are not touched.
-If the caller-provided structure is smaller than the kernel
-.I sched_attr
-structure, the kernel will silently not return any values which would be stored
-outside the provided space.
-As with
-.BR sched_setattr (),
-these semantics allow for future extensibility of the interface.
-.PP
-The
-.I flags
-argument is provided to allow for future extensions to the interface;
-in the current implementation it must be specified as 0.
-.SH RETURN VALUE
-On success,
-.BR sched_setattr ()
-and
-.BR sched_getattr ()
-return 0.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.BR sched_getattr ()
-and
-.BR sched_setattr ()
-can both fail for the following reasons:
-.TP
-.B EINVAL
-.I attr
-is NULL; or
-.I pid
-is negative; or
-.I flags
-is not zero.
-.TP
-.B ESRCH
-The thread whose ID is
-.I pid
-could not be found.
-.PP
-In addition,
-.BR sched_getattr ()
-can fail for the following reasons:
-.TP
-.B E2BIG
-The buffer specified by
-.I size
-and
-.I attr
-is too small.
-.TP
-.B EINVAL
-.I size
-is invalid; that is, it is smaller than the initial version of the
-.I sched_attr
-structure (48 bytes) or larger than the system page size.
-.PP
-In addition,
-.BR sched_setattr ()
-can fail for the following reasons:
-.TP
-.B E2BIG
-The buffer specified by
-.I size
-and
-.I attr
-is larger than the kernel structure,
-and one or more of the excess bytes is nonzero.
-.TP
-.B EBUSY
-.B SCHED_DEADLINE
-admission control failure, see
-.BR sched (7).
-.TP
-.B EINVAL
-.I attr.sched_policy
-is not one of the recognized policies;
-.I attr.sched_flags
-contains a flag other than
-.BR SCHED_FLAG_RESET_ON_FORK ;
-or
-.I attr.sched_priority
-is invalid; or
-.I attr.sched_policy
-is
-.B SCHED_DEADLINE
-and the deadline scheduling parameters in
-.I attr
-are invalid.
-.TP
-.B EPERM
-The caller does not have appropriate privileges.
-.TP
-.B EPERM
-The CPU affinity mask of the thread specified by
-.I pid
-does not include all CPUs in the system
-(see
-.BR sched_setaffinity (2)).
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 3.14.
-.\" FIXME . Add glibc version
-.SH NOTES
-glibc does not provide wrappers for these system calls; call them using
-.BR syscall (2).
-.PP
-.BR sched_setattr ()
-provides a superset of the functionality of
-.BR sched_setscheduler (2),
-.BR sched_setparam (2),
-.BR nice (2),
-and (other than the ability to set the priority of all processes
-belonging to a specified user or all processes in a specified group)
-.BR setpriority (2).
-Analogously,
-.BR sched_getattr ()
-provides a superset of the functionality of
-.BR sched_getscheduler (2),
-.BR sched_getparam (2),
-and (partially)
-.BR getpriority (2).
-.SH BUGS
-In Linux versions up to
-.\" FIXME . patch sent to Peter Zijlstra
-3.15,
-.BR sched_setattr ()
-failed with the error
-.B EFAULT
-instead of
-.B E2BIG
-for the case described in ERRORS.
-.PP
-Up to Linux 5.3,
-.BR sched_getattr ()
-failed with the error
-.B EFBIG
-if the in-kernel
-.I sched_attr
-structure was larger than the
-.I size
-passed by user space.
-.\" In Linux versions up to up 3.15,
-.\" FIXME . patch from Peter Zijlstra pending
-.\" .BR sched_setattr ()
-.\" allowed a negative
-.\" .I attr.sched_policy
-.\" value.
-.SH SEE ALSO
-.ad l
-.nh
-.BR chrt (1),
-.BR nice (2),
-.BR sched_get_priority_max (2),
-.BR sched_get_priority_min (2),
-.BR sched_getaffinity (2),
-.BR sched_getparam (2),
-.BR sched_getscheduler (2),
-.BR sched_rr_get_interval (2),
-.BR sched_setaffinity (2),
-.BR sched_setparam (2),
-.BR sched_setscheduler (2),
-.BR sched_yield (2),
-.BR setpriority (2),
-.BR pthread_getschedparam (3),
-.BR pthread_setschedparam (3),
-.BR pthread_setschedprio (3),
-.BR capabilities (7),
-.BR cpuset (7),
-.BR sched (7)
-.ad
diff --git a/man2/sched_setparam.2 b/man2/sched_setparam.2
deleted file mode 100644
index 9aafc2ebb..000000000
--- a/man2/sched_setparam.2
+++ /dev/null
@@ -1,121 +0,0 @@
-.\" Copyright (C) Tom Bjorkholm & Markus Kuhn, 1996
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 1996-04-01 Tom Bjorkholm <tomb@mydata.se>
-.\" First version written
-.\" 1996-04-10 Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
-.\" revision
-.\" Modified 2004-05-27 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH sched_setparam 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sched_setparam, sched_getparam \- set and get scheduling parameters
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sched.h>
-.PP
-.BI "int sched_setparam(pid_t " pid ", const struct sched_param *" param );
-.BI "int sched_getparam(pid_t " pid ", struct sched_param *" param );
-.PP
-\fBstruct sched_param {
- ...
- int \fIsched_priority\fB;
- ...
-};
-.fi
-.SH DESCRIPTION
-.BR sched_setparam ()
-sets the scheduling parameters associated with the scheduling policy
-for the thread whose thread ID is specified in \fIpid\fP.
-If \fIpid\fP is zero, then
-the parameters of the calling thread are set.
-The interpretation of
-the argument \fIparam\fP depends on the scheduling
-policy of the thread identified by
-.IR pid .
-See
-.BR sched (7)
-for a description of the scheduling policies supported under Linux.
-.PP
-.BR sched_getparam ()
-retrieves the scheduling parameters for the
-thread identified by \fIpid\fP.
-If \fIpid\fP is zero, then the parameters
-of the calling thread are retrieved.
-.PP
-.BR sched_setparam ()
-checks the validity of \fIparam\fP for the scheduling policy of the
-thread.
-The value \fIparam\->sched_priority\fP must lie within the
-range given by
-.BR sched_get_priority_min (2)
-and
-.BR sched_get_priority_max (2).
-.PP
-For a discussion of the privileges and resource limits related to
-scheduling priority and policy, see
-.BR sched (7).
-.PP
-POSIX systems on which
-.BR sched_setparam ()
-and
-.BR sched_getparam ()
-are available define
-.B _POSIX_PRIORITY_SCHEDULING
-in \fI<unistd.h>\fP.
-.SH RETURN VALUE
-On success,
-.BR sched_setparam ()
-and
-.BR sched_getparam ()
-return 0.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-Invalid arguments:
-.I param
-is NULL or
-.I pid
-is negative
-.TP
-.B EINVAL
-.RB ( sched_setparam ())
-The argument \fIparam\fP does not make sense for the current
-scheduling policy.
-.TP
-.B EPERM
-.RB ( sched_setparam ())
-The caller does not have appropriate privileges
-(Linux: does not have the
-.B CAP_SYS_NICE
-capability).
-.TP
-.B ESRCH
-The thread whose ID is \fIpid\fP could not be found.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH SEE ALSO
-.ad l
-.nh
-.BR getpriority (2),
-.BR gettid (2),
-.BR nice (2),
-.BR sched_get_priority_max (2),
-.BR sched_get_priority_min (2),
-.BR sched_getaffinity (2),
-.BR sched_getscheduler (2),
-.BR sched_setaffinity (2),
-.BR sched_setattr (2),
-.BR sched_setscheduler (2),
-.BR setpriority (2),
-.BR capabilities (7),
-.BR sched (7)
diff --git a/man2/sched_setscheduler.2 b/man2/sched_setscheduler.2
deleted file mode 100644
index a6333c1ab..000000000
--- a/man2/sched_setscheduler.2
+++ /dev/null
@@ -1,232 +0,0 @@
-.\" Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH sched_setscheduler 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sched_setscheduler, sched_getscheduler \-
-set and get scheduling policy/parameters
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sched.h>
-.PP
-.BI "int sched_setscheduler(pid_t " pid ", int " policy ,
-.BI " const struct sched_param *" param );
-.BI "int sched_getscheduler(pid_t " pid );
-.fi
-.SH DESCRIPTION
-The
-.BR sched_setscheduler ()
-system call
-sets both the scheduling policy and parameters for the
-thread whose ID is specified in \fIpid\fP.
-If \fIpid\fP equals zero, the
-scheduling policy and parameters of the calling thread will be set.
-.PP
-The scheduling parameters are specified in the
-.I param
-argument, which is a pointer to a structure of the following form:
-.PP
-.in +4n
-.EX
-struct sched_param {
- ...
- int sched_priority;
- ...
-};
-.EE
-.in
-.PP
-In the current implementation, the structure contains only one field,
-.IR sched_priority .
-The interpretation of
-.I param
-depends on the selected policy.
-.PP
-Currently, Linux supports the following "normal"
-(i.e., non-real-time) scheduling policies as values that may be specified in
-.IR policy :
-.TP 14
-.B SCHED_OTHER
-the standard round-robin time-sharing policy;
-.\" In the 2.6 kernel sources, SCHED_OTHER is actually called
-.\" SCHED_NORMAL.
-.TP
-.B SCHED_BATCH
-for "batch" style execution of processes; and
-.TP
-.B SCHED_IDLE
-for running
-.I very
-low priority background jobs.
-.PP
-For each of the above policies,
-.I param\->sched_priority
-must be 0.
-.PP
-Various "real-time" policies are also supported,
-for special time-critical applications that need precise control over
-the way in which runnable threads are selected for execution.
-For the rules governing when a process may use these policies, see
-.BR sched (7).
-The real-time policies that may be specified in
-.I policy
-are:
-.TP 14
-.B SCHED_FIFO
-a first-in, first-out policy; and
-.TP
-.B SCHED_RR
-a round-robin policy.
-.PP
-For each of the above policies,
-.I param\->sched_priority
-specifies a scheduling priority for the thread.
-This is a number in the range returned by calling
-.BR sched_get_priority_min (2)
-and
-.BR sched_get_priority_max (2)
-with the specified
-.IR policy .
-On Linux, these system calls return, respectively, 1 and 99.
-.PP
-Since Linux 2.6.32, the
-.B SCHED_RESET_ON_FORK
-flag can be ORed in
-.I policy
-when calling
-.BR sched_setscheduler ().
-As a result of including this flag, children created by
-.BR fork (2)
-do not inherit privileged scheduling policies.
-See
-.BR sched (7)
-for details.
-.PP
-.BR sched_getscheduler ()
-returns the current scheduling policy of the thread
-identified by \fIpid\fP.
-If \fIpid\fP equals zero, the policy of the
-calling thread will be retrieved.
-.SH RETURN VALUE
-On success,
-.BR sched_setscheduler ()
-returns zero.
-On success,
-.BR sched_getscheduler ()
-returns the policy for the thread (a nonnegative integer).
-On error, both calls return \-1, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-Invalid arguments:
-.I pid
-is negative or
-.I param
-is NULL.
-.TP
-.B EINVAL
-.RB ( sched_setscheduler ())
-.I policy
-is not one of the recognized policies.
-.TP
-.B EINVAL
-.RB ( sched_setscheduler ())
-.I param
-does not make sense for the specified
-.IR policy .
-.TP
-.B EPERM
-The calling thread does not have appropriate privileges.
-.TP
-.B ESRCH
-The thread whose ID is \fIpid\fP could not be found.
-.SH VERSIONS
-POSIX.1 does not detail the permissions that an unprivileged
-thread requires in order to call
-.BR sched_setscheduler (),
-and details vary across systems.
-For example, the Solaris 7 manual page says that
-the real or effective user ID of the caller must
-match the real user ID or the save set-user-ID of the target.
-.PP
-The scheduling policy and parameters are in fact per-thread
-attributes on Linux.
-The value returned from a call to
-.BR gettid (2)
-can be passed in the argument
-.IR pid .
-Specifying
-.I pid
-as 0 will operate on the attributes of the calling thread,
-and passing the value returned from a call to
-.BR getpid (2)
-will operate on the attributes of the main thread of the thread group.
-(If you are using the POSIX threads API, then use
-.BR pthread_setschedparam (3),
-.BR pthread_getschedparam (3),
-and
-.BR pthread_setschedprio (3),
-instead of the
-.BR sched_* (2)
-system calls.)
-.SH STANDARDS
-POSIX.1-2008 (but see BUGS below).
-.PP
-.B SCHED_BATCH
-and
-.B SCHED_IDLE
-are Linux-specific.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-Further details of the semantics of all of the above "normal"
-and "real-time" scheduling policies can be found in the
-.BR sched (7)
-manual page.
-That page also describes an additional policy,
-.BR SCHED_DEADLINE ,
-which is settable only via
-.BR sched_setattr (2).
-.PP
-POSIX systems on which
-.BR sched_setscheduler ()
-and
-.BR sched_getscheduler ()
-are available define
-.B _POSIX_PRIORITY_SCHEDULING
-in \fI<unistd.h>\fP.
-.SH BUGS
-POSIX.1 says that on success,
-.BR sched_setscheduler ()
-should return the previous scheduling policy.
-Linux
-.BR sched_setscheduler ()
-does not conform to this requirement,
-since it always returns 0 on success.
-.SH SEE ALSO
-.ad l
-.nh
-.BR chrt (1),
-.BR nice (2),
-.BR sched_get_priority_max (2),
-.BR sched_get_priority_min (2),
-.BR sched_getaffinity (2),
-.BR sched_getattr (2),
-.BR sched_getparam (2),
-.BR sched_rr_get_interval (2),
-.BR sched_setaffinity (2),
-.BR sched_setattr (2),
-.BR sched_setparam (2),
-.BR sched_yield (2),
-.BR setpriority (2),
-.BR capabilities (7),
-.BR cpuset (7),
-.BR sched (7)
-.ad
diff --git a/man2/sched_yield.2 b/man2/sched_yield.2
deleted file mode 100644
index 4eb858018..000000000
--- a/man2/sched_yield.2
+++ /dev/null
@@ -1,76 +0,0 @@
-.\" Copyright (C) Tom Bjorkholm & Markus Kuhn, 1996
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 1996-04-01 Tom Bjorkholm <tomb@mydata.se>
-.\" First version written
-.\" 1996-04-10 Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
-.\" revision
-.\"
-.TH sched_yield 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sched_yield \- yield the processor
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sched.h>
-.PP
-.B int sched_yield(void);
-.fi
-.SH DESCRIPTION
-.BR sched_yield ()
-causes the calling thread to relinquish the CPU.
-The thread is moved to the end of the queue for its static
-priority and a new thread gets to run.
-.SH RETURN VALUE
-On success,
-.BR sched_yield ()
-returns 0.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-In the Linux implementation,
-.BR sched_yield ()
-always succeeds.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001 (but optional).
-POSIX.1-2008.
-.PP
-Before POSIX.1-2008,
-systems on which
-.BR sched_yield ()
-is available defined
-.B _POSIX_PRIORITY_SCHEDULING
-in
-.IR <unistd.h> .
-.SH CAVEATS
-.BR sched_yield ()
-is intended for use with real-time scheduling policies (i.e.,
-.B SCHED_FIFO
-or
-.BR SCHED_RR ).
-Use of
-.BR sched_yield ()
-with nondeterministic scheduling policies such as
-.B SCHED_OTHER
-is unspecified and very likely means your application design is broken.
-.PP
-If the calling thread is the only thread in the highest
-priority list at that time,
-it will continue to run after a call to
-.BR sched_yield ().
-.PP
-Avoid calling
-.BR sched_yield ()
-unnecessarily or inappropriately
-(e.g., when resources needed by other
-schedulable threads are still held by the caller),
-since doing so will result in unnecessary context switches,
-which will degrade system performance.
-.SH SEE ALSO
-.BR sched (7)
diff --git a/man2/seccomp.2 b/man2/seccomp.2
deleted file mode 100644
index b5020b883..000000000
--- a/man2/seccomp.2
+++ /dev/null
@@ -1,1245 +0,0 @@
-.\" Copyright (C) 2014 Kees Cook <keescook@chromium.org>
-.\" and Copyright (C) 2012 Will Drewry <wad@chromium.org>
-.\" and Copyright (C) 2008, 2014,2017 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (C) 2017 Tyler Hicks <tyhicks@canonical.com>
-.\" and Copyright (C) 2020 Tycho Andersen <tycho@tycho.ws>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH seccomp 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-seccomp \- operate on Secure Computing state of the process
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/seccomp.h>" " /* Definition of " SECCOMP_* " constants */"
-.BR "#include <linux/filter.h>" " /* Definition of " "struct sock_fprog" " */"
-.BR "#include <linux/audit.h>" " /* Definition of " AUDIT_* " constants */"
-.BR "#include <linux/signal.h>" " /* Definition of " SIG* " constants */"
-.BR "#include <sys/ptrace.h>" " /* Definition of " PTRACE_* " constants */"
-.\" Kees Cook noted: Anything that uses SECCOMP_RET_TRACE returns will
-.\" need <sys/ptrace.h>
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_seccomp, unsigned int " operation ", unsigned int " flags ,
-.BI " void *" args );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR seccomp (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR seccomp ()
-system call operates on the Secure Computing (seccomp) state of the
-calling process.
-.PP
-Currently, Linux supports the following
-.I operation
-values:
-.TP
-.B SECCOMP_SET_MODE_STRICT
-The only system calls that the calling thread is permitted to make are
-.BR read (2),
-.BR write (2),
-.BR _exit (2)
-(but not
-.BR exit_group (2)),
-and
-.BR sigreturn (2).
-Other system calls result in the termination of the calling thread,
-or termination of the entire process with the
-.B SIGKILL
-signal when there is only one thread.
-Strict secure computing mode is useful for number-crunching
-applications that may need to execute untrusted byte code, perhaps
-obtained by reading from a pipe or socket.
-.IP
-Note that although the calling thread can no longer call
-.BR sigprocmask (2),
-it can use
-.BR sigreturn (2)
-to block all signals apart from
-.B SIGKILL
-and
-.BR SIGSTOP .
-This means that
-.BR alarm (2)
-(for example) is not sufficient for restricting the process's execution time.
-Instead, to reliably terminate the process,
-.B SIGKILL
-must be used.
-This can be done by using
-.BR timer_create (2)
-with
-.B SIGEV_SIGNAL
-and
-.I sigev_signo
-set to
-.BR SIGKILL ,
-or by using
-.BR setrlimit (2)
-to set the hard limit for
-.BR RLIMIT_CPU .
-.IP
-This operation is available only if the kernel is configured with
-.B CONFIG_SECCOMP
-enabled.
-.IP
-The value of
-.I flags
-must be 0, and
-.I args
-must be NULL.
-.IP
-This operation is functionally identical to the call:
-.IP
-.in +4n
-.EX
-prctl(PR_SET_SECCOMP, SECCOMP_MODE_STRICT);
-.EE
-.in
-.TP
-.B SECCOMP_SET_MODE_FILTER
-The system calls allowed are defined by a pointer to a Berkeley Packet
-Filter (BPF) passed via
-.IR args .
-This argument is a pointer to a
-.IR "struct\~sock_fprog" ;
-it can be designed to filter arbitrary system calls and system call
-arguments.
-If the filter is invalid,
-.BR seccomp ()
-fails, returning
-.B EINVAL
-in
-.IR errno .
-.IP
-If
-.BR fork (2)
-or
-.BR clone (2)
-is allowed by the filter, any child processes will be constrained to
-the same system call filters as the parent.
-If
-.BR execve (2)
-is allowed,
-the existing filters will be preserved across a call to
-.BR execve (2).
-.IP
-In order to use the
-.B SECCOMP_SET_MODE_FILTER
-operation, either the calling thread must have the
-.B CAP_SYS_ADMIN
-capability in its user namespace, or the thread must already have the
-.I no_new_privs
-bit set.
-If that bit was not already set by an ancestor of this thread,
-the thread must make the following call:
-.IP
-.in +4n
-.EX
-prctl(PR_SET_NO_NEW_PRIVS, 1);
-.EE
-.in
-.IP
-Otherwise, the
-.B SECCOMP_SET_MODE_FILTER
-operation fails and returns
-.B EACCES
-in
-.IR errno .
-This requirement ensures that an unprivileged process cannot apply
-a malicious filter and then invoke a set-user-ID or
-other privileged program using
-.BR execve (2),
-thus potentially compromising that program.
-(Such a malicious filter might, for example, cause an attempt to use
-.BR setuid (2)
-to set the caller's user IDs to nonzero values to instead
-return 0 without actually making the system call.
-Thus, the program might be tricked into retaining superuser privileges
-in circumstances where it is possible to influence it to do
-dangerous things because it did not actually drop privileges.)
-.IP
-If
-.BR prctl (2)
-or
-.BR seccomp ()
-is allowed by the attached filter, further filters may be added.
-This will increase evaluation time, but allows for further reduction of
-the attack surface during execution of a thread.
-.IP
-The
-.B SECCOMP_SET_MODE_FILTER
-operation is available only if the kernel is configured with
-.B CONFIG_SECCOMP_FILTER
-enabled.
-.IP
-When
-.I flags
-is 0, this operation is functionally identical to the call:
-.IP
-.in +4n
-.EX
-prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, args);
-.EE
-.in
-.IP
-The recognized
-.I flags
-are:
-.RS
-.TP
-.BR SECCOMP_FILTER_FLAG_LOG " (since Linux 4.14)"
-.\" commit e66a39977985b1e69e17c4042cb290768eca9b02
-All filter return actions except
-.B SECCOMP_RET_ALLOW
-should be logged.
-An administrator may override this filter flag by preventing specific
-actions from being logged via the
-.I /proc/sys/kernel/seccomp/actions_logged
-file.
-.TP
-.BR SECCOMP_FILTER_FLAG_NEW_LISTENER " (since Linux 5.0)"
-.\" commit 6a21cc50f0c7f87dae5259f6cfefe024412313f6
-After successfully installing the filter program,
-return a new user-space notification file descriptor.
-(The close-on-exec flag is set for the file descriptor.)
-When the filter returns
-.B SECCOMP_RET_USER_NOTIF
-a notification will be sent to this file descriptor.
-.IP
-At most one seccomp filter using the
-.B SECCOMP_FILTER_FLAG_NEW_LISTENER
-flag can be installed for a thread.
-.IP
-See
-.BR seccomp_unotify (2)
-for further details.
-.TP
-.BR SECCOMP_FILTER_FLAG_SPEC_ALLOW " (since Linux 4.17)"
-.\" commit 00a02d0c502a06d15e07b857f8ff921e3e402675
-Disable Speculative Store Bypass mitigation.
-.TP
-.B SECCOMP_FILTER_FLAG_TSYNC
-When adding a new filter, synchronize all other threads of the calling
-process to the same seccomp filter tree.
-A "filter tree" is the ordered list of filters attached to a thread.
-(Attaching identical filters in separate
-.BR seccomp ()
-calls results in different filters from this perspective.)
-.IP
-If any thread cannot synchronize to the same filter tree,
-the call will not attach the new seccomp filter,
-and will fail, returning the first thread ID found that cannot synchronize.
-Synchronization will fail if another thread in the same process is in
-.B SECCOMP_MODE_STRICT
-or if it has attached new seccomp filters to itself,
-diverging from the calling thread's filter tree.
-.RE
-.TP
-.BR SECCOMP_GET_ACTION_AVAIL " (since Linux 4.14)"
-.\" commit d612b1fd8010d0d67b5287fe146b8b55bcbb8655
-Test to see if an action is supported by the kernel.
-This operation is helpful to confirm that the kernel knows
-of a more recently added filter return action
-since the kernel treats all unknown actions as
-.BR SECCOMP_RET_KILL_PROCESS .
-.IP
-The value of
-.I flags
-must be 0, and
-.I args
-must be a pointer to an unsigned 32-bit filter return action.
-.TP
-.BR SECCOMP_GET_NOTIF_SIZES " (since Linux 5.0)"
-.\" commit 6a21cc50f0c7f87dae5259f6cfefe024412313f6
-Get the sizes of the seccomp user-space notification structures.
-Since these structures may evolve and grow over time,
-this command can be used to determine how
-much memory to allocate for sending and receiving notifications.
-.IP
-The value of
-.I flags
-must be 0, and
-.I args
-must be a pointer to a
-.IR "struct seccomp_notif_sizes" ,
-which has the following form:
-.IP
-.EX
-struct seccomp_notif_sizes
- __u16 seccomp_notif; /* Size of notification structure */
- __u16 seccomp_notif_resp; /* Size of response structure */
- __u16 seccomp_data; /* Size of \[aq]struct seccomp_data\[aq] */
-};
-.EE
-.IP
-See
-.BR seccomp_unotify (2)
-for further details.
-.\"
-.SS Filters
-When adding filters via
-.BR SECCOMP_SET_MODE_FILTER ,
-.I args
-points to a filter program:
-.PP
-.in +4n
-.EX
-struct sock_fprog {
- unsigned short len; /* Number of BPF instructions */
- struct sock_filter *filter; /* Pointer to array of
- BPF instructions */
-};
-.EE
-.in
-.PP
-Each program must contain one or more BPF instructions:
-.PP
-.in +4n
-.EX
-struct sock_filter { /* Filter block */
- __u16 code; /* Actual filter code */
- __u8 jt; /* Jump true */
- __u8 jf; /* Jump false */
- __u32 k; /* Generic multiuse field */
-};
-.EE
-.in
-.PP
-When executing the instructions, the BPF program operates on the
-system call information made available (i.e., use the
-.B BPF_ABS
-addressing mode) as a (read-only)
-.\" Quoting Kees Cook:
-.\" If BPF even allows changing the data, it's not copied back to
-.\" the syscall when it runs. Anything wanting to do things like
-.\" that would need to use ptrace to catch the call and directly
-.\" modify the registers before continuing with the call.
-buffer of the following form:
-.PP
-.in +4n
-.EX
-struct seccomp_data {
- int nr; /* System call number */
- __u32 arch; /* AUDIT_ARCH_* value
- (see <linux/audit.h>) */
- __u64 instruction_pointer; /* CPU instruction pointer */
- __u64 args[6]; /* Up to 6 system call arguments */
-};
-.EE
-.in
-.PP
-Because numbering of system calls varies between architectures and
-some architectures (e.g., x86-64) allow user-space code to use
-the calling conventions of multiple architectures
-(and the convention being used may vary over the life of a process that uses
-.BR execve (2)
-to execute binaries that employ the different conventions),
-it is usually necessary to verify the value of the
-.I arch
-field.
-.PP
-It is strongly recommended to use an allow-list approach whenever
-possible because such an approach is more robust and simple.
-A deny-list will have to be updated whenever a potentially
-dangerous system call is added (or a dangerous flag or option if those
-are deny-listed), and it is often possible to alter the
-representation of a value without altering its meaning, leading to
-a deny-list bypass.
-See also
-.I Caveats
-below.
-.PP
-The
-.I arch
-field is not unique for all calling conventions.
-The x86-64 ABI and the x32 ABI both use
-.B AUDIT_ARCH_X86_64
-as
-.IR arch ,
-and they run on the same processors.
-Instead, the mask
-.B __X32_SYSCALL_BIT
-is used on the system call number to tell the two ABIs apart.
-.\" As noted by Dave Drysdale in a note at the end of
-.\" https://lwn.net/Articles/604515/
-.\" One additional detail to point out for the x32 ABI case:
-.\" the syscall number gets a high bit set (__X32_SYSCALL_BIT),
-.\" to mark it as an x32 call.
-.\"
-.\" If x32 support is included in the kernel, then __SYSCALL_MASK
-.\" will have a value that is not all-ones, and this will trigger
-.\" an extra instruction in system_call to mask off the extra bit,
-.\" so that the syscall table indexing still works.
-.PP
-This means that a policy must either deny all syscalls with
-.B __X32_SYSCALL_BIT
-or it must recognize syscalls with and without
-.B __X32_SYSCALL_BIT
-set.
-A list of system calls to be denied based on
-.I nr
-that does not also contain
-.I nr
-values with
-.B __X32_SYSCALL_BIT
-set can be bypassed by a malicious program that sets
-.BR __X32_SYSCALL_BIT .
-.PP
-Additionally, kernels prior to Linux 5.4 incorrectly permitted
-.I nr
-in the ranges 512-547 as well as the corresponding non-x32 syscalls ORed
-with
-.BR __X32_SYSCALL_BIT .
-For example,
-.I nr
-== 521 and
-.I nr
-== (101 |
-.BR __X32_SYSCALL_BIT )
-would result in invocations of
-.BR ptrace (2)
-with potentially confused x32-vs-x86_64 semantics in the kernel.
-Policies intended to work on kernels before Linux 5.4 must ensure that they
-deny or otherwise correctly handle these system calls.
-On Linux 5.4 and newer,
-.\" commit 6365b842aae4490ebfafadfc6bb27a6d3cc54757
-such system calls will fail with the error
-.BR ENOSYS ,
-without doing anything.
-.PP
-The
-.I instruction_pointer
-field provides the address of the machine-language instruction that
-performed the system call.
-This might be useful in conjunction with the use of
-.IR /proc/ pid /maps
-to perform checks based on which region (mapping) of the program
-made the system call.
-(Probably, it is wise to lock down the
-.BR mmap (2)
-and
-.BR mprotect (2)
-system calls to prevent the program from subverting such checks.)
-.PP
-When checking values from
-.IR args ,
-keep in mind that arguments are often
-silently truncated before being processed, but after the seccomp check.
-For example, this happens if the i386 ABI is used on an
-x86-64 kernel: although the kernel will normally not look beyond
-the 32 lowest bits of the arguments, the values of the full
-64-bit registers will be present in the seccomp data.
-A less surprising example is that if the x86-64 ABI is used to perform
-a system call that takes an argument of type
-.IR int ,
-the more-significant half of the argument register is ignored by
-the system call, but visible in the seccomp data.
-.PP
-A seccomp filter returns a 32-bit value consisting of two parts:
-the most significant 16 bits
-(corresponding to the mask defined by the constant
-.BR SECCOMP_RET_ACTION_FULL )
-contain one of the "action" values listed below;
-the least significant 16-bits (defined by the constant
-.BR SECCOMP_RET_DATA )
-are "data" to be associated with this return value.
-.PP
-If multiple filters exist, they are \fIall\fP executed,
-in reverse order of their addition to the filter tree\[em]that is,
-the most recently installed filter is executed first.
-(Note that all filters will be called
-even if one of the earlier filters returns
-.BR SECCOMP_RET_KILL .
-This is done to simplify the kernel code and to provide a
-tiny speed-up in the execution of sets of filters by
-avoiding a check for this uncommon case.)
-.\" From an Aug 2015 conversation with Kees Cook where I asked why *all*
-.\" filters are applied even if one of the early filters returns
-.\" SECCOMP_RET_KILL:
-.\"
-.\" It's just because it would be an optimization that would only speed up
-.\" the RET_KILL case, but it's the uncommon one and the one that doesn't
-.\" benefit meaningfully from such a change (you need to kill the process
-.\" really quickly?). We would speed up killing a program at the (albeit
-.\" tiny) expense to all other filtered programs. Best to keep the filter
-.\" execution logic clear, simple, and as fast as possible for all
-.\" filters.
-The return value for the evaluation of a given system call is the first-seen
-action value of highest precedence (along with its accompanying data)
-returned by execution of all of the filters.
-.PP
-In decreasing order of precedence,
-the action values that may be returned by a seccomp filter are:
-.TP
-.BR SECCOMP_RET_KILL_PROCESS " (since Linux 4.14)"
-.\" commit 4d3b0b05aae9ee9ce0970dc4cc0fb3fad5e85945
-.\" commit 0466bdb99e8744bc9befa8d62a317f0fd7fd7421
-This value results in immediate termination of the process,
-with a core dump.
-The system call is not executed.
-By contrast with
-.B SECCOMP_RET_KILL_THREAD
-below, all threads in the thread group are terminated.
-(For a discussion of thread groups, see the description of the
-.B CLONE_THREAD
-flag in
-.BR clone (2).)
-.IP
-The process terminates
-.I "as though"
-killed by a
-.B SIGSYS
-signal.
-Even if a signal handler has been registered for
-.BR SIGSYS ,
-the handler will be ignored in this case and the process always terminates.
-To a parent process that is waiting on this process (using
-.BR waitpid (2)
-or similar), the returned
-.I wstatus
-will indicate that its child was terminated as though by a
-.B SIGSYS
-signal.
-.TP
-.BR SECCOMP_RET_KILL_THREAD " (or " SECCOMP_RET_KILL )
-This value results in immediate termination of the thread
-that made the system call.
-The system call is not executed.
-Other threads in the same thread group will continue to execute.
-.IP
-The thread terminates
-.I "as though"
-killed by a
-.B SIGSYS
-signal.
-See
-.B SECCOMP_RET_KILL_PROCESS
-above.
-.IP
-.\" See these commits:
-.\" seccomp: dump core when using SECCOMP_RET_KILL
-.\" (b25e67161c295c98acda92123b2dd1e7d8642901)
-.\" seccomp: Only dump core when single-threaded
-.\" (d7276e321ff8a53106a59c85ca46d03e34288893)
-Before Linux 4.11,
-any process terminated in this way would not trigger a coredump
-(even though
-.B SIGSYS
-is documented in
-.BR signal (7)
-as having a default action of termination with a core dump).
-Since Linux 4.11,
-a single-threaded process will dump core if terminated in this way.
-.IP
-With the addition of
-.B SECCOMP_RET_KILL_PROCESS
-in Linux 4.14,
-.B SECCOMP_RET_KILL_THREAD
-was added as a synonym for
-.BR SECCOMP_RET_KILL ,
-in order to more clearly distinguish the two actions.
-.IP
-.BR Note :
-the use of
-.B SECCOMP_RET_KILL_THREAD
-to kill a single thread in a multithreaded process is likely to leave the
-process in a permanently inconsistent and possibly corrupt state.
-.TP
-.B SECCOMP_RET_TRAP
-This value results in the kernel sending a thread-directed
-.B SIGSYS
-signal to the triggering thread.
-(The system call is not executed.)
-Various fields will be set in the
-.I siginfo_t
-structure (see
-.BR sigaction (2))
-associated with signal:
-.RS
-.IP \[bu] 3
-.I si_signo
-will contain
-.BR SIGSYS .
-.IP \[bu]
-.I si_call_addr
-will show the address of the system call instruction.
-.IP \[bu]
-.I si_syscall
-and
-.I si_arch
-will indicate which system call was attempted.
-.IP \[bu]
-.I si_code
-will contain
-.BR SYS_SECCOMP .
-.IP \[bu]
-.I si_errno
-will contain the
-.B SECCOMP_RET_DATA
-portion of the filter return value.
-.RE
-.IP
-The program counter will be as though the system call happened
-(i.e., the program counter will not point to the system call instruction).
-The return value register will contain an architecture\-dependent value;
-if resuming execution, set it to something appropriate for the system call.
-(The architecture dependency is because replacing it with
-.B ENOSYS
-could overwrite some useful information.)
-.TP
-.B SECCOMP_RET_ERRNO
-This value results in the
-.B SECCOMP_RET_DATA
-portion of the filter's return value being passed to user space as the
-.I errno
-value without executing the system call.
-.TP
-.BR SECCOMP_RET_USER_NOTIF " (since Linux 5.0)"
-.\" commit 6a21cc50f0c7f87dae5259f6cfefe024412313f6
-Forward the system call to an attached user-space supervisor
-process to allow that process to decide what to do with the system call.
-If there is no attached supervisor (either
-because the filter was not installed with the
-.B SECCOMP_FILTER_FLAG_NEW_LISTENER
-flag or because the file descriptor was closed), the filter returns
-.B ENOSYS
-(similar to what happens when a filter returns
-.B SECCOMP_RET_TRACE
-and there is no tracer).
-See
-.BR seccomp_unotify (2)
-for further details.
-.IP
-Note that the supervisor process will not be notified
-if another filter returns an action value with a precedence greater than
-.BR SECCOMP_RET_USER_NOTIF .
-.TP
-.B SECCOMP_RET_TRACE
-When returned, this value will cause the kernel to attempt to notify a
-.BR ptrace (2)-based
-tracer prior to executing the system call.
-If there is no tracer present,
-the system call is not executed and returns a failure status with
-.I errno
-set to
-.BR ENOSYS .
-.IP
-A tracer will be notified if it requests
-.B PTRACE_O_TRACESECCOMP
-using
-.IR ptrace(PTRACE_SETOPTIONS) .
-The tracer will be notified of a
-.B PTRACE_EVENT_SECCOMP
-and the
-.B SECCOMP_RET_DATA
-portion of the filter's return value will be available to the tracer via
-.BR PTRACE_GETEVENTMSG .
-.IP
-The tracer can skip the system call by changing the system call number
-to \-1.
-Alternatively, the tracer can change the system call
-requested by changing the system call to a valid system call number.
-If the tracer asks to skip the system call, then the system call will
-appear to return the value that the tracer puts in the return value register.
-.IP
-.\" This was changed in ce6526e8afa4.
-.\" A related hole, using PTRACE_SYSCALL instead of SECCOMP_RET_TRACE, was
-.\" changed in arch-specific commits, e.g. 93e35efb8de4 for X86 and
-.\" 0f3912fd934c for ARM.
-Before Linux 4.8, the seccomp check will not be run again after the tracer is
-notified.
-(This means that, on older kernels, seccomp-based sandboxes
-.B "must not"
-allow use of
-.BR ptrace (2)\[em]even
-of other
-sandboxed processes\[em]without extreme care;
-ptracers can use this mechanism to escape from the seccomp sandbox.)
-.IP
-Note that a tracer process will not be notified
-if another filter returns an action value with a precedence greater than
-.BR SECCOMP_RET_TRACE .
-.TP
-.BR SECCOMP_RET_LOG " (since Linux 4.14)"
-.\" commit 59f5cf44a38284eb9e76270c786fb6cc62ef8ac4
-This value results in the system call being executed after
-the filter return action is logged.
-An administrator may override the logging of this action via
-the
-.I /proc/sys/kernel/seccomp/actions_logged
-file.
-.TP
-.B SECCOMP_RET_ALLOW
-This value results in the system call being executed.
-.PP
-If an action value other than one of the above is specified,
-then the filter action is treated as either
-.B SECCOMP_RET_KILL_PROCESS
-(since Linux 4.14)
-.\" commit 4d3b0b05aae9ee9ce0970dc4cc0fb3fad5e85945
-or
-.B SECCOMP_RET_KILL_THREAD
-(in Linux 4.13 and earlier).
-.\"
-.SS /proc interfaces
-The files in the directory
-.I /proc/sys/kernel/seccomp
-provide additional seccomp information and configuration:
-.TP
-.IR actions_avail " (since Linux 4.14)"
-.\" commit 8e5f1ad116df6b0de65eac458d5e7c318d1c05af
-A read-only ordered list of seccomp filter return actions in string form.
-The ordering, from left-to-right, is in decreasing order of precedence.
-The list represents the set of seccomp filter return actions
-supported by the kernel.
-.TP
-.IR actions_logged " (since Linux 4.14)"
-.\" commit 0ddec0fc8900201c0897b87b762b7c420436662f
-A read-write ordered list of seccomp filter return actions that
-are allowed to be logged.
-Writes to the file do not need to be in ordered form but reads from
-the file will be ordered in the same way as the
-.I actions_avail
-file.
-.IP
-It is important to note that the value of
-.I actions_logged
-does not prevent certain filter return actions from being logged when
-the audit subsystem is configured to audit a task.
-If the action is not found in the
-.I actions_logged
-file, the final decision on whether to audit the action for that task is
-ultimately left up to the audit subsystem to decide for all filter return
-actions other than
-.BR SECCOMP_RET_ALLOW .
-.IP
-The "allow" string is not accepted in the
-.I actions_logged
-file as it is not possible to log
-.B SECCOMP_RET_ALLOW
-actions.
-Attempting to write "allow" to the file will fail with the error
-.BR EINVAL .
-.\"
-.SS Audit logging of seccomp actions
-.\" commit 59f5cf44a38284eb9e76270c786fb6cc62ef8ac4
-Since Linux 4.14, the kernel provides the facility to log the
-actions returned by seccomp filters in the audit log.
-The kernel makes the decision to log an action based on
-the action type, whether or not the action is present in the
-.I actions_logged
-file, and whether kernel auditing is enabled
-(e.g., via the kernel boot option
-.IR audit=1 ).
-.\" or auditing could be enabled via the netlink API (AUDIT_SET)
-The rules are as follows:
-.IP \[bu] 3
-If the action is
-.BR SECCOMP_RET_ALLOW ,
-the action is not logged.
-.IP \[bu]
-Otherwise, if the action is either
-.B SECCOMP_RET_KILL_PROCESS
-or
-.BR SECCOMP_RET_KILL_THREAD ,
-and that action appears in the
-.I actions_logged
-file, the action is logged.
-.IP \[bu]
-Otherwise, if the filter has requested logging (the
-.B SECCOMP_FILTER_FLAG_LOG
-flag)
-and the action appears in the
-.I actions_logged
-file, the action is logged.
-.IP \[bu]
-Otherwise, if kernel auditing is enabled and the process is being audited
-.RB ( autrace (8)),
-the action is logged.
-.IP \[bu]
-Otherwise, the action is not logged.
-.SH RETURN VALUE
-On success,
-.BR seccomp ()
-returns 0.
-On error, if
-.B SECCOMP_FILTER_FLAG_TSYNC
-was used,
-the return value is the ID of the thread
-that caused the synchronization failure.
-(This ID is a kernel thread ID of the type returned by
-.BR clone (2)
-and
-.BR gettid (2).)
-On other errors, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.BR seccomp ()
-can fail for the following reasons:
-.TP
-.B EACCES
-The caller did not have the
-.B CAP_SYS_ADMIN
-capability in its user namespace, or had not set
-.I no_new_privs
-before using
-.BR SECCOMP_SET_MODE_FILTER .
-.TP
-.B EBUSY
-While installing a new filter, the
-.B SECCOMP_FILTER_FLAG_NEW_LISTENER
-flag was specified,
-but a previous filter had already been installed with that flag.
-.TP
-.B EFAULT
-.I args
-was not a valid address.
-.TP
-.B EINVAL
-.I operation
-is unknown or is not supported by this kernel version or configuration.
-.TP
-.B EINVAL
-The specified
-.I flags
-are invalid for the given
-.IR operation .
-.TP
-.B EINVAL
-.I operation
-included
-.BR BPF_ABS ,
-but the specified offset was not aligned to a 32-bit boundary or exceeded
-.IR "sizeof(struct\~seccomp_data)" .
-.TP
-.B EINVAL
-.\" See kernel/seccomp.c::seccomp_may_assign_mode() in Linux 3.18 sources
-A secure computing mode has already been set, and
-.I operation
-differs from the existing setting.
-.TP
-.B EINVAL
-.I operation
-specified
-.BR SECCOMP_SET_MODE_FILTER ,
-but the filter program pointed to by
-.I args
-was not valid or the length of the filter program was zero or exceeded
-.B BPF_MAXINSNS
-(4096) instructions.
-.TP
-.B ENOMEM
-Out of memory.
-.TP
-.B ENOMEM
-.\" ENOMEM in kernel/seccomp.c::seccomp_attach_filter() in Linux 3.18 sources
-The total length of all filter programs attached
-to the calling thread would exceed
-.B MAX_INSNS_PER_PATH
-(32768) instructions.
-Note that for the purposes of calculating this limit,
-each already existing filter program incurs an
-overhead penalty of 4 instructions.
-.TP
-.B EOPNOTSUPP
-.I operation
-specified
-.BR SECCOMP_GET_ACTION_AVAIL ,
-but the kernel does not support the filter return action specified by
-.IR args .
-.TP
-.B ESRCH
-Another thread caused a failure during thread sync, but its ID could not
-be determined.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 3.17.
-.\" FIXME . Add glibc version
-.SH NOTES
-Rather than hand-coding seccomp filters as shown in the example below,
-you may prefer to employ the
-.I libseccomp
-library, which provides a front-end for generating seccomp filters.
-.PP
-The
-.I Seccomp
-field of the
-.IR /proc/ pid /status
-file provides a method of viewing the seccomp mode of a process; see
-.BR proc (5).
-.PP
-.BR seccomp ()
-provides a superset of the functionality provided by the
-.BR prctl (2)
-.B PR_SET_SECCOMP
-operation (which does not support
-.IR flags ).
-.PP
-Since Linux 4.4, the
-.BR ptrace (2)
-.B PTRACE_SECCOMP_GET_FILTER
-operation can be used to dump a process's seccomp filters.
-.\"
-.SS Architecture support for seccomp BPF
-Architecture support for seccomp BPF filtering
-.\" Check by grepping for HAVE_ARCH_SECCOMP_FILTER in Kconfig files in
-.\" kernel source. Last checked in Linux 4.16-rc source.
-is available on the following architectures:
-.IP \[bu] 3
-x86-64, i386, x32 (since Linux 3.5)
-.PD 0
-.IP \[bu]
-ARM (since Linux 3.8)
-.IP \[bu]
-s390 (since Linux 3.8)
-.IP \[bu]
-MIPS (since Linux 3.16)
-.IP \[bu]
-ARM-64 (since Linux 3.19)
-.IP \[bu]
-PowerPC (since Linux 4.3)
-.IP \[bu]
-Tile (since Linux 4.3)
-.IP \[bu]
-PA-RISC (since Linux 4.6)
-.\" User mode Linux since Linux 4.6
-.PD
-.\"
-.SS Caveats
-There are various subtleties to consider when applying seccomp filters
-to a program, including the following:
-.IP \[bu] 3
-Some traditional system calls have user-space implementations in the
-.BR vdso (7)
-on many architectures.
-Notable examples include
-.BR clock_gettime (2),
-.BR gettimeofday (2),
-and
-.BR time (2).
-On such architectures,
-seccomp filtering for these system calls will have no effect.
-(However, there are cases where the
-.BR vdso (7)
-implementations may fall back to invoking the true system call,
-in which case seccomp filters would see the system call.)
-.IP \[bu]
-Seccomp filtering is based on system call numbers.
-However, applications typically do not directly invoke system calls,
-but instead call wrapper functions in the C library which
-in turn invoke the system calls.
-Consequently, one must be aware of the following:
-.RS
-.IP \[bu] 3
-The glibc wrappers for some traditional system calls may actually
-employ system calls with different names in the kernel.
-For example, the
-.BR exit (2)
-wrapper function actually employs the
-.BR exit_group (2)
-system call, and the
-.BR fork (2)
-wrapper function actually calls
-.BR clone (2).
-.IP \[bu]
-The behavior of wrapper functions may vary across architectures,
-according to the range of system calls provided on those architectures.
-In other words, the same wrapper function may invoke
-different system calls on different architectures.
-.IP \[bu]
-Finally, the behavior of wrapper functions can change across glibc versions.
-For example, in older versions, the glibc wrapper function for
-.BR open (2)
-invoked the system call of the same name,
-but starting in glibc 2.26, the implementation switched to calling
-.BR openat (2)
-on all architectures.
-.RE
-.PP
-The consequence of the above points is that it may be necessary
-to filter for a system call other than might be expected.
-Various manual pages in Section 2 provide helpful details
-about the differences between wrapper functions and
-the underlying system calls in subsections entitled
-.IR "C library/kernel differences" .
-.PP
-Furthermore, note that the application of seccomp filters
-even risks causing bugs in an application,
-when the filters cause unexpected failures for legitimate operations
-that the application might need to perform.
-Such bugs may not easily be discovered when testing the seccomp
-filters if the bugs occur in rarely used application code paths.
-.\"
-.SS Seccomp-specific BPF details
-Note the following BPF details specific to seccomp filters:
-.IP \[bu] 3
-The
-.B BPF_H
-and
-.B BPF_B
-size modifiers are not supported: all operations must load and store
-(4-byte) words
-.RB ( BPF_W ).
-.IP \[bu]
-To access the contents of the
-.I seccomp_data
-buffer, use the
-.B BPF_ABS
-addressing mode modifier.
-.IP \[bu]
-The
-.B BPF_LEN
-addressing mode modifier yields an immediate mode operand
-whose value is the size of the
-.I seccomp_data
-buffer.
-.SH EXAMPLES
-The program below accepts four or more arguments.
-The first three arguments are a system call number,
-a numeric architecture identifier, and an error number.
-The program uses these values to construct a BPF filter
-that is used at run time to perform the following checks:
-.IP \[bu] 3
-If the program is not running on the specified architecture,
-the BPF filter causes system calls to fail with the error
-.BR ENOSYS .
-.IP \[bu]
-If the program attempts to execute the system call with the specified number,
-the BPF filter causes the system call to fail, with
-.I errno
-being set to the specified error number.
-.PP
-The remaining command-line arguments specify
-the pathname and additional arguments of a program
-that the example program should attempt to execute using
-.BR execv (3)
-(a library function that employs the
-.BR execve (2)
-system call).
-Some example runs of the program are shown below.
-.PP
-First, we display the architecture that we are running on (x86-64)
-and then construct a shell function that looks up system call
-numbers on this architecture:
-.PP
-.in +4n
-.EX
-$ \fBuname \-m\fP
-x86_64
-$ \fBsyscall_nr() {
- cat /usr/src/linux/arch/x86/syscalls/syscall_64.tbl | \e
- awk \[aq]$2 != "x32" && $3 == "\[aq]$1\[aq]" { print $1 }\[aq]
-}\fP
-.EE
-.in
-.PP
-When the BPF filter rejects a system call (case [2] above),
-it causes the system call to fail with the error number
-specified on the command line.
-In the experiments shown here, we'll use error number 99:
-.PP
-.in +4n
-.EX
-$ \fBerrno 99\fP
-EADDRNOTAVAIL 99 Cannot assign requested address
-.EE
-.in
-.PP
-In the following example, we attempt to run the command
-.BR whoami (1),
-but the BPF filter rejects the
-.BR execve (2)
-system call, so that the command is not even executed:
-.PP
-.in +4n
-.EX
-$ \fBsyscall_nr execve\fP
-59
-$ \fB./a.out\fP
-Usage: ./a.out <syscall_nr> <arch> <errno> <prog> [<args>]
-Hint for <arch>: AUDIT_ARCH_I386: 0x40000003
- AUDIT_ARCH_X86_64: 0xC000003E
-$ \fB./a.out 59 0xC000003E 99 /bin/whoami\fP
-execv: Cannot assign requested address
-.EE
-.in
-.PP
-In the next example, the BPF filter rejects the
-.BR write (2)
-system call, so that, although it is successfully started, the
-.BR whoami (1)
-command is not able to write output:
-.PP
-.in +4n
-.EX
-$ \fBsyscall_nr write\fP
-1
-$ \fB./a.out 1 0xC000003E 99 /bin/whoami\fP
-.EE
-.in
-.PP
-In the final example,
-the BPF filter rejects a system call that is not used by the
-.BR whoami (1)
-command, so it is able to successfully execute and produce output:
-.PP
-.in +4n
-.EX
-$ \fBsyscall_nr preadv\fP
-295
-$ \fB./a.out 295 0xC000003E 99 /bin/whoami\fP
-cecilia
-.EE
-.in
-.SS Program source
-.\" SRC BEGIN (seccomp.c)
-.EX
-#include <linux/audit.h>
-#include <linux/filter.h>
-#include <linux/seccomp.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/prctl.h>
-#include <sys/syscall.h>
-#include <unistd.h>
-\&
-#define X32_SYSCALL_BIT 0x40000000
-#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
-\&
-static int
-install_filter(int syscall_nr, unsigned int t_arch, int f_errno)
-{
- unsigned int upper_nr_limit = 0xffffffff;
-\&
- /* Assume that AUDIT_ARCH_X86_64 means the normal x86\-64 ABI
- (in the x32 ABI, all system calls have bit 30 set in the
- \[aq]nr\[aq] field, meaning the numbers are >= X32_SYSCALL_BIT). */
- if (t_arch == AUDIT_ARCH_X86_64)
- upper_nr_limit = X32_SYSCALL_BIT \- 1;
-\&
- struct sock_filter filter[] = {
- /* [0] Load architecture from \[aq]seccomp_data\[aq] buffer into
- accumulator. */
- BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
- (offsetof(struct seccomp_data, arch))),
-\&
- /* [1] Jump forward 5 instructions if architecture does not
- match \[aq]t_arch\[aq]. */
- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, t_arch, 0, 5),
-\&
- /* [2] Load system call number from \[aq]seccomp_data\[aq] buffer into
- accumulator. */
- BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
- (offsetof(struct seccomp_data, nr))),
-\&
- /* [3] Check ABI \- only needed for x86\-64 in deny\-list use
- cases. Use BPF_JGT instead of checking against the bit
- mask to avoid having to reload the syscall number. */
- BPF_JUMP(BPF_JMP | BPF_JGT | BPF_K, upper_nr_limit, 3, 0),
-\&
- /* [4] Jump forward 1 instruction if system call number
- does not match \[aq]syscall_nr\[aq]. */
- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, syscall_nr, 0, 1),
-\&
- /* [5] Matching architecture and system call: don\[aq]t execute
- the system call, and return \[aq]f_errno\[aq] in \[aq]errno\[aq]. */
- BPF_STMT(BPF_RET | BPF_K,
- SECCOMP_RET_ERRNO | (f_errno & SECCOMP_RET_DATA)),
-\&
- /* [6] Destination of system call number mismatch: allow other
- system calls. */
- BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_ALLOW),
-\&
- /* [7] Destination of architecture mismatch: kill process. */
- BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_KILL_PROCESS),
- };
-\&
- struct sock_fprog prog = {
- .len = ARRAY_SIZE(filter),
- .filter = filter,
- };
-\&
- if (syscall(SYS_seccomp, SECCOMP_SET_MODE_FILTER, 0, &prog)) {
- perror("seccomp");
- return 1;
- }
-\&
- return 0;
-}
-\&
-int
-main(int argc, char *argv[])
-{
- if (argc < 5) {
- fprintf(stderr, "Usage: "
- "%s <syscall_nr> <arch> <errno> <prog> [<args>]\en"
- "Hint for <arch>: AUDIT_ARCH_I386: 0x%X\en"
- " AUDIT_ARCH_X86_64: 0x%X\en"
- "\en", argv[0], AUDIT_ARCH_I386, AUDIT_ARCH_X86_64);
- exit(EXIT_FAILURE);
- }
-\&
- if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)) {
- perror("prctl");
- exit(EXIT_FAILURE);
- }
-\&
- if (install_filter(strtol(argv[1], NULL, 0),
- strtoul(argv[2], NULL, 0),
- strtol(argv[3], NULL, 0)))
- exit(EXIT_FAILURE);
-\&
- execv(argv[4], &argv[4]);
- perror("execv");
- exit(EXIT_FAILURE);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR bpfc (1),
-.BR strace (1),
-.BR bpf (2),
-.BR prctl (2),
-.BR ptrace (2),
-.BR seccomp_unotify (2),
-.BR sigaction (2),
-.BR proc (5),
-.BR signal (7),
-.BR socket (7)
-.PP
-Various pages from the
-.I libseccomp
-library, including:
-.BR scmp_sys_resolver (1),
-.BR seccomp_export_bpf (3),
-.BR seccomp_init (3),
-.BR seccomp_load (3),
-and
-.BR seccomp_rule_add (3).
-.PP
-The kernel source files
-.I Documentation/networking/filter.txt
-and
-.I Documentation/userspace\-api/seccomp_filter.rst
-.\" commit c061f33f35be0ccc80f4b8e0aea5dfd2ed7e01a3
-(or
-.I Documentation/prctl/seccomp_filter.txt
-before Linux 4.13).
-.PP
-McCanne, S.\& and Jacobson, V.\& (1992)
-.IR "The BSD Packet Filter: A New Architecture for User-level Packet Capture" ,
-Proceedings of the USENIX Winter 1993 Conference
-.UR http://www.tcpdump.org/papers/bpf\-usenix93.pdf
-.UE
diff --git a/man2/seccomp_unotify.2 b/man2/seccomp_unotify.2
deleted file mode 100644
index 32f183704..000000000
--- a/man2/seccomp_unotify.2
+++ /dev/null
@@ -1,2011 +0,0 @@
-.\" Copyright (C) 2020 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH seccomp_unotify 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-seccomp_unotify \- Seccomp user-space notification mechanism
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <linux/seccomp.h>
-.B #include <linux/filter.h>
-.B #include <linux/audit.h>
-.PP
-.BI "int seccomp(unsigned int " operation ", unsigned int " flags \
-", void *" args );
-.PP
-.B #include <sys/ioctl.h>
-.PP
-.BI "int ioctl(int " fd ", SECCOMP_IOCTL_NOTIF_RECV,"
-.BI " struct seccomp_notif *" req );
-.BI "int ioctl(int " fd ", SECCOMP_IOCTL_NOTIF_SEND,"
-.BI " struct seccomp_notif_resp *" resp );
-.BI "int ioctl(int " fd ", SECCOMP_IOCTL_NOTIF_ID_VALID, __u64 *" id );
-.BI "int ioctl(int " fd ", SECCOMP_IOCTL_NOTIF_ADDFD,"
-.BI " struct seccomp_notif_addfd *" addfd );
-.fi
-.SH DESCRIPTION
-This page describes the user-space notification mechanism provided by the
-Secure Computing (seccomp) facility.
-As well as the use of the
-.B SECCOMP_FILTER_FLAG_NEW_LISTENER
-flag, the
-.B SECCOMP_RET_USER_NOTIF
-action value, and the
-.B SECCOMP_GET_NOTIF_SIZES
-operation described in
-.BR seccomp (2),
-this mechanism involves the use of a number of related
-.BR ioctl (2)
-operations (described below).
-.\"
-.SS Overview
-In conventional usage of a seccomp filter,
-the decision about how to treat a system call is made by the filter itself.
-By contrast, the user-space notification mechanism allows
-the seccomp filter to delegate
-the handling of the system call to another user-space process.
-Note that this mechanism is explicitly
-.B not
-intended as a method implementing security policy; see NOTES.
-.PP
-In the discussion that follows,
-the thread(s) on which the seccomp filter is installed is (are)
-referred to as the
-.IR target ,
-and the process that is notified by the user-space notification
-mechanism is referred to as the
-.IR supervisor .
-.PP
-A suitably privileged supervisor can use the user-space notification
-mechanism to perform actions on behalf of the target.
-The advantage of the user-space notification mechanism is that
-the supervisor will
-usually be able to retrieve information about the target and the
-performed system call that the seccomp filter itself cannot.
-(A seccomp filter is limited in the information it can obtain and
-the actions that it can perform because it
-is running on a virtual machine inside the kernel.)
-.PP
-An overview of the steps performed by the target and the supervisor
-is as follows:
-.\"-------------------------------------
-.IP (1) 5
-The target establishes a seccomp filter in the usual manner,
-but with two differences:
-.RS
-.IP \[bu] 3
-The
-.BR seccomp (2)
-.I flags
-argument includes the flag
-.BR SECCOMP_FILTER_FLAG_NEW_LISTENER .
-Consequently, the return value of the (successful)
-.BR seccomp (2)
-call is a new "listening"
-file descriptor that can be used to receive notifications.
-Only one "listening" seccomp filter can be installed for a thread.
-.\" FIXME
-.\" Is the last sentence above correct?
-.\"
-.\" Kees Cook (25 Oct 2020) notes:
-.\"
-.\" I like this limitation, but I expect that it'll need to change in the
-.\" future. Even with LSMs, we see the need for arbitrary stacking, and the
-.\" idea of there being only 1 supervisor will eventually break down. Right
-.\" now there is only 1 because only container managers are using this
-.\" feature. But if some daemon starts using it to isolate some thread,
-.\" suddenly it might break if a container manager is trying to listen to it
-.\" too, etc. I expect it won't be needed soon, but I do think it'll change.
-.\"
-.IP \[bu]
-In cases where it is appropriate, the seccomp filter returns the action value
-.BR SECCOMP_RET_USER_NOTIF .
-This return value will trigger a notification event.
-.RE
-.\"-------------------------------------
-.IP (2)
-In order that the supervisor can obtain notifications
-using the listening file descriptor,
-(a duplicate of) that file descriptor must be passed from
-the target to the supervisor.
-One way in which this could be done is by passing the file descriptor
-over a UNIX domain socket connection between the target and the supervisor
-(using the
-.B SCM_RIGHTS
-ancillary message type described in
-.BR unix (7)).
-Another way to do this is through the use of
-.BR pidfd_getfd (2).
-.\" Jann Horn:
-.\" Instead of using unix domain sockets to send the fd to the
-.\" parent, I think you could also use clone3() with
-.\" flags==CLONE_FILES|SIGCHLD, dup2() the seccomp fd to an fd
-.\" that was reserved in the parent, call unshare(CLONE_FILES)
-.\" in the child after setting up the seccomp fd, and wake
-.\" up the parent with something like pthread_cond_signal()?
-.\" I'm not sure whether that'd look better or worse in the
-.\" end though, so maybe just ignore this comment.
-.\"-------------------------------------
-.IP (3)
-The supervisor will receive notification events
-on the listening file descriptor.
-These events are returned as structures of type
-.IR seccomp_notif .
-Because this structure and its size may evolve over kernel versions,
-the supervisor must first determine the size of this structure
-using the
-.BR seccomp (2)
-.B SECCOMP_GET_NOTIF_SIZES
-operation, which returns a structure of type
-.IR seccomp_notif_sizes .
-The supervisor allocates a buffer of size
-.I seccomp_notif_sizes.seccomp_notif
-bytes to receive notification events.
-In addition,the supervisor allocates another buffer of size
-.I seccomp_notif_sizes.seccomp_notif_resp
-bytes for the response (a
-.I struct seccomp_notif_resp
-structure)
-that it will provide to the kernel (and thus the target).
-.\"-------------------------------------
-.IP (4)
-The target then performs its workload,
-which includes system calls that will be controlled by the seccomp filter.
-Whenever one of these system calls causes the filter to return the
-.B SECCOMP_RET_USER_NOTIF
-action value, the kernel does
-.I not
-(yet) execute the system call;
-instead, execution of the target is temporarily blocked inside
-the kernel (in a sleep state that is interruptible by signals)
-and a notification event is generated on the listening file descriptor.
-.\"-------------------------------------
-.IP (5)
-The supervisor can now repeatedly monitor the
-listening file descriptor for
-.BR SECCOMP_RET_USER_NOTIF -triggered
-events.
-To do this, the supervisor uses the
-.B SECCOMP_IOCTL_NOTIF_RECV
-.BR ioctl (2)
-operation to read information about a notification event;
-this operation blocks until an event is available.
-The operation returns a
-.I seccomp_notif
-structure containing information about the system call
-that is being attempted by the target.
-(As described in NOTES,
-the file descriptor can also be monitored with
-.BR select (2),
-.BR poll (2),
-or
-.BR epoll (7).)
-.\" FIXME
-.\" Christian Brauner:
-.\"
-.\" Do we support O_NONBLOCK with SECCOMP_IOCTL_NOTIF_RECV and if
-.\" not should we?
-.\"
-.\" Michael Kerrisk:
-.\"
-.\" A quick test suggests that O_NONBLOCK has no effect on the blocking
-.\" behavior of SECCOMP_IOCTL_NOTIF_RECV.
-.
-.\"-------------------------------------
-.IP (6)
-The
-.I seccomp_notif
-structure returned by the
-.B SECCOMP_IOCTL_NOTIF_RECV
-operation includes the same information (a
-.I seccomp_data
-structure) that was passed to the seccomp filter.
-This information allows the supervisor to discover the system call number and
-the arguments for the target's system call.
-In addition, the notification event contains the ID of the thread
-that triggered the notification and a unique cookie value that
-is used in subsequent
-.B SECCOMP_IOCTL_NOTIF_ID_VALID
-and
-.B SECCOMP_IOCTL_NOTIF_SEND
-operations.
-.IP
-The information in the notification can be used to discover the
-values of pointer arguments for the target's system call.
-(This is something that can't be done from within a seccomp filter.)
-One way in which the supervisor can do this is to open the corresponding
-.IR /proc/ tid /mem
-file (see
-.BR proc (5))
-and read bytes from the location that corresponds to one of
-the pointer arguments whose value is supplied in the notification event.
-.\" Tycho Andersen mentioned that there are alternatives to /proc/PID/mem,
-.\" such as ptrace() and /proc/PID/map_files
-(The supervisor must be careful to avoid
-a race condition that can occur when doing this;
-see the description of the
-.B SECCOMP_IOCTL_NOTIF_ID_VALID
-.BR ioctl (2)
-operation below.)
-In addition,
-the supervisor can access other system information that is visible
-in user space but which is not accessible from a seccomp filter.
-.\"-------------------------------------
-.IP (7)
-Having obtained information as per the previous step,
-the supervisor may then choose to perform an action in response
-to the target's system call
-(which, as noted above, is not executed when the seccomp filter returns the
-.B SECCOMP_RET_USER_NOTIF
-action value).
-.IP
-One example use case here relates to containers.
-The target may be located inside a container where
-it does not have sufficient capabilities to mount a filesystem
-in the container's mount namespace.
-However, the supervisor may be a more privileged process that
-does have sufficient capabilities to perform the mount operation.
-.\"-------------------------------------
-.IP (8)
-The supervisor then sends a response to the notification.
-The information in this response is used by the kernel to construct
-a return value for the target's system call and provide
-a value that will be assigned to the
-.I errno
-variable of the target.
-.IP
-The response is sent using the
-.B SECCOMP_IOCTL_NOTIF_SEND
-.BR ioctl (2)
-operation, which is used to transmit a
-.I seccomp_notif_resp
-structure to the kernel.
-This structure includes a cookie value that the supervisor obtained in the
-.I seccomp_notif
-structure returned by the
-.B SECCOMP_IOCTL_NOTIF_RECV
-operation.
-This cookie value allows the kernel to associate the response with the
-target.
-This structure must include the cookie value that the supervisor
-obtained in the
-.I seccomp_notif
-structure returned by the
-.B SECCOMP_IOCTL_NOTIF_RECV
-operation;
-the cookie allows the kernel to associate the response with the target.
-.\"-------------------------------------
-.IP (9)
-Once the notification has been sent,
-the system call in the target thread unblocks,
-returning the information that was provided by the supervisor
-in the notification response.
-.\"-------------------------------------
-.PP
-As a variation on the last two steps,
-the supervisor can send a response that tells the kernel that it
-should execute the target thread's system call; see the discussion of
-.BR SECCOMP_USER_NOTIF_FLAG_CONTINUE ,
-below.
-.\"
-.SH IOCTL OPERATIONS
-The following
-.BR ioctl (2)
-operations are supported by the seccomp user-space
-notification file descriptor.
-For each of these operations, the first (file descriptor) argument of
-.BR ioctl (2)
-is the listening file descriptor returned by a call to
-.BR seccomp (2)
-with the
-.B SECCOMP_FILTER_FLAG_NEW_LISTENER
-flag.
-.\"
-.SS SECCOMP_IOCTL_NOTIF_RECV
-The
-.B SECCOMP_IOCTL_NOTIF_RECV
-operation (available since Linux 5.0) is used to obtain a user-space
-notification event.
-If no such event is currently pending,
-the operation blocks until an event occurs.
-The third
-.BR ioctl (2)
-argument is a pointer to a structure of the following form
-which contains information about the event.
-This structure must be zeroed out before the call.
-.PP
-.in +4n
-.EX
-struct seccomp_notif {
- __u64 id; /* Cookie */
- __u32 pid; /* TID of target thread */
- __u32 flags; /* Currently unused (0) */
- struct seccomp_data data; /* See seccomp(2) */
-};
-.EE
-.in
-.PP
-The fields in this structure are as follows:
-.TP
-.I id
-This is a cookie for the notification.
-Each such cookie is guaranteed to be unique for the corresponding
-seccomp filter.
-.RS
-.IP \[bu] 3
-The cookie can be used with the
-.B SECCOMP_IOCTL_NOTIF_ID_VALID
-.BR ioctl (2)
-operation described below.
-.IP \[bu]
-When returning a notification response to the kernel,
-the supervisor must include the cookie value in the
-.I seccomp_notif_resp
-structure that is specified as the argument of the
-.B SECCOMP_IOCTL_NOTIF_SEND
-operation.
-.RE
-.TP
-.I pid
-This is the thread ID of the target thread that triggered
-the notification event.
-.TP
-.I flags
-This is a bit mask of flags providing further information on the event.
-In the current implementation, this field is always zero.
-.TP
-.I data
-This is a
-.I seccomp_data
-structure containing information about the system call that
-triggered the notification.
-This is the same structure that is passed to the seccomp filter.
-See
-.BR seccomp (2)
-for details of this structure.
-.PP
-On success, this operation returns 0; on failure, \-1 is returned, and
-.I errno
-is set to indicate the cause of the error.
-This operation can fail with the following errors:
-.TP
-.BR EINVAL " (since Linux 5.5)"
-.\" commit 2882d53c9c6f3b8311d225062522f03772cf0179
-The
-.I seccomp_notif
-structure that was passed to the call contained nonzero fields.
-.TP
-.B ENOENT
-The target thread was killed by a signal as the notification information
-was being generated,
-or the target's (blocked) system call was interrupted by a signal handler.
-.\" FIXME
-.\" From my experiments,
-.\" it appears that if a SECCOMP_IOCTL_NOTIF_RECV is done after
-.\" the target thread terminates, then the ioctl() simply
-.\" blocks (rather than returning an error to indicate that the
-.\" target no longer exists).
-.\"
-.\" I found that surprising, and it required some contortions in
-.\" the example program. It was not possible to code my SIGCHLD
-.\" handler (which reaps the zombie when the worker/target
-.\" terminates) to simply set a flag checked in the main
-.\" handleNotifications() loop, since this created an
-.\" unavoidable race where the child might terminate just after
-.\" I had checked the flag, but before I blocked (forever!) in the
-.\" SECCOMP_IOCTL_NOTIF_RECV operation. Instead, I had to code
-.\" the signal handler to simply call _exit(2) in order to
-.\" terminate the parent process (the supervisor).
-.\"
-.\" Is this expected behavior? It seems to me rather
-.\" desirable that SECCOMP_IOCTL_NOTIF_RECV should give an error
-.\" if the target has terminated.
-.\"
-.\" Jann posted a patch to rectify this, but there was no response
-.\" (Lore link: https://bit.ly/3jvUBxk) to his question about fixing
-.\" this issue. (I've tried building with the patch, but encountered
-.\" an issue with the target process entering D state after a signal.)
-.\"
-.\" For now, this behavior is documented in BUGS.
-.\"
-.\" Kees Cook commented: Let's change [this] ASAP!
-.\"
-.SS SECCOMP_IOCTL_NOTIF_ID_VALID
-The
-.B SECCOMP_IOCTL_NOTIF_ID_VALID
-operation (available since Linux 5.0) is used to check that a notification ID
-returned by an earlier
-.B SECCOMP_IOCTL_NOTIF_RECV
-operation is still valid
-(i.e., that the target still exists and its system call
-is still blocked waiting for a response).
-.PP
-The third
-.BR ioctl (2)
-argument is a pointer to the cookie
-.RI ( id )
-returned by the
-.B SECCOMP_IOCTL_NOTIF_RECV
-operation.
-.PP
-This operation is necessary to avoid race conditions that can occur when the
-.I pid
-returned by the
-.B SECCOMP_IOCTL_NOTIF_RECV
-operation terminates, and that process ID is reused by another process.
-An example of this kind of race is the following
-.IP (1) 5
-A notification is generated on the listening file descriptor.
-The returned
-.I seccomp_notif
-contains the TID of the target thread (in the
-.I pid
-field of the structure).
-.IP (2)
-The target terminates.
-.IP (3)
-Another thread or process is created on the system that by chance reuses the
-TID that was freed when the target terminated.
-.IP (4)
-The supervisor
-.BR open (2)s
-the
-.IR /proc/ tid /mem
-file for the TID obtained in step 1, with the intention of (say)
-inspecting the memory location(s) that containing the argument(s) of
-the system call that triggered the notification in step 1.
-.PP
-In the above scenario, the risk is that the supervisor may try
-to access the memory of a process other than the target.
-This race can be avoided by following the call to
-.BR open (2)
-with a
-.B SECCOMP_IOCTL_NOTIF_ID_VALID
-operation to verify that the process that generated the notification
-is still alive.
-(Note that if the target terminates after the latter step,
-a subsequent
-.BR read (2)
-from the file descriptor may return 0, indicating end of file.)
-.\" Jann Horn:
-.\" the PID can be reused, but the /proc/$pid directory is
-.\" internally not associated with the numeric PID, but,
-.\" conceptually speaking, with a specific incarnation of the
-.\" PID, or something like that. (Actually, it is associated
-.\" with the "struct pid", which is not reused, instead of the
-.\" numeric PID.
-.PP
-See NOTES for a discussion of other cases where
-.B SECCOMP_IOCTL_NOTIF_ID_VALID
-checks must be performed.
-.PP
-On success (i.e., the notification ID is still valid),
-this operation returns 0.
-On failure (i.e., the notification ID is no longer valid),
-\-1 is returned, and
-.I errno
-is set to
-.BR ENOENT .
-.\"
-.SS SECCOMP_IOCTL_NOTIF_SEND
-The
-.B SECCOMP_IOCTL_NOTIF_SEND
-operation (available since Linux 5.0)
-is used to send a notification response back to the kernel.
-The third
-.BR ioctl (2)
-argument of this structure is a pointer to a structure of the following form:
-.PP
-.in +4n
-.EX
-struct seccomp_notif_resp {
- __u64 id; /* Cookie value */
- __s64 val; /* Success return value */
- __s32 error; /* 0 (success) or negative error number */
- __u32 flags; /* See below */
-};
-.EE
-.in
-.PP
-The fields of this structure are as follows:
-.TP
-.I id
-This is the cookie value that was obtained using the
-.B SECCOMP_IOCTL_NOTIF_RECV
-operation.
-This cookie value allows the kernel to correctly associate this response
-with the system call that triggered the user-space notification.
-.TP
-.I val
-This is the value that will be used for a spoofed
-success return for the target's system call; see below.
-.TP
-.I error
-This is the value that will be used as the error number
-.RI ( errno )
-for a spoofed error return for the target's system call; see below.
-.TP
-.I flags
-This is a bit mask that includes zero or more of the following flags:
-.RS
-.TP
-.BR SECCOMP_USER_NOTIF_FLAG_CONTINUE " (since Linux 5.5)"
-Tell the kernel to execute the target's system call.
-.\" commit fb3c5386b382d4097476ce9647260fc89b34afdb
-.RE
-.PP
-Two kinds of response are possible:
-.IP \[bu] 3
-A response to the kernel telling it to execute the
-target's system call.
-In this case, the
-.I flags
-field includes
-.B SECCOMP_USER_NOTIF_FLAG_CONTINUE
-and the
-.I error
-and
-.I val
-fields must be zero.
-.IP
-This kind of response can be useful in cases where the supervisor needs
-to do deeper analysis of the target's system call than is possible
-from a seccomp filter (e.g., examining the values of pointer arguments),
-and, having decided that the system call does not require emulation
-by the supervisor, the supervisor wants the system call to
-be executed normally in the target.
-.IP
-The
-.B SECCOMP_USER_NOTIF_FLAG_CONTINUE
-flag should be used with caution; see NOTES.
-.IP \[bu]
-A spoofed return value for the target's system call.
-In this case, the kernel does not execute the target's system call,
-instead causing the system call to return a spoofed value as specified by
-fields of the
-.I seccomp_notif_resp
-structure.
-The supervisor should set the fields of this structure as follows:
-.RS
-.IP + 3
-.I flags
-does not contain
-.BR SECCOMP_USER_NOTIF_FLAG_CONTINUE .
-.IP +
-.I error
-is set either to 0 for a spoofed "success" return or to a negative
-error number for a spoofed "failure" return.
-In the former case, the kernel causes the target's system call
-to return the value specified in the
-.I val
-field.
-In the latter case, the kernel causes the target's system call
-to return \-1, and
-.I errno
-is assigned the negated
-.I error
-value.
-.IP +
-.I val
-is set to a value that will be used as the return value for a spoofed
-"success" return for the target's system call.
-The value in this field is ignored if the
-.I error
-field contains a nonzero value.
-.\" FIXME
-.\" Kees Cook suggested:
-.\"
-.\" Strictly speaking, this is architecture specific, but
-.\" all architectures do it this way. Should seccomp enforce
-.\" val == 0 when err != 0 ?
-.\"
-.\" Christian Brauner
-.\"
-.\" Feels like it should, at least for the SEND ioctl where we already
-.\" verify that val and err are both 0 when CONTINUE is specified (as you
-.\" pointed out correctly above).
-.RE
-.PP
-On success, this operation returns 0; on failure, \-1 is returned, and
-.I errno
-is set to indicate the cause of the error.
-This operation can fail with the following errors:
-.TP
-.B EINPROGRESS
-A response to this notification has already been sent.
-.TP
-.B EINVAL
-An invalid value was specified in the
-.I flags field.
-.TP
-.B
-.B EINVAL
-The
-.I flags
-field contained
-.BR SECCOMP_USER_NOTIF_FLAG_CONTINUE ,
-and the
-.I error
-or
-.I val
-field was not zero.
-.TP
-.B ENOENT
-The blocked system call in the target
-has been interrupted by a signal handler
-or the target has terminated.
-.\" Jann Horn notes:
-.\" you could also get this [ENOENT] if a response has already
-.\" been sent, instead of EINPROGRESS - the only difference is
-.\" whether the target thread has picked up the response yet
-.\"
-.SS SECCOMP_IOCTL_NOTIF_ADDFD
-The
-.B SECCOMP_IOCTL_NOTIF_ADDFD
-operation (available since Linux 5.9)
-allows the supervisor to install a file descriptor
-into the target's file descriptor table.
-Much like the use of
-.B SCM_RIGHTS
-messages described in
-.BR unix (7),
-this operation is semantically equivalent to duplicating
-a file descriptor from the supervisor's file descriptor table
-into the target's file descriptor table.
-.PP
-The
-.B SECCOMP_IOCTL_NOTIF_ADDFD
-operation permits the supervisor to emulate a target system call (such as
-.BR socket (2)
-or
-.BR openat (2))
-that generates a file descriptor.
-The supervisor can perform the system call that generates
-the file descriptor (and associated open file description)
-and then use this operation to allocate
-a file descriptor that refers to the same open file description in the target.
-(For an explanation of open file descriptions, see
-.BR open (2).)
-.PP
-Once this operation has been performed,
-the supervisor can close its copy of the file descriptor.
-.PP
-In the target,
-the received file descriptor is subject to the same
-Linux Security Module (LSM) checks as are applied to a file descriptor
-that is received in an
-.B SCM_RIGHTS
-ancillary message.
-If the file descriptor refers to a socket,
-it inherits the cgroup version 1 network controller settings
-.RI ( classid
-and
-.IR netprioidx )
-of the target.
-.PP
-The third
-.BR ioctl (2)
-argument is a pointer to a structure of the following form:
-.PP
-.in +4n
-.EX
-struct seccomp_notif_addfd {
- __u64 id; /* Cookie value */
- __u32 flags; /* Flags */
- __u32 srcfd; /* Local file descriptor number */
- __u32 newfd; /* 0 or desired file descriptor
- number in target */
- __u32 newfd_flags; /* Flags to set on target file
- descriptor */
-};
-.EE
-.in
-.PP
-The fields in this structure are as follows:
-.TP
-.I id
-This field should be set to the notification ID
-(cookie value) that was obtained via
-.BR SECCOMP_IOCTL_NOTIF_RECV .
-.TP
-.I flags
-This field is a bit mask of flags that modify the behavior of the operation.
-Currently, only one flag is supported:
-.RS
-.TP
-.B SECCOMP_ADDFD_FLAG_SETFD
-When allocating the file descriptor in the target,
-use the file descriptor number specified in the
-.I newfd
-field.
-.TP
-.BR SECCOMP_ADDFD_FLAG_SEND " (since Linux 5.14)"
-.\" commit 0ae71c7720e3ae3aabd2e8a072d27f7bd173d25c
-Perform the equivalent of
-.B SECCOMP_IOCTL_NOTIF_ADDFD
-plus
-.B SECCOMP_IOCTL_NOTIF_SEND
-as an atomic operation.
-On successful invocation, the target process's
-.I errno
-will be 0
-and the return value will be the file descriptor number
-that was allocated in the target.
-If allocating the file descriptor in the target fails,
-the target's system call continues to be blocked
-until a successful response is sent.
-.RE
-.TP
-.I srcfd
-This field should be set to the number of the file descriptor
-in the supervisor that is to be duplicated.
-.TP
-.I newfd
-This field determines which file descriptor number is allocated in the target.
-If the
-.B SECCOMP_ADDFD_FLAG_SETFD
-flag is set,
-then this field specifies which file descriptor number should be allocated.
-If this file descriptor number is already open in the target,
-it is atomically closed and reused.
-If the descriptor duplication fails due to an LSM check, or if
-.I srcfd
-is not a valid file descriptor,
-the file descriptor
-.I newfd
-will not be closed in the target process.
-.IP
-If the
-.B SECCOMP_ADDFD_FLAG_SETFD
-flag it not set, then this field must be 0,
-and the kernel allocates the lowest unused file descriptor number
-in the target.
-.TP
-.I newfd_flags
-This field is a bit mask specifying flags that should be set on
-the file descriptor that is received in the target process.
-Currently, only the following flag is implemented:
-.RS
-.TP
-.B O_CLOEXEC
-Set the close-on-exec flag on the received file descriptor.
-.RE
-.PP
-On success, this
-.BR ioctl (2)
-call returns the number of the file descriptor that was allocated
-in the target.
-Assuming that the emulated system call is one that returns
-a file descriptor as its function result (e.g.,
-.BR socket (2)),
-this value can be used as the return value
-.RI ( resp.val )
-that is supplied in the response that is subsequently sent with the
-.B SECCOMP_IOCTL_NOTIF_SEND
-operation.
-.PP
-On error, \-1 is returned and
-.I errno
-is set to indicate the cause of the error.
-.PP
-This operation can fail with the following errors:
-.TP
-.B EBADF
-Allocating the file descriptor in the target would cause the target's
-.B RLIMIT_NOFILE
-limit to be exceeded (see
-.BR getrlimit (2)).
-.TP
-.B EBUSY
-If the flag
-.B SECCOMP_IOCTL_NOTIF_SEND
-is used, this means the operation can't proceed until other
-.B SECCOMP_IOCTL_NOTIF_ADDFD
-requests are processed.
-.TP
-.B EINPROGRESS
-The user-space notification specified in the
-.I id
-field exists but has not yet been fetched (by a
-.BR SECCOMP_IOCTL_NOTIF_RECV )
-or has already been responded to (by a
-.BR SECCOMP_IOCTL_NOTIF_SEND ).
-.TP
-.B EINVAL
-An invalid flag was specified in the
-.I flags
-or
-.I newfd_flags
-field, or the
-.I newfd
-field is nonzero and the
-.B SECCOMP_ADDFD_FLAG_SETFD
-flag was not specified in the
-.I flags
-field.
-.TP
-.B EMFILE
-The file descriptor number specified in
-.I newfd
-exceeds the limit specified in
-.IR /proc/sys/fs/nr_open .
-.TP
-.B ENOENT
-The blocked system call in the target
-has been interrupted by a signal handler
-or the target has terminated.
-.PP
-Here is some sample code (with error handling omitted) that uses the
-.B SECCOMP_ADDFD_FLAG_SETFD
-operation (here, to emulate a call to
-.BR openat (2)):
-.PP
-.EX
-.in +4n
-int fd, removeFd;
-\&
-fd = openat(req\->data.args[0], path, req\->data.args[2],
- req\->data.args[3]);
-\&
-struct seccomp_notif_addfd addfd;
-addfd.id = req\->id; /* Cookie from SECCOMP_IOCTL_NOTIF_RECV */
-addfd.srcfd = fd;
-addfd.newfd = 0;
-addfd.flags = 0;
-addfd.newfd_flags = O_CLOEXEC;
-\&
-targetFd = ioctl(notifyFd, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd);
-\&
-close(fd); /* No longer needed in supervisor */
-\&
-struct seccomp_notif_resp *resp;
- /* Code to allocate 'resp' omitted */
-resp\->id = req\->id;
-resp\->error = 0; /* "Success" */
-resp\->val = targetFd;
-resp\->flags = 0;
-ioctl(notifyFd, SECCOMP_IOCTL_NOTIF_SEND, resp);
-.in
-.EE
-.SH NOTES
-One example use case for the user-space notification
-mechanism is to allow a container manager
-(a process which is typically running with more privilege than
-the processes inside the container)
-to mount block devices or create device nodes for the container.
-The mount use case provides an example of where the
-.B SECCOMP_USER_NOTIF_FLAG_CONTINUE
-.BR ioctl (2)
-operation is useful.
-Upon receiving a notification for the
-.BR mount (2)
-system call, the container manager (the "supervisor") can distinguish
-a request to mount a block filesystem
-(which would not be possible for a "target" process inside the container)
-and mount that file system.
-If, on the other hand, the container manager detects that the operation
-could be performed by the process inside the container
-(e.g., a mount of a
-.BR tmpfs (5)
-filesystem), it can notify the kernel that the target process's
-.BR mount (2)
-system call can continue.
-.\"
-.SS select()/poll()/epoll semantics
-The file descriptor returned when
-.BR seccomp (2)
-is employed with the
-.B SECCOMP_FILTER_FLAG_NEW_LISTENER
-flag can be monitored using
-.BR poll (2),
-.BR epoll (7),
-and
-.BR select (2).
-These interfaces indicate that the file descriptor is ready as follows:
-.IP \[bu] 3
-When a notification is pending,
-these interfaces indicate that the file descriptor is readable.
-Following such an indication, a subsequent
-.B SECCOMP_IOCTL_NOTIF_RECV
-.BR ioctl (2)
-will not block, returning either information about a notification
-or else failing with the error
-.B EINTR
-if the target has been killed by a signal or its system call
-has been interrupted by a signal handler.
-.IP \[bu]
-After the notification has been received (i.e., by the
-.B SECCOMP_IOCTL_NOTIF_RECV
-.BR ioctl (2)
-operation), these interfaces indicate that the file descriptor is writable,
-meaning that a notification response can be sent using the
-.B SECCOMP_IOCTL_NOTIF_SEND
-.BR ioctl (2)
-operation.
-.IP \[bu]
-After the last thread using the filter has terminated and been reaped using
-.BR waitpid (2)
-(or similar),
-the file descriptor indicates an end-of-file condition (readable in
-.BR select (2);
-.BR POLLHUP / EPOLLHUP
-in
-.BR poll (2)/
-.BR epoll_wait (2)).
-.SS Design goals; use of SECCOMP_USER_NOTIF_FLAG_CONTINUE
-The intent of the user-space notification feature is
-to allow system calls to be performed on behalf of the target.
-The target's system call should either be handled by the supervisor or
-allowed to continue normally in the kernel (where standard security
-policies will be applied).
-.PP
-.BR "Note well" :
-this mechanism must not be used to make security policy decisions
-about the system call,
-which would be inherently race-prone for reasons described next.
-.PP
-The
-.B SECCOMP_USER_NOTIF_FLAG_CONTINUE
-flag must be used with caution.
-If set by the supervisor, the target's system call will continue.
-However, there is a time-of-check, time-of-use race here,
-since an attacker could exploit the interval of time where the target is
-blocked waiting on the "continue" response to do things such as
-rewriting the system call arguments.
-.PP
-Note furthermore that a user-space notifier can be bypassed if
-the existing filters allow the use of
-.BR seccomp (2)
-or
-.BR prctl (2)
-to install a filter that returns an action value with a higher precedence than
-.B SECCOMP_RET_USER_NOTIF
-(see
-.BR seccomp (2)).
-.PP
-It should thus be absolutely clear that the
-seccomp user-space notification mechanism
-.B can not
-be used to implement a security policy!
-It should only ever be used in scenarios where a more privileged process
-supervises the system calls of a lesser privileged target to
-get around kernel-enforced security restrictions when
-the supervisor deems this safe.
-In other words,
-in order to continue a system call, the supervisor should be sure that
-another security mechanism or the kernel itself will sufficiently block
-the system call if its arguments are rewritten to something unsafe.
-.\"
-.SS Caveats regarding the use of \fI/proc/\fPtid\fI/mem\fP
-The discussion above noted the need to use the
-.B SECCOMP_IOCTL_NOTIF_ID_VALID
-.BR ioctl (2)
-when opening the
-.IR /proc/ tid /mem
-file of the target
-to avoid the possibility of accessing the memory of the wrong process
-in the event that the target terminates and its ID
-is recycled by another (unrelated) thread.
-However, the use of this
-.BR ioctl (2)
-operation is also necessary in other situations,
-as explained in the following paragraphs.
-.PP
-Consider the following scenario, where the supervisor
-tries to read the pathname argument of a target's blocked
-.BR mount (2)
-system call:
-.IP (1) 5
-From one of its functions
-.RI ( func() ),
-the target calls
-.BR mount (2),
-which triggers a user-space notification and causes the target to block.
-.IP (2)
-The supervisor receives the notification, opens
-.IR /proc/ tid /mem ,
-and (successfully) performs the
-.B SECCOMP_IOCTL_NOTIF_ID_VALID
-check.
-.IP (3)
-The target receives a signal, which causes the
-.BR mount (2)
-to abort.
-.IP (4)
-The signal handler executes in the target, and returns.
-.IP (5)
-Upon return from the handler, the execution of
-.I func()
-resumes, and it returns (and perhaps other functions are called,
-overwriting the memory that had been used for the stack frame of
-.IR func() ).
-.IP (6)
-Using the address provided in the notification information,
-the supervisor reads from the target's memory location that used to
-contain the pathname.
-.IP (7)
-The supervisor now calls
-.BR mount (2)
-with some arbitrary bytes obtained in the previous step.
-.PP
-The conclusion from the above scenario is this:
-since the target's blocked system call may be interrupted by a signal handler,
-the supervisor must be written to expect that the
-target may abandon its system call at
-.B any
-time;
-in such an event, any information that the supervisor obtained from
-the target's memory must be considered invalid.
-.PP
-To prevent such scenarios,
-every read from the target's memory must be separated from use of
-the bytes so obtained by a
-.B SECCOMP_IOCTL_NOTIF_ID_VALID
-check.
-In the above example, the check would be placed between the two final steps.
-An example of such a check is shown in EXAMPLES.
-.PP
-Following on from the above, it should be clear that
-a write by the supervisor into the target's memory can
-.B never
-be considered safe.
-.\"
-.SS Caveats regarding blocking system calls
-Suppose that the target performs a blocking system call (e.g.,
-.BR accept (2))
-that the supervisor should handle.
-The supervisor might then in turn execute the same blocking system call.
-.PP
-In this scenario,
-it is important to note that if the target's system call is now
-interrupted by a signal, the supervisor is
-.I not
-informed of this.
-If the supervisor does not take suitable steps to
-actively discover that the target's system call has been canceled,
-various difficulties can occur.
-Taking the example of
-.BR accept (2),
-the supervisor might remain blocked in its
-.BR accept (2)
-holding a port number that the target
-(which, after the interruption by the signal handler,
-perhaps closed its listening socket) might expect to be able to reuse in a
-.BR bind (2)
-call.
-.PP
-Therefore, when the supervisor wishes to emulate a blocking system call,
-it must do so in such a way that it gets informed if the target's
-system call is interrupted by a signal handler.
-For example, if the supervisor itself executes the same
-blocking system call, then it could employ a separate thread
-that uses the
-.B SECCOMP_IOCTL_NOTIF_ID_VALID
-operation to check if the target is still blocked in its system call.
-Alternatively, in the
-.BR accept (2)
-example, the supervisor might use
-.BR poll (2)
-to monitor both the notification file descriptor
-(so as to discover when the target's
-.BR accept (2)
-call has been interrupted) and the listening file descriptor
-(so as to know when a connection is available).
-.PP
-If the target's system call is interrupted,
-the supervisor must take care to release resources (e.g., file descriptors)
-that it acquired on behalf of the target.
-.\"
-.SS Interaction with SA_RESTART signal handlers
-Consider the following scenario:
-.IP (1) 5
-The target process has used
-.BR sigaction (2)
-to install a signal handler with the
-.B SA_RESTART
-flag.
-.IP (2)
-The target has made a system call that triggered a seccomp
-user-space notification and the target is currently blocked
-until the supervisor sends a notification response.
-.IP (3)
-A signal is delivered to the target and the signal handler is executed.
-.IP (4)
-When (if) the supervisor attempts to send a notification response, the
-.B SECCOMP_IOCTL_NOTIF_SEND
-.BR ioctl (2))
-operation will fail with the
-.B ENOENT
-error.
-.PP
-In this scenario, the kernel will restart the target's system call.
-Consequently, the supervisor will receive another user-space notification.
-Thus, depending on how many times the blocked system call
-is interrupted by a signal handler,
-the supervisor may receive multiple notifications for
-the same instance of a system call in the target.
-.PP
-One oddity is that system call restarting as described in this scenario
-will occur even for the blocking system calls listed in
-.BR signal (7)
-that would
-.B never
-normally be restarted by the
-.B SA_RESTART
-flag.
-.\" FIXME
-.\" About the above, Kees Cook commented:
-.\"
-.\" Does this need fixing? I imagine the correct behavior for this case
-.\" would be a response to _SEND of EINPROGRESS and the target would see
-.\" EINTR normally?
-.\"
-.\" I mean, it's not like seccomp doesn't already expose weirdness with
-.\" syscall restarts. Not even arm64 compat agrees[3] with arm32 in this
-.\" regard. :(
-.
-.\" FIXME
-.\" Michael Kerrisk:
-.\" I wonder about the effect of this oddity for system calls that
-.\" are normally nonrestartable because they have timeouts. My
-.\" understanding is that the kernel doesn't restart those system
-.\" calls because it's impossible for the kernel to restart the call
-.\" with the right timeout value. I wonder what happens when those
-.\" system calls are restarted in the scenario we're discussing.)
-.PP
-Furthermore, if the supervisor response is a file descriptor
-added with
-.BR SECCOMP_IOCTL_NOTIF_ADDFD ,
-then the flag
-.B SECCOMP_ADDFD_FLAG_SEND
-can be used to atomically add the file descriptor and return that value,
-making sure no file descriptors are inadvertently leaked into the target.
-.SH BUGS
-If a
-.B SECCOMP_IOCTL_NOTIF_RECV
-.BR ioctl (2)
-operation
-.\" or a poll/epoll/select
-is performed after the target terminates, then the
-.BR ioctl (2)
-call simply blocks (rather than returning an error to indicate that the
-target no longer exists).
-.\" FIXME
-.\" Comment from Kees Cook:
-.\"
-.\" I want this fixed. It caused me no end of pain when building the
-.\" selftests, and ended up spawning my implementing a global test timeout
-.\" in kselftest. :P Before the usage counter refactor, there was no sane
-.\" way to deal with this, but now I think we're close.
-.\"
-.SH EXAMPLES
-The (somewhat contrived) program shown below demonstrates the use of
-the interfaces described in this page.
-The program creates a child process that serves as the "target" process.
-The child process installs a seccomp filter that returns the
-.B SECCOMP_RET_USER_NOTIF
-action value if a call is made to
-.BR mkdir (2).
-The child process then calls
-.BR mkdir (2)
-once for each of the supplied command-line arguments,
-and reports the result returned by the call.
-After processing all arguments, the child process terminates.
-.PP
-The parent process acts as the supervisor, listening for the notifications
-that are generated when the target process calls
-.BR mkdir (2).
-When such a notification occurs,
-the supervisor examines the memory of the target process (using
-.IR /proc/ pid /mem )
-to discover the pathname argument that was supplied to the
-.BR mkdir (2)
-call, and performs one of the following actions:
-.IP \[bu] 3
-If the pathname begins with the prefix "/tmp/",
-then the supervisor attempts to create the specified directory,
-and then spoofs a return for the target process based on the return
-value of the supervisor's
-.BR mkdir (2)
-call.
-In the event that that call succeeds,
-the spoofed success return value is the length of the pathname.
-.IP \[bu]
-If the pathname begins with "./" (i.e., it is a relative pathname),
-the supervisor sends a
-.B SECCOMP_USER_NOTIF_FLAG_CONTINUE
-response to the kernel to say that the kernel should execute
-the target process's
-.BR mkdir (2)
-call.
-.IP \[bu]
-If the pathname begins with some other prefix,
-the supervisor spoofs an error return for the target process,
-so that the target process's
-.BR mkdir (2)
-call appears to fail with the error
-.B EOPNOTSUPP
-("Operation not supported").
-Additionally, if the specified pathname is exactly "/bye",
-then the supervisor terminates.
-.PP
-This program can be used to demonstrate various aspects of the
-behavior of the seccomp user-space notification mechanism.
-To help aid such demonstrations,
-the program logs various messages to show the operation
-of the target process (lines prefixed "T:") and the supervisor
-(indented lines prefixed "S:").
-.PP
-In the following example, the target attempts to create the directory
-.IR /tmp/x .
-Upon receiving the notification, the supervisor creates the directory on the
-target's behalf,
-and spoofs a success return to be received by the target process's
-.BR mkdir (2)
-call.
-.PP
-.in +4n
-.EX
-$ \fB./seccomp_unotify /tmp/x\fP
-T: PID = 23168
-\&
-T: about to mkdir("/tmp/x")
- S: got notification (ID 0x17445c4a0f4e0e3c) for PID 23168
- S: executing: mkdir("/tmp/x", 0700)
- S: success! spoofed return = 6
- S: sending response (flags = 0; val = 6; error = 0)
-T: SUCCESS: mkdir(2) returned 6
-\&
-T: terminating
- S: target has terminated; bye
-.EE
-.in
-.PP
-In the above output, note that the spoofed return value seen by the target
-process is 6 (the length of the pathname
-.IR /tmp/x ),
-whereas a normal
-.BR mkdir (2)
-call returns 0 on success.
-.PP
-In the next example, the target attempts to create a directory using the
-relative pathname
-.IR ./sub .
-Since this pathname starts with "./",
-the supervisor sends a
-.B SECCOMP_USER_NOTIF_FLAG_CONTINUE
-response to the kernel,
-and the kernel then (successfully) executes the target process's
-.BR mkdir (2)
-call.
-.PP
-.in +4n
-.EX
-$ \fB./seccomp_unotify ./sub\fP
-T: PID = 23204
-\&
-T: about to mkdir("./sub")
- S: got notification (ID 0xddb16abe25b4c12) for PID 23204
- S: target can execute system call
- S: sending response (flags = 0x1; val = 0; error = 0)
-T: SUCCESS: mkdir(2) returned 0
-\&
-T: terminating
- S: target has terminated; bye
-.EE
-.in
-.PP
-If the target process attempts to create a directory with
-a pathname that doesn't start with "." and doesn't begin with the prefix
-"/tmp/", then the supervisor spoofs an error return
-.RB ( EOPNOTSUPP ,
-"Operation not supported")
-for the target's
-.BR mkdir (2)
-call (which is not executed):
-.PP
-.in +4n
-.EX
-$ \fB./seccomp_unotify /xxx\fP
-T: PID = 23178
-\&
-T: about to mkdir("/xxx")
- S: got notification (ID 0xe7dc095d1c524e80) for PID 23178
- S: spoofing error response (Operation not supported)
- S: sending response (flags = 0; val = 0; error = \-95)
-T: ERROR: mkdir(2): Operation not supported
-\&
-T: terminating
- S: target has terminated; bye
-.EE
-.in
-.PP
-In the next example,
-the target process attempts to create a directory with the pathname
-.BR /tmp/nosuchdir/b .
-Upon receiving the notification,
-the supervisor attempts to create that directory, but the
-.BR mkdir (2)
-call fails because the directory
-.B /tmp/nosuchdir
-does not exist.
-Consequently, the supervisor spoofs an error return that passes the error
-that it received back to the target process's
-.BR mkdir (2)
-call.
-.PP
-.in +4n
-.EX
-$ \fB./seccomp_unotify /tmp/nosuchdir/b\fP
-T: PID = 23199
-\&
-T: about to mkdir("/tmp/nosuchdir/b")
- S: got notification (ID 0x8744454293506046) for PID 23199
- S: executing: mkdir("/tmp/nosuchdir/b", 0700)
- S: failure! (errno = 2; No such file or directory)
- S: sending response (flags = 0; val = 0; error = \-2)
-T: ERROR: mkdir(2): No such file or directory
-\&
-T: terminating
- S: target has terminated; bye
-.EE
-.in
-.PP
-If the supervisor receives a notification and sees that the
-argument of the target's
-.BR mkdir (2)
-is the string "/bye", then (as well as spoofing an
-.B EOPNOTSUPP
-error), the supervisor terminates.
-If the target process subsequently executes another
-.BR mkdir (2)
-that triggers its seccomp filter to return the
-.B SECCOMP_RET_USER_NOTIF
-action value, then the kernel causes the target process's system call to
-fail with the error
-.B ENOSYS
-("Function not implemented").
-This is demonstrated by the following example:
-.PP
-.in +4n
-.EX
-$ \fB./seccomp_unotify /bye /tmp/y\fP
-T: PID = 23185
-\&
-T: about to mkdir("/bye")
- S: got notification (ID 0xa81236b1d2f7b0f4) for PID 23185
- S: spoofing error response (Operation not supported)
- S: sending response (flags = 0; val = 0; error = \-95)
- S: terminating **********
-T: ERROR: mkdir(2): Operation not supported
-\&
-T: about to mkdir("/tmp/y")
-T: ERROR: mkdir(2): Function not implemented
-\&
-T: terminating
-.EE
-.in
-.\"
-.SS Program source
-.\" SRC BEGIN (seccomp_unotify.c)
-.EX
-#define _GNU_SOURCE
-#include <err.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <linux/audit.h>
-#include <linux/filter.h>
-#include <linux/seccomp.h>
-#include <signal.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <sys/prctl.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/syscall.h>
-#include <sys/types.h>
-#include <sys/un.h>
-#include <unistd.h>
-\&
-#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
-\&
-/* Send the file descriptor \[aq]fd\[aq] over the connected UNIX domain socket
- \[aq]sockfd\[aq]. Returns 0 on success, or \-1 on error. */
-\&
-static int
-sendfd(int sockfd, int fd)
-{
- int data;
- struct iovec iov;
- struct msghdr msgh;
- struct cmsghdr *cmsgp;
-\&
- /* Allocate a char array of suitable size to hold the ancillary data.
- However, since this buffer is in reality a \[aq]struct cmsghdr\[aq], use a
- union to ensure that it is suitably aligned. */
- union {
- char buf[CMSG_SPACE(sizeof(int))];
- /* Space large enough to hold an \[aq]int\[aq] */
- struct cmsghdr align;
- } controlMsg;
-\&
- /* The \[aq]msg_name\[aq] field can be used to specify the address of the
- destination socket when sending a datagram. However, we do not
- need to use this field because \[aq]sockfd\[aq] is a connected socket. */
-\&
- msgh.msg_name = NULL;
- msgh.msg_namelen = 0;
-\&
- /* On Linux, we must transmit at least one byte of real data in
- order to send ancillary data. We transmit an arbitrary integer
- whose value is ignored by recvfd(). */
-\&
- msgh.msg_iov = &iov;
- msgh.msg_iovlen = 1;
- iov.iov_base = &data;
- iov.iov_len = sizeof(int);
- data = 12345;
-\&
- /* Set \[aq]msghdr\[aq] fields that describe ancillary data */
-\&
- msgh.msg_control = controlMsg.buf;
- msgh.msg_controllen = sizeof(controlMsg.buf);
-\&
- /* Set up ancillary data describing file descriptor to send */
-\&
- cmsgp = CMSG_FIRSTHDR(&msgh);
- cmsgp\->cmsg_level = SOL_SOCKET;
- cmsgp\->cmsg_type = SCM_RIGHTS;
- cmsgp\->cmsg_len = CMSG_LEN(sizeof(int));
- memcpy(CMSG_DATA(cmsgp), &fd, sizeof(int));
-\&
- /* Send real plus ancillary data */
-\&
- if (sendmsg(sockfd, &msgh, 0) == \-1)
- return \-1;
-\&
- return 0;
-}
-\&
-/* Receive a file descriptor on a connected UNIX domain socket. Returns
- the received file descriptor on success, or \-1 on error. */
-\&
-static int
-recvfd(int sockfd)
-{
- int data, fd;
- ssize_t nr;
- struct iovec iov;
- struct msghdr msgh;
-\&
- /* Allocate a char buffer for the ancillary data. See the comments
- in sendfd() */
- union {
- char buf[CMSG_SPACE(sizeof(int))];
- struct cmsghdr align;
- } controlMsg;
- struct cmsghdr *cmsgp;
-\&
- /* The \[aq]msg_name\[aq] field can be used to obtain the address of the
- sending socket. However, we do not need this information. */
-\&
- msgh.msg_name = NULL;
- msgh.msg_namelen = 0;
-\&
- /* Specify buffer for receiving real data */
-\&
- msgh.msg_iov = &iov;
- msgh.msg_iovlen = 1;
- iov.iov_base = &data; /* Real data is an \[aq]int\[aq] */
- iov.iov_len = sizeof(int);
-\&
- /* Set \[aq]msghdr\[aq] fields that describe ancillary data */
-\&
- msgh.msg_control = controlMsg.buf;
- msgh.msg_controllen = sizeof(controlMsg.buf);
-\&
- /* Receive real plus ancillary data; real data is ignored */
-\&
- nr = recvmsg(sockfd, &msgh, 0);
- if (nr == \-1)
- return \-1;
-\&
- cmsgp = CMSG_FIRSTHDR(&msgh);
-\&
- /* Check the validity of the \[aq]cmsghdr\[aq] */
-\&
- if (cmsgp == NULL
- || cmsgp\->cmsg_len != CMSG_LEN(sizeof(int))
- || cmsgp\->cmsg_level != SOL_SOCKET
- || cmsgp\->cmsg_type != SCM_RIGHTS)
- {
- errno = EINVAL;
- return \-1;
- }
-\&
- /* Return the received file descriptor to our caller */
-\&
- memcpy(&fd, CMSG_DATA(cmsgp), sizeof(int));
- return fd;
-}
-\&
-static void
-sigchldHandler(int sig)
-{
- char msg[] = "\etS: target has terminated; bye\en";
-\&
- write(STDOUT_FILENO, msg, sizeof(msg) \- 1);
- _exit(EXIT_SUCCESS);
-}
-\&
-static int
-seccomp(unsigned int operation, unsigned int flags, void *args)
-{
- return syscall(SYS_seccomp, operation, flags, args);
-}
-\&
-/* The following is the x86\-64\-specific BPF boilerplate code for checking
- that the BPF program is running on the right architecture + ABI. At
- completion of these instructions, the accumulator contains the system
- call number. */
-\&
-/* For the x32 ABI, all system call numbers have bit 30 set */
-\&
-#define X32_SYSCALL_BIT 0x40000000
-\&
-#define X86_64_CHECK_ARCH_AND_LOAD_SYSCALL_NR \e
- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, \e
- (offsetof(struct seccomp_data, arch))), \e
- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, AUDIT_ARCH_X86_64, 0, 2), \e
- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, \e
- (offsetof(struct seccomp_data, nr))), \e
- BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, X32_SYSCALL_BIT, 0, 1), \e
- BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_KILL_PROCESS)
-\&
-/* installNotifyFilter() installs a seccomp filter that generates
- user\-space notifications (SECCOMP_RET_USER_NOTIF) when the process
- calls mkdir(2); the filter allows all other system calls.
-\&
- The function return value is a file descriptor from which the
- user\-space notifications can be fetched. */
-\&
-static int
-installNotifyFilter(void)
-{
- int notifyFd;
-\&
- struct sock_filter filter[] = {
- X86_64_CHECK_ARCH_AND_LOAD_SYSCALL_NR,
-\&
- /* mkdir() triggers notification to user\-space supervisor */
-\&
- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, SYS_mkdir, 0, 1),
- BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_USER_NOTIF),
-\&
- /* Every other system call is allowed */
-\&
- BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_ALLOW),
- };
-\&
- struct sock_fprog prog = {
- .len = ARRAY_SIZE(filter),
- .filter = filter,
- };
-\&
- /* Install the filter with the SECCOMP_FILTER_FLAG_NEW_LISTENER flag;
- as a result, seccomp() returns a notification file descriptor. */
-\&
- notifyFd = seccomp(SECCOMP_SET_MODE_FILTER,
- SECCOMP_FILTER_FLAG_NEW_LISTENER, &prog);
- if (notifyFd == \-1)
- err(EXIT_FAILURE, "seccomp\-install\-notify\-filter");
-\&
- return notifyFd;
-}
-\&
-/* Close a pair of sockets created by socketpair() */
-\&
-static void
-closeSocketPair(int sockPair[2])
-{
- if (close(sockPair[0]) == \-1)
- err(EXIT_FAILURE, "closeSocketPair\-close\-0");
- if (close(sockPair[1]) == \-1)
- err(EXIT_FAILURE, "closeSocketPair\-close\-1");
-}
-\&
-/* Implementation of the target process; create a child process that:
-\&
- (1) installs a seccomp filter with the
- SECCOMP_FILTER_FLAG_NEW_LISTENER flag;
- (2) writes the seccomp notification file descriptor returned from
- the previous step onto the UNIX domain socket, \[aq]sockPair[0]\[aq];
- (3) calls mkdir(2) for each element of \[aq]argv\[aq].
-\&
- The function return value in the parent is the PID of the child
- process; the child does not return from this function. */
-\&
-static pid_t
-targetProcess(int sockPair[2], char *argv[])
-{
- int notifyFd, s;
- pid_t targetPid;
-\&
- targetPid = fork();
-\&
- if (targetPid == \-1)
- err(EXIT_FAILURE, "fork");
-\&
- if (targetPid > 0) /* In parent, return PID of child */
- return targetPid;
-\&
- /* Child falls through to here */
-\&
- printf("T: PID = %ld\en", (long) getpid());
-\&
- /* Install seccomp filter(s) */
-\&
- if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0))
- err(EXIT_FAILURE, "prctl");
-\&
- notifyFd = installNotifyFilter();
-\&
- /* Pass the notification file descriptor to the tracing process over
- a UNIX domain socket */
-\&
- if (sendfd(sockPair[0], notifyFd) == \-1)
- err(EXIT_FAILURE, "sendfd");
-\&
- /* Notification and socket FDs are no longer needed in target */
-\&
- if (close(notifyFd) == \-1)
- err(EXIT_FAILURE, "close\-target\-notify\-fd");
-\&
- closeSocketPair(sockPair);
-\&
- /* Perform a mkdir() call for each of the command\-line arguments */
-\&
- for (char **ap = argv; *ap != NULL; ap++) {
- printf("\enT: about to mkdir(\e"%s\e")\en", *ap);
-\&
- s = mkdir(*ap, 0700);
- if (s == \-1)
- perror("T: ERROR: mkdir(2)");
- else
- printf("T: SUCCESS: mkdir(2) returned %d\en", s);
- }
-\&
- printf("\enT: terminating\en");
- exit(EXIT_SUCCESS);
-}
-\&
-/* Check that the notification ID provided by a SECCOMP_IOCTL_NOTIF_RECV
- operation is still valid. It will no longer be valid if the target
- process has terminated or is no longer blocked in the system call that
- generated the notification (because it was interrupted by a signal).
-\&
- This operation can be used when doing such things as accessing
- /proc/PID files in the target process in order to avoid TOCTOU race
- conditions where the PID that is returned by SECCOMP_IOCTL_NOTIF_RECV
- terminates and is reused by another process. */
-\&
-static bool
-cookieIsValid(int notifyFd, uint64_t id)
-{
- return ioctl(notifyFd, SECCOMP_IOCTL_NOTIF_ID_VALID, &id) == 0;
-}
-\&
-/* Access the memory of the target process in order to fetch the
- pathname referred to by the system call argument \[aq]argNum\[aq] in
- \[aq]req\->data.args[]\[aq]. The pathname is returned in \[aq]path\[aq],
- a buffer of \[aq]len\[aq] bytes allocated by the caller.
-\&
- Returns true if the pathname is successfully fetched, and false
- otherwise. For possible causes of failure, see the comments below. */
-\&
-static bool
-getTargetPathname(struct seccomp_notif *req, int notifyFd,
- int argNum, char *path, size_t len)
-{
- int procMemFd;
- char procMemPath[PATH_MAX];
- ssize_t nread;
-\&
- snprintf(procMemPath, sizeof(procMemPath), "/proc/%d/mem", req\->pid);
-\&
- procMemFd = open(procMemPath, O_RDONLY | O_CLOEXEC);
- if (procMemFd == \-1)
- return false;
-\&
- /* Check that the process whose info we are accessing is still alive
- and blocked in the system call that caused the notification.
- If the SECCOMP_IOCTL_NOTIF_ID_VALID operation (performed in
- cookieIsValid()) succeeded, we know that the /proc/PID/mem file
- descriptor that we opened corresponded to the process for which we
- received a notification. If that process subsequently terminates,
- then read() on that file descriptor will return 0 (EOF). */
-\&
- if (!cookieIsValid(notifyFd, req\->id)) {
- close(procMemFd);
- return false;
- }
-\&
- /* Read bytes at the location containing the pathname argument */
-\&
- nread = pread(procMemFd, path, len, req\->data.args[argNum]);
-\&
- close(procMemFd);
-\&
- if (nread <= 0)
- return false;
-\&
- /* Once again check that the notification ID is still valid. The
- case we are particularly concerned about here is that just
- before we fetched the pathname, the target\[aq]s blocked system
- call was interrupted by a signal handler, and after the handler
- returned, the target carried on execution (past the interrupted
- system call). In that case, we have no guarantees about what we
- are reading, since the target\[aq]s memory may have been arbitrarily
- changed by subsequent operations. */
-\&
- if (!cookieIsValid(notifyFd, req\->id)) {
- perror("\etS: notification ID check failed!!!");
- return false;
- }
-\&
- /* Even if the target\[aq]s system call was not interrupted by a signal,
- we have no guarantees about what was in the memory of the target
- process. (The memory may have been modified by another thread, or
- even by an external attacking process.) We therefore treat the
- buffer returned by pread() as untrusted input. The buffer should
- contain a terminating null byte; if not, then we will trigger an
- error for the target process. */
-\&
- if (strnlen(path, nread) < nread)
- return true;
-\&
- return false;
-}
-\&
-/* Allocate buffers for the seccomp user\-space notification request and
- response structures. It is the caller\[aq]s responsibility to free the
- buffers returned via \[aq]req\[aq] and \[aq]resp\[aq]. */
-\&
-static void
-allocSeccompNotifBuffers(struct seccomp_notif **req,
- struct seccomp_notif_resp **resp,
- struct seccomp_notif_sizes *sizes)
-{
- size_t resp_size;
-\&
- /* Discover the sizes of the structures that are used to receive
- notifications and send notification responses, and allocate
- buffers of those sizes. */
-\&
- if (seccomp(SECCOMP_GET_NOTIF_SIZES, 0, sizes) == \-1)
- err(EXIT_FAILURE, "seccomp\-SECCOMP_GET_NOTIF_SIZES");
-\&
- *req = malloc(sizes\->seccomp_notif);
- if (*req == NULL)
- err(EXIT_FAILURE, "malloc\-seccomp_notif");
-\&
- /* When allocating the response buffer, we must allow for the fact
- that the user\-space binary may have been built with user\-space
- headers where \[aq]struct seccomp_notif_resp\[aq] is bigger than the
- response buffer expected by the (older) kernel. Therefore, we
- allocate a buffer that is the maximum of the two sizes. This
- ensures that if the supervisor places bytes into the response
- structure that are past the response size that the kernel expects,
- then the supervisor is not touching an invalid memory location. */
-\&
- resp_size = sizes\->seccomp_notif_resp;
- if (sizeof(struct seccomp_notif_resp) > resp_size)
- resp_size = sizeof(struct seccomp_notif_resp);
-\&
- *resp = malloc(resp_size);
- if (*resp == NULL)
- err(EXIT_FAILURE, "malloc\-seccomp_notif_resp");
-\&
-}
-\&
-/* Handle notifications that arrive via the SECCOMP_RET_USER_NOTIF file
- descriptor, \[aq]notifyFd\[aq]. */
-\&
-static void
-handleNotifications(int notifyFd)
-{
- bool pathOK;
- char path[PATH_MAX];
- struct seccomp_notif *req;
- struct seccomp_notif_resp *resp;
- struct seccomp_notif_sizes sizes;
-\&
- allocSeccompNotifBuffers(&req, &resp, &sizes);
-\&
- /* Loop handling notifications */
-\&
- for (;;) {
-\&
- /* Wait for next notification, returning info in \[aq]*req\[aq] */
-\&
- memset(req, 0, sizes.seccomp_notif);
- if (ioctl(notifyFd, SECCOMP_IOCTL_NOTIF_RECV, req) == \-1) {
- if (errno == EINTR)
- continue;
- err(EXIT_FAILURE, "\etS: ioctl\-SECCOMP_IOCTL_NOTIF_RECV");
- }
-\&
- printf("\etS: got notification (ID %#llx) for PID %d\en",
- req\->id, req\->pid);
-\&
- /* The only system call that can generate a notification event
- is mkdir(2). Nevertheless, we check that the notified system
- call is indeed mkdir() as kind of future\-proofing of this
- code in case the seccomp filter is later modified to
- generate notifications for other system calls. */
-\&
- if (req\->data.nr != SYS_mkdir) {
- printf("\etS: notification contained unexpected "
- "system call number; bye!!!\en");
- exit(EXIT_FAILURE);
- }
-\&
- pathOK = getTargetPathname(req, notifyFd, 0, path, sizeof(path));
-\&
- /* Prepopulate some fields of the response */
-\&
- resp\->id = req\->id; /* Response includes notification ID */
- resp\->flags = 0;
- resp\->val = 0;
-\&
- /* If getTargetPathname() failed, trigger an EINVAL error
- response (sending this response may yield an error if the
- failure occurred because the notification ID was no longer
- valid); if the directory is in /tmp, then create it on behalf
- of the supervisor; if the pathname starts with \[aq].\[aq], tell the
- kernel to let the target process execute the mkdir();
- otherwise, give an error for a directory pathname in any other
- location. */
-\&
- if (!pathOK) {
- resp\->error = \-EINVAL;
- printf("\etS: spoofing error for invalid pathname (%s)\en",
- strerror(\-resp\->error));
- } else if (strncmp(path, "/tmp/", strlen("/tmp/")) == 0) {
- printf("\etS: executing: mkdir(\e"%s\e", %#llo)\en",
- path, req\->data.args[1]);
-\&
- if (mkdir(path, req\->data.args[1]) == 0) {
- resp\->error = 0; /* "Success" */
- resp\->val = strlen(path); /* Used as return value of
- mkdir() in target */
- printf("\etS: success! spoofed return = %lld\en",
- resp\->val);
- } else {
-\&
- /* If mkdir() failed in the supervisor, pass the error
- back to the target */
-\&
- resp\->error = \-errno;
- printf("\etS: failure! (errno = %d; %s)\en", errno,
- strerror(errno));
- }
- } else if (strncmp(path, "./", strlen("./")) == 0) {
- resp\->error = resp\->val = 0;
- resp\->flags = SECCOMP_USER_NOTIF_FLAG_CONTINUE;
- printf("\etS: target can execute system call\en");
- } else {
- resp\->error = \-EOPNOTSUPP;
- printf("\etS: spoofing error response (%s)\en",
- strerror(\-resp\->error));
- }
-\&
- /* Send a response to the notification */
-\&
- printf("\etS: sending response "
- "(flags = %#x; val = %lld; error = %d)\en",
- resp\->flags, resp\->val, resp\->error);
-\&
- if (ioctl(notifyFd, SECCOMP_IOCTL_NOTIF_SEND, resp) == \-1) {
- if (errno == ENOENT)
- printf("\etS: response failed with ENOENT; "
- "perhaps target process\[aq]s syscall was "
- "interrupted by a signal?\en");
- else
- perror("ioctl\-SECCOMP_IOCTL_NOTIF_SEND");
- }
-\&
- /* If the pathname is just "/bye", then the supervisor breaks out
- of the loop and terminates. This allows us to see what happens
- if the target process makes further calls to mkdir(2). */
-\&
- if (strcmp(path, "/bye") == 0)
- break;
- }
-\&
- free(req);
- free(resp);
- printf("\etS: terminating **********\en");
- exit(EXIT_FAILURE);
-}
-\&
-/* Implementation of the supervisor process:
-\&
- (1) obtains the notification file descriptor from \[aq]sockPair[1]\[aq]
- (2) handles notifications that arrive on that file descriptor. */
-\&
-static void
-supervisor(int sockPair[2])
-{
- int notifyFd;
-\&
- notifyFd = recvfd(sockPair[1]);
-\&
- if (notifyFd == \-1)
- err(EXIT_FAILURE, "recvfd");
-\&
- closeSocketPair(sockPair); /* We no longer need the socket pair */
-\&
- handleNotifications(notifyFd);
-}
-\&
-int
-main(int argc, char *argv[])
-{
- int sockPair[2];
- struct sigaction sa;
-\&
- setbuf(stdout, NULL);
-\&
- if (argc < 2) {
- fprintf(stderr, "At least one pathname argument is required\en");
- exit(EXIT_FAILURE);
- }
-\&
- /* Create a UNIX domain socket that is used to pass the seccomp
- notification file descriptor from the target process to the
- supervisor process. */
-\&
- if (socketpair(AF_UNIX, SOCK_STREAM, 0, sockPair) == \-1)
- err(EXIT_FAILURE, "socketpair");
-\&
- /* Create a child process\-\-the "target"\-\-that installs seccomp
- filtering. The target process writes the seccomp notification
- file descriptor onto \[aq]sockPair[0]\[aq] and then calls mkdir(2) for
- each directory in the command\-line arguments. */
-\&
- (void) targetProcess(sockPair, &argv[optind]);
-\&
- /* Catch SIGCHLD when the target terminates, so that the
- supervisor can also terminate. */
-\&
- sa.sa_handler = sigchldHandler;
- sa.sa_flags = 0;
- sigemptyset(&sa.sa_mask);
- if (sigaction(SIGCHLD, &sa, NULL) == \-1)
- err(EXIT_FAILURE, "sigaction");
-\&
- supervisor(sockPair);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR ioctl (2),
-.BR pidfd_getfd (2),
-.BR pidfd_open (2),
-.BR seccomp (2)
-.PP
-A further example program can be found in the kernel source file
-.IR samples/seccomp/user-trap.c .
diff --git a/man2/security.2 b/man2/security.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/security.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/select.2 b/man2/select.2
deleted file mode 100644
index ef01cc85e..000000000
--- a/man2/select.2
+++ /dev/null
@@ -1,765 +0,0 @@
-.\" This manpage is copyright (C) 1992 Drew Eckhardt,
-.\" copyright (C) 1995 Michael Shields,
-.\" copyright (C) 2001 Paul Sheer,
-.\" copyright (C) 2006, 2019 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1995-05-18 by Jim Van Zandt <jrv@vanzandt.mv.com>
-.\" Sun Feb 11 14:07:00 MET 1996 Martin Schulze <joey@linux.de>
-.\" * layout slightly modified
-.\"
-.\" Modified Mon Oct 21 23:05:29 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Thu Feb 24 01:41:09 CET 2000 by aeb
-.\" Modified Thu Feb 9 22:32:09 CET 2001 by bert hubert <ahu@ds9a.nl>, aeb
-.\" Modified Mon Nov 11 14:35:00 PST 2002 by Ben Woodard <ben@zork.net>
-.\" 2005-03-11, mtk, modified pselect() text (it is now a system
-.\" call in Linux 2.6.16.
-.\"
-.TH select 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO, fd_set \-
-synchronous I/O multiplexing
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/select.h>
-.PP
-.BR typedef " /* ... */ " fd_set;
-.PP
-.BI "int select(int " nfds ", fd_set *_Nullable restrict " readfds ,
-.BI " fd_set *_Nullable restrict " writefds ,
-.BI " fd_set *_Nullable restrict " exceptfds ,
-.BI " struct timeval *_Nullable restrict " timeout );
-.PP
-.BI "void FD_CLR(int " fd ", fd_set *" set );
-.BI "int FD_ISSET(int " fd ", fd_set *" set );
-.BI "void FD_SET(int " fd ", fd_set *" set );
-.BI "void FD_ZERO(fd_set *" set );
-.PP
-.BI "int pselect(int " nfds ", fd_set *_Nullable restrict " readfds ,
-.BI " fd_set *_Nullable restrict " writefds ,
-.BI " fd_set *_Nullable restrict " exceptfds ,
-.BI " const struct timespec *_Nullable restrict " timeout ,
-.BI " const sigset_t *_Nullable restrict " sigmask );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR pselect ():
-.nf
- _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-.BR "WARNING" :
-.BR select ()
-can monitor only file descriptors numbers that are less than
-.B FD_SETSIZE
-(1024)\[em]an unreasonably low limit for many modern applications\[em]and
-this limitation will not change.
-All modern applications should instead use
-.BR poll (2)
-or
-.BR epoll (7),
-which do not suffer this limitation.
-.PP
-.BR select ()
-allows a program to monitor multiple file descriptors,
-waiting until one or more of the file descriptors become "ready"
-for some class of I/O operation (e.g., input possible).
-A file descriptor is considered ready if it is possible to
-perform a corresponding I/O operation (e.g.,
-.BR read (2),
-or a sufficiently small
-.BR write (2))
-without blocking.
-.\"
-.SS fd_set
-A structure type that can represent a set of file descriptors.
-According to POSIX,
-the maximum number of file descriptors in an
-.I fd_set
-structure is the value of the macro
-.BR FD_SETSIZE .
-.\"
-.SS File descriptor sets
-The principal arguments of
-.BR select ()
-are three "sets" of file descriptors (declared with the type
-.IR fd_set ),
-which allow the caller to wait for three classes of events
-on the specified set of file descriptors.
-Each of the
-.I fd_set
-arguments may be specified as NULL if no file descriptors are
-to be watched for the corresponding class of events.
-.PP
-.BR "Note well" :
-Upon return, each of the file descriptor sets is modified in place
-to indicate which file descriptors are currently "ready".
-Thus, if using
-.BR select ()
-within a loop, the sets \fImust be reinitialized\fP before each call.
-.PP
-The contents of a file descriptor set can be manipulated
-using the following macros:
-.TP
-.BR FD_ZERO ()
-This macro clears (removes all file descriptors from)
-.IR set .
-It should be employed as the first step in initializing a file descriptor set.
-.TP
-.BR FD_SET ()
-This macro adds the file descriptor
-.I fd
-to
-.IR set .
-Adding a file descriptor that is already present in the set is a no-op,
-and does not produce an error.
-.TP
-.BR FD_CLR ()
-This macro removes the file descriptor
-.I fd
-from
-.IR set .
-Removing a file descriptor that is not present in the set is a no-op,
-and does not produce an error.
-.TP
-.BR FD_ISSET ()
-.BR select ()
-modifies the contents of the sets according to the rules
-described below.
-After calling
-.BR select (),
-the
-.BR FD_ISSET ()
-macro
-can be used to test if a file descriptor is still present in a set.
-.BR FD_ISSET ()
-returns nonzero if the file descriptor
-.I fd
-is present in
-.IR set ,
-and zero if it is not.
-.\"
-.SS Arguments
-The arguments of
-.BR select ()
-are as follows:
-.TP
-.I readfds
-The file descriptors in this set are watched to see if they are
-ready for reading.
-A file descriptor is ready for reading if a read operation will not
-block; in particular, a file descriptor is also ready on end-of-file.
-.IP
-After
-.BR select ()
-has returned, \fIreadfds\fP will be
-cleared of all file descriptors except for those that are ready for reading.
-.TP
-.I writefds
-The file descriptors in this set are watched to see if they are
-ready for writing.
-A file descriptor is ready for writing if a write operation will not block.
-However, even if a file descriptor indicates as writable,
-a large write may still block.
-.IP
-After
-.BR select ()
-has returned, \fIwritefds\fP will be
-cleared of all file descriptors except for those that are ready for writing.
-.TP
-.I exceptfds
-The file descriptors in this set are watched for "exceptional conditions".
-For examples of some exceptional conditions, see the discussion of
-.B POLLPRI
-in
-.BR poll (2).
-.IP
-After
-.BR select ()
-has returned,
-\fIexceptfds\fP will be cleared of all file descriptors except for those
-for which an exceptional condition has occurred.
-.TP
-.I nfds
-This argument should be set to the highest-numbered file descriptor in any
-of the three sets, plus 1.
-The indicated file descriptors in each set are checked, up to this limit
-(but see BUGS).
-.TP
-.I timeout
-The
-.I timeout
-argument is a
-.I timeval
-structure (shown below) that specifies the interval that
-.BR select ()
-should block waiting for a file descriptor to become ready.
-The call will block until either:
-.RS
-.IP \[bu] 3
-a file descriptor becomes ready;
-.IP \[bu]
-the call is interrupted by a signal handler; or
-.IP \[bu]
-the timeout expires.
-.RE
-.IP
-Note that the
-.I timeout
-interval will be rounded up to the system clock granularity,
-and kernel scheduling delays mean that the blocking interval
-may overrun by a small amount.
-.IP
-If both fields of the
-.I timeval
-structure are zero, then
-.BR select ()
-returns immediately.
-(This is useful for polling.)
-.IP
-If
-.I timeout
-is specified as NULL,
-.BR select ()
-blocks indefinitely waiting for a file descriptor to become ready.
-.\"
-.SS pselect()
-The
-.BR pselect ()
-system call allows an application to safely wait until either
-a file descriptor becomes ready or until a signal is caught.
-.PP
-The operation of
-.BR select ()
-and
-.BR pselect ()
-is identical, other than these three differences:
-.IP \[bu] 3
-.BR select ()
-uses a timeout that is a
-.I struct timeval
-(with seconds and microseconds), while
-.BR pselect ()
-uses a
-.I struct timespec
-(with seconds and nanoseconds).
-.IP \[bu]
-.BR select ()
-may update the
-.I timeout
-argument to indicate how much time was left.
-.BR pselect ()
-does not change this argument.
-.IP \[bu]
-.BR select ()
-has no
-.I sigmask
-argument, and behaves as
-.BR pselect ()
-called with NULL
-.IR sigmask .
-.PP
-.I sigmask
-is a pointer to a signal mask (see
-.BR sigprocmask (2));
-if it is not NULL, then
-.BR pselect ()
-first replaces the current signal mask by the one pointed to by
-.IR sigmask ,
-then does the "select" function, and then restores the original
-signal mask.
-(If
-.I sigmask
-is NULL,
-the signal mask is not modified during the
-.BR pselect ()
-call.)
-.PP
-Other than the difference in the precision of the
-.I timeout
-argument, the following
-.BR pselect ()
-call:
-.PP
-.in +4n
-.EX
-ready = pselect(nfds, &readfds, &writefds, &exceptfds,
- timeout, &sigmask);
-.EE
-.in
-.PP
-is equivalent to
-.I atomically
-executing the following calls:
-.PP
-.in +4n
-.EX
-sigset_t origmask;
-\&
-pthread_sigmask(SIG_SETMASK, &sigmask, &origmask);
-ready = select(nfds, &readfds, &writefds, &exceptfds, timeout);
-pthread_sigmask(SIG_SETMASK, &origmask, NULL);
-.EE
-.in
-.PP
-The reason that
-.BR pselect ()
-is needed is that if one wants to wait for either a signal
-or for a file descriptor to become ready, then
-an atomic test is needed to prevent race conditions.
-(Suppose the signal handler sets a global flag and
-returns.
-Then a test of this global flag followed by a call of
-.BR select ()
-could hang indefinitely if the signal arrived just after the test
-but just before the call.
-By contrast,
-.BR pselect ()
-allows one to first block signals, handle the signals that have come in,
-then call
-.BR pselect ()
-with the desired
-.IR sigmask ,
-avoiding the race.)
-.SS The timeout
-The
-.I timeout
-argument for
-.BR select ()
-is a structure of the following type:
-.PP
-.in +4n
-.EX
-struct timeval {
- time_t tv_sec; /* seconds */
- suseconds_t tv_usec; /* microseconds */
-};
-.EE
-.in
-.PP
-The corresponding argument for
-.BR pselect ()
-is a
-.BR timespec (3)
-structure.
-.PP
-On Linux,
-.BR select ()
-modifies
-.I timeout
-to reflect the amount of time not slept; most other implementations
-do not do this.
-(POSIX.1 permits either behavior.)
-This causes problems both when Linux code which reads
-.I timeout
-is ported to other operating systems, and when code is ported to Linux
-that reuses a \fIstruct timeval\fP for multiple
-.BR select ()s
-in a loop without reinitializing it.
-Consider
-.I timeout
-to be undefined after
-.BR select ()
-returns.
-.\" .PP - it is rumored that:
-.\" On BSD, when a timeout occurs, the file descriptor bits are not changed.
-.\" - it is certainly true that:
-.\" Linux follows SUSv2 and sets the bit masks to zero upon a timeout.
-.SH RETURN VALUE
-On success,
-.BR select ()
-and
-.BR pselect ()
-return the number of file descriptors contained in the three returned
-descriptor sets (that is, the total number of bits that are set in
-.IR readfds ,
-.IR writefds ,
-.IR exceptfds ).
-The return value may be zero if the timeout expired before any
-file descriptors became ready.
-.PP
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error;
-the file descriptor sets are unmodified,
-and
-.I timeout
-becomes undefined.
-.SH ERRORS
-.TP
-.B EBADF
-An invalid file descriptor was given in one of the sets.
-(Perhaps a file descriptor that was already closed,
-or one on which an error has occurred.)
-However, see BUGS.
-.TP
-.B EINTR
-A signal was caught; see
-.BR signal (7).
-.TP
-.B EINVAL
-.I nfds
-is negative or exceeds the
-.B RLIMIT_NOFILE
-resource limit (see
-.BR getrlimit (2)).
-.TP
-.B EINVAL
-The value contained within
-.I timeout
-is invalid.
-.TP
-.B ENOMEM
-Unable to allocate memory for internal tables.
-.SH VERSIONS
-On some other UNIX systems,
-.\" Darwin, according to a report by Jeremy Sequoia, relayed by Josh Triplett
-.BR select ()
-can fail with the error
-.B EAGAIN
-if the system fails to allocate kernel-internal resources, rather than
-.B ENOMEM
-as Linux does.
-POSIX specifies this error for
-.BR poll (2),
-but not for
-.BR select ().
-Portable programs may wish to check for
-.B EAGAIN
-and loop, just as with
-.BR EINTR .
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR select ()
-POSIX.1-2001, 4.4BSD (first appeared in 4.2BSD).
-.IP
-Generally portable to/from
-non-BSD systems supporting clones of the BSD socket layer (including
-System\ V variants).
-However, note that the System\ V variant typically
-sets the timeout variable before returning, but the BSD variant does not.
-.TP
-.BR pselect ()
-Linux 2.6.16.
-POSIX.1g, POSIX.1-2001.
-.IP
-Prior to this,
-it was emulated in glibc (but see BUGS).
-.TP
-.B fd_set
-POSIX.1-2001.
-.SH NOTES
-The following header also provides the
-.I fd_set
-type:
-.IR <sys/time.h> .
-.PP
-An
-.I fd_set
-is a fixed size buffer.
-Executing
-.BR FD_CLR ()
-or
-.BR FD_SET ()
-with a value of
-.I fd
-that is negative or is equal to or larger than
-.B FD_SETSIZE
-will result
-in undefined behavior.
-Moreover, POSIX requires
-.I fd
-to be a valid file descriptor.
-.PP
-The operation of
-.BR select ()
-and
-.BR pselect ()
-is not affected by the
-.B O_NONBLOCK
-flag.
-.\"
-.SS The self-pipe trick
-On systems that lack
-.BR pselect (),
-reliable (and more portable) signal trapping can be achieved
-using the self-pipe trick.
-In this technique,
-a signal handler writes a byte to a pipe whose other end
-is monitored by
-.BR select ()
-in the main program.
-(To avoid possibly blocking when writing to a pipe that may be full
-or reading from a pipe that may be empty,
-nonblocking I/O is used when reading from and writing to the pipe.)
-.\"
-.SS Emulating usleep(3)
-Before the advent of
-.BR usleep (3),
-some code employed a call to
-.BR select ()
-with all three sets empty,
-.I nfds
-zero, and a non-NULL
-.I timeout
-as a fairly portable way to sleep with subsecond precision.
-.\"
-.SS Correspondence between select() and poll() notifications
-Within the Linux kernel source,
-.\" fs/select.c
-we find the following definitions which show the correspondence
-between the readable, writable, and exceptional condition notifications of
-.BR select ()
-and the event notifications provided by
-.BR poll (2)
-and
-.BR epoll (7):
-.PP
-.in +4n
-.EX
-#define POLLIN_SET (EPOLLRDNORM | EPOLLRDBAND | EPOLLIN |
- EPOLLHUP | EPOLLERR)
- /* Ready for reading */
-#define POLLOUT_SET (EPOLLWRBAND | EPOLLWRNORM | EPOLLOUT |
- EPOLLERR)
- /* Ready for writing */
-#define POLLEX_SET (EPOLLPRI)
- /* Exceptional condition */
-.EE
-.in
-.\"
-.SS Multithreaded applications
-If a file descriptor being monitored by
-.BR select ()
-is closed in another thread, the result is unspecified.
-On some UNIX systems,
-.BR select ()
-unblocks and returns, with an indication that the file descriptor is ready
-(a subsequent I/O operation will likely fail with an error,
-unless another process reopens the file descriptor between the time
-.BR select ()
-returned and the I/O operation is performed).
-On Linux (and some other systems),
-closing the file descriptor in another thread has no effect on
-.BR select ().
-In summary, any application that relies on a particular behavior
-in this scenario must be considered buggy.
-.\"
-.SS C library/kernel differences
-The Linux kernel allows file descriptor sets of arbitrary size,
-determining the length of the sets to be checked from the value of
-.IR nfds .
-However, in the glibc implementation, the
-.I fd_set
-type is fixed in size.
-See also BUGS.
-.PP
-The
-.BR pselect ()
-interface described in this page is implemented by glibc.
-The underlying Linux system call is named
-.BR pselect6 ().
-This system call has somewhat different behavior from the glibc
-wrapper function.
-.PP
-The Linux
-.BR pselect6 ()
-system call modifies its
-.I timeout
-argument.
-However, the glibc wrapper function hides this behavior
-by using a local variable for the timeout argument that
-is passed to the system call.
-Thus, the glibc
-.BR pselect ()
-function does not modify its
-.I timeout
-argument;
-this is the behavior required by POSIX.1-2001.
-.PP
-The final argument of the
-.BR pselect6 ()
-system call is not a
-.I "sigset_t\ *"
-pointer, but is instead a structure of the form:
-.PP
-.in +4n
-.EX
-struct {
- const kernel_sigset_t *ss; /* Pointer to signal set */
- size_t ss_len; /* Size (in bytes) of object
- pointed to by \[aq]ss\[aq] */
-};
-.EE
-.in
-.PP
-This allows the system call to obtain both
-a pointer to the signal set and its size,
-while allowing for the fact that most architectures
-support a maximum of 6 arguments to a system call.
-See
-.BR sigprocmask (2)
-for a discussion of the difference between the kernel and libc
-notion of the signal set.
-.\"
-.SS Historical glibc details
-glibc 2.0 provided an incorrect version of
-.BR pselect ()
-that did not take a
-.I sigmask
-argument.
-.PP
-From glibc 2.1 to glibc 2.2.1,
-one must define
-.B _GNU_SOURCE
-in order to obtain the declaration of
-.BR pselect ()
-from
-.IR <sys/select.h> .
-.SH BUGS
-POSIX allows an implementation to define an upper limit,
-advertised via the constant
-.BR FD_SETSIZE ,
-on the range of file descriptors that can be specified
-in a file descriptor set.
-The Linux kernel imposes no fixed limit, but the glibc implementation makes
-.I fd_set
-a fixed-size type, with
-.B FD_SETSIZE
-defined as 1024, and the
-.BR FD_* ()
-macros operating according to that limit.
-To monitor file descriptors greater than 1023, use
-.BR poll (2)
-or
-.BR epoll (7)
-instead.
-.PP
-The implementation of the
-.I fd_set
-arguments as value-result arguments is a design error that is avoided in
-.BR poll (2)
-and
-.BR epoll (7).
-.PP
-According to POSIX,
-.BR select ()
-should check all specified file descriptors in the three file descriptor sets,
-up to the limit
-.IR nfds\-1 .
-However, the current implementation ignores any file descriptor in
-these sets that is greater than the maximum file descriptor number
-that the process currently has open.
-According to POSIX, any such file descriptor that is specified in one
-of the sets should result in the error
-.BR EBADF .
-.PP
-Starting with glibc 2.1, glibc provided an emulation of
-.BR pselect ()
-that was implemented using
-.BR sigprocmask (2)
-and
-.BR select ().
-This implementation remained vulnerable to the very race condition that
-.BR pselect ()
-was designed to prevent.
-Modern versions of glibc use the (race-free)
-.BR pselect ()
-system call on kernels where it is provided.
-.PP
-On Linux,
-.BR select ()
-may report a socket file descriptor as "ready for reading", while
-nevertheless a subsequent read blocks.
-This could for example
-happen when data has arrived but upon examination has the wrong
-checksum and is discarded.
-There may be other circumstances
-in which a file descriptor is spuriously reported as ready.
-.\" Stevens discusses a case where accept can block after select
-.\" returns successfully because of an intervening RST from the client.
-Thus it may be safer to use
-.B O_NONBLOCK
-on sockets that should not block.
-.\" Maybe the kernel should have returned EIO in such a situation?
-.PP
-On Linux,
-.BR select ()
-also modifies
-.I timeout
-if the call is interrupted by a signal handler (i.e., the
-.B EINTR
-error return).
-This is not permitted by POSIX.1.
-The Linux
-.BR pselect ()
-system call has the same behavior,
-but the glibc wrapper hides this behavior by internally copying the
-.I timeout
-to a local variable and passing that variable to the system call.
-.SH EXAMPLES
-.\" SRC BEGIN (select.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/select.h>
-\&
-int
-main(void)
-{
- int retval;
- fd_set rfds;
- struct timeval tv;
-\&
- /* Watch stdin (fd 0) to see when it has input. */
-\&
- FD_ZERO(&rfds);
- FD_SET(0, &rfds);
-\&
- /* Wait up to five seconds. */
-\&
- tv.tv_sec = 5;
- tv.tv_usec = 0;
-\&
- retval = select(1, &rfds, NULL, NULL, &tv);
- /* Don\[aq]t rely on the value of tv now! */
-\&
- if (retval == \-1)
- perror("select()");
- else if (retval)
- printf("Data is available now.\en");
- /* FD_ISSET(0, &rfds) will be true. */
- else
- printf("No data within five seconds.\en");
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR accept (2),
-.BR connect (2),
-.BR poll (2),
-.BR read (2),
-.BR recv (2),
-.BR restart_syscall (2),
-.BR send (2),
-.BR sigprocmask (2),
-.BR write (2),
-.BR timespec (3),
-.BR epoll (7),
-.BR time (7)
-.PP
-For a tutorial with discussion and examples, see
-.BR select_tut (2).
diff --git a/man2/select_tut.2 b/man2/select_tut.2
deleted file mode 100644
index 80db88f5e..000000000
--- a/man2/select_tut.2
+++ /dev/null
@@ -1,638 +0,0 @@
-.\" This manpage is copyright (C) 2001 Paul Sheer.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" very minor changes, aeb
-.\"
-.\" Modified 5 June 2002, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" 2006-05-13, mtk, removed much material that is redundant with select.2
-.\" various other changes
-.\" 2008-01-26, mtk, substantial changes and rewrites
-.\"
-.TH SELECT_TUT 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-select, pselect \- synchronous I/O multiplexing
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-See
-.BR select (2)
-.SH DESCRIPTION
-The
-.BR select ()
-and
-.BR pselect ()
-system calls are used to efficiently monitor multiple file descriptors,
-to see if any of them is, or becomes, "ready";
-that is, to see whether I/O becomes possible,
-or an "exceptional condition" has occurred on any of the file descriptors.
-.PP
-This page provides background and tutorial information
-on the use of these system calls.
-For details of the arguments and semantics of
-.BR select ()
-and
-.BR pselect (),
-see
-.BR select (2).
-.\"
-.SS Combining signal and data events
-.BR pselect ()
-is useful if you are waiting for a signal as well as
-for file descriptor(s) to become ready for I/O.
-Programs that receive signals
-normally use the signal handler only to raise a global flag.
-The global flag will indicate that the event must be processed
-in the main loop of the program.
-A signal will cause the
-.BR select ()
-(or
-.BR pselect ())
-call to return with \fIerrno\fP set to \fBEINTR\fP.
-This behavior is essential so that signals can be processed
-in the main loop of the program, otherwise
-.BR select ()
-would block indefinitely.
-.PP
-Now, somewhere
-in the main loop will be a conditional to check the global flag.
-So we must ask:
-what if a signal arrives after the conditional, but before the
-.BR select ()
-call?
-The answer is that
-.BR select ()
-would block indefinitely, even though an event is actually pending.
-This race condition is solved by the
-.BR pselect ()
-call.
-This call can be used to set the signal mask to a set of signals
-that are to be received only within the
-.BR pselect ()
-call.
-For instance, let us say that the event in question
-was the exit of a child process.
-Before the start of the main loop, we
-would block \fBSIGCHLD\fP using
-.BR sigprocmask (2).
-Our
-.BR pselect ()
-call would enable
-.B SIGCHLD
-by using an empty signal mask.
-Our program would look like:
-.PP
-.EX
-static volatile sig_atomic_t got_SIGCHLD = 0;
-\&
-static void
-child_sig_handler(int sig)
-{
- got_SIGCHLD = 1;
-}
-\&
-int
-main(int argc, char *argv[])
-{
- sigset_t sigmask, empty_mask;
- struct sigaction sa;
- fd_set readfds, writefds, exceptfds;
- int r;
-\&
- sigemptyset(&sigmask);
- sigaddset(&sigmask, SIGCHLD);
- if (sigprocmask(SIG_BLOCK, &sigmask, NULL) == \-1) {
- perror("sigprocmask");
- exit(EXIT_FAILURE);
- }
-\&
- sa.sa_flags = 0;
- sa.sa_handler = child_sig_handler;
- sigemptyset(&sa.sa_mask);
- if (sigaction(SIGCHLD, &sa, NULL) == \-1) {
- perror("sigaction");
- exit(EXIT_FAILURE);
- }
-\&
- sigemptyset(&empty_mask);
-\&
- for (;;) { /* main loop */
- /* Initialize readfds, writefds, and exceptfds
- before the pselect() call. (Code omitted.) */
-\&
- r = pselect(nfds, &readfds, &writefds, &exceptfds,
- NULL, &empty_mask);
- if (r == \-1 && errno != EINTR) {
- /* Handle error */
- }
-\&
- if (got_SIGCHLD) {
- got_SIGCHLD = 0;
-\&
- /* Handle signalled event here; e.g., wait() for all
- terminated children. (Code omitted.) */
- }
-\&
- /* main body of program */
- }
-}
-.EE
-.SS Practical
-So what is the point of
-.BR select ()?
-Can't I just read and write to my file descriptors whenever I want?
-The point of
-.BR select ()
-is that it watches
-multiple descriptors at the same time and properly puts the process to
-sleep if there is no activity.
-UNIX programmers often find
-themselves in a position where they have to handle I/O from more than one
-file descriptor where the data flow may be intermittent.
-If you were to merely create a sequence of
-.BR read (2)
-and
-.BR write (2)
-calls, you would
-find that one of your calls may block waiting for data from/to a file
-descriptor, while another file descriptor is unused though ready for I/O.
-.BR select ()
-efficiently copes with this situation.
-.SS Select law
-Many people who try to use
-.BR select ()
-come across behavior that is
-difficult to understand and produces nonportable or borderline results.
-For instance, the above program is carefully written not to
-block at any point, even though it does not set its file descriptors to
-nonblocking mode.
-It is easy to introduce
-subtle errors that will remove the advantage of using
-.BR select (),
-so here is a list of essentials to watch for when using
-.BR select ().
-.TP 4
-1.
-You should always try to use
-.BR select ()
-without a timeout.
-Your program
-should have nothing to do if there is no data available.
-Code that
-depends on timeouts is not usually portable and is difficult to debug.
-.TP
-2.
-The value \fInfds\fP must be properly calculated for efficiency as
-explained above.
-.TP
-3.
-No file descriptor must be added to any set if you do not intend
-to check its result after the
-.BR select ()
-call, and respond appropriately.
-See next rule.
-.TP
-4.
-After
-.BR select ()
-returns, all file descriptors in all sets
-should be checked to see if they are ready.
-.TP
-5.
-The functions
-.BR read (2),
-.BR recv (2),
-.BR write (2),
-and
-.BR send (2)
-do \fInot\fP necessarily read/write the full amount of data
-that you have requested.
-If they do read/write the full amount, it's
-because you have a low traffic load and a fast stream.
-This is not always going to be the case.
-You should cope with the case of your
-functions managing to send or receive only a single byte.
-.TP
-6.
-Never read/write only in single bytes at a time unless you are really
-sure that you have a small amount of data to process.
-It is extremely
-inefficient not to read/write as much data as you can buffer each time.
-The buffers in the example below are 1024 bytes although they could
-easily be made larger.
-.TP
-7.
-Calls to
-.BR read (2),
-.BR recv (2),
-.BR write (2),
-.BR send (2),
-and
-.BR select ()
-can fail with the error
-\fBEINTR\fP,
-and calls to
-.BR read (2),
-.BR recv (2),
-.BR write (2),
-and
-.BR send (2)
-can fail with
-.I errno
-set to \fBEAGAIN\fP (\fBEWOULDBLOCK\fP).
-These results must be properly managed (not done properly above).
-If your program is not going to receive any signals, then
-it is unlikely you will get \fBEINTR\fP.
-If your program does not set nonblocking I/O,
-you will not get \fBEAGAIN\fP.
-.\" Nonetheless, you should still cope with these errors for completeness.
-.TP
-8.
-Never call
-.BR read (2),
-.BR recv (2),
-.BR write (2),
-or
-.BR send (2)
-with a buffer length of zero.
-.TP
-9.
-If the functions
-.BR read (2),
-.BR recv (2),
-.BR write (2),
-and
-.BR send (2)
-fail with errors other than those listed in \fB7.\fP,
-or one of the input functions returns 0, indicating end of file,
-then you should \fInot\fP pass that file descriptor to
-.BR select ()
-again.
-In the example below,
-I close the file descriptor immediately, and then set it to \-1
-to prevent it being included in a set.
-.TP
-10.
-The timeout value must be initialized with each new call to
-.BR select (),
-since some operating systems modify the structure.
-.BR pselect ()
-however does not modify its timeout structure.
-.TP
-11.
-Since
-.BR select ()
-modifies its file descriptor sets,
-if the call is being used in a loop,
-then the sets must be reinitialized before each call.
-.\" "I have heard" does not fill me with confidence, and doesn't
-.\" belong in a man page, so I've commented this point out.
-.\" .TP
-.\" 11.
-.\" I have heard that the Windows socket layer does not cope with OOB data
-.\" properly.
-.\" It also does not cope with
-.\" .BR select ()
-.\" calls when no file descriptors are set at all.
-.\" Having no file descriptors set is a useful
-.\" way to sleep the process with subsecond precision by using the timeout.
-.\" (See further on.)
-.SH RETURN VALUE
-See
-.BR select (2).
-.SH NOTES
-Generally speaking,
-all operating systems that support sockets also support
-.BR select ().
-.BR select ()
-can be used to solve
-many problems in a portable and efficient way that naive programmers try
-to solve in a more complicated manner using
-threads, forking, IPCs, signals, memory sharing, and so on.
-.PP
-The
-.BR poll (2)
-system call has the same functionality as
-.BR select (),
-and is somewhat more efficient when monitoring sparse
-file descriptor sets.
-It is nowadays widely available, but historically was less portable than
-.BR select ().
-.PP
-The Linux-specific
-.BR epoll (7)
-API provides an interface that is more efficient than
-.BR select (2)
-and
-.BR poll (2)
-when monitoring large numbers of file descriptors.
-.SH EXAMPLES
-Here is an example that better demonstrates the true utility of
-.BR select ().
-The listing below is a TCP forwarding program that forwards
-from one TCP port to another.
-.PP
-.\" SRC BEGIN (select.c)
-.EX
-#include <arpa/inet.h>
-#include <errno.h>
-#include <netinet/in.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/select.h>
-#include <sys/socket.h>
-#include <unistd.h>
-\&
-static int forward_port;
-\&
-#undef max
-#define max(x, y) ((x) > (y) ? (x) : (y))
-\&
-static int
-listen_socket(int listen_port)
-{
- int lfd;
- int yes;
- struct sockaddr_in addr;
-\&
- lfd = socket(AF_INET, SOCK_STREAM, 0);
- if (lfd == \-1) {
- perror("socket");
- return \-1;
- }
-\&
- yes = 1;
- if (setsockopt(lfd, SOL_SOCKET, SO_REUSEADDR,
- &yes, sizeof(yes)) == \-1)
- {
- perror("setsockopt");
- close(lfd);
- return \-1;
- }
-\&
- memset(&addr, 0, sizeof(addr));
- addr.sin_port = htons(listen_port);
- addr.sin_family = AF_INET;
- if (bind(lfd, (struct sockaddr *) &addr, sizeof(addr)) == \-1) {
- perror("bind");
- close(lfd);
- return \-1;
- }
-\&
- printf("accepting connections on port %d\en", listen_port);
- listen(lfd, 10);
- return lfd;
-}
-\&
-static int
-connect_socket(int connect_port, char *address)
-{
- int cfd;
- struct sockaddr_in addr;
-\&
- cfd = socket(AF_INET, SOCK_STREAM, 0);
- if (cfd == \-1) {
- perror("socket");
- return \-1;
- }
-\&
- memset(&addr, 0, sizeof(addr));
- addr.sin_port = htons(connect_port);
- addr.sin_family = AF_INET;
-\&
- if (!inet_aton(address, (struct in_addr *) &addr.sin_addr.s_addr)) {
- fprintf(stderr, "inet_aton(): bad IP address format\en");
- close(cfd);
- return \-1;
- }
-\&
- if (connect(cfd, (struct sockaddr *) &addr, sizeof(addr)) == \-1) {
- perror("connect()");
- shutdown(cfd, SHUT_RDWR);
- close(cfd);
- return \-1;
- }
- return cfd;
-}
-\&
-#define SHUT_FD1 do { \e
- if (fd1 >= 0) { \e
- shutdown(fd1, SHUT_RDWR); \e
- close(fd1); \e
- fd1 = \-1; \e
- } \e
- } while (0)
-\&
-#define SHUT_FD2 do { \e
- if (fd2 >= 0) { \e
- shutdown(fd2, SHUT_RDWR); \e
- close(fd2); \e
- fd2 = \-1; \e
- } \e
- } while (0)
-\&
-#define BUF_SIZE 1024
-\&
-int
-main(int argc, char *argv[])
-{
- int h;
- int ready, nfds;
- int fd1 = \-1, fd2 = \-1;
- int buf1_avail = 0, buf1_written = 0;
- int buf2_avail = 0, buf2_written = 0;
- char buf1[BUF_SIZE], buf2[BUF_SIZE];
- fd_set readfds, writefds, exceptfds;
- ssize_t nbytes;
-\&
- if (argc != 4) {
- fprintf(stderr, "Usage\en\etfwd <listen\-port> "
- "<forward\-to\-port> <forward\-to\-ip\-address>\en");
- exit(EXIT_FAILURE);
- }
-\&
- signal(SIGPIPE, SIG_IGN);
-\&
- forward_port = atoi(argv[2]);
-\&
- h = listen_socket(atoi(argv[1]));
- if (h == \-1)
- exit(EXIT_FAILURE);
-\&
- for (;;) {
- nfds = 0;
-\&
- FD_ZERO(&readfds);
- FD_ZERO(&writefds);
- FD_ZERO(&exceptfds);
- FD_SET(h, &readfds);
- nfds = max(nfds, h);
-\&
- if (fd1 > 0 && buf1_avail < BUF_SIZE)
- FD_SET(fd1, &readfds);
- /* Note: nfds is updated below, when fd1 is added to
- exceptfds. */
- if (fd2 > 0 && buf2_avail < BUF_SIZE)
- FD_SET(fd2, &readfds);
-\&
- if (fd1 > 0 && buf2_avail \- buf2_written > 0)
- FD_SET(fd1, &writefds);
- if (fd2 > 0 && buf1_avail \- buf1_written > 0)
- FD_SET(fd2, &writefds);
-\&
- if (fd1 > 0) {
- FD_SET(fd1, &exceptfds);
- nfds = max(nfds, fd1);
- }
- if (fd2 > 0) {
- FD_SET(fd2, &exceptfds);
- nfds = max(nfds, fd2);
- }
-\&
- ready = select(nfds + 1, &readfds, &writefds, &exceptfds, NULL);
-\&
- if (ready == \-1 && errno == EINTR)
- continue;
-\&
- if (ready == \-1) {
- perror("select()");
- exit(EXIT_FAILURE);
- }
-\&
- if (FD_ISSET(h, &readfds)) {
- socklen_t addrlen;
- struct sockaddr_in client_addr;
- int fd;
-\&
- addrlen = sizeof(client_addr);
- memset(&client_addr, 0, addrlen);
- fd = accept(h, (struct sockaddr *) &client_addr, &addrlen);
- if (fd == \-1) {
- perror("accept()");
- } else {
- SHUT_FD1;
- SHUT_FD2;
- buf1_avail = buf1_written = 0;
- buf2_avail = buf2_written = 0;
- fd1 = fd;
- fd2 = connect_socket(forward_port, argv[3]);
- if (fd2 == \-1)
- SHUT_FD1;
- else
- printf("connect from %s\en",
- inet_ntoa(client_addr.sin_addr));
-\&
- /* Skip any events on the old, closed file
- descriptors. */
-\&
- continue;
- }
- }
-\&
- /* NB: read OOB data before normal reads. */
-\&
- if (fd1 > 0 && FD_ISSET(fd1, &exceptfds)) {
- char c;
-\&
- nbytes = recv(fd1, &c, 1, MSG_OOB);
- if (nbytes < 1)
- SHUT_FD1;
- else
- send(fd2, &c, 1, MSG_OOB);
- }
- if (fd2 > 0 && FD_ISSET(fd2, &exceptfds)) {
- char c;
-\&
- nbytes = recv(fd2, &c, 1, MSG_OOB);
- if (nbytes < 1)
- SHUT_FD2;
- else
- send(fd1, &c, 1, MSG_OOB);
- }
- if (fd1 > 0 && FD_ISSET(fd1, &readfds)) {
- nbytes = read(fd1, buf1 + buf1_avail,
- BUF_SIZE \- buf1_avail);
- if (nbytes < 1)
- SHUT_FD1;
- else
- buf1_avail += nbytes;
- }
- if (fd2 > 0 && FD_ISSET(fd2, &readfds)) {
- nbytes = read(fd2, buf2 + buf2_avail,
- BUF_SIZE \- buf2_avail);
- if (nbytes < 1)
- SHUT_FD2;
- else
- buf2_avail += nbytes;
- }
- if (fd1 > 0 && FD_ISSET(fd1, &writefds) && buf2_avail > 0) {
- nbytes = write(fd1, buf2 + buf2_written,
- buf2_avail \- buf2_written);
- if (nbytes < 1)
- SHUT_FD1;
- else
- buf2_written += nbytes;
- }
- if (fd2 > 0 && FD_ISSET(fd2, &writefds) && buf1_avail > 0) {
- nbytes = write(fd2, buf1 + buf1_written,
- buf1_avail \- buf1_written);
- if (nbytes < 1)
- SHUT_FD2;
- else
- buf1_written += nbytes;
- }
-\&
- /* Check if write data has caught read data. */
-\&
- if (buf1_written == buf1_avail)
- buf1_written = buf1_avail = 0;
- if (buf2_written == buf2_avail)
- buf2_written = buf2_avail = 0;
-\&
- /* One side has closed the connection, keep
- writing to the other side until empty. */
-\&
- if (fd1 < 0 && buf1_avail \- buf1_written == 0)
- SHUT_FD2;
- if (fd2 < 0 && buf2_avail \- buf2_written == 0)
- SHUT_FD1;
- }
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.PP
-The above program properly forwards most kinds of TCP connections
-including OOB signal data transmitted by \fBtelnet\fP servers.
-It handles the tricky problem of having data flow in both directions
-simultaneously.
-You might think it more efficient to use a
-.BR fork (2)
-call and devote a thread to each stream.
-This becomes more tricky than you might suspect.
-Another idea is to set nonblocking I/O using
-.BR fcntl (2).
-This also has its problems because you end up using
-inefficient timeouts.
-.PP
-The program does not handle more than one simultaneous connection at a
-time, although it could easily be extended to do this with a linked list
-of buffers\[em]one for each connection.
-At the moment, new
-connections cause the current connection to be dropped.
-.SH SEE ALSO
-.BR accept (2),
-.BR connect (2),
-.BR poll (2),
-.BR read (2),
-.BR recv (2),
-.BR select (2),
-.BR send (2),
-.BR sigprocmask (2),
-.BR write (2),
-.BR epoll (7)
-.\" .SH AUTHORS
-.\" This man page was written by Paul Sheer.
diff --git a/man2/semctl.2 b/man2/semctl.2
deleted file mode 100644
index 1cb71ab55..000000000
--- a/man2/semctl.2
+++ /dev/null
@@ -1,623 +0,0 @@
-'\" t
-.\" Copyright 1993 Giorgio Ciucci (giorgio@crcc.it)
-.\" and Copyright 2004, 2005 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Tue Oct 22 17:53:56 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Fri Jun 19 10:59:15 1998 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified Sun Feb 18 01:59:29 2001 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 20 Dec 2001, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 21 Dec 2001, aeb
-.\" Modified 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on CAP_IPC_OWNER requirement
-.\" Modified 17 Jun 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on CAP_SYS_ADMIN requirement for IPC_SET and IPC_RMID
-.\" Modified, 11 Nov 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Language and formatting clean-ups
-.\" Rewrote semun text
-.\" Added semid_ds and ipc_perm structure definitions
-.\" 2005-08-02, mtk: Added IPC_INFO, SEM_INFO, SEM_STAT descriptions.
-.\" 2018-03-20, dbueso: Added SEM_STAT_ANY description.
-.\"
-.TH semctl 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-semctl \- System V semaphore control operations
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/sem.h>
-.PP
-.BI "int semctl(int " semid ", int " semnum ", int " cmd ", ...);"
-.fi
-.SH DESCRIPTION
-.BR semctl ()
-performs the control operation specified by
-.I cmd
-on the System\ V semaphore set identified by
-.IR semid ,
-or on the
-.IR semnum -th
-semaphore of that set.
-(The semaphores in a set are numbered starting at 0.)
-.PP
-This function has three or four arguments, depending on
-.IR cmd .
-When there are four, the fourth has the type
-.IR "union semun" .
-The \fIcalling program\fP must define this union as follows:
-.PP
-.in +4n
-.EX
-union semun {
- int val; /* Value for SETVAL */
- struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */
- unsigned short *array; /* Array for GETALL, SETALL */
- struct seminfo *__buf; /* Buffer for IPC_INFO
- (Linux\-specific) */
-};
-.EE
-.in
-.PP
-The
-.I semid_ds
-data structure is defined in \fI<sys/sem.h>\fP as follows:
-.PP
-.in +4n
-.EX
-struct semid_ds {
- struct ipc_perm sem_perm; /* Ownership and permissions */
- time_t sem_otime; /* Last semop time */
- time_t sem_ctime; /* Creation time/time of last
- modification via semctl() */
- unsigned long sem_nsems; /* No. of semaphores in set */
-};
-.EE
-.in
-.PP
-The fields of the
-.I semid_ds
-structure are as follows:
-.TP 11
-.I sem_perm
-This is an
-.I ipc_perm
-structure (see below) that specifies the access permissions on the semaphore
-set.
-.TP
-.I sem_otime
-Time of last
-.BR semop (2)
-system call.
-.TP
-.I sem_ctime
-Time of creation of semaphore set or time of last
-.BR semctl ()
-.BR IPCSET ,
-.BR SETVAL ,
-or
-.B SETALL
-operation.
-.TP
-.I sem_nsems
-Number of semaphores in the set.
-Each semaphore of the set is referenced by a nonnegative integer
-ranging from
-.B 0
-to
-.IR sem_nsems\-1 .
-.PP
-The
-.I ipc_perm
-structure is defined as follows
-(the highlighted fields are settable using
-.BR IPC_SET ):
-.PP
-.in +4n
-.EX
-struct ipc_perm {
- key_t __key; /* Key supplied to semget(2) */
- uid_t \fBuid\fP; /* Effective UID of owner */
- gid_t \fBgid\fP; /* Effective GID of owner */
- uid_t cuid; /* Effective UID of creator */
- gid_t cgid; /* Effective GID of creator */
- unsigned short \fBmode\fP; /* Permissions */
- unsigned short __seq; /* Sequence number */
-};
-.EE
-.in
-.PP
-The least significant 9 bits of the
-.I mode
-field of the
-.I ipc_perm
-structure define the access permissions for the shared memory segment.
-The permission bits are as follows:
-.TS
-l l.
-0400 Read by user
-0200 Write by user
-0040 Read by group
-0020 Write by group
-0004 Read by others
-0002 Write by others
-.TE
-.PP
-In effect, "write" means "alter" for a semaphore set.
-Bits 0100, 0010, and 0001 (the execute bits) are unused by the system.
-.PP
-Valid values for
-.I cmd
-are:
-.TP
-.B IPC_STAT
-Copy information from the kernel data structure associated with
-.I semid
-into the
-.I semid_ds
-structure pointed to by
-.IR arg.buf .
-The argument
-.I semnum
-is ignored.
-The calling process must have read permission on the semaphore set.
-.TP
-.B IPC_SET
-Write the values of some members of the
-.I semid_ds
-structure pointed to by
-.I arg.buf
-to the kernel data structure associated with this semaphore set,
-updating also its
-.I sem_ctime
-member.
-.IP
-The following members of the structure are updated:
-.IR sem_perm.uid ,
-.IR sem_perm.gid ,
-and (the least significant 9 bits of)
-.IR sem_perm.mode .
-.IP
-The effective UID of the calling process must match the owner
-.RI ( sem_perm.uid )
-or creator
-.RI ( sem_perm.cuid )
-of the semaphore set, or the caller must be privileged.
-The argument
-.I semnum
-is ignored.
-.TP
-.B IPC_RMID
-Immediately remove the semaphore set,
-awakening all processes blocked in
-.BR semop (2)
-calls on the set (with an error return and
-.I errno
-set to
-.BR EIDRM ).
-The effective user ID of the calling process must
-match the creator or owner of the semaphore set,
-or the caller must be privileged.
-The argument
-.I semnum
-is ignored.
-.TP
-.BR IPC_INFO " (Linux\-specific)"
-Return information about system-wide semaphore limits and
-parameters in the structure pointed to by
-.IR arg.__buf .
-This structure is of type
-.IR seminfo ,
-defined in
-.I <sys/sem.h>
-if the
-.B _GNU_SOURCE
-feature test macro is defined:
-.IP
-.in +4n
-.EX
-struct seminfo {
- int semmap; /* Number of entries in semaphore
- map; unused within kernel */
- int semmni; /* Maximum number of semaphore sets */
- int semmns; /* Maximum number of semaphores in all
- semaphore sets */
- int semmnu; /* System\-wide maximum number of undo
- structures; unused within kernel */
- int semmsl; /* Maximum number of semaphores in a
- set */
- int semopm; /* Maximum number of operations for
- semop(2) */
- int semume; /* Maximum number of undo entries per
- process; unused within kernel */
- int semusz; /* Size of struct sem_undo */
- int semvmx; /* Maximum semaphore value */
- int semaem; /* Max. value that can be recorded for
- semaphore adjustment (SEM_UNDO) */
-};
-.EE
-.in
-.IP
-The
-.IR semmsl ,
-.IR semmns ,
-.IR semopm ,
-and
-.I semmni
-settings can be changed via
-.IR /proc/sys/kernel/sem ;
-see
-.BR proc (5)
-for details.
-.TP
-.BR SEM_INFO " (Linux-specific)"
-Return a
-.I seminfo
-structure containing the same information as for
-.BR IPC_INFO ,
-except that the following fields are returned with information
-about system resources consumed by semaphores: the
-.I semusz
-field returns the number of semaphore sets that currently exist
-on the system; and the
-.I semaem
-field returns the total number of semaphores in all semaphore sets
-on the system.
-.TP
-.BR SEM_STAT " (Linux-specific)"
-Return a
-.I semid_ds
-structure as for
-.BR IPC_STAT .
-However, the
-.I semid
-argument is not a semaphore identifier, but instead an index into
-the kernel's internal array that maintains information about
-all semaphore sets on the system.
-.TP
-.BR SEM_STAT_ANY " (Linux-specific, since Linux 4.17)"
-Return a
-.I semid_ds
-structure as for
-.BR SEM_STAT .
-However,
-.I sem_perm.mode
-is not checked for read access for
-.I semid
-meaning that any user can employ this operation (just as any user may read
-.I /proc/sysvipc/sem
-to obtain the same information).
-.TP
-.B GETALL
-Return
-.B semval
-(i.e., the current value)
-for all semaphores of the set into
-.IR arg.array .
-The argument
-.I semnum
-is ignored.
-The calling process must have read permission on the semaphore set.
-.TP
-.B GETNCNT
-Return the
-.B semncnt
-value for the
-.IR semnum \-th
-semaphore of the set
-(i.e., the number of processes waiting for the semaphore's value to increase).
-The calling process must have read permission on the semaphore set.
-.TP
-.B GETPID
-Return the
-.B sempid
-value for the
-.IR semnum \-th
-semaphore of the set.
-This is the PID of the process that last performed an operation on
-that semaphore (but see NOTES).
-The calling process must have read permission on the semaphore set.
-.TP
-.B GETVAL
-Return
-.B semval
-(i.e., the semaphore value) for the
-.IR semnum \-th
-semaphore of the set.
-The calling process must have read permission on the semaphore set.
-.TP
-.B GETZCNT
-Return the
-.B semzcnt
-value for the
-.IR semnum \-th
-semaphore of the set
-(i.e., the number of processes waiting for the semaphore value to become 0).
-The calling process must have read permission on the semaphore set.
-.TP
-.B SETALL
-Set the
-.B semval
-values for all semaphores of the set using
-.IR arg.array ,
-updating also the
-.I sem_ctime
-member of the
-.I semid_ds
-structure associated with the set.
-Undo entries (see
-.BR semop (2))
-are cleared for altered semaphores in all processes.
-If the changes to semaphore values would permit blocked
-.BR semop (2)
-calls in other processes to proceed, then those processes are woken up.
-The argument
-.I semnum
-is ignored.
-The calling process must have alter (write) permission on
-the semaphore set.
-.TP
-.B SETVAL
-Set the semaphore value
-.RB ( semval )
-to
-.I arg.val
-for the
-.IR semnum \-th
-semaphore of the set, updating also the
-.I sem_ctime
-member of the
-.I semid_ds
-structure associated with the set.
-Undo entries are cleared for altered semaphores in all processes.
-If the changes to semaphore values would permit blocked
-.BR semop (2)
-calls in other processes to proceed, then those processes are woken up.
-The calling process must have alter permission on the semaphore set.
-.SH RETURN VALUE
-On success,
-.BR semctl ()
-returns a nonnegative value depending on
-.I cmd
-as follows:
-.TP
-.B GETNCNT
-the value of
-.BR semncnt .
-.TP
-.B GETPID
-the value of
-.BR sempid .
-.TP
-.B GETVAL
-the value of
-.BR semval .
-.TP
-.B GETZCNT
-the value of
-.BR semzcnt .
-.TP
-.B IPC_INFO
-the index of the highest used entry in the
-kernel's internal array recording information about all
-semaphore sets.
-(This information can be used with repeated
-.B SEM_STAT
-or
-.B SEM_STAT_ANY
-operations to obtain information about all semaphore sets on the system.)
-.TP
-.B SEM_INFO
-as for
-.BR IPC_INFO .
-.TP
-.B SEM_STAT
-the identifier of the semaphore set whose index was given in
-.IR semid .
-.TP
-.B SEM_STAT_ANY
-as for
-.BR SEM_STAT .
-.PP
-All other
-.I cmd
-values return 0 on success.
-.PP
-On failure,
-.BR semctl ()
-returns \-1 and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-The argument
-.I cmd
-has one of the values
-.BR GETALL ,
-.BR GETPID ,
-.BR GETVAL ,
-.BR GETNCNT ,
-.BR GETZCNT ,
-.BR IPC_STAT ,
-.BR SEM_STAT ,
-.BR SEM_STAT_ANY ,
-.BR SETALL ,
-or
-.B SETVAL
-and the calling process does not have the required
-permissions on the semaphore set and does not have the
-.B CAP_IPC_OWNER
-capability in the user namespace that governs its IPC namespace.
-.TP
-.B EFAULT
-The address pointed to by
-.I arg.buf
-or
-.I arg.array
-isn't accessible.
-.TP
-.B EIDRM
-The semaphore set was removed.
-.TP
-.B EINVAL
-Invalid value for
-.I cmd
-or
-.IR semid .
-Or: for a
-.B SEM_STAT
-operation, the index value specified in
-.I semid
-referred to an array slot that is currently unused.
-.TP
-.B EPERM
-The argument
-.I cmd
-has the value
-.B IPC_SET
-or
-.B IPC_RMID
-but the effective user ID of the calling process is not the creator
-(as found in
-.IR sem_perm.cuid )
-or the owner
-(as found in
-.IR sem_perm.uid )
-of the semaphore set,
-and the process does not have the
-.B CAP_SYS_ADMIN
-capability.
-.TP
-.B ERANGE
-The argument
-.I cmd
-has the value
-.B SETALL
-or
-.B SETVAL
-and the value to which
-.B semval
-is to be set (for some semaphore of the set) is less than 0
-or greater than the implementation limit
-.BR SEMVMX .
-.SH VERSIONS
-POSIX.1 specifies the
-.\" POSIX.1-2001, POSIX.1-2008
-.I sem_nsems
-field of the
-.I semid_ds
-structure as having the type
-.IR "unsigned\ short" ,
-and the field is so defined on most other systems.
-It was also so defined on Linux 2.2 and earlier,
-but, since Linux 2.4, the field has the type
-.IR "unsigned\ long" .
-.\"
-.SS The sempid value
-POSIX.1 defines
-.I sempid
-as the "process ID of [the] last operation" on a semaphore,
-and explicitly notes that this value is set by a successful
-.BR semop (2)
-call, with the implication that no other interface affects the
-.I sempid
-value.
-.PP
-While some implementations conform to the behavior specified in POSIX.1,
-others do not.
-(The fault here probably lies with POSIX.1 inasmuch as it likely failed
-to capture the full range of existing implementation behaviors.)
-Various other implementations
-.\" At least OpenSolaris (and, one supposes, older Solaris) and Darwin
-also update
-.I sempid
-for the other operations that update the value of a semaphore: the
-.B SETVAL
-and
-.B SETALL
-operations, as well as the semaphore adjustments performed
-on process termination as a consequence of the use of the
-.B SEM_UNDO
-flag (see
-.BR semop (2)).
-.PP
-Linux also updates
-.I sempid
-for
-.B SETVAL
-operations and semaphore adjustments.
-However, somewhat inconsistently, up to and including Linux 4.5,
-the kernel did not update
-.I sempid
-for
-.B SETALL
-operations.
-This was rectified
-.\" commit a5f4db877177d2a3d7ae62a7bac3a5a27e083d7f
-in Linux 4.6.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4.
-.\" SVr4 documents more error conditions EINVAL and EOVERFLOW.
-.PP
-Various fields in a \fIstruct semid_ds\fP were typed as
-.I short
-under Linux 2.2
-and have become
-.I long
-under Linux 2.4.
-To take advantage of this,
-a recompilation under glibc-2.1.91 or later should suffice.
-(The kernel distinguishes old and new calls by an
-.B IPC_64
-flag in
-.IR cmd .)
-.PP
-In some earlier versions of glibc, the
-.I semun
-union was defined in \fI<sys/sem.h>\fP, but POSIX.1 requires
-.\" POSIX.1-2001, POSIX.1-2008
-that the caller define this union.
-On versions of glibc where this union is \fInot\fP defined,
-the macro
-.B _SEM_SEMUN_UNDEFINED
-is defined in \fI<sys/sem.h>\fP.
-.SH NOTES
-The
-.BR IPC_INFO ,
-.BR SEM_STAT ,
-and
-.B SEM_INFO
-operations are used by the
-.BR ipcs (1)
-program to provide information on allocated resources.
-In the future these may modified or moved to a
-.I /proc
-filesystem interface.
-.PP
-The following system limit on semaphore sets affects a
-.BR semctl ()
-call:
-.TP
-.B SEMVMX
-Maximum value for
-.BR semval :
-implementation dependent (32767).
-.PP
-For greater portability, it is best to always call
-.BR semctl ()
-with four arguments.
-.SH EXAMPLES
-See
-.BR shmop (2).
-.SH SEE ALSO
-.BR ipc (2),
-.BR semget (2),
-.BR semop (2),
-.BR capabilities (7),
-.BR sem_overview (7),
-.BR sysvipc (7)
diff --git a/man2/semget.2 b/man2/semget.2
deleted file mode 100644
index 4164ed709..000000000
--- a/man2/semget.2
+++ /dev/null
@@ -1,434 +0,0 @@
-.\" Copyright 1993 Giorgio Ciucci (giorgio@crcc.it)
-.\" and Copyright (C) 2020 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Tue Oct 22 17:54:56 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1 Jan 2002, Martin Schulze <joey@infodrom.org>
-.\" Modified 4 Jan 2002, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.\" Modified, 11 Nov 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Language and formatting clean-ups
-.\" Added notes on /proc files
-.\" Rewrote BUGS note about semget()'s failure to initialize
-.\" semaphore values
-.\"
-.TH semget 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-semget \- get a System V semaphore set identifier
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/sem.h>
-.fi
-.PP
-.BI "int semget(key_t " key ,
-.BI "int " nsems ,
-.BI "int " semflg );
-.SH DESCRIPTION
-The
-.BR semget ()
-system call returns the System\ V semaphore set identifier
-associated with the argument
-.IR key .
-It may be used either to obtain the identifier of a previously created
-semaphore set (when
-.I semflg
-is zero and
-.I key
-does not have the value
-.BR IPC_PRIVATE ),
-or to create a new set.
-.PP
-A new set of
-.I nsems
-semaphores is created if
-.I key
-has the value
-.B IPC_PRIVATE
-or if no existing semaphore set is associated with
-.I key
-and
-.B IPC_CREAT
-is specified in
-.IR semflg .
-.PP
-If
-.I semflg
-specifies both
-.B IPC_CREAT
-and
-.B IPC_EXCL
-and a semaphore set already exists for
-.IR key ,
-then
-.BR semget ()
-fails with
-.I errno
-set to
-.BR EEXIST .
-(This is analogous to the effect of the combination
-.B O_CREAT | O_EXCL
-for
-.BR open (2).)
-.PP
-Upon creation, the least significant 9 bits of the argument
-.I semflg
-define the permissions (for owner, group, and others)
-for the semaphore set.
-These bits have the same format, and the same
-meaning, as the
-.I mode
-argument of
-.BR open (2)
-(though the execute permissions are
-not meaningful for semaphores, and write permissions mean permission
-to alter semaphore values).
-.PP
-When creating a new semaphore set,
-.BR semget ()
-initializes the set's associated data structure,
-.I semid_ds
-(see
-.BR semctl (2)),
-as follows:
-.IP \[bu] 3
-.I sem_perm.cuid
-and
-.I sem_perm.uid
-are set to the effective user ID of the calling process.
-.IP \[bu]
-.I sem_perm.cgid
-and
-.I sem_perm.gid
-are set to the effective group ID of the calling process.
-.IP \[bu]
-The least significant 9 bits of
-.I sem_perm.mode
-are set to the least significant 9 bits of
-.IR semflg .
-.IP \[bu]
-.I sem_nsems
-is set to the value of
-.IR nsems .
-.IP \[bu]
-.I sem_otime
-is set to 0.
-.IP \[bu]
-.I sem_ctime
-is set to the current time.
-.PP
-The argument
-.I nsems
-can be 0
-(a don't care)
-when a semaphore set is not being created.
-Otherwise,
-.I nsems
-must be greater than 0
-and less than or equal to the maximum number of semaphores per semaphore set
-.RB ( SEMMSL ).
-.PP
-If the semaphore set already exists, the permissions are
-verified.
-.\" and a check is made to see if it is marked for destruction.
-.SH RETURN VALUE
-On success,
-.BR semget ()
-returns the semaphore set identifier (a nonnegative integer).
-On failure, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-A semaphore set exists for
-.IR key ,
-but the calling process does not have permission to access the set,
-and does not have the
-.B CAP_IPC_OWNER
-capability in the user namespace that governs its IPC namespace.
-.TP
-.B EEXIST
-.B IPC_CREAT
-and
-.B IPC_EXCL
-were specified in
-.IR semflg ,
-but a semaphore set already exists for
-.IR key .
-.\" .TP
-.\" .B EIDRM
-.\" The semaphore set is marked to be deleted.
-.TP
-.B EINVAL
-.I nsems
-is less than 0 or greater than the limit on the number
-of semaphores per semaphore set
-.RB ( SEMMSL ).
-.TP
-.B EINVAL
-A semaphore set corresponding to
-.I key
-already exists, but
-.I nsems
-is larger than the number of semaphores in that set.
-.TP
-.B ENOENT
-No semaphore set exists for
-.I key
-and
-.I semflg
-did not specify
-.BR IPC_CREAT .
-.TP
-.B ENOMEM
-A semaphore set has to be created but the system does not have
-enough memory for the new data structure.
-.TP
-.B ENOSPC
-A semaphore set has to be created but the system limit for the maximum
-number of semaphore sets
-.RB ( SEMMNI ),
-or the system wide maximum number of semaphores
-.RB ( SEMMNS ),
-would be exceeded.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-SVr4, POSIX.1-2001.
-.\" SVr4 documents additional error conditions EFBIG, E2BIG, EAGAIN,
-.\" ERANGE, EFAULT.
-.SH NOTES
-.B IPC_PRIVATE
-isn't a flag field but a
-.I key_t
-type.
-If this special value is used for
-.IR key ,
-the system call ignores all but the least significant 9 bits of
-.I semflg
-and creates a new semaphore set (on success).
-.\"
-.SS Semaphore initialization
-The values of the semaphores in a newly created set are indeterminate.
-(POSIX.1-2001 and POSIX.1-2008 are explicit on this point,
-although POSIX.1-2008 notes that a future version of the standard
-may require an implementation to initialize the semaphores to 0.)
-Although Linux, like many other implementations,
-initializes the semaphore values to 0,
-a portable application cannot rely on this:
-it should explicitly initialize the semaphores to the desired values.
-.\" In truth, every one of the many implementations that I've tested sets
-.\" the values to zero, but I suppose there is/was some obscure
-.\" implementation out there that does not.
-.PP
-Initialization can be done using
-.BR semctl (2)
-.B SETVAL
-or
-.B SETALL
-operation.
-Where multiple peers do not know who will be the first to
-initialize the set, checking for a nonzero
-.I sem_otime
-in the associated data structure retrieved by a
-.BR semctl (2)
-.B IPC_STAT
-operation can be used to avoid races.
-.\"
-.SS Semaphore limits
-The following limits on semaphore set resources affect the
-.BR semget ()
-call:
-.TP
-.B SEMMNI
-System-wide limit on the number of semaphore sets.
-Before Linux 3.19,
-the default value for this limit was 128.
-Since Linux 3.19,
-.\" commit e843e7d2c88b7db107a86bd2c7145dc715c058f4
-the default value is 32,000.
-On Linux, this limit can be read and modified via the fourth field of
-.IR /proc/sys/kernel/sem .
-.\" This /proc file is not available in Linux 2.2 and earlier -- MTK
-.TP
-.B SEMMSL
-Maximum number of semaphores per semaphore ID.
-Before Linux 3.19,
-the default value for this limit was 250.
-Since Linux 3.19,
-.\" commit e843e7d2c88b7db107a86bd2c7145dc715c058f4
-the default value is 32,000.
-On Linux, this limit can be read and modified via the first field of
-.IR /proc/sys/kernel/sem .
-.TP
-.B SEMMNS
-System-wide limit on the number of semaphores: policy dependent
-(on Linux, this limit can be read and modified via the second field of
-.IR /proc/sys/kernel/sem ).
-Note that the number of semaphores system-wide
-is also limited by the product of
-.B SEMMSL
-and
-.BR SEMMNI .
-.SH BUGS
-The name choice
-.B IPC_PRIVATE
-was perhaps unfortunate,
-.B IPC_NEW
-would more clearly show its function.
-.SH EXAMPLES
-The program shown below uses
-.BR semget ()
-to create a new semaphore set or retrieve the ID of an existing set.
-It generates the
-.I key
-for
-.BR semget ()
-using
-.BR ftok (3).
-The first two command-line arguments are used as the
-.I pathname
-and
-.I proj_id
-arguments for
-.BR ftok (3).
-The third command-line argument is an integer that specifies the
-.I nsems
-argument for
-.BR semget ().
-Command-line options can be used to specify the
-.B IPC_CREAT
-.RI ( \-c )
-and
-.B IPC_EXCL
-.RI ( \-x )
-flags for the call to
-.BR semget ().
-The usage of this program is demonstrated below.
-.PP
-We first create two files that will be used to generate keys using
-.BR ftok (3),
-create two semaphore sets using those files, and then list the sets using
-.BR ipcs (1):
-.PP
-.in +4n
-.EX
-$ \fBtouch mykey mykey2\fP
-$ \fB./t_semget \-c mykey p 1\fP
-ID = 9
-$ \fB./t_semget \-c mykey2 p 2\fP
-ID = 10
-$ \fBipcs \-s\fP
-\&
-\-\-\-\-\-\- Semaphore Arrays \-\-\-\-\-\-\-\-
-key semid owner perms nsems
-0x7004136d 9 mtk 600 1
-0x70041368 10 mtk 600 2
-.EE
-.in
-.PP
-Next, we demonstrate that when
-.BR semctl (2)
-is given the same
-.I key
-(as generated by the same arguments to
-.BR ftok (3)),
-it returns the ID of the already existing semaphore set:
-.PP
-.in +4n
-.EX
-$ \fB./t_semget \-c mykey p 1\fP
-ID = 9
-.EE
-.in
-.PP
-Finally, we demonstrate the kind of collision that can occur when
-.BR ftok (3)
-is given different
-.I pathname
-arguments that have the same inode number:
-.PP
-.in +4n
-.EX
-$ \fBln mykey link\fP
-$ \fBls \-i1 link mykey\fP
-2233197 link
-2233197 mykey
-$ \fB./t_semget link p 1\fP # Generates same key as \[aq]mykey\[aq]
-ID = 9
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (t_semget.c)
-.EX
-/* t_semget.c
-\&
- Licensed under GNU General Public License v2 or later.
-*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/ipc.h>
-#include <sys/sem.h>
-#include <unistd.h>
-\&
-static void
-usage(const char *pname)
-{
- fprintf(stderr, "Usage: %s [\-cx] pathname proj\-id num\-sems\en",
- pname);
- fprintf(stderr, " \-c Use IPC_CREAT flag\en");
- fprintf(stderr, " \-x Use IPC_EXCL flag\en");
- exit(EXIT_FAILURE);
-}
-\&
-int
-main(int argc, char *argv[])
-{
- int semid, nsems, flags, opt;
- key_t key;
-\&
- flags = 0;
- while ((opt = getopt(argc, argv, "cx")) != \-1) {
- switch (opt) {
- case \[aq]c\[aq]: flags |= IPC_CREAT; break;
- case \[aq]x\[aq]: flags |= IPC_EXCL; break;
- default: usage(argv[0]);
- }
- }
-\&
- if (argc != optind + 3)
- usage(argv[0]);
-\&
- key = ftok(argv[optind], argv[optind + 1][0]);
- if (key == \-1) {
- perror("ftok");
- exit(EXIT_FAILURE);
- }
-\&
- nsems = atoi(argv[optind + 2]);
-\&
- semid = semget(key, nsems, flags | 0600);
- if (semid == \-1) {
- perror("semget");
- exit(EXIT_FAILURE);
- }
-\&
- printf("ID = %d\en", semid);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR semctl (2),
-.BR semop (2),
-.BR ftok (3),
-.BR capabilities (7),
-.BR sem_overview (7),
-.BR sysvipc (7)
diff --git a/man2/semop.2 b/man2/semop.2
deleted file mode 100644
index 4dd1ef19e..000000000
--- a/man2/semop.2
+++ /dev/null
@@ -1,523 +0,0 @@
-.\" Copyright 1993 Giorgio Ciucci (giorgio@crcc.it)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 1996-10-22, Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2002-01-08, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2003-04-28, Ernie Petrides <petrides@redhat.com>
-.\" Modified 2004-05-27, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified, 11 Nov 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Language and formatting clean-ups
-.\" Added notes on /proc files
-.\" 2005-04-08, mtk, Noted kernel version numbers for semtimedop()
-.\" 2007-07-09, mtk, Added an EXAMPLE code segment.
-.\"
-.TH semop 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-semop, semtimedop \- System V semaphore operations
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/sem.h>
-.PP
-.BI "int semop(int " semid ", struct sembuf *" sops ", size_t " nsops );
-.BI "int semtimedop(int " semid ", struct sembuf *" sops ", size_t " nsops ,
-.BI " const struct timespec *_Nullable " timeout );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR semtimedop ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-Each semaphore in a System\ V semaphore set
-has the following associated values:
-.PP
-.in +4n
-.EX
-unsigned short semval; /* semaphore value */
-unsigned short semzcnt; /* # waiting for zero */
-unsigned short semncnt; /* # waiting for increase */
-pid_t sempid; /* PID of process that last
- modified the semaphore value */
-.EE
-.in
-.PP
-.BR semop ()
-performs operations on selected semaphores in the set indicated by
-.IR semid .
-Each of the
-.I nsops
-elements in the array pointed to by
-.I sops
-is a structure that
-specifies an operation to be performed on a single semaphore.
-The elements of this structure are of type
-.IR "struct sembuf" ,
-containing the following members:
-.PP
-.in +4n
-.EX
-unsigned short sem_num; /* semaphore number */
-short sem_op; /* semaphore operation */
-short sem_flg; /* operation flags */
-.EE
-.in
-.PP
-Flags recognized in
-.I sem_flg
-are
-.B IPC_NOWAIT
-and
-.BR SEM_UNDO .
-If an operation specifies
-.BR SEM_UNDO ,
-it will be automatically undone when the process terminates.
-.PP
-The set of operations contained in
-.I sops
-is performed in
-.IR "array order" ,
-and
-.IR atomically ,
-that is, the operations are performed either as a complete unit,
-or not at all.
-The behavior of the system call if not all operations can be
-performed immediately depends on the presence of the
-.B IPC_NOWAIT
-flag in the individual
-.I sem_flg
-fields, as noted below.
-.PP
-Each operation is performed on the
-.IR sem_num \-th
-semaphore of the semaphore set, where the first semaphore of the set
-is numbered 0.
-There are three types of operation, distinguished by the value of
-.IR sem_op .
-.PP
-If
-.I sem_op
-is a positive integer, the operation adds this value to
-the semaphore value
-.RI ( semval ).
-Furthermore, if
-.B SEM_UNDO
-is specified for this operation, the system subtracts the value
-.I sem_op
-from the semaphore adjustment
-.RI ( semadj )
-value for this semaphore.
-This operation can always proceed\[em]it never forces a thread to wait.
-The calling process must have alter permission on the semaphore set.
-.PP
-If
-.I sem_op
-is zero, the process must have read permission on the semaphore
-set.
-This is a "wait-for-zero" operation: if
-.I semval
-is zero, the operation can immediately proceed.
-Otherwise, if
-.B IPC_NOWAIT
-is specified in
-.IR sem_flg ,
-.BR semop ()
-fails with
-.I errno
-set to
-.B EAGAIN
-(and none of the operations in
-.I sops
-is performed).
-Otherwise,
-.I semzcnt
-(the count of threads waiting until this semaphore's value becomes zero)
-is incremented by one and the thread sleeps until
-one of the following occurs:
-.IP \[bu] 3
-.I semval
-becomes 0, at which time the value of
-.I semzcnt
-is decremented.
-.IP \[bu]
-The semaphore set
-is removed:
-.BR semop ()
-fails, with
-.I errno
-set to
-.BR EIDRM .
-.IP \[bu]
-The calling thread catches a signal:
-the value of
-.I semzcnt
-is decremented and
-.BR semop ()
-fails, with
-.I errno
-set to
-.BR EINTR .
-.PP
-If
-.I sem_op
-is less than zero, the process must have alter permission on the
-semaphore set.
-If
-.I semval
-is greater than or equal to the absolute value of
-.IR sem_op ,
-the operation can proceed immediately:
-the absolute value of
-.I sem_op
-is subtracted from
-.IR semval ,
-and, if
-.B SEM_UNDO
-is specified for this operation, the system adds the absolute value of
-.I sem_op
-to the semaphore adjustment
-.RI ( semadj )
-value for this semaphore.
-If the absolute value of
-.I sem_op
-is greater than
-.IR semval ,
-and
-.B IPC_NOWAIT
-is specified in
-.IR sem_flg ,
-.BR semop ()
-fails, with
-.I errno
-set to
-.B EAGAIN
-(and none of the operations in
-.I sops
-is performed).
-Otherwise,
-.I semncnt
-(the counter of threads waiting for this semaphore's value to increase)
-is incremented by one and the thread sleeps until
-one of the following occurs:
-.IP \[bu] 3
-.I semval
-becomes greater than or equal to the absolute value of
-.IR sem_op :
-the operation now proceeds, as described above.
-.IP \[bu]
-The semaphore set is removed from the system:
-.BR semop ()
-fails, with
-.I errno
-set to
-.BR EIDRM .
-.IP \[bu]
-The calling thread catches a signal:
-the value of
-.I semncnt
-is decremented and
-.BR semop ()
-fails, with
-.I errno
-set to
-.BR EINTR .
-.PP
-On successful completion, the
-.I sempid
-value for each semaphore specified in the array pointed to by
-.I sops
-is set to the caller's process ID.
-In addition, the
-.I sem_otime
-.\" and
-.\" .I sem_ctime
-is set to the current time.
-.SS semtimedop()
-.BR semtimedop ()
-behaves identically to
-.BR semop ()
-except that in those cases where the calling thread would sleep,
-the duration of that sleep is limited by the amount of elapsed
-time specified by the
-.I timespec
-structure whose address is passed in the
-.I timeout
-argument.
-(This sleep interval will be rounded up to the system clock granularity,
-and kernel scheduling delays mean that the interval
-may overrun by a small amount.)
-If the specified time limit has been reached,
-.BR semtimedop ()
-fails with
-.I errno
-set to
-.B EAGAIN
-(and none of the operations in
-.I sops
-is performed).
-If the
-.I timeout
-argument is NULL,
-then
-.BR semtimedop ()
-behaves exactly like
-.BR semop ().
-.PP
-Note that if
-.BR semtimedop ()
-is interrupted by a signal, causing the call to fail with the error
-.BR EINTR ,
-the contents of
-.I timeout
-are left unchanged.
-.SH RETURN VALUE
-On success,
-.BR semop ()
-and
-.BR semtimedop ()
-return 0.
-On failure, they return \-1, and set
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B E2BIG
-The argument
-.I nsops
-is greater than
-.BR SEMOPM ,
-the maximum number of operations allowed per system
-call.
-.TP
-.B EACCES
-The calling process does not have the permissions required
-to perform the specified semaphore operations,
-and does not have the
-.B CAP_IPC_OWNER
-capability in the user namespace that governs its IPC namespace.
-.TP
-.B EAGAIN
-An operation could not proceed immediately and either
-.B IPC_NOWAIT
-was specified in
-.I sem_flg
-or the time limit specified in
-.I timeout
-expired.
-.TP
-.B EFAULT
-An address specified in either the
-.I sops
-or the
-.I timeout
-argument isn't accessible.
-.TP
-.B EFBIG
-For some operation the value of
-.I sem_num
-is less than 0 or greater than or equal to the number
-of semaphores in the set.
-.TP
-.B EIDRM
-The semaphore set was removed.
-.TP
-.B EINTR
-While blocked in this system call, the thread caught a signal; see
-.BR signal (7).
-.TP
-.B EINVAL
-The semaphore set doesn't exist, or
-.I semid
-is less than zero, or
-.I nsops
-has a nonpositive value.
-.TP
-.B ENOMEM
-The
-.I sem_flg
-of some operation specified
-.B SEM_UNDO
-and the system does not have enough memory to allocate the undo
-structure.
-.TP
-.B ERANGE
-For some operation
-.I sem_op+semval
-is greater than
-.BR SEMVMX ,
-the implementation dependent maximum value for
-.IR semval .
-.SH STANDARDS
-POSIX.1-2008.
-.SH VERSIONS
-Linux 2.5.52 (backported into Linux 2.4.22),
-glibc 2.3.3.
-POSIX.1-2001, SVr4.
-.\" SVr4 documents additional error conditions EINVAL, EFBIG, ENOSPC.
-.SH NOTES
-The
-.I sem_undo
-structures of a process aren't inherited by the child produced by
-.BR fork (2),
-but they are inherited across an
-.BR execve (2)
-system call.
-.PP
-.BR semop ()
-is never automatically restarted after being interrupted by a signal handler,
-regardless of the setting of the
-.B SA_RESTART
-flag when establishing a signal handler.
-.PP
-A semaphore adjustment
-.RI ( semadj )
-value is a per-process, per-semaphore integer that is the negated sum
-of all operations performed on a semaphore specifying the
-.B SEM_UNDO
-flag.
-Each process has a list of
-.I semadj
-values\[em]one value for each semaphore on which it has operated using
-.BR SEM_UNDO .
-When a process terminates, each of its per-semaphore
-.I semadj
-values is added to the corresponding semaphore,
-thus undoing the effect of that process's operations on the semaphore
-(but see BUGS below).
-When a semaphore's value is directly set using the
-.B SETVAL
-or
-.B SETALL
-request to
-.BR semctl (2),
-the corresponding
-.I semadj
-values in all processes are cleared.
-The
-.BR clone (2)
-.B CLONE_SYSVSEM
-flag allows more than one process to share a
-.I semadj
-list; see
-.BR clone (2)
-for details.
-.PP
-The \fIsemval\fP, \fIsempid\fP, \fIsemzcnt\fP, and \fIsemnct\fP values
-for a semaphore can all be retrieved using appropriate
-.BR semctl (2)
-calls.
-.SS Semaphore limits
-The following limits on semaphore set resources affect the
-.BR semop ()
-call:
-.TP
-.B SEMOPM
-Maximum number of operations allowed for one
-.BR semop ()
-call.
-Before Linux 3.19,
-.\" commit e843e7d2c88b7db107a86bd2c7145dc715c058f4
-the default value for this limit was 32.
-Since Linux 3.19, the default value is 500.
-On Linux, this limit can be read and modified via the third field of
-.IR /proc/sys/kernel/sem .
-.\" This /proc file is not available in Linux 2.2 and earlier -- MTK
-.IR Note :
-this limit should not be raised above 1000,
-.\" See comment in Linux 3.19 source file include/uapi/linux/sem.h
-because of the risk of that
-.BR semop ()
-fails due to kernel memory fragmentation when allocating memory to copy the
-.I sops
-array.
-.TP
-.B SEMVMX
-Maximum allowable value for
-.IR semval :
-implementation dependent (32767).
-.PP
-The implementation has no intrinsic limits for
-the adjust on exit maximum value
-.RB ( SEMAEM ),
-the system wide maximum number of undo structures
-.RB ( SEMMNU )
-and the per-process maximum number of undo entries system parameters.
-.SH BUGS
-When a process terminates, its set of associated
-.I semadj
-structures is used to undo the effect of all of the
-semaphore operations it performed with the
-.B SEM_UNDO
-flag.
-This raises a difficulty: if one (or more) of these semaphore adjustments
-would result in an attempt to decrease a semaphore's value below zero,
-what should an implementation do?
-One possible approach would be to block until all the semaphore
-adjustments could be performed.
-This is however undesirable since it could force process termination to
-block for arbitrarily long periods.
-Another possibility is that such semaphore adjustments could be ignored
-altogether (somewhat analogously to failing when
-.B IPC_NOWAIT
-is specified for a semaphore operation).
-Linux adopts a third approach: decreasing the semaphore value
-as far as possible (i.e., to zero) and allowing process
-termination to proceed immediately.
-.PP
-In Linux 2.6.x, x <= 10, there is a bug that in some circumstances
-prevents a thread that is waiting for a semaphore value to become
-zero from being woken up when the value does actually become zero.
-This bug is fixed in Linux 2.6.11.
-.\" The bug report:
-.\" http://marc.theaimsgroup.com/?l=linux-kernel&m=110260821123863&w=2
-.\" the fix:
-.\" http://marc.theaimsgroup.com/?l=linux-kernel&m=110261701025794&w=2
-.SH EXAMPLES
-The following code segment uses
-.BR semop ()
-to atomically wait for the value of semaphore 0 to become zero,
-and then increment the semaphore value by one.
-.PP
-.in +4n
-.EX
-struct sembuf sops[2];
-int semid;
-\&
-/* Code to set \fIsemid\fP omitted */
-\&
-sops[0].sem_num = 0; /* Operate on semaphore 0 */
-sops[0].sem_op = 0; /* Wait for value to equal 0 */
-sops[0].sem_flg = 0;
-\&
-sops[1].sem_num = 0; /* Operate on semaphore 0 */
-sops[1].sem_op = 1; /* Increment value by one */
-sops[1].sem_flg = 0;
-\&
-if (semop(semid, sops, 2) == \-1) {
- perror("semop");
- exit(EXIT_FAILURE);
-}
-.EE
-.in
-.PP
-A further example of the use of
-.BR semop ()
-can be found in
-.BR shmop (2).
-.SH SEE ALSO
-.BR clone (2),
-.BR semctl (2),
-.BR semget (2),
-.BR sigaction (2),
-.BR capabilities (7),
-.BR sem_overview (7),
-.BR sysvipc (7),
-.BR time (7)
diff --git a/man2/semtimedop.2 b/man2/semtimedop.2
deleted file mode 100644
index 8a4061874..000000000
--- a/man2/semtimedop.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/semop.2
diff --git a/man2/send.2 b/man2/send.2
deleted file mode 100644
index bea22da15..000000000
--- a/man2/send.2
+++ /dev/null
@@ -1,506 +0,0 @@
-.\" Copyright (c) 1983, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1996-10-22 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Oct 1998 by Andi Kleen
-.\" Modified Oct 2003 by aeb
-.\" Modified 2004-07-01 by mtk
-.\"
-.TH send 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-send, sendto, sendmsg \- send a message on a socket
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.PP
-.BI "ssize_t send(int " sockfd ", const void " buf [. len "], size_t " len \
-", int " flags );
-.BI "ssize_t sendto(int " sockfd ", const void " buf [. len "], size_t " len \
-", int " flags ,
-.BI " const struct sockaddr *" dest_addr ", socklen_t " addrlen );
-.BI "ssize_t sendmsg(int " sockfd ", const struct msghdr *" msg \
-", int " flags );
-.fi
-.SH DESCRIPTION
-The system calls
-.BR send (),
-.BR sendto (),
-and
-.BR sendmsg ()
-are used to transmit a message to another socket.
-.PP
-The
-.BR send ()
-call may be used only when the socket is in a
-.I connected
-state (so that the intended recipient is known).
-The only difference between
-.BR send ()
-and
-.BR write (2)
-is the presence of
-.IR flags .
-With a zero
-.I flags
-argument,
-.BR send ()
-is equivalent to
-.BR write (2).
-Also, the following call
-.PP
-.in +4n
-.EX
-send(sockfd, buf, len, flags);
-.EE
-.in
-.PP
-is equivalent to
-.PP
-.in +4n
-.EX
-sendto(sockfd, buf, len, flags, NULL, 0);
-.EE
-.in
-.PP
-The argument
-.I sockfd
-is the file descriptor of the sending socket.
-.PP
-If
-.BR sendto ()
-is used on a connection-mode
-.RB ( SOCK_STREAM ,
-.BR SOCK_SEQPACKET )
-socket, the arguments
-.I dest_addr
-and
-.I addrlen
-are ignored (and the error
-.B EISCONN
-may be returned when they are
-not NULL and 0), and the error
-.B ENOTCONN
-is returned when the socket was not actually connected.
-Otherwise, the address of the target is given by
-.I dest_addr
-with
-.I addrlen
-specifying its size.
-For
-.BR sendmsg (),
-the address of the target is given by
-.IR msg.msg_name ,
-with
-.I msg.msg_namelen
-specifying its size.
-.PP
-For
-.BR send ()
-and
-.BR sendto (),
-the message is found in
-.I buf
-and has length
-.IR len .
-For
-.BR sendmsg (),
-the message is pointed to by the elements of the array
-.IR msg.msg_iov .
-The
-.BR sendmsg ()
-call also allows sending ancillary data (also known as control information).
-.PP
-If the message is too long to pass atomically through the
-underlying protocol, the error
-.B EMSGSIZE
-is returned, and the message is not transmitted.
-.PP
-No indication of failure to deliver is implicit in a
-.BR send ().
-Locally detected errors are indicated by a return value of \-1.
-.PP
-When the message does not fit into the send buffer of the socket,
-.BR send ()
-normally blocks, unless the socket has been placed in nonblocking I/O
-mode.
-In nonblocking mode it would fail with the error
-.B EAGAIN
-or
-.B EWOULDBLOCK
-in this case.
-The
-.BR select (2)
-call may be used to determine when it is possible to send more data.
-.SS The flags argument
-The
-.I flags
-argument is the bitwise OR
-of zero or more of the following flags.
-.\" FIXME . ? document MSG_PROXY (which went away in Linux 2.3.15)
-.TP
-.BR MSG_CONFIRM " (since Linux 2.3.15)"
-Tell the link layer that forward progress happened: you got a successful
-reply from the other side.
-If the link layer doesn't get this
-it will regularly reprobe the neighbor (e.g., via a unicast ARP).
-Valid only on
-.B SOCK_DGRAM
-and
-.B SOCK_RAW
-sockets and currently implemented only for IPv4 and IPv6.
-See
-.BR arp (7)
-for details.
-.TP
-.B MSG_DONTROUTE
-Don't use a gateway to send out the packet, send to hosts only on
-directly connected networks.
-This is usually used only
-by diagnostic or routing programs.
-This is defined only for protocol
-families that route; packet sockets don't.
-.TP
-.BR MSG_DONTWAIT " (since Linux 2.2)"
-Enables nonblocking operation; if the operation would block,
-.B EAGAIN
-or
-.B EWOULDBLOCK
-is returned.
-This provides similar behavior to setting the
-.B O_NONBLOCK
-flag (via the
-.BR fcntl (2)
-.B F_SETFL
-operation), but differs in that
-.B MSG_DONTWAIT
-is a per-call option, whereas
-.B O_NONBLOCK
-is a setting on the open file description (see
-.BR open (2)),
-which will affect all threads in the calling process
-and as well as other processes that hold file descriptors
-referring to the same open file description.
-.TP
-.BR MSG_EOR " (since Linux 2.2)"
-Terminates a record (when this notion is supported, as for sockets of type
-.BR SOCK_SEQPACKET ).
-.TP
-.BR MSG_MORE " (since Linux 2.4.4)"
-The caller has more data to send.
-This flag is used with TCP sockets to obtain the same effect
-as the
-.B TCP_CORK
-socket option (see
-.BR tcp (7)),
-with the difference that this flag can be set on a per-call basis.
-.IP
-Since Linux 2.6, this flag is also supported for UDP sockets, and informs
-the kernel to package all of the data sent in calls with this flag set
-into a single datagram which is transmitted only when a call is performed
-that does not specify this flag.
-(See also the
-.B UDP_CORK
-socket option described in
-.BR udp (7).)
-.TP
-.BR MSG_NOSIGNAL " (since Linux 2.2)"
-Don't generate a
-.B SIGPIPE
-signal if the peer on a stream-oriented socket has closed the connection.
-The
-.B EPIPE
-error is still returned.
-This provides similar behavior to using
-.BR sigaction (2)
-to ignore
-.BR SIGPIPE ,
-but, whereas
-.B MSG_NOSIGNAL
-is a per-call feature,
-ignoring
-.B SIGPIPE
-sets a process attribute that affects all threads in the process.
-.TP
-.B MSG_OOB
-Sends
-.I out-of-band
-data on sockets that support this notion (e.g., of type
-.BR SOCK_STREAM );
-the underlying protocol must also support
-.I out-of-band
-data.
-.TP
-.BR MSG_FASTOPEN " (since Linux 3.7)"
-Attempts TCP Fast Open (RFC7413) and sends data in the SYN like a
-combination of
-.BR connect (2)
-and
-.BR write (2),
-by performing an implicit
-.BR connect (2)
-operation.
-It blocks until the data is buffered and the handshake has completed.
-For a non-blocking socket,
-it returns the number of bytes buffered and sent in the SYN packet.
-If the cookie is not available locally,
-it returns
-.BR EINPROGRESS ,
-and sends a SYN with a Fast Open cookie request automatically.
-The caller needs to write the data again when the socket is connected.
-On errors,
-it sets the same
-.I errno
-as
-.BR connect (2)
-if the handshake fails.
-This flag requires enabling TCP Fast Open client support on sysctl
-.IR net.ipv4.tcp_fastopen .
-.IP
-Refer to
-.B TCP_FASTOPEN_CONNECT
-socket option in
-.BR tcp (7)
-for an alternative approach.
-.SS sendmsg()
-The definition of the
-.I msghdr
-structure employed by
-.BR sendmsg ()
-is as follows:
-.PP
-.in +4n
-.EX
-struct msghdr {
- void *msg_name; /* Optional address */
- socklen_t msg_namelen; /* Size of address */
- struct iovec *msg_iov; /* Scatter/gather array */
- size_t msg_iovlen; /* # elements in msg_iov */
- void *msg_control; /* Ancillary data, see below */
- size_t msg_controllen; /* Ancillary data buffer len */
- int msg_flags; /* Flags (unused) */
-};
-.EE
-.in
-.PP
-The
-.I msg_name
-field is used on an unconnected socket to specify the target
-address for a datagram.
-It points to a buffer containing the address; the
-.I msg_namelen
-field should be set to the size of the address.
-For a connected socket, these fields should be specified as NULL and 0,
-respectively.
-.PP
-The
-.I msg_iov
-and
-.I msg_iovlen
-fields specify scatter-gather locations, as for
-.BR writev (2).
-.PP
-You may send control information (ancillary data) using the
-.I msg_control
-and
-.I msg_controllen
-members.
-The maximum control buffer length the kernel can process is limited
-per socket by the value in
-.IR /proc/sys/net/core/optmem_max ;
-see
-.BR socket (7).
-For further information on the use of ancillary data in various
-socket domains, see
-.BR unix (7)
-and
-.BR ip (7).
-.PP
-The
-.I msg_flags
-field is ignored.
-.\" Still to be documented:
-.\" Send file descriptors and user credentials using the
-.\" msg_control* fields.
-.SH RETURN VALUE
-On success, these calls return the number of bytes sent.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-These are some standard errors generated by the socket layer.
-Additional errors
-may be generated and returned from the underlying protocol modules;
-see their respective manual pages.
-.TP
-.B EACCES
-(For UNIX domain sockets, which are identified by pathname)
-Write permission is denied on the destination socket file,
-or search permission is denied for one of the directories
-the path prefix.
-(See
-.BR path_resolution (7).)
-.IP
-(For UDP sockets) An attempt was made to send to a
-network/broadcast address as though it was a unicast address.
-.TP
-.BR EAGAIN " or " EWOULDBLOCK
-.\" Actually EAGAIN on Linux
-The socket is marked nonblocking and the requested operation
-would block.
-POSIX.1-2001 allows either error to be returned for this case,
-and does not require these constants to have the same value,
-so a portable application should check for both possibilities.
-.TP
-.B EAGAIN
-(Internet domain datagram sockets)
-The socket referred to by
-.I sockfd
-had not previously been bound to an address and,
-upon attempting to bind it to an ephemeral port,
-it was determined that all port numbers in the ephemeral port range
-are currently in use.
-See the discussion of
-.I /proc/sys/net/ipv4/ip_local_port_range
-in
-.BR ip (7).
-.TP
-.B EALREADY
-Another Fast Open is in progress.
-.TP
-.B EBADF
-.I sockfd
-is not a valid open file descriptor.
-.TP
-.B ECONNRESET
-Connection reset by peer.
-.TP
-.B EDESTADDRREQ
-The socket is not connection-mode, and no peer address is set.
-.TP
-.B EFAULT
-An invalid user space address was specified for an argument.
-.TP
-.B EINTR
-A signal occurred before any data was transmitted; see
-.BR signal (7).
-.TP
-.B EINVAL
-Invalid argument passed.
-.TP
-.B EISCONN
-The connection-mode socket was connected already but a
-recipient was specified.
-(Now either this error is returned, or the recipient specification
-is ignored.)
-.TP
-.B EMSGSIZE
-The socket type
-.\" (e.g., SOCK_DGRAM )
-requires that message be sent atomically, and the size
-of the message to be sent made this impossible.
-.TP
-.B ENOBUFS
-The output queue for a network interface was full.
-This generally indicates that the interface has stopped sending,
-but may be caused by transient congestion.
-(Normally, this does not occur in Linux.
-Packets are just silently dropped
-when a device queue overflows.)
-.TP
-.B ENOMEM
-No memory available.
-.TP
-.B ENOTCONN
-The socket is not connected, and no target has been given.
-.TP
-.B ENOTSOCK
-The file descriptor
-.I sockfd
-does not refer to a socket.
-.TP
-.B EOPNOTSUPP
-Some bit in the
-.I flags
-argument is inappropriate for the socket type.
-.TP
-.B EPIPE
-The local end has been shut down on a connection oriented socket.
-In this case, the process
-will also receive a
-.B SIGPIPE
-unless
-.B MSG_NOSIGNAL
-is set.
-.SH VERSIONS
-According to POSIX.1-2001, the
-.I msg_controllen
-field of the
-.I msghdr
-structure should be typed as
-.IR socklen_t ,
-and the
-.I msg_iovlen
-field should be typed as
-.IR int ,
-but glibc currently types both as
-.IR size_t .
-.\" glibc bug for msg_controllen raised 12 Mar 2006
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=2448
-.\" The problem is an underlying kernel issue: the size of the
-.\" __kernel_size_t type used to type these fields varies
-.\" across architectures, but socklen_t is always 32 bits,
-.\" as (at least with GCC) is int.
-.SH STANDARDS
-POSIX.1-2008.
-.PP
-.B MSG_CONFIRM
-is a Linux extension.
-.SH HISTORY
-4.4BSD, SVr4, POSIX.1-2001.
-(first appeared in 4.2BSD).
-.PP
-POSIX.1-2001 describes only the
-.B MSG_OOB
-and
-.B MSG_EOR
-flags.
-POSIX.1-2008 adds a specification of
-.BR MSG_NOSIGNAL .
-.SH NOTES
-See
-.BR sendmmsg (2)
-for information about a Linux-specific system call
-that can be used to transmit multiple datagrams in a single call.
-.SH BUGS
-Linux may return
-.B EPIPE
-instead of
-.BR ENOTCONN .
-.SH EXAMPLES
-An example of the use of
-.BR sendto ()
-is shown in
-.BR getaddrinfo (3).
-.SH SEE ALSO
-.BR fcntl (2),
-.BR getsockopt (2),
-.BR recv (2),
-.BR select (2),
-.BR sendfile (2),
-.BR sendmmsg (2),
-.BR shutdown (2),
-.BR socket (2),
-.BR write (2),
-.BR cmsg (3),
-.BR ip (7),
-.BR ipv6 (7),
-.BR socket (7),
-.BR tcp (7),
-.BR udp (7),
-.BR unix (7)
diff --git a/man2/sendfile.2 b/man2/sendfile.2
deleted file mode 100644
index 5574eff2b..000000000
--- a/man2/sendfile.2
+++ /dev/null
@@ -1,241 +0,0 @@
-.\" This man page is Copyright (C) 1998 Pawel Krawczyk.
-.\"
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" $Id: sendfile.2,v 1.5 1999/05/18 11:54:11 freitag Exp $
-.\" 2000-11-19 bert hubert <ahu@ds9a.nl>: in_fd cannot be socket
-.\"
-.\" 2004-12-17, mtk
-.\" updated description of in_fd and out_fd for 2.6
-.\" Various wording and formatting changes
-.\"
-.\" 2005-03-31 Martin Pool <mbp@sourcefrog.net> mmap() improvements
-.\"
-.TH sendfile 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sendfile \- transfer data between file descriptors
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/sendfile.h>
-.PP
-.BI "ssize_t sendfile(int" " out_fd" ", int" " in_fd" ", \
-off_t *_Nullable " offset ,
-.BI " size_t" " count" );
-.\" The below is too ugly. Comments about glibc versions belong
-.\" in the notes, not in the header.
-.\"
-.\" .B #include <features.h>
-.\" .B #if (__GLIBC__==2 && __GLIBC_MINOR__>=1) || __GLIBC__>2
-.\" .B #include <sys/sendfile.h>
-.\" #else
-.\" .B #include <sys/types.h>
-.\" .B /* No system prototype before glibc 2.1. */
-.\" .BI "ssize_t sendfile(int" " out_fd" ", int" " in_fd" ", off_t *" \
-.\" offset ", size_t" " count" )
-.\" .B #endif
-.\"
-.fi
-.SH DESCRIPTION
-.BR sendfile ()
-copies data between one file descriptor and another.
-Because this copying is done within the kernel,
-.BR sendfile ()
-is more efficient than the combination of
-.BR read (2)
-and
-.BR write (2),
-which would require transferring data to and from user space.
-.PP
-.I in_fd
-should be a file descriptor opened for reading and
-.I out_fd
-should be a descriptor opened for writing.
-.PP
-If
-.I offset
-is not NULL, then it points
-to a variable holding the file offset from which
-.BR sendfile ()
-will start reading data from
-.IR in_fd .
-When
-.BR sendfile ()
-returns, this variable
-will be set to the offset of the byte following the last byte that was read.
-If
-.I offset
-is not NULL, then
-.BR sendfile ()
-does not modify the file offset of
-.IR in_fd ;
-otherwise the file offset is adjusted to reflect
-the number of bytes read from
-.IR in_fd .
-.PP
-If
-.I offset
-is NULL, then data will be read from
-.I in_fd
-starting at the file offset,
-and the file offset will be updated by the call.
-.PP
-.I count
-is the number of bytes to copy between the file descriptors.
-.PP
-The
-.I in_fd
-argument must correspond to a file which supports
-.BR mmap (2)-like
-operations
-(i.e., it cannot be a socket).
-.PP
-Before Linux 2.6.33,
-.I out_fd
-must refer to a socket.
-Since Linux 2.6.33 it can be any file.
-If it is a regular file, then
-.BR sendfile ()
-changes the file offset appropriately.
-.SH RETURN VALUE
-If the transfer was successful, the number of bytes written to
-.I out_fd
-is returned.
-Note that a successful call to
-.BR sendfile ()
-may write fewer bytes than requested;
-the caller should be prepared to retry the call if there were unsent bytes.
-See also NOTES.
-.PP
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-Nonblocking I/O has been selected using
-.B O_NONBLOCK
-and the write would block.
-.TP
-.B EBADF
-The input file was not opened for reading or the output file
-was not opened for writing.
-.TP
-.B EFAULT
-Bad address.
-.TP
-.B EINVAL
-Descriptor is not valid or locked, or an
-.BR mmap (2)-like
-operation is not available for
-.IR in_fd ,
-or
-.I count
-is negative.
-.TP
-.B EINVAL
-.I out_fd
-has the
-.B O_APPEND
-flag set.
-This is not currently supported by
-.BR sendfile ().
-.TP
-.B EIO
-Unspecified error while reading from
-.IR in_fd .
-.TP
-.B ENOMEM
-Insufficient memory to read from
-.IR in_fd .
-.TP
-.B EOVERFLOW
-.I count
-is too large, the operation would result in exceeding the maximum size of either
-the input file or the output file.
-.TP
-.B ESPIPE
-.I offset
-is not NULL but the input file is not seekable.
-.SH VERSIONS
-Other UNIX systems implement
-.BR sendfile ()
-with different semantics and prototypes.
-It should not be used in portable programs.
-.SH STANDARDS
-None.
-.SH HISTORY
-Linux 2.2,
-glibc 2.1.
-.PP
-In Linux 2.4 and earlier,
-.I out_fd
-could also refer to a regular file;
-this possibility went away in the Linux 2.6.x kernel series,
-but was restored in Linux 2.6.33.
-.PP
-The original Linux
-.BR sendfile ()
-system call was not designed to handle large file offsets.
-Consequently, Linux 2.4 added
-.BR sendfile64 (),
-with a wider type for the
-.I offset
-argument.
-The glibc
-.BR sendfile ()
-wrapper function transparently deals with the kernel differences.
-.SH NOTES
-.BR sendfile ()
-will transfer at most 0x7ffff000 (2,147,479,552) bytes,
-returning the number of bytes actually transferred.
-.\" commit e28cc71572da38a5a12c1cfe4d7032017adccf69
-(This is true on both 32-bit and 64-bit systems.)
-.PP
-If you plan to use
-.BR sendfile ()
-for sending files to a TCP socket, but need
-to send some header data in front of the file contents, you will find
-it useful to employ the
-.B TCP_CORK
-option, described in
-.BR tcp (7),
-to minimize the number of packets and to tune performance.
-.PP
-Applications may wish to fall back to
-.BR read (2)
-and
-.BR write (2)
-in the case where
-.BR sendfile ()
-fails with
-.B EINVAL
-or
-.BR ENOSYS .
-.PP
-If
-.I out_fd
-refers to a socket or pipe with zero-copy support, callers must ensure the
-transferred portions of the file referred to by
-.I in_fd
-remain unmodified until the reader on the other end of
-.I out_fd
-has consumed the transferred data.
-.PP
-The Linux-specific
-.BR splice (2)
-call supports transferring data between arbitrary file descriptors
-provided one (or both) of them is a pipe.
-.SH SEE ALSO
-.BR copy_file_range (2),
-.BR mmap (2),
-.BR open (2),
-.BR socket (2),
-.BR splice (2)
diff --git a/man2/sendfile64.2 b/man2/sendfile64.2
deleted file mode 100644
index 888077b1a..000000000
--- a/man2/sendfile64.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sendfile.2
diff --git a/man2/sendmmsg.2 b/man2/sendmmsg.2
deleted file mode 100644
index 010cd9a76..000000000
--- a/man2/sendmmsg.2
+++ /dev/null
@@ -1,232 +0,0 @@
-.\" Copyright (c) 2012 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" with some material from a draft by
-.\" Stephan Mueller <stephan.mueller@atsec.com>
-.\" in turn based on Andi Kleen's recvmmsg.2 page.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sendmmsg 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sendmmsg \- send multiple messages on a socket
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <sys/socket.h>
-.PP
-.BI "int sendmmsg(int " sockfd ", struct mmsghdr *" msgvec \
-", unsigned int " vlen ","
-.BI " int " flags ");"
-.fi
-.SH DESCRIPTION
-The
-.BR sendmmsg ()
-system call is an extension of
-.BR sendmsg (2)
-that allows the caller to transmit multiple messages on a socket
-using a single system call.
-(This has performance benefits for some applications.)
-.\" See commit 228e548e602061b08ee8e8966f567c12aa079682
-.PP
-The
-.I sockfd
-argument is the file descriptor of the socket
-on which data is to be transmitted.
-.PP
-The
-.I msgvec
-argument is a pointer to an array of
-.I mmsghdr
-structures.
-The size of this array is specified in
-.IR vlen .
-.PP
-The
-.I mmsghdr
-structure is defined in
-.I <sys/socket.h>
-as:
-.PP
-.in +4n
-.EX
-struct mmsghdr {
- struct msghdr msg_hdr; /* Message header */
- unsigned int msg_len; /* Number of bytes transmitted */
-};
-.EE
-.in
-.PP
-The
-.I msg_hdr
-field is a
-.I msghdr
-structure, as described in
-.BR sendmsg (2).
-The
-.I msg_len
-field is used to return the number of bytes sent from the message in
-.I msg_hdr
-(i.e., the same as the return value from a single
-.BR sendmsg (2)
-call).
-.PP
-The
-.I flags
-argument contains flags ORed together.
-The flags are the same as for
-.BR sendmsg (2).
-.PP
-A blocking
-.BR sendmmsg ()
-call blocks until
-.I vlen
-messages have been sent.
-A nonblocking call sends as many messages as possible
-(up to the limit specified by
-.IR vlen )
-and returns immediately.
-.PP
-On return from
-.BR sendmmsg (),
-the
-.I msg_len
-fields of successive elements of
-.I msgvec
-are updated to contain the number of bytes transmitted from the corresponding
-.IR msg_hdr .
-The return value of the call indicates the number of elements of
-.I msgvec
-that have been updated.
-.SH RETURN VALUE
-On success,
-.BR sendmmsg ()
-returns the number of messages sent from
-.IR msgvec ;
-if this is less than
-.IR vlen ,
-the caller can retry with a further
-.BR sendmmsg ()
-call to send the remaining messages.
-.PP
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-Errors are as for
-.BR sendmsg (2).
-An error is returned only if no datagrams could be sent.
-See also BUGS.
-.\" commit 728ffb86f10873aaf4abd26dde691ee40ae731fe
-.\" ... only return an error if no datagrams could be sent.
-.\" If less than the requested number of messages were sent, the application
-.\" must retry starting at the first failed one and if the problem is
-.\" persistent the error will be returned.
-.\"
-.\" This matches the behavior of other syscalls like read/write - it
-.\" is not an error if less than the requested number of elements are sent.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 3.0,
-glibc 2.14.
-.SH NOTES
-The value specified in
-.I vlen
-is capped to
-.B UIO_MAXIOV
-(1024).
-.\" commit 98382f419f32d2c12d021943b87dea555677144b
-.\" net: Cap number of elements for sendmmsg
-.\"
-.\" To limit the amount of time we can spend in sendmmsg, cap the
-.\" number of elements to UIO_MAXIOV (currently 1024).
-.\"
-.\" For error handling an application using sendmmsg needs to retry at
-.\" the first unsent message, so capping is simpler and requires less
-.\" application logic than returning EINVAL.
-.SH BUGS
-If an error occurs after at least one message has been sent,
-the call succeeds, and returns the number of messages sent.
-The error code is lost.
-The caller can retry the transmission,
-starting at the first failed message, but there is no guarantee that,
-if an error is returned, it will be the same as the one that was lost
-on the previous call.
-.SH EXAMPLES
-The example below uses
-.BR sendmmsg ()
-to send
-.I onetwo
-and
-.I three
-in two distinct UDP datagrams using one system call.
-The contents of the first datagram originates from a pair of buffers.
-.PP
-.\" SRC BEGIN (sendmmsg.c)
-.EX
-#define _GNU_SOURCE
-#include <arpa/inet.h>
-#include <netinet/in.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-\&
-int
-main(void)
-{
- int retval;
- int sockfd;
- struct iovec msg1[2], msg2;
- struct mmsghdr msg[2];
- struct sockaddr_in addr;
-\&
- sockfd = socket(AF_INET, SOCK_DGRAM, 0);
- if (sockfd == \-1) {
- perror("socket()");
- exit(EXIT_FAILURE);
- }
-\&
- addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
- addr.sin_port = htons(1234);
- if (connect(sockfd, (struct sockaddr *) &addr, sizeof(addr)) == \-1) {
- perror("connect()");
- exit(EXIT_FAILURE);
- }
-\&
- memset(msg1, 0, sizeof(msg1));
- msg1[0].iov_base = "one";
- msg1[0].iov_len = 3;
- msg1[1].iov_base = "two";
- msg1[1].iov_len = 3;
-\&
- memset(&msg2, 0, sizeof(msg2));
- msg2.iov_base = "three";
- msg2.iov_len = 5;
-\&
- memset(msg, 0, sizeof(msg));
- msg[0].msg_hdr.msg_iov = msg1;
- msg[0].msg_hdr.msg_iovlen = 2;
-\&
- msg[1].msg_hdr.msg_iov = &msg2;
- msg[1].msg_hdr.msg_iovlen = 1;
-\&
- retval = sendmmsg(sockfd, msg, 2, 0);
- if (retval == \-1)
- perror("sendmmsg()");
- else
- printf("%d messages sent\en", retval);
-\&
- exit(0);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR recvmmsg (2),
-.BR sendmsg (2),
-.BR socket (2),
-.BR socket (7)
diff --git a/man2/sendmsg.2 b/man2/sendmsg.2
deleted file mode 100644
index 9a61b33bb..000000000
--- a/man2/sendmsg.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/send.2
diff --git a/man2/sendto.2 b/man2/sendto.2
deleted file mode 100644
index 9a61b33bb..000000000
--- a/man2/sendto.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/send.2
diff --git a/man2/set_mempolicy.2 b/man2/set_mempolicy.2
deleted file mode 100644
index 7b32ee1dc..000000000
--- a/man2/set_mempolicy.2
+++ /dev/null
@@ -1,342 +0,0 @@
-.\" Copyright 2003,2004 Andi Kleen, SuSE Labs.
-.\" and Copyright 2007 Lee Schermerhorn, Hewlett Packard
-.\"
-.\" %%%LICENSE_START(VERBATIM_PROF)
-.\" Permission is granted to make and distribute verbatim copies of this
-.\" manual provided the copyright notice and this permission notice are
-.\" preserved on all copies.
-.\"
-.\" Permission is granted to copy and distribute modified versions of this
-.\" manual under the conditions for verbatim copying, provided that the
-.\" entire resulting derived work is distributed under the terms of a
-.\" permission notice identical to this one.
-.\"
-.\" Since the Linux kernel and libraries are constantly changing, this
-.\" manual page may be incorrect or out-of-date. The author(s) assume no
-.\" responsibility for errors or omissions, or for damages resulting from
-.\" the use of the information contained herein.
-.\"
-.\" Formatted or processed versions of this manual, if unaccompanied by
-.\" the source, must acknowledge the copyright and authors of this work.
-.\" %%%LICENSE_END
-.\"
-.\" 2006-02-03, mtk, substantial wording changes and other improvements
-.\" 2007-08-27, Lee Schermerhorn <Lee.Schermerhorn@hp.com>
-.\" more precise specification of behavior.
-.\"
-.TH set_mempolicy 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-set_mempolicy \- set default NUMA memory policy for a thread and its children
-.SH LIBRARY
-NUMA (Non-Uniform Memory Access) policy library
-.RI ( libnuma ", " \-lnuma )
-.SH SYNOPSIS
-.nf
-.B "#include <numaif.h>"
-.PP
-.BI "long set_mempolicy(int " mode ", const unsigned long *" nodemask ,
-.BI " unsigned long " maxnode );
-.fi
-.SH DESCRIPTION
-.BR set_mempolicy ()
-sets the NUMA memory policy of the calling thread,
-which consists of a policy mode and zero or more nodes,
-to the values specified by the
-.IR mode ,
-.IR nodemask ,
-and
-.I maxnode
-arguments.
-.PP
-A NUMA machine has different
-memory controllers with different distances to specific CPUs.
-The memory policy defines from which node memory is allocated for
-the thread.
-.PP
-This system call defines the default policy for the thread.
-The thread policy governs allocation of pages in the process's
-address space outside of memory ranges
-controlled by a more specific policy set by
-.BR mbind (2).
-The thread default policy also controls allocation of any pages for
-memory-mapped files mapped using the
-.BR mmap (2)
-call with the
-.B MAP_PRIVATE
-flag and that are only read (loaded) from by the thread
-and of memory-mapped files mapped using the
-.BR mmap (2)
-call with the
-.B MAP_SHARED
-flag, regardless of the access type.
-The policy is applied only when a new page is allocated
-for the thread.
-For anonymous memory this is when the page is first
-touched by the thread.
-.PP
-The
-.I mode
-argument must specify one of
-.BR MPOL_DEFAULT ,
-.BR MPOL_BIND ,
-.BR MPOL_INTERLEAVE ,
-.BR MPOL_PREFERRED ,
-or
-.B MPOL_LOCAL
-(which are described in detail below).
-All modes except
-.B MPOL_DEFAULT
-require the caller to specify the node or nodes to which the mode applies,
-via the
-.I nodemask
-argument.
-.PP
-The
-.I mode
-argument may also include an optional
-.IR "mode flag" .
-The supported
-.I "mode flags"
-are:
-.TP
-.BR MPOL_F_NUMA_BALANCING " (since Linux 5.12)"
-.\" commit bda420b985054a3badafef23807c4b4fa38a3dff
-When
-.I mode
-is
-.BR MPOL_BIND ,
-enable the kernel NUMA balancing for the task if it is supported by the kernel.
-If the flag isn't supported by the kernel, or is used with
-.I mode
-other than
-.BR MPOL_BIND ,
-\-1 is returned and
-.I errno
-is set to
-.BR EINVAL .
-.TP
-.BR MPOL_F_RELATIVE_NODES " (since Linux 2.6.26)"
-A nonempty
-.I nodemask
-specifies node IDs that are relative to the
-set of node IDs allowed by the process's current cpuset.
-.TP
-.BR MPOL_F_STATIC_NODES " (since Linux 2.6.26)"
-A nonempty
-.I nodemask
-specifies physical node IDs.
-Linux will not remap the
-.I nodemask
-when the process moves to a different cpuset context,
-nor when the set of nodes allowed by the process's
-current cpuset context changes.
-.PP
-.I nodemask
-points to a bit mask of node IDs that contains up to
-.I maxnode
-bits.
-The bit mask size is rounded to the next multiple of
-.IR "sizeof(unsigned long)" ,
-but the kernel will use bits only up to
-.IR maxnode .
-A NULL value of
-.I nodemask
-or a
-.I maxnode
-value of zero specifies the empty set of nodes.
-If the value of
-.I maxnode
-is zero,
-the
-.I nodemask
-argument is ignored.
-.PP
-Where a
-.I nodemask
-is required, it must contain at least one node that is on-line,
-allowed by the process's current cpuset context,
-(unless the
-.B MPOL_F_STATIC_NODES
-mode flag is specified),
-and contains memory.
-If the
-.B MPOL_F_STATIC_NODES
-is set in
-.I mode
-and a required
-.I nodemask
-contains no nodes that are allowed by the process's current cpuset context,
-the memory policy reverts to
-.IR "local allocation" .
-This effectively overrides the specified policy until the process's
-cpuset context includes one or more of the nodes specified by
-.IR nodemask .
-.PP
-The
-.I mode
-argument must include one of the following values:
-.TP
-.B MPOL_DEFAULT
-This mode specifies that any nondefault thread memory policy be removed,
-so that the memory policy "falls back" to the system default policy.
-The system default policy is "local allocation"\[em]that is,
-allocate memory on the node of the CPU that triggered the allocation.
-.I nodemask
-must be specified as NULL.
-If the "local node" contains no free memory, the system will
-attempt to allocate memory from a "near by" node.
-.TP
-.B MPOL_BIND
-This mode defines a strict policy that restricts memory allocation to the
-nodes specified in
-.IR nodemask .
-If
-.I nodemask
-specifies more than one node, page allocations will come from
-the node with the lowest numeric node ID first, until that node
-contains no free memory.
-Allocations will then come from the node with the next highest
-node ID specified in
-.I nodemask
-and so forth, until none of the specified nodes contain free memory.
-Pages will not be allocated from any node not specified in the
-.IR nodemask .
-.TP
-.B MPOL_INTERLEAVE
-This mode interleaves page allocations across the nodes specified in
-.I nodemask
-in numeric node ID order.
-This optimizes for bandwidth instead of latency
-by spreading out pages and memory accesses to those pages across
-multiple nodes.
-However, accesses to a single page will still be limited to
-the memory bandwidth of a single node.
-.\" NOTE: the following sentence doesn't make sense in the context
-.\" of set_mempolicy() -- no memory area specified.
-.\" To be effective the memory area should be fairly large,
-.\" at least 1 MB or bigger.
-.TP
-.B MPOL_PREFERRED
-This mode sets the preferred node for allocation.
-The kernel will try to allocate pages from this node first
-and fall back to "near by" nodes if the preferred node is low on free
-memory.
-If
-.I nodemask
-specifies more than one node ID, the first node in the
-mask will be selected as the preferred node.
-If the
-.I nodemask
-and
-.I maxnode
-arguments specify the empty set, then the policy
-specifies "local allocation"
-(like the system default policy discussed above).
-.TP
-.BR MPOL_LOCAL " (since Linux 3.8)"
-.\" commit 479e2802d09f1e18a97262c4c6f8f17ae5884bd8
-.\" commit f2a07f40dbc603c15f8b06e6ec7f768af67b424f
-This mode specifies "local allocation"; the memory is allocated on
-the node of the CPU that triggered the allocation (the "local node").
-The
-.I nodemask
-and
-.I maxnode
-arguments must specify the empty set.
-If the "local node" is low on free memory,
-the kernel will try to allocate memory from other nodes.
-The kernel will allocate memory from the "local node"
-whenever memory for this node is available.
-If the "local node" is not allowed by the process's current cpuset context,
-the kernel will try to allocate memory from other nodes.
-The kernel will allocate memory from the "local node" whenever
-it becomes allowed by the process's current cpuset context.
-.PP
-The thread memory policy is preserved across an
-.BR execve (2),
-and is inherited by child threads created using
-.BR fork (2)
-or
-.BR clone (2).
-.SH RETURN VALUE
-On success,
-.BR set_mempolicy ()
-returns 0;
-on error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-Part of all of the memory range specified by
-.I nodemask
-and
-.I maxnode
-points outside your accessible address space.
-.TP
-.B EINVAL
-.I mode
-is invalid.
-Or,
-.I mode
-is
-.B MPOL_DEFAULT
-and
-.I nodemask
-is nonempty,
-or
-.I mode
-is
-.B MPOL_BIND
-or
-.B MPOL_INTERLEAVE
-and
-.I nodemask
-is empty.
-Or,
-.I maxnode
-specifies more than a page worth of bits.
-Or,
-.I nodemask
-specifies one or more node IDs that are
-greater than the maximum supported node ID.
-Or, none of the node IDs specified by
-.I nodemask
-are on-line and allowed by the process's current cpuset context,
-or none of the specified nodes contain memory.
-Or, the
-.I mode
-argument specified both
-.B MPOL_F_STATIC_NODES
-and
-.BR MPOL_F_RELATIVE_NODES .
-Or, the
-.B MPOL_F_NUMA_BALANCING
-isn't supported by the kernel, or is used with
-.I mode
-other than
-.BR MPOL_BIND .
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.7.
-.SH NOTES
-Memory policy is not remembered if the page is swapped out.
-When such a page is paged back in, it will use the policy of
-the thread or memory range that is in effect at the time the
-page is allocated.
-.PP
-For information on library support, see
-.BR numa (7).
-.SH SEE ALSO
-.BR get_mempolicy (2),
-.BR getcpu (2),
-.BR mbind (2),
-.BR mmap (2),
-.BR numa (3),
-.BR cpuset (7),
-.BR numa (7),
-.BR numactl (8)
diff --git a/man2/set_robust_list.2 b/man2/set_robust_list.2
deleted file mode 100644
index a38aa23ed..000000000
--- a/man2/set_robust_list.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/get_robust_list.2
diff --git a/man2/set_thread_area.2 b/man2/set_thread_area.2
deleted file mode 100644
index 02f65e041..000000000
--- a/man2/set_thread_area.2
+++ /dev/null
@@ -1,229 +0,0 @@
-.\" Copyright (C) 2003 Free Software Foundation, Inc.
-.\" Copyright (C) 2015 Andrew Lutomirski
-.\" Author: Kent Yoder
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH set_thread_area 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-get_thread_area, set_thread_area \- manipulate thread-local storage information
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.B #if defined __i386__ || defined __x86_64__
-.BR "# include <asm/ldt.h>" " /* Definition of " "struct user_desc" " */"
-.PP
-.BI "int syscall(SYS_get_thread_area, struct user_desc *" u_info );
-.BI "int syscall(SYS_set_thread_area, struct user_desc *" u_info );
-.PP
-.B #elif defined __m68k__
-.PP
-.B "int syscall(SYS_get_thread_area);"
-.BI "int syscall(SYS_set_thread_area, unsigned long " tp );
-.PP
-.B #elif defined __mips__
-.PP
-.BI "int syscall(SYS_set_thread_area, unsigned long " addr );
-.PP
-.B #endif
-.fi
-.PP
-.IR Note :
-glibc provides no wrappers for these system calls,
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-These calls provide architecture-specific support for a thread-local storage
-implementation.
-At the moment,
-.BR set_thread_area ()
-is available on m68k, MIPS, and x86 (both 32-bit and 64-bit variants);
-.BR get_thread_area ()
-is available on m68k and x86.
-.PP
-On m68k and MIPS,
-.BR set_thread_area ()
-allows storing an arbitrary pointer (provided in the
-.B tp
-argument on m68k and in the
-.B addr
-argument on MIPS)
-in the kernel data structure associated with the calling thread;
-this pointer can later be retrieved using
-.BR get_thread_area ()
-(see also NOTES
-for information regarding obtaining the thread pointer on MIPS).
-.PP
-On x86, Linux dedicates three global descriptor table (GDT) entries for
-thread-local storage.
-For more information about the GDT, see the
-Intel Software Developer's Manual or the AMD Architecture Programming Manual.
-.PP
-Both of these system calls take an argument that is a pointer
-to a structure of the following type:
-.PP
-.in +4n
-.EX
-struct user_desc {
- unsigned int entry_number;
- unsigned int base_addr;
- unsigned int limit;
- unsigned int seg_32bit:1;
- unsigned int contents:2;
- unsigned int read_exec_only:1;
- unsigned int limit_in_pages:1;
- unsigned int seg_not_present:1;
- unsigned int useable:1;
-#ifdef __x86_64__
- unsigned int lm:1;
-#endif
-};
-.EE
-.in
-.PP
-.BR get_thread_area ()
-reads the GDT entry indicated by
-.I u_info\->entry_number
-and fills in the rest of the fields in
-.IR u_info .
-.PP
-.BR set_thread_area ()
-sets a TLS entry in the GDT.
-.PP
-The TLS array entry set by
-.BR set_thread_area ()
-corresponds to the value of
-.I u_info\->entry_number
-passed in by the user.
-If this value is in bounds,
-.BR set_thread_area ()
-writes the TLS descriptor pointed to by
-.I u_info
-into the thread's TLS array.
-.PP
-When
-.BR set_thread_area ()
-is passed an
-.I entry_number
-of \-1, it searches for a free TLS entry.
-If
-.BR set_thread_area ()
-finds a free TLS entry, the value of
-.I u_info\->entry_number
-is set upon return to show which entry was changed.
-.PP
-A
-.I user_desc
-is considered "empty" if
-.I read_exec_only
-and
-.I seg_not_present
-are set to 1 and all of the other fields are 0.
-If an "empty" descriptor is passed to
-.BR set_thread_area (),
-the corresponding TLS entry will be cleared.
-See BUGS for additional details.
-.PP
-Since Linux 3.19,
-.BR set_thread_area ()
-cannot be used to write non-present segments, 16-bit segments, or code
-segments, although clearing a segment is still acceptable.
-.SH RETURN VALUE
-On x86, these system calls
-return 0 on success, and \-1 on failure, with
-.I errno
-set to indicate the error.
-.PP
-On MIPS and m68k,
-.BR set_thread_area ()
-always returns 0.
-On m68k,
-.BR get_thread_area ()
-returns the thread area pointer value
-(previously set via
-.BR set_thread_area ()).
-.SH ERRORS
-.TP
-.B EFAULT
-\fIu_info\fP is an invalid pointer.
-.TP
-.B EINVAL
-\fIu_info\->entry_number\fP is out of bounds.
-.TP
-.B ENOSYS
-.BR get_thread_area ()
-or
-.BR set_thread_area ()
-was invoked as a 64-bit system call.
-.TP
-.B ESRCH
-.RB ( set_thread_area ())
-A free TLS entry could not be located.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-.TP
-.BR set_thread_area ()
-Linux 2.5.29.
-.TP
-.BR get_thread_area ()
-Linux 2.5.32.
-.SH NOTES
-These system calls are generally intended for use only by threading libraries.
-.PP
-.BR arch_prctl (2)
-can interfere with
-.BR set_thread_area ()
-on x86.
-See
-.BR arch_prctl (2)
-for more details.
-This is not normally a problem, as
-.BR arch_prctl (2)
-is normally used only by 64-bit programs.
-.PP
-On MIPS, the current value of the thread area pointer can be obtained
-using the instruction:
-.PP
-.in +4n
-.EX
-rdhwr dest, $29
-.EE
-.in
-.PP
-This instruction traps and is handled by kernel.
-.SH BUGS
-On 64-bit kernels before Linux 3.19,
-.\" commit e30ab185c490e9a9381385529e0fd32f0a399495
-one of the padding bits in
-.IR user_desc ,
-if set, would prevent the descriptor from being considered empty (see
-.BR modify_ldt (2)).
-As a result, the only reliable way to clear a TLS entry is to use
-.BR memset (3)
-to zero the entire
-.I user_desc
-structure, including padding bits, and then to set the
-.I read_exec_only
-and
-.I seg_not_present
-bits.
-On Linux 3.19, a
-.I user_desc
-consisting entirely of zeros except for
-.I entry_number
-will also be interpreted as a request to clear a TLS entry, but this
-behaved differently on older kernels.
-.PP
-Prior to Linux 3.19, the DS and ES segment registers must not reference
-TLS entries.
-.SH SEE ALSO
-.BR arch_prctl (2),
-.BR modify_ldt (2),
-.BR ptrace (2)
-.RB ( PTRACE_GET_THREAD_AREA " and " PTRACE_SET_THREAD_AREA )
diff --git a/man2/set_tid_address.2 b/man2/set_tid_address.2
deleted file mode 100644
index 9c4c68da0..000000000
--- a/man2/set_tid_address.2
+++ /dev/null
@@ -1,97 +0,0 @@
-.\" Copyright (C) 2004 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH set_tid_address 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-set_tid_address \- set pointer to thread ID
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "pid_t syscall(SYS_set_tid_address, int *" tidptr );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR set_tid_address (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-For each thread, the kernel maintains two attributes (addresses) called
-.I set_child_tid
-and
-.IR clear_child_tid .
-These two attributes contain the value NULL by default.
-.TP
-.I set_child_tid
-If a thread is started using
-.BR clone (2)
-with the
-.B CLONE_CHILD_SETTID
-flag,
-.I set_child_tid
-is set to the value passed in the
-.I ctid
-argument of that system call.
-.IP
-When
-.I set_child_tid
-is set, the very first thing the new thread does
-is to write its thread ID at this address.
-.TP
-.I clear_child_tid
-If a thread is started using
-.BR clone (2)
-with the
-.B CLONE_CHILD_CLEARTID
-flag,
-.I clear_child_tid
-is set to the value passed in the
-.I ctid
-argument of that system call.
-.PP
-The system call
-.BR set_tid_address ()
-sets the
-.I clear_child_tid
-value for the calling thread to
-.IR tidptr .
-.PP
-When a thread whose
-.I clear_child_tid
-is not NULL terminates, then,
-if the thread is sharing memory with other threads,
-then 0 is written at the address specified in
-.I clear_child_tid
-and the kernel performs the following operation:
-.PP
-.in +4n
-.EX
-futex(clear_child_tid, FUTEX_WAKE, 1, NULL, NULL, 0);
-.EE
-.in
-.PP
-The effect of this operation is to wake a single thread that
-is performing a futex wait on the memory location.
-Errors from the futex wake operation are ignored.
-.SH RETURN VALUE
-.BR set_tid_address ()
-always returns the caller's thread ID.
-.SH ERRORS
-.BR set_tid_address ()
-always succeeds.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.5.48.
-.PP
-Details as given here are valid since Linux 2.5.49.
-.SH SEE ALSO
-.BR clone (2),
-.BR futex (2),
-.BR gettid (2)
diff --git a/man2/setdomainname.2 b/man2/setdomainname.2
deleted file mode 100644
index 1c1594cbe..000000000
--- a/man2/setdomainname.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getdomainname.2
diff --git a/man2/setegid.2 b/man2/setegid.2
deleted file mode 100644
index 85032b503..000000000
--- a/man2/setegid.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/seteuid.2
diff --git a/man2/seteuid.2 b/man2/seteuid.2
deleted file mode 100644
index 3e9d1efab..000000000
--- a/man2/seteuid.2
+++ /dev/null
@@ -1,134 +0,0 @@
-.\" Copyright (C) 2001 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" [should really be seteuid.3]
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.\"
-.TH seteuid 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-seteuid, setegid \- set effective user or group ID
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int seteuid(uid_t " euid );
-.BI "int setegid(gid_t " egid );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR seteuid (),
-.BR setegid ():
-.nf
- _POSIX_C_SOURCE >= 200112L
- || /* glibc <= 2.19: */ _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-.BR seteuid ()
-sets the effective user ID of the calling process.
-Unprivileged processes may only set the effective user ID to the
-real user ID, the effective user ID or the saved set-user-ID.
-.PP
-Precisely the same holds for
-.BR setegid ()
-with "group" instead of "user".
-.\" When
-.\" .I euid
-.\" equals \-1, nothing is changed.
-.\" (This is an artifact of the implementation in glibc of seteuid()
-.\" using setresuid(2).)
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.PP
-.IR Note :
-there are cases where
-.BR seteuid ()
-can fail even when the caller is UID 0;
-it is a grave security error to omit checking for a failure return from
-.BR seteuid ().
-.SH ERRORS
-.TP
-.B EINVAL
-The target user or group ID is not valid in this user namespace.
-.TP
-.B EPERM
-In the case of
-.BR seteuid ():
-the calling process is not privileged (does not have the
-.B CAP_SETUID
-capability in its user namespace) and
-.I euid
-does not match the current real user ID, current effective user ID,
-or current saved set-user-ID.
-.IP
-In the case of
-.BR setegid ():
-the calling process is not privileged (does not have the
-.B CAP_SETGID
-capability in its user namespace) and
-.I egid
-does not match the current real group ID, current effective group ID,
-or current saved set-group-ID.
-.SH VERSIONS
-Setting the effective user (group) ID to the
-saved set-user-ID (saved set-group-ID) is
-possible since Linux 1.1.37 (1.1.38).
-On an arbitrary system one should check
-.BR _POSIX_SAVED_IDS .
-.PP
-Under glibc 2.0,
-.BI seteuid( euid )
-is equivalent to
-.BI setreuid(\-1, " euid" )
-and hence may change the saved set-user-ID.
-Under glibc 2.1 and later, it is equivalent to
-.BI setresuid(\-1, " euid" ", \-1)"
-and hence does not change the saved set-user-ID.
-Analogous remarks hold for
-.BR setegid (),
-with the difference that the change in implementation from
-.BI setregid(\-1, " egid" )
-to
-.BI setresgid(\-1, " egid" ", \-1)"
-occurred in glibc 2.2 or 2.3 (depending on the hardware architecture).
-.PP
-According to POSIX.1,
-.BR seteuid ()
-.RB ( setegid ())
-need not permit
-.I euid
-.RI ( egid )
-to be the same value as the current effective user (group) ID,
-and some implementations do not permit this.
-.SS C library/kernel differences
-On Linux,
-.BR seteuid ()
-and
-.BR setegid ()
-are implemented as library functions that call, respectively,
-.BR setreuid (2)
-and
-.BR setregid (2).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, 4.3BSD.
-.SH SEE ALSO
-.BR geteuid (2),
-.BR setresuid (2),
-.BR setreuid (2),
-.BR setuid (2),
-.BR capabilities (7),
-.BR credentials (7),
-.BR user_namespaces (7)
diff --git a/man2/setfsgid.2 b/man2/setfsgid.2
deleted file mode 100644
index bd17d6999..000000000
--- a/man2/setfsgid.2
+++ /dev/null
@@ -1,109 +0,0 @@
-.\" Copyright (C) 1995, Thomas K. Dyas <tdyas@eden.rutgers.edu>
-.\" and Copyright (C) 2019, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Created 1995-08-06 Thomas K. Dyas <tdyas@eden.rutgers.edu>
-.\" Modified 2000-07-01 aeb
-.\" Modified 2002-07-23 aeb
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.\"
-.TH setfsgid 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setfsgid \- set group identity used for filesystem checks
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/fsuid.h>
-.PP
-.BI "[[deprecated]] int setfsgid(gid_t " fsgid );
-.fi
-.SH DESCRIPTION
-On Linux, a process has both a filesystem group ID and an effective group ID.
-The (Linux-specific) filesystem group ID is used
-for permissions checking when accessing filesystem objects,
-while the effective group ID is used for some other kinds
-of permissions checks (see
-.BR credentials (7)).
-.PP
-Normally, the value of the process's filesystem group ID
-is the same as the value of its effective group ID.
-This is so, because whenever a process's effective group ID is changed,
-the kernel also changes the filesystem group ID to be the same as
-the new value of the effective group ID.
-A process can cause the value of its filesystem group ID to diverge
-from its effective group ID by using
-.BR setfsgid ()
-to change its filesystem group ID to the value given in
-.IR fsgid .
-.PP
-.BR setfsgid ()
-will succeed only if the caller is the superuser or if
-.I fsgid
-matches either the caller's real group ID, effective group ID,
-saved set-group-ID, or current the filesystem user ID.
-.SH RETURN VALUE
-On both success and failure,
-this call returns the previous filesystem group ID of the caller.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 1.2.
-.\" Linux 1.1.44
-.\" and in libc since libc 4.7.6.
-.SS C library/kernel differences
-In glibc 2.15 and earlier,
-when the wrapper for this system call determines that the argument can't be
-passed to the kernel without integer truncation (because the kernel
-is old and does not support 32-bit group IDs),
-it will return \-1 and set \fIerrno\fP to
-.B EINVAL
-without attempting
-the system call.
-.SH NOTES
-The filesystem group ID concept and the
-.BR setfsgid ()
-system call were invented for historical reasons that are
-no longer applicable on modern Linux kernels.
-See
-.BR setfsuid (2)
-for a discussion of why the use of both
-.BR setfsuid (2)
-and
-.BR setfsgid ()
-is nowadays unneeded.
-.PP
-The original Linux
-.BR setfsgid ()
-system call supported only 16-bit group IDs.
-Subsequently, Linux 2.4 added
-.BR setfsgid32 ()
-supporting 32-bit IDs.
-The glibc
-.BR setfsgid ()
-wrapper function transparently deals with the variation across kernel versions.
-.SH BUGS
-No error indications of any kind are returned to the caller,
-and the fact that both successful and unsuccessful calls return
-the same value makes it impossible to directly determine
-whether the call succeeded or failed.
-Instead, the caller must resort to looking at the return value
-from a further call such as
-.I setfsgid(\-1)
-(which will always fail), in order to determine if a preceding call to
-.BR setfsgid ()
-changed the filesystem group ID.
-At the very
-least,
-.B EPERM
-should be returned when the call fails (because the caller lacks the
-.B CAP_SETGID
-capability).
-.SH SEE ALSO
-.BR kill (2),
-.BR setfsuid (2),
-.BR capabilities (7),
-.BR credentials (7)
diff --git a/man2/setfsgid32.2 b/man2/setfsgid32.2
deleted file mode 100644
index fdb8bdcce..000000000
--- a/man2/setfsgid32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/setfsgid.2
diff --git a/man2/setfsuid.2 b/man2/setfsuid.2
deleted file mode 100644
index 9f0b941ca..000000000
--- a/man2/setfsuid.2
+++ /dev/null
@@ -1,127 +0,0 @@
-.\" Copyright (C) 1995, Thomas K. Dyas <tdyas@eden.rutgers.edu>
-.\" and Copyright (C) 2013, 2019, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Created 1995-08-06 Thomas K. Dyas <tdyas@eden.rutgers.edu>
-.\" Modified 2000-07-01 aeb
-.\" Modified 2002-07-23 aeb
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.\"
-.TH setfsuid 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setfsuid \- set user identity used for filesystem checks
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/fsuid.h>
-.PP
-.BI "[[deprecated]] int setfsuid(uid_t " fsuid );
-.fi
-.SH DESCRIPTION
-On Linux, a process has both a filesystem user ID and an effective user ID.
-The (Linux-specific) filesystem user ID is used
-for permissions checking when accessing filesystem objects,
-while the effective user ID is used for various other kinds
-of permissions checks (see
-.BR credentials (7)).
-.PP
-Normally, the value of the process's filesystem user ID
-is the same as the value of its effective user ID.
-This is so, because whenever a process's effective user ID is changed,
-the kernel also changes the filesystem user ID to be the same as
-the new value of the effective user ID.
-A process can cause the value of its filesystem user ID to diverge
-from its effective user ID by using
-.BR setfsuid ()
-to change its filesystem user ID to the value given in
-.IR fsuid .
-.PP
-Explicit calls to
-.BR setfsuid ()
-and
-.BR setfsgid (2)
-are (were) usually used only by programs such as the Linux NFS server that
-need to change what user and group ID is used for file access without a
-corresponding change in the real and effective user and group IDs.
-A change in the normal user IDs for a program such as the NFS server
-is (was) a security hole that can expose it to unwanted signals.
-(However, this issue is historical; see below.)
-.PP
-.BR setfsuid ()
-will succeed only if the caller is the superuser or if
-.I fsuid
-matches either the caller's real user ID, effective user ID,
-saved set-user-ID, or current filesystem user ID.
-.SH RETURN VALUE
-On both success and failure,
-this call returns the previous filesystem user ID of the caller.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 1.2.
-.\" Linux 1.1.44
-.\" and in libc since libc 4.7.6.
-.PP
-At the time when this system call was introduced, one process
-could send a signal to another process with the same effective user ID.
-This meant that if a privileged process changed its effective user ID
-for the purpose of file permission checking,
-then it could become vulnerable to receiving signals
-sent by another (unprivileged) process with the same user ID.
-The filesystem user ID attribute was thus added to allow a process to
-change its user ID for the purposes of file permission checking without
-at the same time becoming vulnerable to receiving unwanted signals.
-Since Linux 2.0, signal permission handling is different (see
-.BR kill (2)),
-with the result that a process can change its effective user ID
-without being vulnerable to receiving signals from unwanted processes.
-Thus,
-.BR setfsuid ()
-is nowadays unneeded and should be avoided in new applications
-(likewise for
-.BR setfsgid (2)).
-.PP
-The original Linux
-.BR setfsuid ()
-system call supported only 16-bit user IDs.
-Subsequently, Linux 2.4 added
-.BR setfsuid32 ()
-supporting 32-bit IDs.
-The glibc
-.BR setfsuid ()
-wrapper function transparently deals with the variation across kernel versions.
-.SS C library/kernel differences
-In glibc 2.15 and earlier,
-when the wrapper for this system call determines that the argument can't be
-passed to the kernel without integer truncation (because the kernel
-is old and does not support 32-bit user IDs),
-it will return \-1 and set \fIerrno\fP to
-.B EINVAL
-without attempting
-the system call.
-.SH BUGS
-No error indications of any kind are returned to the caller,
-and the fact that both successful and unsuccessful calls return
-the same value makes it impossible to directly determine
-whether the call succeeded or failed.
-Instead, the caller must resort to looking at the return value
-from a further call such as
-.I setfsuid(\-1)
-(which will always fail), in order to determine if a preceding call to
-.BR setfsuid ()
-changed the filesystem user ID.
-At the very
-least,
-.B EPERM
-should be returned when the call fails (because the caller lacks the
-.B CAP_SETUID
-capability).
-.SH SEE ALSO
-.BR kill (2),
-.BR setfsgid (2),
-.BR capabilities (7),
-.BR credentials (7)
diff --git a/man2/setfsuid32.2 b/man2/setfsuid32.2
deleted file mode 100644
index 1ea58fd02..000000000
--- a/man2/setfsuid32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/setfsuid.2
diff --git a/man2/setgid.2 b/man2/setgid.2
deleted file mode 100644
index 601229523..000000000
--- a/man2/setgid.2
+++ /dev/null
@@ -1,92 +0,0 @@
-.\" Copyright (C), 1994, Graeme W. Wilford. (Wilf.)
-.\" and Copyright (C) 2010, 2015, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Fri Jul 29th 12:56:44 BST 1994 Wilf. <G.Wilford@ee.surrey.ac.uk>
-.\" Modified 1997-01-31 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2002-03-09 by aeb
-.\"
-.TH setgid 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setgid \- set group identity
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int setgid(gid_t " gid );
-.fi
-.SH DESCRIPTION
-.BR setgid ()
-sets the effective group ID of the calling process.
-If the calling process is privileged (more precisely: has the
-.B CAP_SETGID
-capability in its user namespace),
-the real GID and saved set-group-ID are also set.
-.PP
-Under Linux,
-.BR setgid ()
-is implemented like the POSIX version with the
-.B _POSIX_SAVED_IDS
-feature.
-This allows a set-group-ID program that is not set-user-ID-root
-to drop all of its group
-privileges, do some un-privileged work, and then reengage the original
-effective group ID in a secure manner.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-The group ID specified in
-.I gid
-is not valid in this user namespace.
-.TP
-.B EPERM
-The calling process is not privileged (does not have the
-\fBCAP_SETGID\fP capability in its user namespace), and
-.I gid
-does not match the real group ID or saved set-group-ID of
-the calling process.
-.SH VERSIONS
-.SS C library/kernel differences
-At the kernel level, user IDs and group IDs are a per-thread attribute.
-However, POSIX requires that all threads in a process
-share the same credentials.
-The NPTL threading implementation handles the POSIX requirements by
-providing wrapper functions for
-the various system calls that change process UIDs and GIDs.
-These wrapper functions (including the one for
-.BR setgid ())
-employ a signal-based technique to ensure
-that when one thread changes credentials,
-all of the other threads in the process also change their credentials.
-For details, see
-.BR nptl (7).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4.
-.PP
-The original Linux
-.BR setgid ()
-system call supported only 16-bit group IDs.
-Subsequently, Linux 2.4 added
-.BR setgid32 ()
-supporting 32-bit IDs.
-The glibc
-.BR setgid ()
-wrapper function transparently deals with the variation across kernel versions.
-.SH SEE ALSO
-.BR getgid (2),
-.BR setegid (2),
-.BR setregid (2),
-.BR capabilities (7),
-.BR credentials (7),
-.BR user_namespaces (7)
diff --git a/man2/setgid32.2 b/man2/setgid32.2
deleted file mode 100644
index bc8ef19ca..000000000
--- a/man2/setgid32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/setgid.2
diff --git a/man2/setgroups.2 b/man2/setgroups.2
deleted file mode 100644
index 0ae4cc0b1..000000000
--- a/man2/setgroups.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getgroups.2
diff --git a/man2/setgroups32.2 b/man2/setgroups32.2
deleted file mode 100644
index 478fb63ef..000000000
--- a/man2/setgroups32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/setgroups.2
diff --git a/man2/sethostname.2 b/man2/sethostname.2
deleted file mode 100644
index e1fa2a617..000000000
--- a/man2/sethostname.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/gethostname.2
diff --git a/man2/setitimer.2 b/man2/setitimer.2
deleted file mode 100644
index 9518567e0..000000000
--- a/man2/setitimer.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getitimer.2
diff --git a/man2/setns.2 b/man2/setns.2
deleted file mode 100644
index 6f117b49f..000000000
--- a/man2/setns.2
+++ /dev/null
@@ -1,419 +0,0 @@
-.\" Copyright (C) 2011, Eric Biederman <ebiederm@xmission.com>
-.\" and Copyright (C) 2011, 2012, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-only
-.\"
-.TH setns 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setns \- reassociate thread with a namespace
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <sched.h>
-.PP
-.BI "int setns(int " fd ", int " nstype );
-.fi
-.SH DESCRIPTION
-The
-.BR setns ()
-system call allows the calling thread to move into different namespaces.
-The
-.I fd
-argument is one of the following:
-.IP \[bu] 3
-a file descriptor referring to one of the magic links in a
-.IR /proc/ pid /ns/
-directory (or a bind mount to such a link);
-.IP \[bu]
-a PID file descriptor (see
-.BR pidfd_open (2)).
-.PP
-The
-.I nstype
-argument is interpreted differently in each case.
-.\"
-.SS fd refers to a \fI/proc/\fPpid\fI/ns/\fP link
-If
-.I fd
-refers to a
-.IR /proc/ pid /ns/
-link, then
-.BR setns ()
-reassociates the calling thread with the namespace associated with that link,
-subject to any constraints imposed by the
-.I nstype
-argument.
-In this usage, each call to
-.BR setns ()
-changes just one of the caller's namespace memberships.
-.PP
-The
-.I nstype
-argument specifies which type of namespace
-the calling thread may be reassociated with.
-This argument can have
-.I one
-of the following values:
-.TP
-.B 0
-Allow any type of namespace to be joined.
-.TP
-.BR CLONE_NEWCGROUP " (since Linux 4.6)"
-.I fd
-must refer to a cgroup namespace.
-.TP
-.BR CLONE_NEWIPC " (since Linux 3.0)"
-.I fd
-must refer to an IPC namespace.
-.TP
-.BR CLONE_NEWNET " (since Linux 3.0)"
-.I fd
-must refer to a network namespace.
-.TP
-.BR CLONE_NEWNS " (since Linux 3.8)"
-.I fd
-must refer to a mount namespace.
-.TP
-.BR CLONE_NEWPID " (since Linux 3.8)"
-.I fd
-must refer to a descendant PID namespace.
-.TP
-.BR CLONE_NEWTIME " (since Linux 5.8)"
-.\" commit 76c12881a38aaa83e1eb4ce2fada36c3a732bad4
-.I fd
-must refer to a time namespace.
-.TP
-.BR CLONE_NEWUSER " (since Linux 3.8)"
-.I fd
-must refer to a user namespace.
-.TP
-.BR CLONE_NEWUTS " (since Linux 3.0)"
-.I fd
-must refer to a UTS namespace.
-.PP
-Specifying
-.I nstype
-as 0 suffices if the caller knows (or does not care)
-what type of namespace is referred to by
-.IR fd .
-Specifying a nonzero value for
-.I nstype
-is useful if the caller does not know what type of namespace is referred to by
-.I fd
-and wants to ensure that the namespace is of a particular type.
-(The caller might not know the type of the namespace referred to by
-.I fd
-if the file descriptor was opened by another process and, for example,
-passed to the caller via a UNIX domain socket.)
-.\"
-.SS fd is a PID file descriptor
-Since Linux 5.8,
-.I fd
-may refer to a PID file descriptor obtained from
-.BR pidfd_open (2)
-or
-.BR clone (2).
-In this usage,
-.BR setns ()
-atomically moves the calling thread into one or more of the same namespaces
-as the thread referred to by
-.IR fd .
-.PP
-The
-.I nstype
-argument is a bit mask specified by ORing together
-.I "one or more"
-of the
-.B CLONE_NEW*
-namespace constants listed above.
-The caller is moved into each of the target thread's namespaces
-that is specified in
-.IR nstype ;
-the caller's memberships in the remaining namespaces are left unchanged.
-.PP
-For example, the following code would move the caller into the
-same user, network, and UTS namespaces as PID 1234,
-but would leave the caller's other namespace memberships unchanged:
-.PP
-.in +4n
-.EX
-int fd = pidfd_open(1234, 0);
-setns(fd, CLONE_NEWUSER | CLONE_NEWNET | CLONE_NEWUTS);
-.EE
-.in
-.\"
-.SS Details for specific namespace types
-Note the following details and restrictions when reassociating with
-specific namespace types:
-.TP
-User namespaces
-A process reassociating itself with a user namespace must have the
-.B CAP_SYS_ADMIN
-.\" See kernel/user_namespace.c:userns_install() [3.8 source]
-capability in the target user namespace.
-(This necessarily implies that it is only possible to join
-a descendant user namespace.)
-Upon successfully joining a user namespace,
-a process is granted all capabilities in that namespace,
-regardless of its user and group IDs.
-.IP
-A multithreaded process may not change user namespace with
-.BR setns ().
-.IP
-It is not permitted to use
-.BR setns ()
-to reenter the caller's current user namespace.
-This prevents a caller that has dropped capabilities from regaining
-those capabilities via a call to
-.BR setns ().
-.IP
-For security reasons,
-.\" commit e66eded8309ebf679d3d3c1f5820d1f2ca332c71
-.\" https://lwn.net/Articles/543273/
-a process can't join a new user namespace if it is sharing
-filesystem-related attributes
-(the attributes whose sharing is controlled by the
-.BR clone (2)
-.B CLONE_FS
-flag) with another process.
-.IP
-For further details on user namespaces, see
-.BR user_namespaces (7).
-.TP
-Mount namespaces
-Changing the mount namespace requires that the caller possess both
-.B CAP_SYS_CHROOT
-and
-.B CAP_SYS_ADMIN
-capabilities in its own user namespace and
-.B CAP_SYS_ADMIN
-in the user namespace that owns the target mount namespace.
-.IP
-A process can't join a new mount namespace if it is sharing
-filesystem-related attributes
-(the attributes whose sharing is controlled by the
-.BR clone (2)
-.B CLONE_FS
-flag) with another process.
-.\" Above check is in fs/namespace.c:mntns_install() [3.8 source]
-.IP
-See
-.BR user_namespaces (7)
-for details on the interaction of user namespaces and mount namespaces.
-.TP
-PID namespaces
-In order to reassociate itself with a new PID namespace,
-the caller must have the
-.B CAP_SYS_ADMIN
-capability both in its own user namespace and in the user namespace
-that owns the target PID namespace.
-.IP
-Reassociating the PID namespace has somewhat different
-from other namespace types.
-Reassociating the calling thread with a PID namespace changes only
-the PID namespace that subsequently created child processes of
-the caller will be placed in;
-it does not change the PID namespace of the caller itself.
-.IP
-Reassociating with a PID namespace is allowed only if the target
-PID namespace is a descendant (child, grandchild, etc.)
-of, or is the same as, the current PID namespace of the caller.
-.IP
-For further details on PID namespaces, see
-.BR pid_namespaces (7).
-.TP
-Cgroup namespaces
-In order to reassociate itself with a new cgroup namespace,
-the caller must have the
-.B CAP_SYS_ADMIN
-capability both in its own user namespace and in the user namespace
-that owns the target cgroup namespace.
-.IP
-Using
-.BR setns ()
-to change the caller's cgroup namespace does not change
-the caller's cgroup memberships.
-.TP
-Network, IPC, time, and UTS namespaces
-In order to reassociate itself with a new network, IPC, time, or UTS namespace,
-the caller must have the
-.B CAP_SYS_ADMIN
-capability both in its own user namespace and in the user namespace
-that owns the target namespace.
-.SH RETURN VALUE
-On success,
-.BR setns ()
-returns 0.
-On failure, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor.
-.TP
-.B EINVAL
-.I fd
-refers to a namespace whose type does not match that specified in
-.IR nstype .
-.TP
-.B EINVAL
-There is problem with reassociating
-the thread with the specified namespace.
-.TP
-.\" See kernel/pid_namespace.c::pidns_install() [kernel 3.18 sources]
-.B EINVAL
-The caller tried to join an ancestor (parent, grandparent, and so on)
-PID namespace.
-.TP
-.B EINVAL
-The caller attempted to join the user namespace
-in which it is already a member.
-.TP
-.B EINVAL
-.\" commit e66eded8309ebf679d3d3c1f5820d1f2ca332c71
-The caller shares filesystem
-.RB ( CLONE_FS )
-state (in particular, the root directory)
-with other processes and tried to join a new user namespace.
-.TP
-.B EINVAL
-.\" See kernel/user_namespace.c::userns_install() [kernel 3.15 sources]
-The caller is multithreaded and tried to join a new user namespace.
-.TP
-.B EINVAL
-.I fd
-is a PID file descriptor and
-.I nstype
-is invalid (e.g., it is 0).
-.TP
-.B ENOMEM
-Cannot allocate sufficient memory to change the specified namespace.
-.TP
-.B EPERM
-The calling thread did not have the required capability
-for this operation.
-.TP
-.B ESRCH
-.I fd
-is a PID file descriptor but the process it refers to no longer exists
-(i.e., it has terminated and been waited on).
-.SH STANDARDS
-Linux.
-.SH VERSIONS
-Linux 3.0,
-glibc 2.14.
-.SH NOTES
-For further information on the
-.IR /proc/ pid /ns/
-magic links, see
-.BR namespaces (7).
-.PP
-Not all of the attributes that can be shared when
-a new thread is created using
-.BR clone (2)
-can be changed using
-.BR setns ().
-.SH EXAMPLES
-The program below takes two or more arguments.
-The first argument specifies the pathname of a namespace file in an existing
-.IR /proc/ pid /ns/
-directory.
-The remaining arguments specify a command and its arguments.
-The program opens the namespace file, joins that namespace using
-.BR setns (),
-and executes the specified command inside that namespace.
-.PP
-The following shell session demonstrates the use of this program
-(compiled as a binary named
-.IR ns_exec )
-in conjunction with the
-.B CLONE_NEWUTS
-example program in the
-.BR clone (2)
-man page (complied as a binary named
-.IR newuts ).
-.PP
-We begin by executing the example program in
-.BR clone (2)
-in the background.
-That program creates a child in a separate UTS namespace.
-The child changes the hostname in its namespace,
-and then both processes display the hostnames in their UTS namespaces,
-so that we can see that they are different.
-.PP
-.in +4n
-.EX
-$ \fBsu\fP # Need privilege for namespace operations
-Password:
-# \fB./newuts bizarro &\fP
-[1] 3549
-clone() returned 3550
-uts.nodename in child: bizarro
-uts.nodename in parent: antero
-# \fBuname \-n\fP # Verify hostname in the shell
-antero
-.EE
-.in
-.PP
-We then run the program shown below,
-using it to execute a shell.
-Inside that shell, we verify that the hostname is the one
-set by the child created by the first program:
-.PP
-.in +4n
-.EX
-# \fB./ns_exec /proc/3550/ns/uts /bin/bash\fP
-# \fBuname \-n\fP # Executed in shell started by ns_exec
-bizarro
-.EE
-.in
-.SS Program source
-.\" SRC BEGIN (setns.c)
-.EX
-#define _GNU_SOURCE
-#include <err.h>
-#include <fcntl.h>
-#include <sched.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int fd;
-\&
- if (argc < 3) {
- fprintf(stderr, "%s /proc/PID/ns/FILE cmd args...\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- /* Get file descriptor for namespace; the file descriptor is opened
- with O_CLOEXEC so as to ensure that it is not inherited by the
- program that is later executed. */
-\&
- fd = open(argv[1], O_RDONLY | O_CLOEXEC);
- if (fd == \-1)
- err(EXIT_FAILURE, "open");
-\&
- if (setns(fd, 0) == \-1) /* Join that namespace */
- err(EXIT_FAILURE, "setns");
-\&
- execvp(argv[2], &argv[2]); /* Execute a command in namespace */
- err(EXIT_FAILURE, "execvp");
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR nsenter (1),
-.BR clone (2),
-.BR fork (2),
-.BR unshare (2),
-.BR vfork (2),
-.BR namespaces (7),
-.BR unix (7)
diff --git a/man2/setpgid.2 b/man2/setpgid.2
deleted file mode 100644
index fb67d2ab5..000000000
--- a/man2/setpgid.2
+++ /dev/null
@@ -1,329 +0,0 @@
-.\" Copyright (c) 1983, 1991 Regents of the University of California.
-.\" and Copyright (C) 2007, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)getpgrp.2 6.4 (Berkeley) 3/10/91
-.\"
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1995-04-15 by Michael Chastain <mec@shell.portal.com>:
-.\" Added 'getpgid'.
-.\" Modified 1996-07-21 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 1996-11-06 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1999-09-02 by Michael Haardt <michael@moria.de>
-.\" Modified 2002-01-18 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2003-01-20 by Andries Brouwer <aeb@cwi.nl>
-.\" 2007-07-25, mtk, fairly substantial rewrites and rearrangements
-.\" of text.
-.\"
-.TH setpgid 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setpgid, getpgid, setpgrp, getpgrp \- set/get process group
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int setpgid(pid_t " pid ", pid_t " pgid );
-.BI "pid_t getpgid(pid_t " pid );
-.PP
-.BR "pid_t getpgrp(void);" " /* POSIX.1 version */"
-.BI "[[deprecated]] pid_t getpgrp(pid_t " pid ");\fR /* BSD version */"
-.PP
-.BR "int setpgrp(void);" " /* System V version */"
-.BI "[[deprecated]] int setpgrp(pid_t " pid ", pid_t " pgid ");\fR /* BSD version */"
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getpgid ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
-.fi
-.PP
-.BR setpgrp "() (POSIX.1):"
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE
-.fi
-.PP
-.BR setpgrp "() (BSD),"
-.BR getpgrp "() (BSD):"
-.nf
- [These are available only before glibc 2.19]
- _BSD_SOURCE &&
- ! (_POSIX_SOURCE || _POSIX_C_SOURCE || _XOPEN_SOURCE
- || _GNU_SOURCE || _SVID_SOURCE)
-.fi
-.SH DESCRIPTION
-All of these interfaces are available on Linux,
-and are used for getting and setting the
-process group ID (PGID) of a process.
-The preferred, POSIX.1-specified ways of doing this are:
-.BR getpgrp (void),
-for retrieving the calling process's PGID; and
-.BR setpgid (),
-for setting a process's PGID.
-.PP
-.BR setpgid ()
-sets the PGID of the process specified by
-.I pid
-to
-.IR pgid .
-If
-.I pid
-is zero, then the process ID of the calling process is used.
-If
-.I pgid
-is zero, then the PGID of the process specified by
-.I pid
-is made the same as its process ID.
-If
-.BR setpgid ()
-is used to move a process from one process
-group to another (as is done by some shells when creating pipelines),
-both process groups must be part of the same session (see
-.BR setsid (2)
-and
-.BR credentials (7)).
-In this case,
-the \fIpgid\fP specifies an existing process group to be joined and the
-session ID of that group must match the session ID of the joining process.
-.PP
-The POSIX.1 version of
-.BR getpgrp (),
-which takes no arguments,
-returns the PGID of the calling process.
-.PP
-.BR getpgid ()
-returns the PGID of the process specified by
-.IR pid .
-If
-.I pid
-is zero, the process ID of the calling process is used.
-(Retrieving the PGID of a process other than the caller is rarely
-necessary, and the POSIX.1
-.BR getpgrp ()
-is preferred for that task.)
-.PP
-The System\ V-style
-.BR setpgrp (),
-which takes no arguments, is equivalent to
-.IR "setpgid(0,\ 0)" .
-.PP
-The BSD-specific
-.BR setpgrp ()
-call, which takes arguments
-.I pid
-and
-.IR pgid ,
-is a wrapper function that calls
-.PP
-.in +4n
-.EX
-setpgid(pid, pgid)
-.EE
-.in
-.PP
-.\" The true BSD setpgrp() system call differs in allowing the PGID
-.\" to be set to arbitrary values, rather than being restricted to
-.\" PGIDs in the same session.
-Since glibc 2.19, the BSD-specific
-.BR setpgrp ()
-function is no longer exposed by
-.IR <unistd.h> ;
-calls should be replaced with the
-.BR setpgid ()
-call shown above.
-.PP
-The BSD-specific
-.BR getpgrp ()
-call, which takes a single
-.I pid
-argument, is a wrapper function that calls
-.PP
-.in +4n
-.EX
-getpgid(pid)
-.EE
-.in
-.PP
-Since glibc 2.19, the BSD-specific
-.BR getpgrp ()
-function is no longer exposed by
-.IR <unistd.h> ;
-calls should be replaced with calls to the POSIX.1
-.BR getpgrp ()
-which takes no arguments (if the intent is to obtain the caller's PGID),
-or with the
-.BR getpgid ()
-call shown above.
-.SH RETURN VALUE
-On success,
-.BR setpgid ()
-and
-.BR setpgrp ()
-return zero.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.PP
-The POSIX.1
-.BR getpgrp ()
-always returns the PGID of the caller.
-.PP
-.BR getpgid (),
-and the BSD-specific
-.BR getpgrp ()
-return a process group on success.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-An attempt was made to change the process group ID
-of one of the children of the calling process and the child had
-already performed an
-.BR execve (2)
-.RB ( setpgid (),
-.BR setpgrp ()).
-.TP
-.B EINVAL
-.I pgid
-is less than 0
-.RB ( setpgid (),
-.BR setpgrp ()).
-.TP
-.B EPERM
-An attempt was made to move a process into a process group in a
-different session, or to change the process
-group ID of one of the children of the calling process and the
-child was in a different session, or to change the process group ID of
-a session leader
-.RB ( setpgid (),
-.BR setpgrp ()).
-.TP
-.B EPERM
-The target process group does not exist.
-.RB ( setpgid (),
-.BR setpgrp ()).
-.TP
-.B ESRCH
-For
-.BR getpgid ():
-.I pid
-does not match any process.
-For
-.BR setpgid ():
-.I pid
-is not the calling process and not a child of the calling process.
-.SH STANDARDS
-.TP
-.BR getpgid ()
-.TQ
-.BR setpgid ()
-.TQ
-.BR getpgrp "() (no args)"
-.TQ
-.BR setpgrp "() (no args)"
-POSIX.1-2008 (but see HISTORY).
-.TP
-.BR setpgrp "() (2 args)"
-.TQ
-.BR getpgrp "() (1 arg)"
-None.
-.SH HISTORY
-.TP
-.BR getpgid ()
-.TQ
-.BR setpgid ()
-.TQ
-.BR getpgrp "() (no args)"
-POSIX.1-2001.
-.TP
-.BR setpgrp "() (no args)"
-POSIX.1-2001.
-POSIX.1-2008 marks it as obsolete.
-.TP
-.BR setpgrp "() (2 args)"
-.TQ
-.BR getpgrp "() (1 arg)"
-4.2BSD.
-.SH NOTES
-A child created via
-.BR fork (2)
-inherits its parent's process group ID.
-The PGID is preserved across an
-.BR execve (2).
-.PP
-Each process group is a member of a session and each process is a
-member of the session of which its process group is a member.
-(See
-.BR credentials (7).)
-.PP
-A session can have a controlling terminal.
-At any time, one (and only one) of the process groups
-in the session can be the foreground process group
-for the terminal;
-the remaining process groups are in the background.
-If a signal is generated from the terminal (e.g., typing the
-interrupt key to generate
-.BR SIGINT ),
-that signal is sent to the foreground process group.
-(See
-.BR termios (3)
-for a description of the characters that generate signals.)
-Only the foreground process group may
-.BR read (2)
-from the terminal;
-if a background process group tries to
-.BR read (2)
-from the terminal, then the group is sent a
-.B SIGTTIN
-signal, which suspends it.
-The
-.BR tcgetpgrp (3)
-and
-.BR tcsetpgrp (3)
-functions are used to get/set the foreground
-process group of the controlling terminal.
-.PP
-The
-.BR setpgid ()
-and
-.BR getpgrp ()
-calls are used by programs such as
-.BR bash (1)
-to create process groups in order to implement shell job control.
-.PP
-If the termination of a process causes a process group to become orphaned,
-and if any member of the newly orphaned process group is stopped, then a
-.B SIGHUP
-signal followed by a
-.B SIGCONT
-signal will be sent to each process
-in the newly orphaned process group.
-.\" exit.3 refers to the following text:
-An orphaned process group is one in which the parent of
-every member of process group is either itself also a member
-of the process group or is a member of a process group
-in a different session (see also
-.BR credentials (7)).
-.SH SEE ALSO
-.BR getuid (2),
-.BR setsid (2),
-.BR tcgetpgrp (3),
-.BR tcsetpgrp (3),
-.BR termios (3),
-.BR credentials (7)
diff --git a/man2/setpgrp.2 b/man2/setpgrp.2
deleted file mode 100644
index d6b107a1c..000000000
--- a/man2/setpgrp.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/setpgid.2
diff --git a/man2/setpriority.2 b/man2/setpriority.2
deleted file mode 100644
index b1dcfd91d..000000000
--- a/man2/setpriority.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getpriority.2
diff --git a/man2/setregid.2 b/man2/setregid.2
deleted file mode 100644
index ec3ff6416..000000000
--- a/man2/setregid.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/setreuid.2
diff --git a/man2/setregid32.2 b/man2/setregid32.2
deleted file mode 100644
index 035df1724..000000000
--- a/man2/setregid32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/setregid.2
diff --git a/man2/setresgid.2 b/man2/setresgid.2
deleted file mode 100644
index d6866a1de..000000000
--- a/man2/setresgid.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/setresuid.2
diff --git a/man2/setresgid32.2 b/man2/setresgid32.2
deleted file mode 100644
index dec1b9531..000000000
--- a/man2/setresgid32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/setresgid.2
diff --git a/man2/setresuid.2 b/man2/setresuid.2
deleted file mode 100644
index 874db6f25..000000000
--- a/man2/setresuid.2
+++ /dev/null
@@ -1,147 +0,0 @@
-.\" Copyright (C) 1997 Andries Brouwer (aeb@cwi.nl)
-.\" and Copyright (C) 2005, 2010, 2014, 2015, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified, 2003-05-26, Michael Kerrisk, <mtk.manpages@gmail.com>
-.TH setresuid 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setresuid, setresgid \- set real, effective, and saved user or group ID
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <unistd.h>
-.PP
-.BI "int setresuid(uid_t " ruid ", uid_t " euid ", uid_t " suid );
-.BI "int setresgid(gid_t " rgid ", gid_t " egid ", gid_t " sgid );
-.fi
-.SH DESCRIPTION
-.BR setresuid ()
-sets the real user ID, the effective user ID, and the
-saved set-user-ID of the calling process.
-.PP
-An unprivileged process may change its real UID,
-effective UID, and saved set-user-ID, each to one of:
-the current real UID, the current effective UID, or the
-current saved set-user-ID.
-.PP
-A privileged process (on Linux, one having the \fBCAP_SETUID\fP capability)
-may set its real UID, effective UID, and
-saved set-user-ID to arbitrary values.
-.PP
-If one of the arguments equals \-1, the corresponding value is not changed.
-.PP
-Regardless of what changes are made to the real UID, effective UID,
-and saved set-user-ID, the filesystem UID is always set to the same
-value as the (possibly new) effective UID.
-.PP
-Completely analogously,
-.BR setresgid ()
-sets the real GID, effective GID, and saved set-group-ID
-of the calling process (and always modifies the filesystem GID
-to be the same as the effective GID),
-with the same restrictions for unprivileged processes.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.PP
-.IR Note :
-there are cases where
-.BR setresuid ()
-can fail even when the caller is UID 0;
-it is a grave security error to omit checking for a failure return from
-.BR setresuid ().
-.SH ERRORS
-.TP
-.B EAGAIN
-The call would change the caller's real UID (i.e.,
-.I ruid
-does not match the caller's real UID),
-but there was a temporary failure allocating the
-necessary kernel data structures.
-.TP
-.B EAGAIN
-.I ruid
-does not match the caller's real UID and this call would
-bring the number of processes belonging to the real user ID
-.I ruid
-over the caller's
-.B RLIMIT_NPROC
-resource limit.
-Since Linux 3.1, this error case no longer occurs
-(but robust applications should check for this error);
-see the description of
-.B EAGAIN
-in
-.BR execve (2).
-.TP
-.B EINVAL
-One or more of the target user or group IDs
-is not valid in this user namespace.
-.TP
-.B EPERM
-The calling process is not privileged (did not have the necessary
-capability in its user namespace)
-and tried to change the IDs to values that are not permitted.
-For
-.BR setresuid (),
-the necessary capability is
-.BR CAP_SETUID ;
-for
-.BR setresgid (),
-it is
-.BR CAP_SETGID .
-.SH VERSIONS
-.SS C library/kernel differences
-At the kernel level, user IDs and group IDs are a per-thread attribute.
-However, POSIX requires that all threads in a process
-share the same credentials.
-The NPTL threading implementation handles the POSIX requirements by
-providing wrapper functions for
-the various system calls that change process UIDs and GIDs.
-These wrapper functions (including those for
-.BR setresuid ()
-and
-.BR setresgid ())
-employ a signal-based technique to ensure
-that when one thread changes credentials,
-all of the other threads in the process also change their credentials.
-For details, see
-.BR nptl (7).
-.SH STANDARDS
-None.
-.SH HISTORY
-Linux 2.1.44,
-glibc 2.3.2.
-HP-UX, FreeBSD.
-.PP
-The original Linux
-.BR setresuid ()
-and
-.BR setresgid ()
-system calls supported only 16-bit user and group IDs.
-Subsequently, Linux 2.4 added
-.BR setresuid32 ()
-and
-.BR setresgid32 (),
-supporting 32-bit IDs.
-The glibc
-.BR setresuid ()
-and
-.BR setresgid ()
-wrapper functions transparently deal with the variations across kernel versions.
-.SH SEE ALSO
-.BR getresuid (2),
-.BR getuid (2),
-.BR setfsgid (2),
-.BR setfsuid (2),
-.BR setreuid (2),
-.BR setuid (2),
-.BR capabilities (7),
-.BR credentials (7),
-.BR user_namespaces (7)
diff --git a/man2/setresuid32.2 b/man2/setresuid32.2
deleted file mode 100644
index d6866a1de..000000000
--- a/man2/setresuid32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/setresuid.2
diff --git a/man2/setreuid.2 b/man2/setreuid.2
deleted file mode 100644
index 702d3b4e0..000000000
--- a/man2/setreuid.2
+++ /dev/null
@@ -1,193 +0,0 @@
-.\" Copyright (c) 1983, 1991 The Regents of the University of California.
-.\" and Copyright (C) 2009, 2010, 2014, 2015, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)setregid.2 6.4 (Berkeley) 3/10/91
-.\"
-.\" Modified Sat Jul 24 09:08:49 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Portions extracted from linux/kernel/sys.c:
-.\" Copyright (C) 1991, 1992 Linus Torvalds
-.\" May be distributed under the GNU General Public License
-.\" Changes: 1994-07-29 by Wilf <G.Wilford@ee.surrey.ac.uk>
-.\" 1994-08-02 by Wilf due to change in kernel.
-.\" 2004-07-04 by aeb
-.\" 2004-05-27 by Michael Kerrisk
-.\"
-.TH setreuid 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setreuid, setregid \- set real and/or effective user or group ID
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int setreuid(uid_t " ruid ", uid_t " euid );
-.BI "int setregid(gid_t " rgid ", gid_t " egid );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR setreuid (),
-.BR setregid ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-.BR setreuid ()
-sets real and effective user IDs of the calling process.
-.PP
-Supplying a value of \-1 for either the real or effective user ID forces
-the system to leave that ID unchanged.
-.PP
-Unprivileged processes may only set the effective user ID to the real user ID,
-the effective user ID, or the saved set-user-ID.
-.PP
-Unprivileged users may only set the real user ID to
-the real user ID or the effective user ID.
-.PP
-If the real user ID is set (i.e.,
-.I ruid
-is not \-1) or the effective user ID is set to a value
-not equal to the previous real user ID,
-the saved set-user-ID will be set to the new effective user ID.
-.PP
-Completely analogously,
-.BR setregid ()
-sets real and effective group ID's of the calling process,
-and all of the above holds with "group" instead of "user".
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.PP
-.IR Note :
-there are cases where
-.BR setreuid ()
-can fail even when the caller is UID 0;
-it is a grave security error to omit checking for a failure return from
-.BR setreuid ().
-.SH ERRORS
-.TP
-.B EAGAIN
-The call would change the caller's real UID (i.e.,
-.I ruid
-does not match the caller's real UID),
-but there was a temporary failure allocating the
-necessary kernel data structures.
-.TP
-.B EAGAIN
-.I ruid
-does not match the caller's real UID and this call would
-bring the number of processes belonging to the real user ID
-.I ruid
-over the caller's
-.B RLIMIT_NPROC
-resource limit.
-Since Linux 3.1, this error case no longer occurs
-(but robust applications should check for this error);
-see the description of
-.B EAGAIN
-in
-.BR execve (2).
-.TP
-.B EINVAL
-One or more of the target user or group IDs
-is not valid in this user namespace.
-.TP
-.B EPERM
-The calling process is not privileged
-(on Linux, does not have the necessary capability in its user namespace:
-.B CAP_SETUID
-in the case of
-.BR setreuid (),
-or
-.B CAP_SETGID
-in the case of
-.BR setregid ())
-and a change other than (i)
-swapping the effective user (group) ID with the real user (group) ID,
-or (ii) setting one to the value of the other or (iii) setting the
-effective user (group) ID to the value of the
-saved set-user-ID (saved set-group-ID) was specified.
-.SH VERSIONS
-POSIX.1 does not specify all of the UID changes that Linux permits
-for an unprivileged process.
-For
-.BR setreuid (),
-the effective user ID can be made the same as the
-real user ID or the saved set-user-ID,
-and it is unspecified whether unprivileged processes may set the
-real user ID to the real user ID, the effective user ID, or the
-saved set-user-ID.
-For
-.BR setregid (),
-the real group ID can be changed to the value of the saved set-group-ID,
-and the effective group ID can be changed to the value of
-the real group ID or the saved set-group-ID.
-The precise details of what ID changes are permitted vary
-across implementations.
-.PP
-POSIX.1 makes no specification about the effect of these calls
-on the saved set-user-ID and saved set-group-ID.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, 4.3BSD (first appeared in 4.2BSD).
-.PP
-Setting the effective user (group) ID to the
-saved set-user-ID (saved set-group-ID) is
-possible since Linux 1.1.37 (1.1.38).
-.PP
-The original Linux
-.BR setreuid ()
-and
-.BR setregid ()
-system calls supported only 16-bit user and group IDs.
-Subsequently, Linux 2.4 added
-.BR setreuid32 ()
-and
-.BR setregid32 (),
-supporting 32-bit IDs.
-The glibc
-.BR setreuid ()
-and
-.BR setregid ()
-wrapper functions transparently deal with the variations across kernel versions.
-.\"
-.SS C library/kernel differences
-At the kernel level, user IDs and group IDs are a per-thread attribute.
-However, POSIX requires that all threads in a process
-share the same credentials.
-The NPTL threading implementation handles the POSIX requirements by
-providing wrapper functions for
-the various system calls that change process UIDs and GIDs.
-These wrapper functions (including those for
-.BR setreuid ()
-and
-.BR setregid ())
-employ a signal-based technique to ensure
-that when one thread changes credentials,
-all of the other threads in the process also change their credentials.
-For details, see
-.BR nptl (7).
-.SH SEE ALSO
-.BR getgid (2),
-.BR getuid (2),
-.BR seteuid (2),
-.BR setgid (2),
-.BR setresuid (2),
-.BR setuid (2),
-.BR capabilities (7),
-.BR credentials (7),
-.BR user_namespaces (7)
diff --git a/man2/setreuid32.2 b/man2/setreuid32.2
deleted file mode 100644
index ec3ff6416..000000000
--- a/man2/setreuid32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/setreuid.2
diff --git a/man2/setrlimit.2 b/man2/setrlimit.2
deleted file mode 100644
index df6d7362a..000000000
--- a/man2/setrlimit.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getrlimit.2
diff --git a/man2/setsid.2 b/man2/setsid.2
deleted file mode 100644
index fe86939e2..000000000
--- a/man2/setsid.2
+++ /dev/null
@@ -1,100 +0,0 @@
-.\" Copyright Michael Haardt (michael@cantor.informatik.rwth-aachen.de)
-.\" Sat Aug 27 20:43:50 MET DST 1994
-.\" and Copyright (C) 2014, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sun Sep 11 19:19:05 1994 <faith@cs.unc.edu>
-.\" Modified Mon Mar 25 10:19:00 1996 <aeb@cwi.nl> (merged a few
-.\" tiny changes from a man page by Charles Livingston).
-.\" Modified Sun Jul 21 14:45:46 1996 <aeb@cwi.nl>
-.\"
-.TH setsid 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setsid \- creates a session and sets the process group ID
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.B pid_t setsid(void);
-.fi
-.SH DESCRIPTION
-.BR setsid ()
-creates a new session if the calling process is not a
-process group leader.
-The calling process is the leader of the new session
-(i.e., its session ID is made the same as its process ID).
-The calling process also becomes
-the process group leader of a new process group in the session
-(i.e., its process group ID is made the same as its process ID).
-.PP
-The calling process will be the only process in
-the new process group and in the new session.
-.PP
-Initially, the new session has no controlling terminal.
-For details of how a session acquires a controlling terminal, see
-.BR credentials (7).
-.SH RETURN VALUE
-On success, the (new) session ID of the calling process is returned.
-On error,
-.I "(pid_t)\ \-1"
-is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EPERM
-The process group ID of any process equals the PID of the calling process.
-Thus, in particular,
-.BR setsid ()
-fails if the calling process is already a process group leader.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4.
-.SH NOTES
-A child created via
-.BR fork (2)
-inherits its parent's session ID.
-The session ID is preserved across an
-.BR execve (2).
-.PP
-A process group leader is a process whose process group ID equals its PID.
-Disallowing a process group leader from calling
-.BR setsid ()
-prevents the possibility that a process group leader places itself
-in a new session while other processes in the process group remain
-in the original session;
-such a scenario would break the strict
-two-level hierarchy of sessions and process groups.
-In order to be sure that
-.BR setsid ()
-will succeed, call
-.BR fork (2)
-and have the parent
-.BR _exit (2),
-while the child (which by definition can't be a process group leader) calls
-.BR setsid ().
-.PP
-If a session has a controlling terminal, and the
-.B CLOCAL
-flag for that terminal is not set,
-and a terminal hangup occurs, then the session leader is sent a
-.B SIGHUP
-signal.
-.PP
-If a process that is a session leader terminates, then a
-.B SIGHUP
-signal is sent to each process in the foreground
-process group of the controlling terminal.
-.SH SEE ALSO
-.BR setsid (1),
-.BR getsid (2),
-.BR setpgid (2),
-.BR setpgrp (2),
-.BR tcgetsid (3),
-.BR credentials (7),
-.BR sched (7)
diff --git a/man2/setsockopt.2 b/man2/setsockopt.2
deleted file mode 100644
index d98c7769b..000000000
--- a/man2/setsockopt.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getsockopt.2
diff --git a/man2/settimeofday.2 b/man2/settimeofday.2
deleted file mode 100644
index 2b6eff428..000000000
--- a/man2/settimeofday.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/gettimeofday.2
diff --git a/man2/setuid.2 b/man2/setuid.2
deleted file mode 100644
index c124ff4fc..000000000
--- a/man2/setuid.2
+++ /dev/null
@@ -1,156 +0,0 @@
-.\" Copyright (C), 1994, Graeme W. Wilford (Wilf).
-.\" and Copyright (C) 2010, 2014, 2015, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Fri Jul 29th 12:56:44 BST 1994 Wilf. <G.Wilford@ee.surrey.ac.uk>
-.\" Changes inspired by patch from Richard Kettlewell
-.\" <richard@greenend.org.uk>, aeb 970616.
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.TH setuid 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setuid \- set user identity
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int setuid(uid_t " uid );
-.fi
-.SH DESCRIPTION
-.BR setuid ()
-sets the effective user ID of the calling process.
-If the calling process is privileged
-(more precisely: if the process has the
-.B CAP_SETUID
-capability in its user namespace),
-the real UID and saved set-user-ID are also set.
-.PP
-Under Linux,
-.BR setuid ()
-is implemented like the POSIX version with the
-.B _POSIX_SAVED_IDS
-feature.
-This allows a set-user-ID (other than root) program to drop all of its user
-privileges, do some un-privileged work, and then reengage the original
-effective user ID in a secure manner.
-.PP
-If the user is root or the program is set-user-ID-root, special care must be
-taken:
-.BR setuid ()
-checks the effective user ID of the caller and if it is
-the superuser, all process-related user ID's are set to
-.IR uid .
-After this has occurred, it is impossible for the program to regain root
-privileges.
-.PP
-Thus, a set-user-ID-root program wishing to temporarily drop root
-privileges, assume the identity of an unprivileged user, and then regain
-root privileges afterward cannot use
-.BR setuid ().
-You can accomplish this with
-.BR seteuid (2).
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.PP
-.IR Note :
-there are cases where
-.BR setuid ()
-can fail even when the caller is UID 0;
-it is a grave security error to omit checking for a failure return from
-.BR setuid ().
-.SH ERRORS
-.TP
-.B EAGAIN
-The call would change the caller's real UID (i.e.,
-.I uid
-does not match the caller's real UID),
-but there was a temporary failure allocating the
-necessary kernel data structures.
-.TP
-.B EAGAIN
-.I uid
-does not match the real user ID of the caller and this call would
-bring the number of processes belonging to the real user ID
-.I uid
-over the caller's
-.B RLIMIT_NPROC
-resource limit.
-Since Linux 3.1, this error case no longer occurs
-(but robust applications should check for this error);
-see the description of
-.B EAGAIN
-in
-.BR execve (2).
-.TP
-.B EINVAL
-The user ID specified in
-.I uid
-is not valid in this user namespace.
-.TP
-.B EPERM
-The user is not privileged (Linux: does not have the
-.B CAP_SETUID
-capability in its user namespace) and
-.I uid
-does not match the real UID or saved set-user-ID of the calling process.
-.SH VERSIONS
-.SS C library/kernel differences
-At the kernel level, user IDs and group IDs are a per-thread attribute.
-However, POSIX requires that all threads in a process
-share the same credentials.
-The NPTL threading implementation handles the POSIX requirements by
-providing wrapper functions for
-the various system calls that change process UIDs and GIDs.
-These wrapper functions (including the one for
-.BR setuid ())
-employ a signal-based technique to ensure
-that when one thread changes credentials,
-all of the other threads in the process also change their credentials.
-For details, see
-.BR nptl (7).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4.
-.PP
-Not quite compatible with the 4.4BSD call, which
-sets all of the real, saved, and effective user IDs.
-.\" SVr4 documents an additional EINVAL error condition.
-.PP
-The original Linux
-.BR setuid ()
-system call supported only 16-bit user IDs.
-Subsequently, Linux 2.4 added
-.BR setuid32 ()
-supporting 32-bit IDs.
-The glibc
-.BR setuid ()
-wrapper function transparently deals with the variation across kernel versions.
-.SH NOTES
-Linux has the concept of the filesystem user ID, normally equal to the
-effective user ID.
-The
-.BR setuid ()
-call also sets the filesystem user ID of the calling process.
-See
-.BR setfsuid (2).
-.PP
-If
-.I uid
-is different from the old effective UID, the process will
-be forbidden from leaving core dumps.
-.SH SEE ALSO
-.BR getuid (2),
-.BR seteuid (2),
-.BR setfsuid (2),
-.BR setreuid (2),
-.BR capabilities (7),
-.BR credentials (7),
-.BR user_namespaces (7)
diff --git a/man2/setuid32.2 b/man2/setuid32.2
deleted file mode 100644
index 24656c29f..000000000
--- a/man2/setuid32.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/setuid.2
diff --git a/man2/setup.2 b/man2/setup.2
deleted file mode 100644
index 24e0253d1..000000000
--- a/man2/setup.2
+++ /dev/null
@@ -1,55 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified Sun Jul 25 10:14:13 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 15 April 1995 by Michael Chastain <mec@shell.portal.com>
-.\" Update calling parameters to Linux 1.2.4 values.
-.\" Modified 10 June 1995 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 3 May 1996 by Martin Schulze <joey@infodrom.north.de>
-.\" Modified Wed Nov 6 04:05:28 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Sat Jan 29 01:08:23 2000 by aeb
-.\"
-.TH setup 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setup \- setup devices and filesystems, mount root filesystem
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.B [[deprecated]] int setup(void);
-.fi
-.SH DESCRIPTION
-.BR setup ()
-is called once from within
-.IR linux/init/main.c .
-It calls initialization functions for devices and filesystems
-configured into the kernel and then mounts the root filesystem.
-.PP
-No user process may call
-.BR setup ().
-Any user process, even a process with superuser permission,
-will receive
-.BR EPERM .
-.SH RETURN VALUE
-.BR setup ()
-always returns \-1 for a user process.
-.SH ERRORS
-.TP
-.B EPERM
-Always, for a user process.
-.SH STANDARDS
-Linux.
-.SH VERSIONS
-Removed in Linux 2.1.121.
-.PP
-The calling sequence varied: at some times
-.BR setup ()
-has had a single argument
-.I "void\ *BIOS"
-and at other times a single argument
-.IR "int magic" .
diff --git a/man2/setxattr.2 b/man2/setxattr.2
deleted file mode 100644
index 43151ebd5..000000000
--- a/man2/setxattr.2
+++ /dev/null
@@ -1,160 +0,0 @@
-.\" Copyright (C) Andreas Gruenbacher, February 2001
-.\" Copyright (C) Silicon Graphics Inc, September 2001
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH setxattr 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setxattr, lsetxattr, fsetxattr \- set an extended attribute value
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/xattr.h>
-.PP
-.BI "int setxattr(const char *" path ", const char *" name ,
-.BI " const void " value [. size "], size_t " size ", int " flags );
-.BI "int lsetxattr(const char *" path ", const char *" name ,
-.BI " const void " value [. size "], size_t " size ", int " flags );
-.BI "int fsetxattr(int " fd ", const char *" name ,
-.BI " const void " value [. size "], size_t " size ", int " flags );
-.fi
-.SH DESCRIPTION
-Extended attributes are
-.IR name :\c
-.I value
-pairs associated with inodes (files, directories, symbolic links, etc.).
-They are extensions to the normal attributes which are associated
-with all inodes in the system (i.e., the
-.BR stat (2)
-data).
-A complete overview of extended attributes concepts can be found in
-.BR xattr (7).
-.PP
-.BR setxattr ()
-sets the
-.I value
-of the extended attribute identified by
-.I name
-and associated with the given
-.I path
-in the filesystem.
-The
-.I size
-argument specifies the size (in bytes) of
-.IR value ;
-a zero-length value is permitted.
-.PP
-.BR lsetxattr ()
-is identical to
-.BR setxattr (),
-except in the case of a symbolic link, where the extended attribute is
-set on the link itself, not the file that it refers to.
-.PP
-.BR fsetxattr ()
-is identical to
-.BR setxattr (),
-only the extended attribute is set on the open file referred to by
-.I fd
-(as returned by
-.BR open (2))
-in place of
-.IR path .
-.PP
-An extended attribute name is a null-terminated string.
-The
-.I name
-includes a namespace prefix; there may be several, disjoint
-namespaces associated with an individual inode.
-The
-.I value
-of an extended attribute is a chunk of arbitrary textual or
-binary data of specified length.
-.PP
-By default
-(i.e.,
-.I flags
-is zero),
-the extended attribute will be created if it does not exist,
-or the value will be replaced if the attribute already exists.
-To modify these semantics, one of the following values can be specified in
-.IR flags :
-.TP
-.B XATTR_CREATE
-Perform a pure create, which fails if the named attribute exists already.
-.TP
-.B XATTR_REPLACE
-Perform a pure replace operation,
-which fails if the named attribute does not already exist.
-.SH RETURN VALUE
-On success, zero is returned.
-On failure, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EDQUOT
-Disk quota limits meant that
-there is insufficient space remaining to store the extended attribute.
-.TP
-.B EEXIST
-.B XATTR_CREATE
-was specified, and the attribute exists already.
-.TP
-.B ENODATA
-.B XATTR_REPLACE
-was specified, and the attribute does not exist.
-.\" .RB ( ENOATTR
-.\" is defined to be a synonym for
-.\" .BR ENODATA
-.\" in
-.\" .IR <attr/attributes.h> .)
-.TP
-.B ENOSPC
-There is insufficient space remaining to store the extended attribute.
-.TP
-.B ENOTSUP
-The namespace prefix of
-.I name
-is not valid.
-.TP
-.B ENOTSUP
-Extended attributes are not supported by the filesystem, or are disabled,
-.TP
-.B EPERM
-The file is marked immutable or append-only.
-(See
-.BR ioctl_iflags (2).)
-.PP
-In addition, the errors documented in
-.BR stat (2)
-can also occur.
-.TP
-.B ERANGE
-The size of
-.I name
-or
-.I value
-exceeds a filesystem-specific limit.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.4,
-glibc 2.3.
-.\" .SH AUTHORS
-.\" Andreas Gruenbacher,
-.\" .RI < a.gruenbacher@computer.org >
-.\" and the SGI XFS development team,
-.\" .RI < linux-xfs@oss.sgi.com >.
-.\" Please send any bug reports or comments to these addresses.
-.SH SEE ALSO
-.BR getfattr (1),
-.BR setfattr (1),
-.BR getxattr (2),
-.BR listxattr (2),
-.BR open (2),
-.BR removexattr (2),
-.BR stat (2),
-.BR symlink (7),
-.BR xattr (7)
diff --git a/man2/sgetmask.2 b/man2/sgetmask.2
deleted file mode 100644
index a1af77c15..000000000
--- a/man2/sgetmask.2
+++ /dev/null
@@ -1,70 +0,0 @@
-.\" Copyright (c) 2007 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sgetmask 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sgetmask, ssetmask \- manipulation of signal mask (obsolete)
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.B [[deprecated]] long syscall(SYS_sgetmask, void);
-.BI "[[deprecated]] long syscall(SYS_ssetmask, long " newmask );
-.fi
-.SH DESCRIPTION
-These system calls are obsolete.
-.IR "Do not use them" ;
-use
-.BR sigprocmask (2)
-instead.
-.PP
-.BR sgetmask ()
-returns the signal mask of the calling process.
-.PP
-.BR ssetmask ()
-sets the signal mask of the calling process to the value given in
-.IR newmask .
-The previous signal mask is returned.
-.PP
-The signal masks dealt with by these two system calls
-are plain bit masks (unlike the
-.I sigset_t
-used by
-.BR sigprocmask (2));
-use
-.BR sigmask (3)
-to create and inspect these masks.
-.SH RETURN VALUE
-.BR sgetmask ()
-always successfully returns the signal mask.
-.BR ssetmask ()
-always succeeds, and returns the previous signal mask.
-.SH ERRORS
-These system calls always succeed.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Since Linux 3.16,
-.\" f6187769dae48234f3877df3c4d99294cc2254fa
-support for these system calls is optional,
-depending on whether the kernel was built with the
-.B CONFIG_SGETMASK_SYSCALL
-option.
-.SH NOTES
-These system calls are unaware of signal numbers greater than 31
-(i.e., real-time signals).
-.PP
-These system calls do not exist on x86-64.
-.PP
-It is not possible to block
-.B SIGSTOP
-or
-.BR SIGKILL .
-.SH SEE ALSO
-.BR sigprocmask (2),
-.BR signal (7)
diff --git a/man2/shmat.2 b/man2/shmat.2
deleted file mode 100644
index 3f3e5a4bd..000000000
--- a/man2/shmat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/shmop.2
diff --git a/man2/shmctl.2 b/man2/shmctl.2
deleted file mode 100644
index e1c5a9aff..000000000
--- a/man2/shmctl.2
+++ /dev/null
@@ -1,490 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 Luigi P. Bai (lpb@softint.com) July 28, 1993
-.\" and Copyright 1993 Giorgio Ciucci <giorgio@crcc.it>
-.\" and Copyright 2004, 2005 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 1993-07-28, Rik Faith <faith@cs.unc.edu>
-.\" Modified 1993-11-28, Giorgio Ciucci <giorgio@crcc.it>
-.\" Modified 1997-01-31, Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2001-02-18, Andries Brouwer <aeb@cwi.nl>
-.\" Modified 2002-01-05, 2004-05-27, 2004-06-17,
-.\" Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2004-10-11, aeb
-.\" Modified, Nov 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Language and formatting clean-ups
-.\" Updated shmid_ds structure definitions
-.\" Added information on SHM_DEST and SHM_LOCKED flags
-.\" Noted that CAP_IPC_LOCK is not required for SHM_UNLOCK
-.\" since Linux 2.6.9
-.\" Modified, 2004-11-25, mtk, notes on 2.6.9 RLIMIT_MEMLOCK changes
-.\" 2005-04-25, mtk -- noted aberrant Linux behavior w.r.t. new
-.\" attaches to a segment that has already been marked for deletion.
-.\" 2005-08-02, mtk: Added IPC_INFO, SHM_INFO, SHM_STAT descriptions.
-.\" 2018-03-20, dbueso: Added SHM_STAT_ANY description.
-.\"
-.TH shmctl 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-shmctl \- System V shared memory control
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/shm.h>
-.PP
-.BI "int shmctl(int " shmid ", int " cmd ", struct shmid_ds *" buf );
-.fi
-.SH DESCRIPTION
-.BR shmctl ()
-performs the control operation specified by
-.I cmd
-on the System\ V shared memory segment whose identifier is given in
-.IR shmid .
-.PP
-The
-.I buf
-argument is a pointer to a \fIshmid_ds\fP structure,
-defined in \fI<sys/shm.h>\fP as follows:
-.PP
-.in +4n
-.EX
-struct shmid_ds {
- struct ipc_perm shm_perm; /* Ownership and permissions */
- size_t shm_segsz; /* Size of segment (bytes) */
- time_t shm_atime; /* Last attach time */
- time_t shm_dtime; /* Last detach time */
- time_t shm_ctime; /* Creation time/time of last
- modification via shmctl() */
- pid_t shm_cpid; /* PID of creator */
- pid_t shm_lpid; /* PID of last shmat(2)/shmdt(2) */
- shmatt_t shm_nattch; /* No. of current attaches */
- ...
-};
-.EE
-.in
-.PP
-The fields of the
-.I shmid_ds
-structure are as follows:
-.TP 12
-.I shm_perm
-This is an
-.I ipc_perm
-structure (see below) that specifies the access permissions
-on the shared memory segment.
-.TP
-.I shm_segsz
-Size in bytes of the shared memory segment.
-.TP
-.I shm_atime
-Time of the last
-.BR shmat (2)
-system call that attached this segment.
-.TP
-.I shm_dtime
-Time of the last
-.BR shmdt (2)
-system call that detached tgis segment.
-.TP
-.I shm_ctime
-Time of creation of segment or time of the last
-.BR shmctl ()
-.B IPC_SET
-operation.
-.TP
-.I shm_cpid
-ID of the process that created the shared memory segment.
-.TP
-.I shm_lpid
-ID of the last process that executed a
-.BR shmat (2)
-or
-.BR shmdt (2)
-system call on this segment.
-.TP
-.I shm_nattch
-Number of processes that have this segment attached.
-.PP
-The
-.I ipc_perm
-structure is defined as follows
-(the highlighted fields are settable using
-.BR IPC_SET ):
-.PP
-.in +4n
-.EX
-struct ipc_perm {
- key_t __key; /* Key supplied to shmget(2) */
- uid_t \fBuid\fP; /* Effective UID of owner */
- gid_t \fBgid\fP; /* Effective GID of owner */
- uid_t cuid; /* Effective UID of creator */
- gid_t cgid; /* Effective GID of creator */
- unsigned short \fBmode\fP; /* \fBPermissions\fP + SHM_DEST and
- SHM_LOCKED flags */
- unsigned short __seq; /* Sequence number */
-};
-.EE
-.in
-.PP
-The least significant 9 bits of the
-.I mode
-field of the
-.I ipc_perm
-structure define the access permissions for the shared memory segment.
-The permission bits are as follows:
-.TS
-l l.
-0400 Read by user
-0200 Write by user
-0040 Read by group
-0020 Write by group
-0004 Read by others
-0002 Write by others
-.TE
-.PP
-Bits 0100, 0010, and 0001 (the execute bits) are unused by the system.
-(It is not necessary to have execute permission on a segment
-in order to perform a
-.BR shmat (2)
-call with the
-.B SHM_EXEC
-flag.)
-.PP
-Valid values for
-.I cmd
-are:
-.TP
-.B IPC_STAT
-Copy information from the kernel data structure associated with
-.I shmid
-into the
-.I shmid_ds
-structure pointed to by \fIbuf\fP.
-The caller must have read permission on the
-shared memory segment.
-.TP
-.B IPC_SET
-Write the values of some members of the
-.I shmid_ds
-structure pointed to by
-.I buf
-to the kernel data structure associated with this shared memory segment,
-updating also its
-.I shm_ctime
-member.
-.IP
-The following fields are updated:
-\fIshm_perm.uid\fP, \fIshm_perm.gid\fP,
-and (the least significant 9 bits of) \fIshm_perm.mode\fP.
-.IP
-The effective UID of the calling process must match the owner
-.RI ( shm_perm.uid )
-or creator
-.RI ( shm_perm.cuid )
-of the shared memory segment, or the caller must be privileged.
-.TP
-.B IPC_RMID
-Mark the segment to be destroyed.
-The segment will actually be destroyed
-only after the last process detaches it (i.e., when the
-.I shm_nattch
-member of the associated structure
-.I shmid_ds
-is zero).
-The caller must be the owner or creator of the segment, or be privileged.
-The
-.I buf
-argument is ignored.
-.IP
-If a segment has been marked for destruction, then the (nonstandard)
-.B SHM_DEST
-flag of the
-.I shm_perm.mode
-field in the associated data structure retrieved by
-.B IPC_STAT
-will be set.
-.IP
-The caller \fImust\fP ensure that a segment is eventually destroyed;
-otherwise its pages that were faulted in will remain in memory or swap.
-.IP
-See also the description of
-.I /proc/sys/kernel/shm_rmid_forced
-in
-.BR proc (5).
-.TP
-.BR IPC_INFO " (Linux-specific)"
-Return information about system-wide shared memory limits and
-parameters in the structure pointed to by
-.IR buf .
-This structure is of type
-.I shminfo
-(thus, a cast is required),
-defined in
-.I <sys/shm.h>
-if the
-.B _GNU_SOURCE
-feature test macro is defined:
-.IP
-.in +4n
-.EX
-struct shminfo {
- unsigned long shmmax; /* Maximum segment size */
- unsigned long shmmin; /* Minimum segment size;
- always 1 */
- unsigned long shmmni; /* Maximum number of segments */
- unsigned long shmseg; /* Maximum number of segments
- that a process can attach;
- unused within kernel */
- unsigned long shmall; /* Maximum number of pages of
- shared memory, system\-wide */
-};
-.EE
-.in
-.IP
-The
-.IR shmmni ,
-.IR shmmax ,
-and
-.I shmall
-settings can be changed via
-.I /proc
-files of the same name; see
-.BR proc (5)
-for details.
-.TP
-.BR SHM_INFO " (Linux-specific)"
-Return a
-.I shm_info
-structure whose fields contain information
-about system resources consumed by shared memory.
-This structure is defined in
-.I <sys/shm.h>
-if the
-.B _GNU_SOURCE
-feature test macro is defined:
-.IP
-.in +4n
-.EX
-struct shm_info {
- int used_ids; /* # of currently existing
- segments */
- unsigned long shm_tot; /* Total number of shared
- memory pages */
- unsigned long shm_rss; /* # of resident shared
- memory pages */
- unsigned long shm_swp; /* # of swapped shared
- memory pages */
- unsigned long swap_attempts;
- /* Unused since Linux 2.4 */
- unsigned long swap_successes;
- /* Unused since Linux 2.4 */
-};
-.EE
-.in
-.TP
-.BR SHM_STAT " (Linux-specific)"
-Return a
-.I shmid_ds
-structure as for
-.BR IPC_STAT .
-However, the
-.I shmid
-argument is not a segment identifier, but instead an index into
-the kernel's internal array that maintains information about
-all shared memory segments on the system.
-.TP
-.BR SHM_STAT_ANY " (Linux-specific, since Linux 4.17)"
-Return a
-.I shmid_ds
-structure as for
-.BR SHM_STAT .
-However,
-.I shm_perm.mode
-is not checked for read access for
-.IR shmid ,
-meaning that any user can employ this operation (just as any user may read
-.I /proc/sysvipc/shm
-to obtain the same information).
-.PP
-The caller can prevent or allow swapping of a shared
-memory segment with the following \fIcmd\fP values:
-.TP
-.BR SHM_LOCK " (Linux-specific)"
-Prevent swapping of the shared memory segment.
-The caller must fault in
-any pages that are required to be present after locking is enabled.
-If a segment has been locked, then the (nonstandard)
-.B SHM_LOCKED
-flag of the
-.I shm_perm.mode
-field in the associated data structure retrieved by
-.B IPC_STAT
-will be set.
-.TP
-.BR SHM_UNLOCK " (Linux-specific)"
-Unlock the segment, allowing it to be swapped out.
-.PP
-Before Linux 2.6.10, only a privileged process
-could employ
-.B SHM_LOCK
-and
-.BR SHM_UNLOCK .
-Since Linux 2.6.10, an unprivileged process can employ these operations
-if its effective UID matches the owner or creator UID of the segment, and
-(for
-.BR SHM_LOCK )
-the amount of memory to be locked falls within the
-.B RLIMIT_MEMLOCK
-resource limit (see
-.BR setrlimit (2)).
-.\" There was some weirdness in Linux 2.6.9: SHM_LOCK and SHM_UNLOCK could
-.\" be applied to a segment, regardless of ownership of the segment.
-.\" This was a botch-up in the move to RLIMIT_MEMLOCK, and was fixed
-.\" in Linux 2.6.10. MTK, May 2005
-.SH RETURN VALUE
-A successful
-.B IPC_INFO
-or
-.B SHM_INFO
-operation returns the index of the highest used entry in the
-kernel's internal array recording information about all
-shared memory segments.
-(This information can be used with repeated
-.B SHM_STAT
-or
-.B SHM_STAT_ANY
-operations to obtain information about all shared memory segments
-on the system.)
-A successful
-.B SHM_STAT
-operation returns the identifier of the shared memory segment
-whose index was given in
-.IR shmid .
-Other operations return 0 on success.
-.PP
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-\fBIPC_STAT\fP or \fBSHM_STAT\fP is requested and
-\fIshm_perm.mode\fP does not allow read access for
-.IR shmid ,
-and the calling process does not have the
-.B CAP_IPC_OWNER
-capability in the user namespace that governs its IPC namespace.
-.TP
-.B EFAULT
-The argument
-.I cmd
-has value
-.B IPC_SET
-or
-.B IPC_STAT
-but the address pointed to by
-.I buf
-isn't accessible.
-.TP
-.B EIDRM
-\fIshmid\fP points to a removed identifier.
-.TP
-.B EINVAL
-\fIshmid\fP is not a valid identifier, or \fIcmd\fP
-is not a valid command.
-Or: for a
-.B SHM_STAT
-or
-.B SHM_STAT_ANY
-operation, the index value specified in
-.I shmid
-referred to an array slot that is currently unused.
-.TP
-.B ENOMEM
-(Since Linux 2.6.9),
-.B SHM_LOCK
-was specified and the size of the to-be-locked segment would mean
-that the total bytes in locked shared memory segments would exceed
-the limit for the real user ID of the calling process.
-This limit is defined by the
-.B RLIMIT_MEMLOCK
-soft resource limit (see
-.BR setrlimit (2)).
-.TP
-.B EOVERFLOW
-\fBIPC_STAT\fP is attempted, and the GID or UID value
-is too large to be stored in the structure pointed to by
-.IR buf .
-.TP
-.B EPERM
-\fBIPC_SET\fP or \fBIPC_RMID\fP is attempted, and the
-effective user ID of the calling process is not that of the creator
-(found in
-.IR shm_perm.cuid ),
-or the owner
-(found in
-.IR shm_perm.uid ),
-and the process was not privileged (Linux: did not have the
-.B CAP_SYS_ADMIN
-capability).
-.IP
-Or (before Linux 2.6.9),
-.B SHM_LOCK
-or
-.B SHM_UNLOCK
-was specified, but the process was not privileged
-(Linux: did not have the
-.B CAP_IPC_LOCK
-capability).
-(Since Linux 2.6.9, this error can also occur if the
-.B RLIMIT_MEMLOCK
-is 0 and the caller is not privileged.)
-.SH VERSIONS
-Linux permits a process to attach
-.RB ( shmat (2))
-a shared memory segment that has already been marked for deletion
-using
-.IR shmctl(IPC_RMID) .
-This feature is not available on other UNIX implementations;
-portable applications should avoid relying on it.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4.
-.\" SVr4 documents additional error conditions EINVAL,
-.\" ENOENT, ENOSPC, ENOMEM, EEXIST. Neither SVr4 nor SVID documents
-.\" an EIDRM error condition.
-.PP
-Various fields in a \fIstruct shmid_ds\fP were typed as
-.I short
-under Linux 2.2
-and have become
-.I long
-under Linux 2.4.
-To take advantage of this,
-a recompilation under glibc-2.1.91 or later should suffice.
-(The kernel distinguishes old and new calls by an
-.B IPC_64
-flag in
-.IR cmd .)
-.SH NOTES
-The
-.BR IPC_INFO ,
-.BR SHM_STAT ,
-and
-.B SHM_INFO
-operations are used by the
-.BR ipcs (1)
-program to provide information on allocated resources.
-In the future, these may modified or moved to a
-.I /proc
-filesystem interface.
-.SH SEE ALSO
-.BR mlock (2),
-.BR setrlimit (2),
-.BR shmget (2),
-.BR shmop (2),
-.BR capabilities (7),
-.BR sysvipc (7)
diff --git a/man2/shmdt.2 b/man2/shmdt.2
deleted file mode 100644
index 3f3e5a4bd..000000000
--- a/man2/shmdt.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/shmop.2
diff --git a/man2/shmget.2 b/man2/shmget.2
deleted file mode 100644
index c0b1a669c..000000000
--- a/man2/shmget.2
+++ /dev/null
@@ -1,410 +0,0 @@
-.\" Copyright (c) 1993 Luigi P. Bai (lpb@softint.com) July 28, 1993
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Wed Jul 28 10:57:35 1993, Rik Faith <faith@cs.unc.edu>
-.\" Modified Sun Nov 28 16:43:30 1993, Rik Faith <faith@cs.unc.edu>
-.\" with material from Giorgio Ciucci <giorgio@crcc.it>
-.\" Portions Copyright 1993 Giorgio Ciucci <giorgio@crcc.it>
-.\" Modified Tue Oct 22 22:03:17 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified, 8 Jan 2003, Michael Kerrisk, <mtk.manpages@gmail.com>
-.\" Removed EIDRM from errors - that can't happen...
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.\" Modified, 11 Nov 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Language and formatting clean-ups
-.\" Added notes on /proc files
-.\"
-.TH shmget 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-shmget \- allocates a System V shared memory segment
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/shm.h>
-.PP
-.BI "int shmget(key_t " key ", size_t " size ", int " shmflg );
-.fi
-.SH DESCRIPTION
-.BR shmget ()
-returns the identifier of the System\ V shared memory segment
-associated with the value of the argument
-.IR key .
-It may be used either to obtain the identifier of a previously created
-shared memory segment (when
-.I shmflg
-is zero and
-.I key
-does not have the value
-.BR IPC_PRIVATE ),
-or to create a new set.
-.PP
-A new shared memory segment, with size equal to the value of
-.I size
-rounded up to a multiple of
-.BR PAGE_SIZE ,
-is created if
-.I key
-has the value
-.B IPC_PRIVATE
-or
-.I key
-isn't
-.BR IPC_PRIVATE ,
-no shared memory segment corresponding to
-.I key
-exists, and
-.B IPC_CREAT
-is specified in
-.IR shmflg .
-.PP
-If
-.I shmflg
-specifies both
-.B IPC_CREAT
-and
-.B IPC_EXCL
-and a shared memory segment already exists for
-.IR key ,
-then
-.BR shmget ()
-fails with
-.I errno
-set to
-.BR EEXIST .
-(This is analogous to the effect of the combination
-.B O_CREAT | O_EXCL
-for
-.BR open (2).)
-.PP
-The value
-.I shmflg
-is composed of:
-.TP
-.B IPC_CREAT
-Create a new segment.
-If this flag is not used, then
-.BR shmget ()
-will find the segment associated with \fIkey\fP and check to see if
-the user has permission to access the segment.
-.TP
-.B IPC_EXCL
-This flag is used with
-.B IPC_CREAT
-to ensure that this call creates the segment.
-If the segment already exists, the call fails.
-.TP
-.BR SHM_HUGETLB " (since Linux 2.6)"
-Allocate the segment using "huge" pages.
-See the Linux kernel source file
-.I Documentation/admin\-guide/mm/hugetlbpage.rst
-for further information.
-.TP
-.BR SHM_HUGE_2MB ", " SHM_HUGE_1GB " (since Linux 3.8)"
-.\" See https://lwn.net/Articles/533499/
-Used in conjunction with
-.B SHM_HUGETLB
-to select alternative hugetlb page sizes (respectively, 2\ MB and 1\ GB)
-on systems that support multiple hugetlb page sizes.
-.IP
-More generally, the desired huge page size can be configured by encoding
-the base-2 logarithm of the desired page size in the six bits at the offset
-.BR SHM_HUGE_SHIFT .
-Thus, the above two constants are defined as:
-.IP
-.in +4n
-.EX
-#define SHM_HUGE_2MB (21 << SHM_HUGE_SHIFT)
-#define SHM_HUGE_1GB (30 << SHM_HUGE_SHIFT)
-.EE
-.in
-.IP
-For some additional details,
-see the discussion of the similarly named constants in
-.BR mmap (2).
-.TP
-.BR SHM_NORESERVE " (since Linux 2.6.15)"
-This flag serves the same purpose as the
-.BR mmap (2)
-.B MAP_NORESERVE
-flag.
-Do not reserve swap space for this segment.
-When swap space is reserved, one has the guarantee
-that it is possible to modify the segment.
-When swap space is not reserved one might get
-.B SIGSEGV
-upon a write
-if no physical memory is available.
-See also the discussion of the file
-.I /proc/sys/vm/overcommit_memory
-in
-.BR proc (5).
-.\" As at 2.6.17-rc2, this flag has no effect if SHM_HUGETLB was also
-.\" specified.
-.PP
-In addition to the above flags, the least significant 9 bits of
-.I shmflg
-specify the permissions granted to the owner, group, and others.
-These bits have the same format, and the same
-meaning, as the
-.I mode
-argument of
-.BR open (2).
-Presently, execute permissions are not used by the system.
-.PP
-When a new shared memory segment is created,
-its contents are initialized to zero values, and
-its associated data structure,
-.I shmid_ds
-(see
-.BR shmctl (2)),
-is initialized as follows:
-.IP \[bu] 3
-.I shm_perm.cuid
-and
-.I shm_perm.uid
-are set to the effective user ID of the calling process.
-.IP \[bu]
-.I shm_perm.cgid
-and
-.I shm_perm.gid
-are set to the effective group ID of the calling process.
-.IP \[bu]
-The least significant 9 bits of
-.I shm_perm.mode
-are set to the least significant 9 bit of
-.IR shmflg .
-.IP \[bu]
-.I shm_segsz
-is set to the value of
-.IR size .
-.IP \[bu]
-.IR shm_lpid ,
-.IR shm_nattch ,
-.IR shm_atime ,
-and
-.I shm_dtime
-are set to 0.
-.IP \[bu]
-.I shm_ctime
-is set to the current time.
-.PP
-If the shared memory segment already exists, the permissions are
-verified, and a check is made to see if it is marked for destruction.
-.SH RETURN VALUE
-On success, a valid shared memory identifier is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-The user does not have permission to access the
-shared memory segment, and does not have the
-.B CAP_IPC_OWNER
-capability in the user namespace that governs its IPC namespace.
-.TP
-.B EEXIST
-.B IPC_CREAT
-and
-.B IPC_EXCL
-were specified in
-.IR shmflg ,
-but a shared memory segment already exists for
-.IR key .
-.TP
-.B EINVAL
-A new segment was to be created and
-.I size
-is less than
-.B SHMMIN
-or greater than
-.BR SHMMAX .
-.TP
-.B EINVAL
-A segment for the given
-.I key
-exists, but \fIsize\fP is greater than the size
-of that segment.
-.TP
-.B ENFILE
-.\" [2.6.7] shmem_zero_setup()-->shmem_file_setup()-->get_empty_filp()
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOENT
-No segment exists for the given \fIkey\fP, and
-.B IPC_CREAT
-was not specified.
-.TP
-.B ENOMEM
-No memory could be allocated for segment overhead.
-.TP
-.B ENOSPC
-All possible shared memory IDs have been taken
-.RB ( SHMMNI ),
-or allocating a segment of the requested
-.I size
-would cause the system to exceed the system-wide limit on shared memory
-.RB ( SHMALL ).
-.TP
-.B EPERM
-The
-.B SHM_HUGETLB
-flag was specified, but the caller was not privileged (did not have the
-.B CAP_IPC_LOCK
-capability)
-and is not a member of the
-.I sysctl_hugetlb_shm_group
-group; see the description of
-.I /proc/sys/vm/sysctl_hugetlb_shm_group
-in
-.BR proc (5).
-.SH STANDARDS
-POSIX.1-2008.
-.PP
-.B SHM_HUGETLB
-and
-.B SHM_NORESERVE
-are Linux extensions.
-.SH HISTORY
-POSIX.1-2001, SVr4.
-.\" SVr4 documents an additional error condition EEXIST.
-.SH NOTES
-.B IPC_PRIVATE
-isn't a flag field but a
-.I key_t
-type.
-If this special value is used for
-.IR key ,
-the system call ignores all but the least significant 9 bits of
-.I shmflg
-and creates a new shared memory segment.
-.\"
-.SS Shared memory limits
-The following limits on shared memory segment resources affect the
-.BR shmget ()
-call:
-.TP
-.B SHMALL
-System-wide limit on the total amount of shared memory,
-measured in units of the system page size.
-.IP
-On Linux, this limit can be read and modified via
-.IR /proc/sys/kernel/shmall .
-Since Linux 3.16,
-.\" commit 060028bac94bf60a65415d1d55a359c3a17d5c31
-the default value for this limit is:
-.IP
-.in +4n
-.EX
-ULONG_MAX - 2\[ha]24
-.EE
-.in
-.IP
-The effect of this value
-(which is suitable for both 32-bit and 64-bit systems)
-is to impose no limitation on allocations.
-This value, rather than
-.BR ULONG_MAX ,
-was chosen as the default to prevent some cases where historical
-applications simply raised the existing limit without first checking
-its current value.
-Such applications would cause the value to overflow if the limit was set at
-.BR ULONG_MAX .
-.IP
-From Linux 2.4 up to Linux 3.15,
-the default value for this limit was:
-.IP
-.in +4n
-.EX
-SHMMAX / PAGE_SIZE * (SHMMNI / 16)
-.EE
-.in
-.IP
-If
-.B SHMMAX
-and
-.B SHMMNI
-were not modified, then multiplying the result of this formula
-by the page size (to get a value in bytes) yielded a value of 8\ GB
-as the limit on the total memory used by all shared memory segments.
-.TP
-.B SHMMAX
-Maximum size in bytes for a shared memory segment.
-.IP
-On Linux, this limit can be read and modified via
-.IR /proc/sys/kernel/shmmax .
-Since Linux 3.16,
-.\" commit 060028bac94bf60a65415d1d55a359c3a17d5c31
-the default value for this limit is:
-.IP
-.in +4n
-.EX
-ULONG_MAX - 2\[ha]24
-.EE
-.in
-.IP
-The effect of this value
-(which is suitable for both 32-bit and 64-bit systems)
-is to impose no limitation on allocations.
-See the description of
-.B SHMALL
-for a discussion of why this default value (rather than
-.BR ULONG_MAX )
-is used.
-.IP
-From Linux 2.2 up to Linux 3.15, the default value of
-this limit was 0x2000000 (32\ MiB).
-.IP
-Because it is not possible to map just part of a shared memory segment,
-the amount of virtual memory places another limit on the maximum size of a
-usable segment:
-for example, on i386 the largest segments that can be mapped have a
-size of around 2.8\ GB, and on x86-64 the limit is around 127 TB.
-.TP
-.B SHMMIN
-Minimum size in bytes for a shared memory segment: implementation
-dependent (currently 1 byte, though
-.B PAGE_SIZE
-is the effective minimum size).
-.TP
-.B SHMMNI
-System-wide limit on the number of shared memory segments.
-In Linux 2.2, the default value for this limit was 128;
-since Linux 2.4, the default value is 4096.
-.IP
-On Linux, this limit can be read and modified via
-.IR /proc/sys/kernel/shmmni .
-.\" Kernels between Linux 2.4.x and Linux 2.6.8 had an off-by-one error
-.\" that meant that we could create one more segment than SHMMNI -- MTK
-.\" This /proc file is not available in Linux 2.2 and earlier -- MTK
-.PP
-The implementation has no specific limits for the per-process maximum
-number of shared memory segments
-.RB ( SHMSEG ).
-.SS Linux notes
-Until Linux 2.3.30, Linux would return
-.B EIDRM
-for a
-.BR shmget ()
-on a shared memory segment scheduled for deletion.
-.SH BUGS
-The name choice
-.B IPC_PRIVATE
-was perhaps unfortunate,
-.B IPC_NEW
-would more clearly show its function.
-.SH EXAMPLES
-See
-.BR shmop (2).
-.SH SEE ALSO
-.BR memfd_create (2),
-.BR shmat (2),
-.BR shmctl (2),
-.BR shmdt (2),
-.BR ftok (3),
-.BR capabilities (7),
-.BR shm_overview (7),
-.BR sysvipc (7)
diff --git a/man2/shmop.2 b/man2/shmop.2
deleted file mode 100644
index 083b039ab..000000000
--- a/man2/shmop.2
+++ /dev/null
@@ -1,507 +0,0 @@
-.\" Copyright 1993 Giorgio Ciucci (giorgio@crcc.it)
-.\" and Copyright 2020 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sun Nov 28 17:06:19 1993, Rik Faith (faith@cs.unc.edu)
-.\" with material from Luigi P. Bai (lpb@softint.com)
-.\" Portions Copyright 1993 Luigi P. Bai
-.\" Modified Tue Oct 22 22:04:23 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified, 5 Jan 2002, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified, 19 Sep 2002, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added SHM_REMAP flag description
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.\" Modified, 11 Nov 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Language and formatting clean-ups
-.\" Changed wording and placement of sentence regarding attachment
-.\" of segments marked for destruction
-.\"
-.TH SHMOP 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-shmat, shmdt \- System V shared memory operations
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/shm.h>
-.PP
-.BI "void *shmat(int " shmid ", const void *_Nullable " shmaddr ", \
-int " shmflg );
-.BI "int shmdt(const void *" shmaddr );
-.fi
-.SH DESCRIPTION
-.SS shmat()
-.BR shmat ()
-attaches the System\ V shared memory segment identified by
-.I shmid
-to the address space of the calling process.
-The attaching address is specified by
-.I shmaddr
-with one of the following criteria:
-.IP \[bu] 3
-If
-.I shmaddr
-is NULL,
-the system chooses a suitable (unused) page-aligned address to attach
-the segment.
-.IP \[bu]
-If
-.I shmaddr
-isn't NULL
-and
-.B SHM_RND
-is specified in
-.IR shmflg ,
-the attach occurs at the address equal to
-.I shmaddr
-rounded down to the nearest multiple of
-.BR SHMLBA .
-.IP \[bu]
-Otherwise,
-.I shmaddr
-must be a page-aligned address at which the attach occurs.
-.PP
-In addition to
-.BR SHM_RND ,
-the following flags may be specified in the
-.I shmflg
-bit-mask argument:
-.TP
-.BR SHM_EXEC " (Linux-specific; since Linux 2.6.9)"
-Allow the contents of the segment to be executed.
-The caller must have execute permission on the segment.
-.TP
-.B SHM_RDONLY
-Attach the segment for read-only access.
-The process must have read permission for the segment.
-If this flag is not specified,
-the segment is attached for read and write access,
-and the process must have read and write permission for the segment.
-There is no notion of a write-only shared memory segment.
-.TP
-.BR SHM_REMAP " (Linux-specific)"
-This flag specifies
-that the mapping of the segment should replace
-any existing mapping in the range starting at
-.I shmaddr
-and continuing for the size of the segment.
-(Normally, an
-.B EINVAL
-error would result if a mapping already exists in this address range.)
-In this case,
-.I shmaddr
-must not be NULL.
-.PP
-The
-.BR brk (2)
-value of the calling process is not altered by the attach.
-The segment will automatically be detached at process exit.
-The same segment may be attached as a read and as a read-write
-one, and more than once, in the process's address space.
-.PP
-A successful
-.BR shmat ()
-call updates the members of the
-.I shmid_ds
-structure (see
-.BR shmctl (2))
-associated with the shared memory segment as follows:
-.IP \[bu] 3
-.I shm_atime
-is set to the current time.
-.IP \[bu]
-.I shm_lpid
-is set to the process-ID of the calling process.
-.IP \[bu]
-.I shm_nattch
-is incremented by one.
-.\"
-.SS shmdt()
-.BR shmdt ()
-detaches the shared memory segment located at the address specified by
-.I shmaddr
-from the address space of the calling process.
-The to-be-detached segment must be currently
-attached with
-.I shmaddr
-equal to the value returned by the attaching
-.BR shmat ()
-call.
-.PP
-On a successful
-.BR shmdt ()
-call, the system updates the members of the
-.I shmid_ds
-structure associated with the shared memory segment as follows:
-.IP \[bu] 3
-.I shm_dtime
-is set to the current time.
-.IP \[bu]
-.I shm_lpid
-is set to the process-ID of the calling process.
-.IP \[bu]
-.I shm_nattch
-is decremented by one.
-If it becomes 0 and the segment is marked for deletion,
-the segment is deleted.
-.SH RETURN VALUE
-On success,
-.BR shmat ()
-returns the address of the attached shared memory segment; on error,
-.I (void\ *)\ \-1
-is returned, and
-.I errno
-is set to indicate the error.
-.PP
-On success,
-.BR shmdt ()
-returns 0; on error \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.BR shmat ()
-can fail with one of the following errors:
-.TP
-.B EACCES
-The calling process does not have the required permissions for
-the requested attach type, and does not have the
-.B CAP_IPC_OWNER
-capability in the user namespace that governs its IPC namespace.
-.TP
-.B EIDRM
-\fIshmid\fP points to a removed identifier.
-.TP
-.B EINVAL
-Invalid
-.I shmid
-value, unaligned (i.e., not page-aligned and \fBSHM_RND\fP was not
-specified) or invalid
-.I shmaddr
-value, or can't attach segment at
-.IR shmaddr ,
-or
-.B SHM_REMAP
-was specified and
-.I shmaddr
-was NULL.
-.TP
-.B ENOMEM
-Could not allocate memory for the descriptor or for the page tables.
-.PP
-.BR shmdt ()
-can fail with one of the following errors:
-.TP
-.B EINVAL
-There is no shared memory segment attached at
-.IR shmaddr ;
-or,
-.\" The following since Linux 2.6.17-rc1:
-.I shmaddr
-is not aligned on a page boundary.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4.
-.\" SVr4 documents an additional error condition EMFILE.
-.PP
-In SVID 3 (or perhaps earlier),
-the type of the \fIshmaddr\fP argument was changed from
-.I "char\ *"
-into
-.IR "const void\ *" ,
-and the returned type of
-.BR shmat ()
-from
-.I "char\ *"
-into
-.IR "void\ *" .
-.SH NOTES
-After a
-.BR fork (2),
-the child inherits the attached shared memory segments.
-.PP
-After an
-.BR execve (2),
-all attached shared memory segments are detached from the process.
-.PP
-Upon
-.BR _exit (2),
-all attached shared memory segments are detached from the process.
-.PP
-Using
-.BR shmat ()
-with
-.I shmaddr
-equal to NULL
-is the preferred, portable way of attaching a shared memory segment.
-Be aware that the shared memory segment attached in this way
-may be attached at different addresses in different processes.
-Therefore, any pointers maintained within the shared memory must be
-made relative (typically to the starting address of the segment),
-rather than absolute.
-.PP
-On Linux, it is possible to attach a shared memory segment even if it
-is already marked to be deleted.
-However, POSIX.1 does not specify this behavior and
-many other implementations do not support it.
-.PP
-The following system parameter affects
-.BR shmat ():
-.TP
-.B SHMLBA
-Segment low boundary address multiple.
-When explicitly specifying an attach address in a call to
-.BR shmat (),
-the caller should ensure that the address is a multiple of this value.
-This is necessary on some architectures,
-in order either to ensure good CPU cache performance or to ensure that
-different attaches of the same segment have consistent views
-within the CPU cache.
-.B SHMLBA
-is normally some multiple of the system page size.
-(On many Linux architectures,
-.B SHMLBA
-is the same as the system page size.)
-.PP
-The implementation places no intrinsic per-process limit on the
-number of shared memory segments
-.RB ( SHMSEG ).
-.SH EXAMPLES
-The two programs shown below exchange a string using a shared memory segment.
-Further details about the programs are given below.
-First, we show a shell session demonstrating their use.
-.PP
-In one terminal window, we run the "reader" program,
-which creates a System V shared memory segment and a System V semaphore set.
-The program prints out the IDs of the created objects,
-and then waits for the semaphore to change value.
-.PP
-.in +4n
-.EX
-$ \fB./svshm_string_read\fP
-shmid = 1114194; semid = 15
-.EE
-.in
-.PP
-In another terminal window, we run the "writer" program.
-The "writer" program takes three command-line arguments:
-the IDs of the shared memory segment and semaphore set created
-by the "reader", and a string.
-It attaches the existing shared memory segment,
-copies the string to the shared memory, and modifies the semaphore value.
-.PP
-.in +4n
-.EX
-$ \fB./svshm_string_write 1114194 15 \[aq]Hello, world\[aq]\fP
-.EE
-.in
-.PP
-Returning to the terminal where the "reader" is running,
-we see that the program has ceased waiting on the semaphore
-and has printed the string that was copied into the
-shared memory segment by the writer:
-.PP
-.in +4n
-.EX
-Hello, world
-.EE
-.in
-.\"
-.SS Program source: svshm_string.h
-The following header file is included by the "reader" and "writer" programs:
-.PP
-.in +4n
-.\" SRC BEGIN (svshm_string.h)
-.EX
-/* svshm_string.h
-\&
- Licensed under GNU General Public License v2 or later.
-*/
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#include <sys/sem.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \e
- } while (0)
-\&
-union semun { /* Used in calls to semctl() */
- int val;
- struct semid_ds * buf;
- unsigned short * array;
-#if defined(__linux__)
- struct seminfo * __buf;
-#endif
-};
-\&
-#define MEM_SIZE 4096
-.EE
-.\" SRC END
-.in
-.\"
-.SS Program source: svshm_string_read.c
-The "reader" program creates a shared memory segment and a semaphore set
-containing one semaphore.
-It then attaches the shared memory object into its address space
-and initializes the semaphore value to 1.
-Finally, the program waits for the semaphore value to become 0,
-and afterwards prints the string that has been copied into the
-shared memory segment by the "writer".
-.PP
-.in +4n
-.\" SRC BEGIN (svshm_string_read.c)
-.EX
-/* svshm_string_read.c
-\&
- Licensed under GNU General Public License v2 or later.
-*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/ipc.h>
-#include <sys/sem.h>
-#include <sys/shm.h>
-\&
-#include "svshm_string.h"
-\&
-int
-main(void)
-{
- int semid, shmid;
- char *addr;
- union semun arg, dummy;
- struct sembuf sop;
-\&
- /* Create shared memory and semaphore set containing one
- semaphore. */
-\&
- shmid = shmget(IPC_PRIVATE, MEM_SIZE, IPC_CREAT | 0600);
- if (shmid == \-1)
- errExit("shmget");
-\&
- semid = semget(IPC_PRIVATE, 1, IPC_CREAT | 0600);
- if (semid == \-1)
- errExit("semget");
-\&
- /* Attach shared memory into our address space. */
-\&
- addr = shmat(shmid, NULL, SHM_RDONLY);
- if (addr == (void *) \-1)
- errExit("shmat");
-\&
- /* Initialize semaphore 0 in set with value 1. */
-\&
- arg.val = 1;
- if (semctl(semid, 0, SETVAL, arg) == \-1)
- errExit("semctl");
-\&
- printf("shmid = %d; semid = %d\en", shmid, semid);
-\&
- /* Wait for semaphore value to become 0. */
-\&
- sop.sem_num = 0;
- sop.sem_op = 0;
- sop.sem_flg = 0;
-\&
- if (semop(semid, &sop, 1) == \-1)
- errExit("semop");
-\&
- /* Print the string from shared memory. */
-\&
- printf("%s\en", addr);
-\&
- /* Remove shared memory and semaphore set. */
-\&
- if (shmctl(shmid, IPC_RMID, NULL) == \-1)
- errExit("shmctl");
- if (semctl(semid, 0, IPC_RMID, dummy) == \-1)
- errExit("semctl");
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.in
-.\"
-.SS Program source: svshm_string_write.c
-The writer program takes three command-line arguments:
-the IDs of the shared memory segment and semaphore set
-that have already been created by the "reader", and a string.
-It attaches the shared memory segment into its address space,
-and then decrements the semaphore value to 0 in order to inform the
-"reader" that it can now examine the contents of the shared memory.
-.PP
-.in +4n
-.\" SRC BEGIN (svshm_string_write.c)
-.EX
-/* svshm_string_write.c
-\&
- Licensed under GNU General Public License v2 or later.
-*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/sem.h>
-#include <sys/shm.h>
-\&
-#include "svshm_string.h"
-\&
-int
-main(int argc, char *argv[])
-{
- int semid, shmid;
- char *addr;
- size_t len;
- struct sembuf sop;
-\&
- if (argc != 4) {
- fprintf(stderr, "Usage: %s shmid semid string\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- len = strlen(argv[3]) + 1; /* +1 to include trailing \[aq]\e0\[aq] */
- if (len > MEM_SIZE) {
- fprintf(stderr, "String is too big!\en");
- exit(EXIT_FAILURE);
- }
-\&
- /* Get object IDs from command\-line. */
-\&
- shmid = atoi(argv[1]);
- semid = atoi(argv[2]);
-\&
- /* Attach shared memory into our address space and copy string
- (including trailing null byte) into memory. */
-\&
- addr = shmat(shmid, NULL, 0);
- if (addr == (void *) \-1)
- errExit("shmat");
-\&
- memcpy(addr, argv[3], len);
-\&
- /* Decrement semaphore to 0. */
-\&
- sop.sem_num = 0;
- sop.sem_op = \-1;
- sop.sem_flg = 0;
-\&
- if (semop(semid, &sop, 1) == \-1)
- errExit("semop");
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.in
-.SH SEE ALSO
-.BR brk (2),
-.BR mmap (2),
-.BR shmctl (2),
-.BR shmget (2),
-.BR capabilities (7),
-.BR shm_overview (7),
-.BR sysvipc (7)
diff --git a/man2/shutdown.2 b/man2/shutdown.2
deleted file mode 100644
index 41fcc61d4..000000000
--- a/man2/shutdown.2
+++ /dev/null
@@ -1,98 +0,0 @@
-.\" Copyright (c) 1983, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" $Id: shutdown.2,v 1.1.1.1 1999/03/21 22:52:23 freitag Exp $
-.\"
-.\" Modified Sat Jul 24 09:57:55 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Tue Oct 22 22:04:51 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1998 by Andi Kleen
-.\"
-.TH shutdown 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-shutdown \- shut down part of a full-duplex connection
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.PP
-.BI "int shutdown(int " sockfd ", int " how );
-.fi
-.SH DESCRIPTION
-The
-.BR shutdown ()
-call causes all or part of a full-duplex connection on the socket
-associated with
-.I sockfd
-to be shut down.
-If
-.I how
-is
-.BR SHUT_RD ,
-further receptions will be disallowed.
-If
-.I how
-is
-.BR SHUT_WR ,
-further transmissions will be disallowed.
-If
-.I how
-is
-.BR SHUT_RDWR ,
-further receptions and transmissions will be disallowed.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I sockfd
-is not a valid file descriptor.
-.TP
-.B EINVAL
-An invalid value was specified in
-.I how
-(but see BUGS).
-.TP
-.B ENOTCONN
-The specified socket is not connected.
-.TP
-.B ENOTSOCK
-The file descriptor
-.I sockfd
-does not refer to a socket.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, 4.4BSD
-(first appeared in 4.2BSD).
-.SH NOTES
-The constants
-.BR SHUT_RD ,
-.BR SHUT_WR ,
-.B SHUT_RDWR
-have the value 0, 1, 2,
-respectively, and are defined in
-.I <sys/socket.h>
-since glibc-2.1.91.
-.SH BUGS
-Checks for the validity of
-.I how
-are done in domain-specific code,
-and before Linux 3.7 not all domains performed these checks.
-.\" https://bugzilla.kernel.org/show_bug.cgi?id=47111
-Most notably, UNIX domain sockets simply ignored invalid values.
-This problem was fixed for UNIX domain sockets
-.\" commit fc61b928dc4d72176cf4bd4d30bf1d22e599aefc
-.\" and for DECnet sockets in commit 46b66d7077b89fb4917ceef19b3f7dd86055c94a
-in Linux 3.7.
-.SH SEE ALSO
-.BR close (2),
-.BR connect (2),
-.BR socket (2),
-.BR socket (7)
diff --git a/man2/sigaction.2 b/man2/sigaction.2
deleted file mode 100644
index 662100c82..000000000
--- a/man2/sigaction.2
+++ /dev/null
@@ -1,1203 +0,0 @@
-.\" Copyright (c) 1994,1995 Mike Battersby <mib@deakin.edu.au>
-.\" and Copyright 2004, 2005 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" based on work by faith@cs.unc.edu
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified, aeb, 960424
-.\" Modified Fri Jan 31 17:31:20 1997 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Thu Nov 26 02:12:45 1998 by aeb - add SIGCHLD stuff.
-.\" Modified Sat May 8 17:40:19 1999 by Matthew Wilcox
-.\" add POSIX.1b signals
-.\" Modified Sat Dec 29 01:44:52 2001 by Evan Jones <ejones@uwaterloo.ca>
-.\" SA_ONSTACK
-.\" Modified 2004-11-11 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added mention of SIGCONT under SA_NOCLDSTOP
-.\" Added SA_NOCLDWAIT
-.\" Modified 2004-11-17 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Updated discussion for POSIX.1-2001 and SIGCHLD and sa_flags.
-.\" Formatting fixes
-.\" 2004-12-09, mtk, added SI_TKILL + other minor changes
-.\" 2005-09-15, mtk, split sigpending(), sigprocmask(), sigsuspend()
-.\" out of this page into separate pages.
-.\" 2010-06-11 Andi Kleen, add hwpoison signal extensions
-.\" 2010-06-11 mtk, improvements to discussion of various siginfo_t fields.
-.\" 2015-01-17, Kees Cook <keescook@chromium.org>
-.\" Added notes on ptrace SIGTRAP and SYS_SECCOMP.
-.\"
-.TH sigaction 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sigaction, rt_sigaction \- examine and change a signal action
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.BI "int sigaction(int " signum ,
-.BI " const struct sigaction *_Nullable restrict " act ,
-.BI " struct sigaction *_Nullable restrict " oldact );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sigaction ():
-.nf
- _POSIX_C_SOURCE
-.fi
-.PP
-.IR siginfo_t :
-.nf
- _POSIX_C_SOURCE >= 199309L
-.fi
-.SH DESCRIPTION
-The
-.BR sigaction ()
-system call is used to change the action taken by a process on
-receipt of a specific signal.
-(See
-.BR signal (7)
-for an overview of signals.)
-.PP
-.I signum
-specifies the signal and can be any valid signal except
-.B SIGKILL
-and
-.BR SIGSTOP .
-.PP
-If
-.I act
-is non-NULL, the new action for signal
-.I signum
-is installed from
-.IR act .
-If
-.I oldact
-is non-NULL, the previous action is saved in
-.IR oldact .
-.PP
-The
-.I sigaction
-structure is defined as something like:
-.PP
-.in +4n
-.EX
-struct sigaction {
- void (*sa_handler)(int);
- void (*sa_sigaction)(int, siginfo_t *, void *);
- sigset_t sa_mask;
- int sa_flags;
- void (*sa_restorer)(void);
-};
-.EE
-.in
-.PP
-On some architectures a union is involved: do not assign to both
-.I sa_handler
-and
-.IR sa_sigaction .
-.PP
-The
-.I sa_restorer
-field is not intended for application use.
-(POSIX does not specify a
-.I sa_restorer
-field.)
-Some further details of the purpose of this field can be found in
-.BR sigreturn (2).
-.PP
-.I sa_handler
-specifies the action to be associated with
-.I signum
-and can be one of the following:
-.IP \[bu] 3
-.B SIG_DFL
-for the default action.
-.IP \[bu]
-.B SIG_IGN
-to ignore this signal.
-.IP \[bu]
-A pointer to a signal handling function.
-This function receives the signal number as its only argument.
-.PP
-If
-.B SA_SIGINFO
-is specified in
-.IR sa_flags ,
-then
-.I sa_sigaction
-(instead of
-.IR sa_handler )
-specifies the signal-handling function for
-.IR signum .
-This function receives three arguments, as described below.
-.PP
-.I sa_mask
-specifies a mask of signals which should be blocked
-(i.e., added to the signal mask of the thread in which
-the signal handler is invoked)
-during execution of the signal handler.
-In addition, the signal which triggered the handler
-will be blocked, unless the
-.B SA_NODEFER
-flag is used.
-.PP
-.I sa_flags
-specifies a set of flags which modify the behavior of the signal.
-It is formed by the bitwise OR of zero or more of the following:
-.TP
-.B SA_NOCLDSTOP
-If
-.I signum
-is
-.BR SIGCHLD ,
-do not receive notification when child processes stop (i.e., when they
-receive one of
-.BR SIGSTOP ", " SIGTSTP ", " SIGTTIN ,
-or
-.BR SIGTTOU )
-or resume (i.e., they receive
-.BR SIGCONT )
-(see
-.BR wait (2)).
-This flag is meaningful only when establishing a handler for
-.BR SIGCHLD .
-.TP
-.BR SA_NOCLDWAIT " (since Linux 2.6)"
-.\" To be precise: Linux 2.5.60 -- MTK
-If
-.I signum
-is
-.BR SIGCHLD ,
-do not transform children into zombies when they terminate.
-See also
-.BR waitpid (2).
-This flag is meaningful only when establishing a handler for
-.BR SIGCHLD ,
-or when setting that signal's disposition to
-.BR SIG_DFL .
-.IP
-If the
-.B SA_NOCLDWAIT
-flag is set when establishing a handler for
-.BR SIGCHLD ,
-POSIX.1 leaves it unspecified whether a
-.B SIGCHLD
-signal is generated when a child process terminates.
-On Linux, a
-.B SIGCHLD
-signal is generated in this case;
-on some other implementations, it is not.
-.TP
-.B SA_NODEFER
-Do not add the signal to the thread's signal mask while the
-handler is executing, unless the signal is specified in
-.IR act.sa_mask .
-Consequently, a further instance of the signal may be delivered
-to the thread while it is executing the handler.
-This flag is meaningful only when establishing a signal handler.
-.IP
-.B SA_NOMASK
-is an obsolete, nonstandard synonym for this flag.
-.TP
-.B SA_ONSTACK
-Call the signal handler on an alternate signal stack provided by
-.BR sigaltstack (2).
-If an alternate stack is not available, the default stack will be used.
-This flag is meaningful only when establishing a signal handler.
-.TP
-.B SA_RESETHAND
-Restore the signal action to the default upon entry to the signal handler.
-This flag is meaningful only when establishing a signal handler.
-.IP
-.B SA_ONESHOT
-is an obsolete, nonstandard synonym for this flag.
-.TP
-.B SA_RESTART
-Provide behavior compatible with BSD signal semantics by making certain
-system calls restartable across signals.
-This flag is meaningful only when establishing a signal handler.
-See
-.BR signal (7)
-for a discussion of system call restarting.
-.TP
-.B SA_RESTORER
-.IR "Not intended for application use" .
-This flag is used by C libraries to indicate that the
-.I sa_restorer
-field contains the address of a "signal trampoline".
-See
-.BR sigreturn (2)
-for more details.
-.TP
-.BR SA_SIGINFO " (since Linux 2.2)"
-The signal handler takes three arguments, not one.
-In this case,
-.I sa_sigaction
-should be set instead of
-.IR sa_handler .
-This flag is meaningful only when establishing a signal handler.
-.\" (The
-.\" .I sa_sigaction
-.\" field was added in Linux 2.1.86.)
-.\"
-.TP
-.BR SA_UNSUPPORTED " (since Linux 5.11)"
-Used to dynamically probe for flag bit support.
-.IP
-If an attempt to register a handler succeeds with this flag set in
-.I act\->sa_flags
-alongside other flags that are potentially unsupported by the kernel,
-and an immediately subsequent
-.BR sigaction ()
-call specifying the same signal number and with a non-NULL
-.I oldact
-argument yields
-.B SA_UNSUPPORTED
-.I clear
-in
-.IR oldact\->sa_flags ,
-then
-.I oldact\->sa_flags
-may be used as a bitmask
-describing which of the potentially unsupported flags are,
-in fact, supported.
-See the section "Dynamically probing for flag bit support"
-below for more details.
-.TP
-.BR SA_EXPOSE_TAGBITS " (since Linux 5.11)"
-Normally, when delivering a signal,
-an architecture-specific set of tag bits are cleared from the
-.I si_addr
-field of
-.IR siginfo_t .
-If this flag is set,
-an architecture-specific subset of the tag bits will be preserved in
-.IR si_addr .
-.IP
-Programs that need to be compatible with Linux versions older than 5.11
-must use
-.B SA_UNSUPPORTED
-to probe for support.
-.SS The siginfo_t argument to a SA_SIGINFO handler
-When the
-.B SA_SIGINFO
-flag is specified in
-.IR act.sa_flags ,
-the signal handler address is passed via the
-.I act.sa_sigaction
-field.
-This handler takes three arguments, as follows:
-.PP
-.in +4n
-.EX
-void
-handler(int sig, siginfo_t *info, void *ucontext)
-{
- ...
-}
-.EE
-.in
-.PP
-These three arguments are as follows
-.TP
-.I sig
-The number of the signal that caused invocation of the handler.
-.TP
-.I info
-A pointer to a
-.IR siginfo_t ,
-which is a structure containing further information about the signal,
-as described below.
-.TP
-.I ucontext
-This is a pointer to a
-.I ucontext_t
-structure, cast to \fIvoid\ *\fP.
-The structure pointed to by this field contains
-signal context information that was saved
-on the user-space stack by the kernel; for details, see
-.BR sigreturn (2).
-Further information about the
-.I ucontext_t
-structure can be found in
-.BR getcontext (3)
-and
-.BR signal (7).
-Commonly, the handler function doesn't make any use of the third argument.
-.PP
-The
-.I siginfo_t
-data type is a structure with the following fields:
-.PP
-.in +4n
-.EX
-siginfo_t {
- int si_signo; /* Signal number */
- int si_errno; /* An errno value */
- int si_code; /* Signal code */
- int si_trapno; /* Trap number that caused
- hardware\-generated signal
- (unused on most architectures) */
-.\" FIXME
-.\" The siginfo_t 'si_trapno' field seems to be used
-.\" only on SPARC and Alpha; this page could use
-.\" a little more detail on its purpose there.
- pid_t si_pid; /* Sending process ID */
- uid_t si_uid; /* Real user ID of sending process */
- int si_status; /* Exit value or signal */
- clock_t si_utime; /* User time consumed */
- clock_t si_stime; /* System time consumed */
- union sigval si_value; /* Signal value */
- int si_int; /* POSIX.1b signal */
- void *si_ptr; /* POSIX.1b signal */
- int si_overrun; /* Timer overrun count;
- POSIX.1b timers */
- int si_timerid; /* Timer ID; POSIX.1b timers */
-.\" In the kernel: si_tid
- void *si_addr; /* Memory location which caused fault */
- long si_band; /* Band event (was \fIint\fP in
- glibc 2.3.2 and earlier) */
- int si_fd; /* File descriptor */
- short si_addr_lsb; /* Least significant bit of address
- (since Linux 2.6.32) */
- void *si_lower; /* Lower bound when address violation
- occurred (since Linux 3.19) */
- void *si_upper; /* Upper bound when address violation
- occurred (since Linux 3.19) */
- int si_pkey; /* Protection key on PTE that caused
- fault (since Linux 4.6) */
- void *si_call_addr; /* Address of system call instruction
- (since Linux 3.5) */
- int si_syscall; /* Number of attempted system call
- (since Linux 3.5) */
- unsigned int si_arch; /* Architecture of attempted system call
- (since Linux 3.5) */
-}
-.EE
-.in
-.PP
-.IR si_signo ", " si_errno " and " si_code
-are defined for all signals.
-.RI ( si_errno
-is generally unused on Linux.)
-The rest of the struct may be a union, so that one should
-read only the fields that are meaningful for the given signal:
-.IP \[bu] 3
-Signals sent with
-.BR kill (2)
-and
-.BR sigqueue (3)
-fill in
-.IR si_pid " and " si_uid .
-In addition, signals sent with
-.BR sigqueue (3)
-fill in
-.IR si_int " and " si_ptr
-with the values specified by the sender of the signal;
-see
-.BR sigqueue (3)
-for more details.
-.IP \[bu]
-Signals sent by POSIX.1b timers (since Linux 2.6) fill in
-.I si_overrun
-and
-.IR si_timerid .
-The
-.I si_timerid
-field is an internal ID used by the kernel to identify
-the timer; it is not the same as the timer ID returned by
-.BR timer_create (2).
-The
-.I si_overrun
-field is the timer overrun count;
-this is the same information as is obtained by a call to
-.BR timer_getoverrun (2).
-These fields are nonstandard Linux extensions.
-.IP \[bu]
-Signals sent for message queue notification (see the description of
-.B SIGEV_SIGNAL
-in
-.BR mq_notify (3))
-fill in
-.IR si_int / si_ptr ,
-with the
-.I sigev_value
-supplied to
-.BR mq_notify (3);
-.IR si_pid ,
-with the process ID of the message sender; and
-.IR si_uid ,
-with the real user ID of the message sender.
-.IP \[bu]
-.B SIGCHLD
-fills in
-.IR si_pid ", " si_uid ", " si_status ", " si_utime ", and " si_stime ,
-providing information about the child.
-The
-.I si_pid
-field is the process ID of the child;
-.I si_uid
-is the child's real user ID.
-The
-.I si_status
-field contains the exit status of the child (if
-.I si_code
-is
-.BR CLD_EXITED ),
-or the signal number that caused the process to change state.
-The
-.I si_utime
-and
-.I si_stime
-contain the user and system CPU time used by the child process;
-these fields do not include the times used by waited-for children (unlike
-.BR getrusage (2)
-and
-.BR times (2)).
-Up to Linux 2.6, and since Linux 2.6.27, these fields report
-CPU time in units of
-.IR sysconf(_SC_CLK_TCK) .
-In Linux 2.6 kernels before Linux 2.6.27,
-a bug meant that these fields reported time in units
-of the (configurable) system jiffy (see
-.BR time (7)).
-.\" FIXME .
-.\" When si_utime and si_stime where originally implemented, the
-.\" measurement unit was HZ, which was the same as clock ticks
-.\" (sysconf(_SC_CLK_TCK)). In Linux 2.6, HZ became configurable, and
-.\" was *still* used as the unit to return the info these fields,
-.\" with the result that the field values depended on the
-.\" configured HZ. Of course, the should have been measured in
-.\" USER_HZ instead, so that sysconf(_SC_CLK_TCK) could be used to
-.\" convert to seconds. I have a queued patch to fix this:
-.\" http://thread.gmane.org/gmane.linux.kernel/698061/ .
-.\" This patch made it into Linux 2.6.27.
-.\" But note that these fields still don't return the times of
-.\" waited-for children (as is done by getrusage() and times()
-.\" and wait4()). Solaris 8 does include child times.
-.IP \[bu]
-.BR SIGILL ,
-.BR SIGFPE ,
-.BR SIGSEGV ,
-.BR SIGBUS ,
-and
-.B SIGTRAP
-fill in
-.I si_addr
-with the address of the fault.
-On some architectures,
-these signals also fill in the
-.I si_trapno
-field.
-.IP
-Some suberrors of
-.BR SIGBUS ,
-in particular
-.B BUS_MCEERR_AO
-and
-.BR BUS_MCEERR_AR ,
-also fill in
-.IR si_addr_lsb .
-This field indicates the least significant bit of the reported address
-and therefore the extent of the corruption.
-For example, if a full page was corrupted,
-.I si_addr_lsb
-contains
-.IR log2(sysconf(_SC_PAGESIZE)) .
-When
-.B SIGTRAP
-is delivered in response to a
-.BR ptrace (2)
-event (PTRACE_EVENT_foo),
-.I si_addr
-is not populated, but
-.I si_pid
-and
-.I si_uid
-are populated with the respective process ID and user ID responsible for
-delivering the trap.
-In the case of
-.BR seccomp (2),
-the tracee will be shown as delivering the event.
-.B BUS_MCEERR_*
-and
-.I si_addr_lsb
-are Linux-specific extensions.
-.IP
-The
-.B SEGV_BNDERR
-suberror of
-.B SIGSEGV
-populates
-.I si_lower
-and
-.IR si_upper .
-.IP
-The
-.B SEGV_PKUERR
-suberror of
-.B SIGSEGV
-populates
-.IR si_pkey .
-.IP \[bu]
-.BR SIGIO / SIGPOLL
-(the two names are synonyms on Linux)
-fills in
-.I si_band
-and
-.IR si_fd .
-The
-.I si_band
-event is a bit mask containing the same values as are filled in the
-.I revents
-field by
-.BR poll (2).
-The
-.I si_fd
-field indicates the file descriptor for which the I/O event occurred;
-for further details, see the description of
-.B F_SETSIG
-in
-.BR fcntl (2).
-.IP \[bu]
-.BR SIGSYS ,
-generated (since Linux 3.5)
-.\" commit a0727e8ce513fe6890416da960181ceb10fbfae6
-when a seccomp filter returns
-.BR SECCOMP_RET_TRAP ,
-fills in
-.IR si_call_addr ,
-.IR si_syscall ,
-.IR si_arch ,
-.IR si_errno ,
-and other fields as described in
-.BR seccomp (2).
-.\"
-.SS
-The si_code field
-The
-.I si_code
-field inside the
-.I siginfo_t
-argument that is passed to a
-.B SA_SIGINFO
-signal handler is a value (not a bit mask)
-indicating why this signal was sent.
-For a
-.BR ptrace (2)
-event,
-.I si_code
-will contain
-.B SIGTRAP
-and have the ptrace event in the high byte:
-.PP
-.in +4n
-.EX
-(SIGTRAP | PTRACE_EVENT_foo << 8).
-.EE
-.in
-.PP
-For a
-.RB non- ptrace (2)
-event, the values that can appear in
-.I si_code
-are described in the remainder of this section.
-Since glibc 2.20,
-the definitions of most of these symbols are obtained from
-.I <signal.h>
-by defining feature test macros (before including
-.I any
-header file) as follows:
-.IP \[bu] 3
-.B _XOPEN_SOURCE
-with the value 500 or greater;
-.IP \[bu]
-.B _XOPEN_SOURCE
-and
-.BR _XOPEN_SOURCE_EXTENDED ;
-or
-.IP \[bu]
-.B _POSIX_C_SOURCE
-with the value 200809L or greater.
-.PP
-For the
-.B TRAP_*
-constants, the symbol definitions are provided only in the first two cases.
-Before glibc 2.20, no feature test macros were required to obtain these symbols.
-.PP
-For a regular signal, the following list shows the values which can be
-placed in
-.I si_code
-for any signal, along with the reason that the signal was generated.
-.RS 4
-.TP
-.B SI_USER
-.BR kill (2).
-.TP
-.B SI_KERNEL
-Sent by the kernel.
-.TP
-.B SI_QUEUE
-.BR sigqueue (3).
-.TP
-.B SI_TIMER
-POSIX timer expired.
-.TP
-.BR SI_MESGQ " (since Linux 2.6.6)"
-POSIX message queue state changed; see
-.BR mq_notify (3).
-.TP
-.B SI_ASYNCIO
-AIO completed.
-.TP
-.B SI_SIGIO
-Queued
-.B SIGIO
-(only up to Linux 2.2; from Linux 2.4 onward
-.BR SIGIO / SIGPOLL
-fills in
-.I si_code
-as described below).
-.TP
-.BR SI_TKILL " (since Linux 2.4.19)"
-.BR tkill (2)
-or
-.BR tgkill (2).
-.\" SI_DETHREAD is defined in Linux 2.6.9 sources, but isn't implemented
-.\" It appears to have been an idea that was tried during 2.5.6
-.\" through to Linux 2.5.24 and then was backed out.
-.RE
-.PP
-The following values can be placed in
-.I si_code
-for a
-.B SIGILL
-signal:
-.RS 4
-.TP
-.B ILL_ILLOPC
-Illegal opcode.
-.TP
-.B ILL_ILLOPN
-Illegal operand.
-.TP
-.B ILL_ILLADR
-Illegal addressing mode.
-.TP
-.B ILL_ILLTRP
-Illegal trap.
-.TP
-.B ILL_PRVOPC
-Privileged opcode.
-.TP
-.B ILL_PRVREG
-Privileged register.
-.TP
-.B ILL_COPROC
-Coprocessor error.
-.TP
-.B ILL_BADSTK
-Internal stack error.
-.RE
-.PP
-The following values can be placed in
-.I si_code
-for a
-.B SIGFPE
-signal:
-.RS 4
-.TP
-.B FPE_INTDIV
-Integer divide by zero.
-.TP
-.B FPE_INTOVF
-Integer overflow.
-.TP
-.B FPE_FLTDIV
-Floating-point divide by zero.
-.TP
-.B FPE_FLTOVF
-Floating-point overflow.
-.TP
-.B FPE_FLTUND
-Floating-point underflow.
-.TP
-.B FPE_FLTRES
-Floating-point inexact result.
-.TP
-.B FPE_FLTINV
-Floating-point invalid operation.
-.TP
-.B FPE_FLTSUB
-Subscript out of range.
-.RE
-.PP
-The following values can be placed in
-.I si_code
-for a
-.B SIGSEGV
-signal:
-.RS 4
-.TP
-.B SEGV_MAPERR
-Address not mapped to object.
-.TP
-.B SEGV_ACCERR
-Invalid permissions for mapped object.
-.TP
-.BR SEGV_BNDERR " (since Linux 3.19)"
-.\" commit ee1b58d36aa1b5a79eaba11f5c3633c88231da83
-Failed address bound checks.
-.TP
-.BR SEGV_PKUERR " (since Linux 4.6)"
-.\" commit cd0ea35ff5511cde299a61c21a95889b4a71464e
-Access was denied by memory protection keys.
-See
-.BR pkeys (7).
-The protection key which applied to this access is available via
-.IR si_pkey .
-.RE
-.PP
-The following values can be placed in
-.I si_code
-for a
-.B SIGBUS
-signal:
-.RS 4
-.TP
-.B BUS_ADRALN
-Invalid address alignment.
-.TP
-.B BUS_ADRERR
-Nonexistent physical address.
-.TP
-.B BUS_OBJERR
-Object-specific hardware error.
-.TP
-.BR BUS_MCEERR_AR " (since Linux 2.6.32)"
-Hardware memory error consumed on a machine check; action required.
-.TP
-.BR BUS_MCEERR_AO " (since Linux 2.6.32)"
-Hardware memory error detected in process but not consumed; action optional.
-.RE
-.PP
-The following values can be placed in
-.I si_code
-for a
-.B SIGTRAP
-signal:
-.RS 4
-.TP
-.B TRAP_BRKPT
-Process breakpoint.
-.TP
-.B TRAP_TRACE
-Process trace trap.
-.TP
-.BR TRAP_BRANCH " (since Linux 2.4, IA64 only)"
-Process taken branch trap.
-.TP
-.BR TRAP_HWBKPT " (since Linux 2.4, IA64 only)"
-Hardware breakpoint/watchpoint.
-.RE
-.PP
-The following values can be placed in
-.I si_code
-for a
-.B SIGCHLD
-signal:
-.RS 4
-.TP
-.B CLD_EXITED
-Child has exited.
-.TP
-.B CLD_KILLED
-Child was killed.
-.TP
-.B CLD_DUMPED
-Child terminated abnormally.
-.TP
-.B CLD_TRAPPED
-Traced child has trapped.
-.TP
-.B CLD_STOPPED
-Child has stopped.
-.TP
-.BR CLD_CONTINUED " (since Linux 2.6.9)"
-Stopped child has continued.
-.RE
-.PP
-The following values can be placed in
-.I si_code
-for a
-.BR SIGIO / SIGPOLL
-signal:
-.RS 4
-.TP
-.B POLL_IN
-Data input available.
-.TP
-.B POLL_OUT
-Output buffers available.
-.TP
-.B POLL_MSG
-Input message available.
-.TP
-.B POLL_ERR
-I/O error.
-.TP
-.B POLL_PRI
-High priority input available.
-.TP
-.B POLL_HUP
-Device disconnected.
-.RE
-.PP
-The following value can be placed in
-.I si_code
-for a
-.B SIGSYS
-signal:
-.RS 4
-.TP
-.BR SYS_SECCOMP " (since Linux 3.5)"
-Triggered by a
-.BR seccomp (2)
-filter rule.
-.RE
-.SS Dynamically probing for flag bit support
-The
-.BR sigaction ()
-call on Linux accepts unknown bits set in
-.I act\->sa_flags
-without error.
-The behavior of the kernel starting with Linux 5.11 is that a second
-.BR sigaction ()
-will clear unknown bits from
-.IR oldact\->sa_flags .
-However, historically, a second
-.BR sigaction ()
-call would typically leave those bits set in
-.IR oldact\->sa_flags .
-.PP
-This means that support for new flags cannot be detected
-simply by testing for a flag in
-.IR sa_flags ,
-and a program must test that
-.B SA_UNSUPPORTED
-has been cleared before relying on the contents of
-.IR sa_flags .
-.PP
-Since the behavior of the signal handler cannot be guaranteed
-unless the check passes,
-it is wise to either block the affected signal
-while registering the handler and performing the check in this case,
-or where this is not possible,
-for example if the signal is synchronous, to issue the second
-.BR sigaction ()
-in the signal handler itself.
-.PP
-In kernels that do not support a specific flag,
-the kernel's behavior is as if the flag was not set,
-even if the flag was set in
-.IR act\->sa_flags .
-.PP
-The flags
-.BR SA_NOCLDSTOP ,
-.BR SA_NOCLDWAIT ,
-.BR SA_SIGINFO ,
-.BR SA_ONSTACK ,
-.BR SA_RESTART ,
-.BR SA_NODEFER ,
-.BR SA_RESETHAND ,
-and, if defined by the architecture,
-.B SA_RESTORER
-may not be reliably probed for using this mechanism,
-because they were introduced before Linux 5.11.
-However, in general, programs may assume that these flags are supported,
-since they have all been supported since Linux 2.6,
-which was released in the year 2003.
-.PP
-See EXAMPLES below for a demonstration of the use of
-.BR SA_UNSUPPORTED .
-.SH RETURN VALUE
-.BR sigaction ()
-returns 0 on success; on error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-.IR act " or " oldact
-points to memory which is not a valid part of the process address space.
-.TP
-.B EINVAL
-An invalid signal was specified.
-This will also be generated if an attempt
-is made to change the action for
-.BR SIGKILL " or " SIGSTOP ,
-which cannot be caught or ignored.
-.SH VERSIONS
-.SS C library/kernel differences
-The glibc wrapper function for
-.BR sigaction ()
-gives an error
-.RB ( EINVAL )
-on attempts to change the disposition of the two real-time signals
-used internally by the NPTL threading implementation.
-See
-.BR nptl (7)
-for details.
-.PP
-On architectures where the signal trampoline resides in the C library,
-the glibc wrapper function for
-.BR sigaction ()
-places the address of the trampoline code in the
-.I act.sa_restorer
-field and sets the
-.B SA_RESTORER
-flag in the
-.I act.sa_flags
-field.
-See
-.BR sigreturn (2).
-.PP
-The original Linux system call was named
-.BR sigaction ().
-However, with the addition of real-time signals in Linux 2.2,
-the fixed-size, 32-bit
-.I sigset_t
-type supported by that system call was no longer fit for purpose.
-Consequently, a new system call,
-.BR rt_sigaction (),
-was added to support an enlarged
-.I sigset_t
-type.
-The new system call takes a fourth argument,
-.IR "size_t sigsetsize" ,
-which specifies the size in bytes of the signal sets in
-.I act.sa_mask
-and
-.IR oldact.sa_mask .
-This argument is currently required to have the value
-.I sizeof(sigset_t)
-(or the error
-.B EINVAL
-results).
-The glibc
-.BR sigaction ()
-wrapper function hides these details from us, transparently calling
-.BR rt_sigaction ()
-when the kernel provides it.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4.
-.\" SVr4 does not document the EINTR condition.
-.PP
-POSIX.1-1990 disallowed setting the action for
-.B SIGCHLD
-to
-.BR SIG_IGN .
-POSIX.1-2001 and later allow this possibility, so that ignoring
-.B SIGCHLD
-can be used to prevent the creation of zombies (see
-.BR wait (2)).
-Nevertheless, the historical BSD and System\ V behaviors for ignoring
-.B SIGCHLD
-differ, so that the only completely portable method of ensuring that
-terminated children do not become zombies is to catch the
-.B SIGCHLD
-signal and perform a
-.BR wait (2)
-or similar.
-.PP
-POSIX.1-1990 specified only
-.BR SA_NOCLDSTOP .
-POSIX.1-2001 added
-.BR SA_NOCLDSTOP ,
-.BR SA_NOCLDWAIT ,
-.BR SA_NODEFER ,
-.BR SA_ONSTACK ,
-.BR SA_RESETHAND ,
-.BR SA_RESTART ,
-and
-.BR SA_SIGINFO .
-Use of these latter values in
-.I sa_flags
-may be less portable in applications intended for older
-UNIX implementations.
-.PP
-The
-.B SA_RESETHAND
-flag is compatible with the SVr4 flag of the same name.
-.PP
-The
-.B SA_NODEFER
-flag is compatible with the SVr4 flag of the same name under kernels
-1.3.9 and later.
-On older kernels the Linux implementation
-allowed the receipt of any signal, not just the one we are installing
-(effectively overriding any
-.I sa_mask
-settings).
-.SH NOTES
-A child created via
-.BR fork (2)
-inherits a copy of its parent's signal dispositions.
-During an
-.BR execve (2),
-the dispositions of handled signals are reset to the default;
-the dispositions of ignored signals are left unchanged.
-.PP
-According to POSIX, the behavior of a process is undefined after it
-ignores a
-.BR SIGFPE ,
-.BR SIGILL ,
-or
-.B SIGSEGV
-signal that was not generated by
-.BR kill (2)
-or
-.BR raise (3).
-Integer division by zero has undefined result.
-On some architectures it will generate a
-.B SIGFPE
-signal.
-(Also dividing the most negative integer by \-1 may generate
-.BR SIGFPE .)
-Ignoring this signal might lead to an endless loop.
-.PP
-.BR sigaction ()
-can be called with a NULL second argument to query the current signal
-handler.
-It can also be used to check whether a given signal is valid for
-the current machine by calling it with NULL second and third arguments.
-.PP
-It is not possible to block
-.BR SIGKILL " or " SIGSTOP
-(by specifying them in
-.IR sa_mask ).
-Attempts to do so are silently ignored.
-.PP
-See
-.BR sigsetops (3)
-for details on manipulating signal sets.
-.PP
-See
-.BR signal\-safety (7)
-for a list of the async-signal-safe functions that can be
-safely called inside from inside a signal handler.
-.\"
-.SS Undocumented
-Before the introduction of
-.BR SA_SIGINFO ,
-it was also possible to get some additional information about the signal.
-This was done by providing an
-.I sa_handler
-signal handler with a second argument of type
-.IR "struct sigcontext" ,
-which is the same structure as the one that is passed in the
-.I uc_mcontext
-field of the
-.I ucontext
-structure that is passed (via a pointer) in the third argument of the
-.I sa_sigaction
-handler.
-See the relevant Linux kernel sources for details.
-This use is obsolete now.
-.SH BUGS
-When delivering a signal with a
-.B SA_SIGINFO
-handler,
-the kernel does not always provide meaningful values
-for all of the fields of the
-.I siginfo_t
-that are relevant for that signal.
-.PP
-Up to and including Linux 2.6.13, specifying
-.B SA_NODEFER
-in
-.I sa_flags
-prevents not only the delivered signal from being masked during
-execution of the handler, but also the signals specified in
-.IR sa_mask .
-This bug was fixed in Linux 2.6.14.
-.\" commit 69be8f189653cd81aae5a74e26615b12871bb72e
-.SH EXAMPLES
-See
-.BR mprotect (2).
-.SS Probing for flag support
-The following example program exits with status
-.B EXIT_SUCCESS
-if
-.B SA_EXPOSE_TAGBITS
-is determined to be supported, and
-.B EXIT_FAILURE
-otherwise.
-.PP
-.\" SRC BEGIN (sigaction.c)
-.EX
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-void
-handler(int signo, siginfo_t *info, void *context)
-{
- struct sigaction oldact;
-\&
- if (sigaction(SIGSEGV, NULL, &oldact) == \-1
- || (oldact.sa_flags & SA_UNSUPPORTED)
- || !(oldact.sa_flags & SA_EXPOSE_TAGBITS))
- {
- _exit(EXIT_FAILURE);
- }
- _exit(EXIT_SUCCESS);
-}
-\&
-int
-main(void)
-{
- struct sigaction act = { 0 };
-\&
- act.sa_flags = SA_SIGINFO | SA_UNSUPPORTED | SA_EXPOSE_TAGBITS;
- act.sa_sigaction = &handler;
- if (sigaction(SIGSEGV, &act, NULL) == \-1) {
- perror("sigaction");
- exit(EXIT_FAILURE);
- }
-\&
- raise(SIGSEGV);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR kill (1),
-.BR kill (2),
-.BR pause (2),
-.BR pidfd_send_signal (2),
-.BR restart_syscall (2),
-.BR seccomp (2),
-.BR sigaltstack (2),
-.BR signal (2),
-.BR signalfd (2),
-.BR sigpending (2),
-.BR sigprocmask (2),
-.BR sigreturn (2),
-.BR sigsuspend (2),
-.BR wait (2),
-.BR killpg (3),
-.BR raise (3),
-.BR siginterrupt (3),
-.BR sigqueue (3),
-.BR sigsetops (3),
-.BR sigvec (3),
-.BR core (5),
-.BR signal (7)
diff --git a/man2/sigaltstack.2 b/man2/sigaltstack.2
deleted file mode 100644
index 6ae8a612c..000000000
--- a/man2/sigaltstack.2
+++ /dev/null
@@ -1,365 +0,0 @@
-'\" t
-.\" Copyright (c) 2001, 2017 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" aeb, various minor fixes
-.TH sigaltstack 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sigaltstack \- set and/or get signal stack context
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.BI "int sigaltstack(const stack_t *_Nullable restrict " ss ,
-.BI " stack_t *_Nullable restrict " old_ss );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sigaltstack ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
- || /* glibc <= 2.19: */ _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-.BR sigaltstack ()
-allows a thread to define a new alternate
-signal stack and/or retrieve the state of an existing
-alternate signal stack.
-An alternate signal stack is used during the
-execution of a signal handler if the establishment of that handler (see
-.BR sigaction (2))
-requested it.
-.PP
-The normal sequence of events for using an alternate signal stack
-is the following:
-.TP 3
-1.
-Allocate an area of memory to be used for the alternate
-signal stack.
-.TP
-2.
-Use
-.BR sigaltstack ()
-to inform the system of the existence and
-location of the alternate signal stack.
-.TP
-3.
-When establishing a signal handler using
-.BR sigaction (2),
-inform the system that the signal handler should be executed
-on the alternate signal stack by
-specifying the \fBSA_ONSTACK\fP flag.
-.PP
-The \fIss\fP argument is used to specify a new
-alternate signal stack, while the \fIold_ss\fP argument
-is used to retrieve information about the currently
-established signal stack.
-If we are interested in performing just one
-of these tasks, then the other argument can be specified as NULL.
-.PP
-The
-.I stack_t
-type used to type the arguments of this function is defined as follows:
-.PP
-.in +4n
-.EX
-typedef struct {
- void *ss_sp; /* Base address of stack */
- int ss_flags; /* Flags */
- size_t ss_size; /* Number of bytes in stack */
-} stack_t;
-.EE
-.in
-.PP
-To establish a new alternate signal stack,
-the fields of this structure are set as follows:
-.TP
-.I ss.ss_flags
-This field contains either 0, or the following flag:
-.RS
-.TP
-.BR SS_AUTODISARM " (since Linux 4.7)"
-.\" commit 2a74213838104a41588d86fd5e8d344972891ace
-.\" See tools/testing/selftests/sigaltstack/sas.c in kernel sources
-Clear the alternate signal stack settings on entry to the signal handler.
-When the signal handler returns,
-the previous alternate signal stack settings are restored.
-.IP
-This flag was added in order to make it safe
-to switch away from the signal handler with
-.BR swapcontext (3).
-Without this flag, a subsequently handled signal will corrupt
-the state of the switched-away signal handler.
-On kernels where this flag is not supported,
-.BR sigaltstack ()
-fails with the error
-.B EINVAL
-when this flag is supplied.
-.RE
-.TP
-.I ss.ss_sp
-This field specifies the starting address of the stack.
-When a signal handler is invoked on the alternate stack,
-the kernel automatically aligns the address given in \fIss.ss_sp\fP
-to a suitable address boundary for the underlying hardware architecture.
-.TP
-.I ss.ss_size
-This field specifies the size of the stack.
-The constant \fBSIGSTKSZ\fP is defined to be large enough
-to cover the usual size requirements for an alternate signal stack,
-and the constant \fBMINSIGSTKSZ\fP defines the minimum
-size required to execute a signal handler.
-.PP
-To disable an existing stack, specify \fIss.ss_flags\fP
-as \fBSS_DISABLE\fP.
-In this case, the kernel ignores any other flags in
-.I ss.ss_flags
-and the remaining fields
-in \fIss\fP.
-.PP
-If \fIold_ss\fP is not NULL, then it is used to return information about
-the alternate signal stack which was in effect prior to the
-call to
-.BR sigaltstack ().
-The \fIold_ss.ss_sp\fP and \fIold_ss.ss_size\fP fields return the starting
-address and size of that stack.
-The \fIold_ss.ss_flags\fP may return either of the following values:
-.TP
-.B SS_ONSTACK
-The thread is currently executing on the alternate signal stack.
-(Note that it is not possible
-to change the alternate signal stack if the thread is
-currently executing on it.)
-.TP
-.B SS_DISABLE
-The alternate signal stack is currently disabled.
-.IP
-Alternatively, this value is returned if the thread is currently
-executing on an alternate signal stack that was established using the
-.B SS_AUTODISARM
-flag.
-In this case, it is safe to switch away from the signal handler with
-.BR swapcontext (3).
-It is also possible to set up a different alternative signal stack
-using a further call to
-.BR sigaltstack ().
-.\" FIXME Was it intended that one can set up a different alternative
-.\" signal stack in this scenario? (In passing, if one does this, the
-.\" sigaltstack(NULL, &old_ss) now returns old_ss.ss_flags==SS_AUTODISARM
-.\" rather than old_ss.ss_flags==SS_DISABLE. The API design here seems
-.\" confusing...
-.TP
-.B SS_AUTODISARM
-The alternate signal stack has been marked to be autodisarmed
-as described above.
-.PP
-By specifying
-.I ss
-as NULL, and
-.I old_ss
-as a non-NULL value, one can obtain the current settings for
-the alternate signal stack without changing them.
-.SH RETURN VALUE
-.BR sigaltstack ()
-returns 0 on success, or \-1 on failure with
-\fIerrno\fP set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-Either \fIss\fP or \fIold_ss\fP is not NULL and points to an area
-outside of the process's address space.
-.TP
-.B EINVAL
-\fIss\fP is not NULL and the \fIss_flags\fP field contains
-an invalid flag.
-.TP
-.B ENOMEM
-The specified size of the new alternate signal stack
-.I ss.ss_size
-was less than
-.BR MINSIGSTKSZ .
-.TP
-.B EPERM
-An attempt was made to change the alternate signal stack while
-it was active (i.e., the thread was already executing
-on the current alternate signal stack).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sigaltstack ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.PP
-.B SS_AUTODISARM
-is a Linux extension.
-.SH HISTORY
-POSIX.1-2001, SUSv2, SVr4.
-.SH NOTES
-The most common usage of an alternate signal stack is to handle the
-.B SIGSEGV
-signal that is generated if the space available for the
-standard stack is exhausted: in this case, a signal handler for
-.B SIGSEGV
-cannot be invoked on the standard stack; if we wish to handle it,
-we must use an alternate signal stack.
-.PP
-Establishing an alternate signal stack is useful if a thread
-expects that it may exhaust its standard stack.
-This may occur, for example, because the stack grows so large
-that it encounters the upwardly growing heap, or it reaches a
-limit established by a call to \fBsetrlimit(RLIMIT_STACK, &rlim)\fP.
-If the standard stack is exhausted, the kernel sends
-the thread a \fBSIGSEGV\fP signal.
-In these circumstances the only way to catch this signal is
-on an alternate signal stack.
-.PP
-On most hardware architectures supported by Linux, stacks grow
-downward.
-.BR sigaltstack ()
-automatically takes account
-of the direction of stack growth.
-.PP
-Functions called from a signal handler executing on an alternate
-signal stack will also use the alternate signal stack.
-(This also applies to any handlers invoked for other signals while
-the thread is executing on the alternate signal stack.)
-Unlike the standard stack, the system does not
-automatically extend the alternate signal stack.
-Exceeding the allocated size of the alternate signal stack will
-lead to unpredictable results.
-.PP
-A successful call to
-.BR execve (2)
-removes any existing alternate
-signal stack.
-A child process created via
-.BR fork (2)
-inherits a copy of its parent's alternate signal stack settings.
-The same is also true for a child process created using
-.BR clone (2),
-unless the clone flags include
-.B CLONE_VM
-and do not include
-.BR CLONE_VFORK ,
-in which case any alternate signal stack that was established in the parent
-is disabled in the child process.
-.PP
-.BR sigaltstack ()
-supersedes the older
-.BR sigstack ()
-call.
-For backward compatibility, glibc also provides
-.BR sigstack ().
-All new applications should be written using
-.BR sigaltstack ().
-.SS History
-4.2BSD had a
-.BR sigstack ()
-system call.
-It used a slightly
-different struct, and had the major disadvantage that the caller
-had to know the direction of stack growth.
-.SH BUGS
-In Linux 2.2 and earlier, the only flag that could be specified
-in
-.I ss.sa_flags
-was
-.BR SS_DISABLE .
-In the lead up to the release of the Linux 2.4 kernel,
-.\" Linux 2.3.40
-.\" After quite a bit of web and mail archive searching,
-.\" I could not find the patch on any mailing list, and I
-.\" could find no place where the rationale for this change
-.\" explained -- mtk
-a change was made to allow
-.BR sigaltstack ()
-to allow
-.I ss.ss_flags==SS_ONSTACK
-with the same meaning as
-.I ss.ss_flags==0
-(i.e., the inclusion of
-.B SS_ONSTACK
-in
-.I ss.ss_flags
-is a no-op).
-On other implementations, and according to POSIX.1,
-.B SS_ONSTACK
-appears only as a reported flag in
-.IR old_ss.ss_flags .
-On Linux, there is no need ever to specify
-.B SS_ONSTACK
-in
-.IR ss.ss_flags ,
-and indeed doing so should be avoided on portability grounds:
-various other systems
-.\" See the source code of Illumos and FreeBSD, for example.
-give an error if
-.B SS_ONSTACK
-is specified in
-.IR ss.ss_flags .
-.SH EXAMPLES
-The following code segment demonstrates the use of
-.BR sigaltstack ()
-(and
-.BR sigaction (2))
-to install an alternate signal stack that is employed by a handler
-for the
-.B SIGSEGV
-signal:
-.PP
-.in +4n
-.EX
-stack_t ss;
-\&
-ss.ss_sp = malloc(SIGSTKSZ);
-if (ss.ss_sp == NULL) {
- perror("malloc");
- exit(EXIT_FAILURE);
-}
-\&
-ss.ss_size = SIGSTKSZ;
-ss.ss_flags = 0;
-if (sigaltstack(&ss, NULL) == \-1) {
- perror("sigaltstack");
- exit(EXIT_FAILURE);
-}
-\&
-sa.sa_flags = SA_ONSTACK;
-sa.sa_handler = handler(); /* Address of a signal handler */
-sigemptyset(&sa.sa_mask);
-if (sigaction(SIGSEGV, &sa, NULL) == \-1) {
- perror("sigaction");
- exit(EXIT_FAILURE);
-}
-.EE
-.in
-.SH SEE ALSO
-.BR execve (2),
-.BR setrlimit (2),
-.BR sigaction (2),
-.BR siglongjmp (3),
-.BR sigsetjmp (3),
-.BR signal (7)
diff --git a/man2/signal.2 b/man2/signal.2
deleted file mode 100644
index c05b0ee45..000000000
--- a/man2/signal.2
+++ /dev/null
@@ -1,280 +0,0 @@
-.\" Copyright (c) 2000 Andries Brouwer <aeb@cwi.nl>
-.\" and Copyright (c) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\" based on work by Rik Faith <faith@cs.unc.edu>
-.\" and Mike Battersby <mike@starbug.apana.org.au>.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 2004-11-19, mtk:
-.\" added pointer to sigaction.2 for details of ignoring SIGCHLD
-.\" 2007-06-03, mtk: strengthened portability warning, and rewrote
-.\" various sections.
-.\" 2008-07-11, mtk: rewrote and expanded portability discussion.
-.\"
-.TH signal 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-signal \- ANSI C signal handling
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.B typedef void (*sighandler_t)(int);
-.PP
-.BI "sighandler_t signal(int " signum ", sighandler_t " handler );
-.fi
-.SH DESCRIPTION
-.BR WARNING :
-the behavior of
-.BR signal ()
-varies across UNIX versions,
-and has also varied historically across different versions of Linux.
-\fBAvoid its use\fP: use
-.BR sigaction (2)
-instead.
-See \fIPortability\fP below.
-.PP
-.BR signal ()
-sets the disposition of the signal
-.I signum
-to
-.IR handler ,
-which is either
-.BR SIG_IGN ,
-.BR SIG_DFL ,
-or the address of a programmer-defined function (a "signal handler").
-.PP
-If the signal
-.I signum
-is delivered to the process, then one of the following happens:
-.TP 3
-*
-If the disposition is set to
-.BR SIG_IGN ,
-then the signal is ignored.
-.TP
-*
-If the disposition is set to
-.BR SIG_DFL ,
-then the default action associated with the signal (see
-.BR signal (7))
-occurs.
-.TP
-*
-If the disposition is set to a function,
-then first either the disposition is reset to
-.BR SIG_DFL ,
-or the signal is blocked (see \fIPortability\fP below), and then
-.I handler
-is called with argument
-.IR signum .
-If invocation of the handler caused the signal to be blocked,
-then the signal is unblocked upon return from the handler.
-.PP
-The signals
-.B SIGKILL
-and
-.B SIGSTOP
-cannot be caught or ignored.
-.SH RETURN VALUE
-.BR signal ()
-returns the previous value of the signal handler.
-On failure, it returns
-.BR SIG_ERR ,
-and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I signum
-is invalid.
-.SH VERSIONS
-The use of
-.I sighandler_t
-is a GNU extension, exposed if
-.B _GNU_SOURCE
-is defined;
-.\" libc4 and libc5 define
-.\" .IR SignalHandler ;
-glibc also defines (the BSD-derived)
-.I sig_t
-if
-.B _BSD_SOURCE
-(glibc 2.19 and earlier)
-or
-.B _DEFAULT_SOURCE
-(glibc 2.19 and later)
-is defined.
-Without use of such a type, the declaration of
-.BR signal ()
-is the somewhat harder to read:
-.PP
-.in +4n
-.EX
-.BI "void ( *" signal "(int " signum ", void (*" handler ")(int)) ) (int);"
-.EE
-.in
-.SS Portability
-The only portable use of
-.BR signal ()
-is to set a signal's disposition to
-.B SIG_DFL
-or
-.BR SIG_IGN .
-The semantics when using
-.BR signal ()
-to establish a signal handler vary across systems
-(and POSIX.1 explicitly permits this variation);
-.B do not use it for this purpose.
-.PP
-POSIX.1 solved the portability mess by specifying
-.BR sigaction (2),
-which provides explicit control of the semantics when a
-signal handler is invoked; use that interface instead of
-.BR signal ().
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C89, POSIX.1-2001.
-.PP
-In the original UNIX systems, when a handler that was established using
-.BR signal ()
-was invoked by the delivery of a signal,
-the disposition of the signal would be reset to
-.BR SIG_DFL ,
-and the system did not block delivery of further instances of the signal.
-This is equivalent to calling
-.BR sigaction (2)
-with the following flags:
-.PP
-.in +4n
-.EX
-sa.sa_flags = SA_RESETHAND | SA_NODEFER;
-.EE
-.in
-.PP
-System\ V also provides these semantics for
-.BR signal ().
-This was bad because the signal might be delivered again
-before the handler had a chance to reestablish itself.
-Furthermore, rapid deliveries of the same signal could
-result in recursive invocations of the handler.
-.PP
-BSD improved on this situation, but unfortunately also
-changed the semantics of the existing
-.BR signal ()
-interface while doing so.
-On BSD, when a signal handler is invoked,
-the signal disposition is not reset,
-and further instances of the signal are blocked from
-being delivered while the handler is executing.
-Furthermore, certain blocking system calls are automatically
-restarted if interrupted by a signal handler (see
-.BR signal (7)).
-The BSD semantics are equivalent to calling
-.BR sigaction (2)
-with the following flags:
-.PP
-.in +4n
-.EX
-sa.sa_flags = SA_RESTART;
-.EE
-.in
-.PP
-The situation on Linux is as follows:
-.IP \[bu] 3
-The kernel's
-.BR signal ()
-system call provides System\ V semantics.
-.IP \[bu]
-By default, in glibc 2 and later, the
-.BR signal ()
-wrapper function does not invoke the kernel system call.
-Instead, it calls
-.BR sigaction (2)
-using flags that supply BSD semantics.
-This default behavior is provided as long as a suitable
-feature test macro is defined:
-.B _BSD_SOURCE
-on glibc 2.19 and earlier or
-.B _DEFAULT_SOURCE
-in glibc 2.19 and later.
-(By default, these macros are defined; see
-.BR feature_test_macros (7)
-for details.)
-If such a feature test macro is not defined, then
-.BR signal ()
-provides System\ V semantics.
-.\"
-.\" System V semantics are also provided if one uses the separate
-.\" .BR sysv_signal (3)
-.\" function.
-.\" .IP *
-.\" The
-.\" .BR signal ()
-.\" function in Linux libc4 and libc5 provide System\ V semantics.
-.\" If one on a libc5 system includes
-.\" .I <bsd/signal.h>
-.\" instead of
-.\" .IR <signal.h> ,
-.\" then
-.\" .BR signal ()
-.\" provides BSD semantics.
-.SH NOTES
-The effects of
-.BR signal ()
-in a multithreaded process are unspecified.
-.PP
-According to POSIX, the behavior of a process is undefined after it
-ignores a
-.BR SIGFPE ,
-.BR SIGILL ,
-or
-.B SIGSEGV
-signal that was not generated by
-.BR kill (2)
-or
-.BR raise (3).
-Integer division by zero has undefined result.
-On some architectures it will generate a
-.B SIGFPE
-signal.
-(Also dividing the most negative integer by \-1 may generate
-.BR SIGFPE .)
-Ignoring this signal might lead to an endless loop.
-.PP
-See
-.BR sigaction (2)
-for details on what happens when the disposition
-.B SIGCHLD
-is set to
-.BR SIG_IGN .
-.PP
-See
-.BR signal\-safety (7)
-for a list of the async-signal-safe functions that can be
-safely called from inside a signal handler.
-.SH SEE ALSO
-.BR kill (1),
-.BR alarm (2),
-.BR kill (2),
-.BR pause (2),
-.BR sigaction (2),
-.BR signalfd (2),
-.BR sigpending (2),
-.BR sigprocmask (2),
-.BR sigsuspend (2),
-.BR bsd_signal (3),
-.BR killpg (3),
-.BR raise (3),
-.BR siginterrupt (3),
-.BR sigqueue (3),
-.BR sigsetops (3),
-.BR sigvec (3),
-.BR sysv_signal (3),
-.BR signal (7)
diff --git a/man2/signalfd.2 b/man2/signalfd.2
deleted file mode 100644
index 2b97c4640..000000000
--- a/man2/signalfd.2
+++ /dev/null
@@ -1,521 +0,0 @@
-.\" Copyright (C) 2008 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" starting from a version by Davide Libenzi <davidel@xmailserver.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH signalfd 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-signalfd \- create a file descriptor for accepting signals
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/signalfd.h>
-.PP
-.BI "int signalfd(int " fd ", const sigset_t *" mask ", int " flags );
-.fi
-.SH DESCRIPTION
-.BR signalfd ()
-creates a file descriptor that can be used to accept signals
-targeted at the caller.
-This provides an alternative to the use of a signal handler or
-.BR sigwaitinfo (2),
-and has the advantage that the file descriptor may be monitored by
-.BR select (2),
-.BR poll (2),
-and
-.BR epoll (7).
-.PP
-The
-.I mask
-argument specifies the set of signals that the caller
-wishes to accept via the file descriptor.
-This argument is a signal set whose contents can be initialized
-using the macros described in
-.BR sigsetops (3).
-Normally, the set of signals to be received via the
-file descriptor should be blocked using
-.BR sigprocmask (2),
-to prevent the signals being handled according to their default
-dispositions.
-It is not possible to receive
-.B SIGKILL
-or
-.B SIGSTOP
-signals via a signalfd file descriptor;
-these signals are silently ignored if specified in
-.IR mask .
-.PP
-If the
-.I fd
-argument is \-1,
-then the call creates a new file descriptor and associates the
-signal set specified in
-.I mask
-with that file descriptor.
-If
-.I fd
-is not \-1,
-then it must specify a valid existing signalfd file descriptor, and
-.I mask
-is used to replace the signal set associated with that file descriptor.
-.PP
-Starting with Linux 2.6.27, the following values may be bitwise ORed in
-.I flags
-to change the behavior of
-.BR signalfd ():
-.TP 14
-.B SFD_NONBLOCK
-Set the
-.B O_NONBLOCK
-file status flag on the open file description (see
-.BR open (2))
-referred to by the new file descriptor.
-Using this flag saves extra calls to
-.BR fcntl (2)
-to achieve the same result.
-.TP
-.B SFD_CLOEXEC
-Set the close-on-exec
-.RB ( FD_CLOEXEC )
-flag on the new file descriptor.
-See the description of the
-.B O_CLOEXEC
-flag in
-.BR open (2)
-for reasons why this may be useful.
-.PP
-Up to Linux 2.6.26, the
-.I flags
-argument is unused, and must be specified as zero.
-.PP
-.BR signalfd ()
-returns a file descriptor that supports the following operations:
-.TP
-.BR read (2)
-If one or more of the signals specified in
-.I mask
-is pending for the process, then the buffer supplied to
-.BR read (2)
-is used to return one or more
-.I signalfd_siginfo
-structures (see below) that describe the signals.
-The
-.BR read (2)
-returns information for as many signals as are pending and will
-fit in the supplied buffer.
-The buffer must be at least
-.I "sizeof(struct signalfd_siginfo)"
-bytes.
-The return value of the
-.BR read (2)
-is the total number of bytes read.
-.IP
-As a consequence of the
-.BR read (2),
-the signals are consumed,
-so that they are no longer pending for the process
-(i.e., will not be caught by signal handlers,
-and cannot be accepted using
-.BR sigwaitinfo (2)).
-.IP
-If none of the signals in
-.I mask
-is pending for the process, then the
-.BR read (2)
-either blocks until one of the signals in
-.I mask
-is generated for the process,
-or fails with the error
-.B EAGAIN
-if the file descriptor has been made nonblocking.
-.TP
-.BR poll "(2), " select "(2) (and similar)"
-The file descriptor is readable
-(the
-.BR select (2)
-.I readfds
-argument; the
-.BR poll (2)
-.B POLLIN
-flag)
-if one or more of the signals in
-.I mask
-is pending for the process.
-.IP
-The signalfd file descriptor also supports the other file-descriptor
-multiplexing APIs:
-.BR pselect (2),
-.BR ppoll (2),
-and
-.BR epoll (7).
-.TP
-.BR close (2)
-When the file descriptor is no longer required it should be closed.
-When all file descriptors associated with the same signalfd object
-have been closed, the resources for object are freed by the kernel.
-.SS The signalfd_siginfo structure
-The format of the
-.I signalfd_siginfo
-structure(s) returned by
-.BR read (2)s
-from a signalfd file descriptor is as follows:
-.PP
-.in +4n
-.EX
-struct signalfd_siginfo {
- uint32_t ssi_signo; /* Signal number */
- int32_t ssi_errno; /* Error number (unused) */
- int32_t ssi_code; /* Signal code */
- uint32_t ssi_pid; /* PID of sender */
- uint32_t ssi_uid; /* Real UID of sender */
- int32_t ssi_fd; /* File descriptor (SIGIO) */
- uint32_t ssi_tid; /* Kernel timer ID (POSIX timers)
- uint32_t ssi_band; /* Band event (SIGIO) */
- uint32_t ssi_overrun; /* POSIX timer overrun count */
- uint32_t ssi_trapno; /* Trap number that caused signal */
-.\" ssi_trapno is unused on most arches
- int32_t ssi_status; /* Exit status or signal (SIGCHLD) */
- int32_t ssi_int; /* Integer sent by sigqueue(3) */
- uint64_t ssi_ptr; /* Pointer sent by sigqueue(3) */
- uint64_t ssi_utime; /* User CPU time consumed (SIGCHLD) */
- uint64_t ssi_stime; /* System CPU time consumed
- (SIGCHLD) */
- uint64_t ssi_addr; /* Address that generated signal
- (for hardware\-generated signals) */
- uint16_t ssi_addr_lsb; /* Least significant bit of address
- (SIGBUS; since Linux 2.6.37) */
-.\" ssi_addr_lsb: commit b8aeec34175fc8fe8b0d40efea4846dfc1ba663e
- uint8_t pad[\fIX\fP]; /* Pad size to 128 bytes (allow for
- additional fields in the future) */
-};
-.EE
-.in
-.PP
-Each of the fields in this structure
-is analogous to the similarly named field in the
-.I siginfo_t
-structure.
-The
-.I siginfo_t
-structure is described in
-.BR sigaction (2).
-Not all fields in the returned
-.I signalfd_siginfo
-structure will be valid for a specific signal;
-the set of valid fields can be determined from the value returned in the
-.I ssi_code
-field.
-This field is the analog of the
-.I siginfo_t
-.I si_code
-field; see
-.BR sigaction (2)
-for details.
-.SS fork(2) semantics
-After a
-.BR fork (2),
-the child inherits a copy of the signalfd file descriptor.
-A
-.BR read (2)
-from the file descriptor in the child will return information
-about signals queued to the child.
-.SS Semantics of file descriptor passing
-As with other file descriptors,
-signalfd file descriptors can be passed to another process
-via a UNIX domain socket (see
-.BR unix (7)).
-In the receiving process, a
-.BR read (2)
-from the received file descriptor will return information
-about signals queued to that process.
-.SS execve(2) semantics
-Just like any other file descriptor,
-a signalfd file descriptor remains open across an
-.BR execve (2),
-unless it has been marked for close-on-exec (see
-.BR fcntl (2)).
-Any signals that were available for reading before the
-.BR execve (2)
-remain available to the newly loaded program.
-(This is analogous to traditional signal semantics,
-where a blocked signal that is pending remains pending across an
-.BR execve (2).)
-.SS Thread semantics
-The semantics of signalfd file descriptors in a multithreaded program
-mirror the standard semantics for signals.
-In other words,
-when a thread reads from a signalfd file descriptor,
-it will read the signals that are directed to the thread
-itself and the signals that are directed to the process
-(i.e., the entire thread group).
-(A thread will not be able to read signals that are directed
-to other threads in the process.)
-.\"
-.SS epoll(7) semantics
-If a process adds (via
-.BR epoll_ctl (2))
-a signalfd file descriptor to an
-.BR epoll (7)
-instance, then
-.BR epoll_wait (2)
-returns events only for signals sent to that process.
-In particular, if the process then uses
-.BR fork (2)
-to create a child process, then the child will be able to
-.BR read (2)
-signals that are sent to it using the signalfd file descriptor, but
-.BR epoll_wait (2)
-will
-.B not
-indicate that the signalfd file descriptor is ready.
-In this scenario, a possible workaround is that after the
-.BR fork (2),
-the child process can close the signalfd file descriptor that it inherited
-from the parent process and then create another signalfd file descriptor
-and add it to the epoll instance.
-Alternatively, the parent and the child could delay creating their
-(separate) signalfd file descriptors and adding them to the
-epoll instance until after the call to
-.BR fork (2).
-.SH RETURN VALUE
-On success,
-.BR signalfd ()
-returns a signalfd file descriptor;
-this is either a new file descriptor (if
-.I fd
-was \-1), or
-.I fd
-if
-.I fd
-was a valid signalfd file descriptor.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-The
-.I fd
-file descriptor is not a valid file descriptor.
-.TP
-.B EINVAL
-.I fd
-is not a valid signalfd file descriptor.
-.\" or, the
-.\" .I sizemask
-.\" argument is not equal to
-.\" .IR sizeof(sigset_t) ;
-.TP
-.B EINVAL
-.I flags
-is invalid;
-or, in Linux 2.6.26 or earlier,
-.I flags
-is nonzero.
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been
-reached.
-.TP
-.B ENODEV
-Could not mount (internal) anonymous inode device.
-.TP
-.B ENOMEM
-There was insufficient memory to create a new signalfd file descriptor.
-.SH VERSIONS
-.SS C library/kernel differences
-The underlying Linux system call requires an additional argument,
-.IR "size_t sizemask" ,
-which specifies the size of the
-.I mask
-argument.
-The glibc
-.BR signalfd ()
-wrapper function does not include this argument,
-since it provides the required value for the underlying system call.
-.PP
-There are two underlying Linux system calls:
-.BR signalfd ()
-and the more recent
-.BR signalfd4 ().
-The former system call does not implement a
-.I flags
-argument.
-The latter system call implements the
-.I flags
-values described above.
-Starting with glibc 2.9, the
-.BR signalfd ()
-wrapper function will use
-.BR signalfd4 ()
-where it is available.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-.TP
-.BR signalfd ()
-Linux 2.6.22,
-glibc 2.8.
-.\" signalfd() is in glibc 2.7, but reportedly does not build
-.TP
-.BR signalfd4 ()
-Linux 2.6.27.
-.SH NOTES
-A process can create multiple signalfd file descriptors.
-This makes it possible to accept different signals
-on different file descriptors.
-(This may be useful if monitoring the file descriptors using
-.BR select (2),
-.BR poll (2),
-or
-.BR epoll (7):
-the arrival of different signals will make different file descriptors ready.)
-If a signal appears in the
-.I mask
-of more than one of the file descriptors, then occurrences
-of that signal can be read (once) from any one of the file descriptors.
-.PP
-Attempts to include
-.B SIGKILL
-and
-.B SIGSTOP
-in
-.I mask
-are silently ignored.
-.PP
-The signal mask employed by a signalfd file descriptor can be viewed
-via the entry for the corresponding file descriptor in the process's
-.IR /proc/ pid /fdinfo
-directory.
-See
-.BR proc (5)
-for further details.
-.\"
-.SS Limitations
-The signalfd mechanism can't be used to receive signals that
-are synchronously generated, such as the
-.B SIGSEGV
-signal that results from accessing an invalid memory address
-or the
-.B SIGFPE
-signal that results from an arithmetic error.
-Such signals can be caught only via signal handler.
-.PP
-As described above,
-in normal usage one blocks the signals that will be accepted via
-.BR signalfd ().
-If spawning a child process to execute a helper program
-(that does not need the signalfd file descriptor),
-then, after the call to
-.BR fork (2),
-you will normally want to unblock those signals before calling
-.BR execve (2),
-so that the helper program can see any signals that it expects to see.
-Be aware, however,
-that this won't be possible in the case of a helper program spawned
-behind the scenes by any library function that the program may call.
-In such cases, one must fall back to using a traditional signal
-handler that writes to a file descriptor monitored by
-.BR select (2),
-.BR poll (2),
-or
-.BR epoll (7).
-.SH BUGS
-Before Linux 2.6.25, the
-.I ssi_ptr
-and
-.I ssi_int
-fields are not filled in with the data accompanying a signal sent by
-.BR sigqueue (3).
-.\" The fix also was put into Linux 2.6.24.5
-.SH EXAMPLES
-The program below accepts the signals
-.B SIGINT
-and
-.B SIGQUIT
-via a signalfd file descriptor.
-The program terminates after accepting a
-.B SIGQUIT
-signal.
-The following shell session demonstrates the use of the program:
-.PP
-.in +4n
-.EX
-.RB "$" " ./signalfd_demo"
-.BR "\[ha]C" " # Control\-C generates SIGINT"
-Got SIGINT
-.B \[ha]C
-Got SIGINT
-\fB\[ha]\e\fP # Control\-\e generates SIGQUIT
-Got SIGQUIT
-$
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (signalfd.c)
-.EX
-#include <err.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/signalfd.h>
-#include <unistd.h>
-\&
-int
-main(void)
-{
- int sfd;
- ssize_t s;
- sigset_t mask;
- struct signalfd_siginfo fdsi;
-\&
- sigemptyset(&mask);
- sigaddset(&mask, SIGINT);
- sigaddset(&mask, SIGQUIT);
-\&
- /* Block signals so that they aren\[aq]t handled
- according to their default dispositions. */
-\&
- if (sigprocmask(SIG_BLOCK, &mask, NULL) == \-1)
- err(EXIT_FAILURE, "sigprocmask");
-\&
- sfd = signalfd(\-1, &mask, 0);
- if (sfd == \-1)
- err(EXIT_FAILURE, "signalfd");
-\&
- for (;;) {
- s = read(sfd, &fdsi, sizeof(fdsi));
- if (s != sizeof(fdsi))
- err(EXIT_FAILURE, "read");
-\&
- if (fdsi.ssi_signo == SIGINT) {
- printf("Got SIGINT\en");
- } else if (fdsi.ssi_signo == SIGQUIT) {
- printf("Got SIGQUIT\en");
- exit(EXIT_SUCCESS);
- } else {
- printf("Read unexpected signal\en");
- }
- }
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR eventfd (2),
-.BR poll (2),
-.BR read (2),
-.BR select (2),
-.BR sigaction (2),
-.BR sigprocmask (2),
-.BR sigwaitinfo (2),
-.BR timerfd_create (2),
-.BR sigsetops (3),
-.BR sigwait (3),
-.BR epoll (7),
-.BR signal (7)
diff --git a/man2/signalfd4.2 b/man2/signalfd4.2
deleted file mode 100644
index 8dbea5cb6..000000000
--- a/man2/signalfd4.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/signalfd.2
diff --git a/man2/sigpending.2 b/man2/sigpending.2
deleted file mode 100644
index b0a9c247e..000000000
--- a/man2/sigpending.2
+++ /dev/null
@@ -1,110 +0,0 @@
-.\" Copyright (c) 2005 Michael Kerrisk
-.\" based on earlier work by faith@cs.unc.edu and
-.\" Mike Battersby <mib@deakin.edu.au>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2005-09-15, mtk, Created new page by splitting off from sigaction.2
-.\"
-.TH sigpending 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sigpending, rt_sigpending \- examine pending signals
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.BI "int sigpending(sigset_t *" set );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sigpending ():
-.nf
- _POSIX_C_SOURCE
-.fi
-.SH DESCRIPTION
-.BR sigpending ()
-returns the set of signals that are pending for delivery to the calling
-thread (i.e., the signals which have been raised while blocked).
-The mask of pending signals is returned in
-.IR set .
-.SH RETURN VALUE
-.BR sigpending ()
-returns 0 on success.
-On failure, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-.I set
-points to memory which is not a valid part of the process address space.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SS C library/kernel differences
-The original Linux system call was named
-.BR sigpending ().
-However, with the addition of real-time signals in Linux 2.2,
-the fixed-size, 32-bit
-.I sigset_t
-argument supported by that system call was no longer fit for purpose.
-Consequently, a new system call,
-.BR rt_sigpending (),
-was added to support an enlarged
-.I sigset_t
-type.
-The new system call takes a second argument,
-.IR "size_t sigsetsize" ,
-which specifies the size in bytes of the signal set in
-.IR set .
-.\" This argument is currently required to be less than or equal to
-.\" .IR sizeof(sigset_t)
-.\" (or the error
-.\" .B EINVAL
-.\" results).
-The glibc
-.BR sigpending ()
-wrapper function hides these details from us, transparently calling
-.BR rt_sigpending ()
-when the kernel provides it.
-.SH NOTES
-See
-.BR sigsetops (3)
-for details on manipulating signal sets.
-.PP
-If a signal is both blocked and has a disposition of "ignored", it is
-.I not
-added to the mask of pending signals when generated.
-.PP
-The set of signals that is pending for a thread
-is the union of the set of signals that is pending for that thread
-and the set of signals that is pending for the process as a whole; see
-.BR signal (7).
-.PP
-A child created via
-.BR fork (2)
-initially has an empty pending signal set;
-the pending signal set is preserved across an
-.BR execve (2).
-.SH BUGS
-Up to and including glibc 2.2.1,
-there is a bug in the wrapper function for
-.BR sigpending ()
-which means that information about pending real-time signals
-is not correctly returned.
-.SH SEE ALSO
-.BR kill (2),
-.BR sigaction (2),
-.BR signal (2),
-.BR sigprocmask (2),
-.BR sigsuspend (2),
-.BR sigsetops (3),
-.BR signal (7)
diff --git a/man2/sigprocmask.2 b/man2/sigprocmask.2
deleted file mode 100644
index 692ce601f..000000000
--- a/man2/sigprocmask.2
+++ /dev/null
@@ -1,224 +0,0 @@
-.\" Copyright (c) 2005 Michael Kerrisk
-.\" based on earlier work by faith@cs.unc.edu and
-.\" Mike Battersby <mib@deakin.edu.au>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2005-09-15, mtk, Created new page by splitting off from sigaction.2
-.\"
-.TH sigprocmask 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sigprocmask, rt_sigprocmask \- examine and change blocked signals
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.B #include <signal.h>
-.PP
-.nf
-/* Prototype for the glibc wrapper function */
-.BI "int sigprocmask(int " how ", const sigset_t *_Nullable restrict " set ,
-.BI " sigset_t *_Nullable restrict " oldset );
-.PP
-.BR "#include <signal.h>" " /* Definition of " SIG_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-/* Prototype for the underlying system call */
-.BI "int syscall(SYS_rt_sigprocmask, int " how ,
-.BI " const kernel_sigset_t *_Nullable " set ,
-.BI " kernel_sigset_t *_Nullable " oldset ,
-.BI " size_t " sigsetsize );
-.PP
-/* Prototype for the legacy system call */
-.BI "[[deprecated]] int syscall(SYS_sigprocmask, int " how ,
-.BI " const old_kernel_sigset_t *_Nullable " set ,
-.BI " old_kernel_sigset_t *_Nullable " oldset );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sigprocmask ():
-.nf
- _POSIX_C_SOURCE
-.fi
-.SH DESCRIPTION
-.BR sigprocmask ()
-is used to fetch and/or change the signal mask of the calling thread.
-The signal mask is the set of signals whose delivery is currently
-blocked for the caller
-(see also
-.BR signal (7)
-for more details).
-.PP
-The behavior of the call is dependent on the value of
-.IR how ,
-as follows.
-.TP
-.B SIG_BLOCK
-The set of blocked signals is the union of the current set and the
-.I set
-argument.
-.TP
-.B SIG_UNBLOCK
-The signals in
-.I set
-are removed from the current set of blocked signals.
-It is permissible to attempt to unblock a signal which is not blocked.
-.TP
-.B SIG_SETMASK
-The set of blocked signals is set to the argument
-.IR set .
-.PP
-If
-.I oldset
-is non-NULL, the previous value of the signal mask is stored in
-.IR oldset .
-.PP
-If
-.I set
-is NULL, then the signal mask is unchanged (i.e.,
-.I how
-is ignored),
-but the current value of the signal mask is nevertheless returned in
-.I oldset
-(if it is not NULL).
-.PP
-A set of functions for modifying and inspecting variables of type
-.I sigset_t
-("signal sets") is described in
-.BR sigsetops (3).
-.PP
-The use of
-.BR sigprocmask ()
-is unspecified in a multithreaded process; see
-.BR pthread_sigmask (3).
-.SH RETURN VALUE
-.BR sigprocmask ()
-returns 0 on success.
-On failure, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-The
-.I set
-or
-.I oldset
-argument points outside the process's allocated address space.
-.TP
-.B EINVAL
-Either the value specified in
-.I how
-was invalid or the kernel does not support the size passed in
-.I sigsetsize.
-.SH VERSIONS
-.SS C library/kernel differences
-The kernel's definition of
-.I sigset_t
-differs in size from that used
-by the C library.
-In this manual page, the former is referred to as
-.I kernel_sigset_t
-(it is nevertheless named
-.I sigset_t
-in the kernel sources).
-.PP
-The glibc wrapper function for
-.BR sigprocmask ()
-silently ignores attempts to block the two real-time signals that
-are used internally by the NPTL threading implementation.
-See
-.BR nptl (7)
-for details.
-.PP
-The original Linux system call was named
-.BR sigprocmask ().
-However, with the addition of real-time signals in Linux 2.2,
-the fixed-size, 32-bit
-.I sigset_t
-(referred to as
-.I old_kernel_sigset_t
-in this manual page)
-type supported by that system call was no longer fit for purpose.
-Consequently, a new system call,
-.BR rt_sigprocmask (),
-was added to support an enlarged
-.I sigset_t
-type
-(referred to as
-.I kernel_sigset_t
-in this manual page).
-The new system call takes a fourth argument,
-.IR "size_t sigsetsize" ,
-which specifies the size in bytes of the signal sets in
-.I set
-and
-.IR oldset .
-This argument is currently required to have a fixed architecture specific value
-(equal to
-.IR sizeof(kernel_sigset_t) ).
-.\" sizeof(kernel_sigset_t) == _NSIG / 8,
-.\" which equals to 8 on most architectures, but e.g. on MIPS it's 16.
-.PP
-The glibc
-.BR sigprocmask ()
-wrapper function hides these details from us, transparently calling
-.BR rt_sigprocmask ()
-when the kernel provides it.
-.\"
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-It is not possible to block
-.BR SIGKILL " or " SIGSTOP .
-Attempts to do so are silently ignored.
-.PP
-Each of the threads in a process has its own signal mask.
-.PP
-A child created via
-.BR fork (2)
-inherits a copy of its parent's signal mask;
-the signal mask is preserved across
-.BR execve (2).
-.PP
-If
-.BR SIGBUS ,
-.BR SIGFPE ,
-.BR SIGILL ,
-or
-.B SIGSEGV
-are generated
-while they are blocked, the result is undefined,
-unless the signal was generated by
-.BR kill (2),
-.BR sigqueue (3),
-or
-.BR raise (3).
-.PP
-See
-.BR sigsetops (3)
-for details on manipulating signal sets.
-.PP
-Note that it is permissible (although not very useful) to specify both
-.I set
-and
-.I oldset
-as NULL.
-.SH SEE ALSO
-.BR kill (2),
-.BR pause (2),
-.BR sigaction (2),
-.BR signal (2),
-.BR sigpending (2),
-.BR sigsuspend (2),
-.BR pthread_sigmask (3),
-.BR sigqueue (3),
-.BR sigsetops (3),
-.BR signal (7)
diff --git a/man2/sigreturn.2 b/man2/sigreturn.2
deleted file mode 100644
index 861e8d25d..000000000
--- a/man2/sigreturn.2
+++ /dev/null
@@ -1,151 +0,0 @@
-.\" Copyright (C) 2008, 2014, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Created Sat Aug 21 1995 Thomas K. Dyas <tdyas@eden.rutgers.edu>
-.\" Modified Tue Oct 22 22:09:03 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" 2008-06-26, mtk, added some more detail on the work done by sigreturn()
-.\" 2014-12-05, mtk, rewrote all of the rest of the original page
-.\"
-.TH sigreturn 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sigreturn, rt_sigreturn \- return from signal handler and cleanup stack frame
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B int sigreturn(...);
-.fi
-.SH DESCRIPTION
-If the Linux kernel determines that an unblocked
-signal is pending for a process, then,
-at the next transition back to user mode in that process
-(e.g., upon return from a system call or
-when the process is rescheduled onto the CPU),
-it creates a new frame on the user-space stack where it
-saves various pieces of process context
-(processor status word, registers, signal mask, and signal stack settings).
-.\" See arch/x86/kernel/signal.c::__setup_frame() [in Linux 3.17 source code]
-.PP
-The kernel also arranges that, during the transition back to user mode,
-the signal handler is called, and that, upon return from the handler,
-control passes to a piece of user-space code commonly called
-the "signal trampoline".
-The signal trampoline code in turn calls
-.BR sigreturn ().
-.PP
-This
-.BR sigreturn ()
-call undoes everything that was
-done\[em]changing the process's signal mask, switching signal stacks (see
-.BR sigaltstack "(2))\[em]in"
-order to invoke the signal handler.
-Using the information that was earlier saved on the user-space stack
-.BR sigreturn ()
-restores the process's signal mask, switches stacks,
-and restores the process's context
-(processor flags and registers,
-including the stack pointer and instruction pointer),
-so that the process resumes execution
-at the point where it was interrupted by the signal.
-.SH RETURN VALUE
-.BR sigreturn ()
-never returns.
-.SH VERSIONS
-Many UNIX-type systems have a
-.BR sigreturn ()
-system call or near equivalent.
-However, this call is not specified in POSIX,
-and details of its behavior vary across systems.
-.SH STANDARDS
-None.
-.SH NOTES
-.BR sigreturn ()
-exists only to allow the implementation of signal handlers.
-It should
-.B never
-be called directly.
-(Indeed, a simple
-.BR sigreturn ()
-.\" See sysdeps/unix/sysv/linux/sigreturn.c and
-.\" signal/sigreturn.c in the glibc source
-wrapper in the GNU C library simply returns \-1, with
-.I errno
-set to
-.BR ENOSYS .)
-Details of the arguments (if any) passed to
-.BR sigreturn ()
-vary depending on the architecture.
-(On some architectures, such as x86-64,
-.BR sigreturn ()
-takes no arguments, since all of the information that it requires
-is available in the stack frame that was previously created by the
-kernel on the user-space stack.)
-.PP
-Once upon a time, UNIX systems placed the signal trampoline code
-onto the user stack.
-Nowadays, pages of the user stack are protected so as to
-disallow code execution.
-Thus, on contemporary Linux systems, depending on the architecture,
-the signal trampoline code lives either in the
-.BR vdso (7)
-or in the C library.
-In the latter case,
-.\" See, for example, sysdeps/unix/sysv/linux/i386/sigaction.c and
-.\" sysdeps/unix/sysv/linux/x86_64/sigaction.c in the glibc (2.20) source.
-the C library's
-.BR sigaction (2)
-wrapper function informs the kernel of the location of the trampoline code
-by placing its address in the
-.I sa_restorer
-field of the
-.I sigaction
-structure,
-and sets the
-.B SA_RESTORER
-flag in the
-.I sa_flags
-field.
-.PP
-The saved process context information is placed in a
-.I ucontext_t
-structure (see
-.IR <sys/ucontext.h> ).
-That structure is visible within the signal handler
-as the third argument of a handler established via
-.BR sigaction (2)
-with the
-.B SA_SIGINFO
-flag.
-.PP
-On some other UNIX systems,
-the operation of the signal trampoline differs a little.
-In particular, on some systems, upon transitioning back to user mode,
-the kernel passes control to the trampoline (rather than the signal handler),
-and the trampoline code calls the signal handler (and then calls
-.BR sigreturn ()
-once the handler returns).
-.\"
-.SS C library/kernel differences
-The original Linux system call was named
-.BR sigreturn ().
-However, with the addition of real-time signals in Linux 2.2,
-a new system call,
-.BR rt_sigreturn ()
-was added to support an enlarged
-.I sigset_t
-type.
-The GNU C library
-hides these details from us, transparently employing
-.BR rt_sigreturn ()
-when the kernel provides it.
-.\"
-.SH SEE ALSO
-.BR kill (2),
-.BR restart_syscall (2),
-.BR sigaltstack (2),
-.BR signal (2),
-.BR getcontext (3),
-.BR signal (7),
-.BR vdso (7)
diff --git a/man2/sigsuspend.2 b/man2/sigsuspend.2
deleted file mode 100644
index c5c22c2c1..000000000
--- a/man2/sigsuspend.2
+++ /dev/null
@@ -1,131 +0,0 @@
-.\" Copyright (c) 2005 Michael Kerrisk
-.\" based on earlier work by faith@cs.unc.edu and
-.\" Mike Battersby <mib@deakin.edu.au>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2005-09-15, mtk, Created new page by splitting off from sigaction.2
-.\"
-.TH sigsuspend 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sigsuspend, rt_sigsuspend \- wait for a signal
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.BI "int sigsuspend(const sigset_t *" mask );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sigsuspend ():
-.nf
- _POSIX_C_SOURCE
-.fi
-.SH DESCRIPTION
-.BR sigsuspend ()
-temporarily replaces the signal mask of the calling thread with the
-mask given by
-.I mask
-and then suspends the thread until delivery of a signal whose
-action is to invoke a signal handler or to terminate a process.
-.PP
-If the signal terminates the process, then
-.BR sigsuspend ()
-does not return.
-If the signal is caught, then
-.BR sigsuspend ()
-returns after the signal handler returns,
-and the signal mask is restored to the state before the call to
-.BR sigsuspend ().
-.PP
-It is not possible to block
-.B SIGKILL
-or
-.BR SIGSTOP ;
-specifying these signals in
-.IR mask ,
-has no effect on the thread's signal mask.
-.SH RETURN VALUE
-.BR sigsuspend ()
-always returns \-1, with
-.I errno
-set to indicate the error (normally,
-.BR EINTR ).
-.SH ERRORS
-.TP
-.B EFAULT
-.I mask
-points to memory which is not a valid part of the process address space.
-.TP
-.B EINTR
-The call was interrupted by a signal;
-.BR signal (7).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SS C library/kernel differences
-The original Linux system call was named
-.BR sigsuspend ().
-However, with the addition of real-time signals in Linux 2.2,
-the fixed-size, 32-bit
-.I sigset_t
-type supported by that system call was no longer fit for purpose.
-Consequently, a new system call,
-.BR rt_sigsuspend (),
-was added to support an enlarged
-.I sigset_t
-type.
-The new system call takes a second argument,
-.IR "size_t sigsetsize" ,
-which specifies the size in bytes of the signal set in
-.IR mask .
-This argument is currently required to have the value
-.I sizeof(sigset_t)
-(or the error
-.B EINVAL
-results).
-The glibc
-.BR sigsuspend ()
-wrapper function hides these details from us, transparently calling
-.BR rt_sigsuspend ()
-when the kernel provides it.
-.\"
-.SH NOTES
-Normally,
-.BR sigsuspend ()
-is used in conjunction with
-.BR sigprocmask (2)
-in order to prevent delivery of a signal during the execution of a
-critical code section.
-The caller first blocks the signals with
-.BR sigprocmask (2).
-When the critical code has completed, the caller then waits for the
-signals by calling
-.BR sigsuspend ()
-with the signal mask that was returned by
-.BR sigprocmask (2)
-(in the
-.I oldset
-argument).
-.PP
-See
-.BR sigsetops (3)
-for details on manipulating signal sets.
-.SH SEE ALSO
-.BR kill (2),
-.BR pause (2),
-.BR sigaction (2),
-.BR signal (2),
-.BR sigprocmask (2),
-.BR sigwaitinfo (2),
-.BR sigsetops (3),
-.BR sigwait (3),
-.BR signal (7)
diff --git a/man2/sigtimedwait.2 b/man2/sigtimedwait.2
deleted file mode 100644
index 1b13df15d..000000000
--- a/man2/sigtimedwait.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sigwaitinfo.2
diff --git a/man2/sigwaitinfo.2 b/man2/sigwaitinfo.2
deleted file mode 100644
index fb797e803..000000000
--- a/man2/sigwaitinfo.2
+++ /dev/null
@@ -1,231 +0,0 @@
-.\" Copyright (c) 2002 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sigwaitinfo 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sigwaitinfo, sigtimedwait, rt_sigtimedwait \- synchronously wait
-for queued signals
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.BI "int sigwaitinfo(const sigset_t *restrict " set ,
-.BI " siginfo_t *_Nullable restrict " info );
-.BI "int sigtimedwait(const sigset_t *restrict " set ,
-.BI " siginfo_t *_Nullable restrict " info ,
-.BI " const struct timespec *restrict " timeout );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sigwaitinfo (),
-.BR sigtimedwait ():
-.nf
- _POSIX_C_SOURCE >= 199309L
-.fi
-.SH DESCRIPTION
-.BR sigwaitinfo ()
-suspends execution of the calling thread until one of the signals in
-.I set
-is pending
-(If one of the signals in
-.I set
-is already pending for the calling thread,
-.BR sigwaitinfo ()
-will return immediately.)
-.PP
-.BR sigwaitinfo ()
-removes the signal from the set of pending
-signals and returns the signal number as its function result.
-If the
-.I info
-argument is not NULL,
-then the buffer that it points to is used to return a structure of type
-.I siginfo_t
-(see
-.BR sigaction (2))
-containing information about the signal.
-.PP
-If multiple signals in
-.I set
-are pending for the caller, the signal that is retrieved by
-.BR sigwaitinfo ()
-is determined according to the usual ordering rules; see
-.BR signal (7)
-for further details.
-.PP
-.BR sigtimedwait ()
-operates in exactly the same way as
-.BR sigwaitinfo ()
-except that it has an additional argument,
-.IR timeout ,
-which specifies the interval for which
-the thread is suspended waiting for a signal.
-(This interval will be rounded up to the system clock granularity,
-and kernel scheduling delays mean that the interval
-may overrun by a small amount.)
-This argument is a
-.BR timespec (3)
-structure.
-.PP
-If both fields of this structure are specified as 0, a poll is performed:
-.BR sigtimedwait ()
-returns immediately, either with information about a signal that
-was pending for the caller, or with an error
-if none of the signals in
-.I set
-was pending.
-.SH RETURN VALUE
-On success, both
-.BR sigwaitinfo ()
-and
-.BR sigtimedwait ()
-return a signal number (i.e., a value greater than zero).
-On failure both calls return \-1, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-No signal in
-.I set
-became pending within the
-.I timeout
-period specified to
-.BR sigtimedwait ().
-.TP
-.B EINTR
-The wait was interrupted by a signal handler; see
-.BR signal (7).
-(This handler was for a signal other than one of those in
-.IR set .)
-.TP
-.B EINVAL
-.I timeout
-was invalid.
-.SH VERSIONS
-.SS C library/kernel differences
-On Linux,
-.BR sigwaitinfo ()
-is a library function implemented on top of
-.BR sigtimedwait ().
-.PP
-The glibc wrapper functions for
-.BR sigwaitinfo ()
-and
-.BR sigtimedwait ()
-silently ignore attempts to wait for the two real-time signals that
-are used internally by the NPTL threading implementation.
-See
-.BR nptl (7)
-for details.
-.PP
-The original Linux system call was named
-.BR sigtimedwait ().
-However, with the addition of real-time signals in Linux 2.2,
-the fixed-size, 32-bit
-.I sigset_t
-type supported by that system call was no longer fit for purpose.
-Consequently, a new system call,
-.BR rt_sigtimedwait (),
-was added to support an enlarged
-.I sigset_t
-type.
-The new system call takes a fourth argument,
-.IR "size_t sigsetsize" ,
-which specifies the size in bytes of the signal set in
-.IR set .
-This argument is currently required to have the value
-.I sizeof(sigset_t)
-(or the error
-.B EINVAL
-results).
-The glibc
-.BR sigtimedwait ()
-wrapper function hides these details from us, transparently calling
-.BR rt_sigtimedwait ()
-when the kernel provides it.
-.\"
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-In normal usage, the calling program blocks the signals in
-.I set
-via a prior call to
-.BR sigprocmask (2)
-(so that the default disposition for these signals does not occur if they
-become pending between successive calls to
-.BR sigwaitinfo ()
-or
-.BR sigtimedwait ())
-and does not establish handlers for these signals.
-In a multithreaded program,
-the signal should be blocked in all threads, in order to prevent
-the signal being treated according to its default disposition in
-a thread other than the one calling
-.BR sigwaitinfo ()
-or
-.BR sigtimedwait ()).
-.PP
-The set of signals that is pending for a given thread is the
-union of the set of signals that is pending specifically for that thread
-and the set of signals that is pending for the process as a whole (see
-.BR signal (7)).
-.PP
-Attempts to wait for
-.B SIGKILL
-and
-.B SIGSTOP
-are silently ignored.
-.PP
-If multiple threads of a process are blocked
-waiting for the same signal(s) in
-.BR sigwaitinfo ()
-or
-.BR sigtimedwait (),
-then exactly one of the threads will actually receive the
-signal if it becomes pending for the process as a whole;
-which of the threads receives the signal is indeterminate.
-.PP
-.BR sigwaitinfo ()
-or
-.BR sigtimedwait (),
-can't be used to receive signals that
-are synchronously generated, such as the
-.B SIGSEGV
-signal that results from accessing an invalid memory address
-or the
-.B SIGFPE
-signal that results from an arithmetic error.
-Such signals can be caught only via signal handler.
-.PP
-POSIX leaves the meaning of a NULL value for the
-.I timeout
-argument of
-.BR sigtimedwait ()
-unspecified, permitting the possibility that this has the same meaning
-as a call to
-.BR sigwaitinfo (),
-and indeed this is what is done on Linux.
-.SH SEE ALSO
-.BR kill (2),
-.BR sigaction (2),
-.BR signal (2),
-.BR signalfd (2),
-.BR sigpending (2),
-.BR sigprocmask (2),
-.BR sigqueue (3),
-.BR sigsetops (3),
-.BR sigwait (3),
-.BR timespec (3),
-.BR signal (7),
-.BR time (7)
diff --git a/man2/socket.2 b/man2/socket.2
deleted file mode 100644
index 2c681020b..000000000
--- a/man2/socket.2
+++ /dev/null
@@ -1,493 +0,0 @@
-'\" t
-.\" Copyright (c) 1983, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" $Id: socket.2,v 1.4 1999/05/13 11:33:42 freitag Exp $
-.\"
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1996-10-22 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1998, 1999 by Andi Kleen <ak@muc.de>
-.\" Modified 2002-07-17 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2004-06-17 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH socket 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-socket \- create an endpoint for communication
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.PP
-.BI "int socket(int " domain ", int " type ", int " protocol );
-.fi
-.SH DESCRIPTION
-.BR socket ()
-creates an endpoint for communication and returns a file descriptor
-that refers to that endpoint.
-The file descriptor returned by a successful call will be
-the lowest-numbered file descriptor not currently open for the process.
-.PP
-The
-.I domain
-argument specifies a communication domain; this selects the protocol
-family which will be used for communication.
-These families are defined in
-.IR <sys/socket.h> .
-The formats currently understood by the Linux kernel include:
-.TS
-tab(:);
-l1 lw40 l.
-Name:Purpose:Man page
-T{
-.B AF_UNIX
-T}:T{
-Local communication
-T}:T{
-.BR unix (7)
-T}
-T{
-.B AF_LOCAL
-T}:T{
-Synonym for
-.B AF_UNIX
-T}:T{
-T}
-T{
-.B AF_INET
-T}:IPv4 Internet protocols:T{
-.BR ip (7)
-T}
-T{
-.B AF_AX25
-T}:T{
-Amateur radio AX.25 protocol
-T}:T{
-.\" Part of ax25-tools
-.BR ax25 (4)
-T}
-T{
-.B AF_IPX
-T}:IPX \- Novell protocols:
-T{
-.B AF_APPLETALK
-T}:AppleTalk:T{
-.BR ddp (7)
-T}
-T{
-.B AF_X25
-T}:ITU-T X.25 / ISO-8208 protocol:T{
-.BR x25 (7)
-T}
-T{
-.B AF_INET6
-T}:IPv6 Internet protocols:T{
-.BR ipv6 (7)
-T}
-T{
-.B AF_DECnet
-T}:T{
-DECet protocol sockets
-T}
-T{
-.B AF_KEY
-T}:T{
-Key management protocol, originally developed for usage with IPsec
-T}
-T{
-.B AF_NETLINK
-T}:T{
-Kernel user interface device
-T}:T{
-.BR netlink (7)
-T}
-T{
-.B AF_PACKET
-T}:T{
-Low-level packet interface
-T}:T{
-.BR packet (7)
-T}
-T{
-.B AF_RDS
-T}:T{
-.\" commit: 639b321b4d8f4e412bfbb2a4a19bfebc1e68ace4
-Reliable Datagram Sockets (RDS) protocol
-T}:T{
-.\" rds-tools: https://github.com/oracle/rds-tools/blob/master/rds.7
-.\" rds-tools: https://github.com/oracle/rds-tools/blob/master/rds-rdma.7
-.BR rds (7)
-.br
-.BR rds\-rdma (7)
-T}
-T{
-.B AF_PPPOX
-T}:T{
-Generic PPP transport layer, for setting up L2 tunnels
-(L2TP and PPPoE)
-T}
-T{
-.B AF_LLC
-T}:T{
-.\" linux-history commit: 34beb106cde7da233d4df35dd3d6cf4fee937caa
-Logical link control (IEEE 802.2 LLC) protocol
-T}
-T{
-.B AF_IB
-T}:T{
-.\" commits: 8d36eb01da5d371f..ce117ffac2e93334
-InfiniBand native addressing
-T}
-T{
-.B AF_MPLS
-T}:T{
-.\" commits: 0189197f441602acdca3f97750d392a895b778fd
-Multiprotocol Label Switching
-T}
-T{
-.B AF_CAN
-T}:T{
-.\" commits: 8dbde28d9711475a..5423dd67bd0108a1
-Controller Area Network automotive bus protocol
-T}
-T{
-.B AF_TIPC
-T}:T{
-.\" commits: b97bf3fd8f6a16966d4f18983b2c40993ff937d4
-TIPC, "cluster domain sockets" protocol
-T}
-T{
-.B AF_BLUETOOTH
-T}:T{
-.\" commits: 8d36eb01da5d371f..ce117ffac2e93334
-Bluetooth low-level socket protocol
-T}
-T{
-.B AF_ALG
-T}:T{
-.\" commit: 03c8efc1ffeb6b82a22c1af8dd908af349563314
-Interface to kernel crypto API
-T}
-T{
-.B AF_VSOCK
-T}:T{
-.\" commit: d021c344051af91f42c5ba9fdedc176740cbd238
-VSOCK (originally "VMWare VSockets") protocol
-for hypervisor-guest communication
-T}:T{
-.BR vsock (7)
-T}
-T{
-.B AF_KCM
-T}:T{
-.\" commit: 03c8efc1ffeb6b82a22c1af8dd908af349563314
-KCM (kernel connection multiplexer) interface
-T}
-T{
-.B AF_XDP
-T}:T{
-.\" commit: c0c77d8fb787cfe0c3fca689c2a30d1dad4eaba7
-XDP (express data path) interface
-T}
-.TE
-.PP
-Further details of the above address families,
-as well as information on several other address families, can be found in
-.BR address_families (7).
-.PP
-The socket has the indicated
-.IR type ,
-which specifies the communication semantics.
-Currently defined types
-are:
-.TP 16
-.B SOCK_STREAM
-Provides sequenced, reliable, two-way, connection-based byte streams.
-An out-of-band data transmission mechanism may be supported.
-.TP
-.B SOCK_DGRAM
-Supports datagrams (connectionless, unreliable messages of a fixed
-maximum length).
-.TP
-.B SOCK_SEQPACKET
-Provides a sequenced, reliable, two-way connection-based data
-transmission path for datagrams of fixed maximum length; a consumer is
-required to read an entire packet with each input system call.
-.TP
-.B SOCK_RAW
-Provides raw network protocol access.
-.TP
-.B SOCK_RDM
-Provides a reliable datagram layer that does not guarantee ordering.
-.TP
-.B SOCK_PACKET
-Obsolete and should not be used in new programs;
-see
-.BR packet (7).
-.PP
-Some socket types may not be implemented by all protocol families.
-.PP
-Since Linux 2.6.27, the
-.I type
-argument serves a second purpose:
-in addition to specifying a socket type,
-it may include the bitwise OR of any of the following values,
-to modify the behavior of
-.BR socket ():
-.TP 16
-.B SOCK_NONBLOCK
-Set the
-.B O_NONBLOCK
-file status flag on the open file description (see
-.BR open (2))
-referred to by the new file descriptor.
-Using this flag saves extra calls to
-.BR fcntl (2)
-to achieve the same result.
-.TP
-.B SOCK_CLOEXEC
-Set the close-on-exec
-.RB ( FD_CLOEXEC )
-flag on the new file descriptor.
-See the description of the
-.B O_CLOEXEC
-flag in
-.BR open (2)
-for reasons why this may be useful.
-.PP
-The
-.I protocol
-specifies a particular protocol to be used with the socket.
-Normally only a single protocol exists to support a particular
-socket type within a given protocol family, in which case
-.I protocol
-can be specified as 0.
-However, it is possible that many protocols may exist, in
-which case a particular protocol must be specified in this manner.
-The protocol number to use is specific to the \*(lqcommunication domain\*(rq
-in which communication is to take place; see
-.BR protocols (5).
-See
-.BR getprotoent (3)
-on how to map protocol name strings to protocol numbers.
-.PP
-Sockets of type
-.B SOCK_STREAM
-are full-duplex byte streams.
-They do not preserve
-record boundaries.
-A stream socket must be in
-a
-.I connected
-state before any data may be sent or received on it.
-A connection to
-another socket is created with a
-.BR connect (2)
-call.
-Once connected, data may be transferred using
-.BR read (2)
-and
-.BR write (2)
-calls or some variant of the
-.BR send (2)
-and
-.BR recv (2)
-calls.
-When a session has been completed a
-.BR close (2)
-may be performed.
-Out-of-band data may also be transmitted as described in
-.BR send (2)
-and received as described in
-.BR recv (2).
-.PP
-The communications protocols which implement a
-.B SOCK_STREAM
-ensure that data is not lost or duplicated.
-If a piece of data for which
-the peer protocol has buffer space cannot be successfully transmitted
-within a reasonable length of time, then the connection is considered
-to be dead.
-When
-.B SO_KEEPALIVE
-is enabled on the socket the protocol checks in a protocol-specific
-manner if the other end is still alive.
-A
-.B SIGPIPE
-signal is raised if a process sends or receives
-on a broken stream; this causes naive processes,
-which do not handle the signal, to exit.
-.B SOCK_SEQPACKET
-sockets employ the same system calls as
-.B SOCK_STREAM
-sockets.
-The only difference is that
-.BR read (2)
-calls will return only the amount of data requested,
-and any data remaining in the arriving packet will be discarded.
-Also all message boundaries in incoming datagrams are preserved.
-.PP
-.B SOCK_DGRAM
-and
-.B SOCK_RAW
-sockets allow sending of datagrams to correspondents named in
-.BR sendto (2)
-calls.
-Datagrams are generally received with
-.BR recvfrom (2),
-which returns the next datagram along with the address of its sender.
-.PP
-.B SOCK_PACKET
-is an obsolete socket type to receive raw packets directly from the
-device driver.
-Use
-.BR packet (7)
-instead.
-.PP
-An
-.BR fcntl (2)
-.B F_SETOWN
-operation can be used to specify a process or process group to receive a
-.B SIGURG
-signal when the out-of-band data arrives or
-.B SIGPIPE
-signal when a
-.B SOCK_STREAM
-connection breaks unexpectedly.
-This operation may also be used to set the process or process group
-that receives the I/O and asynchronous notification of I/O events via
-.BR SIGIO .
-Using
-.B F_SETOWN
-is equivalent to an
-.BR ioctl (2)
-call with the
-.B FIOSETOWN
-or
-.B SIOCSPGRP
-argument.
-.PP
-When the network signals an error condition to the protocol module (e.g.,
-using an ICMP message for IP) the pending error flag is set for the socket.
-The next operation on this socket will return the error code of the pending
-error.
-For some protocols it is possible to enable a per-socket error queue
-to retrieve detailed information about the error; see
-.B IP_RECVERR
-in
-.BR ip (7).
-.PP
-The operation of sockets is controlled by socket level
-.IR options .
-These options are defined in
-.IR <sys/socket.h> .
-The functions
-.BR setsockopt (2)
-and
-.BR getsockopt (2)
-are used to set and get options.
-.SH RETURN VALUE
-On success, a file descriptor for the new socket is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-Permission to create a socket of the specified type and/or protocol
-is denied.
-.TP
-.B EAFNOSUPPORT
-The implementation does not support the specified address family.
-.TP
-.B EINVAL
-Unknown protocol, or protocol family not available.
-.TP
-.B EINVAL
-.\" Since Linux 2.6.27
-Invalid flags in
-.IR type .
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.BR ENOBUFS " or " ENOMEM
-Insufficient memory is available.
-The socket cannot be
-created until sufficient resources are freed.
-.TP
-.B EPROTONOSUPPORT
-The protocol type or the specified protocol is not
-supported within this domain.
-.PP
-Other errors may be generated by the underlying protocol modules.
-.SH STANDARDS
-POSIX.1-2008.
-.PP
-.B SOCK_NONBLOCK
-and
-.B SOCK_CLOEXEC
-are Linux-specific.
-.SH HISTORY
-POSIX.1-2001, 4.4BSD.
-.PP
-.BR socket ()
-appeared in 4.2BSD.
-It is generally portable to/from
-non-BSD systems supporting clones of the BSD socket layer (including
-System\ V variants).
-.PP
-The manifest constants used under 4.x BSD for protocol families
-are
-.BR PF_UNIX ,
-.BR PF_INET ,
-and so on, while
-.BR AF_UNIX ,
-.BR AF_INET ,
-and so on are used for address
-families.
-However, already the BSD man page promises: "The protocol
-family generally is the same as the address family", and subsequent
-standards use AF_* everywhere.
-.SH EXAMPLES
-An example of the use of
-.BR socket ()
-is shown in
-.BR getaddrinfo (3).
-.SH SEE ALSO
-.BR accept (2),
-.BR bind (2),
-.BR close (2),
-.BR connect (2),
-.BR fcntl (2),
-.BR getpeername (2),
-.BR getsockname (2),
-.BR getsockopt (2),
-.BR ioctl (2),
-.BR listen (2),
-.BR read (2),
-.BR recv (2),
-.BR select (2),
-.BR send (2),
-.BR shutdown (2),
-.BR socketpair (2),
-.BR write (2),
-.BR getprotoent (3),
-.BR address_families (7),
-.BR ip (7),
-.BR socket (7),
-.BR tcp (7),
-.BR udp (7),
-.BR unix (7)
-.PP
-\[lq]An Introductory 4.3BSD Interprocess Communication Tutorial\[rq]
-and
-\[lq]BSD Interprocess Communication Tutorial\[rq],
-reprinted in
-.I UNIX Programmer's Supplementary Documents Volume 1.
diff --git a/man2/socketcall.2 b/man2/socketcall.2
deleted file mode 100644
index b4c096085..000000000
--- a/man2/socketcall.2
+++ /dev/null
@@ -1,185 +0,0 @@
-'\" t
-.\" Copyright (c) 1995 Michael Chastain (mec@shell.portal.com), 15 April 1995.
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Tue Oct 22 22:11:53 1996 by Eric S. Raymond <esr@thyrsus.com>
-.TH socketcall 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-socketcall \- socket system calls
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/net.h>" " /* Definition of " SYS_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_socketcall " */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_socketcall, int " call ", unsigned long *" args );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR socketcall (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-.BR socketcall ()
-is a common kernel entry point for the socket system calls.
-.I call
-determines which socket function to invoke.
-.I args
-points to a block containing the actual arguments,
-which are passed through to the appropriate call.
-.PP
-User programs should call the appropriate functions by their usual names.
-Only standard library implementors and kernel hackers need to know about
-.BR socketcall ().
-.PP
-.TS
-tab(:);
-l l.
-\fIcall\fR:Man page
-T{
-.B SYS_SOCKET
-T}:T{
-.BR socket (2)
-T}
-T{
-.B SYS_BIND
-T}:T{
-.BR bind (2)
-T}
-T{
-.B SYS_CONNECT
-T}:T{
-.BR connect (2)
-T}
-T{
-.B SYS_LISTEN
-T}:T{
-.BR listen (2)
-T}
-T{
-.B SYS_ACCEPT
-T}:T{
-.BR accept (2)
-T}
-T{
-.B SYS_GETSOCKNAME
-T}:T{
-.BR getsockname (2)
-T}
-T{
-.B SYS_GETPEERNAME
-T}:T{
-.BR getpeername (2)
-T}
-T{
-.B SYS_SOCKETPAIR
-T}:T{
-.BR socketpair (2)
-T}
-T{
-.B SYS_SEND
-T}:T{
-.BR send (2)
-T}
-T{
-.B SYS_RECV
-T}:T{
-.BR recv (2)
-T}
-T{
-.B SYS_SENDTO
-T}:T{
-.BR sendto (2)
-T}
-T{
-.B SYS_RECVFROM
-T}:T{
-.BR recvfrom (2)
-T}
-T{
-.B SYS_SHUTDOWN
-T}:T{
-.BR shutdown (2)
-T}
-T{
-.B SYS_SETSOCKOPT
-T}:T{
-.BR setsockopt (2)
-T}
-T{
-.B SYS_GETSOCKOPT
-T}:T{
-.BR getsockopt (2)
-T}
-T{
-.B SYS_SENDMSG
-T}:T{
-.BR sendmsg (2)
-T}
-T{
-.B SYS_RECVMSG
-T}:T{
-.BR recvmsg (2)
-T}
-T{
-.B SYS_ACCEPT4
-T}:T{
-.BR accept4 (2)
-T}
-T{
-.B SYS_RECVMMSG
-T}:T{
-.BR recvmmsg (2)
-T}
-T{
-.B SYS_SENDMMSG
-T}:T{
-.BR sendmmsg (2)
-T}
-.TE
-.SH VERSIONS
-On some architectures\[em]for example, x86-64 and ARM\[em]there is no
-.BR socketcall ()
-system call; instead
-.BR socket (2),
-.BR accept (2),
-.BR bind (2),
-and so on really are implemented as separate system calls.
-.SH STANDARDS
-Linux.
-.PP
-On x86-32,
-.BR socketcall ()
-was historically the only entry point for the sockets API.
-However, starting in Linux 4.3,
-.\" commit 9dea5dc921b5f4045a18c63eb92e84dc274d17eb
-direct system calls are provided on x86-32 for the sockets API.
-This facilitates the creation of
-.BR seccomp (2)
-filters that filter sockets system calls
-(for new user-space binaries that are compiled
-to use the new entry points)
-and also provides a (very) small performance improvement.
-.SH SEE ALSO
-.BR accept (2),
-.BR bind (2),
-.BR connect (2),
-.BR getpeername (2),
-.BR getsockname (2),
-.BR getsockopt (2),
-.BR listen (2),
-.BR recv (2),
-.BR recvfrom (2),
-.BR recvmsg (2),
-.BR send (2),
-.BR sendmsg (2),
-.BR sendto (2),
-.BR setsockopt (2),
-.BR shutdown (2),
-.BR socket (2),
-.BR socketpair (2)
diff --git a/man2/socketpair.2 b/man2/socketpair.2
deleted file mode 100644
index 9831c9715..000000000
--- a/man2/socketpair.2
+++ /dev/null
@@ -1,116 +0,0 @@
-.\" Copyright (c) 1983, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)socketpair.2 6.4 (Berkeley) 3/10/91
-.\"
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1996-10-22 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2002-07-22 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2004-06-17 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" 2008-10-11, mtk: Add description of SOCK_NONBLOCK and SOCK_CLOEXEC
-.\"
-.TH socketpair 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-socketpair \- create a pair of connected sockets
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.PP
-.BI "int socketpair(int " domain ", int " type ", int " protocol \
-", int " sv [2]);
-.fi
-.SH DESCRIPTION
-The
-.BR socketpair ()
-call creates an unnamed pair of connected sockets in the specified
-.IR domain ,
-of the specified
-.IR type ,
-and using the optionally specified
-.IR protocol .
-For further details of these arguments, see
-.BR socket (2).
-.PP
-The file descriptors used in referencing the new sockets are returned in
-.I sv[0]
-and
-.IR sv[1] .
-The two sockets are indistinguishable.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned,
-.I errno
-is set to indicate the error, and
-.I sv
-is left unchanged
-.PP
-On Linux (and other systems),
-.BR socketpair ()
-does not modify
-.I sv
-on failure.
-A requirement standardizing this behavior was added in POSIX.1-2008 TC2.
-.\" http://austingroupbugs.net/view.php?id=483
-.SH ERRORS
-.TP
-.B EAFNOSUPPORT
-The specified address family is not supported on this machine.
-.TP
-.B EFAULT
-The address
-.I sv
-does not specify a valid part of the process address space.
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B EOPNOTSUPP
-The specified protocol does not support creation of socket pairs.
-.TP
-.B EPROTONOSUPPORT
-The specified protocol is not supported on this machine.
-.SH VERSIONS
-On Linux, the only supported domains for this call are
-.B AF_UNIX
-(or synonymously,
-.BR AF_LOCAL )
-and
-.B AF_TIPC
-.\" commit: 70b03759e9ecfae400605fa34f3d7154cccbbba3
-(since Linux 4.12).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, 4.4BSD.
-.PP
-.BR socketpair ()
-first appeared in 4.2BSD.
-It is generally portable to/from
-non-BSD systems supporting clones of the BSD socket layer (including
-System\ V variants).
-.PP
-Since Linux 2.6.27,
-.BR socketpair ()
-supports the
-.B SOCK_NONBLOCK
-and
-.B SOCK_CLOEXEC
-flags in the
-.I type
-argument, as described in
-.BR socket (2).
-.SH SEE ALSO
-.BR pipe (2),
-.BR read (2),
-.BR socket (2),
-.BR write (2),
-.BR socket (7),
-.BR unix (7)
diff --git a/man2/splice.2 b/man2/splice.2
deleted file mode 100644
index dd78e8cd4..000000000
--- a/man2/splice.2
+++ /dev/null
@@ -1,253 +0,0 @@
-.\" This manpage is Copyright (C) 2006 Jens Axboe
-.\" and Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH splice 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-splice \- splice data to/from a pipe
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <fcntl.h>
-.PP
-.BI "ssize_t splice(int " fd_in ", off64_t *_Nullable " off_in ,
-.BI " int " fd_out ", off64_t *_Nullable " off_out ,
-.BI " size_t " len ", unsigned int " flags );
-.\" Return type was long before glibc 2.7
-.fi
-.SH DESCRIPTION
-.BR splice ()
-moves data between two file descriptors
-without copying between kernel address space and user address space.
-It transfers up to
-.I len
-bytes of data from the file descriptor
-.I fd_in
-to the file descriptor
-.IR fd_out ,
-where one of the file descriptors must refer to a pipe.
-.PP
-The following semantics apply for
-.I fd_in
-and
-.IR off_in :
-.IP \[bu] 3
-If
-.I fd_in
-refers to a pipe, then
-.I off_in
-must be NULL.
-.IP \[bu]
-If
-.I fd_in
-does not refer to a pipe and
-.I off_in
-is NULL, then bytes are read from
-.I fd_in
-starting from the file offset,
-and the file offset is adjusted appropriately.
-.IP \[bu]
-If
-.I fd_in
-does not refer to a pipe and
-.I off_in
-is not NULL, then
-.I off_in
-must point to a buffer which specifies the starting
-offset from which bytes will be read from
-.IR fd_in ;
-in this case, the file offset of
-.I fd_in
-is not changed.
-.PP
-Analogous statements apply for
-.I fd_out
-and
-.IR off_out .
-.PP
-The
-.I flags
-argument is a bit mask that is composed by ORing together
-zero or more of the following values:
-.TP
-.B SPLICE_F_MOVE
-Attempt to move pages instead of copying.
-This is only a hint to the kernel:
-pages may still be copied if the kernel cannot move the
-pages from the pipe, or if
-the pipe buffers don't refer to full pages.
-The initial implementation of this flag was buggy:
-therefore starting in Linux 2.6.21 it is a no-op
-(but is still permitted in a
-.BR splice ()
-call);
-in the future, a correct implementation may be restored.
-.TP
-.B SPLICE_F_NONBLOCK
-Do not block on I/O.
-This makes the splice pipe operations nonblocking, but
-.BR splice ()
-may nevertheless block because the file descriptors that
-are spliced to/from may block (unless they have the
-.B O_NONBLOCK
-flag set).
-.TP
-.B SPLICE_F_MORE
-More data will be coming in a subsequent splice.
-This is a helpful hint when
-the
-.I fd_out
-refers to a socket (see also the description of
-.B MSG_MORE
-in
-.BR send (2),
-and the description of
-.B TCP_CORK
-in
-.BR tcp (7)).
-.TP
-.B SPLICE_F_GIFT
-Unused for
-.BR splice ();
-see
-.BR vmsplice (2).
-.SH RETURN VALUE
-Upon successful completion,
-.BR splice ()
-returns the number of bytes
-spliced to or from the pipe.
-.PP
-A return value of 0 means end of input.
-If
-.I fd_in
-refers to a pipe, then this means that there was no data to transfer,
-and it would not make sense to block because there are no writers
-connected to the write end of the pipe.
-.PP
-On error,
-.BR splice ()
-returns \-1 and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-.B SPLICE_F_NONBLOCK
-was specified in
-.I flags
-or one of the file descriptors had been marked as nonblocking
-.RB ( O_NONBLOCK ) ,
-and the operation would block.
-.TP
-.B EBADF
-One or both file descriptors are not valid,
-or do not have proper read-write mode.
-.TP
-.B EINVAL
-The target filesystem doesn't support splicing.
-.TP
-.B EINVAL
-The target file is opened in append mode.
-.\" The append-mode error is given since Linux 2.6.27; in earlier kernels,
-.\" splice() in append mode was broken
-.TP
-.B EINVAL
-Neither of the file descriptors refers to a pipe.
-.TP
-.B EINVAL
-An offset was given for nonseekable device (e.g., a pipe).
-.TP
-.B EINVAL
-.I fd_in
-and
-.I fd_out
-refer to the same pipe.
-.TP
-.B ENOMEM
-Out of memory.
-.TP
-.B ESPIPE
-Either
-.I off_in
-or
-.I off_out
-was not NULL, but the corresponding file descriptor refers to a pipe.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.17,
-glibc 2.5.
-.PP
-In Linux 2.6.30 and earlier,
-exactly one of
-.I fd_in
-and
-.I fd_out
-was required to be a pipe.
-Since Linux 2.6.31,
-.\" commit 7c77f0b3f9208c339a4b40737bb2cb0f0319bb8d
-both arguments may refer to pipes.
-.SH NOTES
-The three system calls
-.BR splice (),
-.BR vmsplice (2),
-and
-.BR tee (2),
-provide user-space programs with full control over an arbitrary
-kernel buffer, implemented within the kernel using the same type
-of buffer that is used for a pipe.
-In overview, these system calls perform the following tasks:
-.TP
-.BR splice ()
-moves data from the buffer to an arbitrary file descriptor, or vice versa,
-or from one buffer to another.
-.TP
-.BR tee (2)
-"copies" the data from one buffer to another.
-.TP
-.BR vmsplice (2)
-"copies" data from user space into the buffer.
-.PP
-Though we talk of copying, actual copies are generally avoided.
-The kernel does this by implementing a pipe buffer as a set
-of reference-counted pointers to pages of kernel memory.
-The kernel creates "copies" of pages in a buffer by creating new
-pointers (for the output buffer) referring to the pages,
-and increasing the reference counts for the pages:
-only pointers are copied, not the pages of the buffer.
-.\"
-.\" Linus: Now, imagine using the above in a media server, for example.
-.\" Let's say that a year or two has passed, so that the video drivers
-.\" have been updated to be able to do the splice thing, and what can
-.\" you do? You can:
-.\"
-.\" - splice from the (mpeg or whatever - let's just assume that the video
-.\" input is either digital or does the encoding on its own - like they
-.\" pretty much all do) video input into a pipe (remember: no copies - the
-.\" video input will just DMA directly into memory, and splice will just
-.\" set up the pages in the pipe buffer)
-.\" - tee that pipe to split it up
-.\" - splice one end to a file (ie "save the compressed stream to disk")
-.\" - splice the other end to a real-time video decoder window for your
-.\" real-time viewing pleasure.
-.\"
-.\" Linus: Now, the advantage of splice()/tee() is that you can
-.\" do zero-copy movement of data, and unlike sendfile() you can
-.\" do it on _arbitrary_ data (and, as shown by "tee()", it's more
-.\" than just sending the data to somebody else: you can duplicate
-.\" the data and choose to forward it to two or more different
-.\" users - for things like logging etc.).
-.\"
-.SH EXAMPLES
-See
-.BR tee (2).
-.SH SEE ALSO
-.BR copy_file_range (2),
-.BR sendfile (2),
-.BR tee (2),
-.BR vmsplice (2),
-.BR pipe (7)
diff --git a/man2/spu_create.2 b/man2/spu_create.2
deleted file mode 100644
index 2e4abeac9..000000000
--- a/man2/spu_create.2
+++ /dev/null
@@ -1,276 +0,0 @@
-.\" Copyright (c) International Business Machines Corp., 2006
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" HISTORY:
-.\" 2005-09-28, created by Arnd Bergmann <arndb@de.ibm.com>
-.\" 2006-06-16, revised by Eduardo M. Fleury <efleury@br.ibm.com>
-.\" 2007-07-10, some polishing by mtk
-.\" 2007-09-28, updates for newer kernels by Jeremy Kerr <jk@ozlabs.org>
-.\"
-.TH spu_create 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-spu_create \- create a new spu context
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/spu.h>" " /* Definition of " SPU_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_spu_create, const char *" pathname \
-", unsigned int " flags ,
-.BI " mode_t " mode ", int " neighbor_fd );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR spu_create (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR spu_create ()
-system call is used on PowerPC machines that implement the
-Cell Broadband Engine Architecture in order to access Synergistic
-Processor Units (SPUs).
-It creates a new logical context for an SPU in
-.I pathname
-and returns a file descriptor associated with it.
-.I pathname
-must refer to a nonexistent directory in the mount point of
-the SPU filesystem
-.RB ( spufs ).
-If
-.BR spu_create ()
-is successful, a directory is created at
-.I pathname
-and it is populated with the files described in
-.BR spufs (7).
-.PP
-When a context is created,
-the returned file descriptor can only be passed to
-.BR spu_run (2),
-used as the
-.I dirfd
-argument to the
-.B *at
-family of system calls (e.g.,
-.BR openat (2)),
-or closed;
-other operations are not defined.
-A logical SPU
-context is destroyed (along with all files created within the context's
-.I pathname
-directory) once the last reference to the context has gone;
-this usually occurs when the file descriptor returned by
-.BR spu_create ()
-is closed.
-.PP
-The
-.I mode
-argument (minus any bits set in the process's
-.BR umask (2))
-specifies the permissions used for creating the new directory in
-.BR spufs .
-See
-.BR stat (2)
-for a full list of the possible
-.I mode
-values.
-.PP
-The
-.I neighbor_fd
-is used only when the
-.B SPU_CREATE_AFFINITY_SPU
-flag is specified; see below.
-.PP
-The
-.I flags
-argument can be zero or any bitwise OR-ed
-combination of the following constants:
-.TP
-.B SPU_CREATE_EVENTS_ENABLED
-Rather than using signals for reporting DMA errors, use the
-.I event
-argument to
-.BR spu_run (2).
-.TP
-.B SPU_CREATE_GANG
-Create an SPU gang instead of a context.
-(A gang is a group of SPU contexts that are
-functionally related to each other and which share common scheduling
-parameters\[em]priority and policy.
-In the future, gang scheduling may be implemented causing
-the group to be switched in and out as a single unit.)
-.IP
-A new directory will be created at the location specified by the
-.I pathname
-argument.
-This gang may be used to hold other SPU contexts, by providing
-a pathname that is within the gang directory to further calls to
-.BR spu_create ().
-.TP
-.B SPU_CREATE_NOSCHED
-Create a context that is not affected by the SPU scheduler.
-Once the context is run,
-it will not be scheduled out until it is destroyed by
-the creating process.
-.IP
-Because the context cannot be removed from the SPU, some functionality
-is disabled for
-.B SPU_CREATE_NOSCHED
-contexts.
-Only a subset of the files will be
-available in this context directory in
-.BR spufs .
-Additionally,
-.B SPU_CREATE_NOSCHED
-contexts cannot dump a core file when crashing.
-.IP
-Creating
-.B SPU_CREATE_NOSCHED
-contexts requires the
-.B CAP_SYS_NICE
-capability.
-.TP
-.B SPU_CREATE_ISOLATE
-Create an isolated SPU context.
-Isolated contexts are protected from some
-PPE (PowerPC Processing Element)
-operations,
-such as access to the SPU local store and the NPC register.
-.IP
-Creating
-.B SPU_CREATE_ISOLATE
-contexts also requires the
-.B SPU_CREATE_NOSCHED
-flag.
-.TP
-.BR SPU_CREATE_AFFINITY_SPU " (since Linux 2.6.23)"
-.\" commit 8e68e2f248332a9c3fd4f08258f488c209bd3e0c
-Create a context with affinity to another SPU context.
-This affinity information is used within the SPU scheduling algorithm.
-Using this flag requires that a file descriptor referring to
-the other SPU context be passed in the
-.I neighbor_fd
-argument.
-.TP
-.BR SPU_CREATE_AFFINITY_MEM " (since Linux 2.6.23)"
-.\" commit 8e68e2f248332a9c3fd4f08258f488c209bd3e0c
-Create a context with affinity to system memory.
-This affinity information
-is used within the SPU scheduling algorithm.
-.SH RETURN VALUE
-On success,
-.BR spu_create ()
-returns a new file descriptor.
-On failure, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-The current user does not have write access to the
-.BR spufs (7)
-mount point.
-.TP
-.B EEXIST
-An SPU context already exists at the given pathname.
-.TP
-.B EFAULT
-.I pathname
-is not a valid string pointer in the
-calling process's address space.
-.TP
-.B EINVAL
-.I pathname
-is not a directory in the
-.BR spufs (7)
-mount point, or invalid flags have been provided.
-.TP
-.B ELOOP
-Too many symbolic links were found while resolving
-.IR pathname .
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENAMETOOLONG
-.I pathname
-is too long.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENODEV
-An isolated context was requested, but the hardware does not support
-SPU isolation.
-.TP
-.B ENOENT
-Part of
-.I pathname
-could not be resolved.
-.TP
-.B ENOMEM
-The kernel could not allocate all resources required.
-.TP
-.B ENOSPC
-There are not enough SPU resources available to create
-a new context or the user-specific limit for the number
-of SPU contexts has been reached.
-.TP
-.B ENOSYS
-The functionality is not provided by the current system, because
-either the hardware does not provide SPUs or the spufs module is not
-loaded.
-.TP
-.B ENOTDIR
-A part of
-.I pathname
-is not a directory.
-.TP
-.B EPERM
-The
-.B SPU_CREATE_NOSCHED
-flag has been given, but the user does not have the
-.B CAP_SYS_NICE
-capability.
-.SH FILES
-.I pathname
-must point to a location beneath the mount point of
-.BR spufs .
-By convention, it gets mounted in
-.IR /spu .
-.SH STANDARDS
-Linux on PowerPC.
-.SH HISTORY
-Linux 2.6.16.
-.PP
-Prior to the addition of the
-.B SPU_CREATE_AFFINITY_SPU
-flag in Linux 2.6.23, the
-.BR spu_create ()
-system call took only three arguments (i.e., there was no
-.I neighbor_fd
-argument).
-.SH NOTES
-.BR spu_create ()
-is meant to be used from libraries that implement a more abstract
-interface to SPUs, not to be used from regular applications.
-See
-.UR http://www.bsc.es\:/projects\:/deepcomputing\:/linuxoncell/
-.UE
-for the recommended libraries.
-.SH EXAMPLES
-See
-.BR spu_run (2)
-for an example of the use of
-.BR spu_create ()
-.SH SEE ALSO
-.BR close (2),
-.BR spu_run (2),
-.BR capabilities (7),
-.BR spufs (7)
diff --git a/man2/spu_run.2 b/man2/spu_run.2
deleted file mode 100644
index 1828ad7e8..000000000
--- a/man2/spu_run.2
+++ /dev/null
@@ -1,260 +0,0 @@
-.\" Copyright (c) International Business Machines Corp., 2006
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" HISTORY:
-.\" 2005-09-28, created by Arnd Bergmann <arndb@de.ibm.com>
-.\" 2006-06-16, revised by Eduardo M. Fleury <efleury@br.ibm.com>
-.\" 2007-07-10, some polishing by mtk
-.\" 2007-09-28, updates for newer kernels, added example
-.\" by Jeremy Kerr <jk@ozlabs.org>
-.\"
-.TH spu_run 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-spu_run \- execute an SPU context
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/spu.h>" " /* Definition of " SPU_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_spu_run, int " fd ", uint32_t *" npc \
-", uint32_t *" event );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR spu_run (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The
-.BR spu_run ()
-system call is used on PowerPC machines that implement the
-Cell Broadband Engine Architecture in order to access Synergistic
-Processor Units (SPUs).
-The
-.I fd
-argument is a file descriptor returned by
-.BR spu_create (2)
-that refers to a specific SPU context.
-When the context gets scheduled to a physical SPU,
-it starts execution at the instruction pointer passed in
-.IR npc .
-.PP
-Execution of SPU code happens synchronously, meaning that
-.BR spu_run ()
-blocks while the SPU is still running.
-If there is a need
-to execute SPU code in parallel with other code on either the
-main CPU or other SPUs, a new thread of execution must be created
-first (e.g., using
-.BR pthread_create (3)).
-.PP
-When
-.BR spu_run ()
-returns, the current value of the SPU program counter is written to
-.IR npc ,
-so successive calls to
-.BR spu_run ()
-can use the same
-.I npc
-pointer.
-.PP
-The
-.I event
-argument provides a buffer for an extended status code.
-If the SPU
-context was created with the
-.B SPU_CREATE_EVENTS_ENABLED
-flag, then this buffer is populated by the Linux kernel before
-.BR spu_run ()
-returns.
-.PP
-The status code may be one (or more) of the following constants:
-.TP
-.B SPE_EVENT_DMA_ALIGNMENT
-A DMA alignment error occurred.
-.TP
-.B SPE_EVENT_INVALID_DMA
-An invalid MFC DMA command was attempted.
-.\" SPE_EVENT_SPE_DATA_SEGMENT is defined, but does not seem to be generated
-.\" at any point (in Linux 5.9 sources).
-.TP
-.B SPE_EVENT_SPE_DATA_STORAGE
-A DMA storage error occurred.
-.TP
-.B SPE_EVENT_SPE_ERROR
-An illegal instruction was executed.
-.PP
-NULL
-is a valid value for the
-.I event
-argument.
-In this case, the events will not be reported to the calling process.
-.SH RETURN VALUE
-On success,
-.BR spu_run ()
-returns the value of the
-.I spu_status
-register.
-On failure, it returns \-1 and sets
-.I errno
-is set to indicate the error.
-.PP
-The
-.I spu_status
-register value is a bit mask of status codes and
-optionally a 14-bit code returned from the
-.B stop-and-signal
-instruction on the SPU.
-The bit masks for the status codes
-are:
-.TP
-.B 0x02
-SPU was stopped by a
-.B stop-and-signal
-instruction.
-.TP
-.B 0x04
-SPU was stopped by a
-.B halt
-instruction.
-.TP
-.B 0x08
-SPU is waiting for a channel.
-.TP
-.B 0x10
-SPU is in single-step mode.
-.TP
-.B 0x20
-SPU has tried to execute an invalid instruction.
-.TP
-.B 0x40
-SPU has tried to access an invalid channel.
-.TP
-.B 0x3fff0000
-The bits masked with this value contain the code returned from a
-.B stop-and-signal
-instruction.
-These bits are valid only if the 0x02 bit is set.
-.PP
-If
-.BR spu_run ()
-has not returned an error, one or more bits among the lower eight
-ones are always set.
-.SH ERRORS
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor.
-.TP
-.B EFAULT
-.I npc
-is not a valid pointer, or
-.I event
-is non-NULL and an invalid pointer.
-.TP
-.B EINTR
-A signal occurred while
-.BR spu_run ()
-was in progress; see
-.BR signal (7).
-The
-.I npc
-value has been updated to the new program counter value if
-necessary.
-.TP
-.B EINVAL
-.I fd
-is not a valid file descriptor returned from
-.BR spu_create (2).
-.TP
-.B ENOMEM
-There was not enough memory available to handle a page fault
-resulting from a Memory Flow Controller (MFC) direct memory access.
-.TP
-.B ENOSYS
-The functionality is not provided by the current system, because
-either the hardware does not provide SPUs or the spufs module is not
-loaded.
-.SH STANDARDS
-Linux on PowerPC.
-.SH HISTORY
-Linux 2.6.16.
-.SH NOTES
-.BR spu_run ()
-is meant to be used from libraries that implement a more abstract
-interface to SPUs, not to be used from regular applications.
-See
-.UR http://www.bsc.es\:/projects\:/deepcomputing\:/linuxoncell/
-.UE
-for the recommended libraries.
-.SH EXAMPLES
-The following is an example of running a simple, one-instruction SPU
-program with the
-.BR spu_run ()
-system call.
-.PP
-.\" SRC BEGIN (spu_run.c)
-.EX
-#include <err.h>
-#include <fcntl.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <unistd.h>
-\&
-int main(void)
-{
- int context, fd, spu_status;
- uint32_t instruction, npc;
-\&
- context = syscall(SYS_spu_create, "/spu/example\-context", 0, 0755);
- if (context == \-1)
- err(EXIT_FAILURE, "spu_create");
-\&
- /*
- * Write a \[aq]stop 0x1234\[aq] instruction to the SPU\[aq]s
- * local store memory.
- */
- instruction = 0x00001234;
-\&
- fd = open("/spu/example\-context/mem", O_RDWR);
- if (fd == \-1)
- err(EXIT_FAILURE, "open");
- write(fd, &instruction, sizeof(instruction));
-\&
- /*
- * set npc to the starting instruction address of the
- * SPU program. Since we wrote the instruction at the
- * start of the mem file, the entry point will be 0x0.
- */
- npc = 0;
-\&
- spu_status = syscall(SYS_spu_run, context, &npc, NULL);
- if (spu_status == \-1)
- err(EXIT_FAILURE, "open");
-\&
- /*
- * We should see a status code of 0x12340002:
- * 0x00000002 (spu was stopped due to stop\-and\-signal)
- * | 0x12340000 (the stop\-and\-signal code)
- */
- printf("SPU Status: %#08x\en", spu_status);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.\" .SH AUTHORS
-.\" Arnd Bergmann <arndb@de.ibm.com>, Jeremy Kerr <jk@ozlabs.org>
-.SH SEE ALSO
-.BR close (2),
-.BR spu_create (2),
-.BR capabilities (7),
-.BR spufs (7)
diff --git a/man2/ssetmask.2 b/man2/ssetmask.2
deleted file mode 100644
index a7f99d206..000000000
--- a/man2/ssetmask.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sgetmask.2
diff --git a/man2/stat.2 b/man2/stat.2
deleted file mode 100644
index 1a59f21c9..000000000
--- a/man2/stat.2
+++ /dev/null
@@ -1,539 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\" Parts Copyright (c) 1995 Nicolai Langfeldt (janl@ifi.uio.no), 1/1/95
-.\" and Copyright (c) 2006, 2007, 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1995-05-18 by Todd Larason <jtl@molehill.org>
-.\" Modified 1997-01-31 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1995-01-09 by Richard Kettlewell <richard@greenend.org.uk>
-.\" Modified 1998-05-13 by Michael Haardt <michael@cantor.informatik.rwth-aachen.de>
-.\" Modified 1999-07-06 by aeb & Albert Cahalan
-.\" Modified 2000-01-07 by aeb
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" 2007-06-08 mtk: Added example program
-.\" 2007-07-05 mtk: Added details on underlying system call interfaces
-.\"
-.TH stat 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-stat, fstat, lstat, fstatat \- get file status
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/stat.h>
-.PP
-.BI "int stat(const char *restrict " pathname ,
-.BI " struct stat *restrict " statbuf );
-.BI "int fstat(int " fd ", struct stat *" statbuf );
-.BI "int lstat(const char *restrict " pathname ,
-.BI " struct stat *restrict " statbuf );
-.PP
-.BR "#include <fcntl.h> " "/* Definition of " AT_* " constants */"
-.B #include <sys/stat.h>
-.PP
-.BI "int fstatat(int " dirfd ", const char *restrict " pathname ,
-.BI " struct stat *restrict " statbuf ", int " flags );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR lstat ():
-.nf
- /* Since glibc 2.20 */ _DEFAULT_SOURCE
- || _XOPEN_SOURCE >= 500
-.\" _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.10: */ _POSIX_C_SOURCE >= 200112L
- || /* glibc 2.19 and earlier */ _BSD_SOURCE
-.fi
-.PP
-.BR fstatat ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _ATFILE_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return information about a file, in the buffer pointed to by
-.IR statbuf .
-No permissions are required on the file itself, but\[em]in the case of
-.BR stat (),
-.BR fstatat (),
-and
-.BR lstat ()\[em]execute
-(search) permission is required on all of the directories in
-.I pathname
-that lead to the file.
-.PP
-.BR stat ()
-and
-.BR fstatat ()
-retrieve information about the file pointed to by
-.IR pathname ;
-the differences for
-.BR fstatat ()
-are described below.
-.PP
-.BR lstat ()
-is identical to
-.BR stat (),
-except that if
-.I pathname
-is a symbolic link, then it returns information about the link itself,
-not the file that the link refers to.
-.PP
-.BR fstat ()
-is identical to
-.BR stat (),
-except that the file about which information is to be retrieved
-is specified by the file descriptor
-.IR fd .
-.\"
-.SS The stat structure
-All of these system calls return a
-.I stat
-structure (see
-.BR stat (3type)).
-.PP
-.\" Background: inode attributes are modified with i_mutex held, but
-.\" read by stat() without taking the mutex.
-.IR Note :
-for performance and simplicity reasons, different fields in the
-.I stat
-structure may contain state information from different moments
-during the execution of the system call.
-For example, if
-.I st_mode
-or
-.I st_uid
-is changed by another process by calling
-.BR chmod (2)
-or
-.BR chown (2),
-.BR stat ()
-might return the old
-.I st_mode
-together with the new
-.IR st_uid ,
-or the old
-.I st_uid
-together with the new
-.IR st_mode .
-.SS fstatat()
-The
-.BR fstatat ()
-system call is a more general interface for accessing file information
-which can still provide exactly the behavior of each of
-.BR stat (),
-.BR lstat (),
-and
-.BR fstat ().
-.PP
-If the pathname given in
-.I pathname
-is relative, then it is interpreted relative to the directory
-referred to by the file descriptor
-.I dirfd
-(rather than relative to the current working directory of
-the calling process, as is done by
-.BR stat ()
-and
-.BR lstat ()
-for a relative pathname).
-.PP
-If
-.I pathname
-is relative and
-.I dirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I pathname
-is interpreted relative to the current working
-directory of the calling process (like
-.BR stat ()
-and
-.BR lstat ()).
-.PP
-If
-.I pathname
-is absolute, then
-.I dirfd
-is ignored.
-.PP
-.I flags
-can either be 0, or include one or more of the following flags ORed:
-.TP
-.BR AT_EMPTY_PATH " (since Linux 2.6.39)"
-.\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d
-If
-.I pathname
-is an empty string, operate on the file referred to by
-.I dirfd
-(which may have been obtained using the
-.BR open (2)
-.B O_PATH
-flag).
-In this case,
-.I dirfd
-can refer to any type of file, not just a directory, and
-the behavior of
-.BR fstatat ()
-is similar to that of
-.BR fstat ().
-If
-.I dirfd
-is
-.BR AT_FDCWD ,
-the call operates on the current working directory.
-This flag is Linux-specific; define
-.B _GNU_SOURCE
-.\" Before glibc 2.16, defining _ATFILE_SOURCE sufficed
-to obtain its definition.
-.TP
-.BR AT_NO_AUTOMOUNT " (since Linux 2.6.38)"
-Don't automount the terminal ("basename") component of
-.I pathname.
-Since Linux 3.1 this flag is ignored.
-Since Linux 4.11 this flag is implied.
-.TP
-.B AT_SYMLINK_NOFOLLOW
-If
-.I pathname
-is a symbolic link, do not dereference it:
-instead return information about the link itself, like
-.BR lstat ().
-(By default,
-.BR fstatat ()
-dereferences symbolic links, like
-.BR stat ().)
-.PP
-See
-.BR openat (2)
-for an explanation of the need for
-.BR fstatat ().
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-Search permission is denied for one of the directories
-in the path prefix of
-.IR pathname .
-(See also
-.BR path_resolution (7).)
-.TP
-.B EBADF
-.I fd
-is not a valid open file descriptor.
-.TP
-.B EBADF
-.RB ( fstatat ())
-.I pathname
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B EFAULT
-Bad address.
-.TP
-.B EINVAL
-.RB ( fstatat ())
-Invalid flag specified in
-.IR flags .
-.TP
-.B ELOOP
-Too many symbolic links encountered while traversing the path.
-.TP
-.B ENAMETOOLONG
-.I pathname
-is too long.
-.TP
-.B ENOENT
-A component of
-.I pathname
-does not exist or is a dangling symbolic link.
-.TP
-.B ENOENT
-.I pathname
-is an empty string and
-.B AT_EMPTY_PATH
-was not specified in
-.IR flags .
-.TP
-.B ENOMEM
-Out of memory (i.e., kernel memory).
-.TP
-.B ENOTDIR
-A component of the path prefix of
-.I pathname
-is not a directory.
-.TP
-.B ENOTDIR
-.RB ( fstatat ())
-.I pathname
-is relative and
-.I dirfd
-is a file descriptor referring to a file other than a directory.
-.TP
-.B EOVERFLOW
-.I pathname
-or
-.I fd
-refers to a file whose size, inode number,
-or number of blocks cannot be represented in, respectively, the types
-.IR off_t ,
-.IR ino_t ,
-or
-.IR blkcnt_t .
-This error can occur when, for example,
-an application compiled on a 32-bit platform without
-.I \-D_FILE_OFFSET_BITS=64
-calls
-.BR stat ()
-on a file whose size exceeds
-.I (1<<31)\-1
-bytes.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR stat ()
-.TQ
-.BR fstat ()
-.TQ
-.BR lstat ()
-SVr4, 4.3BSD, POSIX.1-2001.
-.\" SVr4 documents additional
-.\" .BR fstat ()
-.\" error conditions EINTR, ENOLINK, and EOVERFLOW. SVr4
-.\" documents additional
-.\" .BR stat ()
-.\" and
-.\" .BR lstat ()
-.\" error conditions EINTR, EMULTIHOP, ENOLINK, and EOVERFLOW.
-.TP
-.BR fstatat ()
-POSIX.1-2008.
-Linux 2.6.16,
-glibc 2.4.
-.PP
-According to POSIX.1-2001,
-.BR lstat ()
-on a symbolic link need return valid information only in the
-.I st_size
-field and the file type of the
-.I st_mode
-field of the
-.I stat
-structure.
-POSIX.1-2008 tightens the specification, requiring
-.BR lstat ()
-to return valid information in all fields except the mode bits in
-.IR st_mode .
-.PP
-Use of the
-.I st_blocks
-and
-.I st_blksize
-fields may be less portable.
-(They were introduced in BSD.
-The interpretation differs between systems,
-and possibly on a single system when NFS mounts are involved.)
-.SS C library/kernel differences
-Over time, increases in the size of the
-.I stat
-structure have led to three successive versions of
-.BR stat ():
-.IR sys_stat ()
-(slot
-.IR __NR_oldstat ),
-.IR sys_newstat ()
-(slot
-.IR __NR_stat ),
-and
-.I sys_stat64()
-(slot
-.IR __NR_stat64 )
-on 32-bit platforms such as i386.
-The first two versions were already present in Linux 1.0
-(albeit with different names);
-.\" See include/asm-i386/stat.h in the Linux 2.4 source code for the
-.\" various versions of the structure definitions
-the last was added in Linux 2.4.
-Similar remarks apply for
-.BR fstat ()
-and
-.BR lstat ().
-.PP
-The kernel-internal versions of the
-.I stat
-structure dealt with by the different versions are, respectively:
-.TP
-.I __old_kernel_stat
-The original structure, with rather narrow fields, and no padding.
-.TP
-.I stat
-Larger
-.I st_ino
-field and padding added to various parts of the structure to
-allow for future expansion.
-.TP
-.I stat64
-Even larger
-.I st_ino
-field,
-larger
-.I st_uid
-and
-.I st_gid
-fields to accommodate the Linux-2.4 expansion of UIDs and GIDs to 32 bits,
-and various other enlarged fields and further padding in the structure.
-(Various padding bytes were eventually consumed in Linux 2.6,
-with the advent of 32-bit device IDs and nanosecond components
-for the timestamp fields.)
-.PP
-The glibc
-.BR stat ()
-wrapper function hides these details from applications,
-invoking the most recent version of the system call provided by the kernel,
-and repacking the returned information if required for old binaries.
-.\"
-.\" A note from Andries Brouwer, July 2007
-.\"
-.\" > Is the story not rather more complicated for some calls like
-.\" > stat(2)?
-.\"
-.\" Yes and no, mostly no. See /usr/include/sys/stat.h .
-.\"
-.\" The idea is here not so much that syscalls change, but that
-.\" the definitions of struct stat and of the types dev_t and mode_t change.
-.\" This means that libc (even if it does not call the kernel
-.\" but only calls some internal function) must know what the
-.\" format of dev_t or of struct stat is.
-.\" The communication between the application and libc goes via
-.\" the include file <sys/stat.h> that defines a _STAT_VER and
-.\" _MKNOD_VER describing the layout of the data that user space
-.\" uses. Each (almost each) occurrence of stat() is replaced by
-.\" an occurrence of xstat() where the first parameter of xstat()
-.\" is this version number _STAT_VER.
-.\"
-.\" Now, also the definitions used by the kernel change.
-.\" But glibc copes with this in the standard way, and the
-.\" struct stat as returned by the kernel is repacked into
-.\" the struct stat as expected by the application.
-.\" Thus, _STAT_VER and this setup cater for the application-libc
-.\" interface, rather than the libc-kernel interface.
-.\"
-.\" (Note that the details depend on gcc being used as c compiler.)
-.PP
-On modern 64-bit systems, life is simpler: there is a single
-.BR stat ()
-system call and the kernel deals with a
-.I stat
-structure that contains fields of a sufficient size.
-.PP
-The underlying system call employed by the glibc
-.BR fstatat ()
-wrapper function is actually called
-.BR fstatat64 ()
-or, on some architectures,
-.\" strace(1) shows the name "newfstatat" on x86-64
-.BR newfstatat ().
-.SH EXAMPLES
-The following program calls
-.BR lstat ()
-and displays selected fields in the returned
-.I stat
-structure.
-.PP
-.\" SRC BEGIN (stat.c)
-.EX
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <sys/sysmacros.h>
-#include <time.h>
-\&
-int
-main(int argc, char *argv[])
-{
- struct stat sb;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s <pathname>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- if (lstat(argv[1], &sb) == \-1) {
- perror("lstat");
- exit(EXIT_FAILURE);
- }
-\&
- printf("ID of containing device: [%x,%x]\en",
- major(sb.st_dev),
- minor(sb.st_dev));
-\&
- printf("File type: ");
-\&
- switch (sb.st_mode & S_IFMT) {
- case S_IFBLK: printf("block device\en"); break;
- case S_IFCHR: printf("character device\en"); break;
- case S_IFDIR: printf("directory\en"); break;
- case S_IFIFO: printf("FIFO/pipe\en"); break;
- case S_IFLNK: printf("symlink\en"); break;
- case S_IFREG: printf("regular file\en"); break;
- case S_IFSOCK: printf("socket\en"); break;
- default: printf("unknown?\en"); break;
- }
-\&
- printf("I\-node number: %ju\en", (uintmax_t) sb.st_ino);
-\&
- printf("Mode: %jo (octal)\en",
- (uintmax_t) sb.st_mode);
-\&
- printf("Link count: %ju\en", (uintmax_t) sb.st_nlink);
- printf("Ownership: UID=%ju GID=%ju\en",
- (uintmax_t) sb.st_uid, (uintmax_t) sb.st_gid);
-\&
- printf("Preferred I/O block size: %jd bytes\en",
- (intmax_t) sb.st_blksize);
- printf("File size: %jd bytes\en",
- (intmax_t) sb.st_size);
- printf("Blocks allocated: %jd\en",
- (intmax_t) sb.st_blocks);
-\&
- printf("Last status change: %s", ctime(&sb.st_ctime));
- printf("Last file access: %s", ctime(&sb.st_atime));
- printf("Last file modification: %s", ctime(&sb.st_mtime));
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR ls (1),
-.BR stat (1),
-.BR access (2),
-.BR chmod (2),
-.BR chown (2),
-.BR readlink (2),
-.BR statx (2),
-.BR utime (2),
-.BR stat (3type),
-.BR capabilities (7),
-.BR inode (7),
-.BR symlink (7)
diff --git a/man2/stat64.2 b/man2/stat64.2
deleted file mode 100644
index b1a86c195..000000000
--- a/man2/stat64.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/stat.2
diff --git a/man2/statfs.2 b/man2/statfs.2
deleted file mode 100644
index 0496ab6c9..000000000
--- a/man2/statfs.2
+++ /dev/null
@@ -1,383 +0,0 @@
-.\" Copyright (C) 2003 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 2003-08-17 by Walter Harms
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH statfs 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-statfs, fstatfs \- get filesystem statistics
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/vfs.h> " "/* or <sys/statfs.h> */"
-.PP
-.BI "[[deprecated]] int statfs(const char *" path ", struct statfs *" buf );
-.BI "[[deprecated]] int fstatfs(int " fd ", struct statfs *" buf );
-.fi
-.SH DESCRIPTION
-The
-.BR statfs ()
-system call returns information about a mounted filesystem.
-.I path
-is the pathname of any file within the mounted filesystem.
-.I buf
-is a pointer to a
-.I statfs
-structure defined approximately as follows:
-.PP
-.in +4n
-.EX
-struct statfs {
- __fsword_t f_type; /* Type of filesystem (see below) */
- __fsword_t f_bsize; /* Optimal transfer block size */
- fsblkcnt_t f_blocks; /* Total data blocks in filesystem */
- fsblkcnt_t f_bfree; /* Free blocks in filesystem */
- fsblkcnt_t f_bavail; /* Free blocks available to
- unprivileged user */
- fsfilcnt_t f_files; /* Total inodes in filesystem */
- fsfilcnt_t f_ffree; /* Free inodes in filesystem */
- fsid_t f_fsid; /* Filesystem ID */
- __fsword_t f_namelen; /* Maximum length of filenames */
- __fsword_t f_frsize; /* Fragment size (since Linux 2.6) */
- __fsword_t f_flags; /* Mount flags of filesystem
- (since Linux 2.6.36) */
- __fsword_t f_spare[xxx];
- /* Padding bytes reserved for future use */
-};
-.EE
-.in
-.PP
-The following filesystem types may appear in
-.IR f_type :
-.PP
-.in +4n
-.EX
-ADFS_SUPER_MAGIC 0xadf5
-AFFS_SUPER_MAGIC 0xadff
-AFS_SUPER_MAGIC 0x5346414f
-ANON_INODE_FS_MAGIC 0x09041934 /* Anonymous inode FS (for
- pseudofiles that have no name;
- e.g., epoll, signalfd, bpf) */
-AUTOFS_SUPER_MAGIC 0x0187
-BDEVFS_MAGIC 0x62646576
-BEFS_SUPER_MAGIC 0x42465331
-BFS_MAGIC 0x1badface
-BINFMTFS_MAGIC 0x42494e4d
-BPF_FS_MAGIC 0xcafe4a11
-BTRFS_SUPER_MAGIC 0x9123683e
-BTRFS_TEST_MAGIC 0x73727279
-CGROUP_SUPER_MAGIC 0x27e0eb /* Cgroup pseudo FS */
-CGROUP2_SUPER_MAGIC 0x63677270 /* Cgroup v2 pseudo FS */
-CIFS_MAGIC_NUMBER 0xff534d42
-CODA_SUPER_MAGIC 0x73757245
-COH_SUPER_MAGIC 0x012ff7b7
-CRAMFS_MAGIC 0x28cd3d45
-DEBUGFS_MAGIC 0x64626720
-DEVFS_SUPER_MAGIC 0x1373 /* Linux 2.6.17 and earlier */
-DEVPTS_SUPER_MAGIC 0x1cd1
-ECRYPTFS_SUPER_MAGIC 0xf15f
-EFIVARFS_MAGIC 0xde5e81e4
-EFS_SUPER_MAGIC 0x00414a53
-EXT_SUPER_MAGIC 0x137d /* Linux 2.0 and earlier */
-EXT2_OLD_SUPER_MAGIC 0xef51
-EXT2_SUPER_MAGIC 0xef53
-EXT3_SUPER_MAGIC 0xef53
-EXT4_SUPER_MAGIC 0xef53
-F2FS_SUPER_MAGIC 0xf2f52010
-FUSE_SUPER_MAGIC 0x65735546
-FUTEXFS_SUPER_MAGIC 0xbad1dea /* Unused */
-HFS_SUPER_MAGIC 0x4244
-HOSTFS_SUPER_MAGIC 0x00c0ffee
-HPFS_SUPER_MAGIC 0xf995e849
-HUGETLBFS_MAGIC 0x958458f6
-ISOFS_SUPER_MAGIC 0x9660
-JFFS2_SUPER_MAGIC 0x72b6
-JFS_SUPER_MAGIC 0x3153464a
-MINIX_SUPER_MAGIC 0x137f /* original minix FS */
-MINIX_SUPER_MAGIC2 0x138f /* 30 char minix FS */
-MINIX2_SUPER_MAGIC 0x2468 /* minix V2 FS */
-MINIX2_SUPER_MAGIC2 0x2478 /* minix V2 FS, 30 char names */
-MINIX3_SUPER_MAGIC 0x4d5a /* minix V3 FS, 60 char names */
-MQUEUE_MAGIC 0x19800202 /* POSIX message queue FS */
-MSDOS_SUPER_MAGIC 0x4d44
-MTD_INODE_FS_MAGIC 0x11307854
-NCP_SUPER_MAGIC 0x564c
-NFS_SUPER_MAGIC 0x6969
-NILFS_SUPER_MAGIC 0x3434
-NSFS_MAGIC 0x6e736673
-NTFS_SB_MAGIC 0x5346544e
-OCFS2_SUPER_MAGIC 0x7461636f
-OPENPROM_SUPER_MAGIC 0x9fa1
-OVERLAYFS_SUPER_MAGIC 0x794c7630
-PIPEFS_MAGIC 0x50495045
-PROC_SUPER_MAGIC 0x9fa0 /* /proc FS */
-PSTOREFS_MAGIC 0x6165676c
-QNX4_SUPER_MAGIC 0x002f
-QNX6_SUPER_MAGIC 0x68191122
-RAMFS_MAGIC 0x858458f6
-REISERFS_SUPER_MAGIC 0x52654973
-ROMFS_MAGIC 0x7275
-SECURITYFS_MAGIC 0x73636673
-SELINUX_MAGIC 0xf97cff8c
-SMACK_MAGIC 0x43415d53
-SMB_SUPER_MAGIC 0x517b
-SMB2_MAGIC_NUMBER 0xfe534d42
-SOCKFS_MAGIC 0x534f434b
-SQUASHFS_MAGIC 0x73717368
-SYSFS_MAGIC 0x62656572
-SYSV2_SUPER_MAGIC 0x012ff7b6
-SYSV4_SUPER_MAGIC 0x012ff7b5
-TMPFS_MAGIC 0x01021994
-TRACEFS_MAGIC 0x74726163
-UDF_SUPER_MAGIC 0x15013346
-UFS_MAGIC 0x00011954
-USBDEVICE_SUPER_MAGIC 0x9fa2
-V9FS_MAGIC 0x01021997
-VXFS_SUPER_MAGIC 0xa501fcf5
-XENFS_SUPER_MAGIC 0xabba1974
-XENIX_SUPER_MAGIC 0x012ff7b4
-XFS_SUPER_MAGIC 0x58465342
-_XIAFS_SUPER_MAGIC 0x012fd16d /* Linux 2.0 and earlier */
-.EE
-.in
-.PP
-Most of these MAGIC constants are defined in
-.IR /usr/include/linux/magic.h ,
-and some are hardcoded in kernel sources.
-.PP
-The
-.I f_flags
-field is a bit mask indicating mount options for the filesystem.
-It contains zero or more of the following bits:
-.\" XXX Keep this list in sync with statvfs(3)
-.TP
-.B ST_MANDLOCK
-Mandatory locking is permitted on the filesystem (see
-.BR fcntl (2)).
-.TP
-.B ST_NOATIME
-Do not update access times; see
-.BR mount (2).
-.TP
-.B ST_NODEV
-Disallow access to device special files on this filesystem.
-.TP
-.B ST_NODIRATIME
-Do not update directory access times; see
-.BR mount (2).
-.TP
-.B ST_NOEXEC
-Execution of programs is disallowed on this filesystem.
-.TP
-.B ST_NOSUID
-The set-user-ID and set-group-ID bits are ignored by
-.BR exec (3)
-for executable files on this filesystem
-.TP
-.B ST_RDONLY
-This filesystem is mounted read-only.
-.TP
-.B ST_RELATIME
-Update atime relative to mtime/ctime; see
-.BR mount (2).
-.TP
-.B ST_SYNCHRONOUS
-Writes are synched to the filesystem immediately (see the description of
-.B O_SYNC
-in
-.BR open (2)).
-.TP
-.BR ST_NOSYMFOLLOW " (since Linux 5.10)"
-.\" dab741e0e02bd3c4f5e2e97be74b39df2523fc6e
-Symbolic links are not followed when resolving paths; see
-.BR mount (2).
-.PP
-Nobody knows what
-.I f_fsid
-is supposed to contain (but see below).
-.PP
-Fields that are undefined for a particular filesystem are set to 0.
-.PP
-.BR fstatfs ()
-returns the same information about an open file referenced by descriptor
-.IR fd .
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-.RB ( statfs ())
-Search permission is denied for a component of the path prefix of
-.IR path .
-(See also
-.BR path_resolution (7).)
-.TP
-.B EBADF
-.RB ( fstatfs ())
-.I fd
-is not a valid open file descriptor.
-.TP
-.B EFAULT
-.I buf
-or
-.I path
-points to an invalid address.
-.TP
-.B EINTR
-The call was interrupted by a signal; see
-.BR signal (7).
-.TP
-.B EIO
-An I/O error occurred while reading from the filesystem.
-.TP
-.B ELOOP
-.RB ( statfs ())
-Too many symbolic links were encountered in translating
-.IR path .
-.TP
-.B ENAMETOOLONG
-.RB ( statfs ())
-.I path
-is too long.
-.TP
-.B ENOENT
-.RB ( statfs ())
-The file referred to by
-.I path
-does not exist.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOSYS
-The filesystem does not support this call.
-.TP
-.B ENOTDIR
-.RB ( statfs ())
-A component of the path prefix of
-.I path
-is not a directory.
-.TP
-.B EOVERFLOW
-Some values were too large to be represented in the returned struct.
-.SH VERSIONS
-.SS The f_fsid field
-Solaris, Irix, and POSIX have a system call
-.BR statvfs (2)
-that returns a
-.I "struct statvfs"
-(defined in
-.IR <sys/statvfs.h> )
-containing an
-.I "unsigned long"
-.IR f_fsid .
-Linux, SunOS, HP-UX, 4.4BSD have a system call
-.BR statfs ()
-that returns a
-.I "struct statfs"
-(defined in
-.IR <sys/vfs.h> )
-containing a
-.I fsid_t
-.IR f_fsid ,
-where
-.I fsid_t
-is defined as
-.IR "struct { int val[2]; }" .
-The same holds for FreeBSD, except that it uses the include file
-.IR <sys/mount.h> .
-.PP
-The general idea is that
-.I f_fsid
-contains some random stuff such that the pair
-.RI ( f_fsid , ino )
-uniquely determines a file.
-Some operating systems use (a variation on) the device number,
-or the device number combined with the filesystem type.
-Several operating systems restrict giving out the
-.I f_fsid
-field to the superuser only (and zero it for unprivileged users),
-because this field is used in the filehandle of the filesystem
-when NFS-exported, and giving it out is a security concern.
-.PP
-Under some operating systems, the
-.I fsid
-can be used as the second argument to the
-.BR sysfs (2)
-system call.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-The Linux
-.BR statfs ()
-was inspired by the 4.4BSD one
-(but they do not use the same structure).
-.PP
-The original Linux
-.BR statfs ()
-and
-.BR fstatfs ()
-system calls were not designed with extremely large file sizes in mind.
-Subsequently, Linux 2.6
-added new
-.BR statfs64 ()
-and
-.BR fstatfs64 ()
-system calls that employ a new structure,
-.IR statfs64 .
-The new structure contains the same fields as the original
-.I statfs
-structure, but the sizes of various fields are increased,
-to accommodate large file sizes.
-The glibc
-.BR statfs ()
-and
-.BR fstatfs ()
-wrapper functions transparently deal with the kernel differences.
-.PP
-LSB has deprecated the library calls
-.BR statfs ()
-and
-.BR fstatfs ()
-and tells us to use
-.BR statvfs (3)
-and
-.BR fstatvfs (3)
-instead.
-.SH NOTES
-The
-.I __fsword_t
-type used for various fields in the
-.I statfs
-structure definition is a glibc internal type,
-not intended for public use.
-This leaves the programmer in a bit of a conundrum when trying to copy
-or compare these fields to local variables in a program.
-Using
-.I "unsigned\ int"
-for such variables suffices on most systems.
-.PP
-Some systems have only \fI<sys/vfs.h>\fP, other systems also have
-\fI<sys/statfs.h>\fP, where the former includes the latter.
-So it seems
-including the former is the best choice.
-.SH BUGS
-From Linux 2.6.38 up to and including Linux 3.1,
-.\" broken in commit ff0c7d15f9787b7e8c601533c015295cc68329f8
-.\" fixed in commit d70ef97baf048412c395bb5d65791d8fe133a52b
-.BR fstatfs ()
-failed with the error
-.B ENOSYS
-for file descriptors created by
-.BR pipe (2).
-.SH SEE ALSO
-.BR stat (2),
-.BR statvfs (3),
-.BR path_resolution (7)
diff --git a/man2/statfs64.2 b/man2/statfs64.2
deleted file mode 100644
index 923d3c0cc..000000000
--- a/man2/statfs64.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/statfs.2
diff --git a/man2/statx.2 b/man2/statx.2
deleted file mode 100644
index a3d85b13b..000000000
--- a/man2/statx.2
+++ /dev/null
@@ -1,614 +0,0 @@
-'\" t
-.\" Copyright (c) 2017 David Howells <dhowells@redhat.com>
-.\"
-.\" Derived from the stat.2 manual page:
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\" Parts Copyright (c) 1995 Nicolai Langfeldt (janl@ifi.uio.no), 1/1/95
-.\" and Copyright (c) 2006, 2007, 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH statx 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-statx \- get file status (extended)
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE " "/* See feature_test_macros(7) */"
-.BR "#include <fcntl.h> " "/* Definition of " AT_* " constants */"
-.B #include <sys/stat.h>
-.PP
-.BI "int statx(int " dirfd ", const char *restrict " pathname ", int " flags ,
-.BI " unsigned int " mask ", struct statx *restrict " statxbuf );
-.fi
-.SH DESCRIPTION
-This function returns information about a file, storing it in the buffer
-pointed to by
-.IR statxbuf .
-The returned buffer is a structure of the following type:
-.PP
-.in +4n
-.EX
-struct statx {
- __u32 stx_mask; /* Mask of bits indicating
- filled fields */
- __u32 stx_blksize; /* Block size for filesystem I/O */
- __u64 stx_attributes; /* Extra file attribute indicators */
- __u32 stx_nlink; /* Number of hard links */
- __u32 stx_uid; /* User ID of owner */
- __u32 stx_gid; /* Group ID of owner */
- __u16 stx_mode; /* File type and mode */
- __u64 stx_ino; /* Inode number */
- __u64 stx_size; /* Total size in bytes */
- __u64 stx_blocks; /* Number of 512B blocks allocated */
- __u64 stx_attributes_mask;
- /* Mask to show what\[aq]s supported
- in stx_attributes */
-\&
- /* The following fields are file timestamps */
- struct statx_timestamp stx_atime; /* Last access */
- struct statx_timestamp stx_btime; /* Creation */
- struct statx_timestamp stx_ctime; /* Last status change */
- struct statx_timestamp stx_mtime; /* Last modification */
-\&
- /* If this file represents a device, then the next two
- fields contain the ID of the device */
- __u32 stx_rdev_major; /* Major ID */
- __u32 stx_rdev_minor; /* Minor ID */
-\&
- /* The next two fields contain the ID of the device
- containing the filesystem where the file resides */
- __u32 stx_dev_major; /* Major ID */
- __u32 stx_dev_minor; /* Minor ID */
-\&
- __u64 stx_mnt_id; /* Mount ID */
-\&
- /* Direct I/O alignment restrictions */
- __u32 stx_dio_mem_align;
- __u32 stx_dio_offset_align;
-};
-.EE
-.in
-.PP
-The file timestamps are structures of the following type:
-.PP
-.in +4n
-.EX
-struct statx_timestamp {
- __s64 tv_sec; /* Seconds since the Epoch (UNIX time) */
- __u32 tv_nsec; /* Nanoseconds since tv_sec */
-};
-.EE
-.in
-.PP
-(Note that reserved space and padding is omitted.)
-.SS
-Invoking \fBstatx\fR():
-To access a file's status, no permissions are required on the file itself,
-but in the case of
-.BR statx ()
-with a pathname,
-execute (search) permission is required on all of the directories in
-.I pathname
-that lead to the file.
-.PP
-.BR statx ()
-uses
-.IR pathname ,
-.IR dirfd ,
-and
-.I flags
-to identify the target file in one of the following ways:
-.TP
-An absolute pathname
-If
-.I pathname
-begins with a slash,
-then it is an absolute pathname that identifies the target file.
-In this case,
-.I dirfd
-is ignored.
-.TP
-A relative pathname
-If
-.I pathname
-is a string that begins with a character other than a slash and
-.I dirfd
-is
-.BR AT_FDCWD ,
-then
-.I pathname
-is a relative pathname that is interpreted relative to the process's
-current working directory.
-.TP
-A directory-relative pathname
-If
-.I pathname
-is a string that begins with a character other than a slash and
-.I dirfd
-is a file descriptor that refers to a directory, then
-.I pathname
-is a relative pathname that is interpreted relative to the directory
-referred to by
-.IR dirfd .
-(See
-.BR openat (2)
-for an explanation of why this is useful.)
-.TP
-By file descriptor
-If
-.I pathname
-is an empty string and the
-.B AT_EMPTY_PATH
-flag is specified in
-.I flags
-(see below),
-then the target file is the one referred to by the file descriptor
-.IR dirfd .
-.PP
-.I flags
-can be used to influence a pathname-based lookup.
-A value for
-.I flags
-is constructed by ORing together zero or more of the following constants:
-.TP
-.B AT_EMPTY_PATH
-.\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d
-If
-.I pathname
-is an empty string, operate on the file referred to by
-.I dirfd
-(which may have been obtained using the
-.BR open (2)
-.B O_PATH
-flag).
-In this case,
-.I dirfd
-can refer to any type of file, not just a directory.
-.IP
-If
-.I dirfd
-is
-.BR AT_FDCWD ,
-the call operates on the current working directory.
-.TP
-.B AT_NO_AUTOMOUNT
-Don't automount the terminal ("basename") component of
-.I pathname
-if it is a directory that is an automount point.
-This allows the caller to gather attributes of an automount point
-(rather than the location it would mount).
-This flag has no effect if the mount point has already been mounted over.
-.IP
-The
-.B AT_NO_AUTOMOUNT
-flag can be used in tools that scan directories
-to prevent mass-automounting of a directory of automount points.
-.IP
-All of
-.BR stat (2),
-.BR lstat (2),
-and
-.BR fstatat (2)
-act as though
-.B AT_NO_AUTOMOUNT
-was set.
-.TP
-.B AT_SYMLINK_NOFOLLOW
-If
-.I pathname
-is a symbolic link, do not dereference it:
-instead return information about the link itself, like
-.BR lstat (2).
-.PP
-.I flags
-can also be used to control what sort of synchronization the kernel will do
-when querying a file on a remote filesystem.
-This is done by ORing in one of the following values:
-.TP
-.B AT_STATX_SYNC_AS_STAT
-Do whatever
-.BR stat (2)
-does.
-This is the default and is very much filesystem-specific.
-.TP
-.B AT_STATX_FORCE_SYNC
-Force the attributes to be synchronized with the server.
-This may require that
-a network filesystem perform a data writeback to get the timestamps correct.
-.TP
-.B AT_STATX_DONT_SYNC
-Don't synchronize anything, but rather just take whatever
-the system has cached if possible.
-This may mean that the information returned is approximate, but,
-on a network filesystem, it may not involve a round trip to the server - even
-if no lease is held.
-.PP
-The
-.I mask
-argument to
-.BR statx ()
-is used to tell the kernel which fields the caller is interested in.
-.I mask
-is an ORed combination of the following constants:
-.PP
-.in +4n
-.TS
-lB l.
-STATX_TYPE Want stx_mode & S_IFMT
-STATX_MODE Want stx_mode & \[ti]S_IFMT
-STATX_NLINK Want stx_nlink
-STATX_UID Want stx_uid
-STATX_GID Want stx_gid
-STATX_ATIME Want stx_atime
-STATX_MTIME Want stx_mtime
-STATX_CTIME Want stx_ctime
-STATX_INO Want stx_ino
-STATX_SIZE Want stx_size
-STATX_BLOCKS Want stx_blocks
-STATX_BASIC_STATS [All of the above]
-STATX_BTIME Want stx_btime
-STATX_ALL The same as STATX_BASIC_STATS | STATX_BTIME.
- It is deprecated and should not be used.
-STATX_MNT_ID Want stx_mnt_id (since Linux 5.8)
-STATX_DIOALIGN Want stx_dio_mem_align and stx_dio_offset_align
- (since Linux 6.1; support varies by filesystem)
-.TE
-.in
-.PP
-Note that, in general, the kernel does
-.I not
-reject values in
-.I mask
-other than the above.
-(For an exception, see
-.B EINVAL
-in errors.)
-Instead, it simply informs the caller which values are supported
-by this kernel and filesystem via the
-.I statx.stx_mask
-field.
-Therefore,
-.I "do not"
-simply set
-.I mask
-to
-.B UINT_MAX
-(all bits set),
-as one or more bits may, in the future, be used to specify an
-extension to the buffer.
-.SS
-The returned information
-The status information for the target file is returned in the
-.I statx
-structure pointed to by
-.IR statxbuf .
-Included in this is
-.I stx_mask
-which indicates what other information has been returned.
-.I stx_mask
-has the same format as the
-.I mask
-argument and bits are set in it to indicate
-which fields have been filled in.
-.PP
-It should be noted that the kernel may return fields that weren't
-requested and may fail to return fields that were requested,
-depending on what the backing filesystem supports.
-(Fields that are given values despite being unrequested can just be ignored.)
-In either case,
-.I stx_mask
-will not be equal
-.IR mask .
-.PP
-If a filesystem does not support a field or if it has
-an unrepresentable value (for instance, a file with an exotic type),
-then the mask bit corresponding to that field will be cleared in
-.I stx_mask
-even if the user asked for it and a dummy value will be filled in for
-compatibility purposes if one is available (e.g., a dummy UID and GID may be
-specified to mount under some circumstances).
-.PP
-A filesystem may also fill in fields that the caller didn't ask for if it has
-values for them available and the information is available at no extra cost.
-If this happens, the corresponding bits will be set in
-.IR stx_mask .
-.PP
-.\" Background: inode attributes are modified with i_mutex held, but
-.\" read by stat() without taking the mutex.
-.IR Note :
-for performance and simplicity reasons, different fields in the
-.I statx
-structure may contain state information from different moments
-during the execution of the system call.
-For example, if
-.I stx_mode
-or
-.I stx_uid
-is changed by another process by calling
-.BR chmod (2)
-or
-.BR chown (2),
-.BR stat ()
-might return the old
-.I stx_mode
-together with the new
-.IR stx_uid ,
-or the old
-.I stx_uid
-together with the new
-.IR stx_mode .
-.PP
-Apart from
-.I stx_mask
-(which is described above), the fields in the
-.I statx
-structure are:
-.TP
-.I stx_blksize
-The "preferred" block size for efficient filesystem I/O.
-(Writing to a file in
-smaller chunks may cause an inefficient read-modify-rewrite.)
-.TP
-.I stx_attributes
-Further status information about the file (see below for more information).
-.TP
-.I stx_nlink
-The number of hard links on a file.
-.TP
-.I stx_uid
-This field contains the user ID of the owner of the file.
-.TP
-.I stx_gid
-This field contains the ID of the group owner of the file.
-.TP
-.I stx_mode
-The file type and mode.
-See
-.BR inode (7)
-for details.
-.TP
-.I stx_ino
-The inode number of the file.
-.TP
-.I stx_size
-The size of the file (if it is a regular file or a symbolic link) in bytes.
-The size of a symbolic link is the length of the pathname it contains,
-without a terminating null byte.
-.TP
-.I stx_blocks
-The number of blocks allocated to the file on the medium, in 512-byte units.
-(This may be smaller than
-.IR stx_size /512
-when the file has holes.)
-.TP
-.I stx_attributes_mask
-A mask indicating which bits in
-.I stx_attributes
-are supported by the VFS and the filesystem.
-.TP
-.I stx_atime
-The file's last access timestamp.
-.TP
-.I stx_btime
-The file's creation timestamp.
-.TP
-.I stx_ctime
-The file's last status change timestamp.
-.TP
-.I stx_mtime
-The file's last modification timestamp.
-.TP
-.IR stx_dev_major " and " stx_dev_minor
-The device on which this file (inode) resides.
-.TP
-.IR stx_rdev_major " and " stx_rdev_minor
-The device that this file (inode) represents if the file is of block or
-character device type.
-.TP
-.I stx_mnt_id
-.\" commit fa2fcf4f1df1559a0a4ee0f46915b496cc2ebf60
-The mount ID of the mount containing the file.
-This is the same number reported by
-.BR name_to_handle_at (2)
-and corresponds to the number in the first field in one of the records in
-.IR /proc/self/mountinfo .
-.TP
-.I stx_dio_mem_align
-The alignment (in bytes) required for user memory buffers for direct I/O
-.RB ( O_DIRECT )
-on this file,
-or 0 if direct I/O is not supported on this file.
-.IP
-.B STATX_DIOALIGN
-.RI ( stx_dio_mem_align
-and
-.IR stx_dio_offset_align )
-is supported on block devices since Linux 6.1.
-The support on regular files varies by filesystem;
-it is supported by ext4, f2fs, and xfs since Linux 6.1.
-.TP
-.I stx_dio_offset_align
-The alignment (in bytes) required for file offsets and I/O segment lengths
-for direct I/O
-.RB ( O_DIRECT )
-on this file,
-or 0 if direct I/O is not supported on this file.
-This will only be nonzero if
-.I stx_dio_mem_align
-is nonzero, and vice versa.
-.PP
-For further information on the above fields, see
-.BR inode (7).
-.\"
-.SS File attributes
-The
-.I stx_attributes
-field contains a set of ORed flags that indicate additional attributes
-of the file.
-Note that any attribute that is not indicated as supported by
-.I stx_attributes_mask
-has no usable value here.
-The bits in
-.I stx_attributes_mask
-correspond bit-by-bit to
-.IR stx_attributes .
-.PP
-The flags are as follows:
-.TP
-.B STATX_ATTR_COMPRESSED
-The file is compressed by the filesystem and may take extra resources
-to access.
-.TP
-.B STATX_ATTR_IMMUTABLE
-The file cannot be modified: it cannot be deleted or renamed,
-no hard links can be created to this file and no data can be written to it.
-See
-.BR chattr (1).
-.TP
-.B STATX_ATTR_APPEND
-The file can only be opened in append mode for writing.
-Random access writing
-is not permitted.
-See
-.BR chattr (1).
-.TP
-.B STATX_ATTR_NODUMP
-File is not a candidate for backup when a backup program such as
-.BR dump (8)
-is run.
-See
-.BR chattr (1).
-.TP
-.B STATX_ATTR_ENCRYPTED
-A key is required for the file to be encrypted by the filesystem.
-.TP
-.BR STATX_ATTR_VERITY " (since Linux 5.5)"
-.\" commit 3ad2522c64cff1f5aebb987b00683268f0cc7c29
-The file has fs-verity enabled.
-It cannot be written to, and all reads from it will be verified
-against a cryptographic hash that covers the
-entire file (e.g., via a Merkle tree).
-.TP
-.BR STATX_ATTR_DAX " (since Linux 5.8)"
-The file is in the DAX (cpu direct access) state.
-DAX state attempts to
-minimize software cache effects for both I/O and memory mappings of this file.
-It requires a file system which has been configured to support DAX.
-.IP
-DAX generally assumes all accesses are via CPU load / store instructions
-which can minimize overhead for small accesses,
-but may adversely affect CPU utilization for large transfers.
-.IP
-File I/O is done directly to/from user-space buffers and memory mapped I/O may
-be performed with direct memory mappings that bypass the kernel page cache.
-.IP
-While the DAX property tends to result in data being transferred synchronously,
-it does not give the same guarantees as the
-.B O_SYNC
-flag (see
-.BR open (2)),
-where data and the necessary metadata are transferred together.
-.IP
-A DAX file may support being mapped with the
-.B MAP_SYNC
-flag, which enables a
-program to use CPU cache flush instructions to persist CPU store operations
-without an explicit
-.BR fsync (2).
-See
-.BR mmap (2)
-for more information.
-.TP
-.BR STATX_ATTR_MOUNT_ROOT " (since Linux 5.10)"
-.\" commit 80340fe3605c0e78cfe496c3b3878be828cfdbfe
-The file is the root of a mount.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-Search permission is denied for one of the directories
-in the path prefix of
-.IR pathname .
-(See also
-.BR path_resolution (7).)
-.TP
-.B EBADF
-.I pathname
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B EFAULT
-.I pathname
-or
-.I statxbuf
-is NULL or points to a location outside the process's
-accessible address space.
-.TP
-.B EINVAL
-Invalid flag specified in
-.IR flags .
-.TP
-.B EINVAL
-Reserved flag specified in
-.IR mask .
-(Currently, there is one such flag, designated by the constant
-.BR STATX__RESERVED ,
-with the value 0x80000000U.)
-.TP
-.B ELOOP
-Too many symbolic links encountered while traversing the pathname.
-.TP
-.B ENAMETOOLONG
-.I pathname
-is too long.
-.TP
-.B ENOENT
-A component of
-.I pathname
-does not exist, or
-.I pathname
-is an empty string and
-.B AT_EMPTY_PATH
-was not specified in
-.IR flags .
-.TP
-.B ENOMEM
-Out of memory (i.e., kernel memory).
-.TP
-.B ENOTDIR
-A component of the path prefix of
-.I pathname
-is not a directory or
-.I pathname
-is relative and
-.I dirfd
-is a file descriptor referring to a file other than a directory.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 4.11,
-glibc 2.28.
-.SH SEE ALSO
-.BR ls (1),
-.BR stat (1),
-.BR access (2),
-.BR chmod (2),
-.BR chown (2),
-.BR name_to_handle_at (2),
-.BR readlink (2),
-.BR stat (2),
-.BR utime (2),
-.BR proc (5),
-.BR capabilities (7),
-.BR inode (7),
-.BR symlink (7)
diff --git a/man2/stime.2 b/man2/stime.2
deleted file mode 100644
index ec0a9d02b..000000000
--- a/man2/stime.2
+++ /dev/null
@@ -1,73 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 2001-03-16 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 2004-05-27 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH stime 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-stime \- set time
-.SH SYNOPSIS
-.nf
-.B #include <time.h>
-.PP
-.BI "[[deprecated]] int stime(const time_t *" t );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR stime ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-.BR NOTE :
-This function is deprecated;
-use
-.BR clock_settime (2)
-instead.
-.PP
-.BR stime ()
-sets the system's idea of the time and date.
-The time, pointed
-to by \fIt\fP, is measured in seconds since the
-Epoch, 1970-01-01 00:00:00 +0000 (UTC).
-.BR stime ()
-may be executed only by the superuser.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-Error in getting information from user space.
-.TP
-.B EPERM
-The calling process has insufficient privilege.
-Under Linux, the
-.B CAP_SYS_TIME
-privilege is required.
-.SH STANDARDS
-None.
-.SH HISTORY
-SVr4.
-.PP
-Starting with glibc 2.31,
-this function is no longer available to newly linked applications
-and is no longer declared in
-.IR <time.h> .
-.SH SEE ALSO
-.BR date (1),
-.BR settimeofday (2),
-.BR capabilities (7)
diff --git a/man2/stty.2 b/man2/stty.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/stty.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/subpage_prot.2 b/man2/subpage_prot.2
deleted file mode 100644
index 2719e9ceb..000000000
--- a/man2/subpage_prot.2
+++ /dev/null
@@ -1,118 +0,0 @@
-.\" Copyright (c) 2010 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" based on a proposal from Stephan Mueller <smueller@atsec.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Various pieces of text taken from the kernel source and the commentary
-.\" in Linux commit fa28237cfcc5827553044cbd6ee52e33692b0faa
-.\" both written by Paul Mackerras <paulus@samba.org>
-.\"
-.TH subpage_prot 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-subpage_prot \- define a subpage protection for an address range
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_subpage_prot, unsigned long " addr ", unsigned long " len ,
-.BI " uint32_t *" map );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR subpage_prot (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-The PowerPC-specific
-.BR subpage_prot ()
-system call provides the facility to control the access
-permissions on individual 4\ kB subpages on systems configured with
-a page size of 64\ kB.
-.PP
-The protection map is applied to the memory pages in the region starting at
-.I addr
-and continuing for
-.I len
-bytes.
-Both of these arguments must be aligned to a 64-kB boundary.
-.PP
-The protection map is specified in the buffer pointed to by
-.IR map .
-The map has 2 bits per 4\ kB subpage;
-thus each 32-bit word specifies the protections of 16 4\ kB subpages
-inside a 64\ kB page
-(so, the number of 32-bit words pointed to by
-.I map
-should equate to the number of 64-kB pages specified by
-.IR len ).
-Each 2-bit field in the protection map is either 0 to allow any access,
-1 to prevent writes, or 2 or 3 to prevent all accesses.
-.SH RETURN VALUE
-On success,
-.BR subpage_prot ()
-returns 0.
-Otherwise, one of the error codes specified below is returned.
-.SH ERRORS
-.TP
-.B EFAULT
-The buffer referred to by
-.I map
-is not accessible.
-.TP
-.B EINVAL
-The
-.I addr
-or
-.I len
-arguments are incorrect.
-Both of these arguments must be aligned to a multiple of the system page size,
-and they must not refer to a region outside of the
-address space of the process or to a region that consists of huge pages.
-.TP
-.B ENOMEM
-Out of memory.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.25 (PowerPC).
-.PP
-The system call is provided only if the kernel is configured with
-.BR CONFIG_PPC_64K_PAGES .
-.SH NOTES
-Normal page protections (at the 64-kB page level) also apply;
-the subpage protection mechanism is an additional constraint,
-so putting 0 in a 2-bit field won't allow writes to a page that is otherwise
-write-protected.
-.SS Rationale
-This system call is provided to assist writing emulators that
-operate using 64-kB pages on PowerPC systems.
-When emulating systems such as x86, which uses a smaller page size,
-the emulator can no longer use the memory-management unit (MMU)
-and normal system calls for controlling page protections.
-(The emulator could emulate the MMU by checking and possibly remapping
-the address for each memory access in software, but that is slow.)
-The idea is that the emulator supplies an array of protection masks
-to apply to a specified range of virtual addresses.
-These masks are applied at the level where hardware page-table entries (PTEs)
-are inserted into the hardware page table based on the Linux PTEs,
-so the Linux PTEs are not affected.
-Implicit in this is that the regions of the address space that are
-protected are switched to use 4-kB hardware pages rather than 64-kB
-hardware pages (on machines with hardware 64-kB page support).
-.\" In the initial implementation, it was the case that:
-.\" In fact the whole process is switched to use 4 kB hardware pages when the
-.\" subpage_prot system call is used, but this could be improved in future
-.\" to switch only the affected segments.
-.\" But Paul Mackerass says (Oct 2010): I'm pretty sure we now only switch
-.\" the affected segment, not the whole process.
-.SH SEE ALSO
-.BR mprotect (2),
-.BR syscall (2)
-.PP
-.I Documentation/admin\-guide/mm/hugetlbpage.rst
-in the Linux kernel source tree
diff --git a/man2/swapoff.2 b/man2/swapoff.2
deleted file mode 100644
index 2bd424c14..000000000
--- a/man2/swapoff.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/swapon.2
diff --git a/man2/swapon.2 b/man2/swapon.2
deleted file mode 100644
index 8f798ef7b..000000000
--- a/man2/swapon.2
+++ /dev/null
@@ -1,197 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1995-07-22 by Michael Chastain <mec@duracef.shout.net>
-.\" Modified 1995-07-23 by aeb
-.\" Modified 1996-10-22 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1998-09-08 by aeb
-.\" Modified 2004-06-17 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2004-10-10 by aeb
-.\" 2004-12-14 mtk, Anand Kumria: added new errors
-.\" 2007-06-22 Ivana Varekova <varekova@redhat.com>, mtk
-.\" Update text describing limit on number of swap files.
-.\" 2021-01-17 Alex Baranowski <alex@euro-linux.com>
-.\" Update information about available swap files decreased by
-.\" CONFIG_DEVICE_PRIVATE option.
-.\"
-.\" FIXME Linux 3.11 added SWAP_FLAG_DISCARD_ONCE and SWAP_FLAG_DISCARD_PAGES
-.\" commit dcf6b7ddd7df8965727746f89c59229b23180e5a
-.\" Author: Rafael Aquini <aquini@redhat.com>
-.\" Date: Wed Jul 3 15:02:46 2013 -0700
-.\"
-.TH swapon 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-swapon, swapoff \- start/stop swapping to file/device
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/swap.h>
-.PP
-.BI "int swapon(const char *" path ", int " swapflags );
-.BI "int swapoff(const char *" path );
-.fi
-.SH DESCRIPTION
-.BR swapon ()
-sets the swap area to the file or block device specified by
-.IR path .
-.BR swapoff ()
-stops swapping to the file or block device specified by
-.IR path .
-.PP
-If the
-.B SWAP_FLAG_PREFER
-flag is specified in the
-.BR swapon ()
-.I swapflags
-argument, the new swap area will have a higher priority than default.
-The priority is encoded within
-.I swapflags
-as:
-.PP
-.in +4n
-.EX
-.I "(prio << SWAP_FLAG_PRIO_SHIFT) & SWAP_FLAG_PRIO_MASK"
-.EE
-.in
-.PP
-If the
-.B SWAP_FLAG_DISCARD
-flag is specified in the
-.BR swapon ()
-.I swapflags
-argument, freed swap pages will be discarded before they are reused,
-if the swap device supports the discard or trim operation.
-(This may improve performance on some Solid State Devices,
-but often it does not.)
-See also NOTES.
-.PP
-These functions may be used only by a privileged process (one having the
-.B CAP_SYS_ADMIN
-capability).
-.SS Priority
-Each swap area has a priority, either high or low.
-The default priority is low.
-Within the low-priority areas,
-newer areas are even lower priority than older areas.
-.PP
-All priorities set with
-.I swapflags
-are high-priority, higher than default.
-They may have any nonnegative value chosen by the caller.
-Higher numbers mean higher priority.
-.PP
-Swap pages are allocated from areas in priority order,
-highest priority first.
-For areas with different priorities,
-a higher-priority area is exhausted before using a lower-priority area.
-If two or more areas have the same priority,
-and it is the highest priority available,
-pages are allocated on a round-robin basis between them.
-.PP
-As of Linux 1.3.6, the kernel usually follows these rules,
-but there are exceptions.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBUSY
-(for
-.BR swapon ())
-The specified
-.I path
-is already being used as a swap area.
-.TP
-.B EINVAL
-The file
-.I path
-exists, but refers neither to a regular file nor to a block device;
-.TP
-.B EINVAL
-.RB ( swapon ())
-The indicated path does not contain a valid swap signature or
-resides on an in-memory filesystem such as
-.BR tmpfs (5).
-.TP
-.BR EINVAL " (since Linux 3.4)"
-.RB ( swapon ())
-An invalid flag value was specified in
-.IR swapflags .
-.TP
-.B EINVAL
-.RB ( swapoff ())
-.I path
-is not currently a swap area.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOENT
-The file
-.I path
-does not exist.
-.TP
-.B ENOMEM
-The system has insufficient memory to start swapping.
-.TP
-.B EPERM
-The caller does not have the
-.B CAP_SYS_ADMIN
-capability.
-Alternatively, the maximum number of swap files are already in use;
-see NOTES below.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-The
-.I swapflags
-argument was introduced in Linux 1.3.2.
-.SH NOTES
-The partition or path must be prepared with
-.BR mkswap (8).
-.PP
-There is an upper limit on the number of swap files that may be used,
-defined by the kernel constant
-.BR MAX_SWAPFILES .
-Before Linux 2.4.10,
-.B MAX_SWAPFILES
-has the value 8;
-since Linux 2.4.10, it has the value 32.
-Since Linux 2.6.18, the limit is decreased by 2 (thus: 30)
-if the kernel is built with the
-.B CONFIG_MIGRATION
-option
-(which reserves two swap table entries for the page migration features of
-.BR mbind (2)
-and
-.BR migrate_pages (2)).
-Since Linux 2.6.32, the limit is further decreased by 1
-if the kernel is built with the
-.B CONFIG_MEMORY_FAILURE
-option.
-Since Linux 5.14, the limit is further decreased by 4
-if the kernel is built with the
-.B CONFIG_DEVICE_PRIVATE
-option.
-.PP
-Discard of swap pages was introduced in Linux 2.6.29,
-then made conditional
-on the
-.B SWAP_FLAG_DISCARD
-flag in Linux 2.6.36,
-.\" To be precise: 2.6.35.5
-which still discards the
-entire swap area when
-.BR swapon ()
-is called, even if that flag bit is not set.
-.SH SEE ALSO
-.BR mkswap (8),
-.BR swapoff (8),
-.BR swapon (8)
diff --git a/man2/symlink.2 b/man2/symlink.2
deleted file mode 100644
index 4475bcb90..000000000
--- a/man2/symlink.2
+++ /dev/null
@@ -1,265 +0,0 @@
-.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\" and Copyright (C) 1993 Michael Haardt, Ian Jackson.
-.\" and Copyright (C) 2006, 2014 Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 1993-07-24 by Rik Faith
-.\" Modified 1996-04-26 by Nick Duffek <nsd@bbc.com>
-.\" Modified 1996-11-06 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1997-01-31 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH symlink 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-symlink, symlinkat \- make a new name for a file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int symlink(const char *" target ", const char *" linkpath );
-.PP
-.BR "#include <fcntl.h> " "/* Definition of " AT_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int symlinkat(const char *" target ", int " newdirfd \
-", const char *" linkpath );
-.PP
-.fi
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR symlink ():
-.nf
- _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200112L
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* glibc <= 2.19: */ _BSD_SOURCE
-.fi
-.PP
-.BR symlinkat ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _ATFILE_SOURCE
-.fi
-.SH DESCRIPTION
-.BR symlink ()
-creates a symbolic link named
-.I linkpath
-which contains the string
-.IR target .
-.PP
-Symbolic links are interpreted at run time as if the contents of the
-link had been substituted into the path being followed to find a file or
-directory.
-.PP
-Symbolic links may contain
-.I ..
-path components, which (if used at the start of the link) refer to the
-parent directories of that in which the link resides.
-.PP
-A symbolic link (also known as a soft link) may point to an existing
-file or to a nonexistent one; the latter case is known as a dangling
-link.
-.PP
-The permissions of a symbolic link are irrelevant; the ownership is
-ignored when following the link
-(except when the
-.I protected_symlinks
-feature is enabled, as explained in
-.BR proc (5)),
-but is checked when removal or
-renaming of the link is requested and the link is in a directory with
-the sticky bit
-.RB ( S_ISVTX )
-set.
-.PP
-If
-.I linkpath
-exists, it will
-.I not
-be overwritten.
-.SS symlinkat()
-The
-.BR symlinkat ()
-system call operates in exactly the same way as
-.BR symlink (),
-except for the differences described here.
-.PP
-If the pathname given in
-.I linkpath
-is relative, then it is interpreted relative to the directory
-referred to by the file descriptor
-.I newdirfd
-(rather than relative to the current working directory of
-the calling process, as is done by
-.BR symlink ()
-for a relative pathname).
-.PP
-If
-.I linkpath
-is relative and
-.I newdirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I linkpath
-is interpreted relative to the current working
-directory of the calling process (like
-.BR symlink ()).
-.PP
-If
-.I linkpath
-is absolute, then
-.I newdirfd
-is ignored.
-.PP
-See
-.BR openat (2)
-for an explanation of the need for
-.BR symlinkat ().
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-Write access to the directory containing
-.I linkpath
-is denied, or one of the directories in the path prefix of
-.I linkpath
-did not allow search permission.
-(See also
-.BR path_resolution (7).)
-.TP
-.B EBADF
-.RB ( symlinkat ())
-.I linkpath
-is relative but
-.I newdirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B EDQUOT
-The user's quota of resources on the filesystem has been exhausted.
-The resources could be inodes or disk blocks, depending on the filesystem
-implementation.
-.TP
-.B EEXIST
-.I linkpath
-already exists.
-.TP
-.B EFAULT
-.IR target " or " linkpath " points outside your accessible address space."
-.TP
-.B EIO
-An I/O error occurred.
-.TP
-.B ELOOP
-Too many symbolic links were encountered in resolving
-.IR linkpath .
-.TP
-.B ENAMETOOLONG
-.IR target " or " linkpath " was too long."
-.TP
-.B ENOENT
-A directory component in
-.I linkpath
-does not exist or is a dangling symbolic link, or
-.I target
-or
-.I linkpath
-is an empty string.
-.TP
-.B ENOENT
-.RB ( symlinkat ())
-.I linkpath
-is a relative pathname and
-.I newdirfd
-refers to a directory that has been deleted.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOSPC
-The device containing the file has no room for the new directory
-entry.
-.TP
-.B ENOTDIR
-A component used as a directory in
-.I linkpath
-is not, in fact, a directory.
-.TP
-.B ENOTDIR
-.RB ( symlinkat ())
-.I linkpath
-is relative and
-.I newdirfd
-is a file descriptor referring to a file other than a directory.
-.TP
-.B EPERM
-The filesystem containing
-.I linkpath
-does not support the creation of symbolic links.
-.TP
-.B EROFS
-.I linkpath
-is on a read-only filesystem.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR symlink ()
-SVr4, 4.3BSD, POSIX.1-2001.
-.\" SVr4 documents additional error codes EDQUOT and ENOSYS.
-.\" See
-.\" .BR open (2)
-.\" re multiple files with the same name, and NFS.
-.TP
-.BR symlinkat ()
-POSIX.1-2008.
-Linux 2.6.16,
-glibc 2.4.
-.SS glibc notes
-On older kernels where
-.BR symlinkat ()
-is unavailable, the glibc wrapper function falls back to the use of
-.BR symlink ().
-When
-.I linkpath
-is a relative pathname,
-glibc constructs a pathname based on the symbolic link in
-.I /proc/self/fd
-that corresponds to the
-.I newdirfd
-argument.
-.SH NOTES
-No checking of
-.I target
-is done.
-.PP
-Deleting the name referred to by a symbolic link will actually delete the
-file (unless it also has other hard links).
-If this behavior is not desired, use
-.BR link (2).
-.SH SEE ALSO
-.BR ln (1),
-.BR namei (1),
-.BR lchown (2),
-.BR link (2),
-.BR lstat (2),
-.BR open (2),
-.BR readlink (2),
-.BR rename (2),
-.BR unlink (2),
-.BR path_resolution (7),
-.BR symlink (7)
diff --git a/man2/symlinkat.2 b/man2/symlinkat.2
deleted file mode 100644
index 78568cd0a..000000000
--- a/man2/symlinkat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/symlink.2
diff --git a/man2/sync.2 b/man2/sync.2
deleted file mode 100644
index c1257fdc2..000000000
--- a/man2/sync.2
+++ /dev/null
@@ -1,146 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\" and Copyright (c) 2011 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified Sat Jul 24 12:02:47 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 15 Apr 1995 by Michael Chastain <mec@shell.portal.com>:
-.\" Added reference to `bdflush(2)'.
-.\" Modified 960414 by Andries Brouwer <aeb@cwi.nl>:
-.\" Added the fact that since 1.3.20 sync actually waits.
-.\" Modified Tue Oct 22 22:27:07 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2001-10-10 by aeb, following Michael Kerrisk.
-.\" 2011-09-07, mtk, Added syncfs() documentation,
-.\"
-.TH sync 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sync, syncfs \- commit filesystem caches to disk
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.B void sync(void);
-.PP
-.BI "int syncfs(int " fd );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sync ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE
-.fi
-.PP
-.BR syncfs ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-.BR sync ()
-causes all pending modifications to filesystem metadata and cached file
-data to be written to the underlying filesystems.
-.PP
-.BR syncfs ()
-is like
-.BR sync (),
-but synchronizes just the filesystem containing file
-referred to by the open file descriptor
-.IR fd .
-.SH RETURN VALUE
-.BR syncfs ()
-returns 0 on success;
-on error, it returns \-1 and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-.BR sync ()
-is always successful.
-.PP
-.BR syncfs ()
-can fail for at least the following reasons:
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor.
-.TP
-.B EIO
-An error occurred during synchronization.
-This error may relate to data written to any file on the filesystem, or on
-metadata related to the filesystem itself.
-.TP
-.B ENOSPC
-Disk space was exhausted while synchronizing.
-.TP
-.BR ENOSPC ", " EDQUOT
-Data was written to a file on NFS or another filesystem which does not
-allocate space at the time of a
-.BR write (2)
-system call, and some previous write failed due to insufficient
-storage space.
-.SH VERSIONS
-According to the standard specification (e.g., POSIX.1-2001),
-.BR sync ()
-schedules the writes, but may return before the actual
-writing is done.
-However Linux waits for I/O completions,
-and thus
-.BR sync ()
-or
-.BR syncfs ()
-provide the same guarantees as
-.BR fsync ()
-called on every file in
-the system or filesystem respectively.
-.SH STANDARDS
-.TP
-.BR sync ()
-POSIX.1-2008.
-.TP
-.BR syncfs ()
-Linux.
-.SH HISTORY
-.TP
-.BR sync ()
-POSIX.1-2001, SVr4, 4.3BSD.
-.TP
-.BR syncfs ()
-Linux 2.6.39,
-glibc 2.14.
-.PP
-Since glibc 2.2.2, the Linux prototype for
-.BR sync ()
-is as listed above,
-following the various standards.
-In glibc 2.2.1 and earlier,
-it was "int sync(void)", and
-.BR sync ()
-always returned 0.
-.PP
-In mainline kernel versions prior to Linux 5.8,
-.BR syncfs ()
-will fail only when passed a bad file descriptor
-.RB ( EBADF ).
-Since Linux 5.8,
-.\" commit 735e4ae5ba28c886d249ad04d3c8cc097dad6336
-.BR syncfs ()
-will also report an error if one or more inodes failed
-to be written back since the last
-.BR syncfs ()
-call.
-.SH BUGS
-Before Linux 1.3.20, Linux did not wait for I/O to complete
-before returning.
-.SH SEE ALSO
-.BR sync (1),
-.BR fdatasync (2),
-.BR fsync (2)
diff --git a/man2/sync_file_range.2 b/man2/sync_file_range.2
deleted file mode 100644
index d633b08ff..000000000
--- a/man2/sync_file_range.2
+++ /dev/null
@@ -1,205 +0,0 @@
-.\" Copyright (c) 2006 Andrew Morton <akpm@osdl.org>
-.\" and Copyright 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2006-07-05 Initial creation, Michael Kerrisk based on
-.\" Andrew Morton's comments in fs/sync.c
-.\" 2010-10-09, mtk, Document sync_file_range2()
-.\"
-.TH sync_file_range 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sync_file_range \- sync a file segment with disk
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <fcntl.h>
-.PP
-.BI "int sync_file_range(int " fd ", off64_t " offset ", off64_t " nbytes ,
-.BI " unsigned int " flags );
-.fi
-.SH DESCRIPTION
-.BR sync_file_range ()
-permits fine control when synchronizing the open file referred to by the
-file descriptor
-.I fd
-with disk.
-.PP
-.I offset
-is the starting byte of the file range to be synchronized.
-.I nbytes
-specifies the length of the range to be synchronized, in bytes; if
-.I nbytes
-is zero, then all bytes from
-.I offset
-through to the end of file are synchronized.
-Synchronization is in units of the system page size:
-.I offset
-is rounded down to a page boundary;
-.I (offset+nbytes\-1)
-is rounded up to a page boundary.
-.PP
-The
-.I flags
-bit-mask argument can include any of the following values:
-.TP
-.B SYNC_FILE_RANGE_WAIT_BEFORE
-Wait upon write-out of all pages in the specified range
-that have already been submitted to the device driver for write-out
-before performing any write.
-.TP
-.B SYNC_FILE_RANGE_WRITE
-Initiate write-out of all dirty pages in the specified
-range which are not presently submitted write-out.
-Note that even this may block if you attempt to
-write more than request queue size.
-.TP
-.B SYNC_FILE_RANGE_WAIT_AFTER
-Wait upon write-out of all pages in the range
-after performing any write.
-.PP
-Specifying
-.I flags
-as 0 is permitted, as a no-op.
-.SS Warning
-This system call is extremely dangerous and should not be used in portable
-programs.
-None of these operations writes out the file's metadata.
-Therefore, unless the application is strictly performing overwrites of
-already-instantiated disk blocks, there are no guarantees that the data will
-be available after a crash.
-There is no user interface to know if a write is purely an overwrite.
-On filesystems using copy-on-write semantics (e.g.,
-.IR btrfs )
-an overwrite of existing allocated blocks is impossible.
-When writing into preallocated space,
-many filesystems also require calls into the block
-allocator, which this system call does not sync out to disk.
-This system call does not flush disk write caches and thus does not provide
-any data integrity on systems with volatile disk write caches.
-.SS Some details
-.B SYNC_FILE_RANGE_WAIT_BEFORE
-and
-.B SYNC_FILE_RANGE_WAIT_AFTER
-will detect any
-I/O errors or
-.B ENOSPC
-conditions and will return these to the caller.
-.PP
-Useful combinations of the
-.I flags
-bits are:
-.TP
-.B SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE
-Ensures that all pages
-in the specified range which were dirty when
-.BR sync_file_range ()
-was called are placed
-under write-out.
-This is a start-write-for-data-integrity operation.
-.TP
-.B SYNC_FILE_RANGE_WRITE
-Start write-out of all dirty pages in the specified range which
-are not presently under write-out.
-This is an asynchronous flush-to-disk
-operation.
-This is not suitable for data integrity operations.
-.TP
-.BR SYNC_FILE_RANGE_WAIT_BEFORE " (or " SYNC_FILE_RANGE_WAIT_AFTER )
-Wait for
-completion of write-out of all pages in the specified range.
-This can be used after an earlier
-.B SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE
-operation to wait for completion of that operation, and obtain its result.
-.TP
-.B SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE | \
-SYNC_FILE_RANGE_WAIT_AFTER
-This is a write-for-data-integrity operation
-that will ensure that all pages in the specified range which were dirty when
-.BR sync_file_range ()
-was called are committed to disk.
-.SH RETURN VALUE
-On success,
-.BR sync_file_range ()
-returns 0; on failure \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor.
-.TP
-.B EINVAL
-.I flags
-specifies an invalid bit; or
-.I offset
-or
-.I nbytes
-is invalid.
-.TP
-.B EIO
-I/O error.
-.TP
-.B ENOMEM
-Out of memory.
-.TP
-.B ENOSPC
-Out of disk space.
-.TP
-.B ESPIPE
-.I fd
-refers to something other than a regular file, a block device, or
-a directory.
-.SH VERSIONS
-.SS sync_file_range2()
-Some architectures (e.g., PowerPC, ARM)
-need 64-bit arguments to be aligned in a suitable pair of registers.
-.\" See kernel commit edd5cd4a9424f22b0fa08bef5e299d41befd5622
-On such architectures, the call signature of
-.BR sync_file_range ()
-shown in the SYNOPSIS would force
-a register to be wasted as padding between the
-.I fd
-and
-.I offset
-arguments.
-(See
-.BR syscall (2)
-for details.)
-Therefore, these architectures define a different
-system call that orders the arguments suitably:
-.PP
-.in +4n
-.EX
-.BI "int sync_file_range2(int " fd ", unsigned int " flags ,
-.BI " off64_t " offset ", off64_t " nbytes );
-.EE
-.in
-.PP
-The behavior of this system call is otherwise exactly the same as
-.BR sync_file_range ().
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.17.
-.SS sync_file_range2()
-A system call with this signature first appeared on the ARM architecture
-in Linux 2.6.20, with the name
-.BR arm_sync_file_range ().
-It was renamed in Linux 2.6.22,
-when the analogous system call was added for PowerPC.
-On architectures where glibc support is provided,
-glibc transparently wraps
-.BR sync_file_range2 ()
-under the name
-.BR sync_file_range ().
-.SH NOTES
-.SH SEE ALSO
-.BR fdatasync (2),
-.BR fsync (2),
-.BR msync (2),
-.BR sync (2)
diff --git a/man2/sync_file_range2.2 b/man2/sync_file_range2.2
deleted file mode 100644
index ad7a1e6c7..000000000
--- a/man2/sync_file_range2.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sync_file_range.2
diff --git a/man2/syncfs.2 b/man2/syncfs.2
deleted file mode 100644
index 555579827..000000000
--- a/man2/syncfs.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/sync.2
diff --git a/man2/syscall.2 b/man2/syscall.2
deleted file mode 100644
index fea186515..000000000
--- a/man2/syscall.2
+++ /dev/null
@@ -1,367 +0,0 @@
-'\" t
-.\" Copyright (c) 1980, 1991, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)syscall.2 8.1 (Berkeley) 6/16/93
-.\"
-.\"
-.\" 2002-03-20 Christoph Hellwig <hch@infradead.org>
-.\" - adopted for Linux
-.\" 2015-01-17, Kees Cook <keescook@chromium.org>
-.\" Added mips and arm64.
-.\"
-.TH syscall 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-syscall \- indirect system call
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "long syscall(long " number ", ...);"
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR syscall ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- Before glibc 2.19:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-.BR syscall ()
-is a small library function that invokes
-the system call whose assembly language
-interface has the specified
-.I number
-with the specified arguments.
-Employing
-.BR syscall ()
-is useful, for example,
-when invoking a system call that has no wrapper function in the C library.
-.PP
-.BR syscall ()
-saves CPU registers before making the system call,
-restores the registers upon return from the system call,
-and stores any error returned by the system call in
-.BR errno (3).
-.PP
-Symbolic constants for system call numbers can be found in the header file
-.IR <sys/syscall.h> .
-.SH RETURN VALUE
-The return value is defined by the system call being invoked.
-In general, a 0 return value indicates success.
-A \-1 return value indicates an error,
-and an error number is stored in
-.IR errno .
-.SH ERRORS
-.TP
-.B ENOSYS
-The requested system call number is not implemented.
-.PP
-Other errors are specific to the invoked system call.
-.SH NOTES
-.BR syscall ()
-first appeared in
-4BSD.
-.SS Architecture-specific requirements
-Each architecture ABI has its own requirements on how
-system call arguments are passed to the kernel.
-For system calls that have a glibc wrapper (e.g., most system calls),
-glibc handles the details of copying arguments to the right registers
-in a manner suitable for the architecture.
-However, when using
-.BR syscall ()
-to make a system call,
-the caller might need to handle architecture-dependent details;
-this requirement is most commonly encountered on certain 32-bit architectures.
-.PP
-For example, on the ARM architecture Embedded ABI (EABI), a
-64-bit value (e.g.,
-.IR "long long" )
-must be aligned to an even register pair.
-Thus, using
-.BR syscall ()
-instead of the wrapper provided by glibc,
-the
-.BR readahead (2)
-system call would be invoked as follows on the ARM architecture with the EABI
-in little endian mode:
-.PP
-.in +4n
-.EX
-syscall(SYS_readahead, fd, 0,
- (unsigned int) (offset & 0xFFFFFFFF),
- (unsigned int) (offset >> 32),
- count);
-.EE
-.in
-.PP
-Since the offset argument is 64 bits, and the first argument
-.RI ( fd )
-is passed in
-.IR r0 ,
-the caller must manually split and align the 64-bit value
-so that it is passed in the
-.IR r2 / r3
-register pair.
-That means inserting a dummy value into
-.I r1
-(the second argument of 0).
-Care also must be taken so that the split follows endian conventions
-(according to the C ABI for the platform).
-.PP
-Similar issues can occur on MIPS with the O32 ABI,
-on PowerPC and parisc with the 32-bit ABI, and on Xtensa.
-.\" Mike Frysinger: this issue ends up forcing MIPS
-.\" O32 to take 7 arguments to syscall()
-.PP
-.\" See arch/parisc/kernel/sys_parisc.c.
-Note that while the parisc C ABI also uses aligned register pairs,
-it uses a shim layer to hide the issue from user space.
-.PP
-The affected system calls are
-.BR fadvise64_64 (2),
-.BR ftruncate64 (2),
-.BR posix_fadvise (2),
-.BR pread64 (2),
-.BR pwrite64 (2),
-.BR readahead (2),
-.BR sync_file_range (2),
-and
-.BR truncate64 (2).
-.PP
-.\" You need to look up the syscalls directly in the kernel source to see if
-.\" they should be in this list. For example, look at fs/read_write.c and
-.\" the function signatures that do:
-.\" ..., unsigned long, pos_l, unsigned long, pos_h, ...
-.\" If they use off_t, then they most likely do not belong in this list.
-This does not affect syscalls that manually split and assemble 64-bit values
-such as
-.BR _llseek (2),
-.BR preadv (2),
-.BR preadv2 (2),
-.BR pwritev (2),
-and
-.BR pwritev2 (2).
-Welcome to the wonderful world of historical baggage.
-.SS Architecture calling conventions
-Every architecture has its own way of invoking and passing arguments to the
-kernel.
-The details for various architectures are listed in the two tables below.
-.PP
-The first table lists the instruction used to transition to kernel mode
-(which might not be the fastest or best way to transition to the kernel,
-so you might have to refer to
-.BR vdso (7)),
-the register used to indicate the system call number,
-the register(s) used to return the system call result,
-and the register used to signal an error.
-.if t \{\
-.ft CW
-\}
-.TS
-l2 l2 l2 l2 l1 l2 l.
-Arch/ABI Instruction System Ret Ret Error Notes
- call # val val2
-_
-alpha callsys v0 v0 a4 a3 1, 6
-arc trap0 r8 r0 - -
-arm/OABI swi NR - r0 - - 2
-arm/EABI swi 0x0 r7 r0 r1 -
-arm64 svc #0 w8 x0 x1 -
-blackfin excpt 0x0 P0 R0 - -
-i386 int $0x80 eax eax edx -
-ia64 break 0x100000 r15 r8 r9 r10 1, 6
-loongarch syscall 0 a7 a0 - -
-m68k trap #0 d0 d0 - -
-microblaze brki r14,8 r12 r3 - -
-mips syscall v0 v0 v1 a3 1, 6
-nios2 trap r2 r2 - r7
-parisc ble 0x100(%sr2, %r0) r20 r28 - -
-powerpc sc r0 r3 - r0 1
-powerpc64 sc r0 r3 - cr0.SO 1
-riscv ecall a7 a0 a1 -
-s390 svc 0 r1 r2 r3 - 3
-s390x svc 0 r1 r2 r3 - 3
-superh trapa #31 r3 r0 r1 - 4, 6
-sparc/32 t 0x10 g1 o0 o1 psr/csr 1, 6
-sparc/64 t 0x6d g1 o0 o1 psr/csr 1, 6
-tile swint1 R10 R00 - R01 1
-x86-64 syscall rax rax rdx - 5
-x32 syscall rax rax rdx - 5
-xtensa syscall a2 a2 - -
-.TE
-.PP
-Notes:
-.IP \[bu] 3
-On a few architectures,
-a register is used as a boolean
-(0 indicating no error, and \-1 indicating an error) to signal that the
-system call failed.
-The actual error value is still contained in the return register.
-On sparc, the carry bit
-.RI ( csr )
-in the processor status register
-.RI ( psr )
-is used instead of a full register.
-On powerpc64, the summary overflow bit
-.RI ( SO )
-in field 0 of the condition register
-.RI ( cr0 )
-is used.
-.IP \[bu]
-.I NR
-is the system call number.
-.IP \[bu]
-For s390 and s390x,
-.I NR
-(the system call number) may be passed directly with
-.I "svc\ NR"
-if it is less than 256.
-.IP \[bu]
-On SuperH additional trap numbers are supported for historic reasons, but
-.BR trapa #31
-is the recommended "unified" ABI.
-.IP \[bu]
-The x32 ABI shares syscall table with x86-64 ABI, but there are some
-nuances:
-.RS
-.IP \[bu] 3
-In order to indicate that a system call is called under the x32 ABI,
-an additional bit,
-.BR __X32_SYSCALL_BIT ,
-is bitwise ORed with the system call number.
-The ABI used by a process affects some process behaviors,
-including signal handling or system call restarting.
-.IP \[bu]
-Since x32 has different sizes for
-.I long
-and pointer types, layouts of some (but not all;
-.I struct timeval
-or
-.I struct rlimit
-are 64-bit, for example) structures are different.
-In order to handle this,
-additional system calls are added to the system call table,
-starting from number 512
-(without the
-.BR __X32_SYSCALL_BIT ).
-For example,
-.B __NR_readv
-is defined as 19 for the x86-64 ABI and as
-.IR __X32_SYSCALL_BIT " | " \fB515\fP
-for the x32 ABI.
-Most of these additional system calls are actually identical
-to the system calls used for providing i386 compat.
-There are some notable exceptions, however, such as
-.BR preadv2 (2),
-which uses
-.I struct iovec
-entities with 4-byte pointers and sizes ("compat_iovec" in kernel terms),
-but passes an 8-byte
-.I pos
-argument in a single register and not two, as is done in every other ABI.
-.RE
-.IP \[bu]
-Some architectures
-(namely, Alpha, IA-64, MIPS, SuperH, sparc/32, and sparc/64)
-use an additional register ("Retval2" in the above table)
-to pass back a second return value from the
-.BR pipe (2)
-system call;
-Alpha uses this technique in the architecture-specific
-.BR getxpid (2),
-.BR getxuid (2),
-and
-.BR getxgid (2)
-system calls as well.
-Other architectures do not use the second return value register
-in the system call interface, even if it is defined in the System V ABI.
-.if t \{\
-.in
-.ft P
-\}
-.PP
-The second table shows the registers used to pass the system call arguments.
-.if t \{\
-.ft CW
-\}
-.TS
-l l2 l2 l2 l2 l2 l2 l2 l.
-Arch/ABI arg1 arg2 arg3 arg4 arg5 arg6 arg7 Notes
-_
-alpha a0 a1 a2 a3 a4 a5 -
-arc r0 r1 r2 r3 r4 r5 -
-arm/OABI r0 r1 r2 r3 r4 r5 r6
-arm/EABI r0 r1 r2 r3 r4 r5 r6
-arm64 x0 x1 x2 x3 x4 x5 -
-blackfin R0 R1 R2 R3 R4 R5 -
-i386 ebx ecx edx esi edi ebp -
-ia64 out0 out1 out2 out3 out4 out5 -
-loongarch a0 a1 a2 a3 a4 a5 a6
-m68k d1 d2 d3 d4 d5 a0 -
-microblaze r5 r6 r7 r8 r9 r10 -
-mips/o32 a0 a1 a2 a3 - - - 1
-mips/n32,64 a0 a1 a2 a3 a4 a5 -
-nios2 r4 r5 r6 r7 r8 r9 -
-parisc r26 r25 r24 r23 r22 r21 -
-powerpc r3 r4 r5 r6 r7 r8 r9
-powerpc64 r3 r4 r5 r6 r7 r8 -
-riscv a0 a1 a2 a3 a4 a5 -
-s390 r2 r3 r4 r5 r6 r7 -
-s390x r2 r3 r4 r5 r6 r7 -
-superh r4 r5 r6 r7 r0 r1 r2
-sparc/32 o0 o1 o2 o3 o4 o5 -
-sparc/64 o0 o1 o2 o3 o4 o5 -
-tile R00 R01 R02 R03 R04 R05 -
-x86-64 rdi rsi rdx r10 r8 r9 -
-x32 rdi rsi rdx r10 r8 r9 -
-xtensa a6 a3 a4 a5 a8 a9 -
-.TE
-.PP
-Notes:
-.IP \[bu] 3
-The mips/o32 system call convention passes
-arguments 5 through 8 on the user stack.
-.if t \{\
-.in
-.ft P
-\}
-.PP
-Note that these tables don't cover the entire calling convention\[em]some
-architectures may indiscriminately clobber other registers not listed here.
-.SH EXAMPLES
-.\" SRC BEGIN (syscall.c)
-.EX
-#define _GNU_SOURCE
-#include <signal.h>
-#include <sys/syscall.h>
-#include <unistd.h>
-\&
-int
-main(void)
-{
- pid_t tid;
-\&
- tid = syscall(SYS_gettid);
- syscall(SYS_tgkill, getpid(), tid, SIGHUP);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR _syscall (2),
-.BR intro (2),
-.BR syscalls (2),
-.BR errno (3),
-.BR vdso (7)
diff --git a/man2/syscalls.2 b/man2/syscalls.2
deleted file mode 100644
index 405629c23..000000000
--- a/man2/syscalls.2
+++ /dev/null
@@ -1,1170 +0,0 @@
-'\" t
-.\" Copyright (C) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" with some input from Stepan Kasal <kasal@ucw.cz>
-.\"
-.\" Some content retained from an earlier version of this page:
-.\" Copyright (C) 1998 Andries Brouwer (aeb@cwi.nl)
-.\" Modifications for 2.2 and 2.4 Copyright (C) 2002 Ian Redfern
-.\" <redferni@logica.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH syscalls 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-syscalls \- Linux system calls
-.SH SYNOPSIS
-.nf
-Linux system calls.
-.fi
-.SH DESCRIPTION
-The system call is the fundamental interface between an application
-and the Linux kernel.
-.SS System calls and library wrapper functions
-System calls are generally not invoked directly,
-but rather via wrapper functions in glibc (or perhaps some other library).
-For details of direct invocation of a system call, see
-.BR intro (2).
-Often, but not always, the name of the wrapper function is the same
-as the name of the system call that it invokes.
-For example, glibc contains a function
-.BR chdir ()
-which invokes the underlying "chdir" system call.
-.PP
-Often the glibc wrapper function is quite thin, doing little work
-other than copying arguments to the right registers
-before invoking the system call,
-and then setting
-.I errno
-appropriately after the system call has returned.
-(These are the same steps that are performed by
-.BR syscall (2),
-which can be used to invoke system calls
-for which no wrapper function is provided.)
-Note: system calls indicate a failure by returning a negative error
-number to the caller on architectures without a separate error register/flag,
-as noted in
-.BR syscall (2);
-when this happens,
-the wrapper function negates the returned error number
-(to make it positive), copies it to
-.IR errno ,
-and returns \-1 to the caller of the wrapper.
-.PP
-Sometimes, however, the wrapper function does some extra work
-before invoking the system call.
-For example, nowadays there are (for reasons described below) two
-related system calls,
-.BR truncate (2)
-and
-.BR truncate64 (2),
-and the glibc
-.BR truncate ()
-wrapper function checks which of those system calls
-are provided by the kernel and determines which should be employed.
-.SS System call list
-Below is a list of the Linux system calls.
-In the list, the
-.I Kernel
-column indicates the kernel version
-for those system calls that were new in Linux 2.2,
-or have appeared since that kernel version.
-Note the following points:
-.IP \[bu] 3
-Where no kernel version is indicated,
-the system call appeared in Linux 1.0 or earlier.
-.IP \[bu]
-Where a system call is marked "1.2"
-this means the system call probably appeared in a Linux 1.1.x kernel version,
-and first appeared in a stable kernel with 1.2.
-(Development of the 1.2 kernel was initiated from a branch of kernel
-1.0.6 via the 1.1.x unstable kernel series.)
-.IP \[bu]
-Where a system call is marked "2.0"
-this means the system call probably appeared in a Linux 1.3.x kernel version,
-and first appeared in a stable kernel with Linux 2.0.
-(Development of the Linux 2.0 kernel was initiated from a branch of
-Linux 1.2.x, somewhere around Linux 1.2.10,
-via the Linux 1.3.x unstable kernel series.)
-.\" Was Linux 2.0 started from a branch of Linux 1.2.10?
-.\" At least from the timestamps of the tarballs of
-.\" of Linux 1.2.10 and Linux 1.3.0, that's how it looks, but in
-.\" fact the diff doesn't seem very clear, the
-.\" Linux 1.3.0 .tar.bz is much bigger (2.0 MB) than the
-.\" Linux 1.2.10 .tar.bz2 (1.8 MB), and AEB points out the
-.\" timestamps of some files in Linux 1.3.0 seem to be older
-.\" than those in Linux 1.2.10. All of this suggests
-.\" that there might not have been a clean branch point.
-.IP \[bu]
-Where a system call is marked "2.2"
-this means the system call probably appeared in a Linux 2.1.x kernel version,
-and first appeared in a stable kernel with Linux 2.2.0.
-(Development of the Linux 2.2 kernel was initiated from a branch of kernel
-Linux 2.0.21 via the Linux 2.1.x unstable kernel series.)
-.IP \[bu]
-Where a system call is marked "2.4"
-this means the system call probably appeared in a Linux 2.3.x kernel version,
-and first appeared in a stable kernel with Linux 2.4.0.
-(Development of the Linux 2.4 kernel was initiated from a branch of
-Linux 2.2.8 via the Linux 2.3.x unstable kernel series.)
-.IP \[bu]
-Where a system call is marked "2.6"
-this means the system call probably appeared in a Linux 2.5.x kernel version,
-and first appeared in a stable kernel with Linux 2.6.0.
-(Development of Linux 2.6 was initiated from a branch
-of Linux 2.4.15 via the Linux 2.5.x unstable kernel series.)
-.IP \[bu]
-Starting with Linux 2.6.0, the development model changed,
-and new system calls may appear in each Linux 2.6.x release.
-In this case, the exact version number where the system call appeared
-is shown.
-This convention continues with the Linux 3.x kernel series,
-which followed on from Linux 2.6.39; and the Linux 4.x kernel series,
-which followed on from Linux 3.19; and the Linux 5.x kernel series,
-which followed on from Linux 4.20.
-.IP \[bu]
-In some cases, a system call was added to a stable kernel
-series after it branched from the previous stable kernel
-series, and then backported into the earlier stable kernel series.
-For example some system calls that appeared in Linux 2.6.x were also backported
-into a Linux 2.4.x release after Linux 2.4.15.
-When this is so, the version where the system call appeared
-in both of the major kernel series is listed.
-.PP
-The list of system calls that are available as at Linux 5.14
-(or in a few cases only on older kernels) is as follows:
-.\"
-.\" Looking at scripts/checksyscalls.sh in the kernel source is
-.\" instructive about x86 specifics.
-.\"
-.nh
-.ad l
-.TS
-l2 le l
----
-l l l.
-\fBSystem call\fP \fBKernel\fP \fBNotes\fP
-
-\fB_llseek\fP(2) 1.2
-\fB_newselect\fP(2) 2.0
-\fB_sysctl\fP(2) 2.0 Removed in 5.5
-\fBaccept\fP(2) 2.0 T{
-See notes on \fBsocketcall\fP(2)
-T}
-\fBaccept4\fP(2) 2.6.28
-\fBaccess\fP(2) 1.0
-\fBacct\fP(2) 1.0
-\fBadd_key\fP(2) 2.6.10
-\fBadjtimex\fP(2) 1.0
-\fBalarm\fP(2) 1.0
-\fBalloc_hugepages\fP(2) 2.5.36 Removed in 2.5.44
-.\" 4adeefe161a74369e44cc8e663f240ece0470dc3
-\fBarc_gettls\fP(2) 3.9 ARC only
-\fBarc_settls\fP(2) 3.9 ARC only
-.\" 91e040a79df73d371f70792f30380d4e44805250
-\fBarc_usr_cmpxchg\fP(2) 4.9 ARC only
-.\" x86: 79170fda313ed5be2394f87aa2a00d597f8ed4a1
-\fBarch_prctl\fP(2) 2.6 T{
-x86_64, x86 since 4.12
-T}
-.\" 9674cdc74d63f346870943ef966a034f8c71ee57
-\fBatomic_barrier\fP(2) 2.6.34 m68k only
-\fBatomic_cmpxchg_32\fP(2) 2.6.34 m68k only
-\fBbdflush\fP(2) 1.2 T{
-Deprecated (does nothing)
-since 2.6
-T}
-\fBbind\fP(2) 2.0 T{
-See notes on \fBsocketcall\fP(2)
-T}
-\fBbpf\fP(2) 3.18
-\fBbrk\fP(2) 1.0
-\fBbreakpoint\fP(2) 2.2 T{
-ARM OABI only, defined with
-\fB__ARM_NR\fP prefix
-T}
-\fBcacheflush\fP(2) 1.2 Not on x86
-\fBcapget\fP(2) 2.2
-\fBcapset\fP(2) 2.2
-\fBchdir\fP(2) 1.0
-\fBchmod\fP(2) 1.0
-\fBchown\fP(2) 2.2 T{
-See \fBchown\fP(2) for
-version details
-T}
-\fBchown32\fP(2) 2.4
-\fBchroot\fP(2) 1.0
-\fBclock_adjtime\fP(2) 2.6.39
-\fBclock_getres\fP(2) 2.6
-\fBclock_gettime\fP(2) 2.6
-\fBclock_nanosleep\fP(2) 2.6
-\fBclock_settime\fP(2) 2.6
-\fBclone2\fP(2) 2.4 IA-64 only
-\fBclone\fP(2) 1.0
-\fBclone3\fP(2) 5.3
-\fBclose\fP(2) 1.0
-\fBclose_range\fP(2) 5.9
-.\" .\" dcef1f634657dabe7905af3ccda12cf7f0b6fcc1
-.\" .\" cc20d42986d5807cbe4f5c7c8e3dab2e59ea0db3
-.\" .\" db695c0509d6ec9046ee5e4c520a19fa17d9fce2
-.\" \fBcmpxchg\fP(2) 2.6.12 T{
-.\" ARM, syscall constant never was
-.\" exposed to user space, in-kernel
-.\" definition had \fB__ARM_NR\fP prefix,
-.\" removed in 4.4
-.\" T}
-.\" 867e359b97c970a60626d5d76bbe2a8fadbf38fb
-.\" bb9d812643d8a121df7d614a2b9c60193a92deb0
-\fBconnect\fP(2) 2.0 T{
-See notes on \fBsocketcall\fP(2)
-T}
-\fBcopy_file_range\fP(2) 4.5
-\fBcreat\fP(2) 1.0
-\fBcreate_module\fP(2) 1.0 Removed in 2.6
-\fBdelete_module\fP(2) 1.0
-.\" 1394f03221790a988afc3e4b3cb79f2e477246a9
-.\" 4ba66a9760722ccbb691b8f7116cad2f791cca7b
-\fBdup\fP(2) 1.0
-\fBdup2\fP(2) 1.0
-\fBdup3\fP(2) 2.6.27
-\fBepoll_create\fP(2) 2.6
-\fBepoll_create1\fP(2) 2.6.27
-\fBepoll_ctl\fP(2) 2.6
-\fBepoll_pwait\fP(2) 2.6.19
-\fBepoll_pwait2\fP(2) 5.11
-\fBepoll_wait\fP(2) 2.6
-\fBeventfd\fP(2) 2.6.22
-\fBeventfd2\fP(2) 2.6.27
-\fBexecv\fP(2) 2.0 T{
-SPARC/SPARC64 only, for
-compatibility with SunOS
-T}
-\fBexecve\fP(2) 1.0
-\fBexecveat\fP(2) 3.19
-\fBexit\fP(2) 1.0
-\fBexit_group\fP(2) 2.6
-\fBfaccessat\fP(2) 2.6.16
-\fBfaccessat2\fP(2) 5.8
-\fBfadvise64\fP(2) 2.6
-.\" Implements \fBposix_fadvise\fP(2)
-\fBfadvise64_64\fP(2) 2.6
-\fBfallocate\fP(2) 2.6.23
-\fBfanotify_init\fP(2) 2.6.37
-\fBfanotify_mark\fP(2) 2.6.37
-.\" The fanotify calls were added in Linux 2.6.36,
-.\" but disabled while the API was finalized.
-\fBfchdir\fP(2) 1.0
-\fBfchmod\fP(2) 1.0
-\fBfchmodat\fP(2) 2.6.16
-\fBfchown\fP(2) 1.0
-\fBfchown32\fP(2) 2.4
-\fBfchownat\fP(2) 2.6.16
-\fBfcntl\fP(2) 1.0
-\fBfcntl64\fP(2) 2.4
-\fBfdatasync\fP(2) 2.0
-\fBfgetxattr\fP(2) 2.6; 2.4.18
-\fBfinit_module\fP(2) 3.8
-\fBflistxattr\fP(2) 2.6; 2.4.18
-\fBflock\fP(2) 2.0
-\fBfork\fP(2) 1.0
-\fBfree_hugepages\fP(2) 2.5.36 Removed in 2.5.44
-\fBfremovexattr\fP(2) 2.6; 2.4.18
-\fBfsconfig\fP(2) 5.2
-\fBfsetxattr\fP(2) 2.6; 2.4.18
-\fBfsmount\fP(2) 5.2
-\fBfsopen\fP(2) 5.2
-\fBfspick\fP(2) 5.2
-\fBfstat\fP(2) 1.0
-\fBfstat64\fP(2) 2.4
-\fBfstatat64\fP(2) 2.6.16
-\fBfstatfs\fP(2) 1.0
-\fBfstatfs64\fP(2) 2.6
-\fBfsync\fP(2) 1.0
-\fBftruncate\fP(2) 1.0
-\fBftruncate64\fP(2) 2.4
-\fBfutex\fP(2) 2.6
-\fBfutimesat\fP(2) 2.6.16
-\fBget_kernel_syms\fP(2) 1.0 Removed in 2.6
-\fBget_mempolicy\fP(2) 2.6.6
-\fBget_robust_list\fP(2) 2.6.17
-\fBget_thread_area\fP(2) 2.6
-.\" 8fcd6c45f5a65621ec809b7866a3623e9a01d4ed
-\fBget_tls\fP(2) 4.15 T{
-ARM OABI only, has
-\fB__ARM_NR\fP prefix
-T}
-\fBgetcpu\fP(2) 2.6.19
-\fBgetcwd\fP(2) 2.2
-\fBgetdents\fP(2) 2.0
-\fBgetdents64\fP(2) 2.4
-.\" parisc: 863722e856e64dae0e252b6bb546737c6c5626ce
-\fBgetdomainname\fP(2) 2.2 T{
-SPARC, SPARC64; available
-as \fBosf_getdomainname\fP(2)
-on Alpha since Linux 2.0
-T}
-.\" ec98c6b9b47df6df1c1fa6cf3d427414f8c2cf16
-\fBgetdtablesize\fP(2) 2.0 T{
-SPARC (removed in 2.6.26),
-available on Alpha as
-\fBosf_getdtablesize\fP(2)
-T}
-\fBgetegid\fP(2) 1.0
-\fBgetegid32\fP(2) 2.4
-\fBgeteuid\fP(2) 1.0
-\fBgeteuid32\fP(2) 2.4
-\fBgetgid\fP(2) 1.0
-\fBgetgid32\fP(2) 2.4
-\fBgetgroups\fP(2) 1.0
-\fBgetgroups32\fP(2) 2.4
-.\" SPARC removal: ec98c6b9b47df6df1c1fa6cf3d427414f8c2cf16
-\fBgethostname\fP(2) 2.0 T{
-Alpha, was available on
-SPARC up to Linux 2.6.26
-T}
-\fBgetitimer\fP(2) 1.0
-\fBgetpeername\fP(2) 2.0 T{
-See notes on \fBsocketcall\fP(2)
-T}
-\fBgetpagesize\fP(2) 2.0 Not on x86
-\fBgetpgid\fP(2) 1.0
-\fBgetpgrp\fP(2) 1.0
-\fBgetpid\fP(2) 1.0
-\fBgetppid\fP(2) 1.0
-\fBgetpriority\fP(2) 1.0
-\fBgetrandom\fP(2) 3.17
-\fBgetresgid\fP(2) 2.2
-\fBgetresgid32\fP(2) 2.4
-\fBgetresuid\fP(2) 2.2
-\fBgetresuid32\fP(2) 2.4
-\fBgetrlimit\fP(2) 1.0
-\fBgetrusage\fP(2) 1.0
-\fBgetsid\fP(2) 2.0
-\fBgetsockname\fP(2) 2.0 T{
-See notes on \fBsocketcall\fP(2)
-T}
-\fBgetsockopt\fP(2) 2.0 T{
-See notes on \fBsocketcall\fP(2)
-T}
-\fBgettid\fP(2) 2.4.11
-\fBgettimeofday\fP(2) 1.0
-\fBgetuid\fP(2) 1.0
-\fBgetuid32\fP(2) 2.4
-\fBgetunwind\fP(2) 2.4.8 T{
-IA-64 only; deprecated
-T}
-\fBgetxattr\fP(2) 2.6; 2.4.18
-\fBgetxgid\fP(2) 2.0 T{
-Alpha only; see NOTES
-T}
-\fBgetxpid\fP(2) 2.0 T{
-Alpha only; see NOTES
-T}
-\fBgetxuid\fP(2) 2.0 T{
-Alpha only; see NOTES
-T}
-\fBinit_module\fP(2) 1.0
-\fBinotify_add_watch\fP(2) 2.6.13
-\fBinotify_init\fP(2) 2.6.13
-\fBinotify_init1\fP(2) 2.6.27
-\fBinotify_rm_watch\fP(2) 2.6.13
-\fBio_cancel\fP(2) 2.6
-\fBio_destroy\fP(2) 2.6
-\fBio_getevents\fP(2) 2.6
-\fBio_pgetevents\fP(2) 4.18
-\fBio_setup\fP(2) 2.6
-\fBio_submit\fP(2) 2.6
-\fBio_uring_enter\fP(2) 5.1
-\fBio_uring_register\fP(2) 5.1
-\fBio_uring_setup\fP(2) 5.1
-\fBioctl\fP(2) 1.0
-\fBioperm\fP(2) 1.0
-\fBiopl\fP(2) 1.0
-\fBioprio_get\fP(2) 2.6.13
-\fBioprio_set\fP(2) 2.6.13
-\fBipc\fP(2) 1.0
-.\" Implements System V IPC calls
-\fBkcmp\fP(2) 3.5
-\fBkern_features\fP(2) 3.7 SPARC64 only
-.\" FIXME . document kern_features():
-.\" commit 517ffce4e1a03aea979fe3a18a3dd1761a24fafb
-\fBkexec_file_load\fP(2) 3.17
-\fBkexec_load\fP(2) 2.6.13
-.\" The entry in the syscall table was reserved starting in 2.6.7
-.\" Was named sys_kexec_load() from 2.6.7 to 2.6.16
-\fBkeyctl\fP(2) 2.6.10
-\fBkill\fP(2) 1.0
-\fBlandlock_add_rule\fP(2) 5.13
-\fBlandlock_create_ruleset\fP(2) 5.13
-\fBlandlock_restrict_self\fP(2) 5.13
-\fBlchown\fP(2) 1.0 T{
-See \fBchown\fP(2) for
-version details
-T}
-\fBlchown32\fP(2) 2.4
-\fBlgetxattr\fP(2) 2.6; 2.4.18
-\fBlink\fP(2) 1.0
-\fBlinkat\fP(2) 2.6.16
-\fBlisten\fP(2) 2.0 T{
-See notes on \fBsocketcall\fP(2)
-T}
-\fBlistxattr\fP(2) 2.6; 2.4.18
-\fBllistxattr\fP(2) 2.6; 2.4.18
-\fBlookup_dcookie\fP(2) 2.6
-\fBlremovexattr\fP(2) 2.6; 2.4.18
-\fBlseek\fP(2) 1.0
-\fBlsetxattr\fP(2) 2.6; 2.4.18
-\fBlstat\fP(2) 1.0
-\fBlstat64\fP(2) 2.4
-\fBmadvise\fP(2) 2.4
-\fBmbind\fP(2) 2.6.6
-\fBmemory_ordering\fP(2) 2.2 SPARC64 only
-.\" 26025bbfbba33a9425be1b89eccb4664ea4c17b6
-.\" bb6fb6dfcc17cddac11ac295861f7608194447a7
-\fBmembarrier\fP(2) 3.17
-\fBmemfd_create\fP(2) 3.17
-\fBmemfd_secret\fP(2) 5.14
-\fBmigrate_pages\fP(2) 2.6.16
-\fBmincore\fP(2) 2.4
-\fBmkdir\fP(2) 1.0
-\fBmkdirat\fP(2) 2.6.16
-\fBmknod\fP(2) 1.0
-\fBmknodat\fP(2) 2.6.16
-\fBmlock\fP(2) 2.0
-\fBmlock2\fP(2) 4.4
-\fBmlockall\fP(2) 2.0
-\fBmmap\fP(2) 1.0
-\fBmmap2\fP(2) 2.4
-\fBmodify_ldt\fP(2) 1.0
-\fBmount\fP(2) 1.0
-\fBmove_mount\fP(2) 5.2
-\fBmove_pages\fP(2) 2.6.18
-\fBmprotect\fP(2) 1.0
-\fBmq_getsetattr\fP(2) 2.6.6
-.\" Implements \fBmq_getattr\fP(3) and \fBmq_setattr\fP(3)
-\fBmq_notify\fP(2) 2.6.6
-\fBmq_open\fP(2) 2.6.6
-\fBmq_timedreceive\fP(2) 2.6.6
-\fBmq_timedsend\fP(2) 2.6.6
-\fBmq_unlink\fP(2) 2.6.6
-\fBmremap\fP(2) 2.0
-\fBmsgctl\fP(2) 2.0 T{
-See notes on \fBipc\fP(2)
-T}
-\fBmsgget\fP(2) 2.0 T{
-See notes on \fBipc\fP(2)
-T}
-\fBmsgrcv\fP(2) 2.0 T{
-See notes on \fBipc\fP(2)
-T}
-\fBmsgsnd\fP(2) 2.0 T{
-See notes on \fBipc\fP(2)
-T}
-\fBmsync\fP(2) 2.0
-.\" \fBmultiplexer\fP(2) ?? __NR_multiplexer reserved on
-.\" PowerPC, but unimplemented?
-\fBmunlock\fP(2) 2.0
-\fBmunlockall\fP(2) 2.0
-\fBmunmap\fP(2) 1.0
-\fBname_to_handle_at\fP(2) 2.6.39
-\fBnanosleep\fP(2) 2.0
-.\" 5590ff0d5528b60153c0b4e7b771472b5a95e297
-\fBnewfstatat\fP(2) 2.6.16 See \fBstat\fP(2)
-\fBnfsservctl\fP(2) 2.2 Removed in 3.1
-\fBnice\fP(2) 1.0
-\fBold_adjtimex\fP(2) 2.0 T{
-Alpha only; see NOTES
-T}
-\fBold_getrlimit\fP(2) 2.4 T{
-Old variant of \fBgetrlimit\fP(2)
-that used a different value
-for \fBRLIM_INFINITY\fP
-T}
-\fBoldfstat\fP(2) 1.0
-\fBoldlstat\fP(2) 1.0
-\fBoldolduname\fP(2) 1.0
-\fBoldstat\fP(2) 1.0
-\fBoldumount\fP(2) 2.4.116 T{
-Name of the old \fBumount\fP(2)
-syscall on Alpha
-T}
-\fBolduname\fP(2) 1.0
-\fBopen\fP(2) 1.0
-\fBopen_by_handle_at\fP(2) 2.6.39
-\fBopen_tree\fP(2) 5.2
-\fBopenat\fP(2) 2.6.16
-\fBopenat2\fP(2) 5.6
-.\" 9d02a4283e9ce4e9ca11ff00615bdacdb0515a1a
-\fBor1k_atomic\fP(2) 3.1 T{
-OpenRISC 1000 only
-T}
-\fBpause\fP(2) 1.0
-\fBpciconfig_iobase\fP(2) 2.2.15; 2.4 Not on x86
-.\" Alpha, PowerPC, ARM; not x86
-\fBpciconfig_read\fP(2) 2.0.26; 2.2 Not on x86
-.\" , PowerPC, ARM; not x86
-\fBpciconfig_write\fP(2) 2.0.26; 2.2 Not on x86
-.\" , PowerPC, ARM; not x86
-\fBperf_event_open\fP(2) 2.6.31 T{
-Was perf_counter_open() in
-2.6.31; renamed in 2.6.32
-T}
-\fBpersonality\fP(2) 1.2
-\fBperfctr\fP(2) 2.2 T{
-SPARC only; removed in 2.6.34
-T}
-.\" commit c7d5a0050773e98d1094eaa9f2a1a793fafac300 removed perfctr()
-\fBperfmonctl\fP(2) 2.4 IA-64 only; removed in 5.10
-\fBpidfd_getfd\fP(2) 5.6
-\fBpidfd_send_signal\fP(2) 5.1
-\fBpidfd_open\fP(2) 5.3
-\fBpipe\fP(2) 1.0
-\fBpipe2\fP(2) 2.6.27
-\fBpivot_root\fP(2) 2.4
-\fBpkey_alloc\fP(2) 4.8
-\fBpkey_free\fP(2) 4.8
-\fBpkey_mprotect\fP(2) 4.8
-\fBpoll\fP(2) 2.0.36; 2.2
-\fBppoll\fP(2) 2.6.16
-\fBprctl\fP(2) 2.2
-\fBpread64\fP(2) T{
-Added as "pread" in 2.2;
-renamed "pread64" in 2.6
-T}
-\fBpreadv\fP(2) 2.6.30
-\fBpreadv2\fP(2) 4.6
-\fBprlimit64\fP(2) 2.6.36
-\fBprocess_madvise\fP(2) 5.10
-\fBprocess_vm_readv\fP(2) 3.2
-\fBprocess_vm_writev\fP(2) 3.2
-\fBpselect6\fP(2) 2.6.16
-.\" Implements \fBpselect\fP(2)
-\fBptrace\fP(2) 1.0
-\fBpwrite64\fP(2) T{
-Added as "pwrite" in 2.2;
-renamed "pwrite64" in 2.6
-T}
-\fBpwritev\fP(2) 2.6.30
-\fBpwritev2\fP(2) 4.6
-\fBquery_module\fP(2) 2.2 Removed in 2.6
-\fBquotactl\fP(2) 1.0
-\fBquotactl_fd\fP(2) 5.14
-\fBread\fP(2) 1.0
-\fBreadahead\fP(2) 2.4.13
-\fBreaddir\fP(2) 1.0
-.\" Supersedes \fBgetdents\fP(2)
-\fBreadlink\fP(2) 1.0
-\fBreadlinkat\fP(2) 2.6.16
-\fBreadv\fP(2) 2.0
-\fBreboot\fP(2) 1.0
-\fBrecv\fP(2) 2.0 T{
-See notes on \fBsocketcall\fP(2)
-T}
-\fBrecvfrom\fP(2) 2.0 T{
-See notes on \fBsocketcall\fP(2)
-T}
-\fBrecvmsg\fP(2) 2.0 T{
-See notes on \fBsocketcall\fP(2)
-T}
-\fBrecvmmsg\fP(2) 2.6.33
-\fBremap_file_pages\fP(2) 2.6 T{
-Deprecated since 3.16
-T}
-\fBremovexattr\fP(2) 2.6; 2.4.18
-\fBrename\fP(2) 1.0
-\fBrenameat\fP(2) 2.6.16
-\fBrenameat2\fP(2) 3.15
-\fBrequest_key\fP(2) 2.6.10
-\fBrestart_syscall\fP(2) 2.6
-.\" 921ebd8f2c081b3cf6c3b29ef4103eef3ff26054
-\fBriscv_flush_icache\fP(2) 4.15 RISC-V only
-\fBrmdir\fP(2) 1.0
-\fBrseq\fP(2) 4.18
-\fBrt_sigaction\fP(2) 2.2
-\fBrt_sigpending\fP(2) 2.2
-\fBrt_sigprocmask\fP(2) 2.2
-\fBrt_sigqueueinfo\fP(2) 2.2
-\fBrt_sigreturn\fP(2) 2.2
-\fBrt_sigsuspend\fP(2) 2.2
-\fBrt_sigtimedwait\fP(2) 2.2
-\fBrt_tgsigqueueinfo\fP(2) 2.6.31
-\fBrtas\fP(2) 2.6.2 T{
-PowerPC/PowerPC64 only
-T}
-\fBs390_runtime_instr\fP(2) 3.7 s390 only
-\fBs390_pci_mmio_read\fP(2) 3.19 s390 only
-\fBs390_pci_mmio_write\fP(2) 3.19 s390 only
-\fBs390_sthyi\fP(2) 4.15 s390 only
-\fBs390_guarded_storage\fP(2) 4.12 s390 only
-\fBsched_get_affinity\fP(2) 2.6 T{
-Name of \fBsched_getaffinity\fP(2)
-on SPARC and SPARC64
-T}
-\fBsched_get_priority_max\fP(2) 2.0
-\fBsched_get_priority_min\fP(2) 2.0
-\fBsched_getaffinity\fP(2) 2.6
-\fBsched_getattr\fP(2) 3.14
-\fBsched_getparam\fP(2) 2.0
-\fBsched_getscheduler\fP(2) 2.0
-\fBsched_rr_get_interval\fP(2) 2.0
-\fBsched_set_affinity\fP(2) 2.6 T{
-Name of \fBsched_setaffinity\fP(2)
-on SPARC and SPARC64
-T}
-\fBsched_setaffinity\fP(2) 2.6
-\fBsched_setattr\fP(2) 3.14
-\fBsched_setparam\fP(2) 2.0
-\fBsched_setscheduler\fP(2) 2.0
-\fBsched_yield\fP(2) 2.0
-\fBseccomp\fP(2) 3.17
-\fBselect\fP(2) 1.0
-\fBsemctl\fP(2) 2.0 T{
-See notes on \fBipc\fP(2)
-T}
-\fBsemget\fP(2) 2.0 T{
-See notes on \fBipc\fP(2)
-T}
-\fBsemop\fP(2) 2.0 T{
-See notes on \fBipc\fP(2)
-T}
-\fBsemtimedop\fP(2) 2.6; 2.4.22
-\fBsend\fP(2) 2.0 T{
-See notes on \fBsocketcall\fP(2)
-T}
-\fBsendfile\fP(2) 2.2
-\fBsendfile64\fP(2) 2.6; 2.4.19
-\fBsendmmsg\fP(2) 3.0
-\fBsendmsg\fP(2) 2.0 T{
-See notes on \fBsocketcall\fP(2)
-T}
-\fBsendto\fP(2) 2.0 T{
-See notes on \fBsocketcall\fP(2)
-T}
-\fBset_mempolicy\fP(2) 2.6.6
-\fBset_robust_list\fP(2) 2.6.17
-\fBset_thread_area\fP(2) 2.6
-\fBset_tid_address\fP(2) 2.6
-\fBset_tls\fP(2) 2.6.11 T{
-ARM OABI/EABI only (constant
-has \fB__ARM_NR\fP prefix)
-T}
-.\" \fBsetaltroot\fP(2) 2.6.10 T{
-.\" Removed in 2.6.11, exposed one
-.\" of implementation details of
-.\" \fBpersonality\fP(2) (creating an
-.\" alternative root, precursor of
-.\" mount namespaces) to user space.
-.\" T}
-.\" See http://lkml.org/lkml/2005/8/1/83
-.\" "[PATCH] remove sys_set_zone_reclaim()"
-\fBsetdomainname\fP(2) 1.0
-\fBsetfsgid\fP(2) 1.2
-\fBsetfsgid32\fP(2) 2.4
-\fBsetfsuid\fP(2) 1.2
-\fBsetfsuid32\fP(2) 2.4
-\fBsetgid\fP(2) 1.0
-\fBsetgid32\fP(2) 2.4
-\fBsetgroups\fP(2) 1.0
-\fBsetgroups32\fP(2) 2.4
-.\" arch/alpha/include/asm/core_lca.h
-\fBsethae\fP(2) 2.0 T{
-Alpha only; see NOTES
-T}
-\fBsethostname\fP(2) 1.0
-\fBsetitimer\fP(2) 1.0
-\fBsetns\fP(2) 3.0
-\fBsetpgid\fP(2) 1.0
-\fBsetpgrp\fP(2) 2.0 T{
-Alternative name for
-\fBsetpgid\fP(2) on Alpha
-T}
-\fBsetpriority\fP(2) 1.0
-\fBsetregid\fP(2) 1.0
-\fBsetregid32\fP(2) 2.4
-\fBsetresgid\fP(2) 2.2
-\fBsetresgid32\fP(2) 2.4
-\fBsetresuid\fP(2) 2.2
-\fBsetresuid32\fP(2) 2.4
-\fBsetreuid\fP(2) 1.0
-\fBsetreuid32\fP(2) 2.4
-\fBsetrlimit\fP(2) 1.0
-\fBsetsid\fP(2) 1.0
-\fBsetsockopt\fP(2) 2.0 T{
-See notes on \fBsocketcall\fP(2)
-T}
-\fBsettimeofday\fP(2) 1.0
-\fBsetuid\fP(2) 1.0
-\fBsetuid32\fP(2) 2.4
-\fBsetup\fP(2) 1.0 Removed in 2.2
-\fBsetxattr\fP(2) 2.6; 2.4.18
-\fBsgetmask\fP(2) 1.0
-\fBshmat\fP(2) 2.0 T{
-See notes on \fBipc\fP(2)
-T}
-\fBshmctl\fP(2) 2.0 T{
-See notes on \fBipc\fP(2)
-T}
-\fBshmdt\fP(2) 2.0 T{
-See notes on \fBipc\fP(2)
-T}
-\fBshmget\fP(2) 2.0 T{
-See notes on \fBipc\fP(2)
-T}
-\fBshutdown\fP(2) 2.0 T{
-See notes on \fBsocketcall\fP(2)
-T}
-\fBsigaction\fP(2) 1.0
-\fBsigaltstack\fP(2) 2.2
-\fBsignal\fP(2) 1.0
-\fBsignalfd\fP(2) 2.6.22
-\fBsignalfd4\fP(2) 2.6.27
-\fBsigpending\fP(2) 1.0
-\fBsigprocmask\fP(2) 1.0
-\fBsigreturn\fP(2) 1.0
-\fBsigsuspend\fP(2) 1.0
-\fBsocket\fP(2) 2.0 T{
-See notes on \fBsocketcall\fP(2)
-T}
-\fBsocketcall\fP(2) 1.0
-.\" Implements BSD socket calls
-\fBsocketpair\fP(2) 2.0 T{
-See notes on \fBsocketcall\fP(2)
-T}
-.\" 5a0015d62668e64c8b6e02e360fbbea121bfd5e6
-\fBspill\fP(2) 2.6.13 Xtensa only
-\fBsplice\fP(2) 2.6.17
-\fBspu_create\fP(2) 2.6.16 T{
-PowerPC/PowerPC64 only
-T}
-\fBspu_run\fP(2) 2.6.16 T{
-PowerPC/PowerPC64 only
-T}
-\fBssetmask\fP(2) 1.0
-\fBstat\fP(2) 1.0
-\fBstat64\fP(2) 2.4
-\fBstatfs\fP(2) 1.0
-\fBstatfs64\fP(2) 2.6
-\fBstatx\fP(2) 4.11
-\fBstime\fP(2) 1.0
-\fBsubpage_prot\fP(2) 2.6.25 T{
-PowerPC/PowerPC64 only
-T}
-\fBswapcontext\fP(2) 2.6.3 T{
-PowerPC/PowerPC64 only
-T}
-.\" 529d235a0e190ded1d21ccc80a73e625ebcad09b
-\fBswitch_endian\fP(2) 4.1 PowerPC64 only
-\fBswapoff\fP(2) 1.0
-\fBswapon\fP(2) 1.0
-\fBsymlink\fP(2) 1.0
-\fBsymlinkat\fP(2) 2.6.16
-\fBsync\fP(2) 1.0
-\fBsync_file_range\fP(2) 2.6.17
-\fBsync_file_range2\fP(2) 2.6.22
-.\" PowerPC, ARM, tile
-.\" First appeared on ARM, as arm_sync_file_range(), but later renamed
-.\" \fBsys_debug_setcontext\fP(2) ??? PowerPC if CONFIG_PPC32
-\fBsyncfs\fP(2) 2.6.39
-\fBsys_debug_setcontext\fP(2) 2.6.11 PowerPC only
-\fBsyscall\fP(2) 1.0 T{
-Still available on ARM OABI
-and MIPS O32 ABI
-T}
-\fBsysfs\fP(2) 1.2
-\fBsysinfo\fP(2) 1.0
-\fBsyslog\fP(2) 1.0
-.\" glibc interface is \fBklogctl\fP(3)
-\fBsysmips\fP(2) 2.6.0 MIPS only
-\fBtee\fP(2) 2.6.17
-\fBtgkill\fP(2) 2.6
-\fBtime\fP(2) 1.0
-\fBtimer_create\fP(2) 2.6
-\fBtimer_delete\fP(2) 2.6
-\fBtimer_getoverrun\fP(2) 2.6
-\fBtimer_gettime\fP(2) 2.6
-\fBtimer_settime\fP(2) 2.6
-.\" .\" b215e283992899650c4271e7385c79e26fb9a88e
-.\" .\" 4d672e7ac79b5ec5cdc90e450823441e20464691
-.\" \fBtimerfd\fP(2) 2.6.22 T{
-.\" Old timerfd interface,
-.\" removed in 2.6.25
-.\" T}
-\fBtimerfd_create\fP(2) 2.6.25
-\fBtimerfd_gettime\fP(2) 2.6.25
-\fBtimerfd_settime\fP(2) 2.6.25
-\fBtimes\fP(2) 1.0
-\fBtkill\fP(2) 2.6; 2.4.22
-\fBtruncate\fP(2) 1.0
-\fBtruncate64\fP(2) 2.4
-\fBugetrlimit\fP(2) 2.4
-\fBumask\fP(2) 1.0
-\fBumount\fP(2) 1.0
-.\" sys_oldumount() -- __NR_umount
-\fBumount2\fP(2) 2.2
-.\" sys_umount() -- __NR_umount2
-\fBuname\fP(2) 1.0
-\fBunlink\fP(2) 1.0
-\fBunlinkat\fP(2) 2.6.16
-\fBunshare\fP(2) 2.6.16
-\fBuselib\fP(2) 1.0
-\fBustat\fP(2) 1.0
-\fBuserfaultfd\fP(2) 4.3
-\fBusr26\fP(2) 2.4.8.1 ARM OABI only
-\fBusr32\fP(2) 2.4.8.1 ARM OABI only
-\fButime\fP(2) 1.0
-\fButimensat\fP(2) 2.6.22
-\fButimes\fP(2) 2.2
-\fButrap_install\fP(2) 2.2 SPARC64 only
-.\" FIXME . document utrap_install()
-.\" There's a man page for Solaris 5.11
-\fBvfork\fP(2) 2.2
-\fBvhangup\fP(2) 1.0
-\fBvm86old\fP(2) 1.0 T{
-Was "vm86"; renamed in
-2.0.28/2.2
-T}
-\fBvm86\fP(2) 2.0.28; 2.2
-\fBvmsplice\fP(2) 2.6.17
-\fBwait4\fP(2) 1.0
-\fBwaitid\fP(2) 2.6.10
-\fBwaitpid\fP(2) 1.0
-\fBwrite\fP(2) 1.0
-\fBwritev\fP(2) 2.0
-.\" 5a0015d62668e64c8b6e02e360fbbea121bfd5e6
-\fBxtensa\fP(2) 2.6.13 Xtensa only
-.TE
-.ad
-.hy
-.PP
-On many platforms, including x86-32, socket calls are all multiplexed
-(via glibc wrapper functions) through
-.BR socketcall (2)
-and similarly System\ V IPC calls are multiplexed through
-.BR ipc (2).
-.PP
-Although slots are reserved for them in the system call table,
-the following system calls are not implemented in the standard kernel:
-.BR afs_syscall (2), \" __NR_afs_syscall is 53 on Linux 2.6.22/i386
-.BR break (2), \" __NR_break is 17 on Linux 2.6.22/i386
-.BR ftime (2), \" __NR_ftime is 35 on Linux 2.6.22/i386
-.BR getpmsg (2), \" __NR_getpmsg is 188 on Linux 2.6.22/i386
-.BR gtty (2), \" __NR_gtty is 32 on Linux 2.6.22/i386
-.BR idle (2), \" __NR_idle is 112 on Linux 2.6.22/i386
-.BR lock (2), \" __NR_lock is 53 on Linux 2.6.22/i386
-.BR madvise1 (2), \" __NR_madvise1 is 219 on Linux 2.6.22/i386
-.BR mpx (2), \" __NR_mpx is 66 on Linux 2.6.22/i386
-.BR phys (2), \" Slot has been reused
-.BR prof (2), \" __NR_prof is 44 on Linux 2.6.22/i386
-.BR profil (2), \" __NR_profil is 98 on Linux 2.6.22/i386
-.BR putpmsg (2), \" __NR_putpmsg is 189 on Linux 2.6.22/i386
-.\" __NR_security is 223 on Linux 2.4/i386; absent on 2.6/i386, present
-.\" on a couple of 2.6 architectures
-.BR security (2), \" __NR_security is 223 on Linux 2.4/i386
-.\" The security call is for future use.
-.BR stty (2), \" __NR_stty is 31 on Linux 2.6.22/i386
-.BR tuxcall (2), \" __NR_tuxcall is 184 on x86_64, also on PPC and alpha
-.BR ulimit (2), \" __NR_ulimit is 58 on Linux 2.6.22/i386
-and
-.BR vserver (2) \" __NR_vserver is 273 on Linux 2.6.22/i386
-(see also
-.BR unimplemented (2)).
-However,
-.BR ftime (3),
-.BR profil (3),
-and
-.BR ulimit (3)
-exist as library routines.
-The slot for
-.BR phys (2)
-is in use since Linux 2.1.116 for
-.BR umount (2);
-.BR phys (2)
-will never be implemented.
-The
-.BR getpmsg (2)
-and
-.BR putpmsg (2)
-calls are for kernels patched to support STREAMS,
-and may never be in the standard kernel.
-.PP
-There was briefly
-.BR set_zone_reclaim (2),
-added in Linux 2.6.13, and removed in Linux 2.6.16;
-this system call was never available to user space.
-.\"
-.SS System calls on removed ports
-Some system calls only ever existed on Linux architectures that have
-since been removed from the kernel:
-.TP
-AVR32 (port removed in Linux 4.12)
-.RS
-.PD 0
-.IP \[bu] 3
-.BR pread (2)
-.IP \[bu]
-.BR pwrite (2)
-.PD
-.RE
-.TP
-Blackfin (port removed in Linux 4.17)
-.RS
-.PD 0
-.IP \[bu] 3
-.BR bfin_spinlock (2)
-(added in Linux 2.6.22)
-.IP \[bu]
-.BR dma_memcpy (2)
-(added in Linux 2.6.22)
-.IP \[bu]
-.BR pread (2)
-(added in Linux 2.6.22)
-.IP \[bu]
-.BR pwrite (2)
-(added in Linux 2.6.22)
-.IP \[bu]
-.BR sram_alloc (2)
-(added in Linux 2.6.22)
-.IP \[bu]
-.BR sram_free (2)
-(added in Linux 2.6.22)
-.PD
-.RE
-.TP
-Metag (port removed in Linux 4.17)
-.RS
-.PD 0
-.IP \[bu] 3
-.BR metag_get_tls (2)
-(add in Linux 3.9)
-.IP \[bu]
-.BR metag_set_fpu_flags (2)
-(add in Linux 3.9)
-.IP \[bu]
-.BR metag_set_tls (2)
-(add in Linux 3.9)
-.IP \[bu]
-.BR metag_setglobalbit (2)
-(add in Linux 3.9)
-.PD
-.RE
-.TP
-Tile (port removed in Linux 4.17)
-.RS
-.PD 0
-.IP \[bu] 3
-.BR cmpxchg_badaddr (2)
-(added in Linux 2.6.36)
-.PD
-.RE
-.SH NOTES
-Roughly speaking, the code belonging to the system call
-with number __NR_xxx defined in
-.I /usr/include/asm/unistd.h
-can be found in the Linux kernel source in the routine
-.IR sys_xxx ().
-There are many exceptions, however, mostly because
-older system calls were superseded by newer ones,
-and this has been treated somewhat unsystematically.
-On platforms with
-proprietary operating-system emulation,
-such as sparc, sparc64, and alpha,
-there are many additional system calls; mips64 also contains a full
-set of 32-bit system calls.
-.PP
-Over time, changes to the interfaces of some system calls have been
-necessary.
-One reason for such changes was the need to increase the size of
-structures or scalar values passed to the system call.
-Because of these changes, certain architectures
-(notably, longstanding 32-bit architectures such as i386)
-now have various groups of related system calls (e.g.,
-.BR truncate (2)
-and
-.BR truncate64 (2))
-which perform similar tasks, but which vary in
-details such as the size of their arguments.
-(As noted earlier, applications are generally unaware of this:
-the glibc wrapper functions do some work to ensure that the right
-system call is invoked, and that ABI compatibility is
-preserved for old binaries.)
-Examples of systems calls that exist in multiple versions are
-the following:
-.IP \[bu] 3
-By now there are three different versions of
-.BR stat (2):
-.IR sys_stat ()
-(slot
-.IR __NR_oldstat ),
-.IR sys_newstat ()
-(slot
-.IR __NR_stat ),
-and
-.IR sys_stat64 ()
-(slot
-.IR __NR_stat64 ),
-with the last being the most current.
-.\" e.g., on 2.6.22/i386: __NR_oldstat 18, __NR_stat 106, __NR_stat64 195
-.\" The stat system calls deal with three different data structures,
-.\" defined in include/asm-i386/stat.h: __old_kernel_stat, stat, stat64
-A similar story applies for
-.BR lstat (2)
-and
-.BR fstat (2).
-.IP \[bu]
-Similarly, the defines
-.IR __NR_oldolduname ,
-.IR __NR_olduname ,
-and
-.I __NR_uname
-refer to the routines
-.IR sys_olduname (),
-.IR sys_uname (),
-and
-.IR sys_newuname ().
-.IP \[bu]
-In Linux 2.0, a new version of
-.BR vm86 (2)
-appeared, with the old and the new kernel routines being named
-.IR sys_vm86old ()
-and
-.IR sys_vm86 ().
-.IP \[bu]
-In Linux 2.4, a new version of
-.BR getrlimit (2)
-appeared, with the old and the new kernel routines being named
-.IR sys_old_getrlimit ()
-(slot
-.IR __NR_getrlimit )
-and
-.IR sys_getrlimit ()
-(slot
-.IR __NR_ugetrlimit ).
-.IP \[bu]
-Linux 2.4 increased the size of user and group IDs from 16 to 32 bits.
-.\" 64-bit off_t changes: ftruncate64, *stat64,
-.\" fcntl64 (because of the flock structure), getdents64, *statfs64
-To support this change, a range of system calls were added
-(e.g.,
-.BR chown32 (2),
-.BR getuid32 (2),
-.BR getgroups32 (2),
-.BR setresuid32 (2)),
-superseding earlier calls of the same name without the
-"32" suffix.
-.IP \[bu]
-Linux 2.4 added support for applications on 32-bit architectures
-to access large files (i.e., files for which the sizes and
-file offsets can't be represented in 32 bits.)
-To support this change, replacements were required for system calls
-that deal with file offsets and sizes.
-Thus the following system calls were added:
-.BR fcntl64 (2),
-.BR getdents64 (2),
-.BR stat64 (2),
-.BR statfs64 (2),
-.BR truncate64 (2),
-and their analogs that work with file descriptors or
-symbolic links.
-These system calls supersede the older system calls
-which, except in the case of the "stat" calls,
-have the same name without the "64" suffix.
-.IP
-On newer platforms that only have 64-bit file access and 32-bit UIDs/GIDs
-(e.g., alpha, ia64, s390x, x86-64), there is just a single version of
-the UID/GID and file access system calls.
-On platforms (typically, 32-bit platforms) where the *64 and *32 calls exist,
-the other versions are obsolete.
-.IP \[bu]
-The
-.I rt_sig*
-calls were added in Linux 2.2 to support the addition
-of real-time signals (see
-.BR signal (7)).
-These system calls supersede the older system calls of the same
-name without the "rt_" prefix.
-.IP \[bu]
-The
-.BR select (2)
-and
-.BR mmap (2)
-system calls use five or more arguments,
-which caused problems in the way
-argument passing on the i386 used to be set up.
-Thus, while other architectures have
-.IR sys_select ()
-and
-.IR sys_mmap ()
-corresponding to
-.I __NR_select
-and
-.IR __NR_mmap ,
-on i386 one finds
-.IR old_select ()
-and
-.IR old_mmap ()
-(routines that use a pointer to an
-argument block) instead.
-These days passing five arguments
-is not a problem any more, and there is a
-.I __NR__newselect
-.\" (used by libc 6)
-that corresponds directly to
-.IR sys_select ()
-and similarly
-.IR __NR_mmap2 .
-s390x is the only 64-bit architecture that has
-.IR old_mmap ().
-.\" .PP
-.\" Two system call numbers,
-.\" .IR __NR__llseek
-.\" and
-.\" .IR __NR__sysctl
-.\" have an additional underscore absent in
-.\" .IR sys_llseek ()
-.\" and
-.\" .IR sys_sysctl ().
-.\"
-.\" In Linux 2.1.81,
-.\" .BR lchown (2)
-.\" and
-.\" .BR chown (2)
-.\" were swapped; that is,
-.\" .BR lchown (2)
-.\" was added with the semantics that were then current for
-.\" .BR chown (2),
-.\" and the semantics of the latter call were changed to what
-.\" they are today.
-.\"
-.\"
-.SS "Architecture-specific details: Alpha"
-.TP
-.BR getxgid (2)
-returns a pair of GID and effective GID via registers
-\fBr0\fP and \fBr20\fP; it is provided
-instead of
-\fBgetgid\fP(2) and \fBgetegid\fP(2).
-.TP
-.BR getxpid (2)
-returns a pair of PID and parent PID via registers
-\fBr0\fP and \fBr20\fP; it is provided instead of
-\fBgetpid\fP(2) and \fBgetppid\fP(2).
-.TP
-.BR old_adjtimex (2)
-is a variant of \fBadjtimex\fP(2) that uses \fIstruct timeval32\fP,
-for compatibility with OSF/1.
-.TP
-.BR getxuid (2)
-returns a pair of GID and effective GID via registers
-\fBr0\fP and \fBr20\fP; it is provided instead of
-\fBgetuid\fP(2) and \fBgeteuid\fP(2).
-.TP
-.BR sethae (2)
-is used for configuring the Host Address Extension register on
-low-cost Alphas in order to access address space beyond first 27 bits.
-.SH SEE ALSO
-.BR ausyscall (1),
-.BR intro (2),
-.BR syscall (2),
-.BR unimplemented (2),
-.BR errno (3),
-.BR libc (7),
-.BR vdso (7)
diff --git a/man2/sysctl.2 b/man2/sysctl.2
deleted file mode 100644
index 44134d82b..000000000
--- a/man2/sysctl.2
+++ /dev/null
@@ -1,158 +0,0 @@
-.\" Copyright (C) 1996 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Written 11 April 1996 by Andries Brouwer <aeb@cwi.nl>
-.\" 960412: Added comments from Stephen Tweedie
-.\" Modified Tue Oct 22 22:28:41 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Mon Jan 5 20:31:04 1998 by aeb.
-.\"
-.TH sysctl 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sysctl \- read/write system parameters
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.B #include <linux/sysctl.h>
-.PP
-.BI "[[deprecated]] int _sysctl(struct __sysctl_args *" args );
-.fi
-.SH DESCRIPTION
-.B This system call no longer exists on current kernels!
-See NOTES.
-.PP
-The
-.BR _sysctl ()
-call reads and/or writes kernel parameters.
-For example, the hostname,
-or the maximum number of open files.
-The argument has the form
-.PP
-.in +4n
-.EX
-struct __sysctl_args {
- int *name; /* integer vector describing variable */
- int nlen; /* length of this vector */
- void *oldval; /* 0 or address where to store old value */
- size_t *oldlenp; /* available room for old value,
- overwritten by actual size of old value */
- void *newval; /* 0 or address of new value */
- size_t newlen; /* size of new value */
-};
-.EE
-.in
-.PP
-This call does a search in a tree structure, possibly resembling
-a directory tree under
-.IR /proc/sys ,
-and if the requested item is found calls some appropriate routine
-to read or modify the value.
-.SH RETURN VALUE
-Upon successful completion,
-.BR _sysctl ()
-returns 0.
-Otherwise, a value of \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.BR EACCES ", " EPERM
-No search permission for one of the encountered "directories",
-or no read permission where
-.I oldval
-was nonzero, or no write permission where
-.I newval
-was nonzero.
-.TP
-.B EFAULT
-The invocation asked for the previous value by setting
-.I oldval
-non-NULL, but allowed zero room in
-.IR oldlenp .
-.TP
-.B ENOTDIR
-.I name
-was not found.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 1.3.57.
-Removed in Linux 5.5, glibc 2.32.
-.PP
-It originated in
-4.4BSD.
-Only Linux has the
-.I /proc/sys
-mirror, and the object naming schemes differ between Linux and 4.4BSD,
-but the declaration of the
-.BR sysctl ()
-function is the same in both.
-.SH NOTES
-Use of this system call was long discouraged:
-since Linux 2.6.24,
-uses of this system call result in warnings in the kernel log,
-and in Linux 5.5, the system call was finally removed.
-Use the
-.I /proc/sys
-interface instead.
-.PP
-Note that on older kernels where this system call still exists,
-it is available only if the kernel was configured with the
-.B CONFIG_SYSCTL_SYSCALL
-option.
-Furthermore, glibc does not provide a wrapper for this system call,
-necessitating the use of
-.BR syscall (2).
-.SH BUGS
-The object names vary between kernel versions,
-making this system call worthless for applications.
-.PP
-Not all available objects are properly documented.
-.PP
-It is not yet possible to change operating system by writing to
-.IR /proc/sys/kernel/ostype .
-.SH EXAMPLES
-.\" SRC BEGIN (sysctl.c)
-.EX
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/syscall.h>
-#include <unistd.h>
-\&
-#include <linux/sysctl.h>
-\&
-#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
-\&
-int _sysctl(struct __sysctl_args *args);
-\&
-#define OSNAMESZ 100
-\&
-int
-main(void)
-{
- int name[] = { CTL_KERN, KERN_OSTYPE };
- char osname[OSNAMESZ];
- size_t osnamelth;
- struct __sysctl_args args;
-\&
- memset(&args, 0, sizeof(args));
- args.name = name;
- args.nlen = ARRAY_SIZE(name);
- args.oldval = osname;
- args.oldlenp = &osnamelth;
-\&
- osnamelth = sizeof(osname);
-\&
- if (syscall(SYS__sysctl, &args) == \-1) {
- perror("_sysctl");
- exit(EXIT_FAILURE);
- }
- printf("This machine is running %*s\en", (int) osnamelth, osname);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR proc (5)
diff --git a/man2/sysfs.2 b/man2/sysfs.2
deleted file mode 100644
index 2e51426fe..000000000
--- a/man2/sysfs.2
+++ /dev/null
@@ -1,97 +0,0 @@
-.\" Copyright (C) 1995, Thomas K. Dyas <tdyas@eden.rutgers.edu>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Created Wed Aug 9 1995 Thomas K. Dyas <tdyas@eden.rutgers.edu>
-.\"
-.TH sysfs 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sysfs \- get filesystem type information
-.SH SYNOPSIS
-.nf
-.BI "[[deprecated]] int sysfs(int " option ", const char *" fsname );
-.BI "[[deprecated]] int sysfs(int " option ", unsigned int " fs_index ", char *" buf );
-.BI "[[deprecated]] int sysfs(int " option );
-.fi
-.SH DESCRIPTION
-.BR "Note" :
-if you are looking for information about the
-.B sysfs
-filesystem that is normally mounted at
-.IR /sys ,
-see
-.BR sysfs (5).
-.PP
-The (obsolete)
-.BR sysfs ()
-system call returns information about the filesystem types
-currently present in the kernel.
-The specific form of the
-.BR sysfs ()
-call and the information returned depends on the
-.I option
-in effect:
-.TP 3
-.B 1
-Translate the filesystem identifier string
-.I fsname
-into a filesystem type index.
-.TP
-.B 2
-Translate the filesystem type index
-.I fs_index
-into a null-terminated filesystem identifier string.
-This string will
-be written to the buffer pointed to by
-.IR buf .
-Make sure that
-.I buf
-has enough space to accept the string.
-.TP
-.B 3
-Return the total number of filesystem types currently present in the
-kernel.
-.PP
-The numbering of the filesystem type indexes begins with zero.
-.SH RETURN VALUE
-On success,
-.BR sysfs ()
-returns the filesystem index for option
-.BR 1 ,
-zero for option
-.BR 2 ,
-and the number of currently configured filesystems for option
-.BR 3 .
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-.RI "Either " fsname " or " buf
-is outside your accessible address space.
-.TP
-.B EINVAL
-.I fsname
-is not a valid filesystem type identifier;
-.I fs_index
-is out-of-bounds;
-.I option
-is invalid.
-.SH STANDARDS
-None.
-.SH HISTORY
-SVr4.
-.PP
-This System-V derived system call is obsolete; don't use it.
-On systems with
-.IR /proc ,
-the same information can be obtained via
-.IR /proc ;
-use that interface instead.
-.SH BUGS
-There is no libc or glibc support.
-There is no way to guess how large \fIbuf\fP should be.
-.SH SEE ALSO
-.BR proc (5),
-.BR sysfs (5)
diff --git a/man2/sysinfo.2 b/man2/sysinfo.2
deleted file mode 100644
index 69fe280b6..000000000
--- a/man2/sysinfo.2
+++ /dev/null
@@ -1,106 +0,0 @@
-.\" Copyright (C) 2016, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Based on an earlier version of the page where a few pieces were
-.\" copyright (C) 1993 by Dan Miner (dminer@nyx.cs.du.edu) and subsequently
-.\" others (see old changelog below).
-.\" The structure definitions are taken more or less straight from the kernel
-.\" source files.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.\" Modified Sat Jul 24 12:35:12 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Tue Oct 22 22:29:51 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Mon Aug 25 16:06:11 1997 by Nicolás Lichtmaier <nick@debian.org>
-.\"
-.TH sysinfo 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sysinfo \- return system information
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/sysinfo.h>
-.PP
-.BI "int sysinfo(struct sysinfo *" info );
-.fi
-.SH DESCRIPTION
-.BR sysinfo ()
-returns certain statistics on memory and swap usage,
-as well as the load average.
-.PP
-Until Linux 2.3.16,
-.BR sysinfo ()
-returned information in the following structure:
-.PP
-.in +4n
-.EX
-struct sysinfo {
- long uptime; /* Seconds since boot */
- unsigned long loads[3]; /* 1, 5, and 15 minute load averages */
- unsigned long totalram; /* Total usable main memory size */
- unsigned long freeram; /* Available memory size */
- unsigned long sharedram; /* Amount of shared memory */
- unsigned long bufferram; /* Memory used by buffers */
- unsigned long totalswap; /* Total swap space size */
- unsigned long freeswap; /* Swap space still available */
- unsigned short procs; /* Number of current processes */
- char _f[22]; /* Pads structure to 64 bytes */
-};
-.EE
-.in
-.PP
-In the above structure, the sizes of the memory and swap fields
-are given in bytes.
-.PP
-Since Linux 2.3.23 (i386) and Linux 2.3.48
-(all architectures) the structure is:
-.PP
-.in +4n
-.EX
-struct sysinfo {
- long uptime; /* Seconds since boot */
- unsigned long loads[3]; /* 1, 5, and 15 minute load averages */
- unsigned long totalram; /* Total usable main memory size */
- unsigned long freeram; /* Available memory size */
- unsigned long sharedram; /* Amount of shared memory */
- unsigned long bufferram; /* Memory used by buffers */
- unsigned long totalswap; /* Total swap space size */
- unsigned long freeswap; /* Swap space still available */
- unsigned short procs; /* Number of current processes */
- unsigned long totalhigh; /* Total high memory size */
- unsigned long freehigh; /* Available high memory size */
- unsigned int mem_unit; /* Memory unit size in bytes */
- char _f[20\-2*sizeof(long)\-sizeof(int)];
- /* Padding to 64 bytes */
-};
-.EE
-.in
-.PP
-In the above structure,
-sizes of the memory and swap fields are given as multiples of
-.I mem_unit
-bytes.
-.SH RETURN VALUE
-On success,
-.BR sysinfo ()
-returns zero.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-.I info
-is not a valid address.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 0.98.pl6.
-.SH NOTES
-All of the information provided by this system call is also available via
-.I /proc/meminfo
-and
-.IR /proc/loadavg .
-.SH SEE ALSO
-.BR proc (5)
diff --git a/man2/syslog.2 b/man2/syslog.2
deleted file mode 100644
index 99403ceb0..000000000
--- a/man2/syslog.2
+++ /dev/null
@@ -1,378 +0,0 @@
-'\" t
-.\" Copyright (C) 1995 Andries Brouwer (aeb@cwi.nl)
-.\" and Copyright (C) 2012, 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Written 11 June 1995 by Andries Brouwer <aeb@cwi.nl>
-.\" 2008-02-15, Jeremy Kerr <jk@ozlabs.org>
-.\" Add info on command type 10; add details on types 6, 7, 8, & 9.
-.\" 2008-02-15, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Update LOG_BUF_LEN details; update RETURN VALUE section.
-.\"
-.TH syslog 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-syslog, klogctl \- read and/or clear kernel message ring buffer;
-set console_loglevel
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/klog.h>" " /* Definition of " SYSLOG_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_syslog, int " type ", char *" bufp ", int " len );
-.PP
-/* The glibc interface */
-.B #include <sys/klog.h>
-.PP
-.BI "int klogctl(int " type ", char *" bufp ", int " len );
-.fi
-.SH DESCRIPTION
-.IR Note :
-Probably, you are looking for the C library function
-.BR syslog (),
-which talks to
-.BR syslogd (8);
-see
-.BR syslog (3)
-for details.
-.PP
-This page describes the kernel
-.BR syslog ()
-system call, which is used to control the kernel
-.IR printk ()
-buffer; the glibc wrapper function for the system call is called
-.BR klogctl ().
-.SS The kernel log buffer
-The kernel has a cyclic buffer of length
-.B LOG_BUF_LEN
-in which messages given as arguments to the kernel function
-.BR printk ()
-are stored (regardless of their log level).
-In early kernels,
-.B LOG_BUF_LEN
-had the value 4096;
-from Linux 1.3.54, it was 8192;
-from Linux 2.1.113, it was 16384;
-since Linux 2.4.23/2.6, the value is a kernel configuration option
-.RB ( CONFIG_LOG_BUF_SHIFT ,
-default value dependent on the architecture).
-.\" Under "General setup" ==> "Kernel log buffer size"
-.\" For Linux 2.6, precisely the option seems to have appeared in Linux 2.5.55.
-Since Linux 2.6.6, the size can be queried with command type 10 (see below).
-.SS Commands
-The \fItype\fP argument determines the action taken by this function.
-The list below specifies the values for
-.IR type .
-The symbolic names are defined in the kernel source,
-but are not exported to user space;
-you will either need to use the numbers, or define the names yourself.
-.TP
-.BR SYSLOG_ACTION_CLOSE " (0)"
-Close the log.
-Currently a NOP.
-.TP
-.BR SYSLOG_ACTION_OPEN " (1)"
-Open the log.
-Currently a NOP.
-.TP
-.BR SYSLOG_ACTION_READ " (2)"
-Read from the log.
-The call
-waits until the kernel log buffer is nonempty, and then reads
-at most \fIlen\fP bytes into the buffer pointed to by
-.IR bufp .
-The call returns the number of bytes read.
-Bytes read from the log disappear from the log buffer:
-the information can be read only once.
-This is the function executed by the kernel when a user program reads
-.IR /proc/kmsg .
-.TP
-.BR SYSLOG_ACTION_READ_ALL " (3)"
-Read all messages remaining in the ring buffer,
-placing them in the buffer pointed to by
-.IR bufp .
-The call reads the last \fIlen\fP
-bytes from the log buffer (nondestructively),
-but will not read more than was written into the buffer since the
-last "clear ring buffer" command (see command 5 below)).
-The call returns the number of bytes read.
-.TP
-.BR SYSLOG_ACTION_READ_CLEAR " (4)"
-Read and clear all messages remaining in the ring buffer.
-The call does precisely the same as for a
-.I type
-of 3, but also executes the "clear ring buffer" command.
-.TP
-.BR SYSLOG_ACTION_CLEAR " (5)"
-The call executes just the "clear ring buffer" command.
-The
-.I bufp
-and
-.I len
-arguments are ignored.
-.IP
-This command does not really clear the ring buffer.
-Rather, it sets a kernel bookkeeping variable that
-determines the results returned by commands 3
-.RB ( SYSLOG_ACTION_READ_ALL )
-and 4
-.RB ( SYSLOG_ACTION_READ_CLEAR ).
-This command has no effect on commands 2
-.RB ( SYSLOG_ACTION_READ )
-and 9
-.RB ( SYSLOG_ACTION_SIZE_UNREAD ).
-.TP
-.BR SYSLOG_ACTION_CONSOLE_OFF " (6)"
-The command saves the current value of
-.I console_loglevel
-and then sets
-.I console_loglevel
-to
-.IR minimum_console_loglevel ,
-so that no messages are printed to the console.
-Before Linux 2.6.32,
-.\" commit 1aaad49e856ce41adc07d8ae0c8ef35fc4483245
-the command simply sets
-.I console_loglevel
-to
-.IR minimum_console_loglevel .
-See the discussion of
-.IR /proc/sys/kernel/printk ,
-below.
-.IP
-The
-.I bufp
-and
-.I len
-arguments are ignored.
-.TP
-.BR SYSLOG_ACTION_CONSOLE_ON " (7)"
-If a previous
-.B SYSLOG_ACTION_CONSOLE_OFF
-command has been performed,
-this command restores
-.I console_loglevel
-to the value that was saved by that command.
-Before Linux 2.6.32,
-.\" commit 1aaad49e856ce41adc07d8ae0c8ef35fc4483245
-this command simply sets
-.I console_loglevel
-to
-.IR default_console_loglevel .
-See the discussion of
-.IR /proc/sys/kernel/printk ,
-below.
-.IP
-The
-.I bufp
-and
-.I len
-arguments are ignored.
-.TP
-.BR SYSLOG_ACTION_CONSOLE_LEVEL " (8)"
-The call sets
-.I console_loglevel
-to the value given in
-.IR len ,
-which must be an integer between 1 and 8 (inclusive).
-The kernel silently enforces a minimum value of
-.I minimum_console_loglevel
-for
-.IR len .
-See the
-.I log level
-section for details.
-The
-.I bufp
-argument is ignored.
-.TP
-.BR SYSLOG_ACTION_SIZE_UNREAD " (9) (since Linux 2.4.10)"
-The call
-returns the number of bytes currently available to be read
-from the kernel log buffer via command 2
-.RB ( SYSLOG_ACTION_READ ).
-The
-.I bufp
-and
-.I len
-arguments are ignored.
-.TP
-.BR SYSLOG_ACTION_SIZE_BUFFER " (10) (since Linux 2.6.6)"
-This command returns the total size of the kernel log buffer.
-The
-.I bufp
-and
-.I len
-arguments are ignored.
-.PP
-All commands except 3 and 10 require privilege.
-In Linux kernels before Linux 2.6.37,
-command types 3 and 10 are allowed to unprivileged processes;
-since Linux 2.6.37,
-these commands are allowed to unprivileged processes only if
-.I /proc/sys/kernel/dmesg_restrict
-has the value 0.
-Before Linux 2.6.37, "privileged" means that the caller has the
-.B CAP_SYS_ADMIN
-capability.
-Since Linux 2.6.37,
-"privileged" means that the caller has either the
-.B CAP_SYS_ADMIN
-capability (now deprecated for this purpose) or the (new)
-.B CAP_SYSLOG
-capability.
-.\"
-.\"
-.SS /proc/sys/kernel/printk
-.I /proc/sys/kernel/printk
-is a writable file containing four integer values that influence kernel
-.I printk()
-behavior when printing or logging error messages.
-The four values are:
-.TP
-.I console_loglevel
-Only messages with a log level lower than this value will
-be printed to the console.
-The default value for this field is
-.B DEFAULT_CONSOLE_LOGLEVEL
-(7), but it is set to
-4 if the kernel command line contains the word "quiet",\" since Linux 2.4
-10 if the kernel command line contains the word "debug",
-and to 15 in case
-of a kernel fault (the 10 and 15 are just silly, and equivalent to 8).
-The value of
-.I console_loglevel
-can be set (to a value in the range 1\[en]8) by a
-.BR syslog ()
-call with a
-.I type
-of 8.
-.TP
-.I default_message_loglevel
-This value will be used as the log level for
-.I printk()
-messages that do not have an explicit level.
-Up to and including Linux 2.6.38,
-the hard-coded default value for this field was 4
-.RB ( KERN_WARNING );
-since Linux 2.6.39,
-.\" commit 5af5bcb8d37f99ba415a1adc6da71051b84f93a5
-the default value is defined by the kernel configuration option
-.BR CONFIG_DEFAULT_MESSAGE_LOGLEVEL ,
-which defaults to 4.
-.TP
-.I minimum_console_loglevel
-The value in this field is the minimum value to which
-.I console_loglevel
-can be set.
-.TP
-.I default_console_loglevel
-This is the default value for
-.IR console_loglevel .
-.\"
-.\"
-.SS The log level
-Every
-.IR printk ()
-message has its own log level.
-If the log level is not explicitly specified as part of the message,
-it defaults to
-.IR default_message_loglevel .
-The conventional meaning of the log level is as follows:
-.TS
-lB lB lB
-lB c l.
-Kernel constant Level value Meaning
-KERN_EMERG 0 System is unusable
-KERN_ALERT 1 T{
-Action must be taken immediately
-T}
-KERN_CRIT 2 Critical conditions
-KERN_ERR 3 Error conditions
-KERN_WARNING 4 Warning conditions
-KERN_NOTICE 5 T{
-Normal but significant condition
-T}
-KERN_INFO 6 Informational
-KERN_DEBUG 7 Debug-level messages
-.TE
-.sp 1
-The kernel
-.I printk()
-routine will print a message on the
-console only if it has a log level less than the value of
-.IR console_loglevel .
-.SH RETURN VALUE
-For \fItype\fP equal to 2, 3, or 4, a successful call to
-.BR syslog ()
-returns the number
-of bytes read.
-For \fItype\fP 9,
-.BR syslog ()
-returns the number of bytes currently
-available to be read on the kernel log buffer.
-For \fItype\fP 10,
-.BR syslog ()
-returns the total size of the kernel log buffer.
-For other values of \fItype\fP, 0 is returned on success.
-.PP
-In case of error, \-1 is returned,
-and \fIerrno\fP is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-Bad arguments (e.g.,
-bad
-.IR type ;
-or for
-.I type
-2, 3, or 4,
-.I buf
-is NULL,
-or
-.I len
-is less than zero; or for
-.I type
-8, the
-.I level
-is outside the range 1 to 8).
-.TP
-.B ENOSYS
-This
-.BR syslog ()
-system call is not available, because the kernel was compiled with the
-.B CONFIG_PRINTK
-kernel-configuration option disabled.
-.TP
-.B EPERM
-An attempt was made to change
-.I console_loglevel
-or clear the kernel
-message ring buffer by a process without sufficient privilege
-(more precisely: without the
-.B CAP_SYS_ADMIN
-or
-.B CAP_SYSLOG
-capability).
-.TP
-.B ERESTARTSYS
-System call was interrupted by a signal; nothing was read.
-(This can be seen only during a trace.)
-.SH STANDARDS
-Linux.
-.SH HISTORY
-From the very start, people noted that it is unfortunate that
-a system call and a library routine of the same name are entirely
-different animals.
-.\" In libc4 and libc5 the number of this call was defined by
-.\" .BR SYS_klog .
-.\" In glibc 2.0 the syscall is baptized
-.\" .BR klogctl ().
-.SH SEE ALSO
-.BR dmesg (1),
-.BR syslog (3),
-.BR capabilities (7)
diff --git a/man2/tee.2 b/man2/tee.2
deleted file mode 100644
index 141ee7f94..000000000
--- a/man2/tee.2
+++ /dev/null
@@ -1,199 +0,0 @@
-.\" This manpage is Copyright (C) 2006 Jens Axboe
-.\" and Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH tee 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-tee \- duplicating pipe content
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <fcntl.h>
-.PP
-.BI "ssize_t tee(int " fd_in ", int " fd_out ", size_t " len \
-", unsigned int " flags );
-.fi
-.\" Return type was long before glibc 2.7
-.SH DESCRIPTION
-.\" Example programs http://brick.kernel.dk/snaps
-.\"
-.\"
-.\" add a "tee(in, out1, out2)" system call that duplicates the pages
-.\" (again, incrementing their reference count, not copying the data) from
-.\" one pipe to two other pipes.
-.BR tee ()
-duplicates up to
-.I len
-bytes of data from the pipe referred to by the file descriptor
-.I fd_in
-to the pipe referred to by the file descriptor
-.IR fd_out .
-It does not consume the data that is duplicated from
-.IR fd_in ;
-therefore, that data can be copied by a subsequent
-.BR splice (2).
-.PP
-.I flags
-is a bit mask that is composed by ORing together
-zero or more of the following values:
-.TP 1.9i
-.B SPLICE_F_MOVE
-Currently has no effect for
-.BR tee ();
-see
-.BR splice (2).
-.TP
-.B SPLICE_F_NONBLOCK
-Do not block on I/O; see
-.BR splice (2)
-for further details.
-.TP
-.B SPLICE_F_MORE
-Currently has no effect for
-.BR tee (),
-but may be implemented in the future; see
-.BR splice (2).
-.TP
-.B SPLICE_F_GIFT
-Unused for
-.BR tee ();
-see
-.BR vmsplice (2).
-.SH RETURN VALUE
-Upon successful completion,
-.BR tee ()
-returns the number of bytes that were duplicated between the input
-and output.
-A return value of 0 means that there was no data to transfer,
-and it would not make sense to block, because there are no
-writers connected to the write end of the pipe referred to by
-.IR fd_in .
-.PP
-On error,
-.BR tee ()
-returns \-1 and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-.B SPLICE_F_NONBLOCK
-was specified in
-.I flags
-or one of the file descriptors had been marked as nonblocking
-.RB ( O_NONBLOCK ) ,
-and the operation would block.
-.TP
-.B EINVAL
-.I fd_in
-or
-.I fd_out
-does not refer to a pipe; or
-.I fd_in
-and
-.I fd_out
-refer to the same pipe.
-.TP
-.B ENOMEM
-Out of memory.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.17,
-glibc 2.5.
-.SH NOTES
-Conceptually,
-.BR tee ()
-copies the data between the two pipes.
-In reality no real data copying takes place though:
-under the covers,
-.BR tee ()
-assigns data to the output by merely grabbing
-a reference to the input.
-.SH EXAMPLES
-The example below implements a basic
-.BR tee (1)
-program using the
-.BR tee ()
-system call.
-Here is an example of its use:
-.PP
-.in +4n
-.EX
-$ \fBdate | ./a.out out.log | cat\fP
-Tue Oct 28 10:06:00 CET 2014
-$ \fBcat out.log\fP
-Tue Oct 28 10:06:00 CET 2014
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (tee.c)
-.EX
-#define _GNU_SOURCE
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int fd;
- ssize_t len, slen;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s <file>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0644);
- if (fd == \-1) {
- perror("open");
- exit(EXIT_FAILURE);
- }
-\&
- for (;;) {
- /*
- * tee stdin to stdout.
- */
- len = tee(STDIN_FILENO, STDOUT_FILENO,
- INT_MAX, SPLICE_F_NONBLOCK);
- if (len < 0) {
- if (errno == EAGAIN)
- continue;
- perror("tee");
- exit(EXIT_FAILURE);
- }
- if (len == 0)
- break;
-\&
- /*
- * Consume stdin by splicing it to a file.
- */
- while (len > 0) {
- slen = splice(STDIN_FILENO, NULL, fd, NULL,
- len, SPLICE_F_MOVE);
- if (slen < 0) {
- perror("splice");
- exit(EXIT_FAILURE);
- }
- len \-= slen;
- }
- }
-\&
- close(fd);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR splice (2),
-.BR vmsplice (2),
-.BR pipe (7)
diff --git a/man2/tgkill.2 b/man2/tgkill.2
deleted file mode 100644
index 82fc2d6af..000000000
--- a/man2/tgkill.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/tkill.2
diff --git a/man2/time.2 b/man2/time.2
deleted file mode 100644
index 65db67a34..000000000
--- a/man2/time.2
+++ /dev/null
@@ -1,117 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified Sat Jul 24 14:13:40 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Additions by Joseph S. Myers <jsm28@cam.ac.uk>, 970909
-.\"
-.TH time 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-time \- get time in seconds
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <time.h>
-.PP
-.BI "time_t time(time_t *_Nullable " tloc );
-.fi
-.SH DESCRIPTION
-.BR time ()
-returns the time as the number of seconds since the
-Epoch, 1970-01-01 00:00:00 +0000 (UTC).
-.PP
-If
-.I tloc
-is non-NULL,
-the return value is also stored in the memory pointed to by
-.IR tloc .
-.SH RETURN VALUE
-On success, the value of time in seconds since the Epoch is returned.
-On error, \fI((time_t)\ \-1)\fP is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-.I tloc
-points outside your accessible address space (but see BUGS).
-.IP
-On systems where the C library
-.BR time ()
-wrapper function invokes an implementation provided by the
-.BR vdso (7)
-(so that there is no trap into the kernel),
-an invalid address may instead trigger a
-.B SIGSEGV
-signal.
-.SH VERSIONS
-POSIX.1 defines
-.I seconds since the Epoch
-using a formula that approximates the number of seconds between a
-specified time and the Epoch.
-This formula takes account of the facts that
-all years that are evenly divisible by 4 are leap years,
-but years that are evenly divisible by 100 are not leap years
-unless they are also evenly divisible by 400,
-in which case they are leap years.
-This value is not the same as the actual number of seconds between the time
-and the Epoch, because of leap seconds and because system clocks are not
-required to be synchronized to a standard reference.
-The intention is that the interpretation of seconds since the Epoch values be
-consistent; see POSIX.1-2008 Rationale A.4.15 for further rationale.
-.PP
-On Linux, a call to
-.BR time ()
-with
-.I tloc
-specified as NULL cannot fail with the error
-.BR EOVERFLOW ,
-even on ABIs where
-.I time_t
-is a signed 32-bit integer and the clock reaches or exceeds 2**31 seconds
-(2038-01-19 03:14:08 UTC, ignoring leap seconds).
-(POSIX.1 permits, but does not require, the
-.B EOVERFLOW
-error in the case where the seconds since the Epoch will not fit in
-.IR time_t .)
-Instead, the behavior on Linux is undefined when the system time is out of the
-.I time_t
-range.
-Applications intended to run after 2038 should use ABIs with
-.I time_t
-wider than 32 bits.
-.SS C library/kernel differences
-On some architectures, an implementation of
-.BR time ()
-is provided in the
-.BR vdso (7).
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-SVr4, 4.3BSD, C89, POSIX.1-2001.
-.\" Under 4.3BSD, this call is obsoleted by
-.\" .BR gettimeofday (2).
-.SH BUGS
-Error returns from this system call are indistinguishable from
-successful reports that the time is a few seconds
-.I before
-the Epoch, so the C library wrapper function never sets
-.I errno
-as a result of this call.
-.PP
-The
-.I tloc
-argument is obsolescent and should always be NULL in new code.
-When
-.I tloc
-is NULL, the call cannot fail.
-.SH SEE ALSO
-.BR date (1),
-.BR gettimeofday (2),
-.BR ctime (3),
-.BR ftime (3),
-.BR time (7),
-.BR vdso (7)
diff --git a/man2/timer_create.2 b/man2/timer_create.2
deleted file mode 100644
index a3987bb1e..000000000
--- a/man2/timer_create.2
+++ /dev/null
@@ -1,487 +0,0 @@
-.\" Copyright (c) 2009 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH timer_create 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-timer_create \- create a POSIX per-process timer
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.BR "#include <signal.h>" " /* Definition of " SIGEV_* " constants */"
-.B #include <time.h>
-.PP
-.BI "int timer_create(clockid_t " clockid ,
-.BI " struct sigevent *_Nullable restrict " sevp ,
-.BI " timer_t *restrict " timerid );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR timer_create ():
-.nf
- _POSIX_C_SOURCE >= 199309L
-.fi
-.SH DESCRIPTION
-.BR timer_create ()
-creates a new per-process interval timer.
-The ID of the new timer is returned in the buffer pointed to by
-.IR timerid ,
-which must be a non-null pointer.
-This ID is unique within the process, until the timer is deleted.
-The new timer is initially disarmed.
-.PP
-The
-.I clockid
-argument specifies the clock that the new timer uses to measure time.
-It can be specified as one of the following values:
-.TP
-.B CLOCK_REALTIME
-A settable system-wide real-time clock.
-.TP
-.B CLOCK_MONOTONIC
-A nonsettable monotonically increasing clock that measures time
-from some unspecified point in the past that does not change
-after system startup.
-.\" Note: the CLOCK_MONOTONIC_RAW clock added for clock_gettime()
-.\" in Linux 2.6.28 is not supported for POSIX timers -- mtk, Feb 2009
-.TP
-.BR CLOCK_PROCESS_CPUTIME_ID " (since Linux 2.6.12)"
-A clock that measures (user and system) CPU time consumed by
-(all of the threads in) the calling process.
-.TP
-.BR CLOCK_THREAD_CPUTIME_ID " (since Linux 2.6.12)"
-A clock that measures (user and system) CPU time consumed by
-the calling thread.
-.\" The CLOCK_MONOTONIC_RAW that was added in Linux 2.6.28 can't be used
-.\" to create a timer -- mtk, Feb 2009
-.TP
-.BR CLOCK_BOOTTIME " (Since Linux 2.6.39)"
-.\" commit 70a08cca1227dc31c784ec930099a4417a06e7d0
-Like
-.BR CLOCK_MONOTONIC ,
-this is a monotonically increasing clock.
-However, whereas the
-.B CLOCK_MONOTONIC
-clock does not measure the time while a system is suspended, the
-.B CLOCK_BOOTTIME
-clock does include the time during which the system is suspended.
-This is useful for applications that need to be suspend-aware.
-.B CLOCK_REALTIME
-is not suitable for such applications, since that clock is affected
-by discontinuous changes to the system clock.
-.TP
-.BR CLOCK_REALTIME_ALARM " (since Linux 3.0)"
-.\" commit 9a7adcf5c6dea63d2e47e6f6d2f7a6c9f48b9337
-This clock is like
-.BR CLOCK_REALTIME ,
-but will wake the system if it is suspended.
-The caller must have the
-.B CAP_WAKE_ALARM
-capability in order to set a timer against this clock.
-.TP
-.BR CLOCK_BOOTTIME_ALARM " (since Linux 3.0)"
-.\" commit 9a7adcf5c6dea63d2e47e6f6d2f7a6c9f48b9337
-This clock is like
-.BR CLOCK_BOOTTIME ,
-but will wake the system if it is suspended.
-The caller must have the
-.B CAP_WAKE_ALARM
-capability in order to set a timer against this clock.
-.TP
-.BR CLOCK_TAI " (since Linux 3.10)"
-A system-wide clock derived from wall-clock time but ignoring leap seconds.
-.PP
-See
-.BR clock_getres (2)
-for some further details on the above clocks.
-.PP
-As well as the above values,
-.I clockid
-can be specified as the
-.I clockid
-returned by a call to
-.BR clock_getcpuclockid (3)
-or
-.BR pthread_getcpuclockid (3).
-.PP
-The
-.I sevp
-argument points to a
-.I sigevent
-structure that specifies how the caller
-should be notified when the timer expires.
-For the definition and general details of this structure, see
-.BR sigevent (7).
-.PP
-The
-.I sevp.sigev_notify
-field can have the following values:
-.TP
-.B SIGEV_NONE
-Don't asynchronously notify when the timer expires.
-Progress of the timer can be monitored using
-.BR timer_gettime (2).
-.TP
-.B SIGEV_SIGNAL
-Upon timer expiration, generate the signal
-.I sigev_signo
-for the process.
-See
-.BR sigevent (7)
-for general details.
-The
-.I si_code
-field of the
-.I siginfo_t
-structure will be set to
-.BR SI_TIMER .
-At any point in time,
-at most one signal is queued to the process for a given timer; see
-.BR timer_getoverrun (2)
-for more details.
-.TP
-.B SIGEV_THREAD
-Upon timer expiration, invoke
-.I sigev_notify_function
-as if it were the start function of a new thread.
-See
-.BR sigevent (7)
-for details.
-.TP
-.BR SIGEV_THREAD_ID " (Linux-specific)"
-As for
-.BR SIGEV_SIGNAL ,
-but the signal is targeted at the thread whose ID is given in
-.IR sigev_notify_thread_id ,
-which must be a thread in the same process as the caller.
-The
-.I sigev_notify_thread_id
-field specifies a kernel thread ID, that is, the value returned by
-.BR clone (2)
-or
-.BR gettid (2).
-This flag is intended only for use by threading libraries.
-.PP
-Specifying
-.I sevp
-as NULL is equivalent to specifying a pointer to a
-.I sigevent
-structure in which
-.I sigev_notify
-is
-.BR SIGEV_SIGNAL ,
-.I sigev_signo
-is
-.BR SIGALRM ,
-and
-.I sigev_value.sival_int
-is the timer ID.
-.SH RETURN VALUE
-On success,
-.BR timer_create ()
-returns 0, and the ID of the new timer is placed in
-.IR *timerid .
-On failure, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-Temporary error during kernel allocation of timer structures.
-.TP
-.B EINVAL
-Clock ID,
-.IR sigev_notify ,
-.IR sigev_signo ,
-or
-.I sigev_notify_thread_id
-is invalid.
-.TP
-.B ENOMEM
-.\" glibc layer: malloc()
-Could not allocate memory.
-.TP
-.B ENOTSUP
-The kernel does not support creating a timer against this
-.IR clockid .
-.TP
-.B EPERM
-.I clockid
-was
-.B CLOCK_REALTIME_ALARM
-or
-.B CLOCK_BOOTTIME_ALARM
-but the caller did not have the
-.B CAP_WAKE_ALARM
-capability.
-.SH VERSIONS
-.SS C library/kernel differences
-Part of the implementation of the POSIX timers API is provided by glibc.
-.\" See nptl/sysdeps/unix/sysv/linux/timer_create.c
-In particular:
-.IP \[bu] 3
-Much of the functionality for
-.B SIGEV_THREAD
-is implemented within glibc, rather than the kernel.
-(This is necessarily so,
-since the thread involved in handling the notification is one
-that must be managed by the C library POSIX threads implementation.)
-Although the notification delivered to the process is via a thread,
-internally the NPTL implementation uses a
-.I sigev_notify
-value of
-.B SIGEV_THREAD_ID
-along with a real-time signal that is reserved by the implementation (see
-.BR nptl (7)).
-.IP \[bu]
-The implementation of the default case where
-.I evp
-is NULL is handled inside glibc,
-which invokes the underlying system call with a suitably populated
-.I sigevent
-structure.
-.IP \[bu]
-The timer IDs presented at user level are maintained by glibc,
-which maps these IDs to the timer IDs employed by the kernel.
-.\" See the glibc source file kernel-posix-timers.h for the structure
-.\" that glibc uses to map user-space timer IDs to kernel timer IDs
-.\" The kernel-level timer ID is exposed via siginfo.si_tid.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-Linux 2.6.
-POSIX.1-2001.
-.PP
-Prior to Linux 2.6,
-glibc provided an incomplete user-space implementation
-.RB ( CLOCK_REALTIME
-timers only) using POSIX threads,
-and before glibc 2.17,
-.\" glibc commit 93a78ac437ba44f493333d7e2a4b0249839ce460
-the implementation falls back to this technique on systems
-running kernels older than Linux 2.6.
-.SH NOTES
-A program may create multiple interval timers using
-.BR timer_create ().
-.PP
-Timers are not inherited by the child of a
-.BR fork (2),
-and are disarmed and deleted during an
-.BR execve (2).
-.PP
-The kernel preallocates a "queued real-time signal"
-for each timer created using
-.BR timer_create ().
-Consequently, the number of timers is limited by the
-.B RLIMIT_SIGPENDING
-resource limit (see
-.BR setrlimit (2)).
-.PP
-The timers created by
-.BR timer_create ()
-are commonly known as "POSIX (interval) timers".
-The POSIX timers API consists of the following interfaces:
-.TP
-.BR timer_create ()
-Create a timer.
-.TP
-.BR timer_settime (2)
-Arm (start) or disarm (stop) a timer.
-.TP
-.BR timer_gettime (2)
-Fetch the time remaining until the next expiration of a timer,
-along with the interval setting of the timer.
-.TP
-.BR timer_getoverrun (2)
-Return the overrun count for the last timer expiration.
-.TP
-.BR timer_delete (2)
-Disarm and delete a timer.
-.PP
-Since Linux 3.10, the
-.IR /proc/ pid /timers
-file can be used to list the POSIX timers for the process with PID
-.IR pid .
-See
-.BR proc (5)
-for further information.
-.PP
-Since Linux 4.10,
-.\" baa73d9e478ff32d62f3f9422822b59dd9a95a21
-support for POSIX timers is a configurable option that is enabled by default.
-Kernel support can be disabled via the
-.B CONFIG_POSIX_TIMERS
-option.
-.SH EXAMPLES
-The program below takes two arguments: a sleep period in seconds,
-and a timer frequency in nanoseconds.
-The program establishes a handler for the signal it uses for the timer,
-blocks that signal,
-creates and arms a timer that expires with the given frequency,
-sleeps for the specified number of seconds,
-and then unblocks the timer signal.
-Assuming that the timer expired at least once while the program slept,
-the signal handler will be invoked,
-and the handler displays some information about the timer notification.
-The program terminates after one invocation of the signal handler.
-.PP
-In the following example run, the program sleeps for 1 second,
-after creating a timer that has a frequency of 100 nanoseconds.
-By the time the signal is unblocked and delivered,
-there have been around ten million overruns.
-.PP
-.in +4n
-.EX
-$ \fB./a.out 1 100\fP
-Establishing handler for signal 34
-Blocking signal 34
-timer ID is 0x804c008
-Sleeping for 1 seconds
-Unblocking signal 34
-Caught signal 34
- sival_ptr = 0xbfb174f4; *sival_ptr = 0x804c008
- overrun count = 10004886
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (timer_create.c)
-.EX
-#include <signal.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <unistd.h>
-\&
-#define CLOCKID CLOCK_REALTIME
-#define SIG SIGRTMIN
-\&
-#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \e
- } while (0)
-\&
-static void
-print_siginfo(siginfo_t *si)
-{
- int or;
- timer_t *tidp;
-\&
- tidp = si\->si_value.sival_ptr;
-\&
- printf(" sival_ptr = %p; ", si\->si_value.sival_ptr);
- printf(" *sival_ptr = %#jx\en", (uintmax_t) *tidp);
-\&
- or = timer_getoverrun(*tidp);
- if (or == \-1)
- errExit("timer_getoverrun");
- else
- printf(" overrun count = %d\en", or);
-}
-\&
-static void
-handler(int sig, siginfo_t *si, void *uc)
-{
- /* Note: calling printf() from a signal handler is not safe
- (and should not be done in production programs), since
- printf() is not async\-signal\-safe; see signal\-safety(7).
- Nevertheless, we use printf() here as a simple way of
- showing that the handler was called. */
-\&
- printf("Caught signal %d\en", sig);
- print_siginfo(si);
- signal(sig, SIG_IGN);
-}
-\&
-int
-main(int argc, char *argv[])
-{
- timer_t timerid;
- sigset_t mask;
- long long freq_nanosecs;
- struct sigevent sev;
- struct sigaction sa;
- struct itimerspec its;
-\&
- if (argc != 3) {
- fprintf(stderr, "Usage: %s <sleep\-secs> <freq\-nanosecs>\en",
- argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- /* Establish handler for timer signal. */
-\&
- printf("Establishing handler for signal %d\en", SIG);
- sa.sa_flags = SA_SIGINFO;
- sa.sa_sigaction = handler;
- sigemptyset(&sa.sa_mask);
- if (sigaction(SIG, &sa, NULL) == \-1)
- errExit("sigaction");
-\&
- /* Block timer signal temporarily. */
-\&
- printf("Blocking signal %d\en", SIG);
- sigemptyset(&mask);
- sigaddset(&mask, SIG);
- if (sigprocmask(SIG_SETMASK, &mask, NULL) == \-1)
- errExit("sigprocmask");
-\&
- /* Create the timer. */
-\&
- sev.sigev_notify = SIGEV_SIGNAL;
- sev.sigev_signo = SIG;
- sev.sigev_value.sival_ptr = &timerid;
- if (timer_create(CLOCKID, &sev, &timerid) == \-1)
- errExit("timer_create");
-\&
- printf("timer ID is %#jx\en", (uintmax_t) timerid);
-\&
- /* Start the timer. */
-\&
- freq_nanosecs = atoll(argv[2]);
- its.it_value.tv_sec = freq_nanosecs / 1000000000;
- its.it_value.tv_nsec = freq_nanosecs % 1000000000;
- its.it_interval.tv_sec = its.it_value.tv_sec;
- its.it_interval.tv_nsec = its.it_value.tv_nsec;
-\&
- if (timer_settime(timerid, 0, &its, NULL) == \-1)
- errExit("timer_settime");
-\&
- /* Sleep for a while; meanwhile, the timer may expire
- multiple times. */
-\&
- printf("Sleeping for %d seconds\en", atoi(argv[1]));
- sleep(atoi(argv[1]));
-\&
- /* Unlock the timer signal, so that timer notification
- can be delivered. */
-\&
- printf("Unblocking signal %d\en", SIG);
- if (sigprocmask(SIG_UNBLOCK, &mask, NULL) == \-1)
- errExit("sigprocmask");
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.ad l
-.nh
-.BR clock_gettime (2),
-.BR setitimer (2),
-.BR timer_delete (2),
-.BR timer_getoverrun (2),
-.BR timer_settime (2),
-.BR timerfd_create (2),
-.BR clock_getcpuclockid (3),
-.BR pthread_getcpuclockid (3),
-.BR pthreads (7),
-.BR sigevent (7),
-.BR signal (7),
-.BR time (7)
diff --git a/man2/timer_delete.2 b/man2/timer_delete.2
deleted file mode 100644
index 7db4ce1fd..000000000
--- a/man2/timer_delete.2
+++ /dev/null
@@ -1,58 +0,0 @@
-.\" Copyright (c) 2009 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH timer_delete 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-timer_delete \- delete a POSIX per-process timer
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B #include <time.h>
-.PP
-.BI "int timer_delete(timer_t " timerid );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR timer_delete ():
-.nf
- _POSIX_C_SOURCE >= 199309L
-.fi
-.SH DESCRIPTION
-.BR timer_delete ()
-deletes the timer whose ID is given in
-.IR timerid .
-If the timer was armed at the time of this call,
-it is disarmed before being deleted.
-The treatment of any pending signal generated by the deleted timer
-is unspecified.
-.SH RETURN VALUE
-On success,
-.BR timer_delete ()
-returns 0.
-On failure, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I timerid
-is not a valid timer ID.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-Linux 2.6.
-POSIX.1-2001.
-.SH SEE ALSO
-.BR clock_gettime (2),
-.BR timer_create (2),
-.BR timer_getoverrun (2),
-.BR timer_settime (2),
-.BR time (7)
diff --git a/man2/timer_getoverrun.2 b/man2/timer_getoverrun.2
deleted file mode 100644
index 90d9e0040..000000000
--- a/man2/timer_getoverrun.2
+++ /dev/null
@@ -1,134 +0,0 @@
-.\" Copyright (c) 2009 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH timer_getoverrun 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-timer_getoverrun \- get overrun count for a POSIX per-process timer
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B #include <time.h>
-.PP
-.BI "int timer_getoverrun(timer_t " timerid );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR timer_getoverrun ():
-.nf
- _POSIX_C_SOURCE >= 199309L
-.fi
-.SH DESCRIPTION
-.BR timer_getoverrun ()
-returns the "overrun count" for the timer referred to by
-.IR timerid .
-An application can use the overrun count to accurately calculate the number
-of timer expirations that would have occurred over a given time interval.
-Timer overruns can occur both when receiving expiration notifications
-via signals
-.RB ( SIGEV_SIGNAL ),
-and via threads
-.RB ( SIGEV_THREAD ).
-.PP
-When expiration notifications are delivered via a signal,
-overruns can occur as follows.
-Regardless of whether or not a real-time signal is used for
-timer notifications,
-the system queues at most one signal per timer.
-(This is the behavior specified by POSIX.1.
-The alternative, queuing one signal for each timer expiration,
-could easily result in overflowing the allowed limits for
-queued signals on the system.)
-Because of system scheduling delays,
-or because the signal may be temporarily blocked,
-there can be a delay between the time when the notification
-signal is generated and the time when it
-is delivered (e.g., caught by a signal handler) or accepted (e.g., using
-.BR sigwaitinfo (2)).
-In this interval, further timer expirations may occur.
-The timer overrun count is the number of additional
-timer expirations that occurred between the time when the signal
-was generated and when it was delivered or accepted.
-.PP
-Timer overruns can also occur when expiration notifications
-are delivered via invocation of a thread,
-since there may be an arbitrary delay between an expiration of the timer
-and the invocation of the notification thread,
-and in that delay interval, additional timer expirations may occur.
-.SH RETURN VALUE
-On success,
-.BR timer_getoverrun ()
-returns the overrun count of the specified timer;
-this count may be 0 if no overruns have occurred.
-On failure, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I timerid
-is not a valid timer ID.
-.SH VERSIONS
-When timer notifications are delivered via signals
-.RB ( SIGEV_SIGNAL ),
-on Linux it is also possible to obtain the overrun count via the
-.I si_overrun
-field of the
-.I siginfo_t
-structure (see
-.BR sigaction (2)).
-This allows an application to avoid the overhead of making
-a system call to obtain the overrun count,
-but is a nonportable extension to POSIX.1.
-.PP
-POSIX.1 discusses timer overruns only in the context of
-timer notifications using signals.
-.\" FIXME . Austin bug filed, 11 Feb 09
-.\" https://www.austingroupbugs.net/view.php?id=95
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-Linux 2.6.
-POSIX.1-2001.
-.SH BUGS
-POSIX.1 specifies that if the timer overrun count
-is equal to or greater than an implementation-defined maximum,
-.BR DELAYTIMER_MAX ,
-then
-.BR timer_getoverrun ()
-should return
-.BR DELAYTIMER_MAX .
-However, before Linux 4.19,
-.\" http://bugzilla.kernel.org/show_bug.cgi?id=12665
-if the timer overrun value exceeds the maximum representable integer,
-the counter cycles, starting once more from low values.
-Since Linux 4.19,
-.\" commit 78c9c4dfbf8c04883941445a195276bb4bb92c76
-.BR timer_getoverrun ()
-returns
-.B DELAYTIMER_MAX
-(defined as
-.B INT_MAX
-in
-.IR <limits.h> )
-in this case (and the overrun value is reset to 0).
-.SH EXAMPLES
-See
-.BR timer_create (2).
-.SH SEE ALSO
-.BR clock_gettime (2),
-.BR sigaction (2),
-.BR signalfd (2),
-.BR sigwaitinfo (2),
-.BR timer_create (2),
-.BR timer_delete (2),
-.BR timer_settime (2),
-.BR signal (7),
-.BR time (7)
diff --git a/man2/timer_gettime.2 b/man2/timer_gettime.2
deleted file mode 100644
index 42015ca6b..000000000
--- a/man2/timer_gettime.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/timer_settime.2
diff --git a/man2/timer_settime.2 b/man2/timer_settime.2
deleted file mode 100644
index 589da08c5..000000000
--- a/man2/timer_settime.2
+++ /dev/null
@@ -1,187 +0,0 @@
-.\" Copyright (c) 2009 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH timer_settime 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-timer_settime, timer_gettime \- arm/disarm and fetch
-state of POSIX per-process timer
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B #include <time.h>
-.PP
-.BI "int timer_gettime(timer_t " timerid ", struct itimerspec *" curr_value );
-.BI "int timer_settime(timer_t " timerid ", int " flags ,
-.BI " const struct itimerspec *restrict " new_value ,
-.BI " struct itimerspec *_Nullable restrict " old_value );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR timer_settime (),
-.BR timer_gettime ():
-.nf
- _POSIX_C_SOURCE >= 199309L
-.fi
-.SH DESCRIPTION
-.BR timer_settime ()
-arms or disarms the timer identified by
-.IR timerid .
-The
-.I new_value
-argument is pointer to an
-.I itimerspec
-structure that specifies the new initial value and
-the new interval for the timer.
-The
-.I itimerspec
-structure is described in
-.BR itimerspec (3type).
-.PP
-Each of the substructures of the
-.I itimerspec
-structure is a
-.BR timespec (3)
-structure that allows a time value to be specified
-in seconds and nanoseconds.
-These time values are measured according to the clock
-that was specified when the timer was created by
-.BR timer_create (2).
-.PP
-If
-.I new_value\->it_value
-specifies a nonzero value (i.e., either subfield is nonzero), then
-.BR timer_settime ()
-arms (starts) the timer,
-setting it to initially expire at the given time.
-(If the timer was already armed,
-then the previous settings are overwritten.)
-If
-.I new_value\->it_value
-specifies a zero value
-(i.e., both subfields are zero),
-then the timer is disarmed.
-.PP
-The
-.I new_value\->it_interval
-field specifies the period of the timer, in seconds and nanoseconds.
-If this field is nonzero, then each time that an armed timer expires,
-the timer is reloaded from the value specified in
-.IR new_value\->it_interval .
-If
-.I new_value\->it_interval
-specifies a zero value,
-then the timer expires just once, at the time specified by
-.IR it_value .
-.PP
-By default, the initial expiration time specified in
-.I new_value\->it_value
-is interpreted relative to the current time on the timer's
-clock at the time of the call.
-This can be modified by specifying
-.B TIMER_ABSTIME
-in
-.IR flags ,
-in which case
-.I new_value\->it_value
-is interpreted as an absolute value as measured on the timer's clock;
-that is, the timer will expire when the clock value reaches the
-value specified by
-.IR new_value\->it_value .
-If the specified absolute time has already passed,
-then the timer expires immediately,
-and the overrun count (see
-.BR timer_getoverrun (2))
-will be set correctly.
-.\" By experiment: the overrun count is set correctly, for CLOCK_REALTIME.
-.PP
-If the value of the
-.B CLOCK_REALTIME
-clock is adjusted while an absolute timer based on that clock is armed,
-then the expiration of the timer will be appropriately adjusted.
-Adjustments to the
-.B CLOCK_REALTIME
-clock have no effect on relative timers based on that clock.
-.\" Similar remarks might apply with respect to process and thread CPU time
-.\" clocks, but these clocks are not currently (2.6.28) settable on Linux.
-.PP
-If
-.I old_value
-is not NULL, then it points to a buffer
-that is used to return the previous interval of the timer (in
-.IR old_value\->it_interval )
-and the amount of time until the timer
-would previously have next expired (in
-.IR old_value\->it_value ).
-.PP
-.BR timer_gettime ()
-returns the time until next expiration, and the interval,
-for the timer specified by
-.IR timerid ,
-in the buffer pointed to by
-.IR curr_value .
-The time remaining until the next timer expiration is returned in
-.IR curr_value\->it_value ;
-this is always a relative value, regardless of whether the
-.B TIMER_ABSTIME
-flag was used when arming the timer.
-If the value returned in
-.I curr_value\->it_value
-is zero, then the timer is currently disarmed.
-The timer interval is returned in
-.IR curr_value\->it_interval .
-If the value returned in
-.I curr_value\->it_interval
-is zero, then this is a "one-shot" timer.
-.SH RETURN VALUE
-On success,
-.BR timer_settime ()
-and
-.BR timer_gettime ()
-return 0.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-These functions may fail with the following errors:
-.TP
-.B EFAULT
-.IR new_value ,
-.IR old_value ,
-or
-.I curr_value
-is not a valid pointer.
-.TP
-.B EINVAL
-.I timerid
-is invalid.
-.\" FIXME . eventually: invalid value in flags
-.PP
-.BR timer_settime ()
-may fail with the following errors:
-.TP
-.B EINVAL
-.I new_value.it_value
-is negative; or
-.I new_value.it_value.tv_nsec
-is negative or greater than 999,999,999.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-Linux 2.6.
-POSIX.1-2001.
-.SH EXAMPLES
-See
-.BR timer_create (2).
-.SH SEE ALSO
-.BR timer_create (2),
-.BR timer_getoverrun (2),
-.BR timespec (3),
-.BR time (7)
diff --git a/man2/timerfd_create.2 b/man2/timerfd_create.2
deleted file mode 100644
index d68206b05..000000000
--- a/man2/timerfd_create.2
+++ /dev/null
@@ -1,700 +0,0 @@
-.\" Copyright (C) 2008 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH timerfd_create 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-timerfd_create, timerfd_settime, timerfd_gettime \-
-timers that notify via file descriptors
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/timerfd.h>
-.PP
-.BI "int timerfd_create(int " clockid ", int " flags );
-.PP
-.BI "int timerfd_settime(int " fd ", int " flags ,
-.BI " const struct itimerspec *" new_value ,
-.BI " struct itimerspec *_Nullable " old_value );
-.BI "int timerfd_gettime(int " fd ", struct itimerspec *" curr_value );
-.fi
-.SH DESCRIPTION
-These system calls create and operate on a timer
-that delivers timer expiration notifications via a file descriptor.
-They provide an alternative to the use of
-.BR setitimer (2)
-or
-.BR timer_create (2),
-with the advantage that the file descriptor may be monitored by
-.BR select (2),
-.BR poll (2),
-and
-.BR epoll (7).
-.PP
-The use of these three system calls is analogous to the use of
-.BR timer_create (2),
-.BR timer_settime (2),
-and
-.BR timer_gettime (2).
-(There is no analog of
-.BR timer_getoverrun (2),
-since that functionality is provided by
-.BR read (2),
-as described below.)
-.\"
-.SS timerfd_create()
-.BR timerfd_create ()
-creates a new timer object,
-and returns a file descriptor that refers to that timer.
-The
-.I clockid
-argument specifies the clock that is used to mark the progress
-of the timer, and must be one of the following:
-.TP
-.B CLOCK_REALTIME
-A settable system-wide real-time clock.
-.TP
-.B CLOCK_MONOTONIC
-A nonsettable monotonically increasing clock that measures time
-from some unspecified point in the past that does not change
-after system startup.
-.TP
-.BR CLOCK_BOOTTIME " (Since Linux 3.15)"
-.\" commit 4a2378a943f09907fb1ae35c15de917f60289c14
-Like
-.BR CLOCK_MONOTONIC ,
-this is a monotonically increasing clock.
-However, whereas the
-.B CLOCK_MONOTONIC
-clock does not measure the time while a system is suspended, the
-.B CLOCK_BOOTTIME
-clock does include the time during which the system is suspended.
-This is useful for applications that need to be suspend-aware.
-.B CLOCK_REALTIME
-is not suitable for such applications, since that clock is affected
-by discontinuous changes to the system clock.
-.TP
-.BR CLOCK_REALTIME_ALARM " (since Linux 3.11)"
-.\" commit 11ffa9d6065f344a9bd769a2452f26f2f671e5f8
-This clock is like
-.BR CLOCK_REALTIME ,
-but will wake the system if it is suspended.
-The caller must have the
-.B CAP_WAKE_ALARM
-capability in order to set a timer against this clock.
-.TP
-.BR CLOCK_BOOTTIME_ALARM " (since Linux 3.11)"
-.\" commit 11ffa9d6065f344a9bd769a2452f26f2f671e5f8
-This clock is like
-.BR CLOCK_BOOTTIME ,
-but will wake the system if it is suspended.
-The caller must have the
-.B CAP_WAKE_ALARM
-capability in order to set a timer against this clock.
-.PP
-See
-.BR clock_getres (2)
-for some further details on the above clocks.
-.PP
-The current value of each of these clocks can be retrieved using
-.BR clock_gettime (2).
-.PP
-Starting with Linux 2.6.27, the following values may be bitwise ORed in
-.I flags
-to change the behavior of
-.BR timerfd_create ():
-.TP 14
-.B TFD_NONBLOCK
-Set the
-.B O_NONBLOCK
-file status flag on the open file description (see
-.BR open (2))
-referred to by the new file descriptor.
-Using this flag saves extra calls to
-.BR fcntl (2)
-to achieve the same result.
-.TP
-.B TFD_CLOEXEC
-Set the close-on-exec
-.RB ( FD_CLOEXEC )
-flag on the new file descriptor.
-See the description of the
-.B O_CLOEXEC
-flag in
-.BR open (2)
-for reasons why this may be useful.
-.PP
-In Linux versions up to and including 2.6.26,
-.I flags
-must be specified as zero.
-.SS timerfd_settime()
-.BR timerfd_settime ()
-arms (starts) or disarms (stops)
-the timer referred to by the file descriptor
-.IR fd .
-.PP
-The
-.I new_value
-argument specifies the initial expiration and interval for the timer.
-The
-.I itimerspec
-structure used for this argument is described in
-.BR itimerspec (3type).
-.PP
-.I new_value.it_value
-specifies the initial expiration of the timer,
-in seconds and nanoseconds.
-Setting either field of
-.I new_value.it_value
-to a nonzero value arms the timer.
-Setting both fields of
-.I new_value.it_value
-to zero disarms the timer.
-.PP
-Setting one or both fields of
-.I new_value.it_interval
-to nonzero values specifies the period, in seconds and nanoseconds,
-for repeated timer expirations after the initial expiration.
-If both fields of
-.I new_value.it_interval
-are zero, the timer expires just once, at the time specified by
-.IR new_value.it_value .
-.PP
-By default,
-the initial expiration time specified in
-.I new_value
-is interpreted relative to the current time
-on the timer's clock at the time of the call (i.e.,
-.I new_value.it_value
-specifies a time relative to the current value of the clock specified by
-.IR clockid ).
-An absolute timeout can be selected via the
-.I flags
-argument.
-.PP
-The
-.I flags
-argument is a bit mask that can include the following values:
-.TP
-.B TFD_TIMER_ABSTIME
-Interpret
-.I new_value.it_value
-as an absolute value on the timer's clock.
-The timer will expire when the value of the timer's
-clock reaches the value specified in
-.IR new_value.it_value .
-.TP
-.B TFD_TIMER_CANCEL_ON_SET
-If this flag is specified along with
-.B TFD_TIMER_ABSTIME
-and the clock for this timer is
-.B CLOCK_REALTIME
-or
-.BR CLOCK_REALTIME_ALARM ,
-then mark this timer as cancelable if the real-time clock
-undergoes a discontinuous change
-.RB ( settimeofday (2),
-.BR clock_settime (2),
-or similar).
-When such changes occur, a current or future
-.BR read (2)
-from the file descriptor will fail with the error
-.BR ECANCELED .
-.PP
-If the
-.I old_value
-argument is not NULL, then the
-.I itimerspec
-structure that it points to is used to return the setting of the timer
-that was current at the time of the call;
-see the description of
-.BR timerfd_gettime ()
-following.
-.\"
-.SS timerfd_gettime()
-.BR timerfd_gettime ()
-returns, in
-.IR curr_value ,
-an
-.I itimerspec
-structure that contains the current setting of the timer
-referred to by the file descriptor
-.IR fd .
-.PP
-The
-.I it_value
-field returns the amount of time
-until the timer will next expire.
-If both fields of this structure are zero,
-then the timer is currently disarmed.
-This field always contains a relative value, regardless of whether the
-.B TFD_TIMER_ABSTIME
-flag was specified when setting the timer.
-.PP
-The
-.I it_interval
-field returns the interval of the timer.
-If both fields of this structure are zero,
-then the timer is set to expire just once, at the time specified by
-.IR curr_value.it_value .
-.SS Operating on a timer file descriptor
-The file descriptor returned by
-.BR timerfd_create ()
-supports the following additional operations:
-.TP
-.BR read (2)
-If the timer has already expired one or more times since
-its settings were last modified using
-.BR timerfd_settime (),
-or since the last successful
-.BR read (2),
-then the buffer given to
-.BR read (2)
-returns an unsigned 8-byte integer
-.RI ( uint64_t )
-containing the number of expirations that have occurred.
-(The returned value is in host byte order\[em]that is,
-the native byte order for integers on the host machine.)
-.IP
-If no timer expirations have occurred at the time of the
-.BR read (2),
-then the call either blocks until the next timer expiration,
-or fails with the error
-.B EAGAIN
-if the file descriptor has been made nonblocking
-(via the use of the
-.BR fcntl (2)
-.B F_SETFL
-operation to set the
-.B O_NONBLOCK
-flag).
-.IP
-A
-.BR read (2)
-fails with the error
-.B EINVAL
-if the size of the supplied buffer is less than 8 bytes.
-.IP
-If the associated clock is either
-.B CLOCK_REALTIME
-or
-.BR CLOCK_REALTIME_ALARM ,
-the timer is absolute
-.RB ( TFD_TIMER_ABSTIME ),
-and the flag
-.B TFD_TIMER_CANCEL_ON_SET
-was specified when calling
-.BR timerfd_settime (),
-then
-.BR read (2)
-fails with the error
-.B ECANCELED
-if the real-time clock undergoes a discontinuous change.
-(This allows the reading application to discover
-such discontinuous changes to the clock.)
-.IP
-If the associated clock is either
-.B CLOCK_REALTIME
-or
-.BR CLOCK_REALTIME_ALARM ,
-the timer is absolute
-.RB ( TFD_TIMER_ABSTIME ),
-and the flag
-.B TFD_TIMER_CANCEL_ON_SET
-was
-.I not
-specified when calling
-.BR timerfd_settime (),
-then a discontinuous negative change to the clock (e.g.,
-.BR clock_settime (2))
-may cause
-.BR read (2)
-to unblock, but return a value of 0 (i.e., no bytes read),
-if the clock change occurs after the time expired,
-but before the
-.BR read (2)
-on the file descriptor.
-.TP
-.BR poll "(2), " select "(2) (and similar)"
-The file descriptor is readable
-(the
-.BR select (2)
-.I readfds
-argument; the
-.BR poll (2)
-.B POLLIN
-flag)
-if one or more timer expirations have occurred.
-.IP
-The file descriptor also supports the other file-descriptor
-multiplexing APIs:
-.BR pselect (2),
-.BR ppoll (2),
-and
-.BR epoll (7).
-.TP
-.BR ioctl (2)
-The following timerfd-specific command is supported:
-.RS
-.TP
-.BR TFD_IOC_SET_TICKS " (since Linux 3.17)"
-.\" commit 5442e9fbd7c23172a1c9bc736629cd123a9923f0
-Adjust the number of timer expirations that have occurred.
-The argument is a pointer to a nonzero 8-byte integer
-.RI ( uint64_t *)
-containing the new number of expirations.
-Once the number is set, any waiter on the timer is woken up.
-The only purpose of this command is to restore the expirations
-for the purpose of checkpoint/restore.
-This operation is available only if the kernel was configured with the
-.B CONFIG_CHECKPOINT_RESTORE
-option.
-.RE
-.TP
-.BR close (2)
-When the file descriptor is no longer required it should be closed.
-When all file descriptors associated with the same timer object
-have been closed,
-the timer is disarmed and its resources are freed by the kernel.
-.\"
-.SS fork(2) semantics
-After a
-.BR fork (2),
-the child inherits a copy of the file descriptor created by
-.BR timerfd_create ().
-The file descriptor refers to the same underlying
-timer object as the corresponding file descriptor in the parent,
-and
-.BR read (2)s
-in the child will return information about
-expirations of the timer.
-.\"
-.SS execve(2) semantics
-A file descriptor created by
-.BR timerfd_create ()
-is preserved across
-.BR execve (2),
-and continues to generate timer expirations if the timer was armed.
-.SH RETURN VALUE
-On success,
-.BR timerfd_create ()
-returns a new file descriptor.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.PP
-.BR timerfd_settime ()
-and
-.BR timerfd_gettime ()
-return 0 on success;
-on error they return \-1, and set
-.I errno
-to indicate the error.
-.SH ERRORS
-.BR timerfd_create ()
-can fail with the following errors:
-.TP
-.B EINVAL
-The
-.I clockid
-is not valid.
-.TP
-.B EINVAL
-.I flags
-is invalid;
-or, in Linux 2.6.26 or earlier,
-.I flags
-is nonzero.
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been
-reached.
-.TP
-.B ENODEV
-Could not mount (internal) anonymous inode device.
-.TP
-.B ENOMEM
-There was insufficient kernel memory to create the timer.
-.TP
-.B EPERM
-.I clockid
-was
-.B CLOCK_REALTIME_ALARM
-or
-.B CLOCK_BOOTTIME_ALARM
-but the caller did not have the
-.B CAP_WAKE_ALARM
-capability.
-.PP
-.BR timerfd_settime ()
-and
-.BR timerfd_gettime ()
-can fail with the following errors:
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor.
-.TP
-.B EFAULT
-.IR new_value ,
-.IR old_value ,
-or
-.I curr_value
-is not a valid pointer.
-.TP
-.B EINVAL
-.I fd
-is not a valid timerfd file descriptor.
-.PP
-.BR timerfd_settime ()
-can also fail with the following errors:
-.TP
-.B ECANCELED
-See NOTES.
-.TP
-.B EINVAL
-.I new_value
-is not properly initialized (one of the
-.I tv_nsec
-falls outside the range zero to 999,999,999).
-.TP
-.B EINVAL
-.\" This case only checked since Linux 2.6.29, and Linux 2.2.2[78].some-stable-version.
-.\" In older kernel versions, no check was made for invalid flags.
-.I flags
-is invalid.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.25,
-glibc 2.8.
-.SH NOTES
-Suppose the following scenario for
-.B CLOCK_REALTIME
-or
-.B CLOCK_REALTIME_ALARM
-timer that was created with
-.BR timerfd_create ():
-.IP (1) 5
-The timer has been started
-.RB ( timerfd_settime ())
-with the
-.B TFD_TIMER_ABSTIME
-and
-.B TFD_TIMER_CANCEL_ON_SET
-flags;
-.IP (2)
-A discontinuous change (e.g.,
-.BR settimeofday (2))
-is subsequently made to the
-.B CLOCK_REALTIME
-clock; and
-.IP (3)
-the caller once more calls
-.BR timerfd_settime ()
-to rearm the timer (without first doing a
-.BR read (2)
-on the file descriptor).
-.PP
-In this case the following occurs:
-.IP \[bu] 3
-The
-.BR timerfd_settime ()
-returns \-1 with
-.I errno
-set to
-.BR ECANCELED .
-(This enables the caller to know that the previous timer was affected
-by a discontinuous change to the clock.)
-.IP \[bu]
-The timer
-.I "is successfully rearmed"
-with the settings provided in the second
-.BR timerfd_settime ()
-call.
-(This was probably an implementation accident, but won't be fixed now,
-in case there are applications that depend on this behaviour.)
-.SH BUGS
-Currently,
-.\" 2.6.29
-.BR timerfd_create ()
-supports fewer types of clock IDs than
-.BR timer_create (2).
-.SH EXAMPLES
-The following program creates a timer and then monitors its progress.
-The program accepts up to three command-line arguments.
-The first argument specifies the number of seconds for
-the initial expiration of the timer.
-The second argument specifies the interval for the timer, in seconds.
-The third argument specifies the number of times the program should
-allow the timer to expire before terminating.
-The second and third command-line arguments are optional.
-.PP
-The following shell session demonstrates the use of the program:
-.PP
-.in +4n
-.EX
-.RB "$" " a.out 3 1 100"
-0.000: timer started
-3.000: read: 1; total=1
-4.000: read: 1; total=2
-.BR "\[ha]Z " " # type control\-Z to suspend the program"
-[1]+ Stopped ./timerfd3_demo 3 1 100
-.RB "$ " "fg" " # Resume execution after a few seconds"
-a.out 3 1 100
-9.660: read: 5; total=7
-10.000: read: 1; total=8
-11.000: read: 1; total=9
-.BR "\[ha]C " " # type control\-C to suspend the program"
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (timerfd_create.c)
-.EX
-.\" The commented out code here is what we currently need until
-.\" the required stuff is in glibc
-.\"
-.\"
-.\"/* Link with \-lrt */
-.\"#define _GNU_SOURCE
-.\"#include <sys/syscall.h>
-.\"#include <unistd.h>
-.\"#include <time.h>
-.\"#if defined(__i386__)
-.\"#define __NR_timerfd_create 322
-.\"#define __NR_timerfd_settime 325
-.\"#define __NR_timerfd_gettime 326
-.\"#endif
-.\"
-.\"static int
-.\"timerfd_create(int clockid, int flags)
-.\"{
-.\" return syscall(__NR_timerfd_create, clockid, flags);
-.\"}
-.\"
-.\"static int
-.\"timerfd_settime(int fd, int flags, struct itimerspec *new_value,
-.\" struct itimerspec *curr_value)
-.\"{
-.\" return syscall(__NR_timerfd_settime, fd, flags, new_value,
-.\" curr_value);
-.\"}
-.\"
-.\"static int
-.\"timerfd_gettime(int fd, struct itimerspec *curr_value)
-.\"{
-.\" return syscall(__NR_timerfd_gettime, fd, curr_value);
-.\"}
-.\"
-.\"#define TFD_TIMER_ABSTIME (1 << 0)
-.\"
-.\"////////////////////////////////////////////////////////////
-#include <err.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/timerfd.h>
-#include <time.h>
-#include <unistd.h>
-\&
-static void
-print_elapsed_time(void)
-{
- int secs, nsecs;
- static int first_call = 1;
- struct timespec curr;
- static struct timespec start;
-\&
- if (first_call) {
- first_call = 0;
- if (clock_gettime(CLOCK_MONOTONIC, &start) == \-1)
- err(EXIT_FAILURE, "clock_gettime");
- }
-\&
- if (clock_gettime(CLOCK_MONOTONIC, &curr) == \-1)
- err(EXIT_FAILURE, "clock_gettime");
-\&
- secs = curr.tv_sec \- start.tv_sec;
- nsecs = curr.tv_nsec \- start.tv_nsec;
- if (nsecs < 0) {
- secs\-\-;
- nsecs += 1000000000;
- }
- printf("%d.%03d: ", secs, (nsecs + 500000) / 1000000);
-}
-\&
-int
-main(int argc, char *argv[])
-{
- int fd;
- ssize_t s;
- uint64_t exp, tot_exp, max_exp;
- struct timespec now;
- struct itimerspec new_value;
-\&
- if (argc != 2 && argc != 4) {
- fprintf(stderr, "%s init\-secs [interval\-secs max\-exp]\en",
- argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- if (clock_gettime(CLOCK_REALTIME, &now) == \-1)
- err(EXIT_FAILURE, "clock_gettime");
-\&
- /* Create a CLOCK_REALTIME absolute timer with initial
- expiration and interval as specified in command line. */
-\&
- new_value.it_value.tv_sec = now.tv_sec + atoi(argv[1]);
- new_value.it_value.tv_nsec = now.tv_nsec;
- if (argc == 2) {
- new_value.it_interval.tv_sec = 0;
- max_exp = 1;
- } else {
- new_value.it_interval.tv_sec = atoi(argv[2]);
- max_exp = atoi(argv[3]);
- }
- new_value.it_interval.tv_nsec = 0;
-\&
- fd = timerfd_create(CLOCK_REALTIME, 0);
- if (fd == \-1)
- err(EXIT_FAILURE, "timerfd_create");
-\&
- if (timerfd_settime(fd, TFD_TIMER_ABSTIME, &new_value, NULL) == \-1)
- err(EXIT_FAILURE, "timerfd_settime");
-\&
- print_elapsed_time();
- printf("timer started\en");
-\&
- for (tot_exp = 0; tot_exp < max_exp;) {
- s = read(fd, &exp, sizeof(uint64_t));
- if (s != sizeof(uint64_t))
- err(EXIT_FAILURE, "read");
-\&
- tot_exp += exp;
- print_elapsed_time();
- printf("read: %" PRIu64 "; total=%" PRIu64 "\en", exp, tot_exp);
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR eventfd (2),
-.BR poll (2),
-.BR read (2),
-.BR select (2),
-.BR setitimer (2),
-.BR signalfd (2),
-.BR timer_create (2),
-.BR timer_gettime (2),
-.BR timer_settime (2),
-.BR timespec (3),
-.BR epoll (7),
-.BR time (7)
diff --git a/man2/timerfd_gettime.2 b/man2/timerfd_gettime.2
deleted file mode 100644
index 6d1294048..000000000
--- a/man2/timerfd_gettime.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/timerfd_create.2
diff --git a/man2/timerfd_settime.2 b/man2/timerfd_settime.2
deleted file mode 100644
index 6d1294048..000000000
--- a/man2/timerfd_settime.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/timerfd_create.2
diff --git a/man2/times.2 b/man2/times.2
deleted file mode 100644
index 0c14bd6e9..000000000
--- a/man2/times.2
+++ /dev/null
@@ -1,222 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt (michael@moria.de)
-.\" Modified Sat Jul 24 14:29:17 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 961203 and 001211 and 010326 by aeb@cwi.nl
-.\" Modified 001213 by Michael Haardt (michael@moria.de)
-.\" Modified 13 Jun 02, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added note on nonstandard behavior when SIGCHLD is ignored.
-.\" Modified 2004-11-16, mtk, Noted that the nonconformance when
-.\" SIGCHLD is being ignored is fixed in Linux 2.6.9; other minor changes
-.\" Modified 2004-12-08, mtk, in Linux 2.6 times() return value changed
-.\" 2005-04-13, mtk
-.\" Added notes on nonstandard behavior: Linux allows 'buf' to
-.\" be NULL, but POSIX.1 doesn't specify this and it's nonportable.
-.\"
-.TH times 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-times \- get process times
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/times.h>
-.PP
-.BI "clock_t times(struct tms *" buf );
-.fi
-.SH DESCRIPTION
-.BR times ()
-stores the current process times in the
-.I "struct tms"
-that
-.I buf
-points to.
-The
-.I struct tms
-is as defined in
-.IR <sys/times.h> :
-.PP
-.in +4n
-.EX
-struct tms {
- clock_t tms_utime; /* user time */
- clock_t tms_stime; /* system time */
- clock_t tms_cutime; /* user time of children */
- clock_t tms_cstime; /* system time of children */
-};
-.EE
-.in
-.PP
-The
-.I tms_utime
-field contains the CPU time spent executing instructions
-of the calling process.
-The
-.I tms_stime
-field contains the CPU time spent executing inside the kernel
-while performing tasks on behalf of the calling process.
-.PP
-The
-.I tms_cutime
-field contains the sum of the
-.I tms_utime
-and
-.I tms_cutime
-values for all waited-for terminated children.
-The
-.I tms_cstime
-field contains the sum of the
-.I tms_stime
-and
-.I tms_cstime
-values for all waited-for terminated children.
-.PP
-Times for terminated children (and their descendants)
-are added in at the moment
-.BR wait (2)
-or
-.BR waitpid (2)
-returns their process ID.
-In particular,
-times of grandchildren
-that the children did not wait for are never seen.
-.PP
-All times reported are in clock ticks.
-.SH RETURN VALUE
-.BR times ()
-returns the number of clock ticks that have elapsed since
-an arbitrary point in the past.
-The return value may overflow the possible range of type
-.IR clock_t .
-On error,
-\fI(clock_t)\ \-1\fP is returned,
-and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-.I tms
-points outside the process's address space.
-.SH VERSIONS
-On Linux,
-the
-.I buf
-argument can be specified as NULL,
-with the result that
-.BR times ()
-just returns a function result.
-However,
-POSIX does not specify this behavior,
-and most
-other UNIX implementations require a non-NULL value for
-.IR buf .
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001,
-SVr4,
-4.3BSD.
-.PP
-In POSIX.1-1996 the symbol \fBCLK_TCK\fP (defined in
-.IR <time.h> )
-is mentioned as obsolescent.
-It is obsolete now.
-.PP
-Before Linux 2.6.9,
-if the disposition of
-.B SIGCHLD
-is set to
-.BR SIG_IGN ,
-then the times of terminated children
-are automatically included in the
-.I tms_cstime
-and
-.I tms_cutime
-fields,
-although POSIX.1-2001 says that this should happen
-only if the calling process
-.BR wait (2)s
-on its children.
-This nonconformance is rectified in Linux 2.6.9 and later.
-.\" See the description of times() in XSH, which says:
-.\" The times of a terminated child process are included... when wait()
-.\" or waitpid() returns the process ID of this terminated child.
-.PP
-On Linux,
-the \[lq]arbitrary point in the past\[rq]
-from which the return value of
-.BR times ()
-is measured has varied across kernel versions.
-On Linux 2.4 and earlier,
-this point is the moment the system was booted.
-Since Linux 2.6,
-this point is \fI(2\[ha]32/HZ) \- 300\fP
-seconds before system boot time.
-This variability across kernel versions (and across UNIX implementations),
-combined with the fact that the returned value may overflow the range of
-.IR clock_t ,
-means that a portable application would be wise to avoid using this value.
-To measure changes in elapsed time,
-use
-.BR clock_gettime (2)
-instead.
-.\" .PP
-.\" On older systems the number of clock ticks per second is given
-.\" by the variable HZ.
-.PP
-SVr1-3 returns
-.I long
-and the struct members are of type
-.I time_t
-although they store clock ticks,
-not seconds since the Epoch.
-V7 used
-.I long
-for the struct members,
-because it had no type
-.I time_t
-yet.
-.SH NOTES
-The number of clock ticks per second can be obtained using:
-.PP
-.in +4n
-.EX
-sysconf(_SC_CLK_TCK);
-.EE
-.in
-.PP
-Note that
-.BR clock (3)
-also returns a value of type
-.IR clock_t ,
-but this value is measured in units of
-.BR CLOCKS_PER_SEC ,
-not the clock ticks used by
-.BR times ().
-.SH BUGS
-A limitation of the Linux system call conventions on some architectures
-(notably i386) means that on Linux 2.6 there is a small time window
-(41 seconds) soon after boot when
-.BR times ()
-can return \-1,
-falsely indicating that an error occurred.
-The same problem can occur when the return value wraps past
-the maximum value that can be stored in
-.BR clock_t .
-.\" The problem is that a syscall return of -4095 to -1
-.\" is interpreted by glibc as an error, and the wrapper converts
-.\" the return value to -1.
-.\" http://marc.info/?l=linux-kernel&m=119447727031225&w=2
-.\" "compat_sys_times() bogus until jiffies >= 0"
-.\" November 2007
-.SH SEE ALSO
-.BR time (1),
-.BR getrusage (2),
-.BR wait (2),
-.BR clock (3),
-.BR sysconf (3),
-.BR time (7)
diff --git a/man2/tkill.2 b/man2/tkill.2
deleted file mode 100644
index d5c55ef52..000000000
--- a/man2/tkill.2
+++ /dev/null
@@ -1,130 +0,0 @@
-.\" Copyright (C) 2008 Michael Kerrisk <tmk.manpages@gmail.com>
-.\" and Copyright 2003 Abhijit Menon-Sen <ams@wiw.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2004-05-31, added tgkill, ahu, aeb
-.\" 2008-01-15 mtk -- rewrote DESCRIPTION
-.\"
-.TH tkill 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-tkill, tgkill \- send a signal to a thread
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <signal.h>" " /* Definition of " SIG* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "[[deprecated]] int syscall(SYS_tkill, pid_t " tid ", int " sig );
-.PP
-.B #include <signal.h>
-.PP
-.BI "int tgkill(pid_t " tgid ", pid_t " tid ", int " sig );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR tkill (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-.BR tgkill ()
-sends the signal
-.I sig
-to the thread with the thread ID
-.I tid
-in the thread group
-.IR tgid .
-(By contrast,
-.BR kill (2)
-can be used to send a signal only to a process (i.e., thread group)
-as a whole, and the signal will be delivered to an arbitrary
-thread within that process.)
-.PP
-.BR tkill ()
-is an obsolete predecessor to
-.BR tgkill ().
-It allows only the target thread ID to be specified,
-which may result in the wrong thread being signaled if a thread
-terminates and its thread ID is recycled.
-Avoid using this system call.
-.\" FIXME Maybe say something about the following:
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=12889
-.\"
-.\" Quoting Rich Felker <bugdal@aerifal.cx>:
-.\"
-.\" There is a race condition in pthread_kill: it is possible that,
-.\" between the time pthread_kill reads the pid/tid from the target
-.\" thread descriptor and the time it makes the tgkill syscall,
-.\" the target thread terminates and the same tid gets assigned
-.\" to a new thread in the same process.
-.\"
-.\" (The tgkill syscall was designed to eliminate a similar race
-.\" condition in tkill, but it only succeeded in eliminating races
-.\" where the tid gets reused in a different process, and does not
-.\" help if the same tid gets assigned to a new thread in the
-.\" same process.)
-.\"
-.\" The only solution I can see is to introduce a mutex that ensures
-.\" that a thread cannot exit while pthread_kill is being called on it.
-.\"
-.\" Note that in most real-world situations, like almost all race
-.\" conditions, this one will be extremely rare. To make it
-.\" measurable, one could exhaust all but 1-2 available pid values,
-.\" possibly by lowering the max pid parameter in /proc, forcing
-.\" the same tid to be reused rapidly.
-.PP
-These are the raw system call interfaces, meant for internal
-thread library use.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and \fIerrno\fP
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-The
-.B RLIMIT_SIGPENDING
-resource limit was reached and
-.I sig
-is a real-time signal.
-.TP
-.B EAGAIN
-Insufficient kernel memory was available and
-.I sig
-is a real-time signal.
-.TP
-.B EINVAL
-An invalid thread ID, thread group ID, or signal was specified.
-.TP
-.B EPERM
-Permission denied.
-For the required permissions, see
-.BR kill (2).
-.TP
-.B ESRCH
-No process with the specified thread ID (and thread group ID) exists.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-.TP
-.BR tkill ()
-Linux 2.4.19 / 2.5.4.
-.TP
-.BR tgkill ()
-Linux 2.5.75,
-glibc 2.30.
-.SH NOTES
-See the description of
-.B CLONE_THREAD
-in
-.BR clone (2)
-for an explanation of thread groups.
-.SH SEE ALSO
-.BR clone (2),
-.BR gettid (2),
-.BR kill (2),
-.BR rt_sigqueueinfo (2)
diff --git a/man2/truncate.2 b/man2/truncate.2
deleted file mode 100644
index 703f598b3..000000000
--- a/man2/truncate.2
+++ /dev/null
@@ -1,251 +0,0 @@
-.\" Copyright (c) 1983, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)truncate.2 6.9 (Berkeley) 3/10/91
-.\"
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1996-10-22 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1998-12-21 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 2002-01-07 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2002-04-06 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH truncate 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-truncate, ftruncate \- truncate a file to a specified length
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int truncate(const char *" path ", off_t " length );
-.BI "int ftruncate(int " fd ", off_t " length );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR truncate ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
- || /* glibc <= 2.19: */ _BSD_SOURCE
-.fi
-.PP
-.BR ftruncate ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.3.5: */ _POSIX_C_SOURCE >= 200112L
- || /* glibc <= 2.19: */ _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR truncate ()
-and
-.BR ftruncate ()
-functions cause the regular file named by
-.I path
-or referenced by
-.I fd
-to be truncated to a size of precisely
-.I length
-bytes.
-.PP
-If the file previously was larger than this size, the extra data is lost.
-If the file previously was shorter, it is extended, and
-the extended part reads as null bytes (\[aq]\e0\[aq]).
-.PP
-The file offset is not changed.
-.PP
-If the size changed, then the st_ctime and st_mtime fields
-(respectively, time of last status change and
-time of last modification; see
-.BR inode (7))
-for the file are updated,
-and the set-user-ID and set-group-ID mode bits may be cleared.
-.PP
-With
-.BR ftruncate (),
-the file must be open for writing; with
-.BR truncate (),
-the file must be writable.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-For
-.BR truncate ():
-.TP
-.B EACCES
-Search permission is denied for a component of the path prefix,
-or the named file is not writable by the user.
-(See also
-.BR path_resolution (7).)
-.TP
-.B EFAULT
-The argument
-.I path
-points outside the process's allocated address space.
-.TP
-.B EFBIG
-The argument
-.I length
-is larger than the maximum file size. (XSI)
-.TP
-.B EINTR
-While blocked waiting to complete,
-the call was interrupted by a signal handler; see
-.BR fcntl (2)
-and
-.BR signal (7).
-.TP
-.B EINVAL
-The argument
-.I length
-is negative or larger than the maximum file size.
-.TP
-.B EIO
-An I/O error occurred updating the inode.
-.TP
-.B EISDIR
-The named file is a directory.
-.TP
-.B ELOOP
-Too many symbolic links were encountered in translating the pathname.
-.TP
-.B ENAMETOOLONG
-A component of a pathname exceeded 255 characters,
-or an entire pathname exceeded 1023 characters.
-.TP
-.B ENOENT
-The named file does not exist.
-.TP
-.B ENOTDIR
-A component of the path prefix is not a directory.
-.TP
-.B EPERM
-.\" This happens for at least MSDOS and VFAT filesystems
-.\" on kernel 2.6.13
-The underlying filesystem does not support extending
-a file beyond its current size.
-.TP
-.B EPERM
-The operation was prevented by a file seal; see
-.BR fcntl (2).
-.TP
-.B EROFS
-The named file resides on a read-only filesystem.
-.TP
-.B ETXTBSY
-The file is an executable file that is being executed.
-.PP
-For
-.BR ftruncate ()
-the same errors apply, but instead of things that can be wrong with
-.IR path ,
-we now have things that can be wrong with the file descriptor,
-.IR fd :
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor.
-.TP
-.BR EBADF " or " EINVAL
-.I fd
-is not open for writing.
-.TP
-.B EINVAL
-.I fd
-does not reference a regular file or a POSIX shared memory object.
-.TP
-.BR EINVAL " or " EBADF
-The file descriptor
-.I fd
-is not open for writing.
-POSIX permits, and portable applications should handle,
-either error for this case.
-(Linux produces
-.BR EINVAL .)
-.SH VERSIONS
-The details in DESCRIPTION are for XSI-compliant systems.
-For non-XSI-compliant systems, the POSIX standard allows
-two behaviors for
-.BR ftruncate ()
-when
-.I length
-exceeds the file length
-(note that
-.BR truncate ()
-is not specified at all in such an environment):
-either returning an error, or extending the file.
-Like most UNIX implementations, Linux follows the XSI requirement
-when dealing with native filesystems.
-However, some nonnative filesystems do not permit
-.BR truncate ()
-and
-.BR ftruncate ()
-to be used to extend a file beyond its current length:
-a notable example on Linux is VFAT.
-.\" At the very least: OSF/1, Solaris 7, and FreeBSD conform, mtk, Jan 2002
-.PP
-On some 32-bit architectures,
-the calling signature for these system calls differ,
-for the reasons described in
-.BR syscall (2).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001,
-4.4BSD, SVr4 (first appeared in 4.2BSD).
-.\" POSIX.1-1996 has
-.\" .BR ftruncate ().
-.\" POSIX.1-2001 also has
-.\" .BR truncate (),
-.\" as an XSI extension.
-.\" .LP
-.\" SVr4 documents additional
-.\" .BR truncate ()
-.\" error conditions EMFILE, EMULTIHP, ENFILE, ENOLINK. SVr4 documents for
-.\" .BR ftruncate ()
-.\" an additional EAGAIN error condition.
-.PP
-The original Linux
-.BR truncate ()
-and
-.BR ftruncate ()
-system calls were not designed to handle large file offsets.
-Consequently, Linux 2.4 added
-.BR truncate64 ()
-and
-.BR ftruncate64 ()
-system calls that handle large files.
-However, these details can be ignored by applications using glibc, whose
-wrapper functions transparently employ the more recent system calls
-where they are available.
-.SH NOTES
-.BR ftruncate ()
-can also be used to set the size of a POSIX shared memory object; see
-.BR shm_open (3).
-.SH BUGS
-A header file bug in glibc 2.12 meant that the minimum value of
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=12037
-.B _POSIX_C_SOURCE
-required to expose the declaration of
-.BR ftruncate ()
-was 200809L instead of 200112L.
-This has been fixed in later glibc versions.
-.SH SEE ALSO
-.BR truncate (1),
-.BR open (2),
-.BR stat (2),
-.BR path_resolution (7)
diff --git a/man2/truncate64.2 b/man2/truncate64.2
deleted file mode 100644
index 2ed34f1ed..000000000
--- a/man2/truncate64.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/truncate.2
diff --git a/man2/tuxcall.2 b/man2/tuxcall.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/tuxcall.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/ugetrlimit.2 b/man2/ugetrlimit.2
deleted file mode 100644
index df6d7362a..000000000
--- a/man2/ugetrlimit.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/getrlimit.2
diff --git a/man2/umask.2 b/man2/umask.2
deleted file mode 100644
index 07e0b5e76..000000000
--- a/man2/umask.2
+++ /dev/null
@@ -1,149 +0,0 @@
-.\" Copyright (c) 2006, 2008, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" (A few fragments remain from an earlier (1992) version written in
-.\" 1992 by Drew Eckhardt <drew@cs.colorado.edu>.)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified Sat Jul 24 12:51:53 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Tue Oct 22 22:39:04 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Thu May 1 06:05:54 UTC 1997 by Nicolás Lichtmaier
-.\" <nick@debian.com> with Lars Wirzenius <liw@iki.fi> suggestion
-.\" 2006-05-13, mtk, substantial rewrite of description of 'mask'
-.\" 2008-01-09, mtk, a few rewrites and additions.
-.TH umask 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-umask \- set file mode creation mask
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/stat.h>
-.PP
-.BI "mode_t umask(mode_t " mask );
-.fi
-.SH DESCRIPTION
-.BR umask ()
-sets the calling process's file mode creation mask (umask) to
-.I mask
-& 0777 (i.e., only the file permission bits of
-.I mask
-are used), and returns the previous value of the mask.
-.PP
-The umask is used by
-.BR open (2),
-.BR mkdir (2),
-and other system calls that create files
-.\" e.g., mkfifo(), creat(), mknod(), sem_open(), mq_open(), shm_open()
-.\" but NOT the System V IPC *get() calls
-to modify the permissions placed on newly created files or directories.
-Specifically, permissions in the umask are turned off from
-the
-.I mode
-argument to
-.BR open (2)
-and
-.BR mkdir (2).
-.PP
-Alternatively, if the parent directory has a default ACL (see
-.BR acl (5)),
-the umask is ignored, the default ACL is inherited,
-the permission bits are set based on the inherited ACL,
-and permission bits absent in the
-.I mode
-argument are turned off.
-For example, the following default ACL is equivalent to a umask of 022:
-.PP
-.in +4n
-.EX
-u::rwx,g::r-x,o::r-x
-.EE
-.in
-.PP
-Combining the effect of this default ACL with a
-.I mode
-argument of 0666 (rw-rw-rw-), the resulting file permissions would be 0644
-(rw-r--r--).
-.PP
-The constants that should be used to specify
-.I mask
-are described in
-.BR inode (7).
-.PP
-The typical default value for the process umask is
-.BR S_IWGRP " | " S_IWOTH
-(octal 022).
-In the usual case where the
-.I mode
-argument to
-.BR open (2)
-is specified as:
-.PP
-.in +4n
-.EX
-.BR S_IRUSR " | " S_IWUSR " | " S_IRGRP " | " S_IWGRP " | " S_IROTH " | " S_IWOTH
-.EE
-.in
-.PP
-(octal 0666) when creating a new file, the permissions on the
-resulting file will be:
-.PP
-.in +4n
-.EX
-.BR S_IRUSR " | " S_IWUSR " | " S_IRGRP " | " S_IROTH
-.EE
-.in
-.PP
-(because 0666 & \[ti]022 = 0644; i.e. rw\-r\-\-r\-\-).
-.SH RETURN VALUE
-This system call always succeeds and the previous value of the mask
-is returned.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.SH NOTES
-A child process created via
-.BR fork (2)
-inherits its parent's umask.
-The umask is left unchanged by
-.BR execve (2).
-.PP
-It is impossible to use
-.BR umask ()
-to fetch a process's umask without at the same time changing it.
-A second call to
-.BR umask ()
-would then be needed to restore the umask.
-The nonatomicity of these two steps provides the potential
-for races in multithreaded programs.
-.PP
-Since Linux 4.7, the umask of any process can be viewed via the
-.I Umask
-field of
-.IR /proc/ pid /status .
-Inspecting this field in
-.I /proc/self/status
-allows a process to retrieve its umask without at the same time changing it.
-.PP
-The umask setting also affects the permissions assigned to POSIX IPC objects
-.RB ( mq_open (3),
-.BR sem_open (3),
-.BR shm_open (3)),
-FIFOs
-.RB ( mkfifo (3)),
-and UNIX domain sockets
-.RB ( unix (7))
-created by the process.
-The umask does not affect the permissions assigned
-to System\ V IPC objects created by the process (using
-.BR msgget (2),
-.BR semget (2),
-.BR shmget (2)).
-.SH SEE ALSO
-.BR chmod (2),
-.BR mkdir (2),
-.BR open (2),
-.BR stat (2),
-.BR acl (5)
diff --git a/man2/umount.2 b/man2/umount.2
deleted file mode 100644
index 3defe48ac..000000000
--- a/man2/umount.2
+++ /dev/null
@@ -1,214 +0,0 @@
-.\" Copyright (C) 1993 Rickard E. Faith <faith@cs.unc.edu>
-.\" and Copyright (C) 1994 Andries E. Brouwer <aeb@cwi.nl>
-.\" and Copyright (C) 2002, 2005 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2008-10-06, mtk: Created this as a new page by splitting
-.\" umount/umount2 material out of mount.2
-.\"
-.TH umount 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-umount, umount2 \- unmount filesystem
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B "#include <sys/mount.h>"
-.PP
-.BI "int umount(const char *" target );
-.BI "int umount2(const char *" target ", int " flags );
-.fi
-.SH DESCRIPTION
-.BR umount ()
-and
-.BR umount2 ()
-remove the attachment of the (topmost) filesystem mounted on
-.IR target .
-.\" Note: the kernel naming differs from the glibc naming
-.\" umount2 is the glibc name for what the kernel now calls umount
-.\" and umount is the glibc name for oldumount
-.PP
-Appropriate privilege (Linux: the
-.B CAP_SYS_ADMIN
-capability) is required to unmount filesystems.
-.PP
-Linux 2.1.116 added the
-.BR umount2 ()
-system call, which, like
-.BR umount (),
-unmounts a target, but allows additional
-.I flags
-controlling the behavior of the operation:
-.TP
-.BR MNT_FORCE " (since Linux 2.1.116)"
-Ask the filesystem to abort pending requests before attempting the
-unmount.
-This may allow the unmount to complete without waiting
-for an inaccessible server, but could cause data loss.
-If, after aborting requests,
-some processes still have active references to the filesystem,
-the unmount will still fail.
-As at Linux 4.12,
-.B MNT_FORCE
-is supported only on the following filesystems:
-9p (since Linux 2.6.16),
-ceph (since Linux 2.6.34),
-cifs (since Linux 2.6.12),
-fuse (since Linux 2.6.16),
-lustre (since Linux 3.11),
-and NFS (since Linux 2.1.116).
-.TP
-.BR MNT_DETACH " (since Linux 2.4.11)"
-Perform a lazy unmount: make the mount unavailable for new
-accesses, immediately disconnect the filesystem and all filesystems
-mounted below it from each other and from the mount table, and
-actually perform the unmount when the mount ceases to be busy.
-.TP
-.BR MNT_EXPIRE " (since Linux 2.6.8)"
-Mark the mount as expired.
-If a mount is not currently in use, then an initial call to
-.BR umount2 ()
-with this flag fails with the error
-.BR EAGAIN ,
-but marks the mount as expired.
-The mount remains expired as long as it isn't accessed
-by any process.
-A second
-.BR umount2 ()
-call specifying
-.B MNT_EXPIRE
-unmounts an expired mount.
-This flag cannot be specified with either
-.B MNT_FORCE
-or
-.BR MNT_DETACH .
-.TP
-.BR UMOUNT_NOFOLLOW " (since Linux 2.6.34)"
-.\" Later added to Linux 2.6.33-stable
-Don't dereference
-.I target
-if it is a symbolic link.
-This flag allows security problems to be avoided in set-user-ID-\fIroot\fP
-programs that allow unprivileged users to unmount filesystems.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-The error values given below result from filesystem type independent
-errors.
-Each filesystem type may have its own special errors and its
-own special behavior.
-See the Linux kernel source code for details.
-.TP
-.B EAGAIN
-A call to
-.BR umount2 ()
-specifying
-.B MNT_EXPIRE
-successfully marked an unbusy filesystem as expired.
-.TP
-.B EBUSY
-.I target
-could not be unmounted because it is busy.
-.TP
-.B EFAULT
-.I target
-points outside the user address space.
-.TP
-.B EINVAL
-.I target
-is not a mount point.
-.TP
-.B EINVAL
-.I target
-is locked; see
-.BR mount_namespaces (7).
-.TP
-.B EINVAL
-.BR umount2 ()
-was called with
-.B MNT_EXPIRE
-and either
-.B MNT_DETACH
-or
-.BR MNT_FORCE .
-.TP
-.BR EINVAL " (since Linux 2.6.34)"
-.BR umount2 ()
-was called with an invalid flag value in
-.IR flags .
-.TP
-.B ENAMETOOLONG
-A pathname was longer than
-.BR MAXPATHLEN .
-.TP
-.B ENOENT
-A pathname was empty or had a nonexistent component.
-.TP
-.B ENOMEM
-The kernel could not allocate a free page to copy filenames or data into.
-.TP
-.B EPERM
-The caller does not have the required privileges.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-.B MNT_DETACH
-and
-.B MNT_EXPIRE
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=10092
-are available since glibc 2.11.
-.PP
-The original
-.BR umount ()
-function was called as \fIumount(device)\fP and would return
-.B ENOTBLK
-when called with something other than a block device.
-In Linux 0.98p4, a call \fIumount(dir)\fP was added, in order to
-support anonymous devices.
-In Linux 2.3.99-pre7, the call \fIumount(device)\fP was removed,
-leaving only \fIumount(dir)\fP (since now devices can be mounted
-in more than one place, so specifying the device does not suffice).
-.SH NOTES
-.SS umount() and shared mounts
-Shared mounts cause any mount activity on a mount, including
-.BR umount ()
-operations, to be forwarded to every shared mount in the
-peer group and every slave mount of that peer group.
-This means that
-.BR umount ()
-of any peer in a set of shared mounts will cause all of its
-peers to be unmounted and all of their slaves to be unmounted as well.
-.PP
-This propagation of unmount activity can be particularly surprising
-on systems where every mount is shared by default.
-On such systems,
-recursively bind mounting the root directory of the filesystem
-onto a subdirectory and then later unmounting that subdirectory with
-.B MNT_DETACH
-will cause every mount in the mount namespace to be lazily unmounted.
-.PP
-To ensure
-.BR umount ()
-does not propagate in this fashion,
-the mount may be remounted using a
-.BR mount (2)
-call with a
-.I mount_flags
-argument that includes both
-.B MS_REC
-and
-.B MS_PRIVATE
-prior to
-.BR umount ()
-being called.
-.SH SEE ALSO
-.BR mount (2),
-.BR mount_namespaces (7),
-.BR path_resolution (7),
-.BR mount (8),
-.BR umount (8)
diff --git a/man2/umount2.2 b/man2/umount2.2
deleted file mode 100644
index 84ea41905..000000000
--- a/man2/umount2.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/umount.2
diff --git a/man2/uname.2 b/man2/uname.2
deleted file mode 100644
index 4a274a238..000000000
--- a/man2/uname.2
+++ /dev/null
@@ -1,134 +0,0 @@
-.\" Copyright (C) 2001 Andries Brouwer <aeb@cwi.nl>.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2007-07-05 mtk: Added details on underlying system call interfaces
-.\"
-.TH uname 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-uname \- get name and information about current kernel
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/utsname.h>
-.PP
-.BI "int uname(struct utsname *" buf );
-.fi
-.SH DESCRIPTION
-.BR uname ()
-returns system information in the structure pointed to by
-.IR buf .
-The
-.I utsname
-struct is defined in
-.IR <sys/utsname.h> :
-.PP
-.in +4n
-.EX
-struct utsname {
- char sysname[]; /* Operating system name (e.g., "Linux") */
- char nodename[]; /* Name within communications network
- to which the node is attached, if any */
- char release[]; /* Operating system release
- (e.g., "2.6.28") */
- char version[]; /* Operating system version */
- char machine[]; /* Hardware type identifier */
-#ifdef _GNU_SOURCE
- char domainname[]; /* NIS or YP domain name */
-#endif
-};
-.EE
-.in
-.PP
-The length of the arrays in a
-.I struct utsname
-is unspecified (see NOTES);
-the fields are terminated by a null byte (\[aq]\e0\[aq]).
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-.I buf
-is not valid.
-.SH VERSIONS
-The
-.I domainname
-member (the NIS or YP domain name) is a GNU extension.
-.PP
-The length of the fields in the struct varies.
-Some operating systems
-or libraries use a hardcoded 9 or 33 or 65 or 257.
-Other systems use
-.B SYS_NMLN
-or
-.B _SYS_NMLN
-or
-.B UTSLEN
-or
-.BR _UTSNAME_LENGTH .
-Clearly, it is a bad
-idea to use any of these constants; just use sizeof(...).
-SVr4 uses 257, "to support Internet hostnames"
-\[em] this is the largest value likely to be encountered in the wild.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.4BSD.
-.SS C library/kernel differences
-Over time, increases in the size of the
-.I utsname
-structure have led to three successive versions of
-.BR uname ():
-.IR sys_olduname ()
-(slot
-.IR __NR_oldolduname ),
-.IR sys_uname ()
-(slot
-.IR __NR_olduname ),
-and
-.IR sys_newuname ()
-(slot
-.IR __NR_uname) .
-The first one
-.\" That was back before Linux 1.0
-used length 9 for all fields;
-the second
-.\" That was also back before Linux 1.0
-used 65;
-the third also uses 65 but adds the
-.I domainname
-field.
-The glibc
-.BR uname ()
-wrapper function hides these details from applications,
-invoking the most recent version of the system call provided by the kernel.
-.SH NOTES
-The kernel has the name, release, version, and supported machine type built in.
-Conversely, the
-.I nodename
-field is configured by the administrator to match the network
-(this is what the BSD historically calls the "hostname",
-and is set via
-.BR sethostname (2)).
-Similarly, the
-.I domainname
-field is set via
-.BR setdomainname (2).
-.PP
-Part of the utsname information is also accessible via
-.IR /proc/sys/kernel/ { ostype ,
-.IR hostname ,
-.IR osrelease ,
-.IR version ,
-.IR domainname }.
-.SH SEE ALSO
-.BR uname (1),
-.BR getdomainname (2),
-.BR gethostname (2),
-.BR uts_namespaces (7)
diff --git a/man2/unimplemented.2 b/man2/unimplemented.2
deleted file mode 100644
index 2a5d4d590..000000000
--- a/man2/unimplemented.2
+++ /dev/null
@@ -1,48 +0,0 @@
-.\" Copyright 1995 Michael Chastain (mec@shell.portal.com), 15 April 1995.
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Updated, aeb, 980612
-.\"
-.TH UNIMPLEMENTED 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-afs_syscall, break, fattach, fdetach, ftime, getmsg, getpmsg, gtty, isastream,
-lock, madvise1, mpx, prof, profil, putmsg, putpmsg, security,
-stty, tuxcall, ulimit, vserver \- unimplemented system calls
-.SH SYNOPSIS
-.nf
-Unimplemented system calls.
-.fi
-.SH DESCRIPTION
-These system calls are not implemented in the Linux kernel.
-.SH RETURN VALUE
-These system calls always return \-1 and set
-.I errno
-to
-.BR ENOSYS .
-.SH NOTES
-Note that
-.BR ftime (3),
-.BR profil (3),
-and
-.BR ulimit (3)
-are implemented as library functions.
-.PP
-Some system calls, like
-.BR alloc_hugepages (2),
-.BR free_hugepages (2),
-.BR ioperm (2),
-.BR iopl (2),
-and
-.BR vm86 (2)
-exist only on certain architectures.
-.PP
-Some system calls, like
-.BR ipc (2),
-.BR create_module (2),
-.BR init_module (2),
-and
-.BR delete_module (2)
-exist only when the Linux kernel was built with support for them.
-.SH SEE ALSO
-.BR syscalls (2)
diff --git a/man2/unlink.2 b/man2/unlink.2
deleted file mode 100644
index 1f66aca8f..000000000
--- a/man2/unlink.2
+++ /dev/null
@@ -1,298 +0,0 @@
-.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\" and Copyright (C) 1993 Ian Jackson
-.\" and Copyright (C) 2006, 2014 Michael Kerrisk.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1996-09-08 by Arnt Gulbrandsen <agulbra@troll.no>
-.\" Modified 1997-01-31 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2001-05-17 by aeb
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH unlink 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-unlink, unlinkat \- delete a name and possibly the file it refers to
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int unlink(const char *" pathname );
-.PP
-.BR "#include <fcntl.h> " "/* Definition of " AT_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int unlinkat(int " dirfd ", const char *" pathname ", int " flags );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR unlinkat ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _ATFILE_SOURCE
-.fi
-.SH DESCRIPTION
-.BR unlink ()
-deletes a name from the filesystem.
-If that name was the
-last link to a file and no processes have the file open, the file is
-deleted and the space it was using is made available for reuse.
-.PP
-If the name was the last link to a file but any processes still have
-the file open, the file will remain in existence until the last file
-descriptor referring to it is closed.
-.PP
-If the name referred to a symbolic link, the link is removed.
-.PP
-If the name referred to a socket, FIFO, or device, the name for it is
-removed but processes which have the object open may continue to use
-it.
-.SS unlinkat()
-The
-.BR unlinkat ()
-system call operates in exactly the same way as either
-.BR unlink ()
-or
-.BR rmdir (2)
-(depending on whether or not
-.I flags
-includes the
-.B AT_REMOVEDIR
-flag)
-except for the differences described here.
-.PP
-If the pathname given in
-.I pathname
-is relative, then it is interpreted relative to the directory
-referred to by the file descriptor
-.I dirfd
-(rather than relative to the current working directory of
-the calling process, as is done by
-.BR unlink ()
-and
-.BR rmdir (2)
-for a relative pathname).
-.PP
-If the pathname given in
-.I pathname
-is relative and
-.I dirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I pathname
-is interpreted relative to the current working
-directory of the calling process (like
-.BR unlink ()
-and
-.BR rmdir (2)).
-.PP
-If the pathname given in
-.I pathname
-is absolute, then
-.I dirfd
-is ignored.
-.PP
-.I flags
-is a bit mask that can either be specified as 0, or by ORing
-together flag values that control the operation of
-.BR unlinkat ().
-Currently, only one such flag is defined:
-.TP
-.B AT_REMOVEDIR
-By default,
-.BR unlinkat ()
-performs the equivalent of
-.BR unlink ()
-on
-.IR pathname .
-If the
-.B AT_REMOVEDIR
-flag is specified, then
-performs the equivalent of
-.BR rmdir (2)
-on
-.IR pathname .
-.PP
-See
-.BR openat (2)
-for an explanation of the need for
-.BR unlinkat ().
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-Write access to the directory containing
-.I pathname
-is not allowed for the process's effective UID, or one of the
-directories in
-.I pathname
-did not allow search permission.
-(See also
-.BR path_resolution (7).)
-.TP
-.B EBUSY
-The file
-.I pathname
-cannot be unlinked because it is being used by the system
-or another process;
-for example, it is a mount point
-or the NFS client software created it to represent an
-active but otherwise nameless inode ("NFS silly renamed").
-.TP
-.B EFAULT
-.I pathname
-points outside your accessible address space.
-.TP
-.B EIO
-An I/O error occurred.
-.TP
-.B EISDIR
-.I pathname
-refers to a directory.
-(This is the non-POSIX value returned since Linux 2.1.132.)
-.TP
-.B ELOOP
-Too many symbolic links were encountered in translating
-.IR pathname .
-.TP
-.B ENAMETOOLONG
-.IR pathname " was too long."
-.TP
-.B ENOENT
-A component in
-.I pathname
-does not exist or is a dangling symbolic link, or
-.I pathname
-is empty.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOTDIR
-A component used as a directory in
-.I pathname
-is not, in fact, a directory.
-.TP
-.B EPERM
-The system does not allow unlinking of directories,
-or unlinking of directories requires privileges that the
-calling process doesn't have.
-(This is the POSIX prescribed error return;
-as noted above, Linux returns
-.B EISDIR
-for this case.)
-.TP
-.BR EPERM " (Linux only)"
-The filesystem does not allow unlinking of files.
-.TP
-.BR EPERM " or " EACCES
-The directory containing
-.I pathname
-has the sticky bit
-.RB ( S_ISVTX )
-set and the process's effective UID is neither the UID of the file to
-be deleted nor that of the directory containing it, and
-the process is not privileged (Linux: does not have the
-.B CAP_FOWNER
-capability).
-.TP
-.B EPERM
-The file to be unlinked is marked immutable or append-only.
-(See
-.BR ioctl_iflags (2).)
-.TP
-.B EROFS
-.I pathname
-refers to a file on a read-only filesystem.
-.PP
-The same errors that occur for
-.BR unlink ()
-and
-.BR rmdir (2)
-can also occur for
-.BR unlinkat ().
-The following additional errors can occur for
-.BR unlinkat ():
-.TP
-.B EBADF
-.I pathname
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B EINVAL
-An invalid flag value was specified in
-.IR flags .
-.TP
-.B EISDIR
-.I pathname
-refers to a directory, and
-.B AT_REMOVEDIR
-was not specified in
-.IR flags .
-.TP
-.B ENOTDIR
-.I pathname
-is relative and
-.I dirfd
-is a file descriptor referring to a file other than a directory.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR unlink ()
-SVr4, 4.3BSD, POSIX.1-2001.
-.\" SVr4 documents additional error
-.\" conditions EINTR, EMULTIHOP, ETXTBSY, ENOLINK.
-.TP
-.BR unlinkat ()
-POSIX.1-2008.
-Linux 2.6.16,
-glibc 2.4.
-.SS glibc
-On older kernels where
-.BR unlinkat ()
-is unavailable, the glibc wrapper function falls back to the use of
-.BR unlink ()
-or
-.BR rmdir (2).
-When
-.I pathname
-is a relative pathname,
-glibc constructs a pathname based on the symbolic link in
-.I /proc/self/fd
-that corresponds to the
-.I dirfd
-argument.
-.SH BUGS
-Infelicities in the protocol underlying NFS can cause the unexpected
-disappearance of files which are still being used.
-.SH SEE ALSO
-.BR rm (1),
-.BR unlink (1),
-.BR chmod (2),
-.BR link (2),
-.BR mknod (2),
-.BR open (2),
-.BR rename (2),
-.BR rmdir (2),
-.BR mkfifo (3),
-.BR remove (3),
-.BR path_resolution (7),
-.BR symlink (7)
diff --git a/man2/unlinkat.2 b/man2/unlinkat.2
deleted file mode 100644
index 4921f7313..000000000
--- a/man2/unlinkat.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unlink.2
diff --git a/man2/unshare.2 b/man2/unshare.2
deleted file mode 100644
index 1e06d8064..000000000
--- a/man2/unshare.2
+++ /dev/null
@@ -1,572 +0,0 @@
-.\" Copyright (C) 2006, Janak Desai <janak@us.ibm.com>
-.\" and Copyright (C) 2006, 2012 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" Patch Justification:
-.\" unshare system call is needed to implement, using PAM,
-.\" per-security_context and/or per-user namespace to provide
-.\" polyinstantiated directories. Using unshare and bind mounts, a
-.\" PAM module can create private namespace with appropriate
-.\" directories(based on user's security context) bind mounted on
-.\" public directories such as /tmp, thus providing an instance of
-.\" /tmp that is based on user's security context. Without the
-.\" unshare system call, namespace separation can only be achieved
-.\" by clone, which would require porting and maintaining all commands
-.\" such as login, and su, that establish a user session.
-.\"
-.TH unshare 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-unshare \- disassociate parts of the process execution context
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #define _GNU_SOURCE
-.B #include <sched.h>
-.PP
-.BI "int unshare(int " flags );
-.fi
-.SH DESCRIPTION
-.BR unshare ()
-allows a process (or thread) to disassociate parts of its execution
-context that are currently being shared with other processes (or threads).
-Part of the execution context, such as the mount namespace, is shared
-implicitly when a new process is created using
-.BR fork (2)
-or
-.BR vfork (2),
-while other parts, such as virtual memory, may be
-shared by explicit request when creating a process or thread using
-.BR clone (2).
-.PP
-The main use of
-.BR unshare ()
-is to allow a process to control its
-shared execution context without creating a new process.
-.PP
-The
-.I flags
-argument is a bit mask that specifies which parts of
-the execution context should be unshared.
-This argument is specified by ORing together zero or more
-of the following constants:
-.TP
-.B CLONE_FILES
-Reverse the effect of the
-.BR clone (2)
-.B CLONE_FILES
-flag.
-Unshare the file descriptor table, so that the calling process
-no longer shares its file descriptors with any other process.
-.TP
-.B CLONE_FS
-Reverse the effect of the
-.BR clone (2)
-.B CLONE_FS
-flag.
-Unshare filesystem attributes, so that the calling process
-no longer shares its root directory
-.RB ( chroot (2)),
-current directory
-.RB ( chdir (2)),
-or umask
-.RB ( umask (2))
-attributes with any other process.
-.TP
-.BR CLONE_NEWCGROUP " (since Linux 4.6)"
-This flag has the same effect as the
-.BR clone (2)
-.B CLONE_NEWCGROUP
-flag.
-Unshare the cgroup namespace.
-Use of
-.B CLONE_NEWCGROUP
-requires the
-.B CAP_SYS_ADMIN
-capability.
-.TP
-.BR CLONE_NEWIPC " (since Linux 2.6.19)"
-This flag has the same effect as the
-.BR clone (2)
-.B CLONE_NEWIPC
-flag.
-Unshare the IPC namespace,
-so that the calling process has a private copy of the
-IPC namespace which is not shared with any other process.
-Specifying this flag automatically implies
-.B CLONE_SYSVSEM
-as well.
-Use of
-.B CLONE_NEWIPC
-requires the
-.B CAP_SYS_ADMIN
-capability.
-.TP
-.BR CLONE_NEWNET " (since Linux 2.6.24)"
-This flag has the same effect as the
-.BR clone (2)
-.B CLONE_NEWNET
-flag.
-Unshare the network namespace,
-so that the calling process is moved into a
-new network namespace which is not shared
-with any previously existing process.
-Use of
-.B CLONE_NEWNET
-requires the
-.B CAP_SYS_ADMIN
-capability.
-.TP
-.B CLONE_NEWNS
-.\" These flag name are inconsistent:
-.\" CLONE_NEWNS does the same thing in clone(), but CLONE_VM,
-.\" CLONE_FS, and CLONE_FILES reverse the action of the clone()
-.\" flags of the same name.
-This flag has the same effect as the
-.BR clone (2)
-.B CLONE_NEWNS
-flag.
-Unshare the mount namespace,
-so that the calling process has a private copy of
-its namespace which is not shared with any other process.
-Specifying this flag automatically implies
-.B CLONE_FS
-as well.
-Use of
-.B CLONE_NEWNS
-requires the
-.B CAP_SYS_ADMIN
-capability.
-For further information, see
-.BR mount_namespaces (7).
-.TP
-.BR CLONE_NEWPID " (since Linux 3.8)"
-This flag has the same effect as the
-.BR clone (2)
-.B CLONE_NEWPID
-flag.
-Unshare the PID namespace,
-so that the calling process has a new PID namespace for its children
-which is not shared with any previously existing process.
-The calling process is
-.I not
-moved into the new namespace.
-The first child created by the calling process will have
-the process ID 1 and will assume the role of
-.BR init (1)
-in the new namespace.
-.B CLONE_NEWPID
-automatically implies
-.B CLONE_THREAD
-as well.
-Use of
-.B CLONE_NEWPID
-requires the
-.B CAP_SYS_ADMIN
-capability.
-For further information, see
-.BR pid_namespaces (7).
-.TP
-.BR CLONE_NEWTIME " (since Linux 5.6)"
-Unshare the time namespace,
-so that the calling process has a new time namespace for its children
-which is not shared with any previously existing process.
-The calling process is
-.I not
-moved into the new namespace.
-Use of
-.B CLONE_NEWTIME
-requires the
-.B CAP_SYS_ADMIN
-capability.
-For further information, see
-.BR time_namespaces (7).
-.TP
-.BR CLONE_NEWUSER " (since Linux 3.8)"
-This flag has the same effect as the
-.BR clone (2)
-.B CLONE_NEWUSER
-flag.
-Unshare the user namespace,
-so that the calling process is moved into a new user namespace
-which is not shared with any previously existing process.
-As with the child process created by
-.BR clone (2)
-with the
-.B CLONE_NEWUSER
-flag, the caller obtains a full set of capabilities in the new namespace.
-.IP
-.B CLONE_NEWUSER
-requires that the calling process is not threaded; specifying
-.B CLONE_NEWUSER
-automatically implies
-.BR CLONE_THREAD .
-Since Linux 3.9,
-.\" commit e66eded8309ebf679d3d3c1f5820d1f2ca332c71
-.\" https://lwn.net/Articles/543273/
-.B CLONE_NEWUSER
-also automatically implies
-.BR CLONE_FS .
-.B CLONE_NEWUSER
-requires that the user ID and group ID
-of the calling process are mapped to user IDs and group IDs in the
-user namespace of the calling process at the time of the call.
-.IP
-For further information on user namespaces, see
-.BR user_namespaces (7).
-.TP
-.BR CLONE_NEWUTS " (since Linux 2.6.19)"
-This flag has the same effect as the
-.BR clone (2)
-.B CLONE_NEWUTS
-flag.
-Unshare the UTS IPC namespace,
-so that the calling process has a private copy of the
-UTS namespace which is not shared with any other process.
-Use of
-.B CLONE_NEWUTS
-requires the
-.B CAP_SYS_ADMIN
-capability.
-.TP
-.BR CLONE_SYSVSEM " (since Linux 2.6.26)"
-.\" commit 9edff4ab1f8d82675277a04e359d0ed8bf14a7b7
-This flag reverses the effect of the
-.BR clone (2)
-.B CLONE_SYSVSEM
-flag.
-Unshare System\ V semaphore adjustment
-.RI ( semadj )
-values,
-so that the calling process has a new empty
-.I semadj
-list that is not shared with any other process.
-If this is the last process that has a reference to the process's current
-.I semadj
-list, then the adjustments in that list are applied
-to the corresponding semaphores, as described in
-.BR semop (2).
-.\" CLONE_NEWNS If CLONE_SIGHAND is set and signals are also being shared
-.\" (i.e., current->signal->count > 1), force CLONE_THREAD.
-.PP
-In addition,
-.BR CLONE_THREAD ,
-.BR CLONE_SIGHAND ,
-and
-.B CLONE_VM
-can be specified in
-.I flags
-if the caller is single threaded (i.e., it is not sharing
-its address space with another process or thread).
-In this case, these flags have no effect.
-(Note also that specifying
-.B CLONE_THREAD
-automatically implies
-.BR CLONE_VM ,
-and specifying
-.B CLONE_VM
-automatically implies
-.BR CLONE_SIGHAND .)
-.\" As at 3.9, the following forced implications also apply,
-.\" although the relevant flags are not yet implemented.
-.\" If CLONE_THREAD is set force CLONE_VM.
-.\" If CLONE_VM is set, force CLONE_SIGHAND.
-.\"
-If the process is multithreaded, then
-the use of these flags results in an error.
-.\" See kernel/fork.c::check_unshare_flags()
-.PP
-If
-.I flags
-is specified as zero, then
-.BR unshare ()
-is a no-op;
-no changes are made to the calling process's execution context.
-.SH RETURN VALUE
-On success, zero returned.
-On failure, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-An invalid bit was specified in
-.IR flags .
-.TP
-.B EINVAL
-.BR CLONE_THREAD ,
-.BR CLONE_SIGHAND ,
-or
-.B CLONE_VM
-was specified in
-.IR flags ,
-and the caller is multithreaded.
-.TP
-.B EINVAL
-.B CLONE_NEWIPC
-was specified in
-.IR flags ,
-but the kernel was not configured with the
-.B CONFIG_SYSVIPC
-and
-.B CONFIG_IPC_NS
-options.
-.TP
-.B EINVAL
-.B CLONE_NEWNET
-was specified in
-.IR flags ,
-but the kernel was not configured with the
-.B CONFIG_NET_NS
-option.
-.TP
-.B EINVAL
-.B CLONE_NEWPID
-was specified in
-.IR flags ,
-but the kernel was not configured with the
-.B CONFIG_PID_NS
-option.
-.TP
-.B EINVAL
-.B CLONE_NEWUSER
-was specified in
-.IR flags ,
-but the kernel was not configured with the
-.B CONFIG_USER_NS
-option.
-.TP
-.B EINVAL
-.B CLONE_NEWUTS
-was specified in
-.IR flags ,
-but the kernel was not configured with the
-.B CONFIG_UTS_NS
-option.
-.TP
-.B EINVAL
-.B CLONE_NEWPID
-was specified in
-.IR flags ,
-but the process has previously called
-.BR unshare ()
-with the
-.B CLONE_NEWPID
-flag.
-.TP
-.B ENOMEM
-Cannot allocate sufficient memory to copy parts of caller's
-context that need to be unshared.
-.TP
-.BR ENOSPC " (since Linux 3.7)"
-.\" commit f2302505775fd13ba93f034206f1e2a587017929
-.B CLONE_NEWPID
-was specified in flags,
-but the limit on the nesting depth of PID namespaces
-would have been exceeded; see
-.BR pid_namespaces (7).
-.TP
-.BR ENOSPC " (since Linux 4.9; beforehand " EUSERS )
-.B CLONE_NEWUSER
-was specified in
-.IR flags ,
-and the call would cause the limit on the number of
-nested user namespaces to be exceeded.
-See
-.BR user_namespaces (7).
-.IP
-From Linux 3.11 to Linux 4.8, the error diagnosed in this case was
-.BR EUSERS .
-.TP
-.BR ENOSPC " (since Linux 4.9)"
-One of the values in
-.I flags
-specified the creation of a new user namespace,
-but doing so would have caused the limit defined by the corresponding file in
-.I /proc/sys/user
-to be exceeded.
-For further details, see
-.BR namespaces (7).
-.TP
-.B EPERM
-The calling process did not have the required privileges for this operation.
-.TP
-.B EPERM
-.B CLONE_NEWUSER
-was specified in
-.IR flags ,
-but either the effective user ID or the effective group ID of the caller
-does not have a mapping in the parent namespace (see
-.BR user_namespaces (7)).
-.TP
-.BR EPERM " (since Linux 3.9)"
-.\" commit 3151527ee007b73a0ebd296010f1c0454a919c7d
-.B CLONE_NEWUSER
-was specified in
-.I flags
-and the caller is in a chroot environment
-.\" FIXME What is the rationale for this restriction?
-(i.e., the caller's root directory does not match the root directory
-of the mount namespace in which it resides).
-.TP
-.BR EUSERS " (from Linux 3.11 to Linux 4.8)"
-.B CLONE_NEWUSER
-was specified in
-.IR flags ,
-and the limit on the number of nested user namespaces would be exceeded.
-See the discussion of the
-.B ENOSPC
-error above.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.16.
-.SH NOTES
-Not all of the process attributes that can be shared when
-a new process is created using
-.BR clone (2)
-can be unshared using
-.BR unshare ().
-In particular, as at kernel 3.8,
-.\" FIXME all of the following needs to be reviewed for the current kernel
-.BR unshare ()
-does not implement flags that reverse the effects of
-.BR CLONE_SIGHAND ,
-.\" However, we can do unshare(CLONE_SIGHAND) if CLONE_SIGHAND
-.\" was not specified when doing clone(); i.e., unsharing
-.\" signal handlers is permitted if we are not actually
-.\" sharing signal handlers. mtk
-.BR CLONE_THREAD ,
-or
-.BR CLONE_VM .
-.\" However, we can do unshare(CLONE_VM) if CLONE_VM
-.\" was not specified when doing clone(); i.e., unsharing
-.\" virtual memory is permitted if we are not actually
-.\" sharing virtual memory. mtk
-Such functionality may be added in the future, if required.
-.\"
-.\"9) Future Work
-.\"--------------
-.\"The current implementation of unshare does not allow unsharing of
-.\"signals and signal handlers. Signals are complex to begin with and
-.\"to unshare signals and/or signal handlers of a currently running
-.\"process is even more complex. If in the future there is a specific
-.\"need to allow unsharing of signals and/or signal handlers, it can
-.\"be incrementally added to unshare without affecting legacy
-.\"applications using unshare.
-.\"
-.PP
-Creating all kinds of namespace, except user namespaces, requires the
-.B CAP_SYS_ADMIN
-capability.
-However, since creating a user namespace automatically confers a full set of
-capabilities,
-creating both a user namespace and any other type of namespace in the same
-.BR unshare ()
-call does not require the
-.B CAP_SYS_ADMIN
-capability in the original namespace.
-.SH EXAMPLES
-The program below provides a simple implementation of the
-.BR unshare (1)
-command, which unshares one or more namespaces and executes the
-command supplied in its command-line arguments.
-Here's an example of the use of this program,
-running a shell in a new mount namespace,
-and verifying that the original shell and the
-new shell are in separate mount namespaces:
-.PP
-.in +4n
-.EX
-$ \fBreadlink /proc/$$/ns/mnt\fP
-mnt:[4026531840]
-$ \fBsudo ./unshare \-m /bin/bash\fP
-# \fBreadlink /proc/$$/ns/mnt\fP
-mnt:[4026532325]
-.EE
-.in
-.PP
-The differing output of the two
-.BR readlink (1)
-commands shows that the two shells are in different mount namespaces.
-.SS Program source
-\&
-.\" SRC BEGIN (unshare.c)
-.EX
-/* unshare.c
-\&
- A simple implementation of the unshare(1) command: unshare
- namespaces and execute a command.
-*/
-#define _GNU_SOURCE
-#include <err.h>
-#include <sched.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-static void
-usage(char *pname)
-{
- fprintf(stderr, "Usage: %s [options] program [arg...]\en", pname);
- fprintf(stderr, "Options can be:\en");
- fprintf(stderr, " \-C unshare cgroup namespace\en");
- fprintf(stderr, " \-i unshare IPC namespace\en");
- fprintf(stderr, " \-m unshare mount namespace\en");
- fprintf(stderr, " \-n unshare network namespace\en");
- fprintf(stderr, " \-p unshare PID namespace\en");
- fprintf(stderr, " \-t unshare time namespace\en");
- fprintf(stderr, " \-u unshare UTS namespace\en");
- fprintf(stderr, " \-U unshare user namespace\en");
- exit(EXIT_FAILURE);
-}
-\&
-int
-main(int argc, char *argv[])
-{
- int flags, opt;
-\&
- flags = 0;
-\&
- while ((opt = getopt(argc, argv, "CimnptuU")) != \-1) {
- switch (opt) {
- case \[aq]C\[aq]: flags |= CLONE_NEWCGROUP; break;
- case \[aq]i\[aq]: flags |= CLONE_NEWIPC; break;
- case \[aq]m\[aq]: flags |= CLONE_NEWNS; break;
- case \[aq]n\[aq]: flags |= CLONE_NEWNET; break;
- case \[aq]p\[aq]: flags |= CLONE_NEWPID; break;
- case \[aq]t\[aq]: flags |= CLONE_NEWTIME; break;
- case \[aq]u\[aq]: flags |= CLONE_NEWUTS; break;
- case \[aq]U\[aq]: flags |= CLONE_NEWUSER; break;
- default: usage(argv[0]);
- }
- }
-\&
- if (optind >= argc)
- usage(argv[0]);
-\&
- if (unshare(flags) == \-1)
- err(EXIT_FAILURE, "unshare");
-\&
- execvp(argv[optind], &argv[optind]);
- err(EXIT_FAILURE, "execvp");
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR unshare (1),
-.BR clone (2),
-.BR fork (2),
-.BR kcmp (2),
-.BR setns (2),
-.BR vfork (2),
-.BR namespaces (7)
-.PP
-.I Documentation/userspace\-api/unshare.rst
-in the Linux kernel source tree
-.\" commit f504d47be5e8fa7ecf2bf660b18b42e6960c0eb2
-(or
-.I Documentation/unshare.txt
-before Linux 4.12)
diff --git a/man2/uselib.2 b/man2/uselib.2
deleted file mode 100644
index 449e8d577..000000000
--- a/man2/uselib.2
+++ /dev/null
@@ -1,106 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1996-10-22 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2005-01-09 by aeb
-.\"
-.TH uselib 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-uselib \- load shared library
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "[[deprecated]] int uselib(const char *" library );
-.fi
-.SH DESCRIPTION
-The system call
-.BR uselib ()
-serves to load
-a shared library to be used by the calling process.
-It is given a pathname.
-The address where to load is found
-in the library itself.
-The library can have any recognized
-binary format.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-In addition to all of the error codes returned by
-.BR open (2)
-and
-.BR mmap (2),
-the following may also be returned:
-.TP
-.B EACCES
-The library specified by
-.I library
-does not have read or execute permission, or the caller does not have
-search permission for one of the directories in the path prefix.
-(See also
-.BR path_resolution (7).)
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOEXEC
-The file specified by
-.I library
-is not an executable of a known type;
-for example, it does not have the correct magic numbers.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-This obsolete system call is not supported by glibc.
-No declaration is provided in glibc headers, but, through a quirk of history,
-glibc before glibc 2.23 did export an ABI for this system call.
-Therefore, in order to employ this system call,
-it was sufficient to manually declare the interface in your code;
-alternatively, you could invoke the system call using
-.BR syscall (2).
-.PP
-In ancient libc versions (before glibc 2.0),
-.BR uselib ()
-was used to load
-the shared libraries with names found in an array of names
-in the binary.
-.\" .PP
-.\" .\" libc 4.3.1f - changelog 1993-03-02
-.\" Since libc 4.3.2, startup code tries to prefix these names
-.\" with "/usr/lib", "/lib" and "" before giving up.
-.\" .\" libc 4.3.4 - changelog 1993-04-21
-.\" In libc 4.3.4 and later these names are looked for in the directories
-.\" found in
-.\" .BR LD_LIBRARY_PATH ,
-.\" and if not found there,
-.\" prefixes "/usr/lib", "/lib" and "/" are tried.
-.\" .PP
-.\" From libc 4.4.4 on only the library "/lib/ld.so" is loaded,
-.\" so that this dynamic library can load the remaining libraries needed
-.\" (again using this call).
-.\" This is also the state of affairs in libc5.
-.\" .PP
-.\" glibc2 does not use this call.
-.PP
-Since Linux 3.15,
-.\" commit 69369a7003735d0d8ef22097e27a55a8bad9557a
-this system call is available only when the kernel is configured with the
-.B CONFIG_USELIB
-option.
-.SH SEE ALSO
-.BR ar (1),
-.BR gcc (1),
-.BR ld (1),
-.BR ldd (1),
-.BR mmap (2),
-.BR open (2),
-.BR dlopen (3),
-.BR capabilities (7),
-.BR ld.so (8)
diff --git a/man2/userfaultfd.2 b/man2/userfaultfd.2
deleted file mode 100644
index 40354065c..000000000
--- a/man2/userfaultfd.2
+++ /dev/null
@@ -1,943 +0,0 @@
-.\" Copyright (c) 2016, IBM Corporation.
-.\" Written by Mike Rapoport <rppt@linux.vnet.ibm.com>
-.\" and Copyright (C) 2017 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH userfaultfd 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-userfaultfd \- create a file descriptor for handling page faults in user space
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <fcntl.h>" " /* Definition of " O_* " constants */"
-.BR "#include <sys/syscall.h>" " /* Definition of " SYS_* " constants */"
-.BR "#include <linux/userfaultfd.h>" " /* Definition of " UFFD_* " constants */"
-.B #include <unistd.h>
-.PP
-.BI "int syscall(SYS_userfaultfd, int " flags );
-.fi
-.PP
-.IR Note :
-glibc provides no wrapper for
-.BR userfaultfd (),
-necessitating the use of
-.BR syscall (2).
-.SH DESCRIPTION
-.BR userfaultfd ()
-creates a new userfaultfd object that can be used for delegation of page-fault
-handling to a user-space application,
-and returns a file descriptor that refers to the new object.
-The new userfaultfd object is configured using
-.BR ioctl (2).
-.PP
-Once the userfaultfd object is configured, the application can use
-.BR read (2)
-to receive userfaultfd notifications.
-The reads from userfaultfd may be blocking or non-blocking,
-depending on the value of
-.I flags
-used for the creation of the userfaultfd or subsequent calls to
-.BR fcntl (2).
-.PP
-The following values may be bitwise ORed in
-.I flags
-to change the behavior of
-.BR userfaultfd ():
-.TP
-.B O_CLOEXEC
-Enable the close-on-exec flag for the new userfaultfd file descriptor.
-See the description of the
-.B O_CLOEXEC
-flag in
-.BR open (2).
-.TP
-.B O_NONBLOCK
-Enables non-blocking operation for the userfaultfd object.
-See the description of the
-.B O_NONBLOCK
-flag in
-.BR open (2).
-.TP
-.B UFFD_USER_MODE_ONLY
-This is an userfaultfd-specific flag that was introduced in Linux 5.11.
-When set, the userfaultfd object will only be able to handle
-page faults originated from the user space on the registered regions.
-When a kernel-originated fault was triggered
-on the registered range with this userfaultfd, a
-.B SIGBUS
-signal will be delivered.
-.PP
-When the last file descriptor referring to a userfaultfd object is closed,
-all memory ranges that were registered with the object are unregistered
-and unread events are flushed.
-.\"
-.PP
-Userfaultfd supports three modes of registration:
-.TP
-.BR UFFDIO_REGISTER_MODE_MISSING " (since Linux 4.10)"
-When registered with
-.B UFFDIO_REGISTER_MODE_MISSING
-mode, user-space will receive a page-fault notification
-when a missing page is accessed.
-The faulted thread will be stopped from execution until the page fault is
-resolved from user-space by either an
-.B UFFDIO_COPY
-or an
-.B UFFDIO_ZEROPAGE
-ioctl.
-.TP
-.BR UFFDIO_REGISTER_MODE_MINOR " (since Linux 5.13)"
-When registered with
-.B UFFDIO_REGISTER_MODE_MINOR
-mode, user-space will receive a page-fault notification
-when a minor page fault occurs.
-That is,
-when a backing page is in the page cache,
-but page table entries don't yet exist.
-The faulted thread will be stopped from execution
-until the page fault is resolved from user-space by an
-.B UFFDIO_CONTINUE
-ioctl.
-.TP
-.BR UFFDIO_REGISTER_MODE_WP " (since Linux 5.7)"
-When registered with
-.B UFFDIO_REGISTER_MODE_WP
-mode, user-space will receive a page-fault notification
-when a write-protected page is written.
-The faulted thread will be stopped from execution
-until user-space write-unprotects the page using an
-.B UFFDIO_WRITEPROTECT
-ioctl.
-.PP
-Multiple modes can be enabled at the same time for the same memory range.
-.PP
-Since Linux 4.14, a userfaultfd page-fault notification can selectively embed
-faulting thread ID information into the notification.
-One needs to enable this feature explicitly using the
-.B UFFD_FEATURE_THREAD_ID
-feature bit when initializing the userfaultfd context.
-By default, thread ID reporting is disabled.
-.SS Usage
-The userfaultfd mechanism is designed to allow a thread in a multithreaded
-program to perform user-space paging for the other threads in the process.
-When a page fault occurs for one of the regions registered
-to the userfaultfd object,
-the faulting thread is put to sleep and
-an event is generated that can be read via the userfaultfd file descriptor.
-The fault-handling thread reads events from this file descriptor and services
-them using the operations described in
-.BR ioctl_userfaultfd (2).
-When servicing the page fault events,
-the fault-handling thread can trigger a wake-up for the sleeping thread.
-.PP
-It is possible for the faulting threads and the fault-handling threads
-to run in the context of different processes.
-In this case, these threads may belong to different programs,
-and the program that executes the faulting threads
-will not necessarily cooperate with the program that handles the page faults.
-In such non-cooperative mode,
-the process that monitors userfaultfd and handles page faults
-needs to be aware of the changes in the virtual memory layout
-of the faulting process to avoid memory corruption.
-.PP
-Since Linux 4.11,
-userfaultfd can also notify the fault-handling threads about changes
-in the virtual memory layout of the faulting process.
-In addition, if the faulting process invokes
-.BR fork (2),
-the userfaultfd objects associated with the parent may be duplicated
-into the child process and the userfaultfd monitor will be notified
-(via the
-.B UFFD_EVENT_FORK
-described below)
-about the file descriptor associated with the userfault objects
-created for the child process,
-which allows the userfaultfd monitor to perform user-space paging
-for the child process.
-Unlike page faults which have to be synchronous and require an
-explicit or implicit wakeup,
-all other events are delivered asynchronously and
-the non-cooperative process resumes execution as
-soon as the userfaultfd manager executes
-.BR read (2).
-The userfaultfd manager should carefully synchronize calls to
-.B UFFDIO_COPY
-with the processing of events.
-.PP
-The current asynchronous model of the event delivery is optimal for
-single threaded non-cooperative userfaultfd manager implementations.
-.\" Regarding the preceding sentence, Mike Rapoport says:
-.\" The major point here is that current events delivery model could be
-.\" problematic for multi-threaded monitor. I even suspect that it would be
-.\" impossible to ensure synchronization between page faults and non-page
-.\" fault events in multi-threaded monitor.
-.\" .PP
-.\" FIXME elaborate about non-cooperating mode, describe its limitations
-.\" for kernels before Linux 4.11, features added in Linux 4.11
-.\" and limitations remaining in Linux 4.11
-.\" Maybe it's worth adding a dedicated sub-section...
-.\"
-.PP
-Since Linux 5.7, userfaultfd is able to do
-synchronous page dirty tracking using the new write-protect register mode.
-One should check against the feature bit
-.B UFFD_FEATURE_PAGEFAULT_FLAG_WP
-before using this feature.
-Similar to the original userfaultfd missing mode, the write-protect mode will
-generate a userfaultfd notification when the protected page is written.
-The user needs to resolve the page fault by unprotecting the faulted page and
-kicking the faulted thread to continue.
-For more information,
-please refer to the "Userfaultfd write-protect mode" section.
-.\"
-.SS Userfaultfd operation
-After the userfaultfd object is created with
-.BR userfaultfd (),
-the application must enable it using the
-.B UFFDIO_API
-.BR ioctl (2)
-operation.
-This operation allows a handshake between the kernel and user space
-to determine the API version and supported features.
-This operation must be performed before any of the other
-.BR ioctl (2)
-operations described below (or those operations fail with the
-.B EINVAL
-error).
-.PP
-After a successful
-.B UFFDIO_API
-operation,
-the application then registers memory address ranges using the
-.B UFFDIO_REGISTER
-.BR ioctl (2)
-operation.
-After successful completion of a
-.B UFFDIO_REGISTER
-operation,
-a page fault occurring in the requested memory range, and satisfying
-the mode defined at the registration time, will be forwarded by the kernel to
-the user-space application.
-The application can then use the
-.B UFFDIO_COPY ,
-.B UFFDIO_ZEROPAGE ,
-or
-.B UFFDIO_CONTINUE
-.BR ioctl (2)
-operations to resolve the page fault.
-.PP
-Since Linux 4.14, if the application sets the
-.B UFFD_FEATURE_SIGBUS
-feature bit using the
-.B UFFDIO_API
-.BR ioctl (2),
-no page-fault notification will be forwarded to user space.
-Instead a
-.B SIGBUS
-signal is delivered to the faulting process.
-With this feature,
-userfaultfd can be used for robustness purposes to simply catch
-any access to areas within the registered address range that do not
-have pages allocated, without having to listen to userfaultfd events.
-No userfaultfd monitor will be required for dealing with such memory
-accesses.
-For example, this feature can be useful for applications that
-want to prevent the kernel from automatically allocating pages and filling
-holes in sparse files when the hole is accessed through a memory mapping.
-.PP
-The
-.B UFFD_FEATURE_SIGBUS
-feature is implicitly inherited through
-.BR fork (2)
-if used in combination with
-.BR UFFD_FEATURE_FORK .
-.PP
-Details of the various
-.BR ioctl (2)
-operations can be found in
-.BR ioctl_userfaultfd (2).
-.PP
-Since Linux 4.11, events other than page-fault may enabled during
-.B UFFDIO_API
-operation.
-.PP
-Up to Linux 4.11,
-userfaultfd can be used only with anonymous private memory mappings.
-Since Linux 4.11,
-userfaultfd can be also used with hugetlbfs and shared memory mappings.
-.\"
-.SS Userfaultfd write-protect mode (since Linux 5.7)
-Since Linux 5.7, userfaultfd supports write-protect mode for anonymous memory.
-The user needs to first check availability of this feature using
-.B UFFDIO_API
-ioctl against the feature bit
-.B UFFD_FEATURE_PAGEFAULT_FLAG_WP
-before using this feature.
-.PP
-Since Linux 5.19,
-the write-protection mode was also supported on
-shmem and hugetlbfs memory types.
-It can be detected with the feature bit
-.BR UFFD_FEATURE_WP_HUGETLBFS_SHMEM .
-.PP
-To register with userfaultfd write-protect mode, the user needs to initiate the
-.B UFFDIO_REGISTER
-ioctl with mode
-.B UFFDIO_REGISTER_MODE_WP
-set.
-Note that it is legal to monitor the same memory range with multiple modes.
-For example, the user can do
-.B UFFDIO_REGISTER
-with the mode set to
-.BR "UFFDIO_REGISTER_MODE_MISSING | UFFDIO_REGISTER_MODE_WP" .
-When there is only
-.B UFFDIO_REGISTER_MODE_WP
-registered, user-space will
-.I not
-receive any notification when a missing page is written.
-Instead, user-space will receive a write-protect page-fault notification
-only when an existing but write-protected page got written.
-.PP
-After the
-.B UFFDIO_REGISTER
-ioctl completed with
-.B UFFDIO_REGISTER_MODE_WP
-mode set,
-the user can write-protect any existing memory within the range using the ioctl
-.B UFFDIO_WRITEPROTECT
-where
-.I uffdio_writeprotect.mode
-should be set to
-.BR UFFDIO_WRITEPROTECT_MODE_WP .
-.PP
-When a write-protect event happens,
-user-space will receive a page-fault notification whose
-.I uffd_msg.pagefault.flags
-will be with
-.B UFFD_PAGEFAULT_FLAG_WP
-flag set.
-Note: since only writes can trigger this kind of fault,
-write-protect notifications will always have the
-.B UFFD_PAGEFAULT_FLAG_WRITE
-bit set along with the
-.B UFFD_PAGEFAULT_FLAG_WP
-bit.
-.PP
-To resolve a write-protection page fault, the user should initiate another
-.B UFFDIO_WRITEPROTECT
-ioctl, whose
-.I uffd_msg.pagefault.flags
-should have the flag
-.B UFFDIO_WRITEPROTECT_MODE_WP
-cleared upon the faulted page or range.
-.\"
-.SS Userfaultfd minor fault mode (since Linux 5.13)
-Since Linux 5.13,
-userfaultfd supports minor fault mode.
-In this mode,
-fault messages are produced not for major faults
-(where the page was missing),
-but rather for minor faults,
-where a page exists in the page cache,
-but the page table entries are not yet present.
-The user needs to first check availability of this feature using the
-.B UFFDIO_API
-ioctl with the appropriate feature bits set before using this feature:
-.B UFFD_FEATURE_MINOR_HUGETLBFS
-since Linux 5.13,
-or
-.B UFFD_FEATURE_MINOR_SHMEM
-since Linux 5.14.
-.PP
-To register with userfaultfd minor fault mode,
-the user needs to initiate the
-.B UFFDIO_REGISTER
-ioctl with mode
-.B UFFD_REGISTER_MODE_MINOR
-set.
-.PP
-When a minor fault occurs,
-user-space will receive a page-fault notification
-whose
-.I uffd_msg.pagefault.flags
-will have the
-.B UFFD_PAGEFAULT_FLAG_MINOR
-flag set.
-.PP
-To resolve a minor page fault,
-the handler should decide whether or not
-the existing page contents need to be modified first.
-If so,
-this should be done in-place via a second,
-non-userfaultfd-registered mapping
-to the same backing page
-(e.g., by mapping the shmem or hugetlbfs file twice).
-Once the page is considered "up to date",
-the fault can be resolved by initiating an
-.B UFFDIO_CONTINUE
-ioctl,
-which installs the page table entries and
-(by default)
-wakes up the faulting thread(s).
-.PP
-Minor fault mode supports only hugetlbfs-backed (since Linux 5.13)
-and shmem-backed (since Linux 5.14) memory.
-.\"
-.SS Reading from the userfaultfd structure
-Each
-.BR read (2)
-from the userfaultfd file descriptor returns one or more
-.I uffd_msg
-structures, each of which describes a page-fault event
-or an event required for the non-cooperative userfaultfd usage:
-.PP
-.in +4n
-.EX
-struct uffd_msg {
- __u8 event; /* Type of event */
- ...
- union {
- struct {
- __u64 flags; /* Flags describing fault */
- __u64 address; /* Faulting address */
- union {
- __u32 ptid; /* Thread ID of the fault */
- } feat;
- } pagefault;
-\&
- struct { /* Since Linux 4.11 */
- __u32 ufd; /* Userfault file descriptor
- of the child process */
- } fork;
-\&
- struct { /* Since Linux 4.11 */
- __u64 from; /* Old address of remapped area */
- __u64 to; /* New address of remapped area */
- __u64 len; /* Original mapping length */
- } remap;
-\&
- struct { /* Since Linux 4.11 */
- __u64 start; /* Start address of removed area */
- __u64 end; /* End address of removed area */
- } remove;
- ...
- } arg;
-\&
- /* Padding fields omitted */
-} __packed;
-.EE
-.in
-.PP
-If multiple events are available and the supplied buffer is large enough,
-.BR read (2)
-returns as many events as will fit in the supplied buffer.
-If the buffer supplied to
-.BR read (2)
-is smaller than the size of the
-.I uffd_msg
-structure, the
-.BR read (2)
-fails with the error
-.BR EINVAL .
-.PP
-The fields set in the
-.I uffd_msg
-structure are as follows:
-.TP
-.I event
-The type of event.
-Depending of the event type,
-different fields of the
-.I arg
-union represent details required for the event processing.
-The non-page-fault events are generated only when appropriate feature
-is enabled during API handshake with
-.B UFFDIO_API
-.BR ioctl (2).
-.IP
-The following values can appear in the
-.I event
-field:
-.RS
-.TP
-.BR UFFD_EVENT_PAGEFAULT " (since Linux 4.3)"
-A page-fault event.
-The page-fault details are available in the
-.I pagefault
-field.
-.TP
-.BR UFFD_EVENT_FORK " (since Linux 4.11)"
-Generated when the faulting process invokes
-.BR fork (2)
-(or
-.BR clone (2)
-without the
-.B CLONE_VM
-flag).
-The event details are available in the
-.I fork
-field.
-.\" FIXME describe duplication of userfault file descriptor during fork
-.TP
-.BR UFFD_EVENT_REMAP " (since Linux 4.11)"
-Generated when the faulting process invokes
-.BR mremap (2).
-The event details are available in the
-.I remap
-field.
-.TP
-.BR UFFD_EVENT_REMOVE " (since Linux 4.11)"
-Generated when the faulting process invokes
-.BR madvise (2)
-with
-.B MADV_DONTNEED
-or
-.B MADV_REMOVE
-advice.
-The event details are available in the
-.I remove
-field.
-.TP
-.BR UFFD_EVENT_UNMAP " (since Linux 4.11)"
-Generated when the faulting process unmaps a memory range,
-either explicitly using
-.BR munmap (2)
-or implicitly during
-.BR mmap (2)
-or
-.BR mremap (2).
-The event details are available in the
-.I remove
-field.
-.RE
-.TP
-.I pagefault.address
-The address that triggered the page fault.
-.TP
-.I pagefault.flags
-A bit mask of flags that describe the event.
-For
-.BR UFFD_EVENT_PAGEFAULT ,
-the following flag may appear:
-.RS
-.TP
-.B UFFD_PAGEFAULT_FLAG_WP
-If this flag is set, then the fault was a write-protect fault.
-.TP
-.B UFFD_PAGEFAULT_FLAG_MINOR
-If this flag is set, then the fault was a minor fault.
-.TP
-.B UFFD_PAGEFAULT_FLAG_WRITE
-If this flag is set, then the fault was a write fault.
-.PP
-If neither
-.B UFFD_PAGEFAULT_FLAG_WP
-nor
-.B UFFD_PAGEFAULT_FLAG_MINOR
-are set, then the fault was a missing fault.
-.RE
-.TP
-.I pagefault.feat.pid
-The thread ID that triggered the page fault.
-.TP
-.I fork.ufd
-The file descriptor associated with the userfault object
-created for the child created by
-.BR fork (2).
-.TP
-.I remap.from
-The original address of the memory range that was remapped using
-.BR mremap (2).
-.TP
-.I remap.to
-The new address of the memory range that was remapped using
-.BR mremap (2).
-.TP
-.I remap.len
-The original length of the memory range that was remapped using
-.BR mremap (2).
-.TP
-.I remove.start
-The start address of the memory range that was freed using
-.BR madvise (2)
-or unmapped
-.TP
-.I remove.end
-The end address of the memory range that was freed using
-.BR madvise (2)
-or unmapped
-.PP
-A
-.BR read (2)
-on a userfaultfd file descriptor can fail with the following errors:
-.TP
-.B EINVAL
-The userfaultfd object has not yet been enabled using the
-.B UFFDIO_API
-.BR ioctl (2)
-operation
-.PP
-If the
-.B O_NONBLOCK
-flag is enabled in the associated open file description,
-the userfaultfd file descriptor can be monitored with
-.BR poll (2),
-.BR select (2),
-and
-.BR epoll (7).
-When events are available, the file descriptor indicates as readable.
-If the
-.B O_NONBLOCK
-flag is not enabled, then
-.BR poll (2)
-(always) indicates the file as having a
-.B POLLERR
-condition, and
-.BR select (2)
-indicates the file descriptor as both readable and writable.
-.\" FIXME What is the reason for this seemingly odd behavior with respect
-.\" to the O_NONBLOCK flag? (see userfaultfd_poll() in fs/userfaultfd.c).
-.\" Something needs to be said about this.
-.SH RETURN VALUE
-On success,
-.BR userfaultfd ()
-returns a new file descriptor that refers to the userfaultfd object.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-An unsupported value was specified in
-.IR flags .
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been
-reached
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been
-reached.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.BR EPERM " (since Linux 5.2)"
-.\" cefdca0a86be517bc390fc4541e3674b8e7803b0
-The caller is not privileged (does not have the
-.B CAP_SYS_PTRACE
-capability in the initial user namespace), and
-.I /proc/sys/vm/unprivileged_userfaultfd
-has the value 0.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 4.3.
-.PP
-Support for hugetlbfs and shared memory areas and
-non-page-fault events was added in Linux 4.11
-.SH NOTES
-The userfaultfd mechanism can be used as an alternative to
-traditional user-space paging techniques based on the use of the
-.B SIGSEGV
-signal and
-.BR mmap (2).
-It can also be used to implement lazy restore
-for checkpoint/restore mechanisms,
-as well as post-copy migration to allow (nearly) uninterrupted execution
-when transferring virtual machines and Linux containers
-from one host to another.
-.SH BUGS
-If the
-.B UFFD_FEATURE_EVENT_FORK
-is enabled and a system call from the
-.BR fork (2)
-family is interrupted by a signal or failed, a stale userfaultfd descriptor
-might be created.
-In this case, a spurious
-.B UFFD_EVENT_FORK
-will be delivered to the userfaultfd monitor.
-.SH EXAMPLES
-The program below demonstrates the use of the userfaultfd mechanism.
-The program creates two threads, one of which acts as the
-page-fault handler for the process, for the pages in a demand-page zero
-region created using
-.BR mmap (2).
-.PP
-The program takes one command-line argument,
-which is the number of pages that will be created in a mapping
-whose page faults will be handled via userfaultfd.
-After creating a userfaultfd object,
-the program then creates an anonymous private mapping of the specified size
-and registers the address range of that mapping using the
-.B UFFDIO_REGISTER
-.BR ioctl (2)
-operation.
-The program then creates a second thread that will perform the
-task of handling page faults.
-.PP
-The main thread then walks through the pages of the mapping fetching
-bytes from successive pages.
-Because the pages have not yet been accessed,
-the first access of a byte in each page will trigger a page-fault event
-on the userfaultfd file descriptor.
-.PP
-Each of the page-fault events is handled by the second thread,
-which sits in a loop processing input from the userfaultfd file descriptor.
-In each loop iteration, the second thread first calls
-.BR poll (2)
-to check the state of the file descriptor,
-and then reads an event from the file descriptor.
-All such events should be
-.B UFFD_EVENT_PAGEFAULT
-events,
-which the thread handles by copying a page of data into
-the faulting region using the
-.B UFFDIO_COPY
-.BR ioctl (2)
-operation.
-.PP
-The following is an example of what we see when running the program:
-.PP
-.in +4n
-.EX
-$ \fB./userfaultfd_demo 3\fP
-Address returned by mmap() = 0x7fd30106c000
-\&
-fault_handler_thread():
- poll() returns: nready = 1; POLLIN = 1; POLLERR = 0
- UFFD_EVENT_PAGEFAULT event: flags = 0; address = 7fd30106c00f
- (uffdio_copy.copy returned 4096)
-Read address 0x7fd30106c00f in main(): A
-Read address 0x7fd30106c40f in main(): A
-Read address 0x7fd30106c80f in main(): A
-Read address 0x7fd30106cc0f in main(): A
-\&
-fault_handler_thread():
- poll() returns: nready = 1; POLLIN = 1; POLLERR = 0
- UFFD_EVENT_PAGEFAULT event: flags = 0; address = 7fd30106d00f
- (uffdio_copy.copy returned 4096)
-Read address 0x7fd30106d00f in main(): B
-Read address 0x7fd30106d40f in main(): B
-Read address 0x7fd30106d80f in main(): B
-Read address 0x7fd30106dc0f in main(): B
-\&
-fault_handler_thread():
- poll() returns: nready = 1; POLLIN = 1; POLLERR = 0
- UFFD_EVENT_PAGEFAULT event: flags = 0; address = 7fd30106e00f
- (uffdio_copy.copy returned 4096)
-Read address 0x7fd30106e00f in main(): C
-Read address 0x7fd30106e40f in main(): C
-Read address 0x7fd30106e80f in main(): C
-Read address 0x7fd30106ec0f in main(): C
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (userfaultfd.c)
-.EX
-/* userfaultfd_demo.c
-\&
- Licensed under the GNU General Public License version 2 or later.
-*/
-#define _GNU_SOURCE
-#include <err.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <inttypes.h>
-#include <linux/userfaultfd.h>
-#include <poll.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <sys/mman.h>
-#include <sys/syscall.h>
-#include <unistd.h>
-\&
-static int page_size;
-\&
-static void *
-fault_handler_thread(void *arg)
-{
- int nready;
- long uffd; /* userfaultfd file descriptor */
- ssize_t nread;
- struct pollfd pollfd;
- struct uffdio_copy uffdio_copy;
-\&
- static int fault_cnt = 0; /* Number of faults so far handled */
- static char *page = NULL;
- static struct uffd_msg msg; /* Data read from userfaultfd */
-\&
- uffd = (long) arg;
-\&
- /* Create a page that will be copied into the faulting region. */
-\&
- if (page == NULL) {
- page = mmap(NULL, page_size, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS, \-1, 0);
- if (page == MAP_FAILED)
- err(EXIT_FAILURE, "mmap");
- }
-\&
- /* Loop, handling incoming events on the userfaultfd
- file descriptor. */
-\&
- for (;;) {
-\&
- /* See what poll() tells us about the userfaultfd. */
-\&
- pollfd.fd = uffd;
- pollfd.events = POLLIN;
- nready = poll(&pollfd, 1, \-1);
- if (nready == \-1)
- err(EXIT_FAILURE, "poll");
-\&
- printf("\enfault_handler_thread():\en");
- printf(" poll() returns: nready = %d; "
- "POLLIN = %d; POLLERR = %d\en", nready,
- (pollfd.revents & POLLIN) != 0,
- (pollfd.revents & POLLERR) != 0);
-\&
- /* Read an event from the userfaultfd. */
-\&
- nread = read(uffd, &msg, sizeof(msg));
- if (nread == 0) {
- printf("EOF on userfaultfd!\en");
- exit(EXIT_FAILURE);
- }
-\&
- if (nread == \-1)
- err(EXIT_FAILURE, "read");
-\&
- /* We expect only one kind of event; verify that assumption. */
-\&
- if (msg.event != UFFD_EVENT_PAGEFAULT) {
- fprintf(stderr, "Unexpected event on userfaultfd\en");
- exit(EXIT_FAILURE);
- }
-\&
- /* Display info about the page\-fault event. */
-\&
- printf(" UFFD_EVENT_PAGEFAULT event: ");
- printf("flags = %"PRIx64"; ", msg.arg.pagefault.flags);
- printf("address = %"PRIx64"\en", msg.arg.pagefault.address);
-\&
- /* Copy the page pointed to by \[aq]page\[aq] into the faulting
- region. Vary the contents that are copied in, so that it
- is more obvious that each fault is handled separately. */
-\&
- memset(page, \[aq]A\[aq] + fault_cnt % 20, page_size);
- fault_cnt++;
-\&
- uffdio_copy.src = (unsigned long) page;
-\&
- /* We need to handle page faults in units of pages(!).
- So, round faulting address down to page boundary. */
-\&
- uffdio_copy.dst = (unsigned long) msg.arg.pagefault.address &
- \[ti](page_size \- 1);
- uffdio_copy.len = page_size;
- uffdio_copy.mode = 0;
- uffdio_copy.copy = 0;
- if (ioctl(uffd, UFFDIO_COPY, &uffdio_copy) == \-1)
- err(EXIT_FAILURE, "ioctl\-UFFDIO_COPY");
-\&
- printf(" (uffdio_copy.copy returned %"PRId64")\en",
- uffdio_copy.copy);
- }
-}
-\&
-int
-main(int argc, char *argv[])
-{
- int s;
- char c;
- char *addr; /* Start of region handled by userfaultfd */
- long uffd; /* userfaultfd file descriptor */
- size_t len, l; /* Length of region handled by userfaultfd */
- pthread_t thr; /* ID of thread that handles page faults */
- struct uffdio_api uffdio_api;
- struct uffdio_register uffdio_register;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s num\-pages\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- page_size = sysconf(_SC_PAGE_SIZE);
- len = strtoull(argv[1], NULL, 0) * page_size;
-\&
- /* Create and enable userfaultfd object. */
-\&
- uffd = syscall(SYS_userfaultfd, O_CLOEXEC | O_NONBLOCK);
- if (uffd == \-1)
- err(EXIT_FAILURE, "userfaultfd");
-\&
- uffdio_api.api = UFFD_API;
- uffdio_api.features = 0;
- if (ioctl(uffd, UFFDIO_API, &uffdio_api) == \-1)
- err(EXIT_FAILURE, "ioctl\-UFFDIO_API");
-\&
- /* Create a private anonymous mapping. The memory will be
- demand\-zero paged\-\-that is, not yet allocated. When we
- actually touch the memory, it will be allocated via
- the userfaultfd. */
-\&
- addr = mmap(NULL, len, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS, \-1, 0);
- if (addr == MAP_FAILED)
- err(EXIT_FAILURE, "mmap");
-\&
- printf("Address returned by mmap() = %p\en", addr);
-\&
- /* Register the memory range of the mapping we just created for
- handling by the userfaultfd object. In mode, we request to track
- missing pages (i.e., pages that have not yet been faulted in). */
-\&
- uffdio_register.range.start = (unsigned long) addr;
- uffdio_register.range.len = len;
- uffdio_register.mode = UFFDIO_REGISTER_MODE_MISSING;
- if (ioctl(uffd, UFFDIO_REGISTER, &uffdio_register) == \-1)
- err(EXIT_FAILURE, "ioctl\-UFFDIO_REGISTER");
-\&
- /* Create a thread that will process the userfaultfd events. */
-\&
- s = pthread_create(&thr, NULL, fault_handler_thread, (void *) uffd);
- if (s != 0) {
- errc(EXIT_FAILURE, s, "pthread_create");
- }
-\&
- /* Main thread now touches memory in the mapping, touching
- locations 1024 bytes apart. This will trigger userfaultfd
- events for all pages in the region. */
-\&
- l = 0xf; /* Ensure that faulting address is not on a page
- boundary, in order to test that we correctly
- handle that case in fault_handling_thread(). */
- while (l < len) {
- c = addr[l];
- printf("Read address %p in %s(): ", addr + l, __func__);
- printf("%c\en", c);
- l += 1024;
- usleep(100000); /* Slow things down a little */
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR fcntl (2),
-.BR ioctl (2),
-.BR ioctl_userfaultfd (2),
-.BR madvise (2),
-.BR mmap (2)
-.PP
-.I Documentation/admin\-guide/mm/userfaultfd.rst
-in the Linux kernel source tree
diff --git a/man2/ustat.2 b/man2/ustat.2
deleted file mode 100644
index b52dea303..000000000
--- a/man2/ustat.2
+++ /dev/null
@@ -1,104 +0,0 @@
-.\" Copyright (C) 1995, Thomas K. Dyas <tdyas@eden.rutgers.edu>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Created 1995-08-09 Thomas K. Dyas <tdyas@eden.rutgers.edu>
-.\" Modified 1997-01-31 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2001-03-22 by aeb
-.\" Modified 2003-08-04 by aeb
-.\"
-.TH ustat 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ustat \- get filesystem statistics
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.BR "#include <unistd.h>" " /* libc[45] */"
-.BR "#include <ustat.h>" " /* glibc2 */"
-.PP
-.BI "[[deprecated]] int ustat(dev_t " dev ", struct ustat *" ubuf );
-.fi
-.SH DESCRIPTION
-.BR ustat ()
-returns information about a mounted filesystem.
-.I dev
-is a device number identifying a device containing
-a mounted filesystem.
-.I ubuf
-is a pointer to a
-.I ustat
-structure that contains the following
-members:
-.PP
-.in +4n
-.EX
-daddr_t f_tfree; /* Total free blocks */
-ino_t f_tinode; /* Number of free inodes */
-char f_fname[6]; /* Filsys name */
-char f_fpack[6]; /* Filsys pack name */
-.EE
-.in
-.PP
-The last two fields,
-.I f_fname
-and
-.IR f_fpack ,
-are not implemented and will
-always be filled with null bytes (\[aq]\e0\[aq]).
-.SH RETURN VALUE
-On success, zero is returned and the
-.I ustat
-structure pointed to by
-.I ubuf
-will be filled in.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-.I ubuf
-points outside of your accessible address space.
-.TP
-.B EINVAL
-.I dev
-does not refer to a device containing a mounted filesystem.
-.TP
-.B ENOSYS
-The mounted filesystem referenced by
-.I dev
-does not support this operation,
-or any version of Linux before Linux 1.3.16.
-.SH STANDARDS
-None.
-.SH HISTORY
-SVr4.
-Removed in glibc 2.28.
-.\" SVr4 documents additional error conditions ENOLINK, ECOMM, and EINTR
-.\" but has no ENOSYS condition.
-.PP
-.BR ustat ()
-is deprecated and has been provided only for compatibility.
-All new programs should use
-.BR statfs (2)
-instead.
-.SS HP-UX notes
-The HP-UX version of the
-.I ustat
-structure has an additional field,
-.IR f_blksize ,
-that is unknown elsewhere.
-HP-UX warns:
-For some filesystems, the number of free inodes does not change.
-Such filesystems will return \-1 in the field
-.IR f_tinode .
-.\" Some software tries to use this in order to test whether the
-.\" underlying filesystem is NFS.
-For some filesystems, inodes are dynamically allocated.
-Such filesystems will return the current number of free inodes.
-.SH SEE ALSO
-.BR stat (2),
-.BR statfs (2)
diff --git a/man2/utime.2 b/man2/utime.2
deleted file mode 100644
index 5edbf97de..000000000
--- a/man2/utime.2
+++ /dev/null
@@ -1,179 +0,0 @@
-.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by Michael Haardt <michael@moria.de>
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1995-06-10 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2004-10-10 by Andries Brouwer <aeb@cwi.nl>
-.\"
-.TH utime 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-utime, utimes \- change file last access and modification times
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <utime.h>
-.PP
-.BI "int utime(const char *" filename ,
-.BI " const struct utimbuf *_Nullable " times );
-.PP
-.B #include <sys/time.h>
-.PP
-.BI "int utimes(const char *" filename ,
-.BI " const struct timeval " times "[_Nullable 2]);"
-.fi
-.SH DESCRIPTION
-.B Note:
-modern applications may prefer to use the interfaces described in
-.BR utimensat (2).
-.PP
-The
-.BR utime ()
-system call
-changes the access and modification times of the inode specified by
-.I filename
-to the
-.IR actime " and " modtime
-fields of
-.I times
-respectively.
-The status change time (ctime) will be set to the current time, even if the
-other time stamps don't actually change.
-.PP
-If
-.I times
-is NULL, then the access and modification times of the file are set
-to the current time.
-.PP
-Changing timestamps is permitted when: either
-the process has appropriate privileges,
-or the effective user ID equals the user ID
-of the file, or
-.I times
-is NULL and the process has write permission for the file.
-.PP
-The
-.I utimbuf
-structure is:
-.PP
-.in +4n
-.EX
-struct utimbuf {
- time_t actime; /* access time */
- time_t modtime; /* modification time */
-};
-.EE
-.in
-.PP
-The
-.BR utime ()
-system call
-allows specification of timestamps with a resolution of 1 second.
-.PP
-The
-.BR utimes ()
-system call
-is similar, but the
-.I times
-argument refers to an array rather than a structure.
-The elements of this array are
-.I timeval
-structures, which allow a precision of 1 microsecond for specifying timestamps.
-The
-.I timeval
-structure is:
-.PP
-.in +4n
-.EX
-struct timeval {
- long tv_sec; /* seconds */
- long tv_usec; /* microseconds */
-};
-.EE
-.in
-.PP
-.I times[0]
-specifies the new access time, and
-.I times[1]
-specifies the new modification time.
-If
-.I times
-is NULL, then analogously to
-.BR utime (),
-the access and modification times of the file are
-set to the current time.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-Search permission is denied for one of the directories in
-the path prefix of
-.I path
-(see also
-.BR path_resolution (7)).
-.TP
-.B EACCES
-.I times
-is NULL,
-the caller's effective user ID does not match the owner of the file,
-the caller does not have write access to the file,
-and the caller is not privileged
-(Linux: does not have either the
-.B CAP_DAC_OVERRIDE
-or the
-.B CAP_FOWNER
-capability).
-.TP
-.B ENOENT
-.I filename
-does not exist.
-.TP
-.B EPERM
-.I times
-is not NULL,
-the caller's effective UID does not match the owner of the file,
-and the caller is not privileged
-(Linux: does not have the
-.B CAP_FOWNER
-capability).
-.TP
-.B EROFS
-.I path
-resides on a read-only filesystem.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR utime ()
-SVr4, POSIX.1-2001.
-POSIX.1-2008 marks it as obsolete.
-.TP
-.BR utimes ()
-4.3BSD, POSIX.1-2001.
-.SH NOTES
-Linux does not allow changing the timestamps on an immutable file,
-or setting the timestamps to something other than the current time
-on an append-only file.
-.\"
-.\" In libc4 and libc5,
-.\" .BR utimes ()
-.\" is just a wrapper for
-.\" .BR utime ()
-.\" and hence does not allow a subsecond resolution.
-.SH SEE ALSO
-.BR chattr (1),
-.BR touch (1),
-.BR futimesat (2),
-.BR stat (2),
-.BR utimensat (2),
-.BR futimens (3),
-.BR futimes (3),
-.BR inode (7)
diff --git a/man2/utimensat.2 b/man2/utimensat.2
deleted file mode 100644
index 9a1fb840d..000000000
--- a/man2/utimensat.2
+++ /dev/null
@@ -1,615 +0,0 @@
-'\" t
-.\" Copyright (C) 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH utimensat 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-utimensat, futimens \- change file timestamps with nanosecond precision
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <fcntl.h>" " /* Definition of " AT_* " constants */"
-.B #include <sys/stat.h>
-.PP
-.BI "int utimensat(int " dirfd ", const char *" pathname ,
-.BI " const struct timespec " times "[_Nullable 2], int " flags );
-.BI "int futimens(int " fd ", const struct timespec " times "[_Nullable 2]);"
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR utimensat ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _ATFILE_SOURCE
-.fi
-.PP
-.BR futimens ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-.BR utimensat ()
-and
-.BR futimens ()
-update the timestamps of a file with nanosecond precision.
-This contrasts with the historical
-.BR utime (2)
-and
-.BR utimes (2),
-which permit only second and microsecond precision, respectively,
-when setting file timestamps.
-.PP
-With
-.BR utimensat ()
-the file is specified via the pathname given in
-.IR pathname .
-With
-.BR futimens ()
-the file whose timestamps are to be updated is specified via
-an open file descriptor,
-.IR fd .
-.PP
-For both calls, the new file timestamps are specified in the array
-.IR times :
-.I times[0]
-specifies the new "last access time" (\fIatime\fP);
-.I times[1]
-specifies the new "last modification time" (\fImtime\fP).
-Each of the elements of
-.I times
-specifies a time as the number of seconds and nanoseconds
-since the Epoch, 1970-01-01 00:00:00 +0000 (UTC).
-This information is conveyed in a
-.BR timespec (3)
-structure.
-.PP
-Updated file timestamps are set to the greatest value
-supported by the filesystem that is not greater than the specified time.
-.PP
-If the
-.I tv_nsec
-field of one of the
-.I timespec
-structures has the special value
-.BR UTIME_NOW ,
-then the corresponding file timestamp is set to the current time.
-If the
-.I tv_nsec
-field of one of the
-.I timespec
-structures has the special value
-.BR UTIME_OMIT ,
-then the corresponding file timestamp is left unchanged.
-In both of these cases, the value of the corresponding
-.I tv_sec
-.\" 2.6.22 was broken: it is not ignored
-field is ignored.
-.PP
-If
-.I times
-is NULL, then both timestamps are set to the current time.
-.\"
-.PP
-The status change time (ctime) will be set to the current time, even if the
-other time stamps don't actually change.
-.SS Permissions requirements
-To set both file timestamps to the current time (i.e.,
-.I times
-is NULL, or both
-.I tv_nsec
-fields specify
-.BR UTIME_NOW ),
-either:
-.IP \[bu] 3
-the caller must have write access to the file;
-.\" 2.6.22 was broken here -- for futimens() the check is
-.\" based on whether or not the file descriptor is writable,
-.\" not on whether the caller's effective UID has write
-.\" permission for the file referred to by the descriptor.
-.IP \[bu]
-the caller's effective user ID must match the owner of the file; or
-.IP \[bu]
-the caller must have appropriate privileges.
-.PP
-To make any change other than setting both timestamps to the
-current time (i.e.,
-.I times
-is not NULL, and neither
-.I tv_nsec
-field is
-.B UTIME_NOW
-.\" 2.6.22 was broken here:
-.\" both must be something other than *either* UTIME_OMIT *or* UTIME_NOW.
-and neither
-.I tv_nsec
-field is
-.BR UTIME_OMIT ),
-either condition 2 or 3 above must apply.
-.PP
-If both
-.I tv_nsec
-fields are specified as
-.BR UTIME_OMIT ,
-then no file ownership or permission checks are performed,
-and the file timestamps are not modified,
-but other error conditions may still be detected.
-.\"
-.\"
-.SS utimensat() specifics
-If
-.I pathname
-is relative, then by default it is interpreted relative to the
-directory referred to by the open file descriptor,
-.I dirfd
-(rather than relative to the current working directory of
-the calling process, as is done by
-.BR utimes (2)
-for a relative pathname).
-See
-.BR openat (2)
-for an explanation of why this can be useful.
-.PP
-If
-.I pathname
-is relative and
-.I dirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I pathname
-is interpreted relative to the current working
-directory of the calling process (like
-.BR utimes (2)).
-.PP
-If
-.I pathname
-is absolute, then
-.I dirfd
-is ignored.
-.PP
-The
-.I flags
-field is a bit mask that may be 0, or include the following constant,
-defined in
-.IR <fcntl.h> :
-.TP
-.B AT_SYMLINK_NOFOLLOW
-If
-.I pathname
-specifies a symbolic link, then update the timestamps of the link,
-rather than the file to which it refers.
-.SH RETURN VALUE
-On success,
-.BR utimensat ()
-and
-.BR futimens ()
-return 0.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-.I times
-is NULL,
-or both
-.I tv_nsec
-values are
-.BR UTIME_NOW ,
-and the effective user ID of the caller does not match
-the owner of the file,
-the caller does not have write access to the file,
-and the caller is not privileged
-(Linux: does not have either the
-.B CAP_FOWNER
-or the
-.B CAP_DAC_OVERRIDE
-capability).
-.\" But Linux 2.6.22 was broken here.
-.\" Traditionally, utime()/utimes() gives the error EACCES for the case
-.\" where the timestamp pointer argument is NULL (i.e., set both timestamps
-.\" to the current time), and the file is owned by a user other than the
-.\" effective UID of the caller, and the file is not writable by the
-.\" effective UID of the program. utimensat() also gives this error in the
-.\" same case. However, in the same circumstances, when utimensat() is
-.\" given a 'times' array in which both tv_nsec fields are UTIME_NOW, which
-.\" provides equivalent functionality to specifying 'times' as NULL, the
-.\" call succeeds. It should fail with the error EACCES in this case.
-.\"
-.\" POSIX.1-2008 has the following:
-.\" .TP
-.\" .B EACCES
-.\" .RB ( utimensat ())
-.\" .I fd
-.\" was not opened with
-.\" .B O_SEARCH
-.\" and the permissions of the directory to which
-.\" .I fd
-.\" refers do not allow searches.
-.\" EXT2_IMMUTABLE_FL and similar flags for other filesystems.
-.TP
-.B EBADF
-.RB ( futimens ())
-.I fd
-is not a valid file descriptor.
-.TP
-.B EBADF
-.RB ( utimensat ())
-.I pathname
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B EFAULT
-.I times
-pointed to an invalid address; or,
-.I dirfd
-was
-.BR AT_FDCWD ,
-and
-.I pathname
-is NULL or an invalid address.
-.TP
-.B EINVAL
-Invalid value in
-.IR flags .
-.TP
-.B EINVAL
-Invalid value in one of the
-.I tv_nsec
-fields (value outside range [0, 999,999,999], and not
-.B UTIME_NOW
-or
-.BR UTIME_OMIT );
-or an invalid value in one of the
-.I tv_sec
-fields.
-.TP
-.B EINVAL
-.\" SUSv4 does not specify this error.
-.I pathname
-is NULL,
-.I dirfd
-is not
-.BR AT_FDCWD ,
-and
-.I flags
-contains
-.BR AT_SYMLINK_NOFOLLOW .
-.TP
-.B ELOOP
-.RB ( utimensat ())
-Too many symbolic links were encountered in resolving
-.IR pathname .
-.TP
-.B ENAMETOOLONG
-.RB ( utimensat ())
-.I pathname
-is too long.
-.TP
-.B ENOENT
-.RB ( utimensat ())
-A component of
-.I pathname
-does not refer to an existing directory or file,
-or
-.I pathname
-is an empty string.
-.TP
-.B ENOTDIR
-.RB ( utimensat ())
-.I pathname
-is a relative pathname, but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a file descriptor referring to a directory;
-or, one of the prefix components of
-.I pathname
-is not a directory.
-.TP
-.B EPERM
-The caller attempted to change one or both timestamps to a value
-other than the current time,
-or to change one of the timestamps to the current time while
-leaving the other timestamp unchanged,
-(i.e.,
-.I times
-is not NULL, neither
-.I tv_nsec
-field is
-.BR UTIME_NOW ,
-and neither
-.I tv_nsec
-field is
-.BR UTIME_OMIT )
-and either:
-.RS
-.IP \[bu] 3
-the caller's effective user ID does not match the owner of file,
-and the caller is not privileged
-(Linux: does not have the
-.B CAP_FOWNER
-capability); or,
-.IP \[bu]
-.\" Linux 2.6.22 was broken here:
-.\" it was not consistent with the old utimes() implementation,
-.\" since the case when both tv_nsec fields are UTIME_NOW, was not
-.\" treated like the (times == NULL) case.
-the file is marked append-only or immutable (see
-.BR chattr (1)).
-.\" EXT2_IMMUTABLE_FL EXT_APPEND_FL and similar flags for
-.\" other filesystems.
-.\"
-.\" Why the inconsistency (which is described under NOTES) between
-.\" EACCES and EPERM, where only EPERM tests for append-only.
-.\" (This was also so for the older utimes() implementation.)
-.RE
-.TP
-.B EROFS
-The file is on a read-only filesystem.
-.TP
-.B ESRCH
-.RB ( utimensat ())
-Search permission is denied for one of the prefix components of
-.IR pathname .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR utimensat (),
-.BR futimens ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-.SS C library/kernel ABI differences
-On Linux,
-.BR futimens ()
-is a library function implemented on top of the
-.BR utimensat ()
-system call.
-To support this, the Linux
-.BR utimensat ()
-system call implements a nonstandard feature: if
-.I pathname
-is NULL, then the call modifies the timestamps of
-the file referred to by the file descriptor
-.I dirfd
-(which may refer to any type of file).
-Using this feature, the call
-.I "futimens(fd,\ times)"
-is implemented as:
-.PP
-.in +4n
-.EX
-utimensat(fd, NULL, times, 0);
-.EE
-.in
-.PP
-Note, however, that the glibc wrapper for
-.BR utimensat ()
-disallows passing NULL as the value for
-.IR pathname :
-the wrapper function returns the error
-.B EINVAL
-in this case.
-.SH STANDARDS
-POSIX.1-2008.
-.SH VERSIONS
-.TP
-.BR utimensat ()
-Linux 2.6.22,
-glibc 2.6.
-POSIX.1-2008.
-.TP
-.BR futimens ()
-glibc 2.6.
-POSIX.1-2008.
-.SH NOTES
-.BR utimensat ()
-obsoletes
-.BR futimesat (2).
-.PP
-On Linux, timestamps cannot be changed for a file marked immutable,
-and the only change permitted for files marked append-only is to
-set the timestamps to the current time.
-(This is consistent with the historical behavior of
-.BR utime (2)
-and
-.BR utimes (2)
-on Linux.)
-.PP
-If both
-.I tv_nsec
-fields are specified as
-.BR UTIME_OMIT ,
-then the Linux implementation of
-.BR utimensat ()
-succeeds even if the file referred to by
-.I dirfd
-and
-.I pathname
-does not exist.
-.SH BUGS
-Several bugs afflict
-.BR utimensat ()
-and
-.BR futimens ()
-before Linux 2.6.26.
-These bugs are either nonconformances with the POSIX.1 draft specification
-or inconsistencies with historical Linux behavior.
-.IP \[bu] 3
-POSIX.1 specifies that if one of the
-.I tv_nsec
-fields has the value
-.B UTIME_NOW
-or
-.BR UTIME_OMIT ,
-then the value of the corresponding
-.I tv_sec
-field should be ignored.
-Instead, the value of the
-.I tv_sec
-field is required to be 0 (or the error
-.B EINVAL
-results).
-.IP \[bu]
-Various bugs mean that for the purposes of permission checking,
-the case where both
-.I tv_nsec
-fields are set to
-.B UTIME_NOW
-isn't always treated the same as specifying
-.I times
-as NULL,
-and the case where one
-.I tv_nsec
-value is
-.B UTIME_NOW
-and the other is
-.B UTIME_OMIT
-isn't treated the same as specifying
-.I times
-as a pointer to an array of structures containing arbitrary time values.
-As a result, in some cases:
-a) file timestamps can be updated by a process that shouldn't have
-permission to perform updates;
-b) file timestamps can't be updated by a process that should have
-permission to perform updates; and
-c) the wrong
-.I errno
-value is returned in case of an error.
-.\" Below, the long description of the errors from the previous bullet
-.\" point (abridged because it's too much detail for a man page).
-.\" .IP *
-.\" If one of the
-.\" .I tv_nsec
-.\" fields is
-.\" .BR UTIME_OMIT
-.\" and the other is
-.\" .BR UTIME_NOW ,
-.\" then the error
-.\" .B EPERM
-.\" should occur if the process's effective user ID does not match
-.\" the file owner and the process is not privileged.
-.\" Instead, the call successfully changes one of the timestamps.
-.\" .IP *
-.\" If file is not writable by the effective user ID of the process and
-.\" the process's effective user ID does not match the file owner and
-.\" the process is not privileged,
-.\" and
-.\" .I times
-.\" is NULL, then the error
-.\" .B EACCES
-.\" results.
-.\" This error should also occur if
-.\" .I times
-.\" points to an array of structures in which both
-.\" .I tv_nsec
-.\" fields are
-.\" .BR UTIME_NOW .
-.\" Instead the call succeeds.
-.\" .IP *
-.\" If a file is marked as append-only (see
-.\" .BR chattr (1)),
-.\" then Linux traditionally
-.\" (i.e.,
-.\" .BR utime (2),
-.\" .BR utimes (2)),
-.\" permits a NULL
-.\" .I times
-.\" argument to be used in order to update both timestamps to the current time.
-.\" For consistency,
-.\" .BR utimensat ()
-.\" and
-.\" .BR futimens ()
-.\" should also produce the same result when given a
-.\" .I times
-.\" argument that points to an array of structures in which both
-.\" .I tv_nsec
-.\" fields are
-.\" .BR UTIME_NOW .
-.\" Instead, the call fails with the error
-.\" .BR EPERM .
-.\" .IP *
-.\" If a file is marked as immutable (see
-.\" .BR chattr (1)),
-.\" then Linux traditionally
-.\" (i.e.,
-.\" .BR utime (2),
-.\" .BR utimes (2)),
-.\" gives an
-.\" .B EACCES
-.\" error if
-.\" .I times
-.\" is NULL.
-.\" For consistency,
-.\" .BR utimensat ()
-.\" and
-.\" .BR futimens ()
-.\" should also produce the same result when given a
-.\" .I times
-.\" that points to an array of structures in which both
-.\" .I tv_nsec
-.\" fields are
-.\" .BR UTIME_NOW .
-.\" Instead, the call fails with the error
-.\" .BR EPERM .
-.IP \[bu]
-POSIX.1 says that a process that has \fIwrite access to the file\fP
-can make a call with
-.I times
-as NULL, or with
-.I times
-pointing to an array of structures in which both
-.I tv_nsec
-fields are
-.BR UTIME_NOW ,
-in order to update both timestamps to the current time.
-However,
-.BR futimens ()
-instead checks whether the
-.IR "access mode of the file descriptor allows writing" .
-.\" This means that a process with a file descriptor that allows
-.\" writing could change the timestamps of a file for which it
-.\" does not have write permission;
-.\" conversely, a process with a read-only file descriptor won't
-.\" be able to update the timestamps of a file,
-.\" even if it has write permission on the file.
-.SH SEE ALSO
-.BR chattr (1),
-.BR touch (1),
-.BR futimesat (2),
-.BR openat (2),
-.BR stat (2),
-.BR utimes (2),
-.BR futimes (3),
-.BR timespec (3),
-.BR inode (7),
-.BR path_resolution (7),
-.BR symlink (7)
diff --git a/man2/utimes.2 b/man2/utimes.2
deleted file mode 100644
index 04372d49b..000000000
--- a/man2/utimes.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/utime.2
diff --git a/man2/vfork.2 b/man2/vfork.2
deleted file mode 100644
index 3a65010ca..000000000
--- a/man2/vfork.2
+++ /dev/null
@@ -1,317 +0,0 @@
-.\" Copyright (c) 1999 Andries Brouwer (aeb@cwi.nl), 1 Nov 1999
-.\" and Copyright 2006, 2012, 2017 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 1999-11-10: Merged text taken from the page contributed by
-.\" Reed H. Petty (rhp@draper.net)
-.\"
-.TH vfork 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-vfork \- create a child process and block parent
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.B pid_t vfork(void);
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR vfork ():
-.nf
- Since glibc 2.12:
- (_XOPEN_SOURCE >= 500) && ! (_POSIX_C_SOURCE >= 200809L)
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE
- Before glibc 2.12:
- _BSD_SOURCE || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
-.fi
-.SH DESCRIPTION
-.SS Standard description
-(From POSIX.1)
-The
-.BR vfork ()
-function has the same effect as
-.BR fork (2),
-except that the behavior is undefined if the process created by
-.BR vfork ()
-either modifies any data other than a variable of type
-.I pid_t
-used to store the return value from
-.BR vfork (),
-or returns from the function in which
-.BR vfork ()
-was called, or calls any other function before successfully calling
-.BR _exit (2)
-or one of the
-.BR exec (3)
-family of functions.
-.SS Linux description
-.BR vfork (),
-just like
-.BR fork (2),
-creates a child process of the calling process.
-For details and return value and errors, see
-.BR fork (2).
-.PP
-.BR vfork ()
-is a special case of
-.BR clone (2).
-It is used to create new processes without copying the page tables of
-the parent process.
-It may be useful in performance-sensitive applications
-where a child is created which then immediately issues an
-.BR execve (2).
-.PP
-.BR vfork ()
-differs from
-.BR fork (2)
-in that the calling thread is suspended until the child terminates
-(either normally,
-by calling
-.BR _exit (2),
-or abnormally, after delivery of a fatal signal),
-or it makes a call to
-.BR execve (2).
-Until that point, the child shares all memory with its parent,
-including the stack.
-The child must not return from the current function or call
-.BR exit (3)
-(which would have the effect of calling exit handlers
-established by the parent process and flushing the parent's
-.BR stdio (3)
-buffers), but may call
-.BR _exit (2).
-.PP
-As with
-.BR fork (2),
-the child process created by
-.BR vfork ()
-inherits copies of various of the caller's process attributes
-(e.g., file descriptors, signal dispositions, and current working directory);
-the
-.BR vfork ()
-call differs only in the treatment of the virtual address space,
-as described above.
-.PP
-Signals sent to the parent
-arrive after the child releases the parent's memory
-(i.e., after the child terminates
-or calls
-.BR execve (2)).
-.SS Historic description
-Under Linux,
-.BR fork (2)
-is implemented using copy-on-write pages, so the only penalty incurred by
-.BR fork (2)
-is the time and memory required to duplicate the parent's page tables,
-and to create a unique task structure for the child.
-However, in the bad old days a
-.BR fork (2)
-would require making a complete copy of the caller's data space,
-often needlessly, since usually immediately afterward an
-.BR exec (3)
-is done.
-Thus, for greater efficiency, BSD introduced the
-.BR vfork ()
-system call, which did not fully copy the address space of
-the parent process, but borrowed the parent's memory and thread
-of control until a call to
-.BR execve (2)
-or an exit occurred.
-The parent process was suspended while the
-child was using its resources.
-The use of
-.BR vfork ()
-was tricky: for example, not modifying data
-in the parent process depended on knowing which variables were
-held in a register.
-.SH VERSIONS
-The requirements put on
-.BR vfork ()
-by the standards are weaker than those put on
-.BR fork (2),
-so an implementation where the two are synonymous is compliant.
-In particular, the programmer cannot rely on the parent
-remaining blocked until the child either terminates or calls
-.BR execve (2),
-and cannot rely on any specific behavior with respect to shared memory.
-.\" In AIXv3.1 vfork is equivalent to fork.
-.PP
-Some consider the semantics of
-.BR vfork ()
-to be an architectural blemish, and the 4.2BSD man page stated:
-"This system call will be eliminated when proper system sharing mechanisms
-are implemented.
-Users should not depend on the memory sharing semantics of
-.BR vfork ()
-as it will, in that case, be made synonymous to
-.BR fork (2).\c
-"
-However, even though modern memory management hardware
-has decreased the performance difference between
-.BR fork (2)
-and
-.BR vfork (),
-there are various reasons why Linux and other systems have retained
-.BR vfork ():
-.IP \[bu] 3
-Some performance-critical applications require the small performance
-advantage conferred by
-.BR vfork ().
-.IP \[bu]
-.BR vfork ()
-can be implemented on systems that lack a memory-management unit (MMU), but
-.BR fork (2)
-can't be implemented on such systems.
-(POSIX.1-2008 removed
-.BR vfork ()
-from the standard; the POSIX rationale for the
-.BR posix_spawn (3)
-function notes that that function,
-which provides functionality equivalent to
-.BR fork (2)+\c
-.BR exec (3),
-is designed to be implementable on systems that lack an MMU.)
-.\" http://stackoverflow.com/questions/4259629/what-is-the-difference-between-fork-and-vfork
-.\" http://developers.sun.com/solaris/articles/subprocess/subprocess.html
-.\" http://mailman.uclinux.org/pipermail/uclinux-dev/2009-April/000684.html
-.\"
-.IP \[bu]
-On systems where memory is constrained,
-.BR vfork ()
-avoids the need to temporarily commit memory (see the description of
-.I /proc/sys/vm/overcommit_memory
-in
-.BR proc (5))
-in order to execute a new program.
-(This can be especially beneficial where a large parent process wishes
-to execute a small helper program in a child process.)
-By contrast, using
-.BR fork (2)
-in this scenario requires either committing an amount of memory equal
-to the size of the parent process (if strict overcommitting is in force)
-or overcommitting memory with the risk that a process is terminated
-by the out-of-memory (OOM) killer.
-.SS Linux notes
-Fork handlers established using
-.BR pthread_atfork (3)
-are not called when a multithreaded program employing
-the NPTL threading library calls
-.BR vfork ().
-Fork handlers are called in this case in a program using the
-LinuxThreads threading library.
-(See
-.BR pthreads (7)
-for a description of Linux threading libraries.)
-.PP
-A call to
-.BR vfork ()
-is equivalent to calling
-.BR clone (2)
-with
-.I flags
-specified as:
-.PP
-.in +4n
-.EX
- CLONE_VM | CLONE_VFORK | SIGCHLD
-.EE
-.in
-.SH STANDARDS
-None.
-.SH HISTORY
-4.3BSD; POSIX.1-2001 (but marked OBSOLETE).
-POSIX.1-2008 removes the specification of
-.BR vfork ().
-.PP
-The
-.BR vfork ()
-system call appeared in 3.0BSD.
-.\" In the release notes for 4.2BSD Sam Leffler wrote: `vfork: Is still
-.\" present, but definitely on its way out'.
-In 4.4BSD it was made synonymous to
-.BR fork (2)
-but NetBSD introduced it again;
-see
-.UR http://www.netbsd.org\:/Documentation\:/kernel\:/vfork.html
-.UE .
-In Linux, it has been equivalent to
-.BR fork (2)
-until Linux 2.2.0-pre6 or so.
-Since Linux 2.2.0-pre9 (on i386, somewhat later on
-other architectures) it is an independent system call.
-Support was added in glibc 2.0.112.
-.\"
-.SH CAVEATS
-The child process should take care not to modify the memory in unintended ways,
-since such changes will be seen by the parent process once
-the child terminates or executes another program.
-In this regard, signal handlers can be especially problematic:
-if a signal handler that is invoked in the child of
-.BR vfork ()
-changes memory, those changes may result in an inconsistent process state
-from the perspective of the parent process
-(e.g., memory changes would be visible in the parent,
-but changes to the state of open file descriptors would not be visible).
-.PP
-When
-.BR vfork ()
-is called in a multithreaded process,
-only the calling thread is suspended until the child terminates
-or executes a new program.
-This means that the child is sharing an address space with other running code.
-This can be dangerous if another thread in the parent process
-changes credentials (using
-.BR setuid (2)
-or similar),
-since there are now two processes with different privilege levels
-running in the same address space.
-As an example of the dangers,
-suppose that a multithreaded program running as root creates a child using
-.BR vfork ().
-After the
-.BR vfork (),
-a thread in the parent process drops the process to an unprivileged user
-in order to run some untrusted code
-(e.g., perhaps via plug-in opened with
-.BR dlopen (3)).
-In this case, attacks are possible where the parent process uses
-.BR mmap (2)
-to map in code that will be executed by the privileged child process.
-.\"
-.SH BUGS
-Details of the signal handling are obscure and differ between systems.
-The BSD man page states:
-"To avoid a possible deadlock situation, processes that are children
-in the middle of a
-.BR vfork ()
-are never sent
-.B SIGTTOU
-or
-.B SIGTTIN
-signals; rather, output or
-.IR ioctl s
-are allowed and input attempts result in an end-of-file indication."
-.\"
-.\" As far as I can tell, the following is not true in Linux 2.6.19:
-.\" Currently (Linux 2.3.25),
-.\" .BR strace (1)
-.\" cannot follow
-.\" .BR vfork ()
-.\" and requires a kernel patch.
-.SH SEE ALSO
-.BR clone (2),
-.BR execve (2),
-.BR _exit (2),
-.BR fork (2),
-.BR unshare (2),
-.BR wait (2)
diff --git a/man2/vhangup.2 b/man2/vhangup.2
deleted file mode 100644
index 9bf304831..000000000
--- a/man2/vhangup.2
+++ /dev/null
@@ -1,58 +0,0 @@
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.\"
-.TH vhangup 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-vhangup \- virtually hangup the current terminal
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.B int vhangup(void);
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR vhangup ():
-.nf
- Since glibc 2.21:
-.\" commit 266865c0e7b79d4196e2cc393693463f03c90bd8
- _DEFAULT_SOURCE
- In glibc 2.19 and 2.20:
- _DEFAULT_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
- Up to and including glibc 2.19:
- _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
-.fi
-.SH DESCRIPTION
-.BR vhangup ()
-simulates a hangup on the current terminal.
-This call arranges for other
-users to have a \*(lqclean\*(rq terminal at login time.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EPERM
-The calling process has insufficient privilege to call
-.BR vhangup ();
-the
-.B CAP_SYS_TTY_CONFIG
-capability is required.
-.SH STANDARDS
-Linux.
-.SH SEE ALSO
-.BR init (1),
-.BR capabilities (7)
diff --git a/man2/vm86.2 b/man2/vm86.2
deleted file mode 100644
index 437f68fa7..000000000
--- a/man2/vm86.2
+++ /dev/null
@@ -1,58 +0,0 @@
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
-.\" Copyright 1997 Andries E. Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH vm86 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-vm86old, vm86 \- enter virtual 8086 mode
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/vm86.h>
-.PP
-.BI "int vm86old(struct vm86_struct *" info );
-.BI "int vm86(unsigned long " fn ", struct vm86plus_struct *" v86 );
-.fi
-.SH DESCRIPTION
-The system call
-.BR vm86 ()
-was introduced in Linux 0.97p2.
-In Linux 2.1.15 and 2.0.28, it was renamed to
-.BR vm86old (),
-and a new
-.BR vm86 ()
-was introduced.
-The definition of
-.I struct vm86_struct
-was changed
-in 1.1.8 and 1.1.9.
-.PP
-These calls cause the process to enter VM86 mode (virtual-8086 in Intel
-literature), and are used by
-.BR dosemu .
-.PP
-VM86 mode is an emulation of real mode within a protected mode task.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-This return value is specific to i386 and indicates a problem with getting
-user-space data.
-.TP
-.B ENOSYS
-This return value indicates the call is not implemented on the present
-architecture.
-.TP
-.B EPERM
-Saved kernel stack exists.
-(This is a kernel sanity check; the saved
-stack should exist only within vm86 mode itself.)
-.SH STANDARDS
-Linux on 32-bit Intel processors.
diff --git a/man2/vm86old.2 b/man2/vm86old.2
deleted file mode 100644
index bf2581d4c..000000000
--- a/man2/vm86old.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/vm86.2
diff --git a/man2/vmsplice.2 b/man2/vmsplice.2
deleted file mode 100644
index 569d0ddd1..000000000
--- a/man2/vmsplice.2
+++ /dev/null
@@ -1,162 +0,0 @@
-.\" This manpage is Copyright (C) 2006 Jens Axboe
-.\" and Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH vmsplice 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-vmsplice \- splice user pages to/from a pipe
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <fcntl.h>
-.PP
-.BI "ssize_t vmsplice(int " fd ", const struct iovec *" iov ,
-.BI " size_t " nr_segs ", unsigned int " flags );
-.fi
-.\" Return type was long before glibc 2.7
-.SH DESCRIPTION
-.\" Linus: vmsplice() system call to basically do a "write to
-.\" the buffer", but using the reference counting and VM traversal
-.\" to actually fill the buffer. This means that the user needs to
-.\" be careful not to reuse the user-space buffer it spliced into
-.\" the kernel-space one (contrast this to "write()", which copies
-.\" the actual data, and you can thus reuse the buffer immediately
-.\" after a successful write), but that is often easy to do.
-If
-.I fd
-is opened for writing, the
-.BR vmsplice ()
-system call maps
-.I nr_segs
-ranges of user memory described by
-.I iov
-into a pipe.
-If
-.I fd
-is opened for reading,
-.\" Since Linux 2.6.23
-.\" commit 6a14b90bb6bc7cd83e2a444bf457a2ea645cbfe7
-the
-.BR vmsplice ()
-system call fills
-.I nr_segs
-ranges of user memory described by
-.I iov
-from a pipe.
-The file descriptor
-.I fd
-must refer to a pipe.
-.PP
-The pointer
-.I iov
-points to an array of
-.I iovec
-structures as described in
-.BR iovec (3type).
-.PP
-The
-.I flags
-argument is a bit mask that is composed by ORing together
-zero or more of the following values:
-.TP
-.B SPLICE_F_MOVE
-Unused for
-.BR vmsplice ();
-see
-.BR splice (2).
-.TP
-.B SPLICE_F_NONBLOCK
-.\" Not used for vmsplice
-.\" May be in the future -- therefore EAGAIN
-Do not block on I/O; see
-.BR splice (2)
-for further details.
-.TP
-.B SPLICE_F_MORE
-Currently has no effect for
-.BR vmsplice (),
-but may be implemented in the future; see
-.BR splice (2).
-.TP
-.B SPLICE_F_GIFT
-The user pages are a gift to the kernel.
-The application may not modify this memory ever,
-.\" FIXME . Explain the following line in a little more detail:
-otherwise the page cache and on-disk data may differ.
-Gifting pages to the kernel means that a subsequent
-.BR splice (2)
-.B SPLICE_F_MOVE
-can successfully move the pages;
-if this flag is not specified, then a subsequent
-.BR splice (2)
-.B SPLICE_F_MOVE
-must copy the pages.
-Data must also be properly page aligned, both in memory and length.
-.\" FIXME
-.\" It looks like the page-alignment requirement went away with
-.\" commit bd1a68b59c8e3bce45fb76632c64e1e063c3962d
-.\"
-.\" .... if we expect to later SPLICE_F_MOVE to the cache.
-.SH RETURN VALUE
-Upon successful completion,
-.BR vmsplice ()
-returns the number of bytes transferred to the pipe.
-On error,
-.BR vmsplice ()
-returns \-1 and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-.B SPLICE_F_NONBLOCK
-was specified in
-.IR flags ,
-and the operation would block.
-.TP
-.B EBADF
-.I fd
-either not valid, or doesn't refer to a pipe.
-.TP
-.B EINVAL
-.I nr_segs
-is greater than
-.BR IOV_MAX ;
-or memory not aligned if
-.B SPLICE_F_GIFT
-set.
-.TP
-.B ENOMEM
-Out of memory.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.17,
-glibc 2.5.
-.SH NOTES
-.BR vmsplice ()
-follows the other vectorized read/write type functions when it comes to
-limitations on the number of segments being passed in.
-This limit is
-.B IOV_MAX
-as defined in
-.IR <limits.h> .
-Currently,
-.\" UIO_MAXIOV in kernel source
-this limit is 1024.
-.PP
-.\" commit 6a14b90bb6bc7cd83e2a444bf457a2ea645cbfe7
-.BR vmsplice ()
-really supports true splicing only from user memory to a pipe.
-In the opposite direction, it actually just copies the data to user space.
-But this makes the interface nice and symmetric and enables people to build on
-.BR vmsplice ()
-with room for future improvement in performance.
-.SH SEE ALSO
-.BR splice (2),
-.BR tee (2),
-.BR pipe (7)
diff --git a/man2/vserver.2 b/man2/vserver.2
deleted file mode 100644
index 5d25ea6ce..000000000
--- a/man2/vserver.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/unimplemented.2
diff --git a/man2/wait.2 b/man2/wait.2
deleted file mode 100644
index d50e2fd58..000000000
--- a/man2/wait.2
+++ /dev/null
@@ -1,720 +0,0 @@
-.\" Copyright (c) 1993 by Thomas Koenig <ig25@rz.uni-karlsruhe.de>
-.\" and Copyright (c) 2004 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 13:30:06 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Sun Aug 21 17:42:42 1994 by Rik Faith <faith@cs.unc.edu>
-.\" (Thanks to Koen Holtman <koen@win.tue.nl>)
-.\" Modified Wed May 17 15:54:12 1995 by Rik Faith <faith@cs.unc.edu>
-.\" To remove *'s from status in macros (Thanks to Michael Shields).
-.\" Modified as suggested by Nick Duffek <nsd@bbc.com>, aeb, 960426
-.\" Modified Mon Jun 23 14:09:52 1997 by aeb - add EINTR.
-.\" Modified Thu Nov 26 02:12:45 1998 by aeb - add SIGCHLD stuff.
-.\" Modified Mon Jul 24 21:37:38 2000 by David A. Wheeler
-.\" <dwheeler@dwheeler.com> - noted thread issues.
-.\" Modified 26 Jun 01 by Michael Kerrisk
-.\" Added __WCLONE, __WALL, and __WNOTHREAD descriptions
-.\" Modified 2001-09-25, aeb
-.\" Modified 26 Jun 01 by Michael Kerrisk, <mtk.manpages@gmail.com>
-.\" Updated notes on setting disposition of SIGCHLD to SIG_IGN
-.\" 2004-11-11, mtk
-.\" Added waitid(2); added WCONTINUED and WIFCONTINUED()
-.\" Added text on SA_NOCLDSTOP
-.\" Updated discussion of SA_NOCLDWAIT to reflect 2.6 behavior
-.\" Much other text rewritten
-.\" 2005-05-10, mtk, __W* flags can't be used with waitid()
-.\" 2008-07-04, mtk, removed erroneous text about SA_NOCLDSTOP
-.\"
-.TH wait 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wait, waitpid, waitid \- wait for process to change state
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/wait.h>
-.PP
-.BI "pid_t wait(int *_Nullable " "wstatus" );
-.BI "pid_t waitpid(pid_t " pid ", int *_Nullable " wstatus ", int " options );
-.PP
-.BI "int waitid(idtype_t " idtype ", id_t " id \
-", siginfo_t *" infop ", int " options );
- /* This is the glibc and POSIX interface; see
- NOTES for information on the raw system call. */
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR waitid ():
-.nf
- Since glibc 2.26:
- _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200809L
-.\" (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED)
- glibc 2.25 and earlier:
- _XOPEN_SOURCE
- || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
- || /* glibc <= 2.19: */ _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-All of these system calls are used to wait for state changes
-in a child of the calling process, and obtain information
-about the child whose state has changed.
-A state change is considered to be: the child terminated;
-the child was stopped by a signal; or the child was resumed by a signal.
-In the case of a terminated child, performing a wait allows
-the system to release the resources associated with the child;
-if a wait is not performed, then the terminated child remains in
-a "zombie" state (see NOTES below).
-.PP
-If a child has already changed state, then these calls return immediately.
-Otherwise, they block until either a child changes state or
-a signal handler interrupts the call (assuming that system calls
-are not automatically restarted using the
-.B SA_RESTART
-flag of
-.BR sigaction (2)).
-In the remainder of this page, a child whose state has changed
-and which has not yet been waited upon by one of these system
-calls is termed
-.IR waitable .
-.SS wait() and waitpid()
-The
-.BR wait ()
-system call suspends execution of the calling thread until one of its
-children terminates.
-The call
-.I wait(&wstatus)
-is equivalent to:
-.PP
-.in +4n
-.EX
-waitpid(\-1, &wstatus, 0);
-.EE
-.in
-.PP
-The
-.BR waitpid ()
-system call suspends execution of the calling thread until a
-child specified by
-.I pid
-argument has changed state.
-By default,
-.BR waitpid ()
-waits only for terminated children, but this behavior is modifiable
-via the
-.I options
-argument, as described below.
-.PP
-The value of
-.I pid
-can be:
-.TP
-.RB "< " \-1
-meaning wait for any child process whose process group ID is
-equal to the absolute value of
-.IR pid .
-.TP
-.B \-1
-meaning wait for any child process.
-.TP
-.B 0
-meaning wait for any child process whose process group ID is
-equal to that of the calling process at the time of the call to
-.BR waitpid ().
-.TP
-.RB "> " 0
-meaning wait for the child whose process ID is equal to the
-value of
-.IR pid .
-.PP
-The value of
-.I options
-is an OR of zero or more of the following constants:
-.TP
-.B WNOHANG
-return immediately if no child has exited.
-.TP
-.B WUNTRACED
-also return if a child has stopped
-(but not traced via
-.BR ptrace (2)).
-Status for
-.I traced
-children which have stopped is provided
-even if this option is not specified.
-.TP
-.BR WCONTINUED " (since Linux 2.6.10)"
-also return if a stopped child has been resumed by delivery of
-.BR SIGCONT .
-.PP
-(For Linux-only options, see below.)
-.PP
-If
-.I wstatus
-is not NULL,
-.BR wait ()
-and
-.BR waitpid ()
-store status information in the \fIint\fP to which it points.
-This integer can be inspected with the following macros (which
-take the integer itself as an argument, not a pointer to it,
-as is done in
-.BR wait ()
-and
-.BR waitpid ()!):
-.TP
-.BI WIFEXITED( wstatus )
-returns true if the child terminated normally, that is,
-by calling
-.BR exit (3)
-or
-.BR _exit (2),
-or by returning from main().
-.TP
-.BI WEXITSTATUS( wstatus )
-returns the exit status of the child.
-This consists of the least significant 8 bits of the
-.I status
-argument that the child specified in a call to
-.BR exit (3)
-or
-.BR _exit (2)
-or as the argument for a return statement in main().
-This macro should be employed only if
-.B WIFEXITED
-returned true.
-.TP
-.BI WIFSIGNALED( wstatus )
-returns true if the child process was terminated by a signal.
-.TP
-.BI WTERMSIG( wstatus )
-returns the number of the signal that caused the child process to
-terminate.
-This macro should be employed only if
-.B WIFSIGNALED
-returned true.
-.TP
-.BI WCOREDUMP( wstatus )
-returns true if the child produced a core dump (see
-.BR core (5)).
-This macro should be employed only if
-.B WIFSIGNALED
-returned true.
-.IP
-This macro is not specified in POSIX.1-2001 and is not available on
-some UNIX implementations (e.g., AIX, SunOS).
-Therefore, enclose its use inside
-.IR "#ifdef WCOREDUMP ... #endif" .
-.TP
-.BI WIFSTOPPED( wstatus )
-returns true if the child process was stopped by delivery of a signal;
-this is possible only if the call was done using
-.B WUNTRACED
-or when the child is being traced (see
-.BR ptrace (2)).
-.TP
-.BI WSTOPSIG( wstatus )
-returns the number of the signal which caused the child to stop.
-This macro should be employed only if
-.B WIFSTOPPED
-returned true.
-.TP
-.BI WIFCONTINUED( wstatus )
-(since Linux 2.6.10)
-returns true if the child process was resumed by delivery of
-.BR SIGCONT .
-.SS waitid()
-The
-.BR waitid ()
-system call (available since Linux 2.6.9) provides more precise
-control over which child state changes to wait for.
-.PP
-The
-.I idtype
-and
-.I id
-arguments select the child(ren) to wait for, as follows:
-.TP
-.IR idtype " == " \fBP_PID\fP
-Wait for the child whose process ID matches
-.IR id .
-.TP
-.IR idtype " == " \fBP_PIDFD\fP " (since Linux 5.4)"
-.\" commit 3695eae5fee0605f316fbaad0b9e3de791d7dfaf
-Wait for the child referred to by the PID file descriptor specified in
-.IR id .
-(See
-.BR pidfd_open (2)
-for further information on PID file descriptors.)
-.TP
-.IR idtype " == " \fBP_PGID\fP
-Wait for any child whose process group ID matches
-.IR id .
-Since Linux 5.4,
-.\" commit 821cc7b0b205c0df64cce59aacc330af251fa8f7
-if
-.I id
-is zero, then wait for any child that is in the same process group
-as the caller's process group at the time of the call.
-.TP
-.IR idtype " == " \fBP_ALL\fP
-Wait for any child;
-.I id
-is ignored.
-.PP
-The child state changes to wait for are specified by ORing
-one or more of the following flags in
-.IR options :
-.TP
-.B WEXITED
-Wait for children that have terminated.
-.TP
-.B WSTOPPED
-Wait for children that have been stopped by delivery of a signal.
-.TP
-.B WCONTINUED
-Wait for (previously stopped) children that have been
-resumed by delivery of
-.BR SIGCONT .
-.PP
-The following flags may additionally be ORed in
-.IR options :
-.TP
-.B WNOHANG
-As for
-.BR waitpid ().
-.TP
-.B WNOWAIT
-Leave the child in a waitable state; a later wait call
-can be used to again retrieve the child status information.
-.PP
-Upon successful return,
-.BR waitid ()
-fills in the following fields of the
-.I siginfo_t
-structure pointed to by
-.IR infop :
-.TP
-\fIsi_pid\fP
-The process ID of the child.
-.TP
-\fIsi_uid\fP
-The real user ID of the child.
-(This field is not set on most other implementations.)
-.TP
-\fIsi_signo\fP
-Always set to
-.BR SIGCHLD .
-.TP
-\fIsi_status\fP
-Either the exit status of the child, as given to
-.BR _exit (2)
-(or
-.BR exit (3)),
-or the signal that caused the child to terminate, stop, or continue.
-The
-.I si_code
-field can be used to determine how to interpret this field.
-.TP
-\fIsi_code\fP
-Set to one of:
-.B CLD_EXITED
-(child called
-.BR _exit (2));
-.B CLD_KILLED
-(child killed by signal);
-.B CLD_DUMPED
-(child killed by signal, and dumped core);
-.B CLD_STOPPED
-(child stopped by signal);
-.B CLD_TRAPPED
-(traced child has trapped); or
-.B CLD_CONTINUED
-(child continued by
-.BR SIGCONT ).
-.PP
-If
-.B WNOHANG
-was specified in
-.I options
-and there were no children in a waitable state, then
-.BR waitid ()
-returns 0 immediately and
-the state of the
-.I siginfo_t
-structure pointed to by
-.I infop
-depends on the implementation.
-To (portably) distinguish this case from that where a child was in a
-waitable state, zero out the
-.I si_pid
-field before the call and check for a nonzero value in this field
-after the call returns.
-.PP
-POSIX.1-2008 Technical Corrigendum 1 (2013) adds the requirement that when
-.B WNOHANG
-is specified in
-.I options
-and there were no children in a waitable state, then
-.BR waitid ()
-should zero out the
-.I si_pid
-and
-.I si_signo
-fields of the structure.
-On Linux and other implementations that adhere to this requirement,
-it is not necessary to zero out the
-.I si_pid
-field before calling
-.BR waitid ().
-However,
-not all implementations follow the POSIX.1 specification on this point.
-.\" POSIX.1-2001 leaves this possibility unspecified; most
-.\" implementations (including Linux) zero out the structure
-.\" in this case, but at least one implementation (AIX 5.1)
-.\" does not -- MTK Nov 04
-.SH RETURN VALUE
-.BR wait ():
-on success, returns the process ID of the terminated child;
-on failure, \-1 is returned.
-.PP
-.BR waitpid ():
-on success, returns the process ID of the child whose state has changed;
-if
-.B WNOHANG
-was specified and one or more child(ren) specified by
-.I pid
-exist, but have not yet changed state, then 0 is returned.
-On failure, \-1 is returned.
-.PP
-.BR waitid ():
-returns 0 on success or
-if
-.B WNOHANG
-was specified and no child(ren) specified by
-.I id
-has yet changed state;
-on failure, \-1 is returned.
-.\" FIXME As reported by Vegard Nossum, if infop is NULL, then waitid()
-.\" returns the PID of the child. Either this is a bug, or it is intended
-.\" behavior that needs to be documented. See my Jan 2009 LKML mail
-.\" "waitid() return value strangeness when infop is NULL".
-.PP
-On failure, each of these calls sets
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-The PID file descriptor specified in
-.I id
-is nonblocking and the process that it refers to has not terminated.
-.TP
-.B ECHILD
-(for
-.BR wait ())
-The calling process does not have any unwaited-for children.
-.TP
-.B ECHILD
-(for
-.BR waitpid ()
-or
-.BR waitid ())
-The process specified by
-.I pid
-.RB ( waitpid ())
-or
-.I idtype
-and
-.I id
-.RB ( waitid ())
-does not exist or is not a child of the calling process.
-(This can happen for one's own child if the action for
-.B SIGCHLD
-is set to
-.BR SIG_IGN .
-See also the \fILinux Notes\fP section about threads.)
-.TP
-.B EINTR
-.B WNOHANG
-was not set and an unblocked signal or a
-.B SIGCHLD
-was caught; see
-.BR signal (7).
-.TP
-.B EINVAL
-The
-.I options
-argument was invalid.
-.TP
-.B ESRCH
-(for
-.BR wait ()
-or
-.BR waitpid ())
-.I pid
-is equal to
-.BR INT_MIN .
-.SH VERSIONS
-.SS C library/kernel differences
-.BR wait ()
-is actually a library function that (in glibc) is implemented as a call to
-.BR wait4 (2).
-.PP
-On some architectures, there is no
-.BR waitpid ()
-system call;
-.\" e.g., i386 has the system call, but not x86-64
-instead, this interface is implemented via a C library
-wrapper function that calls
-.BR wait4 (2).
-.PP
-The raw
-.BR waitid ()
-system call takes a fifth argument, of type
-.IR "struct rusage\ *" .
-If this argument is non-NULL,
-then it is used to return resource usage information about the child,
-in the same manner as
-.BR wait4 (2).
-See
-.BR getrusage (2)
-for details.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-SVr4, 4.3BSD, POSIX.1-2001.
-.SH NOTES
-A child that terminates, but has not been waited for becomes a "zombie".
-The kernel maintains a minimal set of information about the zombie
-process (PID, termination status, resource usage information)
-in order to allow the parent to later perform a wait to obtain
-information about the child.
-As long as a zombie is not removed from the system via a wait,
-it will consume a slot in the kernel process table, and if
-this table fills, it will not be possible to create further processes.
-If a parent process terminates, then its "zombie" children (if any)
-are adopted by
-.BR init (1),
-(or by the nearest "subreaper" process as defined through the use of the
-.BR prctl (2)
-.B PR_SET_CHILD_SUBREAPER
-operation);
-.BR init (1)
-automatically performs a wait to remove the zombies.
-.PP
-POSIX.1-2001 specifies that if the disposition of
-.B SIGCHLD
-is set to
-.B SIG_IGN
-or the
-.B SA_NOCLDWAIT
-flag is set for
-.B SIGCHLD
-(see
-.BR sigaction (2)),
-then children that terminate do not become zombies and a call to
-.BR wait ()
-or
-.BR waitpid ()
-will block until all children have terminated, and then fail with
-.I errno
-set to
-.BR ECHILD .
-(The original POSIX standard left the behavior of setting
-.B SIGCHLD
-to
-.B SIG_IGN
-unspecified.
-Note that even though the default disposition of
-.B SIGCHLD
-is "ignore", explicitly setting the disposition to
-.B SIG_IGN
-results in different treatment of zombie process children.)
-.PP
-Linux 2.6 conforms to the POSIX requirements.
-However, Linux 2.4 (and earlier) does not:
-if a
-.BR wait ()
-or
-.BR waitpid ()
-call is made while
-.B SIGCHLD
-is being ignored, the call behaves just as though
-.B SIGCHLD
-were not being ignored, that is, the call blocks until the next child
-terminates and then returns the process ID and status of that child.
-.SS Linux notes
-In the Linux kernel, a kernel-scheduled thread is not a distinct
-construct from a process.
-Instead, a thread is simply a process
-that is created using the Linux-unique
-.BR clone (2)
-system call; other routines such as the portable
-.BR pthread_create (3)
-call are implemented using
-.BR clone (2).
-Before Linux 2.4, a thread was just a special case of a process,
-and as a consequence one thread could not wait on the children
-of another thread, even when the latter belongs to the same thread group.
-However, POSIX prescribes such functionality, and since Linux 2.4
-a thread can, and by default will, wait on children of other threads
-in the same thread group.
-.PP
-The following Linux-specific
-.I options
-are for use with children created using
-.BR clone (2);
-they can also, since Linux 4.7,
-.\" commit 91c4e8ea8f05916df0c8a6f383508ac7c9e10dba
-be used with
-.BR waitid ():
-.TP
-.B __WCLONE
-.\" since 0.99pl10
-Wait for "clone" children only.
-If omitted, then wait for "non-clone" children only.
-(A "clone" child is one which delivers no signal, or a signal other than
-.B SIGCHLD
-to its parent upon termination.)
-This option is ignored if
-.B __WALL
-is also specified.
-.TP
-.BR __WALL " (since Linux 2.4)"
-.\" since patch-2.3.48
-Wait for all children, regardless of
-type ("clone" or "non-clone").
-.TP
-.BR __WNOTHREAD " (since Linux 2.4)"
-.\" since patch-2.4.0-test8
-Do not wait for children of other threads in
-the same thread group.
-This was the default before Linux 2.4.
-.PP
-Since Linux 4.7,
-.\" commit bf959931ddb88c4e4366e96dd22e68fa0db9527c
-.\" prevents cases where an unreapable zombie is created if
-.\" /sbin/init doesn't use __WALL.
-the
-.B __WALL
-flag is automatically implied if the child is being ptraced.
-.SH BUGS
-According to POSIX.1-2008, an application calling
-.BR waitid ()
-must ensure that
-.I infop
-points to a
-.I siginfo_t
-structure (i.e., that it is a non-null pointer).
-On Linux, if
-.I infop
-is NULL,
-.BR waitid ()
-succeeds, and returns the process ID of the waited-for child.
-Applications should avoid relying on this inconsistent,
-nonstandard, and unnecessary feature.
-.SH EXAMPLES
-.\" fork.2 refers to this example program.
-The following program demonstrates the use of
-.BR fork (2)
-and
-.BR waitpid ().
-The program creates a child process.
-If no command-line argument is supplied to the program,
-then the child suspends its execution using
-.BR pause (2),
-to allow the user to send signals to the child.
-Otherwise, if a command-line argument is supplied,
-then the child exits immediately,
-using the integer supplied on the command line as the exit status.
-The parent process executes a loop that monitors the child using
-.BR waitpid (),
-and uses the W*() macros described above to analyze the wait status value.
-.PP
-The following shell session demonstrates the use of the program:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out &"
-Child PID is 32360
-[1] 32359
-.RB "$" " kill \-STOP 32360"
-stopped by signal 19
-.RB "$" " kill \-CONT 32360"
-continued
-.RB "$" " kill \-TERM 32360"
-killed by signal 15
-[1]+ Done ./a.out
-$
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (wait.c)
-.EX
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/wait.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int wstatus;
- pid_t cpid, w;
-\&
- cpid = fork();
- if (cpid == \-1) {
- perror("fork");
- exit(EXIT_FAILURE);
- }
-\&
- if (cpid == 0) { /* Code executed by child */
- printf("Child PID is %jd\en", (intmax_t) getpid());
- if (argc == 1)
- pause(); /* Wait for signals */
- _exit(atoi(argv[1]));
-\&
- } else { /* Code executed by parent */
- do {
- w = waitpid(cpid, &wstatus, WUNTRACED | WCONTINUED);
- if (w == \-1) {
- perror("waitpid");
- exit(EXIT_FAILURE);
- }
-\&
- if (WIFEXITED(wstatus)) {
- printf("exited, status=%d\en", WEXITSTATUS(wstatus));
- } else if (WIFSIGNALED(wstatus)) {
- printf("killed by signal %d\en", WTERMSIG(wstatus));
- } else if (WIFSTOPPED(wstatus)) {
- printf("stopped by signal %d\en", WSTOPSIG(wstatus));
- } else if (WIFCONTINUED(wstatus)) {
- printf("continued\en");
- }
- } while (!WIFEXITED(wstatus) && !WIFSIGNALED(wstatus));
- exit(EXIT_SUCCESS);
- }
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR _exit (2),
-.BR clone (2),
-.BR fork (2),
-.BR kill (2),
-.BR ptrace (2),
-.BR sigaction (2),
-.BR signal (2),
-.BR wait4 (2),
-.BR pthread_create (3),
-.BR core (5),
-.BR credentials (7),
-.BR signal (7)
diff --git a/man2/wait3.2 b/man2/wait3.2
deleted file mode 100644
index 097794b11..000000000
--- a/man2/wait3.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/wait4.2
diff --git a/man2/wait4.2 b/man2/wait4.2
deleted file mode 100644
index fe0c175f9..000000000
--- a/man2/wait4.2
+++ /dev/null
@@ -1,169 +0,0 @@
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\" and Copyright (c) 2004 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 13:32:44 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Mon Jun 23 14:09:52 1997 by aeb - add EINTR.
-.\" Modified Tue Jul 7 12:26:42 1998 by aeb - changed return value wait3
-.\" Modified 2004-11-11, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Rewrote much of this page, and removed much duplicated text,
-.\" replacing with pointers to wait.2
-.\"
-.TH wait4 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wait3, wait4 \- wait for process to change state, BSD style
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/wait.h>
-.PP
-.BI "pid_t wait3(int *_Nullable " "wstatus" ", int " options ,
-.BI " struct rusage *_Nullable " rusage );
-.BI "pid_t wait4(pid_t " pid ", int *_Nullable " wstatus ", int " options ,
-.BI " struct rusage *_Nullable " rusage );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR wait3 ():
-.nf
- Since glibc 2.26:
- _DEFAULT_SOURCE
- || (_XOPEN_SOURCE >= 500 &&
- ! (_POSIX_C_SOURCE >= 200112L
- || _XOPEN_SOURCE >= 600))
- From glibc 2.19 to glibc 2.25:
- _DEFAULT_SOURCE || _XOPEN_SOURCE >= 500
- glibc 2.19 and earlier:
- _BSD_SOURCE || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
-.fi
-.PP
-.BR wait4 ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-These functions are nonstandard; in new programs, the use of
-.BR waitpid (2)
-or
-.BR waitid (2)
-is preferable.
-.PP
-The
-.BR wait3 ()
-and
-.BR wait4 ()
-system calls are similar to
-.BR waitpid (2),
-but additionally return resource usage information about the
-child in the structure pointed to by
-.IR rusage .
-.PP
-Other than the use of the
-.I rusage
-argument, the following
-.BR wait3 ()
-call:
-.PP
-.in +4n
-.EX
-wait3(wstatus, options, rusage);
-.EE
-.in
-.PP
-is equivalent to:
-.PP
-.in +4n
-.EX
-waitpid(\-1, wstatus, options);
-.EE
-.in
-.PP
-Similarly, the following
-.BR wait4 ()
-call:
-.PP
-.in +4n
-.EX
-wait4(pid, wstatus, options, rusage);
-.EE
-.in
-.PP
-is equivalent to:
-.PP
-.in +4n
-.EX
-waitpid(pid, wstatus, options);
-.EE
-.in
-.PP
-In other words,
-.BR wait3 ()
-waits of any child, while
-.BR wait4 ()
-can be used to select a specific child, or children, on which to wait.
-See
-.BR wait (2)
-for further details.
-.PP
-If
-.I rusage
-is not NULL, the
-.I struct rusage
-to which it points will be filled with accounting information
-about the child.
-See
-.BR getrusage (2)
-for details.
-.SH RETURN VALUE
-As for
-.BR waitpid (2).
-.SH ERRORS
-As for
-.BR waitpid (2).
-.SH STANDARDS
-None.
-.SH HISTORY
-4.3BSD.
-.PP
-SUSv1 included a specification of
-.BR wait3 ();
-SUSv2 included
-.BR wait3 (),
-but marked it LEGACY;
-SUSv3 removed it.
-.PP
-Including
-.I <sys/time.h>
-is not required these days, but increases portability.
-(Indeed,
-.I <sys/resource.h>
-defines the
-.I rusage
-structure with fields of type
-.I struct timeval
-defined in
-.IR <sys/time.h> .)
-.SS C library/kernel differences
-On Linux,
-.BR wait3 ()
-is a library function implemented on top of the
-.BR wait4 ()
-system call.
-.SH SEE ALSO
-.BR fork (2),
-.BR getrusage (2),
-.BR sigaction (2),
-.BR signal (2),
-.BR wait (2),
-.BR signal (7)
diff --git a/man2/waitid.2 b/man2/waitid.2
deleted file mode 100644
index 0605b3543..000000000
--- a/man2/waitid.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/wait.2
diff --git a/man2/waitpid.2 b/man2/waitpid.2
deleted file mode 100644
index 0605b3543..000000000
--- a/man2/waitpid.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/wait.2
diff --git a/man2/write.2 b/man2/write.2
deleted file mode 100644
index 9cba91d88..000000000
--- a/man2/write.2
+++ /dev/null
@@ -1,329 +0,0 @@
-.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\" and Copyright (C) 1993 Michael Haardt, Ian Jackson.
-.\" and Copyright (C) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 13:35:59 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Sun Nov 28 17:19:01 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Sat Jan 13 12:58:08 1996 by Michael Haardt
-.\" <michael@cantor.informatik.rwth-aachen.de>
-.\" Modified Sun Jul 21 18:59:33 1996 by Andries Brouwer <aeb@cwi.nl>
-.\" 2001-12-13 added remark by Zack Weinberg
-.\" 2007-06-18 mtk:
-.\" Added details about seekable files and file offset.
-.\" Noted that write() may write less than 'count' bytes, and
-.\" gave some examples of why this might occur.
-.\" Noted what happens if write() is interrupted by a signal.
-.\"
-.TH write 2 (date) "Linux man-pages (unreleased)"
-.SH NAME
-write \- write to a file descriptor
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "ssize_t write(int " fd ", const void " buf [. count "], size_t " count );
-.fi
-.SH DESCRIPTION
-.BR write ()
-writes up to
-.I count
-bytes from the buffer starting at
-.I buf
-to the file referred to by the file descriptor
-.IR fd .
-.PP
-The number of bytes written may be less than
-.I count
-if, for example,
-there is insufficient space on the underlying physical medium, or the
-.B RLIMIT_FSIZE
-resource limit is encountered (see
-.BR setrlimit (2)),
-or the call was interrupted by a signal
-handler after having written less than
-.I count
-bytes.
-(See also
-.BR pipe (7).)
-.PP
-For a seekable file (i.e., one to which
-.BR lseek (2)
-may be applied, for example, a regular file)
-writing takes place at the file offset,
-and the file offset is incremented by
-the number of bytes actually written.
-If the file was
-.BR open (2)ed
-with
-.BR O_APPEND ,
-the file offset is first set to the end of the file before writing.
-The adjustment of the file offset and the write operation
-are performed as an atomic step.
-.PP
-POSIX requires that a
-.BR read (2)
-that can be proved to occur after a
-.BR write ()
-has returned will return the new data.
-Note that not all filesystems are POSIX conforming.
-.PP
-According to POSIX.1, if
-.I count
-is greater than
-.BR SSIZE_MAX ,
-the result is implementation-defined;
-see NOTES for the upper limit on Linux.
-.SH RETURN VALUE
-On success, the number of bytes written is returned.
-On error, \-1 is returned, and \fIerrno\fP is set
-to indicate the error.
-.PP
-Note that a successful
-.BR write ()
-may transfer fewer than
-.I count
-bytes.
-Such partial writes can occur for various reasons;
-for example, because there was insufficient space on the disk device
-to write all of the requested bytes, or because a blocked
-.BR write ()
-to a socket, pipe, or similar was interrupted by a signal handler
-after it had transferred some, but before it had transferred all
-of the requested bytes.
-In the event of a partial write, the caller can make another
-.BR write ()
-call to transfer the remaining bytes.
-The subsequent call will either transfer further bytes or
-may result in an error (e.g., if the disk is now full).
-.PP
-If \fIcount\fP is zero and
-.I fd
-refers to a regular file, then
-.BR write ()
-may return a failure status if one of the errors below is detected.
-If no errors are detected, or error detection is not performed,
-0 is returned without causing any other effect.
-If
-\fIcount\fP is zero and
-.I fd
-refers to a file other than a regular file,
-the results are not specified.
-.SH ERRORS
-.TP
-.B EAGAIN
-The file descriptor
-.I fd
-refers to a file other than a socket and has been marked nonblocking
-.RB ( O_NONBLOCK ),
-and the write would block.
-See
-.BR open (2)
-for further details on the
-.B O_NONBLOCK
-flag.
-.TP
-.BR EAGAIN " or " EWOULDBLOCK
-.\" Actually EAGAIN on Linux
-The file descriptor
-.I fd
-refers to a socket and has been marked nonblocking
-.RB ( O_NONBLOCK ),
-and the write would block.
-POSIX.1-2001 allows either error to be returned for this case,
-and does not require these constants to have the same value,
-so a portable application should check for both possibilities.
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor or is not open for writing.
-.TP
-.B EDESTADDRREQ
-.I fd
-refers to a datagram socket for which a peer address has not been set using
-.BR connect (2).
-.TP
-.B EDQUOT
-The user's quota of disk blocks on the filesystem containing the file
-referred to by
-.I fd
-has been exhausted.
-.TP
-.B EFAULT
-.I buf
-is outside your accessible address space.
-.TP
-.B EFBIG
-An attempt was made to write a file that exceeds the implementation-defined
-maximum file size or the process's file size limit,
-or to write at a position past the maximum allowed offset.
-.TP
-.B EINTR
-The call was interrupted by a signal before any data was written; see
-.BR signal (7).
-.TP
-.B EINVAL
-.I fd
-is attached to an object which is unsuitable for writing;
-or the file was opened with the
-.B O_DIRECT
-flag, and either the address specified in
-.IR buf ,
-the value specified in
-.IR count ,
-or the file offset is not suitably aligned.
-.TP
-.B EIO
-A low-level I/O error occurred while modifying the inode.
-This error may relate to the write-back of data written by an earlier
-.BR write (),
-which may have been issued to a different file descriptor on
-the same file.
-Since Linux 4.13, errors from write-back come
-with a promise that they
-.I may
-be reported by subsequent.
-.BR write ()
-requests, and
-.I will
-be reported by a subsequent
-.BR fsync (2)
-(whether or not they were also reported by
-.BR write ()).
-.\" commit 088737f44bbf6378745f5b57b035e57ee3dc4750
-An alternate cause of
-.B EIO
-on networked filesystems is when an advisory lock had been taken out
-on the file descriptor and this lock has been lost.
-See the
-.I "Lost locks"
-section of
-.BR fcntl (2)
-for further details.
-.TP
-.B ENOSPC
-The device containing the file referred to by
-.I fd
-has no room for the data.
-.TP
-.B EPERM
-The operation was prevented by a file seal; see
-.BR fcntl (2).
-.TP
-.B EPIPE
-.I fd
-is connected to a pipe or socket whose reading end is closed.
-When this happens the writing process will also receive a
-.B SIGPIPE
-signal.
-(Thus, the write return value is seen only if the program
-catches, blocks or ignores this signal.)
-.PP
-Other errors may occur, depending on the object connected to
-.IR fd .
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-SVr4, 4.3BSD, POSIX.1-2001.
-.\" SVr4 documents additional error
-.\" conditions EDEADLK, ENOLCK, ENOLNK, ENOSR, ENXIO, or ERANGE.
-.PP
-Under SVr4 a write may be interrupted and return
-.B EINTR
-at any point,
-not just before any data is written.
-.SH NOTES
-A successful return from
-.BR write ()
-does not make any guarantee that data has been committed to disk.
-On some filesystems, including NFS, it does not even guarantee
-that space has successfully been reserved for the data.
-In this case,
-some errors might be delayed until a future
-.BR write (),
-.BR fsync (2),
-or even
-.BR close (2).
-The only way to be sure is to call
-.BR fsync (2)
-after you are done writing all your data.
-.PP
-If a
-.BR write ()
-is interrupted by a signal handler before any bytes are written,
-then the call fails with the error
-.BR EINTR ;
-if it is interrupted after at least one byte has been written,
-the call succeeds, and returns the number of bytes written.
-.PP
-On Linux,
-.BR write ()
-(and similar system calls) will transfer at most
-0x7ffff000 (2,147,479,552) bytes,
-returning the number of bytes actually transferred.
-.\" commit e28cc71572da38a5a12c1cfe4d7032017adccf69
-(This is true on both 32-bit and 64-bit systems.)
-.PP
-An error return value while performing
-.BR write ()
-using direct I/O does not mean the
-entire write has failed.
-Partial data may be written
-and the data at the file offset on which the
-.BR write ()
-was attempted should be considered inconsistent.
-.SH BUGS
-According to POSIX.1-2008/SUSv4 Section XSI 2.9.7
-("Thread Interactions with Regular File Operations"):
-.PP
-.RS 4
-All of the following functions shall be atomic with respect to
-each other in the effects specified in POSIX.1-2008 when they
-operate on regular files or symbolic links: ...
-.RE
-.PP
-Among the APIs subsequently listed are
-.BR write ()
-and
-.BR writev (2).
-And among the effects that should be atomic across threads (and processes)
-are updates of the file offset.
-However, before Linux 3.14,
-this was not the case: if two processes that share
-an open file description (see
-.BR open (2))
-perform a
-.BR write ()
-(or
-.BR writev (2))
-at the same time, then the I/O operations were not atomic
-with respect to updating the file offset,
-with the result that the blocks of data output by the two processes
-might (incorrectly) overlap.
-This problem was fixed in Linux 3.14.
-.\" http://thread.gmane.org/gmane.linux.kernel/1649458
-.\" From: Michael Kerrisk (man-pages <mtk.manpages <at> gmail.com>
-.\" Subject: Update of file offset on write() etc. is non-atomic with I/O
-.\" Date: 2014-02-17 15:41:37 GMT
-.\" Newsgroups: gmane.linux.kernel, gmane.linux.file-systems
-.\" commit 9c225f2655e36a470c4f58dbbc99244c5fc7f2d4
-.\" Author: Linus Torvalds <torvalds@linux-foundation.org>
-.\" Date: Mon Mar 3 09:36:58 2014 -0800
-.\"
-.\" vfs: atomic f_pos accesses as per POSIX
-.SH SEE ALSO
-.BR close (2),
-.BR fcntl (2),
-.BR fsync (2),
-.BR ioctl (2),
-.BR lseek (2),
-.BR open (2),
-.BR pwrite (2),
-.BR read (2),
-.BR select (2),
-.BR writev (2),
-.BR fwrite (3)
diff --git a/man2/writev.2 b/man2/writev.2
deleted file mode 100644
index 54e3384ef..000000000
--- a/man2/writev.2
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/readv.2
diff --git a/man2type/open_how.2type b/man2type/open_how.2type
deleted file mode 100644
index 90657e1fd..000000000
--- a/man2type/open_how.2type
+++ /dev/null
@@ -1,51 +0,0 @@
-.\" Copyright (c) 2022 by Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH open_how 2type (date) "Linux man-pages (unreleased)"
-.SH NAME
-open_how \- how to open a pathname
-.SH LIBRARY
-Linux kernel headers
-.SH SYNOPSIS
-.EX
-.B #include <linux/openat2.h>
-.PP
-.B struct open_how {
-.BR " u64 flags;" " /* " O_ "* flags */"
-.BR " u64 mode;" " /* Mode for " O_ { CREAT , TMPFILE "} */"
-.BR " u64 resolve;" " /* " RESOLVE_ "* flags */"
- /* ... */
-.B };
-.EE
-.SH DESCRIPTION
-Specifies how a pathname should be opened.
-.PP
-The fields are as follows:
-.TP
-.I flags
-This field specifies the file creation and file status flags
-to use when opening the file.
-.TP
-.I mode
-This field specifies the mode for the new file.
-.TP
-.I resolve
-This is a bit mask of flags that modify the way in which
-.I all
-components of a pathname will be resolved
-(see
-.BR path_resolution (7)
-for background information).
-.SH VERSIONS
-Extra fields may be appended to the structure,
-with a zero value in a new field resulting in
-the kernel behaving as though that extension field was not present.
-Therefore, a user
-.I must
-zero-fill this structure on initialization.
-.SH STANDARDS
-Linux.
-.SH SEE ALSO
-.BR openat2 (2)
diff --git a/man3/CIRCLEQ_EMPTY.3 b/man3/CIRCLEQ_EMPTY.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_EMPTY.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CIRCLEQ_ENTRY.3 b/man3/CIRCLEQ_ENTRY.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_ENTRY.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CIRCLEQ_FIRST.3 b/man3/CIRCLEQ_FIRST.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_FIRST.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CIRCLEQ_FOREACH.3 b/man3/CIRCLEQ_FOREACH.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_FOREACH.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CIRCLEQ_FOREACH_REVERSE.3 b/man3/CIRCLEQ_FOREACH_REVERSE.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_FOREACH_REVERSE.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CIRCLEQ_HEAD.3 b/man3/CIRCLEQ_HEAD.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_HEAD.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CIRCLEQ_HEAD_INITIALIZER.3 b/man3/CIRCLEQ_HEAD_INITIALIZER.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_HEAD_INITIALIZER.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CIRCLEQ_INIT.3 b/man3/CIRCLEQ_INIT.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_INIT.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CIRCLEQ_INSERT_AFTER.3 b/man3/CIRCLEQ_INSERT_AFTER.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_INSERT_AFTER.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CIRCLEQ_INSERT_BEFORE.3 b/man3/CIRCLEQ_INSERT_BEFORE.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_INSERT_BEFORE.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CIRCLEQ_INSERT_HEAD.3 b/man3/CIRCLEQ_INSERT_HEAD.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_INSERT_HEAD.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CIRCLEQ_INSERT_TAIL.3 b/man3/CIRCLEQ_INSERT_TAIL.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_INSERT_TAIL.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CIRCLEQ_LAST.3 b/man3/CIRCLEQ_LAST.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_LAST.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CIRCLEQ_LOOP_NEXT.3 b/man3/CIRCLEQ_LOOP_NEXT.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_LOOP_NEXT.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CIRCLEQ_LOOP_PREV.3 b/man3/CIRCLEQ_LOOP_PREV.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_LOOP_PREV.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CIRCLEQ_NEXT.3 b/man3/CIRCLEQ_NEXT.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_NEXT.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CIRCLEQ_PREV.3 b/man3/CIRCLEQ_PREV.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_PREV.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CIRCLEQ_REMOVE.3 b/man3/CIRCLEQ_REMOVE.3
deleted file mode 100644
index ed0fc9a3b..000000000
--- a/man3/CIRCLEQ_REMOVE.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/circleq.3
diff --git a/man3/CMSG_ALIGN.3 b/man3/CMSG_ALIGN.3
deleted file mode 100644
index ad67f433f..000000000
--- a/man3/CMSG_ALIGN.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cmsg.3
diff --git a/man3/CMSG_DATA.3 b/man3/CMSG_DATA.3
deleted file mode 100644
index ad67f433f..000000000
--- a/man3/CMSG_DATA.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cmsg.3
diff --git a/man3/CMSG_FIRSTHDR.3 b/man3/CMSG_FIRSTHDR.3
deleted file mode 100644
index ad67f433f..000000000
--- a/man3/CMSG_FIRSTHDR.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cmsg.3
diff --git a/man3/CMSG_LEN.3 b/man3/CMSG_LEN.3
deleted file mode 100644
index ad67f433f..000000000
--- a/man3/CMSG_LEN.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cmsg.3
diff --git a/man3/CMSG_NXTHDR.3 b/man3/CMSG_NXTHDR.3
deleted file mode 100644
index ad67f433f..000000000
--- a/man3/CMSG_NXTHDR.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cmsg.3
diff --git a/man3/CMSG_SPACE.3 b/man3/CMSG_SPACE.3
deleted file mode 100644
index ad67f433f..000000000
--- a/man3/CMSG_SPACE.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cmsg.3
diff --git a/man3/CPU_ALLOC.3 b/man3/CPU_ALLOC.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_ALLOC.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_ALLOC_SIZE.3 b/man3/CPU_ALLOC_SIZE.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_ALLOC_SIZE.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_AND.3 b/man3/CPU_AND.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_AND.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_AND_S.3 b/man3/CPU_AND_S.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_AND_S.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_CLR.3 b/man3/CPU_CLR.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_CLR.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_CLR_S.3 b/man3/CPU_CLR_S.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_CLR_S.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_COUNT.3 b/man3/CPU_COUNT.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_COUNT.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_COUNT_S.3 b/man3/CPU_COUNT_S.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_COUNT_S.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_EQUAL.3 b/man3/CPU_EQUAL.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_EQUAL.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_EQUAL_S.3 b/man3/CPU_EQUAL_S.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_EQUAL_S.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_FREE.3 b/man3/CPU_FREE.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_FREE.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_ISSET.3 b/man3/CPU_ISSET.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_ISSET.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_ISSET_S.3 b/man3/CPU_ISSET_S.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_ISSET_S.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_OR.3 b/man3/CPU_OR.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_OR.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_OR_S.3 b/man3/CPU_OR_S.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_OR_S.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_SET.3 b/man3/CPU_SET.3
deleted file mode 100644
index a0461104a..000000000
--- a/man3/CPU_SET.3
+++ /dev/null
@@ -1,348 +0,0 @@
-.\" Copyright (C) 2006 Michael Kerrisk
-.\" and Copyright (C) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH CPU_SET 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-CPU_SET, CPU_CLR, CPU_ISSET, CPU_ZERO, CPU_COUNT,
-CPU_AND, CPU_OR, CPU_XOR, CPU_EQUAL,
-CPU_ALLOC, CPU_ALLOC_SIZE, CPU_FREE,
-CPU_SET_S, CPU_CLR_S, CPU_ISSET_S, CPU_ZERO_S,
-CPU_COUNT_S, CPU_AND_S, CPU_OR_S, CPU_XOR_S, CPU_EQUAL_S \-
-macros for manipulating CPU sets
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <sched.h>
-.PP
-.BI "void CPU_ZERO(cpu_set_t *" set );
-.PP
-.BI "void CPU_SET(int " cpu ", cpu_set_t *" set );
-.BI "void CPU_CLR(int " cpu ", cpu_set_t *" set );
-.BI "int CPU_ISSET(int " cpu ", cpu_set_t *" set );
-.PP
-.BI "int CPU_COUNT(cpu_set_t *" set );
-.PP
-.BI "void CPU_AND(cpu_set_t *" destset ,
-.BI " cpu_set_t *" srcset1 ", cpu_set_t *" srcset2 );
-.BI "void CPU_OR(cpu_set_t *" destset ,
-.BI " cpu_set_t *" srcset1 ", cpu_set_t *" srcset2 );
-.BI "void CPU_XOR(cpu_set_t *" destset ,
-.BI " cpu_set_t *" srcset1 ", cpu_set_t *" srcset2 );
-.PP
-.BI "int CPU_EQUAL(cpu_set_t *" set1 ", cpu_set_t *" set2 );
-.PP
-.BI "cpu_set_t *CPU_ALLOC(int " num_cpus );
-.BI "void CPU_FREE(cpu_set_t *" set );
-.BI "size_t CPU_ALLOC_SIZE(int " num_cpus );
-.PP
-.BI "void CPU_ZERO_S(size_t " setsize ", cpu_set_t *" set );
-.PP
-.BI "void CPU_SET_S(int " cpu ", size_t " setsize ", cpu_set_t *" set );
-.BI "void CPU_CLR_S(int " cpu ", size_t " setsize ", cpu_set_t *" set );
-.BI "int CPU_ISSET_S(int " cpu ", size_t " setsize ", cpu_set_t *" set );
-.PP
-.BI "int CPU_COUNT_S(size_t " setsize ", cpu_set_t *" set );
-.PP
-.BI "void CPU_AND_S(size_t " setsize ", cpu_set_t *" destset ,
-.BI " cpu_set_t *" srcset1 ", cpu_set_t *" srcset2 );
-.BI "void CPU_OR_S(size_t " setsize ", cpu_set_t *" destset ,
-.BI " cpu_set_t *" srcset1 ", cpu_set_t *" srcset2 );
-.BI "void CPU_XOR_S(size_t " setsize ", cpu_set_t *" destset ,
-.BI " cpu_set_t *" srcset1 ", cpu_set_t *" srcset2 );
-.PP
-.BI "int CPU_EQUAL_S(size_t " setsize ", cpu_set_t *" set1 \
-", cpu_set_t *" set2 );
-.fi
-.SH DESCRIPTION
-The
-.I cpu_set_t
-data structure represents a set of CPUs.
-CPU sets are used by
-.BR sched_setaffinity (2)
-and similar interfaces.
-.PP
-The
-.I cpu_set_t
-data type is implemented as a bit mask.
-However, the data structure should be treated as opaque:
-all manipulation of CPU sets should be done via the macros
-described in this page.
-.PP
-The following macros are provided to operate on the CPU set
-.IR set :
-.TP
-.BR CPU_ZERO ()
-Clears
-.IR set ,
-so that it contains no CPUs.
-.TP
-.BR CPU_SET ()
-Add CPU
-.I cpu
-to
-.IR set .
-.TP
-.BR CPU_CLR ()
-Remove CPU
-.I cpu
-from
-.IR set .
-.TP
-.BR CPU_ISSET ()
-Test to see if CPU
-.I cpu
-is a member of
-.IR set .
-.TP
-.BR CPU_COUNT ()
-Return the number of CPUs in
-.IR set .
-.PP
-Where a
-.I cpu
-argument is specified, it should not produce side effects,
-since the above macros may evaluate the argument more than once.
-.PP
-The first CPU on the system corresponds to a
-.I cpu
-value of 0, the next CPU corresponds to a
-.I cpu
-value of 1, and so on.
-No assumptions should be made about particular CPUs being
-available, or the set of CPUs being contiguous, since CPUs can
-be taken offline dynamically or be otherwise absent.
-The constant
-.B CPU_SETSIZE
-(currently 1024) specifies a value one greater than the maximum CPU
-number that can be stored in
-.IR cpu_set_t .
-.PP
-The following macros perform logical operations on CPU sets:
-.TP
-.BR CPU_AND ()
-Store the intersection of the sets
-.I srcset1
-and
-.I srcset2
-in
-.I destset
-(which may be one of the source sets).
-.TP
-.BR CPU_OR ()
-Store the union of the sets
-.I srcset1
-and
-.I srcset2
-in
-.I destset
-(which may be one of the source sets).
-.TP
-.BR CPU_XOR ()
-Store the XOR of the sets
-.I srcset1
-and
-.I srcset2
-in
-.I destset
-(which may be one of the source sets).
-The XOR means the set of CPUs that are in either
-.I srcset1
-or
-.IR srcset2 ,
-but not both.
-.TP
-.BR CPU_EQUAL ()
-Test whether two CPU set contain exactly the same CPUs.
-.SS Dynamically sized CPU sets
-Because some applications may require the ability to dynamically
-size CPU sets (e.g., to allocate sets larger than that
-defined by the standard
-.I cpu_set_t
-data type), glibc nowadays provides a set of macros to support this.
-.PP
-The following macros are used to allocate and deallocate CPU sets:
-.TP
-.BR CPU_ALLOC ()
-Allocate a CPU set large enough to hold CPUs
-in the range 0 to
-.IR num_cpus\-1 .
-.TP
-.BR CPU_ALLOC_SIZE ()
-Return the size in bytes of the CPU set that would be needed to
-hold CPUs in the range 0 to
-.IR num_cpus\-1 .
-This macro provides the value that can be used for the
-.I setsize
-argument in the
-.BR CPU_*_S ()
-macros described below.
-.TP
-.BR CPU_FREE ()
-Free a CPU set previously allocated by
-.BR CPU_ALLOC ().
-.PP
-The macros whose names end with "_S" are the analogs of
-the similarly named macros without the suffix.
-These macros perform the same tasks as their analogs,
-but operate on the dynamically allocated CPU set(s) whose size is
-.I setsize
-bytes.
-.SH RETURN VALUE
-.BR CPU_ISSET ()
-and
-.BR CPU_ISSET_S ()
-return nonzero if
-.I cpu
-is in
-.IR set ;
-otherwise, it returns 0.
-.PP
-.BR CPU_COUNT ()
-and
-.BR CPU_COUNT_S ()
-return the number of CPUs in
-.IR set .
-.PP
-.BR CPU_EQUAL ()
-and
-.BR CPU_EQUAL_S ()
-return nonzero if the two CPU sets are equal; otherwise they return 0.
-.PP
-.BR CPU_ALLOC ()
-returns a pointer on success, or NULL on failure.
-(Errors are as for
-.BR malloc (3).)
-.PP
-.BR CPU_ALLOC_SIZE ()
-returns the number of bytes required to store a
-CPU set of the specified cardinality.
-.PP
-The other functions do not return a value.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-The
-.BR CPU_ZERO (),
-.BR CPU_SET (),
-.BR CPU_CLR (),
-and
-.BR CPU_ISSET ()
-macros were added in glibc 2.3.3.
-.PP
-.BR CPU_COUNT ()
-first appeared in glibc 2.6.
-.PP
-.BR CPU_AND (),
-.BR CPU_OR (),
-.BR CPU_XOR (),
-.BR CPU_EQUAL (),
-.BR CPU_ALLOC (),
-.BR CPU_ALLOC_SIZE (),
-.BR CPU_FREE (),
-.BR CPU_ZERO_S (),
-.BR CPU_SET_S (),
-.BR CPU_CLR_S (),
-.BR CPU_ISSET_S (),
-.BR CPU_AND_S (),
-.BR CPU_OR_S (),
-.BR CPU_XOR_S (),
-and
-.BR CPU_EQUAL_S ()
-first appeared in glibc 2.7.
-.SH NOTES
-To duplicate a CPU set, use
-.BR memcpy (3).
-.PP
-Since CPU sets are bit masks allocated in units of long words,
-the actual number of CPUs in a dynamically
-allocated CPU set will be rounded up to the next multiple of
-.IR "sizeof(unsigned long)" .
-An application should consider the contents of these extra bits
-to be undefined.
-.PP
-Notwithstanding the similarity in the names,
-note that the constant
-.B CPU_SETSIZE
-indicates the number of CPUs in the
-.I cpu_set_t
-data type (thus, it is effectively a count of the bits in the bit mask),
-while the
-.I setsize
-argument of the
-.BR CPU_*_S ()
-macros is a size in bytes.
-.PP
-The data types for arguments and return values shown
-in the SYNOPSIS are hints what about is expected in each case.
-However, since these interfaces are implemented as macros,
-the compiler won't necessarily catch all type errors
-if you violate the suggestions.
-.SH BUGS
-On 32-bit platforms with glibc 2.8 and earlier,
-.BR CPU_ALLOC ()
-allocates twice as much space as is required, and
-.BR CPU_ALLOC_SIZE ()
-returns a value twice as large as it should.
-This bug should not affect the semantics of a program,
-but does result in wasted memory
-and less efficient operation of the macros that
-operate on dynamically allocated CPU sets.
-These bugs are fixed in glibc 2.9.
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=7029
-.SH EXAMPLES
-The following program demonstrates the use of some of the macros
-used for dynamically allocated CPU sets.
-.PP
-.\" SRC BEGIN (CPU_SET.c)
-.EX
-#define _GNU_SOURCE
-#include <sched.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-#include <assert.h>
-\&
-int
-main(int argc, char *argv[])
-{
- cpu_set_t *cpusetp;
- size_t size, num_cpus;
-\&
- if (argc < 2) {
- fprintf(stderr, "Usage: %s <num\-cpus>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- num_cpus = atoi(argv[1]);
-\&
- cpusetp = CPU_ALLOC(num_cpus);
- if (cpusetp == NULL) {
- perror("CPU_ALLOC");
- exit(EXIT_FAILURE);
- }
-\&
- size = CPU_ALLOC_SIZE(num_cpus);
-\&
- CPU_ZERO_S(size, cpusetp);
- for (size_t cpu = 0; cpu < num_cpus; cpu += 2)
- CPU_SET_S(cpu, size, cpusetp);
-\&
- printf("CPU_COUNT() of set: %d\en", CPU_COUNT_S(size, cpusetp));
-\&
- CPU_FREE(cpusetp);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR sched_setaffinity (2),
-.BR pthread_attr_setaffinity_np (3),
-.BR pthread_setaffinity_np (3),
-.BR cpuset (7)
diff --git a/man3/CPU_SET_S.3 b/man3/CPU_SET_S.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_SET_S.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_XOR.3 b/man3/CPU_XOR.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_XOR.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_XOR_S.3 b/man3/CPU_XOR_S.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_XOR_S.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_ZERO.3 b/man3/CPU_ZERO.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_ZERO.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/CPU_ZERO_S.3 b/man3/CPU_ZERO_S.3
deleted file mode 100644
index cdc74d479..000000000
--- a/man3/CPU_ZERO_S.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/CPU_SET.3
diff --git a/man3/DES_FAILED.3 b/man3/DES_FAILED.3
deleted file mode 100644
index 853c9cbdf..000000000
--- a/man3/DES_FAILED.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/des_crypt.3
diff --git a/man3/FD_CLR.3 b/man3/FD_CLR.3
deleted file mode 100644
index e17784318..000000000
--- a/man3/FD_CLR.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/select.2
diff --git a/man3/FD_ISSET.3 b/man3/FD_ISSET.3
deleted file mode 100644
index e17784318..000000000
--- a/man3/FD_ISSET.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/select.2
diff --git a/man3/FD_SET.3 b/man3/FD_SET.3
deleted file mode 100644
index e17784318..000000000
--- a/man3/FD_SET.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/select.2
diff --git a/man3/FD_ZERO.3 b/man3/FD_ZERO.3
deleted file mode 100644
index e17784318..000000000
--- a/man3/FD_ZERO.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/select.2
diff --git a/man3/HUGE_VAL.3 b/man3/HUGE_VAL.3
deleted file mode 100644
index dd04d2c5c..000000000
--- a/man3/HUGE_VAL.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/INFINITY.3
diff --git a/man3/HUGE_VALF.3 b/man3/HUGE_VALF.3
deleted file mode 100644
index dd04d2c5c..000000000
--- a/man3/HUGE_VALF.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/INFINITY.3
diff --git a/man3/HUGE_VALL.3 b/man3/HUGE_VALL.3
deleted file mode 100644
index dd04d2c5c..000000000
--- a/man3/HUGE_VALL.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/INFINITY.3
diff --git a/man3/INFINITY.3 b/man3/INFINITY.3
deleted file mode 100644
index d90091f9a..000000000
--- a/man3/INFINITY.3
+++ /dev/null
@@ -1,85 +0,0 @@
-.\" Copyright 2004 Andries Brouwer <aeb@cwi.nl>.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH INFINITY 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-INFINITY, NAN, HUGE_VAL, HUGE_VALF, HUGE_VALL \- floating-point constants
-.SH LIBRARY
-Math library
-.RI ( libm )
-.SH SYNOPSIS
-.nf
-.BR "#define _ISOC99_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <math.h>
-.PP
-.B INFINITY
-.PP
-.B NAN
-.PP
-.B HUGE_VAL
-.B HUGE_VALF
-.B HUGE_VALL
-.fi
-.SH DESCRIPTION
-The macro
-.B INFINITY
-expands to a
-.I float
-constant representing positive infinity.
-.PP
-The macro
-.B NAN
-expands to a
-.I float
-constant representing a quiet NaN
-(when supported).
-A
-.I quiet
-NaN is a NaN ("not-a-number") that does not raise exceptions
-when it is used in arithmetic.
-The opposite is a
-.I signaling
-NaN.
-See IEC 60559:1989.
-.PP
-The macros
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-.B HUGE_VALL
-expand to constants of types
-.IR double ,
-.IR float ,
-and
-.IR "long double" ,
-respectively,
-that represent a large positive value, possibly positive infinity.
-.SH STANDARDS
-C11.
-.SH HISTORY
-C99.
-.PP
-On a glibc system, the macro
-.B HUGE_VAL
-is always available.
-Availability of the
-.B NAN
-macro can be tested using
-.BR "#ifdef NAN" ,
-and similarly for
-.BR INFINITY ,
-.BR HUGE_VALF ,
-.BR HUGE_VALL .
-They will be defined by
-.I <math.h>
-if
-.B _ISOC99_SOURCE
-or
-.B _GNU_SOURCE
-is defined, or
-.B __STDC_VERSION__
-is defined
-and has a value not less than 199901L.
-.SH SEE ALSO
-.BR fpclassify (3),
-.BR math_error (7)
diff --git a/man3/LIST_EMPTY.3 b/man3/LIST_EMPTY.3
deleted file mode 100644
index dfafea85d..000000000
--- a/man3/LIST_EMPTY.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/list.3
diff --git a/man3/LIST_ENTRY.3 b/man3/LIST_ENTRY.3
deleted file mode 100644
index dfafea85d..000000000
--- a/man3/LIST_ENTRY.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/list.3
diff --git a/man3/LIST_FIRST.3 b/man3/LIST_FIRST.3
deleted file mode 100644
index dfafea85d..000000000
--- a/man3/LIST_FIRST.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/list.3
diff --git a/man3/LIST_FOREACH.3 b/man3/LIST_FOREACH.3
deleted file mode 100644
index dfafea85d..000000000
--- a/man3/LIST_FOREACH.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/list.3
diff --git a/man3/LIST_HEAD.3 b/man3/LIST_HEAD.3
deleted file mode 100644
index dfafea85d..000000000
--- a/man3/LIST_HEAD.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/list.3
diff --git a/man3/LIST_HEAD_INITIALIZER.3 b/man3/LIST_HEAD_INITIALIZER.3
deleted file mode 100644
index dfafea85d..000000000
--- a/man3/LIST_HEAD_INITIALIZER.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/list.3
diff --git a/man3/LIST_INIT.3 b/man3/LIST_INIT.3
deleted file mode 100644
index dfafea85d..000000000
--- a/man3/LIST_INIT.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/list.3
diff --git a/man3/LIST_INSERT_AFTER.3 b/man3/LIST_INSERT_AFTER.3
deleted file mode 100644
index dfafea85d..000000000
--- a/man3/LIST_INSERT_AFTER.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/list.3
diff --git a/man3/LIST_INSERT_BEFORE.3 b/man3/LIST_INSERT_BEFORE.3
deleted file mode 100644
index dfafea85d..000000000
--- a/man3/LIST_INSERT_BEFORE.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/list.3
diff --git a/man3/LIST_INSERT_HEAD.3 b/man3/LIST_INSERT_HEAD.3
deleted file mode 100644
index dfafea85d..000000000
--- a/man3/LIST_INSERT_HEAD.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/list.3
diff --git a/man3/LIST_NEXT.3 b/man3/LIST_NEXT.3
deleted file mode 100644
index dfafea85d..000000000
--- a/man3/LIST_NEXT.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/list.3
diff --git a/man3/LIST_REMOVE.3 b/man3/LIST_REMOVE.3
deleted file mode 100644
index dfafea85d..000000000
--- a/man3/LIST_REMOVE.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/list.3
diff --git a/man3/MAX.3 b/man3/MAX.3
deleted file mode 100644
index 6b9bb5803..000000000
--- a/man3/MAX.3
+++ /dev/null
@@ -1,75 +0,0 @@
-.\" Copyright (C) 2021 Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH MAX 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-MAX, MIN \- maximum or minimum of two values
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/param.h>
-.PP
-.BI MAX( a ", " b );
-.BI MIN( a ", " b );
-.fi
-.SH DESCRIPTION
-These macros return the maximum or minimum of
-.I a
-and
-.IR b .
-.SH RETURN VALUE
-These macros return the value of one of their arguments,
-possibly converted to a different type (see BUGS).
-.SH ERRORS
-These macros may raise the "invalid" floating-point exception
-when any of the arguments is NaN.
-.SH STANDARDS
-GNU, BSD.
-.SH NOTES
-If either of the arguments is of a floating-point type,
-you might prefer to use
-.BR fmax (3)
-or
-.BR fmin (3),
-which can handle NaN.
-.PP
-The arguments may be evaluated more than once, or not at all.
-.PP
-Some UNIX systems might provide these macros in a different header,
-or not at all.
-.SH BUGS
-Due to the usual arithmetic conversions,
-the result of these macros may be very different from either of the arguments.
-To avoid this, ensure that both arguments have the same type.
-.SH EXAMPLES
-.\" SRC BEGIN (MAX.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/param.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int a, b, x;
-\&
- if (argc != 3) {
- fprintf(stderr, "Usage: %s <num> <num>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- a = atoi(argv[1]);
- b = atoi(argv[2]);
- x = MAX(a, b);
- printf("MAX(%d, %d) is %d\en", a, b, x);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR fmax (3),
-.BR fmin (3)
diff --git a/man3/MB_CUR_MAX.3 b/man3/MB_CUR_MAX.3
deleted file mode 100644
index a1cb3046f..000000000
--- a/man3/MB_CUR_MAX.3
+++ /dev/null
@@ -1,43 +0,0 @@
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\"
-.\" Modified, aeb, 990824
-.\"
-.TH MB_CUR_MAX 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-MB_CUR_MAX \- maximum length of a multibyte character in the current locale
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.fi
-.SH DESCRIPTION
-The
-.B MB_CUR_MAX
-macro defines an integer expression giving
-the maximum number of bytes needed to represent a single
-wide character in the current locale.
-This value is locale dependent and therefore not a compile-time constant.
-.SH RETURN VALUE
-An integer in the range [1,
-.BR MB_LEN_MAX ].
-The value 1 denotes traditional 8-bit encoded characters.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR MB_LEN_MAX (3),
-.BR mblen (3),
-.BR mbstowcs (3),
-.BR mbtowc (3),
-.BR wcstombs (3),
-.BR wctomb (3)
diff --git a/man3/MB_LEN_MAX.3 b/man3/MB_LEN_MAX.3
deleted file mode 100644
index c28bbb150..000000000
--- a/man3/MB_LEN_MAX.3
+++ /dev/null
@@ -1,51 +0,0 @@
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\"
-.\" Modified, aeb, 990824
-.\"
-.TH MB_LEN_MAX 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-MB_LEN_MAX \- maximum multibyte length of a character across all locales
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <limits.h>
-.fi
-.SH DESCRIPTION
-The
-.B MB_LEN_MAX
-macro is the maximum number of bytes needed to represent a single
-wide character, in any of the supported locales.
-.SH RETURN VALUE
-A constant integer greater than zero.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.SH NOTES
-The entities
-.B MB_LEN_MAX
-and
-.I sizeof(wchar_t)
-are totally unrelated.
-In glibc,
-.B MB_LEN_MAX
-is typically 16
-.\" For an explanation of why the limit was raised to 16, see
-.\" http://lists.gnu.org/archive/html/bug-gnulib/2015-05/msg00001.html
-.\" From: Bruno Haible
-.\" Subject: Re: why is MB_LEN_MAX so large (16) on glibc
-.\" Date: Thu, 14 May 2015 02:30:14 +0200
-(6 in glibc versions earlier than 2.2), while
-.I sizeof(wchar_t)
-is 4.
-.SH SEE ALSO
-.BR MB_CUR_MAX (3)
diff --git a/man3/MIN.3 b/man3/MIN.3
deleted file mode 100644
index 9938abda2..000000000
--- a/man3/MIN.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/MAX.3
diff --git a/man3/NAN.3 b/man3/NAN.3
deleted file mode 100644
index dd04d2c5c..000000000
--- a/man3/NAN.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/INFINITY.3
diff --git a/man3/SIMPLEQ_EMPTY.3 b/man3/SIMPLEQ_EMPTY.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/SIMPLEQ_EMPTY.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/SIMPLEQ_ENTRY.3 b/man3/SIMPLEQ_ENTRY.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/SIMPLEQ_ENTRY.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/SIMPLEQ_FIRST.3 b/man3/SIMPLEQ_FIRST.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/SIMPLEQ_FIRST.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/SIMPLEQ_FOREACH.3 b/man3/SIMPLEQ_FOREACH.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/SIMPLEQ_FOREACH.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/SIMPLEQ_HEAD.3 b/man3/SIMPLEQ_HEAD.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/SIMPLEQ_HEAD.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/SIMPLEQ_HEAD_INITIALIZER.3 b/man3/SIMPLEQ_HEAD_INITIALIZER.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/SIMPLEQ_HEAD_INITIALIZER.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/SIMPLEQ_INIT.3 b/man3/SIMPLEQ_INIT.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/SIMPLEQ_INIT.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/SIMPLEQ_INSERT_AFTER.3 b/man3/SIMPLEQ_INSERT_AFTER.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/SIMPLEQ_INSERT_AFTER.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/SIMPLEQ_INSERT_HEAD.3 b/man3/SIMPLEQ_INSERT_HEAD.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/SIMPLEQ_INSERT_HEAD.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/SIMPLEQ_INSERT_TAIL.3 b/man3/SIMPLEQ_INSERT_TAIL.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/SIMPLEQ_INSERT_TAIL.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/SIMPLEQ_NEXT.3 b/man3/SIMPLEQ_NEXT.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/SIMPLEQ_NEXT.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/SIMPLEQ_REMOVE.3 b/man3/SIMPLEQ_REMOVE.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/SIMPLEQ_REMOVE.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/SIMPLEQ_REMOVE_HEAD.3 b/man3/SIMPLEQ_REMOVE_HEAD.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/SIMPLEQ_REMOVE_HEAD.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/SLIST_EMPTY.3 b/man3/SLIST_EMPTY.3
deleted file mode 100644
index 260541bcb..000000000
--- a/man3/SLIST_EMPTY.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/slist.3
diff --git a/man3/SLIST_ENTRY.3 b/man3/SLIST_ENTRY.3
deleted file mode 100644
index 260541bcb..000000000
--- a/man3/SLIST_ENTRY.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/slist.3
diff --git a/man3/SLIST_FIRST.3 b/man3/SLIST_FIRST.3
deleted file mode 100644
index 260541bcb..000000000
--- a/man3/SLIST_FIRST.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/slist.3
diff --git a/man3/SLIST_FOREACH.3 b/man3/SLIST_FOREACH.3
deleted file mode 100644
index 260541bcb..000000000
--- a/man3/SLIST_FOREACH.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/slist.3
diff --git a/man3/SLIST_HEAD.3 b/man3/SLIST_HEAD.3
deleted file mode 100644
index 260541bcb..000000000
--- a/man3/SLIST_HEAD.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/slist.3
diff --git a/man3/SLIST_HEAD_INITIALIZER.3 b/man3/SLIST_HEAD_INITIALIZER.3
deleted file mode 100644
index 260541bcb..000000000
--- a/man3/SLIST_HEAD_INITIALIZER.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/slist.3
diff --git a/man3/SLIST_INIT.3 b/man3/SLIST_INIT.3
deleted file mode 100644
index 260541bcb..000000000
--- a/man3/SLIST_INIT.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/slist.3
diff --git a/man3/SLIST_INSERT_AFTER.3 b/man3/SLIST_INSERT_AFTER.3
deleted file mode 100644
index 260541bcb..000000000
--- a/man3/SLIST_INSERT_AFTER.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/slist.3
diff --git a/man3/SLIST_INSERT_HEAD.3 b/man3/SLIST_INSERT_HEAD.3
deleted file mode 100644
index 260541bcb..000000000
--- a/man3/SLIST_INSERT_HEAD.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/slist.3
diff --git a/man3/SLIST_NEXT.3 b/man3/SLIST_NEXT.3
deleted file mode 100644
index 260541bcb..000000000
--- a/man3/SLIST_NEXT.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/slist.3
diff --git a/man3/SLIST_REMOVE.3 b/man3/SLIST_REMOVE.3
deleted file mode 100644
index 260541bcb..000000000
--- a/man3/SLIST_REMOVE.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/slist.3
diff --git a/man3/SLIST_REMOVE_HEAD.3 b/man3/SLIST_REMOVE_HEAD.3
deleted file mode 100644
index 260541bcb..000000000
--- a/man3/SLIST_REMOVE_HEAD.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/slist.3
diff --git a/man3/STAILQ_CONCAT.3 b/man3/STAILQ_CONCAT.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/STAILQ_CONCAT.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/STAILQ_EMPTY.3 b/man3/STAILQ_EMPTY.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/STAILQ_EMPTY.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/STAILQ_ENTRY.3 b/man3/STAILQ_ENTRY.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/STAILQ_ENTRY.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/STAILQ_FIRST.3 b/man3/STAILQ_FIRST.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/STAILQ_FIRST.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/STAILQ_FOREACH.3 b/man3/STAILQ_FOREACH.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/STAILQ_FOREACH.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/STAILQ_HEAD.3 b/man3/STAILQ_HEAD.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/STAILQ_HEAD.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/STAILQ_HEAD_INITIALIZER.3 b/man3/STAILQ_HEAD_INITIALIZER.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/STAILQ_HEAD_INITIALIZER.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/STAILQ_INIT.3 b/man3/STAILQ_INIT.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/STAILQ_INIT.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/STAILQ_INSERT_AFTER.3 b/man3/STAILQ_INSERT_AFTER.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/STAILQ_INSERT_AFTER.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/STAILQ_INSERT_HEAD.3 b/man3/STAILQ_INSERT_HEAD.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/STAILQ_INSERT_HEAD.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/STAILQ_INSERT_TAIL.3 b/man3/STAILQ_INSERT_TAIL.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/STAILQ_INSERT_TAIL.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/STAILQ_NEXT.3 b/man3/STAILQ_NEXT.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/STAILQ_NEXT.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/STAILQ_REMOVE.3 b/man3/STAILQ_REMOVE.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/STAILQ_REMOVE.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/STAILQ_REMOVE_HEAD.3 b/man3/STAILQ_REMOVE_HEAD.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/STAILQ_REMOVE_HEAD.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/TAILQ_CONCAT.3 b/man3/TAILQ_CONCAT.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_CONCAT.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/TAILQ_EMPTY.3 b/man3/TAILQ_EMPTY.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_EMPTY.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/TAILQ_ENTRY.3 b/man3/TAILQ_ENTRY.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_ENTRY.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/TAILQ_FIRST.3 b/man3/TAILQ_FIRST.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_FIRST.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/TAILQ_FOREACH.3 b/man3/TAILQ_FOREACH.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_FOREACH.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/TAILQ_FOREACH_REVERSE.3 b/man3/TAILQ_FOREACH_REVERSE.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_FOREACH_REVERSE.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/TAILQ_HEAD.3 b/man3/TAILQ_HEAD.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_HEAD.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/TAILQ_HEAD_INITIALIZER.3 b/man3/TAILQ_HEAD_INITIALIZER.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_HEAD_INITIALIZER.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/TAILQ_INIT.3 b/man3/TAILQ_INIT.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_INIT.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/TAILQ_INSERT_AFTER.3 b/man3/TAILQ_INSERT_AFTER.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_INSERT_AFTER.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/TAILQ_INSERT_BEFORE.3 b/man3/TAILQ_INSERT_BEFORE.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_INSERT_BEFORE.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/TAILQ_INSERT_HEAD.3 b/man3/TAILQ_INSERT_HEAD.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_INSERT_HEAD.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/TAILQ_INSERT_TAIL.3 b/man3/TAILQ_INSERT_TAIL.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_INSERT_TAIL.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/TAILQ_LAST.3 b/man3/TAILQ_LAST.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_LAST.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/TAILQ_NEXT.3 b/man3/TAILQ_NEXT.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_NEXT.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/TAILQ_PREV.3 b/man3/TAILQ_PREV.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_PREV.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/TAILQ_REMOVE.3 b/man3/TAILQ_REMOVE.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_REMOVE.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/TAILQ_SWAP.3 b/man3/TAILQ_SWAP.3
deleted file mode 100644
index c766ff4e7..000000000
--- a/man3/TAILQ_SWAP.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tailq.3
diff --git a/man3/_Generic.3 b/man3/_Generic.3
deleted file mode 100644
index e37f22020..000000000
--- a/man3/_Generic.3
+++ /dev/null
@@ -1,64 +0,0 @@
-.\" Copyright (C) 2022 Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH _Generic 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-_Generic \- type-generic selection
-.SH SYNOPSIS
-.nf
-.BR _Generic( \fIexpression\fP ", type1: " e1 ", " "... /*" \
-", default: " "e */" );
-.fi
-.SH DESCRIPTION
-.BR _Generic ()
-evaluates the path of code under the type selector
-that is compatible with the type of the controlling
-.IR expression ,
-or
-.B default:
-if no type is compatible.
-.PP
-.I expression
-is not evaluated.
-.PP
-This is especially useful for writing type-generic macros,
-that will behave differently depending on the type of the argument.
-.SH STANDARDS
-C11.
-.SH HISTORY
-C11.
-.SH EXAMPLES
-The following program demonstrates how to write
-a replacement for the standard
-.BR imaxabs (3)
-function, which being a function can't really provide what it promises:
-seamlessly upgrading to the widest available type.
-.IP
-.\" SRC BEGIN (_Generic.c)
-.EX
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-#define my_imaxabs _Generic(INTMAX_C(0), \e
- long: labs, \e
- long long: llabs \e
- /* long long long: lllabs */ \e
-)
-\&
-int
-main(void)
-{
- off_t a;
-\&
- a = \-42;
- printf("imaxabs(%jd) == %jd\en", (intmax_t) a, my_imaxabs(a));
- printf("&imaxabs == %p\en", &my_imaxabs);
- printf("&labs == %p\en", &labs);
- printf("&llabs == %p\en", &llabs);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
diff --git a/man3/_Static_assert.3 b/man3/_Static_assert.3
deleted file mode 100644
index 30f63531c..000000000
--- a/man3/_Static_assert.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/static_assert.3
diff --git a/man3/__after_morecore_hook.3 b/man3/__after_morecore_hook.3
deleted file mode 100644
index 421aafcbe..000000000
--- a/man3/__after_morecore_hook.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/malloc_hook.3
diff --git a/man3/__fbufsize.3 b/man3/__fbufsize.3
deleted file mode 100644
index fb0e7c0d7..000000000
--- a/man3/__fbufsize.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stdio_ext.3
diff --git a/man3/__flbf.3 b/man3/__flbf.3
deleted file mode 100644
index fb0e7c0d7..000000000
--- a/man3/__flbf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stdio_ext.3
diff --git a/man3/__fpending.3 b/man3/__fpending.3
deleted file mode 100644
index fb0e7c0d7..000000000
--- a/man3/__fpending.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stdio_ext.3
diff --git a/man3/__fpurge.3 b/man3/__fpurge.3
deleted file mode 100644
index d7cfd4977..000000000
--- a/man3/__fpurge.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fpurge.3
diff --git a/man3/__freadable.3 b/man3/__freadable.3
deleted file mode 100644
index fb0e7c0d7..000000000
--- a/man3/__freadable.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stdio_ext.3
diff --git a/man3/__freading.3 b/man3/__freading.3
deleted file mode 100644
index fb0e7c0d7..000000000
--- a/man3/__freading.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stdio_ext.3
diff --git a/man3/__free_hook.3 b/man3/__free_hook.3
deleted file mode 100644
index 421aafcbe..000000000
--- a/man3/__free_hook.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/malloc_hook.3
diff --git a/man3/__fsetlocking.3 b/man3/__fsetlocking.3
deleted file mode 100644
index fb0e7c0d7..000000000
--- a/man3/__fsetlocking.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stdio_ext.3
diff --git a/man3/__fwritable.3 b/man3/__fwritable.3
deleted file mode 100644
index fb0e7c0d7..000000000
--- a/man3/__fwritable.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stdio_ext.3
diff --git a/man3/__fwriting.3 b/man3/__fwriting.3
deleted file mode 100644
index fb0e7c0d7..000000000
--- a/man3/__fwriting.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stdio_ext.3
diff --git a/man3/__malloc_hook.3 b/man3/__malloc_hook.3
deleted file mode 100644
index 421aafcbe..000000000
--- a/man3/__malloc_hook.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/malloc_hook.3
diff --git a/man3/__malloc_initialize_hook.3 b/man3/__malloc_initialize_hook.3
deleted file mode 100644
index 421aafcbe..000000000
--- a/man3/__malloc_initialize_hook.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/malloc_hook.3
diff --git a/man3/__memalign_hook.3 b/man3/__memalign_hook.3
deleted file mode 100644
index 421aafcbe..000000000
--- a/man3/__memalign_hook.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/malloc_hook.3
diff --git a/man3/__ppc_get_timebase.3 b/man3/__ppc_get_timebase.3
deleted file mode 100644
index d796ca077..000000000
--- a/man3/__ppc_get_timebase.3
+++ /dev/null
@@ -1,99 +0,0 @@
-.\" Copyright (c) 2012, IBM Corporation.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH __ppc_get_timebase 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-__ppc_get_timebase, __ppc_get_timebase_freq \- get the current value
-of the Time Base Register on Power architecture and its frequency.
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/platform/ppc.h>
-.PP
-.B uint64_t __ppc_get_timebase(void);
-.B uint64_t __ppc_get_timebase_freq(void);
-.fi
-.SH DESCRIPTION
-.BR __ppc_get_timebase ()
-reads the current value of the Time Base Register and returns its
-value, while
-.BR __ppc_get_timebase_freq ()
-returns the frequency in which the Time Base Register is updated.
-.PP
-The Time Base Register is a 64-bit register provided by Power Architecture
-processors.
-It stores a monotonically incremented value that is updated at a
-system-dependent frequency that may be different from the processor
-frequency.
-.SH RETURN VALUE
-.BR __ppc_get_timebase ()
-returns a 64-bit unsigned integer that represents the current value of the
-Time Base Register.
-.PP
-.BR __ppc_get_timebase_freq ()
-returns a 64-bit unsigned integer that represents the frequency at
-which the Time Base Register is updated.
-.SH STANDARDS
-GNU.
-.SH HISTORY
-.TP
-.BR __ppc_get_timebase ()
-.\" commit d9dc34cd569bcfe714fe8c708e58c028106e8b2e
-glibc 2.16.
-.TP
-.BR __ppc_get_timebase_freq ()
-.\" commit 8ad11b9a9cf1de82bd7771306b42070b91417c11
-glibc 2.17.
-.SH EXAMPLES
-The following program will calculate the time, in microseconds, spent
-between two calls to
-.BR __ppc_get_timebase ().
-.SS Program source
-\&
-.\" SRC BEGIN (__ppc_get_timebase.c)
-.EX
-#include <inttypes.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/platform/ppc.h>
-\&
-/* Maximum value of the Time Base Register: 2\[ha]60 \- 1.
- Source: POWER ISA. */
-#define MAX_TB 0xFFFFFFFFFFFFFFF
-\&
-int
-main(void)
-{
- uint64_t tb1, tb2, diff;
- uint64_t freq;
-\&
- freq = __ppc_get_timebase_freq();
- printf("Time Base frequency = %"PRIu64" Hz\en", freq);
-\&
- tb1 = __ppc_get_timebase();
-\&
- // Do some stuff...
-\&
- tb2 = __ppc_get_timebase();
-\&
- if (tb2 > tb1) {
- diff = tb2 \- tb1;
- } else {
- /* Treat Time Base Register overflow. */
- diff = (MAX_TB \- tb2) + tb1;
- }
-\&
- printf("Elapsed time = %1.2f usecs\en",
- (double) diff * 1000000 / freq);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR time (2),
-.BR usleep (3)
diff --git a/man3/__ppc_get_timebase_freq.3 b/man3/__ppc_get_timebase_freq.3
deleted file mode 100644
index 8599293bd..000000000
--- a/man3/__ppc_get_timebase_freq.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/__ppc_get_timebase.3
diff --git a/man3/__ppc_mdoio.3 b/man3/__ppc_mdoio.3
deleted file mode 100644
index c9f047fbe..000000000
--- a/man3/__ppc_mdoio.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/__ppc_yield.3
diff --git a/man3/__ppc_mdoom.3 b/man3/__ppc_mdoom.3
deleted file mode 100644
index c9f047fbe..000000000
--- a/man3/__ppc_mdoom.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/__ppc_yield.3
diff --git a/man3/__ppc_set_ppr_low.3 b/man3/__ppc_set_ppr_low.3
deleted file mode 100644
index a6d6cf3fa..000000000
--- a/man3/__ppc_set_ppr_low.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/__ppc_set_ppr_med.3
diff --git a/man3/__ppc_set_ppr_med.3 b/man3/__ppc_set_ppr_med.3
deleted file mode 100644
index 4f5afda8a..000000000
--- a/man3/__ppc_set_ppr_med.3
+++ /dev/null
@@ -1,116 +0,0 @@
-'\" t
-.\" Copyright (c) 2015, 2016 IBM Corporation.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH __ppc_set_ppr_med 3 (date) "Linux man-pages (unreleased)"
-Programmer's Manual"
-.SH NAME
-__ppc_set_ppr_med, __ppc_set_ppr_very_low, __ppc_set_ppr_low,
-__ppc_set_ppr_med_low, __ppc_set_ppr_med_high \-
-Set the Program Priority Register
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/platform/ppc.h>
-.PP
-.B void __ppc_set_ppr_med(void);
-.B void __ppc_set_ppr_very_low(void);
-.B void __ppc_set_ppr_low(void);
-.B void __ppc_set_ppr_med_low(void);
-.B void __ppc_set_ppr_med_high(void);
-.fi
-.SH DESCRIPTION
-These functions provide access to the
-.I Program Priority Register
-(PPR) on the Power architecture.
-.PP
-The PPR is a 64-bit register that controls the program's priority.
-By adjusting the PPR value the programmer may improve system
-throughput by causing system resources to be used more
-efficiently, especially in contention situations.
-The available unprivileged states are covered by the following functions:
-.TP
-.BR __ppc_set_ppr_med ()
-sets the Program Priority Register value to
-.I medium
-(default).
-.TP
-.BR __ppc_set_ppr_very_low ()
-sets the Program Priority Register value to
-.IR "very low" .
-.TP
-.BR __ppc_set_ppr_low ()
-sets the Program Priority Register value to
-.IR low .
-.TP
-.BR __ppc_set_ppr_med_low ()
-sets the Program Priority Register value to
-.IR "medium low" .
-.PP
-The privileged state
-.I medium high
-may also be set during certain time intervals by problem-state (unprivileged)
-programs, with the following function:
-.TP
-.BR __ppc_set_ppr_med_high ()
-sets the Program Priority to
-.IR "medium high" .
-.PP
-If the program priority is medium high when the time interval expires or if an
-attempt is made to set the priority to medium high when it is not allowed, the
-priority is set to medium.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR __ppc_set_ppr_med (),
-.BR __ppc_set_ppr_very_low (),
-.BR __ppc_set_ppr_low (),
-.BR __ppc_set_ppr_med_low (),
-.BR __ppc_set_ppr_med_high ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH HISTORY
-.TP
-.BR __ppc_set_ppr_med ()
-.TQ
-.BR __ppc_set_ppr_low ()
-.TQ
-.BR __ppc_set_ppr_med_low ()
-glibc 2.18.
-.TP
-.BR __ppc_set_ppr_very_low ()
-.TQ
-.BR __ppc_set_ppr_med_high ()
-glibc 2.23.
-.SH NOTES
-The functions
-.BR __ppc_set_ppr_very_low ()
-and
-.BR __ppc_set_ppr_med_high ()
-will be defined by
-.I <sys/platform/ppc.h>
-if
-.B _ARCH_PWR8
-is defined.
-Availability of these functions can be tested using
-.BR "#ifdef _ARCH_PWR8" .
-.SH SEE ALSO
-.BR __ppc_yield (3)
-.PP
-.I Power ISA, Book\~II - Section\ 3.1 (Program Priority Registers)
diff --git a/man3/__ppc_set_ppr_med_high.3 b/man3/__ppc_set_ppr_med_high.3
deleted file mode 100644
index a6d6cf3fa..000000000
--- a/man3/__ppc_set_ppr_med_high.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/__ppc_set_ppr_med.3
diff --git a/man3/__ppc_set_ppr_med_low.3 b/man3/__ppc_set_ppr_med_low.3
deleted file mode 100644
index a6d6cf3fa..000000000
--- a/man3/__ppc_set_ppr_med_low.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/__ppc_set_ppr_med.3
diff --git a/man3/__ppc_set_ppr_very_low.3 b/man3/__ppc_set_ppr_very_low.3
deleted file mode 100644
index a6d6cf3fa..000000000
--- a/man3/__ppc_set_ppr_very_low.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/__ppc_set_ppr_med.3
diff --git a/man3/__ppc_yield.3 b/man3/__ppc_yield.3
deleted file mode 100644
index 52ed3038a..000000000
--- a/man3/__ppc_yield.3
+++ /dev/null
@@ -1,70 +0,0 @@
-'\" t
-.\" Copyright (c) 2015, IBM Corporation.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH __ppc_yield 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-__ppc_yield, __ppc_mdoio, __ppc_mdoom \-
-Hint the processor to release shared resources
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/platform/ppc.h>
-.PP
-.B void __ppc_yield(void);
-.B void __ppc_mdoio(void);
-.B void __ppc_mdoom(void);
-.fi
-.SH DESCRIPTION
-These functions
-provide hints about the usage of resources that are shared with other
-processors on the Power architecture.
-They can be used, for example, if a program waiting on a lock intends
-to divert the shared resources to be used by other processors.
-.PP
-.BR __ppc_yield ()
-provides a hint that performance will probably be improved if shared
-resources dedicated to the executing processor are released for use by
-other processors.
-.PP
-.BR __ppc_mdoio ()
-provides a hint that performance will probably be improved if shared
-resources dedicated to the executing processor are released until all
-outstanding storage accesses to caching-inhibited storage have been
-completed.
-.PP
-.BR __ppc_mdoom ()
-provides a hint that performance will probably be improved if shared
-resources dedicated to the executing processor are released until all
-outstanding storage accesses to cacheable storage for which the data
-is not in the cache have been completed.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR __ppc_yield (),
-.BR __ppc_mdoio (),
-.BR __ppc_mdoom ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH HISTORY
-glibc 2.18.
-.SH SEE ALSO
-.BR __ppc_set_ppr_med (3)
-.PP
-.I Power ISA, Book\~II - Section\~3.2 ("or" architecture)
diff --git a/man3/__realloc_hook.3 b/man3/__realloc_hook.3
deleted file mode 100644
index 421aafcbe..000000000
--- a/man3/__realloc_hook.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/malloc_hook.3
diff --git a/man3/__setfpucw.3 b/man3/__setfpucw.3
deleted file mode 100644
index 25542e909..000000000
--- a/man3/__setfpucw.3
+++ /dev/null
@@ -1,72 +0,0 @@
-.\" Written Sat Mar 8 10:35:08 MEZ 1997 by
-.\" J. "MUFTI" Scheurich (mufti@csv.ica.uni-stuttgart.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH __setfpucw 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-__setfpucw \- set FPU control word on i386 architecture (obsolete)
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <i386/fpu_control.h>
-.PP
-.BI "[[deprecated]] void __setfpucw(unsigned short " control_word );
-.fi
-.SH DESCRIPTION
-.BR __setfpucw ()
-transfers
-.I control_word
-to the registers of the FPU (floating-point unit) on the i386 architecture.
-This was used to control floating-point precision,
-rounding and floating-point exceptions.
-.SH STANDARDS
-GNU.
-.SH HISTORY
-Removed in glibc 2.1.
-.SH NOTES
-There are new functions from C99, with prototypes in
-.IR <fenv.h> ,
-to control FPU rounding modes, like
-.BR fegetround (3),
-.BR fesetround (3),
-and the floating-point environment, like
-.BR fegetenv (3),
-.BR feholdexcept (3),
-.BR fesetenv (3),
-.BR feupdateenv (3),
-and FPU exception handling, like
-.BR feclearexcept (3),
-.BR fegetexceptflag (3),
-.BR feraiseexcept (3),
-.BR fesetexceptflag (3),
-and
-.BR fetestexcept (3).
-.PP
-If direct access to the FPU control word is still needed, the
-.B _FPU_GETCW
-and
-.B _FPU_SETCW
-macros from
-.I <fpu_control.h>
-can be used.
-.SH EXAMPLES
-.B __setfpucw(0x1372)
-.PP
-Set FPU control word on the i386 architecture to
-.RS
-.PD 0
-.IP \[bu] 3
-extended precision
-.IP \[bu]
-rounding to nearest
-.IP \[bu]
-exceptions on overflow, zero divide and NaN
-.PD
-.RE
-.SH SEE ALSO
-.BR feclearexcept (3)
-.PP
-.I <fpu_control.h>
diff --git a/man3/_flushlbf.3 b/man3/_flushlbf.3
deleted file mode 100644
index fb0e7c0d7..000000000
--- a/man3/_flushlbf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stdio_ext.3
diff --git a/man3/a64l.3 b/man3/a64l.3
deleted file mode 100644
index 598bef9fe..000000000
--- a/man3/a64l.3
+++ /dev/null
@@ -1,112 +0,0 @@
-'\" t
-\t
-.\" Copyright 2002 walter harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" Corrected, aeb, 2002-05-30
-.\"
-.TH a64l 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-a64l, l64a \- convert between long and base-64
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "long a64l(const char *" str64 );
-.BI "char *l64a(long " value );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR a64l (),
-.BR l64a ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions provide a conversion between 32-bit long integers
-and little-endian base-64 ASCII strings (of length zero to six).
-If the string used as argument for
-.BR a64l ()
-has length greater than six, only the first six bytes are used.
-If the type
-.I long
-has more than 32 bits, then
-.BR l64a ()
-uses only the low order 32 bits of
-.IR value ,
-and
-.BR a64l ()
-sign-extends its 32-bit result.
-.PP
-The 64 digits in the base-64 system are:
-.PP
-.RS
-.nf
-\&\[aq].\[aq] represents a 0
-\&\[aq]/\[aq] represents a 1
-0-9 represent 2-11
-A-Z represent 12-37
-a-z represent 38-63
-.fi
-.RE
-.PP
-So 123 = 59*64\[ha]0 + 1*64\[ha]1 = "v/".
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR l64a ()
-T} Thread safety MT-Unsafe race:l64a
-T{
-.BR a64l ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-The value returned by
-.BR l64a ()
-may be a pointer to a static buffer, possibly overwritten
-by later calls.
-.PP
-The behavior of
-.BR l64a ()
-is undefined when
-.I value
-is negative.
-If
-.I value
-is zero, it returns an empty string.
-.PP
-These functions are broken before glibc 2.2.5
-(puts most significant digit first).
-.PP
-This is not the encoding used by
-.BR uuencode (1).
-.SH SEE ALSO
-.BR uuencode (1),
-.\" .BR itoa (3),
-.BR strtoul (3)
diff --git a/man3/abort.3 b/man3/abort.3
deleted file mode 100644
index c63eace5e..000000000
--- a/man3/abort.3
+++ /dev/null
@@ -1,96 +0,0 @@
-'\" t
-.\" Copyright 2007 (C) Michael Kerrisk <mtk.manpages@gmail.com>
-.\" some parts Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 21:46:21 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Fri Aug 4 10:51:53 2000 - patch from Joseph S. Myers
-.\" 2007-12-15, mtk, Mostly rewritten
-.\"
-.TH abort 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-abort \- cause abnormal process termination
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.B [[noreturn]] void abort(void);
-.fi
-.SH DESCRIPTION
-The
-.BR abort ()
-function first unblocks the
-.B SIGABRT
-signal, and then raises that signal for the calling process
-(as though
-.BR raise (3)
-was called).
-This results in the abnormal termination of the process unless the
-.B SIGABRT
-signal is caught and the signal handler does not return
-(see
-.BR longjmp (3)).
-.PP
-If the
-.B SIGABRT
-signal is ignored, or caught by a handler that returns, the
-.BR abort ()
-function will still terminate the process.
-It does this by restoring the default disposition for
-.B SIGABRT
-and then raising the signal for a second time.
-.SH RETURN VALUE
-The
-.BR abort ()
-function never returns.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR abort ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-SVr4, POSIX.1-2001, 4.3BSD, C89.
-.PP
-Up until glibc 2.26,
-if the
-.BR abort ()
-function caused process termination,
-all open streams were closed and flushed (as with
-.BR fclose (3)).
-However, in some cases this could result in deadlocks and data corruption.
-Therefore, starting with glibc 2.27,
-.\" glibc commit 91e7cf982d0104f0e71770f5ae8e3faf352dea9f
-.BR abort ()
-terminates the process without flushing streams.
-POSIX.1 permits either possible behavior, saying that
-.BR abort ()
-"may include an attempt to effect fclose() on all open streams".
-.SH SEE ALSO
-.BR gdb (1),
-.BR sigaction (2),
-.BR assert (3),
-.BR exit (3),
-.BR longjmp (3),
-.BR raise (3)
diff --git a/man3/abs.3 b/man3/abs.3
deleted file mode 100644
index 2c705b801..000000000
--- a/man3/abs.3
+++ /dev/null
@@ -1,127 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Mon Mar 29 22:31:13 1993, David Metcalfe
-.\" Modified Sun Jun 6 23:27:50 1993, David Metcalfe
-.\" Modified Sat Jul 24 21:45:37 1993, Rik Faith (faith@cs.unc.edu)
-.\" Modified Sat Dec 16 15:02:59 2000, Joseph S. Myers
-.\"
-.TH abs 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-abs, labs, llabs, imaxabs \- compute the absolute value of an integer
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int abs(int " j );
-.BI "long labs(long " j );
-.BI "long long llabs(long long " j );
-.PP
-.B #include <inttypes.h>
-.PP
-.BI "intmax_t imaxabs(intmax_t " j );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR llabs ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-The
-.BR abs ()
-function computes the absolute value of the integer
-argument \fIj\fP.
-The
-.BR labs (),
-.BR llabs (),
-and
-.BR imaxabs ()
-functions compute the absolute value of the argument \fIj\fP of the
-appropriate integer type for the function.
-.SH RETURN VALUE
-Returns the absolute value of the integer argument, of the appropriate
-integer type for the function.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR abs (),
-.BR labs (),
-.BR llabs (),
-.BR imaxabs ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99, SVr4, 4.3BSD.
-.\" POSIX.1 (1996 edition) requires only the
-.\" .BR abs ()
-.\" function.
-.PP
-C89 only
-includes the
-.BR abs ()
-and
-.BR labs ()
-functions; the functions
-.BR llabs ()
-and
-.BR imaxabs ()
-were added in C99.
-.SH NOTES
-Trying to take the absolute value of the most negative integer
-is not defined.
-.PP
-The
-.BR llabs ()
-function is included since glibc 2.0.
-The
-.BR imaxabs ()
-function is included since glibc 2.1.1.
-.PP
-For
-.BR llabs ()
-to be declared, it may be necessary to define
-\fB_ISOC99_SOURCE\fP or \fB_ISOC9X_SOURCE\fP (depending on the
-version of glibc) before including any standard headers.
-.PP
-By default,
-GCC handles
-.BR abs (),
-.BR labs (),
-and (since GCC 3.0)
-.BR llabs ()
-and
-.BR imaxabs ()
-as built-in functions.
-.SH SEE ALSO
-.BR cabs (3),
-.BR ceil (3),
-.BR fabs (3),
-.BR floor (3),
-.BR rint (3)
diff --git a/man3/acos.3 b/man3/acos.3
deleted file mode 100644
index 5c28c2f49..000000000
--- a/man3/acos.3
+++ /dev/null
@@ -1,124 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-07-25 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH acos 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-acos, acosf, acosl \- arc cosine function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double acos(double " x );
-.BI "float acosf(float " x );
-.BI "long double acosl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR acosf (),
-.BR acosl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions calculate the arc cosine of
-.IR x ;
-that is
-the value whose cosine is
-.IR x .
-.SH RETURN VALUE
-On success, these functions return the arc cosine of
-.I x
-in radians; the return value is in the range [0,\ pi].
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is +1,
-+0 is returned.
-.PP
-If
-.I x
-is positive infinity or negative infinity,
-a domain error occurs,
-and a NaN is returned.
-.PP
-If
-.I x
-is outside the range [\-1,\ 1],
-a domain error occurs,
-and a NaN is returned.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is outside the range [\-1,\ 1]
-.I errno
-is set to
-.BR EDOM .
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR acos (),
-.BR acosf (),
-.BR acosl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-C89, SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR asin (3),
-.BR atan (3),
-.BR atan2 (3),
-.BR cacos (3),
-.BR cos (3),
-.BR sin (3),
-.BR tan (3)
diff --git a/man3/acosf.3 b/man3/acosf.3
deleted file mode 100644
index 66104f71b..000000000
--- a/man3/acosf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/acos.3
diff --git a/man3/acosh.3 b/man3/acosh.3
deleted file mode 100644
index 717c0c376..000000000
--- a/man3/acosh.3
+++ /dev/null
@@ -1,127 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-07-25 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH acosh 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-acosh, acoshf, acoshl \- inverse hyperbolic cosine function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double acosh(double " x );
-.BI "float acoshf(float " x );
-.BI "long double acoshl(long double " x );
-.PP
-.fi
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR acosh ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR acoshf (),
-.BR acoshl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions calculate the inverse hyperbolic cosine of
-.IR x ;
-that is the value whose hyperbolic cosine is
-.IR x .
-.SH RETURN VALUE
-On success, these functions return the inverse hyperbolic cosine of
-.IR x .
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is +1, +0 is returned.
-.PP
-If
-.I x
-is positive infinity, positive infinity is returned.
-.PP
-If
-.I x
-is less than 1,
-a domain error occurs,
-and the functions return a NaN.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is less than 1
-.I errno
-is set to
-.BR EDOM .
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR acosh (),
-.BR acoshf (),
-.BR acoshl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR asinh (3),
-.BR atanh (3),
-.BR cacosh (3),
-.BR cosh (3),
-.BR sinh (3),
-.BR tanh (3)
diff --git a/man3/acoshf.3 b/man3/acoshf.3
deleted file mode 100644
index f0f5c7a00..000000000
--- a/man3/acoshf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/acosh.3
diff --git a/man3/acoshl.3 b/man3/acoshl.3
deleted file mode 100644
index f0f5c7a00..000000000
--- a/man3/acoshl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/acosh.3
diff --git a/man3/acosl.3 b/man3/acosl.3
deleted file mode 100644
index 66104f71b..000000000
--- a/man3/acosl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/acos.3
diff --git a/man3/addmntent.3 b/man3/addmntent.3
deleted file mode 100644
index 3c2bb35c9..000000000
--- a/man3/addmntent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getmntent.3
diff --git a/man3/addseverity.3 b/man3/addseverity.3
deleted file mode 100644
index 69505675d..000000000
--- a/man3/addseverity.3
+++ /dev/null
@@ -1,90 +0,0 @@
-'\" t
-.\" Copyright 2002 walter harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\" adapted glibc info page
-.\"
-.\" polished a little, aeb
-.TH addseverity 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-addseverity \- introduce new severity classes
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.PP
-.B #include <fmtmsg.h>
-.PP
-.BI "int addseverity(int " severity ", const char *" s );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR addseverity ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-This function allows the introduction of new severity classes
-which can be addressed by the
-.I severity
-argument of the
-.BR fmtmsg (3)
-function.
-By default, that function knows only how to
-print messages for severity 0-4 (with strings (none), HALT,
-ERROR, WARNING, INFO).
-This call attaches the given string
-.I s
-to the given value
-.IR severity .
-If
-.I s
-is NULL, the severity class with the numeric value
-.I severity
-is removed.
-It is not possible to overwrite or remove one of the default
-severity classes.
-The severity value must be nonnegative.
-.SH RETURN VALUE
-Upon success, the value
-.B MM_OK
-is returned.
-Upon error, the return value is
-.BR MM_NOTOK .
-Possible errors include: out of memory, attempt to remove a
-nonexistent or default severity class.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR addseverity ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH HISTORY
-glibc 2.1.
-System V.
-.SH NOTES
-New severity classes can also be added by setting the environment variable
-.BR SEV_LEVEL .
-.SH SEE ALSO
-.BR fmtmsg (3)
diff --git a/man3/adjtime.3 b/man3/adjtime.3
deleted file mode 100644
index 389af6f02..000000000
--- a/man3/adjtime.3
+++ /dev/null
@@ -1,155 +0,0 @@
-'\" t
-.\" Copyright (c) 2006 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH adjtime 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-adjtime \- correct the time to synchronize the system clock
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/time.h>
-.PP
-.BI "int adjtime(const struct timeval *" delta ", struct timeval *" olddelta );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR adjtime ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR adjtime ()
-function gradually adjusts the system clock (as returned by
-.BR gettimeofday (2)).
-The amount of time by which the clock is to be adjusted is specified
-in the structure pointed to by
-.IR delta .
-This structure has the following form:
-.PP
-.in +4n
-.EX
-struct timeval {
- time_t tv_sec; /* seconds */
- suseconds_t tv_usec; /* microseconds */
-};
-.EE
-.in
-.PP
-If the adjustment in
-.I delta
-is positive, then the system clock is speeded up by some
-small percentage (i.e., by adding a small
-amount of time to the clock value in each second) until the adjustment
-has been completed.
-If the adjustment in
-.I delta
-is negative, then the clock is slowed down in a similar fashion.
-.PP
-If a clock adjustment from an earlier
-.BR adjtime ()
-call is already in progress
-at the time of a later
-.BR adjtime ()
-call, and
-.I delta
-is not NULL for the later call, then the earlier adjustment is stopped,
-but any already completed part of that adjustment is not undone.
-.PP
-If
-.I olddelta
-is not NULL, then the buffer that it points to is used to return
-the amount of time remaining from any previous adjustment that
-has not yet been completed.
-.SH RETURN VALUE
-On success,
-.BR adjtime ()
-returns 0.
-On failure, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-The adjustment in
-.I delta
-is outside the permitted range.
-.TP
-.B EPERM
-The caller does not have sufficient privilege to adjust the time.
-Under Linux, the
-.B CAP_SYS_TIME
-capability is required.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR adjtime ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-4.3BSD, System V.
-.SH NOTES
-The adjustment that
-.BR adjtime ()
-makes to the clock is carried out in such a manner that the clock
-is always monotonically increasing.
-Using
-.BR adjtime ()
-to adjust the time prevents the problems that can be caused for certain
-applications (e.g.,
-.BR make (1))
-by abrupt positive or negative jumps in the system time.
-.PP
-.BR adjtime ()
-is intended to be used to make small adjustments to the system time.
-Most systems impose a limit on the adjustment that can be specified in
-.IR delta .
-In the glibc implementation,
-.I delta
-must be less than or equal to (INT_MAX / 1000000 \- 2)
-and greater than or equal to (INT_MIN / 1000000 + 2)
-(respectively 2145 and \-2145 seconds on i386).
-.SH BUGS
-A longstanding bug
-.\" http://sourceware.org/bugzilla/show_bug?id=2449
-.\" http://bugzilla.kernel.org/show_bug.cgi?id=6761
-meant that if
-.I delta
-was specified as NULL,
-no valid information about the outstanding clock adjustment was returned in
-.IR olddelta .
-(In this circumstance,
-.BR adjtime ()
-should return the outstanding clock adjustment, without changing it.)
-This bug is fixed
-.\" Thanks to the new adjtimex() ADJ_OFFSET_SS_READ flag
-on systems with glibc 2.8 or later and
-Linux kernel 2.6.26 or later.
-.SH SEE ALSO
-.BR adjtimex (2),
-.BR gettimeofday (2),
-.BR time (7)
diff --git a/man3/aio_cancel.3 b/man3/aio_cancel.3
deleted file mode 100644
index 7a3dfdeb5..000000000
--- a/man3/aio_cancel.3
+++ /dev/null
@@ -1,128 +0,0 @@
-'\" t
-.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH aio_cancel 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-aio_cancel \- cancel an outstanding asynchronous I/O request
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B "#include <aio.h>"
-.PP
-.BI "int aio_cancel(int " fd ", struct aiocb *" aiocbp );
-.fi
-.SH DESCRIPTION
-The
-.BR aio_cancel ()
-function attempts to cancel outstanding asynchronous I/O requests
-for the file descriptor
-.IR fd .
-If
-.I aiocbp
-is NULL, all such requests are canceled.
-Otherwise, only the request
-described by the control block pointed to by
-.I aiocbp
-is canceled.
-(See
-.BR aio (7)
-for a description of the
-.I aiocb
-structure.)
-.PP
-Normal asynchronous notification occurs for canceled requests (see
-.BR aio (7)
-and
-.BR sigevent (7)).
-The request return status
-.RB ( aio_return (3))
-is set to \-1, and the request error status
-.RB ( aio_error (3))
-is set to
-.BR ECANCELED .
-The control block of requests that cannot be canceled is not changed.
-.PP
-If the request could not be canceled,
-then it will terminate in the usual way after performing the I/O operation.
-(In this case,
-.BR aio_error (3)
-will return the status
-.BR EINPROGRESSS .)
-.PP
-If
-.I aiocbp
-is not NULL, and
-.I fd
-differs from the file descriptor with which the asynchronous operation
-was initiated, unspecified results occur.
-.PP
-Which operations are cancelable is implementation-defined.
-.\" FreeBSD: not those on raw disk devices.
-.SH RETURN VALUE
-The
-.BR aio_cancel ()
-function returns one of the following values:
-.TP
-.B AIO_CANCELED
-All requests were successfully canceled.
-.TP
-.B AIO_NOTCANCELED
-At least one of the
-requests specified was not canceled because it was in progress.
-In this case, one may check the status of individual requests using
-.BR aio_error (3).
-.TP
-.B AIO_ALLDONE
-All requests had already been completed before the call.
-.TP
-\-1
-An error occurred.
-The cause of the error can be found by inspecting
-.IR errno .
-.SH ERRORS
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor.
-.TP
-.B ENOSYS
-.BR aio_cancel ()
-is not implemented.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR aio_cancel ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001.
-.SH EXAMPLES
-See
-.BR aio (7).
-.SH SEE ALSO
-.BR aio_error (3),
-.BR aio_fsync (3),
-.BR aio_read (3),
-.BR aio_return (3),
-.BR aio_suspend (3),
-.BR aio_write (3),
-.BR lio_listio (3),
-.BR aio (7)
diff --git a/man3/aio_error.3 b/man3/aio_error.3
deleted file mode 100644
index e28fdaa0d..000000000
--- a/man3/aio_error.3
+++ /dev/null
@@ -1,98 +0,0 @@
-'\" t
-.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH aio_error 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-aio_error \- get error status of asynchronous I/O operation
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B "#include <aio.h>"
-.PP
-.BI "int aio_error(const struct aiocb *" aiocbp );
-.fi
-.SH DESCRIPTION
-The
-.BR aio_error ()
-function returns the error status for the asynchronous I/O request
-with control block pointed to by
-.IR aiocbp .
-(See
-.BR aio (7)
-for a description of the
-.I aiocb
-structure.)
-.SH RETURN VALUE
-This function returns one of the following:
-.TP
-.B EINPROGRESS
-if the request has not been
-completed yet.
-.TP
-.B ECANCELED
-if the request was canceled.
-.TP
-.B 0
-if the request completed successfully.
-.TP
-.RB "> " 0
-A positive error number, if the asynchronous I/O operation failed.
-This is the same value that would have been stored in the
-.I errno
-variable in the case of a synchronous
-.BR read (2),
-.BR write (2),
-.BR fsync (2),
-or
-.BR fdatasync (2)
-call.
-.SH ERRORS
-.TP
-.B EINVAL
-.I aiocbp
-does not point at a control block for an asynchronous I/O request
-of which the return status (see
-.BR aio_return (3))
-has not been retrieved yet.
-.TP
-.B ENOSYS
-.BR aio_error ()
-is not implemented.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR aio_error ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001.
-.SH EXAMPLES
-See
-.BR aio (7).
-.SH SEE ALSO
-.BR aio_cancel (3),
-.BR aio_fsync (3),
-.BR aio_read (3),
-.BR aio_return (3),
-.BR aio_suspend (3),
-.BR aio_write (3),
-.BR lio_listio (3),
-.BR aio (7)
diff --git a/man3/aio_fsync.3 b/man3/aio_fsync.3
deleted file mode 100644
index 4138224fc..000000000
--- a/man3/aio_fsync.3
+++ /dev/null
@@ -1,115 +0,0 @@
-'\" t
-.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH aio_fsync 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-aio_fsync \- asynchronous file synchronization
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B "#include <aio.h>"
-.PP
-.BI "int aio_fsync(int " op ", struct aiocb *" aiocbp );
-.fi
-.SH DESCRIPTION
-The
-.BR aio_fsync ()
-function does a sync on all outstanding asynchronous I/O operations
-associated with
-.IR aiocbp\->aio_fildes .
-(See
-.BR aio (7)
-for a description of the
-.I aiocb
-structure.)
-.PP
-More precisely, if
-.I op
-is
-.BR O_SYNC ,
-then all currently queued I/O operations shall be
-completed as if by a call of
-.BR fsync (2),
-and if
-.I op
-is
-.BR O_DSYNC ,
-this call is the asynchronous analog of
-.BR fdatasync (2).
-.PP
-Note that this is a request only; it does not wait for I/O completion.
-.PP
-Apart from
-.IR aio_fildes ,
-the only field in the structure pointed to by
-.I aiocbp
-that is used by this call is the
-.I aio_sigevent
-field (a
-.I sigevent
-structure, described in
-.BR sigevent (7)),
-which indicates the desired type of asynchronous notification at completion.
-All other fields are ignored.
-.SH RETURN VALUE
-On success (the sync request was successfully queued)
-this function returns 0.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-Out of resources.
-.TP
-.B EBADF
-.I aio_fildes
-is not a valid file descriptor open for writing.
-.TP
-.B EINVAL
-Synchronized I/O is not supported for this file, or
-.I op
-is not
-.B O_SYNC
-or
-.BR O_DSYNC .
-.TP
-.B ENOSYS
-.BR aio_fsync ()
-is not implemented.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR aio_fsync ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001.
-.SH SEE ALSO
-.BR aio_cancel (3),
-.BR aio_error (3),
-.BR aio_read (3),
-.BR aio_return (3),
-.BR aio_suspend (3),
-.BR aio_write (3),
-.BR lio_listio (3),
-.BR aio (7),
-.BR sigevent (7)
diff --git a/man3/aio_init.3 b/man3/aio_init.3
deleted file mode 100644
index 012e58ebd..000000000
--- a/man3/aio_init.3
+++ /dev/null
@@ -1,78 +0,0 @@
-.\" Copyright (c) 2010 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH aio_init 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-aio_init \- asynchronous I/O initialization
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B "#include <aio.h>"
-.PP
-.BI "void aio_init(const struct aioinit *" init );
-.fi
-.SH DESCRIPTION
-The GNU-specific
-.BR aio_init ()
-function allows the caller to provide tuning hints to the
-glibc POSIX AIO implementation.
-Use of this function is optional, but to be effective,
-it must be called before employing any other functions in the POSIX AIO API.
-.PP
-The tuning information is provided in the buffer pointed to by the argument
-.IR init .
-This buffer is a structure of the following form:
-.PP
-.in +4n
-.EX
-struct aioinit {
- int aio_threads; /* Maximum number of threads */
- int aio_num; /* Number of expected simultaneous
- requests */
- int aio_locks; /* Not used */
- int aio_usedba; /* Not used */
- int aio_debug; /* Not used */
- int aio_numusers; /* Not used */
- int aio_idle_time; /* Number of seconds before idle thread
- terminates (since glibc 2.2) */
- int aio_reserved;
-};
-.EE
-.in
-.PP
-The following fields are used in the
-.I aioinit
-structure:
-.TP
-.I aio_threads
-This field specifies the maximum number of worker threads that
-may be used by the implementation.
-If the number of outstanding I/O operations exceeds this limit,
-then excess operations will be queued until a worker thread becomes free.
-If this field is specified with a value less than 1, the value 1 is used.
-The default value is 20.
-.TP
-.I aio_num
-This field should specify the maximum number of simultaneous I/O requests
-that the caller expects to enqueue.
-If a value less than 32 is specified for this field,
-it is rounded up to 32.
-.\" FIXME . But, if aio_num > 32, the behavior looks strange. See
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=12083
-The default value is 64.
-.TP
-.I aio_idle_time
-This field specifies the amount of time in seconds that a
-worker thread should wait for further requests before terminating,
-after having completed a previous request.
-The default value is 1.
-.SH STANDARDS
-GNU.
-.SH HISTORY
-glibc 2.1.
-.SH SEE ALSO
-.BR aio (7)
diff --git a/man3/aio_read.3 b/man3/aio_read.3
deleted file mode 100644
index 59d757545..000000000
--- a/man3/aio_read.3
+++ /dev/null
@@ -1,162 +0,0 @@
-'\" t
-.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH aio_read 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-aio_read \- asynchronous read
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B "#include <aio.h>"
-.PP
-.BI "int aio_read(struct aiocb *" aiocbp );
-.fi
-.SH DESCRIPTION
-The
-.BR aio_read ()
-function queues the I/O request described by the buffer pointed to by
-.IR aiocbp .
-This function is the asynchronous analog of
-.BR read (2).
-The arguments of the call
-.PP
-.in +4n
-.EX
-read(fd, buf, count)
-.EE
-.in
-.PP
-correspond (in order) to the fields
-.IR aio_fildes ,
-.IR aio_buf ,
-and
-.I aio_nbytes
-of the structure pointed to by
-.IR aiocbp .
-(See
-.BR aio (7)
-for a description of the
-.I aiocb
-structure.)
-.PP
-The data is read starting at the absolute position
-.IR aiocbp\->aio_offset ,
-regardless of the file offset.
-After the call,
-the value of the file offset is unspecified.
-.PP
-The "asynchronous" means that this call returns as soon as the
-request has been enqueued; the read may or may not have completed
-when the call returns.
-One tests for completion using
-.BR aio_error (3).
-The return status of a completed I/O operation can be obtained by
-.BR aio_return (3).
-Asynchronous notification of I/O completion can be obtained by setting
-.I aiocbp\->aio_sigevent
-appropriately; see
-.BR sigevent (7)
-for details.
-.PP
-If
-.B _POSIX_PRIORITIZED_IO
-is defined, and this file supports it,
-then the asynchronous operation is submitted at a priority equal
-to that of the calling process minus
-.IR aiocbp\->aio_reqprio .
-.PP
-The field
-.I aiocbp\->aio_lio_opcode
-is ignored.
-.PP
-No data is read from a regular file beyond its maximum offset.
-.SH RETURN VALUE
-On success, 0 is returned.
-On error, the request is not enqueued, \-1
-is returned, and
-.I errno
-is set to indicate the error.
-If an error is detected only later, it will
-be reported via
-.BR aio_return (3)
-(returns status \-1) and
-.BR aio_error (3)
-(error status\[em]whatever one would have gotten in
-.IR errno ,
-such as
-.BR EBADF ).
-.SH ERRORS
-.TP
-.B EAGAIN
-Out of resources.
-.TP
-.B EBADF
-.I aio_fildes
-is not a valid file descriptor open for reading.
-.TP
-.B EINVAL
-One or more of
-.IR aio_offset ,
-.IR aio_reqprio ,
-or
-.I aio_nbytes
-are invalid.
-.TP
-.B ENOSYS
-.BR aio_read ()
-is not implemented.
-.TP
-.B EOVERFLOW
-The file is a regular file, we start reading before end-of-file
-and want at least one byte, but the starting position is past
-the maximum offset for this file.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR aio_read ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001.
-.SH NOTES
-It is a good idea to zero out the control block before use.
-The control block must not be changed while the read operation
-is in progress.
-The buffer area being read into
-.\" or the control block of the operation
-must not be accessed during the operation or undefined results may occur.
-The memory areas involved must remain valid.
-.PP
-Simultaneous I/O operations specifying the same
-.I aiocb
-structure produce undefined results.
-.SH EXAMPLES
-See
-.BR aio (7).
-.SH SEE ALSO
-.BR aio_cancel (3),
-.BR aio_error (3),
-.BR aio_fsync (3),
-.BR aio_return (3),
-.BR aio_suspend (3),
-.BR aio_write (3),
-.BR lio_listio (3),
-.BR aio (7)
diff --git a/man3/aio_return.3 b/man3/aio_return.3
deleted file mode 100644
index 1d9210ef8..000000000
--- a/man3/aio_return.3
+++ /dev/null
@@ -1,92 +0,0 @@
-'\" t
-.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH aio_return 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-aio_return \- get return status of asynchronous I/O operation
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B "#include <aio.h>"
-.PP
-.BI "ssize_t aio_return(struct aiocb *" aiocbp );
-.fi
-.SH DESCRIPTION
-The
-.BR aio_return ()
-function returns the final return status for the asynchronous I/O request
-with control block pointed to by
-.IR aiocbp .
-(See
-.BR aio (7)
-for a description of the
-.I aiocb
-structure.)
-.PP
-This function should be called only once for any given request, after
-.BR aio_error (3)
-returns something other than
-.BR EINPROGRESS .
-.SH RETURN VALUE
-If the asynchronous I/O operation has completed, this function returns
-the value that would have been returned in case of a synchronous
-.BR read (2),
-.BR write (2),
-.BR fsync (2),
-or
-.BR fdatasync (2),
-call.
-On error, \-1 is returned, and \fIerrno\fP is set to indicate the error.
-.PP
-If the asynchronous I/O operation has not yet completed,
-the return value and effect of
-.BR aio_return ()
-are undefined.
-.SH ERRORS
-.TP
-.B EINVAL
-.I aiocbp
-does not point at a control block for an asynchronous I/O request
-of which the return status has not been retrieved yet.
-.TP
-.B ENOSYS
-.BR aio_return ()
-is not implemented.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR aio_return ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001.
-.SH EXAMPLES
-See
-.BR aio (7).
-.SH SEE ALSO
-.BR aio_cancel (3),
-.BR aio_error (3),
-.BR aio_fsync (3),
-.BR aio_read (3),
-.BR aio_suspend (3),
-.BR aio_write (3),
-.BR lio_listio (3),
-.BR aio (7)
diff --git a/man3/aio_suspend.3 b/man3/aio_suspend.3
deleted file mode 100644
index 1bf70135f..000000000
--- a/man3/aio_suspend.3
+++ /dev/null
@@ -1,146 +0,0 @@
-'\" t
-.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl)
-.\" and Copyright (C) 2010 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH aio_suspend 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-aio_suspend \- wait for asynchronous I/O operation or timeout
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.PP
-.B "#include <aio.h>"
-.PP
-.BI "int aio_suspend(const struct aiocb *const " aiocb_list "[], int " nitems ,
-.BI " const struct timespec *restrict " timeout );
-.fi
-.SH DESCRIPTION
-The
-.BR aio_suspend ()
-function suspends the calling thread until one of the following occurs:
-.IP \[bu] 3
-One or more of the asynchronous I/O requests in the list
-.I aiocb_list
-has completed.
-.IP \[bu]
-A signal is delivered.
-.IP \[bu]
-.I timeout
-is not NULL and the specified time interval has passed.
-(For details of the
-.I timespec
-structure, see
-.BR nanosleep (2).)
-.PP
-The
-.I nitems
-argument specifies the number of items in
-.IR aiocb_list .
-Each item in the list pointed to by
-.I aiocb_list
-must be either NULL (and then is ignored),
-or a pointer to a control block on which I/O was initiated using
-.BR aio_read (3),
-.BR aio_write (3),
-or
-.BR lio_listio (3).
-(See
-.BR aio (7)
-for a description of the
-.I aiocb
-structure.)
-.PP
-If
-.B CLOCK_MONOTONIC
-is supported, this clock is used to measure
-the timeout interval (see
-.BR clock_gettime (2)).
-.SH RETURN VALUE
-If this function returns after completion of one of the I/O
-requests specified in
-.IR aiocb_list ,
-0 is returned.
-Otherwise, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-The call timed out before any of the indicated operations
-had completed.
-.TP
-.B EINTR
-The call was ended by signal
-(possibly the completion signal of one of the operations we were
-waiting for); see
-.BR signal (7).
-.TP
-.B ENOSYS
-.BR aio_suspend ()
-is not implemented.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR aio_suspend ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001.
-.PP
-POSIX doesn't specify the parameters to be
-.IR restrict ;
-that is specific to glibc.
-.SH NOTES
-One can achieve polling by using a non-NULL
-.I timeout
-that specifies a zero time interval.
-.PP
-If one or more of the asynchronous I/O operations specified in
-.I aiocb_list
-has already completed at the time of the call to
-.BR aio_suspend (),
-then the call returns immediately.
-.PP
-To determine which I/O operations have completed
-after a successful return from
-.BR aio_suspend (),
-use
-.BR aio_error (3)
-to scan the list of
-.I aiocb
-structures pointed to by
-.IR aiocb_list .
-.SH BUGS
-The glibc implementation of
-.BR aio_suspend ()
-is not async-signal-safe,
-.\" FIXME . https://sourceware.org/bugzilla/show_bug.cgi?id=13172
-in violation of the requirements of POSIX.1.
-.SH SEE ALSO
-.BR aio_cancel (3),
-.BR aio_error (3),
-.BR aio_fsync (3),
-.BR aio_read (3),
-.BR aio_return (3),
-.BR aio_write (3),
-.BR lio_listio (3),
-.BR aio (7),
-.BR time (7)
diff --git a/man3/aio_write.3 b/man3/aio_write.3
deleted file mode 100644
index 2f918ecdc..000000000
--- a/man3/aio_write.3
+++ /dev/null
@@ -1,164 +0,0 @@
-'\" t
-.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH aio_write 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-aio_write \- asynchronous write
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B "#include <aio.h>"
-.PP
-.BI "int aio_write(struct aiocb *" aiocbp );
-.fi
-.SH DESCRIPTION
-The
-.BR aio_write ()
-function queues the I/O request described by the buffer pointed to by
-.IR aiocbp .
-This function is the asynchronous analog of
-.BR write (2).
-The arguments of the call
-.PP
-.in +4n
-.EX
-write(fd, buf, count)
-.EE
-.in
-.PP
-correspond (in order) to the fields
-.IR aio_fildes ,
-.IR aio_buf ,
-and
-.I aio_nbytes
-of the structure pointed to by
-.IR aiocbp .
-(See
-.BR aio (7)
-for a description of the
-.I aiocb
-structure.)
-.PP
-If
-.B O_APPEND
-is not set, the data is written starting at the
-absolute position
-.IR aiocbp\->aio_offset ,
-regardless of the file offset.
-If
-.B O_APPEND
-is set, data is written at the end of the file in the same order as
-.BR aio_write ()
-calls are made.
-After the call, the value of the file offset is unspecified.
-.PP
-The "asynchronous" means that this call returns as soon as the
-request has been enqueued; the write may or may not have completed
-when the call returns.
-One tests for completion using
-.BR aio_error (3).
-The return status of a completed I/O operation can be obtained
-.BR aio_return (3).
-Asynchronous notification of I/O completion can be obtained by setting
-.I aiocbp\->aio_sigevent
-appropriately; see
-.BR sigevent (7)
-for details.
-.PP
-If
-.B _POSIX_PRIORITIZED_IO
-is defined, and this file supports it,
-then the asynchronous operation is submitted at a priority equal
-to that of the calling process minus
-.IR aiocbp\->aio_reqprio .
-.PP
-The field
-.I aiocbp\->aio_lio_opcode
-is ignored.
-.PP
-No data is written to a regular file beyond its maximum offset.
-.SH RETURN VALUE
-On success, 0 is returned.
-On error, the request is not enqueued, \-1
-is returned, and
-.I errno
-is set to indicate the error.
-If an error is detected only later, it will
-be reported via
-.BR aio_return (3)
-(returns status \-1) and
-.BR aio_error (3)
-(error status\[em]whatever one would have gotten in
-.IR errno ,
-such as
-.BR EBADF ).
-.SH ERRORS
-.TP
-.B EAGAIN
-Out of resources.
-.TP
-.B EBADF
-.I aio_fildes
-is not a valid file descriptor open for writing.
-.TP
-.B EFBIG
-The file is a regular file, we want to write at least one byte,
-but the starting position is at or beyond the maximum offset for this file.
-.TP
-.B EINVAL
-One or more of
-.IR aio_offset ,
-.IR aio_reqprio ,
-.I aio_nbytes
-are invalid.
-.TP
-.B ENOSYS
-.BR aio_write ()
-is not implemented.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR aio_write ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001.
-.SH NOTES
-It is a good idea to zero out the control block before use.
-The control block must not be changed while the write operation
-is in progress.
-The buffer area being written out
-.\" or the control block of the operation
-must not be accessed during the operation or undefined results may occur.
-The memory areas involved must remain valid.
-.PP
-Simultaneous I/O operations specifying the same
-.I aiocb
-structure produce undefined results.
-.SH SEE ALSO
-.BR aio_cancel (3),
-.BR aio_error (3),
-.BR aio_fsync (3),
-.BR aio_read (3),
-.BR aio_return (3),
-.BR aio_suspend (3),
-.BR lio_listio (3),
-.BR aio (7)
diff --git a/man3/aligned_alloc.3 b/man3/aligned_alloc.3
deleted file mode 100644
index 791d4c801..000000000
--- a/man3/aligned_alloc.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/posix_memalign.3
diff --git a/man3/alloca.3 b/man3/alloca.3
deleted file mode 100644
index ddc1d6b4f..000000000
--- a/man3/alloca.3
+++ /dev/null
@@ -1,141 +0,0 @@
-'\" t
-.\" Copyright (c) 1980, 1991 Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)alloca.3 5.1 (Berkeley) 5/2/91
-.\"
-.\" Converted Mon Nov 29 11:05:55 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Tue Oct 22 23:41:56 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2002-07-17, aeb
-.\" 2008-01-24, mtk:
-.\" Various rewrites and additions (notes on longjmp() and SIGSEGV).
-.\" Weaken warning against use of alloca() (as per Debian bug 461100).
-.\"
-.TH alloca 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-alloca \- allocate memory that is automatically freed
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <alloca.h>
-.PP
-.BI "void *alloca(size_t " size );
-.fi
-.SH DESCRIPTION
-The
-.BR alloca ()
-function allocates
-.I size
-bytes of space in the stack frame of the caller.
-This temporary space is
-automatically freed when the function that called
-.BR alloca ()
-returns to its caller.
-.SH RETURN VALUE
-The
-.BR alloca ()
-function returns a pointer to the beginning of the allocated space.
-If the allocation causes stack overflow, program behavior is undefined.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR alloca ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-PWB, 32V.
-.SH NOTES
-The
-.BR alloca ()
-function is machine- and compiler-dependent.
-Because it allocates from the stack, it's faster than
-.BR malloc (3)
-and
-.BR free (3).
-In certain cases,
-it can also simplify memory deallocation in applications that use
-.BR longjmp (3)
-or
-.BR siglongjmp (3).
-Otherwise, its use is discouraged.
-.PP
-Because the space allocated by
-.BR alloca ()
-is allocated within the stack frame,
-that space is automatically freed if the function return
-is jumped over by a call to
-.BR longjmp (3)
-or
-.BR siglongjmp (3).
-.PP
-The space allocated by
-.BR alloca ()
-is
-.I not
-automatically deallocated if the pointer that refers to it
-simply goes out of scope.
-.PP
-Do not attempt to
-.BR free (3)
-space allocated by
-.BR alloca ()!
-.PP
-By necessity,
-.BR alloca ()
-is a compiler built-in, also known as
-.BR __builtin_alloca ().
-By default, modern compilers automatically translate all uses of
-.BR alloca ()
-into the built-in, but this is forbidden if standards conformance is requested
-.RI ( "\-ansi" ,
-.IR "\-std=c*" ),
-in which case
-.I <alloca.h>
-is required, lest a symbol dependency be emitted.
-.PP
-The fact that
-.BR alloca ()
-is a built-in means it is impossible to take its address
-or to change its behavior by linking with a different library.
-.PP
-Variable length arrays (VLAs) are part of the C99 standard,
-optional since C11, and can be used for a similar purpose.
-However, they do not port to standard C++, and, being variables,
-live in their block scope and don't have an allocator-like interface,
-making them unfit for implementing functionality like
-.BR strdupa (3).
-.SH BUGS
-Due to the nature of the stack, it is impossible to check if the allocation
-would overflow the space available, and, hence, neither is indicating an error.
-(However, the program is likely to receive a
-.B SIGSEGV
-signal if it attempts to access unavailable space.)
-.PP
-On many systems
-.BR alloca ()
-cannot be used inside the list of arguments of a function call, because
-the stack space reserved by
-.BR alloca ()
-would appear on the stack in the middle of the space for the
-function arguments.
-.SH SEE ALSO
-.BR brk (2),
-.BR longjmp (3),
-.BR malloc (3)
diff --git a/man3/alphasort.3 b/man3/alphasort.3
deleted file mode 100644
index 7e757c7a0..000000000
--- a/man3/alphasort.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/scandir.3
diff --git a/man3/arc4random.3 b/man3/arc4random.3
deleted file mode 100644
index c268b6040..000000000
--- a/man3/arc4random.3
+++ /dev/null
@@ -1,112 +0,0 @@
-'\" t
-.\" Copyright (C) 2023 Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH arc4random 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-arc4random, arc4random_uniform, arc4random_buf
-\- cryptographically-secure pseudorandom number generator
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.B uint32_t arc4random(void);
-.BI "uint32_t arc4random_uniform(uint32_t " upper_bound );
-.BI "void arc4random_buf(void " buf [. n "], size_t " n );
-.fi
-.SH DESCRIPTION
-These functions give cryptographically-secure pseudorandom numbers.
-.PP
-.BR arc4random ()
-returns a uniformly-distributed value.
-.PP
-.BR arc4random_uniform ()
-returns a uniformly-distributed value less than
-.I upper_bound
-(see BUGS).
-.PP
-.BR arc4random_buf ()
-fills the memory pointed to by
-.IR buf ,
-with
-.I n
-bytes of pseudorandom data.
-.PP
-The
-.BR rand (3)
-and
-.BR drand48 (3)
-families of functions should only be used where
-the quality of the pseudorandom numbers is not a concern
-.I and
-there's a need for repeatability of the results.
-Unless you meet both of those conditions,
-use the
-.BR arc4random ()
-functions.
-.SH RETURN VALUE
-.BR arc4random ()
-returns a pseudorandom number.
-.PP
-.BR arc4random_uniform ()
-returns a pseudorandom number less than
-.I upper_bound
-for valid input, or
-.B 0
-when
-.I upper_bound
-is invalid.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR arc4random (),
-.BR arc4random_uniform (),
-.BR arc4random_buf ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-BSD.
-.SH HISTORY
-OpenBSD 2.1,
-FreeBSD 3.0,
-NetBSD 1.6,
-DragonFly 1.0,
-libbsd,
-glibc 2.36.
-.SH BUGS
-An
-.I upper_bound
-of
-.B 0
-doesn't make sense in a call to
-.BR arc4random_uniform ().
-Such a call will fail, and return
-.BR 0 .
-Be careful,
-since that value is
-.I not
-less than
-.IR upper_bound .
-In some cases,
-such as accessing an array,
-using that value could result in Undefined Behavior.
-.SH SEE ALSO
-.BR getrandom (3),
-.BR rand (3),
-.BR drand48 (3),
-.BR random (7)
diff --git a/man3/arc4random_buf.3 b/man3/arc4random_buf.3
deleted file mode 100644
index 74a34ce1a..000000000
--- a/man3/arc4random_buf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/arc4random.3
diff --git a/man3/arc4random_uniform.3 b/man3/arc4random_uniform.3
deleted file mode 100644
index 74a34ce1a..000000000
--- a/man3/arc4random_uniform.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/arc4random.3
diff --git a/man3/argz.3 b/man3/argz.3
deleted file mode 100644
index 25a6e267c..000000000
--- a/man3/argz.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/argz_add.3
diff --git a/man3/argz_add.3 b/man3/argz_add.3
deleted file mode 100644
index 81cb2f561..000000000
--- a/man3/argz_add.3
+++ /dev/null
@@ -1,240 +0,0 @@
-'\" t
-.\" Copyright 2002 walter harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" based on the description in glibc source and infopages
-.\"
-.\" Corrections and additions, aeb
-.TH argz_add 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-argz_add, argz_add_sep, argz_append, argz_count, argz_create,
-argz_create_sep, argz_delete, argz_extract, argz_insert,
-argz_next, argz_replace, argz_stringify \- functions to handle an argz list
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B "#include <argz.h>"
-.PP
-.BI "error_t argz_add(char **restrict " argz ", size_t *restrict " argz_len ,
-.BI " const char *restrict " str );
-.PP
-.BI "error_t argz_add_sep(char **restrict " argz \
-", size_t *restrict " argz_len ,
-.BI " const char *restrict " str ", int " delim );
-.PP
-.BI "error_t argz_append(char **restrict " argz ", size_t *restrict " argz_len ,
-.BI " const char *restrict " buf ", size_t " buf_len );
-.PP
-.BI "size_t argz_count(const char *" argz ", size_t " argz_len );
-.PP
-.BI "error_t argz_create(char *const " argv "[], char **restrict " argz ,
-.BI " size_t *restrict " argz_len );
-.PP
-.BI "error_t argz_create_sep(const char *restrict " str ", int " sep ,
-.BI " char **restrict " argz ", size_t *restrict " argz_len );
-.PP
-.BI "void argz_delete(char **restrict " argz ", size_t *restrict " argz_len ,
-.BI " char *restrict " entry );
-.PP
-.BI "void argz_extract(const char *restrict " argz ", size_t " argz_len ,
-.BI " char **restrict " argv );
-.PP
-.BI "error_t argz_insert(char **restrict " argz ", size_t *restrict " argz_len ,
-.BI " char *restrict " before ", const char *restrict " entry );
-.PP
-.BI "char *argz_next(const char *restrict " argz ", size_t " argz_len ,
-.BI " const char *restrict " entry );
-.PP
-.BI "error_t argz_replace(char **restrict " argz \
-", size_t *restrict " argz_len ,
-.BI " const char *restrict " str ", const char *restrict " with ,
-.BI " unsigned int *restrict " replace_count );
-.PP
-.BI "void argz_stringify(char *" argz ", size_t " len ", int " sep );
-.fi
-.SH DESCRIPTION
-These functions are glibc-specific.
-.PP
-An argz vector is a pointer to a character buffer together with a length.
-The intended interpretation of the character buffer is an array
-of strings, where the strings are separated by null bytes (\[aq]\e0\[aq]).
-If the length is nonzero, the last byte of the buffer must be a null byte.
-.PP
-These functions are for handling argz vectors.
-The pair (NULL,0) is an argz vector, and, conversely,
-argz vectors of length 0 must have null pointer.
-Allocation of nonempty argz vectors is done using
-.BR malloc (3),
-so that
-.BR free (3)
-can be used to dispose of them again.
-.PP
-.BR argz_add ()
-adds the string
-.I str
-at the end of the array
-.IR *argz ,
-and updates
-.I *argz
-and
-.IR *argz_len .
-.PP
-.BR argz_add_sep ()
-is similar, but splits the string
-.I str
-into substrings separated by the delimiter
-.IR delim .
-For example, one might use this on a UNIX search path with
-delimiter \[aq]:\[aq].
-.PP
-.BR argz_append ()
-appends the argz vector
-.RI ( buf ,\ buf_len )
-after
-.RI ( *argz ,\ *argz_len )
-and updates
-.I *argz
-and
-.IR *argz_len .
-(Thus,
-.I *argz_len
-will be increased by
-.IR buf_len .)
-.PP
-.BR argz_count ()
-counts the number of strings, that is,
-the number of null bytes (\[aq]\e0\[aq]), in
-.RI ( argz ,\ argz_len ).
-.PP
-.BR argz_create ()
-converts a UNIX-style argument vector
-.IR argv ,
-terminated by
-.IR "(char\ *)\ 0" ,
-into an argz vector
-.RI ( *argz ,\ *argz_len ).
-.PP
-.BR argz_create_sep ()
-converts the null-terminated string
-.I str
-into an argz vector
-.RI ( *argz ,\ *argz_len )
-by breaking it up at every occurrence of the separator
-.IR sep .
-.PP
-.BR argz_delete ()
-removes the substring pointed to by
-.I entry
-from the argz vector
-.RI ( *argz ,\ *argz_len )
-and updates
-.I *argz
-and
-.IR *argz_len .
-.PP
-.BR argz_extract ()
-is the opposite of
-.BR argz_create ().
-It takes the argz vector
-.RI ( argz ,\ argz_len )
-and fills the array starting at
-.I argv
-with pointers to the substrings, and a final NULL,
-making a UNIX-style argv vector.
-The array
-.I argv
-must have room for
-.IR argz_count ( argz ", " argz_len ") + 1"
-pointers.
-.PP
-.BR argz_insert ()
-is the opposite of
-.BR argz_delete ().
-It inserts the argument
-.I entry
-at position
-.I before
-into the argz vector
-.RI ( *argz ,\ *argz_len )
-and updates
-.I *argz
-and
-.IR *argz_len .
-If
-.I before
-is NULL, then
-.I entry
-will inserted at the end.
-.PP
-.BR argz_next ()
-is a function to step through the argz vector.
-If
-.I entry
-is NULL, the first entry is returned.
-Otherwise, the entry
-following is returned.
-It returns NULL if there is no following entry.
-.PP
-.BR argz_replace ()
-replaces each occurrence of
-.I str
-with
-.IR with ,
-reallocating argz as necessary.
-If
-.I replace_count
-is non-NULL,
-.I *replace_count
-will be incremented by the number of replacements.
-.PP
-.BR argz_stringify ()
-is the opposite of
-.BR argz_create_sep ().
-It transforms the argz vector into a normal string by replacing
-all null bytes (\[aq]\e0\[aq]) except the last by
-.IR sep .
-.SH RETURN VALUE
-All argz functions that do memory allocation have a return type of
-.I error_t
-(an integer type),
-and return 0 for success, and
-.B ENOMEM
-if an allocation error occurs.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR argz_add (),
-.BR argz_add_sep (),
-.BR argz_append (),
-.BR argz_count (),
-.BR argz_create (),
-.BR argz_create_sep (),
-.BR argz_delete (),
-.BR argz_extract (),
-.BR argz_insert (),
-.BR argz_next (),
-.BR argz_replace (),
-.BR argz_stringify ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH BUGS
-Argz vectors without a terminating null byte may lead to
-Segmentation Faults.
-.SH SEE ALSO
-.BR envz_add (3)
diff --git a/man3/argz_add_sep.3 b/man3/argz_add_sep.3
deleted file mode 100644
index 25a6e267c..000000000
--- a/man3/argz_add_sep.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/argz_add.3
diff --git a/man3/argz_append.3 b/man3/argz_append.3
deleted file mode 100644
index 25a6e267c..000000000
--- a/man3/argz_append.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/argz_add.3
diff --git a/man3/argz_count.3 b/man3/argz_count.3
deleted file mode 100644
index 25a6e267c..000000000
--- a/man3/argz_count.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/argz_add.3
diff --git a/man3/argz_create.3 b/man3/argz_create.3
deleted file mode 100644
index 25a6e267c..000000000
--- a/man3/argz_create.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/argz_add.3
diff --git a/man3/argz_create_sep.3 b/man3/argz_create_sep.3
deleted file mode 100644
index 25a6e267c..000000000
--- a/man3/argz_create_sep.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/argz_add.3
diff --git a/man3/argz_delete.3 b/man3/argz_delete.3
deleted file mode 100644
index 25a6e267c..000000000
--- a/man3/argz_delete.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/argz_add.3
diff --git a/man3/argz_extract.3 b/man3/argz_extract.3
deleted file mode 100644
index 25a6e267c..000000000
--- a/man3/argz_extract.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/argz_add.3
diff --git a/man3/argz_insert.3 b/man3/argz_insert.3
deleted file mode 100644
index 25a6e267c..000000000
--- a/man3/argz_insert.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/argz_add.3
diff --git a/man3/argz_next.3 b/man3/argz_next.3
deleted file mode 100644
index 25a6e267c..000000000
--- a/man3/argz_next.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/argz_add.3
diff --git a/man3/argz_replace.3 b/man3/argz_replace.3
deleted file mode 100644
index 25a6e267c..000000000
--- a/man3/argz_replace.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/argz_add.3
diff --git a/man3/argz_stringify.3 b/man3/argz_stringify.3
deleted file mode 100644
index 25a6e267c..000000000
--- a/man3/argz_stringify.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/argz_add.3
diff --git a/man3/asctime.3 b/man3/asctime.3
deleted file mode 100644
index 84a3baa92..000000000
--- a/man3/asctime.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ctime.3
diff --git a/man3/asctime_r.3 b/man3/asctime_r.3
deleted file mode 100644
index 84a3baa92..000000000
--- a/man3/asctime_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ctime.3
diff --git a/man3/asin.3 b/man3/asin.3
deleted file mode 100644
index 5e8e93824..000000000
--- a/man3/asin.3
+++ /dev/null
@@ -1,120 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-07-25 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH asin 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-asin, asinf, asinl \- arc sine function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double asin(double " x );
-.BI "float asinf(float " x );
-.BI "long double asinl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR asinf (),
-.BR asinl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions calculate the principal value of the arc sine of
-.IR x ;
-that is the value whose sine is
-.IR x .
-.SH RETURN VALUE
-On success, these functions return the principal value of the arc sine of
-.I x
-in radians; the return value is in the range [\-pi/2,\ pi/2].
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is +0 (\-0),
-+0 (\-0) is returned.
-.PP
-If
-.I x
-is outside the range [\-1,\ 1],
-a domain error occurs,
-and a NaN is returned.
-.\"
-.\" POSIX.1-2001 documents an optional range error for subnormal x;
-.\" glibc 2.8 does not do this.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is outside the range [\-1,\ 1]
-.I errno
-is set to
-.BR EDOM .
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR asin (),
-.BR asinf (),
-.BR asinl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH SEE ALSO
-.BR acos (3),
-.BR atan (3),
-.BR atan2 (3),
-.BR casin (3),
-.BR cos (3),
-.BR sin (3),
-.BR tan (3)
diff --git a/man3/asinf.3 b/man3/asinf.3
deleted file mode 100644
index 4c88df085..000000000
--- a/man3/asinf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/asin.3
diff --git a/man3/asinh.3 b/man3/asinh.3
deleted file mode 100644
index 5c7837d54..000000000
--- a/man3/asinh.3
+++ /dev/null
@@ -1,112 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH asinh 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-asinh, asinhf, asinhl \- inverse hyperbolic sine function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double asinh(double " x );
-.BI "float asinhf(float " x );
-.BI "long double asinhl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR asinh ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR asinhf (),
-.BR asinhl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions calculate the inverse hyperbolic sine of
-.IR x ;
-that is the value whose hyperbolic sine is
-.IR x .
-.SH RETURN VALUE
-On success, these functions return the inverse hyperbolic sine of
-.IR x .
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is +0 (\-0), +0 (\-0) is returned.
-.PP
-If
-.I x
-is positive infinity (negative infinity),
-positive infinity (negative infinity) is returned.
-.\"
-.\" POSIX.1-2001 documents an optional range error for subnormal x;
-.\" glibc 2.8 does not do this.
-.SH ERRORS
-No errors occur.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR asinh (),
-.BR asinhf (),
-.BR asinhl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR acosh (3),
-.BR atanh (3),
-.BR casinh (3),
-.BR cosh (3),
-.BR sinh (3),
-.BR tanh (3)
diff --git a/man3/asinhf.3 b/man3/asinhf.3
deleted file mode 100644
index 93c50342a..000000000
--- a/man3/asinhf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/asinh.3
diff --git a/man3/asinhl.3 b/man3/asinhl.3
deleted file mode 100644
index 93c50342a..000000000
--- a/man3/asinhl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/asinh.3
diff --git a/man3/asinl.3 b/man3/asinl.3
deleted file mode 100644
index 4c88df085..000000000
--- a/man3/asinl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/asin.3
diff --git a/man3/asprintf.3 b/man3/asprintf.3
deleted file mode 100644
index 5b9f86248..000000000
--- a/man3/asprintf.3
+++ /dev/null
@@ -1,73 +0,0 @@
-'\" t
-.\" Copyright (C) 2001 Andries Brouwer <aeb@cwi.nl>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Text fragments inspired by Martin Schulze <joey@infodrom.org>.
-.\"
-.TH asprintf 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-asprintf, vasprintf \- print to allocated string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <stdio.h>
-.PP
-.BI "int asprintf(char **restrict " strp ", const char *restrict " fmt ", ...);"
-.BI "int vasprintf(char **restrict " strp ", const char *restrict " fmt ,
-.BI " va_list " ap );
-.fi
-.SH DESCRIPTION
-The functions
-.BR asprintf ()
-and
-.BR vasprintf ()
-are analogs of
-.BR sprintf (3)
-and
-.BR vsprintf (3),
-except that they allocate a string large enough to hold the output
-including the terminating null byte (\[aq]\e0\[aq]),
-and return a pointer to it via the first argument.
-This pointer should be passed to
-.BR free (3)
-to release the allocated storage when it is no longer needed.
-.SH RETURN VALUE
-When successful, these functions return the number of bytes printed,
-just like
-.BR sprintf (3).
-If memory allocation wasn't possible, or some other error occurs,
-these functions will return \-1, and the contents of
-.I strp
-are undefined.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR asprintf (),
-.BR vasprintf ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The FreeBSD implementation sets
-.I strp
-to NULL on error.
-.SH STANDARDS
-GNU, BSD.
-.SH SEE ALSO
-.BR free (3),
-.BR malloc (3),
-.BR printf (3)
diff --git a/man3/assert.3 b/man3/assert.3
deleted file mode 100644
index 11aa193d4..000000000
--- a/man3/assert.3
+++ /dev/null
@@ -1,99 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 21:42:42 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Tue Oct 22 23:44:11 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Thu Jun 2 23:44:11 2016 by Nikos Mavrogiannopoulos <nmav@redhat.com>
-.TH assert 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-assert \- abort the program if assertion is false
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <assert.h>
-.PP
-.BI "void assert(scalar " expression );
-.fi
-.SH DESCRIPTION
-This macro can help programmers find bugs in their programs,
-or handle exceptional cases
-via a crash that will produce limited debugging output.
-.PP
-If
-.I expression
-is false (i.e., compares equal to zero),
-.BR assert ()
-prints an error message to standard error
-and terminates the program by calling
-.BR abort (3).
-The error message includes the name of the file and function containing the
-.BR assert ()
-call, the source code line number of the call, and the text of the argument;
-something like:
-.PP
-.in +4n
-.EX
-prog: some_file.c:16: some_func: Assertion \`val == 0\[aq] failed.
-.EE
-.in
-.PP
-If the macro
-.B NDEBUG
-is defined at the moment
-.I <assert.h>
-was last included, the macro
-.BR assert ()
-generates no code, and hence does nothing at all.
-It is not recommended to define
-.B NDEBUG
-if using
-.BR assert ()
-to detect error conditions since the software
-may behave non-deterministically.
-.SH RETURN VALUE
-No value is returned.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR assert ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C89, C99, POSIX.1-2001.
-.PP
-In C89,
-.I expression
-is required to be of type
-.I int
-and undefined behavior results if it is not, but in C99
-it may have any scalar type.
-.\" See Defect Report 107 for more details.
-.SH BUGS
-.BR assert ()
-is implemented as a macro; if the expression tested has side-effects,
-program behavior will be different depending on whether
-.B NDEBUG
-is defined.
-This may create Heisenbugs which go away when debugging
-is turned on.
-.SH SEE ALSO
-.BR abort (3),
-.BR assert_perror (3),
-.BR exit (3)
diff --git a/man3/assert_perror.3 b/man3/assert_perror.3
deleted file mode 100644
index ddf6ca730..000000000
--- a/man3/assert_perror.3
+++ /dev/null
@@ -1,76 +0,0 @@
-'\" t
-.\" Copyright (C) 2002 Andries Brouwer <aeb@cwi.nl>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" This replaces an earlier man page written by Walter Harms
-.\" <walter.harms@informatik.uni-oldenburg.de>.
-.\"
-.TH assert_perror 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-assert_perror \- test errnum and abort
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <assert.h>
-.PP
-.BI "void assert_perror(int " errnum );
-.fi
-.SH DESCRIPTION
-If the macro
-.B NDEBUG
-was defined at the moment
-.I <assert.h>
-was last included, the macro
-.BR assert_perror ()
-generates no code, and hence does nothing at all.
-Otherwise, the macro
-.BR assert_perror ()
-prints an error message to standard error and terminates the program
-by calling
-.BR abort (3)
-if
-.I errnum
-is nonzero.
-The message contains the filename, function name and
-line number of the macro call, and the output of
-.IR strerror(errnum) .
-.SH RETURN VALUE
-No value is returned.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR assert_perror ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH BUGS
-The purpose of the assert macros is to help programmers find bugs in
-their programs, things that cannot happen unless there was a coding mistake.
-However, with system or library calls the situation is rather different,
-and error returns can happen, and will happen, and should be tested for.
-Not by an assert, where the test goes away when
-.B NDEBUG
-is defined,
-but by proper error handling code.
-Never use this macro.
-.SH SEE ALSO
-.BR abort (3),
-.BR assert (3),
-.BR exit (3),
-.BR strerror (3)
diff --git a/man3/atan.3 b/man3/atan.3
deleted file mode 100644
index 4c89bcdda..000000000
--- a/man3/atan.3
+++ /dev/null
@@ -1,106 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH atan 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-atan, atanf, atanl \- arc tangent function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double atan(double " x );
-.BI "float atanf(float " x );
-.BI "long double atanl(long double " x );
-.PP
-.fi
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR atanf (),
-.BR atanl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions calculate the principal value of the arc tangent of
-.IR x ;
-that is the value whose tangent is
-.IR x .
-.SH RETURN VALUE
-On success, these functions return the principal value of the arc tangent of
-.I x
-in radians; the return value is in the range [\-pi/2,\ pi/2].
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is +0 (\-0),
-+0 (\-0) is returned.
-.PP
-If
-.I x
-is positive infinity (negative infinity), +pi/2 (\-pi/2) is returned.
-.\"
-.\" POSIX.1-2001 documents an optional range error for subnormal x;
-.\" glibc 2.8 does not do this.
-.SH ERRORS
-No errors occur.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR atan (),
-.BR atanf (),
-.BR atanl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH SEE ALSO
-.BR acos (3),
-.BR asin (3),
-.BR atan2 (3),
-.BR carg (3),
-.BR catan (3),
-.BR cos (3),
-.BR sin (3),
-.BR tan (3)
diff --git a/man3/atan2.3 b/man3/atan2.3
deleted file mode 100644
index b6338dda2..000000000
--- a/man3/atan2.3
+++ /dev/null
@@ -1,177 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH atan2 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-atan2, atan2f, atan2l \- arc tangent function of two variables
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double atan2(double " y ", double " x );
-.BI "float atan2f(float " y ", float " x );
-.BI "long double atan2l(long double " y ", long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR atan2f (),
-.BR atan2l ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions calculate the principal value of the arc tangent of
-.IR y/x ,
-using the signs of the two arguments to determine
-the quadrant of the result.
-.SH RETURN VALUE
-On success, these functions return the principal value of the arc tangent of
-.I y/x
-in radians; the return value is in the range [\-pi,\ pi].
-.PP
-If
-.I y
-is +0 (\-0) and
-.I x
-is less than 0, +pi (\-pi) is returned.
-.PP
-If
-.I y
-is +0 (\-0) and
-.I x
-is greater than 0, +0 (\-0) is returned.
-.PP
-If
-.I y
-is less than 0 and
-.I x
-is +0 or \-0, \-pi/2 is returned.
-.PP
-If
-.I y
-is greater than 0 and
-.I x
-is +0 or \-0, pi/2 is returned.
-.PP
-.\" POSIX.1 says:
-.\" If
-.\" .I x
-.\" is 0, a pole error shall not occur.
-.\"
-If either
-.I x
-or
-.I y
-is NaN, a NaN is returned.
-.PP
-.\" POSIX.1 says:
-.\" If the result underflows, a range error may occur and
-.\" .I y/x
-.\" should be returned.
-.\"
-If
-.I y
-is +0 (\-0) and
-.I x
-is \-0, +pi (\-pi) is returned.
-.PP
-If
-.I y
-is +0 (\-0) and
-.I x
-is +0, +0 (\-0) is returned.
-.PP
-If
-.I y
-is a finite value greater (less) than 0, and
-.I x
-is negative infinity, +pi (\-pi) is returned.
-.PP
-If
-.I y
-is a finite value greater (less) than 0, and
-.I x
-is positive infinity, +0 (\-0) is returned.
-.PP
-If
-.I y
-is positive infinity (negative infinity), and
-.I x
-is finite,
-pi/2 (\-pi/2) is returned.
-.PP
-If
-.I y
-is positive infinity (negative infinity) and
-.I x
-is negative infinity, +3*pi/4 (\-3*pi/4) is returned.
-.PP
-If
-.I y
-is positive infinity (negative infinity) and
-.I x
-is positive infinity, +pi/4 (\-pi/4) is returned.
-.\"
-.\" POSIX.1 says:
-.\" If both arguments are 0, a domain error shall not occur.
-.SH ERRORS
-No errors occur.
-.\" POSIX.1 documents an optional underflow error
-.\" glibc 2.8 does not do this.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR atan2 (),
-.BR atan2f (),
-.BR atan2l ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH SEE ALSO
-.BR acos (3),
-.BR asin (3),
-.BR atan (3),
-.BR carg (3),
-.BR cos (3),
-.BR sin (3),
-.BR tan (3)
diff --git a/man3/atan2f.3 b/man3/atan2f.3
deleted file mode 100644
index e445b12b6..000000000
--- a/man3/atan2f.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/atan2.3
diff --git a/man3/atan2l.3 b/man3/atan2l.3
deleted file mode 100644
index e445b12b6..000000000
--- a/man3/atan2l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/atan2.3
diff --git a/man3/atanf.3 b/man3/atanf.3
deleted file mode 100644
index 784b32ab9..000000000
--- a/man3/atanf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/atan.3
diff --git a/man3/atanh.3 b/man3/atanh.3
deleted file mode 100644
index 9081f5f50..000000000
--- a/man3/atanh.3
+++ /dev/null
@@ -1,157 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH atanh 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-atanh, atanhf, atanhl \- inverse hyperbolic tangent function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double atanh(double " x );
-.BI "float atanhf(float " x );
-.BI "long double atanhl(long double " x );
-.PP
-.fi
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR atanh ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR atanhf (),
-.BR atanhl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions calculate the inverse hyperbolic tangent of
-.IR x ;
-that is the value whose hyperbolic tangent is
-.IR x .
-.SH RETURN VALUE
-On success, these functions return the inverse hyperbolic tangent of
-.IR x .
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is +0 (\-0), +0 (\-0) is returned.
-.PP
-If
-.I x
-is +1 or \-1,
-a pole error occurs,
-and the functions return
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-or
-.BR HUGE_VALL ,
-respectively, with the mathematically correct sign.
-.PP
-If the absolute value of
-.I x
-is greater than 1,
-a domain error occurs,
-and a NaN is returned.
-.\"
-.\" POSIX.1-2001 documents an optional range error for subnormal x;
-.\" glibc 2.8 does not do this.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP less than \-1 or greater than +1
-.I errno
-is set to
-.BR EDOM .
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.TP
-Pole error: \fIx\fP is +1 or \-1
-.I errno
-is set to
-.B ERANGE
-(but see BUGS).
-A divide-by-zero floating-point exception
-.RB ( FE_DIVBYZERO )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR atanh (),
-.BR atanhf (),
-.BR atanhl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD.
-.SH BUGS
-In glibc 2.9 and earlier,
-.\" Bug: https://www.sourceware.org/bugzilla/show_bug.cgi?id=6759
-.\" This can be seen in sysdeps/ieee754/k_standard.c
-when a pole error occurs,
-.I errno
-is set to
-.B EDOM
-instead of the POSIX-mandated
-.BR ERANGE .
-Since glibc 2.10, glibc does the right thing.
-.SH SEE ALSO
-.BR acosh (3),
-.BR asinh (3),
-.BR catanh (3),
-.BR cosh (3),
-.BR sinh (3),
-.BR tanh (3)
diff --git a/man3/atanhf.3 b/man3/atanhf.3
deleted file mode 100644
index 225a33928..000000000
--- a/man3/atanhf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/atanh.3
diff --git a/man3/atanhl.3 b/man3/atanhl.3
deleted file mode 100644
index 225a33928..000000000
--- a/man3/atanhl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/atanh.3
diff --git a/man3/atanl.3 b/man3/atanl.3
deleted file mode 100644
index 784b32ab9..000000000
--- a/man3/atanl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/atan.3
diff --git a/man3/atexit.3 b/man3/atexit.3
deleted file mode 100644
index 9084dabab..000000000
--- a/man3/atexit.3
+++ /dev/null
@@ -1,172 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-03-29, David Metcalfe
-.\" Modified 1993-07-24, Rik Faith (faith@cs.unc.edu)
-.\" Modified 2003-10-25, Walter Harms
-.\"
-.TH atexit 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-atexit \- register a function to be called at normal process termination
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int atexit(void (*" function )(void));
-.fi
-.SH DESCRIPTION
-The
-.BR atexit ()
-function registers the given
-.I function
-to be
-called at normal process termination, either via
-.BR exit (3)
-or via return from the program's
-.IR main ().
-Functions so registered are called in
-the reverse order of their registration; no arguments are passed.
-.PP
-The same function may be registered multiple times:
-it is called once for each registration.
-.PP
-POSIX.1 requires that an implementation allow at least
-.\" POSIX.1-2001, POSIX.1-2008
-.B ATEXIT_MAX
-(32) such functions to be registered.
-The actual limit supported by an implementation can be obtained using
-.BR sysconf (3).
-.PP
-When a child process is created via
-.BR fork (2),
-it inherits copies of its parent's registrations.
-Upon a successful call to one of the
-.BR exec (3)
-functions,
-all registrations are removed.
-.SH RETURN VALUE
-The
-.BR atexit ()
-function returns the value 0 if successful; otherwise
-it returns a nonzero value.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR atexit ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-POSIX.1 says that the result of calling
-.\" POSIX.1-2001, POSIX.1-2008
-.BR exit (3)
-more than once (i.e., calling
-.BR exit (3)
-within a function registered using
-.BR atexit ())
-is undefined.
-On some systems (but not Linux), this can result in an infinite recursion;
-.\" This can happen on OpenBSD 4.2 for example, and is documented
-.\" as occurring on FreeBSD as well.
-.\" glibc does "the Right Thing" -- invocation of the remaining
-.\" exit handlers carries on as normal.
-portable programs should not invoke
-.BR exit (3)
-inside a function registered using
-.BR atexit ().
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, C99, SVr4, 4.3BSD.
-.SH NOTES
-Functions registered using
-.BR atexit ()
-(and
-.BR on_exit (3))
-are not called if a process terminates abnormally because
-of the delivery of a signal.
-.PP
-If one of the registered functions calls
-.BR _exit (2),
-then any remaining functions are not invoked,
-and the other process termination steps performed by
-.BR exit (3)
-are not performed.
-.PP
-The
-.BR atexit ()
-and
-.BR on_exit (3)
-functions register functions on the same list:
-at normal process termination,
-the registered functions are invoked in reverse order
-of their registration by these two functions.
-.PP
-According to POSIX.1, the result is undefined if
-.BR longjmp (3)
-is used to terminate execution of one of the functions registered using
-.BR atexit ().
-.\" In glibc, things seem to be handled okay
-.SS Linux notes
-Since glibc 2.2.3,
-.BR atexit ()
-(and
-.BR on_exit (3))
-can be used within a shared library to establish functions
-that are called when the shared library is unloaded.
-.SH EXAMPLES
-.\" SRC BEGIN (atexit.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-void
-bye(void)
-{
- printf("That was all, folks\en");
-}
-\&
-int
-main(void)
-{
- long a;
- int i;
-\&
- a = sysconf(_SC_ATEXIT_MAX);
- printf("ATEXIT_MAX = %ld\en", a);
-\&
- i = atexit(bye);
- if (i != 0) {
- fprintf(stderr, "cannot set exit function\en");
- exit(EXIT_FAILURE);
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR _exit (2),
-.BR dlopen (3),
-.BR exit (3),
-.BR on_exit (3)
diff --git a/man3/atof.3 b/man3/atof.3
deleted file mode 100644
index 1d18c86a3..000000000
--- a/man3/atof.3
+++ /dev/null
@@ -1,70 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Mon Mar 29 22:39:24 1993, David Metcalfe
-.\" Modified Sat Jul 24 21:39:22 1993, Rik Faith (faith@cs.unc.edu)
-.TH atof 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-atof \- convert a string to a double
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "double atof(const char *" nptr );
-.fi
-.SH DESCRIPTION
-The
-.BR atof ()
-function converts the initial portion of the string
-pointed to by \fInptr\fP to
-.IR double .
-The behavior is the same as
-.PP
-.in +4n
-.EX
-strtod(nptr, NULL);
-.EE
-.in
-.PP
-except that
-.BR atof ()
-does not detect errors.
-.SH RETURN VALUE
-The converted value.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR atof ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, C99, SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR atoi (3),
-.BR atol (3),
-.BR strfromd (3),
-.BR strtod (3),
-.BR strtol (3),
-.BR strtoul (3)
diff --git a/man3/atoi.3 b/man3/atoi.3
deleted file mode 100644
index 51e9a78cd..000000000
--- a/man3/atoi.3
+++ /dev/null
@@ -1,128 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Mon Mar 29 22:39:41 1993, David Metcalfe
-.\" Modified Sat Jul 24 21:38:42 1993, Rik Faith (faith@cs.unc.edu)
-.\" Modified Sun Dec 17 18:35:06 2000, Joseph S. Myers
-.\"
-.TH atoi 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-atoi, atol, atoll \- convert a string to an integer
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int atoi(const char *" nptr );
-.BI "long atol(const char *" nptr );
-.BI "long long atoll(const char *" nptr );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR atoll ():
-.nf
- _ISOC99_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR atoi ()
-function converts the initial portion of the string
-pointed to by \fInptr\fP to
-.IR int .
-The behavior is the same as
-.PP
-.in +4n
-.EX
-strtol(nptr, NULL, 10);
-.EE
-.in
-.PP
-except that
-.BR atoi ()
-does not detect errors.
-.PP
-The
-.BR atol ()
-and
-.BR atoll ()
-functions behave the same as
-.BR atoi (),
-except that they convert the initial portion of the
-string to their return type of \fIlong\fP or \fIlong long\fP.
-.SH RETURN VALUE
-The converted value or 0 on error.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR atoi (),
-.BR atol (),
-.BR atoll ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-POSIX.1 leaves the return value of
-.BR atoi ()
-on error unspecified.
-On glibc, musl libc, and uClibc, 0 is returned on error.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001, SVr4, 4.3BSD.
-.PP
-C89 and
-POSIX.1-1996 include the functions
-.BR atoi ()
-and
-.BR atol ()
-only.
-.\" .SH NOTES
-.\" Linux libc provided
-.\" .BR atoq ()
-.\" as an obsolete name for
-.\" .BR atoll ();
-.\" .BR atoq ()
-.\" is not provided by glibc.
-.\" The
-.\" .BR atoll ()
-.\" function is present since glibc 2.0.2, but
-.\" not in libc4 or libc5.
-.SH BUGS
-.I errno
-is not set on error so there is no way to distinguish between 0 as an
-error and as the converted value.
-No checks for overflow or underflow are done.
-Only base-10 input can be converted.
-It is recommended to instead use the
-.BR strtol ()
-and
-.BR strtoul ()
-family of functions in new programs.
-.SH SEE ALSO
-.BR atof (3),
-.BR strtod (3),
-.BR strtol (3),
-.BR strtoul (3)
diff --git a/man3/atol.3 b/man3/atol.3
deleted file mode 100644
index 51f084f16..000000000
--- a/man3/atol.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/atoi.3
diff --git a/man3/atoll.3 b/man3/atoll.3
deleted file mode 100644
index 51f084f16..000000000
--- a/man3/atoll.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/atoi.3
diff --git a/man3/atoq.3 b/man3/atoq.3
deleted file mode 100644
index 51f084f16..000000000
--- a/man3/atoq.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/atoi.3
diff --git a/man3/auth_destroy.3 b/man3/auth_destroy.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/auth_destroy.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/authnone_create.3 b/man3/authnone_create.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/authnone_create.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/authunix_create.3 b/man3/authunix_create.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/authunix_create.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/authunix_create_default.3 b/man3/authunix_create_default.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/authunix_create_default.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/backtrace.3 b/man3/backtrace.3
deleted file mode 100644
index a0fb7cf34..000000000
--- a/man3/backtrace.3
+++ /dev/null
@@ -1,286 +0,0 @@
-'\" t
-.\" Copyright (C) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" drawing on material by Justin Pryzby <pryzbyj@justinpryzby.com>
-.\"
-.\" %%%LICENSE_START(PERMISSIVE_MISC)
-.\" Permission is hereby granted, free of charge, to any person obtaining
-.\" a copy of this software and associated documentation files (the
-.\" "Software"), to deal in the Software without restriction, including
-.\" without limitation the rights to use, copy, modify, merge, publish,
-.\" distribute, sublicense, and/or sell copies of the Software, and to
-.\" permit persons to whom the Software is furnished to do so, subject to
-.\" the following conditions:
-.\"
-.\" The above copyright notice and this permission notice shall be
-.\" included in all copies or substantial portions of the Software.
-.\"
-.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-.\" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-.\" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-.\" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-.\" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-.\" %%%LICENSE_END
-.\"
-.\" References:
-.\" glibc manual and source
-.TH backtrace 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-backtrace, backtrace_symbols, backtrace_symbols_fd \- support
-for application self-debugging
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <execinfo.h>
-.PP
-.BI "int backtrace(void *" buffer [. size "], int " size );
-.PP
-.BI "char **backtrace_symbols(void *const " buffer [. size "], int " size );
-.BI "void backtrace_symbols_fd(void *const " buffer [. size "], int " size ", \
-int " fd );
-.fi
-.SH DESCRIPTION
-.BR backtrace ()
-returns a backtrace for the calling program,
-in the array pointed to by
-.IR buffer .
-A backtrace is the series of currently active function calls for
-the program.
-Each item in the array pointed to by
-.I buffer
-is of type
-.IR "void\ *" ,
-and is the return address from
-the corresponding stack frame.
-The
-.I size
-argument specifies the maximum number of addresses
-that can be stored in
-.IR buffer .
-If the backtrace is larger than
-.IR size ,
-then the addresses corresponding to the
-.I size
-most recent function calls are returned;
-to obtain the complete backtrace, make sure that
-.I buffer
-and
-.I size
-are large enough.
-.PP
-Given the set of addresses returned by
-.BR backtrace ()
-in
-.IR buffer ,
-.BR backtrace_symbols ()
-translates the addresses into an array of strings that describe
-the addresses symbolically.
-The
-.I size
-argument specifies the number of addresses in
-.IR buffer .
-The symbolic representation of each address consists of the function name
-(if this can be determined), a hexadecimal offset into the function,
-and the actual return address (in hexadecimal).
-The address of the array of string pointers is returned
-as the function result of
-.BR backtrace_symbols ().
-This array is
-.BR malloc (3)ed
-by
-.BR backtrace_symbols (),
-and must be freed by the caller.
-(The strings pointed to by the array of pointers
-need not and should not be freed.)
-.PP
-.BR backtrace_symbols_fd ()
-takes the same
-.I buffer
-and
-.I size
-arguments as
-.BR backtrace_symbols (),
-but instead of returning an array of strings to the caller,
-it writes the strings, one per line, to the file descriptor
-.IR fd .
-.BR backtrace_symbols_fd ()
-does not call
-.BR malloc (3),
-and so can be employed in situations where the latter function might
-fail, but see NOTES.
-.SH RETURN VALUE
-.BR backtrace ()
-returns the number of addresses returned in
-.IR buffer ,
-which is not greater than
-.IR size .
-If the return value is less than
-.IR size ,
-then the full backtrace was stored; if it is equal to
-.IR size ,
-then it may have been truncated, in which case the addresses of the
-oldest stack frames are not returned.
-.PP
-On success,
-.BR backtrace_symbols ()
-returns a pointer to the array
-.BR malloc (3)ed
-by the call;
-on error, NULL is returned.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR backtrace (),
-.BR backtrace_symbols (),
-.BR backtrace_symbols_fd ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH HISTORY
-glibc 2.1.
-.SH NOTES
-These functions make some assumptions about how a function's return
-address is stored on the stack.
-Note the following:
-.IP \[bu] 3
-Omission of the frame pointers (as
-implied by any of
-.BR gcc (1)'s
-nonzero optimization levels) may cause these assumptions to be
-violated.
-.IP \[bu]
-Inlined functions do not have stack frames.
-.IP \[bu]
-Tail-call optimization causes one stack frame to replace another.
-.IP \[bu]
-.BR backtrace ()
-and
-.BR backtrace_symbols_fd ()
-don't call
-.BR malloc ()
-explicitly, but they are part of
-.IR libgcc ,
-which gets loaded dynamically when first used.
-Dynamic loading usually triggers a call to
-.BR malloc (3).
-If you need certain calls to these two functions to not allocate memory
-(in signal handlers, for example), you need to make sure
-.I libgcc
-is loaded beforehand.
-.PP
-The symbol names may be unavailable without the use of special linker
-options.
-For systems using the GNU linker, it is necessary to use the
-.I \-rdynamic
-linker option.
-Note that names of "static" functions are not exposed,
-and won't be available in the backtrace.
-.SH EXAMPLES
-The program below demonstrates the use of
-.BR backtrace ()
-and
-.BR backtrace_symbols ().
-The following shell session shows what we might see when running the
-program:
-.PP
-.in +4n
-.EX
-.RB "$" " cc \-rdynamic prog.c \-o prog"
-.RB "$" " ./prog 3"
-backtrace() returned 8 addresses
-\&./prog(myfunc3+0x5c) [0x80487f0]
-\&./prog [0x8048871]
-\&./prog(myfunc+0x21) [0x8048894]
-\&./prog(myfunc+0x1a) [0x804888d]
-\&./prog(myfunc+0x1a) [0x804888d]
-\&./prog(main+0x65) [0x80488fb]
-\&/lib/libc.so.6(__libc_start_main+0xdc) [0xb7e38f9c]
-\&./prog [0x8048711]
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (backtrace.c)
-.EX
-#include <execinfo.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-#define BT_BUF_SIZE 100
-\&
-void
-myfunc3(void)
-{
- int nptrs;
- void *buffer[BT_BUF_SIZE];
- char **strings;
-\&
- nptrs = backtrace(buffer, BT_BUF_SIZE);
- printf("backtrace() returned %d addresses\en", nptrs);
-\&
- /* The call backtrace_symbols_fd(buffer, nptrs, STDOUT_FILENO)
- would produce similar output to the following: */
-\&
- strings = backtrace_symbols(buffer, nptrs);
- if (strings == NULL) {
- perror("backtrace_symbols");
- exit(EXIT_FAILURE);
- }
-\&
- for (size_t j = 0; j < nptrs; j++)
- printf("%s\en", strings[j]);
-\&
- free(strings);
-}
-\&
-static void /* "static" means don\[aq]t export the symbol... */
-myfunc2(void)
-{
- myfunc3();
-}
-\&
-void
-myfunc(int ncalls)
-{
- if (ncalls > 1)
- myfunc(ncalls \- 1);
- else
- myfunc2();
-}
-\&
-int
-main(int argc, char *argv[])
-{
- if (argc != 2) {
- fprintf(stderr, "%s num\-calls\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- myfunc(atoi(argv[1]));
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR addr2line (1),
-.BR gcc (1),
-.BR gdb (1),
-.BR ld (1),
-.BR dlopen (3),
-.BR malloc (3)
diff --git a/man3/backtrace_symbols.3 b/man3/backtrace_symbols.3
deleted file mode 100644
index 936a6b9f6..000000000
--- a/man3/backtrace_symbols.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/backtrace.3
diff --git a/man3/backtrace_symbols_fd.3 b/man3/backtrace_symbols_fd.3
deleted file mode 100644
index 936a6b9f6..000000000
--- a/man3/backtrace_symbols_fd.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/backtrace.3
diff --git a/man3/basename.3 b/man3/basename.3
deleted file mode 100644
index 87ffde36e..000000000
--- a/man3/basename.3
+++ /dev/null
@@ -1,190 +0,0 @@
-'\" t
-.\" Copyright (c) 2000 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Created, 14 Dec 2000 by Michael Kerrisk
-.\"
-.TH basename 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-basename, dirname \- parse pathname components
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <libgen.h>
-.PP
-.BI "char *dirname(char *" path );
-.BI "char *basename(char *" path );
-.fi
-.SH DESCRIPTION
-Warning: there are two different functions
-.BR basename ();
-see below.
-.PP
-The functions
-.BR dirname ()
-and
-.BR basename ()
-break a null-terminated pathname string into directory
-and filename components.
-In the usual case,
-.BR dirname ()
-returns the string up to, but not including, the final \[aq]/\[aq], and
-.BR basename ()
-returns the component following the final \[aq]/\[aq].
-Trailing \[aq]/\[aq] characters are not counted as part of the pathname.
-.PP
-If
-.I path
-does not contain a slash,
-.BR dirname ()
-returns the string "." while
-.BR basename ()
-returns a copy of
-.IR path .
-If
-.I path
-is the string "/", then both
-.BR dirname ()
-and
-.BR basename ()
-return the string "/".
-If
-.I path
-is a null pointer or points to an empty string, then both
-.BR dirname ()
-and
-.BR basename ()
-return the string ".".
-.PP
-Concatenating the string returned by
-.BR dirname (),
-a "/", and the string returned by
-.BR basename ()
-yields a complete pathname.
-.PP
-Both
-.BR dirname ()
-and
-.BR basename ()
-may modify the contents of
-.IR path ,
-so it may be desirable to pass a copy when calling one of
-these functions.
-.PP
-These functions may return pointers to statically allocated memory
-which may be overwritten by subsequent calls.
-Alternatively, they may return a pointer to some part of
-.IR path ,
-so that the string referred to by
-.I path
-should not be modified or freed until the pointer returned by
-the function is no longer required.
-.PP
-The following list of examples (taken from SUSv2)
-shows the strings returned by
-.BR dirname ()
-and
-.BR basename ()
-for different paths:
-.RS
-.TS
-lb lb lb
-l l l l.
-path dirname basename
-/usr/lib /usr lib
-/usr/ / usr
-usr . usr
-/ / /
-\&. . .
-\&.. . ..
-.TE
-.RE
-.SH RETURN VALUE
-Both
-.BR dirname ()
-and
-.BR basename ()
-return pointers to null-terminated strings.
-(Do not pass these pointers to
-.BR free (3).)
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR basename (),
-.BR dirname ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-There are two different versions of
-.BR basename ()
-- the POSIX version described above, and the GNU version, which one gets
-after
-.PP
-.in +4n
-.EX
-.BR " #define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B " #include <string.h>"
-.EE
-.in
-.PP
-The GNU version never modifies its argument, and returns the
-empty string when
-.I path
-has a trailing slash, and in particular also when it is "/".
-There is no GNU version of
-.BR dirname ().
-.PP
-With glibc, one gets the POSIX version of
-.BR basename ()
-when
-.I <libgen.h>
-is included, and the GNU version otherwise.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH BUGS
-In the glibc implementation,
-the POSIX versions of these functions modify the
-.I path
-argument, and segfault when called with a static string
-such as "/usr/".
-.PP
-Before glibc 2.2.1, the glibc version of
-.BR dirname ()
-did not correctly handle pathnames with trailing \[aq]/\[aq] characters,
-and generated a segfault if given a NULL argument.
-.SH EXAMPLES
-The following code snippet demonstrates the use of
-.BR basename ()
-and
-.BR dirname ():
-.in +4n
-.EX
-char *dirc, *basec, *bname, *dname;
-char *path = "/etc/passwd";
-\&
-dirc = strdup(path);
-basec = strdup(path);
-dname = dirname(dirc);
-bname = basename(basec);
-printf("dirname=%s, basename=%s\en", dname, bname);
-.EE
-.in
-.SH SEE ALSO
-.BR basename (1),
-.BR dirname (1)
diff --git a/man3/bcmp.3 b/man3/bcmp.3
deleted file mode 100644
index 9f23894cd..000000000
--- a/man3/bcmp.3
+++ /dev/null
@@ -1,30 +0,0 @@
-.\" Copyright 2022 Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH bcmp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-bcmp \- compare byte sequences
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <strings.h>
-.PP
-.BI "[[deprecated]] int bcmp(const void " s1 [. n "], const void " s2 [. n "], \
-size_t " n );
-.fi
-.SH DESCRIPTION
-.BR bcmp ()
-is identical to
-.BR memcmp (3);
-use it instead.
-.SH STANDARDS
-None.
-.SH HISTORY
-4.3BSD.
-Marked as LEGACY in POSIX.1-2001;
-removed in POSIX.1-2008.
-.SH SEE ALSO
-.BR memcmp (3)
diff --git a/man3/bcopy.3 b/man3/bcopy.3
deleted file mode 100644
index cf4dff0ad..000000000
--- a/man3/bcopy.3
+++ /dev/null
@@ -1,79 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\"
-.\" Modified Sun Feb 26 14:52:00 1995 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Tue Oct 22 23:48:10 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" "
-.TH bcopy 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-bcopy \- copy byte sequence
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <strings.h>
-.PP
-.BI "[[deprecated]] void bcopy(const void " src [. n "], void " dest [. n "], \
-size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR bcopy ()
-function copies
-.I n
-bytes from
-.I src
-to
-.IR dest .
-The result is correct, even when both areas overlap.
-.SH RETURN VALUE
-None.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR bcopy ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-4.3BSD.
-.PP
-Marked as LEGACY in POSIX.1-2001: use
-.BR memcpy (3)
-or
-.BR memmove (3)
-in new programs.
-Note that the first two arguments
-are interchanged for
-.BR memcpy (3)
-and
-.BR memmove (3).
-POSIX.1-2008 removes the specification of
-.BR bcopy ().
-.SH SEE ALSO
-.BR bstring (3),
-.BR memccpy (3),
-.BR memcpy (3),
-.BR memmove (3),
-.BR strcpy (3),
-.BR strncpy (3)
diff --git a/man3/be16toh.3 b/man3/be16toh.3
deleted file mode 100644
index 8b7bc7715..000000000
--- a/man3/be16toh.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/endian.3
diff --git a/man3/be32toh.3 b/man3/be32toh.3
deleted file mode 100644
index 8b7bc7715..000000000
--- a/man3/be32toh.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/endian.3
diff --git a/man3/be64toh.3 b/man3/be64toh.3
deleted file mode 100644
index 8b7bc7715..000000000
--- a/man3/be64toh.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/endian.3
diff --git a/man3/bindresvport.3 b/man3/bindresvport.3
deleted file mode 100644
index 2630212ad..000000000
--- a/man3/bindresvport.3
+++ /dev/null
@@ -1,117 +0,0 @@
-'\" t
-.\" Copyright (C) 2007, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (C) 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2007-05-31, mtk: Rewrite and substantial additional text.
-.\" 2008-12-03, mtk: Rewrote some pieces and fixed some errors
-.\"
-.TH bindresvport 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-bindresvport \- bind a socket to a privileged IP port
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.B #include <netinet/in.h>
-.PP
-.BI "int bindresvport(int " sockfd ", struct sockaddr_in *" sin );
-.fi
-.SH DESCRIPTION
-.BR bindresvport ()
-is used to bind the socket referred to by the
-file descriptor
-.I sockfd
-to a privileged anonymous IP port,
-that is, a port number arbitrarily selected from the range 512 to 1023.
-.\" glibc actually starts searching with a port # in the range 600 to 1023
-.PP
-If the
-.BR bind (2)
-performed by
-.BR bindresvport ()
-is successful, and
-.I sin
-is not NULL, then
-.I sin\->sin_port
-returns the port number actually allocated.
-.PP
-.I sin
-can be NULL, in which case
-.I sin\->sin_family
-is implicitly taken to be
-.BR AF_INET .
-However, in this case,
-.BR bindresvport ()
-has no way to return the port number actually allocated.
-(This information can later be obtained using
-.BR getsockname (2).)
-.SH RETURN VALUE
-.BR bindresvport ()
-returns 0 on success; otherwise \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.BR bindresvport ()
-can fail for any of the same reasons as
-.BR bind (2).
-In addition, the following errors may occur:
-.TP
-.B EACCES
-The calling process was not privileged
-(on Linux: the calling process did not have the
-.B CAP_NET_BIND_SERVICE
-capability in the user namespace governing its network namespace).
-.TP
-.B EADDRINUSE
-All privileged ports are in use.
-.TP
-.BR EAFNOSUPPORT " (" EPFNOSUPPORT " in glibc 2.7 and earlier)"
-.I sin
-is not NULL and
-.I sin\->sin_family
-is not
-.BR AF_INET .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR bindresvport ()
-T} Thread safety T{
-glibc\ >=\ 2.17: MT-Safe;
-.\" commit f6da27e53695ad1cc0e2a9490358decbbfdff5e5
-glibc\ <\ 2.17: MT-Unsafe
-T}
-.TE
-.hy
-.ad
-.sp 1
-.PP
-The
-.BR bindresvport ()
-function uses a static variable that was not protected by a lock
-before glibc 2.17, rendering the function MT-Unsafe.
-.SH VERSIONS
-Present on the BSDs, Solaris, and many other systems.
-.SH NOTES
-Unlike some
-.BR bindresvport ()
-implementations,
-the glibc implementation ignores any value that the caller supplies in
-.IR sin\->sin_port .
-.SH STANDARDS
-BSD.
-.SH SEE ALSO
-.BR bind (2),
-.BR getsockname (2)
diff --git a/man3/bsd_signal.3 b/man3/bsd_signal.3
deleted file mode 100644
index 3fc3110e2..000000000
--- a/man3/bsd_signal.3
+++ /dev/null
@@ -1,115 +0,0 @@
-'\" t
-.\" Copyright (c) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH bsd_signal 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-bsd_signal \- signal handling with BSD semantics
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.B typedef void (*sighandler_t)(int);
-.PP
-.BI "sighandler_t bsd_signal(int " signum ", sighandler_t " handler );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR bsd_signal ():
-.nf
- Since glibc 2.26:
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- && ! (_POSIX_C_SOURCE >= 200809L)
- glibc 2.25 and earlier:
- _XOPEN_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR bsd_signal ()
-function takes the same arguments, and performs the same task, as
-.BR signal (2).
-.PP
-The difference between the two is that
-.BR bsd_signal ()
-is guaranteed to provide reliable signal semantics, that is:
-a) the disposition of the signal is not reset to the default
-when the handler is invoked;
-b) delivery of further instances of the signal is blocked while
-the signal handler is executing; and
-c) if the handler interrupts a blocking system call,
-then the system call is automatically restarted.
-A portable application cannot rely on
-.BR signal (2)
-to provide these guarantees.
-.SH RETURN VALUE
-The
-.BR bsd_signal ()
-function returns the previous value of the signal handler, or
-.B SIG_ERR
-on error.
-.SH ERRORS
-As for
-.BR signal (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR bsd_signal ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-Use of
-.BR bsd_signal ()
-should be avoided; use
-.BR sigaction (2)
-instead.
-.PP
-On modern Linux systems,
-.BR bsd_signal ()
-and
-.BR signal (2)
-are equivalent.
-But on older systems,
-.BR signal (2)
-provided unreliable signal semantics; see
-.BR signal (2)
-for details.
-.PP
-The use of
-.I sighandler_t
-is a GNU extension;
-this type is defined only if the
-.B _GNU_SOURCE
-feature test macro is defined.
-.SH STANDARDS
-None.
-.SH HISTORY
-4.2BSD, POSIX.1-2001.
-Removed in POSIX.1-2008,
-recommending the use of
-.BR sigaction (2)
-instead.
-.SH SEE ALSO
-.BR sigaction (2),
-.BR signal (2),
-.BR sysv_signal (3),
-.BR signal (7)
diff --git a/man3/bsearch.3 b/man3/bsearch.3
deleted file mode 100644
index ca8991dc5..000000000
--- a/man3/bsearch.3
+++ /dev/null
@@ -1,142 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Mon Mar 29 22:41:16 1993, David Metcalfe
-.\" Modified Sat Jul 24 21:35:16 1993, Rik Faith (faith@cs.unc.edu)
-.TH bsearch 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-bsearch \- binary search of a sorted array
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "void *bsearch(const void " key [. size "], \
-const void " base [. size " * ." nmemb ],
-.BI " size_t " nmemb ", size_t " size ,
-.BI " int (*" compar ")(const void [." size "], \
-const void [." size ]));
-.fi
-.SH DESCRIPTION
-The
-.BR bsearch ()
-function searches an array of
-.I nmemb
-objects,
-the initial member of which is pointed to by
-.IR base ,
-for a member
-that matches the object pointed to by
-.IR key .
-The size of each member
-of the array is specified by
-.IR size .
-.PP
-The contents of the array should be in ascending sorted order according
-to the comparison function referenced by
-.IR compar .
-The
-.I compar
-routine is expected to have two arguments which point to the
-.I key
-object and to an array member, in that order, and should return an integer
-less than, equal to, or greater than zero if the
-.I key
-object is found,
-respectively, to be less than, to match, or be greater than the array
-member.
-.SH RETURN VALUE
-The
-.BR bsearch ()
-function returns a pointer to a matching member of the
-array, or NULL if no match is found.
-If there are multiple elements that
-match the key, the element returned is unspecified.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR bsearch ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, C99, SVr4, 4.3BSD.
-.SH EXAMPLES
-The example below first sorts an array of structures using
-.BR qsort (3),
-then retrieves desired elements using
-.BR bsearch ().
-.PP
-.\" SRC BEGIN (bsearch.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-#define ARRAY_SIZE(arr) (sizeof((arr)) / sizeof((arr)[0]))
-\&
-struct mi {
- int nr;
- const char *name;
-};
-\&
-static struct mi months[] = {
- { 1, "jan" }, { 2, "feb" }, { 3, "mar" }, { 4, "apr" },
- { 5, "may" }, { 6, "jun" }, { 7, "jul" }, { 8, "aug" },
- { 9, "sep" }, {10, "oct" }, {11, "nov" }, {12, "dec" }
-};
-\&
-static int
-compmi(const void *m1, const void *m2)
-{
- const struct mi *mi1 = m1;
- const struct mi *mi2 = m2;
-\&
- return strcmp(mi1\->name, mi2\->name);
-}
-\&
-int
-main(int argc, char *argv[])
-{
- qsort(months, ARRAY_SIZE(months), sizeof(months[0]), compmi);
- for (size_t i = 1; i < argc; i++) {
- struct mi key;
- struct mi *res;
-\&
- key.name = argv[i];
- res = bsearch(&key, months, ARRAY_SIZE(months),
- sizeof(months[0]), compmi);
- if (res == NULL)
- printf("\[aq]%s\[aq]: unknown month\en", argv[i]);
- else
- printf("%s: month #%d\en", res\->name, res\->nr);
- }
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR hsearch (3),
-.BR lsearch (3),
-.BR qsort (3),
-.BR tsearch (3)
diff --git a/man3/bstring.3 b/man3/bstring.3
deleted file mode 100644
index a1e1a50a6..000000000
--- a/man3/bstring.3
+++ /dev/null
@@ -1,76 +0,0 @@
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-04-12, David Metcalfe
-.\" Modified 1993-07-24, Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-01-20, Walter Harms
-.TH bstring 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-bcmp, bcopy, bzero, memccpy, memchr, memcmp, memcpy, memfrob, memmem,
-memmove, memset \- byte string operations
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "int bcmp(const void " s1 [. n "], const void " s2 [. n "], size_t " n );
-.PP
-.BI "void bcopy(const void " src [. n "], void " dest [. n "], size_t " n );
-.PP
-.BI "void bzero(void " s [. n "], size_t " n );
-.PP
-.BI "void *memccpy(void " dest [. n "], const void " src [. n "], int " c ", \
-size_t " n );
-.PP
-.BI "void *memchr(const void " s [. n "], int " c ", size_t " n );
-.PP
-.BI "int memcmp(const void " s1 [. n "], const void " s2 [. n "], size_t " n );
-.PP
-.BI "void *memcpy(void " dest [. n "], const void " src [. n "], size_t " n );
-.PP
-.BI "void *memfrob(void " s [. n "], size_t " n );
-.PP
-.BI "void *memmem(const void " haystack [. haystacklen "], size_t " haystacklen ,
-.BI " const void " needle [. needlelen "], size_t " needlelen );
-.PP
-.BI "void *memmove(void " dest [. n "], const void " src [. n "], size_t " n );
-.PP
-.BI "void *memset(void " s [. n "], int " c ", size_t " n );
-.fi
-.SH DESCRIPTION
-The byte string functions perform operations on strings (byte arrays)
-that are not necessarily null-terminated.
-See the individual man pages
-for descriptions of each function.
-.SH NOTES
-The functions
-.BR bcmp ()
-and
-.BR bcopy ()
-are obsolete.
-Use
-.BR memcmp ()
-and
-.BR memmove ()
-instead.
-.\" The old functions are not even available on some non-GNU/Linux systems.
-.SH SEE ALSO
-.BR bcmp (3),
-.BR bcopy (3),
-.BR bzero (3),
-.BR memccpy (3),
-.BR memchr (3),
-.BR memcmp (3),
-.BR memcpy (3),
-.BR memfrob (3),
-.BR memmem (3),
-.BR memmove (3),
-.BR memset (3),
-.BR string (3)
diff --git a/man3/bswap.3 b/man3/bswap.3
deleted file mode 100644
index c142e956b..000000000
--- a/man3/bswap.3
+++ /dev/null
@@ -1,68 +0,0 @@
-.\" Copyright (C) 2016 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH bswap 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-bswap_16, bswap_32, bswap_64 \- reverse order of bytes
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <byteswap.h>
-.PP
-.BI "uint16_t bswap_16(uint16_t " x );
-.BI "uint32_t bswap_32(uint32_t " x );
-.BI "uint64_t bswap_64(uint64_t " x );
-.fi
-.SH DESCRIPTION
-These functions return a value in which the order of the bytes
-in their 2-, 4-, or 8-byte arguments is reversed.
-.SH RETURN VALUE
-These functions return the value of their argument with the bytes reversed.
-.SH ERRORS
-These functions always succeed.
-.SH STANDARDS
-GNU.
-.SH EXAMPLES
-The program below swaps the bytes of the 8-byte integer supplied as
-its command-line argument.
-The following shell session demonstrates the use of the program:
-.PP
-.in +4n
-.EX
-$ \fB./a.out 0x0123456789abcdef\fP
-0x123456789abcdef ==> 0xefcdab8967452301
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (bswap.c)
-.EX
-#include <byteswap.h>
-#include <inttypes.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(int argc, char *argv[])
-{
- uint64_t x;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s <num>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- x = strtoull(argv[1], NULL, 0);
- printf("%#" PRIx64 " ==> %#" PRIx64 "\en", x, bswap_64(x));
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR byteorder (3),
-.BR endian (3)
diff --git a/man3/bswap_16.3 b/man3/bswap_16.3
deleted file mode 100644
index 15a89ab6f..000000000
--- a/man3/bswap_16.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/bswap.3
diff --git a/man3/bswap_32.3 b/man3/bswap_32.3
deleted file mode 100644
index 15a89ab6f..000000000
--- a/man3/bswap_32.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/bswap.3
diff --git a/man3/bswap_64.3 b/man3/bswap_64.3
deleted file mode 100644
index 15a89ab6f..000000000
--- a/man3/bswap_64.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/bswap.3
diff --git a/man3/btowc.3 b/man3/btowc.3
deleted file mode 100644
index 8a4db6b6d..000000000
--- a/man3/btowc.3
+++ /dev/null
@@ -1,89 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH btowc 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-btowc \- convert single byte to wide character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wint_t btowc(int " c );
-.fi
-.SH DESCRIPTION
-The
-.BR btowc ()
-function converts \fIc\fP,
-interpreted as a multibyte sequence
-of length 1, starting in the initial shift state, to a wide character and
-returns it.
-If \fIc\fP is
-.B EOF
-or not a valid multibyte sequence of length 1,
-the
-.BR btowc ()
-function returns
-.BR WEOF .
-.SH RETURN VALUE
-The
-.BR btowc ()
-function returns the wide character
-converted from the single byte \fIc\fP.
-If \fIc\fP is
-.B EOF
-or not a valid multibyte sequence of length 1,
-it returns
-.BR WEOF .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR btowc ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.SH NOTES
-The behavior of
-.BR btowc ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.PP
-This function should never be used.
-It does not work for encodings which have
-state, and unnecessarily treats single bytes differently from multibyte
-sequences.
-Use either
-.BR mbtowc (3)
-or the thread-safe
-.BR mbrtowc (3)
-instead.
-.SH SEE ALSO
-.BR mbrtowc (3),
-.BR mbtowc (3),
-.BR wctob (3)
diff --git a/man3/btree.3 b/man3/btree.3
deleted file mode 100644
index 5b0618ec8..000000000
--- a/man3/btree.3
+++ /dev/null
@@ -1,229 +0,0 @@
-.\" Copyright (c) 1990, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)btree.3 8.4 (Berkeley) 8/18/94
-.\"
-.TH btree 3 (date) "Linux man-pages (unreleased)"
-.\".UC 7
-.SH NAME
-btree \- btree database access method
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.ft B
-#include <sys/types.h>
-#include <db.h>
-.ft R
-.fi
-.SH DESCRIPTION
-.IR "Note well" :
-This page documents interfaces provided up until glibc 2.1.
-Since glibc 2.2, glibc no longer provides these interfaces.
-Probably, you are looking for the APIs provided by the
-.I libdb
-library instead.
-.PP
-The routine
-.BR dbopen (3)
-is the library interface to database files.
-One of the supported file formats is btree files.
-The general description of the database access methods is in
-.BR dbopen (3),
-this manual page describes only the btree-specific information.
-.PP
-The btree data structure is a sorted, balanced tree structure storing
-associated key/data pairs.
-.PP
-The btree access-method-specific data structure provided to
-.BR dbopen (3)
-is defined in the
-.I <db.h>
-include file as follows:
-.PP
-.in +4n
-.EX
-typedef struct {
- unsigned long flags;
- unsigned int cachesize;
- int maxkeypage;
- int minkeypage;
- unsigned int psize;
- int (*compare)(const DBT *key1, const DBT *key2);
- size_t (*prefix)(const DBT *key1, const DBT *key2);
- int lorder;
-} BTREEINFO;
-.EE
-.in
-.PP
-The elements of this structure are as follows:
-.TP
-.I flags
-The flag value is specified by ORing any of the following values:
-.RS
-.TP
-.B R_DUP
-Permit duplicate keys in the tree, that is,
-permit insertion if the key to be
-inserted already exists in the tree.
-The default behavior, as described in
-.BR dbopen (3),
-is to overwrite a matching key when inserting a new key or to fail if
-the
-.B R_NOOVERWRITE
-flag is specified.
-The
-.B R_DUP
-flag is overridden by the
-.B R_NOOVERWRITE
-flag, and if the
-.B R_NOOVERWRITE
-flag is specified, attempts to insert duplicate keys into
-the tree will fail.
-.IP
-If the database contains duplicate keys, the order of retrieval of
-key/data pairs is undefined if the
-.I get
-routine is used, however,
-.I seq
-routine calls with the
-.B R_CURSOR
-flag set will always return the logical
-"first" of any group of duplicate keys.
-.RE
-.TP
-.I cachesize
-A suggested maximum size (in bytes) of the memory cache.
-This value is
-.I only
-advisory, and the access method will allocate more memory rather than fail.
-Since every search examines the root page of the tree, caching the most
-recently used pages substantially improves access time.
-In addition, physical writes are delayed as long as possible, so a moderate
-cache can reduce the number of I/O operations significantly.
-Obviously, using a cache increases (but only increases) the likelihood of
-corruption or lost data if the system crashes while a tree is being modified.
-If
-.I cachesize
-is 0 (no size is specified), a default cache is used.
-.TP
-.I maxkeypage
-The maximum number of keys which will be stored on any single page.
-Not currently implemented.
-.\" The maximum number of keys which will be stored on any single page.
-.\" Because of the way the btree data structure works,
-.\" .I maxkeypage
-.\" must always be greater than or equal to 2.
-.\" If
-.\" .I maxkeypage
-.\" is 0 (no maximum number of keys is specified), the page fill factor is
-.\" made as large as possible (which is almost invariably what is wanted).
-.TP
-.I minkeypage
-The minimum number of keys which will be stored on any single page.
-This value is used to determine which keys will be stored on overflow
-pages, that is, if a key or data item is longer than the pagesize divided
-by the minkeypage value, it will be stored on overflow pages instead
-of in the page itself.
-If
-.I minkeypage
-is 0 (no minimum number of keys is specified), a value of 2 is used.
-.TP
-.I psize
-Page size is the size (in bytes) of the pages used for nodes in the tree.
-The minimum page size is 512 bytes and the maximum page size is 64\ KiB.
-If
-.I psize
-is 0 (no page size is specified), a page size is chosen based on the
-underlying filesystem I/O block size.
-.TP
-.I compare
-Compare is the key comparison function.
-It must return an integer less than, equal to, or greater than zero if the
-first key argument is considered to be respectively less than, equal to,
-or greater than the second key argument.
-The same comparison function must be used on a given tree every time it
-is opened.
-If
-.I compare
-is NULL (no comparison function is specified), the keys are compared
-lexically, with shorter keys considered less than longer keys.
-.TP
-.I prefix
-Prefix is the prefix comparison function.
-If specified, this routine must return the number of bytes of the second key
-argument which are necessary to determine that it is greater than the first
-key argument.
-If the keys are equal, the key length should be returned.
-Note, the usefulness of this routine is very data-dependent, but, in some
-data sets can produce significantly reduced tree sizes and search times.
-If
-.I prefix
-is NULL (no prefix function is specified),
-.I and
-no comparison function is specified, a default lexical comparison routine
-is used.
-If
-.I prefix
-is NULL and a comparison routine is specified, no prefix comparison is
-done.
-.TP
-.I lorder
-The byte order for integers in the stored database metadata.
-The number should represent the order as an integer; for example,
-big endian order would be the number 4,321.
-If
-.I lorder
-is 0 (no order is specified), the current host order is used.
-.PP
-If the file already exists (and the
-.B O_TRUNC
-flag is not specified), the
-values specified for the arguments
-.IR flags ,
-.IR lorder ,
-and
-.I psize
-are ignored
-in favor of the values used when the tree was created.
-.PP
-Forward sequential scans of a tree are from the least key to the greatest.
-.PP
-Space freed up by deleting key/data pairs from the tree is never reclaimed,
-although it is normally made available for reuse.
-This means that the btree storage structure is grow-only.
-The only solutions are to avoid excessive deletions, or to create a fresh
-tree periodically from a scan of an existing one.
-.PP
-Searches, insertions, and deletions in a btree will all complete in
-O lg base N where base is the average fill factor.
-Often, inserting ordered data into btrees results in a low fill factor.
-This implementation has been modified to make ordered insertion the best
-case, resulting in a much better than normal page fill factor.
-.SH ERRORS
-The
-.I btree
-access method routines may fail and set
-.I errno
-for any of the errors specified for the library routine
-.BR dbopen (3).
-.SH BUGS
-Only big and little endian byte order is supported.
-.SH SEE ALSO
-.BR dbopen (3),
-.BR hash (3),
-.BR mpool (3),
-.BR recno (3)
-.PP
-.IR "The Ubiquitous B-tree" ,
-Douglas Comer, ACM Comput. Surv. 11, 2 (June 1979), 121-138.
-.PP
-.IR "Prefix B-trees" ,
-Bayer and Unterauer, ACM Transactions on Database Systems, Vol. 2, 1
-(March 1977), 11-26.
-.PP
-.IR "The Art of Computer Programming Vol. 3: Sorting and Searching" ,
-D.E. Knuth, 1968, pp 471-480.
diff --git a/man3/byteorder.3 b/man3/byteorder.3
deleted file mode 100644
index c7a97548d..000000000
--- a/man3/byteorder.3
+++ /dev/null
@@ -1,86 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 21:29:05 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Thu Jul 26 14:06:20 2001 by Andries Brouwer (aeb@cwi.nl)
-.\"
-.TH BYTEORDER 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-htonl, htons, ntohl, ntohs \- convert values between host and network
-byte order
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <arpa/inet.h>
-.PP
-.BI "uint32_t htonl(uint32_t " hostlong );
-.BI "uint16_t htons(uint16_t " hostshort );
-.PP
-.BI "uint32_t ntohl(uint32_t " netlong );
-.BI "uint16_t ntohs(uint16_t " netshort );
-.fi
-.SH DESCRIPTION
-The
-.BR htonl ()
-function converts the unsigned integer
-.I hostlong
-from host byte order to network byte order.
-.PP
-The
-.BR htons ()
-function converts the unsigned short integer
-.I hostshort
-from host byte order to network byte order.
-.PP
-The
-.BR ntohl ()
-function converts the unsigned integer
-.I netlong
-from network byte order to host byte order.
-.PP
-The
-.BR ntohs ()
-function converts the unsigned short integer
-.I netshort
-from network byte order to host byte order.
-.PP
-On the i386 the host byte order is Least Significant Byte first,
-whereas the network byte order, as used on the Internet, is Most
-Significant Byte first.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR htonl (),
-.BR htons (),
-.BR ntohl (),
-.BR ntohs ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH SEE ALSO
-.BR bswap (3),
-.BR endian (3),
-.BR gethostbyname (3),
-.BR getservent (3)
diff --git a/man3/bzero.3 b/man3/bzero.3
deleted file mode 100644
index 70e076439..000000000
--- a/man3/bzero.3
+++ /dev/null
@@ -1,161 +0,0 @@
-'\" t
-.\" Copyright (C) 2017 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH bzero 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-bzero, explicit_bzero \- zero a byte string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <strings.h>
-.PP
-.BI "void bzero(void " s [. n "], size_t " n );
-.PP
-.B #include <string.h>
-.PP
-.BI "void explicit_bzero(void " s [. n "], size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR bzero ()
-function erases the data in the
-.I n
-bytes of the memory starting at the location pointed to by
-.IR s ,
-by writing zeros (bytes containing \[aq]\e0\[aq]) to that area.
-.PP
-The
-.BR explicit_bzero ()
-function performs the same task as
-.BR bzero ().
-It differs from
-.BR bzero ()
-in that it guarantees that compiler optimizations will not remove the
-erase operation if the compiler deduces that the operation is "unnecessary".
-.SH RETURN VALUE
-None.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR bzero (),
-.BR explicit_bzero ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-.TP
-.BR explicit_bzero ()
-glibc 2.25.
-.IP
-The
-.BR explicit_bzero ()
-function is a nonstandard extension that is also present on some of the BSDs.
-Some other implementations have a similar function, such as
-.BR memset_explicit ()
-or
-.BR memset_s ().
-.TP
-.BR bzero ()
-4.3BSD.
-.IP
-Marked as LEGACY in POSIX.1-2001.
-Removed in POSIX.1-2008.
-.SH NOTES
-The
-.BR explicit_bzero ()
-function addresses a problem that security-conscious applications
-may run into when using
-.BR bzero ():
-if the compiler can deduce that the location to be zeroed will
-never again be touched by a
-.I correct
-program, then it may remove the
-.BR bzero ()
-call altogether.
-This is a problem if the intent of the
-.BR bzero ()
-call was to erase sensitive data (e.g., passwords)
-to prevent the possibility that the data was leaked
-by an incorrect or compromised program.
-Calls to
-.BR explicit_bzero ()
-are never optimized away by the compiler.
-.PP
-The
-.BR explicit_bzero ()
-function does not solve all problems associated with erasing sensitive data:
-.IP \[bu] 3
-The
-.BR explicit_bzero ()
-function does
-.I not
-guarantee that sensitive data is completely erased from memory.
-(The same is true of
-.BR bzero ().)
-For example, there may be copies of the sensitive data in
-a register and in "scratch" stack areas.
-The
-.BR explicit_bzero ()
-function is not aware of these copies, and can't erase them.
-.IP \[bu]
-In some circumstances,
-.BR explicit_bzero ()
-can
-.I decrease
-security.
-If the compiler determined that the variable containing the
-sensitive data could be optimized to be stored in a register
-(because it is small enough to fit in a register,
-and no operation other than the
-.BR explicit_bzero ()
-call would need to take the address of the variable), then the
-.BR explicit_bzero ()
-call will force the data to be copied from the register
-to a location in RAM that is then immediately erased
-(while the copy in the register remains unaffected).
-The problem here is that data in RAM is more likely to be exposed
-by a bug than data in a register, and thus the
-.BR explicit_bzero ()
-call creates a brief time window where the sensitive data is more
-vulnerable than it would otherwise have been
-if no attempt had been made to erase the data.
-.PP
-Note that declaring the sensitive variable with the
-.B volatile
-qualifier does
-.I not
-eliminate the above problems.
-Indeed, it will make them worse, since, for example,
-it may force a variable that would otherwise have been optimized
-into a register to instead be maintained in (more vulnerable)
-RAM for its entire lifetime.
-.PP
-Notwithstanding the above details, for security-conscious applications, using
-.BR explicit_bzero ()
-is generally preferable to not using it.
-The developers of
-.BR explicit_bzero ()
-anticipate that future compilers will recognize calls to
-.BR explicit_bzero ()
-and take steps to ensure that all copies of the sensitive data are erased,
-including copies in registers or in "scratch" stack areas.
-.SH SEE ALSO
-.BR bstring (3),
-.BR memset (3),
-.BR swab (3)
diff --git a/man3/cabs.3 b/man3/cabs.3
deleted file mode 100644
index 042945418..000000000
--- a/man3/cabs.3
+++ /dev/null
@@ -1,57 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH cabs 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cabs, cabsf, cabsl \- absolute value of a complex number
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double cabs(double complex " z );
-.BI "float cabsf(float complex " z );
-.BI "long double cabsl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions return the absolute value of the complex number
-.IR z .
-The result is a real number.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR cabs (),
-.BR cabsf (),
-.BR cabsl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH NOTES
-The function is actually an alias for
-.I "hypot(a,\ b)"
-(or, equivalently,
-.IR "sqrt(a*a\ +\ b*b)" ).
-.SH SEE ALSO
-.BR abs (3),
-.BR cimag (3),
-.BR hypot (3),
-.BR complex (7)
diff --git a/man3/cabsf.3 b/man3/cabsf.3
deleted file mode 100644
index e50ac96b7..000000000
--- a/man3/cabsf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cabs.3
diff --git a/man3/cabsl.3 b/man3/cabsl.3
deleted file mode 100644
index e50ac96b7..000000000
--- a/man3/cabsl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cabs.3
diff --git a/man3/cacos.3 b/man3/cacos.3
deleted file mode 100644
index ba1354c2d..000000000
--- a/man3/cacos.3
+++ /dev/null
@@ -1,96 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\" and Copyright (C) 2011 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH cacos 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cacos, cacosf, cacosl \- complex arc cosine
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex cacos(double complex " z );
-.BI "float complex cacosf(float complex " z );
-.BI "long double complex cacosl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions calculate the complex arc cosine of
-.IR z .
-If \fIy\ =\ cacos(z)\fP, then \fIz\ =\ ccos(y)\fP.
-The real part of
-.I y
-is chosen in the interval [0,pi].
-.PP
-One has:
-.PP
-.nf
- cacos(z) = \-i * clog(z + i * csqrt(1 \- z * z))
-.fi
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR cacos (),
-.BR cacosf (),
-.BR cacosl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH EXAMPLES
-.\" SRC BEGIN (cacos.c)
-.EX
-/* Link with "\-lm" */
-\&
-#include <complex.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- double complex z, c, f;
- double complex i = I;
-\&
- if (argc != 3) {
- fprintf(stderr, "Usage: %s <real> <imag>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- z = atof(argv[1]) + atof(argv[2]) * I;
-\&
- c = cacos(z);
-\&
- printf("cacos() = %6.3f %6.3f*i\en", creal(c), cimag(c));
-\&
- f = \-i * clog(z + i * csqrt(1 \- z * z));
-\&
- printf("formula = %6.3f %6.3f*i\en", creal(f), cimag(f));
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR ccos (3),
-.BR clog (3),
-.BR complex (7)
diff --git a/man3/cacosf.3 b/man3/cacosf.3
deleted file mode 100644
index a4f10e17f..000000000
--- a/man3/cacosf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cacos.3
diff --git a/man3/cacosh.3 b/man3/cacosh.3
deleted file mode 100644
index b9624a4b0..000000000
--- a/man3/cacosh.3
+++ /dev/null
@@ -1,98 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms(walter.harms@informatik.uni-oldenburg.de)
-.\" and Copyright (C) 2011 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH cacosh 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cacosh, cacoshf, cacoshl \- complex arc hyperbolic cosine
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex cacosh(double complex " z );
-.BI "float complex cacoshf(float complex " z );
-.BI "long double complex cacoshl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions calculate the complex arc hyperbolic cosine of
-.IR z .
-If \fIy\ =\ cacosh(z)\fP, then \fIz\ =\ ccosh(y)\fP.
-The imaginary part of
-.I y
-is chosen in the interval [\-pi,pi].
-The real part of
-.I y
-is chosen nonnegative.
-.PP
-One has:
-.PP
-.nf
- cacosh(z) = 2 * clog(csqrt((z + 1) / 2) + csqrt((z \- 1) / 2))
-.fi
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR cacosh (),
-.BR cacoshf (),
-.BR cacoshl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-glibc 2.1.
-.SH EXAMPLES
-.\" SRC BEGIN (cacosh.c)
-.EX
-/* Link with "\-lm" */
-\&
-#include <complex.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- double complex z, c, f;
-\&
- if (argc != 3) {
- fprintf(stderr, "Usage: %s <real> <imag>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- z = atof(argv[1]) + atof(argv[2]) * I;
-\&
- c = cacosh(z);
- printf("cacosh() = %6.3f %6.3f*i\en", creal(c), cimag(c));
-\&
- f = 2 * clog(csqrt((z + 1)/2) + csqrt((z \- 1)/2));
- printf("formula = %6.3f %6.3f*i\en", creal(f), cimag(f));
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR acosh (3),
-.BR cabs (3),
-.BR ccosh (3),
-.BR cimag (3),
-.BR complex (7)
diff --git a/man3/cacoshf.3 b/man3/cacoshf.3
deleted file mode 100644
index c89c010f2..000000000
--- a/man3/cacoshf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cacosh.3
diff --git a/man3/cacoshl.3 b/man3/cacoshl.3
deleted file mode 100644
index c89c010f2..000000000
--- a/man3/cacoshl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cacosh.3
diff --git a/man3/cacosl.3 b/man3/cacosl.3
deleted file mode 100644
index a4f10e17f..000000000
--- a/man3/cacosl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cacos.3
diff --git a/man3/calloc.3 b/man3/calloc.3
deleted file mode 100644
index a4b9d4455..000000000
--- a/man3/calloc.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/malloc.3
diff --git a/man3/callrpc.3 b/man3/callrpc.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/callrpc.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/canonicalize_file_name.3 b/man3/canonicalize_file_name.3
deleted file mode 100644
index 944eb2724..000000000
--- a/man3/canonicalize_file_name.3
+++ /dev/null
@@ -1,83 +0,0 @@
-'\" t
-.\" Copyright 2013 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" (Replaces an earlier page by Walter Harms and Michael Kerrisk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH canonicalize_file_name 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-canonicalize_file_name \- return the canonicalized absolute pathname
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <stdlib.h>
-.PP
-.BI "char *canonicalize_file_name(const char *" path ");"
-.fi
-.SH DESCRIPTION
-The
-.BR canonicalize_file_name ()
-function returns a null-terminated string containing
-the canonicalized absolute pathname corresponding to
-.IR path .
-In the returned string, symbolic links are resolved, as are
-.I .
-and
-.I ..
-pathname components.
-Consecutive slash
-.RI ( / )
-characters are replaced by a single slash.
-.PP
-The returned string is dynamically allocated by
-.BR canonicalize_file_name ()
-and the caller should deallocate it with
-.BR free (3)
-when it is no longer required.
-.PP
-The call
-.I canonicalize_file_name(path)
-is equivalent to the call:
-.PP
-.in +4n
-.EX
-realpath(path, NULL);
-.EE
-.in
-.SH RETURN VALUE
-On success,
-.BR canonicalize_file_name ()
-returns a null-terminated string.
-On error (e.g., a pathname component is unreadable or does not exist),
-.BR canonicalize_file_name ()
-returns NULL and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-See
-.BR realpath (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR canonicalize_file_name ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH SEE ALSO
-.BR readlink (2),
-.BR realpath (3)
diff --git a/man3/carg.3 b/man3/carg.3
deleted file mode 100644
index 758afce92..000000000
--- a/man3/carg.3
+++ /dev/null
@@ -1,91 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH carg 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-carg, cargf, cargl \- calculate the complex argument
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double carg(double complex " z ");"
-.BI "float cargf(float complex " z ");"
-.BI "long double cargl(long double complex " z ");"
-.fi
-.SH DESCRIPTION
-These functions calculate the complex argument (also called phase angle) of
-.IR z ,
-with a branch cut along the negative real axis.
-.PP
-A complex number can be described by two real coordinates.
-One may use rectangular coordinates and gets
-.PP
-.in +4n
-.EX
-z = x + I * y
-.EE
-.in
-.PP
-where
-.I x\~=\~creal(z)
-and
-.IR y\~=\~cimag(z) .
-.PP
-Or one may use polar coordinates and gets
-.PP
-.in +4n
-.EX
-z = r * cexp(I * a)
-.EE
-.in
-.PP
-where
-.I r\~=\~cabs(z)
-is the "radius", the "modulus", the absolute value of
-.IR z ,
-and
-.I a\~=\~carg(z)
-is the "phase angle", the argument of
-.IR z .
-.PP
-One has:
-.PP
-.in +4n
-.EX
-tan(carg(z)) = cimag(z) / creal(z)
-.EE
-.in
-.SH RETURN VALUE
-The return value is in the range of [\-pi,pi].
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR carg (),
-.BR cargf (),
-.BR cargl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR cabs (3),
-.BR complex (7)
diff --git a/man3/cargf.3 b/man3/cargf.3
deleted file mode 100644
index c181aa420..000000000
--- a/man3/cargf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/carg.3
diff --git a/man3/cargl.3 b/man3/cargl.3
deleted file mode 100644
index c181aa420..000000000
--- a/man3/cargl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/carg.3
diff --git a/man3/casin.3 b/man3/casin.3
deleted file mode 100644
index 17fa10fc8..000000000
--- a/man3/casin.3
+++ /dev/null
@@ -1,60 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH casin 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-casin, casinf, casinl \- complex arc sine
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex casin(double complex " z );
-.BI "float complex casinf(float complex " z );
-.BI "long double complex casinl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions calculate the complex arc sine of
-.IR z .
-If \fIy\ =\ casin(z)\fP, then \fIz\ =\ csin(y)\fP.
-The real part of
-.I y
-is chosen in the interval [\-pi/2,pi/2].
-.PP
-One has:
-.PP
-.nf
- casin(z) = \-i clog(iz + csqrt(1 \- z * z))
-.fi
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR casin (),
-.BR casinf (),
-.BR casinl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR clog (3),
-.BR csin (3),
-.BR complex (7)
diff --git a/man3/casinf.3 b/man3/casinf.3
deleted file mode 100644
index 582875fae..000000000
--- a/man3/casinf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/casin.3
diff --git a/man3/casinh.3 b/man3/casinh.3
deleted file mode 100644
index ec4e5d0b4..000000000
--- a/man3/casinh.3
+++ /dev/null
@@ -1,64 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH casinh 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-casinh, casinhf, casinhl \- complex arc sine hyperbolic
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex casinh(double complex " z );
-.BI "float complex casinhf(float complex " z );
-.BI "long double complex casinhl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions calculate the complex arc hyperbolic sine of
-.IR z .
-If \fIy\~=\~casinh(z)\fP, then \fIz\~=\~csinh(y)\fP.
-The imaginary part of
-.I y
-is chosen in the interval [\-pi/2,pi/2].
-.PP
-One has:
-.PP
-.in +4n
-.EX
-casinh(z) = clog(z + csqrt(z * z + 1))
-.EE
-.in
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR casinh (),
-.BR casinhf (),
-.BR casinhl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR asinh (3),
-.BR cabs (3),
-.BR cimag (3),
-.BR csinh (3),
-.BR complex (7)
diff --git a/man3/casinhf.3 b/man3/casinhf.3
deleted file mode 100644
index c2eada89d..000000000
--- a/man3/casinhf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/casinh.3
diff --git a/man3/casinhl.3 b/man3/casinhl.3
deleted file mode 100644
index c2eada89d..000000000
--- a/man3/casinhl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/casinh.3
diff --git a/man3/casinl.3 b/man3/casinl.3
deleted file mode 100644
index 582875fae..000000000
--- a/man3/casinl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/casin.3
diff --git a/man3/catan.3 b/man3/catan.3
deleted file mode 100644
index 4ba880226..000000000
--- a/man3/catan.3
+++ /dev/null
@@ -1,95 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\" and Copyright (C) 2011 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH catan 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-catan, catanf, catanl \- complex arc tangents
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex catan(double complex " z );
-.BI "float complex catanf(float complex " z );
-.BI "long double complex catanl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions calculate the complex arc tangent of
-.IR z .
-If \fIy\~=\~catan(z)\fP, then \fIz\~=\~ctan(y)\fP.
-The real part of y is chosen in the interval [\-pi/2,pi/2].
-.PP
-One has:
-.PP
-.in +4n
-.EX
-catan(z) = (clog(1 + i * z) \- clog(1 \- i * z)) / (2 * i)
-.EE
-.in
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR catan (),
-.BR catanf (),
-.BR catanl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH EXAMPLES
-.\" SRC BEGIN (catan.c)
-.EX
-/* Link with "\-lm" */
-\&
-#include <complex.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- double complex z, c, f;
- double complex i = I;
-\&
- if (argc != 3) {
- fprintf(stderr, "Usage: %s <real> <imag>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- z = atof(argv[1]) + atof(argv[2]) * I;
-\&
- c = catan(z);
- printf("catan() = %6.3f %6.3f*i\en", creal(c), cimag(c));
-\&
- f = (clog(1 + i * z) \- clog(1 \- i * z)) / (2 * i);
- printf("formula = %6.3f %6.3f*i\en", creal(f), cimag(f));
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR ccos (3),
-.BR clog (3),
-.BR ctan (3),
-.BR complex (7)
diff --git a/man3/catanf.3 b/man3/catanf.3
deleted file mode 100644
index d1e25223d..000000000
--- a/man3/catanf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/catan.3
diff --git a/man3/catanh.3 b/man3/catanh.3
deleted file mode 100644
index b0134546d..000000000
--- a/man3/catanh.3
+++ /dev/null
@@ -1,97 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\" and Copyright (C) 2011 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH catanh 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-catanh, catanhf, catanhl \- complex arc tangents hyperbolic
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex catanh(double complex " z );
-.BI "float complex catanhf(float complex " z );
-.BI "long double complex catanhl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions calculate the complex arc hyperbolic tangent of
-.IR z .
-If \fIy\~=\~catanh(z)\fP, then \fIz\~=\~ctanh(y)\fP.
-The imaginary part of
-.I y
-is chosen in the interval [\-pi/2,pi/2].
-.PP
-One has:
-.PP
-.in +4n
-.EX
-catanh(z) = 0.5 * (clog(1 + z) \- clog(1 \- z))
-.EE
-.in
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR catanh (),
-.BR catanhf (),
-.BR catanhl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH EXAMPLES
-.\" SRC BEGIN (catanh.c)
-.EX
-/* Link with "\-lm" */
-\&
-#include <complex.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- double complex z, c, f;
-\&
- if (argc != 3) {
- fprintf(stderr, "Usage: %s <real> <imag>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- z = atof(argv[1]) + atof(argv[2]) * I;
-\&
- c = catanh(z);
- printf("catanh() = %6.3f %6.3f*i\en", creal(c), cimag(c));
-\&
- f = 0.5 * (clog(1 + z) \- clog(1 \- z));
- printf("formula = %6.3f %6.3f*i\en", creal(f), cimag(f));
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR atanh (3),
-.BR cabs (3),
-.BR cimag (3),
-.BR ctanh (3),
-.BR complex (7)
diff --git a/man3/catanhf.3 b/man3/catanhf.3
deleted file mode 100644
index 23f22a4a8..000000000
--- a/man3/catanhf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/catanh.3
diff --git a/man3/catanhl.3 b/man3/catanhl.3
deleted file mode 100644
index 23f22a4a8..000000000
--- a/man3/catanhl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/catanh.3
diff --git a/man3/catanl.3 b/man3/catanl.3
deleted file mode 100644
index d1e25223d..000000000
--- a/man3/catanl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/catan.3
diff --git a/man3/catclose.3 b/man3/catclose.3
deleted file mode 100644
index 92ff6665a..000000000
--- a/man3/catclose.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/catopen.3
diff --git a/man3/catgets.3 b/man3/catgets.3
deleted file mode 100644
index 988d6aa3a..000000000
--- a/man3/catgets.3
+++ /dev/null
@@ -1,91 +0,0 @@
-'\" t
-.\" Copyright 1993 Mitchum DSouza <m.dsouza@mrc-applied-psychology.cambridge.ac.uk>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Updated, aeb, 980809
-.TH catgets 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-catgets \- get message from a message catalog
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <nl_types.h>
-.PP
-.BI "char *catgets(nl_catd " catalog ", int " set_number \
-", int " message_number ,
-.BI " const char *" message );
-.fi
-.SH DESCRIPTION
-.BR catgets ()
-reads the message
-.IR message_number ,
-in set
-.IR set_number ,
-from the message catalog identified by
-.IR catalog ,
-where
-.I catalog
-is a catalog descriptor returned from an earlier call to
-.BR catopen (3).
-The fourth argument,
-.IR message ,
-points to a default message string which will be returned by
-.BR catgets ()
-if the identified message catalog is not currently available.
-The
-message-text is contained in an internal buffer area and should be copied by
-the application if it is to be saved or modified.
-The return string is
-always terminated with a null byte (\[aq]\e0\[aq]).
-.SH RETURN VALUE
-On success,
-.BR catgets ()
-returns a pointer to an internal buffer area
-containing the null-terminated message string.
-On failure,
-.BR catgets ()
-returns the value
-.IR message .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR catgets ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.PP
-The
-.BR catgets ()
-function is available only in libc.so.4.4.4c and above.
-.PP
-The Jan 1987 X/Open Portability Guide specifies a more subtle
-error return:
-.I message
-is returned if the message catalog specified by
-.I catalog
-is not available, while an empty string is returned
-when the message catalog is available but does not contain
-the specified message.
-These two possible error returns seem to be discarded in SUSv2
-in favor of always returning
-.IR message .
-.SH SEE ALSO
-.BR catopen (3),
-.BR setlocale (3)
diff --git a/man3/catopen.3 b/man3/catopen.3
deleted file mode 100644
index de8ac6c2b..000000000
--- a/man3/catopen.3
+++ /dev/null
@@ -1,200 +0,0 @@
-'\" t
-.\" Copyright 1993 Mitchum DSouza <m.dsouza@mrc-applied-psychology.cambridge.ac.uk>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Thu Dec 13 22:51:19 2001 by Martin Schulze <joey@infodrom.org>
-.\" Modified 2001-12-14 aeb
-.\"
-.TH catopen 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-catopen, catclose \- open/close a message catalog
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <nl_types.h>
-.PP
-.BI "nl_catd catopen(const char *" name ", int " flag );
-.BI "int catclose(nl_catd " catalog );
-.fi
-.SH DESCRIPTION
-The function
-.BR catopen ()
-opens a message catalog and returns a catalog descriptor.
-The descriptor remains valid until
-.BR catclose ()
-or
-.BR execve (2).
-If a file descriptor is used to implement catalog descriptors,
-then the
-.B FD_CLOEXEC
-flag will be set.
-.PP
-The argument
-.I name
-specifies the name of the message catalog to be opened.
-If
-.I name
-specifies an absolute path (i.e., contains a \[aq]/\[aq]),
-then
-.I name
-specifies a pathname for the message catalog.
-Otherwise, the environment variable
-.B NLSPATH
-is used with
-.I name
-substituted for
-.B %N
-(see
-.BR locale (7)).
-It is unspecified whether
-.B NLSPATH
-will be used when the process has root privileges.
-If
-.B NLSPATH
-does not exist in the environment,
-or if a message catalog cannot be opened
-in any of the paths specified by it,
-then an implementation defined path is used.
-This latter default path may depend on the
-.B LC_MESSAGES
-locale setting when the
-.I flag
-argument is
-.B NL_CAT_LOCALE
-and on the
-.B LANG
-environment variable when the
-.I flag
-argument is 0.
-Changing the
-.B LC_MESSAGES
-part of the locale may invalidate
-open catalog descriptors.
-.PP
-The
-.I flag
-argument to
-.BR catopen ()
-is used to indicate the source for the language to use.
-If it is set to
-.BR NL_CAT_LOCALE ,
-then it will use the current locale setting for
-.BR LC_MESSAGES .
-Otherwise, it will use the
-.B LANG
-environment variable.
-.PP
-The function
-.BR catclose ()
-closes the message catalog identified by
-.IR catalog .
-It invalidates any subsequent references to the message catalog
-defined by
-.IR catalog .
-.SH RETURN VALUE
-The function
-.BR catopen ()
-returns a message catalog descriptor of type
-.I nl_catd
-on success.
-On failure, it returns
-.I (nl_catd)\~\-1
-and sets
-.I errno
-to indicate the error.
-The possible error values include all
-possible values for the
-.BR open (2)
-call.
-.PP
-The function
-.BR catclose ()
-returns 0 on success, or \-1 on failure.
-.SH ENVIRONMENT
-.TP
-.B LC_MESSAGES
-May be the source of the
-.B LC_MESSAGES
-locale setting, and thus
-determine the language to use if
-.I flag
-is set to
-.BR NL_CAT_LOCALE .
-.TP
-.B LANG
-The language to use if
-.I flag
-is 0.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR catopen ()
-T} Thread safety MT-Safe env
-T{
-.BR catclose ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The above is the POSIX.1 description.
-The glibc value for
-.B NL_CAT_LOCALE
-is 1.
-.\" (Compare
-.\" .B MCLoadAll
-.\" below.)
-The default path varies, but usually looks at a number of places below
-.IR /usr/share/locale .
-.\" .SS Linux notes
-.\" These functions are available for Linux since libc 4.4.4c.
-.\" In the case of linux libc4 and libc5, the catalog descriptor
-.\" .I nl_catd
-.\" is a
-.\" .BR mmap (2)'ed
-.\" area of memory and not a file descriptor.
-.\" The
-.\" .I flag
-.\" argument to
-.\" .BR catopen ()
-.\" should be either
-.\" .B MCLoadBySet
-.\" (=0) or
-.\" .B MCLoadAll
-.\" (=1).
-.\" The former value indicates that a set from the catalog is to be
-.\" loaded when needed, whereas the latter causes the initial call to
-.\" .BR catopen ()
-.\" to load the entire catalog into memory.
-.\" The default search path varies, but usually looks at a number of places below
-.\" .I /etc/locale
-.\" and
-.\" .IR /usr/lib/locale .
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.\" In XPG 1987, Vol. 3 it says:
-.\" .I "The flag argument of catopen is reserved for future use"
-.\" .IR "and should be set to 0" .
-.\"
-.\" It is unclear what the source was for the constants
-.\" .B MCLoadBySet
-.\" and
-.\" .B MCLoadAll
-.\" (see below).
-.SH SEE ALSO
-.BR catgets (3),
-.BR setlocale (3)
diff --git a/man3/cbc_crypt.3 b/man3/cbc_crypt.3
deleted file mode 100644
index 853c9cbdf..000000000
--- a/man3/cbc_crypt.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/des_crypt.3
diff --git a/man3/cbrt.3 b/man3/cbrt.3
deleted file mode 100644
index 50c3557dc..000000000
--- a/man3/cbrt.3
+++ /dev/null
@@ -1,90 +0,0 @@
-'\" t
-.\" Copyright 1995 Jim Van Zandt <jrv@vanzandt.mv.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" changed `square root' into `cube root' - aeb, 950919
-.\"
-.\" Modified 2002-07-27 Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH cbrt 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cbrt, cbrtf, cbrtl \- cube root function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double cbrt(double " x );
-.BI "float cbrtf(float " x );
-.BI "long double cbrtl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR cbrt ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR cbrtf (),
-.BR cbrtl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the (real) cube root of
-.IR x .
-This function cannot fail; every representable real value has a
-representable real cube root.
-.SH RETURN VALUE
-These functions return the cube root of
-.IR x .
-.PP
-If
-.I x
-is +0, \-0, positive infinity, negative infinity, or NaN,
-.I x
-is returned.
-.SH ERRORS
-No errors occur.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR cbrt (),
-.BR cbrtf (),
-.BR cbrtl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.\" .BR cbrt ()
-.\" was a GNU extension. It is now a C99 requirement.
-.SH SEE ALSO
-.BR pow (3),
-.BR sqrt (3)
diff --git a/man3/cbrtf.3 b/man3/cbrtf.3
deleted file mode 100644
index b662c9ecd..000000000
--- a/man3/cbrtf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cbrt.3
diff --git a/man3/cbrtl.3 b/man3/cbrtl.3
deleted file mode 100644
index b662c9ecd..000000000
--- a/man3/cbrtl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cbrt.3
diff --git a/man3/ccos.3 b/man3/ccos.3
deleted file mode 100644
index d50811ca2..000000000
--- a/man3/ccos.3
+++ /dev/null
@@ -1,60 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH ccos 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ccos, ccosf, ccosl \- complex cosine function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex ccos(double complex " z );
-.BI "float complex ccosf(float complex " z );
-.BI "long double complex ccosl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions calculate the complex cosine of
-.IR z .
-.PP
-The complex cosine function is defined as:
-.PP
-.in +4n
-.EX
-ccos(z) = (exp(i * z) + exp(\-i * z)) / 2
-.EE
-.in
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ccos (),
-.BR ccosf (),
-.BR ccosl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR cabs (3),
-.BR cacos (3),
-.BR csin (3),
-.BR ctan (3),
-.BR complex (7)
diff --git a/man3/ccosf.3 b/man3/ccosf.3
deleted file mode 100644
index b4323ffa4..000000000
--- a/man3/ccosf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ccos.3
diff --git a/man3/ccosh.3 b/man3/ccosh.3
deleted file mode 100644
index 2f96be25b..000000000
--- a/man3/ccosh.3
+++ /dev/null
@@ -1,40 +0,0 @@
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH ccosh 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ccosh, ccoshf, ccoshl \- complex hyperbolic cosine
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex ccosh(double complex " z );
-.BI "float complex ccoshf(float complex " z );
-.BI "long double complex ccoshl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions calculate the complex hyperbolic cosine of
-.IR z .
-.PP
-The complex hyperbolic cosine function is defined as:
-.PP
-.in +4n
-.EX
-ccosh(z) = (exp(z)+exp(\-z))/2
-.EE
-.in
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR cabs (3),
-.BR cacosh (3),
-.BR csinh (3),
-.BR ctanh (3),
-.BR complex (7)
diff --git a/man3/ccoshf.3 b/man3/ccoshf.3
deleted file mode 100644
index a777fbf7f..000000000
--- a/man3/ccoshf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ccosh.3
diff --git a/man3/ccoshl.3 b/man3/ccoshl.3
deleted file mode 100644
index a777fbf7f..000000000
--- a/man3/ccoshl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ccosh.3
diff --git a/man3/ccosl.3 b/man3/ccosl.3
deleted file mode 100644
index b4323ffa4..000000000
--- a/man3/ccosl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ccos.3
diff --git a/man3/ceil.3 b/man3/ceil.3
deleted file mode 100644
index d619d4cf8..000000000
--- a/man3/ceil.3
+++ /dev/null
@@ -1,118 +0,0 @@
-'\" t
-.\" Copyright 2001 Andries Brouwer <aeb@cwi.nl>.
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH ceil 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ceil, ceilf, ceill \- ceiling function: smallest integral value not
-less than argument
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double ceil(double " x );
-.BI "float ceilf(float " x );
-.BI "long double ceill(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR ceilf (),
-.BR ceill ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the smallest integral value that is not less than
-.IR x .
-.PP
-For example,
-.I ceil(0.5)
-is 1.0, and
-.I ceil(\-0.5)
-is 0.0.
-.SH RETURN VALUE
-These functions return the ceiling of
-.IR x .
-.PP
-If
-.I x
-is integral, +0, \-0, NaN, or infinite,
-.I x
-itself is returned.
-.SH ERRORS
-No errors occur.
-POSIX.1-2001 documents a range error for overflows, but see NOTES.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ceil (),
-.BR ceilf (),
-.BR ceill ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH NOTES
-SUSv2 and POSIX.1-2001 contain text about overflow (which might set
-.I errno
-to
-.BR ERANGE ,
-or raise an
-.B FE_OVERFLOW
-exception).
-In practice, the result cannot overflow on any current machine,
-so this error-handling stuff is just nonsense.
-.\" The POSIX.1-2001 APPLICATION USAGE SECTION discusses this point.
-(More precisely, overflow can happen only when the maximum value
-of the exponent is smaller than the number of mantissa bits.
-For the IEEE-754 standard 32-bit and 64-bit floating-point numbers
-the maximum value of the exponent is 127 (respectively, 1023),
-and the number of mantissa bits
-including the implicit bit
-is 24 (respectively, 53).)
-.PP
-The integral value returned by these functions may be too large
-to store in an integer type
-.RI ( int ,
-.IR long ,
-etc.).
-To avoid an overflow, which will produce undefined results,
-an application should perform a range check on the returned value
-before assigning it to an integer type.
-.SH SEE ALSO
-.BR floor (3),
-.BR lrint (3),
-.BR nearbyint (3),
-.BR rint (3),
-.BR round (3),
-.BR trunc (3)
diff --git a/man3/ceilf.3 b/man3/ceilf.3
deleted file mode 100644
index 569d1baf7..000000000
--- a/man3/ceilf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ceil.3
diff --git a/man3/ceill.3 b/man3/ceill.3
deleted file mode 100644
index 569d1baf7..000000000
--- a/man3/ceill.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ceil.3
diff --git a/man3/cexp.3 b/man3/cexp.3
deleted file mode 100644
index 3a0a011e5..000000000
--- a/man3/cexp.3
+++ /dev/null
@@ -1,61 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH cexp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cexp, cexpf, cexpl \- complex exponential function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex cexp(double complex " z );
-.BI "float complex cexpf(float complex " z );
-.BI "long double complex cexpl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions calculate e (2.71828..., the base of natural logarithms)
-raised to the power of
-.IR z .
-.PP
-One has:
-.PP
-.in +4n
-.EX
-cexp(I * z) = ccos(z) + I * csin(z)
-.EE
-.in
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR cexp (),
-.BR cexpf (),
-.BR cexpl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR cabs (3),
-.BR cexp2 (3),
-.BR clog (3),
-.BR cpow (3),
-.BR complex (7)
diff --git a/man3/cexp2.3 b/man3/cexp2.3
deleted file mode 100644
index c1c393dbd..000000000
--- a/man3/cexp2.3
+++ /dev/null
@@ -1,31 +0,0 @@
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH cexp2 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cexp2, cexp2f, cexp2l \- base-2 exponent of a complex number
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex cexp2(double complex " z );
-.BI "float complex cexp2f(float complex " z );
-.BI "long double complex cexp2l(long double complex " z );
-.fi
-.SH DESCRIPTION
-The function returns 2 raised to the power of
-.IR z .
-.SH STANDARDS
-These function names are reserved for future use in C99.
-.PP
-As at glibc 2.31, these functions are not provided in glibc.
-.\" But reserved in NAMESPACE.
-.SH SEE ALSO
-.BR cabs (3),
-.BR cexp (3),
-.BR clog10 (3),
-.BR complex (7)
diff --git a/man3/cexp2f.3 b/man3/cexp2f.3
deleted file mode 100644
index 759ad34ce..000000000
--- a/man3/cexp2f.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cexp2.3
diff --git a/man3/cexp2l.3 b/man3/cexp2l.3
deleted file mode 100644
index 759ad34ce..000000000
--- a/man3/cexp2l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cexp2.3
diff --git a/man3/cexpf.3 b/man3/cexpf.3
deleted file mode 100644
index 794d70711..000000000
--- a/man3/cexpf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cexp.3
diff --git a/man3/cexpl.3 b/man3/cexpl.3
deleted file mode 100644
index 794d70711..000000000
--- a/man3/cexpl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cexp.3
diff --git a/man3/cfgetispeed.3 b/man3/cfgetispeed.3
deleted file mode 100644
index eb472496d..000000000
--- a/man3/cfgetispeed.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/termios.3
diff --git a/man3/cfgetospeed.3 b/man3/cfgetospeed.3
deleted file mode 100644
index eb472496d..000000000
--- a/man3/cfgetospeed.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/termios.3
diff --git a/man3/cfmakeraw.3 b/man3/cfmakeraw.3
deleted file mode 100644
index eb472496d..000000000
--- a/man3/cfmakeraw.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/termios.3
diff --git a/man3/cfree.3 b/man3/cfree.3
deleted file mode 100644
index ccd2f05cd..000000000
--- a/man3/cfree.3
+++ /dev/null
@@ -1,135 +0,0 @@
-'\" t
-.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH cfree 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cfree \- free allocated memory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.PP
-.B "#include <stdlib.h>"
-.PP
-/* In SunOS 4 */
-.BI "int cfree(void *" ptr );
-.PP
-/* In glibc or FreeBSD libcompat */
-.BI "void cfree(void *" ptr );
-.PP
-/* In SCO OpenServer */
-.BI "void cfree(char " ptr [. size " * ." num "], unsigned int " num ", \
-unsigned int " size );
-.PP
-/* In Solaris watchmalloc.so.1 */
-.BI "void cfree(void " ptr [. elsize " * ." nelem "], size_t " nelem ", \
-size_t " elsize );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR cfree ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-This function should never be used.
-Use
-.BR free (3)
-instead.
-Starting with glibc 2.26, it has been removed from glibc.
-.SS 1-arg cfree
-In glibc, the function
-.BR cfree ()
-is a synonym for
-.BR free (3),
-"added for compatibility with SunOS".
-.PP
-Other systems have other functions with this name.
-The declaration is sometimes in
-.I <stdlib.h>
-and sometimes in
-.IR <malloc.h> .
-.SS 3-arg cfree
-Some SCO and Solaris versions have malloc libraries with a 3-argument
-.BR cfree (),
-apparently as an analog to
-.BR calloc (3).
-.PP
-If you need it while porting something, add
-.PP
-.in +4n
-.EX
-#define cfree(p, n, s) free((p))
-.EE
-.in
-.PP
-to your file.
-.PP
-A frequently asked question is "Can I use
-.BR free (3)
-to free memory allocated with
-.BR calloc (3),
-or do I need
-.BR cfree ()?"
-Answer: use
-.BR free (3).
-.PP
-An SCO manual writes: "The cfree routine is provided for compliance
-to the iBCSe2 standard and simply calls free.
-The num and size
-arguments to cfree are not used."
-.SH RETURN VALUE
-The SunOS version of
-.BR cfree ()
-(which is a synonym for
-.BR free (3))
-returns 1 on success and 0 on failure.
-In case of error,
-.I errno
-is set to
-.BR EINVAL :
-the value of
-.I ptr
-was not a pointer to a block previously allocated by
-one of the routines in the
-.BR malloc (3)
-family.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR cfree ()
-T} Thread safety MT-Safe /* In glibc */
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The 3-argument version of
-.BR cfree ()
-as used by SCO conforms to the iBCSe2 standard:
-Intel386 Binary Compatibility Specification, Edition 2.
-.SH STANDARDS
-None.
-.SH HISTORY
-.\" commit 025b33ae84bb8f15b2748a1d8605dca453fce112
-Removed in glibc 2.26.
-.SH SEE ALSO
-.BR malloc (3)
diff --git a/man3/cfsetispeed.3 b/man3/cfsetispeed.3
deleted file mode 100644
index eb472496d..000000000
--- a/man3/cfsetispeed.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/termios.3
diff --git a/man3/cfsetospeed.3 b/man3/cfsetospeed.3
deleted file mode 100644
index eb472496d..000000000
--- a/man3/cfsetospeed.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/termios.3
diff --git a/man3/cfsetspeed.3 b/man3/cfsetspeed.3
deleted file mode 100644
index eb472496d..000000000
--- a/man3/cfsetspeed.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/termios.3
diff --git a/man3/cimag.3 b/man3/cimag.3
deleted file mode 100644
index 04402b2ed..000000000
--- a/man3/cimag.3
+++ /dev/null
@@ -1,61 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH cimag 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cimag, cimagf, cimagl \- get imaginary part of a complex number
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double cimag(double complex " z );
-.BI "float cimagf(float complex " z );
-.BI "long double cimagl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions return the imaginary part of the complex number
-.IR z .
-.PP
-One has:
-.PP
-.in +4n
-.EX
-z = creal(z) + I * cimag(z)
-.EE
-.in
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR cimag (),
-.BR cimagf (),
-.BR cimagl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-GCC also supports __imag__.
-That is a GNU extension.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR cabs (3),
-.BR creal (3),
-.BR complex (7)
diff --git a/man3/cimagf.3 b/man3/cimagf.3
deleted file mode 100644
index e806455ae..000000000
--- a/man3/cimagf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cimag.3
diff --git a/man3/cimagl.3 b/man3/cimagl.3
deleted file mode 100644
index e806455ae..000000000
--- a/man3/cimagl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cimag.3
diff --git a/man3/circleq.3 b/man3/circleq.3
deleted file mode 100644
index e9063d76e..000000000
--- a/man3/circleq.3
+++ /dev/null
@@ -1,318 +0,0 @@
-.\" Copyright (c) 1993
-.\" The Regents of the University of California. All rights reserved.
-.\" and Copyright (c) 2020 by Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: BSD-3-Clause
-.\"
-.\"
-.TH CIRCLEQ 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-CIRCLEQ_EMPTY,
-CIRCLEQ_ENTRY,
-CIRCLEQ_FIRST,
-CIRCLEQ_FOREACH,
-CIRCLEQ_FOREACH_REVERSE,
-CIRCLEQ_HEAD,
-CIRCLEQ_HEAD_INITIALIZER,
-CIRCLEQ_INIT,
-CIRCLEQ_INSERT_AFTER,
-CIRCLEQ_INSERT_BEFORE,
-CIRCLEQ_INSERT_HEAD,
-CIRCLEQ_INSERT_TAIL,
-CIRCLEQ_LAST,
-CIRCLEQ_LOOP_NEXT,
-CIRCLEQ_LOOP_PREV,
-CIRCLEQ_NEXT,
-CIRCLEQ_PREV,
-CIRCLEQ_REMOVE
-\- implementation of a doubly linked circular queue
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/queue.h>
-.PP
-.B CIRCLEQ_ENTRY(TYPE);
-.PP
-.B CIRCLEQ_HEAD(HEADNAME, TYPE);
-.BI "CIRCLEQ_HEAD CIRCLEQ_HEAD_INITIALIZER(CIRCLEQ_HEAD " head );
-.BI "void CIRCLEQ_INIT(CIRCLEQ_HEAD *" head );
-.PP
-.BI "int CIRCLEQ_EMPTY(CIRCLEQ_HEAD *" head );
-.PP
-.BI "void CIRCLEQ_INSERT_HEAD(CIRCLEQ_HEAD *" head ,
-.BI " struct TYPE *" elm ", CIRCLEQ_ENTRY " NAME );
-.BI "void CIRCLEQ_INSERT_TAIL(CIRCLEQ_HEAD *" head ,
-.BI " struct TYPE *" elm ", CIRCLEQ_ENTRY " NAME );
-.BI "void CIRCLEQ_INSERT_BEFORE(CIRCLEQ_HEAD *" head ", struct TYPE *" listelm ,
-.BI " struct TYPE *" elm ", CIRCLEQ_ENTRY " NAME );
-.BI "void CIRCLEQ_INSERT_AFTER(CIRCLEQ_HEAD *" head ", struct TYPE *" listelm ,
-.BI " struct TYPE *" elm ", CIRCLEQ_ENTRY " NAME );
-.PP
-.BI "struct TYPE *CIRCLEQ_FIRST(CIRCLEQ_HEAD *" head );
-.BI "struct TYPE *CIRCLEQ_LAST(CIRCLEQ_HEAD *" head );
-.BI "struct TYPE *CIRCLEQ_PREV(struct TYPE *" elm ", CIRCLEQ_ENTRY " NAME );
-.BI "struct TYPE *CIRCLEQ_NEXT(struct TYPE *" elm ", CIRCLEQ_ENTRY " NAME );
-.BI "struct TYPE *CIRCLEQ_LOOP_PREV(CIRCLEQ_HEAD *" head ,
-.BI " struct TYPE *" elm ", CIRCLEQ_ENTRY " NAME );
-.BI "struct TYPE *CIRCLEQ_LOOP_NEXT(CIRCLEQ_HEAD *" head ,
-.BI " struct TYPE *" elm ", CIRCLEQ_ENTRY " NAME );
-.PP
-.BI "CIRCLEQ_FOREACH(struct TYPE *" var ", CIRCLEQ_HEAD *" head ,
-.BI " CIRCLEQ_ENTRY " NAME );
-.BI "CIRCLEQ_FOREACH_REVERSE(struct TYPE *" var ", CIRCLEQ_HEAD *" head ,
-.BI " CIRCLEQ_ENTRY " NAME );
-.PP
-.BI "void CIRCLEQ_REMOVE(CIRCLEQ_HEAD *" head ", struct TYPE *" elm ,
-.BI " CIRCLEQ_ENTRY " NAME );
-.fi
-.SH DESCRIPTION
-These macros define and operate on doubly linked circular queues.
-.PP
-In the macro definitions,
-.I TYPE
-is the name of a user-defined structure,
-that must contain a field of type
-.IR CIRCLEQ_ENTRY ,
-named
-.IR NAME .
-The argument
-.I HEADNAME
-is the name of a user-defined structure
-that must be declared using the macro
-.BR CIRCLEQ_HEAD ().
-.SS Creation
-A circular queue is headed by a structure defined by the
-.BR CIRCLEQ_HEAD ()
-macro.
-This structure contains a pair of pointers,
-one to the first element in the queue
-and the other to the last element in the queue.
-The elements are doubly linked
-so that an arbitrary element can be removed without traversing the queue.
-New elements can be added to the queue
-after an existing element,
-before an existing element,
-at the head of the queue,
-or at the end of the queue.
-A
-.I CIRCLEQ_HEAD
-structure is declared as follows:
-.PP
-.in +4
-.EX
-CIRCLEQ_HEAD(HEADNAME, TYPE) head;
-.EE
-.in
-.PP
-where
-.I struct HEADNAME
-is the structure to be defined, and
-.I struct TYPE
-is the type of the elements to be linked into the queue.
-A pointer to the head of the queue can later be declared as:
-.PP
-.in +4
-.EX
-struct HEADNAME *headp;
-.EE
-.in
-.PP
-(The names
-.I head
-and
-.I headp
-are user selectable.)
-.PP
-.BR CIRCLEQ_ENTRY ()
-declares a structure that connects the elements in the queue.
-.PP
-.BR CIRCLEQ_HEAD_INITIALIZER ()
-evaluates to an initializer for the queue
-.IR head .
-.PP
-.BR CIRCLEQ_INIT ()
-initializes the queue referenced by
-.IR head .
-.PP
-.BR CIRCLEQ_EMPTY ()
-evaluates to true if there are no items on the queue.
-.SS Insertion
-.BR CIRCLEQ_INSERT_HEAD ()
-inserts the new element
-.I elm
-at the head of the queue.
-.PP
-.BR CIRCLEQ_INSERT_TAIL ()
-inserts the new element
-.I elm
-at the end of the queue.
-.PP
-.BR CIRCLEQ_INSERT_BEFORE ()
-inserts the new element
-.I elm
-before the element
-.IR listelm .
-.PP
-.BR CIRCLEQ_INSERT_AFTER ()
-inserts the new element
-.I elm
-after the element
-.IR listelm .
-.SS Traversal
-.BR CIRCLEQ_FIRST ()
-returns the first item on the queue.
-.PP
-.BR CIRCLEQ_LAST ()
-returns the last item on the queue.
-.PP
-.BR CIRCLEQ_PREV ()
-returns the previous item on the queue, or
-.I &head
-if this item is the first one.
-.PP
-.BR CIRCLEQ_NEXT ()
-returns the next item on the queue, or
-.I &head
-if this item is the last one.
-.PP
-.BR CIRCLEQ_LOOP_PREV ()
-returns the previous item on the queue.
-If
-.I elm
-is the first element on the queue, the last element is returned.
-.PP
-.BR CIRCLEQ_LOOP_NEXT ()
-returns the next item on the queue.
-If
-.I elm
-is the last element on the queue, the first element is returned.
-.PP
-.BR CIRCLEQ_FOREACH ()
-traverses the queue referenced by
-.I head
-in the forward direction, assigning each element in turn to
-.IR var .
-.I var
-is set to
-.I &head
-if the loop completes normally, or if there were no elements.
-.PP
-.BR CIRCLEQ_FOREACH_REVERSE ()
-traverses the queue referenced by
-.I head
-in the reverse direction,
-assigning each element in turn to
-.IR var .
-.SS Removal
-.BR CIRCLEQ_REMOVE ()
-removes the element
-.I elm
-from the queue.
-.SH RETURN VALUE
-.BR CIRCLEQ_EMPTY ()
-returns nonzero if the queue is empty,
-and zero if the queue contains at least one entry.
-.PP
-.BR CIRCLEQ_FIRST (),
-.BR CIRCLEQ_LAST (),
-.BR CIRCLEQ_LOOP_PREV (),
-and
-.BR CIRCLEQ_LOOP_NEXT ()
-return a pointer to the first, last, previous, or next
-.I TYPE
-structure, respectively.
-.PP
-.BR CIRCLEQ_PREV (),
-and
-.BR CIRCLEQ_NEXT ()
-are similar to their
-.BR CIRCLEQ_LOOP_* ()
-counterparts,
-except that if the argument is the first or last element, respectively,
-they return
-.IR &head .
-.PP
-.BR CIRCLEQ_HEAD_INITIALIZER ()
-returns an initializer that can be assigned to the queue
-.IR head .
-.SH STANDARDS
-BSD.
-.SH BUGS
-.BR CIRCLEQ_FOREACH ()
-and
-.BR CIRCLEQ_FOREACH_REVERSE ()
-don't allow
-.I var
-to be removed or freed within the loop,
-as it would interfere with the traversal.
-.BR CIRCLEQ_FOREACH_SAFE ()
-and
-.BR CIRCLEQ_FOREACH_REVERSE_SAFE (),
-which are present on the BSDs but are not present in glibc,
-fix this limitation by allowing
-.I var
-to safely be removed from the list and freed from within the loop
-without interfering with the traversal.
-.SH EXAMPLES
-.\" SRC BEGIN (circleq.c)
-.EX
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/queue.h>
-\&
-struct entry {
- int data;
- CIRCLEQ_ENTRY(entry) entries; /* Queue */
-};
-\&
-CIRCLEQ_HEAD(circlehead, entry);
-\&
-int
-main(void)
-{
- struct entry *n1, *n2, *n3, *np;
- struct circlehead head; /* Queue head */
- int i;
-\&
- CIRCLEQ_INIT(&head); /* Initialize the queue */
-\&
- n1 = malloc(sizeof(struct entry)); /* Insert at the head */
- CIRCLEQ_INSERT_HEAD(&head, n1, entries);
-\&
- n1 = malloc(sizeof(struct entry)); /* Insert at the tail */
- CIRCLEQ_INSERT_TAIL(&head, n1, entries);
-\&
- n2 = malloc(sizeof(struct entry)); /* Insert after */
- CIRCLEQ_INSERT_AFTER(&head, n1, n2, entries);
-\&
- n3 = malloc(sizeof(struct entry)); /* Insert before */
- CIRCLEQ_INSERT_BEFORE(&head, n2, n3, entries);
-\&
- CIRCLEQ_REMOVE(&head, n2, entries); /* Deletion */
- free(n2);
- /* Forward traversal */
- i = 0;
- CIRCLEQ_FOREACH(np, &head, entries)
- np\->data = i++;
- /* Reverse traversal */
- CIRCLEQ_FOREACH_REVERSE(np, &head, entries)
- printf("%i\en", np\->data);
- /* Queue deletion */
- n1 = CIRCLEQ_FIRST(&head);
- while (n1 != (void *)&head) {
- n2 = CIRCLEQ_NEXT(n1, entries);
- free(n1);
- n1 = n2;
- }
- CIRCLEQ_INIT(&head);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR insque (3),
-.BR queue (7)
diff --git a/man3/clearenv.3 b/man3/clearenv.3
deleted file mode 100644
index bae57ea6f..000000000
--- a/man3/clearenv.3
+++ /dev/null
@@ -1,140 +0,0 @@
-'\" t
-.\" Copyright 2001 John Levon <moz@compsoc.man.ac.uk>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Additions, aeb, 2001-10-17.
-.TH clearenv 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-clearenv \- clear the environment
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.B "int clearenv(void);"
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR clearenv ():
-.nf
- /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR clearenv ()
-function clears the environment of all name-value
-pairs and sets the value of the external variable
-.I environ
-to NULL.
-After this call, new variables can be added to the environment using
-.BR putenv (3)
-and
-.BR setenv (3).
-.SH RETURN VALUE
-The
-.BR clearenv ()
-function returns zero on success, and a nonzero
-value on failure.
-.\" Most versions of UNIX return -1 on error, or do not even have errors.
-.\" glibc info and the Watcom C library document "a nonzero value".
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR clearenv ()
-T} Thread safety MT-Unsafe const:env
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR putenv ()
-POSIX.1-2008.
-.TP
-.BR clearenv ()
-None.
-.SH HISTORY
-.TP
-.BR putenv ()
-glibc 2.0.
-POSIX.1-2001.
-.TP
-.BR clearenv ()
-glibc 2.0.
-.PP
-Various UNIX variants (DG/UX, HP-UX, QNX, ...).
-POSIX.9 (bindings for FORTRAN77).
-POSIX.1-1996 did not accept
-.BR clearenv ()
-and
-.BR putenv (3),
-but changed its mind and scheduled these functions for some
-later issue of this standard (see \[sc]B.4.6.1).
-However, POSIX.1-2001
-adds only
-.BR putenv (3),
-and rejected
-.BR clearenv ().
-.SH NOTES
-On systems where
-.BR clearenv ()
-is unavailable, the assignment
-.PP
-.in +4n
-.EX
-environ = NULL;
-.EE
-.in
-.PP
-will probably do.
-.PP
-The
-.BR clearenv ()
-function may be useful in security-conscious applications that want to
-precisely control the environment that is passed to programs
-executed using
-.BR exec (3).
-The application would do this by first clearing the environment
-and then adding select environment variables.
-.PP
-Note that the main effect of
-.BR clearenv ()
-is to adjust the value of the pointer
-.BR environ (7);
-this function does not erase the contents of the buffers
-containing the environment definitions.
-.PP
-The DG/UX and Tru64 man pages write: If
-.I environ
-has been modified by anything other than the
-.BR putenv (3),
-.BR getenv (3),
-or
-.BR clearenv ()
-functions, then
-.BR clearenv ()
-will return an error and the process environment will remain unchanged.
-.\" .LP
-.\" HP-UX has a ENOMEM error return.
-.SH SEE ALSO
-.BR getenv (3),
-.BR putenv (3),
-.BR setenv (3),
-.BR unsetenv (3),
-.BR environ (7)
diff --git a/man3/clearerr.3 b/man3/clearerr.3
deleted file mode 100644
index 3a95cca9f..000000000
--- a/man3/clearerr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ferror.3
diff --git a/man3/clearerr_unlocked.3 b/man3/clearerr_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/clearerr_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/clnt_broadcast.3 b/man3/clnt_broadcast.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/clnt_broadcast.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/clnt_call.3 b/man3/clnt_call.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/clnt_call.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/clnt_control.3 b/man3/clnt_control.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/clnt_control.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/clnt_create.3 b/man3/clnt_create.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/clnt_create.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/clnt_destroy.3 b/man3/clnt_destroy.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/clnt_destroy.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/clnt_freeres.3 b/man3/clnt_freeres.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/clnt_freeres.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/clnt_geterr.3 b/man3/clnt_geterr.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/clnt_geterr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/clnt_pcreateerror.3 b/man3/clnt_pcreateerror.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/clnt_pcreateerror.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/clnt_perrno.3 b/man3/clnt_perrno.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/clnt_perrno.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/clnt_perror.3 b/man3/clnt_perror.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/clnt_perror.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/clnt_spcreateerror.3 b/man3/clnt_spcreateerror.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/clnt_spcreateerror.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/clnt_sperrno.3 b/man3/clnt_sperrno.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/clnt_sperrno.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/clnt_sperror.3 b/man3/clnt_sperror.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/clnt_sperror.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/clntraw_create.3 b/man3/clntraw_create.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/clntraw_create.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/clnttcp_create.3 b/man3/clnttcp_create.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/clnttcp_create.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/clntudp_bufcreate.3 b/man3/clntudp_bufcreate.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/clntudp_bufcreate.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/clntudp_create.3 b/man3/clntudp_create.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/clntudp_create.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/clock.3 b/man3/clock.3
deleted file mode 100644
index 6dfce042a..000000000
--- a/man3/clock.3
+++ /dev/null
@@ -1,104 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 21:27:01 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 14 Jun 2002, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on differences from other UNIX systems with respect to
-.\" waited-for children.
-.TH clock 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-clock \- determine processor time
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <time.h>
-.PP
-.B clock_t clock(void);
-.fi
-.SH DESCRIPTION
-The
-.BR clock ()
-function returns an approximation of processor time used by the program.
-.SH RETURN VALUE
-The value returned is the CPU time used so far as a
-.IR clock_t ;
-to get the number of seconds used, divide by
-.BR CLOCKS_PER_SEC .
-If the processor time used is not available or its value cannot
-be represented, the function returns the value
-.IR (clock_t)\ \-1 .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR clock ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-XSI requires that
-.B CLOCKS_PER_SEC
-equals 1000000 independent
-of the actual resolution.
-.PP
-On several other implementations,
-the value returned by
-.BR clock ()
-also includes the times of any children whose status has been
-collected via
-.BR wait (2)
-(or another wait-type call).
-Linux does not include the times of waited-for children in the
-value returned by
-.BR clock ().
-.\" I have seen this behavior on Irix 6.3, and the OSF/1, HP/UX, and
-.\" Solaris manual pages say that clock() also does this on those systems.
-.\" POSIX.1-2001 doesn't explicitly allow this, nor is there an
-.\" explicit prohibition. -- MTK
-The
-.BR times (2)
-function, which explicitly returns (separate) information about the
-caller and its children, may be preferable.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89.
-.PP
-In glibc 2.17 and earlier,
-.BR clock ()
-was implemented on top of
-.BR times (2).
-For improved accuracy,
-since glibc 2.18, it is implemented on top of
-.BR clock_gettime (2)
-(using the
-.B CLOCK_PROCESS_CPUTIME_ID
-clock).
-.SH NOTES
-The C standard allows for arbitrary values at the start of the program;
-subtract the value returned from a call to
-.BR clock ()
-at the start of the program to get maximum portability.
-.PP
-Note that the time can wrap around.
-On a 32-bit system where
-.B CLOCKS_PER_SEC
-equals 1000000 this function will return the same
-value approximately every 72 minutes.
-.SH SEE ALSO
-.BR clock_gettime (2),
-.BR getrusage (2),
-.BR times (2)
diff --git a/man3/clock_getcpuclockid.3 b/man3/clock_getcpuclockid.3
deleted file mode 100644
index 05569614f..000000000
--- a/man3/clock_getcpuclockid.3
+++ /dev/null
@@ -1,158 +0,0 @@
-'\" t
-.\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH clock_getcpuclockid 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-clock_getcpuclockid \- obtain ID of a process CPU-time clock
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc ),
-since glibc 2.17
-.PP
-Before glibc 2.17,
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.B #include <time.h>
-.nf
-.PP
-.BI "int clock_getcpuclockid(pid_t " pid ", clockid_t *" clockid );
-.fi
-.PP
-.ad l
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR clock_getcpuclockid ():
-.nf
- _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-The
-.BR clock_getcpuclockid ()
-function obtains the ID of the CPU-time clock of the process whose ID is
-.IR pid ,
-and returns it in the location pointed to by
-.IR clockid .
-If
-.I pid
-is zero, then the clock ID of the CPU-time clock
-of the calling process is returned.
-.SH RETURN VALUE
-On success,
-.BR clock_getcpuclockid ()
-returns 0;
-on error, it returns one of the positive error numbers listed in ERRORS.
-.SH ERRORS
-.TP
-.B ENOSYS
-The kernel does not support obtaining the per-process
-CPU-time clock of another process, and
-.I pid
-does not specify the calling process.
-.TP
-.B EPERM
-The caller does not have permission to access
-the CPU-time clock of the process specified by
-.IR pid .
-(Specified in POSIX.1-2001;
-does not occur on Linux unless the kernel does not support
-obtaining the per-process CPU-time clock of another process.)
-.TP
-.B ESRCH
-There is no process with the ID
-.IR pid .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR clock_getcpuclockid ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.2.
-POSIX.1-2001.
-.SH NOTES
-Calling
-.BR clock_gettime (2)
-with the clock ID obtained by a call to
-.BR clock_getcpuclockid ()
-with a
-.I pid
-of 0,
-is the same as using the clock ID
-.BR CLOCK_PROCESS_CPUTIME_ID .
-.SH EXAMPLES
-The example program below obtains the
-CPU-time clock ID of the process whose ID is given on the command line,
-and then uses
-.BR clock_gettime (2)
-to obtain the time on that clock.
-An example run is the following:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out 1" " # Show CPU clock of init process"
-CPU\-time clock for PID 1 is 2.213466748 seconds
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (clock_getcpuclockid.c)
-.EX
-#define _XOPEN_SOURCE 600
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- clockid_t clockid;
- struct timespec ts;
-\&
- if (argc != 2) {
- fprintf(stderr, "%s <process\-ID>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- if (clock_getcpuclockid(atoi(argv[1]), &clockid) != 0) {
- perror("clock_getcpuclockid");
- exit(EXIT_FAILURE);
- }
-\&
- if (clock_gettime(clockid, &ts) == \-1) {
- perror("clock_gettime");
- exit(EXIT_FAILURE);
- }
-\&
- printf("CPU\-time clock for PID %s is %jd.%09ld seconds\en",
- argv[1], (intmax_t) ts.tv_sec, ts.tv_nsec);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR clock_getres (2),
-.BR timer_create (2),
-.BR pthread_getcpuclockid (3),
-.BR time (7)
diff --git a/man3/clog.3 b/man3/clog.3
deleted file mode 100644
index 2b63a5509..000000000
--- a/man3/clog.3
+++ /dev/null
@@ -1,74 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH clog 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-clog, clogf, clogl \- natural logarithm of a complex number
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex clog(double complex " z );
-.BI "float complex clogf(float complex " z );
-.BI "long double complex clogl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions calculate the complex natural logarithm of
-.IR z ,
-with a branch cut along the negative real axis.
-.PP
-The logarithm
-.BR clog ()
-is the inverse function of the exponential
-.BR cexp (3).
-Thus, if \fIy\ =\ clog(z)\fP, then \fIz\ =\ cexp(y)\fP.
-The imaginary part of
-.I y
-is chosen in the interval [\-pi,pi].
-.PP
-One has:
-.PP
-.in +4n
-.EX
-clog(z) = log(cabs(z)) + I * carg(z)
-.EE
-.in
-.PP
-Note that
-.I z
-close to zero will cause an overflow.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR clog (),
-.BR clogf (),
-.BR clogl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR cabs (3),
-.BR cexp (3),
-.BR clog10 (3),
-.BR clog2 (3),
-.BR complex (7)
diff --git a/man3/clog10.3 b/man3/clog10.3
deleted file mode 100644
index 594cfe73e..000000000
--- a/man3/clog10.3
+++ /dev/null
@@ -1,78 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH clog10 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-clog10, clog10f, clog10l \- base-10 logarithm of a complex number
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <complex.h>
-.PP
-.BI "double complex clog10(double complex " z );
-.BI "float complex clog10f(float complex " z );
-.BI "long double complex clog10l(long double complex " z );
-.fi
-.SH DESCRIPTION
-The call
-.I clog10(z)
-is equivalent to:
-.PP
-.in +4n
-.EX
-clog(z)/log(10)
-.EE
-.in
-.PP
-or equally:
-.PP
-.in +4n
-.EX
-log10(cabs(c)) + I * carg(c) / log(10)
-.EE
-.in
-.PP
-The other functions perform the same task for
-.I float
-and
-.IR "long double" .
-.PP
-Note that
-.I z
-close to zero will cause an overflow.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR clog10 (),
-.BR clog10f (),
-.BR clog10l ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH HISTORY
-glibc 2.1.
-.PP
-The identifiers are reserved for future use in C99 and C11.
-.SH SEE ALSO
-.BR cabs (3),
-.BR cexp (3),
-.BR clog (3),
-.BR clog2 (3),
-.BR complex (7)
diff --git a/man3/clog10f.3 b/man3/clog10f.3
deleted file mode 100644
index 5840d54d0..000000000
--- a/man3/clog10f.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/clog10.3
diff --git a/man3/clog10l.3 b/man3/clog10l.3
deleted file mode 100644
index 5840d54d0..000000000
--- a/man3/clog10l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/clog10.3
diff --git a/man3/clog2.3 b/man3/clog2.3
deleted file mode 100644
index b3f18171a..000000000
--- a/man3/clog2.3
+++ /dev/null
@@ -1,45 +0,0 @@
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH clog2 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-clog2, clog2f, clog2l \- base-2 logarithm of a complex number
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex clog2(double complex " z );
-.BI "float complex clog2f(float complex " z );
-.BI "long double complex clog2l(long double complex " z );
-.fi
-.SH DESCRIPTION
-The call
-.I clog2(z)
-is equivalent to
-.IR clog(z)/log(2) .
-.PP
-The other functions perform the same task for
-.I float
-and
-.IR "long double" .
-.PP
-Note that
-.I z
-close to zero will cause an overflow.
-.SH STANDARDS
-None.
-.SH HISTORY
-These function names are reserved for future use in C99.
-.PP
-Not yet in glibc, as at glibc 2.19.
-.\" But reserved in NAMESPACE.
-.SH SEE ALSO
-.BR cabs (3),
-.BR cexp (3),
-.BR clog (3),
-.BR clog10 (3),
-.BR complex (7)
diff --git a/man3/clog2f.3 b/man3/clog2f.3
deleted file mode 100644
index 23d683416..000000000
--- a/man3/clog2f.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/clog2.3
diff --git a/man3/clog2l.3 b/man3/clog2l.3
deleted file mode 100644
index 23d683416..000000000
--- a/man3/clog2l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/clog2.3
diff --git a/man3/clogf.3 b/man3/clogf.3
deleted file mode 100644
index 3cd9533b3..000000000
--- a/man3/clogf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/clog.3
diff --git a/man3/clogl.3 b/man3/clogl.3
deleted file mode 100644
index 3cd9533b3..000000000
--- a/man3/clogl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/clog.3
diff --git a/man3/closedir.3 b/man3/closedir.3
deleted file mode 100644
index da1c27062..000000000
--- a/man3/closedir.3
+++ /dev/null
@@ -1,78 +0,0 @@
-'\" t
-.\" Copyright (C) 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 21:25:52 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 11 June 1995 by Andries Brouwer (aeb@cwi.nl)
-.TH closedir 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-closedir \- close a directory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.B #include <dirent.h>
-.PP
-.BI "int closedir(DIR *" dirp );
-.fi
-.SH DESCRIPTION
-The
-.BR closedir ()
-function closes the directory stream associated with
-.IR dirp .
-A successful call to
-.BR closedir ()
-also closes the underlying file descriptor associated with
-.IR dirp .
-The directory stream descriptor
-.I dirp
-is not available
-after this call.
-.SH RETURN VALUE
-The
-.BR closedir ()
-function returns 0 on success.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-Invalid directory stream descriptor
-.IR dirp .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR closedir ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR close (2),
-.BR opendir (3),
-.BR readdir (3),
-.BR rewinddir (3),
-.BR scandir (3),
-.BR seekdir (3),
-.BR telldir (3)
diff --git a/man3/closelog.3 b/man3/closelog.3
deleted file mode 100644
index ec352b291..000000000
--- a/man3/closelog.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/syslog.3
diff --git a/man3/cmsg.3 b/man3/cmsg.3
deleted file mode 100644
index c1368b5ad..000000000
--- a/man3/cmsg.3
+++ /dev/null
@@ -1,266 +0,0 @@
-.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
-.\"
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" $Id: cmsg.3,v 1.8 2000/12/20 18:10:31 ak Exp $
-.TH CMSG 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-CMSG_ALIGN, CMSG_SPACE, CMSG_NXTHDR, CMSG_FIRSTHDR \- access ancillary data
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.PP
-.BI "struct cmsghdr *CMSG_FIRSTHDR(struct msghdr *" msgh );
-.BI "struct cmsghdr *CMSG_NXTHDR(struct msghdr *" msgh ,
-.BR " struct cmsghdr *" cmsg );
-.BI "size_t CMSG_ALIGN(size_t " length );
-.BI "size_t CMSG_SPACE(size_t " length );
-.BI "size_t CMSG_LEN(size_t " length );
-.BI "unsigned char *CMSG_DATA(struct cmsghdr *" cmsg );
-.fi
-.SH DESCRIPTION
-These macros are used to create and access control messages (also called
-ancillary data) that are not a part of the socket payload.
-This control information may
-include the interface the packet was received on, various rarely used header
-fields, an extended error description, a set of file descriptors, or UNIX
-credentials.
-For instance, control messages can be used to send
-additional header fields such as IP options.
-Ancillary data is sent by calling
-.BR sendmsg (2)
-and received by calling
-.BR recvmsg (2).
-See their manual pages for more information.
-.PP
-Ancillary data is a sequence of
-.I cmsghdr
-structures with appended data.
-See the specific protocol man pages for the available control message types.
-The maximum ancillary buffer size allowed per socket can be set using
-.IR /proc/sys/net/core/optmem_max ;
-see
-.BR socket (7).
-.PP
-The
-.I cmsghdr
-structure is defined as follows:
-.PP
-.in +4n
-.EX
-struct cmsghdr {
- size_t cmsg_len; /* Data byte count, including header
- (type is socklen_t in POSIX) */
- int cmsg_level; /* Originating protocol */
- int cmsg_type; /* Protocol\-specific type */
-/* followed by
- unsigned char cmsg_data[]; */
-};
-.EE
-.in
-.PP
-The sequence of
-.I cmsghdr
-structures should never be accessed directly.
-Instead, use only the following macros:
-.TP
-.BR CMSG_FIRSTHDR ()
-returns a pointer to the first
-.I cmsghdr
-in the ancillary
-data buffer associated with the passed
-.IR msghdr .
-It returns NULL if there isn't enough space for a
-.I cmsghdr
-in the buffer.
-.TP
-.BR CMSG_NXTHDR ()
-returns the next valid
-.I cmsghdr
-after the passed
-.IR cmsghdr .
-It returns NULL when there isn't enough space left in the buffer.
-.IP
-When initializing a buffer that will contain a series of
-.I cmsghdr
-structures (e.g., to be sent with
-.BR sendmsg (2)),
-that buffer should first be zero-initialized
-to ensure the correct operation of
-.BR CMSG_NXTHDR ().
-.TP
-.BR CMSG_ALIGN (),
-given a length, returns it including the required alignment.
-This is a
-constant expression.
-.TP
-.BR CMSG_SPACE ()
-returns the number of bytes an ancillary element with payload of the
-passed data length occupies.
-This is a constant expression.
-.TP
-.BR CMSG_DATA ()
-returns a pointer to the data portion of a
-.IR cmsghdr .
-The pointer returned cannot be assumed to be suitably aligned for
-accessing arbitrary payload data types.
-Applications should not cast it to a pointer type matching the payload,
-but should instead use
-.BR memcpy (3)
-to copy data to or from a suitably declared object.
-.TP
-.BR CMSG_LEN ()
-returns the value to store in the
-.I cmsg_len
-member of the
-.I cmsghdr
-structure, taking into account any necessary
-alignment.
-It takes the data length as an argument.
-This is a constant
-expression.
-.PP
-To create ancillary data, first initialize the
-.I msg_controllen
-member of the
-.I msghdr
-with the length of the control message buffer.
-Use
-.BR CMSG_FIRSTHDR ()
-on the
-.I msghdr
-to get the first control message and
-.BR CMSG_NXTHDR ()
-to get all subsequent ones.
-In each control message, initialize
-.I cmsg_len
-(with
-.BR CMSG_LEN ()),
-the other
-.I cmsghdr
-header fields, and the data portion using
-.BR CMSG_DATA ().
-Finally, the
-.I msg_controllen
-field of the
-.I msghdr
-should be set to the sum of the
-.BR CMSG_SPACE ()
-of the length of
-all control messages in the buffer.
-For more information on the
-.IR msghdr ,
-see
-.BR recvmsg (2).
-.SH VERSIONS
-For portability, ancillary data should be accessed using only the macros
-described here.
-.PP
-In Linux,
-.BR CMSG_LEN (),
-.BR CMSG_DATA (),
-and
-.BR CMSG_ALIGN ()
-are constant expressions (assuming their argument is constant),
-meaning that these values can be used to declare the size of global variables.
-This may not be portable, however.
-.SH STANDARDS
-.TP
-.BR CMSG_FIRSTHDR ()
-.TQ
-.BR CMSG_NXTHDR ()
-.TQ
-.BR CMSG_DATA ()
-POSIX.1-2008.
-.TP
-.BR CMSG_SPACE ()
-.TQ
-.BR CMSG_LEN ()
-.TQ
-.BR CMSG_ALIGN ()
-Linux.
-.SH HISTORY
-This ancillary data model conforms to the POSIX.1g draft, 4.4BSD-Lite,
-the IPv6 advanced API described in RFC\ 2292 and SUSv2.
-.PP
-.BR CMSG_SPACE ()
-and
-.BR CMSG_LEN ()
-.\" https://www.austingroupbugs.net/view.php?id=978#c3242
-will be included in the next POSIX release (Issue 8).
-.SH EXAMPLES
-This code looks for the
-.B IP_TTL
-option in a received ancillary buffer:
-.PP
-.in +4n
-.EX
-struct msghdr msgh;
-struct cmsghdr *cmsg;
-int received_ttl;
-\&
-/* Receive auxiliary data in msgh */
-\&
-for (cmsg = CMSG_FIRSTHDR(&msgh); cmsg != NULL;
- cmsg = CMSG_NXTHDR(&msgh, cmsg)) {
- if (cmsg\->cmsg_level == IPPROTO_IP
- && cmsg\->cmsg_type == IP_TTL) {
- memcpy(&receive_ttl, CMSG_DATA(cmsg), sizeof(received_ttl));
- break;
- }
-}
-\&
-if (cmsg == NULL) {
- /* Error: IP_TTL not enabled or small buffer or I/O error */
-}
-.EE
-.in
-.PP
-The code below passes an array of file descriptors over a
-UNIX domain socket using
-.BR SCM_RIGHTS :
-.PP
-.in +4n
-.EX
-struct msghdr msg = { 0 };
-struct cmsghdr *cmsg;
-int myfds[NUM_FD]; /* Contains the file descriptors to pass */
-char iobuf[1];
-struct iovec io = {
- .iov_base = iobuf,
- .iov_len = sizeof(iobuf)
-};
-union { /* Ancillary data buffer, wrapped in a union
- in order to ensure it is suitably aligned */
- char buf[CMSG_SPACE(sizeof(myfds))];
- struct cmsghdr align;
-} u;
-\&
-msg.msg_iov = &io;
-msg.msg_iovlen = 1;
-msg.msg_control = u.buf;
-msg.msg_controllen = sizeof(u.buf);
-cmsg = CMSG_FIRSTHDR(&msg);
-cmsg\->cmsg_level = SOL_SOCKET;
-cmsg\->cmsg_type = SCM_RIGHTS;
-cmsg\->cmsg_len = CMSG_LEN(sizeof(myfds));
-memcpy(CMSG_DATA(cmsg), myfds, sizeof(myfds));
-.EE
-.in
-.PP
-For a complete code example that shows passing of file descriptors
-over a UNIX domain socket, see
-.BR seccomp_unotify (2).
-.SH SEE ALSO
-.BR recvmsg (2),
-.BR sendmsg (2)
-.PP
-RFC\ 2292
diff --git a/man3/confstr.3 b/man3/confstr.3
deleted file mode 100644
index 6abcfcd2f..000000000
--- a/man3/confstr.3
+++ /dev/null
@@ -1,159 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 19:53:02 1993 by Rik Faith (faith@cs.unc.edu)
-.\"
-.\" FIXME Many more values for 'name' are supported, some of which
-.\" are documented under 'info libc confstr'.
-.\" See <bits/confname.h> for the rest.
-.\" These should all be added to this page.
-.\" See also the POSIX.1-2001 specification of confstr()
-.\"
-.TH confstr 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-confstr \- get configuration dependent string variables
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "size_t confstr(int " "name" ", char " buf [. size "], size_t " size );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR confstr ():
-.nf
- _POSIX_C_SOURCE >= 2 || _XOPEN_SOURCE
-.fi
-.SH DESCRIPTION
-.BR confstr ()
-gets the value of configuration-dependent string variables.
-.PP
-The
-.I name
-argument is the system variable to be queried.
-The following variables are supported:
-.TP
-.BR _CS_GNU_LIBC_VERSION " (GNU C library only; since glibc 2.3.2)"
-A string which identifies the GNU C library version on this system
-(e.g., "glibc 2.3.4").
-.TP
-.BR _CS_GNU_LIBPTHREAD_VERSION " (GNU C library only; since glibc 2.3.2)"
-A string which identifies the POSIX implementation supplied by this
-C library (e.g., "NPTL 2.3.4" or "linuxthreads\-0.10").
-.TP
-.B _CS_PATH
-A value for the
-.B PATH
-variable which indicates where all the POSIX.2 standard utilities can
-be found.
-.PP
-If
-.I buf
-is not NULL and
-.I size
-is not zero,
-.BR confstr ()
-copies the value of the string to
-.I buf
-truncated to
-.I size \- 1
-bytes if necessary, with a null byte (\[aq]\e0\[aq]) as terminator.
-This can be detected by comparing the return value of
-.BR confstr ()
-against
-.IR size .
-.PP
-If
-.I size
-is zero and
-.I buf
-is NULL,
-.BR confstr ()
-just returns the value as defined below.
-.SH RETURN VALUE
-If
-.I name
-is a valid configuration variable,
-.BR confstr ()
-returns the number of bytes (including the terminating null byte)
-that would be required to hold the entire value of that variable.
-This value may be greater than
-.IR size ,
-which means that the value in
-.I buf
-is truncated.
-.PP
-If
-.I name
-is a valid configuration variable,
-but that variable does not have a value, then
-.BR confstr ()
-returns 0.
-If
-.I name
-does not correspond to a valid configuration variable,
-.BR confstr ()
-returns 0, and
-.I errno
-is set to
-.BR EINVAL .
-.SH ERRORS
-.TP
-.B EINVAL
-The value of
-.I name
-is invalid.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR confstr ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH EXAMPLES
-The following code fragment determines the path where to find
-the POSIX.2 system utilities:
-.PP
-.in +4n
-.EX
-char *pathbuf;
-size_t n;
-\&
-n = confstr(_CS_PATH, NULL, (size_t) 0);
-pathbuf = malloc(n);
-if (pathbuf == NULL)
- abort();
-confstr(_CS_PATH, pathbuf, n);
-.EE
-.in
-.SH SEE ALSO
-.BR getconf (1),
-.BR sh (1),
-.BR exec (3),
-.BR fpathconf (3),
-.BR pathconf (3),
-.BR sysconf (3),
-.BR system (3)
diff --git a/man3/conj.3 b/man3/conj.3
deleted file mode 100644
index 4cc22f131..000000000
--- a/man3/conj.3
+++ /dev/null
@@ -1,59 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH conj 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-conj, conjf, conjl \- calculate the complex conjugate
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex conj(double complex " z );
-.BI "float complex conjf(float complex " z );
-.BI "long double complex conjl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions return the complex conjugate value of
-.IR z .
-That is the value obtained by changing the sign of the imaginary part.
-.PP
-One has:
-.PP
-.in +4n
-.EX
-cabs(z) = csqrt(z * conj(z))
-.EE
-.in
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR conj (),
-.BR conjf (),
-.BR conjl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR cabs (3),
-.BR csqrt (3),
-.BR complex (7)
diff --git a/man3/conjf.3 b/man3/conjf.3
deleted file mode 100644
index ef6093f70..000000000
--- a/man3/conjf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/conj.3
diff --git a/man3/conjl.3 b/man3/conjl.3
deleted file mode 100644
index ef6093f70..000000000
--- a/man3/conjl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/conj.3
diff --git a/man3/copysign.3 b/man3/copysign.3
deleted file mode 100644
index 1282cf112..000000000
--- a/man3/copysign.3
+++ /dev/null
@@ -1,95 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-08-10 by Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.TH copysign 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-copysign, copysignf, copysignl \- copy sign of a number
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double copysign(double " x ", double " y );
-.BI "float copysignf(float " x ", float " y );
-.BI "long double copysignl(long double " x ", long double " y );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR copysign (),
-.BR copysignf (),
-.BR copysignl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return a value whose absolute value matches that of
-.IR x ,
-but whose sign bit matches that of
-.IR y .
-.PP
-For example,
-.I "copysign(42.0,\ \-1.0)"
-and
-.I "copysign(\-42.0, \-1.0)"
-both return \-42.0.
-.SH RETURN VALUE
-On success, these functions return a value whose magnitude is taken from
-.I x
-and whose sign is taken from
-.IR y .
-.PP
-If
-.I x
-is a NaN,
-a NaN with the sign bit of
-.I y
-is returned.
-.SH ERRORS
-No errors occur.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR copysign (),
-.BR copysignf (),
-.BR copysignl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-On architectures where the floating-point formats are not IEEE 754 compliant,
-these functions may treat a negative zero as positive.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.PP
-This function is defined in IEC 559 (and the appendix with
-recommended functions in IEEE 754/IEEE 854).
-.SH HISTORY
-C99, POSIX.1-2001, 4.3BSD.
-.SH SEE ALSO
-.BR signbit (3)
diff --git a/man3/copysignf.3 b/man3/copysignf.3
deleted file mode 100644
index 46ef5e6db..000000000
--- a/man3/copysignf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/copysign.3
diff --git a/man3/copysignl.3 b/man3/copysignl.3
deleted file mode 100644
index 46ef5e6db..000000000
--- a/man3/copysignl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/copysign.3
diff --git a/man3/cos.3 b/man3/cos.3
deleted file mode 100644
index d00d7a06f..000000000
--- a/man3/cos.3
+++ /dev/null
@@ -1,121 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.TH cos 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cos, cosf, cosl \- cosine function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double cos(double " x );
-.BI "float cosf(float " x );
-.BI "long double cosl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR cosf (),
-.BR cosl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the cosine of
-.IR x ,
-where
-.I x
-is
-given in radians.
-.SH RETURN VALUE
-On success, these functions return the cosine of
-.IR x .
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is positive infinity or negative infinity,
-a domain error occurs,
-and a NaN is returned.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is an infinity
-.I errno
-is set to
-.B EDOM
-(but see BUGS).
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR cos (),
-.BR cosf (),
-.BR cosl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C89, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD.
-.SH BUGS
-Before glibc 2.10, the glibc implementation did not set
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6780
-.I errno
-to
-.B EDOM
-when a domain error occurred.
-.SH SEE ALSO
-.BR acos (3),
-.BR asin (3),
-.BR atan (3),
-.BR atan2 (3),
-.BR ccos (3),
-.BR sin (3),
-.BR sincos (3),
-.BR tan (3)
diff --git a/man3/cosf.3 b/man3/cosf.3
deleted file mode 100644
index 9abaea4b0..000000000
--- a/man3/cosf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cos.3
diff --git a/man3/cosh.3 b/man3/cosh.3
deleted file mode 100644
index bdf06f583..000000000
--- a/man3/cosh.3
+++ /dev/null
@@ -1,133 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 1996-06-08 by aeb
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH cosh 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cosh, coshf, coshl \- hyperbolic cosine function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double cosh(double " x );
-.BI "float coshf(float " x );
-.BI "long double coshl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR coshf (),
-.BR coshl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the hyperbolic cosine of
-.IR x ,
-which is defined mathematically as:
-.PP
-.in +4n
-.EX
-cosh(x) = (exp(x) + exp(\-x)) / 2
-.EE
-.in
-.SH RETURN VALUE
-On success, these functions return the hyperbolic cosine of
-.IR x .
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is +0 or \-0, 1 is returned.
-.PP
-If
-.I x
-is positive infinity or negative infinity,
-positive infinity is returned.
-.PP
-If the result overflows,
-a range error occurs,
-and the functions return
-.RB + HUGE_VAL ,
-.RB + HUGE_VALF ,
-or
-.RB + HUGE_VALL ,
-respectively.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Range error: result overflow
-.I errno
-is set to
-.BR ERANGE .
-An overflow floating-point exception
-.RB ( FE_OVERFLOW )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR cosh (),
-.BR coshf (),
-.BR coshl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD.
-.SH BUGS
-In glibc 2.3.4 and earlier,
-an overflow floating-point
-.RB ( FE_OVERFLOW )
-exception is not raised when an overflow occurs.
-.SH SEE ALSO
-.BR acosh (3),
-.BR asinh (3),
-.BR atanh (3),
-.BR ccos (3),
-.BR sinh (3),
-.BR tanh (3)
diff --git a/man3/coshf.3 b/man3/coshf.3
deleted file mode 100644
index e9bab10c7..000000000
--- a/man3/coshf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cosh.3
diff --git a/man3/coshl.3 b/man3/coshl.3
deleted file mode 100644
index e9bab10c7..000000000
--- a/man3/coshl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cosh.3
diff --git a/man3/cosl.3 b/man3/cosl.3
deleted file mode 100644
index 9abaea4b0..000000000
--- a/man3/cosl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cos.3
diff --git a/man3/cpow.3 b/man3/cpow.3
deleted file mode 100644
index 2b6c10dcb..000000000
--- a/man3/cpow.3
+++ /dev/null
@@ -1,56 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH cpow 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cpow, cpowf, cpowl \- complex power function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex cpow(double complex " x ", double complex " z );
-.BI "float complex cpowf(float complex " x ", float complex " z );
-.BI "long double complex cpowl(long double complex " x ,
-.BI " long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions calculate
-.I x
-raised to the power
-.I z
-(with a branch cut for
-.I x
-along the negative real axis).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR cpow (),
-.BR cpowf (),
-.BR cpowl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR cabs (3),
-.BR pow (3),
-.BR complex (7)
diff --git a/man3/cpowf.3 b/man3/cpowf.3
deleted file mode 100644
index 7577fcdf1..000000000
--- a/man3/cpowf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cpow.3
diff --git a/man3/cpowl.3 b/man3/cpowl.3
deleted file mode 100644
index 7577fcdf1..000000000
--- a/man3/cpowl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cpow.3
diff --git a/man3/cproj.3 b/man3/cproj.3
deleted file mode 100644
index 6292c28dd..000000000
--- a/man3/cproj.3
+++ /dev/null
@@ -1,62 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH cproj 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cproj, cprojf, cprojl \- project into Riemann Sphere
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex cproj(double complex " z ");"
-.BI "float complex cprojf(float complex " z ");"
-.BI "long double complex cprojl(long double complex " z ");"
-.fi
-.SH DESCRIPTION
-These functions project a point in the plane onto the surface of a
-Riemann Sphere, the one-point compactification of the complex plane.
-Each finite point
-.I z
-projects to
-.I z
-itself.
-Every complex infinite value is projected to a single infinite value,
-namely to positive infinity on the real axis.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR cproj (),
-.BR cprojf (),
-.BR cprojl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.PP
-In glibc 2.11 and earlier, the implementation does something different
-(a
-.I stereographic
-projection onto a Riemann Sphere).
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=10401
-.SH SEE ALSO
-.BR cabs (3),
-.BR complex (7)
diff --git a/man3/cprojf.3 b/man3/cprojf.3
deleted file mode 100644
index 0a3f31c6d..000000000
--- a/man3/cprojf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cproj.3
diff --git a/man3/cprojl.3 b/man3/cprojl.3
deleted file mode 100644
index 0a3f31c6d..000000000
--- a/man3/cprojl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/cproj.3
diff --git a/man3/creal.3 b/man3/creal.3
deleted file mode 100644
index 6b8916bd3..000000000
--- a/man3/creal.3
+++ /dev/null
@@ -1,59 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH creal 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-creal, crealf, creall \- get real part of a complex number
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double creal(double complex " z );
-.BI "float crealf(float complex " z );
-.BI "long double creall(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions return the real part of the complex number
-.IR z .
-.PP
-One has:
-.PP
-.nf
- z = creal(z) + I * cimag(z)
-.fi
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR creal (),
-.BR crealf (),
-.BR creall ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-GCC supports also __real__.
-That is a GNU extension.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR cabs (3),
-.BR cimag (3),
-.BR complex (7)
diff --git a/man3/crealf.3 b/man3/crealf.3
deleted file mode 100644
index 4289f71de..000000000
--- a/man3/crealf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/creal.3
diff --git a/man3/creall.3 b/man3/creall.3
deleted file mode 100644
index 4289f71de..000000000
--- a/man3/creall.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/creal.3
diff --git a/man3/crypt.3 b/man3/crypt.3
deleted file mode 100644
index 1f3e4792e..000000000
--- a/man3/crypt.3
+++ /dev/null
@@ -1,320 +0,0 @@
-'\" t
-.\" Michael Haardt (michael@cantor.informatik.rwth.aachen.de)
-.\" Sat Sep 3 22:00:30 MET DST 1994
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Sun Feb 19 21:32:25 1995, faith@cs.unc.edu edited details away
-.\"
-.\" TO DO: This manual page should go more into detail how DES is perturbed,
-.\" which string will be encrypted, and what determines the repetition factor.
-.\" Is a simple repetition using ECB used, or something more advanced? I hope
-.\" the presented explanations are at least better than nothing, but by no
-.\" means enough.
-.\"
-.\" added _XOPEN_SOURCE, aeb, 970705
-.\" added GNU MD5 stuff, aeb, 011223
-.\"
-.TH crypt 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-crypt, crypt_r \- password and data encryption
-.SH LIBRARY
-Encryption and decryption library
-.RI ( libcrypto ", " \-lcrypto )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "char *crypt(const char *" key ", const char *" salt );
-.PP
-.B #include <crypt.h>
-.PP
-.BI "char *crypt_r(const char *" key ", const char *" salt ,
-.BI " struct crypt_data *restrict " data );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR crypt ():
-.nf
- Since glibc 2.28:
- _DEFAULT_SOURCE
- glibc 2.27 and earlier:
- _XOPEN_SOURCE
-.fi
-.PP
-.BR crypt_r ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-.BR crypt ()
-is the password encryption function.
-It is based on the Data Encryption
-Standard algorithm with variations intended (among other things) to
-discourage use of hardware implementations of a key search.
-.PP
-.I key
-is a user's typed password.
-.PP
-.I salt
-is a two-character string chosen from the set
-[\fBa\-zA\-Z0\-9./\fP].
-This string is used to
-perturb the algorithm in one of 4096 different ways.
-.PP
-By taking the lowest 7 bits of each of the first eight characters of the
-.IR key ,
-a 56-bit key is obtained.
-This 56-bit key is used to encrypt repeatedly a
-constant string (usually a string consisting of all zeros).
-The returned
-value points to the encrypted password, a series of 13 printable ASCII
-characters (the first two characters represent the salt itself).
-The return value points to static data whose content is
-overwritten by each call.
-.PP
-Warning: the key space consists of
-.if t 2\s-2\u56\s0\d
-.if n 2**56
-equal 7.2e16 possible values.
-Exhaustive searches of this key space are
-possible using massively parallel computers.
-Software, such as
-.BR crack (1),
-is available which will search the portion of this key space that is
-generally used by humans for passwords.
-Hence, password selection should,
-at minimum, avoid common words and names.
-The use of a
-.BR passwd (1)
-program that checks for crackable passwords during the selection process is
-recommended.
-.PP
-The DES algorithm itself has a few quirks which make the use of the
-.BR crypt ()
-interface a very poor choice for anything other than password
-authentication.
-If you are planning on using the
-.BR crypt ()
-interface for a cryptography project, don't do it: get a good book on
-encryption and one of the widely available DES libraries.
-.PP
-.BR crypt_r ()
-is a reentrant version of
-.BR crypt ().
-The structure pointed to by
-.I data
-is used to store result data and bookkeeping information.
-Other than allocating it,
-the only thing that the caller should do with this structure is to set
-.I data\->initialized
-to zero before the first call to
-.BR crypt_r ().
-.SH RETURN VALUE
-On success, a pointer to the encrypted password is returned.
-On error, NULL is returned.
-.SH ERRORS
-.TP
-.B EINVAL
-.I salt
-has the wrong format.
-.TP
-.B ENOSYS
-The
-.BR crypt ()
-function was not implemented, probably because of U.S.A. export restrictions.
-.\" This level of detail is not necessary in this man page. . .
-.\" .PP
-.\" When encrypting a plain text P using DES with the key K results in the
-.\" encrypted text C, then the complementary plain text P' being encrypted
-.\" using the complementary key K' will result in the complementary encrypted
-.\" text C'.
-.\" .PP
-.\" Weak keys are keys which stay invariant under the DES key transformation.
-.\" The four known weak keys 0101010101010101, fefefefefefefefe,
-.\" 1f1f1f1f0e0e0e0e and e0e0e0e0f1f1f1f1 must be avoided.
-.\" .PP
-.\" There are six known half weak key pairs, which keys lead to the same
-.\" encrypted data. Keys which are part of such key clusters should be
-.\" avoided.
-.\" Sorry, I could not find out what they are.
-.\""
-.\" .PP
-.\" Heavily redundant data causes trouble with DES encryption, when used in the
-.\" .I codebook
-.\" mode that
-.\" .BR crypt ()
-.\" implements. The
-.\" .BR crypt ()
-.\" interface should be used only for its intended purpose of password
-.\" verification, and should not be used as part of a data encryption tool.
-.\" .PP
-.\" The first and last three output bits of the fourth S-box can be
-.\" represented as function of their input bits. Empiric studies have
-.\" shown that S-boxes partially compute the same output for similar input.
-.\" It is suspected that this may contain a back door which could allow the
-.\" NSA to decrypt DES encrypted data.
-.\" .PP
-.\" Making encrypted data computed using crypt() publicly available has
-.\" to be considered insecure for the given reasons.
-.TP
-.B EPERM
-.I /proc/sys/crypto/fips_enabled
-has a nonzero value,
-and an attempt was made to use a weak encryption type, such as DES.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR crypt ()
-T} Thread safety MT-Unsafe race:crypt
-T{
-.BR crypt_r ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR crypt ()
-POSIX.1-2008.
-.TP
-.BR crypt_r ()
-GNU.
-.SH HISTORY
-.TP
-.BR crypt ()
-POSIX.1-2001, SVr4, 4.3BSD.
-.SS Availability in glibc
-The
-.BR crypt (),
-.BR encrypt (3),
-and
-.BR setkey (3)
-functions are part of the POSIX.1-2008 XSI Options Group for Encryption
-and are optional.
-If the interfaces are not available, then the symbolic constant
-.B _XOPEN_CRYPT
-is either not defined,
-or it is defined to \-1 and availability can be checked at run time with
-.BR sysconf (3).
-This may be the case if the downstream distribution has switched from glibc
-crypt to
-.IR libxcrypt .
-When recompiling applications in such distributions,
-the programmer must detect if
-.B _XOPEN_CRYPT
-is not available and include
-.I <crypt.h>
-for the function prototypes;
-otherwise
-.I libxcrypt
-is an ABI-compatible drop-in replacement.
-.SH NOTES
-.SS Features in glibc
-The glibc version of this function supports additional
-encryption algorithms.
-.PP
-If
-.I salt
-is a character string starting with the characters "$\fIid\fP$"
-followed by a string optionally terminated by "$",
-then the result has the form:
-.RS
-.PP
-$\fIid\fP$\fIsalt\fP$\fIencrypted\fP
-.RE
-.PP
-.I id
-identifies the encryption method used instead of DES and this
-then determines how the rest of the password string is interpreted.
-The following values of
-.I id
-are supported:
-.RS
-.TS
-lb lb
-l lx.
-ID Method
-_
-1 MD5
-2a T{
-Blowfish (not in mainline glibc; added in some
-Linux distributions)
-T}
-.\" openSUSE has Blowfish, but AFAICS, this option is not supported
-.\" natively by glibc -- mtk, Jul 08
-.\"
-.\" md5 | Sun MD5
-.\" glibc doesn't appear to natively support Sun MD5; I don't know
-.\" if any distros add the support.
-5 SHA-256 (since glibc 2.7)
-6 SHA-512 (since glibc 2.7)
-.TE
-.RE
-.PP
-Thus, $5$\fIsalt\fP$\fIencrypted\fP and $6$\fIsalt\fP$\fIencrypted\fP
-contain the password encrypted with, respectively, functions
-based on SHA-256 and SHA-512.
-.PP
-"\fIsalt\fP" stands for the up to 16 characters
-following "$\fIid\fP$" in the salt.
-The "\fIencrypted\fP"
-part of the password string is the actual computed password.
-The size of this string is fixed:
-.RS
-.TS
-lb l.
-MD5 22 characters
-SHA-256 43 characters
-SHA-512 86 characters
-.TE
-.RE
-.PP
-The characters in "\fIsalt\fP" and "\fIencrypted\fP" are drawn from the set
-[\fBa\-zA\-Z0\-9./\fP].
-In the MD5 and SHA implementations the entire
-.I key
-is significant (instead of only the first
-8 bytes in DES).
-.PP
-Since glibc 2.7,
-.\" glibc commit 9425cb9eea6a62fc21d99aafe8a60f752b934b05
-the SHA-256 and SHA-512 implementations support a user-supplied number of
-hashing rounds, defaulting to 5000.
-If the "$\fIid\fP$" characters in the salt are
-followed by "rounds=\fIxxx\fP$", where \fIxxx\fP is an integer, then the
-result has the form
-.RS
-.PP
-$\fIid\fP$\fIrounds=yyy\fP$\fIsalt\fP$\fIencrypted\fP
-.RE
-.PP
-where \fIyyy\fP is the number of hashing rounds actually used.
-The number of rounds actually used is 1000 if
-.I xxx
-is less than
-1000, 999999999 if
-.I xxx
-is greater than 999999999, and
-is equal to
-.I xxx
-otherwise.
-.SH SEE ALSO
-.BR login (1),
-.BR passwd (1),
-.BR encrypt (3),
-.BR getpass (3),
-.BR passwd (5)
diff --git a/man3/crypt_r.3 b/man3/crypt_r.3
deleted file mode 100644
index 3944ebd53..000000000
--- a/man3/crypt_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/crypt.3
diff --git a/man3/csin.3 b/man3/csin.3
deleted file mode 100644
index fc1ccb2cd..000000000
--- a/man3/csin.3
+++ /dev/null
@@ -1,60 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH csin 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-csin, csinf, csinl \- complex sine function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex csin(double complex " z );
-.BI "float complex csinf(float complex " z );
-.BI "long double complex csinl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions calculate the complex sine of
-.IR z .
-.PP
-The complex sine function is defined as:
-.PP
-.in +4n
-.EX
-csin(z) = (exp(i * z) \- exp(\-i * z)) / (2 * i)
-.EE
-.in
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR csin (),
-.BR csinf (),
-.BR csinl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR cabs (3),
-.BR casin (3),
-.BR ccos (3),
-.BR ctan (3),
-.BR complex (7)
diff --git a/man3/csinf.3 b/man3/csinf.3
deleted file mode 100644
index 1ed2a3e7f..000000000
--- a/man3/csinf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/csin.3
diff --git a/man3/csinh.3 b/man3/csinh.3
deleted file mode 100644
index c212f8e28..000000000
--- a/man3/csinh.3
+++ /dev/null
@@ -1,60 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH csinh 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-csinh, csinhf, csinhl \- complex hyperbolic sine
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex csinh(double complex " z );
-.BI "float complex csinhf(float complex " z );
-.BI "long double complex csinhl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions calculate the complex hyperbolic sine of
-.IR z .
-.PP
-The complex hyperbolic sine function is defined as:
-.PP
-.in +4n
-.EX
-csinh(z) = (exp(z)\-exp(\-z))/2
-.EE
-.in
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR csinh (),
-.BR csinhf (),
-.BR csinhl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR cabs (3),
-.BR casinh (3),
-.BR ccosh (3),
-.BR ctanh (3),
-.BR complex (7)
diff --git a/man3/csinhf.3 b/man3/csinhf.3
deleted file mode 100644
index 9f6d66f92..000000000
--- a/man3/csinhf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/csinh.3
diff --git a/man3/csinhl.3 b/man3/csinhl.3
deleted file mode 100644
index 9f6d66f92..000000000
--- a/man3/csinhl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/csinh.3
diff --git a/man3/csinl.3 b/man3/csinl.3
deleted file mode 100644
index 1ed2a3e7f..000000000
--- a/man3/csinl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/csin.3
diff --git a/man3/csqrt.3 b/man3/csqrt.3
deleted file mode 100644
index e1469ee22..000000000
--- a/man3/csqrt.3
+++ /dev/null
@@ -1,54 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH csqrt 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-csqrt, csqrtf, csqrtl \- complex square root
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex csqrt(double complex " z );
-.BI "float complex csqrtf(float complex " z );
-.BI "long double complex csqrtl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions calculate the complex square root of
-.IR z ,
-with a branch cut along the negative real axis.
-(That means that \fIcsqrt(\-1+eps*I)\fP will be close to I while
-\fIcsqrt(\-1\-eps*I)\fP will be close to \-I, \fIif eps\fP is a small positive
-real number.)
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR csqrt (),
-.BR csqrtf (),
-.BR csqrtl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR cabs (3),
-.BR cexp (3),
-.BR complex (7)
diff --git a/man3/csqrtf.3 b/man3/csqrtf.3
deleted file mode 100644
index e3cf32905..000000000
--- a/man3/csqrtf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/csqrt.3
diff --git a/man3/csqrtl.3 b/man3/csqrtl.3
deleted file mode 100644
index e3cf32905..000000000
--- a/man3/csqrtl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/csqrt.3
diff --git a/man3/ctan.3 b/man3/ctan.3
deleted file mode 100644
index 42e7f78f4..000000000
--- a/man3/ctan.3
+++ /dev/null
@@ -1,60 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH ctan 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ctan, ctanf, ctanl \- complex tangent function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex ctan(double complex " z );
-.BI "float complex ctanf(float complex " z );
-.BI "long double complex ctanl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions calculate the complex tangent of
-.IR z .
-.PP
-The complex tangent function is defined as:
-.PP
-.in +4n
-.EX
-ctan(z) = csin(z) / ccos(z)
-.EE
-.in
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ctan (),
-.BR ctanf (),
-.BR ctanl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR cabs (3),
-.BR catan (3),
-.BR ccos (3),
-.BR csin (3),
-.BR complex (7)
diff --git a/man3/ctanf.3 b/man3/ctanf.3
deleted file mode 100644
index c0f4a6607..000000000
--- a/man3/ctanf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ctan.3
diff --git a/man3/ctanh.3 b/man3/ctanh.3
deleted file mode 100644
index 86e645db0..000000000
--- a/man3/ctanh.3
+++ /dev/null
@@ -1,61 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH ctanh 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ctanh, ctanhf, ctanhl \- complex hyperbolic tangent
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.PP
-.BI "double complex ctanh(double complex " z );
-.BI "float complex ctanhf(float complex " z );
-.BI "long double complex ctanhl(long double complex " z );
-.fi
-.SH DESCRIPTION
-These functions calculate the complex hyperbolic tangent of
-.IR z .
-.PP
-The complex hyperbolic tangent function is defined
-mathematically as:
-.PP
-.in +4n
-.EX
-ctanh(z) = csinh(z) / ccosh(z)
-.EE
-.in
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ctanh (),
-.BR ctanhf (),
-.BR ctanhl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR cabs (3),
-.BR catanh (3),
-.BR ccosh (3),
-.BR csinh (3),
-.BR complex (7)
diff --git a/man3/ctanhf.3 b/man3/ctanhf.3
deleted file mode 100644
index 49b92172b..000000000
--- a/man3/ctanhf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ctanh.3
diff --git a/man3/ctanhl.3 b/man3/ctanhl.3
deleted file mode 100644
index 49b92172b..000000000
--- a/man3/ctanhl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ctanh.3
diff --git a/man3/ctanl.3 b/man3/ctanl.3
deleted file mode 100644
index c0f4a6607..000000000
--- a/man3/ctanl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ctan.3
diff --git a/man3/ctermid.3 b/man3/ctermid.3
deleted file mode 100644
index 681a893ef..000000000
--- a/man3/ctermid.3
+++ /dev/null
@@ -1,76 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 19:51:06 1993 by Rik Faith (faith@cs.unc.edu)
-.TH ctermid 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ctermid \- get controlling terminal name
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.\" POSIX also requires this function to be declared in <unistd.h>,
-.\" and glibc does so if suitable feature test macros are defined.
-.PP
-.BI "char *ctermid(char *" "s" );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR ctermid ():
-.nf
- _POSIX_C_SOURCE
-.fi
-.SH DESCRIPTION
-.BR ctermid ()
-returns a string which is the pathname for the current
-controlling terminal for this process.
-If
-.I s
-is NULL,
-a static buffer is used, otherwise
-.I s
-points to a buffer used to hold the terminal pathname.
-The symbolic constant
-.B L_ctermid
-is the maximum number of characters in the returned pathname.
-.SH RETURN VALUE
-The pointer to the pathname.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ctermid ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, Svr4.
-.SH BUGS
-The returned pathname may not uniquely identify the controlling
-terminal; it may, for example, be
-.IR /dev/tty .
-.PP
-It is not assured that the program can open the terminal.
-.\" in glibc 2.3.x, x >= 4, the glibc headers threw an error
-.\" if ctermid() was given an argument; fixed in glibc 2.4.
-.SH SEE ALSO
-.BR ttyname (3)
diff --git a/man3/ctime.3 b/man3/ctime.3
deleted file mode 100644
index a6021f451..000000000
--- a/man3/ctime.3
+++ /dev/null
@@ -1,414 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 19:49:27 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Fri Apr 26 12:38:55 MET DST 1996 by Martin Schulze (joey@linux.de)
-.\" Modified 2001-11-13, aeb
-.\" Modified 2001-12-13, joey, aeb
-.\" Modified 2004-11-16, mtk
-.\"
-.TH ctime 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-asctime, ctime, gmtime, localtime, mktime, asctime_r, ctime_r, gmtime_r,
-localtime_r \- transform date and time to broken-down time or ASCII
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <time.h>
-.PP
-.BI "char *asctime(const struct tm *" tm );
-.BI "char *asctime_r(const struct tm *restrict " tm ,
-.BI " char " buf "[restrict 26]);"
-.PP
-.BI "char *ctime(const time_t *" timep );
-.BI "char *ctime_r(const time_t *restrict " timep ,
-.BI " char " buf "[restrict 26]);"
-.PP
-.BI "struct tm *gmtime(const time_t *" timep );
-.BI "struct tm *gmtime_r(const time_t *restrict " timep ,
-.BI " struct tm *restrict " result );
-.PP
-.BI "struct tm *localtime(const time_t *" timep );
-.BI "struct tm *localtime_r(const time_t *restrict " timep ,
-.BI " struct tm *restrict " result );
-.PP
-.BI "time_t mktime(struct tm *" tm );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR asctime_r (),
-.BR ctime_r (),
-.BR gmtime_r (),
-.BR localtime_r ():
-.nf
- _POSIX_C_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR ctime (),
-.BR gmtime (),
-and
-.BR localtime ()
-functions all take
-an argument of data type \fItime_t\fP, which represents calendar time.
-When interpreted as an absolute time value, it represents the number of
-seconds elapsed since the Epoch, 1970-01-01 00:00:00 +0000 (UTC).
-.PP
-The
-.BR asctime ()
-and
-.BR mktime ()
-functions both take an argument
-representing broken-down time, which is a representation
-separated into year, month, day, and so on.
-.PP
-Broken-down time is stored in the structure
-.IR tm ,
-described in
-.BR tm (3type).
-.PP
-The call
-.BI ctime( t )
-is equivalent to
-.BI asctime(localtime( t )) \fR.
-It converts the calendar time \fIt\fP into a
-null-terminated string of the form
-.PP
-.in +4n
-.EX
-"Wed Jun 30 21:49:08 1993\en"
-.EE
-.in
-.PP
-The abbreviations for the days of the week are "Sun", "Mon", "Tue", "Wed",
-"Thu", "Fri", and "Sat".
-The abbreviations for the months are "Jan",
-"Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", and
-"Dec".
-The return value points to a statically allocated string which
-might be overwritten by subsequent calls to any of the date and time
-functions.
-The function also sets the external
-variables \fItzname\fP, \fItimezone\fP, and \fIdaylight\fP (see
-.BR tzset (3))
-with information about the current timezone.
-The reentrant version
-.BR ctime_r ()
-does the same, but stores the
-string in a user-supplied buffer
-which should have room for at least 26 bytes.
-It need not
-set \fItzname\fP, \fItimezone\fP, and \fIdaylight\fP.
-.PP
-The
-.BR gmtime ()
-function converts the calendar time \fItimep\fP to
-broken-down time representation, expressed in Coordinated Universal Time
-(UTC).
-It may return NULL when the year does not fit into an integer.
-The return value points to a statically allocated struct which might be
-overwritten by subsequent calls to any of the date and time functions.
-The
-.BR gmtime_r ()
-function does the same, but stores the data in a
-user-supplied struct.
-.PP
-The
-.BR localtime ()
-function converts the calendar time \fItimep\fP to
-broken-down time representation,
-expressed relative to the user's specified timezone.
-The function acts as if it called
-.BR tzset (3)
-and sets the external variables \fItzname\fP with
-information about the current timezone, \fItimezone\fP with the difference
-between Coordinated Universal Time (UTC) and local standard time in
-seconds, and \fIdaylight\fP to a nonzero value if daylight savings
-time rules apply during some part of the year.
-The return value points to a statically allocated struct which might be
-overwritten by subsequent calls to any of the date and time functions.
-The
-.BR localtime_r ()
-function does the same, but stores the data in a
-user-supplied struct.
-It need not set \fItzname\fP, \fItimezone\fP, and \fIdaylight\fP.
-.PP
-The
-.BR asctime ()
-function converts the broken-down time value
-\fItm\fP into a null-terminated string with the same format as
-.BR ctime ().
-The return value points to a statically allocated string which might be
-overwritten by subsequent calls to any of the date and time functions.
-The
-.BR asctime_r ()
-function does the same, but stores the string in
-a user-supplied buffer which should have room for at least 26 bytes.
-.PP
-The
-.BR mktime ()
-function converts a broken-down time structure, expressed
-as local time, to calendar time representation.
-The function ignores
-the values supplied by the caller in the
-.I tm_wday
-and
-.I tm_yday
-fields.
-The value specified in the
-.I tm_isdst
-field informs
-.BR mktime ()
-whether or not daylight saving time (DST)
-is in effect for the time supplied in the
-.I tm
-structure:
-a positive value means DST is in effect;
-zero means that DST is not in effect;
-and a negative value means that
-.BR mktime ()
-should (use timezone information and system databases to)
-attempt to determine whether DST is in effect at the specified time.
-.PP
-The
-.BR mktime ()
-function modifies the fields of the
-.I tm
-structure as follows:
-.I tm_wday
-and
-.I tm_yday
-are set to values determined from the contents of the other fields;
-if structure members are outside their valid interval, they will be
-normalized (so that, for example, 40 October is changed into 9 November);
-.I tm_isdst
-is set (regardless of its initial value)
-to a positive value or to 0, respectively,
-to indicate whether DST is or is not in effect at the specified time.
-Calling
-.BR mktime ()
-also sets the external variable \fItzname\fP with
-information about the current timezone.
-.PP
-If the specified broken-down
-time cannot be represented as calendar time (seconds since the Epoch),
-.BR mktime ()
-returns
-.I (time_t)\ \-1
-and does not alter the
-members of the broken-down time structure.
-.SH RETURN VALUE
-On success,
-.BR gmtime ()
-and
-.BR localtime ()
-return a pointer to a
-.IR "struct\ tm" .
-.PP
-On success,
-.BR gmtime_r ()
-and
-.BR localtime_r ()
-return the address of the structure pointed to by
-.IR result .
-.PP
-On success,
-.BR asctime ()
-and
-.BR ctime ()
-return a pointer to a string.
-.PP
-On success,
-.BR asctime_r ()
-and
-.BR ctime_r ()
-return a pointer to the string pointed to by
-.IR buf .
-.PP
-On success,
-.BR mktime ()
-returns the calendar time (seconds since the Epoch),
-expressed as a value of type
-.IR time_t .
-.PP
-On error,
-.BR mktime ()
-returns the value
-.IR "(time_t)\ \-1" .
-The remaining functions return NULL on error.
-On error,
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EOVERFLOW
-The result cannot be represented.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR asctime ()
-T} Thread safety T{
-MT-Unsafe race:asctime locale
-T}
-T{
-.BR asctime_r ()
-T} Thread safety T{
-MT-Safe locale
-T}
-T{
-.BR ctime ()
-T} Thread safety T{
-MT-Unsafe race:tmbuf
-race:asctime env locale
-T}
-T{
-.BR ctime_r (),
-.BR gmtime_r (),
-.BR localtime_r (),
-.BR mktime ()
-T} Thread safety T{
-MT-Safe env locale
-T}
-T{
-.BR gmtime (),
-.BR localtime ()
-T} Thread safety T{
-MT-Unsafe race:tmbuf env locale
-T}
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-POSIX doesn't specify the parameters of
-.BR ctime_r ()
-to be
-.IR restrict ;
-that is specific to glibc.
-.PP
-In many implementations, including glibc, a 0 in
-.I tm_mday
-is interpreted as meaning the last day of the preceding month.
-.PP
-According to POSIX.1-2001,
-.BR localtime ()
-is required to behave as though
-.BR tzset (3)
-was called, while
-.BR localtime_r ()
-does not have this requirement.
-.\" See http://thread.gmane.org/gmane.comp.time.tz/2034/
-For portable code,
-.BR tzset (3)
-should be called before
-.BR localtime_r ().
-.SH STANDARDS
-.TP
-.BR asctime ()
-.TQ
-.BR ctime ()
-.TQ
-.BR gmtime ()
-.TQ
-.BR localtime ()
-.TQ
-.BR mktime ()
-C11, POSIX.1-2008.
-.TP
-.BR asctime_r ()
-.TQ
-.BR ctime_r ()
-.TQ
-.BR gmtime_r ()
-.TQ
-.BR localtime_r ()
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR gmtime ()
-.TQ
-.BR localtime ()
-.TQ
-.BR mktime ()
-C89, POSIX.1-2001.
-.TP
-.BR asctime ()
-.TQ
-.BR ctime ()
-C89, POSIX.1-2001.
-Marked obsolete in POSIX.1-2008 (recommending
-.BR strftime (3)).
-.TP
-.BR gmtime_r ()
-.TQ
-.BR localtime_r ()
-POSIX.1-2001.
-.TP
-.BR asctime_r ()
-.TQ
-.BR ctime_r ()
-POSIX.1-2001.
-Marked obsolete in POSIX.1-2008 (recommending
-.BR strftime (3)).
-.SH NOTES
-The four functions
-.BR asctime (),
-.BR ctime (),
-.BR gmtime (),
-and
-.BR localtime ()
-return a pointer to static data and hence are not thread-safe.
-The thread-safe versions,
-.BR asctime_r (),
-.BR ctime_r (),
-.BR gmtime_r (),
-and
-.BR localtime_r (),
-are specified by SUSv2.
-.PP
-POSIX.1-2001 says:
-"The
-.BR asctime (),
-.BR ctime (),
-.BR gmtime (),
-and
-.BR localtime ()
-functions shall return values in one of two static objects:
-a broken-down time structure and an array of type
-.IR char .
-Execution of any of the functions may overwrite the information returned
-in either of these objects by any of the other functions."
-This can occur in the glibc implementation.
-.SH SEE ALSO
-.BR date (1),
-.BR gettimeofday (2),
-.BR time (2),
-.BR utime (2),
-.BR clock (3),
-.BR difftime (3),
-.BR strftime (3),
-.BR strptime (3),
-.BR timegm (3),
-.BR tzset (3),
-.BR time (7)
diff --git a/man3/ctime_r.3 b/man3/ctime_r.3
deleted file mode 100644
index 84a3baa92..000000000
--- a/man3/ctime_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ctime.3
diff --git a/man3/cuserid.3 b/man3/cuserid.3
deleted file mode 100644
index b6d53bf72..000000000
--- a/man3/cuserid.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getlogin.3
diff --git a/man3/daemon.3 b/man3/daemon.3
deleted file mode 100644
index dcd57c332..000000000
--- a/man3/daemon.3
+++ /dev/null
@@ -1,132 +0,0 @@
-'\" t
-.\" Copyright (c) 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)daemon.3 8.1 (Berkeley) 6/9/93
-.\" Added mentioning of glibc weirdness wrt unistd.h. 5/11/98, Al Viro
-.TH daemon 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-daemon \- run in the background
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int daemon(int " nochdir ", int " noclose );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR daemon ():
-.nf
- Since glibc 2.21:
-.\" commit 266865c0e7b79d4196e2cc393693463f03c90bd8
- _DEFAULT_SOURCE
- In glibc 2.19 and 2.20:
- _DEFAULT_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
- Up to and including glibc 2.19:
- _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
-.fi
-.SH DESCRIPTION
-The
-.BR daemon ()
-function is for programs wishing to detach themselves from the
-controlling terminal and run in the background as system daemons.
-.PP
-If
-.I nochdir
-is zero,
-.BR daemon ()
-changes the process's current working directory
-to the root directory ("/");
-otherwise, the current working directory is left unchanged.
-.PP
-If
-.I noclose
-is zero,
-.BR daemon ()
-redirects standard input, standard output, and standard error
-to
-.IR /dev/null ;
-otherwise, no changes are made to these file descriptors.
-.SH RETURN VALUE
-(This function forks, and if the
-.BR fork (2)
-succeeds, the parent calls
-.\" not .IR in order not to underline _
-.BR _exit (2),
-so that further errors are seen by the child only.)
-On success
-.BR daemon ()
-returns zero.
-If an error occurs,
-.BR daemon ()
-returns \-1 and sets
-.I errno
-to any of the errors specified for the
-.BR fork (2)
-and
-.BR setsid (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR daemon ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-A similar function appears on the BSDs.
-.PP
-The glibc implementation can also return \-1 when
-.I /dev/null
-exists but is not a character device with the expected
-major and minor numbers.
-In this case,
-.I errno
-need not be set.
-.SH STANDARDS
-None.
-.SH HISTORY
-4.4BSD.
-.SH BUGS
-The GNU C library implementation of this function was taken from BSD,
-and does not employ the double-fork technique (i.e.,
-.BR fork (2),
-.BR setsid (2),
-.BR fork (2))
-that is necessary to ensure that the resulting daemon process is
-not a session leader.
-Instead, the resulting daemon
-.I is
-a session leader.
-.\" FIXME . https://sourceware.org/bugzilla/show_bug.cgi?id=19144
-.\" Tested using a program that uses daemon() and then opens an
-.\" otherwise unused console device (/dev/ttyN) that does not
-.\" have an associated getty process.
-On systems that follow System V semantics (e.g., Linux),
-this means that if the daemon opens a terminal that is not
-already a controlling terminal for another session,
-then that terminal will inadvertently become
-the controlling terminal for the daemon.
-.SH SEE ALSO
-.BR fork (2),
-.BR setsid (2),
-.BR daemon (7),
-.BR logrotate (8)
diff --git a/man3/daylight.3 b/man3/daylight.3
deleted file mode 100644
index 80907636c..000000000
--- a/man3/daylight.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tzset.3
diff --git a/man3/db.3 b/man3/db.3
deleted file mode 100644
index 03ede6636..000000000
--- a/man3/db.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/dbopen.3
diff --git a/man3/dbopen.3 b/man3/dbopen.3
deleted file mode 100644
index 294b5fa6e..000000000
--- a/man3/dbopen.3
+++ /dev/null
@@ -1,536 +0,0 @@
-.\" Copyright (c) 1990, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)dbopen.3 8.5 (Berkeley) 1/2/94
-.\"
-.TH dbopen 3 (date) "Linux man-pages (unreleased)"
-.UC 7
-.SH NAME
-dbopen \- database access methods
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.B #include <limits.h>
-.B #include <db.h>
-.B #include <fcntl.h>
-.PP
-.BI "DB *dbopen(const char *" file ", int " flags ", int " mode \
-", DBTYPE " type ,
-.BI " const void *" openinfo );
-.fi
-.SH DESCRIPTION
-.IR "Note well" :
-This page documents interfaces provided up until glibc 2.1.
-Since glibc 2.2, glibc no longer provides these interfaces.
-Probably, you are looking for the APIs provided by the
-.I libdb
-library instead.
-.PP
-.BR dbopen ()
-is the library interface to database files.
-The supported file formats are btree, hashed, and UNIX file oriented.
-The btree format is a representation of a sorted, balanced tree structure.
-The hashed format is an extensible, dynamic hashing scheme.
-The flat-file format is a byte stream file with fixed or variable length
-records.
-The formats and file-format-specific information are described in detail
-in their respective manual pages
-.BR btree (3),
-.BR hash (3),
-and
-.BR recno (3).
-.PP
-.BR dbopen ()
-opens
-.I file
-for reading and/or writing.
-Files never intended to be preserved on disk may be created by setting
-the
-.I file
-argument to NULL.
-.PP
-The
-.I flags
-and
-.I mode
-arguments are as specified to the
-.BR open (2)
-routine, however, only the
-.BR O_CREAT ,
-.BR O_EXCL ,
-.BR O_EXLOCK ,
-.BR O_NONBLOCK ,
-.BR O_RDONLY ,
-.BR O_RDWR ,
-.BR O_SHLOCK ,
-and
-.B O_TRUNC
-flags are meaningful.
-(Note, opening a database file
-.B O_WRONLY
-is not possible.)
-.\"Three additional options may be specified by ORing
-.\"them into the
-.\".I flags
-.\"argument.
-.\".TP
-.\"DB_LOCK
-.\"Do the necessary locking in the database to support concurrent access.
-.\"If concurrent access isn't needed or the database is read-only this
-.\"flag should not be set, as it tends to have an associated performance
-.\"penalty.
-.\".TP
-.\"DB_SHMEM
-.\"Place the underlying memory pool used by the database in shared
-.\"memory.
-.\"Necessary for concurrent access.
-.\".TP
-.\"DB_TXN
-.\"Support transactions in the database.
-.\"The DB_LOCK and DB_SHMEM flags must be set as well.
-.PP
-The
-.I type
-argument is of type
-.I DBTYPE
-(as defined in the
-.I <db.h>
-include file) and
-may be set to
-.BR DB_BTREE ,
-.BR DB_HASH ,
-or
-.BR DB_RECNO .
-.PP
-The
-.I openinfo
-argument is a pointer to an access-method-specific structure described
-in the access method's manual page.
-If
-.I openinfo
-is NULL, each access method will use defaults appropriate for the system
-and the access method.
-.PP
-.BR dbopen ()
-returns a pointer to a
-.I DB
-structure on success and NULL on error.
-The
-.I DB
-structure is defined in the
-.I <db.h>
-include file, and contains at
-least the following fields:
-.PP
-.in +4n
-.EX
-typedef struct {
- DBTYPE type;
- int (*close)(const DB *db);
- int (*del)(const DB *db, const DBT *key, unsigned int flags);
- int (*fd)(const DB *db);
- int (*get)(const DB *db, DBT *key, DBT *data,
- unsigned int flags);
- int (*put)(const DB *db, DBT *key, const DBT *data,
- unsigned int flags);
- int (*sync)(const DB *db, unsigned int flags);
- int (*seq)(const DB *db, DBT *key, DBT *data,
- unsigned int flags);
-} DB;
-.EE
-.in
-.PP
-These elements describe a database type and a set of functions performing
-various actions.
-These functions take a pointer to a structure as returned by
-.BR dbopen (),
-and sometimes one or more pointers to key/data structures and a flag value.
-.TP
-.I type
-The type of the underlying access method (and file format).
-.TP
-.I close
-A pointer to a routine to flush any cached information to disk, free any
-allocated resources, and close the underlying file(s).
-Since key/data pairs may be cached in memory, failing to sync the file
-with a
-.I close
-or
-.I sync
-function may result in inconsistent or lost information.
-.I close
-routines return \-1 on error (setting
-.IR errno )
-and 0 on success.
-.TP
-.I del
-A pointer to a routine to remove key/data pairs from the database.
-.IP
-The argument
-.I flag
-may be set to the following value:
-.RS
-.TP
-.B R_CURSOR
-Delete the record referenced by the cursor.
-The cursor must have previously been initialized.
-.RE
-.IP
-.I delete
-routines return \-1 on error (setting
-.IR errno ),
-0 on success, and 1 if the specified
-.I key
-was not in the file.
-.TP
-.I fd
-A pointer to a routine which returns a file descriptor representative
-of the underlying database.
-A file descriptor referencing the same file will be returned to all
-processes which call
-.BR dbopen ()
-with the same
-.I file
-name.
-This file descriptor may be safely used as an argument to the
-.BR fcntl (2)
-and
-.BR flock (2)
-locking functions.
-The file descriptor is not necessarily associated with any of the
-underlying files used by the access method.
-No file descriptor is available for in memory databases.
-.I fd
-routines return \-1 on error (setting
-.IR errno ),
-and the file descriptor on success.
-.TP
-.I get
-A pointer to a routine which is the interface for keyed retrieval from
-the database.
-The address and length of the data associated with the specified
-.I key
-are returned in the structure referenced by
-.IR data .
-.I get
-routines return \-1 on error (setting
-.IR errno ),
-0 on success, and 1 if the
-.I key
-was not in the file.
-.TP
-.I put
-A pointer to a routine to store key/data pairs in the database.
-.IP
-The argument
-.I flag
-may be set to one of the following values:
-.RS
-.TP
-.B R_CURSOR
-Replace the key/data pair referenced by the cursor.
-The cursor must have previously been initialized.
-.TP
-.B R_IAFTER
-Append the data immediately after the data referenced by
-.IR key ,
-creating a new key/data pair.
-The record number of the appended key/data pair is returned in the
-.I key
-structure.
-(Applicable only to the
-.B DB_RECNO
-access method.)
-.TP
-.B R_IBEFORE
-Insert the data immediately before the data referenced by
-.IR key ,
-creating a new key/data pair.
-The record number of the inserted key/data pair is returned in the
-.I key
-structure.
-(Applicable only to the
-.B DB_RECNO
-access method.)
-.TP
-.B R_NOOVERWRITE
-Enter the new key/data pair only if the key does not previously exist.
-.TP
-.B R_SETCURSOR
-Store the key/data pair, setting or initializing the position of the
-cursor to reference it.
-(Applicable only to the
-.B DB_BTREE
-and
-.B DB_RECNO
-access methods.)
-.RE
-.IP
-.B R_SETCURSOR
-is available only for the
-.B DB_BTREE
-and
-.B DB_RECNO
-access
-methods because it implies that the keys have an inherent order
-which does not change.
-.IP
-.B R_IAFTER
-and
-.B R_IBEFORE
-are available only for the
-.B DB_RECNO
-access method because they each imply that the access method is able to
-create new keys.
-This is true only if the keys are ordered and independent, record numbers
-for example.
-.IP
-The default behavior of the
-.I put
-routines is to enter the new key/data pair, replacing any previously
-existing key.
-.IP
-.I put
-routines return \-1 on error (setting
-.IR errno ),
-0 on success, and 1 if the
-.B R_NOOVERWRITE
-.I flag
-was set and the key already exists in the file.
-.TP
-.I seq
-A pointer to a routine which is the interface for sequential
-retrieval from the database.
-The address and length of the key are returned in the structure
-referenced by
-.IR key ,
-and the address and length of the data are returned in the
-structure referenced
-by
-.IR data .
-.IP
-Sequential key/data pair retrieval may begin at any time, and the
-position of the "cursor" is not affected by calls to the
-.IR del ,
-.IR get ,
-.IR put ,
-or
-.I sync
-routines.
-Modifications to the database during a sequential scan will be reflected
-in the scan, that is,
-records inserted behind the cursor will not be returned
-while records inserted in front of the cursor will be returned.
-.IP
-The flag value
-.B must
-be set to one of the following values:
-.RS
-.TP
-.B R_CURSOR
-The data associated with the specified key is returned.
-This differs from the
-.I get
-routines in that it sets or initializes the cursor to the location of
-the key as well.
-(Note, for the
-.B DB_BTREE
-access method, the returned key is not necessarily an
-exact match for the specified key.
-The returned key is the smallest key greater than or equal to the specified
-key, permitting partial key matches and range searches.)
-.TP
-.B R_FIRST
-The first key/data pair of the database is returned, and the cursor
-is set or initialized to reference it.
-.TP
-.B R_LAST
-The last key/data pair of the database is returned, and the cursor
-is set or initialized to reference it.
-(Applicable only to the
-.B DB_BTREE
-and
-.B DB_RECNO
-access methods.)
-.TP
-.B R_NEXT
-Retrieve the key/data pair immediately after the cursor.
-If the cursor is not yet set, this is the same as the
-.B R_FIRST
-flag.
-.TP
-.B R_PREV
-Retrieve the key/data pair immediately before the cursor.
-If the cursor is not yet set, this is the same as the
-.B R_LAST
-flag.
-(Applicable only to the
-.B DB_BTREE
-and
-.B DB_RECNO
-access methods.)
-.RE
-.IP
-.B R_LAST
-and
-.B R_PREV
-are available only for the
-.B DB_BTREE
-and
-.B DB_RECNO
-access methods because they each imply that the keys have an inherent
-order which does not change.
-.IP
-.I seq
-routines return \-1 on error (setting
-.IR errno ),
-0 on success and 1 if there are no key/data pairs less than or greater
-than the specified or current key.
-If the
-.B DB_RECNO
-access method is being used, and if the database file
-is a character special file and no complete key/data pairs are currently
-available, the
-.I seq
-routines return 2.
-.TP
-.I sync
-A pointer to a routine to flush any cached information to disk.
-If the database is in memory only, the
-.I sync
-routine has no effect and will always succeed.
-.IP
-The flag value may be set to the following value:
-.RS
-.TP
-.B R_RECNOSYNC
-If the
-.B DB_RECNO
-access method is being used, this flag causes
-the sync routine to apply to the btree file which underlies the
-recno file, not the recno file itself.
-(See the
-.I bfname
-field of the
-.BR recno (3)
-manual page for more information.)
-.RE
-.IP
-.I sync
-routines return \-1 on error (setting
-.IR errno )
-and 0 on success.
-.SS Key/data pairs
-Access to all file types is based on key/data pairs.
-Both keys and data are represented by the following data structure:
-.PP
-.in +4n
-.EX
-typedef struct {
- void *data;
- size_t size;
-} DBT;
-.EE
-.in
-.PP
-The elements of the
-.I DBT
-structure are defined as follows:
-.TP
-.I data
-A pointer to a byte string.
-.TP
-.I size
-The length of the byte string.
-.PP
-Key and data byte strings may reference strings of essentially unlimited
-length although any two of them must fit into available memory at the same
-time.
-It should be noted that the access methods provide no guarantees about
-byte string alignment.
-.SH ERRORS
-The
-.BR dbopen ()
-routine may fail and set
-.I errno
-for any of the errors specified for the library routines
-.BR open (2)
-and
-.BR malloc (3)
-or the following:
-.TP
-.B EFTYPE
-A file is incorrectly formatted.
-.TP
-.B EINVAL
-A parameter has been specified (hash function, pad byte, etc.) that is
-incompatible with the current file specification or which is not
-meaningful for the function (for example, use of the cursor without
-prior initialization) or there is a mismatch between the version
-number of file and the software.
-.PP
-The
-.I close
-routines may fail and set
-.I errno
-for any of the errors specified for the library routines
-.BR close (2),
-.BR read (2),
-.BR write (2),
-.BR free (3),
-or
-.BR fsync (2).
-.PP
-The
-.IR del ,
-.IR get ,
-.IR put ,
-and
-.I seq
-routines may fail and set
-.I errno
-for any of the errors specified for the library routines
-.BR read (2),
-.BR write (2),
-.BR free (3),
-or
-.BR malloc (3).
-.PP
-The
-.I fd
-routines will fail and set
-.I errno
-to
-.B ENOENT
-for in memory databases.
-.PP
-The
-.I sync
-routines may fail and set
-.I errno
-for any of the errors specified for the library routine
-.BR fsync (2).
-.SH BUGS
-The typedef
-.I DBT
-is a mnemonic for "data base thang", and was used
-because no one could think of a reasonable name that wasn't already used.
-.PP
-The file descriptor interface is a kludge and will be deleted in a
-future version of the interface.
-.PP
-None of the access methods provide any form of concurrent access,
-locking, or transactions.
-.SH SEE ALSO
-.BR btree (3),
-.BR hash (3),
-.BR mpool (3),
-.BR recno (3)
-.PP
-.IR "LIBTP: Portable, Modular Transactions for UNIX" ,
-Margo Seltzer, Michael Olson, USENIX proceedings, Winter 1992.
diff --git a/man3/des_crypt.3 b/man3/des_crypt.3
deleted file mode 100644
index af57bc6f4..000000000
--- a/man3/des_crypt.3
+++ /dev/null
@@ -1,167 +0,0 @@
-'\" t
-.\" @(#)des_crypt.3 2.1 88/08/11 4.0 RPCSRC; from 1.16 88/03/02 SMI;
-.\"
-.\" Taken from libc4 sources, which say:
-.\" Copyright (C) 1993 Eric Young - can be distributed under GPL.
-.\"
-.\" However, the above header line suggests that this file in fact is
-.\" Copyright Sun Microsystems, Inc (and is provided for unrestricted use,
-.\" see other Sun RPC sources).
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH des_crypt 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-des_crypt, ecb_crypt, cbc_crypt, des_setparity, DES_FAILED \- fast
-DES encryption
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.\" Sun version
-.\" .B #include <des_crypt.h>
-.B #include <rpc/des_crypt.h>
-.PP
-.BI "[[deprecated]] int ecb_crypt(char *" key ", char " data [. datalen ],
-.BI " unsigned int " datalen ", \
-unsigned int " mode );
-.BI "[[deprecated]] int cbc_crypt(char *" key ", char " data [. datalen ],
-.BI " unsigned int " datalen ", \
-unsigned int " mode ,
-.BI " char *" ivec );
-.PP
-.BI "[[deprecated]] void des_setparity(char *" key );
-.PP
-.BI "[[deprecated]] int DES_FAILED(int " status );
-.fi
-.SH DESCRIPTION
-.BR ecb_crypt ()
-and
-.BR cbc_crypt ()
-implement the
-NBS
-DES
-(Data Encryption Standard).
-These routines are faster and more general purpose than
-.BR crypt (3).
-They also are able to utilize
-DES
-hardware if it is available.
-.BR ecb_crypt ()
-encrypts in
-ECB
-(Electronic Code Book)
-mode, which encrypts blocks of data independently.
-.BR cbc_crypt ()
-encrypts in
-CBC
-(Cipher Block Chaining)
-mode, which chains together
-successive blocks.
-CBC
-mode protects against insertions, deletions, and
-substitutions of blocks.
-Also, regularities in the clear text will
-not appear in the cipher text.
-.PP
-Here is how to use these routines.
-The first argument,
-.IR key ,
-is the 8-byte encryption key with parity.
-To set the key's parity, which for
-DES
-is in the low bit of each byte, use
-.BR des_setparity ().
-The second argument,
-.IR data ,
-contains the data to be encrypted or decrypted.
-The
-third argument,
-.IR datalen ,
-is the length in bytes of
-.IR data ,
-which must be a multiple of 8.
-The fourth argument,
-.IR mode ,
-is formed by ORing together some things.
-For the encryption direction OR in either
-.B DES_ENCRYPT
-or
-.BR DES_DECRYPT .
-For software versus hardware
-encryption, OR in either
-.B DES_HW
-or
-.BR DES_SW .
-If
-.B DES_HW
-is specified, and there is no hardware, then the encryption is performed
-in software and the routine returns
-.BR DESERR_NOHWDEVICE .
-For
-.BR cbc_crypt (),
-the argument
-.I ivec
-is the 8-byte initialization
-vector for the chaining.
-It is updated to the next initialization
-vector upon return.
-.SH RETURN VALUE
-.TP
-.B DESERR_NONE
-No error.
-.TP
-.B DESERR_NOHWDEVICE
-Encryption succeeded, but done in software instead of the requested hardware.
-.TP
-.B DESERR_HWERROR
-An error occurred in the hardware or driver.
-.TP
-.B DESERR_BADPARAM
-Bad argument to routine.
-.PP
-Given a result status
-.IR stat ,
-the macro
-.\" .BR DES_FAILED\c
-.\" .BR ( stat )
-.BI DES_FAILED( stat )
-is false only for the first two statuses.
-.\" So far the Sun page
-.\" Some additions - aeb
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ecb_crypt (),
-.BR cbc_crypt (),
-.BR des_setparity ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-4.3BSD.
-glibc 2.1.
-Removed in glibc 2.28.
-.PP
-Because they employ the DES block cipher,
-which is no longer considered secure,
-these functions were removed.
-Applications should switch to a modern cryptography library, such as
-.BR libgcrypt .
-.SH SEE ALSO
-.BR des (1),
-.BR crypt (3),
-.BR xcrypt (3)
diff --git a/man3/des_setparity.3 b/man3/des_setparity.3
deleted file mode 100644
index 853c9cbdf..000000000
--- a/man3/des_setparity.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/des_crypt.3
diff --git a/man3/difftime.3 b/man3/difftime.3
deleted file mode 100644
index 4ecb160ba..000000000
--- a/man3/difftime.3
+++ /dev/null
@@ -1,72 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 19:48:17 1993 by Rik Faith (faith@cs.unc.edu)
-.TH difftime 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-difftime \- calculate time difference
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <time.h>
-.PP
-.BI "double difftime(time_t " time1 ", time_t " time0 );
-.fi
-.SH DESCRIPTION
-The
-.BR difftime ()
-function returns the number of seconds elapsed
-between time \fItime1\fP and time \fItime0\fP, represented as a
-.IR double .
-Each of the times is specified in calendar time, which means its
-value is a measurement (in seconds) relative to the
-Epoch, 1970-01-01 00:00:00 +0000 (UTC).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR difftime ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.SH NOTES
-On a POSIX system,
-.I time_t
-is an arithmetic type, and one could just
-define
-.PP
-.in +4n
-.EX
-#define my_difftime(t1,t0) (double)(t1 \- t0)
-.EE
-.in
-.PP
-when the possible overflow in the subtraction is not a concern.
-.SH SEE ALSO
-.BR date (1),
-.BR gettimeofday (2),
-.BR time (2),
-.BR ctime (3),
-.BR gmtime (3),
-.BR localtime (3)
diff --git a/man3/dirfd.3 b/man3/dirfd.3
deleted file mode 100644
index ea3049886..000000000
--- a/man3/dirfd.3
+++ /dev/null
@@ -1,96 +0,0 @@
-'\" t
-.\" Copyright (C) 2002 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH dirfd 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-dirfd \- get directory stream file descriptor
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.B #include <dirent.h>
-.PP
-.BI "int dirfd(DIR *" dirp );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR dirfd ():
-.nf
- /* Since glibc 2.10: */ _POSIX_C_SOURCE >= 200809L
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The function
-.BR dirfd ()
-returns the file descriptor associated with the directory stream
-.IR dirp .
-.PP
-This file descriptor is the one used internally by the directory stream.
-As a result, it is useful only for functions which do not depend on
-or alter the file position, such as
-.BR fstat (2)
-and
-.BR fchdir (2).
-It will be automatically closed when
-.BR closedir (3)
-is called.
-.SH RETURN VALUE
-On success,
-.BR dirfd ()
-returns a file descriptor (a nonnegative integer).
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-POSIX.1-2008 specifies two errors,
-neither of which is returned by the current
-.\" glibc 2.8
-implementation.
-.TP
-.B EINVAL
-.I dirp
-does not refer to a valid directory stream.
-.TP
-.B ENOTSUP
-The implementation does not support the association of a file
-descriptor with a directory.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR dirfd ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-4.3BSD-Reno (not in 4.2BSD).
-.\" It is present in libc5 (since 5.1.2) and in glibc 2.
-.SH SEE ALSO
-.BR open (2),
-.BR openat (2),
-.BR closedir (3),
-.BR opendir (3),
-.BR readdir (3),
-.BR rewinddir (3),
-.BR scandir (3),
-.BR seekdir (3),
-.BR telldir (3)
diff --git a/man3/dirname.3 b/man3/dirname.3
deleted file mode 100644
index 9099c1ad7..000000000
--- a/man3/dirname.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/basename.3
diff --git a/man3/div.3 b/man3/div.3
deleted file mode 100644
index 97d19334e..000000000
--- a/man3/div.3
+++ /dev/null
@@ -1,108 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\"
-.\" Modified 1993-03-29, David Metcalfe
-.\" Modified 1993-07-24, Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-08-10, 2003-11-01 Walter Harms, aeb
-.\"
-.TH div 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-div, ldiv, lldiv, imaxdiv \- compute quotient and remainder of
-an integer division
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "div_t div(int " numerator ", int " denominator );
-.BI "ldiv_t ldiv(long " numerator ", long " denominator );
-.BI "lldiv_t lldiv(long long " numerator ", long long " denominator );
-.PP
-.B #include <inttypes.h>
-.PP
-.BI "imaxdiv_t imaxdiv(intmax_t " numerator ", intmax_t " denominator );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR lldiv ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-The
-.BR div ()
-function computes the value
-\fInumerator\fP/\fIdenominator\fP and
-returns the quotient and remainder in a structure
-named \fIdiv_t\fP that contains
-two integer members (in unspecified order) named \fIquot\fP and \fIrem\fP.
-The quotient is rounded toward zero.
-The result satisfies \fIquot\fP*\fIdenominator\fP+\fIrem\fP = \fInumerator\fP.
-.PP
-The
-.BR ldiv (),
-.BR lldiv (),
-and
-.BR imaxdiv ()
-functions do the same,
-dividing numbers of the indicated type and
-returning the result in a structure
-of the indicated name, in all cases with fields \fIquot\fP and \fIrem\fP
-of the same type as the function arguments.
-.SH RETURN VALUE
-The \fIdiv_t\fP (etc.) structure.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR div (),
-.BR ldiv (),
-.BR lldiv (),
-.BR imaxdiv ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, C99, SVr4, 4.3BSD.
-.PP
-.BR lldiv ()
-and
-.BR imaxdiv ()
-were added in C99.
-.SH EXAMPLES
-After
-.PP
-.in +4n
-.EX
-div_t q = div(\-5, 3);
-.EE
-.in
-.PP
-the values \fIq.quot\fP and \fIq.rem\fP are \-1 and \-2, respectively.
-.SH SEE ALSO
-.BR abs (3),
-.BR remainder (3)
diff --git a/man3/dl_iterate_phdr.3 b/man3/dl_iterate_phdr.3
deleted file mode 100644
index 554750ca1..000000000
--- a/man3/dl_iterate_phdr.3
+++ /dev/null
@@ -1,348 +0,0 @@
-'\" t
-.\" Copyright (c) 2003, 2017 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH dl_iterate_phdr 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-dl_iterate_phdr \- walk through list of shared objects
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <link.h>
-.PP
-.B int dl_iterate_phdr(
-.BI " int (*" callback ")(struct dl_phdr_info *" info ,
-.BI " size_t " size ", void *" data ),
-.BI " void *" data );
-.fi
-.SH DESCRIPTION
-The
-.BR dl_iterate_phdr ()
-function allows an application to inquire at run time to find
-out which shared objects it has loaded,
-and the order in which they were loaded.
-.PP
-The
-.BR dl_iterate_phdr ()
-function walks through the list of an
-application's shared objects and calls the function
-.I callback
-once for each object,
-until either all shared objects have been processed or
-.I callback
-returns a nonzero value.
-.PP
-Each call to
-.I callback
-receives three arguments:
-.IR info ,
-which is a pointer to a structure containing information
-about the shared object;
-.IR size ,
-which is the size of the structure pointed to by
-.IR info ;
-and
-.IR data ,
-which is a copy of whatever value was passed by the calling
-program as the second argument (also named
-.IR data )
-in the call to
-.BR dl_iterate_phdr ().
-.PP
-The
-.I info
-argument is a structure of the following type:
-.PP
-.in +4n
-.EX
-struct dl_phdr_info {
- ElfW(Addr) dlpi_addr; /* Base address of object */
- const char *dlpi_name; /* (Null\-terminated) name of
- object */
- const ElfW(Phdr) *dlpi_phdr; /* Pointer to array of
- ELF program headers
- for this object */
- ElfW(Half) dlpi_phnum; /* # of items in \fIdlpi_phdr\fP */
-\&
- /* The following fields were added in glibc 2.4, after the first
- version of this structure was available. Check the \fIsize\fP
- argument passed to the dl_iterate_phdr callback to determine
- whether or not each later member is available. */
-\&
- unsigned long long dlpi_adds;
- /* Incremented when a new object may
- have been added */
- unsigned long long dlpi_subs;
- /* Incremented when an object may
- have been removed */
- size_t dlpi_tls_modid;
- /* If there is a PT_TLS segment, its module
- ID as used in TLS relocations, else zero */
- void *dlpi_tls_data;
- /* The address of the calling thread\[aq]s instance
- of this module\[aq]s PT_TLS segment, if it has
- one and it has been allocated in the calling
- thread, otherwise a null pointer */
-};
-.EE
-.in
-.PP
-(The
-.IR ElfW ()
-macro definition turns its argument into the name of an ELF data
-type suitable for the hardware architecture.
-For example, on a 32-bit platform,
-.I ElfW(Addr)
-yields the data type name
-.IR Elf32_Addr .
-Further information on these types can be found in the
-.IR <elf.h> " and " <link.h>
-header files.)
-.PP
-The
-.I dlpi_addr
-field indicates the base address of the shared object
-(i.e., the difference between the virtual memory address of
-the shared object and the offset of that object in the file
-from which it was loaded).
-The
-.I dlpi_name
-field is a null-terminated string giving the pathname
-from which the shared object was loaded.
-.PP
-To understand the meaning of the
-.I dlpi_phdr
-and
-.I dlpi_phnum
-fields, we need to be aware that an ELF shared object consists
-of a number of segments, each of which has a corresponding
-program header describing the segment.
-The
-.I dlpi_phdr
-field is a pointer to an array of the program headers for this
-shared object.
-The
-.I dlpi_phnum
-field indicates the size of this array.
-.PP
-These program headers are structures of the following form:
-.PP
-.in +4n
-.EX
-typedef struct {
- Elf32_Word p_type; /* Segment type */
- Elf32_Off p_offset; /* Segment file offset */
- Elf32_Addr p_vaddr; /* Segment virtual address */
- Elf32_Addr p_paddr; /* Segment physical address */
- Elf32_Word p_filesz; /* Segment size in file */
- Elf32_Word p_memsz; /* Segment size in memory */
- Elf32_Word p_flags; /* Segment flags */
- Elf32_Word p_align; /* Segment alignment */
-} Elf32_Phdr;
-.EE
-.in
-.PP
-Note that we can calculate the location of a particular program header,
-.IR x ,
-in virtual memory using the formula:
-.PP
-.in +4n
-.EX
-addr == info\->dlpi_addr + info\->dlpi_phdr[x].p_vaddr;
-.EE
-.in
-.PP
-Possible values for
-.I p_type
-include the following (see
-.I <elf.h>
-for further details):
-.PP
-.in +4n
-.EX
-#define PT_LOAD 1 /* Loadable program segment */
-#define PT_DYNAMIC 2 /* Dynamic linking information */
-#define PT_INTERP 3 /* Program interpreter */
-#define PT_NOTE 4 /* Auxiliary information */
-#define PT_SHLIB 5 /* Reserved */
-#define PT_PHDR 6 /* Entry for header table itself */
-#define PT_TLS 7 /* Thread\-local storage segment */
-#define PT_GNU_EH_FRAME 0x6474e550 /* GCC .eh_frame_hdr segment */
-#define PT_GNU_STACK 0x6474e551 /* Indicates stack executability */
-.\" For PT_GNU_STACK, see http://www.airs.com/blog/archives/518
-#define PT_GNU_RELRO 0x6474e552 /* Read\-only after relocation */
-.EE
-.in
-.SH RETURN VALUE
-The
-.BR dl_iterate_phdr ()
-function returns whatever value was returned by the last call to
-.IR callback .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR dl_iterate_phdr ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-Various other systems provide a version of this function,
-although details of the returned
-.I dl_phdr_info
-structure differ.
-On the BSDs and Solaris, the structure includes the fields
-.IR dlpi_addr ,
-.IR dlpi_name ,
-.IR dlpi_phdr ,
-and
-.I dlpi_phnum
-in addition to other implementation-specific fields.
-.PP
-Future versions of the C library may add further fields to the
-.I dl_phdr_info
-structure; in that event, the
-.I size
-argument provides a mechanism for the callback function to discover
-whether it is running on a system with added fields.
-.SH STANDARDS
-None.
-.SH HISTORY
-glibc 2.2.4.
-.SH NOTES
-The first object visited by
-.I callback
-is the main program.
-For the main program, the
-.I dlpi_name
-field will be an empty string.
-.SH EXAMPLES
-The following program displays a list of pathnames of the
-shared objects it has loaded.
-For each shared object, the program lists some information
-(virtual address, size, flags, and type)
-for each of the objects ELF segments.
-.PP
-The following shell session demonstrates the output
-produced by the program on an x86-64 system.
-The first shared object for which output is displayed
-(where the name is an empty string)
-is the main program.
-.PP
-.in +4n
-.EX
-$ \fB./a.out\fP
-Name: "" (9 segments)
- 0: [ 0x400040; memsz: 1f8] flags: 0x5; PT_PHDR
- 1: [ 0x400238; memsz: 1c] flags: 0x4; PT_INTERP
- 2: [ 0x400000; memsz: ac4] flags: 0x5; PT_LOAD
- 3: [ 0x600e10; memsz: 240] flags: 0x6; PT_LOAD
- 4: [ 0x600e28; memsz: 1d0] flags: 0x6; PT_DYNAMIC
- 5: [ 0x400254; memsz: 44] flags: 0x4; PT_NOTE
- 6: [ 0x400970; memsz: 3c] flags: 0x4; PT_GNU_EH_FRAME
- 7: [ (nil); memsz: 0] flags: 0x6; PT_GNU_STACK
- 8: [ 0x600e10; memsz: 1f0] flags: 0x4; PT_GNU_RELRO
-Name: "linux\-vdso.so.1" (4 segments)
- 0: [0x7ffc6edd1000; memsz: e89] flags: 0x5; PT_LOAD
- 1: [0x7ffc6edd1360; memsz: 110] flags: 0x4; PT_DYNAMIC
- 2: [0x7ffc6edd17b0; memsz: 3c] flags: 0x4; PT_NOTE
- 3: [0x7ffc6edd17ec; memsz: 3c] flags: 0x4; PT_GNU_EH_FRAME
-Name: "/lib64/libc.so.6" (10 segments)
- 0: [0x7f55712ce040; memsz: 230] flags: 0x5; PT_PHDR
- 1: [0x7f557145b980; memsz: 1c] flags: 0x4; PT_INTERP
- 2: [0x7f55712ce000; memsz: 1b6a5c] flags: 0x5; PT_LOAD
- 3: [0x7f55716857a0; memsz: 9240] flags: 0x6; PT_LOAD
- 4: [0x7f5571688b80; memsz: 1f0] flags: 0x6; PT_DYNAMIC
- 5: [0x7f55712ce270; memsz: 44] flags: 0x4; PT_NOTE
- 6: [0x7f55716857a0; memsz: 78] flags: 0x4; PT_TLS
- 7: [0x7f557145b99c; memsz: 544c] flags: 0x4; PT_GNU_EH_FRAME
- 8: [0x7f55712ce000; memsz: 0] flags: 0x6; PT_GNU_STACK
- 9: [0x7f55716857a0; memsz: 3860] flags: 0x4; PT_GNU_RELRO
-Name: "/lib64/ld\-linux\-x86\-64.so.2" (7 segments)
- 0: [0x7f557168f000; memsz: 20828] flags: 0x5; PT_LOAD
- 1: [0x7f55718afba0; memsz: 15a8] flags: 0x6; PT_LOAD
- 2: [0x7f55718afe10; memsz: 190] flags: 0x6; PT_DYNAMIC
- 3: [0x7f557168f1c8; memsz: 24] flags: 0x4; PT_NOTE
- 4: [0x7f55716acec4; memsz: 604] flags: 0x4; PT_GNU_EH_FRAME
- 5: [0x7f557168f000; memsz: 0] flags: 0x6; PT_GNU_STACK
- 6: [0x7f55718afba0; memsz: 460] flags: 0x4; PT_GNU_RELRO
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (dl_iterate_phdr.c)
-.EX
-#define _GNU_SOURCE
-#include <link.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-static int
-callback(struct dl_phdr_info *info, size_t size, void *data)
-{
- char *type;
- int p_type;
-\&
- printf("Name: \e"%s\e" (%d segments)\en", info\->dlpi_name,
- info\->dlpi_phnum);
-\&
- for (size_t j = 0; j < info\->dlpi_phnum; j++) {
- p_type = info\->dlpi_phdr[j].p_type;
- type = (p_type == PT_LOAD) ? "PT_LOAD" :
- (p_type == PT_DYNAMIC) ? "PT_DYNAMIC" :
- (p_type == PT_INTERP) ? "PT_INTERP" :
- (p_type == PT_NOTE) ? "PT_NOTE" :
- (p_type == PT_INTERP) ? "PT_INTERP" :
- (p_type == PT_PHDR) ? "PT_PHDR" :
- (p_type == PT_TLS) ? "PT_TLS" :
- (p_type == PT_GNU_EH_FRAME) ? "PT_GNU_EH_FRAME" :
- (p_type == PT_GNU_STACK) ? "PT_GNU_STACK" :
- (p_type == PT_GNU_RELRO) ? "PT_GNU_RELRO" : NULL;
-\&
- printf(" %2zu: [%14p; memsz:%7jx] flags: %#jx; ", j,
- (void *) (info\->dlpi_addr + info\->dlpi_phdr[j].p_vaddr),
- (uintmax_t) info\->dlpi_phdr[j].p_memsz,
- (uintmax_t) info\->dlpi_phdr[j].p_flags);
- if (type != NULL)
- printf("%s\en", type);
- else
- printf("[other (%#x)]\en", p_type);
- }
-\&
- return 0;
-}
-\&
-int
-main(void)
-{
- dl_iterate_phdr(callback, NULL);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR ldd (1),
-.BR objdump (1),
-.BR readelf (1),
-.BR dladdr (3),
-.BR dlopen (3),
-.BR elf (5),
-.BR ld.so (8)
-.PP
-.IR "Executable and Linking Format Specification" ,
-available at various locations online.
diff --git a/man3/dladdr.3 b/man3/dladdr.3
deleted file mode 100644
index e7a25d687..000000000
--- a/man3/dladdr.3
+++ /dev/null
@@ -1,278 +0,0 @@
-'\" t
-.\" Copyright (C) 2015 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (C) 2008 Petr Baudis <pasky@suse.cz> (dladdr caveat)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH dladdr 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-dladdr, dladdr1 \- translate address to symbolic information
-.SH LIBRARY
-Dynamic linking library
-.RI ( libdl ", " \-ldl )
-.SH SYNOPSIS
-.nf
-.B #define _GNU_SOURCE
-.B #include <dlfcn.h>
-.PP
-.BI "int dladdr(const void *" addr ", Dl_info *" info );
-.BI "int dladdr1(const void *" addr ", Dl_info *" info ", void **" extra_info ,
-.BI " int " flags );
-.fi
-.SH DESCRIPTION
-The function
-.BR dladdr ()
-determines whether the address specified in
-.I addr
-is located in one of the shared objects loaded by the calling application.
-If it is, then
-.BR dladdr ()
-returns information about the shared object and symbol that overlaps
-.IR addr .
-This information is returned in a
-.I Dl_info
-structure:
-.PP
-.in +4n
-.EX
-typedef struct {
- const char *dli_fname; /* Pathname of shared object that
- contains address */
- void *dli_fbase; /* Base address at which shared
- object is loaded */
- const char *dli_sname; /* Name of symbol whose definition
- overlaps \fIaddr\fP */
- void *dli_saddr; /* Exact address of symbol named
- in \fIdli_sname\fP */
-} Dl_info;
-.EE
-.in
-.PP
-If no symbol matching
-.I addr
-could be found, then
-.I dli_sname
-and
-.I dli_saddr
-are set to NULL.
-.PP
-The function
-.BR dladdr1 ()
-is like
-.BR dladdr (),
-but returns additional information via the argument
-.IR extra_info .
-The information returned depends on the value specified in
-.IR flags ,
-which can have one of the following values:
-.TP
-.B RTLD_DL_LINKMAP
-Obtain a pointer to the link map for the matched file.
-The
-.I extra_info
-argument points to a pointer to a
-.I link_map
-structure (i.e.,
-.IR "struct link_map\~**" ),
-defined in
-.I <link.h>
-as:
-.IP
-.in +4n
-.EX
-struct link_map {
- ElfW(Addr) l_addr; /* Difference between the
- address in the ELF file and
- the address in memory */
- char *l_name; /* Absolute pathname where
- object was found */
- ElfW(Dyn) *l_ld; /* Dynamic section of the
- shared object */
- struct link_map *l_next, *l_prev;
- /* Chain of loaded objects */
-\&
- /* Plus additional fields private to the
- implementation */
-};
-.EE
-.in
-.TP
-.B RTLD_DL_SYMENT
-Obtain a pointer to the ELF symbol table entry of the matching symbol.
-The
-.I extra_info
-argument is a pointer to a symbol pointer:
-.IR "const ElfW(Sym) **" .
-The
-.IR ElfW ()
-macro definition turns its argument into the name of an ELF data
-type suitable for the hardware architecture.
-For example, on a 64-bit platform,
-.I ElfW(Sym)
-yields the data type name
-.IR Elf64_Sym ,
-which is defined in
-.I <elf.h>
-as:
-.IP
-.in +4n
-.EX
-typedef struct {
- Elf64_Word st_name; /* Symbol name */
- unsigned char st_info; /* Symbol type and binding */
- unsigned char st_other; /* Symbol visibility */
- Elf64_Section st_shndx; /* Section index */
- Elf64_Addr st_value; /* Symbol value */
- Elf64_Xword st_size; /* Symbol size */
-} Elf64_Sym;
-.EE
-.in
-.IP
-The
-.I st_name
-field is an index into the string table.
-.IP
-The
-.I st_info
-field encodes the symbol's type and binding.
-The type can be extracted using the macro
-.B ELF64_ST_TYPE(st_info)
-(or
-.B ELF32_ST_TYPE()
-on 32-bit platforms), which yields one of the following values:
-.in +4n
-.TS
-lb lb
-lb l.
-Value Description
-STT_NOTYPE Symbol type is unspecified
-STT_OBJECT Symbol is a data object
-STT_FUNC Symbol is a code object
-STT_SECTION Symbol associated with a section
-STT_FILE Symbol's name is filename
-STT_COMMON Symbol is a common data object
-STT_TLS Symbol is thread-local data object
-STT_GNU_IFUNC Symbol is indirect code object
-.TE
-.in
-.IP
-The symbol binding can be extracted from the
-.I st_info
-field using the macro
-.B ELF64_ST_BIND(st_info)
-(or
-.B ELF32_ST_BIND()
-on 32-bit platforms), which yields one of the following values:
-.in +4n
-.TS
-lb lb
-lb l.
-Value Description
-STB_LOCAL Local symbol
-STB_GLOBAL Global symbol
-STB_WEAK Weak symbol
-STB_GNU_UNIQUE Unique symbol
-.TE
-.in
-.IP
-The
-.I st_other
-field contains the symbol's visibility, which can be extracted using the macro
-.B ELF64_ST_VISIBILITY(st_info)
-(or
-.B ELF32_ST_VISIBILITY()
-on 32-bit platforms), which yields one of the following values:
-.in +4n
-.TS
-lb lb
-lb l.
-Value Description
-STV_DEFAULT Default symbol visibility rules
-STV_INTERNAL Processor-specific hidden class
-STV_HIDDEN Symbol unavailable in other modules
-STV_PROTECTED Not preemptible, not exported
-.TE
-.in
-.SH RETURN VALUE
-On success, these functions return a nonzero value.
-If the address specified in
-.I addr
-could be matched to a shared object,
-but not to a symbol in the shared object, then the
-.I info\->dli_sname
-and
-.I info\->dli_saddr
-fields are set to NULL.
-.PP
-If the address specified in
-.I addr
-could not be matched to a shared object, then these functions return 0.
-In this case, an error message is
-.I not
-.\" According to the FreeBSD man page, dladdr1() does signal an
-.\" error via dlerror() for this case.
-available via
-.BR dlerror (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR dladdr (),
-.BR dladdr1 ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH HISTORY
-.TP
-.BR dladdr ()
-glibc 2.0.
-.TP
-.BR dladdr1 ()
-glibc 2.3.3.
-.PP
-Solaris.
-.SH BUGS
-Sometimes, the function pointers you pass to
-.BR dladdr ()
-may surprise you.
-On some architectures (notably i386 and x86-64),
-.I dli_fname
-and
-.I dli_fbase
-may end up pointing back at the object from which you called
-.BR dladdr (),
-even if the function used as an argument should come from
-a dynamically linked library.
-.PP
-The problem is that the function pointer will still be resolved
-at compile time, but merely point to the
-.I plt
-(Procedure Linkage Table)
-section of the original object (which dispatches the call after
-asking the dynamic linker to resolve the symbol).
-To work around this,
-you can try to compile the code to be position-independent:
-then, the compiler cannot prepare the pointer
-at compile time any more and
-.BR gcc (1)
-will generate code that just loads the final symbol address from the
-.I got
-(Global Offset Table) at run time before passing it to
-.BR dladdr ().
-.SH SEE ALSO
-.BR dl_iterate_phdr (3),
-.BR dlinfo (3),
-.BR dlopen (3),
-.BR dlsym (3),
-.BR ld.so (8)
diff --git a/man3/dladdr1.3 b/man3/dladdr1.3
deleted file mode 100644
index 43979e52a..000000000
--- a/man3/dladdr1.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/dladdr.3
diff --git a/man3/dlclose.3 b/man3/dlclose.3
deleted file mode 100644
index 15d096806..000000000
--- a/man3/dlclose.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/dlopen.3
diff --git a/man3/dlerror.3 b/man3/dlerror.3
deleted file mode 100644
index 39e0f7889..000000000
--- a/man3/dlerror.3
+++ /dev/null
@@ -1,81 +0,0 @@
-'\" t
-.\" Copyright 1995 Yggdrasil Computing, Incorporated.
-.\" and Copyright 2015 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH dlerror 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-dlerror \- obtain error diagnostic for functions in the dlopen API
-.SH LIBRARY
-Dynamic linking library
-.RI ( libdl ", " \-ldl )
-.SH SYNOPSIS
-.nf
-.B #include <dlfcn.h>
-.PP
-.B "char *dlerror(void);"
-.fi
-.SH DESCRIPTION
-The
-.BR dlerror ()
-function returns a human-readable,
-null-terminated string describing the most recent error
-that occurred from a call to one of the functions in the dlopen API
-since the last call to
-.BR dlerror ().
-The returned string does
-.I not
-include a trailing newline.
-.PP
-.BR dlerror ()
-returns NULL if no errors have occurred since initialization or since
-it was last called.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR dlerror ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.0.
-POSIX.1-2001.
-.PP
-SunOS.
-.SH NOTES
-The message returned by
-.BR dlerror ()
-may reside in a statically allocated buffer that is
-overwritten by subsequent
-.BR dlerror ()
-calls.
-.\" .LP
-.\" The string returned by
-.\" .BR dlerror ()
-.\" should not be modified.
-.\" Some systems give the prototype as
-.\" .sp
-.\" .in +5
-.\" .B "const char *dlerror(void);"
-.\" .in
-.SH EXAMPLES
-See
-.BR dlopen (3).
-.SH SEE ALSO
-.BR dladdr (3),
-.BR dlinfo (3),
-.BR dlopen (3),
-.BR dlsym (3)
diff --git a/man3/dlinfo.3 b/man3/dlinfo.3
deleted file mode 100644
index 96ef06829..000000000
--- a/man3/dlinfo.3
+++ /dev/null
@@ -1,320 +0,0 @@
-'\" t
-.\" Copyright (C) 2015 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH dlinfo 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-dlinfo \- obtain information about a dynamically loaded object
-.SH LIBRARY
-Dynamic linking library
-.RI ( libdl ", " \-ldl )
-.SH SYNOPSIS
-.nf
-.B #define _GNU_SOURCE
-.B #include <link.h>
-.B #include <dlfcn.h>
-.PP
-.BR "int dlinfo(void *restrict " handle ", int " request \
-", void *restrict " info );
-.fi
-.SH DESCRIPTION
-The
-.BR dlinfo ()
-function obtains information about the dynamically loaded object
-referred to by
-.I handle
-(typically obtained by an earlier call to
-.BR dlopen (3)
-or
-.BR dlmopen (3)).
-The
-.I request
-argument specifies which information is to be returned.
-The
-.I info
-argument is a pointer to a buffer used to store information
-returned by the call; the type of this argument depends on
-.IR request .
-.PP
-The following values are supported for
-.I request
-(with the corresponding type for
-.I info
-shown in parentheses):
-.TP
-.BR RTLD_DI_LMID " (\fILmid_t *\fP)"
-Obtain the ID of the link-map list (namespace) in which
-.I handle
-is loaded.
-.TP
-.BR RTLD_DI_LINKMAP " (\fIstruct link_map **\fP)"
-Obtain a pointer to the
-.I link_map
-structure corresponding to
-.IR handle .
-The
-.I info
-argument points to a pointer to a
-.I link_map
-structure, defined in
-.I <link.h>
-as:
-.IP
-.in +4n
-.EX
-struct link_map {
- ElfW(Addr) l_addr; /* Difference between the
- address in the ELF file and
- the address in memory */
- char *l_name; /* Absolute pathname where
- object was found */
- ElfW(Dyn) *l_ld; /* Dynamic section of the
- shared object */
- struct link_map *l_next, *l_prev;
- /* Chain of loaded objects */
-\&
- /* Plus additional fields private to the
- implementation */
-};
-.EE
-.in
-.TP
-.BR RTLD_DI_ORIGIN " (\fIchar *\fP)"
-Copy the pathname of the origin of the shared object corresponding to
-.I handle
-to the location pointed to by
-.IR info .
-.TP
-.BR RTLD_DI_SERINFO " (\fIDl_serinfo *\fP)"
-Obtain the library search paths for the shared object referred to by
-.IR handle .
-The
-.I info
-argument is a pointer to a
-.I Dl_serinfo
-that contains the search paths.
-Because the number of search paths may vary,
-the size of the structure pointed to by
-.I info
-can vary.
-The
-.B RTLD_DI_SERINFOSIZE
-request described below allows applications to size the buffer suitably.
-The caller must perform the following steps:
-.RS
-.IP (1) 5
-Use a
-.B RTLD_DI_SERINFOSIZE
-request to populate a
-.I Dl_serinfo
-structure with the size
-.RI ( dls_size )
-of the structure needed for the subsequent
-.B RTLD_DI_SERINFO
-request.
-.IP (2)
-Allocate a
-.I Dl_serinfo
-buffer of the correct size
-.RI ( dls_size ).
-.IP (3)
-Use a further
-.B RTLD_DI_SERINFOSIZE
-request to populate the
-.I dls_size
-and
-.I dls_cnt
-fields of the buffer allocated in the previous step.
-.IP (4)
-Use a
-.B RTLD_DI_SERINFO
-to obtain the library search paths.
-.RE
-.IP
-The
-.I Dl_serinfo
-structure is defined as follows:
-.IP
-.in +4n
-.EX
-typedef struct {
- size_t dls_size; /* Size in bytes of
- the whole buffer */
- unsigned int dls_cnt; /* Number of elements
- in \[aq]dls_serpath\[aq] */
- Dl_serpath dls_serpath[1]; /* Actually longer,
- \[aq]dls_cnt\[aq] elements */
-} Dl_serinfo;
-.EE
-.in
-.IP
-Each of the
-.I dls_serpath
-elements in the above structure is a structure of the following form:
-.IP
-.in +4n
-.EX
-typedef struct {
- char *dls_name; /* Name of library search
- path directory */
- unsigned int dls_flags; /* Indicates where this
- directory came from */
-} Dl_serpath;
-.EE
-.in
-.IP
-The
-.I dls_flags
-field is currently unused, and always contains zero.
-.TP
-.BR RTLD_DI_SERINFOSIZE " (\fIDl_serinfo *\fP)"
-Populate the
-.I dls_size
-and
-.I dls_cnt
-fields of the
-.I Dl_serinfo
-structure pointed to by
-.I info
-with values suitable for allocating a buffer for use in a subsequent
-.B RTLD_DI_SERINFO
-request.
-.TP
-.BR RTLD_DI_TLS_MODID " (\fIsize_t *\fP, since glibc 2.4)"
-Obtain the module ID of this shared object's TLS (thread-local storage)
-segment, as used in TLS relocations.
-If this object does not define a TLS segment, zero is placed in
-.IR *info .
-.TP
-.BR RTLD_DI_TLS_DATA " (\fIvoid **\fP, since glibc 2.4)"
-Obtain a pointer to the calling
-thread's TLS block corresponding to this shared object's TLS segment.
-If this object does not define a PT_TLS segment,
-or if the calling thread has not allocated a block for it,
-NULL is placed in
-.IR *info .
-.SH RETURN VALUE
-On success,
-.BR dlinfo ()
-returns 0.
-On failure, it returns \-1; the cause of the error can be diagnosed using
-.BR dlerror (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR dlinfo ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The sets of requests supported by the various implementations
-overlaps only partially.
-.SH STANDARDS
-GNU.
-.SH HISTORY
-glibc 2.3.3.
-Solaris.
-.SH EXAMPLES
-The program below opens a shared objects using
-.BR dlopen (3)
-and then uses the
-.B RTLD_DI_SERINFOSIZE
-and
-.B RTLD_DI_SERINFO
-requests to obtain the library search path list for the library.
-Here is an example of what we might see when running the program:
-.PP
-.in +4n
-.EX
-$ \fB./a.out /lib64/libm.so.6\fP
-dls_serpath[0].dls_name = /lib64
-dls_serpath[1].dls_name = /usr/lib64
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (dlinfo.c)
-.EX
-#define _GNU_SOURCE
-#include <dlfcn.h>
-#include <link.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(int argc, char *argv[])
-{
- void *handle;
- Dl_serinfo serinfo;
- Dl_serinfo *sip;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s <libpath>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- /* Obtain a handle for shared object specified on command line. */
-\&
- handle = dlopen(argv[1], RTLD_NOW);
- if (handle == NULL) {
- fprintf(stderr, "dlopen() failed: %s\en", dlerror());
- exit(EXIT_FAILURE);
- }
-\&
- /* Discover the size of the buffer that we must pass to
- RTLD_DI_SERINFO. */
-\&
- if (dlinfo(handle, RTLD_DI_SERINFOSIZE, &serinfo) == \-1) {
- fprintf(stderr, "RTLD_DI_SERINFOSIZE failed: %s\en", dlerror());
- exit(EXIT_FAILURE);
- }
-\&
- /* Allocate the buffer for use with RTLD_DI_SERINFO. */
-\&
- sip = malloc(serinfo.dls_size);
- if (sip == NULL) {
- perror("malloc");
- exit(EXIT_FAILURE);
- }
-\&
- /* Initialize the \[aq]dls_size\[aq] and \[aq]dls_cnt\[aq] fields in the newly
- allocated buffer. */
-\&
- if (dlinfo(handle, RTLD_DI_SERINFOSIZE, sip) == \-1) {
- fprintf(stderr, "RTLD_DI_SERINFOSIZE failed: %s\en", dlerror());
- exit(EXIT_FAILURE);
- }
-\&
- /* Fetch and print library search list. */
-\&
- if (dlinfo(handle, RTLD_DI_SERINFO, sip) == \-1) {
- fprintf(stderr, "RTLD_DI_SERINFO failed: %s\en", dlerror());
- exit(EXIT_FAILURE);
- }
-\&
- for (size_t j = 0; j < serinfo.dls_cnt; j++)
- printf("dls_serpath[%zu].dls_name = %s\en",
- j, sip\->dls_serpath[j].dls_name);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR dl_iterate_phdr (3),
-.BR dladdr (3),
-.BR dlerror (3),
-.BR dlopen (3),
-.BR dlsym (3),
-.BR ld.so (8)
diff --git a/man3/dlmopen.3 b/man3/dlmopen.3
deleted file mode 100644
index 15d096806..000000000
--- a/man3/dlmopen.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/dlopen.3
diff --git a/man3/dlopen.3 b/man3/dlopen.3
deleted file mode 100644
index a21e6e1b4..000000000
--- a/man3/dlopen.3
+++ /dev/null
@@ -1,627 +0,0 @@
-'\" t
-.\" Copyright 1995 Yggdrasil Computing, Incorporated.
-.\" written by Adam J. Richter (adam@yggdrasil.com),
-.\" with typesetting help from Daniel Quinlan (quinlan@yggdrasil.com).
-.\" and Copyright 2003, 2015 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified by David A. Wheeler <dwheeler@dwheeler.com> 2000-11-28.
-.\" Applied patch by Terran Melconian, aeb, 2001-12-14.
-.\" Modified by Hacksaw <hacksaw@hacksaw.org> 2003-03-13.
-.\" Modified by Matt Domsch, 2003-04-09: _init and _fini obsolete
-.\" Modified by Michael Kerrisk <mtk.manpages@gmail.com> 2003-05-16.
-.\" Modified by Walter Harms: dladdr, dlvsym
-.\" Modified by Petr Baudis <pasky@suse.cz>, 2008-12-04: dladdr caveat
-.\"
-.TH dlopen 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-dlclose, dlopen, dlmopen \-
-open and close a shared object
-.SH LIBRARY
-Dynamic linking library
-.RI ( libdl ", " \-ldl )
-.SH SYNOPSIS
-.nf
-.B #include <dlfcn.h>
-.PP
-.BI "void *dlopen(const char *" filename ", int " flags );
-.BI "int dlclose(void *" handle );
-.PP
-.B #define _GNU_SOURCE
-.br
-.B #include <dlfcn.h>
-.PP
-.BI "void *dlmopen(Lmid_t " lmid ", const char *" filename ", int " flags );
-.fi
-.SH DESCRIPTION
-.SS dlopen()
-The function
-.BR dlopen ()
-loads the dynamic shared object (shared library)
-file named by the null-terminated
-string
-.I filename
-and returns an opaque "handle" for the loaded object.
-This handle is employed with other functions in the dlopen API, such as
-.BR dlsym (3),
-.BR dladdr (3),
-.BR dlinfo (3),
-and
-.BR dlclose ().
-.PP
-If
-.I filename
-.\" FIXME On Solaris, when handle is NULL, we seem to get back
-.\" a handle for (something like) the root of the namespace.
-.\" The point here is that if we do a dlmopen(LM_ID_NEWLM), then
-.\" the filename==NULL case returns a different handle than
-.\" in the initial namespace. But, on glibc, the same handle is
-.\" returned. This is probably a bug in glibc.
-.\"
-is NULL, then the returned handle is for the main program.
-If
-.I filename
-contains a slash ("/"), then it is interpreted as a (relative
-or absolute) pathname.
-Otherwise, the dynamic linker searches for the object as follows
-(see
-.BR ld.so (8)
-for further details):
-.IP \[bu] 3
-(ELF only) If the calling object
-(i.e., the shared library or executable from which
-.BR dlopen ()
-is called)
-contains a DT_RPATH tag, and does not contain a DT_RUNPATH tag,
-then the directories listed in the DT_RPATH tag are searched.
-.IP \[bu]
-If, at the time that the program was started, the environment variable
-.B LD_LIBRARY_PATH
-was defined to contain a colon-separated list of directories,
-then these are searched.
-(As a security measure, this variable is ignored for set-user-ID and
-set-group-ID programs.)
-.IP \[bu]
-(ELF only) If the calling object
-contains a DT_RUNPATH tag, then the directories listed in that tag
-are searched.
-.IP \[bu]
-The cache file
-.I /etc/ld.so.cache
-(maintained by
-.BR ldconfig (8))
-is checked to see whether it contains an entry for
-.IR filename .
-.IP \[bu]
-The directories
-.I /lib
-and
-.I /usr/lib
-are searched (in that order).
-.PP
-If the object specified by
-.I filename
-has dependencies on other shared objects,
-then these are also automatically loaded by the dynamic linker
-using the same rules.
-(This process may occur recursively,
-if those objects in turn have dependencies, and so on.)
-.PP
-One of the following two values must be included in
-.IR flags :
-.TP
-.B RTLD_LAZY
-Perform lazy binding.
-Resolve symbols only as the code that references them is executed.
-If the symbol is never referenced, then it is never resolved.
-(Lazy binding is performed only for function references;
-references to variables are always immediately bound when
-the shared object is loaded.)
-Since glibc 2.1.1,
-.\" commit 12b5b6b7f78ea111e89bbf638294a5413c791072
-this flag is overridden by the effect of the
-.B LD_BIND_NOW
-environment variable.
-.TP
-.B RTLD_NOW
-If this value is specified, or the environment variable
-.B LD_BIND_NOW
-is set to a nonempty string,
-all undefined symbols in the shared object are resolved before
-.BR dlopen ()
-returns.
-If this cannot be done, an error is returned.
-.PP
-Zero or more of the following values may also be ORed in
-.IR flags :
-.TP
-.B RTLD_GLOBAL
-The symbols defined by this shared object will be
-made available for symbol resolution of subsequently loaded shared objects.
-.TP
-.B RTLD_LOCAL
-This is the converse of
-.BR RTLD_GLOBAL ,
-and the default if neither flag is specified.
-Symbols defined in this shared object are not made available to resolve
-references in subsequently loaded shared objects.
-.TP
-.BR RTLD_NODELETE " (since glibc 2.2)"
-Do not unload the shared object during
-.BR dlclose ().
-Consequently, the object's static and global variables are not reinitialized
-if the object is reloaded with
-.BR dlopen ()
-at a later time.
-.TP
-.BR RTLD_NOLOAD " (since glibc 2.2)"
-Don't load the shared object.
-This can be used to test if the object is already resident
-.RB ( dlopen ()
-returns NULL if it is not, or the object's handle if it is resident).
-This flag can also be used to promote the flags on a shared object
-that is already loaded.
-For example, a shared object that was previously loaded with
-.B RTLD_LOCAL
-can be reopened with
-.BR RTLD_NOLOAD\ |\ RTLD_GLOBAL .
-.\"
-.TP
-.BR RTLD_DEEPBIND " (since glibc 2.3.4)"
-.\" Inimitably described by UD in
-.\" http://sources.redhat.com/ml/libc-hacker/2004-09/msg00083.html.
-Place the lookup scope of the symbols in this
-shared object ahead of the global scope.
-This means that a self-contained object will use
-its own symbols in preference to global symbols with the same name
-contained in objects that have already been loaded.
-.PP
-If
-.I filename
-is NULL, then the returned handle is for the main program.
-When given to
-.BR dlsym (3),
-this handle causes a search for a symbol in the main program,
-followed by all shared objects loaded at program startup,
-and then all shared objects loaded by
-.BR dlopen ()
-with the flag
-.BR RTLD_GLOBAL .
-.PP
-Symbol references in the shared object are resolved using (in order):
-symbols in the link map of objects loaded for the main program and its
-dependencies;
-symbols in shared objects (and their dependencies)
-that were previously opened with
-.BR dlopen ()
-using the
-.B RTLD_GLOBAL
-flag;
-and definitions in the shared object itself
-(and any dependencies that were loaded for that object).
-.PP
-Any global symbols in the executable that were placed into
-its dynamic symbol table by
-.BR ld (1)
-can also be used to resolve references in a dynamically loaded shared object.
-Symbols may be placed in the dynamic symbol table
-either because the executable was linked with the flag "\-rdynamic"
-(or, synonymously, "\-\-export\-dynamic"), which causes all of
-the executable's global symbols to be placed in the dynamic symbol table,
-or because
-.BR ld (1)
-noted a dependency on a symbol in another object during static linking.
-.PP
-If the same shared object is opened again with
-.BR dlopen (),
-the same object handle is returned.
-The dynamic linker maintains reference
-counts for object handles, so a dynamically loaded shared object is not
-deallocated until
-.BR dlclose ()
-has been called on it as many times as
-.BR dlopen ()
-has succeeded on it.
-Constructors (see below) are called only when the object is actually loaded
-into memory (i.e., when the reference count increases to 1).
-.PP
-A subsequent
-.BR dlopen ()
-call that loads the same shared object with
-.B RTLD_NOW
-may force symbol resolution for a shared object earlier loaded with
-.BR RTLD_LAZY .
-Similarly, an object that was previously opened with
-.B RTLD_LOCAL
-can be promoted to
-.B RTLD_GLOBAL
-in a subsequent
-.BR dlopen ().
-.PP
-If
-.BR dlopen ()
-fails for any reason, it returns NULL.
-.\"
-.SS dlmopen()
-This function performs the same task as
-.BR dlopen ()\[em]the
-.I filename
-and
-.I flags
-arguments, as well as the return value, are the same,
-except for the differences noted below.
-.PP
-The
-.BR dlmopen ()
-function differs from
-.BR dlopen ()
-primarily in that it accepts an additional argument,
-.IR lmid ,
-that specifies the link-map list (also referred to as a
-.IR namespace )
-in which the shared object should be loaded.
-(By comparison,
-.BR dlopen ()
-adds the dynamically loaded shared object to the same namespace as
-the shared object from which the
-.BR dlopen ()
-call is made.)
-The
-.I Lmid_t
-type is an opaque handle that refers to a namespace.
-.PP
-The
-.I lmid
-argument is either the ID of an existing namespace
-.\" FIXME: Is using dlinfo() RTLD_DI_LMID the right technique?
-(which can be obtained using the
-.BR dlinfo (3)
-.B RTLD_DI_LMID
-request) or one of the following special values:
-.TP
-.B LM_ID_BASE
-Load the shared object in the initial namespace
-(i.e., the application's namespace).
-.TP
-.B LM_ID_NEWLM
-Create a new namespace and load the shared object in that namespace.
-The object must have been correctly linked
-to reference all of the other shared objects that it requires,
-since the new namespace is initially empty.
-.PP
-If
-.I filename
-is NULL, then the only permitted value for
-.I lmid
-is
-.BR LM_ID_BASE .
-.SS dlclose()
-The function
-.BR dlclose ()
-decrements the reference count on the
-dynamically loaded shared object referred to by
-.IR handle .
-.PP
-If the object's reference count drops to zero
-and no symbols in this object are required by other objects,
-then the object is unloaded
-after first calling any destructors defined for the object.
-(Symbols in this object might be required in another object
-because this object was opened with the
-.B RTLD_GLOBAL
-flag and one of its symbols satisfied a relocation in another object.)
-.PP
-All shared objects that were automatically loaded when
-.BR dlopen ()
-was invoked on the object referred to by
-.I handle
-are recursively closed in the same manner.
-.PP
-A successful return from
-.BR dlclose ()
-does not guarantee that the symbols associated with
-.I handle
-are removed from the caller's address space.
-In addition to references resulting from explicit
-.BR dlopen ()
-calls, a shared object may have been implicitly loaded
-(and reference counted) because of dependencies in other shared objects.
-Only when all references have been released can the shared object
-be removed from the address space.
-.SH RETURN VALUE
-On success,
-.BR dlopen ()
-and
-.BR dlmopen ()
-return a non-NULL handle for the loaded object.
-On error
-(file could not be found, was not readable, had the wrong format,
-or caused errors during loading),
-these functions return NULL.
-.PP
-On success,
-.BR dlclose ()
-returns 0; on error, it returns a nonzero value.
-.PP
-Errors from these functions can be diagnosed using
-.BR dlerror (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR dlopen (),
-.BR dlmopen (),
-.BR dlclose ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR dlopen ()
-.TQ
-.BR dlclose ()
-POSIX.1-2008.
-.TP
-.BR dlmopen ()
-.TQ
-.B RTLD_NOLOAD
-.TQ
-.B RTLD_NODELETE
-GNU.
-.TP
-.B RTLD_DEEPBIND
-Solaris.
-.SH HISTORY
-.TP
-.BR dlopen ()
-.TQ
-.BR dlclose ()
-glibc 2.0.
-POSIX.1-2001.
-.TP
-.BR dlmopen ()
-glibc 2.3.4.
-.SH NOTES
-.SS dlmopen() and namespaces
-A link-map list defines an isolated namespace for the
-resolution of symbols by the dynamic linker.
-Within a namespace,
-dependent shared objects are implicitly loaded according to the usual rules,
-and symbol references are likewise resolved according to the usual rules,
-but such resolution is confined to the definitions provided by the
-objects that have been (explicitly and implicitly) loaded into the namespace.
-.PP
-The
-.BR dlmopen ()
-function permits object-load isolation\[em]the ability
-to load a shared object in a new namespace without
-exposing the rest of the application to the symbols
-made available by the new object.
-Note that the use of the
-.B RTLD_LOCAL
-flag is not sufficient for this purpose,
-since it prevents a shared object's symbols from being available to
-.I any
-other shared object.
-In some cases,
-we may want to make the symbols provided by a dynamically
-loaded shared object available to (a subset of) other shared objects
-without exposing those symbols to the entire application.
-This can be achieved by using a separate namespace and the
-.B RTLD_GLOBAL
-flag.
-.PP
-The
-.BR dlmopen ()
-function also can be used to provide better isolation than the
-.B RTLD_LOCAL
-flag.
-In particular, shared objects loaded with
-.B RTLD_LOCAL
-may be promoted to
-.B RTLD_GLOBAL
-if they are dependencies of another shared object loaded with
-.BR RTLD_GLOBAL .
-Thus,
-.B RTLD_LOCAL
-is insufficient to isolate a loaded shared object except in the (uncommon)
-case where one has explicit control over all shared object dependencies.
-.PP
-Possible uses of
-.BR dlmopen ()
-are plugins where the author of the plugin-loading framework
-can't trust the plugin authors and does not wish
-any undefined symbols from the plugin framework to be resolved to plugin
-symbols.
-Another use is to load the same object more than once.
-Without the use of
-.BR dlmopen (),
-this would require the creation of distinct copies of the shared object file.
-Using
-.BR dlmopen (),
-this can be achieved by loading the same shared object file into
-different namespaces.
-.PP
-The glibc implementation supports a maximum of
-.\" DL_NNS
-16 namespaces.
-.\"
-.SS Initialization and finalization functions
-Shared objects may export functions using the
-.B __attribute__((constructor))
-and
-.B __attribute__((destructor))
-function attributes.
-Constructor functions are executed before
-.BR dlopen ()
-returns, and destructor functions are executed before
-.BR dlclose ()
-returns.
-A shared object may export multiple constructors and destructors,
-and priorities can be associated with each function
-to determine the order in which they are executed.
-See the
-.B gcc
-info pages (under "Function attributes")
-.\" info gcc "C Extensions" "Function attributes"
-for further information.
-.PP
-An older method of (partially) achieving the same result is via the use of
-two special symbols recognized by the linker:
-.B _init
-and
-.BR _fini .
-If a dynamically loaded shared object exports a routine named
-.BR _init (),
-then that code is executed after loading a shared object, before
-.BR dlopen ()
-returns.
-If the shared object exports a routine named
-.BR _fini (),
-then that routine is called just before the object is unloaded.
-In this case, one must avoid linking against the system startup files,
-which contain default versions of these files;
-this can be done by using the
-.BR gcc (1)
-.I \-nostartfiles
-command-line option.
-.PP
-Use of
-.B _init
-and
-.B _fini
-is now deprecated in favor of the aforementioned
-constructors and destructors,
-which among other advantages,
-permit multiple initialization and finalization functions to be defined.
-.\"
-.\" Using these routines, or the gcc
-.\" .B \-nostartfiles
-.\" or
-.\" .B \-nostdlib
-.\" options, is not recommended.
-.\" Their use may result in undesired behavior,
-.\" since the constructor/destructor routines will not be executed
-.\" (unless special measures are taken).
-.\" .\" void _init(void) __attribute__((constructor));
-.\" .\" void _fini(void) __attribute__((destructor));
-.\"
-.PP
-Since glibc 2.2.3,
-.BR atexit (3)
-can be used to register an exit handler that is automatically
-called when a shared object is unloaded.
-.SS History
-These functions are part of the dlopen API, derived from SunOS.
-.SH BUGS
-As at glibc 2.24, specifying the
-.B RTLD_GLOBAL
-flag when calling
-.BR dlmopen ()
-.\" dlerror(): "invalid mode"
-generates an error.
-Furthermore, specifying
-.B RTLD_GLOBAL
-when calling
-.BR dlopen ()
-results in a program crash
-.RB ( SIGSEGV )
-.\" https://sourceware.org/bugzilla/show_bug.cgi?id=18684
-if the call is made from any object loaded in a
-namespace other than the initial namespace.
-.SH EXAMPLES
-The program below loads the (glibc) math library,
-looks up the address of the
-.BR cos (3)
-function, and prints the cosine of 2.0.
-The following is an example of building and running the program:
-.PP
-.in +4n
-.EX
-$ \fBcc dlopen_demo.c \-ldl\fP
-$ \fB./a.out\fP
-\-0.416147
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (dlopen.c)
-.EX
-#include <dlfcn.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-#include <gnu/lib\-names.h> /* Defines LIBM_SO (which will be a
- string such as "libm.so.6") */
-int
-main(void)
-{
- void *handle;
- double (*cosine)(double);
- char *error;
-\&
- handle = dlopen(LIBM_SO, RTLD_LAZY);
- if (!handle) {
- fprintf(stderr, "%s\en", dlerror());
- exit(EXIT_FAILURE);
- }
-\&
- dlerror(); /* Clear any existing error */
-\&
- cosine = (double (*)(double)) dlsym(handle, "cos");
-\&
- /* According to the ISO C standard, casting between function
- pointers and \[aq]void *\[aq], as done above, produces undefined results.
- POSIX.1\-2001 and POSIX.1\-2008 accepted this state of affairs and
- proposed the following workaround:
-\&
- *(void **) (&cosine) = dlsym(handle, "cos");
-\&
- This (clumsy) cast conforms with the ISO C standard and will
- avoid any compiler warnings.
-\&
- The 2013 Technical Corrigendum 1 to POSIX.1\-2008 improved matters
- by requiring that conforming implementations support casting
- \[aq]void *\[aq] to a function pointer. Nevertheless, some compilers
- (e.g., gcc with the \[aq]\-pedantic\[aq] option) may complain about the
- cast used in this program. */
-.\" http://pubs.opengroup.org/onlinepubs/009695399/functions/dlsym.html#tag_03_112_08
-.\" http://pubs.opengroup.org/onlinepubs/9699919799/functions/dlsym.html#tag_16_96_07
-.\" http://austingroupbugs.net/view.php?id=74
-\&
- error = dlerror();
- if (error != NULL) {
- fprintf(stderr, "%s\en", error);
- exit(EXIT_FAILURE);
- }
-\&
- printf("%f\en", (*cosine)(2.0));
- dlclose(handle);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR ld (1),
-.BR ldd (1),
-.BR pldd (1),
-.BR dl_iterate_phdr (3),
-.BR dladdr (3),
-.BR dlerror (3),
-.BR dlinfo (3),
-.BR dlsym (3),
-.BR rtld\-audit (7),
-.BR ld.so (8),
-.BR ldconfig (8)
-.PP
-gcc info pages, ld info pages
diff --git a/man3/dlsym.3 b/man3/dlsym.3
deleted file mode 100644
index 8a648c6da..000000000
--- a/man3/dlsym.3
+++ /dev/null
@@ -1,174 +0,0 @@
-'\" t
-.\" Copyright 1995 Yggdrasil Computing, Incorporated.
-.\" and Copyright 2003, 2015 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH dlsym 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-dlsym, dlvsym \- obtain address of a symbol in a shared object or executable
-.SH LIBRARY
-Dynamic linking library
-.RI ( libdl ", " \-ldl )
-.SH SYNOPSIS
-.nf
-.B #include <dlfcn.h>
-.PP
-.BI "void *dlsym(void *restrict " handle ", const char *restrict " symbol );
-.PP
-.B #define _GNU_SOURCE
-.B #include <dlfcn.h>
-.PP
-.BI "void *dlvsym(void *restrict " handle ", const char *restrict " symbol ,
-.BI " const char *restrict " version );
-.fi
-.SH DESCRIPTION
-The function
-.BR dlsym ()
-takes a "handle" of a dynamic loaded shared object returned by
-.BR dlopen (3)
-along with a null-terminated symbol name,
-and returns the address where that symbol is
-loaded into memory.
-If the symbol is not found, in the specified
-object or any of the shared objects that were automatically loaded by
-.BR dlopen (3)
-when that object was loaded,
-.BR dlsym ()
-returns NULL.
-(The search performed by
-.BR dlsym ()
-is breadth first through the dependency tree of these shared objects.)
-.PP
-In unusual cases (see NOTES) the value of the symbol could actually be NULL.
-Therefore, a NULL return from
-.BR dlsym ()
-need not indicate an error.
-The correct way to distinguish an error from a symbol whose value is NULL
-is to call
-.BR dlerror (3)
-to clear any old error conditions, then call
-.BR dlsym (),
-and then call
-.BR dlerror (3)
-again, saving its return value into a variable, and check whether
-this saved value is not NULL.
-.PP
-There are two special pseudo-handles that may be specified in
-.IR handle :
-.TP
-.B RTLD_DEFAULT
-Find the first occurrence of the desired symbol
-using the default shared object search order.
-The search will include global symbols in the executable
-and its dependencies,
-as well as symbols in shared objects that were dynamically loaded with the
-.B RTLD_GLOBAL
-flag.
-.TP
-.B RTLD_NEXT
-Find the next occurrence of the desired symbol in the search order
-after the current object.
-This allows one to provide a wrapper
-around a function in another shared object, so that, for example,
-the definition of a function in a preloaded shared object
-(see
-.B LD_PRELOAD
-in
-.BR ld.so (8))
-can find and invoke the "real" function provided in another shared object
-(or for that matter, the "next" definition of the function in cases
-where there are multiple layers of preloading).
-.PP
-The
-.B _GNU_SOURCE
-feature test macro must be defined in order to obtain the
-definitions of
-.B RTLD_DEFAULT
-and
-.B RTLD_NEXT
-from
-.IR <dlfcn.h> .
-.PP
-The function
-.BR dlvsym ()
-does the same as
-.BR dlsym ()
-but takes a version string as an additional argument.
-.SH RETURN VALUE
-On success,
-these functions return the address associated with
-.IR symbol .
-On failure, they return NULL;
-the cause of the error can be diagnosed using
-.BR dlerror (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR dlsym (),
-.BR dlvsym ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR dlsym ()
-POSIX.1-2008.
-.TP
-.BR dlvsym ()
-GNU.
-.SH HISTORY
-.TP
-.BR dlsym ()
-glibc 2.0.
-POSIX.1-2001.
-.TP
-.BR dlvsym ()
-glibc 2.1.
-.SH NOTES
-There are several scenarios when the address of a global symbol is NULL.
-For example, a symbol can be placed at zero address by the linker, via
-a linker script or with
-.I \-\-defsym
-command-line option.
-Undefined weak symbols also have NULL value.
-Finally, the symbol value may be the result of
-a GNU indirect function (IFUNC) resolver function that returns
-NULL as the resolved value.
-In the latter case,
-.BR dlsym ()
-also returns NULL without error.
-However, in the former two cases, the
-behavior of GNU dynamic linker is inconsistent: relocation processing
-succeeds and the symbol can be observed to have NULL value, but
-.BR dlsym ()
-fails and
-.BR dlerror ()
-indicates a lookup error.
-.\"
-.SS History
-The
-.BR dlsym ()
-function is part of the dlopen API, derived from SunOS.
-That system does not have
-.BR dlvsym ().
-.SH EXAMPLES
-See
-.BR dlopen (3).
-.SH SEE ALSO
-.BR dl_iterate_phdr (3),
-.BR dladdr (3),
-.BR dlerror (3),
-.BR dlinfo (3),
-.BR dlopen (3),
-.BR ld.so (8)
diff --git a/man3/dlvsym.3 b/man3/dlvsym.3
deleted file mode 100644
index df2ca09f4..000000000
--- a/man3/dlvsym.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/dlsym.3
diff --git a/man3/dn_comp.3 b/man3/dn_comp.3
deleted file mode 100644
index 87a6d0e83..000000000
--- a/man3/dn_comp.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/resolver.3
diff --git a/man3/dn_expand.3 b/man3/dn_expand.3
deleted file mode 100644
index 87a6d0e83..000000000
--- a/man3/dn_expand.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/resolver.3
diff --git a/man3/dprintf.3 b/man3/dprintf.3
deleted file mode 100644
index 975530d90..000000000
--- a/man3/dprintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/printf.3
diff --git a/man3/drand48.3 b/man3/drand48.3
deleted file mode 100644
index 1d12570e2..000000000
--- a/man3/drand48.3
+++ /dev/null
@@ -1,263 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 19:46:03 1993 by Rik Faith (faith@cs.unc.edu)
-.TH drand48 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48,
-lcong48 \- generate uniformly distributed pseudo-random numbers
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.B double drand48(void);
-.BI "double erand48(unsigned short " xsubi [3]);
-.PP
-.B long lrand48(void);
-.BI "long nrand48(unsigned short " xsubi [3]);
-.PP
-.B long mrand48(void);
-.BI "long jrand48(unsigned short " xsubi [3]);
-.PP
-.BI "void srand48(long " seedval );
-.BI "unsigned short *seed48(unsigned short " seed16v [3]);
-.BI "void lcong48(unsigned short " param [7]);
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-All functions shown above:
-.\" .BR drand48 (),
-.\" .BR erand48 (),
-.\" .BR lrand48 (),
-.\" .BR nrand48 (),
-.\" .BR mrand48 (),
-.\" .BR jrand48 (),
-.\" .BR srand48 (),
-.\" .BR seed48 (),
-.\" .BR lcong48 ():
-.nf
- _XOPEN_SOURCE
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions generate pseudo-random numbers using the linear congruential
-algorithm and 48-bit integer arithmetic.
-.PP
-The
-.BR drand48 ()
-and
-.BR erand48 ()
-functions return nonnegative
-double-precision floating-point values uniformly distributed over the interval
-[0.0,\ 1.0).
-.PP
-The
-.BR lrand48 ()
-and
-.BR nrand48 ()
-functions return nonnegative
-long integers uniformly distributed over the interval [0,\ 2\[ha]31).
-.PP
-The
-.BR mrand48 ()
-and
-.BR jrand48 ()
-functions return signed long
-integers uniformly distributed over the interval [\-2\[ha]31,\ 2\[ha]31).
-.PP
-The
-.BR srand48 (),
-.BR seed48 (),
-and
-.BR lcong48 ()
-functions are
-initialization functions, one of which should be called before using
-.BR drand48 (),
-.BR lrand48 (),
-or
-.BR mrand48 ().
-The functions
-.BR erand48 (),
-.BR nrand48 (),
-and
-.BR jrand48 ()
-do not require
-an initialization function to be called first.
-.PP
-All the functions work by generating a sequence of 48-bit integers,
-.IR Xi ,
-according to the linear congruential formula:
-.PP
-.in +4n
-.EX
-.B Xn+1 = (aXn + c) mod m, where n >= 0
-.EE
-.in
-.PP
-The parameter
-.I m
-= 2\[ha]48, hence 48-bit integer arithmetic is performed.
-Unless
-.BR lcong48 ()
-is called,
-.I a
-and
-.I c
-are given by:
-.PP
-.in +4n
-.EX
-.B a = 0x5DEECE66D
-.B c = 0xB
-.EE
-.in
-.PP
-The value returned by any of the functions
-.BR drand48 (),
-.BR erand48 (),
-.BR lrand48 (),
-.BR nrand48 (),
-.BR mrand48 (),
-or
-.BR jrand48 ()
-is
-computed by first generating the next 48-bit
-.I Xi
-in the sequence.
-Then the appropriate number of bits, according to the type of data item to
-be returned, is copied from the high-order bits of
-.I Xi
-and transformed
-into the returned value.
-.PP
-The functions
-.BR drand48 (),
-.BR lrand48 (),
-and
-.BR mrand48 ()
-store
-the last 48-bit
-.I Xi
-generated in an internal buffer.
-The functions
-.BR erand48 (),
-.BR nrand48 (),
-and
-.BR jrand48 ()
-require the calling
-program to provide storage for the successive
-.I Xi
-values in the array
-argument
-.IR xsubi .
-The functions are initialized by placing the initial
-value of
-.I Xi
-into the array before calling the function for the first
-time.
-.PP
-The initializer function
-.BR srand48 ()
-sets the high order 32-bits of
-.I Xi
-to the argument
-.IR seedval .
-The low order 16-bits are set
-to the arbitrary value 0x330E.
-.PP
-The initializer function
-.BR seed48 ()
-sets the value of
-.I Xi
-to
-the 48-bit value specified in the array argument
-.IR seed16v .
-The
-previous value of
-.I Xi
-is copied into an internal buffer and a
-pointer to this buffer is returned by
-.BR seed48 ().
-.PP
-The initialization function
-.BR lcong48 ()
-allows the user to specify
-initial values for
-.IR Xi ,
-.IR a ,
-and
-.IR c .
-Array argument
-elements
-.I param[0\-2]
-specify
-.IR Xi ,
-.I param[3\-5]
-specify
-.IR a ,
-and
-.I param[6]
-specifies
-.IR c .
-After
-.BR lcong48 ()
-has been called, a subsequent call to either
-.BR srand48 ()
-or
-.BR seed48 ()
-will restore the standard values of
-.I a
-and
-.IR c .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR drand48 (),
-.BR erand48 (),
-.BR lrand48 (),
-.BR nrand48 (),
-.BR mrand48 (),
-.BR jrand48 (),
-.BR srand48 (),
-.BR seed48 (),
-.BR lcong48 ()
-T} Thread safety T{
-MT-Unsafe race:drand48
-T}
-.TE
-.hy
-.ad
-.sp 1
-.PP
-The above
-functions record global state information for the random number generator,
-so they are not thread-safe.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4.
-.SH SEE ALSO
-.BR rand (3),
-.BR random (3)
diff --git a/man3/drand48_r.3 b/man3/drand48_r.3
deleted file mode 100644
index dff7554e5..000000000
--- a/man3/drand48_r.3
+++ /dev/null
@@ -1,107 +0,0 @@
-'\" t
-.\" Copyright 2003 Walter Harms, 2004 Andries Brouwer <aeb@cwi.nl>.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Created 2004-10-31. Text taken from a page by Walter Harms, 2003-09-08
-.\"
-.TH drand48_r 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-drand48_r, erand48_r, lrand48_r, nrand48_r, mrand48_r, jrand48_r,
-srand48_r, seed48_r, lcong48_r
-\- generate uniformly distributed pseudo-random numbers reentrantly
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int drand48_r(struct drand48_data *restrict " buffer ,
-.BI " double *restrict " result );
-.BI "int erand48_r(unsigned short " xsubi [3] ","
-.BI " struct drand48_data *restrict "buffer ,
-.BI " double *restrict " result ");"
-.PP
-.BI "int lrand48_r(struct drand48_data *restrict " buffer ,
-.BI " long *restrict " result );
-.BI "int nrand48_r(unsigned short " xsubi[3] ","
-.BI " struct drand48_data *restrict "buffer ,
-.BI " long *restrict " result ");"
-.PP
-.BI "int mrand48_r(struct drand48_data *restrict " buffer ,
-.BI " long *restrict " result ");"
-.BI "int jrand48_r(unsigned short " xsubi[3] ","
-.BI " struct drand48_data *restrict " buffer ,
-.BI " long *restrict " result ");"
-.PP
-.BI "int srand48_r(long int " seedval ", struct drand48_data *" buffer ");"
-.BI "int seed48_r(unsigned short " seed16v[3] ", struct drand48_data *" buffer );
-.BI "int lcong48_r(unsigned short " param[7] ", struct drand48_data *" buffer );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-All functions shown above:
-.\" .BR drand48_r (),
-.\" .BR erand48_r (),
-.\" .BR lrand48_r (),
-.\" .BR nrand48_r (),
-.\" .BR mrand48_r (),
-.\" .BR jrand48_r (),
-.\" .BR srand48_r (),
-.\" .BR seed48_r (),
-.\" .BR lcong48_r ():
-.nf
- /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-These functions are the reentrant analogs of the functions described in
-.BR drand48 (3).
-Instead of modifying the global random generator state, they use
-the supplied data
-.IR buffer .
-.PP
-Before the first use, this struct must be initialized, for example,
-by filling it with zeros, or by calling one of the functions
-.BR srand48_r (),
-.BR seed48_r (),
-or
-.BR lcong48_r ().
-.SH RETURN VALUE
-The return value is 0.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR drand48_r (),
-.BR erand48_r (),
-.BR lrand48_r (),
-.BR nrand48_r (),
-.BR mrand48_r (),
-.BR jrand48_r (),
-.BR srand48_r (),
-.BR seed48_r (),
-.BR lcong48_r ()
-T} Thread safety MT-Safe race:buffer
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH SEE ALSO
-.BR drand48 (3),
-.BR rand (3),
-.BR random (3)
diff --git a/man3/drem.3 b/man3/drem.3
deleted file mode 100644
index b7a5b23bf..000000000
--- a/man3/drem.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/remainder.3
diff --git a/man3/dremf.3 b/man3/dremf.3
deleted file mode 100644
index b7a5b23bf..000000000
--- a/man3/dremf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/remainder.3
diff --git a/man3/dreml.3 b/man3/dreml.3
deleted file mode 100644
index b7a5b23bf..000000000
--- a/man3/dreml.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/remainder.3
diff --git a/man3/duplocale.3 b/man3/duplocale.3
deleted file mode 100644
index 2e3126863..000000000
--- a/man3/duplocale.3
+++ /dev/null
@@ -1,168 +0,0 @@
-.\" Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH duplocale 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-duplocale \- duplicate a locale object
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <locale.h>
-.PP
-.BI "locale_t duplocale(locale_t " locobj );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR duplocale ():
-.nf
- Since glibc 2.10:
- _XOPEN_SOURCE >= 700
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR duplocale ()
-function creates a duplicate of the locale object referred to by
-.IR locobj .
-.PP
-If
-.I locobj
-is
-.BR LC_GLOBAL_LOCALE ,
-.BR duplocale ()
-creates a locale object containing a copy of the global locale
-determined by
-.BR setlocale (3).
-.SH RETURN VALUE
-On success,
-.BR duplocale ()
-returns a handle for the new locale object.
-On error, it returns
-.IR "(locale_t)\ 0",
-and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B ENOMEM
-Insufficient memory to create the duplicate locale object.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.3.
-.SH NOTES
-Duplicating a locale can serve the following purposes:
-.IP \[bu] 3
-To create a copy of a locale object in which one of more categories
-are to be modified (using
-.BR newlocale (3)).
-.IP \[bu]
-To obtain a handle for the current locale which can used in
-other functions that employ a locale handle, such as
-.BR toupper_l (3).
-This is done by applying
-.BR duplocale ()
-to the value returned by the following call:
-.IP
-.in +4n
-.EX
-loc = uselocale((locale_t) 0);
-.EE
-.in
-.IP
-This technique is necessary, because the above
-.BR uselocale (3)
-call may return the value
-.BR LC_GLOBAL_LOCALE ,
-which results in undefined behavior if passed to functions such as
-.BR toupper_l (3).
-Calling
-.BR duplocale ()
-can be used to ensure that the
-.B LC_GLOBAL_LOCALE
-value is converted into a usable locale object.
-See EXAMPLES, below.
-.PP
-Each locale object created by
-.BR duplocale ()
-should be deallocated using
-.BR freelocale (3).
-.SH EXAMPLES
-The program below uses
-.BR uselocale (3)
-and
-.BR duplocale ()
-to obtain a handle for the current locale which is then passed to
-.BR toupper_l (3).
-The program takes one command-line argument,
-a string of characters that is converted to uppercase and
-displayed on standard output.
-An example of its use is the following:
-.PP
-.in +4n
-.EX
-$ \fB./a.out abc\fP
-ABC
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (duplocale.c)
-.EX
-#define _XOPEN_SOURCE 700
-#include <ctype.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \e
- } while (0)
-\&
-int
-main(int argc, char *argv[])
-{
- locale_t loc, nloc;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s string\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- /* This sequence is necessary, because uselocale() might return
- the value LC_GLOBAL_LOCALE, which can\[aq]t be passed as an
- argument to toupper_l(). */
-\&
- loc = uselocale((locale_t) 0);
- if (loc == (locale_t) 0)
- errExit("uselocale");
-\&
- nloc = duplocale(loc);
- if (nloc == (locale_t) 0)
- errExit("duplocale");
-\&
- for (char *p = argv[1]; *p; p++)
- putchar(toupper_l(*p, nloc));
-\&
- printf("\en");
-\&
- freelocale(nloc);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR freelocale (3),
-.BR newlocale (3),
-.BR setlocale (3),
-.BR uselocale (3),
-.BR locale (5),
-.BR locale (7)
diff --git a/man3/dysize.3 b/man3/dysize.3
deleted file mode 100644
index b0d5455c4..000000000
--- a/man3/dysize.3
+++ /dev/null
@@ -1,72 +0,0 @@
-'\" t
-.\" Copyright 2001 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" aeb: some corrections
-.TH dysize 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-dysize \- get number of days for a given year
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B "#include <time.h>"
-.PP
-.BI "int dysize(int " year );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR dysize ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The function returns 365 for a normal year and 366 for a leap year.
-The calculation for leap year is based on:
-.PP
-.in +4n
-.EX
-(year) %4 == 0 && ((year) %100 != 0 || (year) %400 == 0)
-.EE
-.in
-.PP
-The formula is defined in the macro
-.I __isleap(year)
-also found in
-.IR <time.h> .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR dysize ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-SunOS 4.x.
-.PP
-This is a compatibility function only.
-Don't use it in new programs.
-.\" The SCO version of this function had a year-2000 problem.
-.SH SEE ALSO
-.BR strftime (3)
diff --git a/man3/eaccess.3 b/man3/eaccess.3
deleted file mode 100644
index 9e5035180..000000000
--- a/man3/eaccess.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/euidaccess.3
diff --git a/man3/ecb_crypt.3 b/man3/ecb_crypt.3
deleted file mode 100644
index 853c9cbdf..000000000
--- a/man3/ecb_crypt.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/des_crypt.3
diff --git a/man3/ecvt.3 b/man3/ecvt.3
deleted file mode 100644
index 53ad0b351..000000000
--- a/man3/ecvt.3
+++ /dev/null
@@ -1,134 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 19:40:39 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Fri Jun 25 12:10:47 1999 by Andries Brouwer (aeb@cwi.nl)
-.\"
-.TH ecvt 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ecvt, fcvt \- convert a floating-point number to a string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "[[deprecated]] char *ecvt(double " number ", int " ndigits ,
-.BI " int *restrict " decpt ", int *restrict " sign );
-.BI "[[deprecated]] char *fcvt(double " number ", int " ndigits ,
-.BI " int *restrict " decpt ", int *restrict " sign );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR ecvt (),
-.BR fcvt ():
-.nf
- Since glibc 2.17
- (_XOPEN_SOURCE >= 500 && ! (_POSIX_C_SOURCE >= 200809L))
- || /* glibc >= 2.20 */ _DEFAULT_SOURCE
- || /* glibc <= 2.19 */ _SVID_SOURCE
- glibc 2.12 to glibc 2.16:
- (_XOPEN_SOURCE >= 500 && ! (_POSIX_C_SOURCE >= 200112L))
- || _SVID_SOURCE
- Before glibc 2.12:
- _SVID_SOURCE || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
-.fi
-.SH DESCRIPTION
-The
-.BR ecvt ()
-function converts \fInumber\fP to a null-terminated
-string of \fIndigits\fP digits (where \fIndigits\fP is reduced to a
-system-specific limit determined by the precision of a
-.IR double ),
-and returns a pointer to the string.
-The high-order digit is nonzero, unless
-.I number
-is zero.
-The low order digit is rounded.
-The string itself does not contain a decimal point; however,
-the position of the decimal point relative to the start of the string
-is stored in \fI*decpt\fP.
-A negative value for \fI*decpt\fP means that
-the decimal point is to the left of the start of the string.
-If the sign of
-\fInumber\fP is negative, \fI*sign\fP is set to a nonzero value,
-otherwise it is set to 0.
-If
-.I number
-is zero, it is unspecified whether \fI*decpt\fP is 0 or 1.
-.PP
-The
-.BR fcvt ()
-function is identical to
-.BR ecvt (),
-except that
-\fIndigits\fP specifies the number of digits after the decimal point.
-.SH RETURN VALUE
-Both the
-.BR ecvt ()
-and
-.BR fcvt ()
-functions return a pointer to a
-static string containing the ASCII representation of \fInumber\fP.
-The static string is overwritten by each call to
-.BR ecvt ()
-or
-.BR fcvt ().
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ecvt ()
-T} Thread safety MT-Unsafe race:ecvt
-T{
-.BR fcvt ()
-T} Thread safety MT-Unsafe race:fcvt
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-SVr2;
-marked as LEGACY in POSIX.1-2001.
-POSIX.1-2008 removes the specifications of
-.BR ecvt ()
-and
-.BR fcvt (),
-recommending the use of
-.BR sprintf (3)
-instead (though
-.BR snprintf (3)
-may be preferable).
-.SH NOTES
-.\" Linux libc4 and libc5 specified the type of
-.\" .I ndigits
-.\" as
-.\" .IR size_t .
-Not all locales use a point as the radix character ("decimal point").
-.SH SEE ALSO
-.BR ecvt_r (3),
-.BR gcvt (3),
-.BR qecvt (3),
-.BR setlocale (3),
-.BR sprintf (3)
diff --git a/man3/ecvt_r.3 b/man3/ecvt_r.3
deleted file mode 100644
index 2046983ba..000000000
--- a/man3/ecvt_r.3
+++ /dev/null
@@ -1,103 +0,0 @@
-'\" t
-.\" Copyright (C) 2002 Andries Brouwer <aeb@cwi.nl>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" This replaces an earlier man page written by Walter Harms
-.\" <walter.harms@informatik.uni-oldenburg.de>.
-.\"
-.\" Corrected return types; from Fabian; 2004-10-05
-.\"
-.TH ecvt_r 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ecvt_r, fcvt_r, qecvt_r, qfcvt_r \- convert a floating-point number to a string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "[[deprecated]] int ecvt_r(double " number ", int " ndigits ,
-.BI " int *restrict " decpt ", int *restrict " sign ,
-.BI " char *restrict " buf ", size_t " len );
-.BI "[[deprecated]] int fcvt_r(double " number ", int " ndigits ,
-.BI " int *restrict " decpt ", int *restrict " sign ,
-.BI " char *restrict " buf ", size_t " len );
-.PP
-.BI "[[deprecated]] int qecvt_r(long double " number ", int " ndigits ,
-.BI " int *restrict " decpt ", int *restrict " sign ,
-.BI " char *restrict " buf ", size_t " len );
-.BI "[[deprecated]] int qfcvt_r(long double " number ", int " ndigits ,
-.BI " int *restrict " decpt ", int *restrict " sign ,
-.BI " char *restrict " buf ", size_t " len );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR ecvt_r (),
-.BR fcvt_r (),
-.BR qecvt_r (),
-.BR qfcvt_r ():
-.nf
- /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The functions
-.BR ecvt_r (),
-.BR fcvt_r (),
-.BR qecvt_r (),
-and
-.BR qfcvt_r ()
-are identical to
-.BR ecvt (3),
-.BR fcvt (3),
-.BR qecvt (3),
-and
-.BR qfcvt (3),
-respectively, except that they do not return their result in a static
-buffer, but instead use the supplied
-.I buf
-of size
-.IR len .
-See
-.BR ecvt (3)
-and
-.BR qecvt (3).
-.SH RETURN VALUE
-These functions return 0 on success, and \-1 otherwise.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ecvt_r (),
-.BR fcvt_r (),
-.BR qecvt_r (),
-.BR qfcvt_r ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH NOTES
-These functions are obsolete.
-Instead,
-.BR sprintf (3)
-is recommended.
-.SH SEE ALSO
-.BR ecvt (3),
-.BR qecvt (3),
-.BR sprintf (3)
diff --git a/man3/edata.3 b/man3/edata.3
deleted file mode 100644
index 94843fb05..000000000
--- a/man3/edata.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/end.3
diff --git a/man3/encrypt.3 b/man3/encrypt.3
deleted file mode 100644
index 9f7ea9627..000000000
--- a/man3/encrypt.3
+++ /dev/null
@@ -1,212 +0,0 @@
-'\" t
-.\" Copyright 2000 Nicolás Lichtmaier <nick@debian.org>
-.\" Created 2000-07-22 00:52-0300
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified 2002-07-23 19:21:35 CEST 2002 Walter Harms
-.\" <walter.harms@informatik.uni-oldenburg.de>
-.\"
-.\" Modified 2003-04-04, aeb
-.\"
-.TH encrypt 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-encrypt, setkey, encrypt_r, setkey_r \- encrypt 64-bit messages
-.SH LIBRARY
-Encryption and decryption library
-.RI ( libcrypto ", " \-lcrypto )
-.SH SYNOPSIS
-.nf
-.BR "#define _XOPEN_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <unistd.h>
-.PP
-.BI "[[deprecated]] void encrypt(char " block "[64], int " edflag );
-.PP
-.BR "#define _XOPEN_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <stdlib.h>
-.PP
-.BI "[[deprecated]] void setkey(const char *" key );
-.PP
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <crypt.h>
-.PP
-.BI "[[deprecated]] void setkey_r(const char *" key ", struct crypt_data *" data );
-.BI "[[deprecated]] void encrypt_r(char *" block ", int " edflag ,
-.BI " struct crypt_data *" data );
-.fi
-.SH DESCRIPTION
-These functions encrypt and decrypt 64-bit messages.
-The
-.BR setkey ()
-function sets the key used by
-.BR encrypt ().
-The
-.I key
-argument used here is an array of 64 bytes, each of which has
-numerical value 1 or 0.
-The bytes key[n] where n=8*i-1 are ignored,
-so that the effective key length is 56 bits.
-.PP
-The
-.BR encrypt ()
-function modifies the passed buffer, encoding if
-.I edflag
-is 0, and decoding if 1 is being passed.
-Like the
-.I key
-argument, also
-.I block
-is a bit vector representation of the actual value that is encoded.
-The result is returned in that same vector.
-.PP
-These two functions are not reentrant, that is, the key data is
-kept in static storage.
-The functions
-.BR setkey_r ()
-and
-.BR encrypt_r ()
-are the reentrant versions.
-They use the following
-structure to hold the key data:
-.PP
-.in +4n
-.EX
-struct crypt_data {
- char keysched[16 * 8];
- char sb0[32768];
- char sb1[32768];
- char sb2[32768];
- char sb3[32768];
- char crypt_3_buf[14];
- char current_salt[2];
- long current_saltbits;
- int direction;
- int initialized;
-};
-.EE
-.in
-.PP
-Before calling
-.BR setkey_r ()
-set
-.I data\->initialized
-to zero.
-.SH RETURN VALUE
-These functions do not return any value.
-.SH ERRORS
-Set
-.I errno
-to zero before calling the above functions.
-On success,
-.I errno
-is unchanged.
-.TP
-.B ENOSYS
-The function is not provided.
-(For example because of former USA export restrictions.)
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR encrypt (),
-.BR setkey ()
-T} Thread safety MT-Unsafe race:crypt
-T{
-.BR encrypt_r (),
-.BR setkey_r ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR encrypt ()
-.TQ
-.BR setkey ()
-POSIX.1-2008.
-.TP
-.BR encrypt_r ()
-.TQ
-.BR setkey_r ()
-None.
-.SH HISTORY
-Removed in glibc 2.28.
-.PP
-Because they employ the DES block cipher,
-which is no longer considered secure,
-these functions were removed from glibc.
-Applications should switch to a modern cryptography library, such as
-.BR libgcrypt .
-.TP
-.BR encrypt ()
-.TQ
-.BR setkey ()
-POSIX.1-2001, SUS, SVr4.
-.SS Availability in glibc
-See
-.BR crypt (3).
-.SS Features in glibc
-In glibc 2.2, these functions use the DES algorithm.
-.SH EXAMPLES
-.\" [[deprecated]] SRC BEGIN (encrypt.c)
-.EX
-#define _XOPEN_SOURCE
-#include <crypt.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-int
-main(void)
-{
- char key[64];
- char orig[9] = "eggplant";
- char buf[64];
- char txt[9];
-\&
- for (size_t i = 0; i < 64; i++) {
- key[i] = rand() & 1;
- }
-\&
- for (size_t i = 0; i < 8; i++) {
- for (size_t j = 0; j < 8; j++) {
- buf[i * 8 + j] = orig[i] >> j & 1;
- }
- setkey(key);
- }
- printf("Before encrypting: %s\en", orig);
-\&
- encrypt(buf, 0);
- for (size_t i = 0; i < 8; i++) {
- for (size_t j = 0, txt[i] = \[aq]\e0\[aq]; j < 8; j++) {
- txt[i] |= buf[i * 8 + j] << j;
- }
- txt[8] = \[aq]\e0\[aq];
- }
- printf("After encrypting: %s\en", txt);
-\&
- encrypt(buf, 1);
- for (size_t i = 0; i < 8; i++) {
- for (size_t j = 0, txt[i] = \[aq]\e0\[aq]; j < 8; j++) {
- txt[i] |= buf[i * 8 + j] << j;
- }
- txt[8] = \[aq]\e0\[aq];
- }
- printf("After decrypting: %s\en", txt);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR cbc_crypt (3),
-.BR crypt (3),
-.BR ecb_crypt (3)
-.\" .BR fcrypt (3)
diff --git a/man3/encrypt_r.3 b/man3/encrypt_r.3
deleted file mode 100644
index e34c9e911..000000000
--- a/man3/encrypt_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/encrypt.3
diff --git a/man3/end.3 b/man3/end.3
deleted file mode 100644
index 2ad58d957..000000000
--- a/man3/end.3
+++ /dev/null
@@ -1,96 +0,0 @@
-.\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH end 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-etext, edata, end \- end of program segments
-.SH SYNOPSIS
-.nf
-.BI extern " etext" ;
-.BI extern " edata" ;
-.BI extern " end" ;
-.fi
-.SH DESCRIPTION
-The addresses of these symbols indicate the end of various program
-segments:
-.TP
-.I etext
-This is the first address past the end of the text segment
-(the program code).
-.TP
-.I edata
-This is the first address past the end of the
-initialized data segment.
-.TP
-.I end
-This is the first address past the end of the
-uninitialized data segment (also known as the BSS segment).
-.SH STANDARDS
-None.
-.SH HISTORY
-Although these symbols have long been provided on most UNIX systems,
-they are not standardized; use with caution.
-.SH NOTES
-The program must explicitly declare these symbols;
-they are not defined in any header file.
-.PP
-On some systems the names of these symbols are preceded by underscores,
-thus:
-.IR _etext ,
-.IR _edata ,
-and
-.IR _end .
-These symbols are also defined for programs compiled on Linux.
-.PP
-At the start of program execution,
-the program break will be somewhere near
-.I &end
-(perhaps at the start of the following page).
-However, the break will change as memory is allocated via
-.BR brk (2)
-or
-.BR malloc (3).
-Use
-.BR sbrk (2)
-with an argument of zero to find the current value of the program break.
-.SH EXAMPLES
-When run, the program below produces output such as the following:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out"
-First address past:
- program text (etext) 0x8048568
- initialized data (edata) 0x804a01c
- uninitialized data (end) 0x804a024
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (end.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-\&
-extern char etext, edata, end; /* The symbols must have some type,
- or "gcc \-Wall" complains */
-\&
-int
-main(void)
-{
- printf("First address past:\en");
- printf(" program text (etext) %10p\en", &etext);
- printf(" initialized data (edata) %10p\en", &edata);
- printf(" uninitialized data (end) %10p\en", &end);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR objdump (1),
-.BR readelf (1),
-.BR sbrk (2),
-.BR elf (5)
diff --git a/man3/endaliasent.3 b/man3/endaliasent.3
deleted file mode 100644
index 37dcf1914..000000000
--- a/man3/endaliasent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/setaliasent.3
diff --git a/man3/endfsent.3 b/man3/endfsent.3
deleted file mode 100644
index 1e6a3eb7e..000000000
--- a/man3/endfsent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getfsent.3
diff --git a/man3/endgrent.3 b/man3/endgrent.3
deleted file mode 100644
index bde736fff..000000000
--- a/man3/endgrent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getgrent.3
diff --git a/man3/endhostent.3 b/man3/endhostent.3
deleted file mode 100644
index 7d0fb4b7c..000000000
--- a/man3/endhostent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/gethostbyname.3
diff --git a/man3/endian.3 b/man3/endian.3
deleted file mode 100644
index 4d85cecd7..000000000
--- a/man3/endian.3
+++ /dev/null
@@ -1,164 +0,0 @@
-.\" Copyright (C) 2009, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\" a few pieces remain from an earlier version
-.\" Copyright (C) 2008, Nanno Langstraat <nal@ii.nl>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH endian 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-htobe16, htole16, be16toh, le16toh, htobe32, htole32, be32toh, le32toh,
-htobe64, htole64, be64toh, le64toh \-
-convert values between host and big-/little-endian byte order
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <endian.h>
-.PP
-.BI "uint16_t htobe16(uint16_t " host_16bits );
-.BI "uint16_t htole16(uint16_t " host_16bits );
-.BI "uint16_t be16toh(uint16_t " big_endian_16bits );
-.BI "uint16_t le16toh(uint16_t " little_endian_16bits );
-.PP
-.BI "uint32_t htobe32(uint32_t " host_32bits );
-.BI "uint32_t htole32(uint32_t " host_32bits );
-.BI "uint32_t be32toh(uint32_t " big_endian_32bits );
-.BI "uint32_t le32toh(uint32_t " little_endian_32bits );
-.PP
-.BI "uint64_t htobe64(uint64_t " host_64bits );
-.BI "uint64_t htole64(uint64_t " host_64bits );
-.BI "uint64_t be64toh(uint64_t " big_endian_64bits );
-.BI "uint64_t le64toh(uint64_t " little_endian_64bits );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.ad l
-.PP
-.BR htobe16 (),
-.BR htole16 (),
-.BR be16toh (),
-.BR le16toh (),
-.BR htobe32 (),
-.BR htole32 (),
-.BR be32toh (),
-.BR le32toh (),
-.BR htobe64 (),
-.BR htole64 (),
-.BR be64toh (),
-.BR le64toh ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- In glibc up to and including 2.19:
- _BSD_SOURCE
-.fi
-.ad
-.SH DESCRIPTION
-These functions convert the byte encoding of integer values from
-the byte order that the current CPU (the "host") uses,
-to and from little-endian and big-endian byte order.
-.PP
-The number,
-.IR nn ,
-in the name of each function indicates the size of
-integer handled by the function, either 16, 32, or 64 bits.
-.PP
-The functions with names of the form "htobe\fInn\fP" convert
-from host byte order to big-endian order.
-.PP
-The functions with names of the form "htole\fInn\fP" convert
-from host byte order to little-endian order.
-.PP
-The functions with names of the form "be\fInn\fPtoh" convert
-from big-endian order to host byte order.
-.PP
-The functions with names of the form "le\fInn\fPtoh" convert
-from little-endian order to host byte order.
-.SH VERSIONS
-Similar functions are present on the BSDs,
-where the required header file is
-.I <sys/endian.h>
-instead of
-.IR <endian.h> .
-Unfortunately,
-NetBSD, FreeBSD, and glibc haven't followed the original
-OpenBSD naming convention for these functions,
-whereby the
-.I nn
-component always appears at the end of the function name
-(thus, for example, in NetBSD, FreeBSD, and glibc,
-the equivalent of OpenBSDs "betoh32" is "be32toh").
-.SH STANDARDS
-None.
-.SH HISTORY
-glibc 2.9.
-.PP
-These functions are similar to the older
-.BR byteorder (3)
-family of functions.
-For example,
-.BR be32toh ()
-is identical to
-.BR ntohl ().
-.PP
-The advantage of the
-.BR byteorder (3)
-functions is that they are standard functions available
-on all UNIX systems.
-On the other hand, the fact that they were designed
-for use in the context of TCP/IP means that
-they lack the 64-bit and little-endian variants described in this page.
-.SH EXAMPLES
-The program below display the results of converting an integer
-from host byte order to both little-endian and big-endian byte order.
-Since host byte order is either little-endian or big-endian,
-only one of these conversions will have an effect.
-When we run this program on a little-endian system such as x86-32,
-we see the following:
-.PP
-.in +4n
-.EX
-$ \fB./a.out\fP
-x.u32 = 0x44332211
-htole32(x.u32) = 0x44332211
-htobe32(x.u32) = 0x11223344
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (endian.c)
-.EX
-#include <endian.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(void)
-{
- union {
- uint32_t u32;
- uint8_t arr[4];
- } x;
-\&
- x.arr[0] = 0x11; /* Lowest\-address byte */
- x.arr[1] = 0x22;
- x.arr[2] = 0x33;
- x.arr[3] = 0x44; /* Highest\-address byte */
-\&
- printf("x.u32 = %#x\en", x.u32);
- printf("htole32(x.u32) = %#x\en", htole32(x.u32));
- printf("htobe32(x.u32) = %#x\en", htobe32(x.u32));
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR bswap (3),
-.BR byteorder (3)
diff --git a/man3/endmntent.3 b/man3/endmntent.3
deleted file mode 100644
index 3c2bb35c9..000000000
--- a/man3/endmntent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getmntent.3
diff --git a/man3/endnetent.3 b/man3/endnetent.3
deleted file mode 100644
index 70f5670dc..000000000
--- a/man3/endnetent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getnetent.3
diff --git a/man3/endnetgrent.3 b/man3/endnetgrent.3
deleted file mode 100644
index 34268f941..000000000
--- a/man3/endnetgrent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/setnetgrent.3
diff --git a/man3/endprotoent.3 b/man3/endprotoent.3
deleted file mode 100644
index f8cb4bba2..000000000
--- a/man3/endprotoent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getprotoent.3
diff --git a/man3/endpwent.3 b/man3/endpwent.3
deleted file mode 100644
index f2d121b80..000000000
--- a/man3/endpwent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getpwent.3
diff --git a/man3/endrpcent.3 b/man3/endrpcent.3
deleted file mode 100644
index 923085e2e..000000000
--- a/man3/endrpcent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getrpcent.3
diff --git a/man3/endservent.3 b/man3/endservent.3
deleted file mode 100644
index eaafb1c1e..000000000
--- a/man3/endservent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getservent.3
diff --git a/man3/endspent.3 b/man3/endspent.3
deleted file mode 100644
index 142c5a5ca..000000000
--- a/man3/endspent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getspnam.3
diff --git a/man3/endttyent.3 b/man3/endttyent.3
deleted file mode 100644
index 1cd11e3d8..000000000
--- a/man3/endttyent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getttyent.3
diff --git a/man3/endusershell.3 b/man3/endusershell.3
deleted file mode 100644
index 718ed12e9..000000000
--- a/man3/endusershell.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getusershell.3
diff --git a/man3/endutent.3 b/man3/endutent.3
deleted file mode 100644
index 29c36b72a..000000000
--- a/man3/endutent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getutent.3
diff --git a/man3/endutxent.3 b/man3/endutxent.3
deleted file mode 100644
index 29c36b72a..000000000
--- a/man3/endutxent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getutent.3
diff --git a/man3/envz.3 b/man3/envz.3
deleted file mode 100644
index 12e0737e2..000000000
--- a/man3/envz.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/envz_add.3
diff --git a/man3/envz_add.3 b/man3/envz_add.3
deleted file mode 100644
index 73bcc11ca..000000000
--- a/man3/envz_add.3
+++ /dev/null
@@ -1,171 +0,0 @@
-'\" t
-.\" Copyright 2002 walter harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" based on the description in glibc source and infopages
-.\"
-.\" Corrections and additions, aeb
-.TH envz_add 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-envz_add, envz_entry, envz_get, envz_merge,
-envz_remove, envz_strip \- environment string support
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <envz.h>
-.PP
-.BI "error_t envz_add(char **restrict " envz ", size_t *restrict " envz_len ,
-.BI " const char *restrict " name \
-", const char *restrict " value );
-.PP
-.BI "char *envz_entry(const char *restrict " envz ", size_t " envz_len ,
-.BI " const char *restrict " name );
-.PP
-.BI "char *envz_get(const char *restrict " envz ", size_t " envz_len ,
-.BI " const char *restrict " name );
-.PP
-.BI "error_t envz_merge(char **restrict " envz ", size_t *restrict " envz_len ,
-.BI " const char *restrict " envz2 ", size_t " envz2_len ,
-.BI " int " override );
-.PP
-.BI "void envz_remove(char **restrict " envz ", size_t *restrict " envz_len ,
-.BI " const char *restrict " name );
-.PP
-.BI "void envz_strip(char **restrict " envz ", size_t *restrict " envz_len );
-.fi
-.SH DESCRIPTION
-These functions are glibc-specific.
-.PP
-An argz vector is a pointer to a character buffer together with a length,
-see
-.BR argz_add (3).
-An envz vector is a special argz vector, namely one where the strings
-have the form "name=value".
-Everything after the first \[aq]=\[aq] is considered
-to be the value.
-If there is no \[aq]=\[aq], the value is taken to be NULL.
-(While the value in case of a trailing \[aq]=\[aq] is the empty string "".)
-.PP
-These functions are for handling envz vectors.
-.PP
-.BR envz_add ()
-adds the string
-.RI \&" name = value \&"
-(in case
-.I value
-is non-NULL) or
-.RI \&" name \&"
-(in case
-.I value
-is NULL) to the envz vector
-.RI ( *envz ,\ *envz_len )
-and updates
-.I *envz
-and
-.IR *envz_len .
-If an entry with the same
-.I name
-existed, it is removed.
-.PP
-.BR envz_entry ()
-looks for
-.I name
-in the envz vector
-.RI ( envz ,\ envz_len )
-and returns the entry if found, or NULL if not.
-.PP
-.BR envz_get ()
-looks for
-.I name
-in the envz vector
-.RI ( envz ,\ envz_len )
-and returns the value if found, or NULL if not.
-(Note that the value can also be NULL, namely when there is
-an entry for
-.I name
-without \[aq]=\[aq] sign.)
-.PP
-.BR envz_merge ()
-adds each entry in
-.I envz2
-to
-.IR *envz ,
-as if with
-.BR envz_add ().
-If
-.I override
-is true, then values in
-.I envz2
-will supersede those with the same name in
-.IR *envz ,
-otherwise not.
-.PP
-.BR envz_remove ()
-removes the entry for
-.I name
-from
-.RI ( *envz ,\ *envz_len )
-if there was one.
-.PP
-.BR envz_strip ()
-removes all entries with value NULL.
-.SH RETURN VALUE
-All envz functions that do memory allocation have a return type of
-.I error_t
-(an integer type),
-and return 0 for success, and
-.B ENOMEM
-if an allocation error occurs.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR envz_add (),
-.BR envz_entry (),
-.BR envz_get (),
-.BR envz_merge (),
-.BR envz_remove (),
-.BR envz_strip ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH EXAMPLES
-.\" SRC BEGIN (envz_add.c)
-.EX
-#include <envz.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(int argc, char *argv[], char *envp[])
-{
- char *str;
- size_t e_len = 0;
-\&
- for (size_t i = 0; envp[i] != NULL; i++)
- e_len += strlen(envp[i]) + 1;
-\&
- str = envz_entry(*envp, e_len, "HOME");
- printf("%s\en", str);
- str = envz_get(*envp, e_len, "HOME");
- printf("%s\en", str);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR argz_add (3)
diff --git a/man3/envz_entry.3 b/man3/envz_entry.3
deleted file mode 100644
index 12e0737e2..000000000
--- a/man3/envz_entry.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/envz_add.3
diff --git a/man3/envz_get.3 b/man3/envz_get.3
deleted file mode 100644
index 12e0737e2..000000000
--- a/man3/envz_get.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/envz_add.3
diff --git a/man3/envz_merge.3 b/man3/envz_merge.3
deleted file mode 100644
index 12e0737e2..000000000
--- a/man3/envz_merge.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/envz_add.3
diff --git a/man3/envz_remove.3 b/man3/envz_remove.3
deleted file mode 100644
index 12e0737e2..000000000
--- a/man3/envz_remove.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/envz_add.3
diff --git a/man3/envz_strip.3 b/man3/envz_strip.3
deleted file mode 100644
index 12e0737e2..000000000
--- a/man3/envz_strip.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/envz_add.3
diff --git a/man3/erand48.3 b/man3/erand48.3
deleted file mode 100644
index 3133f7d62..000000000
--- a/man3/erand48.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/drand48.3
diff --git a/man3/erand48_r.3 b/man3/erand48_r.3
deleted file mode 100644
index 81e9d8ef7..000000000
--- a/man3/erand48_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/drand48_r.3
diff --git a/man3/erf.3 b/man3/erf.3
deleted file mode 100644
index 117522805..000000000
--- a/man3/erf.3
+++ /dev/null
@@ -1,134 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH erf 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-erf, erff, erfl \- error function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double erf(double " x );
-.BI "float erff(float " x );
-.BI "long double erfl(long double " x );
-.PP
-.fi
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR erf ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR erff (),
-.BR erfl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the error function of
-.IR x ,
-defined as
-.PP
-.in +4n
-.EX
-erf(x) = 2/sqrt(pi) * integral from 0 to x of exp(\-t*t) dt
-.EE
-.in
-.SH RETURN VALUE
-On success, these functions return the value of the error function of
-.IR x ,
-a value in the range [\-1,\ 1].
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is +0 (\-0), +0 (\-0) is returned.
-.PP
-If
-.I x
-is positive infinity (negative infinity),
-+1 (\-1) is returned.
-.PP
-If
-.I x
-is subnormal,
-a range error occurs,
-and the return value is 2*x/sqrt(pi).
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Range error: result underflow (\fIx\fP is subnormal)
-.\" .I errno
-.\" is set to
-.\" .BR ERANGE .
-An underflow floating-point exception
-.RB ( FE_UNDERFLOW )
-is raised.
-.PP
-These functions do not set
-.IR errno .
-.\" It is intentional that these functions do not set errno for this case
-.\" see https://www.sourceware.org/bugzilla/show_bug.cgi?id=6785
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR erf (),
-.BR erff (),
-.BR erfl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR cerf (3),
-.BR erfc (3),
-.BR exp (3)
diff --git a/man3/erfc.3 b/man3/erfc.3
deleted file mode 100644
index a02c528bd..000000000
--- a/man3/erfc.3
+++ /dev/null
@@ -1,137 +0,0 @@
-'\" t
-.\" Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH erfc 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-erfc, erfcf, erfcl \- complementary error function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double erfc(double " x );
-.BI "float erfcf(float " x );
-.BI "long double erfcl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR erfc ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR erfcf (),
-.BR erfcl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the complementary error function of
-.IR x ,
-that is, 1.0 \- erf(x).
-.SH RETURN VALUE
-On success, these functions return the complementary error function of
-.IR x ,
-a value in the range [0,2].
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is +0 or \-0, 1 is returned.
-.PP
-If
-.I x
-is positive infinity,
-+0 is returned.
-.PP
-If
-.I x
-is negative infinity,
-+2 is returned.
-.PP
-If the function result underflows and produces an unrepresentable value,
-the return value is 0.0.
-.PP
-If the function result underflows but produces a representable
-(i.e., subnormal) value,
-.\" e.g., erfc(27) on x86-32
-that value is returned, and
-a range error occurs.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Range error: result underflow (result is subnormal)
-.\" .I errno
-.\" is set to
-.\" .BR ERANGE .
-An underflow floating-point exception
-.RB ( FE_UNDERFLOW )
-is raised.
-.PP
-These functions do not set
-.IR errno .
-.\" It is intentional that these functions do not set errno for this case
-.\" see https://www.sourceware.org/bugzilla/show_bug.cgi?id=6785
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR erfc (),
-.BR erfcf (),
-.BR erfcl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD.
-.SH NOTES
-The
-.BR erfc (),
-.BR erfcf (),
-and
-.BR erfcl ()
-functions are provided to avoid the loss accuracy that
-would occur for the calculation 1-erf(x) for large values of
-.I x
-(for which the value of erf(x) approaches 1).
-.SH SEE ALSO
-.BR cerf (3),
-.BR erf (3),
-.BR exp (3)
diff --git a/man3/erfcf.3 b/man3/erfcf.3
deleted file mode 100644
index 371bd6b5c..000000000
--- a/man3/erfcf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/erfc.3
diff --git a/man3/erfcl.3 b/man3/erfcl.3
deleted file mode 100644
index 371bd6b5c..000000000
--- a/man3/erfcl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/erfc.3
diff --git a/man3/erff.3 b/man3/erff.3
deleted file mode 100644
index fc5471fcb..000000000
--- a/man3/erff.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/erf.3
diff --git a/man3/erfl.3 b/man3/erfl.3
deleted file mode 100644
index fc5471fcb..000000000
--- a/man3/erfl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/erf.3
diff --git a/man3/err.3 b/man3/err.3
deleted file mode 100644
index dc7f43b61..000000000
--- a/man3/err.3
+++ /dev/null
@@ -1,157 +0,0 @@
-'\" t
-.\" Copyright (c) 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" From: @(#)err.3 8.1 (Berkeley) 6/9/93
-.\" $FreeBSD: src/lib/libc/gen/err.3,v 1.11.2.5 2001/08/17 15:42:32 ru Exp $
-.\"
-.\" 2011-09-10, mtk, Converted from mdoc to man macros
-.\"
-.TH err 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-err, verr, errx, verrx, warn, vwarn, warnx, vwarnx \- formatted error messages
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <err.h>
-.PP
-.BI "[[noreturn]] void err(int " eval ", const char *" fmt ", ...);"
-.BI "[[noreturn]] void errx(int " eval ", const char *" fmt ", ...);"
-.PP
-.BI "void warn(const char *" fmt ", ...);"
-.BI "void warnx(const char *" fmt ", ...);"
-.PP
-.B #include <stdarg.h>
-.PP
-.BI "[[noreturn]] void verr(int " eval ", const char *" fmt ", va_list " args );
-.BI "[[noreturn]] void verrx(int " eval ", const char *" fmt ", va_list " args );
-.PP
-.BI "void vwarn(const char *" fmt ", va_list " args );
-.BI "void vwarnx(const char *" fmt ", va_list " args );
-.fi
-.SH DESCRIPTION
-The
-.BR err ()
-and
-.BR warn ()
-family of functions display a formatted error message on the standard
-error output.
-In all cases, the last component of the program name, a colon character,
-and a space are output.
-If the
-.I fmt
-argument is not NULL, the
-.BR printf (3)-like
-formatted error message is output.
-The output is terminated by a newline character.
-.PP
-The
-.BR err (),
-.BR verr (),
-.BR warn (),
-and
-.BR vwarn ()
-functions append an error message obtained from
-.BR strerror (3)
-based on the global variable
-.IR errno ,
-preceded by another colon and space unless the
-.I fmt
-argument is
-NULL.
-.PP
-The
-.BR errx ()
-and
-.BR warnx ()
-functions do not append an error message.
-.PP
-The
-.BR err (),
-.BR verr (),
-.BR errx (),
-and
-.BR verrx ()
-functions do not return, but exit with the value of the argument
-.IR eval .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR err (),
-.BR errx (),
-.BR warn (),
-.BR warnx (),
-.BR verr (),
-.BR verrx (),
-.BR vwarn (),
-.BR vwarnx ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-BSD.
-.SH HISTORY
-.TP
-.BR err ()
-.TQ
-.BR warn ()
-4.4BSD.
-.SH EXAMPLES
-Display the current
-.I errno
-information string and exit:
-.PP
-.in +4n
-.EX
-p = malloc(size);
-if (p == NULL)
- err(EXIT_FAILURE, NULL);
-fd = open(file_name, O_RDONLY, 0);
-if (fd == \-1)
- err(EXIT_FAILURE, "%s", file_name);
-.EE
-.in
-.PP
-Display an error message and exit:
-.PP
-.in +4n
-.EX
-if (tm.tm_hour < START_TIME)
- errx(EXIT_FAILURE, "too early, wait until %s",
- start_time_string);
-.EE
-.in
-.PP
-Warn of an error:
-.PP
-.in +4n
-.EX
-fd = open(raw_device, O_RDONLY, 0);
-if (fd == \-1)
- warnx("%s: %s: trying the block device",
- raw_device, strerror(errno));
-fd = open(block_device, O_RDONLY, 0);
-if (fd == \-1)
- err(EXIT_FAILURE, "%s", block_device);
-.EE
-.in
-.SH SEE ALSO
-.BR error (3),
-.BR exit (3),
-.BR perror (3),
-.BR printf (3),
-.BR strerror (3)
diff --git a/man3/errno.3 b/man3/errno.3
deleted file mode 100644
index 26729c9c9..000000000
--- a/man3/errno.3
+++ /dev/null
@@ -1,655 +0,0 @@
-.\" Copyright (c) 1996 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 5 Oct 2002, Modified by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Updated for POSIX.1 2001
-.\" 2004-12-17 Martin Schulze <joey@infodrom.org>, mtk
-.\" Removed errno declaration prototype, added notes
-.\" 2006-02-09 Kurt Wall, mtk
-.\" Added non-POSIX errors
-.\"
-.TH errno 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-errno \- number of last error
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <errno.h>
-.\".PP
-.\".BI "extern int " errno ;
-.fi
-.SH DESCRIPTION
-The
-.I <errno.h>
-header file defines the integer variable
-.IR errno ,
-which is set by system calls and some library functions in the event
-of an error to indicate what went wrong.
-.\"
-.SS errno
-The value in
-.I errno
-is significant only when the return value of
-the call indicated an error
-(i.e., \-1 from most system calls;
-\-1 or NULL from most library functions);
-a function that succeeds
-.I is
-allowed to change
-.IR errno .
-The value of
-.I errno
-is never set to zero by any system call or library function.
-.PP
-For some system calls and library functions (e.g.,
-.BR getpriority (2)),
-\-1 is a valid return on success.
-In such cases, a successful return can be distinguished from an error
-return by setting
-.I errno
-to zero before the call, and then,
-if the call returns a status that indicates that an error
-may have occurred, checking to see if
-.I errno
-has a nonzero value.
-.PP
-.I errno
-is defined by the ISO C standard to be a modifiable lvalue
-of type
-.IR int ,
-and must not be explicitly declared;
-.I errno
-may be a macro.
-.I errno
-is thread-local; setting it in one thread
-does not affect its value in any other thread.
-.\"
-.SS Error numbers and names
-Valid error numbers are all positive numbers.
-The
-.I <errno.h>
-header file defines symbolic names for each
-of the possible error numbers that may appear in
-.IR errno .
-.PP
-All the error names specified by POSIX.1
-must have distinct values, with the exception of
-.B EAGAIN
-and
-.BR EWOULDBLOCK ,
-which may be the same.
-On Linux, these two have the same value on all architectures.
-.PP
-The error numbers that correspond to each symbolic name
-vary across UNIX systems,
-and even across different architectures on Linux.
-Therefore, numeric values are not included as part of the list of
-error names below.
-The
-.BR perror (3)
-and
-.BR strerror (3)
-functions can be used to convert these names to
-corresponding textual error messages.
-.PP
-On any particular Linux system,
-one can obtain a list of all symbolic error names and
-the corresponding error numbers using the
-.BR errno (1)
-command (part of the
-.I moreutils
-package):
-.PP
-.in +4n
-.EX
-$ \fBerrno \-l\fP
-EPERM 1 Operation not permitted
-ENOENT 2 No such file or directory
-ESRCH 3 No such process
-EINTR 4 Interrupted system call
-EIO 5 Input/output error
-\&...
-.EE
-.in
-.PP
-The
-.BR errno (1)
-command can also be used to look up individual error numbers and names,
-and to search for errors using strings from the error description,
-as in the following examples:
-.PP
-.in +4n
-.EX
-$ \fBerrno 2\fP
-ENOENT 2 No such file or directory
-$ \fBerrno ESRCH\fP
-ESRCH 3 No such process
-$ \fBerrno \-s permission\fP
-EACCES 13 Permission denied
-.EE
-.in
-.\".PP
-.\" POSIX.1 (2001 edition) lists the following symbolic error names. Of
-.\" these, \fBEDOM\fP and \fBERANGE\fP are in the ISO C standard. ISO C
-.\" Amendment 1 defines the additional error number \fBEILSEQ\fP for
-.\" coding errors in multibyte or wide characters.
-.\"
-.SS List of error names
-In the list of the symbolic error names below,
-various names are marked as follows:
-.TP
-.I POSIX.1-2001
-The name is defined by POSIX.1-2001,
-and is defined in later POSIX.1 versions, unless otherwise indicated.
-.TP
-.I POSIX.1-2008
-The name is defined in POSIX.1-2008,
-but was not present in earlier POSIX.1 standards.
-.TP
-.I C99
-The name is defined by C99.
-.PP
-Below is a list of the symbolic error names that are defined on Linux:
-.TP 16
-.B E2BIG
-Argument list too long (POSIX.1-2001).
-.TP
-.B EACCES
-Permission denied (POSIX.1-2001).
-.TP
-.B EADDRINUSE
-Address already in use (POSIX.1-2001).
-.TP
-.B EADDRNOTAVAIL
-Address not available (POSIX.1-2001).
-.\" EADV is only an error on HURD(?)
-.TP
-.B EAFNOSUPPORT
-Address family not supported (POSIX.1-2001).
-.TP
-.B EAGAIN
-Resource temporarily unavailable (may be the same value as
-.BR EWOULDBLOCK )
-(POSIX.1-2001).
-.TP
-.B EALREADY
-Connection already in progress (POSIX.1-2001).
-.TP
-.B EBADE
-Invalid exchange.
-.TP
-.B EBADF
-Bad file descriptor (POSIX.1-2001).
-.TP
-.B EBADFD
-File descriptor in bad state.
-.TP
-.B EBADMSG
-Bad message (POSIX.1-2001).
-.TP
-.B EBADR
-Invalid request descriptor.
-.TP
-.B EBADRQC
-Invalid request code.
-.TP
-.B EBADSLT
-Invalid slot.
-.\" EBFONT is defined but appears not to be used by kernel or glibc.
-.TP
-.B EBUSY
-Device or resource busy (POSIX.1-2001).
-.TP
-.B ECANCELED
-Operation canceled (POSIX.1-2001).
-.TP
-.B ECHILD
-No child processes (POSIX.1-2001).
-.TP
-.B ECHRNG
-Channel number out of range.
-.TP
-.B ECOMM
-Communication error on send.
-.TP
-.B ECONNABORTED
-Connection aborted (POSIX.1-2001).
-.TP
-.B ECONNREFUSED
-Connection refused (POSIX.1-2001).
-.TP
-.B ECONNRESET
-Connection reset (POSIX.1-2001).
-.TP
-.B EDEADLK
-Resource deadlock avoided (POSIX.1-2001).
-.TP
-.B EDEADLOCK
-On most architectures, a synonym for
-.BR EDEADLK .
-On some architectures (e.g., Linux MIPS, PowerPC, SPARC),
-it is a separate error code "File locking deadlock error".
-.TP
-.B EDESTADDRREQ
-Destination address required (POSIX.1-2001).
-.TP
-.B EDOM
-Mathematics argument out of domain of function (POSIX.1, C99).
-.\" EDOTDOT is defined but appears to be unused
-.TP
-.B EDQUOT
-.\" POSIX just says "Reserved"
-Disk quota exceeded (POSIX.1-2001).
-.TP
-.B EEXIST
-File exists (POSIX.1-2001).
-.TP
-.B EFAULT
-Bad address (POSIX.1-2001).
-.TP
-.B EFBIG
-File too large (POSIX.1-2001).
-.TP
-.B EHOSTDOWN
-Host is down.
-.TP
-.B EHOSTUNREACH
-Host is unreachable (POSIX.1-2001).
-.TP
-.B EHWPOISON
-Memory page has hardware error.
-.TP
-.B EIDRM
-Identifier removed (POSIX.1-2001).
-.TP
-.B EILSEQ
-Invalid or incomplete multibyte or wide character (POSIX.1, C99).
-.IP
-The text shown here is the glibc error description;
-in POSIX.1, this error is described as "Illegal byte sequence".
-.TP
-.B EINPROGRESS
-Operation in progress (POSIX.1-2001).
-.TP
-.B EINTR
-Interrupted function call (POSIX.1-2001); see
-.BR signal (7).
-.TP
-.B EINVAL
-Invalid argument (POSIX.1-2001).
-.TP
-.B EIO
-Input/output error (POSIX.1-2001).
-.TP
-.B EISCONN
-Socket is connected (POSIX.1-2001).
-.TP
-.B EISDIR
-Is a directory (POSIX.1-2001).
-.TP
-.B EISNAM
-Is a named type file.
-.TP
-.B EKEYEXPIRED
-Key has expired.
-.TP
-.B EKEYREJECTED
-Key was rejected by service.
-.TP
-.B EKEYREVOKED
-Key has been revoked.
-.TP
-.B EL2HLT
-Level 2 halted.
-.TP
-.B EL2NSYNC
-Level 2 not synchronized.
-.TP
-.B EL3HLT
-Level 3 halted.
-.TP
-.B EL3RST
-Level 3 reset.
-.TP
-.B ELIBACC
-Cannot access a needed shared library.
-.TP
-.B ELIBBAD
-Accessing a corrupted shared library.
-.TP
-.B ELIBMAX
-Attempting to link in too many shared libraries.
-.TP
-.B ELIBSCN
-\&.lib section in a.out corrupted
-.TP
-.B ELIBEXEC
-Cannot exec a shared library directly.
-.TP
-.B ELNRNG
-.\" ELNRNG appears to be used by a few drivers
-Link number out of range.
-.TP
-.B ELOOP
-Too many levels of symbolic links (POSIX.1-2001).
-.TP
-.B EMEDIUMTYPE
-Wrong medium type.
-.TP
-.B EMFILE
-Too many open files (POSIX.1-2001).
-Commonly caused by exceeding the
-.B RLIMIT_NOFILE
-resource limit described in
-.BR getrlimit (2).
-Can also be caused by exceeding the limit specified in
-.IR /proc/sys/fs/nr_open .
-.TP
-.B EMLINK
-Too many links (POSIX.1-2001).
-.TP
-.B EMSGSIZE
-Message too long (POSIX.1-2001).
-.TP
-.B EMULTIHOP
-.\" POSIX says "Reserved"
-Multihop attempted (POSIX.1-2001).
-.TP
-.B ENAMETOOLONG
-Filename too long (POSIX.1-2001).
-.\" ENAVAIL is defined, but appears not to be used
-.TP
-.B ENETDOWN
-Network is down (POSIX.1-2001).
-.TP
-.B ENETRESET
-Connection aborted by network (POSIX.1-2001).
-.TP
-.B ENETUNREACH
-Network unreachable (POSIX.1-2001).
-.TP
-.B ENFILE
-Too many open files in system (POSIX.1-2001).
-On Linux, this is probably a result of encountering the
-.I /proc/sys/fs/file\-max
-limit (see
-.BR proc (5)).
-.TP
-.B ENOANO
-.\" ENOANO appears to be used by a few drivers
-No anode.
-.TP
-.B ENOBUFS
-No buffer space available (POSIX.1 (XSI STREAMS option)).
-.\" ENOCSI is defined but appears to be unused.
-.TP
-.B ENODATA
-The named attribute does not exist,
-or the process has no access to this attribute; see
-.BR xattr (7).
-.IP
-In POSIX.1-2001 (XSI STREAMS option),
-this error was described as
-"No message is available on the STREAM head read queue".
-.TP
-.B ENODEV
-No such device (POSIX.1-2001).
-.TP
-.B ENOENT
-No such file or directory (POSIX.1-2001).
-.IP
-Typically, this error results when a specified pathname does not exist,
-or one of the components in the directory prefix of a pathname does not exist,
-or the specified pathname is a dangling symbolic link.
-.TP
-.B ENOEXEC
-Exec format error (POSIX.1-2001).
-.TP
-.B ENOKEY
-Required key not available.
-.TP
-.B ENOLCK
-No locks available (POSIX.1-2001).
-.TP
-.B ENOLINK
-.\" POSIX says "Reserved"
-Link has been severed (POSIX.1-2001).
-.TP
-.B ENOMEDIUM
-No medium found.
-.TP
-.B ENOMEM
-Not enough space/cannot allocate memory (POSIX.1-2001).
-.TP
-.B ENOMSG
-No message of the desired type (POSIX.1-2001).
-.TP
-.B ENONET
-Machine is not on the network.
-.TP
-.B ENOPKG
-Package not installed.
-.TP
-.B ENOPROTOOPT
-Protocol not available (POSIX.1-2001).
-.TP
-.B ENOSPC
-No space left on device (POSIX.1-2001).
-.TP
-.B ENOSR
-No STREAM resources (POSIX.1 (XSI STREAMS option)).
-.TP
-.B ENOSTR
-Not a STREAM (POSIX.1 (XSI STREAMS option)).
-.TP
-.B ENOSYS
-Function not implemented (POSIX.1-2001).
-.TP
-.B ENOTBLK
-Block device required.
-.TP
-.B ENOTCONN
-The socket is not connected (POSIX.1-2001).
-.TP
-.B ENOTDIR
-Not a directory (POSIX.1-2001).
-.TP
-.B ENOTEMPTY
-Directory not empty (POSIX.1-2001).
-.\" ENOTNAM is defined but appears to be unused.
-.TP
-.B ENOTRECOVERABLE
-State not recoverable (POSIX.1-2008).
-.TP
-.B ENOTSOCK
-Not a socket (POSIX.1-2001).
-.TP
-.B ENOTSUP
-Operation not supported (POSIX.1-2001).
-.TP
-.B ENOTTY
-Inappropriate I/O control operation (POSIX.1-2001).
-.TP
-.B ENOTUNIQ
-Name not unique on network.
-.TP
-.B ENXIO
-No such device or address (POSIX.1-2001).
-.TP
-.B EOPNOTSUPP
-Operation not supported on socket (POSIX.1-2001).
-.IP
-.RB ( ENOTSUP
-and
-.B EOPNOTSUPP
-have the same value on Linux, but
-according to POSIX.1 these error values should be distinct.)
-.TP
-.B EOVERFLOW
-Value too large to be stored in data type (POSIX.1-2001).
-.TP
-.B EOWNERDEAD
-.\" Used at least by the user-space side of rubost mutexes
-Owner died (POSIX.1-2008).
-.TP
-.B EPERM
-Operation not permitted (POSIX.1-2001).
-.TP
-.B EPFNOSUPPORT
-Protocol family not supported.
-.TP
-.B EPIPE
-Broken pipe (POSIX.1-2001).
-.TP
-.B EPROTO
-Protocol error (POSIX.1-2001).
-.TP
-.B EPROTONOSUPPORT
-Protocol not supported (POSIX.1-2001).
-.TP
-.B EPROTOTYPE
-Protocol wrong type for socket (POSIX.1-2001).
-.TP
-.B ERANGE
-Result too large (POSIX.1, C99).
-.TP
-.B EREMCHG
-Remote address changed.
-.TP
-.B EREMOTE
-Object is remote.
-.TP
-.B EREMOTEIO
-Remote I/O error.
-.TP
-.B ERESTART
-Interrupted system call should be restarted.
-.TP
-.B ERFKILL
-.\" ERFKILL appears to be used by various drivers
-Operation not possible due to RF-kill.
-.TP
-.B EROFS
-Read-only filesystem (POSIX.1-2001).
-.TP
-.B ESHUTDOWN
-Cannot send after transport endpoint shutdown.
-.TP
-.B ESPIPE
-Invalid seek (POSIX.1-2001).
-.TP
-.B ESOCKTNOSUPPORT
-Socket type not supported.
-.TP
-.B ESRCH
-No such process (POSIX.1-2001).
-.\" ESRMNT is defined but appears not to be used
-.TP
-.B ESTALE
-Stale file handle (POSIX.1-2001).
-.IP
-This error can occur for NFS and for other filesystems.
-.TP
-.B ESTRPIPE
-Streams pipe error.
-.TP
-.B ETIME
-Timer expired
-(POSIX.1 (XSI STREAMS option)).
-.IP
-(POSIX.1 says "STREAM
-.BR ioctl (2)
-timeout".)
-.TP
-.B ETIMEDOUT
-Connection timed out (POSIX.1-2001).
-.TP
-.B ETOOMANYREFS
-.\" ETOOMANYREFS seems to be used in net/unix/af_unix.c
-Too many references: cannot splice.
-.TP
-.B ETXTBSY
-Text file busy (POSIX.1-2001).
-.TP
-.B EUCLEAN
-Structure needs cleaning.
-.TP
-.B EUNATCH
-Protocol driver not attached.
-.TP
-.B EUSERS
-Too many users.
-.TP
-.B EWOULDBLOCK
-Operation would block (may be same value as
-.BR EAGAIN )
-(POSIX.1-2001).
-.TP
-.B EXDEV
-Invalid cross-device link (POSIX.1-2001).
-.TP
-.B EXFULL
-Exchange full.
-.SH NOTES
-A common mistake is to do
-.PP
-.in +4n
-.EX
-if (somecall() == \-1) {
- printf("somecall() failed\en");
- if (errno == ...) { ... }
-}
-.EE
-.in
-.PP
-where
-.I errno
-no longer needs to have the value it had upon return from
-.IR somecall ()
-(i.e., it may have been changed by the
-.BR printf (3)).
-If the value of
-.I errno
-should be preserved across a library call, it must be saved:
-.PP
-.in +4n
-.EX
-if (somecall() == \-1) {
- int errsv = errno;
- printf("somecall() failed\en");
- if (errsv == ...) { ... }
-}
-.EE
-.in
-.PP
-Note that the POSIX threads APIs do
-.I not
-set
-.I errno
-on error.
-Instead, on failure they return an error number as the function result.
-These error numbers have the same meanings as the error numbers returned in
-.I errno
-by other APIs.
-.PP
-On some ancient systems,
-.I <errno.h>
-was not present or did not declare
-.IR errno ,
-so that it was necessary to declare
-.I errno
-manually
-(i.e.,
-.IR "extern int errno" ).
-.BR "Do not do this" .
-It long ago ceased to be necessary,
-and it will cause problems with modern versions of the C library.
-.SH SEE ALSO
-.BR errno (1), \" In the moreutils package
-.BR err (3),
-.BR error (3),
-.BR perror (3),
-.BR strerror (3)
diff --git a/man3/error.3 b/man3/error.3
deleted file mode 100644
index b6ac915dd..000000000
--- a/man3/error.3
+++ /dev/null
@@ -1,170 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Justin Pryzby <pryzbyj@justinpryzby.com>
-.\" and Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" %%%LICENSE_START(PERMISSIVE_MISC)
-.\" Permission is hereby granted, free of charge, to any person obtaining
-.\" a copy of this software and associated documentation files (the
-.\" "Software"), to deal in the Software without restriction, including
-.\" without limitation the rights to use, copy, modify, merge, publish,
-.\" distribute, sublicense, and/or sell copies of the Software, and to
-.\" permit persons to whom the Software is furnished to do so, subject to
-.\" the following conditions:
-.\"
-.\" The above copyright notice and this permission notice shall be
-.\" included in all copies or substantial portions of the Software.
-.\"
-.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-.\" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-.\" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-.\" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-.\" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-.\" %%%LICENSE_END
-.\"
-.\" References:
-.\" glibc manual and source
-.TH error 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-error, error_at_line, error_message_count, error_one_per_line,
-error_print_progname \- glibc error reporting functions
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <error.h>
-.PP
-.BI "void error(int " status ", int " errnum ", const char *" format ", ...);"
-.BI "void error_at_line(int " status ", int " errnum ", const char *" filename ,
-.BI " unsigned int " linenum ", const char *" format ", ...);"
-.PP
-.BI "extern unsigned int " error_message_count ;
-.BI "extern int " error_one_per_line ;
-.PP
-.BI "extern void (*" error_print_progname ")(void);"
-.fi
-.SH DESCRIPTION
-.BR error ()
-is a general error-reporting function.
-It flushes
-.IR stdout ,
-and then outputs to
-.I stderr
-the program name, a colon and a space, the message specified by the
-.BR printf (3)-style
-format string \fIformat\fP, and, if \fIerrnum\fP is
-nonzero, a second colon and a space followed by the string given by
-.IR strerror(errnum) .
-Any arguments required for
-.I format
-should follow
-.I format
-in the argument list.
-The output is terminated by a newline character.
-.PP
-The program name printed by
-.BR error ()
-is the value of the global variable
-.BR program_invocation_name (3).
-.I program_invocation_name
-initially has the same value as
-.IR main ()'s
-.IR argv[0] .
-The value of this variable can be modified to change the output of
-.BR error ().
-.PP
-If \fIstatus\fP has a nonzero value, then
-.BR error ()
-calls
-.BR exit (3)
-to terminate the program using the given value as the exit status;
-otherwise it returns after printing the error message.
-.PP
-The
-.BR error_at_line ()
-function is exactly the same as
-.BR error (),
-except for the addition of the arguments
-.I filename
-and
-.IR linenum .
-The output produced is as for
-.BR error (),
-except that after the program name are written: a colon, the value of
-.IR filename ,
-a colon, and the value of
-.IR linenum .
-The preprocessor values \fB__LINE__\fP and
-\fB__FILE__\fP may be useful when calling
-.BR error_at_line (),
-but other values can also be used.
-For example, these arguments could refer to a location in an input file.
-.PP
-If the global variable \fIerror_one_per_line\fP is set nonzero,
-a sequence of
-.BR error_at_line ()
-calls with the
-same value of \fIfilename\fP and \fIlinenum\fP will result in only
-one message (the first) being output.
-.PP
-The global variable \fIerror_message_count\fP counts the number of
-messages that have been output by
-.BR error ()
-and
-.BR error_at_line ().
-.PP
-If the global variable \fIerror_print_progname\fP
-is assigned the address of a function
-(i.e., is not NULL), then that function is called
-instead of prefixing the message with the program name and colon.
-The function should print a suitable string to
-.IR stderr .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR error ()
-T} Thread safety MT-Safe locale
-T{
-.BR error_at_line ()
-T} Thread safety T{
-MT-Unsafe\ race: error_at_line/\:error_one_per_line locale
-T}
-.TE
-.hy
-.ad
-.sp 1
-.PP
-The internal
-.I error_one_per_line
-variable is accessed (without any form of synchronization, but since it's an
-.I int
-used once, it should be safe enough) and, if
-.I error_one_per_line
-is set nonzero, the internal static variables (not exposed to users)
-used to hold the last printed filename and line number are accessed
-and modified without synchronization; the update is not atomic and it
-occurs before disabling cancelation, so it can be interrupted only after
-one of the two variables is modified.
-After that,
-.BR error_at_line ()
-is very much like
-.BR error ().
-.SH STANDARDS
-GNU.
-.SH SEE ALSO
-.BR err (3),
-.BR errno (3),
-.BR exit (3),
-.BR perror (3),
-.BR program_invocation_name (3),
-.BR strerror (3)
diff --git a/man3/error_at_line.3 b/man3/error_at_line.3
deleted file mode 100644
index 7ce8691bf..000000000
--- a/man3/error_at_line.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/error.3
diff --git a/man3/error_message_count.3 b/man3/error_message_count.3
deleted file mode 100644
index 7ce8691bf..000000000
--- a/man3/error_message_count.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/error.3
diff --git a/man3/error_one_per_line.3 b/man3/error_one_per_line.3
deleted file mode 100644
index 7ce8691bf..000000000
--- a/man3/error_one_per_line.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/error.3
diff --git a/man3/error_print_progname.3 b/man3/error_print_progname.3
deleted file mode 100644
index 7ce8691bf..000000000
--- a/man3/error_print_progname.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/error.3
diff --git a/man3/errx.3 b/man3/errx.3
deleted file mode 100644
index 3ee2e497a..000000000
--- a/man3/errx.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/err.3
diff --git a/man3/etext.3 b/man3/etext.3
deleted file mode 100644
index 94843fb05..000000000
--- a/man3/etext.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/end.3
diff --git a/man3/ether_aton.3 b/man3/ether_aton.3
deleted file mode 100644
index 842cc47c3..000000000
--- a/man3/ether_aton.3
+++ /dev/null
@@ -1,144 +0,0 @@
-'\" t
-.\" Copyright 2002 Ian Redfern (redferni@logica.com)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" FreeBSD 4.4 man pages
-.\"
-.\" Minor additions, aeb, 2013-06-21
-.\"
-.TH ether_aton 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ether_aton, ether_ntoa, ether_ntohost, ether_hostton, ether_line,
-ether_ntoa_r, ether_aton_r \- Ethernet address manipulation routines
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <netinet/ether.h>
-.PP
-.BI "char *ether_ntoa(const struct ether_addr *" addr );
-.BI "struct ether_addr *ether_aton(const char *" asc );
-.PP
-.BI "int ether_ntohost(char *" hostname ", const struct ether_addr *" addr );
-.BI "int ether_hostton(const char *" hostname ", struct ether_addr *" addr );
-.PP
-.BI "int ether_line(const char *" line ", struct ether_addr *" addr ,
-.BI " char *" hostname );
-.PP
-/* GNU extensions */
-.BI "char *ether_ntoa_r(const struct ether_addr *" addr ", char *" buf );
-.PP
-.BI "struct ether_addr *ether_aton_r(const char *" asc ,
-.BI " struct ether_addr *" addr );
-.fi
-.SH DESCRIPTION
-.BR ether_aton ()
-converts the 48-bit Ethernet host address
-.I asc
-from the standard hex-digits-and-colons notation into binary data in
-network byte order and returns a pointer to it in a statically
-allocated buffer, which subsequent calls will
-overwrite.
-.BR ether_aton ()
-returns NULL if the address is invalid.
-.PP
-The
-.BR ether_ntoa ()
-function converts the Ethernet host address
-.I addr
-given in network byte order to a string in standard
-hex-digits-and-colons notation, omitting leading zeros.
-The string is returned in a statically allocated buffer,
-which subsequent calls will overwrite.
-.PP
-The
-.BR ether_ntohost ()
-function maps an Ethernet address to the
-corresponding hostname in
-.I /etc/ethers
-and returns nonzero if it cannot be found.
-.PP
-The
-.BR ether_hostton ()
-function maps a hostname to the
-corresponding Ethernet address in
-.I /etc/ethers
-and returns nonzero if it cannot be found.
-.PP
-The
-.BR ether_line ()
-function parses a line in
-.I /etc/ethers
-format (ethernet address followed by whitespace followed by
-hostname; \[aq]#\[aq] introduces a comment) and returns an address
-and hostname pair, or nonzero if it cannot be parsed.
-The buffer pointed to by
-.I hostname
-must be sufficiently long, for example, have the same length as
-.IR line .
-.PP
-The functions
-.BR ether_ntoa_r ()
-and
-.BR ether_aton_r ()
-are reentrant
-thread-safe versions of
-.BR ether_ntoa ()
-and
-.BR ether_aton ()
-respectively, and do not use static buffers.
-.PP
-The structure
-.I ether_addr
-is defined in
-.I <net/ethernet.h>
-as:
-.PP
-.in +4n
-.EX
-struct ether_addr {
- uint8_t ether_addr_octet[6];
-}
-.EE
-.in
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ether_aton (),
-.BR ether_ntoa ()
-T} Thread safety MT-Unsafe
-T{
-.BR ether_ntohost (),
-.BR ether_hostton (),
-.BR ether_line (),
-.BR ether_ntoa_r (),
-.BR ether_aton_r ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-4.3BSD, SunOS.
-.SH BUGS
-In glibc 2.2.5 and earlier, the implementation of
-.BR ether_line ()
-.\" The fix was presumably commit c0a0f9a32c8baa6ab93d00eb42d92c02e9e146d7
-.\" which was in glibc 2.3
-is broken.
-.SH SEE ALSO
-.BR ethers (5)
diff --git a/man3/ether_aton_r.3 b/man3/ether_aton_r.3
deleted file mode 100644
index f88e044ab..000000000
--- a/man3/ether_aton_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ether_aton.3
diff --git a/man3/ether_hostton.3 b/man3/ether_hostton.3
deleted file mode 100644
index f88e044ab..000000000
--- a/man3/ether_hostton.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ether_aton.3
diff --git a/man3/ether_line.3 b/man3/ether_line.3
deleted file mode 100644
index f88e044ab..000000000
--- a/man3/ether_line.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ether_aton.3
diff --git a/man3/ether_ntoa.3 b/man3/ether_ntoa.3
deleted file mode 100644
index f88e044ab..000000000
--- a/man3/ether_ntoa.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ether_aton.3
diff --git a/man3/ether_ntoa_r.3 b/man3/ether_ntoa_r.3
deleted file mode 100644
index f88e044ab..000000000
--- a/man3/ether_ntoa_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ether_aton.3
diff --git a/man3/ether_ntohost.3 b/man3/ether_ntohost.3
deleted file mode 100644
index f88e044ab..000000000
--- a/man3/ether_ntohost.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ether_aton.3
diff --git a/man3/euidaccess.3 b/man3/euidaccess.3
deleted file mode 100644
index 2ff79e60a..000000000
--- a/man3/euidaccess.3
+++ /dev/null
@@ -1,107 +0,0 @@
-'\" t
-.\" Copyright (C) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH euidaccess 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-euidaccess, eaccess \- check effective user's permissions for a file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <unistd.h>
-.PP
-.BI "int euidaccess(const char *" pathname ", int " mode );
-.BI "int eaccess(const char *" pathname ", int " mode );
-.fi
-.SH DESCRIPTION
-Like
-.BR access (2),
-.BR euidaccess ()
-checks permissions and existence of the file identified by its argument
-.IR pathname .
-However, whereas
-.BR access (2)
-performs checks using the real user and group identifiers of the process,
-.BR euidaccess ()
-uses the effective identifiers.
-.PP
-.I mode
-is a mask consisting of one or more of
-.BR R_OK ", " W_OK ", " X_OK ", and " F_OK ,
-with the same meanings as for
-.BR access (2).
-.PP
-.BR eaccess ()
-is a synonym for
-.BR euidaccess (),
-provided for compatibility with some other systems.
-.SH RETURN VALUE
-On success (all requested permissions granted), zero is returned.
-On error (at least one bit in
-.I mode
-asked for a permission that is denied, or some other error occurred),
-\-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-As for
-.BR access (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR euidaccess (),
-.BR eaccess ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-Some other systems have an
-.\" e.g., FreeBSD 6.1.
-.BR eaccess ()
-function.
-.SH STANDARDS
-None.
-.SH HISTORY
-.TP
-.BR eaccess ()
-glibc 2.4.
-.SH NOTES
-.IR Warning :
-Using this function to check a process's permissions on a file before
-performing some operation based on that information leads to race conditions:
-the file permissions may change between the two steps.
-Generally, it is safer just to attempt the desired operation and handle
-any permission error that occurs.
-.PP
-This function always dereferences symbolic links.
-If you need to check the permissions on a symbolic link, use
-.BR faccessat (2)
-with the flags
-.B AT_EACCESS
-and
-.BR AT_SYMLINK_NOFOLLOW .
-.SH SEE ALSO
-.BR access (2),
-.BR chmod (2),
-.BR chown (2),
-.BR faccessat (2),
-.BR open (2),
-.BR setgid (2),
-.BR setuid (2),
-.BR stat (2),
-.BR credentials (7),
-.BR path_resolution (7)
diff --git a/man3/eventfd_read.3 b/man3/eventfd_read.3
deleted file mode 100644
index eddfaa8a1..000000000
--- a/man3/eventfd_read.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/eventfd.2
diff --git a/man3/eventfd_write.3 b/man3/eventfd_write.3
deleted file mode 100644
index eddfaa8a1..000000000
--- a/man3/eventfd_write.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/eventfd.2
diff --git a/man3/exec.3 b/man3/exec.3
deleted file mode 100644
index d770dcadb..000000000
--- a/man3/exec.3
+++ /dev/null
@@ -1,312 +0,0 @@
-'\" t
-.\" Copyright (c) 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)exec.3 6.4 (Berkeley) 4/19/91
-.\"
-.\" Converted for Linux, Mon Nov 29 11:12:48 1993, faith@cs.unc.edu
-.\" Updated more for Linux, Tue Jul 15 11:54:18 1997, pacman@cqc.com
-.\" Modified, 24 Jun 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added note on casting NULL
-.\"
-.TH exec 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-execl, execlp, execle, execv, execvp, execvpe \- execute a file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.B extern char **environ;
-.PP
-.BI "int execl(const char *" pathname ", const char *" arg ", ..."
-.B " /*, (char *) NULL */);"
-.BI "int execlp(const char *" file ", const char *" arg ", ..."
-.B " /*, (char *) NULL */);"
-.BI "int execle(const char *" pathname ", const char *" arg ", ..."
-.BI " /*, (char *) NULL, char *const " envp "[] */);"
-.BI "int execv(const char *" pathname ", char *const " argv "[]);"
-.BI "int execvp(const char *" file ", char *const " argv "[]);"
-.BI "int execvpe(const char *" file ", char *const " argv \
-"[], char *const " envp "[]);"
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR execvpe ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR exec ()
-family of functions replaces the current process image with a new process
-image.
-The functions described in this manual page are layered on top of
-.BR execve (2).
-(See the manual page for
-.BR execve (2)
-for further details about the replacement of the current process image.)
-.PP
-The initial argument for these functions is the name of a file that is
-to be executed.
-.PP
-The functions can be grouped based on the letters following the "exec" prefix.
-.\"
-.SS l - execl(), execlp(), execle()
-The
-.I "const char\ *arg"
-and subsequent ellipses can be thought of as
-.IR arg0 ,
-.IR arg1 ,
-\&...,
-.IR argn .
-Together they describe a list of one or more pointers to null-terminated
-strings that represent the argument list available to the executed program.
-The first argument, by convention, should point to the filename associated
-with the file being executed.
-The list of arguments
-.I must
-be terminated by a null pointer,
-and, since these are variadic functions, this pointer must be cast
-.IR "(char\ *) NULL" .
-.PP
-By contrast with the 'l' functions, the 'v' functions (below) specify the
-command-line arguments of the executed program as a vector.
-.\"
-.SS v - execv(), execvp(), execvpe()
-The
-.I "char\ *const argv[]"
-argument is an array of pointers to null-terminated strings that
-represent the argument list available to the new program.
-The first argument, by convention, should point to the filename
-associated with the file being executed.
-The array of pointers
-.I must
-be terminated by a null pointer.
-.SS e - execle(), execvpe()
-The environment of the new process image is specified via the argument
-.IR envp .
-The
-.I envp
-argument is an array of pointers to null-terminated strings and
-.I must
-be terminated by a null pointer.
-.PP
-All other
-.BR exec ()
-functions (which do not include 'e' in the suffix)
-take the environment for the new process
-image from the external variable
-.I environ
-in the calling process.
-.SS p - execlp(), execvp(), execvpe()
-These functions duplicate the actions of the shell in
-searching for an executable file
-if the specified filename does not contain a slash (/) character.
-The file is sought in the colon-separated list of directory pathnames
-specified in the
-.B PATH
-environment variable.
-If this variable isn't defined, the path list defaults to
-a list that includes the directories returned by
-.I confstr(_CS_PATH)
-(which typically returns the value "/bin:/usr/bin")
-and possibly also the current working directory;
-see NOTES for further details.
-.PP
-.BR execvpe ()
-searches for the program using the value of
-.B PATH
-from the caller's environment, not from the
-.I envp
-argument.
-.PP
-If the specified filename includes a slash character, then
-.B PATH
-is ignored, and the file at the specified pathname is executed.
-.PP
-In addition, certain errors are treated specially.
-.PP
-If permission is denied for a file (the attempted
-.BR execve (2)
-failed with the error
-.BR EACCES ),
-these functions will continue searching the rest of the search path.
-If no other file is found, however,
-they will return with
-.I errno
-set to
-.BR EACCES .
-.PP
-If the header of a file isn't recognized (the attempted
-.BR execve (2)
-failed with the error
-.BR ENOEXEC ),
-these functions will execute the shell
-.RI ( /bin/sh )
-with the path of the file as its first argument.
-(If this attempt fails, no further searching is done.)
-.PP
-All other
-.BR exec ()
-functions (which do not include 'p' in the suffix)
-take as their first argument a (relative or absolute) pathname
-that identifies the program to be executed.
-.SH RETURN VALUE
-The
-.BR exec ()
-functions return only if an error has occurred.
-The return value is \-1, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-All of these functions may fail and set
-.I errno
-for any of the errors specified for
-.BR execve (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR execl (),
-.BR execle (),
-.BR execv ()
-T} Thread safety MT-Safe
-T{
-.BR execlp (),
-.BR execvp (),
-.BR execvpe ()
-T} Thread safety MT-Safe env
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The default search path (used when the environment
-does not contain the variable \fBPATH\fR)
-shows some variation across systems.
-It generally includes
-.I /bin
-and
-.I /usr/bin
-(in that order) and may also include the current working directory.
-On some other systems, the current working is included after
-.I /bin
-and
-.IR /usr/bin ,
-as an anti-Trojan-horse measure.
-The glibc implementation long followed the traditional default where
-the current working directory is included at the start of the search path.
-However, some code refactoring during the development of glibc 2.24
-.\" glibc commit 1eb8930608705702d5746e5491bab4e4429fcb83
-caused the current working directory to be dropped altogether
-from the default search path.
-This accidental behavior change is considered mildly beneficial,
-and won't be reverted.
-.PP
-The behavior of
-.BR execlp ()
-and
-.BR execvp ()
-when errors occur while attempting to execute the file is historic
-practice, but has not traditionally been documented and is not specified by
-the POSIX standard.
-BSD (and possibly other systems) do an automatic
-sleep and retry if
-.B ETXTBSY
-is encountered.
-Linux treats it as a hard
-error and returns immediately.
-.PP
-Traditionally, the functions
-.BR execlp ()
-and
-.BR execvp ()
-ignored all errors except for the ones described above and
-.B ENOMEM
-and
-.BR E2BIG ,
-upon which they returned.
-They now return if any error other than the ones
-described above occurs.
-.SH STANDARDS
-.TP
-.B environ
-.TQ
-.BR execl ()
-.TQ
-.BR execlp ()
-.TQ
-.BR execle ()
-.TQ
-.BR execv ()
-.TQ
-.BR execvp ()
-POSIX.1-2008.
-.TP
-.BR execvpe ()
-GNU.
-.SH HISTORY
-.TP
-.B environ
-.TQ
-.BR execl ()
-.TQ
-.BR execlp ()
-.TQ
-.BR execle ()
-.TQ
-.BR execv ()
-.TQ
-.BR execvp ()
-POSIX.1-2001.
-.TP
-.BR execvpe ()
-glibc 2.11.
-.SH BUGS
-Before glibc 2.24,
-.BR execl ()
-and
-.BR execle ()
-employed
-.BR realloc (3)
-internally and were consequently not async-signal-safe,
-in violation of the requirements of POSIX.1.
-.\" https://sourceware.org/bugzilla/show_bug.cgi?id=19534
-This was fixed in glibc 2.24.
-.\"
-.SS Architecture-specific details
-On sparc and sparc64,
-.BR execv ()
-is provided as a system call by the kernel
-(with the prototype shown above)
-for compatibility with SunOS.
-This function is
-.I not
-employed by the
-.BR execv ()
-wrapper function on those architectures.
-.SH SEE ALSO
-.BR sh (1),
-.BR execve (2),
-.BR execveat (2),
-.BR fork (2),
-.BR ptrace (2),
-.BR fexecve (3),
-.BR system (3),
-.BR environ (7)
diff --git a/man3/execl.3 b/man3/execl.3
deleted file mode 100644
index 4bf4872a6..000000000
--- a/man3/execl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/exec.3
diff --git a/man3/execle.3 b/man3/execle.3
deleted file mode 100644
index 4bf4872a6..000000000
--- a/man3/execle.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/exec.3
diff --git a/man3/execlp.3 b/man3/execlp.3
deleted file mode 100644
index 4bf4872a6..000000000
--- a/man3/execlp.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/exec.3
diff --git a/man3/execv.3 b/man3/execv.3
deleted file mode 100644
index 4bf4872a6..000000000
--- a/man3/execv.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/exec.3
diff --git a/man3/execvp.3 b/man3/execvp.3
deleted file mode 100644
index 4bf4872a6..000000000
--- a/man3/execvp.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/exec.3
diff --git a/man3/execvpe.3 b/man3/execvpe.3
deleted file mode 100644
index 4bf4872a6..000000000
--- a/man3/execvpe.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/exec.3
diff --git a/man3/exit.3 b/man3/exit.3
deleted file mode 100644
index 05b7fb54d..000000000
--- a/man3/exit.3
+++ /dev/null
@@ -1,205 +0,0 @@
-'\" t
-.\" Copyright (C) 2001 Andries Brouwer <aeb@cwi.nl>.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" FIXME . There are a lot of other process termination actions that
-.\" could be listed on this page. See, for example, the list in the
-.\" POSIX exit(3p) page.
-.\"
-.TH exit 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-exit \- cause normal process termination
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "[[noreturn]] void exit(int " status );
-.fi
-.SH DESCRIPTION
-The
-.BR exit ()
-function causes normal process termination and the least significant byte of
-.I status
-(i.e., \fIstatus & 0xFF\fP) is returned to the parent (see
-.BR wait (2)).
-.PP
-All functions registered with
-.BR atexit (3)
-and
-.BR on_exit (3)
-are called, in the reverse order of their registration.
-(It is possible for one of these functions to use
-.BR atexit (3)
-or
-.BR on_exit (3)
-to register an additional
-function to be executed during exit processing;
-the new registration is added to the front of the list of functions
-that remain to be called.)
-If one of these functions does not return
-(e.g., it calls
-.BR _exit (2),
-or kills itself with a signal),
-then none of the remaining functions is called,
-and further exit processing (in particular, flushing of
-.BR stdio (3)
-streams) is abandoned.
-If a function has been registered multiple times using
-.BR atexit (3)
-or
-.BR on_exit (3),
-then it is called as many times as it was registered.
-.PP
-All open
-.BR stdio (3)
-streams are flushed and closed.
-Files created by
-.BR tmpfile (3)
-are removed.
-.PP
-The C standard specifies two constants,
-\fBEXIT_SUCCESS\fP and \fBEXIT_FAILURE\fP,
-that may be passed to
-.BR exit ()
-to indicate successful or unsuccessful
-termination, respectively.
-.SH RETURN VALUE
-The
-.BR exit ()
-function does not return.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR exit ()
-T} Thread safety MT-Unsafe race:exit
-.TE
-.hy
-.ad
-.sp 1
-.PP
-The
-.BR exit ()
-function uses a global variable that is not protected,
-so it is not thread-safe.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C89, POSIX.1-2001, SVr4, 4.3BSD.
-.SH NOTES
-The behavior is undefined if one of the functions registered using
-.BR atexit (3)
-and
-.BR on_exit (3)
-calls either
-.BR exit ()
-or
-.BR longjmp (3).
-Note that a call to
-.BR execve (2)
-removes registrations created using
-.BR atexit (3)
-and
-.BR on_exit (3).
-.PP
-The use of
-.B EXIT_SUCCESS
-and
-.B EXIT_FAILURE
-is slightly more portable
-(to non-UNIX environments) than the use of 0 and some nonzero value
-like 1 or \-1.
-In particular, VMS uses a different convention.
-.PP
-BSD has attempted to standardize exit codes
-(which some C libraries such as the GNU C library have also adopted);
-see the file
-.IR <sysexits.h> .
-.PP
-After
-.BR exit (),
-the exit status must be transmitted to the
-parent process.
-There are three cases:
-.IP \[bu] 3
-If the parent has set
-.BR SA_NOCLDWAIT ,
-or has set the
-.B SIGCHLD
-handler to
-.BR SIG_IGN ,
-the status is discarded and the child dies immediately.
-.IP \[bu]
-If the parent was waiting on the child,
-it is notified of the exit status and the child dies immediately.
-.IP \[bu]
-Otherwise,
-the child becomes a "zombie" process:
-most of the process resources are recycled,
-but a slot containing minimal information about the child process
-(termination status, resource usage statistics) is retained in process table.
-This allows the parent to subsequently use
-.BR waitpid (2)
-(or similar) to learn the termination status of the child;
-at that point the zombie process slot is released.
-.PP
-If the implementation supports the
-.B SIGCHLD
-signal, this signal
-is sent to the parent.
-If the parent has set
-.BR SA_NOCLDWAIT ,
-it is undefined whether a
-.B SIGCHLD
-signal is sent.
-.\"
-.SS Signals sent to other processes
-If the exiting process is a session leader and its controlling terminal
-is the controlling terminal of the session, then each process in
-the foreground process group of this controlling terminal
-is sent a
-.B SIGHUP
-signal, and the terminal is disassociated
-from this session, allowing it to be acquired by a new controlling
-process.
-.PP
-If the exit of the process causes a process group to become orphaned,
-and if any member of the newly orphaned process group is stopped,
-then a
-.B SIGHUP
-signal followed by a
-.B SIGCONT
-signal will be
-sent to each process in this process group.
-See
-.BR setpgid (2)
-for an explanation of orphaned process groups.
-.PP
-Except in the above cases,
-where the signalled processes may be children of the terminating process,
-termination of a process does
-.I not
-in general cause a signal to be sent to children of that process.
-However, a process can use the
-.BR prctl (2)
-.B PR_SET_PDEATHSIG
-operation to arrange that it receives a signal if its parent terminates.
-.SH SEE ALSO
-.BR _exit (2),
-.BR get_robust_list (2),
-.BR setpgid (2),
-.BR wait (2),
-.BR atexit (3),
-.BR on_exit (3),
-.BR tmpfile (3)
diff --git a/man3/exp.3 b/man3/exp.3
deleted file mode 100644
index ce4c29eb4..000000000
--- a/man3/exp.3
+++ /dev/null
@@ -1,136 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 1995-08-14 by Arnt Gulbrandsen <agulbra@troll.no>
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH exp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-exp, expf, expl \- base-e exponential function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double exp(double " x );
-.BI "float expf(float " x );
-.BI "long double expl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR expf (),
-.BR expl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the value of e (the base of natural
-logarithms) raised to the power of
-.IR x .
-.SH RETURN VALUE
-On success, these functions return the exponential value of
-.IR x .
-.PP
-If
-.I x
-is a NaN,
-a NaN is returned.
-.PP
-If
-.I x
-is positive infinity,
-positive infinity is returned.
-.PP
-If
-.I x
-is negative infinity,
-+0 is returned.
-.PP
-If the result underflows,
-a range error occurs,
-and zero is returned.
-.PP
-If the result overflows,
-a range error occurs,
-and the functions return
-.RB + HUGE_VAL ,
-.RB + HUGE_VALF ,
-or
-.RB + HUGE_VALL ,
-respectively.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Range error, overflow
-.I errno
-is set to
-.BR ERANGE .
-An overflow floating-point exception
-.RB ( FE_OVERFLOW )
-is raised.
-.TP
-Range error, underflow
-.I errno
-is set to
-.BR ERANGE .
-An underflow floating-point exception
-.RB ( FE_UNDERFLOW )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR exp (),
-.BR expf (),
-.BR expl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH SEE ALSO
-.BR cbrt (3),
-.BR cexp (3),
-.BR exp10 (3),
-.BR exp2 (3),
-.BR expm1 (3),
-.BR sqrt (3)
diff --git a/man3/exp10.3 b/man3/exp10.3
deleted file mode 100644
index 20a92d227..000000000
--- a/man3/exp10.3
+++ /dev/null
@@ -1,85 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 1995-08-14 by Arnt Gulbrandsen <agulbra@troll.no>
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.TH exp10 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-exp10, exp10f, exp10l \- base-10 exponential function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <math.h>
-.PP
-.BI "double exp10(double " x );
-.BI "float exp10f(float " x );
-.BI "long double exp10l(long double " x );
-.fi
-.SH DESCRIPTION
-These functions return the value of 10
-raised to the power of
-.IR x .
-.SH RETURN VALUE
-On success, these functions return the base-10 exponential value of
-.IR x .
-.PP
-For various special cases, including the handling of infinity and NaN,
-as well as overflows and underflows, see
-.BR exp (3).
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-For a discussion of the errors that can occur for these functions, see
-.BR exp (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR exp10 (),
-.BR exp10f (),
-.BR exp10l ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH HISTORY
-glibc 2.1.
-.SH BUGS
-Before glibc 2.19, the glibc implementation of these functions did not set
-.I errno
-to
-.B ERANGE
-when an underflow error occurred.
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6787
-.SH SEE ALSO
-.BR cbrt (3),
-.BR exp (3),
-.BR exp2 (3),
-.BR log10 (3),
-.BR sqrt (3)
diff --git a/man3/exp10f.3 b/man3/exp10f.3
deleted file mode 100644
index 705b75e97..000000000
--- a/man3/exp10f.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/exp10.3
diff --git a/man3/exp10l.3 b/man3/exp10l.3
deleted file mode 100644
index 705b75e97..000000000
--- a/man3/exp10l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/exp10.3
diff --git a/man3/exp2.3 b/man3/exp2.3
deleted file mode 100644
index 1d1286b82..000000000
--- a/man3/exp2.3
+++ /dev/null
@@ -1,95 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 1995-08-14 by Arnt Gulbrandsen <agulbra@troll.no>
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH exp2 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-exp2, exp2f, exp2l \- base-2 exponential function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double exp2(double " x );
-.BI "float exp2f(float " x );
-.BI "long double exp2l(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR exp2 (),
-.BR exp2f (),
-.BR exp2l ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-These functions return the value of 2 raised to the power of
-.IR x .
-.SH RETURN VALUE
-On success, these functions return the base-2 exponential value of
-.IR x .
-.PP
-For various special cases, including the handling of infinity and NaN,
-as well as overflows and underflows, see
-.BR exp (3).
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-For a discussion of the errors that can occur for these functions, see
-.BR exp (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR exp2 (),
-.BR exp2f (),
-.BR exp2l ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR cbrt (3),
-.BR cexp2 (3),
-.BR exp (3),
-.BR exp10 (3),
-.BR sqrt (3)
diff --git a/man3/exp2f.3 b/man3/exp2f.3
deleted file mode 100644
index b69beeace..000000000
--- a/man3/exp2f.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/exp2.3
diff --git a/man3/exp2l.3 b/man3/exp2l.3
deleted file mode 100644
index b69beeace..000000000
--- a/man3/exp2l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/exp2.3
diff --git a/man3/expf.3 b/man3/expf.3
deleted file mode 100644
index 4b1efda66..000000000
--- a/man3/expf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/exp.3
diff --git a/man3/expl.3 b/man3/expl.3
deleted file mode 100644
index 4b1efda66..000000000
--- a/man3/expl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/exp.3
diff --git a/man3/explicit_bzero.3 b/man3/explicit_bzero.3
deleted file mode 100644
index 8a43e76af..000000000
--- a/man3/explicit_bzero.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/bzero.3
diff --git a/man3/expm1.3 b/man3/expm1.3
deleted file mode 100644
index 7720141a4..000000000
--- a/man3/expm1.3
+++ /dev/null
@@ -1,168 +0,0 @@
-'\" t
-.\" Copyright 1995 Jim Van Zandt <jrv@vanzandt.mv.com>
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 2002-07-27 Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH expm1 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-expm1, expm1f, expm1l \- exponential minus 1
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double expm1(double " x );
-.BI "float expm1f(float " x );
-.BI "long double expm1l(long double " x );
-.PP
-.fi
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR expm1 ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR expm1f (),
-.BR expm1l ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return a value equivalent to
-.PP
-.nf
- exp(x) \- 1
-.fi
-.PP
-The result is computed in a way that is accurate even if the value of
-.I x
-is near
-zero\[em]a case where
-.I "exp(x) \- 1"
-would be inaccurate due to
-subtraction of two numbers that are nearly equal.
-.SH RETURN VALUE
-On success, these functions return
-.IR "exp(x)\ \-\ 1" .
-.PP
-If
-.I x
-is a NaN,
-a NaN is returned.
-.PP
-If
-.I x
-is +0 (\-0),
-+0 (\-0) is returned.
-.PP
-If
-.I x
-is positive infinity, positive infinity is returned.
-.PP
-If
-.I x
-is negative infinity, \-1 is returned.
-.PP
-If the result overflows, a range error occurs,
-and the functions return
-.RB \- HUGE_VAL ,
-.RB \- HUGE_VALF ,
-or
-.RB \- HUGE_VALL ,
-respectively.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Range error, overflow
-.I errno
-is set to
-.B ERANGE
-(but see BUGS).
-An overflow floating-point exception
-.RB ( FE_OVERFLOW )
-is raised.
-.\"
-.\" POSIX.1 specifies an optional range error (underflow) if
-.\" x is subnormal. glibc does not implement this.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR expm1 (),
-.BR expm1f (),
-.BR expm1l ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-BSD.
-.SH BUGS
-Before glibc 2.17,
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6778
-on certain architectures (e.g., x86, but not x86_64)
-.BR expm1 ()
-raised a bogus underflow floating-point exception
-for some large negative
-.I x
-values (where the function result approaches \-1).
-.PP
-Before approximately glibc 2.11,
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6814
-.\" e.g., expm1(1e5) through expm1(1.00199970127e5),
-.\" but not expm1(1.00199970128e5) and beyond.
-.BR expm1 ()
-raised a bogus invalid floating-point exception in addition to the expected
-overflow exception, and returned a NaN instead of positive infinity,
-for some large positive
-.I x
-values.
-.PP
-Before glibc 2.11,
-.\" It looks like the fix was in glibc 2.11, or possibly glibc 2.12.
-.\" I have no test system for glibc 2.11, but glibc 2.12 passes.
-.\" From the source (sysdeps/i386/fpu/s_expm1.S) it looks
-.\" like the changes were in glibc 2.11.
-the glibc implementation did not set
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6788
-.I errno
-to
-.B ERANGE
-when a range error occurred.
-.SH SEE ALSO
-.BR exp (3),
-.BR log (3),
-.BR log1p (3)
diff --git a/man3/expm1f.3 b/man3/expm1f.3
deleted file mode 100644
index 2c9e4eac1..000000000
--- a/man3/expm1f.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/expm1.3
diff --git a/man3/expm1l.3 b/man3/expm1l.3
deleted file mode 100644
index 2c9e4eac1..000000000
--- a/man3/expm1l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/expm1.3
diff --git a/man3/fabs.3 b/man3/fabs.3
deleted file mode 100644
index 265b1336a..000000000
--- a/man3/fabs.3
+++ /dev/null
@@ -1,95 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 19:42:04 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Added fabsl, fabsf, aeb, 2001-06-07
-.\"
-.TH fabs 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fabs, fabsf, fabsl \- absolute value of floating-point number
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double fabs(double " x );
-.BI "float fabsf(float " x );
-.BI "long double fabsl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR fabsf (),
-.BR fabsl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the absolute value of the floating-point
-number
-.IR x .
-.SH RETURN VALUE
-These functions return the absolute value of
-.IR x .
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is \-0, +0 is returned.
-.PP
-If
-.I x
-is negative infinity or positive infinity, positive infinity is returned.
-.SH ERRORS
-No errors occur.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fabs (),
-.BR fabsf (),
-.BR fabsl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH SEE ALSO
-.BR abs (3),
-.BR cabs (3),
-.BR ceil (3),
-.BR floor (3),
-.BR labs (3),
-.BR rint (3)
diff --git a/man3/fabsf.3 b/man3/fabsf.3
deleted file mode 100644
index 0426cf0f2..000000000
--- a/man3/fabsf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fabs.3
diff --git a/man3/fabsl.3 b/man3/fabsl.3
deleted file mode 100644
index 0426cf0f2..000000000
--- a/man3/fabsl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fabs.3
diff --git a/man3/fclose.3 b/man3/fclose.3
deleted file mode 100644
index d454fb7b6..000000000
--- a/man3/fclose.3
+++ /dev/null
@@ -1,105 +0,0 @@
-'\" t
-.\" Copyright (c) 1990, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" Chris Torek and the American National Standards Committee X3,
-.\" on Information Processing Systems.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)fclose.3 6.7 (Berkeley) 6/29/91
-.\"
-.\" Converted for Linux, Mon Nov 29 15:19:14 1993, faith@cs.unc.edu
-.\"
-.\" Modified 2000-07-22 by Nicolás Lichtmaier <nick@debian.org>
-.\"
-.TH fclose 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fclose \- close a stream
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "int fclose(FILE *" stream );
-.fi
-.SH DESCRIPTION
-The
-.BR fclose ()
-function flushes the stream pointed to by
-.I stream
-(writing any buffered output data using
-.BR fflush (3))
-and closes the underlying file descriptor.
-.SH RETURN VALUE
-Upon successful completion, 0 is returned.
-Otherwise,
-.B EOF
-is returned and
-.I errno
-is set to indicate the error.
-In either case, any further access
-(including another call to
-.BR fclose ())
-to the stream results in undefined behavior.
-.SH ERRORS
-.TP
-.B EBADF
-The file descriptor underlying
-.I stream
-is not valid.
-.\" This error cannot occur unless you are mixing ANSI C stdio operations and
-.\" low-level file operations on the same stream. If you do get this error,
-.\" you must have closed the stream's low-level file descriptor using
-.\" something like close(fileno(stream)).
-.PP
-The
-.BR fclose ()
-function may also fail and set
-.I errno
-for any of the errors specified for the routines
-.BR close (2),
-.BR write (2),
-or
-.BR fflush (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fclose ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C89, POSIX.1-2001.
-.SH NOTES
-Note that
-.BR fclose ()
-flushes only the user-space buffers provided by the
-C library.
-To ensure that the data is physically stored
-on disk the kernel buffers must be flushed too, for example, with
-.BR sync (2)
-or
-.BR fsync (2).
-.SH SEE ALSO
-.BR close (2),
-.BR fcloseall (3),
-.BR fflush (3),
-.BR fileno (3),
-.BR fopen (3),
-.BR setbuf (3)
diff --git a/man3/fcloseall.3 b/man3/fcloseall.3
deleted file mode 100644
index 49afea4c7..000000000
--- a/man3/fcloseall.3
+++ /dev/null
@@ -1,67 +0,0 @@
-'\" t
-.\" Copyright (c) 2006 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH fcloseall 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fcloseall \- close all open streams
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <stdio.h>
-.PP
-.B int fcloseall(void);
-.fi
-.SH DESCRIPTION
-The
-.BR fcloseall ()
-function closes all of the calling process's open streams.
-Buffered output for each stream is written before it is closed
-(as for
-.BR fflush (3));
-buffered input is discarded.
-.PP
-The standard streams,
-.IR stdin ,
-.IR stdout ,
-and
-.I stderr
-are also closed.
-.SH RETURN VALUE
-This function returns 0 if all files were successfully closed;
-on error,
-.B EOF
-is returned.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fcloseall ()
-T} Thread safety MT-Unsafe race:streams
-.TE
-.hy
-.ad
-.sp 1
-.PP
-The
-.BR fcloseall ()
-function does not lock the streams, so it is not thread-safe.
-.SH STANDARDS
-GNU.
-.SH SEE ALSO
-.BR close (2),
-.BR fclose (3),
-.BR fflush (3),
-.BR fopen (3),
-.BR setbuf (3)
diff --git a/man3/fcvt.3 b/man3/fcvt.3
deleted file mode 100644
index 39d377098..000000000
--- a/man3/fcvt.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ecvt.3
diff --git a/man3/fcvt_r.3 b/man3/fcvt_r.3
deleted file mode 100644
index 41ce9ee8a..000000000
--- a/man3/fcvt_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ecvt_r.3
diff --git a/man3/fdim.3 b/man3/fdim.3
deleted file mode 100644
index d503eca66..000000000
--- a/man3/fdim.3
+++ /dev/null
@@ -1,99 +0,0 @@
-'\" t
-.\" Copyright 2003 Walter Harms, Andries Brouwer
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH fdim 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fdim, fdimf, fdiml \- positive difference
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double fdim(double " x ", double " y );
-.BI "float fdimf(float " x ", float " y );
-.BI "long double fdiml(long double " x ", long double " y );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR fdimf (),
-.BR fdiml ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-These functions return the positive difference, max(\fIx\fP-\fIy\fP,0),
-between their arguments.
-.SH RETURN VALUE
-On success, these functions return the positive difference.
-.PP
-If
-.I x
-or
-.I y
-is a NaN, a NaN is returned.
-.PP
-If the result overflows,
-a range error occurs,
-and the functions return
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-or
-.BR HUGE_VALL ,
-respectively.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Range error: result overflow
-.I errno
-is set to
-.BR ERANGE .
-An overflow floating-point exception
-.RB ( FE_OVERFLOW )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fdim (),
-.BR fdimf (),
-.BR fdiml ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH BUGS
-Before glibc 2.24
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6796
-on certain architectures (e.g., x86, but not x86_64)
-these functions did not set
-.IR errno .
-.SH SEE ALSO
-.BR fmax (3)
diff --git a/man3/fdimf.3 b/man3/fdimf.3
deleted file mode 100644
index a4058e45d..000000000
--- a/man3/fdimf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fdim.3
diff --git a/man3/fdiml.3 b/man3/fdiml.3
deleted file mode 100644
index a4058e45d..000000000
--- a/man3/fdiml.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fdim.3
diff --git a/man3/fdopen.3 b/man3/fdopen.3
deleted file mode 100644
index 9a4012491..000000000
--- a/man3/fdopen.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fopen.3
diff --git a/man3/fdopendir.3 b/man3/fdopendir.3
deleted file mode 100644
index 55b720e2a..000000000
--- a/man3/fdopendir.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/opendir.3
diff --git a/man3/feclearexcept.3 b/man3/feclearexcept.3
deleted file mode 100644
index 47668e719..000000000
--- a/man3/feclearexcept.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fenv.3
diff --git a/man3/fedisableexcept.3 b/man3/fedisableexcept.3
deleted file mode 100644
index 47668e719..000000000
--- a/man3/fedisableexcept.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fenv.3
diff --git a/man3/feenableexcept.3 b/man3/feenableexcept.3
deleted file mode 100644
index 47668e719..000000000
--- a/man3/feenableexcept.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fenv.3
diff --git a/man3/fegetenv.3 b/man3/fegetenv.3
deleted file mode 100644
index 47668e719..000000000
--- a/man3/fegetenv.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fenv.3
diff --git a/man3/fegetexcept.3 b/man3/fegetexcept.3
deleted file mode 100644
index 47668e719..000000000
--- a/man3/fegetexcept.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fenv.3
diff --git a/man3/fegetexceptflag.3 b/man3/fegetexceptflag.3
deleted file mode 100644
index 47668e719..000000000
--- a/man3/fegetexceptflag.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fenv.3
diff --git a/man3/fegetround.3 b/man3/fegetround.3
deleted file mode 100644
index 47668e719..000000000
--- a/man3/fegetround.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fenv.3
diff --git a/man3/feholdexcept.3 b/man3/feholdexcept.3
deleted file mode 100644
index 47668e719..000000000
--- a/man3/feholdexcept.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fenv.3
diff --git a/man3/fenv.3 b/man3/fenv.3
deleted file mode 100644
index e96ff6be0..000000000
--- a/man3/fenv.3
+++ /dev/null
@@ -1,335 +0,0 @@
-'\" t
-.\" Copyright (c) 2000 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 2000-08-14 added GNU additions from Andreas Jaeger
-.\" 2000-12-05 some changes inspired by acahalan's remarks
-.\"
-.TH fenv 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-feclearexcept, fegetexceptflag, feraiseexcept, fesetexceptflag,
-fetestexcept, fegetenv, fegetround, feholdexcept, fesetround,
-fesetenv, feupdateenv, feenableexcept, fedisableexcept,
-fegetexcept \- floating-point rounding and exception handling
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <fenv.h>
-.PP
-.BI "int feclearexcept(int " excepts );
-.BI "int fegetexceptflag(fexcept_t *" flagp ", int " excepts );
-.BI "int feraiseexcept(int " excepts );
-.BI "int fesetexceptflag(const fexcept_t *" flagp ", int " excepts );
-.BI "int fetestexcept(int " excepts );
-.PP
-.B "int fegetround(void);"
-.BI "int fesetround(int " rounding_mode );
-.PP
-.BI "int fegetenv(fenv_t *" envp );
-.BI "int feholdexcept(fenv_t *" envp );
-.BI "int fesetenv(const fenv_t *" envp );
-.BI "int feupdateenv(const fenv_t *" envp );
-.fi
-.SH DESCRIPTION
-These eleven functions were defined in C99, and describe the handling
-of floating-point rounding and exceptions (overflow, zero-divide, etc.).
-.SS Exceptions
-The
-.I divide-by-zero
-exception occurs when an operation on finite numbers
-produces infinity as exact answer.
-.PP
-The
-.I overflow
-exception occurs when a result has to be represented as a
-floating-point number, but has (much) larger absolute value than the
-largest (finite) floating-point number that is representable.
-.PP
-The
-.I underflow
-exception occurs when a result has to be represented as a
-floating-point number, but has smaller absolute value than the smallest
-positive normalized floating-point number (and would lose much accuracy
-when represented as a denormalized number).
-.PP
-The
-.I inexact
-exception occurs when the rounded result of an operation
-is not equal to the infinite precision result.
-It may occur whenever
-.I overflow
-or
-.I underflow
-occurs.
-.PP
-The
-.I invalid
-exception occurs when there is no well-defined result
-for an operation, as for 0/0 or infinity \- infinity or sqrt(\-1).
-.SS Exception handling
-Exceptions are represented in two ways: as a single bit
-(exception present/absent), and these bits correspond in some
-implementation-defined way with bit positions in an integer,
-and also as an opaque structure that may contain more information
-about the exception (perhaps the code address where it occurred).
-.PP
-Each of the macros
-.BR FE_DIVBYZERO ,
-.BR FE_INEXACT ,
-.BR FE_INVALID ,
-.BR FE_OVERFLOW ,
-.B FE_UNDERFLOW
-is defined when the implementation supports handling
-of the corresponding exception, and if so then
-defines the corresponding bit(s), so that one can call
-exception handling functions, for example, using the integer argument
-.BR FE_OVERFLOW | FE_UNDERFLOW .
-Other exceptions may be supported.
-The macro
-.B FE_ALL_EXCEPT
-is the bitwise OR of all bits corresponding to supported exceptions.
-.PP
-The
-.BR feclearexcept ()
-function clears the supported exceptions represented by the bits
-in its argument.
-.PP
-The
-.BR fegetexceptflag ()
-function stores a representation of the state of the exception flags
-represented by the argument
-.I excepts
-in the opaque object
-.IR *flagp .
-.PP
-The
-.BR feraiseexcept ()
-function raises the supported exceptions represented by the bits in
-.IR excepts .
-.PP
-The
-.BR fesetexceptflag ()
-function sets the complete status for the exceptions represented by
-.I excepts
-to the value
-.IR *flagp .
-This value must have been obtained by an earlier call of
-.BR fegetexceptflag ()
-with a last argument that contained all bits in
-.IR excepts .
-.PP
-The
-.BR fetestexcept ()
-function returns a word in which the bits are set that were
-set in the argument
-.I excepts
-and for which the corresponding exception is currently set.
-.SS Rounding mode
-The rounding mode determines how the result of floating-point operations
-is treated when the result cannot be exactly represented in the significand.
-Various rounding modes may be provided:
-round to nearest (the default),
-round up (toward positive infinity),
-round down (toward negative infinity), and
-round toward zero.
-.PP
-Each of the macros
-.BR FE_TONEAREST ,
-.BR FE_UPWARD ,
-.BR FE_DOWNWARD ,
-and
-.B FE_TOWARDZERO
-is defined when the implementation supports getting and setting
-the corresponding rounding direction.
-.PP
-The
-.BR fegetround ()
-function returns the macro corresponding to the current
-rounding mode.
-.PP
-The
-.BR fesetround ()
-function sets the rounding mode as specified by its argument
-and returns zero when it was successful.
-.PP
-C99 and POSIX.1-2008 specify an identifier,
-.BR FLT_ROUNDS ,
-defined in
-.IR <float.h> ,
-which indicates the implementation-defined rounding
-behavior for floating-point addition.
-This identifier has one of the following values:
-.TP
-.B \-1
-The rounding mode is not determinable.
-.TP
-.B 0
-Rounding is toward 0.
-.TP
-.B 1
-Rounding is toward nearest number.
-.TP
-.B 2
-Rounding is toward positive infinity.
-.TP
-.B 3
-Rounding is toward negative infinity.
-.PP
-Other values represent machine-dependent, nonstandard rounding modes.
-.PP
-The value of
-.B FLT_ROUNDS
-should reflect the current rounding mode as set by
-.BR fesetround ()
-(but see BUGS).
-.SS Floating-point environment
-The entire floating-point environment, including
-control modes and status flags, can be handled
-as one opaque object, of type
-.IR fenv_t .
-The default environment is denoted by
-.B FE_DFL_ENV
-(of type
-.IR "const fenv_t\ *" ).
-This is the environment setup at program start and it is defined by
-ISO C to have round to nearest, all exceptions cleared and a nonstop
-(continue on exceptions) mode.
-.PP
-The
-.BR fegetenv ()
-function saves the current floating-point environment in the object
-.IR *envp .
-.PP
-The
-.BR feholdexcept ()
-function does the same, then clears all exception flags,
-and sets a nonstop (continue on exceptions) mode,
-if available.
-It returns zero when successful.
-.PP
-The
-.BR fesetenv ()
-function restores the floating-point environment from
-the object
-.IR *envp .
-This object must be known to be valid, for example, the result of a call to
-.BR fegetenv ()
-or
-.BR feholdexcept ()
-or equal to
-.BR FE_DFL_ENV .
-This call does not raise exceptions.
-.PP
-The
-.BR feupdateenv ()
-function installs the floating-point environment represented by
-the object
-.IR *envp ,
-except that currently raised exceptions are not cleared.
-After calling this function, the raised exceptions will be a bitwise OR
-of those previously set with those in
-.IR *envp .
-As before, the object
-.I *envp
-must be known to be valid.
-.SH RETURN VALUE
-These functions return zero on success and nonzero if an error occurred.
-.\" Earlier seven of these functions were listed as returning void.
-.\" This was corrected in Corrigendum 1 (ISO/IEC 9899:1999/Cor.1:2001(E))
-.\" of the C99 Standard.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.nh
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR feclearexcept (),
-.BR fegetexceptflag (),
-.BR feraiseexcept (),
-.BR fesetexceptflag (),
-.BR fetestexcept (),
-.BR fegetround (),
-.BR fesetround (),
-.BR fegetenv (),
-.BR feholdexcept (),
-.BR fesetenv (),
-.BR feupdateenv (),
-.BR feenableexcept (),
-.BR fedisableexcept (),
-.BR fegetexcept ()
-T} Thread safety T{
-MT-Safe
-T}
-.TE
-.hy
-.ad
-.sp 1
-.hy
-.SH STANDARDS
-C11, POSIX.1-2008, IEC 60559 (IEC 559:1989), ANSI/IEEE 854.
-.SH HISTORY
-C99, POSIX.1-2001.
-glibc 2.1.
-.SH NOTES
-.SS glibc notes
-If possible, the GNU C Library defines a macro
-.B FE_NOMASK_ENV
-which represents an environment where every exception raised causes a
-trap to occur.
-You can test for this macro using
-.BR #ifdef .
-It is defined only if
-.B _GNU_SOURCE
-is defined.
-The C99 standard does not define a way to set individual bits in the
-floating-point mask, for example, to trap on specific flags.
-Since glibc 2.2, glibc supports the functions
-.BR feenableexcept ()
-and
-.BR fedisableexcept ()
-to set individual floating-point traps, and
-.BR fegetexcept ()
-to query the state.
-.PP
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B "#include <fenv.h>"
-.PP
-.BI "int feenableexcept(int " excepts );
-.BI "int fedisableexcept(int " excepts );
-.B "int fegetexcept(void);"
-.fi
-.PP
-The
-.BR feenableexcept ()
-and
-.BR fedisableexcept ()
-functions enable (disable) traps for each of the exceptions represented by
-.I excepts
-and return the previous set of enabled exceptions when successful,
-and \-1 otherwise.
-The
-.BR fegetexcept ()
-function returns the set of all currently enabled exceptions.
-.SH BUGS
-C99 specifies that the value of
-.B FLT_ROUNDS
-should reflect changes to the current rounding mode, as set by
-.BR fesetround ().
-Currently,
-.\" Aug 08, glibc 2.8
-this does not occur:
-.B FLT_ROUNDS
-always has the value 1.
-.\" See http://gcc.gnu.org/ml/gcc/2002-02/msg01535.html
-.SH SEE ALSO
-.BR math_error (7)
diff --git a/man3/feof.3 b/man3/feof.3
deleted file mode 100644
index 3a95cca9f..000000000
--- a/man3/feof.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ferror.3
diff --git a/man3/feof_unlocked.3 b/man3/feof_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/feof_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/feraiseexcept.3 b/man3/feraiseexcept.3
deleted file mode 100644
index 47668e719..000000000
--- a/man3/feraiseexcept.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fenv.3
diff --git a/man3/ferror.3 b/man3/ferror.3
deleted file mode 100644
index 1508eaf49..000000000
--- a/man3/ferror.3
+++ /dev/null
@@ -1,121 +0,0 @@
-'\" t
-.\" Copyright (c) 1990, 1991 The Regents of the University of California.
-.\" and Copyright (C) 2021 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" Chris Torek and the American National Standards Committee X3,
-.\" on Information Processing Systems.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)ferror.3 6.8 (Berkeley) 6/29/91
-.\"
-.\"
-.\" Converted for Linux, Mon Nov 29 14:24:40 1993, faith@cs.unc.edu
-.\"
-.TH ferror 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-clearerr, feof, ferror \- check and reset stream status
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "void clearerr(FILE *" stream );
-.BI "int feof(FILE *" stream );
-.BI "int ferror(FILE *" stream );
-.fi
-.SH DESCRIPTION
-The function
-.BR clearerr ()
-clears the end-of-file and error indicators for the stream pointed to by
-.IR stream .
-.PP
-The function
-.BR feof ()
-tests the end-of-file indicator for the stream pointed to by
-.IR stream ,
-returning nonzero if it is set.
-The end-of-file indicator can be cleared only by the function
-.BR clearerr ().
-.PP
-The function
-.BR ferror ()
-tests the error indicator for the stream pointed to by
-.IR stream ,
-returning nonzero if it is set.
-The error indicator can be reset only by the
-.BR clearerr ()
-function.
-.PP
-For nonlocking counterparts, see
-.BR unlocked_stdio (3).
-.SH RETURN VALUE
-The
-.BR feof ()
-function returns nonzero if the end-of-file indicator is set for
-.IR stream ;
-otherwise, it returns zero.
-.PP
-The
-.BR ferror ()
-function returns nonzero if the error indicator is set for
-.IR stream ;
-otherwise, it returns zero.
-.SH ERRORS
-These functions should not fail and do not set
-.IR errno .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR clearerr (),
-.BR feof (),
-.BR ferror ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C89, POSIX.1-2001.
-.SH NOTES
-POSIX.1-2008 specifies
-.\"https://www.austingroupbugs.net/view.php?id=401
-that these functions shall not change the value of
-.I errno
-if
-.I stream
-is valid.
-.SH CAVEATS
-Normally,
-programs should read the return value of an input function,
-such as
-.BR fgetc (3),
-before using functions of the
-.BR feof (3)
-family.
-Only when the function returned the sentinel value
-.B EOF
-it makes sense to distinguish between the end of a file or an error with
-.BR feof (3)
-or
-.BR ferror (3).
-.SH SEE ALSO
-.BR open (2),
-.BR fdopen (3),
-.BR fileno (3),
-.BR stdio (3),
-.BR unlocked_stdio (3)
diff --git a/man3/ferror_unlocked.3 b/man3/ferror_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/ferror_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/fesetenv.3 b/man3/fesetenv.3
deleted file mode 100644
index 47668e719..000000000
--- a/man3/fesetenv.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fenv.3
diff --git a/man3/fesetexceptflag.3 b/man3/fesetexceptflag.3
deleted file mode 100644
index 47668e719..000000000
--- a/man3/fesetexceptflag.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fenv.3
diff --git a/man3/fesetround.3 b/man3/fesetround.3
deleted file mode 100644
index 47668e719..000000000
--- a/man3/fesetround.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fenv.3
diff --git a/man3/fetestexcept.3 b/man3/fetestexcept.3
deleted file mode 100644
index 47668e719..000000000
--- a/man3/fetestexcept.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fenv.3
diff --git a/man3/feupdateenv.3 b/man3/feupdateenv.3
deleted file mode 100644
index 47668e719..000000000
--- a/man3/feupdateenv.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fenv.3
diff --git a/man3/fexecve.3 b/man3/fexecve.3
deleted file mode 100644
index 2adb1d66b..000000000
--- a/man3/fexecve.3
+++ /dev/null
@@ -1,175 +0,0 @@
-'\" t
-.\" Copyright (c) 2006, 2014, Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH fexecve 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fexecve \- execute program specified via file descriptor
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int fexecve(int " fd ", char *const " argv "[], char *const " envp []);
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR fexecve ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-.BR fexecve ()
-performs the same task as
-.BR execve (2),
-with the difference that the file to be executed
-is specified via a file descriptor,
-.IR fd ,
-rather than via a pathname.
-The file descriptor
-.I fd
-must be opened read-only
-.RB ( O_RDONLY )
-or with the
-.B O_PATH
-flag
-and the caller must have permission to execute the file that it refers to.
-.SH RETURN VALUE
-A successful call to
-.BR fexecve ()
-never returns.
-On error, the function does return, with a result value of \-1, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-Errors are as for
-.BR execve (2),
-with the following additions:
-.TP
-.B EINVAL
-.I fd
-is not a valid file descriptor, or
-.I argv
-is NULL, or
-.I envp
-is NULL.
-.TP
-.B ENOENT
-The close-on-exec flag is set on
-.IR fd ,
-and
-.I fd
-refers to a script.
-See BUGS.
-.TP
-.B ENOSYS
-The kernel does not provide the
-.BR execveat (2)
-system call, and the
-.I /proc
-filesystem could not be accessed.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fexecve ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.3.2.
-.PP
-On Linux with glibc versions 2.26 and earlier,
-.BR fexecve ()
-is implemented using the
-.BR proc (5)
-filesystem, so
-.I /proc
-needs to be mounted and available at the time of the call.
-Since glibc 2.27,
-.\" glibc commit 43ffc53a352a67672210c9dd4959f6c6b7407e60
-if the underlying kernel supports the
-.BR execveat (2)
-system call, then
-.BR fexecve ()
-is implemented using that system call, with the benefit that
-.I /proc
-does not need to be mounted.
-.SH NOTES
-The idea behind
-.BR fexecve ()
-is to allow the caller to verify (checksum) the contents of
-an executable before executing it.
-Simply opening the file, checksumming the contents, and then doing an
-.BR execve (2)
-would not suffice, since, between the two steps, the filename,
-or a directory prefix of the pathname, could have been exchanged
-(by, for example, modifying the target of a symbolic link).
-.BR fexecve ()
-does not mitigate the problem that the
-.I contents
-of a file could be changed between the checksumming and the call to
-.BR fexecve ();
-for that, the solution is to ensure that the permissions on the file
-prevent it from being modified by malicious users.
-.PP
-The natural idiom when using
-.BR fexecve ()
-is to set the close-on-exec flag on
-.IR fd ,
-so that the file descriptor does not leak through to the program
-that is executed.
-This approach is natural for two reasons.
-First, it prevents file descriptors being consumed unnecessarily.
-(The executed program normally has no need of a file descriptor
-that refers to the program itself.)
-Second, if
-.BR fexecve ()
-is used recursively,
-employing the close-on-exec flag prevents the file descriptor exhaustion
-that would result from the fact that each step in the recursion would
-cause one more file descriptor to be passed to the new program.
-(But see BUGS.)
-.SH BUGS
-If
-.I fd
-refers to a script (i.e., it is an executable text file that names
-a script interpreter with a first line that begins with the characters
-.IR #! )
-and the close-on-exec flag has been set for
-.IR fd ,
-then
-.BR fexecve ()
-fails with the error
-.BR ENOENT .
-This error occurs because,
-by the time the script interpreter is executed,
-.I fd
-has already been closed because of the close-on-exec flag.
-Thus, the close-on-exec flag can't be set on
-.I fd
-if it refers to a script, leading to the problems described in NOTES.
-.SH SEE ALSO
-.BR execve (2),
-.BR execveat (2)
diff --git a/man3/fflush.3 b/man3/fflush.3
deleted file mode 100644
index 2098bba08..000000000
--- a/man3/fflush.3
+++ /dev/null
@@ -1,118 +0,0 @@
-'\" t
-.\" Copyright (c) 1990, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" Chris Torek and the American National Standards Committee X3,
-.\" on Information Processing Systems.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)fflush.3 5.4 (Berkeley) 6/29/91
-.\"
-.\" Converted for Linux, Mon Nov 29 15:22:01 1993, faith@cs.unc.edu
-.\"
-.\" Modified 2000-07-22 by Nicolás Lichtmaier <nick@debian.org>
-.\" Modified 2001-10-16 by John Levon <moz@compsoc.man.ac.uk>
-.\"
-.TH fflush 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fflush \- flush a stream
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "int fflush(FILE *_Nullable " stream );
-.fi
-.SH DESCRIPTION
-For output streams,
-.BR fflush ()
-forces a write of all user-space buffered data for the given output or update
-.I stream
-via the stream's underlying write function.
-.PP
-For input streams associated with seekable files
-(e.g., disk files, but not pipes or terminals),
-.BR fflush ()
-discards any buffered data that has been fetched from the underlying file,
-but has not been consumed by the application.
-.PP
-The open status of the stream is unaffected.
-.PP
-If the
-.I stream
-argument is NULL,
-.BR fflush ()
-flushes
-.I all
-open output streams.
-.\" mtk: POSIX specifies that only output streams are flushed for this case.
-.\" Also verified for glibc by experiment.
-.PP
-For a nonlocking counterpart, see
-.BR unlocked_stdio (3).
-.SH RETURN VALUE
-Upon successful completion 0 is returned.
-Otherwise,
-.B EOF
-is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I stream
-is not an open stream, or is not open for writing.
-.PP
-The function
-.BR fflush ()
-may also fail and set
-.I errno
-for any of the errors specified for
-.BR write (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fflush ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C89, POSIX.1-2001, POSIX.1-2008.
-.PP
-POSIX.1-2001 did not specify the behavior for flushing of input streams,
-but the behavior is specified in POSIX.1-2008.
-.SH NOTES
-Note that
-.BR fflush ()
-flushes only the user-space buffers provided by the C library.
-To ensure that the data is physically stored on disk
-the kernel buffers must be flushed too, for example, with
-.BR sync (2)
-or
-.BR fsync (2).
-.SH SEE ALSO
-.BR fsync (2),
-.BR sync (2),
-.BR write (2),
-.BR fclose (3),
-.BR fileno (3),
-.BR fopen (3),
-.BR fpurge (3),
-.BR setbuf (3),
-.BR unlocked_stdio (3)
diff --git a/man3/fflush_unlocked.3 b/man3/fflush_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/fflush_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/ffs.3 b/man3/ffs.3
deleted file mode 100644
index ee1f2a178..000000000
--- a/man3/ffs.3
+++ /dev/null
@@ -1,106 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 19:39:35 1993 by Rik Faith (faith@cs.unc.edu)
-.\"
-.\" Modified 2003 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH ffs 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ffs, ffsl, ffsll \- find first bit set in a word
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <strings.h>
-.PP
-.BI "int ffs(int " i );
-.PP
-.B #include <string.h>
-.PP
-.BI "int ffsl(long " i );
-.BI "int ffsll(long long " i );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR ffs ():
-.nf
- Since glibc 2.12:
- _XOPEN_SOURCE >= 700
- || ! (_POSIX_C_SOURCE >= 200809L)
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
- Before glibc 2.12:
- none
-.fi
-.PP
-.BR ffsl (),
-.BR ffsll ():
-.nf
- Since glibc 2.27:
-.\" glibc commit 68fe16dd327c895c08b9ee443b234c49c13b36e9
- _DEFAULT_SOURCE
- Before glibc 2.27:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR ffs ()
-function returns the position of the first
-(least significant) bit set in the word \fIi\fP.
-The least significant bit is position 1 and the
-most significant position is, for example, 32 or 64.
-The functions
-.BR ffsll ()
-and
-.BR ffsl ()
-do the same but take
-arguments of possibly different size.
-.SH RETURN VALUE
-These functions return the position of the first bit set,
-or 0 if no bits are set in
-.IR i .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ffs (),
-.BR ffsl (),
-.BR ffsll ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-BSD systems have a prototype in
-.IR <string.h> .
-.SH STANDARDS
-.TP
-.BR ffs ()
-POSIX.1-2001, POSIX.1-2008, 4.3BSD.
-.TP
-.BR ffsl ()
-.TQ
-.BR ffsll ()
-GNU.
-.SH SEE ALSO
-.BR memchr (3)
diff --git a/man3/ffsl.3 b/man3/ffsl.3
deleted file mode 100644
index 23c4024a5..000000000
--- a/man3/ffsl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ffs.3
diff --git a/man3/ffsll.3 b/man3/ffsll.3
deleted file mode 100644
index 23c4024a5..000000000
--- a/man3/ffsll.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ffs.3
diff --git a/man3/fgetc.3 b/man3/fgetc.3
deleted file mode 100644
index 75dcaeaf6..000000000
--- a/man3/fgetc.3
+++ /dev/null
@@ -1,155 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Wed Jul 28 11:12:07 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Fri Sep 8 15:48:13 1995 by Andries Brouwer (aeb@cwi.nl)
-.TH fgetc 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fgetc, fgets, getc, getchar, ungetc \- input of characters and strings
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "int fgetc(FILE *" stream );
-.BI "int getc(FILE *" stream );
-.B "int getchar(void);"
-.PP
-.BI "char *fgets(char " s "[restrict ." size "], int " size ", \
-FILE *restrict " stream );
-.PP
-.BI "int ungetc(int " c ", FILE *" stream );
-.fi
-.SH DESCRIPTION
-.BR fgetc ()
-reads the next character from
-.I stream
-and returns it as an
-.I unsigned char
-cast to an
-.IR int ,
-or
-.B EOF
-on end of file or error.
-.PP
-.BR getc ()
-is equivalent to
-.BR fgetc ()
-except that it may be implemented as a macro which evaluates
-.I stream
-more than once.
-.PP
-.BR getchar ()
-is equivalent to
-.BI "getc(" stdin ) \fR.
-.PP
-.BR fgets ()
-reads in at most one less than
-.I size
-characters from
-.I stream
-and stores them into the buffer pointed to by
-.IR s .
-Reading stops after an
-.B EOF
-or a newline.
-If a newline is read, it is stored into the buffer.
-A terminating null byte (\[aq]\e0\[aq])
-is stored after the last character in the buffer.
-.PP
-.BR ungetc ()
-pushes
-.I c
-back to
-.IR stream ,
-cast to
-.IR "unsigned char" ,
-where it is available for subsequent read operations.
-Pushed-back characters
-will be returned in reverse order; only one pushback is guaranteed.
-.PP
-Calls to the functions described here can be mixed with each other and with
-calls to other input functions from the
-.I stdio
-library for the same input stream.
-.PP
-For nonlocking counterparts, see
-.BR unlocked_stdio (3).
-.SH RETURN VALUE
-.BR fgetc (),
-.BR getc (),
-and
-.BR getchar ()
-return the character read as an
-.I unsigned char
-cast to an
-.I int
-or
-.B EOF
-on end of file or error.
-.PP
-.BR fgets ()
-returns
-.I s
-on success, and NULL
-on error or when end of file occurs while no characters have been read.
-.PP
-.BR ungetc ()
-returns
-.I c
-on success, or
-.B EOF
-on error.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fgetc (),
-.BR fgets (),
-.BR getc (),
-.BR getchar (),
-.BR ungetc ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89.
-.SH NOTES
-It is not advisable to mix calls to input functions from the
-.I stdio
-library with low-level calls to
-.BR read (2)
-for the file descriptor associated with the input stream; the results
-will be undefined and very probably not what you want.
-.SH SEE ALSO
-.BR read (2),
-.BR write (2),
-.BR ferror (3),
-.BR fgetwc (3),
-.BR fgetws (3),
-.BR fopen (3),
-.BR fread (3),
-.BR fseek (3),
-.BR getline (3),
-.BR gets (3),
-.BR getwchar (3),
-.BR puts (3),
-.BR scanf (3),
-.BR ungetwc (3),
-.BR unlocked_stdio (3),
-.BR feature_test_macros (7)
diff --git a/man3/fgetc_unlocked.3 b/man3/fgetc_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/fgetc_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/fgetgrent.3 b/man3/fgetgrent.3
deleted file mode 100644
index 193e8f737..000000000
--- a/man3/fgetgrent.3
+++ /dev/null
@@ -1,121 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 19:38:44 1993 by Rik Faith (faith@cs.unc.edu)
-.TH fgetgrent 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fgetgrent \- get group file entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.B #include <sys/types.h>
-.B #include <grp.h>
-.PP
-.BI "struct group *fgetgrent(FILE *" stream );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR fgetgrent ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR fgetgrent ()
-function returns a pointer to a structure containing
-the group information from the file referred to by
-.IR stream .
-The first time it is called
-it returns the first entry; thereafter, it returns successive entries.
-The file referred to by
-.I stream
-must have the same format as
-.I /etc/group
-(see
-.BR group (5)).
-.PP
-The \fIgroup\fP structure is defined in \fI<grp.h>\fP as follows:
-.PP
-.in +4n
-.EX
-struct group {
- char *gr_name; /* group name */
- char *gr_passwd; /* group password */
- gid_t gr_gid; /* group ID */
- char **gr_mem; /* NULL\-terminated array of pointers
- to names of group members */
-};
-.EE
-.in
-.SH RETURN VALUE
-The
-.BR fgetgrent ()
-function returns a pointer to a
-.I group
-structure,
-or NULL if there are no more entries or an error occurs.
-In the event of an error,
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B ENOMEM
-Insufficient memory to allocate
-.I group
-structure.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fgetgrent ()
-T} Thread safety MT-Unsafe race:fgetgrent
-.TE
-.hy
-.ad
-.sp 1
-.\" FIXME The marking is different from that in the glibc manual,
-.\" which has:
-.\"
-.\" fgetgrent: MT-Unsafe race:fgrent
-.\"
-.\" We think race:fgrent in glibc may be hard for users to understand,
-.\" and have sent a patch to the GNU libc community for changing it to
-.\" race:fgetgrent, however, something about the copyright impeded the
-.\" progress.
-.SH STANDARDS
-None.
-.SH HISTORY
-SVr4.
-.SH SEE ALSO
-.BR endgrent (3),
-.BR fgetgrent_r (3),
-.BR fopen (3),
-.BR getgrent (3),
-.BR getgrgid (3),
-.BR getgrnam (3),
-.BR putgrent (3),
-.BR setgrent (3),
-.BR group (5)
diff --git a/man3/fgetgrent_r.3 b/man3/fgetgrent_r.3
deleted file mode 100644
index 7c6dfe43a..000000000
--- a/man3/fgetgrent_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getgrent_r.3
diff --git a/man3/fgetpos.3 b/man3/fgetpos.3
deleted file mode 100644
index a1487b5a8..000000000
--- a/man3/fgetpos.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fseek.3
diff --git a/man3/fgetpwent.3 b/man3/fgetpwent.3
deleted file mode 100644
index 51cf41271..000000000
--- a/man3/fgetpwent.3
+++ /dev/null
@@ -1,130 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\"
-.\" Modified Sat Jul 24 19:37:37 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Mon May 27 22:40:48 1996 by Martin Schulze (joey@linux.de)
-.\"
-.TH fgetpwent 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fgetpwent \- get password file entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.B #include <sys/types.h>
-.B #include <pwd.h>
-.PP
-.BI "struct passwd *fgetpwent(FILE *" stream );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR fgetpwent ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR fgetpwent ()
-function returns a pointer to a structure containing
-the broken out fields of a line in the file \fIstream\fP.
-The first time it is called it returns the first entry;
-thereafter, it returns successive entries.
-The file referred to by
-.I stream
-must have the same format as
-.I /etc/passwd
-(see
-.BR passwd (5)).
-.PP
-The \fIpasswd\fP structure is defined in \fI<pwd.h>\fP as follows:
-.PP
-.in +4n
-.EX
-struct passwd {
- char *pw_name; /* username */
- char *pw_passwd; /* user password */
- uid_t pw_uid; /* user ID */
- gid_t pw_gid; /* group ID */
- char *pw_gecos; /* real name */
- char *pw_dir; /* home directory */
- char *pw_shell; /* shell program */
-};
-.EE
-.in
-.SH RETURN VALUE
-The
-.BR fgetpwent ()
-function returns a pointer to a
-.I passwd
-structure, or NULL if
-there are no more entries or an error occurs.
-In the event of an error,
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B ENOMEM
-Insufficient memory to allocate
-.I passwd
-structure.
-.SH FILES
-.TP
-.I /etc/passwd
-password database file
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fgetpwent ()
-T} Thread safety MT-Unsafe race:fgetpwent
-.TE
-.hy
-.ad
-.sp 1
-.\" FIXME: The marking is different from that in the glibc manual,
-.\" which has:
-.\"
-.\" fgetpwent: MT-Unsafe race:fpwent
-.\"
-.\" We think race:fpwent in glibc maybe hard for users to understand,
-.\" and have sent a patch to the GNU libc community for changing it to
-.\" race:fgetpwent, however, something about the copyright impeded the
-.\" progress.
-.SH STANDARDS
-None.
-.SH HISTORY
-SVr4.
-.SH SEE ALSO
-.BR endpwent (3),
-.BR fgetpwent_r (3),
-.BR fopen (3),
-.BR getpw (3),
-.BR getpwent (3),
-.BR getpwnam (3),
-.BR getpwuid (3),
-.BR putpwent (3),
-.BR setpwent (3),
-.BR passwd (5)
diff --git a/man3/fgetpwent_r.3 b/man3/fgetpwent_r.3
deleted file mode 100644
index b2393bb64..000000000
--- a/man3/fgetpwent_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getpwent_r.3
diff --git a/man3/fgets.3 b/man3/fgets.3
deleted file mode 100644
index 2f6585a10..000000000
--- a/man3/fgets.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fgetc.3
diff --git a/man3/fgets_unlocked.3 b/man3/fgets_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/fgets_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/fgetspent.3 b/man3/fgetspent.3
deleted file mode 100644
index 142c5a5ca..000000000
--- a/man3/fgetspent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getspnam.3
diff --git a/man3/fgetspent_r.3 b/man3/fgetspent_r.3
deleted file mode 100644
index 142c5a5ca..000000000
--- a/man3/fgetspent_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getspnam.3
diff --git a/man3/fgetwc.3 b/man3/fgetwc.3
deleted file mode 100644
index 4d3e58efd..000000000
--- a/man3/fgetwc.3
+++ /dev/null
@@ -1,109 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification
-.\" http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.\" Modified Tue Oct 16 23:18:40 BST 2001 by John Levon <moz@compsoc.man.ac.uk>
-.TH fgetwc 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fgetwc, getwc \- read a wide character from a FILE stream
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.B #include <wchar.h>
-.PP
-.BI "wint_t fgetwc(FILE *" stream );
-.BI "wint_t getwc(FILE *" stream );
-.fi
-.SH DESCRIPTION
-The
-.BR fgetwc ()
-function is the wide-character equivalent
-of the
-.BR fgetc (3)
-function.
-It reads a wide character from \fIstream\fP and returns it.
-If the end of stream is reached, or if \fIferror(stream)\fP becomes true,
-it returns
-.BR WEOF .
-If a wide-character conversion error occurs, it sets
-\fIerrno\fP to \fBEILSEQ\fP and returns
-.BR WEOF .
-.PP
-The
-.BR getwc ()
-function or macro functions identically to
-.BR fgetwc ().
-It may be implemented as a macro, and may evaluate its argument
-more than once.
-There is no reason ever to use it.
-.PP
-For nonlocking counterparts, see
-.BR unlocked_stdio (3).
-.SH RETURN VALUE
-On success,
-.BR fgetwc ()
-returns the next wide-character from the stream.
-Otherwise,
-.B WEOF
-is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-Apart from the usual ones, there is
-.TP
-.B EILSEQ
-The data obtained from the input stream does not
-form a valid character.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fgetwc (),
-.BR getwc ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR fgetwc ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.PP
-In the absence of additional information passed to the
-.BR fopen (3)
-call, it is
-reasonable to expect that
-.BR fgetwc ()
-will actually read a multibyte sequence
-from the stream and then convert it to a wide character.
-.SH SEE ALSO
-.BR fgetws (3),
-.BR fputwc (3),
-.BR ungetwc (3),
-.BR unlocked_stdio (3)
diff --git a/man3/fgetwc_unlocked.3 b/man3/fgetwc_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/fgetwc_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/fgetws.3 b/man3/fgetws.3
deleted file mode 100644
index 75ed37aa3..000000000
--- a/man3/fgetws.3
+++ /dev/null
@@ -1,94 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification
-.\" http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.\" Modified Tue Oct 16 23:18:40 BST 2001 by John Levon <moz@compsoc.man.ac.uk>
-.TH fgetws 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fgetws \- read a wide-character string from a FILE stream
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *fgetws(wchar_t " ws "[restrict ." n "], int " n \
-", FILE *restrict " stream );
-.fi
-.SH DESCRIPTION
-The
-.BR fgetws ()
-function is the wide-character equivalent
-of the
-.BR fgets (3)
-function.
-It reads a string of at most \fIn\-1\fP wide characters into the
-wide-character array pointed to by \fIws\fP,
-and adds a terminating null wide character (L\[aq]\e0\[aq]).
-It stops reading wide characters after it has encountered and
-stored a newline wide character.
-It also stops when end of stream is reached.
-.PP
-The programmer must ensure that there is room for at least \fIn\fP wide
-characters at \fIws\fP.
-.PP
-For a nonlocking counterpart, see
-.BR unlocked_stdio (3).
-.SH RETURN VALUE
-The
-.BR fgetws ()
-function, if successful, returns \fIws\fP.
-If end of stream
-was already reached or if an error occurred, it returns NULL.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fgetws ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR fgetws ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.PP
-In the absence of additional information passed to the
-.BR fopen (3)
-call, it is
-reasonable to expect that
-.BR fgetws ()
-will actually read a multibyte string
-from the stream and then convert it to a wide-character string.
-.PP
-This function is unreliable,
-because it does not permit to deal properly with
-null wide characters that may be present in the input.
-.SH SEE ALSO
-.BR fgetwc (3),
-.BR unlocked_stdio (3)
diff --git a/man3/fgetws_unlocked.3 b/man3/fgetws_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/fgetws_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/fileno.3 b/man3/fileno.3
deleted file mode 100644
index 53d5bde54..000000000
--- a/man3/fileno.3
+++ /dev/null
@@ -1,92 +0,0 @@
-'\" t
-.\" Copyright (c) 1990, 1991 The Regents of the University of California.
-.\" and Copyright (C) 2021 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" Chris Torek and the American National Standards Committee X3,
-.\" on Information Processing Systems.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" Converted for Linux, Mon Nov 29 14:24:40 1993, faith@cs.unc.edu
-.\" Added remark on EBADF for fileno, aeb, 2001-03-22
-.\"
-.TH fileno 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fileno \- obtain file descriptor of a stdio stream
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "int fileno(FILE *" stream );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR fileno ():
-.nf
- _POSIX_C_SOURCE
-.fi
-.SH DESCRIPTION
-The function
-.BR fileno ()
-examines the argument
-.I stream
-and returns the integer file descriptor used to implement this stream.
-The file descriptor is still owned by
-.I stream
-and will be closed when
-.BR fclose (3)
-is called.
-Duplicate the file descriptor with
-.BR dup (2)
-before passing it to code that might close it.
-.PP
-For the nonlocking counterpart, see
-.BR unlocked_stdio (3).
-.SH RETURN VALUE
-On success,
-.BR fileno ()
-returns the file descriptor associated with
-.IR stream .
-On failure, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I stream
-is not associated with a file.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fileno ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH SEE ALSO
-.BR open (2),
-.BR fdopen (3),
-.BR stdio (3),
-.BR unlocked_stdio (3)
diff --git a/man3/fileno_unlocked.3 b/man3/fileno_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/fileno_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/finite.3 b/man3/finite.3
deleted file mode 100644
index f5c87f34f..000000000
--- a/man3/finite.3
+++ /dev/null
@@ -1,146 +0,0 @@
-'\" t
-.\" Copyright 2004 Andries Brouwer <aeb@cwi.nl>.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH finite 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-finite, finitef, finitel, isinf, isinff, isinfl, isnan, isnanf, isnanl \-
-BSD floating-point classification functions
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "int finite(double " x );
-.BI "int finitef(float " x );
-.BI "int finitel(long double " x );
-.PP
-.BI "int isinf(double " x );
-.BI "int isinff(float " x );
-.BI "int isinfl(long double " x );
-.PP
-.BI "int isnan(double " x );
-.BI "int isnanf(float " x );
-.BI "int isnanl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR finite (),
-.BR finitef (),
-.BR finitel ():
-.nf
- /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.PP
-.BR isinf ():
- _XOPEN_SOURCE >= 600 || _ISOC99_SOURCE
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR isinff (),
-.BR isinfl ():
-.nf
- /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR isnan ():
-.nf
- _XOPEN_SOURCE || _ISOC99_SOURCE
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR isnanf (),
-.BR isnanl ():
-.nf
- _XOPEN_SOURCE >= 600
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR finite (),
-.BR finitef (),
-and
-.BR finitel ()
-functions return a nonzero value if
-.I x
-is neither infinite
-nor a "not-a-number" (NaN) value, and 0 otherwise.
-.PP
-The
-.BR isnan (),
-.BR isnanf (),
-and
-.BR isnanl ()
-functions return a nonzero value if
-.I x
-is a NaN value,
-and 0 otherwise.
-.PP
-The
-.BR isinf (),
-.BR isinff (),
-and
-.BR isinfl ()
-functions return 1 if
-.I x
-is positive infinity, \-1 if
-.I x
-is negative infinity, and 0 otherwise.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR finite (),
-.BR finitef (),
-.BR finitel (),
-.BR isinf (),
-.BR isinff (),
-.BR isinfl (),
-.BR isnan (),
-.BR isnanf (),
-.BR isnanl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH NOTES
-Note that these functions are obsolete.
-C99 defines macros
-.BR isfinite (),
-.BR isinf (),
-and
-.BR isnan ()
-(for all types) replacing them.
-Further note that the C99
-.BR isinf ()
-has weaker guarantees on the return value.
-See
-.BR fpclassify (3).
-.\"
-.\" finite* not on HP-UX; they exist on Tru64.
-.\" .SH HISTORY
-.\" The
-.\" .BR finite ()
-.\" function occurs in 4.3BSD.
-.\" see IEEE.3 in the 4.3BSD manual
-.SH SEE ALSO
-.BR fpclassify (3)
diff --git a/man3/finitef.3 b/man3/finitef.3
deleted file mode 100644
index 19f709b1c..000000000
--- a/man3/finitef.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/finite.3
diff --git a/man3/finitel.3 b/man3/finitel.3
deleted file mode 100644
index 19f709b1c..000000000
--- a/man3/finitel.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/finite.3
diff --git a/man3/flockfile.3 b/man3/flockfile.3
deleted file mode 100644
index 36d8e79ca..000000000
--- a/man3/flockfile.3
+++ /dev/null
@@ -1,136 +0,0 @@
-'\" t
-.\" Copyright (C) 2001 Andries Brouwer <aeb@cwi.nl>.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH flockfile 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-flockfile, ftrylockfile, funlockfile \- lock FILE for stdio
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "void flockfile(FILE *" filehandle );
-.BI "int ftrylockfile(FILE *" filehandle );
-.BI "void funlockfile(FILE *" filehandle );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-All functions shown above:
-.nf
- /* Since glibc 2.24: */ _POSIX_C_SOURCE >= 199309L
- || /* glibc <= 2.23: */ _POSIX_C_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The stdio functions are thread-safe.
-This is achieved by assigning
-to each
-.I FILE
-object a lockcount and (if the lockcount is nonzero)
-an owning thread.
-For each library call, these functions wait until the
-.I FILE
-object
-is no longer locked by a different thread, then lock it, do the
-requested I/O, and unlock the object again.
-.PP
-(Note: this locking has nothing to do with the file locking done
-by functions like
-.BR flock (2)
-and
-.BR lockf (3).)
-.PP
-All this is invisible to the C-programmer, but there may be two
-reasons to wish for more detailed control.
-On the one hand, maybe
-a series of I/O actions by one thread belongs together, and should
-not be interrupted by the I/O of some other thread.
-On the other hand, maybe the locking overhead should be avoided
-for greater efficiency.
-.PP
-To this end, a thread can explicitly lock the
-.I FILE
-object,
-then do its series of I/O actions, then unlock.
-This prevents
-other threads from coming in between.
-If the reason for doing
-this was to achieve greater efficiency, one does the I/O with
-the nonlocking versions of the stdio functions: with
-.BR getc_unlocked (3)
-and
-.BR putc_unlocked (3)
-instead of
-.BR getc (3)
-and
-.BR putc (3).
-.PP
-The
-.BR flockfile ()
-function waits for
-.I *filehandle
-to be
-no longer locked by a different thread, then makes the
-current thread owner of
-.IR *filehandle ,
-and increments
-the lockcount.
-.PP
-The
-.BR funlockfile ()
-function decrements the lock count.
-.PP
-The
-.BR ftrylockfile ()
-function is a nonblocking version
-of
-.BR flockfile ().
-It does nothing in case some other thread
-owns
-.IR *filehandle ,
-and it obtains ownership and increments
-the lockcount otherwise.
-.SH RETURN VALUE
-The
-.BR ftrylockfile ()
-function returns zero for success
-(the lock was obtained), and nonzero for failure.
-.SH ERRORS
-None.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR flockfile (),
-.BR ftrylockfile (),
-.BR funlockfile ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.PP
-These functions are available when
-.B _POSIX_THREAD_SAFE_FUNCTIONS
-is defined.
-.SH SEE ALSO
-.BR unlocked_stdio (3)
diff --git a/man3/floor.3 b/man3/floor.3
deleted file mode 100644
index aee548954..000000000
--- a/man3/floor.3
+++ /dev/null
@@ -1,108 +0,0 @@
-'\" t
-.\" Copyright 2001 Andries Brouwer <aeb@cwi.nl>.
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH floor 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-floor, floorf, floorl \- largest integral value not greater than argument
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double floor(double " x );
-.BI "float floorf(float " x );
-.BI "long double floorl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR floorf (),
-.BR floorl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the largest integral value that is not greater than
-.IR x .
-.PP
-For example,
-.I floor(0.5)
-is 0.0, and
-.I floor(\-0.5)
-is \-1.0.
-.SH RETURN VALUE
-These functions return the floor of
-.IR x .
-.PP
-If
-.I x
-is integral, +0, \-0, NaN, or an infinity,
-.I x
-itself is returned.
-.SH ERRORS
-No errors occur.
-POSIX.1-2001 documents a range error for overflows, but see NOTES.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR floor (),
-.BR floorf (),
-.BR floorl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.PP
-SUSv2 and POSIX.1-2001 contain text about overflow (which might set
-.I errno
-to
-.BR ERANGE ,
-or raise an
-.B FE_OVERFLOW
-exception).
-In practice, the result cannot overflow on any current machine,
-so this error-handling stuff is just nonsense.
-.\" The POSIX.1-2001 APPLICATION USAGE SECTION discusses this point.
-(More precisely, overflow can happen only when the maximum value
-of the exponent is smaller than the number of mantissa bits.
-For the IEEE-754 standard 32-bit and 64-bit floating-point numbers
-the maximum value of the exponent is 127 (respectively, 1023),
-and the number of mantissa bits
-including the implicit bit
-is 24 (respectively, 53).)
-.SH SEE ALSO
-.BR ceil (3),
-.BR lrint (3),
-.BR nearbyint (3),
-.BR rint (3),
-.BR round (3),
-.BR trunc (3)
diff --git a/man3/floorf.3 b/man3/floorf.3
deleted file mode 100644
index 1d8e79b22..000000000
--- a/man3/floorf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/floor.3
diff --git a/man3/floorl.3 b/man3/floorl.3
deleted file mode 100644
index 1d8e79b22..000000000
--- a/man3/floorl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/floor.3
diff --git a/man3/fma.3 b/man3/fma.3
deleted file mode 100644
index c269e0cc9..000000000
--- a/man3/fma.3
+++ /dev/null
@@ -1,170 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" Modified 2004-11-15, Added further text on FLT_ROUNDS
-.\" as suggested by AEB and Fabian Kreutz
-.\"
-.TH fma 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fma, fmaf, fmal \- floating-point multiply and add
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double fma(double " x ", double " y ", double " z );
-.BI "float fmaf(float " x ", float " y ", float " z );
-.BI "long double fmal(long double " x ", long double " y ", long double " z );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR fma (),
-.BR fmaf (),
-.BR fmal ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-These functions compute
-.IR x " * " y " + " z .
-The result is rounded as one ternary operation according to the
-current rounding mode (see
-.BR fenv (3)).
-.SH RETURN VALUE
-These functions return the value of
-.IR x " * " y " + " z ,
-rounded as one ternary operation.
-.PP
-If
-.I x
-or
-.I y
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-times
-.I y
-is an exact infinity, and
-.I z
-is an infinity with the opposite sign,
-a domain error occurs,
-and a NaN is returned.
-.PP
-.\" POSIX.1-2008 allows some possible differences for the following two
-.\" domain error cases, but on Linux they are treated the same (AFAICS).
-.\" Nevertheless, we'll mirror POSIX.1 and describe the two cases
-.\" separately.
-If one of
-.I x
-or
-.I y
-is an infinity, the other is 0, and
-.I z
-is not a NaN,
-a domain error occurs, and
-a NaN is returned.
-.\" POSIX.1 says that a NaN or an implementation-defined value shall
-.\" be returned for this case.
-.PP
-If one of
-.I x
-or
-.I y
-is an infinity, and the other is 0, and
-.I z
-is a NaN,
-.\" POSIX.1 makes the domain error optional for this case.
-a domain error occurs, and
-a NaN is returned.
-.PP
-If
-.I x
-times
-.I y
-is not an infinity times zero (or vice versa), and
-.I z
-is a NaN,
-a NaN is returned.
-.PP
-If the result overflows,
-a range error occurs, and
-an infinity with the correct sign is returned.
-.PP
-If the result underflows,
-a range error occurs, and
-a signed 0 is returned.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP * \fIy\fP + \fIz\fP, \
-or \fIx\fP * \fIy\fP is invalid and \fIz\fP is not a NaN
-.\" .I errno
-.\" is set to
-.\" .BR EDOM .
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.TP
-Range error: result overflow
-.\" .I errno
-.\" is set to
-.\" .BR ERANGE .
-An overflow floating-point exception
-.RB ( FE_OVERFLOW )
-is raised.
-.TP
-Range error: result underflow
-.\" .I errno
-.\" is set to
-.\" .BR ERANGE .
-An underflow floating-point exception
-.RB ( FE_UNDERFLOW )
-is raised.
-.PP
-These functions do not set
-.IR errno .
-.\" FIXME . Is it intentional that these functions do not set errno?
-.\" Bug raised: https://www.sourceware.org/bugzilla/show_bug.cgi?id=6801
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fma (),
-.BR fmaf (),
-.BR fmal ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR remainder (3),
-.BR remquo (3)
diff --git a/man3/fmaf.3 b/man3/fmaf.3
deleted file mode 100644
index e050da05f..000000000
--- a/man3/fmaf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fma.3
diff --git a/man3/fmal.3 b/man3/fmal.3
deleted file mode 100644
index e050da05f..000000000
--- a/man3/fmal.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fma.3
diff --git a/man3/fmax.3 b/man3/fmax.3
deleted file mode 100644
index ca2a33770..000000000
--- a/man3/fmax.3
+++ /dev/null
@@ -1,76 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH fmax 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fmax, fmaxf, fmaxl \- determine maximum of two floating-point numbers
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double fmax(double " x ", double " y );
-.BI "float fmaxf(float " x ", float " y );
-.BI "long double fmaxl(long double " x ", long double " y );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR fmax (),
-.BR fmaxf (),
-.BR fmaxl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-These functions return the larger value of
-.I x
-and
-.IR y .
-.SH RETURN VALUE
-These functions return the maximum of
-.I x
-and
-.IR y .
-.PP
-If one argument is a NaN, the other argument is returned.
-.PP
-If both arguments are NaN, a NaN is returned.
-.SH ERRORS
-No errors occur.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fmax (),
-.BR fmaxf (),
-.BR fmaxl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR fdim (3),
-.BR fmin (3)
diff --git a/man3/fmaxf.3 b/man3/fmaxf.3
deleted file mode 100644
index 5f68a861e..000000000
--- a/man3/fmaxf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fmax.3
diff --git a/man3/fmaxl.3 b/man3/fmaxl.3
deleted file mode 100644
index 5f68a861e..000000000
--- a/man3/fmaxl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fmax.3
diff --git a/man3/fmemopen.3 b/man3/fmemopen.3
deleted file mode 100644
index a97aa8fa3..000000000
--- a/man3/fmemopen.3
+++ /dev/null
@@ -1,355 +0,0 @@
-'\" t
-.\" Copyright 2005, 2012, 2016 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH fmemopen 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fmemopen \- open memory as stream
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "FILE *fmemopen(void " buf [. size "], size_t " size ", \
-const char *" mode );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR fmemopen ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR fmemopen ()
-function opens a stream that permits the access specified by
-.IR mode .
-The stream allows I/O to be performed on the string or memory buffer
-pointed to by
-.IR buf .
-.PP
-The
-.I mode
-argument specifies the semantics of I/O on the stream,
-and is one of the following:
-.TP
-.I r
-The stream is opened for reading.
-.TP
-.I w
-The stream is opened for writing.
-.TP
-.I a
-Append; open the stream for writing,
-with the initial buffer position set to the first null byte.
-.TP
-.I r+
-Open the stream for reading and writing.
-.TP
-.I w+
-Open the stream for reading and writing.
-The buffer contents are truncated
-(i.e., \[aq]\e0\[aq] is placed in the first byte of the buffer).
-.TP
-.I a+
-Append; open the stream for reading and writing,
-with the initial buffer position set to the first null byte.
-.PP
-The stream maintains the notion of a current position,
-the location where the next I/O operation will be performed.
-The current position is implicitly updated by I/O operations.
-It can be explicitly updated using
-.BR fseek (3),
-and determined using
-.BR ftell (3).
-In all modes other than append,
-the initial position is set to the start of the buffer.
-In append mode, if no null byte is found within the buffer,
-then the initial position is
-.IR size+1 .
-.PP
-If
-.I buf
-is specified as NULL, then
-.BR fmemopen ()
-allocates a buffer of
-.I size
-bytes.
-This is useful for an application that wants to write data to
-a temporary buffer and then read it back again.
-The initial position is set to the start of the buffer.
-The buffer is automatically freed when the stream is closed.
-Note that the caller has no way to obtain a pointer to the
-temporary buffer allocated by this call (but see
-.BR open_memstream (3)).
-.PP
-If
-.I buf
-is not NULL, then it should point to a buffer of at least
-.I size
-bytes allocated by the caller.
-.PP
-When a stream that has been opened for writing is flushed
-.RB ( fflush (3))
-or closed
-.RB ( fclose (3)),
-a null byte is written at the end of the buffer if there is space.
-The caller should ensure that an extra byte is available in the
-buffer
-(and that
-.I size
-counts that byte)
-to allow for this.
-.PP
-In a stream opened for reading,
-null bytes (\[aq]\e0\[aq]) in the buffer do not cause read
-operations to return an end-of-file indication.
-A read from the buffer will indicate end-of-file
-only when the current buffer position advances
-.I size
-bytes past the start of the buffer.
-.PP
-Write operations take place either at the current position
-(for modes other than append), or at the current size of the stream
-(for append modes).
-.PP
-Attempts to write more than
-.I size
-bytes to the buffer result in an error.
-By default, such errors will be visible
-(by the absence of data) only when the
-.I stdio
-buffer is flushed.
-Disabling buffering with the following call
-may be useful to detect errors at the time of an output operation:
-.PP
-.in +4n
-.EX
-setbuf(stream, NULL);
-.EE
-.in
-.SH RETURN VALUE
-Upon successful completion,
-.BR fmemopen ()
-returns a
-.I FILE
-pointer.
-Otherwise, NULL is returned and
-.I errno
-is set to indicate the error.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fmemopen (),
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 1.0.x.
-POSIX.1-2008.
-.PP
-POSIX.1-2008 specifies that \[aq]b\[aq] in
-.I mode
-shall be ignored.
-However, Technical Corrigendum 1
-.\" http://austingroupbugs.net/view.php?id=396
-adjusts the standard to allow implementation-specific treatment for this case,
-thus permitting the glibc treatment of \[aq]b\[aq].
-.PP
-With glibc 2.22, binary mode (see below) was removed,
-many longstanding bugs in the implementation of
-.BR fmemopen ()
-were fixed, and a new versioned symbol was created for this interface.
-.\"
-.SS Binary mode
-From glibc 2.9 to glibc 2.21, the glibc implementation of
-.BR fmemopen ()
-supported a "binary" mode,
-enabled by specifying the letter \[aq]b\[aq] as the second character in
-.IR mode .
-In this mode,
-writes don't implicitly add a terminating null byte, and
-.BR fseek (3)
-.B SEEK_END
-is relative to the end of the buffer (i.e., the value specified by the
-.I size
-argument), rather than the current string length.
-.PP
-An API bug afflicted the implementation of binary mode:
-to specify binary mode, the \[aq]b\[aq] must be the
-.I second
-character in
-.IR mode .
-Thus, for example, "wb+" has the desired effect, but "w+b" does not.
-This is inconsistent with the treatment of
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=12836
-.I mode
-by
-.BR fopen (3).
-.PP
-Binary mode was removed in glibc 2.22; a \[aq]b\[aq] specified in
-.I mode
-has no effect.
-.SH NOTES
-There is no file descriptor associated with the file stream
-returned by this function
-(i.e.,
-.BR fileno (3)
-will return an error if called on the returned stream).
-.SH BUGS
-Before glibc 2.22, if
-.I size
-is specified as zero,
-.BR fmemopen ()
-fails with the error
-.BR EINVAL .
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=11216
-It would be more consistent if this case successfully created
-a stream that then returned end-of-file on the first attempt at reading;
-since glibc 2.22, the glibc implementation provides that behavior.
-.PP
-Before glibc 2.22,
-specifying append mode ("a" or "a+") for
-.BR fmemopen ()
-sets the initial buffer position to the first null byte, but
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=13152
-(if the current position is reset to a location other than
-the end of the stream)
-does not force subsequent writes to append at the end of the stream.
-This bug is fixed in glibc 2.22.
-.PP
-Before glibc 2.22, if the
-.I mode
-argument to
-.BR fmemopen ()
-specifies append ("a" or "a+"), and the
-.I size
-argument does not cover a null byte in
-.IR buf ,
-then, according to POSIX.1-2008,
-the initial buffer position should be set to
-the next byte after the end of the buffer.
-However, in this case the glibc
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=13151
-.BR fmemopen ()
-sets the buffer position to \-1.
-This bug is fixed in glibc 2.22.
-.PP
-Before glibc 2.22,
-.\" https://sourceware.org/bugzilla/show_bug.cgi?id=14292
-when a call to
-.BR fseek (3)
-with a
-.I whence
-value of
-.B SEEK_END
-was performed on a stream created by
-.BR fmemopen (),
-the
-.I offset
-was
-.I subtracted
-from the end-of-stream position, instead of being added.
-This bug is fixed in glibc 2.22.
-.PP
-The glibc 2.9 addition of "binary" mode for
-.BR fmemopen ()
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=6544
-silently changed the ABI: previously,
-.BR fmemopen ()
-ignored \[aq]b\[aq] in
-.IR mode .
-.SH EXAMPLES
-The program below uses
-.BR fmemopen ()
-to open an input buffer, and
-.BR open_memstream (3)
-to open a dynamically sized output buffer.
-The program scans its input string (taken from the program's
-first command-line argument) reading integers,
-and writes the squares of these integers to the output buffer.
-An example of the output produced by this program is the following:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out \[aq]1 23 43\[aq]"
-size=11; ptr=1 529 1849
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (fmemopen.c)
-.EX
-#define _GNU_SOURCE
-#include <err.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-int
-main(int argc, char *argv[])
-{
- FILE *out, *in;
- int v, s;
- size_t size;
- char *ptr;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s \[aq]<num>...\[aq]\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- in = fmemopen(argv[1], strlen(argv[1]), "r");
- if (in == NULL)
- err(EXIT_FAILURE, "fmemopen");
-\&
- out = open_memstream(&ptr, &size);
- if (out == NULL)
- err(EXIT_FAILURE, "open_memstream");
-\&
- for (;;) {
- s = fscanf(in, "%d", &v);
- if (s <= 0)
- break;
-\&
- s = fprintf(out, "%d ", v * v);
- if (s == \-1)
- err(EXIT_FAILURE, "fprintf");
- }
-\&
- fclose(in);
- fclose(out);
-\&
- printf("size=%zu; ptr=%s\en", size, ptr);
-\&
- free(ptr);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR fopen (3),
-.BR fopencookie (3),
-.BR open_memstream (3)
diff --git a/man3/fmin.3 b/man3/fmin.3
deleted file mode 100644
index 06021a4ed..000000000
--- a/man3/fmin.3
+++ /dev/null
@@ -1,76 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH fmin 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fmin, fminf, fminl \- determine minimum of two floating-point numbers
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double fmin(double " x ", double " y );
-.BI "float fminf(float " x ", float " y );
-.BI "long double fminl(long double " x ", long double " y );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR fmin (),
-.BR fminf (),
-.BR fminl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-These functions return the lesser value of
-.I x
-and
-.IR y .
-.SH RETURN VALUE
-These functions return the minimum of
-.I x
-and
-.IR y .
-.PP
-If one argument is a NaN, the other argument is returned.
-.PP
-If both arguments are NaN, a NaN is returned.
-.SH ERRORS
-No errors occur.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fmin (),
-.BR fminf (),
-.BR fminl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR fdim (3),
-.BR fmax (3)
diff --git a/man3/fminf.3 b/man3/fminf.3
deleted file mode 100644
index a86d77d74..000000000
--- a/man3/fminf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fmin.3
diff --git a/man3/fminl.3 b/man3/fminl.3
deleted file mode 100644
index a86d77d74..000000000
--- a/man3/fminl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fmin.3
diff --git a/man3/fmod.3 b/man3/fmod.3
deleted file mode 100644
index 5e01ca474..000000000
--- a/man3/fmod.3
+++ /dev/null
@@ -1,157 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH fmod 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fmod, fmodf, fmodl \- floating-point remainder function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double fmod(double " x ", double " y );
-.BI "float fmodf(float " x ", float " y );
-.BI "long double fmodl(long double " x ", long double " y );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR fmodf (),
-.BR fmodl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions compute the floating-point remainder of dividing
-.I x
-by
-.IR y .
-The return value is
-.I x
-\-
-.I n
-*
-.IR y ,
-where
-.I n
-is the quotient of
-.I x
-/
-.IR y ,
-rounded toward zero to an integer.
-.SH RETURN VALUE
-On success, these
-functions return the value \fIx\fP\ \-\ \fIn\fP*\fIy\fP,
-for some integer
-.IR n ,
-such that the returned value has the same sign as
-.I x
-and a magnitude less than the magnitude of
-.IR y .
-.PP
-If
-.I x
-or
-.I y
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is an infinity,
-a domain error occurs, and
-a NaN is returned.
-.PP
-If
-.I y
-is zero,
-a domain error occurs, and
-a NaN is returned.
-.PP
-If
-.I x
-is +0 (\-0), and
-.I y
-is not zero, +0 (\-0) is returned.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is an infinity
-.I errno
-is set to
-.B EDOM
-(but see BUGS).
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.TP
-Domain error: \fIy\fP is zero
-.I errno
-is set to
-.BR EDOM .
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.\" POSIX.1 documents an optional underflow error, but AFAICT it doesn't
-.\" (can't?) occur -- mtk, Jul 2008
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fmod (),
-.BR fmodf (),
-.BR fmodl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH BUGS
-Before glibc 2.10, the glibc implementation did not set
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6784
-.I errno
-to
-.B EDOM
-when a domain error occurred for an infinite
-.IR x .
-.SH SEE ALSO
-.BR remainder (3)
diff --git a/man3/fmodf.3 b/man3/fmodf.3
deleted file mode 100644
index d014cc043..000000000
--- a/man3/fmodf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fmod.3
diff --git a/man3/fmodl.3 b/man3/fmodl.3
deleted file mode 100644
index d014cc043..000000000
--- a/man3/fmodl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fmod.3
diff --git a/man3/fmtmsg.3 b/man3/fmtmsg.3
deleted file mode 100644
index b2da3085c..000000000
--- a/man3/fmtmsg.3
+++ /dev/null
@@ -1,338 +0,0 @@
-'\" t
-.\" Copyright 2002 walter harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" adapted glibc info page
-.\"
-.\" This should run as 'Guru Meditation' (amiga joke :)
-.\" The function is quite complex and deserves an example
-.\"
-.\" Polished, aeb, 2003-11-01
-.TH fmtmsg 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fmtmsg \- print formatted error messages
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <fmtmsg.h>
-.PP
-.BI "int fmtmsg(long " classification ", const char *" label ,
-.BI " int " severity ", const char *" text ,
-.BI " const char *" action ", const char *" tag );
-.fi
-.SH DESCRIPTION
-This function displays a message described by its arguments on the device(s)
-specified in the
-.I classification
-argument.
-For messages written to
-.IR stderr ,
-the format depends on the
-.B MSGVERB
-environment variable.
-.PP
-The
-.I label
-argument identifies the source of the message.
-The string must consist
-of two colon separated parts where the first part has not more
-than 10 and the second part not more than 14 characters.
-.PP
-The
-.I text
-argument describes the condition of the error.
-.PP
-The
-.I action
-argument describes possible steps to recover from the error.
-If it is printed, it is prefixed by "TO FIX: ".
-.PP
-The
-.I tag
-argument is a reference to the online documentation where more
-information can be found.
-It should contain the
-.I label
-value and a unique identification number.
-.SS Dummy arguments
-Each of the arguments can have a dummy value.
-The dummy classification value
-.B MM_NULLMC
-(0L) does not specify any output, so nothing is printed.
-The dummy severity value
-.B NO_SEV
-(0) says that no severity is supplied.
-The values
-.BR MM_NULLLBL ,
-.BR MM_NULLTXT ,
-.BR MM_NULLACT ,
-.B MM_NULLTAG
-are synonyms for
-.IR "((char\ *)\ 0)" ,
-the empty string, and
-.B MM_NULLSEV
-is a synonym for
-.BR NO_SEV .
-.SS The classification argument
-The
-.I classification
-argument is the sum of values describing 4 types of information.
-.PP
-The first value defines the output channel.
-.TP 12n
-.B MM_PRINT
-Output to
-.IR stderr .
-.TP
-.B MM_CONSOLE
-Output to the system console.
-.TP
-.B "MM_PRINT | MM_CONSOLE"
-Output to both.
-.PP
-The second value is the source of the error:
-.TP 12n
-.B MM_HARD
-A hardware error occurred.
-.TP
-.B MM_FIRM
-A firmware error occurred.
-.TP
-.B MM_SOFT
-A software error occurred.
-.PP
-The third value encodes the detector of the problem:
-.TP 12n
-.B MM_APPL
-It is detected by an application.
-.TP
-.B MM_UTIL
-It is detected by a utility.
-.TP
-.B MM_OPSYS
-It is detected by the operating system.
-.PP
-The fourth value shows the severity of the incident:
-.TP 12n
-.B MM_RECOVER
-It is a recoverable error.
-.TP
-.B MM_NRECOV
-It is a nonrecoverable error.
-.SS The severity argument
-The
-.I severity
-argument can take one of the following values:
-.TP 12n
-.B MM_NOSEV
-No severity is printed.
-.TP
-.B MM_HALT
-This value is printed as HALT.
-.TP
-.B MM_ERROR
-This value is printed as ERROR.
-.TP
-.B MM_WARNING
-This value is printed as WARNING.
-.TP
-.B MM_INFO
-This value is printed as INFO.
-.PP
-The numeric values are between 0 and 4.
-Using
-.BR addseverity (3)
-or the environment variable
-.B SEV_LEVEL
-you can add more levels and strings to print.
-.SH RETURN VALUE
-The function can return 4 values:
-.TP 12n
-.B MM_OK
-Everything went smooth.
-.TP
-.B MM_NOTOK
-Complete failure.
-.TP
-.B MM_NOMSG
-Error writing to
-.IR stderr .
-.TP
-.B MM_NOCON
-Error writing to the console.
-.SH ENVIRONMENT
-The environment variable
-.B MSGVERB
-("message verbosity") can be used to suppress parts of
-the output to
-.IR stderr .
-(It does not influence output to the console.)
-When this variable is defined, is non-NULL, and is a colon-separated
-list of valid keywords, then only the parts of the message corresponding
-to these keywords is printed.
-Valid keywords are "label", "severity", "text", "action", and "tag".
-.PP
-The environment variable
-.B SEV_LEVEL
-can be used to introduce new severity levels.
-By default, only the five severity levels described
-above are available.
-Any other numeric value would make
-.BR fmtmsg ()
-print nothing.
-If the user puts
-.B SEV_LEVEL
-with a format like
-.PP
-.RS
-SEV_LEVEL=[description[:description[:...]]]
-.RE
-.PP
-in the environment of the process before the first call to
-.BR fmtmsg (),
-where each description is of the form
-.PP
-.RS
-severity-keyword,level,printstring
-.RE
-.PP
-then
-.BR fmtmsg ()
-will also accept the indicated values for the level (in addition to
-the standard levels 0\[en]4), and use the indicated printstring when
-such a level occurs.
-.PP
-The severity-keyword part is not used by
-.BR fmtmsg ()
-but it has to be present.
-The level part is a string representation of a number.
-The numeric value must be a number greater than 4.
-This value must be used in the severity argument of
-.BR fmtmsg ()
-to select this class.
-It is not possible to overwrite
-any of the predefined classes.
-The printstring
-is the string printed when a message of this class is processed by
-.BR fmtmsg ().
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR fmtmsg ()
-T} Thread safety T{
-glibc\ >=\ 2.16: MT-Safe;
-glibc\ <\ 2.16: MT-Unsafe
-T}
-.TE
-.hy
-.ad
-.sp 1
-.PP
-Before glibc 2.16, the
-.BR fmtmsg ()
-function uses a static variable that is not protected,
-so it is not thread-safe.
-.PP
-Since glibc 2.16,
-.\" Modified in commit 7724defcf8873116fe4efab256596861eef21a94
-the
-.BR fmtmsg ()
-function uses a lock to protect the static variable, so it is thread-safe.
-.SH STANDARDS
-.TP
-.BR fmtmsg ()
-.TQ
-.B MSGVERB
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR fmtmsg ()
-System V.
-POSIX.1-2001 and POSIX.1-2008.
-glibc 2.1.
-.TP
-.B MSGVERB
-System V.
-POSIX.1-2001 and POSIX.1-2008.
-.TP
-.B SEV_LEVEL
-System V.
-.PP
-System V and UnixWare man pages tell us that these functions
-have been replaced by "pfmt() and addsev()" or by "pfmt(),
-vpfmt(), lfmt(), and vlfmt()", and will be removed later.
-.SH EXAMPLES
-.\" SRC BEGIN (fmtmsg.c)
-.EX
-#include <fmtmsg.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(void)
-{
- long class = MM_PRINT | MM_SOFT | MM_OPSYS | MM_RECOVER;
- int err;
-\&
- err = fmtmsg(class, "util\-linux:mount", MM_ERROR,
- "unknown mount option", "See mount(8).",
- "util\-linux:mount:017");
- switch (err) {
- case MM_OK:
- break;
- case MM_NOTOK:
- printf("Nothing printed\en");
- break;
- case MM_NOMSG:
- printf("Nothing printed to stderr\en");
- break;
- case MM_NOCON:
- printf("No console output\en");
- break;
- default:
- printf("Unknown error from fmtmsg()\en");
- }
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.PP
-The output should be:
-.PP
-.in +4n
-.EX
-util\-linux:mount: ERROR: unknown mount option
-TO FIX: See mount(8). util\-linux:mount:017
-.EE
-.in
-.PP
-and after
-.PP
-.in +4n
-.EX
-MSGVERB=text:action; export MSGVERB
-.EE
-.in
-.PP
-the output becomes:
-.PP
-.in +4n
-.EX
-unknown mount option
-TO FIX: See mount(8).
-.EE
-.in
-.SH SEE ALSO
-.BR addseverity (3),
-.BR perror (3)
diff --git a/man3/fnmatch.3 b/man3/fnmatch.3
deleted file mode 100644
index b0dae22a3..000000000
--- a/man3/fnmatch.3
+++ /dev/null
@@ -1,144 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 19:35:54 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Mon Oct 16 00:16:29 2000 following Joseph S. Myers
-.\"
-.TH fnmatch 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fnmatch \- match filename or pathname
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <fnmatch.h>
-.PP
-.BI "int fnmatch(const char *" "pattern" ", const char *" string ", int " flags );
-.fi
-.SH DESCRIPTION
-The
-.BR fnmatch ()
-function checks whether the
-.I string
-argument matches the
-.I pattern
-argument, which is a shell wildcard pattern (see
-.BR glob (7)).
-.PP
-The
-.I flags
-argument modifies the behavior; it is the bitwise OR of zero or more
-of the following flags:
-.TP
-.B FNM_NOESCAPE
-If this flag is set, treat backslash as an ordinary character,
-instead of an escape character.
-.TP
-.B FNM_PATHNAME
-If this flag is set, match a slash in
-.I string
-only with a slash in
-.I pattern
-and not by an asterisk (*) or a question mark (?) metacharacter,
-nor by a bracket expression ([]) containing a slash.
-.TP
-.B FNM_PERIOD
-If this flag is set, a leading period in
-.I string
-has to be matched exactly by a period in
-.IR pattern .
-A period is considered to be leading if it is the first character in
-.IR string ,
-or if both
-.B FNM_PATHNAME
-is set and the period immediately follows a slash.
-.TP
-.B FNM_FILE_NAME
-This is a GNU synonym for
-.BR FNM_PATHNAME .
-.TP
-.B FNM_LEADING_DIR
-If this flag (a GNU extension) is set, the pattern is considered to be
-matched if it matches an initial segment of
-.I string
-which is followed by a slash.
-This flag is mainly for the internal
-use of glibc and is implemented only in certain cases.
-.TP
-.B FNM_CASEFOLD
-If this flag (a GNU extension) is set, the pattern is matched
-case-insensitively.
-.TP
-.B FNM_EXTMATCH
-If this flag (a GNU extension) is set, extended patterns are
-supported, as introduced by \&'ksh' and now supported by other shells.
-The extended format is as follows, with \fIpattern\-list\fR
-being a \&'|' separated list of patterns.
-.TP
-\&'?(\fIpattern\-list\fR)'
-The pattern matches if zero or one occurrences of any of the
-patterns in the \fIpattern\-list\fR match the input \fIstring\fR.
-.TP
-\&'*(\fIpattern\-list\fR)'
-The pattern matches if zero or more occurrences of any of the
-patterns in the \fIpattern\-list\fR match the input \fIstring\fR.
-.TP
-\&'+(\fIpattern\-list\fR)'
-The pattern matches if one or more occurrences of any of the
-patterns in the \fIpattern\-list\fR match the input \fIstring\fR.
-.TP
-\&'@(\fIpattern\-list\fR)'
-The pattern matches if exactly one occurrence of any of the
-patterns in the \fIpattern\-list\fR match the input \fIstring\fR.
-.TP
-\&'!(\fIpattern\-list\fR)'
-The pattern matches if the input \fIstring\fR cannot be matched with
-any of the patterns in the \fIpattern\-list\fR.
-.SH RETURN VALUE
-Zero if
-.I string
-matches
-.IR pattern ,
-.B FNM_NOMATCH
-if there is no match or another nonzero value if there is an error.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fnmatch ()
-T} Thread safety MT-Safe env locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR fnmatch ()
-POSIX.1-2008.
-.TP
-.B FNM_FILE_NAME
-.TQ
-.B FNM_LEADING_DIR
-.TQ
-.B FNM_CASEFOLD
-GNU.
-.SH HISTORY
-.TP
-.BR fnmatch ()
-POSIX.1-2001, POSIX.2.
-.SH SEE ALSO
-.BR sh (1),
-.BR glob (3),
-.BR scandir (3),
-.BR wordexp (3),
-.BR glob (7)
diff --git a/man3/fopen.3 b/man3/fopen.3
deleted file mode 100644
index 4d9b74d70..000000000
--- a/man3/fopen.3
+++ /dev/null
@@ -1,408 +0,0 @@
-'\" t
-.\" Copyright (c) 1990, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" Chris Torek and the American National Standards Committee X3,
-.\" on Information Processing Systems.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)fopen.3 6.8 (Berkeley) 6/29/91
-.\"
-.\" Converted for Linux, Mon Nov 29 15:22:01 1993, faith@cs.unc.edu
-.\" Modified, aeb, 960421, 970806
-.\" Modified, joey, aeb, 2002-01-03
-.\"
-.TH fopen 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fopen, fdopen, freopen \- stream open functions
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "FILE *fopen(const char *restrict " pathname \
-", const char *restrict " mode );
-.BI "FILE *fdopen(int " fd ", const char *" mode );
-.BI "FILE *freopen(const char *restrict " pathname \
-", const char *restrict " mode ,
-.BI " FILE *restrict " stream );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR fdopen ():
-.nf
- _POSIX_C_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR fopen ()
-function opens the file whose name is the string pointed to by
-.I pathname
-and associates a stream with it.
-.PP
-The argument
-.I mode
-points to a string beginning with one of the following sequences
-(possibly followed by additional characters, as described below):
-.TP
-.B r
-Open text file for reading.
-The stream is positioned at the beginning of the file.
-.TP
-.B r+
-Open for reading and writing.
-The stream is positioned at the beginning of the file.
-.TP
-.B w
-Truncate file to zero length or create text file for writing.
-The stream is positioned at the beginning of the file.
-.TP
-.B w+
-Open for reading and writing.
-The file is created if it does not exist, otherwise it is truncated.
-The stream is positioned at the beginning of
-the file.
-.TP
-.B a
-Open for appending (writing at end of file).
-The file is created if it does not exist.
-The stream is positioned at the end of the file.
-.TP
-.B a+
-Open for reading and appending (writing at end of file).
-The file is created if it does not exist.
-Output is always appended to the end of the file.
-POSIX is silent on what the initial read position is when using this mode.
-For glibc, the initial file position for reading is at
-the beginning of the file, but for Android/BSD/MacOS, the
-initial file position for reading is at the end of the file.
-.PP
-The
-.I mode
-string can also include the letter \[aq]b\[aq] either as a last character or as
-a character between the characters in any of the two-character strings
-described above.
-This is strictly for compatibility with ISO C
-and has no effect; the \[aq]b\[aq] is ignored on all POSIX
-conforming systems, including Linux.
-(Other systems may treat text files and binary files differently,
-and adding the \[aq]b\[aq] may be a good idea if you do I/O to a binary
-file and expect that your program may be ported to non-UNIX
-environments.)
-.PP
-See NOTES below for details of glibc extensions for
-.IR mode .
-.PP
-Any created file will have the mode
-.BR S_IRUSR " | " S_IWUSR " | " S_IRGRP " | " S_IWGRP " | " S_IROTH " | " S_IWOTH
-(0666), as modified by the process's umask value (see
-.BR umask (2)).
-.PP
-Reads and writes may be intermixed on read/write streams in any order.
-Note that ANSI C requires that a file positioning function intervene
-between output and input, unless an input operation encounters end-of-file.
-(If this condition is not met, then a read is allowed to return the
-result of writes other than the most recent.)
-Therefore it is good practice (and indeed sometimes necessary
-under Linux) to put an
-.BR fseek (3)
-or
-.BR fsetpos (3)
-operation between write and read operations on such a stream.
-This operation may be an apparent no-op
-(as in \fIfseek(..., 0L, SEEK_CUR)\fP
-called for its synchronizing side effect).
-.PP
-Opening a file in append mode (\fBa\fP as the first character of
-.IR mode )
-causes all subsequent write operations to this stream to occur
-at end-of-file, as if preceded by the call:
-.PP
-.in +4n
-.EX
-fseek(stream, 0, SEEK_END);
-.EE
-.in
-.PP
-The file descriptor associated with the stream is opened as if by a call to
-.BR open (2)
-with the following flags:
-.RS
-.TS
-allbox;
-lb lb
-c l.
-fopen() mode open() flags
-\fIr\fP O_RDONLY
-\fIw\fP O_WRONLY | O_CREAT | O_TRUNC
-\fIa\fP O_WRONLY | O_CREAT | O_APPEND
-\fIr+\fP O_RDWR
-\fIw+\fP O_RDWR | O_CREAT | O_TRUNC
-\fIa+\fP O_RDWR | O_CREAT | O_APPEND
-.TE
-.RE
-.\"
-.SS fdopen()
-The
-.BR fdopen ()
-function associates a stream with the existing file descriptor,
-.IR fd .
-The
-.I mode
-of the stream (one of the values "r", "r+", "w", "w+", "a", "a+")
-must be compatible with the mode of the file descriptor.
-The file position indicator of the new stream is set to that
-belonging to
-.IR fd ,
-and the error and end-of-file indicators are cleared.
-Modes "w" or "w+" do not cause truncation of the file.
-The file descriptor is not dup'ed, and will be closed when
-the stream created by
-.BR fdopen ()
-is closed.
-The result of applying
-.BR fdopen ()
-to a shared memory object is undefined.
-.\"
-.SS freopen()
-The
-.BR freopen ()
-function opens the file whose name is the string pointed to by
-.I pathname
-and associates the stream pointed to by
-.I stream
-with it.
-The original stream (if it exists) is closed.
-The
-.I mode
-argument is used just as in the
-.BR fopen ()
-function.
-.PP
-If the
-.I pathname
-argument is a null pointer,
-.BR freopen ()
-changes the mode of the stream to that specified in
-.IR mode ;
-that is,
-.BR freopen ()
-reopens the pathname that is associated with the stream.
-The specification for this behavior was added in the C99 standard, which says:
-.PP
-.RS
-In this case,
-the file descriptor associated with the stream need not be closed
-if the call to
-.BR freopen ()
-succeeds.
-It is implementation-defined which changes of mode are permitted (if any),
-and under what circumstances.
-.RE
-.PP
-The primary use of the
-.BR freopen ()
-function is to change the file associated with a standard text stream
-.RI ( stderr ", " stdin ", or " stdout ).
-.SH RETURN VALUE
-Upon successful completion
-.BR fopen (),
-.BR fdopen (),
-and
-.BR freopen ()
-return a
-.I FILE
-pointer.
-Otherwise, NULL is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-The
-.I mode
-provided to
-.BR fopen (),
-.BR fdopen (),
-or
-.BR freopen ()
-was invalid.
-.PP
-The
-.BR fopen (),
-.BR fdopen (),
-and
-.BR freopen ()
-functions may also fail and set
-.I errno
-for any of the errors specified for the routine
-.BR malloc (3).
-.PP
-The
-.BR fopen ()
-function may also fail and set
-.I errno
-for any of the errors specified for the routine
-.BR open (2).
-.PP
-The
-.BR fdopen ()
-function may also fail and set
-.I errno
-for any of the errors specified for the routine
-.BR fcntl (2).
-.PP
-The
-.BR freopen ()
-function may also fail and set
-.I errno
-for any of the errors specified for the routines
-.BR open (2),
-.BR fclose (3),
-and
-.BR fflush (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fopen (),
-.BR fdopen (),
-.BR freopen ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR fopen ()
-.TQ
-.BR freopen ()
-C11, POSIX.1-2008.
-.TP
-.BR fdopen ()
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR fopen ()
-.TQ
-.BR freopen ()
-POSIX.1-2001, C89.
-.TP
-.BR fdopen ()
-POSIX.1-2001.
-.SH NOTES
-.SS glibc notes
-The GNU C library allows the following extensions for the string specified in
-.IR mode :
-.TP
-.BR c " (since glibc 2.3.3)"
-Do not make the open operation,
-or subsequent read and write operations,
-thread cancelation points.
-This flag is ignored for
-.BR fdopen ().
-.TP
-.BR e " (since glibc 2.7)"
-Open the file with the
-.B O_CLOEXEC
-flag.
-See
-.BR open (2)
-for more information.
-This flag is ignored for
-.BR fdopen ().
-.TP
-.BR m " (since glibc 2.3)"
-Attempt to access the file using
-.BR mmap (2),
-rather than I/O system calls
-.RB ( read (2),
-.BR write (2)).
-Currently,
-.\" As at glibc 2.4:
-use of
-.BR mmap (2)
-is attempted only for a file opened for reading.
-.TP
-.B x
-.\" Since glibc 2.0?
-.\" FIXME . C11 specifies this flag
-Open the file exclusively
-(like the
-.B O_EXCL
-flag of
-.BR open (2)).
-If the file already exists,
-.BR fopen ()
-fails, and sets
-.I errno
-to
-.BR EEXIST .
-This flag is ignored for
-.BR fdopen ().
-.PP
-In addition to the above characters,
-.BR fopen ()
-and
-.BR freopen ()
-support the following syntax
-in
-.IR mode :
-.PP
-.BI " ,ccs=" string
-.PP
-The given
-.I string
-is taken as the name of a coded character set and
-the stream is marked as wide-oriented.
-Thereafter, internal conversion functions convert I/O
-to and from the character set
-.IR string .
-If the
-.BI ,ccs= string
-syntax is not specified,
-then the wide-orientation of the stream is
-determined by the first file operation.
-If that operation is a wide-character operation,
-the stream is marked wide-oriented,
-and functions to convert to the coded character set are loaded.
-.SH BUGS
-When parsing for individual flag characters in
-.I mode
-(i.e., the characters preceding the "ccs" specification),
-the glibc implementation of
-.\" FIXME . http://sourceware.org/bugzilla/show_bug.cgi?id=12685
-.BR fopen ()
-and
-.BR freopen ()
-limits the number of characters examined in
-.I mode
-to 7 (or, before glibc 2.14, to 6,
-which was not enough to include possible specifications such as "rb+cmxe").
-The current implementation of
-.BR fdopen ()
-parses at most 5 characters in
-.IR mode .
-.SH SEE ALSO
-.BR open (2),
-.BR fclose (3),
-.BR fileno (3),
-.BR fmemopen (3),
-.BR fopencookie (3),
-.BR open_memstream (3)
diff --git a/man3/fopencookie.3 b/man3/fopencookie.3
deleted file mode 100644
index 409a3c81a..000000000
--- a/man3/fopencookie.3
+++ /dev/null
@@ -1,458 +0,0 @@
-'\" t
-.\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH fopencookie 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fopencookie \- opening a custom stream
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <stdio.h>
-.PP
-.BI "FILE *fopencookie(void *restrict " cookie ", const char *restrict " mode ,
-.BI " cookie_io_functions_t " io_funcs );
-.fi
-.SH DESCRIPTION
-The
-.BR fopencookie ()
-function allows the programmer to create a custom implementation
-for a standard I/O stream.
-This implementation can store the stream's data at a location of
-its own choosing; for example,
-.BR fopencookie ()
-is used to implement
-.BR fmemopen (3),
-which provides a stream interface to data that is stored in a
-buffer in memory.
-.PP
-In order to create a custom stream the programmer must:
-.IP \[bu] 3
-Implement four "hook" functions that are used internally by the
-standard I/O library when performing I/O on the stream.
-.IP \[bu]
-Define a "cookie" data type,
-a structure that provides bookkeeping information
-(e.g., where to store data) used by the aforementioned hook functions.
-The standard I/O package knows nothing about the contents of this cookie
-(thus it is typed as
-.I void\~*
-when passed to
-.BR fopencookie ()),
-but automatically supplies the cookie
-as the first argument when calling the hook functions.
-.IP \[bu]
-Call
-.BR fopencookie ()
-to open a new stream and associate the cookie and hook functions
-with that stream.
-.PP
-The
-.BR fopencookie ()
-function serves a purpose similar to
-.BR fopen (3):
-it opens a new stream and returns a pointer to a
-.I FILE
-object that is used to operate on that stream.
-.PP
-The
-.I cookie
-argument is a pointer to the caller's cookie structure
-that is to be associated with the new stream.
-This pointer is supplied as the first argument when the standard I/O
-library invokes any of the hook functions described below.
-.PP
-The
-.I mode
-argument serves the same purpose as for
-.BR fopen (3).
-The following modes are supported:
-.IR r ,
-.IR w ,
-.IR a ,
-.IR r+ ,
-.IR w+ ,
-and
-.IR a+ .
-See
-.BR fopen (3)
-for details.
-.PP
-The
-.I io_funcs
-argument is a structure that contains four fields pointing to the
-programmer-defined hook functions that are used to implement this stream.
-The structure is defined as follows
-.PP
-.in +4n
-.EX
-typedef struct {
- cookie_read_function_t *read;
- cookie_write_function_t *write;
- cookie_seek_function_t *seek;
- cookie_close_function_t *close;
-} cookie_io_functions_t;
-.EE
-.in
-.PP
-The four fields are as follows:
-.TP
-.I cookie_read_function_t *read
-This function implements read operations for the stream.
-When called, it receives three arguments:
-.IP
-.in +4n
-.EX
-ssize_t read(void *cookie, char *buf, size_t size);
-.EE
-.in
-.IP
-The
-.I buf
-and
-.I size
-arguments are, respectively,
-a buffer into which input data can be placed and the size of that buffer.
-As its function result, the
-.I read
-function should return the number of bytes copied into
-.IR buf ,
-0 on end of file, or \-1 on error.
-The
-.I read
-function should update the stream offset appropriately.
-.IP
-If
-.I *read
-is a null pointer,
-then reads from the custom stream always return end of file.
-.TP
-.I cookie_write_function_t *write
-This function implements write operations for the stream.
-When called, it receives three arguments:
-.IP
-.in +4n
-.EX
-ssize_t write(void *cookie, const char *buf, size_t size);
-.EE
-.in
-.IP
-The
-.I buf
-and
-.I size
-arguments are, respectively,
-a buffer of data to be output to the stream and the size of that buffer.
-As its function result, the
-.I write
-function should return the number of bytes copied from
-.IR buf ,
-or 0 on error.
-(The function must not return a negative value.)
-The
-.I write
-function should update the stream offset appropriately.
-.IP
-If
-.I *write
-is a null pointer,
-then output to the stream is discarded.
-.TP
-.I cookie_seek_function_t *seek
-This function implements seek operations on the stream.
-When called, it receives three arguments:
-.IP
-.in +4n
-.EX
-int seek(void *cookie, off64_t *offset, int whence);
-.EE
-.in
-.IP
-The
-.I *offset
-argument specifies the new file offset depending on which
-of the following three values is supplied in
-.IR whence :
-.RS
-.TP
-.B SEEK_SET
-The stream offset should be set
-.I *offset
-bytes from the start of the stream.
-.TP
-.B SEEK_CUR
-.I *offset
-should be added to the current stream offset.
-.TP
-.B SEEK_END
-The stream offset should be set to the size of the stream plus
-.IR *offset .
-.RE
-.IP
-Before returning, the
-.I seek
-function should update
-.I *offset
-to indicate the new stream offset.
-.IP
-As its function result, the
-.I seek
-function should return 0 on success, and \-1 on error.
-.IP
-If
-.I *seek
-is a null pointer,
-then it is not possible to perform seek operations on the stream.
-.TP
-.I cookie_close_function_t *close
-This function closes the stream.
-The hook function can do things such as freeing buffers allocated
-for the stream.
-When called, it receives one argument:
-.IP
-.in +4n
-.EX
-int close(void *cookie);
-.EE
-.in
-.IP
-The
-.I cookie
-argument is the cookie that the programmer supplied when calling
-.BR fopencookie ().
-.IP
-As its function result, the
-.I close
-function should return 0 on success, and
-.B EOF
-on error.
-.IP
-If
-.I *close
-is NULL, then no special action is performed when the stream is closed.
-.SH RETURN VALUE
-On success
-.BR fopencookie ()
-returns a pointer to the new stream.
-On error, NULL is returned.
-.\" .SH ERRORS
-.\" It's not clear if errno ever gets set...
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fopencookie ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH EXAMPLES
-The program below implements a custom stream whose functionality
-is similar (but not identical) to that available via
-.BR fmemopen (3).
-It implements a stream whose data is stored in a memory buffer.
-The program writes its command-line arguments to the stream,
-and then seeks through the stream reading two out of every
-five characters and writing them to standard output.
-The following shell session demonstrates the use of the program:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out \[aq]hello world\[aq]"
-/he/
-/ w/
-/d/
-Reached end of file
-.EE
-.in
-.PP
-Note that a more general version of the program below
-could be improved to more robustly handle various error situations
-(e.g., opening a stream with a cookie that already has an open stream;
-closing a stream that has already been closed).
-.SS Program source
-\&
-.\" SRC BEGIN (fopencookie.c)
-.EX
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <unistd.h>
-\&
-#define INIT_BUF_SIZE 4
-\&
-struct memfile_cookie {
- char *buf; /* Dynamically sized buffer for data */
- size_t allocated; /* Size of buf */
- size_t endpos; /* Number of characters in buf */
- off_t offset; /* Current file offset in buf */
-};
-\&
-ssize_t
-memfile_write(void *c, const char *buf, size_t size)
-{
- char *new_buff;
- struct memfile_cookie *cookie = c;
-\&
- /* Buffer too small? Keep doubling size until big enough. */
-\&
- while (size + cookie\->offset > cookie\->allocated) {
- new_buff = realloc(cookie\->buf, cookie\->allocated * 2);
- if (new_buff == NULL)
- return \-1;
- cookie\->allocated *= 2;
- cookie\->buf = new_buff;
- }
-\&
- memcpy(cookie\->buf + cookie\->offset, buf, size);
-\&
- cookie\->offset += size;
- if (cookie\->offset > cookie\->endpos)
- cookie\->endpos = cookie\->offset;
-\&
- return size;
-}
-\&
-ssize_t
-memfile_read(void *c, char *buf, size_t size)
-{
- ssize_t xbytes;
- struct memfile_cookie *cookie = c;
-\&
- /* Fetch minimum of bytes requested and bytes available. */
-\&
- xbytes = size;
- if (cookie\->offset + size > cookie\->endpos)
- xbytes = cookie\->endpos \- cookie\->offset;
- if (xbytes < 0) /* offset may be past endpos */
- xbytes = 0;
-\&
- memcpy(buf, cookie\->buf + cookie\->offset, xbytes);
-\&
- cookie\->offset += xbytes;
- return xbytes;
-}
-\&
-int
-memfile_seek(void *c, off64_t *offset, int whence)
-{
- off64_t new_offset;
- struct memfile_cookie *cookie = c;
-\&
- if (whence == SEEK_SET)
- new_offset = *offset;
- else if (whence == SEEK_END)
- new_offset = cookie\->endpos + *offset;
- else if (whence == SEEK_CUR)
- new_offset = cookie\->offset + *offset;
- else
- return \-1;
-\&
- if (new_offset < 0)
- return \-1;
-\&
- cookie\->offset = new_offset;
- *offset = new_offset;
- return 0;
-}
-\&
-int
-memfile_close(void *c)
-{
- struct memfile_cookie *cookie = c;
-\&
- free(cookie\->buf);
- cookie\->allocated = 0;
- cookie\->buf = NULL;
-\&
- return 0;
-}
-\&
-int
-main(int argc, char *argv[])
-{
- cookie_io_functions_t memfile_func = {
- .read = memfile_read,
- .write = memfile_write,
- .seek = memfile_seek,
- .close = memfile_close
- };
- FILE *stream;
- struct memfile_cookie mycookie;
- size_t nread;
- char buf[1000];
-\&
- /* Set up the cookie before calling fopencookie(). */
-\&
- mycookie.buf = malloc(INIT_BUF_SIZE);
- if (mycookie.buf == NULL) {
- perror("malloc");
- exit(EXIT_FAILURE);
- }
-\&
- mycookie.allocated = INIT_BUF_SIZE;
- mycookie.offset = 0;
- mycookie.endpos = 0;
-\&
- stream = fopencookie(&mycookie, "w+", memfile_func);
- if (stream == NULL) {
- perror("fopencookie");
- exit(EXIT_FAILURE);
- }
-\&
- /* Write command\-line arguments to our file. */
-\&
- for (size_t j = 1; j < argc; j++)
- if (fputs(argv[j], stream) == EOF) {
- perror("fputs");
- exit(EXIT_FAILURE);
- }
-\&
- /* Read two bytes out of every five, until EOF. */
-\&
- for (long p = 0; ; p += 5) {
- if (fseek(stream, p, SEEK_SET) == \-1) {
- perror("fseek");
- exit(EXIT_FAILURE);
- }
- nread = fread(buf, 1, 2, stream);
- if (nread == 0) {
- if (ferror(stream) != 0) {
- fprintf(stderr, "fread failed\en");
- exit(EXIT_FAILURE);
- }
- printf("Reached end of file\en");
- break;
- }
-\&
- printf("/%.*s/\en", (int) nread, buf);
- }
-\&
- free(mycookie.buf);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR fclose (3),
-.BR fmemopen (3),
-.BR fopen (3),
-.BR fseek (3)
diff --git a/man3/forkpty.3 b/man3/forkpty.3
deleted file mode 100644
index fb4952d52..000000000
--- a/man3/forkpty.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/openpty.3
diff --git a/man3/fpathconf.3 b/man3/fpathconf.3
deleted file mode 100644
index a36f07930..000000000
--- a/man3/fpathconf.3
+++ /dev/null
@@ -1,276 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\" and Copyright (C) 2017 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Wed Jul 28 11:12:26 1993 by Rik Faith (faith@cs.unc.edu)
-.\"
-.\" FIXME Probably all of the following should be documented:
-.\" _PC_SYNC_IO,
-.\" _PC_ASYNC_IO,
-.\" _PC_PRIO_IO,
-.\" _PC_SOCK_MAXBUF,
-.\" _PC_FILESIZEBITS,
-.\" _PC_REC_INCR_XFER_SIZE,
-.\" _PC_REC_MAX_XFER_SIZE,
-.\" _PC_REC_MIN_XFER_SIZE,
-.\" _PC_REC_XFER_ALIGN,
-.\" _PC_ALLOC_SIZE_MIN,
-.\" _PC_SYMLINK_MAX,
-.\" _PC_2_SYMLINKS
-.\"
-.TH fpathconf 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fpathconf, pathconf \- get configuration values for files
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "long fpathconf(int " fd ", int " name );
-.BI "long pathconf(const char *" path ", int " name );
-.fi
-.SH DESCRIPTION
-.BR fpathconf ()
-gets a value for the configuration option
-.I name
-for the open file descriptor
-.IR fd .
-.PP
-.BR pathconf ()
-gets a value for configuration option
-.I name
-for the filename
-.IR path .
-.PP
-The corresponding macros defined in
-.I <unistd.h>
-are minimum values; if an application wants to take advantage of values
-which may change, a call to
-.BR fpathconf ()
-or
-.BR pathconf ()
-can be made, which may yield more liberal results.
-.PP
-Setting
-.I name
-equal to one of the following constants returns the following
-configuration options:
-.TP
-.B _PC_LINK_MAX
-The maximum number of links to the file.
-If
-.I fd
-or
-.I path
-refer to a directory, then the value applies to the whole directory.
-The corresponding macro is
-.BR _POSIX_LINK_MAX .
-.TP
-.B _PC_MAX_CANON
-The maximum length of a formatted input line, where
-.I fd
-or
-.I path
-must refer to a terminal.
-The corresponding macro is
-.BR _POSIX_MAX_CANON .
-.TP
-.B _PC_MAX_INPUT
-The maximum length of an input line, where
-.I fd
-or
-.I path
-must refer to a terminal.
-The corresponding macro is
-.BR _POSIX_MAX_INPUT .
-.TP
-.B _PC_NAME_MAX
-The maximum length of a filename in the directory
-.I path
-or
-.I fd
-that the process is allowed to create.
-The corresponding macro is
-.BR _POSIX_NAME_MAX .
-.TP
-.B _PC_PATH_MAX
-The maximum length of a relative pathname when
-.I path
-or
-.I fd
-is the current working directory.
-The corresponding macro is
-.BR _POSIX_PATH_MAX .
-.TP
-.B _PC_PIPE_BUF
-The maximum number of bytes that can be written atomically to a pipe of FIFO.
-For
-.BR fpathconf (),
-.I fd
-should refer to a pipe or FIFO.
-For
-.BR fpathconf (),
-.I path
-should refer to a FIFO or a directory; in the latter case,
-the returned value corresponds to FIFOs created in that directory.
-The corresponding macro is
-.BR _POSIX_PIPE_BUF .
-.TP
-.B _PC_CHOWN_RESTRICTED
-This returns a positive value if the use of
-.BR chown (2)
-and
-.BR fchown (2)
-for changing a file's user ID is restricted to a process
-with appropriate privileges,
-and changing a file's group ID to a value other than the process's
-effective group ID or one of its supplementary group IDs
-is restricted to a process with appropriate privileges.
-According to POSIX.1,
-this variable shall always be defined with a value other than \-1.
-The corresponding macro is
-.BR _POSIX_CHOWN_RESTRICTED .
-.IP
-If
-.I fd
-or
-.I path
-refers to a directory,
-then the return value applies to all files in that directory.
-.TP
-.B _PC_NO_TRUNC
-This returns nonzero if accessing filenames longer than
-.B _POSIX_NAME_MAX
-generates an error.
-The corresponding macro is
-.BR _POSIX_NO_TRUNC .
-.TP
-.B _PC_VDISABLE
-This returns nonzero if special character processing can be disabled, where
-.I fd
-or
-.I path
-must refer to a terminal.
-.SH RETURN VALUE
-The return value of these functions is one of the following:
-.IP \[bu] 3
-On error, \-1 is returned and
-.I errno
-is set to indicate the error
-(for example,
-.BR EINVAL ,
-indicating that
-.I name
-is invalid).
-.IP \[bu]
-If
-.I name
-corresponds to a maximum or minimum limit, and that limit is indeterminate,
-\-1 is returned and
-.I errno
-is not changed.
-(To distinguish an indeterminate limit from an error, set
-.I errno
-to zero before the call, and then check whether
-.I errno
-is nonzero when \-1 is returned.)
-.IP \[bu]
-If
-.I name
-corresponds to an option,
-a positive value is returned if the option is supported,
-and \-1 is returned if the option is not supported.
-.IP \[bu]
-Otherwise,
-the current value of the option or limit is returned.
-This value will not be more restrictive than
-the corresponding value that was described to the application in
-.I <unistd.h>
-or
-.I <limits.h>
-when the application was compiled.
-.SH ERRORS
-.TP
-.B EACCES
-.RB ( pathconf ())
-Search permission is denied for one of the directories in the path prefix of
-.IR path .
-.TP
-.B EBADF
-.RB ( fpathconf ())
-.I fd
-is not a valid file descriptor.
-.TP
-.B EINVAL
-.I name
-is invalid.
-.TP
-.B EINVAL
-The implementation does not support an association of
-.I name
-with the specified file.
-.TP
-.B ELOOP
-.RB ( pathconf ())
-Too many symbolic links were encountered while resolving
-.IR path .
-.TP
-.B ENAMETOOLONG
-.RB ( pathconf ())
-.I path
-is too long.
-.TP
-.B ENOENT
-.RB ( pathconf ())
-A component of
-.I path
-does not exist, or
-.I path
-is an empty string.
-.TP
-.B ENOTDIR
-.RB ( pathconf ())
-A component used as a directory in
-.I path
-is not in fact a directory.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fpathconf (),
-.BR pathconf ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-Files with name lengths longer than the value returned for
-.I name
-equal to
-.B _PC_NAME_MAX
-may exist in the given directory.
-.PP
-Some returned values may be huge; they are not suitable for allocating
-memory.
-.SH SEE ALSO
-.BR getconf (1),
-.BR open (2),
-.BR statfs (2),
-.BR confstr (3),
-.BR sysconf (3)
diff --git a/man3/fpclassify.3 b/man3/fpclassify.3
deleted file mode 100644
index 0dd6ead84..000000000
--- a/man3/fpclassify.3
+++ /dev/null
@@ -1,148 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" This was done with the help of the glibc manual.
-.\"
-.\" 2004-10-31, aeb, corrected
-.TH fpclassify 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fpclassify, isfinite, isnormal, isnan, isinf \- floating-point
-classification macros
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "int fpclassify(" x );
-.BI "int isfinite(" x );
-.BI "int isnormal(" x );
-.BI "int isnan(" x );
-.BI "int isinf(" x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.\" I haven't fully grokked the source to determine the FTM requirements;
-.\" in part, the following has been tested by experiment.
-.BR fpclassify (),
-.BR isfinite (),
-.BR isnormal ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.PP
-.BR isnan ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || _XOPEN_SOURCE
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR isinf ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-Floating point numbers can have special values, such as
-infinite or NaN.
-With the macro
-.BI fpclassify( x )
-you can find out what type
-.I x
-is.
-The macro takes any floating-point expression as argument.
-The result is one of the following values:
-.TP 14
-.B FP_NAN
-.I x
-is "Not a Number".
-.TP
-.B FP_INFINITE
-.I x
-is either positive infinity or negative infinity.
-.TP
-.B FP_ZERO
-.I x
-is zero.
-.TP
-.B FP_SUBNORMAL
-.I x
-is too small to be represented in normalized format.
-.TP
-.B FP_NORMAL
-if nothing of the above is correct then it must be a
-normal floating-point number.
-.PP
-The other macros provide a short answer to some standard questions.
-.TP 14
-.BI isfinite( x )
-returns a nonzero value if
-.br
-(fpclassify(x) != FP_NAN && fpclassify(x) != FP_INFINITE)
-.TP
-.BI isnormal( x )
-returns a nonzero value if
-(fpclassify(x) == FP_NORMAL)
-.TP
-.BI isnan( x )
-returns a nonzero value if
-(fpclassify(x) == FP_NAN)
-.TP
-.BI isinf( x )
-returns 1 if
-.I x
-is positive infinity, and \-1 if
-.I x
-is negative infinity.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fpclassify (),
-.BR isfinite (),
-.BR isnormal (),
-.BR isnan (),
-.BR isinf ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.PP
-In glibc 2.01 and earlier,
-.BR isinf ()
-returns a nonzero value (actually: 1) if
-.I x
-is positive infinity or negative infinity.
-(This is all that C99 requires.)
-.SH NOTES
-For
-.BR isinf (),
-the standards merely say that the return value is nonzero
-if and only if the argument has an infinite value.
-.SH SEE ALSO
-.BR finite (3),
-.BR INFINITY (3),
-.BR isgreater (3),
-.BR signbit (3)
diff --git a/man3/fprintf.3 b/man3/fprintf.3
deleted file mode 100644
index 975530d90..000000000
--- a/man3/fprintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/printf.3
diff --git a/man3/fpurge.3 b/man3/fpurge.3
deleted file mode 100644
index c84d9c5f2..000000000
--- a/man3/fpurge.3
+++ /dev/null
@@ -1,86 +0,0 @@
-'\" t
-.\" Copyright (C) 2001 Andries Brouwer <aeb@cwi.nl>.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH fpurge 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fpurge, __fpurge \- purge a stream
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-/* unsupported */
-.B #include <stdio.h>
-.PP
-.BI "int fpurge(FILE *" stream );
-.PP
-/* supported */
-.B #include <stdio.h>
-.B #include <stdio_ext.h>
-.PP
-.BI "void __fpurge(FILE *" stream );
-.fi
-.SH DESCRIPTION
-The function
-.BR fpurge ()
-clears the buffers of the given stream.
-For output streams this discards any unwritten output.
-For input streams this discards any input read from the underlying object
-but not yet obtained via
-.BR getc (3);
-this includes any text pushed back via
-.BR ungetc (3).
-See also
-.BR fflush (3).
-.PP
-The function
-.BR __fpurge ()
-does precisely the same, but without returning a value.
-.SH RETURN VALUE
-Upon successful completion
-.BR fpurge ()
-returns 0.
-On error, it returns \-1 and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I stream
-is not an open stream.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR __fpurge ()
-T} Thread safety MT-Safe race:stream
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-.TP
-.BR fpurge ()
-4.4BSD.
-Not available under Linux.
-.TP
-.BR __fpurge ()
-Solaris, glibc 2.1.95.
-.SH NOTES
-Usually it is a mistake to want to discard input buffers.
-.SH SEE ALSO
-.\" .BR fclean (3),
-.BR fflush (3),
-.BR setbuf (3),
-.BR stdio_ext (3)
diff --git a/man3/fputc.3 b/man3/fputc.3
deleted file mode 100644
index a7c3b57fc..000000000
--- a/man3/fputc.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/puts.3
diff --git a/man3/fputc_unlocked.3 b/man3/fputc_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/fputc_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/fputs.3 b/man3/fputs.3
deleted file mode 100644
index a7c3b57fc..000000000
--- a/man3/fputs.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/puts.3
diff --git a/man3/fputs_unlocked.3 b/man3/fputs_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/fputs_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/fputwc.3 b/man3/fputwc.3
deleted file mode 100644
index 07d0c390f..000000000
--- a/man3/fputwc.3
+++ /dev/null
@@ -1,107 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH fputwc 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fputwc, putwc \- write a wide character to a FILE stream
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.B #include <wchar.h>
-.PP
-.BI "wint_t fputwc(wchar_t " wc ", FILE *" stream );
-.BI "wint_t putwc(wchar_t " wc ", FILE *" stream );
-.fi
-.SH DESCRIPTION
-The
-.BR fputwc ()
-function is the wide-character
-equivalent of the
-.BR fputc (3)
-function.
-It writes the wide character \fIwc\fP to \fIstream\fP.
-If
-\fIferror(stream)\fP becomes true, it returns
-.BR WEOF .
-If a wide-character conversion error occurs,
-it sets \fIerrno\fP to \fBEILSEQ\fP and returns
-.BR WEOF .
-Otherwise, it returns \fIwc\fP.
-.PP
-The
-.BR putwc ()
-function or macro functions identically to
-.BR fputwc ().
-It may be implemented as a macro, and may evaluate its argument
-more than once.
-There is no reason ever to use it.
-.PP
-For nonlocking counterparts, see
-.BR unlocked_stdio (3).
-.SH RETURN VALUE
-On success,
-.BR fputwc ()
-function returns
-.IR wc .
-Otherwise,
-.B WEOF
-is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-Apart from the usual ones, there is
-.TP
-.B EILSEQ
-Conversion of \fIwc\fP to the stream's encoding fails.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fputwc (),
-.BR putwc ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.SH NOTES
-The behavior of
-.BR fputwc ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.PP
-In the absence of additional information passed to the
-.BR fopen (3)
-call, it is
-reasonable to expect that
-.BR fputwc ()
-will actually write the multibyte
-sequence corresponding to the wide character \fIwc\fP.
-.SH SEE ALSO
-.BR fgetwc (3),
-.BR fputws (3),
-.BR unlocked_stdio (3)
diff --git a/man3/fputwc_unlocked.3 b/man3/fputwc_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/fputwc_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/fputws.3 b/man3/fputws.3
deleted file mode 100644
index cad8e11fc..000000000
--- a/man3/fputws.3
+++ /dev/null
@@ -1,81 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH fputws 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fputws \- write a wide-character string to a FILE stream
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "int fputws(const wchar_t *restrict " ws ", FILE *restrict " stream );
-.fi
-.SH DESCRIPTION
-The
-.BR fputws ()
-function is the wide-character equivalent of
-the
-.BR fputs (3)
-function.
-It writes the wide-character string starting at \fIws\fP,
-up to but not including the terminating null wide character (L\[aq]\e0\[aq]),
-to \fIstream\fP.
-.PP
-For a nonlocking counterpart, see
-.BR unlocked_stdio (3).
-.SH RETURN VALUE
-The
-.BR fputws ()
-function returns a
-nonnegative integer if the operation was
-successful, or \-1 to indicate an error.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fputws ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR fputws ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.PP
-In the absence of additional information passed to the
-.BR fopen (3)
-call, it is
-reasonable to expect that
-.BR fputws ()
-will actually write the multibyte
-string corresponding to the wide-character string \fIws\fP.
-.SH SEE ALSO
-.BR fputwc (3),
-.BR unlocked_stdio (3)
diff --git a/man3/fputws_unlocked.3 b/man3/fputws_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/fputws_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/fread.3 b/man3/fread.3
deleted file mode 100644
index 2668fdc57..000000000
--- a/man3/fread.3
+++ /dev/null
@@ -1,167 +0,0 @@
-'\" t
-.\" Copyright (c) 1990, 1991 The Regents of the University of California.
-.\" and Copyright (c) 2020 Arkadiusz Drabczyk <arkadiusz@drabczyk.org>
-.\" All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" Chris Torek and the American National Standards Committee X3,
-.\" on Information Processing Systems.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)fread.3 6.6 (Berkeley) 6/29/91
-.\"
-.\" Converted for Linux, Mon Nov 29 15:37:33 1993, faith@cs.unc.edu
-.\" Sun Feb 19 21:26:54 1995 by faith, return values
-.\" Modified Thu Apr 20 20:43:53 1995 by Jim Van Zandt <jrv@vanzandt.mv.com>
-.\" Modified Fri May 17 10:21:51 1996 by Martin Schulze <joey@infodrom.north.de>
-.\"
-.TH fread 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fread, fwrite \- binary stream input/output
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "size_t fread(void " ptr "[restrict ." size " * ." nmemb ],
-.BI " size_t " size ", size_t " nmemb ,
-.BI " FILE *restrict " stream );
-.BI "size_t fwrite(const void " ptr "[restrict ." size " * ." nmemb ],
-.BI " size_t " size ", size_t " nmemb ,
-.BI " FILE *restrict " stream );
-.fi
-.SH DESCRIPTION
-The function
-.BR fread ()
-reads
-.I nmemb
-items of data, each
-.I size
-bytes long, from the stream pointed to by
-.IR stream ,
-storing them at the location given by
-.IR ptr .
-.PP
-The function
-.BR fwrite ()
-writes
-.I nmemb
-items of data, each
-.I size
-bytes long, to the stream pointed to by
-.IR stream ,
-obtaining them from the location given by
-.IR ptr .
-.PP
-For nonlocking counterparts, see
-.BR unlocked_stdio (3).
-.SH RETURN VALUE
-On success,
-.BR fread ()
-and
-.BR fwrite ()
-return the number of items read or written.
-This number equals the number of bytes transferred only when
-.I size
-is 1.
-If an error occurs, or the end of the file is reached,
-the return value is a short item count (or zero).
-.PP
-The file position indicator for the stream is advanced by the number
-of bytes successfully read or written.
-.PP
-.BR fread ()
-does not distinguish between end-of-file and error, and callers must use
-.BR feof (3)
-and
-.BR ferror (3)
-to determine which occurred.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fread (),
-.BR fwrite ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89.
-.SH EXAMPLES
-The program below demonstrates the use of
-.BR fread ()
-by parsing /bin/sh ELF executable in binary mode and printing its
-magic and class:
-.PP
-.in +4n
-.EX
-$ \fB./a.out\fP
-ELF magic: 0x7f454c46
-Class: 0x02
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (fread.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-\&
-#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
-\&
-int
-main(void)
-{
- FILE *fp;
- size_t ret;
- unsigned char buffer[4];
-\&
- fp = fopen("/bin/sh", "rb");
- if (!fp) {
- perror("fopen");
- return EXIT_FAILURE;
- }
-\&
- ret = fread(buffer, sizeof(*buffer), ARRAY_SIZE(buffer), fp);
- if (ret != ARRAY_SIZE(buffer)) {
- fprintf(stderr, "fread() failed: %zu\en", ret);
- exit(EXIT_FAILURE);
- }
-\&
- printf("ELF magic: %#04x%02x%02x%02x\en", buffer[0], buffer[1],
- buffer[2], buffer[3]);
-\&
- ret = fread(buffer, 1, 1, fp);
- if (ret != 1) {
- fprintf(stderr, "fread() failed: %zu\en", ret);
- exit(EXIT_FAILURE);
- }
-\&
- printf("Class: %#04x\en", buffer[0]);
-\&
- fclose(fp);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR read (2),
-.BR write (2),
-.BR feof (3),
-.BR ferror (3),
-.BR unlocked_stdio (3)
diff --git a/man3/fread_unlocked.3 b/man3/fread_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/fread_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/free.3 b/man3/free.3
deleted file mode 100644
index a4b9d4455..000000000
--- a/man3/free.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/malloc.3
diff --git a/man3/freeaddrinfo.3 b/man3/freeaddrinfo.3
deleted file mode 100644
index 17f7236a7..000000000
--- a/man3/freeaddrinfo.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getaddrinfo.3
diff --git a/man3/freehostent.3 b/man3/freehostent.3
deleted file mode 100644
index 82e01df46..000000000
--- a/man3/freehostent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getipnodebyname.3
diff --git a/man3/freeifaddrs.3 b/man3/freeifaddrs.3
deleted file mode 100644
index 38f977da6..000000000
--- a/man3/freeifaddrs.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getifaddrs.3
diff --git a/man3/freelocale.3 b/man3/freelocale.3
deleted file mode 100644
index a4246c555..000000000
--- a/man3/freelocale.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/newlocale.3
diff --git a/man3/freopen.3 b/man3/freopen.3
deleted file mode 100644
index 9a4012491..000000000
--- a/man3/freopen.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fopen.3
diff --git a/man3/frexp.3 b/man3/frexp.3
deleted file mode 100644
index 9576b0306..000000000
--- a/man3/frexp.3
+++ /dev/null
@@ -1,145 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH frexp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-frexp, frexpf, frexpl \- convert floating-point number to fractional
-and integral components
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double frexp(double " x ", int *" exp );
-.BI "float frexpf(float " x ", int *" exp );
-.BI "long double frexpl(long double " x ", int *" exp );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR frexpf (),
-.BR frexpl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions are used to split the number
-.I x
-into a
-normalized fraction and an exponent which is stored in
-.IR exp .
-.SH RETURN VALUE
-These functions return the normalized fraction.
-If the argument
-.I x
-is not zero,
-the normalized fraction is
-.I x
-times a power of two,
-and its absolute value is always in the range 1/2 (inclusive) to
-1 (exclusive), that is, [0.5,1).
-.PP
-If
-.I x
-is zero, then the normalized fraction is
-zero and zero is stored in
-.IR exp .
-.PP
-If
-.I x
-is a NaN,
-a NaN is returned, and the value of
-.I *exp
-is unspecified.
-.PP
-If
-.I x
-is positive infinity (negative infinity),
-positive infinity (negative infinity) is returned, and the value of
-.I *exp
-is unspecified.
-.SH ERRORS
-No errors occur.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR frexp (),
-.BR frexpf (),
-.BR frexpl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH EXAMPLES
-The program below produces results such as the following:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out 2560"
-frexp(2560, &e) = 0.625: 0.625 * 2\[ha]12 = 2560
-.RB "$" " ./a.out \-4"
-frexp(\-4, &e) = \-0.5: \-0.5 * 2\[ha]3 = \-4
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (frexp.c)
-.EX
-#include <float.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(int argc, char *argv[])
-{
- double x, r;
- int exp;
-\&
- x = strtod(argv[1], NULL);
- r = frexp(x, &exp);
-\&
- printf("frexp(%g, &e) = %g: %g * %d\[ha]%d = %g\en",
- x, r, r, FLT_RADIX, exp, x);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR ldexp (3),
-.BR modf (3)
diff --git a/man3/frexpf.3 b/man3/frexpf.3
deleted file mode 100644
index 980426f3d..000000000
--- a/man3/frexpf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/frexp.3
diff --git a/man3/frexpl.3 b/man3/frexpl.3
deleted file mode 100644
index 980426f3d..000000000
--- a/man3/frexpl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/frexp.3
diff --git a/man3/fscanf.3 b/man3/fscanf.3
deleted file mode 100644
index 9fd424bb2..000000000
--- a/man3/fscanf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/scanf.3
diff --git a/man3/fseek.3 b/man3/fseek.3
deleted file mode 100644
index 2a32c7df1..000000000
--- a/man3/fseek.3
+++ /dev/null
@@ -1,180 +0,0 @@
-'\" t
-.\" Copyright (c) 1990, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" Chris Torek and the American National Standards Committee X3,
-.\" on Information Processing Systems.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)fseek.3 6.11 (Berkeley) 6/29/91
-.\"
-.\" Converted for Linux, Mon Nov 29 15:22:01 1993, faith@cs.unc.edu
-.\"
-.TH fseek 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fgetpos, fseek, fsetpos, ftell, rewind \- reposition a stream
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "int fseek(FILE *" stream ", long " offset ", int " whence );
-.BI "long ftell(FILE *" stream );
-.PP
-.BI "void rewind(FILE *" stream );
-.PP
-.BI "int fgetpos(FILE *restrict " stream ", fpos_t *restrict " pos );
-.BI "int fsetpos(FILE *" stream ", const fpos_t *" pos );
-.fi
-.SH DESCRIPTION
-The
-.BR fseek ()
-function sets the file position indicator for the stream pointed to by
-.IR stream .
-The new position, measured in bytes, is obtained by adding
-.I offset
-bytes to the position specified by
-.IR whence .
-If
-.I whence
-is set to
-.BR SEEK_SET ,
-.BR SEEK_CUR ,
-or
-.BR SEEK_END ,
-the offset is relative to the start of the file, the current position
-indicator, or end-of-file, respectively.
-A successful call to the
-.BR fseek ()
-function clears the end-of-file indicator for the stream and undoes
-any effects of the
-.BR ungetc (3)
-function on the same stream.
-.PP
-The
-.BR ftell ()
-function obtains the current value of the file position indicator for the
-stream pointed to by
-.IR stream .
-.PP
-The
-.BR rewind ()
-function sets the file position indicator for the stream pointed to by
-.I stream
-to the beginning of the file.
-It is equivalent to:
-.PP
-.RS
-(void) fseek(stream, 0L, SEEK_SET)
-.RE
-.PP
-except that the error indicator for the stream is also cleared (see
-.BR clearerr (3)).
-.PP
-The
-.BR fgetpos ()
-and
-.BR fsetpos ()
-functions are alternate interfaces equivalent to
-.BR ftell ()
-and
-.BR fseek ()
-(with
-.I whence
-set to
-.BR SEEK_SET ),
-setting and storing the current value of the file offset into or from the
-object referenced by
-.IR pos .
-On some non-UNIX systems, an
-.I fpos_t
-object may be a complex object and these routines may be the only way to
-portably reposition a text stream.
-.PP
-If the stream refers to a regular file
-and the resulting stream offset is beyond the size of the file,
-subsequent writes will extend the file with a hole, up to the offset,
-before committing any data.
-See
-.BR lseek (2)
-for details on file seeking semantics.
-.SH RETURN VALUE
-The
-.BR rewind ()
-function returns no value.
-Upon successful completion,
-.BR fgetpos (),
-.BR fseek (),
-.BR fsetpos ()
-return 0,
-and
-.BR ftell ()
-returns the current offset.
-Otherwise, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-The
-.I whence
-argument to
-.BR fseek ()
-was not
-.BR SEEK_SET ,
-.BR SEEK_END ,
-or
-.BR SEEK_CUR .
-Or: the resulting file offset would be negative.
-.TP
-.B ESPIPE
-The file descriptor underlying
-.I stream
-is not seekable (e.g., it refers to a pipe, FIFO, or socket).
-.PP
-The functions
-.BR fgetpos (),
-.BR fseek (),
-.BR fsetpos (),
-and
-.BR ftell ()
-may also fail and set
-.I errno
-for any of the errors specified for the routines
-.BR fflush (3),
-.BR fstat (2),
-.BR lseek (2),
-and
-.BR malloc (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fseek (),
-.BR ftell (),
-.BR rewind (),
-.BR fgetpos (),
-.BR fsetpos ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89.
-.SH SEE ALSO
-.BR lseek (2),
-.BR fseeko (3)
diff --git a/man3/fseeko.3 b/man3/fseeko.3
deleted file mode 100644
index f071f0e1c..000000000
--- a/man3/fseeko.3
+++ /dev/null
@@ -1,105 +0,0 @@
-'\" t
-.\" Copyright 2001 Andries Brouwer <aeb@cwi.nl>.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH fseeko 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fseeko, ftello \- seek to or report file position
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "int fseeko(FILE *" stream ", off_t " offset ", int " whence );
-.BI "off_t ftello(FILE *" stream );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR fseeko (),
-.BR ftello ():
-.nf
- _FILE_OFFSET_BITS == 64 || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-The
-.BR fseeko ()
-and
-.BR ftello ()
-functions are identical to
-.BR fseek (3)
-and
-.BR ftell (3)
-(see
-.BR fseek (3)),
-respectively, except that the
-.I offset
-argument of
-.BR fseeko ()
-and the return value of
-.BR ftello ()
-is of type
-.I off_t
-instead of
-.IR long .
-.PP
-On some architectures, both
-.I off_t
-and
-.I long
-are 32-bit types, but defining
-.B _FILE_OFFSET_BITS
-with the value 64 (before including
-.I any
-header files)
-will turn
-.I off_t
-into a 64-bit type.
-.SH RETURN VALUE
-On successful completion,
-.BR fseeko ()
-returns 0, while
-.BR ftello ()
-returns the current offset.
-Otherwise, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-See the ERRORS in
-.BR fseek (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fseeko (),
-.BR ftello ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001, SUSv2.
-.SH NOTES
-The declarations of these functions can also be obtained by defining
-the obsolete
-.B _LARGEFILE_SOURCE
-feature test macro.
-.SH SEE ALSO
-.BR fseek (3)
diff --git a/man3/fsetpos.3 b/man3/fsetpos.3
deleted file mode 100644
index a1487b5a8..000000000
--- a/man3/fsetpos.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fseek.3
diff --git a/man3/fstatvfs.3 b/man3/fstatvfs.3
deleted file mode 100644
index adec9ddea..000000000
--- a/man3/fstatvfs.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/statvfs.3
diff --git a/man3/ftell.3 b/man3/ftell.3
deleted file mode 100644
index a1487b5a8..000000000
--- a/man3/ftell.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fseek.3
diff --git a/man3/ftello.3 b/man3/ftello.3
deleted file mode 100644
index d5628f46d..000000000
--- a/man3/ftello.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fseeko.3
diff --git a/man3/ftime.3 b/man3/ftime.3
deleted file mode 100644
index a54eb8a82..000000000
--- a/man3/ftime.3
+++ /dev/null
@@ -1,108 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 Michael Haardt
-.\" (michael@moria.de)
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sat Jul 24 14:23:14 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Sun Oct 18 17:31:43 1998 by Andries Brouwer (aeb@cwi.nl)
-.\" 2008-06-23, mtk, minor rewrites, added some details
-.\"
-.TH ftime 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ftime \- return date and time
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B "#include <sys/timeb.h>"
-.PP
-.BI "int ftime(struct timeb *" tp );
-.fi
-.SH DESCRIPTION
-.BR NOTE :
-This function is no longer provided by the GNU C library.
-Use
-.BR clock_gettime (2)
-instead.
-.PP
-This function returns the current time as seconds and milliseconds
-since the Epoch, 1970-01-01 00:00:00 +0000 (UTC).
-The time is returned in
-.IR tp ,
-which is declared as follows:
-.PP
-.in +4n
-.EX
-struct timeb {
- time_t time;
- unsigned short millitm;
- short timezone;
- short dstflag;
-};
-.EE
-.in
-.PP
-Here \fItime\fP is the number of seconds since the Epoch,
-and \fImillitm\fP is the number of milliseconds since \fItime\fP
-seconds since the Epoch.
-The \fItimezone\fP field is the local timezone measured in minutes
-of time west of Greenwich (with a negative value indicating minutes
-east of Greenwich).
-The \fIdstflag\fP field
-is a flag that, if nonzero, indicates that Daylight Saving time
-applies locally during the appropriate part of the year.
-.PP
-POSIX.1-2001 says that the contents of the \fItimezone\fP and \fIdstflag\fP
-fields are unspecified; avoid relying on them.
-.SH RETURN VALUE
-This function always returns 0.
-(POSIX.1-2001 specifies, and some systems document, a \-1 error return.)
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ftime ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-Removed in glibc 2.33.
-4.2BSD, POSIX.1-2001.
-Removed in POSIX.1-2008.
-.PP
-This function is obsolete.
-Don't use it.
-If the time in seconds
-suffices,
-.BR time (2)
-can be used;
-.BR gettimeofday (2)
-gives microseconds;
-.BR clock_gettime (2)
-gives nanoseconds but is not as widely available.
-.SH BUGS
-Early glibc2 is buggy and returns 0 in the
-.I millitm
-field;
-glibc 2.1.1 is correct again.
-.\" .SH HISTORY
-.\" The
-.\" .BR ftime ()
-.\" function appeared in 4.2BSD.
-.SH SEE ALSO
-.BR gettimeofday (2),
-.BR time (2)
diff --git a/man3/ftok.3 b/man3/ftok.3
deleted file mode 100644
index ec0c0832c..000000000
--- a/man3/ftok.3
+++ /dev/null
@@ -1,113 +0,0 @@
-'\" t
-.\" Copyright 1993 Giorgio Ciucci (giorgio@crcc.it)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 2001-11-28, by Michael Kerrisk, <mtk.manpages@gmail.com>
-.\" Changed data type of proj_id; minor fixes
-.\" aeb: further fixes; added notes.
-.\"
-.TH ftok 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ftok \- convert a pathname and a project identifier to a System V IPC key
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/ipc.h>
-.fi
-.PP
-.BI "key_t ftok(const char *" pathname ", int " proj_id );
-.SH DESCRIPTION
-The
-.BR ftok ()
-function uses the identity of the file named by the given
-.I pathname
-(which must refer to an existing, accessible file)
-and the least significant 8 bits of
-.I proj_id
-(which must be nonzero) to generate a
-.I key_t
-type System V IPC key, suitable for use with
-.BR msgget (2),
-.BR semget (2),
-or
-.BR shmget (2).
-.PP
-The resulting value is the same for all pathnames that
-name the same file, when the same value of
-.I proj_id
-is used.
-The value returned should be different when the
-(simultaneously existing) files or the project IDs differ.
-.SH RETURN VALUE
-On success, the generated
-.I key_t
-value is returned.
-On failure \-1 is returned, with
-.I errno
-indicating the error as for the
-.BR stat (2)
-system call.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ftok ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-On some ancient systems, the prototype was:
-.PP
-.in +4n
-.EX
-.BI "key_t ftok(char *" pathname ", char " proj_id );
-.EE
-.in
-.PP
-Today,
-.I proj_id
-is an
-.IR int ,
-but still only 8 bits are used.
-Typical usage has an ASCII character
-.IR proj_id ,
-that is why the behavior is said to be undefined when
-.I proj_id
-is zero.
-.PP
-Of course, no guarantee can be given that the resulting
-.I key_t
-is unique.
-Typically, a best-effort attempt combines the given
-.I proj_id
-byte, the lower 16 bits of the inode number, and the
-lower 8 bits of the device number into a 32-bit result.
-Collisions may easily happen, for example between files on
-.I /dev/hda1
-and files on
-.IR /dev/sda1 .
-.SH EXAMPLES
-See
-.BR semget (2).
-.SH SEE ALSO
-.BR msgget (2),
-.BR semget (2),
-.BR shmget (2),
-.BR stat (2),
-.BR sysvipc (7)
diff --git a/man3/ftrylockfile.3 b/man3/ftrylockfile.3
deleted file mode 100644
index b33c2ee65..000000000
--- a/man3/ftrylockfile.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/flockfile.3
diff --git a/man3/fts.3 b/man3/fts.3
deleted file mode 100644
index 523ad6f9e..000000000
--- a/man3/fts.3
+++ /dev/null
@@ -1,823 +0,0 @@
-'\" t
-.\" $NetBSD: fts.3,v 1.13.2.1 1997/11/14 02:09:32 mrg Exp $
-.\"
-.\" Copyright (c) 1989, 1991, 1993, 1994
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)fts.3 8.5 (Berkeley) 4/16/94
-.\"
-.\" 2007-12-08, mtk, Converted from mdoc to man macros
-.\"
-.TH fts 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fts, fts_open, fts_read, fts_children, fts_set, fts_close \- \
-traverse a file hierarchy
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.B #include <sys/stat.h>
-.B #include <fts.h>
-.PP
-.BI "FTS *fts_open(char *const *" path_argv ", int " options ,
-.BI " int (*_Nullable " compar ")(const FTSENT **, const FTSENT **));"
-.PP
-.BI "FTSENT *fts_read(FTS *" ftsp );
-.PP
-.BI "FTSENT *fts_children(FTS *" ftsp ", int " instr );
-.PP
-.BI "int fts_set(FTS *" ftsp ", FTSENT *" f ", int " instr );
-.PP
-.BI "int fts_close(FTS *" ftsp );
-.fi
-.SH DESCRIPTION
-The
-fts functions are provided for traversing
-file hierarchies.
-A simple overview is that the
-.BR fts_open ()
-function returns a "handle" (of type
-.IR "FTS\ *" )
-that refers to a file hierarchy "stream".
-This handle is then supplied to the other
-fts functions.
-The function
-.BR fts_read ()
-returns a pointer to a structure describing one of the files in the file
-hierarchy.
-The function
-.BR fts_children ()
-returns a pointer to a linked list of structures, each of which describes
-one of the files contained in a directory in the hierarchy.
-.PP
-In general, directories are visited two distinguishable times; in preorder
-(before any of their descendants are visited) and in postorder (after all
-of their descendants have been visited).
-Files are visited once.
-It is possible to walk the hierarchy "logically" (visiting the files that
-symbolic links point to)
-or physically (visiting the symbolic links themselves),
-order the walk of the hierarchy or
-prune and/or revisit portions of the hierarchy.
-.PP
-Two structures (and associated types) are defined in the include file
-.IR <fts.h> .
-The first type is
-.IR FTS ,
-the structure that represents the file hierarchy itself.
-The second type is
-.IR FTSENT ,
-the structure that represents a file in the file
-hierarchy.
-Normally, an
-.I FTSENT
-structure is returned for every file in the file
-hierarchy.
-In this manual page, "file" and
-"FTSENT structure"
-are generally interchangeable.
-.PP
-The
-.I FTSENT
-structure contains fields describing a file.
-The structure contains at least the following fields
-(there are additional fields that
-should be considered private to the implementation):
-.PP
-.in +4n
-.EX
-typedef struct _ftsent {
- unsigned short fts_info; /* flags for FTSENT structure */
- char *fts_accpath; /* access path */
- char *fts_path; /* root path */
- short fts_pathlen; /* strlen(fts_path) +
- strlen(fts_name) */
- char *fts_name; /* filename */
- short fts_namelen; /* strlen(fts_name) */
- short fts_level; /* depth (\-1 to N) */
- int fts_errno; /* file errno */
- long fts_number; /* local numeric value */
- void *fts_pointer; /* local address value */
- struct _ftsent *fts_parent; /* parent directory */
- struct _ftsent *fts_link; /* next file structure */
- struct _ftsent *fts_cycle; /* cycle structure */
- struct stat *fts_statp; /* [l]stat(2) information */
-.\" Also:
-.\" ino_t fts_ino; /* inode (only for directories)*/
-.\" dev_t fts_dev; /* device (only for directories)*/
-.\" nlink_t fts_nlink; /* link count (only for directories)*/
-.\" u_short fts_flags; /* private flags for FTSENT structure */
-.\" u_short fts_instr; /* fts_set() instructions */
-} FTSENT;
-.EE
-.in
-.PP
-These fields are defined as follows:
-.\" .Bl -tag -width "fts_namelen"
-.TP
-.I fts_info
-One of the following values describing the returned
-.I FTSENT
-structure and
-the file it represents.
-With the exception of directories without errors
-.RB ( FTS_D ),
-all of these
-entries are terminal, that is, they will not be revisited, nor will any
-of their descendants be visited.
-.\" .Bl -tag -width FTS_DEFAULT
-.RS
-.TP
-.B FTS_D
-A directory being visited in preorder.
-.TP
-.B FTS_DC
-A directory that causes a cycle in the tree.
-(The
-.I fts_cycle
-field of the
-.I FTSENT
-structure will be filled in as well.)
-.TP
-.B FTS_DEFAULT
-Any
-.I FTSENT
-structure that represents a file type not explicitly described
-by one of the other
-.I fts_info
-values.
-.TP
-.B FTS_DNR
-A directory which cannot be read.
-This is an error return, and the
-.I fts_errno
-field will be set to indicate what caused the error.
-.TP
-.B FTS_DOT
-A file named
-"."
-or
-".."
-which was not specified as a filename to
-.BR fts_open ()
-(see
-.BR FTS_SEEDOT ).
-.TP
-.B FTS_DP
-A directory being visited in postorder.
-The contents of the
-.I FTSENT
-structure will be unchanged from when
-it was returned in preorder, that is, with the
-.I fts_info
-field set to
-.BR FTS_D .
-.TP
-.B FTS_ERR
-This is an error return, and the
-.I fts_errno
-field will be set to indicate what caused the error.
-.TP
-.B FTS_F
-A regular file.
-.TP
-.B FTS_NS
-A file for which no
-.RB [ l ] stat (2)
-information was available.
-The contents of the
-.I fts_statp
-field are undefined.
-This is an error return, and the
-.I fts_errno
-field will be set to indicate what caused the error.
-.TP
-.B FTS_NSOK
-A file for which no
-.RB [ l ] stat (2)
-information was requested.
-The contents of the
-.I fts_statp
-field are undefined.
-.TP
-.B FTS_SL
-A symbolic link.
-.TP
-.B FTS_SLNONE
-A symbolic link with a nonexistent target.
-The contents of the
-.I fts_statp
-field reference the file characteristic information for the symbolic link
-itself.
-.\" .El
-.RE
-.TP
-.I fts_accpath
-A path for accessing the file from the current directory.
-.TP
-.I fts_path
-The path for the file relative to the root of the traversal.
-This path contains the path specified to
-.BR fts_open ()
-as a prefix.
-.TP
-.I fts_pathlen
-The sum of the lengths of the strings referenced by
-.I fts_path
-and
-.IR fts_name .
-.TP
-.I fts_name
-The name of the file.
-.TP
-.I fts_namelen
-The length of the string referenced by
-.IR fts_name .
-.TP
-.I fts_level
-The depth of the traversal, numbered from \-1 to N, where this file
-was found.
-The
-.I FTSENT
-structure representing the parent of the starting point (or root)
-of the traversal is numbered \-1, and the
-.I FTSENT
-structure for the root
-itself is numbered 0.
-.TP
-.I fts_errno
-If
-.BR fts_children ()
-or
-.BR fts_read ()
-returns an
-.I FTSENT
-structure whose
-.I fts_info
-field is set to
-.BR FTS_DNR ,
-.BR FTS_ERR ,
-or
-.BR FTS_NS ,
-the
-.I fts_errno
-field contains the error number (i.e., the
-.I errno
-value)
-specifying the cause of the error.
-Otherwise, the contents of the
-.I fts_errno
-field are undefined.
-.TP
-.I fts_number
-This field is provided for the use of the application program and is
-not modified by the
-fts functions.
-It is initialized to 0.
-.TP
-.I fts_pointer
-This field is provided for the use of the application program and is
-not modified by the
-fts functions.
-It is initialized to
-NULL.
-.TP
-.I fts_parent
-A pointer to the
-.I FTSENT
-structure referencing the file in the hierarchy
-immediately above the current file, that is, the directory of which this
-file is a member.
-A parent structure for the initial entry point is provided as well,
-however, only the
-.IR fts_level ,
-.IR fts_number ,
-and
-.I fts_pointer
-fields are guaranteed to be initialized.
-.TP
-.I fts_link
-Upon return from the
-.BR fts_children ()
-function, the
-.I fts_link
-field points to the next structure in the NULL-terminated linked list of
-directory members.
-Otherwise, the contents of the
-.I fts_link
-field are undefined.
-.TP
-.I fts_cycle
-If a directory causes a cycle in the hierarchy (see
-.BR FTS_DC ),
-either because
-of a hard link between two directories, or a symbolic link pointing to a
-directory, the
-.I fts_cycle
-field of the structure will point to the
-.I FTSENT
-structure in the hierarchy that references the same file as the current
-.I FTSENT
-structure.
-Otherwise, the contents of the
-.I fts_cycle
-field are undefined.
-.TP
-.I fts_statp
-A pointer to
-.RB [ l ] stat (2)
-information for the file.
-.\" .El
-.PP
-A single buffer is used for all of the paths of all of the files in the
-file hierarchy.
-Therefore, the
-.I fts_path
-and
-.I fts_accpath
-fields are guaranteed to be
-null-terminated
-.I only
-for the file most recently returned by
-.BR fts_read ().
-To use these fields to reference any files represented by other
-.I FTSENT
-structures will require that the path buffer be modified using the
-information contained in that
-.I FTSENT
-structure's
-.I fts_pathlen
-field.
-Any such modifications should be undone before further calls to
-.BR fts_read ()
-are attempted.
-The
-.I fts_name
-field is always
-null-terminated.
-.SS fts_open()
-The
-.BR fts_open ()
-function takes a pointer to an array of character pointers naming one
-or more paths which make up a logical file hierarchy to be traversed.
-The array must be terminated by a
-null pointer.
-.PP
-There are
-a number of options, at least one of which (either
-.B FTS_LOGICAL
-or
-.BR FTS_PHYSICAL )
-must be specified.
-The options are selected by ORing
-the following values:
-.\" .Bl -tag -width "FTS_PHYSICAL"
-.TP
-.B FTS_LOGICAL
-This option causes the
-fts routines to return
-.I FTSENT
-structures for the targets of symbolic links
-instead of the symbolic links themselves.
-If this option is set, the only symbolic links for which
-.I FTSENT
-structures
-are returned to the application are those referencing nonexistent files:
-the
-.I fts_statp
-field is obtained via
-.BR stat (2)
-with a fallback to
-.BR lstat (2).
-.TP
-.B FTS_PHYSICAL
-This option causes the
-fts routines to return
-.I FTSENT
-structures for symbolic links themselves instead
-of the target files they point to.
-If this option is set,
-.I FTSENT
-structures for all symbolic links in the
-hierarchy are returned to the application:
-the
-.I fts_statp
-field is obtained via
-.BR lstat (2).
-.TP
-.B FTS_COMFOLLOW
-This option causes any symbolic link specified as a root path to be
-followed immediately, as if via
-.BR FTS_LOGICAL ,
-regardless of the primary mode.
-.TP
-.B FTS_NOCHDIR
-As a performance optimization, the
-fts functions change directories as they walk the file hierarchy.
-This has the side-effect that an application cannot rely on being
-in any particular directory during the traversal.
-This
-option turns off this optimization, and the
-fts functions will not change the current directory.
-Note that applications should not themselves change their current directory
-and try to access files unless
-.B FTS_NOCHDIR
-is specified and absolute
-pathnames were provided as arguments to
-.BR fts_open ().
-.TP
-.B FTS_NOSTAT
-By default, returned
-.I FTSENT
-structures reference file characteristic information (the
-.I fts_statp
-field) for each file visited.
-This option relaxes that requirement as a performance optimization,
-allowing the
-fts functions to set the
-.I fts_info
-field to
-.B FTS_NSOK
-and leave the contents of the
-.I fts_statp
-field undefined.
-.TP
-.B FTS_SEEDOT
-By default, unless they are specified as path arguments to
-.BR fts_open (),
-any files named
-"."
-or
-".."
-encountered in the file hierarchy are ignored.
-This option causes the
-fts routines to return
-.I FTSENT
-structures for them.
-.TP
-.B FTS_XDEV
-This option prevents
-fts from descending into directories that have a different device number
-than the file from which the descent began.
-.\" .El
-.PP
-The argument
-.BR compar ()
-specifies a user-defined function which may be used to order the traversal
-of the hierarchy.
-It
-takes two pointers to pointers to
-.I FTSENT
-structures as arguments and
-should return a negative value, zero, or a positive value to indicate
-if the file referenced by its first argument comes before, in any order
-with respect to, or after, the file referenced by its second argument.
-The
-.IR fts_accpath ,
-.IR fts_path ,
-and
-.I fts_pathlen
-fields of the
-.I FTSENT
-structures may
-.I never
-be used in this comparison.
-If the
-.I fts_info
-field is set to
-.B FTS_NS
-or
-.BR FTS_NSOK ,
-the
-.I fts_statp
-field may not either.
-If the
-.BR compar ()
-argument is
-NULL,
-the directory traversal order is in the order listed in
-.I path_argv
-for the root paths, and in the order listed in the directory for
-everything else.
-.SS fts_read()
-The
-.BR fts_read ()
-function returns a pointer to an
-.I FTSENT
-structure describing a file in
-the hierarchy.
-Directories (that are readable and do not cause cycles) are visited at
-least twice, once in preorder and once in postorder.
-All other files are visited at least once.
-(Hard links between directories that do not cause cycles or symbolic
-links to symbolic links may cause files to be visited more than once,
-or directories more than twice.)
-.PP
-If all the members of the hierarchy have been returned,
-.BR fts_read ()
-returns NULL and sets
-.I errno
-to 0.
-If an error unrelated to a file in the hierarchy occurs,
-.BR fts_read ()
-returns
-NULL
-and sets
-.I errno
-to indicate the error.
-If an error related to a returned file occurs, a pointer to an
-.I FTSENT
-structure is returned, and
-.I errno
-may or may not have been set (see
-.IR fts_info ).
-.PP
-The
-.I FTSENT
-structures returned by
-.BR fts_read ()
-may be overwritten after a call to
-.BR fts_close ()
-on the same file hierarchy stream, or, after a call to
-.BR fts_read ()
-on the same file hierarchy stream unless they represent a file of type
-directory, in which case they will not be overwritten until after a call to
-.BR fts_read ()
-after the
-.I FTSENT
-structure has been returned by the function
-.BR fts_read ()
-in postorder.
-.SS fts_children()
-The
-.BR fts_children ()
-function returns a pointer to an
-.I FTSENT
-structure describing the first entry in a NULL-terminated linked list of
-the files in the directory represented by the
-.I FTSENT
-structure most recently returned by
-.BR fts_read ().
-The list is linked through the
-.I fts_link
-field of the
-.I FTSENT
-structure, and is ordered by the user-specified comparison function, if any.
-Repeated calls to
-.BR fts_children ()
-will re-create this linked list.
-.PP
-As a special case, if
-.BR fts_read ()
-has not yet been called for a hierarchy,
-.BR fts_children ()
-will return a pointer to the files in the logical directory specified to
-.BR fts_open (),
-that is, the arguments specified to
-.BR fts_open ().
-Otherwise, if the
-.I FTSENT
-structure most recently returned by
-.BR fts_read ()
-is not a directory being visited in preorder,
-or the directory does not contain any files,
-.BR fts_children ()
-returns
-NULL
-and sets
-.I errno
-to zero.
-If an error occurs,
-.BR fts_children ()
-returns
-NULL
-and sets
-.I errno
-to indicate the error.
-.PP
-The
-.I FTSENT
-structures returned by
-.BR fts_children ()
-may be overwritten after a call to
-.BR fts_children (),
-.BR fts_close (),
-or
-.BR fts_read ()
-on the same file hierarchy stream.
-.PP
-The
-.I instr
-argument is either zero or the following value:
-.\" .Bl -tag -width FTS_NAMEONLY
-.TP
-.B FTS_NAMEONLY
-Only the names of the files are needed.
-The contents of all the fields in the returned linked list of structures
-are undefined with the exception of the
-.I fts_name
-and
-.I fts_namelen
-fields.
-.\" .El
-.SS fts_set()
-The function
-.BR fts_set ()
-allows the user application to determine further processing for the
-file
-.I f
-of the stream
-.IR ftsp .
-The
-.BR fts_set ()
-function
-returns 0 on success, and \-1 if an error occurs.
-.PP
-The
-.I instr
-argument is either 0 (meaning "do nothing") or one of the following values:
-.\" .Bl -tag -width FTS_PHYSICAL
-.TP
-.B FTS_AGAIN
-Revisit the file; any file type may be revisited.
-The next call to
-.BR fts_read ()
-will return the referenced file.
-The
-.I fts_stat
-and
-.I fts_info
-fields of the structure will be reinitialized at that time,
-but no other fields will have been changed.
-This option is meaningful only for the most recently returned
-file from
-.BR fts_read ().
-Normal use is for postorder directory visits, where it causes the
-directory to be revisited (in both preorder and postorder) as well as all
-of its descendants.
-.TP
-.B FTS_FOLLOW
-The referenced file must be a symbolic link.
-If the referenced file is the one most recently returned by
-.BR fts_read (),
-the next call to
-.BR fts_read ()
-returns the file with the
-.I fts_info
-and
-.I fts_statp
-fields reinitialized to reflect the target of the symbolic link instead
-of the symbolic link itself.
-If the file is one of those most recently returned by
-.BR fts_children (),
-the
-.I fts_info
-and
-.I fts_statp
-fields of the structure, when returned by
-.BR fts_read (),
-will reflect the target of the symbolic link instead of the symbolic link
-itself.
-In either case, if the target of the symbolic link does not exist, the
-fields of the returned structure will be unchanged and the
-.I fts_info
-field will be set to
-.BR FTS_SLNONE .
-.IP
-If the target of the link is a directory, the preorder return, followed
-by the return of all of its descendants, followed by a postorder return,
-is done.
-.TP
-.B FTS_SKIP
-No descendants of this file are visited.
-The file may be one of those most recently returned by either
-.BR fts_children ()
-or
-.BR fts_read ().
-.\" .El
-.SS fts_close()
-The
-.BR fts_close ()
-function closes the file hierarchy stream referred to by
-.I ftsp
-and restores the current directory to the directory from which
-.BR fts_open ()
-was called to open
-.IR ftsp .
-The
-.BR fts_close ()
-function
-returns 0 on success, and \-1 if an error occurs.
-.SH ERRORS
-The function
-.BR fts_open ()
-may fail and set
-.I errno
-for any of the errors specified for
-.BR open (2)
-and
-.BR malloc (3).
-.PP
-In addition,
-.BR fts_open ()
-may fail and set
-.I errno
-as follows:
-.TP
-.B ENOENT
-Any element of
-.I path_argv
-was an empty string.
-.PP
-The function
-.BR fts_close ()
-may fail and set
-.I errno
-for any of the errors specified for
-.BR chdir (2)
-and
-.BR close (2).
-.PP
-The functions
-.BR fts_read ()
-and
-.BR fts_children ()
-may fail and set
-.I errno
-for any of the errors specified for
-.BR chdir (2),
-.BR malloc (3),
-.BR opendir (3),
-.BR readdir (3),
-and
-.RB [ l ] stat (2).
-.PP
-In addition,
-.BR fts_children (),
-.BR fts_open (),
-and
-.BR fts_set ()
-may fail and set
-.I errno
-as follows:
-.TP
-.B EINVAL
-.I options
-or
-.I instr
-was invalid.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fts_open (),
-.BR fts_set (),
-.BR fts_close ()
-T} Thread safety MT-Safe
-T{
-.BR fts_read (),
-.BR fts_children ()
-T} Thread safety MT-Unsafe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-glibc 2.
-4.4BSD.
-.SH BUGS
-Before glibc 2.23,
-.\" Fixed by commit 8b7b7f75d91f7bac323dd6a370aeb3e9c5c4a7d5
-.\" https://sourceware.org/bugzilla/show_bug.cgi?id=15838
-.\" https://sourceware.org/bugzilla/show_bug.cgi?id=11460
-all of the APIs described in this man page are not safe when compiling
-a program using the LFS APIs (e.g., when compiling with
-.IR \-D_FILE_OFFSET_BITS=64 ).
-.\"
-.\" The following statement is years old, and seems no closer to
-.\" being true -- mtk
-.\" The
-.\" .I fts
-.\" utility is expected to be included in a future
-.\" POSIX.1
-.\" revision.
-.SH SEE ALSO
-.BR find (1),
-.BR chdir (2),
-.BR lstat (2),
-.BR stat (2),
-.BR ftw (3),
-.BR qsort (3)
diff --git a/man3/fts_children.3 b/man3/fts_children.3
deleted file mode 100644
index 85caf7524..000000000
--- a/man3/fts_children.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fts.3
diff --git a/man3/fts_close.3 b/man3/fts_close.3
deleted file mode 100644
index 85caf7524..000000000
--- a/man3/fts_close.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fts.3
diff --git a/man3/fts_open.3 b/man3/fts_open.3
deleted file mode 100644
index 85caf7524..000000000
--- a/man3/fts_open.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fts.3
diff --git a/man3/fts_read.3 b/man3/fts_read.3
deleted file mode 100644
index 85caf7524..000000000
--- a/man3/fts_read.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fts.3
diff --git a/man3/fts_set.3 b/man3/fts_set.3
deleted file mode 100644
index 85caf7524..000000000
--- a/man3/fts_set.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fts.3
diff --git a/man3/ftw.3 b/man3/ftw.3
deleted file mode 100644
index 68f181825..000000000
--- a/man3/ftw.3
+++ /dev/null
@@ -1,503 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de)
-.\" and copyright (c) 1999 Andries Brouwer (aeb@cwi.nl)
-.\" and copyright (c) 2006 Justin Pryzby <justinpryzby@users.sf.net>
-.\" and copyright (c) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sun Jul 25 11:02:22 1993 by Rik Faith (faith@cs.unc.edu)
-.\" 2006-05-24, Justin Pryzby <justinpryzby@users.sf.net>
-.\" document FTW_ACTIONRETVAL; include .SH RETURN VALUE;
-.\" 2006-05-24, Justin Pryzby <justinpryzby@users.sf.net> and
-.\" Michael Kerrisk <mtk.manpages@gmail.com>
-.\" reorganized and rewrote much of the page
-.\" 2006-05-24, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added an example program.
-.\"
-.TH ftw 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ftw, nftw \- file tree walk
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <ftw.h>
-.PP
-.BI "int nftw(const char *" dirpath ,
-.BI " int (*" fn ")(const char *" fpath ", const struct stat *" sb ,
-.BI " int " typeflag ", struct FTW *" ftwbuf ),
-.BI " int " nopenfd ", int " flags );
-.PP
-.B [[deprecated]]
-.BI "int ftw(const char *" dirpath ,
-.BI " int (*" fn ")(const char *" fpath ", const struct stat *" sb ,
-.BI " int " typeflag ),
-.BI " int " nopenfd );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR nftw ():
-.nf
- _XOPEN_SOURCE >= 500
-.fi
-.SH DESCRIPTION
-.BR nftw ()
-walks through the directory tree that is
-located under the directory \fIdirpath\fP,
-and calls \fIfn\fP() once for each entry in the tree.
-By default, directories are handled before the files and
-subdirectories they contain (preorder traversal).
-.PP
-To avoid using up all of the calling process's file descriptors,
-\fInopenfd\fP specifies the maximum number of directories that
-.BR nftw ()
-will hold open simultaneously.
-When
-the search depth exceeds this,
-.BR nftw ()
-will become slower because
-directories have to be closed and reopened.
-.BR nftw ()
-uses at most
-one file descriptor for each level in the directory tree.
-.PP
-For each entry found in the tree,
-.BR nftw ()
-calls
-\fIfn\fP() with four arguments:
-.IR fpath ,
-.IR sb ,
-.IR typeflag ,
-and
-.IR ftwbuf .
-.I fpath
-is the pathname of the entry,
-and is expressed either as a pathname relative to the calling process's
-current working directory at the time of the call to
-.BR nftw (),
-if
-.I dirpath
-was expressed as a relative pathname,
-or as an absolute pathname, if
-.I dirpath
-was expressed as an absolute pathname.
-.I sb
-is a pointer to the
-.I stat
-structure returned by a call to
-.BR stat (2)
-for
-.IR fpath .
-.PP
-The
-.I typeflag
-argument passed to
-.IR fn ()
-is an integer that has one of the following values:
-.TP
-.B FTW_F
-.I fpath
-is a regular file.
-.TP
-.B FTW_D
-.I fpath
-is a directory.
-.TP
-.B FTW_DNR
-.I fpath
-is a directory which can't be read.
-.TP
-.B FTW_DP
-.I fpath
-is a directory, and \fBFTW_DEPTH\fP was specified in \fIflags\fP.
-(If
-.B FTW_DEPTH
-was not specified in
-.IR flags ,
-then directories will always be visited with
-.I typeflag
-set to
-.BR FTW_D .)
-All of the files
-and subdirectories within \fIfpath\fP have been processed.
-.TP
-.B FTW_NS
-The
-.BR stat (2)
-call failed on
-.IR fpath ,
-which is not a symbolic link.
-The probable cause for this is that the caller had read permission
-on the parent directory, so that the filename
-.I fpath
-could be seen,
-but did not have execute permission,
-so that the file could not be reached for
-.BR stat (2).
-The contents of the buffer pointed to by
-.I sb
-are undefined.
-.TP
-.B FTW_SL
-.I fpath
-is a symbolic link, and \fBFTW_PHYS\fP was set in \fIflags\fP.
-.\" To obtain the definition of this constant from
-.\" .IR <ftw.h> ,
-.\" either
-.\" .B _BSD_SOURCE
-.\" must be defined, or
-.\" .BR _XOPEN_SOURCE
-.\" must be defined with a value of 500 or more.
-.TP
-.B FTW_SLN
-.I fpath
-is a symbolic link pointing to a nonexistent file.
-(This occurs only if \fBFTW_PHYS\fP is not set.)
-In this case the
-.I sb
-argument passed to
-.IR fn ()
-contains information returned by performing
-.BR lstat (2)
-on the "dangling" symbolic link.
-(But see BUGS.)
-.PP
-The fourth argument
-.RI ( ftwbuf )
-that
-.BR nftw ()
-supplies when calling
-\fIfn\fP()
-is a pointer to a structure of type \fIFTW\fP:
-.PP
-.in +4n
-.EX
-struct FTW {
- int base;
- int level;
-};
-.EE
-.in
-.PP
-.I base
-is the offset of the filename (i.e., basename component)
-in the pathname given in
-.IR fpath .
-.I level
-is the depth of
-.I fpath
-in the directory tree, relative to the root of the tree
-.RI ( dirpath ,
-which has depth 0).
-.PP
-To stop the tree walk, \fIfn\fP() returns a nonzero value; this
-value will become the return value of
-.BR nftw ().
-As long as \fIfn\fP() returns 0,
-.BR nftw ()
-will continue either until it has traversed the entire tree,
-in which case it will return zero,
-or until it encounters an error (such as a
-.BR malloc (3)
-failure), in which case it will return \-1.
-.PP
-Because
-.BR nftw ()
-uses dynamic data structures, the only safe way to
-exit out of a tree walk is to return a nonzero value from \fIfn\fP().
-To allow a signal to terminate the walk without causing a memory leak,
-have the handler set a global flag that is checked by \fIfn\fP().
-\fIDon't\fP use
-.BR longjmp (3)
-unless the program is going to terminate.
-.PP
-The \fIflags\fP argument of
-.BR nftw ()
-is formed by ORing zero or more of the
-following flags:
-.TP
-.BR FTW_ACTIONRETVAL " (since glibc 2.3.3)"
-If this glibc-specific flag is set, then
-.BR nftw ()
-handles the return value from
-.IR fn ()
-differently.
-.IR fn ()
-should return one of the following values:
-.RS
-.TP
-.B FTW_CONTINUE
-Instructs
-.BR nftw ()
-to continue normally.
-.TP
-.B FTW_SKIP_SIBLINGS
-If \fIfn\fP() returns this value, then
-siblings of the current entry will be skipped,
-and processing continues in the parent.
-.\" If \fBFTW_DEPTH\fP
-.\" is set, the entry's parent directory is processed next (with
-.\" \fIflag\fP set to \fBFTW_DP\fP).
-.TP
-.B FTW_SKIP_SUBTREE
-If \fIfn\fP() is called with an entry that is a directory
-(\fItypeflag\fP is \fBFTW_D\fP), this return
-value will prevent objects within that directory from being passed as
-arguments to \fIfn\fP().
-.BR nftw ()
-continues processing with the next sibling of the directory.
-.TP
-.B FTW_STOP
-Causes
-.BR nftw ()
-to return immediately with the return value
-\fBFTW_STOP\fP.
-.PP
-Other return values could be associated with new actions in the future;
-\fIfn\fP() should not return values other than those listed above.
-.PP
-The feature test macro
-.B _GNU_SOURCE
-must be defined
-(before including
-.I any
-header files)
-in order to
-obtain the definition of \fBFTW_ACTIONRETVAL\fP from \fI<ftw.h>\fP.
-.RE
-.TP
-.B FTW_CHDIR
-If set, do a
-.BR chdir (2)
-to each directory before handling its contents.
-This is useful if the program needs to perform some action
-in the directory in which \fIfpath\fP resides.
-(Specifying this flag has no effect on the pathname that is passed in the
-.I fpath
-argument of
-.IR fn .)
-.TP
-.B FTW_DEPTH
-If set, do a post-order traversal, that is, call \fIfn\fP() for
-the directory itself \fIafter\fP handling the contents of the directory
-and its subdirectories.
-(By default, each directory is handled \fIbefore\fP its contents.)
-.TP
-.B FTW_MOUNT
-If set, stay within the same filesystem
-(i.e., do not cross mount points).
-.TP
-.B FTW_PHYS
-If set, do not follow symbolic links.
-(This is what you want.)
-If not set, symbolic links are followed, but no file is reported twice.
-.IP
-If \fBFTW_PHYS\fP is not set, but \fBFTW_DEPTH\fP is set,
-then the function
-.IR fn ()
-is never called for a directory that would be a descendant of itself.
-.SS ftw()
-.BR ftw ()
-is an older function that offers a subset of the functionality of
-.BR nftw ().
-The notable differences are as follows:
-.IP \[bu] 3
-.BR ftw ()
-has no
-.I flags
-argument.
-It behaves the same as when
-.BR nftw ()
-is called with
-.I flags
-specified as zero.
-.IP \[bu]
-The callback function,
-.IR fn (),
-is not supplied with a fourth argument.
-.IP \[bu]
-The range of values that is passed via the
-.I typeflag
-argument supplied to
-.IR fn ()
-is smaller: just
-.BR FTW_F ,
-.BR FTW_D ,
-.BR FTW_DNR ,
-.BR FTW_NS ,
-and (possibly)
-.BR FTW_SL .
-.SH RETURN VALUE
-These functions return 0 on success, and \-1 if an error occurs.
-.PP
-If \fIfn\fP() returns nonzero,
-then the tree walk is terminated and the value returned by \fIfn\fP()
-is returned as the result of
-.BR ftw ()
-or
-.BR nftw ().
-.PP
-If
-.BR nftw ()
-is called with the \fBFTW_ACTIONRETVAL\fP flag,
-then the only nonzero value that should be used by \fIfn\fP()
-to terminate the tree walk is \fBFTW_STOP\fP,
-and that value is returned as the result of
-.BR nftw ().
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR nftw ()
-T} Thread safety MT-Safe cwd
-T{
-.BR ftw ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-In some implementations (e.g., glibc),
-.BR ftw ()
-will never use \fBFTW_SL\fP; on other systems \fBFTW_SL\fP occurs only
-for symbolic links that do not point to an existing file;
-and again on other systems
-.BR ftw ()
-will use \fBFTW_SL\fP for each symbolic link.
-If
-.I fpath
-is a symbolic link and
-.BR stat (2)
-failed, POSIX.1-2008 states
-that it is undefined whether \fBFTW_NS\fP or \fBFTW_SL\fP
-is passed in
-.IR typeflag .
-For predictable results, use
-.BR nftw ().
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR ftw ()
-POSIX.1-2001, SVr4, SUSv1.
-POSIX.1-2008 marks it as obsolete.
-.TP
-.BR nftw ()
-glibc 2.1.
-POSIX.1-2001, SUSv1.
-.TP
-.B FTW_SL
-POSIX.1-2001, SUSv1.
-.SH NOTES
-POSIX.1-2008 notes that the results are unspecified if
-.I fn
-does not preserve the current working directory.
-.SH BUGS
-According to POSIX.1-2008, when the
-.I typeflag
-argument passed to
-.IR fn ()
-contains
-.BR FTW_SLN ,
-the buffer pointed to by
-.I sb
-should contain information about the dangling symbolic link
-(obtained by calling
-.BR lstat (2)
-on the link).
-Early glibc versions correctly followed the POSIX specification on this point.
-However, as a result of a regression introduced in glibc 2.4,
-the contents of the buffer pointed to by
-.I sb
-were undefined when
-.B FTW_SLN
-is passed in
-.IR typeflag .
-(More precisely, the contents of the buffer were left unchanged in this case.)
-This regression was eventually fixed in glibc 2.30,
-.\" https://bugzilla.redhat.com/show_bug.cgi?id=1422736
-.\" http://austingroupbugs.net/view.php?id=1121
-.\" glibc commit 6ba205b2c35e3e024c8c12d2ee1b73363e84da87
-.\" https://sourceware.org/bugzilla/show_bug.cgi?id=23501
-so that the glibc implementation (once more) follows the POSIX specification.
-.SH EXAMPLES
-The following program traverses the directory tree under the path named
-in its first command-line argument, or under the current directory
-if no argument is supplied.
-It displays various information about each file.
-The second command-line argument can be used to specify characters that
-control the value assigned to the \fIflags\fP
-argument when calling
-.BR nftw ().
-.SS Program source
-\&
-.\" SRC BEGIN (ftw.c)
-.EX
-#define _XOPEN_SOURCE 500
-#include <ftw.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-static int
-display_info(const char *fpath, const struct stat *sb,
- int tflag, struct FTW *ftwbuf)
-{
- printf("%\-3s %2d ",
- (tflag == FTW_D) ? "d" : (tflag == FTW_DNR) ? "dnr" :
- (tflag == FTW_DP) ? "dp" : (tflag == FTW_F) ? "f" :
- (tflag == FTW_NS) ? "ns" : (tflag == FTW_SL) ? "sl" :
- (tflag == FTW_SLN) ? "sln" : "???",
- ftwbuf\->level);
-\&
- if (tflag == FTW_NS)
- printf("\-\-\-\-\-\-\-");
- else
- printf("%7jd", (intmax_t) sb\->st_size);
-\&
- printf(" %\-40s %d %s\en",
- fpath, ftwbuf\->base, fpath + ftwbuf\->base);
-\&
- return 0; /* To tell nftw() to continue */
-}
-\&
-int
-main(int argc, char *argv[])
-{
- int flags = 0;
-\&
- if (argc > 2 && strchr(argv[2], \[aq]d\[aq]) != NULL)
- flags |= FTW_DEPTH;
- if (argc > 2 && strchr(argv[2], \[aq]p\[aq]) != NULL)
- flags |= FTW_PHYS;
-\&
- if (nftw((argc < 2) ? "." : argv[1], display_info, 20, flags)
- == \-1)
- {
- perror("nftw");
- exit(EXIT_FAILURE);
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR stat (2),
-.BR fts (3),
-.BR readdir (3)
diff --git a/man3/funlockfile.3 b/man3/funlockfile.3
deleted file mode 100644
index b33c2ee65..000000000
--- a/man3/funlockfile.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/flockfile.3
diff --git a/man3/futimens.3 b/man3/futimens.3
deleted file mode 100644
index a365c7b53..000000000
--- a/man3/futimens.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/utimensat.2
diff --git a/man3/futimes.3 b/man3/futimes.3
deleted file mode 100644
index f7794c009..000000000
--- a/man3/futimes.3
+++ /dev/null
@@ -1,109 +0,0 @@
-'\" t
-.\" Copyright (c) 2006, 2008, Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH futimes 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-futimes, lutimes \- change file timestamps
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/time.h>
-.PP
-.BI "int futimes(int " fd ", const struct timeval " tv [2]);
-.BI "int lutimes(const char *" filename ", const struct timeval " tv [2]);
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR futimes (),
-.BR lutimes ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-.BR futimes ()
-changes the access and modification times of a file in the same way as
-.BR utimes (2),
-with the difference that the file whose timestamps are to be changed
-is specified via a file descriptor,
-.IR fd ,
-rather than via a pathname.
-.PP
-.BR lutimes ()
-changes the access and modification times of a file in the same way as
-.BR utimes (2),
-with the difference that if
-.I filename
-refers to a symbolic link, then the link is not dereferenced:
-instead, the timestamps of the symbolic link are changed.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-Errors are as for
-.BR utimes (2),
-with the following additions for
-.BR futimes ():
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor.
-.TP
-.B ENOSYS
-The
-.I /proc
-filesystem could not be accessed.
-.PP
-The following additional error may occur for
-.BR lutimes ():
-.TP
-.B ENOSYS
-The kernel does not support this call; Linux 2.6.22 or later is required.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR futimes (),
-.BR lutimes ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-Linux, BSD.
-.SH HISTORY
-.TP
-.BR futimes ()
-glibc 2.3.
-.TP
-.BR lutimes ()
-glibc 2.6.
-.SH NOTES
-.BR lutimes ()
-is implemented using the
-.BR utimensat (2)
-system call.
-.SH SEE ALSO
-.BR utime (2),
-.BR utimensat (2),
-.BR symlink (7)
diff --git a/man3/fwide.3 b/man3/fwide.3
deleted file mode 100644
index 14eeb75bc..000000000
--- a/man3/fwide.3
+++ /dev/null
@@ -1,92 +0,0 @@
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH fwide 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fwide \- set and determine the orientation of a FILE stream
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "int fwide(FILE *" stream ", int " mode );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR fwide ():
-.nf
- _XOPEN_SOURCE >= 500 || _ISOC99_SOURCE
- || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-When \fImode\fP is zero, the
-.BR fwide ()
-function determines the current
-orientation of \fIstream\fP.
-It returns a positive value if \fIstream\fP is
-wide-character oriented, that is, if wide-character I/O is permitted but char
-I/O is disallowed.
-It returns a negative value if \fIstream\fP is byte oriented\[em]that is,
-if char I/O is permitted but wide-character I/O is disallowed.
-It
-returns zero if \fIstream\fP has no orientation yet; in this case the next
-I/O operation might change the orientation (to byte oriented if it is a char
-I/O operation, or to wide-character oriented if it is a wide-character I/O
-operation).
-.PP
-Once a stream has an orientation, it cannot be changed and persists until
-the stream is closed.
-.PP
-When \fImode\fP is nonzero, the
-.BR fwide ()
-function first attempts to set
-\fIstream\fP's orientation (to wide-character oriented
-if \fImode\fP is greater than 0, or
-to byte oriented if \fImode\fP is less than 0).
-It then returns a value denoting the
-current orientation, as above.
-.SH RETURN VALUE
-The
-.BR fwide ()
-function returns the stream's orientation, after possibly
-changing it.
-A positive return value means wide-character oriented.
-A negative return value means byte oriented.
-A return value of zero means undecided.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-Wide-character output to a byte oriented stream can be performed through the
-.BR fprintf (3)
-function with the
-.B %lc
-and
-.B %ls
-directives.
-.PP
-Char oriented output to a wide-character oriented stream can be performed
-through the
-.BR fwprintf (3)
-function with the
-.B %c
-and
-.B %s
-directives.
-.SH SEE ALSO
-.BR fprintf (3),
-.BR fwprintf (3)
diff --git a/man3/fwprintf.3 b/man3/fwprintf.3
deleted file mode 100644
index 56ec9685b..000000000
--- a/man3/fwprintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/wprintf.3
diff --git a/man3/fwrite.3 b/man3/fwrite.3
deleted file mode 100644
index 86906ede5..000000000
--- a/man3/fwrite.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fread.3
diff --git a/man3/fwrite_unlocked.3 b/man3/fwrite_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/fwrite_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/gai_cancel.3 b/man3/gai_cancel.3
deleted file mode 100644
index 1b0f392ae..000000000
--- a/man3/gai_cancel.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getaddrinfo_a.3
diff --git a/man3/gai_error.3 b/man3/gai_error.3
deleted file mode 100644
index 1b0f392ae..000000000
--- a/man3/gai_error.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getaddrinfo_a.3
diff --git a/man3/gai_strerror.3 b/man3/gai_strerror.3
deleted file mode 100644
index 17f7236a7..000000000
--- a/man3/gai_strerror.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getaddrinfo.3
diff --git a/man3/gai_suspend.3 b/man3/gai_suspend.3
deleted file mode 100644
index 1b0f392ae..000000000
--- a/man3/gai_suspend.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getaddrinfo_a.3
diff --git a/man3/gamma.3 b/man3/gamma.3
deleted file mode 100644
index 54b8424f7..000000000
--- a/man3/gamma.3
+++ /dev/null
@@ -1,124 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" Modified 2003-11-18, aeb: historical remarks
-.\"
-.TH gamma 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-gamma, gammaf, gammal \- (logarithm of the) gamma function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "[[deprecated]] double gamma(double " x ");"
-.BI "[[deprecated]] float gammaf(float " x ");"
-.BI "[[deprecated]] long double gammal(long double " x ");"
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR gamma ():
-.nf
- _XOPEN_SOURCE
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR gammaf (),
-.BR gammal ():
-.nf
- _XOPEN_SOURCE >= 600 || (_XOPEN_SOURCE && _ISOC99_SOURCE)
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions are deprecated: instead, use either the
-.BR tgamma (3)
-or the
-.BR lgamma (3)
-functions, as appropriate.
-.PP
-For the definition of the Gamma function, see
-.BR tgamma (3).
-.SS *BSD version
-The libm in 4.4BSD and some versions of FreeBSD had a
-.BR gamma ()
-function that computes the Gamma function, as one would expect.
-.SS glibc version
-glibc has a
-.BR gamma ()
-function that is equivalent to
-.BR lgamma (3)
-and computes the natural logarithm of the Gamma function.
-.SH RETURN VALUE
-See
-.BR lgamma (3).
-.SH ERRORS
-See
-.BR lgamma (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR gamma (),
-.BR gammaf (),
-.BR gammal ()
-T} Thread safety MT-Unsafe race:signgam
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-SVID 2.
-.PP
-Because of historical variations in behavior across systems,
-this function is not specified in any recent standard.
-.PP
-4.2BSD had a
-.BR gamma ()
-that computed
-.RI ln(|Gamma(| x |)|),
-leaving the sign of
-.RI Gamma(| x |)
-in the external integer
-.IR signgam .
-In 4.3BSD the name was changed to
-.BR lgamma (3),
-and the man page promises
-.PP
-.in +4n
-"At some time in the future the name gamma will be rehabilitated
-and used for the Gamma function"
-.in
-.PP
-This did indeed happen in 4.4BSD, where
-.BR gamma ()
-computes the Gamma function (with no effect on
-.IR signgam ).
-However, this came too late, and we now have
-.BR tgamma (3),
-the "true gamma" function.
-.\" The FreeBSD man page says about gamma() that it is like lgamma()
-.\" except that is does not set signgam.
-.\" Also, that 4.4BSD has a gamma() that computes the true gamma function.
-.SH SEE ALSO
-.BR lgamma (3),
-.BR signgam (3),
-.BR tgamma (3)
diff --git a/man3/gammaf.3 b/man3/gammaf.3
deleted file mode 100644
index 64ab6eec3..000000000
--- a/man3/gammaf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/gamma.3
diff --git a/man3/gammal.3 b/man3/gammal.3
deleted file mode 100644
index 64ab6eec3..000000000
--- a/man3/gammal.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/gamma.3
diff --git a/man3/gcvt.3 b/man3/gcvt.3
deleted file mode 100644
index b8109839a..000000000
--- a/man3/gcvt.3
+++ /dev/null
@@ -1,85 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 19:32:25 1993 by Rik Faith (faith@cs.unc.edu)
-.TH gcvt 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-gcvt \- convert a floating-point number to a string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "char *gcvt(double " number ", int " ndigit ", char *" buf );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR gcvt ():
-.nf
- Since glibc 2.17
- (_XOPEN_SOURCE >= 500 && ! (_POSIX_C_SOURCE >= 200809L))
- || /* glibc >= 2.20 */ _DEFAULT_SOURCE
- || /* glibc <= 2.19 */ _SVID_SOURCE
- glibc 2.12 to glibc 2.16:
- (_XOPEN_SOURCE >= 500 && ! (_POSIX_C_SOURCE >= 200112L))
- || _SVID_SOURCE
- Before glibc 2.12:
- _SVID_SOURCE || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
-.fi
-.SH DESCRIPTION
-The
-.BR gcvt ()
-function converts \fInumber\fP to a minimal length null-terminated
-ASCII string and stores the result in \fIbuf\fP.
-It produces \fIndigit\fP significant digits in either
-.BR printf (3)
-F format or E format.
-.SH RETURN VALUE
-The
-.BR gcvt ()
-function returns
-\fIbuf\fP.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR gcvt ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-Marked as LEGACY in POSIX.1-2001.
-POSIX.1-2008 removed it,
-recommending the use of
-.BR sprintf (3)
-instead (though
-.BR snprintf (3)
-may be preferable).
-.SH SEE ALSO
-.BR ecvt (3),
-.BR fcvt (3),
-.BR sprintf (3)
diff --git a/man3/get_avphys_pages.3 b/man3/get_avphys_pages.3
deleted file mode 100644
index cbd22ccff..000000000
--- a/man3/get_avphys_pages.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/get_phys_pages.3
diff --git a/man3/get_current_dir_name.3 b/man3/get_current_dir_name.3
deleted file mode 100644
index f73c1579c..000000000
--- a/man3/get_current_dir_name.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getcwd.3
diff --git a/man3/get_myaddress.3 b/man3/get_myaddress.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/get_myaddress.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/get_nprocs.3 b/man3/get_nprocs.3
deleted file mode 100644
index 22d3380d3..000000000
--- a/man3/get_nprocs.3
+++ /dev/null
@@ -1,96 +0,0 @@
-'\" t
-.\" Copyright (c) 2012, Petr Benas
-.\" and Copyright (c) 2012, Michael Kerrisk <mtk.man-pages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH get_nprocs 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-get_nprocs, get_nprocs_conf \- get number of processors
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/sysinfo.h>
-.PP
-.B int get_nprocs(void);
-.B int get_nprocs_conf(void);
-.fi
-.SH DESCRIPTION
-The function
-.BR get_nprocs_conf ()
-returns the number of processors configured by the operating system.
-.PP
-The function
-.BR get_nprocs ()
-returns the number of processors currently available in the system.
-This may be less than the number returned by
-.BR get_nprocs_conf ()
-because processors may be offline (e.g., on hotpluggable systems).
-.SH RETURN VALUE
-As given in DESCRIPTION.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR get_nprocs (),
-.BR get_nprocs_conf ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH NOTES
-The current
-.\" glibc 2.15
-implementation of these functions is rather expensive,
-since they open and parse files in the
-.I /sys
-filesystem each time they are called.
-.PP
-The following
-.BR sysconf (3)
-calls make use of the functions documented on this page
-to return the same information.
-.PP
-.in +4n
-.EX
-np = sysconf(_SC_NPROCESSORS_CONF); /* processors configured */
-np = sysconf(_SC_NPROCESSORS_ONLN); /* processors available */
-.EE
-.in
-.SH EXAMPLES
-The following example shows how
-.BR get_nprocs ()
-and
-.BR get_nprocs_conf ()
-can be used.
-.PP
-.\" SRC BEGIN (get_nprocs_conf.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/sysinfo.h>
-\&
-int
-main(void)
-{
- printf("This system has %d processors configured and "
- "%d processors available.\en",
- get_nprocs_conf(), get_nprocs());
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR nproc (1)
diff --git a/man3/get_nprocs_conf.3 b/man3/get_nprocs_conf.3
deleted file mode 100644
index 7de3e2b31..000000000
--- a/man3/get_nprocs_conf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/get_nprocs.3
diff --git a/man3/get_phys_pages.3 b/man3/get_phys_pages.3
deleted file mode 100644
index 8fed56998..000000000
--- a/man3/get_phys_pages.3
+++ /dev/null
@@ -1,90 +0,0 @@
-.\" Copyright (c) 2015 William Woodruff (william@tuffbizz.com)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH get_phys_pages 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-get_phys_pages, get_avphys_pages \- get total and available physical
-page counts
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B "#include <sys/sysinfo.h>"
-.PP
-.B long get_phys_pages(void);
-.B long get_avphys_pages(void);
-.fi
-.SH DESCRIPTION
-The function
-.BR get_phys_pages ()
-returns the total number of physical pages of memory available on the system.
-.PP
-The function
-.BR get_avphys_pages ()
-returns the number of currently available physical pages of memory on the
-system.
-.SH RETURN VALUE
-On success,
-these functions return a nonnegative value as given in DESCRIPTION.
-On failure, they return \-1 and set
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B ENOSYS
-The system could not provide the required information
-(possibly because the
-.I /proc
-filesystem was not mounted).
-.SH STANDARDS
-GNU.
-.SH HISTORY
-Before glibc 2.23,
-these functions obtained the required information by scanning the
-.I MemTotal
-and
-.I MemFree
-fields of
-.IR /proc/meminfo .
-Since glibc 2.23,
-these functions obtain the required information by calling
-.BR sysinfo (2).
-.SH NOTES
-The following
-.BR sysconf (3)
-calls provide a portable means of obtaining the same information as the
-functions described on this page.
-.PP
-.in +4n
-.EX
-total_pages = sysconf(_SC_PHYS_PAGES); /* total pages */
-avl_pages = sysconf(_SC_AVPHYS_PAGES); /* available pages */
-.EE
-.in
-.SH EXAMPLES
-The following example shows how
-.BR get_phys_pages ()
-and
-.BR get_avphys_pages ()
-can be used.
-.PP
-.\" SRC BEGIN (get_phys_pages.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/sysinfo.h>
-\&
-int
-main(void)
-{
- printf("This system has %ld pages of physical memory and "
- "%ld pages of physical memory available.\en",
- get_phys_pages(), get_avphys_pages());
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR sysconf (3)
diff --git a/man3/getaddrinfo.3 b/man3/getaddrinfo.3
deleted file mode 100644
index 8c4de3b16..000000000
--- a/man3/getaddrinfo.3
+++ /dev/null
@@ -1,853 +0,0 @@
-'\" t
-.\" Copyright (c) 2007, 2008 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (c) 2006 Ulrich Drepper <drepper@redhat.com>
-.\" A few pieces of an earlier version remain:
-.\" Copyright 2000, Sam Varshavchik <mrsam@courier-mta.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References: RFC 2553
-.\"
-.\" 2005-08-09, mtk, added AI_ALL, AI_ADDRCONFIG, AI_V4MAPPED,
-.\" and AI_NUMERICSERV.
-.\" 2006-11-25, Ulrich Drepper <drepper@redhat.com>
-.\" Add text describing Internationalized Domain Name extensions.
-.\" 2007-06-08, mtk: added example programs
-.\" 2008-02-26, mtk; clarify discussion of NULL 'hints' argument; other
-.\" minor rewrites.
-.\" 2008-06-18, mtk: many parts rewritten
-.\" 2008-12-04, Petr Baudis <pasky@suse.cz>
-.\" Describe results ordering and reference /etc/gai.conf.
-.\"
-.\" FIXME . glibc's 2.9 NEWS file documents DCCP and UDP-lite support
-.\" and is SCTP support now also there?
-.\"
-.TH getaddrinfo 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getaddrinfo, freeaddrinfo, gai_strerror \- network address and
-service translation
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.B #include <sys/socket.h>
-.B #include <netdb.h>
-.PP
-.BI "int getaddrinfo(const char *restrict " node ,
-.BI " const char *restrict " service ,
-.BI " const struct addrinfo *restrict " hints ,
-.BI " struct addrinfo **restrict " res );
-.PP
-.BI "void freeaddrinfo(struct addrinfo *" res );
-.PP
-.BI "const char *gai_strerror(int " errcode );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getaddrinfo (),
-.BR freeaddrinfo (),
-.BR gai_strerror ():
-.nf
- Since glibc 2.22:
- _POSIX_C_SOURCE >= 200112L
- glibc 2.21 and earlier:
- _POSIX_C_SOURCE
-.fi
-.SH DESCRIPTION
-Given
-.I node
-and
-.IR service ,
-which identify an Internet host and a service,
-.BR getaddrinfo ()
-returns one or more
-.I addrinfo
-structures, each of which contains an Internet address
-that can be specified in a call to
-.BR bind (2)
-or
-.BR connect (2).
-The
-.BR getaddrinfo ()
-function combines the functionality provided by the
-.\" .BR getipnodebyname (3),
-.\" .BR getipnodebyaddr (3),
-.BR gethostbyname (3)
-and
-.BR getservbyname (3)
-functions into a single interface, but unlike the latter functions,
-.BR getaddrinfo ()
-is reentrant and allows programs to eliminate IPv4-versus-IPv6 dependencies.
-.PP
-The
-.I addrinfo
-structure used by
-.BR getaddrinfo ()
-contains the following fields:
-.PP
-.in +4n
-.EX
-struct addrinfo {
- int ai_flags;
- int ai_family;
- int ai_socktype;
- int ai_protocol;
- socklen_t ai_addrlen;
- struct sockaddr *ai_addr;
- char *ai_canonname;
- struct addrinfo *ai_next;
-};
-.EE
-.in
-.PP
-The
-.I hints
-argument points to an
-.I addrinfo
-structure that specifies criteria for selecting the socket address
-structures returned in the list pointed to by
-.IR res .
-If
-.I hints
-is not NULL it points to an
-.I addrinfo
-structure whose
-.IR ai_family ,
-.IR ai_socktype ,
-and
-.I ai_protocol
-specify criteria that limit the set of socket addresses returned by
-.BR getaddrinfo (),
-as follows:
-.TP
-.I ai_family
-This field specifies the desired address family for the returned addresses.
-Valid values for this field include
-.B AF_INET
-and
-.BR AF_INET6 .
-The value
-.B AF_UNSPEC
-indicates that
-.BR getaddrinfo ()
-should return socket addresses for any address family
-(either IPv4 or IPv6, for example) that can be used with
-.I node
-and
-.IR service .
-.TP
-.I ai_socktype
-This field specifies the preferred socket type, for example
-.B SOCK_STREAM
-or
-.BR SOCK_DGRAM .
-Specifying 0 in this field indicates that socket addresses of any type
-can be returned by
-.BR getaddrinfo ().
-.TP
-.I ai_protocol
-This field specifies the protocol for the returned socket addresses.
-Specifying 0 in this field indicates that socket addresses with
-any protocol can be returned by
-.BR getaddrinfo ().
-.TP
-.I ai_flags
-This field specifies additional options, described below.
-Multiple flags are specified by bitwise OR-ing them together.
-.PP
-All the other fields in the structure pointed to by
-.I hints
-must contain either 0 or a null pointer, as appropriate.
-.PP
-Specifying
-.I hints
-as NULL is equivalent to setting
-.I ai_socktype
-and
-.I ai_protocol
-to 0;
-.I ai_family
-to
-.BR AF_UNSPEC ;
-and
-.I ai_flags
-to
-.BR "(AI_V4MAPPED\ |\ AI_ADDRCONFIG)" .
-(POSIX specifies different defaults for
-.IR ai_flags ;
-see NOTES.)
-.I node
-specifies either a numerical network address
-(for IPv4, numbers-and-dots notation as supported by
-.BR inet_aton (3);
-for IPv6, hexadecimal string format as supported by
-.BR inet_pton (3)),
-or a network hostname, whose network addresses are looked up and resolved.
-If
-.I hints.ai_flags
-contains the
-.B AI_NUMERICHOST
-flag, then
-.I node
-must be a numerical network address.
-The
-.B AI_NUMERICHOST
-flag suppresses any potentially lengthy network host address lookups.
-.PP
-If the
-.B AI_PASSIVE
-flag is specified in
-.IR hints.ai_flags ,
-and
-.I node
-is NULL,
-then the returned socket addresses will be suitable for
-.BR bind (2)ing
-a socket that will
-.BR accept (2)
-connections.
-The returned socket address will contain the "wildcard address"
-.RB ( INADDR_ANY
-for IPv4 addresses,
-.B IN6ADDR_ANY_INIT
-for IPv6 address).
-The wildcard address is used by applications (typically servers)
-that intend to accept connections on any of the host's network addresses.
-If
-.I node
-is not NULL, then the
-.B AI_PASSIVE
-flag is ignored.
-.PP
-If the
-.B AI_PASSIVE
-flag is not set in
-.IR hints.ai_flags ,
-then the returned socket addresses will be suitable for use with
-.BR connect (2),
-.BR sendto (2),
-or
-.BR sendmsg (2).
-If
-.I node
-is NULL,
-then the network address will be set to the loopback interface address
-.RB ( INADDR_LOOPBACK
-for IPv4 addresses,
-.B IN6ADDR_LOOPBACK_INIT
-for IPv6 address);
-this is used by applications that intend to communicate
-with peers running on the same host.
-.PP
-.I service
-sets the port in each returned address structure.
-If this argument is a service name (see
-.BR services (5)),
-it is translated to the corresponding port number.
-This argument can also be specified as a decimal number,
-which is simply converted to binary.
-If
-.I service
-is NULL, then the port number of the returned socket addresses
-will be left uninitialized.
-If
-.B AI_NUMERICSERV
-is specified in
-.I hints.ai_flags
-and
-.I service
-is not NULL, then
-.I service
-must point to a string containing a numeric port number.
-This flag is used to inhibit the invocation of a name resolution service
-in cases where it is known not to be required.
-.PP
-Either
-.I node
-or
-.IR service ,
-but not both, may be NULL.
-.PP
-The
-.BR getaddrinfo ()
-function allocates and initializes a linked list of
-.I addrinfo
-structures, one for each network address that matches
-.I node
-and
-.IR service ,
-subject to any restrictions imposed by
-.IR hints ,
-and returns a pointer to the start of the list in
-.IR res .
-The items in the linked list are linked by the
-.I ai_next
-field.
-.PP
-There are several reasons why
-the linked list may have more than one
-.I addrinfo
-structure, including: the network host is multihomed, accessible
-over multiple protocols (e.g., both
-.B AF_INET
-and
-.BR AF_INET6 );
-or the same service is available from multiple socket types (one
-.B SOCK_STREAM
-address and another
-.B SOCK_DGRAM
-address, for example).
-Normally, the application should try
-using the addresses in the order in which they are returned.
-The sorting function used within
-.BR getaddrinfo ()
-is defined in RFC\ 3484; the order can be tweaked for a particular
-system by editing
-.I /etc/gai.conf
-(available since glibc 2.5).
-.PP
-If
-.I hints.ai_flags
-includes the
-.B AI_CANONNAME
-flag, then the
-.I ai_canonname
-field of the first of the
-.I addrinfo
-structures in the returned list is set to point to the
-official name of the host.
-.\" Prior to glibc 2.3.4, the ai_canonname of each addrinfo
-.\" structure was set pointing to the canonical name; that was
-.\" more than POSIX.1-2001 specified, or other implementations provided.
-.\" MTK, Aug 05
-.PP
-The remaining fields of each returned
-.I addrinfo
-structure are initialized as follows:
-.IP \[bu] 3
-The
-.IR ai_family ,
-.IR ai_socktype ,
-and
-.I ai_protocol
-fields return the socket creation parameters (i.e., these fields have
-the same meaning as the corresponding arguments of
-.BR socket (2)).
-For example,
-.I ai_family
-might return
-.B AF_INET
-or
-.BR AF_INET6 ;
-.I ai_socktype
-might return
-.B SOCK_DGRAM
-or
-.BR SOCK_STREAM ;
-and
-.I ai_protocol
-returns the protocol for the socket.
-.IP \[bu]
-A pointer to the socket address is placed in the
-.I ai_addr
-field, and the length of the socket address, in bytes,
-is placed in the
-.I ai_addrlen
-field.
-.PP
-If
-.I hints.ai_flags
-includes the
-.B AI_ADDRCONFIG
-flag, then IPv4 addresses are returned in the list pointed to by
-.I res
-only if the local system has at least one
-IPv4 address configured, and IPv6 addresses are returned
-only if the local system has at least one IPv6 address configured.
-The loopback address is not considered for this case as valid
-as a configured address.
-This flag is useful on, for example,
-IPv4-only systems, to ensure that
-.BR getaddrinfo ()
-does not return IPv6 socket addresses that would always fail in
-.BR connect (2)
-or
-.BR bind (2).
-.PP
-If
-.I hints.ai_flags
-specifies the
-.B AI_V4MAPPED
-flag, and
-.I hints.ai_family
-was specified as
-.BR AF_INET6 ,
-and no matching IPv6 addresses could be found,
-then return IPv4-mapped IPv6 addresses in the list pointed to by
-.IR res .
-If both
-.B AI_V4MAPPED
-and
-.B AI_ALL
-are specified in
-.IR hints.ai_flags ,
-then return both IPv6 and IPv4-mapped IPv6 addresses
-in the list pointed to by
-.IR res .
-.B AI_ALL
-is ignored if
-.B AI_V4MAPPED
-is not also specified.
-.PP
-The
-.BR freeaddrinfo ()
-function frees the memory that was allocated
-for the dynamically allocated linked list
-.IR res .
-.SS Extensions to getaddrinfo() for Internationalized Domain Names
-Starting with glibc 2.3.4,
-.BR getaddrinfo ()
-has been extended to selectively allow the incoming and outgoing
-hostnames to be transparently converted to and from the
-Internationalized Domain Name (IDN) format (see RFC 3490,
-.IR "Internationalizing Domain Names in Applications (IDNA)" ).
-Four new flags are defined:
-.TP
-.B AI_IDN
-If this flag is specified, then the node name given in
-.I node
-is converted to IDN format if necessary.
-The source encoding is that of the current locale.
-.IP
-If the input name contains non-ASCII characters, then the IDN encoding
-is used.
-Those parts of the node name (delimited by dots) that contain
-non-ASCII characters are encoded using ASCII Compatible Encoding (ACE)
-before being passed to the name resolution functions.
-.\" Implementation Detail:
-.\" To minimize effects on system performance the implementation might
-.\" want to check whether the input string contains any non-ASCII
-.\" characters. If there are none the IDN step can be skipped completely.
-.\" On systems which allow not-ASCII safe encodings for a locale this
-.\" might be a problem.
-.TP
-.B AI_CANONIDN
-After a successful name lookup, and if the
-.B AI_CANONNAME
-flag was specified,
-.BR getaddrinfo ()
-will return the canonical name of the
-node corresponding to the
-.I addrinfo
-structure value passed back.
-The return value is an exact copy of the value returned by the name
-resolution function.
-.IP
-If the name is encoded using ACE, then it will contain the
-.I xn\-\-
-prefix for one or more components of the name.
-To convert these components into a readable form the
-.B AI_CANONIDN
-flag can be passed in addition to
-.BR AI_CANONNAME .
-The resulting string is encoded using the current locale's encoding.
-.\"
-.\"Implementation Detail:
-.\"If no component of the returned name starts with xn\-\- the IDN
-.\"step can be skipped, therefore avoiding unnecessary slowdowns.
-.TP
-.BR AI_IDN_ALLOW_UNASSIGNED ", " AI_IDN_USE_STD3_ASCII_RULES
-Setting these flags will enable the
-IDNA_ALLOW_UNASSIGNED (allow unassigned Unicode code points) and
-IDNA_USE_STD3_ASCII_RULES (check output to make sure it is a STD3
-conforming hostname)
-flags respectively to be used in the IDNA handling.
-.SH RETURN VALUE
-.\" FIXME glibc defines the following additional errors, some which
-.\" can probably be returned by getaddrinfo(); they need to
-.\" be documented.
-.\" #ifdef __USE_GNU
-.\" #define EAI_INPROGRESS -100 /* Processing request in progress. */
-.\" #define EAI_CANCELED -101 /* Request canceled. */
-.\" #define EAI_NOTCANCELED -102 /* Request not canceled. */
-.\" #define EAI_ALLDONE -103 /* All requests done. */
-.\" #define EAI_INTR -104 /* Interrupted by a signal. */
-.\" #define EAI_IDN_ENCODE -105 /* IDN encoding failed. */
-.\" #endif
-.BR getaddrinfo ()
-returns 0 if it succeeds, or one of the following nonzero error codes:
-.TP
-.B EAI_ADDRFAMILY
-.\" Not in SUSv3
-The specified network host does not have any network addresses in the
-requested address family.
-.TP
-.B EAI_AGAIN
-The name server returned a temporary failure indication.
-Try again later.
-.TP
-.B EAI_BADFLAGS
-.I hints.ai_flags
-contains invalid flags; or,
-.I hints.ai_flags
-included
-.B AI_CANONNAME
-and
-.I name
-was NULL.
-.TP
-.B EAI_FAIL
-The name server returned a permanent failure indication.
-.TP
-.B EAI_FAMILY
-The requested address family is not supported.
-.TP
-.B EAI_MEMORY
-Out of memory.
-.TP
-.B EAI_NODATA
-.\" Not in SUSv3
-The specified network host exists, but does not have any
-network addresses defined.
-.TP
-.B EAI_NONAME
-The
-.I node
-or
-.I service
-is not known; or both
-.I node
-and
-.I service
-are NULL; or
-.B AI_NUMERICSERV
-was specified in
-.I hints.ai_flags
-and
-.I service
-was not a numeric port-number string.
-.TP
-.B EAI_SERVICE
-The requested service is not available for the requested socket type.
-It may be available through another socket type.
-For example, this error could occur if
-.I service
-was "shell" (a service available only on stream sockets), and either
-.I hints.ai_protocol
-was
-.BR IPPROTO_UDP ,
-or
-.I hints.ai_socktype
-was
-.BR SOCK_DGRAM ;
-or the error could occur if
-.I service
-was not NULL, and
-.I hints.ai_socktype
-was
-.B SOCK_RAW
-(a socket type that does not support the concept of services).
-.TP
-.B EAI_SOCKTYPE
-The requested socket type is not supported.
-This could occur, for example, if
-.I hints.ai_socktype
-and
-.I hints.ai_protocol
-are inconsistent (e.g.,
-.B SOCK_DGRAM
-and
-.BR IPPROTO_TCP ,
-respectively).
-.TP
-.B EAI_SYSTEM
-Other system error;
-.I errno
-is set to indicate the error.
-.PP
-The
-.BR gai_strerror ()
-function translates these error codes to a human readable string,
-suitable for error reporting.
-.SH FILES
-.I /etc/gai.conf
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getaddrinfo ()
-T} Thread safety MT-Safe env locale
-T{
-.BR freeaddrinfo (),
-.BR gai_strerror ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-According to POSIX.1, specifying
-.\" POSIX.1-2001, POSIX.1-2008
-.I hints
-as NULL should cause
-.I ai_flags
-to be assumed as 0.
-The GNU C library instead assumes a value of
-.B (AI_V4MAPPED\~|\~AI_ADDRCONFIG)
-for this case,
-since this value is considered an improvement on the specification.
-.SH STANDARDS
-POSIX.1-2008.
-.TP
-.BR getaddrinfo ()
-RFC\ 2553.
-.SH HISTORY
-POSIX.1-2001.
-.TP
-.B AI_ADDRCONFIG
-.TQ
-.B AI_ALL
-.TQ
-.B AI_V4MAPPED
-glibc 2.3.3.
-.TP
-.B AI_NUMERICSERV
-glibc 2.3.4.
-.SH NOTES
-.BR getaddrinfo ()
-supports the
-.IB address % scope-id
-notation for specifying the IPv6 scope-ID.
-.SH EXAMPLES
-.\" getnameinfo.3 refers to this example
-.\" socket.2 refers to this example
-.\" bind.2 refers to this example
-.\" connect.2 refers to this example
-.\" recvfrom.2 refers to this example
-.\" sendto.2 refers to this example
-The following programs demonstrate the use of
-.BR getaddrinfo (),
-.BR gai_strerror (),
-.BR freeaddrinfo (),
-and
-.BR getnameinfo (3).
-The programs are an echo server and client for UDP datagrams.
-.SS Server program
-\&
-.\" SRC BEGIN (server.c)
-.EX
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <unistd.h>
-\&
-#define BUF_SIZE 500
-\&
-int
-main(int argc, char *argv[])
-{
- int sfd, s;
- char buf[BUF_SIZE];
- ssize_t nread;
- socklen_t peer_addrlen;
- struct addrinfo hints;
- struct addrinfo *result, *rp;
- struct sockaddr_storage peer_addr;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s port\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */
- hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */
- hints.ai_flags = AI_PASSIVE; /* For wildcard IP address */
- hints.ai_protocol = 0; /* Any protocol */
- hints.ai_canonname = NULL;
- hints.ai_addr = NULL;
- hints.ai_next = NULL;
-\&
- s = getaddrinfo(NULL, argv[1], &hints, &result);
- if (s != 0) {
- fprintf(stderr, "getaddrinfo: %s\en", gai_strerror(s));
- exit(EXIT_FAILURE);
- }
-\&
- /* getaddrinfo() returns a list of address structures.
- Try each address until we successfully bind(2).
- If socket(2) (or bind(2)) fails, we (close the socket
- and) try the next address. */
-\&
- for (rp = result; rp != NULL; rp = rp\->ai_next) {
- sfd = socket(rp\->ai_family, rp\->ai_socktype,
- rp\->ai_protocol);
- if (sfd == \-1)
- continue;
-\&
- if (bind(sfd, rp\->ai_addr, rp\->ai_addrlen) == 0)
- break; /* Success */
-\&
- close(sfd);
- }
-\&
- freeaddrinfo(result); /* No longer needed */
-\&
- if (rp == NULL) { /* No address succeeded */
- fprintf(stderr, "Could not bind\en");
- exit(EXIT_FAILURE);
- }
-\&
- /* Read datagrams and echo them back to sender. */
-\&
- for (;;) {
- char host[NI_MAXHOST], service[NI_MAXSERV];
-\&
- peer_addrlen = sizeof(peer_addr);
- nread = recvfrom(sfd, buf, BUF_SIZE, 0,
- (struct sockaddr *) &peer_addr, &peer_addrlen);
- if (nread == \-1)
- continue; /* Ignore failed request */
-\&
- s = getnameinfo((struct sockaddr *) &peer_addr,
- peer_addrlen, host, NI_MAXHOST,
- service, NI_MAXSERV, NI_NUMERICSERV);
- if (s == 0)
- printf("Received %zd bytes from %s:%s\en",
- nread, host, service);
- else
- fprintf(stderr, "getnameinfo: %s\en", gai_strerror(s));
-\&
- if (sendto(sfd, buf, nread, 0, (struct sockaddr *) &peer_addr,
- peer_addrlen) != nread)
- {
- fprintf(stderr, "Error sending response\en");
- }
- }
-}
-.EE
-.\" SRC END
-.SS Client program
-\&
-.\" SRC BEGIN (client.c)
-.EX
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <unistd.h>
-\&
-#define BUF_SIZE 500
-\&
-int
-main(int argc, char *argv[])
-{
- int sfd, s;
- char buf[BUF_SIZE];
- size_t len;
- ssize_t nread;
- struct addrinfo hints;
- struct addrinfo *result, *rp;
-\&
- if (argc < 3) {
- fprintf(stderr, "Usage: %s host port msg...\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- /* Obtain address(es) matching host/port. */
-\&
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */
- hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */
- hints.ai_flags = 0;
- hints.ai_protocol = 0; /* Any protocol */
-\&
- s = getaddrinfo(argv[1], argv[2], &hints, &result);
- if (s != 0) {
- fprintf(stderr, "getaddrinfo: %s\en", gai_strerror(s));
- exit(EXIT_FAILURE);
- }
-\&
- /* getaddrinfo() returns a list of address structures.
- Try each address until we successfully connect(2).
- If socket(2) (or connect(2)) fails, we (close the socket
- and) try the next address. */
-\&
- for (rp = result; rp != NULL; rp = rp\->ai_next) {
- sfd = socket(rp\->ai_family, rp\->ai_socktype,
- rp\->ai_protocol);
- if (sfd == \-1)
- continue;
-\&
- if (connect(sfd, rp\->ai_addr, rp\->ai_addrlen) != \-1)
- break; /* Success */
-\&
- close(sfd);
- }
-\&
- freeaddrinfo(result); /* No longer needed */
-\&
- if (rp == NULL) { /* No address succeeded */
- fprintf(stderr, "Could not connect\en");
- exit(EXIT_FAILURE);
- }
-\&
- /* Send remaining command\-line arguments as separate
- datagrams, and read responses from server. */
-\&
- for (size_t j = 3; j < argc; j++) {
- len = strlen(argv[j]) + 1;
- /* +1 for terminating null byte */
-\&
- if (len > BUF_SIZE) {
- fprintf(stderr,
- "Ignoring long message in argument %zu\en", j);
- continue;
- }
-\&
- if (write(sfd, argv[j], len) != len) {
- fprintf(stderr, "partial/failed write\en");
- exit(EXIT_FAILURE);
- }
-\&
- nread = read(sfd, buf, BUF_SIZE);
- if (nread == \-1) {
- perror("read");
- exit(EXIT_FAILURE);
- }
-\&
- printf("Received %zd bytes: %s\en", nread, buf);
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.\" .BR getipnodebyaddr (3),
-.\" .BR getipnodebyname (3),
-.BR getaddrinfo_a (3),
-.BR gethostbyname (3),
-.BR getnameinfo (3),
-.BR inet (3),
-.BR gai.conf (5),
-.BR hostname (7),
-.BR ip (7)
diff --git a/man3/getaddrinfo_a.3 b/man3/getaddrinfo_a.3
deleted file mode 100644
index cff85e5e2..000000000
--- a/man3/getaddrinfo_a.3
+++ /dev/null
@@ -1,614 +0,0 @@
-'\" t
-.\" Copyright (c) 2009 Petr Baudis <pasky@suse.cz>
-.\" and clean-ups and additions (C) Copyright 2010 Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References: http://people.redhat.com/drepper/asynchnl.pdf,
-.\" http://www.imperialviolet.org/2005/06/01/asynchronous-dns-lookups-with-glibc.html
-.\"
-.TH getaddrinfo_a 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getaddrinfo_a, gai_suspend, gai_error, gai_cancel \- asynchronous
-network address and service translation
-.SH LIBRARY
-Asynchronous name lookup library
-.RI ( libanl ", " \-lanl )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <netdb.h>
-.PP
-.BI "int getaddrinfo_a(int " mode ", struct gaicb *" list [restrict],
-.BI " int " nitems ", struct sigevent *restrict " sevp );
-.BI "int gai_suspend(const struct gaicb *const " list "[], int " nitems ,
-.BI " const struct timespec *" timeout );
-.PP
-.BI "int gai_error(struct gaicb *" req );
-.BI "int gai_cancel(struct gaicb *" req );
-.fi
-.SH DESCRIPTION
-The
-.BR getaddrinfo_a ()
-function performs the same task as
-.BR getaddrinfo (3),
-but allows multiple name look-ups to be performed asynchronously,
-with optional notification on completion of look-up operations.
-.PP
-The
-.I mode
-argument has one of the following values:
-.TP
-.B GAI_WAIT
-Perform the look-ups synchronously.
-The call blocks until the look-ups have completed.
-.TP
-.B GAI_NOWAIT
-Perform the look-ups asynchronously.
-The call returns immediately,
-and the requests are resolved in the background.
-See the discussion of the
-.I sevp
-argument below.
-.PP
-The array
-.I list
-specifies the look-up requests to process.
-The
-.I nitems
-argument specifies the number of elements in
-.IR list .
-The requested look-up operations are started in parallel.
-NULL elements in
-.I list
-are ignored.
-Each request is described by a
-.I gaicb
-structure, defined as follows:
-.PP
-.in +4n
-.EX
-struct gaicb {
- const char *ar_name;
- const char *ar_service;
- const struct addrinfo *ar_request;
- struct addrinfo *ar_result;
-};
-.EE
-.in
-.PP
-The elements of this structure correspond to the arguments of
-.BR getaddrinfo (3).
-Thus,
-.I ar_name
-corresponds to the
-.I node
-argument and
-.I ar_service
-to the
-.I service
-argument, identifying an Internet host and a service.
-The
-.I ar_request
-element corresponds to the
-.I hints
-argument, specifying the criteria for selecting
-the returned socket address structures.
-Finally,
-.I ar_result
-corresponds to the
-.I res
-argument; you do not need to initialize this element,
-it will be automatically set when the request
-is resolved.
-The
-.I addrinfo
-structure referenced by the last two elements is described in
-.BR getaddrinfo (3).
-.PP
-When
-.I mode
-is specified as
-.BR GAI_NOWAIT ,
-notifications about resolved requests
-can be obtained by employing the
-.I sigevent
-structure pointed to by the
-.I sevp
-argument.
-For the definition and general details of this structure, see
-.BR sigevent (7).
-The
-.I sevp\->sigev_notify
-field can have the following values:
-.TP
-.B SIGEV_NONE
-Don't provide any notification.
-.TP
-.B SIGEV_SIGNAL
-When a look-up completes, generate the signal
-.I sigev_signo
-for the process.
-See
-.BR sigevent (7)
-for general details.
-The
-.I si_code
-field of the
-.I siginfo_t
-structure will be set to
-.BR SI_ASYNCNL .
-.\" si_pid and si_uid are also set, to the values of the calling process,
-.\" which doesn't provide useful information, so we'll skip mentioning it.
-.TP
-.B SIGEV_THREAD
-When a look-up completes, invoke
-.I sigev_notify_function
-as if it were the start function of a new thread.
-See
-.BR sigevent (7)
-for details.
-.PP
-For
-.B SIGEV_SIGNAL
-and
-.BR SIGEV_THREAD ,
-it may be useful to point
-.I sevp\->sigev_value.sival_ptr
-to
-.IR list .
-.PP
-The
-.BR gai_suspend ()
-function suspends execution of the calling thread,
-waiting for the completion of one or more requests in the array
-.IR list .
-The
-.I nitems
-argument specifies the size of the array
-.IR list .
-The call blocks until one of the following occurs:
-.IP \[bu] 3
-One or more of the operations in
-.I list
-completes.
-.IP \[bu]
-The call is interrupted by a signal that is caught.
-.IP \[bu]
-The time interval specified in
-.I timeout
-elapses.
-This argument specifies a timeout in seconds plus nanoseconds (see
-.BR nanosleep (2)
-for details of the
-.I timespec
-structure).
-If
-.I timeout
-is NULL, then the call blocks indefinitely
-(until one of the events above occurs).
-.PP
-No explicit indication of which request was completed is given;
-you must determine which request(s) have completed by iterating with
-.BR gai_error ()
-over the list of requests.
-.PP
-The
-.BR gai_error ()
-function returns the status of the request
-.IR req :
-either
-.B EAI_INPROGRESS
-if the request was not completed yet,
-0 if it was handled successfully,
-or an error code if the request could not be resolved.
-.PP
-The
-.BR gai_cancel ()
-function cancels the request
-.IR req .
-If the request has been canceled successfully,
-the error status of the request will be set to
-.B EAI_CANCELED
-and normal asynchronous notification will be performed.
-The request cannot be canceled if it is currently being processed;
-in that case, it will be handled as if
-.BR gai_cancel ()
-has never been called.
-If
-.I req
-is NULL, an attempt is made to cancel all outstanding requests
-that the process has made.
-.SH RETURN VALUE
-The
-.BR getaddrinfo_a ()
-function returns 0 if all of the requests have been enqueued successfully,
-or one of the following nonzero error codes:
-.TP
-.B EAI_AGAIN
-The resources necessary to enqueue the look-up requests were not available.
-The application may check the error status of each
-request to determine which ones failed.
-.TP
-.B EAI_MEMORY
-Out of memory.
-.TP
-.B EAI_SYSTEM
-.I mode
-is invalid.
-.PP
-The
-.BR gai_suspend ()
-function returns 0 if at least one of the listed requests has been completed.
-Otherwise, it returns one of the following nonzero error codes:
-.TP
-.B EAI_AGAIN
-The given timeout expired before any of the requests could be completed.
-.TP
-.B EAI_ALLDONE
-There were no actual requests given to the function.
-.TP
-.B EAI_INTR
-A signal has interrupted the function.
-Note that this interruption might have been
-caused by signal notification of some completed look-up request.
-.PP
-The
-.BR gai_error ()
-function can return
-.B EAI_INPROGRESS
-for an unfinished look-up request,
-0 for a successfully completed look-up
-(as described above), one of the error codes that could be returned by
-.BR getaddrinfo (3),
-or the error code
-.B EAI_CANCELED
-if the request has been canceled explicitly before it could be finished.
-.PP
-The
-.BR gai_cancel ()
-function can return one of these values:
-.TP
-.B EAI_CANCELED
-The request has been canceled successfully.
-.TP
-.B EAI_NOTCANCELED
-The request has not been canceled.
-.TP
-.B EAI_ALLDONE
-The request has already completed.
-.PP
-The
-.BR gai_strerror (3)
-function translates these error codes to a human readable string,
-suitable for error reporting.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getaddrinfo_a (),
-.BR gai_suspend (),
-.BR gai_error (),
-.BR gai_cancel ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH HISTORY
-glibc 2.2.3.
-.PP
-The interface of
-.BR getaddrinfo_a ()
-was modeled after the
-.BR lio_listio (3)
-interface.
-.SH EXAMPLES
-Two examples are provided: a simple example that resolves
-several requests in parallel synchronously, and a complex example
-showing some of the asynchronous capabilities.
-.SS Synchronous example
-The program below simply resolves several hostnames in parallel,
-giving a speed-up compared to resolving the hostnames sequentially using
-.BR getaddrinfo (3).
-The program might be used like this:
-.PP
-.in +4n
-.EX
-$ \fB./a.out mirrors.kernel.org enoent.linuxfoundation.org gnu.org\fP
-mirrors.kernel.org: 139.178.88.99
-enoent.linuxfoundation.org: Name or service not known
-gnu.org: 209.51.188.116
-.EE
-.in
-.PP
-Here is the program source code
-.PP
-.\" SRC BEGIN (sync.c)
-.EX
-#define _GNU_SOURCE
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int ret;
- struct gaicb *reqs[argc \- 1];
- char host[NI_MAXHOST];
- struct addrinfo *res;
-\&
- if (argc < 2) {
- fprintf(stderr, "Usage: %s HOST...\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- for (size_t i = 0; i < argc \- 1; i++) {
- reqs[i] = malloc(sizeof(*reqs[0]));
- if (reqs[i] == NULL) {
- perror("malloc");
- exit(EXIT_FAILURE);
- }
- memset(reqs[i], 0, sizeof(*reqs[0]));
- reqs[i]\->ar_name = argv[i + 1];
- }
-\&
- ret = getaddrinfo_a(GAI_WAIT, reqs, argc \- 1, NULL);
- if (ret != 0) {
- fprintf(stderr, "getaddrinfo_a() failed: %s\en",
- gai_strerror(ret));
- exit(EXIT_FAILURE);
- }
-\&
- for (size_t i = 0; i < argc \- 1; i++) {
- printf("%s: ", reqs[i]\->ar_name);
- ret = gai_error(reqs[i]);
- if (ret == 0) {
- res = reqs[i]\->ar_result;
-\&
- ret = getnameinfo(res\->ai_addr, res\->ai_addrlen,
- host, sizeof(host),
- NULL, 0, NI_NUMERICHOST);
- if (ret != 0) {
- fprintf(stderr, "getnameinfo() failed: %s\en",
- gai_strerror(ret));
- exit(EXIT_FAILURE);
- }
- puts(host);
-\&
- } else {
- puts(gai_strerror(ret));
- }
- }
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SS Asynchronous example
-This example shows a simple interactive
-.BR getaddrinfo_a ()
-front-end.
-The notification facility is not demonstrated.
-.PP
-An example session might look like this:
-.PP
-.in +4n
-.EX
-$ \fB./a.out\fP
-> a mirrors.kernel.org enoent.linuxfoundation.org gnu.org
-> c 2
-[2] gnu.org: Request not canceled
-> w 0 1
-[00] mirrors.kernel.org: Finished
-> l
-[00] mirrors.kernel.org: 139.178.88.99
-[01] enoent.linuxfoundation.org: Processing request in progress
-[02] gnu.org: 209.51.188.116
-> l
-[00] mirrors.kernel.org: 139.178.88.99
-[01] enoent.linuxfoundation.org: Name or service not known
-[02] gnu.org: 209.51.188.116
-.EE
-.in
-.PP
-The program source is as follows:
-.PP
-.\" SRC BEGIN (async.c)
-.EX
-#define _GNU_SOURCE
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-static struct gaicb **reqs = NULL;
-static size_t nreqs = 0;
-\&
-static char *
-getcmd(void)
-{
- static char buf[256];
-\&
- fputs("> ", stdout); fflush(stdout);
- if (fgets(buf, sizeof(buf), stdin) == NULL)
- return NULL;
-\&
- if (buf[strlen(buf) \- 1] == \[aq]\en\[aq])
- buf[strlen(buf) \- 1] = 0;
-\&
- return buf;
-}
-\&
-/* Add requests for specified hostnames. */
-static void
-add_requests(void)
-{
- size_t nreqs_base = nreqs;
- char *host;
- int ret;
-\&
- while ((host = strtok(NULL, " "))) {
- nreqs++;
- reqs = realloc(reqs, sizeof(reqs[0]) * nreqs);
-\&
- reqs[nreqs \- 1] = calloc(1, sizeof(*reqs[0]));
- reqs[nreqs \- 1]\->ar_name = strdup(host);
- }
-\&
- /* Queue nreqs_base..nreqs requests. */
-\&
- ret = getaddrinfo_a(GAI_NOWAIT, &reqs[nreqs_base],
- nreqs \- nreqs_base, NULL);
- if (ret) {
- fprintf(stderr, "getaddrinfo_a() failed: %s\en",
- gai_strerror(ret));
- exit(EXIT_FAILURE);
- }
-}
-\&
-/* Wait until at least one of specified requests completes. */
-static void
-wait_requests(void)
-{
- char *id;
- int ret;
- size_t n;
- struct gaicb const **wait_reqs = calloc(nreqs, sizeof(*wait_reqs));
- /* NULL elements are ignored by gai_suspend(). */
-\&
- while ((id = strtok(NULL, " ")) != NULL) {
- n = atoi(id);
-\&
- if (n >= nreqs) {
- printf("Bad request number: %s\en", id);
- return;
- }
-\&
- wait_reqs[n] = reqs[n];
- }
-\&
- ret = gai_suspend(wait_reqs, nreqs, NULL);
- if (ret) {
- printf("gai_suspend(): %s\en", gai_strerror(ret));
- return;
- }
-\&
- for (size_t i = 0; i < nreqs; i++) {
- if (wait_reqs[i] == NULL)
- continue;
-\&
- ret = gai_error(reqs[i]);
- if (ret == EAI_INPROGRESS)
- continue;
-\&
- printf("[%02zu] %s: %s\en", i, reqs[i]\->ar_name,
- ret == 0 ? "Finished" : gai_strerror(ret));
- }
-}
-\&
-/* Cancel specified requests. */
-static void
-cancel_requests(void)
-{
- char *id;
- int ret;
- size_t n;
-\&
- while ((id = strtok(NULL, " ")) != NULL) {
- n = atoi(id);
-\&
- if (n >= nreqs) {
- printf("Bad request number: %s\en", id);
- return;
- }
-\&
- ret = gai_cancel(reqs[n]);
- printf("[%s] %s: %s\en", id, reqs[atoi(id)]\->ar_name,
- gai_strerror(ret));
- }
-}
-\&
-/* List all requests. */
-static void
-list_requests(void)
-{
- int ret;
- char host[NI_MAXHOST];
- struct addrinfo *res;
-\&
- for (size_t i = 0; i < nreqs; i++) {
- printf("[%02zu] %s: ", i, reqs[i]\->ar_name);
- ret = gai_error(reqs[i]);
-\&
- if (!ret) {
- res = reqs[i]\->ar_result;
-\&
- ret = getnameinfo(res\->ai_addr, res\->ai_addrlen,
- host, sizeof(host),
- NULL, 0, NI_NUMERICHOST);
- if (ret) {
- fprintf(stderr, "getnameinfo() failed: %s\en",
- gai_strerror(ret));
- exit(EXIT_FAILURE);
- }
- puts(host);
- } else {
- puts(gai_strerror(ret));
- }
- }
-}
-\&
-int
-main(void)
-{
- char *cmdline;
- char *cmd;
-\&
- while ((cmdline = getcmd()) != NULL) {
- cmd = strtok(cmdline, " ");
-\&
- if (cmd == NULL) {
- list_requests();
- } else {
- switch (cmd[0]) {
- case \[aq]a\[aq]:
- add_requests();
- break;
- case \[aq]w\[aq]:
- wait_requests();
- break;
- case \[aq]c\[aq]:
- cancel_requests();
- break;
- case \[aq]l\[aq]:
- list_requests();
- break;
- default:
- fprintf(stderr, "Bad command: %c\en", cmd[0]);
- break;
- }
- }
- }
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR getaddrinfo (3),
-.BR inet (3),
-.BR lio_listio (3),
-.BR hostname (7),
-.BR ip (7),
-.BR sigevent (7)
diff --git a/man3/getaliasbyname.3 b/man3/getaliasbyname.3
deleted file mode 100644
index 37dcf1914..000000000
--- a/man3/getaliasbyname.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/setaliasent.3
diff --git a/man3/getaliasbyname_r.3 b/man3/getaliasbyname_r.3
deleted file mode 100644
index 37dcf1914..000000000
--- a/man3/getaliasbyname_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/setaliasent.3
diff --git a/man3/getaliasent.3 b/man3/getaliasent.3
deleted file mode 100644
index 37dcf1914..000000000
--- a/man3/getaliasent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/setaliasent.3
diff --git a/man3/getaliasent_r.3 b/man3/getaliasent_r.3
deleted file mode 100644
index 37dcf1914..000000000
--- a/man3/getaliasent_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/setaliasent.3
diff --git a/man3/getauxval.3 b/man3/getauxval.3
deleted file mode 100644
index 25a88bf35..000000000
--- a/man3/getauxval.3
+++ /dev/null
@@ -1,275 +0,0 @@
-'\" t
-.\" Copyright 2012 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" See also https://lwn.net/Articles/519085/
-.\"
-.TH getauxval 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getauxval \- retrieve a value from the auxiliary vector
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/auxv.h>
-.PP
-.BI "unsigned long getauxval(unsigned long " type );
-.fi
-.SH DESCRIPTION
-The
-.BR getauxval ()
-function retrieves values from the auxiliary vector,
-a mechanism that the kernel's ELF binary loader
-uses to pass certain information to
-user space when a program is executed.
-.PP
-Each entry in the auxiliary vector consists of a pair of values:
-a type that identifies what this entry represents,
-and a value for that type.
-Given the argument
-.IR type ,
-.BR getauxval ()
-returns the corresponding value.
-.PP
-The value returned for each
-.I type
-is given in the following list.
-Not all
-.I type
-values are present on all architectures.
-.TP
-.B AT_BASE
-The base address of the program interpreter (usually, the dynamic linker).
-.TP
-.B AT_BASE_PLATFORM
-A pointer to a string (PowerPC and MIPS only).
-On PowerPC, this identifies the real platform; may differ from
-.BR AT_PLATFORM "."
-On MIPS,
-.\" commit e585b768da111f2c2d413de6214e83bbdfee8f22
-this identifies the ISA level (since Linux 5.7).
-.TP
-.B AT_CLKTCK
-The frequency with which
-.BR times (2)
-counts.
-This value can also be obtained via
-.IR sysconf(_SC_CLK_TCK) .
-.TP
-.B AT_DCACHEBSIZE
-The data cache block size.
-.TP
-.B AT_EGID
-The effective group ID of the thread.
-.TP
-.B AT_ENTRY
-The entry address of the executable.
-.TP
-.B AT_EUID
-The effective user ID of the thread.
-.TP
-.B AT_EXECFD
-File descriptor of program.
-.TP
-.B AT_EXECFN
-A pointer to a string containing the pathname used to execute the program.
-.TP
-.B AT_FLAGS
-Flags (unused).
-.TP
-.B AT_FPUCW
-Used FPU control word (SuperH architecture only).
-This gives some information about the FPU initialization
-performed by the kernel.
-.TP
-.B AT_GID
-The real group ID of the thread.
-.TP
-.B AT_HWCAP
-An architecture and ABI dependent bit-mask whose settings
-indicate detailed processor capabilities.
-The contents of the bit mask are hardware dependent
-(for example, see the kernel source file
-.I arch/x86/include/asm/cpufeature.h
-for details relating to the Intel x86 architecture; the value
-returned is the first 32-bit word of the array described there).
-A human-readable version of the same information is available via
-.IR /proc/cpuinfo .
-.TP
-.BR AT_HWCAP2 " (since glibc 2.18)"
-Further machine-dependent hints about processor capabilities.
-.TP
-.B AT_ICACHEBSIZE
-The instruction cache block size.
-.\" .TP
-.\" .BR AT_IGNORE
-.\" .TP
-.\" .BR AT_IGNOREPPC
-.\" .TP
-.\" .BR AT_NOTELF
-.TP
-.\" Kernel commit 98a5f361b8625c6f4841d6ba013bbf0e80d08147
-.B AT_L1D_CACHEGEOMETRY
-Geometry of the L1 data cache, encoded with the cache line size in bytes
-in the bottom 16 bits and the cache associativity in the next 16 bits.
-The associativity is such that if N is the 16-bit value,
-the cache is N-way set associative.
-.TP
-.B AT_L1D_CACHESIZE
-The L1 data cache size.
-.TP
-.B AT_L1I_CACHEGEOMETRY
-Geometry of the L1 instruction cache, encoded as for
-.BR AT_L1D_CACHEGEOMETRY .
-.TP
-.B AT_L1I_CACHESIZE
-The L1 instruction cache size.
-.TP
-.B AT_L2_CACHEGEOMETRY
-Geometry of the L2 cache, encoded as for
-.BR AT_L1D_CACHEGEOMETRY .
-.TP
-.B AT_L2_CACHESIZE
-The L2 cache size.
-.TP
-.B AT_L3_CACHEGEOMETRY
-Geometry of the L3 cache, encoded as for
-.BR AT_L1D_CACHEGEOMETRY .
-.TP
-.B AT_L3_CACHESIZE
-The L3 cache size.
-.TP
-.B AT_PAGESZ
-The system page size (the same value returned by
-.IR sysconf(_SC_PAGESIZE) ).
-.TP
-.B AT_PHDR
-The address of the program headers of the executable.
-.TP
-.B AT_PHENT
-The size of program header entry.
-.TP
-.B AT_PHNUM
-The number of program headers.
-.TP
-.B AT_PLATFORM
-A pointer to a string that identifies the hardware platform
-that the program is running on.
-The dynamic linker uses this in the interpretation of
-.I rpath
-values.
-.TP
-.B AT_RANDOM
-The address of sixteen bytes containing a random value.
-.TP
-.B AT_SECURE
-Has a nonzero value if this executable should be treated securely.
-Most commonly, a nonzero value indicates that the process is
-executing a set-user-ID or set-group-ID binary
-(so that its real and effective UIDs or GIDs differ from one another),
-or that it gained capabilities by executing
-a binary file that has capabilities (see
-.BR capabilities (7)).
-Alternatively,
-a nonzero value may be triggered by a Linux Security Module.
-When this value is nonzero,
-the dynamic linker disables the use of certain environment variables (see
-.BR ld\-linux.so (8))
-and glibc changes other aspects of its behavior.
-(See also
-.BR secure_getenv (3).)
-.TP
-.B AT_SYSINFO
-The entry point to the system call function in the vDSO.
-Not present/needed on all architectures (e.g., absent on x86-64).
-.TP
-.B AT_SYSINFO_EHDR
-The address of a page containing the virtual Dynamic Shared Object (vDSO)
-that the kernel creates in order to provide fast implementations of
-certain system calls.
-.TP
-.B AT_UCACHEBSIZE
-The unified cache block size.
-.TP
-.B AT_UID
-The real user ID of the thread.
-.SH RETURN VALUE
-On success,
-.BR getauxval ()
-returns the value corresponding to
-.IR type .
-If
-.I type
-is not found, 0 is returned.
-.SH ERRORS
-.TP
-.BR ENOENT " (since glibc 2.19)"
-.\" commit b9ab448f980e296eac21ac65f53783967cc6037b
-No entry corresponding to
-.I type
-could be found in the auxiliary vector.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getauxval ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH HISTORY
-glibc 2.16.
-.SH NOTES
-The primary consumer of the information in the auxiliary vector
-is the dynamic linker,
-.BR ld\-linux.so (8).
-The auxiliary vector is a convenient and efficient shortcut
-that allows the kernel to communicate a certain set of standard
-information that the dynamic linker usually or always needs.
-In some cases, the same information could be obtained by system calls,
-but using the auxiliary vector is cheaper.
-.PP
-The auxiliary vector resides just above the argument list and
-environment in the process address space.
-The auxiliary vector supplied to a program can be viewed by setting the
-.B LD_SHOW_AUXV
-environment variable when running a program:
-.PP
-.in +4n
-.EX
-$ LD_SHOW_AUXV=1 sleep 1
-.EE
-.in
-.PP
-The auxiliary vector of any process can (subject to file permissions)
-be obtained via
-.IR /proc/ pid /auxv ;
-see
-.BR proc (5)
-for more information.
-.SH BUGS
-Before the addition of the
-.B ENOENT
-error in glibc 2.19,
-there was no way to unambiguously distinguish the case where
-.I type
-could not be found from the case where the value corresponding to
-.I type
-was zero.
-.SH SEE ALSO
-.BR execve (2),
-.BR secure_getenv (3),
-.BR vdso (7),
-.BR ld\-linux.so (8)
diff --git a/man3/getc.3 b/man3/getc.3
deleted file mode 100644
index 2f6585a10..000000000
--- a/man3/getc.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fgetc.3
diff --git a/man3/getc_unlocked.3 b/man3/getc_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/getc_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/getchar.3 b/man3/getchar.3
deleted file mode 100644
index 2f6585a10..000000000
--- a/man3/getchar.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fgetc.3
diff --git a/man3/getchar_unlocked.3 b/man3/getchar_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/getchar_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/getcontext.3 b/man3/getcontext.3
deleted file mode 100644
index 3a35afca1..000000000
--- a/man3/getcontext.3
+++ /dev/null
@@ -1,204 +0,0 @@
-'\" t
-.\" Copyright (C) 2001 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH getcontext 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getcontext, setcontext \- get or set the user context
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <ucontext.h>
-.PP
-.BI "int getcontext(ucontext_t *" ucp );
-.BI "int setcontext(const ucontext_t *" ucp );
-.fi
-.SH DESCRIPTION
-In a System V-like environment, one has the two types
-.I mcontext_t
-and
-.I ucontext_t
-defined in
-.I <ucontext.h>
-and the four functions
-.BR getcontext (),
-.BR setcontext (),
-.BR makecontext (3),
-and
-.BR swapcontext (3)
-that allow user-level context switching between multiple
-threads of control within a process.
-.PP
-The
-.I mcontext_t
-type is machine-dependent and opaque.
-The
-.I ucontext_t
-type is a structure that has at least
-the following fields:
-.PP
-.in +4n
-.EX
-typedef struct ucontext_t {
- struct ucontext_t *uc_link;
- sigset_t uc_sigmask;
- stack_t uc_stack;
- mcontext_t uc_mcontext;
- ...
-} ucontext_t;
-.EE
-.in
-.PP
-with
-.I sigset_t
-and
-.I stack_t
-defined in
-.IR <signal.h> .
-Here
-.I uc_link
-points to the context that will be resumed
-when the current context terminates (in case the current context
-was created using
-.BR makecontext (3)),
-.I uc_sigmask
-is the
-set of signals blocked in this context (see
-.BR sigprocmask (2)),
-.I uc_stack
-is the stack used by this context (see
-.BR sigaltstack (2)),
-and
-.I uc_mcontext
-is the
-machine-specific representation of the saved context,
-that includes the calling thread's machine registers.
-.PP
-The function
-.BR getcontext ()
-initializes the structure
-pointed to by
-.I ucp
-to the currently active context.
-.PP
-The function
-.BR setcontext ()
-restores the user context
-pointed to by
-.IR ucp .
-A successful call does not return.
-The context should have been obtained by a call of
-.BR getcontext (),
-or
-.BR makecontext (3),
-or received as the third argument to a signal
-handler (see the discussion of the
-.B SA_SIGINFO
-flag in
-.BR sigaction (2)).
-.PP
-If the context was obtained by a call of
-.BR getcontext (),
-program execution continues as if this call just returned.
-.PP
-If the context was obtained by a call of
-.BR makecontext (3),
-program execution continues by a call to the function
-.I func
-specified as the second argument of that call to
-.BR makecontext (3).
-When the function
-.I func
-returns, we continue with the
-.I uc_link
-member of the structure
-.I ucp
-specified as the
-first argument of that call to
-.BR makecontext (3).
-When this member is NULL, the thread exits.
-.PP
-If the context was obtained by a call to a signal handler,
-then old standard text says that "program execution continues with the
-program instruction following the instruction interrupted
-by the signal".
-However, this sentence was removed in SUSv2,
-and the present verdict is "the result is unspecified".
-.SH RETURN VALUE
-When successful,
-.BR getcontext ()
-returns 0 and
-.BR setcontext ()
-does not return.
-On error, both return \-1 and set
-.I errno
-to indicate the error.
-.SH ERRORS
-None defined.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getcontext (),
-.BR setcontext ()
-T} Thread safety MT-Safe race:ucp
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-SUSv2, POSIX.1-2001.
-.PP
-POSIX.1-2008 removes these functions,
-citing portability issues, and
-recommending that applications be rewritten to use POSIX threads instead.
-.SH NOTES
-The earliest incarnation of this mechanism was the
-.BR setjmp (3)/\c
-.BR longjmp (3)
-mechanism.
-Since that does not define
-the handling of the signal context, the next stage was the
-.BR sigsetjmp (3)/\c
-.BR siglongjmp (3)
-pair.
-The present mechanism gives much more control.
-On the other hand,
-there is no easy way to detect whether a return from
-.BR getcontext ()
-is from the first call, or via a
-.BR setcontext ()
-call.
-The user has to invent their own bookkeeping device, and a register
-variable won't do since registers are restored.
-.PP
-When a signal occurs, the current user context is saved and
-a new context is created by the kernel for the signal handler.
-Do not leave the handler using
-.BR longjmp (3):
-it is undefined what would happen with contexts.
-Use
-.BR siglongjmp (3)
-or
-.BR setcontext ()
-instead.
-.SH SEE ALSO
-.BR sigaction (2),
-.BR sigaltstack (2),
-.BR sigprocmask (2),
-.BR longjmp (3),
-.BR makecontext (3),
-.BR sigsetjmp (3),
-.BR signal (7)
diff --git a/man3/getcwd.3 b/man3/getcwd.3
deleted file mode 100644
index 6ad829220..000000000
--- a/man3/getcwd.3
+++ /dev/null
@@ -1,312 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Wed Jul 21 22:35:42 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 18 Mar 1996 by Martin Schulze (joey@infodrom.north.de):
-.\" Corrected description of getwd().
-.\" Modified Sat Aug 21 12:32:12 MET 1999 by aeb - applied fix by aj
-.\" Modified Mon Dec 11 13:32:51 MET 2000 by aeb
-.\" Modified Thu Apr 22 03:49:15 CEST 2002 by Roger Luethi <rl@hellgate.ch>
-.\"
-.TH getcwd 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getcwd, getwd, get_current_dir_name \- get current working directory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "char *getcwd(char " buf [. size "], size_t " size );
-.B "char *get_current_dir_name(void);"
-.PP
-.BI "[[deprecated]] char *getwd(char " buf [PATH_MAX]);
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR get_current_dir_name ():
-.nf
- _GNU_SOURCE
-.fi
-.PP
-.BR getwd ():
-.nf
- Since glibc 2.12:
- (_XOPEN_SOURCE >= 500) && ! (_POSIX_C_SOURCE >= 200809L)
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE
- Before glibc 2.12:
- _BSD_SOURCE || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
-.fi
-.SH DESCRIPTION
-These functions return a null-terminated string containing an
-absolute pathname that is the current working directory of
-the calling process.
-The pathname is returned as the function result and via the argument
-.IR buf ,
-if present.
-.PP
-The
-.BR getcwd ()
-function copies an absolute pathname of the current working directory
-to the array pointed to by
-.IR buf ,
-which is of length
-.IR size .
-.PP
-If the length of the absolute pathname of the current working directory,
-including the terminating null byte, exceeds
-.I size
-bytes, NULL is returned, and
-.I errno
-is set to
-.BR ERANGE ;
-an application should check for this error, and allocate a larger
-buffer if necessary.
-.PP
-As an extension to the POSIX.1-2001 standard, glibc's
-.BR getcwd ()
-allocates the buffer dynamically using
-.BR malloc (3)
-if
-.I buf
-is NULL.
-In this case, the allocated buffer has the length
-.I size
-unless
-.I size
-is zero, when
-.I buf
-is allocated as big as necessary.
-The caller should
-.BR free (3)
-the returned buffer.
-.PP
-.BR get_current_dir_name ()
-will
-.BR malloc (3)
-an array big enough to hold the absolute pathname of
-the current working directory.
-If the environment
-variable
-.B PWD
-is set, and its value is correct, then that value will be returned.
-The caller should
-.BR free (3)
-the returned buffer.
-.PP
-.BR getwd ()
-does not
-.BR malloc (3)
-any memory.
-The
-.I buf
-argument should be a pointer to an array at least
-.B PATH_MAX
-bytes long.
-If the length of the absolute pathname of the current working directory,
-including the terminating null byte, exceeds
-.B PATH_MAX
-bytes, NULL is returned, and
-.I errno
-is set to
-.BR ENAMETOOLONG .
-(Note that on some systems,
-.B PATH_MAX
-may not be a compile-time constant;
-furthermore, its value may depend on the filesystem, see
-.BR pathconf (3).)
-For portability and security reasons, use of
-.BR getwd ()
-is deprecated.
-.SH RETURN VALUE
-On success, these functions return a pointer to a string containing
-the pathname of the current working directory.
-In the case of
-.BR getcwd ()
-and
-.BR getwd ()
-this is the same value as
-.IR buf .
-.PP
-On failure, these functions return NULL, and
-.I errno
-is set to indicate the error.
-The contents of the array pointed to by
-.I buf
-are undefined on error.
-.SH ERRORS
-.TP
-.B EACCES
-Permission to read or search a component of the filename was denied.
-.TP
-.B EFAULT
-.I buf
-points to a bad address.
-.TP
-.B EINVAL
-The
-.I size
-argument is zero and
-.I buf
-is not a null pointer.
-.TP
-.B EINVAL
-.BR getwd ():
-.I buf
-is NULL.
-.TP
-.B ENAMETOOLONG
-.BR getwd ():
-The size of the null-terminated absolute pathname string exceeds
-.B PATH_MAX
-bytes.
-.TP
-.B ENOENT
-The current working directory has been unlinked.
-.TP
-.B ENOMEM
-Out of memory.
-.TP
-.B ERANGE
-The
-.I size
-argument is less than the length of the absolute pathname of the
-working directory, including the terminating null byte.
-You need to allocate a bigger array and try again.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getcwd (),
-.BR getwd ()
-T} Thread safety MT-Safe
-T{
-.BR get_current_dir_name ()
-T} Thread safety MT-Safe env
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-POSIX.1-2001 leaves the behavior of
-.BR getcwd ()
-unspecified if
-.I buf
-is NULL.
-.PP
-POSIX.1-2001
-does not define any errors for
-.BR getwd ().
-.SH VERSIONS
-.SS C library/kernel differences
-On Linux, the kernel provides a
-.BR getcwd ()
-system call, which the functions described in this page will use if possible.
-The system call takes the same arguments as the library function
-of the same name, but is limited to returning at most
-.B PATH_MAX
-bytes.
-(Before Linux 3.12,
-.\" commit 3272c544da48f8915a0e34189182aed029bd0f2b
-the limit on the size of the returned pathname was the system page size.
-On many architectures,
-.B PATH_MAX
-and the system page size are both 4096 bytes,
-but a few architectures have a larger page size.)
-If the length of the pathname of the current working directory
-exceeds this limit, then the system call fails with the error
-.BR ENAMETOOLONG .
-In this case, the library functions fall back to
-a (slower) alternative implementation that returns the full pathname.
-.PP
-Following a change in Linux 2.6.36,
-.\" commit 8df9d1a4142311c084ffeeacb67cd34d190eff74
-the pathname returned by the
-.BR getcwd ()
-system call will be prefixed with the string "(unreachable)"
-if the current directory is not below the root directory of the current
-process (e.g., because the process set a new filesystem root using
-.BR chroot (2)
-without changing its current directory into the new root).
-Such behavior can also be caused by an unprivileged user by changing
-the current directory into another mount namespace.
-When dealing with pathname from untrusted sources, callers of the
-functions described in this page
-should consider checking whether the returned pathname starts
-with '/' or '(' to avoid misinterpreting an unreachable path
-as a relative pathname.
-.SH STANDARDS
-.TP
-.BR getcwd ()
-POSIX.1-2008.
-.TP
-.BR get_current_dir_name ()
-GNU.
-.TP
-.BR getwd ()
-None.
-.SH HISTORY
-.TP
-.BR getcwd ()
-POSIX.1-2001.
-.TP
-.BR getwd ()
-POSIX.1-2001, but marked LEGACY.
-Removed in POSIX.1-2008.
-Use
-.BR getcwd ()
-instead.
-.PP
-Under Linux, these functions make use of the
-.BR getcwd ()
-system call (available since Linux 2.1.92).
-On older systems they would query
-.IR /proc/self/cwd .
-If both system call and proc filesystem are missing, a
-generic implementation is called.
-Only in that case can
-these calls fail under Linux with
-.BR EACCES .
-.SH NOTES
-These functions are often used to save the location of the current working
-directory for the purpose of returning to it later.
-Opening the current
-directory (".") and calling
-.BR fchdir (2)
-to return is usually a faster and more reliable alternative when sufficiently
-many file descriptors are available, especially on platforms other than Linux.
-.SH BUGS
-Since the Linux 2.6.36 change that added "(unreachable)" in the
-circumstances described above, the glibc implementation of
-.BR getcwd ()
-has failed to conform to POSIX and returned a relative pathname when the API
-contract requires an absolute pathname.
-With glibc 2.27 onwards this is corrected;
-calling
-.BR getcwd ()
-from such a pathname will now result in failure with
-.BR ENOENT .
-.SH SEE ALSO
-.BR pwd (1),
-.BR chdir (2),
-.BR fchdir (2),
-.BR open (2),
-.BR unlink (2),
-.BR free (3),
-.BR malloc (3)
diff --git a/man3/getdate.3 b/man3/getdate.3
deleted file mode 100644
index 476c9a96f..000000000
--- a/man3/getdate.3
+++ /dev/null
@@ -1,317 +0,0 @@
-'\" t
-.\" Copyright 2001 walter harms (walter.harms@informatik.uni-oldenburg.de)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified, 2001-12-26, aeb
-.\" 2008-09-07, mtk, Various rewrites; added an example program.
-.\"
-.TH getdate 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getdate, getdate_r \- convert a date-plus-time string to broken-down time
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B "#include <time.h>"
-.PP
-.BI "struct tm *getdate(const char *" string );
-.PP
-.B "extern int getdate_err;"
-.PP
-.BI "int getdate_r(const char *restrict " string ", struct tm *restrict " res );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getdate ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
-.fi
-.PP
-.BR getdate_r ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The function
-.BR getdate ()
-converts a string representation of a date and time,
-contained in the buffer pointed to by
-.IR string ,
-into a broken-down time.
-The broken-down time is stored in a
-.I tm
-structure, and a pointer to this
-structure is returned as the function result.
-This
-.I tm
-structure is allocated in static storage,
-and consequently it will be overwritten by further calls to
-.BR getdate ().
-.PP
-In contrast to
-.BR strptime (3),
-(which has a
-.I format
-argument),
-.BR getdate ()
-uses the formats found in the file
-whose full pathname is given in the environment variable
-.BR DATEMSK .
-The first line in the file that matches the given input string
-is used for the conversion.
-.PP
-The matching is done case insensitively.
-Superfluous whitespace, either in the pattern or in the string to
-be converted, is ignored.
-.PP
-The conversion specifications that a pattern can contain are those given for
-.BR strptime (3).
-One more conversion specification is specified in POSIX.1-2001:
-.TP
-.B %Z
-Timezone name.
-.\" FIXME Is it (still) true that %Z is not supported in glibc?
-.\" Looking at the glibc 2.21 source code, where the implementation uses
-.\" strptime(), suggests that it might be supported.
-This is not implemented in glibc.
-.PP
-When
-.B %Z
-is given, the structure containing the broken-down time
-is initialized with values corresponding to the current
-time in the given timezone.
-Otherwise, the structure is initialized to the broken-down time
-corresponding to the current local time (as by a call to
-.BR localtime (3)).
-.PP
-When only the day of the week is given,
-the day is taken to be the first such day
-on or after today.
-.PP
-When only the month is given (and no year), the month is taken to
-be the first such month equal to or after the current month.
-If no day is given, it is the first day of the month.
-.PP
-When no hour, minute, and second are given, the current
-hour, minute, and second are taken.
-.PP
-If no date is given, but we know the hour, then that hour is taken
-to be the first such hour equal to or after the current hour.
-.PP
-.BR getdate_r ()
-is a GNU extension that provides a reentrant version of
-.BR getdate ().
-Rather than using a global variable to report errors and a static buffer
-to return the broken down time,
-it returns errors via the function result value,
-and returns the resulting broken-down time in the
-caller-allocated buffer pointed to by the argument
-.IR res .
-.SH RETURN VALUE
-When successful,
-.BR getdate ()
-returns a pointer to a
-.IR "struct tm" .
-Otherwise, it returns NULL and sets the global variable
-.I getdate_err
-to one of the error numbers shown below.
-Changes to
-.I errno
-are unspecified.
-.PP
-On success
-.BR getdate_r ()
-returns 0;
-on error it returns one of the error numbers shown below.
-.SH ERRORS
-The following errors are returned via
-.I getdate_err
-(for
-.BR getdate ())
-or as the function result (for
-.BR getdate_r ()):
-.TP 4n
-.B 1
-The
-.B DATEMSK
-environment variable is not defined, or its value is an empty string.
-.TP
-.B 2
-The template file specified by
-.B DATEMSK
-cannot be opened for reading.
-.TP
-.B 3
-Failed to get file status information.
-.\" stat()
-.TP
-.B 4
-The template file is not a regular file.
-.TP
-.B 5
-An error was encountered while reading the template file.
-.TP
-.B 6
-Memory allocation failed (not enough memory available).
-.\" Error 6 doesn't seem to occur in glibc
-.TP
-.B 7
-There is no line in the file that matches the input.
-.TP
-.B 8
-Invalid input specification.
-.SH ENVIRONMENT
-.TP
-.B DATEMSK
-File containing format patterns.
-.TP
-.BR TZ ", " LC_TIME
-Variables used by
-.BR strptime (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR getdate ()
-T} Thread safety T{
-MT-Unsafe race:getdate env locale
-T}
-T{
-.BR getdate_r ()
-T} Thread safety T{
-MT-Safe env locale
-T}
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The POSIX.1 specification for
-.BR strptime (3)
-contains conversion specifications using the
-.B %E
-or
-.B %O
-modifier, while such specifications are not given for
-.BR getdate ().
-In glibc,
-.BR getdate ()
-is implemented using
-.BR strptime (3),
-so that precisely the same conversions are supported by both.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH EXAMPLES
-The program below calls
-.BR getdate ()
-for each of its command-line arguments,
-and for each call displays the values in the fields of the returned
-.I tm
-structure.
-The following shell session demonstrates the operation of the program:
-.PP
-.in +4n
-.EX
-.RB "$" " TFILE=$PWD/tfile"
-.RB "$" " echo \[aq]%A\[aq] > $TFILE " " # Full name of the day of the week"
-.RB "$" " echo \[aq]%T\[aq] >> $TFILE" " # Time (HH:MM:SS)"
-.RB "$" " echo \[aq]%F\[aq] >> $TFILE" " # ISO date (YYYY\-MM\-DD)"
-.RB "$" " date"
-.RB "$" " export DATEMSK=$TFILE"
-.RB "$" " ./a.out Tuesday \[aq]2009\-12\-28\[aq] \[aq]12:22:33\[aq]"
-Sun Sep 7 06:03:36 CEST 2008
-Call 1 ("Tuesday") succeeded:
- tm_sec = 36
- tm_min = 3
- tm_hour = 6
- tm_mday = 9
- tm_mon = 8
- tm_year = 108
- tm_wday = 2
- tm_yday = 252
- tm_isdst = 1
-Call 2 ("2009\-12\-28") succeeded:
- tm_sec = 36
- tm_min = 3
- tm_hour = 6
- tm_mday = 28
- tm_mon = 11
- tm_year = 109
- tm_wday = 1
- tm_yday = 361
- tm_isdst = 0
-Call 3 ("12:22:33") succeeded:
- tm_sec = 33
- tm_min = 22
- tm_hour = 12
- tm_mday = 7
- tm_mon = 8
- tm_year = 108
- tm_wday = 0
- tm_yday = 250
- tm_isdst = 1
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (getdate.c)
-.EX
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-\&
-int
-main(int argc, char *argv[])
-{
- struct tm *tmp;
-\&
- for (size_t j = 1; j < argc; j++) {
- tmp = getdate(argv[j]);
-\&
- if (tmp == NULL) {
- printf("Call %zu failed; getdate_err = %d\en",
- j, getdate_err);
- continue;
- }
-\&
- printf("Call %zu (\e"%s\e") succeeded:\en", j, argv[j]);
- printf(" tm_sec = %d\en", tmp\->tm_sec);
- printf(" tm_min = %d\en", tmp\->tm_min);
- printf(" tm_hour = %d\en", tmp\->tm_hour);
- printf(" tm_mday = %d\en", tmp\->tm_mday);
- printf(" tm_mon = %d\en", tmp\->tm_mon);
- printf(" tm_year = %d\en", tmp\->tm_year);
- printf(" tm_wday = %d\en", tmp\->tm_wday);
- printf(" tm_yday = %d\en", tmp\->tm_yday);
- printf(" tm_isdst = %d\en", tmp\->tm_isdst);
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR time (2),
-.BR localtime (3),
-.BR setlocale (3),
-.BR strftime (3),
-.BR strptime (3)
diff --git a/man3/getdate_err.3 b/man3/getdate_err.3
deleted file mode 100644
index c78ed340c..000000000
--- a/man3/getdate_err.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getdate.3
diff --git a/man3/getdate_r.3 b/man3/getdate_r.3
deleted file mode 100644
index c78ed340c..000000000
--- a/man3/getdate_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getdate.3
diff --git a/man3/getdelim.3 b/man3/getdelim.3
deleted file mode 100644
index caf4e4894..000000000
--- a/man3/getdelim.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getline.3
diff --git a/man3/getdirentries.3 b/man3/getdirentries.3
deleted file mode 100644
index 6d28b0508..000000000
--- a/man3/getdirentries.3
+++ /dev/null
@@ -1,83 +0,0 @@
-'\" t
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
-.\" Portions extracted from /usr/include/dirent.h are:
-.\" Copyright 1991, 1992 Free Software Foundation
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH getdirentries 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getdirentries \- get directory entries in a filesystem-independent format
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <dirent.h>
-.PP
-.BI "ssize_t getdirentries(int " fd ", char " buf "[restrict ." nbytes "], \
-size_t " nbytes ,
-.BI " off_t *restrict " basep );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getdirentries ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-Read directory entries from the directory specified by
-.I fd
-into
-.IR buf .
-At most
-.I nbytes
-are read.
-Reading starts at offset
-.IR *basep ,
-and
-.I *basep
-is updated with the new position after reading.
-.SH RETURN VALUE
-.BR getdirentries ()
-returns the number of bytes read or zero when at the end of the directory.
-If an error occurs, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-See the Linux library source code for details.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getdirentries ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-BSD.
-.SH NOTES
-Use
-.BR opendir (3)
-and
-.BR readdir (3)
-instead.
-.SH SEE ALSO
-.BR lseek (2),
-.BR open (2)
diff --git a/man3/getdtablesize.3 b/man3/getdtablesize.3
deleted file mode 100644
index 826fa9a2b..000000000
--- a/man3/getdtablesize.3
+++ /dev/null
@@ -1,91 +0,0 @@
-'\" t
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 2002-04-15 by Roger Luethi <rl@hellgate.ch> and aeb
-.\"
-.TH getdtablesize 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getdtablesize \- get file descriptor table size
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.B int getdtablesize(void);
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getdtablesize ():
-.nf
- Since glibc 2.20:
- _DEFAULT_SOURCE || ! (_POSIX_C_SOURCE >= 200112L)
- glibc 2.12 to glibc 2.19:
- _BSD_SOURCE || ! (_POSIX_C_SOURCE >= 200112L)
- Before glibc 2.12:
- _BSD_SOURCE || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
-.fi
-.SH DESCRIPTION
-.BR getdtablesize ()
-returns the maximum number of files a process can have open,
-one more than the largest possible value for a file descriptor.
-.SH RETURN VALUE
-The current limit on the number of open files per process.
-.SH ERRORS
-On Linux,
-.BR getdtablesize ()
-can return any of the errors described for
-.BR getrlimit (2);
-see NOTES below.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getdtablesize ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The glibc version of
-.BR getdtablesize ()
-calls
-.BR getrlimit (2)
-and returns the current
-.B RLIMIT_NOFILE
-limit, or
-.B OPEN_MAX
-when that fails.
-.\" The libc4 and libc5 versions return
-.\" .B OPEN_MAX
-.\" (set to 256 since Linux 0.98.4).
-.PP
-Portable applications should employ
-.I sysconf(_SC_OPEN_MAX)
-instead of this call.
-.SH STANDARDS
-None.
-.SH HISTORY
-SVr4, 4.4BSD
-(first appeared in 4.2BSD).
-.SH SEE ALSO
-.BR close (2),
-.BR dup (2),
-.BR getrlimit (2),
-.BR open (2)
diff --git a/man3/getentropy.3 b/man3/getentropy.3
deleted file mode 100644
index dc06aa3f5..000000000
--- a/man3/getentropy.3
+++ /dev/null
@@ -1,103 +0,0 @@
-.\" Copyright (C) 2017, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH getentropy 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getentropy \- fill a buffer with random bytes
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int getentropy(void " buffer [. length "], size_t " length );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getentropy ():
-.nf
- _DEFAULT_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR getentropy ()
-function writes
-.I length
-bytes of high-quality random data to the buffer starting
-at the location pointed to by
-.IR buffer .
-The maximum permitted value for the
-.I length
-argument is 256.
-.PP
-A successful call to
-.BR getentropy ()
-always provides the requested number of bytes of entropy.
-.SH RETURN VALUE
-On success, this function returns zero.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EFAULT
-Part or all of the buffer specified by
-.I buffer
-and
-.I length
-is not in valid addressable memory.
-.TP
-.B EIO
-.I length
-is greater than 256.
-.TP
-.B EIO
-An unspecified error occurred while trying to overwrite
-.I buffer
-with random data.
-.TP
-.B ENOSYS
-This kernel version does not implement the
-.BR getrandom (2)
-system call required to implement this function.
-.SH STANDARDS
-None.
-.SH HISTORY
-glibc 2.25.
-OpenBSD.
-.SH NOTES
-The
-.BR getentropy ()
-function is implemented using
-.BR getrandom (2).
-.PP
-Whereas the glibc wrapper makes
-.BR getrandom (2)
-a cancelation point,
-.BR getentropy ()
-is not a cancelation point.
-.PP
-.BR getentropy ()
-is also declared in
-.BR <sys/random.h> .
-(No feature test macro need be defined to obtain the declaration from
-that header file.)
-.PP
-A call to
-.BR getentropy ()
-may block if the system has just booted and the kernel has
-not yet collected enough randomness to initialize the entropy pool.
-In this case,
-.BR getentropy ()
-will keep blocking even if a signal is handled,
-and will return only once the entropy pool has been initialized.
-.SH SEE ALSO
-.BR getrandom (2),
-.BR urandom (4),
-.BR random (7)
diff --git a/man3/getenv.3 b/man3/getenv.3
deleted file mode 100644
index edf7d9ec8..000000000
--- a/man3/getenv.3
+++ /dev/null
@@ -1,144 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright (C) 2007, 2012 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's "POSIX Programmer's Guide" (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 19:30:29 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Fri Feb 14 21:47:50 1997 by Andries Brouwer (aeb@cwi.nl)
-.\"
-.TH getenv 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getenv, secure_getenv \- get an environment variable
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "char *getenv(const char *" name );
-.BI "char *secure_getenv(const char *" name );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR secure_getenv ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR getenv ()
-function searches the environment list to find the
-environment variable
-.IR name ,
-and returns a pointer to the corresponding
-.I value
-string.
-.PP
-The GNU-specific
-.BR secure_getenv ()
-function is just like
-.BR getenv ()
-except that it returns NULL in cases where "secure execution" is required.
-Secure execution is required if one of the following conditions
-was true when the program run by the calling process was loaded:
-.IP \[bu] 3
-the process's effective user ID did not match its real user ID or
-the process's effective group ID did not match its real group ID
-(typically this is the result of executing a set-user-ID or
-set-group-ID program);
-.IP \[bu]
-the effective capability bit was set on the executable file; or
-.IP \[bu]
-the process has a nonempty permitted capability set.
-.PP
-Secure execution may also be required if triggered
-by some Linux security modules.
-.PP
-The
-.BR secure_getenv ()
-function is intended for use in general-purpose libraries
-to avoid vulnerabilities that could occur if
-set-user-ID or set-group-ID programs accidentally
-trusted the environment.
-.SH RETURN VALUE
-The
-.BR getenv ()
-function returns a pointer to the value in the
-environment, or NULL if there is no match.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getenv (),
-.BR secure_getenv ()
-T} Thread safety MT-Safe env
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR getenv ()
-C11, POSIX.1-2008.
-.TP
-.BR secure_getenv ()
-GNU.
-.SH HISTORY
-.TP
-.BR getenv ()
-POSIX.1-2001, C89, C99, SVr4, 4.3BSD.
-.TP
-.BR secure_getenv ()
-glibc 2.17.
-.SH NOTES
-The strings in the environment list are of the form \fIname=value\fP.
-.PP
-As typically implemented,
-.BR getenv ()
-returns a pointer to a string within the environment list.
-The caller must take care not to modify this string,
-since that would change the environment of the process.
-.PP
-The implementation of
-.BR getenv ()
-is not required to be reentrant.
-The string pointed to by the return value of
-.BR getenv ()
-may be statically allocated,
-and can be modified by a subsequent call to
-.BR getenv (),
-.BR putenv (3),
-.BR setenv (3),
-or
-.BR unsetenv (3).
-.PP
-The "secure execution" mode of
-.BR secure_getenv ()
-is controlled by the
-.B AT_SECURE
-flag contained in the auxiliary vector passed from the kernel to user space.
-.SH SEE ALSO
-.BR clearenv (3),
-.BR getauxval (3),
-.BR putenv (3),
-.BR setenv (3),
-.BR unsetenv (3),
-.BR capabilities (7),
-.BR environ (7)
diff --git a/man3/getfsent.3 b/man3/getfsent.3
deleted file mode 100644
index 8d7f84609..000000000
--- a/man3/getfsent.3
+++ /dev/null
@@ -1,152 +0,0 @@
-'\" t
-.\" Copyright (C) 2002 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Inspired by a page written by Walter Harms.
-.\"
-.TH getfsent 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getfsent, getfsspec, getfsfile, setfsent, endfsent \- handle fstab entries
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <fstab.h>
-.PP
-.B "int setfsent(void);"
-.B "struct fstab *getfsent(void);"
-.B "void endfsent(void);"
-.PP
-.BI "struct fstab *getfsfile(const char *" mount_point );
-.BI "struct fstab *getfsspec(const char *" special_file );
-.fi
-.SH DESCRIPTION
-These functions read from the file
-.IR /etc/fstab .
-The
-.I struct fstab
-is defined by:
-.PP
-.in +4n
-.EX
-struct fstab {
- char *fs_spec; /* block device name */
- char *fs_file; /* mount point */
- char *fs_vfstype; /* filesystem type */
- char *fs_mntops; /* mount options */
- const char *fs_type; /* rw/rq/ro/sw/xx option */
- int fs_freq; /* dump frequency, in days */
- int fs_passno; /* pass number on parallel dump */
-};
-.EE
-.in
-.PP
-Here the field
-.I fs_type
-contains (on a *BSD system)
-one of the five strings "rw", "rq", "ro", "sw", "xx"
-(read-write, read-write with quota, read-only, swap, ignore).
-.PP
-The function
-.BR setfsent ()
-opens the file when required and positions it at the first line.
-.PP
-The function
-.BR getfsent ()
-parses the next line from the file.
-(After opening it when required.)
-.PP
-The function
-.BR endfsent ()
-closes the file when required.
-.PP
-The function
-.BR getfsspec ()
-searches the file from the start and returns the first entry found
-for which the
-.I fs_spec
-field matches the
-.I special_file
-argument.
-.PP
-The function
-.BR getfsfile ()
-searches the file from the start and returns the first entry found
-for which the
-.I fs_file
-field matches the
-.I mount_point
-argument.
-.SH RETURN VALUE
-Upon success, the functions
-.BR getfsent (),
-.BR getfsfile (),
-and
-.BR getfsspec ()
-return a pointer to a
-.IR "struct fstab" ,
-while
-.BR setfsent ()
-returns 1.
-Upon failure or end-of-file, these functions return NULL and 0, respectively.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR endfsent (),
-.BR setfsent ()
-T} Thread safety T{
-MT-Unsafe race:fsent
-T}
-T{
-.BR getfsent (),
-.BR getfsspec (),
-.BR getfsfile ()
-T} Thread safety T{
-MT-Unsafe race:fsent locale
-T}
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-Several operating systems have these functions, for example,
-*BSD, SunOS, Digital UNIX, AIX (which also has a
-.BR getfstype ()).
-HP-UX has functions of the same names,
-that however use a
-.I struct checklist
-instead of a
-.IR "struct fstab" ,
-and calls these functions obsolete, superseded by
-.BR getmntent (3).
-.SH STANDARDS
-None.
-.SH HISTORY
-The
-.BR getfsent ()
-function appeared in 4.0BSD; the other four functions appeared in 4.3BSD.
-.SH NOTES
-These functions are not thread-safe.
-.PP
-Since Linux allows mounting a block special device in several places,
-and since several devices can have the same mount point, where the
-last device with a given mount point is the interesting one,
-while
-.BR getfsfile ()
-and
-.BR getfsspec ()
-only return the first occurrence, these two functions are not suitable
-for use under Linux.
-.SH SEE ALSO
-.BR getmntent (3),
-.BR fstab (5)
diff --git a/man3/getfsfile.3 b/man3/getfsfile.3
deleted file mode 100644
index 1e6a3eb7e..000000000
--- a/man3/getfsfile.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getfsent.3
diff --git a/man3/getfsspec.3 b/man3/getfsspec.3
deleted file mode 100644
index 1e6a3eb7e..000000000
--- a/man3/getfsspec.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getfsent.3
diff --git a/man3/getgrent.3 b/man3/getgrent.3
deleted file mode 100644
index d48ad5b8d..000000000
--- a/man3/getgrent.3
+++ /dev/null
@@ -1,203 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 19:29:54 1993 by Rik Faith (faith@cs.unc.edu)
-.TH getgrent 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getgrent, setgrent, endgrent \- get group file entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.B #include <grp.h>
-.PP
-.B struct group *getgrent(void);
-.PP
-.B void setgrent(void);
-.B void endgrent(void);
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR setgrent ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR getgrent (),
-.BR endgrent ():
-.nf
- Since glibc 2.22:
- _XOPEN_SOURCE >= 500 || _DEFAULT_SOURCE
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- glibc 2.21 and earlier
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR getgrent ()
-function returns a pointer to a structure containing
-the broken-out fields of a record in the group database
-(e.g., the local group file
-.IR /etc/group ,
-NIS, and LDAP).
-The first time
-.BR getgrent ()
-is called,
-it returns the first entry; thereafter, it returns successive entries.
-.PP
-The
-.BR setgrent ()
-function rewinds to the beginning
-of the group database, to allow repeated scans.
-.PP
-The
-.BR endgrent ()
-function is used to close the group database
-after all processing has been performed.
-.PP
-The \fIgroup\fP structure is defined in \fI<grp.h>\fP as follows:
-.PP
-.in +4n
-.EX
-struct group {
- char *gr_name; /* group name */
- char *gr_passwd; /* group password */
- gid_t gr_gid; /* group ID */
- char **gr_mem; /* NULL\-terminated array of pointers
- to names of group members */
-};
-.EE
-.in
-.PP
-For more information about the fields of this structure, see
-.BR group (5).
-.SH RETURN VALUE
-The
-.BR getgrent ()
-function returns a pointer to a
-.I group
-structure,
-or NULL if there are no more entries or an error occurs.
-.PP
-Upon error,
-.I errno
-may be set.
-If one wants to check
-.I errno
-after the call, it should be set to zero before the call.
-.PP
-The return value may point to a static area, and may be overwritten
-by subsequent calls to
-.BR getgrent (),
-.BR getgrgid (3),
-or
-.BR getgrnam (3).
-(Do not pass the returned pointer to
-.BR free (3).)
-.SH ERRORS
-.TP
-.B EAGAIN
-The service was temporarily unavailable; try again later.
-For NSS backends in glibc
-this indicates a temporary error talking to the backend.
-The error may correct itself, retrying later is suggested.
-.TP
-.B EINTR
-A signal was caught; see
-.BR signal (7).
-.TP
-.B EIO
-I/O error.
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.\" not in POSIX
-.B ENOENT
-A necessary input file cannot be found.
-For NSS backends in glibc
-this indicates the backend is not correctly configured.
-.TP
-.B ENOMEM
-.\" not in POSIX
-Insufficient memory to allocate
-.I group
-structure.
-.TP
-.B ERANGE
-Insufficient buffer space supplied.
-.SH FILES
-.TP
-.I /etc/group
-local group database file
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR getgrent ()
-T} Thread safety T{
-MT-Unsafe race:grent
-race:grentbuf locale
-T}
-T{
-.BR setgrent (),
-.BR endgrent ()
-T} Thread safety T{
-MT-Unsafe race:grent locale
-T}
-.TE
-.hy
-.ad
-.sp 1
-.PP
-In the above table,
-.I grent
-in
-.I race:grent
-signifies that if any of the functions
-.BR setgrent (),
-.BR getgrent (),
-or
-.BR endgrent ()
-are used in parallel in different threads of a program,
-then data races could occur.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR fgetgrent (3),
-.BR getgrent_r (3),
-.BR getgrgid (3),
-.BR getgrnam (3),
-.BR getgrouplist (3),
-.BR putgrent (3),
-.BR group (5)
diff --git a/man3/getgrent_r.3 b/man3/getgrent_r.3
deleted file mode 100644
index c1bb2a5af..000000000
--- a/man3/getgrent_r.3
+++ /dev/null
@@ -1,224 +0,0 @@
-'\" t
-.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH getgrent_r 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getgrent_r, fgetgrent_r \- get group file entry reentrantly
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <grp.h>
-.PP
-.BI "int getgrent_r(struct group *restrict " gbuf ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct group **restrict " gbufp );
-.BI "int fgetgrent_r(FILE *restrict " stream ", struct group *restrict " gbuf ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct group **restrict " gbufp );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getgrent_r ():
-.nf
- _GNU_SOURCE
-.fi
-.\" FIXME . The FTM requirements seem inconsistent here. File a glibc bug?
-.PP
-.BR fgetgrent_r ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The functions
-.BR getgrent_r ()
-and
-.BR fgetgrent_r ()
-are the reentrant versions of
-.BR getgrent (3)
-and
-.BR fgetgrent (3).
-The former reads the next group entry from the stream initialized by
-.BR setgrent (3).
-The latter reads the next group entry from
-.IR stream .
-.PP
-The \fIgroup\fP structure is defined in
-.I <grp.h>
-as follows:
-.PP
-.in +4n
-.EX
-struct group {
- char *gr_name; /* group name */
- char *gr_passwd; /* group password */
- gid_t gr_gid; /* group ID */
- char **gr_mem; /* NULL\-terminated array of pointers
- to names of group members */
-};
-.EE
-.in
-.PP
-For more information about the fields of this structure, see
-.BR group (5).
-.PP
-The nonreentrant functions return a pointer to static storage,
-where this static storage contains further pointers to group
-name, password, and members.
-The reentrant functions described here return all of that in
-caller-provided buffers.
-First of all there is the buffer
-.I gbuf
-that can hold a \fIstruct group\fP.
-And next the buffer
-.I buf
-of size
-.I buflen
-that can hold additional strings.
-The result of these functions, the \fIstruct group\fP read from the stream,
-is stored in the provided buffer
-.IR *gbuf ,
-and a pointer to this \fIstruct group\fP is returned in
-.IR *gbufp .
-.SH RETURN VALUE
-On success, these functions return 0 and
-.I *gbufp
-is a pointer to the \fIstruct group\fP.
-On error, these functions return an error value and
-.I *gbufp
-is NULL.
-.SH ERRORS
-.TP
-.B ENOENT
-No more entries.
-.TP
-.B ERANGE
-Insufficient buffer space supplied.
-Try again with larger buffer.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR getgrent_r ()
-T} Thread safety T{
-MT-Unsafe race:grent locale
-T}
-T{
-.BR fgetgrent_r ()
-T} Thread safety T{
-MT-Safe
-T}
-.TE
-.hy
-.ad
-.sp 1
-In the above table,
-.I grent
-in
-.I race:grent
-signifies that if any of the functions
-.BR setgrent (3),
-.BR getgrent (3),
-.BR endgrent (3),
-or
-.BR getgrent_r ()
-are used in parallel in different threads of a program,
-then data races could occur.
-.SH VERSIONS
-Other systems use the prototype
-.PP
-.in +4n
-.EX
-struct group *getgrent_r(struct group *grp, char *buf,
- int buflen);
-.EE
-.in
-.PP
-or, better,
-.PP
-.in +4n
-.EX
-int getgrent_r(struct group *grp, char *buf, int buflen,
- FILE **gr_fp);
-.EE
-.in
-.SH STANDARDS
-GNU.
-.SH HISTORY
-These functions are done in a style resembling
-the POSIX version of functions like
-.BR getpwnam_r (3).
-.SH NOTES
-The function
-.BR getgrent_r ()
-is not really reentrant since it shares the reading position
-in the stream with all other threads.
-.SH EXAMPLES
-.\" SRC BEGIN (getgrent_r.c)
-.EX
-#define _GNU_SOURCE
-#include <grp.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#define BUFLEN 4096
-\&
-int
-main(void)
-{
- struct group grp;
- struct group *grpp;
- char buf[BUFLEN];
- int i;
-\&
- setgrent();
- while (1) {
- i = getgrent_r(&grp, buf, sizeof(buf), &grpp);
- if (i)
- break;
- printf("%s (%jd):", grpp\->gr_name, (intmax_t) grpp\->gr_gid);
- for (size_t j = 0; ; j++) {
- if (grpp\->gr_mem[j] == NULL)
- break;
- printf(" %s", grpp\->gr_mem[j]);
- }
- printf("\en");
- }
- endgrent();
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" perhaps add error checking - should use strerror_r
-.\" #include <errno.h>
-.\" #include <stdlib.h>
-.\" if (i) {
-.\" if (i == ENOENT)
-.\" break;
-.\" printf("getgrent_r: %s", strerror(i));
-.\" exit(EXIT_FAILURE);
-.\" }
-.\" SRC END
-.SH SEE ALSO
-.BR fgetgrent (3),
-.BR getgrent (3),
-.BR getgrgid (3),
-.BR getgrnam (3),
-.BR putgrent (3),
-.BR group (5)
diff --git a/man3/getgrgid.3 b/man3/getgrgid.3
deleted file mode 100644
index f9a97b451..000000000
--- a/man3/getgrgid.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getgrnam.3
diff --git a/man3/getgrgid_r.3 b/man3/getgrgid_r.3
deleted file mode 100644
index f9a97b451..000000000
--- a/man3/getgrgid_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getgrnam.3
diff --git a/man3/getgrnam.3 b/man3/getgrnam.3
deleted file mode 100644
index 390867116..000000000
--- a/man3/getgrnam.3
+++ /dev/null
@@ -1,255 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\"
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2003-11-15 by aeb
-.\"
-.TH getgrnam 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getgrnam, getgrnam_r, getgrgid, getgrgid_r \- get group file entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.B #include <grp.h>
-.PP
-.BI "struct group *getgrnam(const char *" name );
-.BI "struct group *getgrgid(gid_t " gid );
-.PP
-.BI "int getgrnam_r(const char *restrict " name \
-", struct group *restrict " grp ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct group **restrict " result );
-.BI "int getgrgid_r(gid_t " gid ", struct group *restrict " grp ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct group **restrict " result );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getgrnam_r (),
-.BR getgrgid_r ():
-.nf
- _POSIX_C_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR getgrnam ()
-function returns a pointer to a structure containing
-the broken-out fields of the record in the group database
-(e.g., the local group file
-.IR /etc/group ,
-NIS, and LDAP)
-that matches the group name
-.IR name .
-.PP
-The
-.BR getgrgid ()
-function returns a pointer to a structure containing
-the broken-out fields of the record in the group database
-that matches the group ID
-.IR gid .
-.PP
-The \fIgroup\fP structure is defined in \fI<grp.h>\fP as follows:
-.PP
-.in +4n
-.EX
-struct group {
- char *gr_name; /* group name */
- char *gr_passwd; /* group password */
- gid_t gr_gid; /* group ID */
- char **gr_mem; /* NULL\-terminated array of pointers
- to names of group members */
-};
-.EE
-.in
-.PP
-For more information about the fields of this structure, see
-.BR group (5).
-.PP
-The
-.BR getgrnam_r ()
-and
-.BR getgrgid_r ()
-functions obtain the same information as
-.BR getgrnam ()
-and
-.BR getgrgid (),
-but store the retrieved
-.I group
-structure
-in the space pointed to by
-.IR grp .
-The string fields pointed to by the members of the
-.I group
-structure are stored in the buffer
-.I buf
-of size
-.IR buflen .
-A pointer to the result (in case of success) or NULL (in case no entry
-was found or an error occurred) is stored in
-.IR *result .
-.PP
-The call
-.PP
-.in +4n
-.EX
-sysconf(_SC_GETGR_R_SIZE_MAX)
-.EE
-.in
-.PP
-returns either \-1, without changing
-.IR errno ,
-or an initial suggested size for
-.IR buf .
-(If this size is too small,
-the call fails with
-.BR ERANGE ,
-in which case the caller can retry with a larger buffer.)
-.SH RETURN VALUE
-The
-.BR getgrnam ()
-and
-.BR getgrgid ()
-functions return a pointer to a
-.I group
-structure, or NULL if the matching entry
-is not found or an error occurs.
-If an error occurs,
-.I errno
-is set to indicate the error.
-If one wants to check
-.I errno
-after the call, it should be set to zero before the call.
-.PP
-The return value may point to a static area, and may be overwritten
-by subsequent calls to
-.BR getgrent (3),
-.BR getgrgid (),
-or
-.BR getgrnam ().
-(Do not pass the returned pointer to
-.BR free (3).)
-.PP
-On success,
-.BR getgrnam_r ()
-and
-.BR getgrgid_r ()
-return zero, and set
-.I *result
-to
-.IR grp .
-If no matching group record was found,
-these functions return 0 and store NULL in
-.IR *result .
-In case of error, an error number is returned, and NULL is stored in
-.IR *result .
-.SH ERRORS
-.TP
-.BR 0 " or " ENOENT " or " ESRCH " or " EBADF " or " EPERM " or ..."
-The given
-.I name
-or
-.I gid
-was not found.
-.TP
-.B EINTR
-A signal was caught; see
-.BR signal (7).
-.TP
-.B EIO
-I/O error.
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOMEM
-.\" not in POSIX
-Insufficient memory to allocate
-.I group
-structure.
-.\" to allocate the group structure, or to allocate buffers
-.TP
-.B ERANGE
-Insufficient buffer space supplied.
-.SH FILES
-.TP
-.I /etc/group
-local group database file
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR getgrnam ()
-T} Thread safety T{
-MT-Unsafe race:grnam locale
-T}
-T{
-.BR getgrgid ()
-T} Thread safety T{
-MT-Unsafe race:grgid locale
-T}
-T{
-.BR getgrnam_r (),
-.BR getgrgid_r ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The formulation given above under "RETURN VALUE" is from POSIX.1.
-.\" POSIX.1-2001, POSIX.1-2008
-It does not call "not found" an error, hence does not specify what value
-.I errno
-might have in this situation.
-But that makes it impossible to recognize
-errors.
-One might argue that according to POSIX
-.I errno
-should be left unchanged if an entry is not found.
-Experiments on various
-UNIX-like systems show that lots of different values occur in this
-situation: 0, ENOENT, EBADF, ESRCH, EWOULDBLOCK, EPERM, and probably others.
-.\" more precisely:
-.\" AIX 5.1 - gives ESRCH
-.\" OSF1 4.0g - gives EWOULDBLOCK
-.\" libc, glibc up to glibc 2.6, Irix 6.5 - give ENOENT
-.\" since glibc 2.7 - give 0
-.\" FreeBSD 4.8, OpenBSD 3.2, NetBSD 1.6 - give EPERM
-.\" SunOS 5.8 - gives EBADF
-.\" Tru64 5.1b, HP-UX-11i, SunOS 5.7 - give 0
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR endgrent (3),
-.BR fgetgrent (3),
-.BR getgrent (3),
-.BR getpwnam (3),
-.BR setgrent (3),
-.BR group (5)
diff --git a/man3/getgrnam_r.3 b/man3/getgrnam_r.3
deleted file mode 100644
index f9a97b451..000000000
--- a/man3/getgrnam_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getgrnam.3
diff --git a/man3/getgrouplist.3 b/man3/getgrouplist.3
deleted file mode 100644
index 14cab0f79..000000000
--- a/man3/getgrouplist.3
+++ /dev/null
@@ -1,203 +0,0 @@
-'\" t
-.\" Copyright (C) 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" A few pieces remain from an earlier version written in
-.\" 2002 by Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH getgrouplist 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getgrouplist \- get list of groups to which a user belongs
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <grp.h>
-.PP
-.BI "int getgrouplist(const char *" user ", gid_t " group ,
-.BI " gid_t *" groups ", int *" ngroups );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getgrouplist ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR getgrouplist ()
-function scans the group database (see
-.BR group (5))
-to obtain the list of groups that
-.I user
-belongs to.
-Up to
-.I *ngroups
-of these groups are returned in the array
-.IR groups .
-.PP
-If it was not among the groups defined for
-.I user
-in the group database, then
-.I group
-is included in the list of groups returned by
-.BR getgrouplist ();
-typically this argument is specified as the group ID from
-the password record for
-.IR user .
-.PP
-The
-.I ngroups
-argument is a value-result argument:
-on return it always contains the number of groups found for
-.IR user ,
-including
-.IR group ;
-this value may be greater than the number of groups stored in
-.IR groups .
-.SH RETURN VALUE
-If the number of groups of which
-.I user
-is a member is less than or equal to
-.IR *ngroups ,
-then the value
-.I *ngroups
-is returned.
-.PP
-If the user is a member of more than
-.I *ngroups
-groups, then
-.BR getgrouplist ()
-returns \-1.
-In this case, the value returned in
-.I *ngroups
-can be used to resize the buffer passed to a further call to
-.BR getgrouplist ().
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getgrouplist ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-glibc 2.2.4.
-.SH BUGS
-Before glibc 2.3.3,
-the implementation of this function contains a buffer-overrun bug:
-it returns the complete list of groups for
-.I user
-in the array
-.IR groups ,
-even when the number of groups exceeds
-.IR *ngroups .
-.SH EXAMPLES
-The program below displays the group list for the user named in its
-first command-line argument.
-The second command-line argument specifies the
-.I ngroups
-value to be supplied to
-.BR getgrouplist ().
-The following shell session shows examples of the use of this program:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out cecilia 0"
-getgrouplist() returned \-1; ngroups = 3
-.RB "$" " ./a.out cecilia 3"
-ngroups = 3
-16 (dialout)
-33 (video)
-100 (users)
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (getgrouplist.c)
-.EX
-#include <grp.h>
-#include <pwd.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int ngroups;
- struct passwd *pw;
- struct group *gr;
- gid_t *groups;
-\&
- if (argc != 3) {
- fprintf(stderr, "Usage: %s <user> <ngroups>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- ngroups = atoi(argv[2]);
-\&
- groups = malloc(sizeof(*groups) * ngroups);
- if (groups == NULL) {
- perror("malloc");
- exit(EXIT_FAILURE);
- }
-\&
- /* Fetch passwd structure (contains first group ID for user). */
-\&
- pw = getpwnam(argv[1]);
- if (pw == NULL) {
- perror("getpwnam");
- exit(EXIT_SUCCESS);
- }
-\&
- /* Retrieve group list. */
-\&
- if (getgrouplist(argv[1], pw\->pw_gid, groups, &ngroups) == \-1) {
- fprintf(stderr, "getgrouplist() returned \-1; ngroups = %d\en",
- ngroups);
- exit(EXIT_FAILURE);
- }
-\&
- /* Display list of retrieved groups, along with group names. */
-\&
- fprintf(stderr, "ngroups = %d\en", ngroups);
- for (size_t j = 0; j < ngroups; j++) {
- printf("%d", groups[j]);
- gr = getgrgid(groups[j]);
- if (gr != NULL)
- printf(" (%s)", gr\->gr_name);
- printf("\en");
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR getgroups (2),
-.BR setgroups (2),
-.BR getgrent (3),
-.BR group_member (3),
-.BR group (5),
-.BR passwd (5)
diff --git a/man3/gethostbyaddr.3 b/man3/gethostbyaddr.3
deleted file mode 100644
index 7d0fb4b7c..000000000
--- a/man3/gethostbyaddr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/gethostbyname.3
diff --git a/man3/gethostbyaddr_r.3 b/man3/gethostbyaddr_r.3
deleted file mode 100644
index 7d0fb4b7c..000000000
--- a/man3/gethostbyaddr_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/gethostbyname.3
diff --git a/man3/gethostbyname.3 b/man3/gethostbyname.3
deleted file mode 100644
index 492e22d69..000000000
--- a/man3/gethostbyname.3
+++ /dev/null
@@ -1,533 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-05-22, David Metcalfe
-.\" Modified 1993-07-25, Rik Faith (faith@cs.unc.edu)
-.\" Modified 1997-02-16, Andries Brouwer (aeb@cwi.nl)
-.\" Modified 1998-12-21, Andries Brouwer (aeb@cwi.nl)
-.\" Modified 2000-08-12, Andries Brouwer (aeb@cwi.nl)
-.\" Modified 2001-05-19, Andries Brouwer (aeb@cwi.nl)
-.\" Modified 2002-08-05, Michael Kerrisk
-.\" Modified 2004-10-31, Andries Brouwer
-.\"
-.TH gethostbyname 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-gethostbyname, gethostbyaddr, sethostent, gethostent, endhostent,
-h_errno,
-herror, hstrerror,
-gethostbyaddr_r,
-gethostbyname2, gethostbyname2_r, gethostbyname_r,
-gethostent_r \- get network host entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <netdb.h>
-.PP
-.BI "void sethostent(int " stayopen );
-.B void endhostent(void);
-.PP
-.B [[deprecated]] extern int h_errno;
-.PP
-.BI "[[deprecated]] struct hostent *gethostbyname(const char *" name );
-.BI "[[deprecated]] struct hostent *gethostbyaddr(const void " addr [. len ],
-.BI " socklen_t " len ", int " type );
-.PP
-.BI "[[deprecated]] void herror(const char *" s );
-.BI "[[deprecated]] const char *hstrerror(int " err );
-.PP
-/* System V/POSIX extension */
-.B struct hostent *gethostent(void);
-.PP
-/* GNU extensions */
-.B [[deprecated]]
-.BI "struct hostent *gethostbyname2(const char *" name ", int " af );
-.PP
-.BI "int gethostent_r(struct hostent *restrict " ret ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct hostent **restrict " result ,
-.BI " int *restrict " h_errnop );
-.PP
-.B [[deprecated]]
-.BI "int gethostbyaddr_r(const void " addr "[restrict ." len "], socklen_t " len ,
-.BI " int " type ,
-.BI " struct hostent *restrict " ret ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct hostent **restrict " result ,
-.BI " int *restrict " h_errnop );
-.B [[deprecated]]
-.BI "int gethostbyname_r(const char *restrict " name ,
-.BI " struct hostent *restrict " ret ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct hostent **restrict " result ,
-.BI " int *restrict " h_errnop );
-.B [[deprecated]]
-.BI "int gethostbyname2_r(const char *restrict " name ", int " af,
-.BI " struct hostent *restrict " ret ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct hostent **restrict " result ,
-.BI " int *restrict " h_errnop );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR gethostbyname2 (),
-.BR gethostent_r (),
-.BR gethostbyaddr_r (),
-.BR gethostbyname_r (),
-.BR gethostbyname2_r ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc up to and including 2.19:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR herror (),
-.BR hstrerror ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.8 to glibc 2.19:
- _BSD_SOURCE || _SVID_SOURCE
- Before glibc 2.8:
- none
-.fi
-.PP
-.BR h_errno :
-.nf
- Since glibc 2.19
- _DEFAULT_SOURCE || _POSIX_C_SOURCE < 200809L
- glibc 2.12 to glibc 2.19:
- _BSD_SOURCE || _SVID_SOURCE || _POSIX_C_SOURCE < 200809L
- Before glibc 2.12:
- none
-.fi
-.SH DESCRIPTION
-The
-.BR gethostbyname* (),
-.BR gethostbyaddr* (),
-.BR herror (),
-and
-.BR hstrerror ()
-functions are obsolete.
-Applications should use
-.BR getaddrinfo (3),
-.BR getnameinfo (3),
-and
-.BR gai_strerror (3)
-instead.
-.PP
-The
-.BR sethostent ()
-function specifies, if \fIstayopen\fP is true (1),
-that a connected TCP socket should be used for the name server queries and
-that the connection should remain open during successive queries.
-Otherwise, name server queries will use UDP datagrams.
-.PP
-The
-.BR endhostent ()
-function ends the use of a TCP connection for name
-server queries.
-.PP
-The
-.BR gethostbyname ()
-function returns a structure of type
-.I hostent
-for the given host
-.IR name .
-Here
-.I name
-is either a hostname or an IPv4 address in standard dot notation (as for
-.BR inet_addr (3)).
-If
-.I name
-is an IPv4 address, no lookup is performed and
-.BR gethostbyname ()
-simply copies
-.I name
-into the
-.I h_name
-field and its
-.I struct in_addr
-equivalent into the
-.I h_addr_list[0]
-field of the returned
-.I hostent
-structure.
-If
-.I name
-doesn't end in a dot and the environment variable
-.B HOSTALIASES
-is set, the alias file pointed to by
-.B HOSTALIASES
-will first be searched for
-.I name
-(see
-.BR hostname (7)
-for the file format).
-The current domain and its parents are searched unless \fIname\fP
-ends in a dot.
-.PP
-The
-.BR gethostbyaddr ()
-function returns a structure of type \fIhostent\fP
-for the given host address \fIaddr\fP of length \fIlen\fP and address type
-\fItype\fP.
-Valid address types are
-.B AF_INET
-and
-.B AF_INET6
-(defined in
-.IR <sys/socket.h> ).
-The host address argument is a pointer to a struct of a type depending
-on the address type, for example a \fIstruct in_addr *\fP (probably
-obtained via a call to
-.BR inet_addr (3))
-for address type
-.BR AF_INET .
-.PP
-The (obsolete)
-.BR herror ()
-function prints the error message associated
-with the current value of \fIh_errno\fP on \fIstderr\fP.
-.PP
-The (obsolete)
-.BR hstrerror ()
-function takes an error number
-(typically \fIh_errno\fP) and returns the corresponding message string.
-.PP
-The domain name queries carried out by
-.BR gethostbyname ()
-and
-.BR gethostbyaddr ()
-rely on the Name Service Switch
-.RB ( nsswitch.conf (5))
-configured sources or a local name server
-.RB ( named (8)).
-The default action is to query the Name Service Switch
-.RB ( nsswitch.conf (5))
-configured sources, failing that, a local name server
-.RB ( named (8)).
-.\"
-.SS Historical
-The
-.BR nsswitch.conf (5)
-file is the modern way of controlling the order of host lookups.
-.PP
-In glibc 2.4 and earlier, the
-.I order
-keyword was used to control the order of host lookups as defined in
-.I /etc/host.conf
-.RB ( host.conf (5)).
-.PP
-The \fIhostent\fP structure is defined in \fI<netdb.h>\fP as follows:
-.PP
-.in +4n
-.EX
-struct hostent {
- char *h_name; /* official name of host */
- char **h_aliases; /* alias list */
- int h_addrtype; /* host address type */
- int h_length; /* length of address */
- char **h_addr_list; /* list of addresses */
-}
-#define h_addr h_addr_list[0] /* for backward compatibility */
-.EE
-.in
-.PP
-The members of the \fIhostent\fP structure are:
-.TP
-.I h_name
-The official name of the host.
-.TP
-.I h_aliases
-An array of alternative names for the host, terminated by a null pointer.
-.TP
-.I h_addrtype
-The type of address; always
-.B AF_INET
-or
-.B AF_INET6
-at present.
-.TP
-.I h_length
-The length of the address in bytes.
-.TP
-.I h_addr_list
-An array of pointers to network addresses for the host (in network byte
-order), terminated by a null pointer.
-.TP
-.I h_addr
-The first address in \fIh_addr_list\fP for backward compatibility.
-.SH RETURN VALUE
-The
-.BR gethostbyname ()
-and
-.BR gethostbyaddr ()
-functions return the
-.I hostent
-structure or a null pointer if an error occurs.
-On error, the
-.I h_errno
-variable holds an error number.
-When non-NULL, the return value may point at static data, see the notes below.
-.SH ERRORS
-The variable \fIh_errno\fP can have the following values:
-.TP
-.B HOST_NOT_FOUND
-The specified host is unknown.
-.TP
-.B NO_DATA
-The requested name is valid but does not have an IP address.
-Another type of request to the name server for this domain
-may return an answer.
-The constant
-.B NO_ADDRESS
-is a synonym for
-.BR NO_DATA .
-.TP
-.B NO_RECOVERY
-A nonrecoverable name server error occurred.
-.TP
-.B TRY_AGAIN
-A temporary error occurred on an authoritative name server.
-Try again later.
-.SH FILES
-.TP
-.I /etc/host.conf
-resolver configuration file
-.TP
-.I /etc/hosts
-host database file
-.TP
-.I /etc/nsswitch.conf
-name service switch configuration
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR gethostbyname ()
-T} Thread safety T{
-MT-Unsafe race:hostbyname env
-locale
-T}
-T{
-.BR gethostbyaddr ()
-T} Thread safety T{
-MT-Unsafe race:hostbyaddr env
-locale
-T}
-T{
-.BR sethostent (),
-.BR endhostent (),
-.BR gethostent_r ()
-T} Thread safety T{
-MT-Unsafe race:hostent env
-locale
-T}
-T{
-.BR herror (),
-.BR hstrerror ()
-T} Thread safety MT-Safe
-T{
-.BR gethostent ()
-T} Thread safety T{
-MT-Unsafe race:hostent
-race:hostentbuf env locale
-T}
-T{
-.BR gethostbyname2 ()
-T} Thread safety T{
-MT-Unsafe race:hostbyname2
-env locale
-T}
-T{
-.BR gethostbyaddr_r (),
-.BR gethostbyname_r (),
-.BR gethostbyname2_r ()
-T} Thread safety MT-Safe env locale
-.TE
-.hy
-.ad
-.sp 1
-In the above table,
-.I hostent
-in
-.I race:hostent
-signifies that if any of the functions
-.BR sethostent (),
-.BR gethostent (),
-.BR gethostent_r (),
-or
-.BR endhostent ()
-are used in parallel in different threads of a program,
-then data races could occur.
-.SH STANDARDS
-.TP
-.BR sethostent ()
-.TQ
-.BR endhostent ()
-.TQ
-.BR gethostent ()
-POSIX.1-2008.
-.TP
-.BR gethostent_r ()
-GNU.
-.TP
-Others:
-None.
-.SH HISTORY
-.TP
-.BR sethostent ()
-.TQ
-.BR endhostent ()
-.TQ
-.BR gethostent ()
-POSIX.1-2001.
-.TP
-.BR gethostbyname ()
-.TQ
-.BR gethostbyaddr ()
-.TQ
-.I h_errno
-Marked obsolescent in POSIX.1-2001.
-Removed in POSIX.1-2008,
-recommending the use of
-.BR getaddrinfo (3)
-and
-.BR getnameinfo (3)
-instead.
-.SH NOTES
-The functions
-.BR gethostbyname ()
-and
-.BR gethostbyaddr ()
-may return pointers to static data, which may be overwritten by
-later calls.
-Copying the
-.I struct hostent
-does not suffice, since it contains pointers; a deep copy is required.
-.PP
-In the original BSD implementation the
-.I len
-argument
-of
-.BR gethostbyname ()
-was an
-.IR int .
-The SUSv2 standard is buggy and declares the
-.I len
-argument of
-.BR gethostbyaddr ()
-to be of type
-.IR size_t .
-(That is wrong, because it has to be
-.IR int ,
-and
-.I size_t
-is not.
-POSIX.1-2001 makes it
-.IR socklen_t ,
-which is OK.)
-See also
-.BR accept (2).
-.PP
-The BSD prototype for
-.BR gethostbyaddr ()
-uses
-.I "const char\ *"
-for the first argument.
-.SS System V/POSIX extension
-POSIX requires the
-.BR gethostent ()
-call, which should return the next entry in the host data base.
-When using DNS/BIND this does not make much sense, but it may
-be reasonable if the host data base is a file that can be read
-line by line.
-On many systems, a routine of this name reads
-from the file
-.IR /etc/hosts .
-.\" e.g., Linux, FreeBSD, UnixWare, HP-UX
-It may be available only when the library was built without DNS support.
-.\" e.g., FreeBSD, AIX
-The glibc version will ignore ipv6 entries.
-This function is not reentrant,
-and glibc adds a reentrant version
-.BR gethostent_r ().
-.SS GNU extensions
-glibc2 also has a
-.BR gethostbyname2 ()
-that works like
-.BR gethostbyname (),
-but permits to specify the address family to which the address must belong.
-.PP
-glibc2 also has reentrant versions
-.BR gethostent_r (),
-.BR gethostbyaddr_r (),
-.BR gethostbyname_r (),
-and
-.BR gethostbyname2_r ().
-The caller supplies a
-.I hostent
-structure
-.I ret
-which will be filled in on success, and a temporary work buffer
-.I buf
-of size
-.IR buflen .
-After the call,
-.I result
-will point to the result on success.
-In case of an error
-or if no entry is found
-.I result
-will be NULL.
-The functions return 0 on success and a nonzero error number on failure.
-In addition to the errors returned by the nonreentrant
-versions of these functions, if
-.I buf
-is too small, the functions will return
-.BR ERANGE ,
-and the call should be retried with a larger buffer.
-The global variable
-.I h_errno
-is not modified, but the address of a variable in which to store error numbers
-is passed in
-.IR h_errnop .
-.SH BUGS
-.BR gethostbyname ()
-does not recognize components of a dotted IPv4 address string
-that are expressed in hexadecimal.
-.\" http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=482973
-.SH SEE ALSO
-.BR getaddrinfo (3),
-.\" .BR getipnodebyaddr (3),
-.\" .BR getipnodebyname (3),
-.BR getnameinfo (3),
-.BR inet (3),
-.BR inet_ntop (3),
-.BR inet_pton (3),
-.BR resolver (3),
-.BR hosts (5),
-.BR nsswitch.conf (5),
-.BR hostname (7),
-.BR named (8)
-.\" .BR resolv+ (8)
diff --git a/man3/gethostbyname2.3 b/man3/gethostbyname2.3
deleted file mode 100644
index 7d0fb4b7c..000000000
--- a/man3/gethostbyname2.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/gethostbyname.3
diff --git a/man3/gethostbyname2_r.3 b/man3/gethostbyname2_r.3
deleted file mode 100644
index 7d0fb4b7c..000000000
--- a/man3/gethostbyname2_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/gethostbyname.3
diff --git a/man3/gethostbyname_r.3 b/man3/gethostbyname_r.3
deleted file mode 100644
index 7d0fb4b7c..000000000
--- a/man3/gethostbyname_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/gethostbyname.3
diff --git a/man3/gethostent.3 b/man3/gethostent.3
deleted file mode 100644
index 7d0fb4b7c..000000000
--- a/man3/gethostent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/gethostbyname.3
diff --git a/man3/gethostent_r.3 b/man3/gethostent_r.3
deleted file mode 100644
index 7d0fb4b7c..000000000
--- a/man3/gethostent_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/gethostbyname.3
diff --git a/man3/gethostid.3 b/man3/gethostid.3
deleted file mode 100644
index 4c01bb08f..000000000
--- a/man3/gethostid.3
+++ /dev/null
@@ -1,146 +0,0 @@
-'\" t
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
-.\"
-.\" Updated with additions from Mitchum DSouza <m.dsouza@mrc-apu.cam.ac.uk>
-.\" Portions Copyright 1993 Mitchum DSouza <m.dsouza@mrc-apu.cam.ac.uk>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Tue Oct 22 00:22:35 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
-.TH gethostid 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-gethostid, sethostid \- get or set the unique identifier of the current host
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.B long gethostid(void);
-.BI "int sethostid(long " hostid );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR gethostid ():
-.nf
- Since glibc 2.20:
- _DEFAULT_SOURCE || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- Up to and including glibc 2.19:
- _BSD_SOURCE || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
-.fi
-.PP
-.BR sethostid ():
-.nf
- Since glibc 2.21:
-.\" commit 266865c0e7b79d4196e2cc393693463f03c90bd8
- _DEFAULT_SOURCE
- In glibc 2.19 and 2.20:
- _DEFAULT_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
- Up to and including glibc 2.19:
- _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
-.fi
-.SH DESCRIPTION
-.BR gethostid ()
-and
-.BR sethostid ()
-respectively get or set a unique 32-bit identifier for the current machine.
-The 32-bit identifier was intended to be unique among all UNIX systems in
-existence.
-This normally resembles the Internet address for the local
-machine, as returned by
-.BR gethostbyname (3),
-and thus usually never needs to be set.
-.PP
-The
-.BR sethostid ()
-call is restricted to the superuser.
-.SH RETURN VALUE
-.BR gethostid ()
-returns the 32-bit identifier for the current host as set by
-.BR sethostid ().
-.PP
-On success,
-.BR sethostid ()
-returns 0; on error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.BR sethostid ()
-can fail with the following errors:
-.TP
-.B EACCES
-The caller did not have permission to write to the file used
-to store the host ID.
-.TP
-.B EPERM
-The calling process's effective user or group ID is not the same
-as its corresponding real ID.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR gethostid ()
-T} Thread safety T{
-MT-Safe hostid env locale
-T}
-T{
-.BR sethostid ()
-T} Thread safety T{
-MT-Unsafe const:hostid
-T}
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-In the glibc implementation, the
-.I hostid
-is stored in the file
-.IR /etc/hostid .
-(Before glibc 2.2, the file
-.I /var/adm/hostid
-was used.)
-.\" libc5 used /etc/hostid; libc4 didn't have these functions
-.PP
-In the glibc implementation, if
-.BR gethostid ()
-cannot open the file containing the host ID,
-then it obtains the hostname using
-.BR gethostname (2),
-passes that hostname to
-.BR gethostbyname_r (3)
-in order to obtain the host's IPv4 address,
-and returns a value obtained by bit-twiddling the IPv4 address.
-(This value may not be unique.)
-.SH STANDARDS
-.TP
-.BR gethostid ()
-POSIX.1-2008.
-.TP
-.BR sethostid ()
-None.
-.SH HISTORY
-4.2BSD; dropped in 4.4BSD.
-SVr4 and POSIX.1-2001 include
-.BR gethostid ()
-but not
-.BR sethostid ().
-.SH BUGS
-It is impossible to ensure that the identifier is globally unique.
-.SH SEE ALSO
-.BR hostid (1),
-.BR gethostbyname (3)
diff --git a/man3/getifaddrs.3 b/man3/getifaddrs.3
deleted file mode 100644
index b6c9421c8..000000000
--- a/man3/getifaddrs.3
+++ /dev/null
@@ -1,316 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Petr Baudis <pasky@suse.cz>
-.\" and copyright (c) 2009, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\"
-.\" 2008-12-08 Petr Baudis <pasky@suse.cz>
-.\" Rewrite the BSD manpage in the Linux man pages style and account
-.\" for glibc specificities, provide an example.
-.\" 2009-01-14 mtk, many edits and changes, rewrote example program.
-.\"
-.TH getifaddrs 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getifaddrs, freeifaddrs \- get interface addresses
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.B #include <ifaddrs.h>
-.PP
-.BI "int getifaddrs(struct ifaddrs **" "ifap" );
-.BI "void freeifaddrs(struct ifaddrs *" "ifa" );
-.fi
-.SH DESCRIPTION
-The
-.BR getifaddrs ()
-function creates a linked list of structures describing
-the network interfaces of the local system,
-and stores the address of the first item of the list in
-.IR *ifap .
-The list consists of
-.I ifaddrs
-structures, defined as follows:
-.PP
-.in +4n
-.EX
-struct ifaddrs {
- struct ifaddrs *ifa_next; /* Next item in list */
- char *ifa_name; /* Name of interface */
- unsigned int ifa_flags; /* Flags from SIOCGIFFLAGS */
- struct sockaddr *ifa_addr; /* Address of interface */
- struct sockaddr *ifa_netmask; /* Netmask of interface */
- union {
- struct sockaddr *ifu_broadaddr;
- /* Broadcast address of interface */
- struct sockaddr *ifu_dstaddr;
- /* Point\-to\-point destination address */
- } ifa_ifu;
-#define ifa_broadaddr ifa_ifu.ifu_broadaddr
-#define ifa_dstaddr ifa_ifu.ifu_dstaddr
- void *ifa_data; /* Address\-specific data */
-};
-.EE
-.in
-.PP
-The
-.I ifa_next
-field contains a pointer to the next structure on the list,
-or NULL if this is the last item of the list.
-.PP
-The
-.I ifa_name
-points to the null-terminated interface name.
-.\" The constant
-.\" .B IF NAMESIZE
-.\" indicates the maximum length of this field.
-.PP
-The
-.I ifa_flags
-field contains the interface flags, as returned by the
-.B SIOCGIFFLAGS
-.BR ioctl (2)
-operation (see
-.BR netdevice (7)
-for a list of these flags).
-.PP
-The
-.I ifa_addr
-field points to a structure containing the interface address.
-(The
-.I sa_family
-subfield should be consulted to determine the format of the
-address structure.)
-This field may contain a null pointer.
-.PP
-The
-.I ifa_netmask
-field points to a structure containing the netmask associated with
-.IR ifa_addr ,
-if applicable for the address family.
-This field may contain a null pointer.
-.PP
-Depending on whether the bit
-.B IFF_BROADCAST
-or
-.B IFF_POINTOPOINT
-is set in
-.I ifa_flags
-(only one can be set at a time),
-either
-.I ifa_broadaddr
-will contain the broadcast address associated with
-.I ifa_addr
-(if applicable for the address family) or
-.I ifa_dstaddr
-will contain the destination address of the point-to-point interface.
-.PP
-The
-.I ifa_data
-field points to a buffer containing address-family-specific data;
-this field may be NULL if there is no such data for this interface.
-.PP
-The data returned by
-.BR getifaddrs ()
-is dynamically allocated and should be freed using
-.BR freeifaddrs ()
-when no longer needed.
-.SH RETURN VALUE
-On success,
-.BR getifaddrs ()
-returns zero;
-on error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.BR getifaddrs ()
-may fail and set
-.I errno
-for any of the errors specified for
-.BR socket (2),
-.BR bind (2),
-.BR getsockname (2),
-.BR recvmsg (2),
-.BR sendto (2),
-.BR malloc (3),
-or
-.BR realloc (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getifaddrs (),
-.BR freeifaddrs ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-This function first appeared in BSDi and is
-present on the BSD systems, but with slightly different
-semantics documented\[em]returning one entry per interface,
-not per address.
-This means
-.I ifa_addr
-and other fields can actually be NULL if the interface has no address,
-and no link-level address is returned if the interface has an IP address
-assigned.
-Also, the way of choosing either
-.I ifa_broadaddr
-or
-.I ifa_dstaddr
-differs on various systems.
-.\" , but the BSD-derived documentation generally
-.\" appears to be confused and obsolete on this point.
-.\" i.e., commonly it still says one of them will be NULL, even if
-.\" the ifa_ifu union is already present
-.PP
-.BR getifaddrs ()
-first appeared in glibc 2.3, but before glibc 2.3.3,
-the implementation supported only IPv4 addresses;
-IPv6 support was added in glibc 2.3.3.
-Support of address families other than IPv4 is available only
-on kernels that support netlink.
-.SH NOTES
-The addresses returned on Linux will usually be the IPv4 and IPv6 addresses
-assigned to the interface, but also one
-.B AF_PACKET
-address per interface containing lower-level details about the interface
-and its physical layer.
-In this case, the
-.I ifa_data
-field may contain a pointer to a
-.IR "struct rtnl_link_stats" ,
-defined in
-.I <linux/if_link.h>
-(in Linux 2.4 and earlier,
-.IR "struct net_device_stats" ,
-defined in
-.IR <linux/netdevice.h> ),
-which contains various interface attributes and statistics.
-.SH EXAMPLES
-The program below demonstrates the use of
-.BR getifaddrs (),
-.BR freeifaddrs (),
-and
-.BR getnameinfo (3).
-Here is what we see when running this program on one system:
-.PP
-.in +4n
-.EX
-$ \fB./a.out\fP
-lo AF_PACKET (17)
- tx_packets = 524; rx_packets = 524
- tx_bytes = 38788; rx_bytes = 38788
-wlp3s0 AF_PACKET (17)
- tx_packets = 108391; rx_packets = 130245
- tx_bytes = 30420659; rx_bytes = 94230014
-em1 AF_PACKET (17)
- tx_packets = 0; rx_packets = 0
- tx_bytes = 0; rx_bytes = 0
-lo AF_INET (2)
- address: <127.0.0.1>
-wlp3s0 AF_INET (2)
- address: <192.168.235.137>
-lo AF_INET6 (10)
- address: <::1>
-wlp3s0 AF_INET6 (10)
- address: <fe80::7ee9:d3ff:fef5:1a91%wlp3s0>
-.EE
-.in
-.SS Program source
-\&
-.EX
-#define _GNU_SOURCE /* To get defns of NI_MAXSERV and NI_MAXHOST */
-#include <arpa/inet.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#include <ifaddrs.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <linux/if_link.h>
-\&
-int main(int argc, char *argv[])
-{
- struct ifaddrs *ifaddr;
- int family, s;
- char host[NI_MAXHOST];
-\&
- if (getifaddrs(&ifaddr) == \-1) {
- perror("getifaddrs");
- exit(EXIT_FAILURE);
- }
-\&
- /* Walk through linked list, maintaining head pointer so we
- can free list later. */
-\&
- for (struct ifaddrs *ifa = ifaddr; ifa != NULL;
- ifa = ifa\->ifa_next) {
- if (ifa\->ifa_addr == NULL)
- continue;
-\&
- family = ifa\->ifa_addr\->sa_family;
-\&
- /* Display interface name and family (including symbolic
- form of the latter for the common families). */
-\&
- printf("%\-8s %s (%d)\en",
- ifa\->ifa_name,
- (family == AF_PACKET) ? "AF_PACKET" :
- (family == AF_INET) ? "AF_INET" :
- (family == AF_INET6) ? "AF_INET6" : "???",
- family);
-\&
- /* For an AF_INET* interface address, display the address. */
-\&
- if (family == AF_INET || family == AF_INET6) {
- s = getnameinfo(ifa\->ifa_addr,
- (family == AF_INET) ? sizeof(struct sockaddr_in) :
- sizeof(struct sockaddr_in6),
- host, NI_MAXHOST,
- NULL, 0, NI_NUMERICHOST);
- if (s != 0) {
- printf("getnameinfo() failed: %s\en", gai_strerror(s));
- exit(EXIT_FAILURE);
- }
-\&
- printf("\et\etaddress: <%s>\en", host);
-\&
- } else if (family == AF_PACKET && ifa\->ifa_data != NULL) {
- struct rtnl_link_stats *stats = ifa\->ifa_data;
-\&
- printf("\et\ettx_packets = %10u; rx_packets = %10u\en"
- "\et\ettx_bytes = %10u; rx_bytes = %10u\en",
- stats\->tx_packets, stats\->rx_packets,
- stats\->tx_bytes, stats\->rx_bytes);
- }
- }
-\&
- freeifaddrs(ifaddr);
- exit(EXIT_SUCCESS);
-}
-.EE
-.SH SEE ALSO
-.BR bind (2),
-.BR getsockname (2),
-.BR socket (2),
-.BR packet (7),
-.BR ifconfig (8)
diff --git a/man3/getipnodebyaddr.3 b/man3/getipnodebyaddr.3
deleted file mode 100644
index 82e01df46..000000000
--- a/man3/getipnodebyaddr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getipnodebyname.3
diff --git a/man3/getipnodebyname.3 b/man3/getipnodebyname.3
deleted file mode 100644
index 3c5f51fc9..000000000
--- a/man3/getipnodebyname.3
+++ /dev/null
@@ -1,253 +0,0 @@
-.\" Copyright 2000 Sam Varshavchik <mrsam@courier-mta.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References: RFC 2553
-.TH getipnodebyname 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getipnodebyname, getipnodebyaddr, freehostent \- get network
-hostnames and addresses
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.B #include <sys/socket.h>
-.B #include <netdb.h>
-.PP
-.BI "[[deprecated]] struct hostent *getipnodebyname(const char *" name ", int " af ,
-.BI " int " flags ", int *" error_num );
-.BI "[[deprecated]] struct hostent *getipnodebyaddr(const void " addr [. len ],
-.BI " size_t " len ", int " af ,
-.BI " int *" "error_num" );
-.BI "[[deprecated]] void freehostent(struct hostent *" "ip" );
-.fi
-.SH DESCRIPTION
-These functions are deprecated (and unavailable in glibc).
-Use
-.BR getaddrinfo (3)
-and
-.BR getnameinfo (3)
-instead.
-.PP
-The
-.BR getipnodebyname ()
-and
-.BR getipnodebyaddr ()
-functions return the names and addresses of a network host.
-These functions return a pointer to the
-following structure:
-.PP
-.in +4n
-.EX
-struct hostent {
- char *h_name;
- char **h_aliases;
- int h_addrtype;
- int h_length;
- char **h_addr_list;
-};
-.EE
-.in
-.PP
-These functions replace the
-.BR gethostbyname (3)
-and
-.BR gethostbyaddr (3)
-functions, which could access only the IPv4 network address family.
-The
-.BR getipnodebyname ()
-and
-.BR getipnodebyaddr ()
-functions can access multiple network address families.
-.PP
-Unlike the
-.B gethostby
-functions,
-these functions return pointers to dynamically allocated memory.
-The
-.BR freehostent ()
-function is used to release the dynamically allocated memory
-after the caller no longer needs the
-.I hostent
-structure.
-.SS getipnodebyname() arguments
-The
-.BR getipnodebyname ()
-function
-looks up network addresses for the host
-specified by the
-.I name
-argument.
-The
-.I af
-argument specifies one of the following values:
-.TP
-.B AF_INET
-The
-.I name
-argument points to a dotted-quad IPv4 address or a name
-of an IPv4 network host.
-.TP
-.B AF_INET6
-The
-.I name
-argument points to a hexadecimal IPv6 address or a name
-of an IPv6 network host.
-.PP
-The
-.I flags
-argument specifies additional options.
-More than one option can be specified by bitwise OR-ing
-them together.
-.I flags
-should be set to 0
-if no options are desired.
-.TP
-.B AI_V4MAPPED
-This flag is used with
-.B AF_INET6
-to request a query for IPv4 addresses instead of
-IPv6 addresses; the IPv4 addresses will
-be mapped to IPv6 addresses.
-.TP
-.B AI_ALL
-This flag is used with
-.B AI_V4MAPPED
-to request a query for both IPv4 and IPv6 addresses.
-Any IPv4 address found will be mapped to an IPv6 address.
-.TP
-.B AI_ADDRCONFIG
-This flag is used with
-.B AF_INET6
-to
-further request that queries for IPv6 addresses should not be made unless
-the system has at least one IPv6 address assigned to a network interface,
-and that queries for IPv4 addresses should not be made unless the
-system has at least one IPv4 address assigned to a network interface.
-This flag may be used by itself or with the
-.B AI_V4MAPPED
-flag.
-.TP
-.B AI_DEFAULT
-This flag is equivalent to
-.BR "(AI_ADDRCONFIG | AI_V4MAPPED)" .
-.SS getipnodebyaddr() arguments
-The
-.BR getipnodebyaddr ()
-function
-looks up the name of the host whose
-network address is
-specified by the
-.I addr
-argument.
-The
-.I af
-argument specifies one of the following values:
-.TP
-.B AF_INET
-The
-.I addr
-argument points to a
-.I struct in_addr
-and
-.I len
-must be set to
-.IR "sizeof(struct in_addr)" .
-.TP
-.B AF_INET6
-The
-.I addr
-argument points to a
-.I struct in6_addr
-and
-.I len
-must be set to
-.IR "sizeof(struct in6_addr)" .
-.SH RETURN VALUE
-NULL is returned if an error occurred, and
-.I error_num
-will contain an error code from the following list:
-.TP
-.B HOST_NOT_FOUND
-The hostname or network address was not found.
-.TP
-.B NO_ADDRESS
-The domain name server recognized the network address or name,
-but no answer was returned.
-This can happen if the network host has only IPv4 addresses and
-a request has been made for IPv6 information only, or vice versa.
-.TP
-.B NO_RECOVERY
-The domain name server returned a permanent failure response.
-.TP
-.B TRY_AGAIN
-The domain name server returned a temporary failure response.
-You might have better luck next time.
-.PP
-A successful query returns a pointer to a
-.I hostent
-structure that contains the following fields:
-.TP
-.I h_name
-This is the official name of this network host.
-.TP
-.I h_aliases
-This is an array of pointers to unofficial aliases for the same host.
-The array is terminated by a null pointer.
-.TP
-.I h_addrtype
-This is a copy of the
-.I af
-argument to
-.BR getipnodebyname ()
-or
-.BR getipnodebyaddr ().
-.I h_addrtype
-will always be
-.B AF_INET
-if the
-.I af
-argument was
-.BR AF_INET .
-.I h_addrtype
-will always be
-.B AF_INET6
-if the
-.I af
-argument was
-.BR AF_INET6 .
-.TP
-.I h_length
-This field will be set to
-.I sizeof(struct in_addr)
-if
-.I h_addrtype
-is
-.BR AF_INET ,
-and to
-.I sizeof(struct in6_addr)
-if
-.I h_addrtype
-is
-.BR AF_INET6 .
-.TP
-.I h_addr_list
-This is an array of one or more pointers to network address structures for the
-network host.
-The array is terminated by a null pointer.
-.SH STANDARDS
-None.
-.SH HISTORY
-.\" Not in POSIX.1-2001.
-RFC\ 2553.
-.PP
-Present in glibc 2.1.91-95, but removed again.
-Several UNIX-like systems support them, but all
-call them deprecated.
-.SH SEE ALSO
-.BR getaddrinfo (3),
-.BR getnameinfo (3),
-.BR inet_ntop (3),
-.BR inet_pton (3)
diff --git a/man3/getline.3 b/man3/getline.3
deleted file mode 100644
index b7835bedf..000000000
--- a/man3/getline.3
+++ /dev/null
@@ -1,185 +0,0 @@
-'\" t
-.\" Copyright (c) 2001 John Levon <moz@compsoc.man.ac.uk>
-.\" Based in part on GNU libc documentation
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH getline 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getline, getdelim \- delimited string input
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "ssize_t getline(char **restrict " lineptr ", size_t *restrict " n ,
-.BI " FILE *restrict " stream );
-.BI "ssize_t getdelim(char **restrict " lineptr ", size_t *restrict " n ,
-.BI " int " delim ", FILE *restrict " stream );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getline (),
-.BR getdelim ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-.BR getline ()
-reads an entire line from \fIstream\fP,
-storing the address of the buffer containing the text into
-.IR *lineptr .
-The buffer is null-terminated and includes the newline character, if
-one was found.
-.PP
-If
-.I *lineptr
-is set to NULL before the call, then
-.BR getline ()
-will allocate a buffer for storing the line.
-This buffer should be freed by the user program
-even if
-.BR getline ()
-failed.
-.PP
-Alternatively, before calling
-.BR getline (),
-.I *lineptr
-can contain a pointer to a
-.BR malloc (3)\-allocated
-buffer
-.I *n
-bytes in size.
-If the buffer is not large enough to hold the line,
-.BR getline ()
-resizes it with
-.BR realloc (3),
-updating
-.I *lineptr
-and
-.I *n
-as necessary.
-.PP
-In either case, on a successful call,
-.I *lineptr
-and
-.I *n
-will be updated to reflect the buffer address and allocated size respectively.
-.PP
-.BR getdelim ()
-works like
-.BR getline (),
-except that a line delimiter other than newline can be specified as the
-.I delimiter
-argument.
-As with
-.BR getline (),
-a delimiter character is not added if one was not present
-in the input before end of file was reached.
-.SH RETURN VALUE
-On success,
-.BR getline ()
-and
-.BR getdelim ()
-return the number of characters read, including the delimiter character,
-but not including the terminating null byte (\[aq]\e0\[aq]).
-This value can be used
-to handle embedded null bytes in the line read.
-.PP
-Both functions return \-1 on failure to read a line (including end-of-file
-condition).
-In the event of a failure,
-.I errno
-is set to indicate the error.
-.PP
-If
-.I *lineptr
-was set to NULL before the call, then the buffer should be freed by the
-user program even on failure.
-.SH ERRORS
-.TP
-.B EINVAL
-Bad arguments
-.RI ( n
-or
-.I lineptr
-is NULL, or
-.I stream
-is not valid).
-.TP
-.B ENOMEM
-Allocation or reallocation of the line buffer failed.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getline (),
-.BR getdelim ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-GNU, POSIX.1-2008.
-.SH EXAMPLES
-.\" SRC BEGIN (getline.c)
-.EX
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(int argc, char *argv[])
-{
- FILE *stream;
- char *line = NULL;
- size_t len = 0;
- ssize_t nread;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s <file>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- stream = fopen(argv[1], "r");
- if (stream == NULL) {
- perror("fopen");
- exit(EXIT_FAILURE);
- }
-\&
- while ((nread = getline(&line, &len, stream)) != \-1) {
- printf("Retrieved line of length %zd:\en", nread);
- fwrite(line, nread, 1, stdout);
- }
-\&
- free(line);
- fclose(stream);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR read (2),
-.BR fgets (3),
-.BR fopen (3),
-.BR fread (3),
-.BR scanf (3)
diff --git a/man3/getloadavg.3 b/man3/getloadavg.3
deleted file mode 100644
index 23faa258e..000000000
--- a/man3/getloadavg.3
+++ /dev/null
@@ -1,74 +0,0 @@
-'\" t
-.\" Copyright (c) 1989, 1991, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-3-Clause
-.\"
-.\" @(#)getloadavg.3 8.1 (Berkeley) 6/4/93
-.\"
-.\" 2007-12-08, mtk, Converted from mdoc to man macros
-.\"
-.TH getloadavg 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getloadavg \- get system load averages
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int getloadavg(double " loadavg[] ", int " nelem );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getloadavg ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- In glibc up to and including 2.19:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR getloadavg ()
-function returns the number of processes in the system run queue
-averaged over various periods of time.
-Up to
-.I nelem
-samples are retrieved and assigned to successive elements of
-.IR loadavg[] .
-The system imposes a maximum of 3 samples, representing averages
-over the last 1, 5, and 15 minutes, respectively.
-.SH RETURN VALUE
-If the load average was unobtainable, \-1 is returned; otherwise,
-the number of samples actually retrieved is returned.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getloadavg ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-BSD.
-.SH HISTORY
-4.3BSD-Reno, Solaris.
-glibc 2.2.
-.SH SEE ALSO
-.BR uptime (1),
-.BR proc (5)
diff --git a/man3/getlogin.3 b/man3/getlogin.3
deleted file mode 100644
index 0d9fc59a0..000000000
--- a/man3/getlogin.3
+++ /dev/null
@@ -1,251 +0,0 @@
-'\" t
-.\" Copyright 1995 James R. Van Zandt <jrv@vanzandt.mv.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Changed Tue Sep 19 01:49:29 1995, aeb: moved from man2 to man3
-.\" added ref to /etc/utmp, added BUGS section, etc.
-.\" modified 2003 Walter Harms, aeb - added getlogin_r, note on stdin use
-.TH getlogin 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getlogin, getlogin_r, cuserid \- get username
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.B "char *getlogin(void);"
-.BI "int getlogin_r(char " buf [. bufsize "], size_t " bufsize );
-.PP
-.B #include <stdio.h>
-.PP
-.BI "char *cuserid(char *" string );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getlogin_r ():
-.nf
-.\" Deprecated: _REENTRANT ||
- _POSIX_C_SOURCE >= 199506L
-.fi
-.PP
-.BR cuserid ():
-.nf
- Since glibc 2.24:
- (_XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L)
- || _GNU_SOURCE
- Up to and including glibc 2.23:
- _XOPEN_SOURCE
-.fi
-.SH DESCRIPTION
-.BR getlogin ()
-returns a pointer to a string containing the name of
-the user logged in on the controlling terminal of the process, or a
-null pointer if this information cannot be determined.
-The string is
-statically allocated and might be overwritten on subsequent calls to
-this function or to
-.BR cuserid ().
-.PP
-.BR getlogin_r ()
-returns this same username in the array
-.I buf
-of size
-.IR bufsize .
-.PP
-.BR cuserid ()
-returns a pointer to a string containing a username
-associated with the effective user ID of the process.
-If \fIstring\fP
-is not a null pointer, it should be an array that can hold at least
-\fBL_cuserid\fP characters; the string is returned in this array.
-Otherwise, a pointer to a string in a static area is returned.
-This
-string is statically allocated and might be overwritten on subsequent
-calls to this function or to
-.BR getlogin ().
-.PP
-The macro \fBL_cuserid\fP is an integer constant that indicates how
-long an array you might need to store a username.
-\fBL_cuserid\fP is declared in \fI<stdio.h>\fP.
-.PP
-These functions let your program identify positively the user who is
-running
-.RB ( cuserid ())
-or the user who logged in this session
-.RB ( getlogin ()).
-(These can differ when set-user-ID programs are involved.)
-.PP
-For most purposes, it is more useful to use the environment variable
-\fBLOGNAME\fP to find out who the user is.
-This is more flexible
-precisely because the user can set \fBLOGNAME\fP arbitrarily.
-.SH RETURN VALUE
-.BR getlogin ()
-returns a pointer to the username when successful,
-and NULL on failure, with
-.I errno
-set to indicate the error.
-.BR getlogin_r ()
-returns 0 when successful, and nonzero on failure.
-.SH ERRORS
-POSIX specifies:
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENXIO
-The calling process has no controlling terminal.
-.TP
-.B ERANGE
-(getlogin_r)
-The length of the username, including the terminating null byte (\[aq]\e0\[aq]),
-is larger than
-.IR bufsize .
-.PP
-Linux/glibc also has:
-.TP
-.B ENOENT
-There was no corresponding entry in the utmp-file.
-.TP
-.B ENOMEM
-Insufficient memory to allocate passwd structure.
-.TP
-.B ENOTTY
-Standard input didn't refer to a terminal.
-(See BUGS.)
-.SH FILES
-.TP
-\fI/etc/passwd\fP
-password database file
-.TP
-\fI/var/run/utmp\fP
-(traditionally \fI/etc/utmp\fP;
-some libc versions used \fI/var/adm/utmp\fP)
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR getlogin ()
-T} Thread safety T{
-MT-Unsafe race:getlogin race:utent
-sig:ALRM timer locale
-T}
-T{
-.BR getlogin_r ()
-T} Thread safety T{
-MT-Unsafe race:utent sig:ALRM timer
-locale
-T}
-T{
-.BR cuserid ()
-T} Thread safety T{
-MT-Unsafe race:cuserid/!string locale
-T}
-.TE
-.hy
-.ad
-.sp 1
-In the above table,
-.I utent
-in
-.I race:utent
-signifies that if any of the functions
-.BR setutent (3),
-.BR getutent (3),
-or
-.BR endutent (3)
-are used in parallel in different threads of a program,
-then data races could occur.
-.BR getlogin ()
-and
-.BR getlogin_r ()
-call those functions,
-so we use race:utent to remind users.
-.SH VERSIONS
-OpenBSD has
-.BR getlogin ()
-and
-.BR setlogin (),
-and a username
-associated with a session, even if it has no controlling terminal.
-.SH STANDARDS
-.TP
-.BR getlogin ()
-.TQ
-.BR getlogin_r ()
-POSIX.1-2008.
-.TP
-.BR cuserid ()
-None.
-.SH STANDARDS
-.TP
-.BR getlogin ()
-.TQ
-.BR getlogin_r ():
-POSIX.1-2001.
-OpenBSD.
-.TP
-.BR cuserid ()
-System V, POSIX.1-1988.
-Removed in POSIX.1-1990.
-SUSv2.
-Removed in POSIX.1-2001.
-.IP
-System V has a
-.BR cuserid ()
-function which uses the real
-user ID rather than the effective user ID.
-.SH BUGS
-Unfortunately, it is often rather easy to fool
-.BR getlogin ().
-Sometimes it does not work at all, because some program messed up
-the utmp file.
-Often, it gives only the first 8 characters of
-the login name.
-The user currently logged in on the controlling terminal
-of our program need not be the user who started it.
-Avoid
-.BR getlogin ()
-for security-related purposes.
-.PP
-Note that glibc does not follow the POSIX specification and uses
-.I stdin
-instead of
-.IR /dev/tty .
-A bug.
-(Other recent systems, like SunOS 5.8 and HP-UX 11.11 and FreeBSD 4.8
-all return the login name also when
-.I stdin
-is redirected.)
-.PP
-Nobody knows precisely what
-.BR cuserid ()
-does; avoid it in portable programs.
-Or avoid it altogether: use
-.I getpwuid(geteuid())
-instead, if that is
-what you meant.
-.B Do not use
-.BR cuserid ().
-.SH SEE ALSO
-.BR logname (1),
-.BR geteuid (2),
-.BR getuid (2),
-.BR utmp (5)
diff --git a/man3/getlogin_r.3 b/man3/getlogin_r.3
deleted file mode 100644
index b6d53bf72..000000000
--- a/man3/getlogin_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getlogin.3
diff --git a/man3/getmntent.3 b/man3/getmntent.3
deleted file mode 100644
index 5c0cfde0a..000000000
--- a/man3/getmntent.3
+++ /dev/null
@@ -1,258 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 21:46:57 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 961109, 031115, aeb
-.\"
-.TH getmntent 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getmntent, setmntent, addmntent, endmntent, hasmntopt,
-getmntent_r \- get filesystem descriptor file entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.B #include <mntent.h>
-.PP
-.BI "FILE *setmntent(const char *" filename ", const char *" type );
-.PP
-.BI "struct mntent *getmntent(FILE *" stream );
-.PP
-.BI "int addmntent(FILE *restrict " stream ,
-.BI " const struct mntent *restrict " mnt );
-.PP
-.BI "int endmntent(FILE *" streamp );
-.PP
-.BI "char *hasmntopt(const struct mntent *" mnt ", const char *" opt );
-.PP
-/* GNU extension */
-.B #include <mntent.h>
-.PP
-.BI "struct mntent *getmntent_r(FILE *restrict " streamp ,
-.BI " struct mntent *restrict " mntbuf ,
-.BI " char " buf "[restrict ." buflen "], int " buflen );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getmntent_r ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These routines are used to access the filesystem description file
-.I /etc/fstab
-and the mounted filesystem description file
-.IR /etc/mtab .
-.PP
-The
-.BR setmntent ()
-function opens the filesystem description file
-.I filename
-and returns a file pointer which can be used by
-.BR getmntent ().
-The argument
-.I type
-is the type of access
-required and can take the same values as the
-.I mode
-argument of
-.BR fopen (3).
-The returned stream should be closed using
-.BR endmntent ()
-rather than
-.BR fclose (3).
-.PP
-The
-.BR getmntent ()
-function reads the next line of the filesystem
-description file from
-.I stream
-and returns a pointer to a structure
-containing the broken out fields from a line in the file.
-The pointer
-points to a static area of memory which is overwritten by subsequent
-calls to
-.BR getmntent ().
-.PP
-The
-.BR addmntent ()
-function adds the
-.I mntent
-structure
-.I mnt
-to
-the end of the open
-.IR stream .
-.PP
-The
-.BR endmntent ()
-function closes the
-.I stream
-associated with the filesystem description file.
-.PP
-The
-.BR hasmntopt ()
-function scans the
-.I mnt_opts
-field (see below)
-of the
-.I mntent
-structure
-.I mnt
-for a substring that matches
-.IR opt .
-See
-.I <mntent.h>
-and
-.BR mount (8)
-for valid mount options.
-.PP
-The reentrant
-.BR getmntent_r ()
-function is similar to
-.BR getmntent (),
-but stores the
-.I mntent
-structure
-in the provided
-.IR *mntbuf ,
-and stores the strings pointed to by the entries in that structure
-in the provided array
-.I buf
-of size
-.IR buflen .
-.PP
-The
-.I mntent
-structure is defined in
-.I <mntent.h>
-as follows:
-.PP
-.in +4n
-.EX
-struct mntent {
- char *mnt_fsname; /* name of mounted filesystem */
- char *mnt_dir; /* filesystem path prefix */
- char *mnt_type; /* mount type (see mntent.h) */
- char *mnt_opts; /* mount options (see mntent.h) */
- int mnt_freq; /* dump frequency in days */
- int mnt_passno; /* pass number on parallel fsck */
-};
-.EE
-.in
-.PP
-Since fields in the mtab and fstab files are separated by whitespace,
-octal escapes are used to represent the characters space (\e040),
-tab (\e011), newline (\e012), and backslash (\e\e) in those files
-when they occur in one of the four strings in a
-.I mntent
-structure.
-The routines
-.BR addmntent ()
-and
-.BR getmntent ()
-will convert
-from string representation to escaped representation and back.
-When converting from escaped representation, the sequence \e134 is
-also converted to a backslash.
-.SH RETURN VALUE
-The
-.BR getmntent ()
-and
-.BR getmntent_r ()
-functions return
-a pointer to the
-.I mntent
-structure or NULL on failure.
-.PP
-The
-.BR addmntent ()
-function returns 0 on success and 1 on failure.
-.PP
-The
-.BR endmntent ()
-function always returns 1.
-.PP
-The
-.BR hasmntopt ()
-function returns the address of the substring if
-a match is found and NULL otherwise.
-.SH FILES
-.TP
-.I /etc/fstab
-filesystem description file
-.TP
-.I /etc/mtab
-mounted filesystem description file
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR setmntent (),
-.BR endmntent (),
-.BR hasmntopt ()
-T} Thread safety MT-Safe
-T{
-.BR getmntent ()
-T} Thread safety T{
-MT-Unsafe race:mntentbuf locale
-T}
-T{
-.BR addmntent ()
-T} Thread safety T{
-MT-Safe race:stream locale
-T}
-T{
-.BR getmntent_r ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-The nonreentrant functions are from SunOS 4.1.3.
-A routine
-.BR getmntent_r ()
-was introduced in HP-UX 10, but it returns an
-.IR int .
-The prototype shown above is glibc-only.
-.PP
-System V also has a
-.BR getmntent ()
-function but the calling sequence
-differs, and the returned structure is different.
-Under System V
-.I /etc/mnttab
-is used.
-4.4BSD and Digital UNIX have a routine
-.BR getmntinfo (),
-a wrapper around the system call
-.BR getfsstat ().
-.SH SEE ALSO
-.BR fopen (3),
-.BR fstab (5),
-.BR mount (8)
diff --git a/man3/getmntent_r.3 b/man3/getmntent_r.3
deleted file mode 100644
index 3c2bb35c9..000000000
--- a/man3/getmntent_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getmntent.3
diff --git a/man3/getnameinfo.3 b/man3/getnameinfo.3
deleted file mode 100644
index 72844cfe6..000000000
--- a/man3/getnameinfo.3
+++ /dev/null
@@ -1,346 +0,0 @@
-'\" t
-.\" %%%LICENSE_START(PUBLIC_DOMAIN)
-.\" This page is in the public domain.
-.\" %%%LICENSE_END
-.\"
-.\" Almost all details are from RFC 2553.
-.\"
-.\" 2004-12-14, mtk, Added EAI_OVERFLOW error
-.\" 2004-12-14 Fixed description of error return
-.\"
-.TH getnameinfo 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getnameinfo \- address-to-name translation in protocol-independent manner
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.B #include <netdb.h>
-.PP
-.BI "int getnameinfo(const struct sockaddr *restrict " addr \
-", socklen_t " addrlen ,
-.BI " char " host "[_Nullable restrict ." hostlen ],
-.BI " socklen_t " hostlen ,
-.BI " char " serv "[_Nullable restrict ." servlen ],
-.BI " socklen_t " servlen ,
-.BI " int " flags );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getnameinfo ():
-.nf
- Since glibc 2.22:
- _POSIX_C_SOURCE >= 200112L
- glibc 2.21 and earlier:
- _POSIX_C_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR getnameinfo ()
-function is the inverse of
-.BR getaddrinfo (3):
-it converts a socket address to a corresponding host and service,
-in a protocol-independent manner.
-It combines the functionality of
-.BR gethostbyaddr (3)
-and
-.BR getservbyport (3),
-but unlike those functions,
-.BR getnameinfo ()
-is reentrant and allows programs to eliminate
-IPv4-versus-IPv6 dependencies.
-.PP
-The
-.I addr
-argument is a pointer to a generic socket address structure
-(of type
-.I sockaddr_in
-or
-.IR sockaddr_in6 )
-of size
-.I addrlen
-that holds the input IP address and port number.
-The arguments
-.I host
-and
-.I serv
-are pointers to caller-allocated buffers (of size
-.I hostlen
-and
-.I servlen
-respectively) into which
-.BR getnameinfo ()
-places null-terminated strings containing the host and
-service names respectively.
-.PP
-The caller can specify that no hostname (or no service name)
-is required by providing a NULL
-.I host
-(or
-.IR serv )
-argument or a zero
-.I hostlen
-(or
-.IR servlen )
-argument.
-However, at least one of hostname or service name
-must be requested.
-.PP
-The
-.I flags
-argument modifies the behavior of
-.BR getnameinfo ()
-as follows:
-.TP
-.B NI_NAMEREQD
-If set, then an error is returned if the hostname cannot be determined.
-.TP
-.B NI_DGRAM
-If set, then the service is datagram (UDP) based rather than
-stream (TCP) based.
-This is required for the few ports (512\[en]514)
-that have different services for UDP and TCP.
-.TP
-.B NI_NOFQDN
-If set, return only the hostname part of the fully qualified domain name
-for local hosts.
-.TP
-.B NI_NUMERICHOST
-If set, then the numeric form of the hostname is returned.
-.\" For example, by calling
-.\" .BR inet_ntop ()
-.\" instead of
-.\" .BR gethostbyaddr ().
-(When not set, this will still happen in case the node's name
-cannot be determined.)
-.\" POSIX.1-2001 TC1 has NI_NUMERICSCOPE, but glibc doesn't have it.
-.TP
-.B NI_NUMERICSERV
-If set, then the numeric form of the service address is returned.
-(When not set, this will still happen in case the service's name
-cannot be determined.)
-.SS Extensions to getnameinfo() for Internationalized Domain Names
-Starting with glibc 2.3.4,
-.BR getnameinfo ()
-has been extended to selectively allow
-hostnames to be transparently converted to and from the
-Internationalized Domain Name (IDN) format (see RFC 3490,
-.IR "Internationalizing Domain Names in Applications (IDNA)" ).
-Three new flags are defined:
-.TP
-.B NI_IDN
-If this flag is used, then the name found in the lookup process is
-converted from IDN format to the locale's encoding if necessary.
-ASCII-only names are not affected by the conversion, which
-makes this flag usable in existing programs and environments.
-.TP
-.BR NI_IDN_ALLOW_UNASSIGNED ", " NI_IDN_USE_STD3_ASCII_RULES
-Setting these flags will enable the
-IDNA_ALLOW_UNASSIGNED (allow unassigned Unicode code points) and
-IDNA_USE_STD3_ASCII_RULES (check output to make sure it is a STD3
-conforming hostname)
-flags respectively to be used in the IDNA handling.
-.SH RETURN VALUE
-.\" FIXME glibc defines the following additional errors, some which
-.\" can probably be returned by getnameinfo(); they need to
-.\" be documented.
-.\"
-.\" #ifdef __USE_GNU
-.\" #define EAI_INPROGRESS -100 /* Processing request in progress. */
-.\" #define EAI_CANCELED -101 /* Request canceled. */
-.\" #define EAI_NOTCANCELED -102 /* Request not canceled. */
-.\" #define EAI_ALLDONE -103 /* All requests done. */
-.\" #define EAI_INTR -104 /* Interrupted by a signal. */
-.\" #define EAI_IDN_ENCODE -105 /* IDN encoding failed. */
-.\" #endif
-On success, 0 is returned, and node and service names, if requested,
-are filled with null-terminated strings, possibly truncated to fit
-the specified buffer lengths.
-On error, one of the following nonzero error codes is returned:
-.TP
-.B EAI_AGAIN
-The name could not be resolved at this time.
-Try again later.
-.TP
-.B EAI_BADFLAGS
-The
-.I flags
-argument has an invalid value.
-.TP
-.B EAI_FAIL
-A nonrecoverable error occurred.
-.TP
-.B EAI_FAMILY
-The address family was not recognized,
-or the address length was invalid for the specified family.
-.TP
-.B EAI_MEMORY
-Out of memory.
-.TP
-.B EAI_NONAME
-The name does not resolve for the supplied arguments.
-.B NI_NAMEREQD
-is set and the host's name cannot be located,
-or neither hostname nor service name were requested.
-.TP
-.B EAI_OVERFLOW
-The buffer pointed to by
-.I host
-or
-.I serv
-was too small.
-.TP
-.B EAI_SYSTEM
-A system error occurred.
-The error code can be found in
-.IR errno .
-.PP
-The
-.BR gai_strerror (3)
-function translates these error codes to a human readable string,
-suitable for error reporting.
-.SH FILES
-.I /etc/hosts
-.br
-.I /etc/nsswitch.conf
-.br
-.I /etc/resolv.conf
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getnameinfo ()
-T} Thread safety MT-Safe env locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-RFC\ 2553.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001.
-.PP
-Before glibc 2.2, the
-.I hostlen
-and
-.I servlen
-arguments were typed as
-.IR size_t .
-.SH NOTES
-In order to assist the programmer in choosing reasonable sizes
-for the supplied buffers,
-.I <netdb.h>
-defines the constants
-.PP
-.in +4n
-.EX
-#define NI_MAXHOST 1025
-#define NI_MAXSERV 32
-.EE
-.in
-.PP
-Since glibc 2.8,
-these definitions are exposed only if suitable
-feature test macros are defined, namely:
-.BR _GNU_SOURCE ,
-.B _DEFAULT_SOURCE
-(since glibc 2.19),
-or (in glibc versions up to and including 2.19)
-.B _BSD_SOURCE
-or
-.BR _SVID_SOURCE .
-.PP
-The former is the constant
-.B MAXDNAME
-in recent versions of BIND's
-.I <arpa/nameser.h>
-header file.
-The latter is a guess based on the services listed
-in the current Assigned Numbers RFC.
-.SH EXAMPLES
-The following code tries to get the numeric hostname and service name,
-for a given socket address.
-Note that there is no hardcoded reference to
-a particular address family.
-.PP
-.in +4n
-.EX
-struct sockaddr *addr; /* input */
-socklen_t addrlen; /* input */
-char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
-\&
-if (getnameinfo(addr, addrlen, hbuf, sizeof(hbuf), sbuf,
- sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0)
- printf("host=%s, serv=%s\en", hbuf, sbuf);
-.EE
-.in
-.PP
-The following version checks if the socket address has a
-reverse address mapping.
-.PP
-.in +4n
-.EX
-struct sockaddr *addr; /* input */
-socklen_t addrlen; /* input */
-char hbuf[NI_MAXHOST];
-\&
-if (getnameinfo(addr, addrlen, hbuf, sizeof(hbuf),
- NULL, 0, NI_NAMEREQD))
- printf("could not resolve hostname");
-else
- printf("host=%s\en", hbuf);
-.EE
-.in
-.PP
-An example program using
-.BR getnameinfo ()
-can be found in
-.BR getaddrinfo (3).
-.SH SEE ALSO
-.BR accept (2),
-.BR getpeername (2),
-.BR getsockname (2),
-.BR recvfrom (2),
-.BR socket (2),
-.BR getaddrinfo (3),
-.BR gethostbyaddr (3),
-.BR getservbyname (3),
-.BR getservbyport (3),
-.BR inet_ntop (3),
-.BR hosts (5),
-.BR services (5),
-.BR hostname (7),
-.BR named (8)
-.PP
-R.\& Gilligan, S.\& Thomson, J.\& Bound and W.\& Stevens,
-.IR "Basic Socket Interface Extensions for IPv6" ,
-RFC\ 2553, March 1999.
-.PP
-Tatsuya Jinmei and Atsushi Onoe,
-.IR "An Extension of Format for IPv6 Scoped Addresses" ,
-internet draft, work in progress
-.UR ftp://ftp.ietf.org\:/internet\-drafts\:/draft\-ietf\-ipngwg\-scopedaddr\-format\-02.txt
-.UE .
-.PP
-Craig Metz,
-.IR "Protocol Independence Using the Sockets API" ,
-Proceedings of the freenix track:
-2000 USENIX annual technical conference, June 2000
-.ad l
-.UR http://www.usenix.org\:/publications\:/library\:/proceedings\:/usenix2000\:/freenix\:/metzprotocol.html
-.UE .
diff --git a/man3/getnetbyaddr.3 b/man3/getnetbyaddr.3
deleted file mode 100644
index 70f5670dc..000000000
--- a/man3/getnetbyaddr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getnetent.3
diff --git a/man3/getnetbyaddr_r.3 b/man3/getnetbyaddr_r.3
deleted file mode 100644
index 316d315b7..000000000
--- a/man3/getnetbyaddr_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getnetent_r.3
diff --git a/man3/getnetbyname.3 b/man3/getnetbyname.3
deleted file mode 100644
index 70f5670dc..000000000
--- a/man3/getnetbyname.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getnetent.3
diff --git a/man3/getnetbyname_r.3 b/man3/getnetbyname_r.3
deleted file mode 100644
index 316d315b7..000000000
--- a/man3/getnetbyname_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getnetent_r.3
diff --git a/man3/getnetent.3 b/man3/getnetent.3
deleted file mode 100644
index 31799d0df..000000000
--- a/man3/getnetent.3
+++ /dev/null
@@ -1,194 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 21:48:06 1993 by Rik Faith (faith@cs.unc.edu)
-.TH getnetent 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getnetent, getnetbyname, getnetbyaddr, setnetent, endnetent \-
-get network entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <netdb.h>
-.PP
-.B struct netent *getnetent(void);
-.PP
-.BI "struct netent *getnetbyname(const char *" name );
-.BI "struct netent *getnetbyaddr(uint32_t " net ", int " type );
-.PP
-.BI "void setnetent(int " stayopen );
-.B void endnetent(void);
-.fi
-.SH DESCRIPTION
-The
-.BR getnetent ()
-function reads the next entry from the networks database
-and returns a
-.I netent
-structure containing
-the broken-out fields from the entry.
-A connection is opened to the database if necessary.
-.PP
-The
-.BR getnetbyname ()
-function returns a
-.I netent
-structure
-for the entry from the database
-that matches the network
-.IR name .
-.PP
-The
-.BR getnetbyaddr ()
-function returns a
-.I netent
-structure
-for the entry from the database
-that matches the network number
-.I net
-of type
-.IR type .
-The
-.I net
-argument must be in host byte order.
-.PP
-The
-.BR setnetent ()
-function opens a connection to the database,
-and sets the next entry to the first entry.
-If
-.I stayopen
-is nonzero,
-then the connection to the database
-will not be closed between calls to one of the
-.BR getnet* ()
-functions.
-.PP
-The
-.BR endnetent ()
-function closes the connection to the database.
-.PP
-The
-.I netent
-structure is defined in
-.I <netdb.h>
-as follows:
-.PP
-.in +4n
-.EX
-struct netent {
- char *n_name; /* official network name */
- char **n_aliases; /* alias list */
- int n_addrtype; /* net address type */
- uint32_t n_net; /* network number */
-}
-.EE
-.in
-.PP
-The members of the
-.I netent
-structure are:
-.TP
-.I n_name
-The official name of the network.
-.TP
-.I n_aliases
-A NULL-terminated list of alternative names for the network.
-.TP
-.I n_addrtype
-The type of the network number; always
-.BR AF_INET .
-.TP
-.I n_net
-The network number in host byte order.
-.SH RETURN VALUE
-The
-.BR getnetent (),
-.BR getnetbyname (),
-and
-.BR getnetbyaddr ()
-functions return a pointer to a
-statically allocated
-.I netent
-structure, or a null pointer if an
-error occurs or the end of the file is reached.
-.SH FILES
-.TP
-.I /etc/networks
-networks database file
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR getnetent ()
-T} Thread safety T{
-MT-Unsafe race:netent
-race:netentbuf env locale
-T}
-T{
-.BR getnetbyname ()
-T} Thread safety T{
-MT-Unsafe race:netbyname
-env locale
-T}
-T{
-.BR getnetbyaddr ()
-T} Thread safety T{
-MT-Unsafe race:netbyaddr
-locale
-T}
-T{
-.BR setnetent (),
-.BR endnetent ()
-T} Thread safety T{
-MT-Unsafe race:netent env
-locale
-T}
-.TE
-.hy
-.ad
-.sp 1
-In the above table,
-.I netent
-in
-.I race:netent
-signifies that if any of the functions
-.BR setnetent (),
-.BR getnetent (),
-or
-.BR endnetent ()
-are used in parallel in different threads of a program,
-then data races could occur.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, 4.3BSD.
-.PP
-Before glibc 2.2, the
-.I net
-argument of
-.BR getnetbyaddr ()
-was of type
-.IR long .
-.SH SEE ALSO
-.BR getnetent_r (3),
-.BR getprotoent (3),
-.BR getservent (3)
-.\" .BR networks (5)
-.br
-RFC\ 1101
diff --git a/man3/getnetent_r.3 b/man3/getnetent_r.3
deleted file mode 100644
index f6e19360f..000000000
--- a/man3/getnetent_r.3
+++ /dev/null
@@ -1,153 +0,0 @@
-'\" t
-.\" Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH getnetent_r 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getnetent_r, getnetbyname_r, getnetbyaddr_r \- get
-network entry (reentrant)
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <netdb.h>
-.PP
-.BI "int getnetent_r(struct netent *restrict " result_buf ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct netent **restrict " result ,
-.BI " int *restrict " h_errnop );
-.BI "int getnetbyname_r(const char *restrict " name ,
-.BI " struct netent *restrict " result_buf ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct netent **restrict " result ,
-.BI " int *restrict " h_errnop );
-.BI "int getnetbyaddr_r(uint32_t " net ", int " type ,
-.BI " struct netent *restrict " result_buf ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct netent **restrict " result ,
-.BI " int *restrict " h_errnop );
-.PP
-.fi
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getnetent_r (),
-.BR getnetbyname_r (),
-.BR getnetbyaddr_r ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR getnetent_r (),
-.BR getnetbyname_r (),
-and
-.BR getnetbyaddr_r ()
-functions are the reentrant equivalents of, respectively,
-.BR getnetent (3),
-.BR getnetbyname (3),
-and
-.BR getnetbynumber (3).
-They differ in the way that the
-.I netent
-structure is returned,
-and in the function calling signature and return value.
-This manual page describes just the differences from
-the nonreentrant functions.
-.PP
-Instead of returning a pointer to a statically allocated
-.I netent
-structure as the function result,
-these functions copy the structure into the location pointed to by
-.IR result_buf .
-.PP
-The
-.I buf
-array is used to store the string fields pointed to by the returned
-.I netent
-structure.
-(The nonreentrant functions allocate these strings in static storage.)
-The size of this array is specified in
-.IR buflen .
-If
-.I buf
-is too small, the call fails with the error
-.BR ERANGE ,
-and the caller must try again with a larger buffer.
-(A buffer of length 1024 bytes should be sufficient for most applications.)
-.\" I can find no information on the required/recommended buffer size;
-.\" the nonreentrant functions use a 1024 byte buffer -- mtk.
-.PP
-If the function call successfully obtains a network record, then
-.I *result
-is set pointing to
-.IR result_buf ;
-otherwise,
-.I *result
-is set to NULL.
-.PP
-The buffer pointed to by
-.I h_errnop
-is used to return the value that would be stored in the global variable
-.I h_errno
-by the nonreentrant versions of these functions.
-.\" getnetent.3 doesn't document any use of h_errno, but nevertheless
-.\" the nonreentrant functions no seem to set h_errno.
-.SH RETURN VALUE
-On success, these functions return 0.
-On error, they return one of the positive error numbers listed in ERRORS.
-.PP
-On error, record not found
-.RB ( getnetbyname_r (),
-.BR getnetbyaddr_r ()),
-or end of input
-.RB ( getnetent_r ())
-.I result
-is set to NULL.
-.SH ERRORS
-.TP
-.B ENOENT
-.RB ( getnetent_r ())
-No more records in database.
-.TP
-.B ERANGE
-.I buf
-is too small.
-Try again with a larger buffer
-(and increased
-.IR buflen ).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getnetent_r (),
-.BR getnetbyname_r (),
-.BR getnetbyaddr_r ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-Functions with similar names exist on some other systems,
-though typically with different calling signatures.
-.SH STANDARDS
-GNU.
-.SH SEE ALSO
-.BR getnetent (3),
-.BR networks (5)
diff --git a/man3/getnetgrent.3 b/man3/getnetgrent.3
deleted file mode 100644
index 34268f941..000000000
--- a/man3/getnetgrent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/setnetgrent.3
diff --git a/man3/getnetgrent_r.3 b/man3/getnetgrent_r.3
deleted file mode 100644
index 34268f941..000000000
--- a/man3/getnetgrent_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/setnetgrent.3
diff --git a/man3/getopt.3 b/man3/getopt.3
deleted file mode 100644
index b1c7f2df1..000000000
--- a/man3/getopt.3
+++ /dev/null
@@ -1,578 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\" and Copyright 2006-2008, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 19:27:50 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Mon Aug 30 22:02:34 1995 by Jim Van Zandt <jrv@vanzandt.mv.com>
-.\" longindex is a pointer, has_arg can take 3 values, using consistent
-.\" names for optstring and longindex, "\n" in formats fixed. Documenting
-.\" opterr and getopt_long_only. Clarified explanations (borrowing heavily
-.\" from the source code).
-.\" Modified 8 May 1998 by Joseph S. Myers (jsm28@cam.ac.uk)
-.\" Modified 990715, aeb: changed `EOF' into `-1' since that is what POSIX
-.\" says; moreover, EOF is not defined in <unistd.h>.
-.\" Modified 2002-02-16, joey: added information about nonexistent
-.\" option character and colon as first option character
-.\" Modified 2004-07-28, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added text to explain how to order both '[-+]' and ':' at
-.\" the start of optstring
-.\" Modified 2006-12-15, mtk, Added getopt() example program.
-.\"
-.TH getopt 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getopt, getopt_long, getopt_long_only,
-optarg, optind, opterr, optopt \- Parse command-line options
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int getopt(int " argc ", char *" argv [],
-.BI " const char *" optstring );
-.PP
-.BI "extern char *" optarg ;
-.BI "extern int " optind ", " opterr ", " optopt ;
-.PP
-.B #include <getopt.h>
-.PP
-.BI "int getopt_long(int " argc ", char *" argv [],
-.BI " const char *" optstring ,
-.BI " const struct option *" longopts ", int *" longindex );
-.BI "int getopt_long_only(int " argc ", char *" argv [],
-.BI " const char *" optstring ,
-.BI " const struct option *" longopts ", int *" longindex );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getopt ():
-.nf
- _POSIX_C_SOURCE >= 2 || _XOPEN_SOURCE
-.fi
-.PP
-.BR getopt_long (),
-.BR getopt_long_only ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR getopt ()
-function parses the command-line arguments.
-Its arguments
-.I argc
-and
-.I argv
-are the argument count and array as passed to the
-.IR main ()
-function on program invocation.
-An element of \fIargv\fP that starts with \[aq]\-\[aq]
-(and is not exactly "\-" or "\-\-")
-is an option element.
-The characters of this element
-(aside from the initial \[aq]\-\[aq]) are option characters.
-If
-.BR getopt ()
-is called repeatedly, it returns successively each of the option characters
-from each of the option elements.
-.PP
-The variable
-.I optind
-is the index of the next element to be processed in
-.IR argv .
-The system initializes this value to 1.
-The caller can reset it to 1 to restart scanning of the same
-.IR argv ,
-or when scanning a new argument vector.
-.PP
-If
-.BR getopt ()
-finds another option character, it returns that
-character, updating the external variable \fIoptind\fP and a static
-variable \fInextchar\fP so that the next call to
-.BR getopt ()
-can
-resume the scan with the following option character or
-\fIargv\fP-element.
-.PP
-If there are no more option characters,
-.BR getopt ()
-returns \-1.
-Then \fIoptind\fP is the index in \fIargv\fP of the first
-\fIargv\fP-element that is not an option.
-.PP
-.I optstring
-is a string containing the legitimate option characters.
-A legitimate option character is any visible one byte
-.BR ascii (7)
-character (for which
-.BR isgraph (3)
-would return nonzero) that is not \[aq]\-\[aq], \[aq]:\[aq], or \[aq];\[aq].
-If such a
-character is followed by a colon, the option requires an argument, so
-.BR getopt ()
-places a pointer to the following text in the same
-\fIargv\fP-element, or the text of the following \fIargv\fP-element, in
-.IR optarg .
-Two colons mean an option takes
-an optional arg; if there is text in the current \fIargv\fP-element
-(i.e., in the same word as the option name itself, for example, "\-oarg"),
-then it is returned in \fIoptarg\fP, otherwise \fIoptarg\fP is set to zero.
-This is a GNU extension.
-If
-.I optstring
-contains
-.B W
-followed by a semicolon, then
-.B \-W foo
-is treated as the long option
-.BR \-\-foo .
-(The
-.B \-W
-option is reserved by POSIX.2 for implementation extensions.)
-This behavior is a GNU extension, not available with libraries before
-glibc 2.
-.PP
-By default,
-.BR getopt ()
-permutes the contents of \fIargv\fP as it
-scans, so that eventually all the nonoptions are at the end.
-Two other scanning modes are also implemented.
-If the first character of
-\fIoptstring\fP is \[aq]+\[aq] or the environment variable
-.B POSIXLY_CORRECT
-is set, then option processing stops as soon as a nonoption argument is
-encountered.
-If \[aq]+\[aq] is not the first character of
-.IR optstring ,
-it is treated as a normal option.
-If
-.B POSIXLY_CORRECT
-behaviour is required in this case
-.I optstring
-will contain two \[aq]+\[aq] symbols.
-If the first character of \fIoptstring\fP is \[aq]\-\[aq], then
-each nonoption \fIargv\fP-element is handled as if it were the argument of
-an option with character code 1.
-(This is used by programs that were
-written to expect options and other \fIargv\fP-elements in any order
-and that care about the ordering of the two.)
-The special argument "\-\-" forces an end of option-scanning regardless
-of the scanning mode.
-.PP
-While processing the option list,
-.BR getopt ()
-can detect two kinds of errors:
-(1) an option character that was not specified in
-.I optstring
-and (2) a missing option argument
-(i.e., an option at the end of the command line without an expected argument).
-Such errors are handled and reported as follows:
-.IP \[bu] 3
-By default,
-.BR getopt ()
-prints an error message on standard error,
-places the erroneous option character in
-.IR optopt ,
-and returns \[aq]?\[aq] as the function result.
-.IP \[bu]
-If the caller has set the global variable
-.I opterr
-to zero, then
-.BR getopt ()
-does not print an error message.
-The caller can determine that there was an error by testing whether
-the function return value is \[aq]?\[aq].
-(By default,
-.I opterr
-has a nonzero value.)
-.IP \[bu]
-If the first character
-(following any optional \[aq]+\[aq] or \[aq]\-\[aq] described above)
-of \fIoptstring\fP
-is a colon (\[aq]:\[aq]), then
-.BR getopt ()
-likewise does not print an error message.
-In addition, it returns \[aq]:\[aq] instead of \[aq]?\[aq] to
-indicate a missing option argument.
-This allows the caller to distinguish the two different types of errors.
-.\"
-.SS getopt_long() and getopt_long_only()
-The
-.BR getopt_long ()
-function works like
-.BR getopt ()
-except that it also accepts long options, started with two dashes.
-(If the program accepts only long options, then
-.I optstring
-should be specified as an empty string (""), not NULL.)
-Long option names may be abbreviated if the abbreviation is
-unique or is an exact match for some defined option.
-A long option
-may take a parameter, of the form
-.B \-\-arg=param
-or
-.BR "\-\-arg param" .
-.PP
-.I longopts
-is a pointer to the first element of an array of
-.I struct option
-declared in
-.I <getopt.h>
-as
-.PP
-.in +4n
-.EX
-struct option {
- const char *name;
- int has_arg;
- int *flag;
- int val;
-};
-.EE
-.in
-.PP
-The meanings of the different fields are:
-.TP
-.I name
-is the name of the long option.
-.TP
-.I has_arg
-is:
-\fBno_argument\fP (or 0) if the option does not take an argument;
-\fBrequired_argument\fP (or 1) if the option requires an argument; or
-\fBoptional_argument\fP (or 2) if the option takes an optional argument.
-.TP
-.I flag
-specifies how results are returned for a long option.
-If \fIflag\fP
-is NULL, then
-.BR getopt_long ()
-returns \fIval\fP.
-(For example, the calling program may set \fIval\fP to the equivalent short
-option character.)
-Otherwise,
-.BR getopt_long ()
-returns 0, and
-\fIflag\fP points to a variable which is set to \fIval\fP if the
-option is found, but left unchanged if the option is not found.
-.TP
-\fIval\fP
-is the value to return, or to load into the variable pointed
-to by \fIflag\fP.
-.PP
-The last element of the array has to be filled with zeros.
-.PP
-If \fIlongindex\fP is not NULL, it
-points to a variable which is set to the index of the long option relative to
-.IR longopts .
-.PP
-.BR getopt_long_only ()
-is like
-.BR getopt_long (),
-but \[aq]\-\[aq] as well
-as "\-\-" can indicate a long option.
-If an option that starts with \[aq]\-\[aq]
-(not "\-\-") doesn't match a long option, but does match a short option,
-it is parsed as a short option instead.
-.SH RETURN VALUE
-If an option was successfully found, then
-.BR getopt ()
-returns the option character.
-If all command-line options have been parsed, then
-.BR getopt ()
-returns \-1.
-If
-.BR getopt ()
-encounters an option character that was not in
-.IR optstring ,
-then \[aq]?\[aq] is returned.
-If
-.BR getopt ()
-encounters an option with a missing argument,
-then the return value depends on the first character in
-.IR optstring :
-if it is \[aq]:\[aq], then \[aq]:\[aq] is returned;
-otherwise \[aq]?\[aq] is returned.
-.PP
-.BR getopt_long ()
-and
-.BR getopt_long_only ()
-also return the option
-character when a short option is recognized.
-For a long option, they
-return \fIval\fP if \fIflag\fP is NULL, and 0 otherwise.
-Error and \-1 returns are the same as for
-.BR getopt (),
-plus \[aq]?\[aq] for an
-ambiguous match or an extraneous parameter.
-.SH ENVIRONMENT
-.TP
-.B POSIXLY_CORRECT
-If this is set, then option processing stops as soon as a nonoption
-argument is encountered.
-.TP
-.B _<PID>_GNU_nonoption_argv_flags_
-This variable was used by
-.BR bash (1)
-2.0 to communicate to glibc which arguments are the results of
-wildcard expansion and so should not be considered as options.
-This behavior was removed in
-.BR bash (1)
-2.01, but the support remains in glibc.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR getopt (),
-.BR getopt_long (),
-.BR getopt_long_only ()
-T} Thread safety T{
-MT-Unsafe race:getopt env
-T}
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-POSIX specifies that the
-.I argv
-array argument should be
-.IR const ,
-but these functions permute its elements
-unless the environment variable
-.B POSIXLY_CORRECT
-is set.
-.I const
-is used in the actual prototype to be compatible with other systems;
-however, this page doesn't show the qualifier,
-to avoid confusing readers.
-.SH STANDARDS
-.TP
-.BR getopt ()
-POSIX.1-2008.
-.TP
-.BR getopt_long ()
-.TQ
-.BR getopt_long_only ()
-GNU.
-.IP
-The use of \[aq]+\[aq] and \[aq]\-\[aq] in
-.I optstring
-is a GNU extension.
-.SH HISTORY
-.TP
-.BR getopt ()
-POSIX.1-2001, and POSIX.2.
-.PP
-On some older implementations,
-.BR getopt ()
-was declared in
-.IR <stdio.h> .
-SUSv1 permitted the declaration to appear in either
-.I <unistd.h>
-or
-.IR <stdio.h> .
-POSIX.1-1996 marked the use of
-.I <stdio.h>
-for this purpose as LEGACY.
-POSIX.1-2001 does not require the declaration to appear in
-.IR <stdio.h> .
-.SH NOTES
-A program that scans multiple argument vectors,
-or rescans the same vector more than once,
-and wants to make use of GNU extensions such as \[aq]+\[aq]
-and \[aq]\-\[aq] at the start of
-.IR optstring ,
-or changes the value of
-.B POSIXLY_CORRECT
-between scans,
-must reinitialize
-.BR getopt ()
-by resetting
-.I optind
-to 0, rather than the traditional value of 1.
-(Resetting to 0 forces the invocation of an internal initialization
-routine that rechecks
-.B POSIXLY_CORRECT
-and checks for GNU extensions in
-.IR optstring .)
-.PP
-Command-line arguments are parsed in strict order
-meaning that an option requiring an argument will consume the next argument,
-regardless of whether that argument is the correctly specified option argument
-or simply the next option
-(in the scenario the user mis-specifies the command line).
-For example, if
-.I optstring
-is specified as "1n:"
-and the user specifies the command line arguments incorrectly as
-.IR "prog\ \-n\ \-1" ,
-the
-.I \-n
-option will be given the
-.B optarg
-value "\-1", and the
-.I \-1
-option will be considered to have not been specified.
-.SH EXAMPLES
-.SS getopt()
-The following trivial example program uses
-.BR getopt ()
-to handle two program options:
-.IR \-n ,
-with no associated value; and
-.IR "\-t val" ,
-which expects an associated value.
-.PP
-.\" SRC BEGIN (getopt.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int flags, opt;
- int nsecs, tfnd;
-\&
- nsecs = 0;
- tfnd = 0;
- flags = 0;
- while ((opt = getopt(argc, argv, "nt:")) != \-1) {
- switch (opt) {
- case \[aq]n\[aq]:
- flags = 1;
- break;
- case \[aq]t\[aq]:
- nsecs = atoi(optarg);
- tfnd = 1;
- break;
- default: /* \[aq]?\[aq] */
- fprintf(stderr, "Usage: %s [\-t nsecs] [\-n] name\en",
- argv[0]);
- exit(EXIT_FAILURE);
- }
- }
-\&
- printf("flags=%d; tfnd=%d; nsecs=%d; optind=%d\en",
- flags, tfnd, nsecs, optind);
-\&
- if (optind >= argc) {
- fprintf(stderr, "Expected argument after options\en");
- exit(EXIT_FAILURE);
- }
-\&
- printf("name argument = %s\en", argv[optind]);
-\&
- /* Other code omitted */
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SS getopt_long()
-The following example program illustrates the use of
-.BR getopt_long ()
-with most of its features.
-.PP
-.\" SRC BEGIN (getopt_long.c)
-.EX
-#include <getopt.h>
-#include <stdio.h> /* for printf */
-#include <stdlib.h> /* for exit */
-\&
-int
-main(int argc, char *argv[])
-{
- int c;
- int digit_optind = 0;
-\&
- while (1) {
- int this_option_optind = optind ? optind : 1;
- int option_index = 0;
- static struct option long_options[] = {
- {"add", required_argument, 0, 0 },
- {"append", no_argument, 0, 0 },
- {"delete", required_argument, 0, 0 },
- {"verbose", no_argument, 0, 0 },
- {"create", required_argument, 0, \[aq]c\[aq]},
- {"file", required_argument, 0, 0 },
- {0, 0, 0, 0 }
- };
-\&
- c = getopt_long(argc, argv, "abc:d:012",
- long_options, &option_index);
- if (c == \-1)
- break;
-\&
- switch (c) {
- case 0:
- printf("option %s", long_options[option_index].name);
- if (optarg)
- printf(" with arg %s", optarg);
- printf("\en");
- break;
-\&
- case \[aq]0\[aq]:
- case \[aq]1\[aq]:
- case \[aq]2\[aq]:
- if (digit_optind != 0 && digit_optind != this_option_optind)
- printf("digits occur in two different argv\-elements.\en");
- digit_optind = this_option_optind;
- printf("option %c\en", c);
- break;
-\&
- case \[aq]a\[aq]:
- printf("option a\en");
- break;
-\&
- case \[aq]b\[aq]:
- printf("option b\en");
- break;
-\&
- case \[aq]c\[aq]:
- printf("option c with value \[aq]%s\[aq]\en", optarg);
- break;
-\&
- case \[aq]d\[aq]:
- printf("option d with value \[aq]%s\[aq]\en", optarg);
- break;
-\&
- case \[aq]?\[aq]:
- break;
-\&
- default:
- printf("?? getopt returned character code 0%o ??\en", c);
- }
- }
-\&
- if (optind < argc) {
- printf("non\-option ARGV\-elements: ");
- while (optind < argc)
- printf("%s ", argv[optind++]);
- printf("\en");
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR getopt (1),
-.BR getsubopt (3)
diff --git a/man3/getopt_long.3 b/man3/getopt_long.3
deleted file mode 100644
index 7612d3f67..000000000
--- a/man3/getopt_long.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getopt.3
diff --git a/man3/getopt_long_only.3 b/man3/getopt_long_only.3
deleted file mode 100644
index 7612d3f67..000000000
--- a/man3/getopt_long_only.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getopt.3
diff --git a/man3/getpass.3 b/man3/getpass.3
deleted file mode 100644
index 0992e167a..000000000
--- a/man3/getpass.3
+++ /dev/null
@@ -1,153 +0,0 @@
-'\" t
-.\" Copyright (c) 2000 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH getpass 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getpass \- get a password
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "[[deprecated]] char *getpass(const char *" prompt );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getpass ():
-.nf
- Since glibc 2.2.2:
- _XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L)
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE
- Before glibc 2.2.2:
- none
-.fi
-.SH DESCRIPTION
-This function is obsolete.
-Do not use it.
-See NOTES.
-If you want to read input without terminal echoing enabled,
-see the description of the
-.I ECHO
-flag in
-.BR termios (3).
-.PP
-The
-.BR getpass ()
-function opens
-.I /dev/tty
-(the controlling terminal of the process), outputs the string
-.IR prompt ,
-turns off echoing, reads one line (the "password"),
-restores the terminal state and closes
-.I /dev/tty
-again.
-.SH RETURN VALUE
-The function
-.BR getpass ()
-returns a pointer to a static buffer containing (the first
-.B PASS_MAX
-bytes of) the password without the trailing
-newline, terminated by a null byte (\[aq]\e0\[aq]).
-This buffer may be overwritten by a following call.
-On error, the terminal state is restored,
-.I errno
-is set to indicate the error, and NULL is returned.
-.SH ERRORS
-.TP
-.B ENXIO
-The process does not have a controlling terminal.
-.SH FILES
-.I /dev/tty
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getpass ()
-T} Thread safety MT-Unsafe term
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-Version 7 AT&T UNIX.
-Present in SUSv2, but marked LEGACY.
-Removed in POSIX.1-2001.
-.SH NOTES
-.\" For libc4 and libc5, the prompt is not written to
-.\" .I /dev/tty
-.\" but to
-.\" .IR stderr .
-.\" Moreover, if
-.\" .I /dev/tty
-.\" cannot be opened, the password is read from
-.\" .IR stdin .
-.\" The static buffer has length 128 so that only the first 127
-.\" bytes of the password are returned.
-.\" While reading the password, signal generation
-.\" .RB ( SIGINT ,
-.\" .BR SIGQUIT ,
-.\" .BR SIGSTOP ,
-.\" .BR SIGTSTP )
-.\" is disabled and the corresponding characters
-.\" (usually control-C, control-\e, control-Z and control-Y)
-.\" are transmitted as part of the password.
-.\" Since libc 5.4.19 also line editing is disabled, so that also
-.\" backspace and the like will be seen as part of the password.
-You should use instead
-.BR readpassphrase (3bsd),
-provided by
-.IR libbsd .
-.PP
-In the GNU C library implementation, if
-.I /dev/tty
-cannot be opened, the prompt is written to
-.I stderr
-and the password is read from
-.IR stdin .
-There is no limit on the length of the password.
-Line editing is not disabled.
-.PP
-According to SUSv2, the value of
-.B PASS_MAX
-must be defined in
-.I <limits.h>
-in case it is smaller than 8, and can in any case be obtained using
-.IR sysconf(_SC_PASS_MAX) .
-However, POSIX.2 withdraws the constants
-.B PASS_MAX
-and
-.BR _SC_PASS_MAX ,
-and the function
-.BR getpass ().
-.\" Libc4 and libc5 have never supported
-.\" .B PASS_MAX
-.\" or
-.\" .BR _SC_PASS_MAX .
-The glibc version accepts
-.B _SC_PASS_MAX
-and returns
-.B BUFSIZ
-(e.g., 8192).
-.SH BUGS
-The calling process should zero the password as soon as possible to avoid
-leaving the cleartext password visible in the process's address space.
-.SH SEE ALSO
-.BR crypt (3)
diff --git a/man3/getprotobyname.3 b/man3/getprotobyname.3
deleted file mode 100644
index f8cb4bba2..000000000
--- a/man3/getprotobyname.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getprotoent.3
diff --git a/man3/getprotobyname_r.3 b/man3/getprotobyname_r.3
deleted file mode 100644
index 9936ea827..000000000
--- a/man3/getprotobyname_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getprotoent_r.3
diff --git a/man3/getprotobynumber.3 b/man3/getprotobynumber.3
deleted file mode 100644
index f8cb4bba2..000000000
--- a/man3/getprotobynumber.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getprotoent.3
diff --git a/man3/getprotobynumber_r.3 b/man3/getprotobynumber_r.3
deleted file mode 100644
index 9936ea827..000000000
--- a/man3/getprotobynumber_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getprotoent_r.3
diff --git a/man3/getprotoent.3 b/man3/getprotoent.3
deleted file mode 100644
index 84ccdd18f..000000000
--- a/man3/getprotoent.3
+++ /dev/null
@@ -1,180 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 19:26:03 1993 by Rik Faith (faith@cs.unc.edu)
-.TH getprotoent 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getprotoent, getprotobyname, getprotobynumber, setprotoent,
-endprotoent \- get protocol entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <netdb.h>
-.PP
-.B struct protoent *getprotoent(void);
-.PP
-.BI "struct protoent *getprotobyname(const char *" name );
-.BI "struct protoent *getprotobynumber(int " proto );
-.PP
-.BI "void setprotoent(int " stayopen );
-.B void endprotoent(void);
-.fi
-.SH DESCRIPTION
-The
-.BR getprotoent ()
-function reads the next entry from the protocols database (see
-.BR protocols (5))
-and returns a
-.I protoent
-structure
-containing the broken-out fields from the entry.
-A connection is opened to the database if necessary.
-.PP
-The
-.BR getprotobyname ()
-function returns a
-.I protoent
-structure
-for the entry from the database
-that matches the protocol name
-.IR name .
-A connection is opened to the database if necessary.
-.PP
-The
-.BR getprotobynumber ()
-function returns a
-.I protoent
-structure
-for the entry from the database
-that matches the protocol number
-.IR number .
-A connection is opened to the database if necessary.
-.PP
-The
-.BR setprotoent ()
-function opens a connection to the database,
-and sets the next entry to the first entry.
-If
-.I stayopen
-is nonzero,
-then the connection to the database
-will not be closed between calls to one of the
-.BR getproto* ()
-functions.
-.PP
-The
-.BR endprotoent ()
-function closes the connection to the database.
-.PP
-The
-.I protoent
-structure is defined in
-.I <netdb.h>
-as follows:
-.PP
-.in +4n
-.EX
-struct protoent {
- char *p_name; /* official protocol name */
- char **p_aliases; /* alias list */
- int p_proto; /* protocol number */
-}
-.EE
-.in
-.PP
-The members of the
-.I protoent
-structure are:
-.TP
-.I p_name
-The official name of the protocol.
-.TP
-.I p_aliases
-A NULL-terminated list of alternative names for the protocol.
-.TP
-.I p_proto
-The protocol number.
-.SH RETURN VALUE
-The
-.BR getprotoent (),
-.BR getprotobyname (),
-and
-.BR getprotobynumber ()
-functions return a pointer to a
-statically allocated
-.I protoent
-structure, or a null pointer if an
-error occurs or the end of the file is reached.
-.SH FILES
-.PD 0
-.TP
-.I /etc/protocols
-protocol database file
-.PD
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR getprotoent ()
-T} Thread safety T{
-MT-Unsafe race:protoent
-race:protoentbuf locale
-T}
-T{
-.BR getprotobyname ()
-T} Thread safety T{
-MT-Unsafe race:protobyname
-locale
-T}
-T{
-.BR getprotobynumber ()
-T} Thread safety T{
-MT-Unsafe race:protobynumber
-locale
-T}
-T{
-.BR setprotoent (),
-.BR endprotoent ()
-T} Thread safety T{
-MT-Unsafe race:protoent
-locale
-T}
-.TE
-.hy
-.ad
-.sp 1
-In the above table,
-.I protoent
-in
-.I race:protoent
-signifies that if any of the functions
-.BR setprotoent (),
-.BR getprotoent (),
-or
-.BR endprotoent ()
-are used in parallel in different threads of a program,
-then data races could occur.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, 4.3BSD.
-.SH SEE ALSO
-.BR getnetent (3),
-.BR getprotoent_r (3),
-.BR getservent (3),
-.BR protocols (5)
diff --git a/man3/getprotoent_r.3 b/man3/getprotoent_r.3
deleted file mode 100644
index 0c08368f7..000000000
--- a/man3/getprotoent_r.3
+++ /dev/null
@@ -1,246 +0,0 @@
-'\" t
-.\" Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH getprotoent_r 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getprotoent_r, getprotobyname_r, getprotobynumber_r \- get
-protocol entry (reentrant)
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <netdb.h>
-.PP
-.BI "int getprotoent_r(struct protoent *restrict " result_buf ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct protoent **restrict " result );
-.BI "int getprotobyname_r(const char *restrict " name ,
-.BI " struct protoent *restrict " result_buf ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct protoent **restrict " result );
-.BI "int getprotobynumber_r(int " proto ,
-.BI " struct protoent *restrict " result_buf ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct protoent **restrict " result );
-.PP
-.fi
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getprotoent_r (),
-.BR getprotobyname_r (),
-.BR getprotobynumber_r ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR getprotoent_r (),
-.BR getprotobyname_r (),
-and
-.BR getprotobynumber_r ()
-functions are the reentrant equivalents of, respectively,
-.BR getprotoent (3),
-.BR getprotobyname (3),
-and
-.BR getprotobynumber (3).
-They differ in the way that the
-.I protoent
-structure is returned,
-and in the function calling signature and return value.
-This manual page describes just the differences from
-the nonreentrant functions.
-.PP
-Instead of returning a pointer to a statically allocated
-.I protoent
-structure as the function result,
-these functions copy the structure into the location pointed to by
-.IR result_buf .
-.PP
-The
-.I buf
-array is used to store the string fields pointed to by the returned
-.I protoent
-structure.
-(The nonreentrant functions allocate these strings in static storage.)
-The size of this array is specified in
-.IR buflen .
-If
-.I buf
-is too small, the call fails with the error
-.BR ERANGE ,
-and the caller must try again with a larger buffer.
-(A buffer of length 1024 bytes should be sufficient for most applications.)
-.\" I can find no information on the required/recommended buffer size;
-.\" the nonreentrant functions use a 1024 byte buffer.
-.\" The 1024 byte value is also what the Solaris man page suggests. -- mtk
-.PP
-If the function call successfully obtains a protocol record, then
-.I *result
-is set pointing to
-.IR result_buf ;
-otherwise,
-.I *result
-is set to NULL.
-.SH RETURN VALUE
-On success, these functions return 0.
-On error, they return one of the positive error numbers listed in ERRORS.
-.PP
-On error, record not found
-.RB ( getprotobyname_r (),
-.BR getprotobynumber_r ()),
-or end of input
-.RB ( getprotoent_r ())
-.I result
-is set to NULL.
-.SH ERRORS
-.TP
-.B ENOENT
-.RB ( getprotoent_r ())
-No more records in database.
-.TP
-.B ERANGE
-.I buf
-is too small.
-Try again with a larger buffer
-(and increased
-.IR buflen ).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getprotoent_r (),
-.BR getprotobyname_r (),
-.BR getprotobynumber_r ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-Functions with similar names exist on some other systems,
-though typically with different calling signatures.
-.SH STANDARDS
-GNU.
-.SH EXAMPLES
-The program below uses
-.BR getprotobyname_r ()
-to retrieve the protocol record for the protocol named
-in its first command-line argument.
-If a second (integer) command-line argument is supplied,
-it is used as the initial value for
-.IR buflen ;
-if
-.BR getprotobyname_r ()
-fails with the error
-.BR ERANGE ,
-the program retries with larger buffer sizes.
-The following shell session shows a couple of sample runs:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out tcp 1"
-ERANGE! Retrying with larger buffer
-getprotobyname_r() returned: 0 (success) (buflen=78)
-p_name=tcp; p_proto=6; aliases=TCP
-.RB "$" " ./a.out xxx 1"
-ERANGE! Retrying with larger buffer
-getprotobyname_r() returned: 0 (success) (buflen=100)
-Call failed/record not found
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (getprotoent_r.c)
-.EX
-#define _GNU_SOURCE
-#include <ctype.h>
-#include <errno.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-#define MAX_BUF 10000
-\&
-int
-main(int argc, char *argv[])
-{
- int buflen, erange_cnt, s;
- struct protoent result_buf;
- struct protoent *result;
- char buf[MAX_BUF];
-\&
- if (argc < 2) {
- printf("Usage: %s proto\-name [buflen]\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- buflen = 1024;
- if (argc > 2)
- buflen = atoi(argv[2]);
-\&
- if (buflen > MAX_BUF) {
- printf("Exceeded buffer limit (%d)\en", MAX_BUF);
- exit(EXIT_FAILURE);
- }
-\&
- erange_cnt = 0;
- do {
- s = getprotobyname_r(argv[1], &result_buf,
- buf, buflen, &result);
- if (s == ERANGE) {
- if (erange_cnt == 0)
- printf("ERANGE! Retrying with larger buffer\en");
- erange_cnt++;
-\&
- /* Increment a byte at a time so we can see exactly
- what size buffer was required. */
-\&
- buflen++;
-\&
- if (buflen > MAX_BUF) {
- printf("Exceeded buffer limit (%d)\en", MAX_BUF);
- exit(EXIT_FAILURE);
- }
- }
- } while (s == ERANGE);
-\&
- printf("getprotobyname_r() returned: %s (buflen=%d)\en",
- (s == 0) ? "0 (success)" : (s == ENOENT) ? "ENOENT" :
- strerror(s), buflen);
-\&
- if (s != 0 || result == NULL) {
- printf("Call failed/record not found\en");
- exit(EXIT_FAILURE);
- }
-\&
- printf("p_name=%s; p_proto=%d; aliases=",
- result_buf.p_name, result_buf.p_proto);
- for (char **p = result_buf.p_aliases; *p != NULL; p++)
- printf("%s ", *p);
- printf("\en");
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR getprotoent (3),
-.BR protocols (5)
diff --git a/man3/getpt.3 b/man3/getpt.3
deleted file mode 100644
index 38cecdf23..000000000
--- a/man3/getpt.3
+++ /dev/null
@@ -1,77 +0,0 @@
-'\" t
-.\" This man page was written by Jeremy Phelps <jphelps@notreached.net>.
-.\"
-.\" %%%LICENSE_START(FREELY_REDISTRIBUTABLE)
-.\" Redistribute and modify at will.
-.\" %%%LICENSE_END
-.\"
-.TH getpt 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getpt \- open a new pseudoterminal master
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <stdlib.h>
-.PP
-.B "int getpt(void);"
-.fi
-.SH DESCRIPTION
-.BR getpt ()
-opens a new pseudoterminal device and returns a file descriptor
-that refers to that device.
-It is equivalent to opening the pseudoterminal multiplexor device
-.PP
-.in +4n
-.EX
-open("/dev/ptmx", O_RDWR);
-.EE
-.in
-.PP
-on Linux systems, though the pseudoterminal multiplexor device is located
-elsewhere on some systems that use the GNU C library.
-.SH RETURN VALUE
-.BR getpt ()
-returns an open file descriptor upon successful completion.
-Otherwise, it
-returns \-1 and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-.BR getpt ()
-can fail with various errors described in
-.BR open (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getpt ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-Use
-.BR posix_openpt (3)
-instead.
-.SH STANDARDS
-GNU.
-.SH HISTORY
-glibc 2.1.
-.SH SEE ALSO
-.BR grantpt (3),
-.BR posix_openpt (3),
-.BR ptsname (3),
-.BR unlockpt (3),
-.BR ptmx (4),
-.BR pty (7)
diff --git a/man3/getpw.3 b/man3/getpw.3
deleted file mode 100644
index 488434108..000000000
--- a/man3/getpw.3
+++ /dev/null
@@ -1,128 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 19:23:25 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Mon May 27 21:37:47 1996 by Martin Schulze (joey@linux.de)
-.\"
-.TH getpw 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getpw \- reconstruct password line entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <sys/types.h>
-.B #include <pwd.h>
-.PP
-.BI "[[deprecated]] int getpw(uid_t " uid ", char *" buf );
-.fi
-.SH DESCRIPTION
-The
-.BR getpw ()
-function reconstructs the password line entry for
-the given user ID \fIuid\fP in the buffer \fIbuf\fP.
-The returned buffer contains a line of format
-.PP
-.in +4n
-.EX
-.B name:passwd:uid:gid:gecos:dir:shell
-.EE
-.in
-.PP
-The \fIpasswd\fP structure is defined in \fI<pwd.h>\fP as follows:
-.PP
-.in +4n
-.EX
-struct passwd {
- char *pw_name; /* username */
- char *pw_passwd; /* user password */
- uid_t pw_uid; /* user ID */
- gid_t pw_gid; /* group ID */
- char *pw_gecos; /* user information */
- char *pw_dir; /* home directory */
- char *pw_shell; /* shell program */
-};
-.EE
-.in
-.PP
-For more information about the fields of this structure, see
-.BR passwd (5).
-.SH RETURN VALUE
-The
-.BR getpw ()
-function returns 0 on success; on error, it returns \-1, and
-.I errno
-is set to indicate the error.
-.PP
-If
-.I uid
-is not found in the password database,
-.BR getpw ()
-returns \-1, sets
-.I errno
-to 0, and leaves
-.I buf
-unchanged.
-.SH ERRORS
-.TP
-.BR 0 " or " ENOENT
-No user corresponding to
-.IR uid .
-.TP
-.B EINVAL
-.I buf
-is NULL.
-.TP
-.B ENOMEM
-Insufficient memory to allocate
-.I passwd
-structure.
-.SH FILES
-.TP
-.I /etc/passwd
-password database file
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getpw ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-SVr2.
-.SH BUGS
-The
-.BR getpw ()
-function is dangerous as it may overflow the provided buffer
-.IR buf .
-It is obsoleted by
-.BR getpwuid (3).
-.SH SEE ALSO
-.BR endpwent (3),
-.BR fgetpwent (3),
-.BR getpwent (3),
-.BR getpwnam (3),
-.BR getpwuid (3),
-.BR putpwent (3),
-.BR setpwent (3),
-.BR passwd (5)
diff --git a/man3/getpwent.3 b/man3/getpwent.3
deleted file mode 100644
index 10230a1ad..000000000
--- a/man3/getpwent.3
+++ /dev/null
@@ -1,187 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\"
-.\" Modified Sat Jul 24 19:22:14 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Mon May 27 21:37:47 1996 by Martin Schulze (joey@linux.de)
-.\"
-.TH getpwent 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getpwent, setpwent, endpwent \- get password file entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.B #include <pwd.h>
-.PP
-.B struct passwd *getpwent(void);
-.B void setpwent(void);
-.B void endpwent(void);
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getpwent (),
-.BR setpwent (),
-.BR endpwent ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR getpwent ()
-function returns a pointer to a structure containing
-the broken-out fields of a record from the password database
-(e.g., the local password file
-.IR /etc/passwd ,
-NIS, and LDAP).
-The first time
-.BR getpwent ()
-is called, it returns the first entry; thereafter, it returns successive
-entries.
-.PP
-The
-.BR setpwent ()
-function rewinds to the beginning
-of the password database.
-.PP
-The
-.BR endpwent ()
-function is used to close the password database
-after all processing has been performed.
-.PP
-The \fIpasswd\fP structure is defined in \fI<pwd.h>\fP as follows:
-.PP
-.in +4n
-.EX
-struct passwd {
- char *pw_name; /* username */
- char *pw_passwd; /* user password */
- uid_t pw_uid; /* user ID */
- gid_t pw_gid; /* group ID */
- char *pw_gecos; /* user information */
- char *pw_dir; /* home directory */
- char *pw_shell; /* shell program */
-};
-.EE
-.in
-.PP
-For more information about the fields of this structure, see
-.BR passwd (5).
-.SH RETURN VALUE
-The
-.BR getpwent ()
-function returns a pointer to a
-.I passwd
-structure, or NULL if
-there are no more entries or an error occurred.
-If an error occurs,
-.I errno
-is set to indicate the error.
-If one wants to check
-.I errno
-after the call, it should be set to zero before the call.
-.PP
-The return value may point to a static area, and may be overwritten
-by subsequent calls to
-.BR getpwent (),
-.BR getpwnam (3),
-or
-.BR getpwuid (3).
-(Do not pass the returned pointer to
-.BR free (3).)
-.SH ERRORS
-.TP
-.B EINTR
-A signal was caught; see
-.BR signal (7).
-.TP
-.B EIO
-I/O error.
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOMEM
-.\" not in POSIX
-Insufficient memory to allocate
-.I passwd
-structure.
-.\" to allocate the passwd structure, or to allocate buffers
-.TP
-.B ERANGE
-Insufficient buffer space supplied.
-.SH FILES
-.TP
-.I /etc/passwd
-local password database file
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR getpwent ()
-T} Thread safety T{
-MT-Unsafe race:pwent
-race:pwentbuf locale
-T}
-T{
-.BR setpwent (),
-.BR endpwent ()
-T} Thread safety T{
-MT-Unsafe race:pwent locale
-T}
-.TE
-.hy
-.ad
-.sp 1
-In the above table,
-.I pwent
-in
-.I race:pwent
-signifies that if any of the functions
-.BR setpwent (),
-.BR getpwent (),
-or
-.BR endpwent ()
-are used in parallel in different threads of a program,
-then data races could occur.
-.SH VERSIONS
-The
-.I pw_gecos
-field is not specified in POSIX, but is present on most implementations.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR fgetpwent (3),
-.BR getpw (3),
-.BR getpwent_r (3),
-.BR getpwnam (3),
-.BR getpwuid (3),
-.BR putpwent (3),
-.BR passwd (5)
diff --git a/man3/getpwent_r.3 b/man3/getpwent_r.3
deleted file mode 100644
index 634cdc405..000000000
--- a/man3/getpwent_r.3
+++ /dev/null
@@ -1,225 +0,0 @@
-'\" t
-.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH getpwent_r 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getpwent_r, fgetpwent_r \- get passwd file entry reentrantly
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <pwd.h>
-.PP
-.BI "int getpwent_r(struct passwd *restrict " pwbuf ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct passwd **restrict " pwbufp );
-.BI "int fgetpwent_r(FILE *restrict " stream \
-", struct passwd *restrict " pwbuf ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct passwd **restrict " pwbufp );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getpwent_r (),
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR fgetpwent_r ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The functions
-.BR getpwent_r ()
-and
-.BR fgetpwent_r ()
-are the reentrant versions of
-.BR getpwent (3)
-and
-.BR fgetpwent (3).
-The former reads the next passwd entry from the stream initialized by
-.BR setpwent (3).
-The latter reads the next passwd entry from
-.IR stream .
-.PP
-The \fIpasswd\fP structure is defined in
-.I <pwd.h>
-as follows:
-.PP
-.in +4n
-.EX
-struct passwd {
- char *pw_name; /* username */
- char *pw_passwd; /* user password */
- uid_t pw_uid; /* user ID */
- gid_t pw_gid; /* group ID */
- char *pw_gecos; /* user information */
- char *pw_dir; /* home directory */
- char *pw_shell; /* shell program */
-};
-.EE
-.in
-.PP
-For more information about the fields of this structure, see
-.BR passwd (5).
-.PP
-The nonreentrant functions return a pointer to static storage,
-where this static storage contains further pointers to user
-name, password, gecos field, home directory and shell.
-The reentrant functions described here return all of that in
-caller-provided buffers.
-First of all there is the buffer
-.I pwbuf
-that can hold a \fIstruct passwd\fP.
-And next the buffer
-.I buf
-of size
-.I buflen
-that can hold additional strings.
-The result of these functions, the \fIstruct passwd\fP read from the stream,
-is stored in the provided buffer
-.IR *pwbuf ,
-and a pointer to this \fIstruct passwd\fP is returned in
-.IR *pwbufp .
-.SH RETURN VALUE
-On success, these functions return 0 and
-.I *pwbufp
-is a pointer to the \fIstruct passwd\fP.
-On error, these functions return an error value and
-.I *pwbufp
-is NULL.
-.SH ERRORS
-.TP
-.B ENOENT
-No more entries.
-.TP
-.B ERANGE
-Insufficient buffer space supplied.
-Try again with larger buffer.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR getpwent_r ()
-T} Thread safety T{
-MT-Unsafe race:pwent locale
-T}
-T{
-.BR fgetpwent_r ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-In the above table,
-.I pwent
-in
-.I race:pwent
-signifies that if any of the functions
-.BR setpwent (),
-.BR getpwent (),
-.BR endpwent (),
-or
-.BR getpwent_r ()
-are used in parallel in different threads of a program,
-then data races could occur.
-.SH VERSIONS
-Other systems use the prototype
-.PP
-.in +4n
-.EX
-struct passwd *
-getpwent_r(struct passwd *pwd, char *buf, int buflen);
-.EE
-.in
-.PP
-or, better,
-.PP
-.in +4n
-.EX
-int
-getpwent_r(struct passwd *pwd, char *buf, int buflen,
- FILE **pw_fp);
-.EE
-.in
-.SH STANDARDS
-None.
-.SH HISTORY
-These functions are done in a style resembling
-the POSIX version of functions like
-.BR getpwnam_r (3).
-.SH NOTES
-The function
-.BR getpwent_r ()
-is not really reentrant since it shares the reading position
-in the stream with all other threads.
-.SH EXAMPLES
-.\" SRC BEGIN (getpwent_r.c)
-.EX
-#define _GNU_SOURCE
-#include <pwd.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-#define BUFLEN 4096
-\&
-int
-main(void)
-{
- struct passwd pw;
- struct passwd *pwp;
- char buf[BUFLEN];
- int i;
-\&
- setpwent();
- while (1) {
- i = getpwent_r(&pw, buf, sizeof(buf), &pwp);
- if (i)
- break;
- printf("%s (%jd)\etHOME %s\etSHELL %s\en", pwp\->pw_name,
- (intmax_t) pwp\->pw_uid, pwp\->pw_dir, pwp\->pw_shell);
- }
- endpwent();
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" perhaps add error checking - should use strerror_r
-.\" #include <errno.h>
-.\" #include <stdlib.h>
-.\" if (i) {
-.\" if (i == ENOENT)
-.\" break;
-.\" printf("getpwent_r: %s", strerror(i));
-.\" exit(EXIT_SUCCESS);
-.\" }
-.\" SRC END
-.SH SEE ALSO
-.BR fgetpwent (3),
-.BR getpw (3),
-.BR getpwent (3),
-.BR getpwnam (3),
-.BR getpwuid (3),
-.BR putpwent (3),
-.BR passwd (5)
diff --git a/man3/getpwnam.3 b/man3/getpwnam.3
deleted file mode 100644
index 3d0c19563..000000000
--- a/man3/getpwnam.3
+++ /dev/null
@@ -1,343 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's "POSIX Programmer's Guide" (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\"
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 1996-05-27 by Martin Schulze (joey@linux.de)
-.\" Modified 2003-11-15 by aeb
-.\" 2008-11-07, mtk, Added an example program for getpwnam_r().
-.\"
-.TH getpwnam 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getpwnam, getpwnam_r, getpwuid, getpwuid_r \- get password file entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.B #include <pwd.h>
-.PP
-.BI "struct passwd *getpwnam(const char *" name );
-.BI "struct passwd *getpwuid(uid_t " uid );
-.PP
-.BI "int getpwnam_r(const char *restrict " name ", \
-struct passwd *restrict " pwd ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct passwd **restrict " result );
-.BI "int getpwuid_r(uid_t " uid ", struct passwd *restrict " pwd ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct passwd **restrict " result );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getpwnam_r (),
-.BR getpwuid_r ():
-.nf
- _POSIX_C_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR getpwnam ()
-function returns a pointer to a structure containing
-the broken-out fields of the record in the password database
-(e.g., the local password file
-.IR /etc/passwd ,
-NIS, and LDAP)
-that matches the username
-.IR name .
-.PP
-The
-.BR getpwuid ()
-function returns a pointer to a structure containing
-the broken-out fields of the record in the password database
-that matches the user ID
-.IR uid .
-.PP
-The \fIpasswd\fP structure is defined in \fI<pwd.h>\fP as follows:
-.PP
-.in +4n
-.EX
-struct passwd {
- char *pw_name; /* username */
- char *pw_passwd; /* user password */
- uid_t pw_uid; /* user ID */
- gid_t pw_gid; /* group ID */
- char *pw_gecos; /* user information */
- char *pw_dir; /* home directory */
- char *pw_shell; /* shell program */
-};
-.EE
-.in
-.PP
-See
-.BR passwd (5)
-for more information about these fields.
-.PP
-The
-.BR getpwnam_r ()
-and
-.BR getpwuid_r ()
-functions obtain the same information as
-.BR getpwnam ()
-and
-.BR getpwuid (),
-but store the retrieved
-.I passwd
-structure in the space pointed to by
-.IR pwd .
-The string fields pointed to by the members of the
-.I passwd
-structure are stored in the buffer
-.I buf
-of size
-.IR buflen .
-A pointer to the result (in case of success) or NULL (in case no entry
-was found or an error occurred) is stored in
-.IR *result .
-.PP
-The call
-.PP
-.in +4n
-.EX
-sysconf(_SC_GETPW_R_SIZE_MAX)
-.EE
-.in
-.PP
-returns either \-1, without changing
-.IR errno ,
-or an initial suggested size for
-.IR buf .
-(If this size is too small,
-the call fails with
-.BR ERANGE ,
-in which case the caller can retry with a larger buffer.)
-.SH RETURN VALUE
-The
-.BR getpwnam ()
-and
-.BR getpwuid ()
-functions return a pointer to a
-.I passwd
-structure, or NULL if the matching entry is not found or
-an error occurs.
-If an error occurs,
-.I errno
-is set to indicate the error.
-If one wants to check
-.I errno
-after the call, it should be set to zero before the call.
-.PP
-The return value may point to a static area, and may be overwritten
-by subsequent calls to
-.BR getpwent (3),
-.BR getpwnam (),
-or
-.BR getpwuid ().
-(Do not pass the returned pointer to
-.BR free (3).)
-.PP
-On success,
-.BR getpwnam_r ()
-and
-.BR getpwuid_r ()
-return zero, and set
-.I *result
-to
-.IR pwd .
-If no matching password record was found,
-these functions return 0 and store NULL in
-.IR *result .
-In case of error, an error number is returned, and NULL is stored in
-.IR *result .
-.SH ERRORS
-.TP
-.BR 0 " or " ENOENT " or " ESRCH " or " EBADF " or " EPERM " or ..."
-The given
-.I name
-or
-.I uid
-was not found.
-.TP
-.B EINTR
-A signal was caught; see
-.BR signal (7).
-.TP
-.B EIO
-I/O error.
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOMEM
-.\" not in POSIX
-Insufficient memory to allocate
-.I passwd
-structure.
-.\" This structure is static, allocated 0 or 1 times. No memory leak. (libc45)
-.TP
-.B ERANGE
-Insufficient buffer space supplied.
-.SH FILES
-.TP
-.I /etc/passwd
-local password database file
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR getpwnam ()
-T} Thread safety T{
-MT-Unsafe race:pwnam locale
-T}
-T{
-.BR getpwuid ()
-T} Thread safety T{
-MT-Unsafe race:pwuid locale
-T}
-T{
-.BR getpwnam_r (),
-.BR getpwuid_r ()
-T} Thread safety T{
-MT-Safe locale
-T}
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The
-.I pw_gecos
-field is not specified in POSIX, but is present on most implementations.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.SH NOTES
-The formulation given above under "RETURN VALUE" is from POSIX.1-2001.
-It does not call "not found" an error, and hence does not specify what value
-.I errno
-might have in this situation.
-But that makes it impossible to recognize
-errors.
-One might argue that according to POSIX
-.I errno
-should be left unchanged if an entry is not found.
-Experiments on various
-UNIX-like systems show that lots of different values occur in this
-situation: 0, ENOENT, EBADF, ESRCH, EWOULDBLOCK, EPERM, and probably others.
-.\" more precisely:
-.\" AIX 5.1 - gives ESRCH
-.\" OSF1 4.0g - gives EWOULDBLOCK
-.\" libc, glibc up to glibc 2.6, Irix 6.5 - give ENOENT
-.\" since glibc 2.7 - give 0
-.\" FreeBSD 4.8, OpenBSD 3.2, NetBSD 1.6 - give EPERM
-.\" SunOS 5.8 - gives EBADF
-.\" Tru64 5.1b, HP-UX-11i, SunOS 5.7 - give 0
-.PP
-The
-.I pw_dir
-field contains the name of the initial working directory of the user.
-Login programs use the value of this field to initialize the
-.B HOME
-environment variable for the login shell.
-An application that wants to determine its user's home directory
-should inspect the value of
-.B HOME
-(rather than the value
-.IR getpwuid(getuid())\->pw_dir )
-since this allows the user to modify their notion of
-"the home directory" during a login session.
-To determine the (initial) home directory of another user,
-it is necessary to use
-.I getpwnam("username")\->pw_dir
-or similar.
-.SH EXAMPLES
-The program below demonstrates the use of
-.BR getpwnam_r ()
-to find the full username and user ID for the username
-supplied as a command-line argument.
-.PP
-.\" SRC BEGIN (getpwnam.c)
-.EX
-#include <errno.h>
-#include <pwd.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-int
-main(int argc, char *argv[])
-{
- struct passwd pwd;
- struct passwd *result;
- char *buf;
- long bufsize;
- int s;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s username\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
- if (bufsize == \-1) /* Value was indeterminate */
- bufsize = 16384; /* Should be more than enough */
-\&
- buf = malloc(bufsize);
- if (buf == NULL) {
- perror("malloc");
- exit(EXIT_FAILURE);
- }
-\&
- s = getpwnam_r(argv[1], &pwd, buf, bufsize, &result);
- if (result == NULL) {
- if (s == 0)
- printf("Not found\en");
- else {
- errno = s;
- perror("getpwnam_r");
- }
- exit(EXIT_FAILURE);
- }
-\&
- printf("Name: %s; UID: %jd\en", pwd.pw_gecos,
- (intmax_t) pwd.pw_uid);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR endpwent (3),
-.BR fgetpwent (3),
-.BR getgrnam (3),
-.BR getpw (3),
-.BR getpwent (3),
-.BR getspnam (3),
-.BR putpwent (3),
-.BR setpwent (3),
-.BR passwd (5)
diff --git a/man3/getpwnam_r.3 b/man3/getpwnam_r.3
deleted file mode 100644
index e83dcaf7e..000000000
--- a/man3/getpwnam_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getpwnam.3
diff --git a/man3/getpwuid.3 b/man3/getpwuid.3
deleted file mode 100644
index e83dcaf7e..000000000
--- a/man3/getpwuid.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getpwnam.3
diff --git a/man3/getpwuid_r.3 b/man3/getpwuid_r.3
deleted file mode 100644
index e83dcaf7e..000000000
--- a/man3/getpwuid_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getpwnam.3
diff --git a/man3/getrpcbyname.3 b/man3/getrpcbyname.3
deleted file mode 100644
index 923085e2e..000000000
--- a/man3/getrpcbyname.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getrpcent.3
diff --git a/man3/getrpcbyname_r.3 b/man3/getrpcbyname_r.3
deleted file mode 100644
index 78323ea91..000000000
--- a/man3/getrpcbyname_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getrpcent_r.3
diff --git a/man3/getrpcbynumber.3 b/man3/getrpcbynumber.3
deleted file mode 100644
index 923085e2e..000000000
--- a/man3/getrpcbynumber.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getrpcent.3
diff --git a/man3/getrpcbynumber_r.3 b/man3/getrpcbynumber_r.3
deleted file mode 100644
index 78323ea91..000000000
--- a/man3/getrpcbynumber_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getrpcent_r.3
diff --git a/man3/getrpcent.3 b/man3/getrpcent.3
deleted file mode 100644
index 992612002..000000000
--- a/man3/getrpcent.3
+++ /dev/null
@@ -1,137 +0,0 @@
-'\" t
-.\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
-.\"
-.\" %%%LICENSE_START(BSD_ONELINE_CDROM)
-.\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
-.\" %%%LICENSE_END
-.\"
-.\" @(#)getrpcent.3n 2.2 88/08/02 4.0 RPCSRC; from 1.11 88/03/14 SMI
-.TH getrpcent 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getrpcent, getrpcbyname, getrpcbynumber, setrpcent, endrpcent \- get
-RPC entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <netdb.h>
-.PP
-.B struct rpcent *getrpcent(void);
-.PP
-.BI "struct rpcent *getrpcbyname(const char *" name );
-.BI "struct rpcent *getrpcbynumber(int " number );
-.PP
-.BI "void setrpcent(int " stayopen );
-.B void endrpcent(void);
-.fi
-.SH DESCRIPTION
-The
-.BR getrpcent (),
-.BR getrpcbyname (),
-and
-.BR getrpcbynumber ()
-functions each return a pointer to an object with the
-following structure containing the broken-out
-fields of an entry in the RPC program number data base.
-.PP
-.in +4n
-.EX
-struct rpcent {
- char *r_name; /* name of server for this RPC program */
- char **r_aliases; /* alias list */
- long r_number; /* RPC program number */
-};
-.EE
-.in
-.PP
-The members of this structure are:
-.TP
-.I r_name
-The name of the server for this RPC program.
-.TP
-.I r_aliases
-A NULL-terminated list of alternate names for the RPC program.
-.TP
-.I r_number
-The RPC program number for this service.
-.PP
-The
-.BR getrpcent ()
-function reads the next entry from the database.
-A connection is opened to the database if necessary.
-.PP
-The
-.BR setrpcent ()
-function opens a connection to the database,
-and sets the next entry to the first entry.
-If
-.I stayopen
-is nonzero,
-then the connection to the database
-will not be closed between calls to one of the
-.BR getrpc* ()
-functions.
-.PP
-The
-.BR endrpcent ()
-function closes the connection to the database.
-.PP
-The
-.BR getrpcbyname ()
-and
-.BR getrpcbynumber ()
-functions sequentially search from the beginning
-of the file until a matching RPC program name or
-program number is found, or until end-of-file is encountered.
-.SH RETURN VALUE
-On success,
-.BR getrpcent (),
-.BR getrpcbyname (),
-and
-.BR getrpcbynumber ()
-return a pointer to a statically allocated
-.I rpcent
-structure.
-NULL is returned on EOF or error.
-.SH FILES
-.TP
-.I /etc/rpc
-RPC program number database.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getrpcent (),
-.BR getrpcbyname (),
-.BR getrpcbynumber ()
-T} Thread safety MT-Unsafe
-T{
-.BR setrpcent (),
-.BR endrpcent ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-BSD.
-.SH HISTORY
-BSD, Solaris.
-.SH BUGS
-All information
-is contained in a static area
-so it must be copied if it is
-to be saved.
-.SH SEE ALSO
-.BR getrpcent_r (3),
-.BR rpc (5),
-.BR rpcinfo (8),
-.BR ypserv (8)
diff --git a/man3/getrpcent_r.3 b/man3/getrpcent_r.3
deleted file mode 100644
index 465e6332b..000000000
--- a/man3/getrpcent_r.3
+++ /dev/null
@@ -1,139 +0,0 @@
-'\" t
-.\" Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH getrpcent_r 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getrpcent_r, getrpcbyname_r, getrpcbynumber_r \- get
-RPC entry (reentrant)
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <netdb.h>
-.PP
-.BI "int getrpcent_r(struct rpcent *" result_buf ", char " buf [. buflen ],
-.BI " size_t " buflen ", struct rpcent **" result );
-.BI "int getrpcbyname_r(const char *" name ,
-.BI " struct rpcent *" result_buf ", char " buf [. buflen ],
-.BI " size_t " buflen ", struct rpcent **" result );
-.BI "int getrpcbynumber_r(int " number ,
-.BI " struct rpcent *" result_buf ", char " buf [. buflen ],
-.BI " size_t " buflen ", struct rpcent **" result );
-.PP
-.fi
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getrpcent_r (),
-.BR getrpcbyname_r (),
-.BR getrpcbynumber_r ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR getrpcent_r (),
-.BR getrpcbyname_r (),
-and
-.BR getrpcbynumber_r ()
-functions are the reentrant equivalents of, respectively,
-.BR getrpcent (3),
-.BR getrpcbyname (3),
-and
-.BR getrpcbynumber (3).
-They differ in the way that the
-.I rpcent
-structure is returned,
-and in the function calling signature and return value.
-This manual page describes just the differences from
-the nonreentrant functions.
-.PP
-Instead of returning a pointer to a statically allocated
-.I rpcent
-structure as the function result,
-these functions copy the structure into the location pointed to by
-.IR result_buf .
-.PP
-The
-.I buf
-array is used to store the string fields pointed to by the returned
-.I rpcent
-structure.
-(The nonreentrant functions allocate these strings in static storage.)
-The size of this array is specified in
-.IR buflen .
-If
-.I buf
-is too small, the call fails with the error
-.BR ERANGE ,
-and the caller must try again with a larger buffer.
-(A buffer of length 1024 bytes should be sufficient for most applications.)
-.\" I can find no information on the required/recommended buffer size;
-.\" the nonreentrant functions use a 1024 byte buffer -- mtk.
-.PP
-If the function call successfully obtains an RPC record, then
-.I *result
-is set pointing to
-.IR result_buf ;
-otherwise,
-.I *result
-is set to NULL.
-.SH RETURN VALUE
-On success, these functions return 0.
-On error, they return one of the positive error numbers listed in ERRORS.
-.PP
-On error, record not found
-.RB ( getrpcbyname_r (),
-.BR getrpcbynumber_r ()),
-or end of input
-.RB ( getrpcent_r ())
-.I result
-is set to NULL.
-.SH ERRORS
-.TP
-.B ENOENT
-.RB ( getrpcent_r ())
-No more records in database.
-.TP
-.B ERANGE
-.I buf
-is too small.
-Try again with a larger buffer
-(and increased
-.IR buflen ).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getrpcent_r (),
-.BR getrpcbyname_r (),
-.BR getrpcbynumber_r ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-Functions with similar names exist on some other systems,
-though typically with different calling signatures.
-.SH STANDARDS
-GNU.
-.SH SEE ALSO
-.BR getrpcent (3),
-.BR rpc (5)
diff --git a/man3/getrpcport.3 b/man3/getrpcport.3
deleted file mode 100644
index 53c9e57f1..000000000
--- a/man3/getrpcport.3
+++ /dev/null
@@ -1,62 +0,0 @@
-'\" t
-.\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
-.\"
-.\" %%%LICENSE_START(BSD_ONELINE_CDROM)
-.\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
-.\" %%%LICENSE_END
-.\"
-.\" @(#)getrpcport.3r 2.2 88/08/02 4.0 RPCSRC; from 1.12 88/02/26 SMI
-.TH getrpcport 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getrpcport \- get RPC port number
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B "#include <rpc/rpc.h>"
-.PP
-.BI "int getrpcport(const char *" host ", unsigned long " prognum ,
-.BI " unsigned long " versnum ", unsigned int " proto );
-.fi
-.SH DESCRIPTION
-.BR getrpcport ()
-returns the port number for version
-.I versnum
-of the RPC program
-.I prognum
-running on
-.I host
-and using protocol
-.IR proto .
-It returns 0 if it cannot contact the portmapper, or if
-.I prognum
-is not registered.
-If
-.I prognum
-is registered but not with version
-.IR versnum ,
-it will still return a port number (for some version of the program)
-indicating that the program is indeed registered.
-The version mismatch will be detected upon the first call to the service.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getrpcport ()
-T} Thread safety MT-Safe env locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-BSD.
-.SH HISTORY
-BSD, Solaris.
diff --git a/man3/gets.3 b/man3/gets.3
deleted file mode 100644
index b07dda31e..000000000
--- a/man3/gets.3
+++ /dev/null
@@ -1,110 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Wed Jul 28 11:12:07 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Fri Sep 8 15:48:13 1995 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified 2013-12-31, David Malcolm <dmalcolm@redhat.com>
-.\" Split gets(3) into its own page; fgetc() et al. move to fgetc(3)
-.TH gets 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-gets \- get a string from standard input (DEPRECATED)
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "[[deprecated]] char *gets(char *" "s" );
-.fi
-.SH DESCRIPTION
-.IR "Never use this function" .
-.PP
-.BR gets ()
-reads a line from
-.I stdin
-into the buffer pointed to by
-.I s
-until either a terminating newline or
-.BR EOF ,
-which it replaces with a null byte (\[aq]\e0\[aq]).
-No check for buffer overrun is performed (see BUGS below).
-.SH RETURN VALUE
-.BR gets ()
-returns
-.I s
-on success, and NULL
-on error or when end of file occurs while no characters have been read.
-However, given the lack of buffer overrun checking, there can be no
-guarantees that the function will even return.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR gets ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-C89, POSIX.1-2001.
-.PP
-LSB deprecates
-.BR gets ().
-POSIX.1-2008 marks
-.BR gets ()
-obsolescent.
-ISO C11 removes the specification of
-.BR gets ()
-from the C language, and since glibc 2.16,
-glibc header files don't expose the function declaration if the
-.B _ISOC11_SOURCE
-feature test macro is defined.
-.SH BUGS
-Never use
-.BR gets ().
-Because it is impossible to tell without knowing the data in advance how many
-characters
-.BR gets ()
-will read, and because
-.BR gets ()
-will continue to store characters past the end of the buffer,
-it is extremely dangerous to use.
-It has been used to break computer security.
-Use
-.BR fgets ()
-instead.
-.PP
-For more information, see CWE-242 (aka "Use of Inherently Dangerous
-Function") at
-http://cwe.mitre.org/data/definitions/242.html
-.SH SEE ALSO
-.BR read (2),
-.BR write (2),
-.BR ferror (3),
-.BR fgetc (3),
-.BR fgets (3),
-.BR fgetwc (3),
-.BR fgetws (3),
-.BR fopen (3),
-.BR fread (3),
-.BR fseek (3),
-.BR getline (3),
-.BR getwchar (3),
-.BR puts (3),
-.BR scanf (3),
-.BR ungetwc (3),
-.BR unlocked_stdio (3),
-.BR feature_test_macros (7)
diff --git a/man3/getservbyname.3 b/man3/getservbyname.3
deleted file mode 100644
index eaafb1c1e..000000000
--- a/man3/getservbyname.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getservent.3
diff --git a/man3/getservbyname_r.3 b/man3/getservbyname_r.3
deleted file mode 100644
index b36a44260..000000000
--- a/man3/getservbyname_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getservent_r.3
diff --git a/man3/getservbyport.3 b/man3/getservbyport.3
deleted file mode 100644
index eaafb1c1e..000000000
--- a/man3/getservbyport.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getservent.3
diff --git a/man3/getservbyport_r.3 b/man3/getservbyport_r.3
deleted file mode 100644
index b36a44260..000000000
--- a/man3/getservbyport_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getservent_r.3
diff --git a/man3/getservent.3 b/man3/getservent.3
deleted file mode 100644
index 3a43c299c..000000000
--- a/man3/getservent.3
+++ /dev/null
@@ -1,197 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 19:19:11 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Wed Oct 18 20:23:54 1995 by Martin Schulze <joey@infodrom.north.de>
-.\" Modified Mon Apr 22 01:50:54 1996 by Martin Schulze <joey@infodrom.north.de>
-.\" 2001-07-25 added a clause about NULL proto (Martin Michlmayr or David N. Welton)
-.\"
-.TH getservent 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getservent, getservbyname, getservbyport, setservent, endservent \-
-get service entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <netdb.h>
-.PP
-.B struct servent *getservent(void);
-.PP
-.BI "struct servent *getservbyname(const char *" name ", const char *" proto );
-.BI "struct servent *getservbyport(int " port ", const char *" proto );
-.PP
-.BI "void setservent(int " stayopen );
-.B void endservent(void);
-.fi
-.SH DESCRIPTION
-The
-.BR getservent ()
-function reads the next entry from the services database (see
-.BR services (5))
-and returns a
-.I servent
-structure containing
-the broken-out fields from the entry.
-A connection is opened to the database if necessary.
-.PP
-The
-.BR getservbyname ()
-function returns a
-.I servent
-structure
-for the entry from the database
-that matches the service
-.I name
-using protocol
-.IR proto .
-If
-.I proto
-is NULL, any protocol will be matched.
-A connection is opened to the database if necessary.
-.PP
-The
-.BR getservbyport ()
-function returns a
-.I servent
-structure
-for the entry from the database
-that matches the port
-.I port
-(given in network byte order)
-using protocol
-.IR proto .
-If
-.I proto
-is NULL, any protocol will be matched.
-A connection is opened to the database if necessary.
-.PP
-The
-.BR setservent ()
-function opens a connection to the database,
-and sets the next entry to the first entry.
-If
-.I stayopen
-is nonzero,
-then the connection to the database
-will not be closed between calls to one of the
-.BR getserv* ()
-functions.
-.PP
-The
-.BR endservent ()
-function closes the connection to the database.
-.PP
-The
-.I servent
-structure is defined in
-.I <netdb.h>
-as follows:
-.PP
-.in +4n
-.EX
-struct servent {
- char *s_name; /* official service name */
- char **s_aliases; /* alias list */
- int s_port; /* port number */
- char *s_proto; /* protocol to use */
-}
-.EE
-.in
-.PP
-The members of the
-.I servent
-structure are:
-.TP
-.I s_name
-The official name of the service.
-.TP
-.I s_aliases
-A NULL-terminated list of alternative names for the service.
-.TP
-.I s_port
-The port number for the service given in network byte order.
-.TP
-.I s_proto
-The name of the protocol to use with this service.
-.SH RETURN VALUE
-The
-.BR getservent (),
-.BR getservbyname (),
-and
-.BR getservbyport ()
-functions return a pointer to a
-statically allocated
-.I servent
-structure, or NULL if an
-error occurs or the end of the file is reached.
-.SH FILES
-.TP
-.I /etc/services
-services database file
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR getservent ()
-T} Thread safety T{
-MT-Unsafe race:servent
-race:serventbuf locale
-T}
-T{
-.BR getservbyname ()
-T} Thread safety T{
-MT-Unsafe race:servbyname
-locale
-T}
-T{
-.BR getservbyport ()
-T} Thread safety T{
-MT-Unsafe race:servbyport
-locale
-T}
-T{
-.BR setservent (),
-.BR endservent ()
-T} Thread safety T{
-MT-Unsafe race:servent
-locale
-T}
-.TE
-.hy
-.ad
-.sp 1
-In the above table,
-.I servent
-in
-.I race:servent
-signifies that if any of the functions
-.BR setservent (),
-.BR getservent (),
-or
-.BR endservent ()
-are used in parallel in different threads of a program,
-then data races could occur.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, 4.3BSD.
-.SH SEE ALSO
-.BR getnetent (3),
-.BR getprotoent (3),
-.BR getservent_r (3),
-.BR services (5)
diff --git a/man3/getservent_r.3 b/man3/getservent_r.3
deleted file mode 100644
index 2620d2b9e..000000000
--- a/man3/getservent_r.3
+++ /dev/null
@@ -1,252 +0,0 @@
-'\" t
-.\" Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH getservent_r 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getservent_r, getservbyname_r, getservbyport_r \- get
-service entry (reentrant)
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <netdb.h>
-.PP
-.BI "int getservent_r(struct servent *restrict " result_buf ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct servent **restrict " result );
-.BI "int getservbyname_r(const char *restrict " name ,
-.BI " const char *restrict " proto ,
-.BI " struct servent *restrict " result_buf ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct servent **restrict " result );
-.BI "int getservbyport_r(int " port ,
-.BI " const char *restrict " proto ,
-.BI " struct servent *restrict " result_buf ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen ,
-.BI " struct servent **restrict " result );
-.PP
-.fi
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getservent_r (),
-.BR getservbyname_r (),
-.BR getservbyport_r ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR getservent_r (),
-.BR getservbyname_r (),
-and
-.BR getservbyport_r ()
-functions are the reentrant equivalents of, respectively,
-.BR getservent (3),
-.BR getservbyname (3),
-and
-.BR getservbyport (3).
-They differ in the way that the
-.I servent
-structure is returned,
-and in the function calling signature and return value.
-This manual page describes just the differences from
-the nonreentrant functions.
-.PP
-Instead of returning a pointer to a statically allocated
-.I servent
-structure as the function result,
-these functions copy the structure into the location pointed to by
-.IR result_buf .
-.PP
-The
-.I buf
-array is used to store the string fields pointed to by the returned
-.I servent
-structure.
-(The nonreentrant functions allocate these strings in static storage.)
-The size of this array is specified in
-.IR buflen .
-If
-.I buf
-is too small, the call fails with the error
-.BR ERANGE ,
-and the caller must try again with a larger buffer.
-(A buffer of length 1024 bytes should be sufficient for most applications.)
-.\" I can find no information on the required/recommended buffer size;
-.\" the nonreentrant functions use a 1024 byte buffer -- mtk.
-.PP
-If the function call successfully obtains a service record, then
-.I *result
-is set pointing to
-.IR result_buf ;
-otherwise,
-.I *result
-is set to NULL.
-.SH RETURN VALUE
-On success, these functions return 0.
-On error, they return one of the positive error numbers listed in errors.
-.PP
-On error, record not found
-.RB ( getservbyname_r (),
-.BR getservbyport_r ()),
-or end of input
-.RB ( getservent_r ())
-.I result
-is set to NULL.
-.SH ERRORS
-.TP
-.B ENOENT
-.RB ( getservent_r ())
-No more records in database.
-.TP
-.B ERANGE
-.I buf
-is too small.
-Try again with a larger buffer
-(and increased
-.IR buflen ).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getservent_r (),
-.BR getservbyname_r (),
-.BR getservbyport_r ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-Functions with similar names exist on some other systems,
-though typically with different calling signatures.
-.SH STANDARDS
-GNU.
-.SH EXAMPLES
-The program below uses
-.BR getservbyport_r ()
-to retrieve the service record for the port and protocol named
-in its first command-line argument.
-If a third (integer) command-line argument is supplied,
-it is used as the initial value for
-.IR buflen ;
-if
-.BR getservbyport_r ()
-fails with the error
-.BR ERANGE ,
-the program retries with larger buffer sizes.
-The following shell session shows a couple of sample runs:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out 7 tcp 1"
-ERANGE! Retrying with larger buffer
-getservbyport_r() returned: 0 (success) (buflen=87)
-s_name=echo; s_proto=tcp; s_port=7; aliases=
-.RB "$" " ./a.out 77777 tcp"
-getservbyport_r() returned: 0 (success) (buflen=1024)
-Call failed/record not found
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (getservent_r.c)
-.EX
-#define _GNU_SOURCE
-#include <ctype.h>
-#include <errno.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-#define MAX_BUF 10000
-\&
-int
-main(int argc, char *argv[])
-{
- int buflen, erange_cnt, port, s;
- struct servent result_buf;
- struct servent *result;
- char buf[MAX_BUF];
- char *protop;
-\&
- if (argc < 3) {
- printf("Usage: %s port\-num proto\-name [buflen]\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- port = htons(atoi(argv[1]));
- protop = (strcmp(argv[2], "null") == 0 ||
- strcmp(argv[2], "NULL") == 0) ? NULL : argv[2];
-\&
- buflen = 1024;
- if (argc > 3)
- buflen = atoi(argv[3]);
-\&
- if (buflen > MAX_BUF) {
- printf("Exceeded buffer limit (%d)\en", MAX_BUF);
- exit(EXIT_FAILURE);
- }
-\&
- erange_cnt = 0;
- do {
- s = getservbyport_r(port, protop, &result_buf,
- buf, buflen, &result);
- if (s == ERANGE) {
- if (erange_cnt == 0)
- printf("ERANGE! Retrying with larger buffer\en");
- erange_cnt++;
-\&
- /* Increment a byte at a time so we can see exactly
- what size buffer was required. */
-\&
- buflen++;
-\&
- if (buflen > MAX_BUF) {
- printf("Exceeded buffer limit (%d)\en", MAX_BUF);
- exit(EXIT_FAILURE);
- }
- }
- } while (s == ERANGE);
-\&
- printf("getservbyport_r() returned: %s (buflen=%d)\en",
- (s == 0) ? "0 (success)" : (s == ENOENT) ? "ENOENT" :
- strerror(s), buflen);
-\&
- if (s != 0 || result == NULL) {
- printf("Call failed/record not found\en");
- exit(EXIT_FAILURE);
- }
-\&
- printf("s_name=%s; s_proto=%s; s_port=%d; aliases=",
- result_buf.s_name, result_buf.s_proto,
- ntohs(result_buf.s_port));
- for (char **p = result_buf.s_aliases; *p != NULL; p++)
- printf("%s ", *p);
- printf("\en");
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR getservent (3),
-.BR services (5)
diff --git a/man3/getspent.3 b/man3/getspent.3
deleted file mode 100644
index 142c5a5ca..000000000
--- a/man3/getspent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getspnam.3
diff --git a/man3/getspent_r.3 b/man3/getspent_r.3
deleted file mode 100644
index 142c5a5ca..000000000
--- a/man3/getspent_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getspnam.3
diff --git a/man3/getspnam.3 b/man3/getspnam.3
deleted file mode 100644
index abcb339c1..000000000
--- a/man3/getspnam.3
+++ /dev/null
@@ -1,320 +0,0 @@
-'\" t
-.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl) and
-.\" Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH getspnam 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getspnam, getspnam_r, getspent, getspent_r, setspent, endspent,
-fgetspent, fgetspent_r, sgetspent, sgetspent_r, putspent,
-lckpwdf, ulckpwdf \- get shadow password file entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-/* General shadow password file API */
-.B #include <shadow.h>
-.PP
-.BI "struct spwd *getspnam(const char *" name );
-.B struct spwd *getspent(void);
-.PP
-.B void setspent(void);
-.B void endspent(void);
-.PP
-.BI "struct spwd *fgetspent(FILE *" stream );
-.BI "struct spwd *sgetspent(const char *" s );
-.PP
-.BI "int putspent(const struct spwd *" p ", FILE *" stream );
-.PP
-.B int lckpwdf(void);
-.B int ulckpwdf(void);
-.PP
-/* GNU extension */
-.B #include <shadow.h>
-.PP
-.BI "int getspent_r(struct spwd *" spbuf ,
-.BI " char " buf [. buflen "], size_t " buflen ", \
-struct spwd **" spbufp );
-.BI "int getspnam_r(const char *" name ", struct spwd *" spbuf ,
-.BI " char " buf [. buflen "], size_t " buflen ", \
-struct spwd **" spbufp );
-.PP
-.BI "int fgetspent_r(FILE *" stream ", struct spwd *" spbuf ,
-.BI " char " buf [. buflen "], size_t " buflen ", \
-struct spwd **" spbufp );
-.BI "int sgetspent_r(const char *" s ", struct spwd *" spbuf ,
-.BI " char " buf [. buflen "], size_t " buflen ", \
-struct spwd **" spbufp );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getspent_r (),
-.BR getspnam_r (),
-.BR fgetspent_r (),
-.BR sgetspent_r ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-Long ago it was considered safe to have encrypted passwords openly
-visible in the password file.
-When computers got faster and people
-got more security-conscious, this was no longer acceptable.
-Julianne Frances Haugh implemented the shadow password suite
-that keeps the encrypted passwords in
-the shadow password database
-(e.g., the local shadow password file
-.IR /etc/shadow ,
-NIS, and LDAP),
-readable only by root.
-.PP
-The functions described below resemble those for
-the traditional password database
-(e.g., see
-.BR getpwnam (3)
-and
-.BR getpwent (3)).
-.\" FIXME . I've commented out the following for the
-.\" moment. The relationship between PAM and nsswitch.conf needs
-.\" to be clearly documented in one place, which is pointed to by
-.\" the pages for the user, group, and shadow password functions.
-.\" (Jul 2005, mtk)
-.\"
-.\" This shadow password setup has been superseded by PAM
-.\" (pluggable authentication modules), and the file
-.\" .I /etc/nsswitch.conf
-.\" now describes the sources to be used.
-.PP
-The
-.BR getspnam ()
-function returns a pointer to a structure containing
-the broken-out fields of the record in the shadow password database
-that matches the username
-.IR name .
-.PP
-The
-.BR getspent ()
-function returns a pointer to the next entry in the shadow password
-database.
-The position in the input stream is initialized by
-.BR setspent ().
-When done reading, the program may call
-.BR endspent ()
-so that resources can be deallocated.
-.\" some systems require a call of setspent() before the first getspent()
-.\" glibc does not
-.PP
-The
-.BR fgetspent ()
-function is similar to
-.BR getspent ()
-but uses the supplied stream instead of the one implicitly opened by
-.BR setspent ().
-.PP
-The
-.BR sgetspent ()
-function parses the supplied string
-.I s
-into a struct
-.IR spwd .
-.PP
-The
-.BR putspent ()
-function writes the contents of the supplied struct
-.I spwd
-.I *p
-as a text line in the shadow password file format to
-.IR stream .
-String entries with value NULL and numerical entries with value \-1
-are written as an empty string.
-.PP
-The
-.BR lckpwdf ()
-function is intended to protect against multiple simultaneous accesses
-of the shadow password database.
-It tries to acquire a lock, and returns 0 on success,
-or \-1 on failure (lock not obtained within 15 seconds).
-The
-.BR ulckpwdf ()
-function releases the lock again.
-Note that there is no protection against direct access of the shadow
-password file.
-Only programs that use
-.BR lckpwdf ()
-will notice the lock.
-.PP
-These were the functions that formed the original shadow API.
-They are widely available.
-.\" Also in libc5
-.\" SUN doesn't have sgetspent()
-.SS Reentrant versions
-Analogous to the reentrant functions for the password database, glibc
-also has reentrant functions for the shadow password database.
-The
-.BR getspnam_r ()
-function is like
-.BR getspnam ()
-but stores the retrieved shadow password structure in the space pointed to by
-.IR spbuf .
-This shadow password structure contains pointers to strings, and these strings
-are stored in the buffer
-.I buf
-of size
-.IR buflen .
-A pointer to the result (in case of success) or NULL (in case no entry
-was found or an error occurred) is stored in
-.IR *spbufp .
-.PP
-The functions
-.BR getspent_r (),
-.BR fgetspent_r (),
-and
-.BR sgetspent_r ()
-are similarly analogous to their nonreentrant counterparts.
-.PP
-Some non-glibc systems also have functions with these names,
-often with different prototypes.
-.\" SUN doesn't have sgetspent_r()
-.SS Structure
-The shadow password structure is defined in \fI<shadow.h>\fP as follows:
-.PP
-.in +4n
-.EX
-struct spwd {
- char *sp_namp; /* Login name */
- char *sp_pwdp; /* Encrypted password */
- long sp_lstchg; /* Date of last change
- (measured in days since
- 1970\-01\-01 00:00:00 +0000 (UTC)) */
- long sp_min; /* Min # of days between changes */
- long sp_max; /* Max # of days between changes */
- long sp_warn; /* # of days before password expires
- to warn user to change it */
- long sp_inact; /* # of days after password expires
- until account is disabled */
- long sp_expire; /* Date when account expires
- (measured in days since
- 1970\-01\-01 00:00:00 +0000 (UTC)) */
- unsigned long sp_flag; /* Reserved */
-};
-.EE
-.in
-.SH RETURN VALUE
-The functions that return a pointer return NULL if no more entries
-are available or if an error occurs during processing.
-The functions which have \fIint\fP as the return value return 0 for
-success and \-1 for failure, with
-.I errno
-set to indicate the error.
-.PP
-For the nonreentrant functions, the return value may point to static area,
-and may be overwritten by subsequent calls to these functions.
-.PP
-The reentrant functions return zero on success.
-In case of error, an error number is returned.
-.SH ERRORS
-.TP
-.B EACCES
-The caller does not have permission to access the shadow password file.
-.TP
-.B ERANGE
-Supplied buffer is too small.
-.SH FILES
-.TP
-.I /etc/shadow
-local shadow password database file
-.TP
-.I /etc/.pwd.lock
-lock file
-.PP
-The include file
-.I <paths.h>
-defines the constant
-.B _PATH_SHADOW
-to the pathname of the shadow password file.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR getspnam ()
-T} Thread safety T{
-MT-Unsafe race:getspnam locale
-T}
-T{
-.BR getspent ()
-T} Thread safety T{
-MT-Unsafe race:getspent
-race:spentbuf locale
-T}
-T{
-.BR setspent (),
-.BR endspent (),
-.BR getspent_r ()
-T} Thread safety T{
-MT-Unsafe race:getspent locale
-T}
-T{
-.BR fgetspent ()
-T} Thread safety T{
-MT-Unsafe race:fgetspent
-T}
-T{
-.BR sgetspent ()
-T} Thread safety T{
-MT-Unsafe race:sgetspent
-T}
-T{
-.BR putspent (),
-.BR getspnam_r (),
-.BR sgetspent_r ()
-T} Thread safety T{
-MT-Safe locale
-T}
-T{
-.BR lckpwdf (),
-.BR ulckpwdf (),
-.BR fgetspent_r ()
-T} Thread safety T{
-MT-Safe
-T}
-.TE
-.hy
-.ad
-.sp 1
-In the above table,
-.I getspent
-in
-.I race:getspent
-signifies that if any of the functions
-.BR setspent (),
-.BR getspent (),
-.BR getspent_r (),
-or
-.BR endspent ()
-are used in parallel in different threads of a program,
-then data races could occur.
-.SH VERSIONS
-Many other systems provide a similar API.
-.SH STANDARDS
-None.
-.SH SEE ALSO
-.BR getgrnam (3),
-.BR getpwnam (3),
-.BR getpwnam_r (3),
-.BR shadow (5)
diff --git a/man3/getspnam_r.3 b/man3/getspnam_r.3
deleted file mode 100644
index 142c5a5ca..000000000
--- a/man3/getspnam_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getspnam.3
diff --git a/man3/getsubopt.3 b/man3/getsubopt.3
deleted file mode 100644
index 50b392400..000000000
--- a/man3/getsubopt.3
+++ /dev/null
@@ -1,254 +0,0 @@
-'\" t
-.\" Copyright (C) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (C) 2007 Justin Pryzby <pryzbyj@justinpryzby.com>
-.\"
-.\" %%%LICENSE_START(PERMISSIVE_MISC)
-.\" Permission is hereby granted, free of charge, to any person obtaining
-.\" a copy of this software and associated documentation files (the
-.\" "Software"), to deal in the Software without restriction, including
-.\" without limitation the rights to use, copy, modify, merge, publish,
-.\" distribute, sublicense, and/or sell copies of the Software, and to
-.\" permit persons to whom the Software is furnished to do so, subject to
-.\" the following conditions:
-.\"
-.\" The above copyright notice and this permission notice shall be
-.\" included in all copies or substantial portions of the Software.
-.\"
-.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-.\" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-.\" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-.\" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-.\" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-.\" %%%LICENSE_END
-.\"
-.TH getsubopt 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getsubopt \- parse suboption arguments from a string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int getsubopt(char **restrict " optionp ", char *const *restrict " tokens ,
-.BI " char **restrict " valuep );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getsubopt ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
-.fi
-.SH DESCRIPTION
-.BR getsubopt ()
-parses the list of comma-separated suboptions provided in
-.IR optionp .
-(Such a suboption list is typically produced when
-.BR getopt (3)
-is used to parse a command line;
-see for example the \fI\-o\fP option of
-.BR mount (8).)
-Each suboption may include an associated value,
-which is separated from the suboption name by an equal sign.
-The following is an example of the kind of string
-that might be passed in
-.IR optionp :
-.PP
-.in +4n
-.EX
-.B ro,name=xyz
-.EE
-.in
-.PP
-The
-.I tokens
-argument is a pointer to a NULL-terminated array of pointers to the tokens that
-.BR getsubopt ()
-will look for in
-.IR optionp .
-The tokens should be distinct, null-terminated strings containing at
-least one character, with no embedded equal signs or commas.
-.PP
-Each call to
-.BR getsubopt ()
-returns information about the next unprocessed suboption in
-.IR optionp .
-The first equal sign in a suboption (if any) is interpreted as a
-separator between the name and the value of that suboption.
-The value extends to the next comma,
-or (for the last suboption) to the end of the string.
-If the name of the suboption matches a known name from
-.IR tokens ,
-and a value string was found,
-.BR getsubopt ()
-sets
-.I *valuep
-to the address of that string.
-The first comma in
-.I optionp
-is overwritten with a null byte, so
-.I *valuep
-is precisely the "value string" for that suboption.
-.PP
-If the suboption is recognized, but no value string was found,
-.I *valuep
-is set to NULL.
-.PP
-When
-.BR getsubopt ()
-returns,
-.I optionp
-points to the next suboption,
-or to the null byte (\[aq]\e0\[aq]) at the end of the
-string if the last suboption was just processed.
-.SH RETURN VALUE
-If the first suboption in
-.I optionp
-is recognized,
-.BR getsubopt ()
-returns the index of the matching suboption element in
-.IR tokens .
-Otherwise, \-1 is returned and
-.I *valuep
-is the entire
-.IB name [= value ]
-string.
-.PP
-Since
-.I *optionp
-is changed, the first suboption before the call to
-.BR getsubopt ()
-is not (necessarily) the same as the first suboption after
-.BR getsubopt ().
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getsubopt ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-Since
-.BR getsubopt ()
-overwrites any commas it finds in the string
-.IR *optionp ,
-that string must be writable; it cannot be a string constant.
-.SH EXAMPLES
-The following program expects suboptions following a "\-o" option.
-.PP
-.\" SRC BEGIN (getsubopt.c)
-.EX
-#define _XOPEN_SOURCE 500
-#include <stdio.h>
-#include <stdlib.h>
-\&
-#include <assert.h>
-\&
-int
-main(int argc, char *argv[])
-{
- enum {
- RO_OPT = 0,
- RW_OPT,
- NAME_OPT
- };
- char *const token[] = {
- [RO_OPT] = "ro",
- [RW_OPT] = "rw",
- [NAME_OPT] = "name",
- NULL
- };
- char *subopts;
- char *value;
- int opt;
-\&
- int readonly = 0;
- int readwrite = 0;
- char *name = NULL;
- int errfnd = 0;
-\&
- while ((opt = getopt(argc, argv, "o:")) != \-1) {
- switch (opt) {
- case \[aq]o\[aq]:
- subopts = optarg;
- while (*subopts != \[aq]\e0\[aq] && !errfnd) {
-\&
- switch (getsubopt(&subopts, token, &value)) {
- case RO_OPT:
- readonly = 1;
- break;
-\&
- case RW_OPT:
- readwrite = 1;
- break;
-\&
- case NAME_OPT:
- if (value == NULL) {
- fprintf(stderr,
- "Missing value for suboption \[aq]%s\[aq]\en",
- token[NAME_OPT]);
- errfnd = 1;
- continue;
- }
-\&
- name = value;
- break;
-\&
- default:
- fprintf(stderr,
- "No match found for token: /%s/\en", value);
- errfnd = 1;
- break;
- }
- }
- if (readwrite && readonly) {
- fprintf(stderr,
- "Only one of \[aq]%s\[aq] and \[aq]%s\[aq] can be specified\en",
- token[RO_OPT], token[RW_OPT]);
- errfnd = 1;
- }
- break;
-\&
- default:
- errfnd = 1;
- }
- }
-\&
- if (errfnd || argc == 1) {
- fprintf(stderr, "\enUsage: %s \-o <suboptstring>\en", argv[0]);
- fprintf(stderr,
- "suboptions are \[aq]ro\[aq], \[aq]rw\[aq], and \[aq]name=<value>\[aq]\en");
- exit(EXIT_FAILURE);
- }
-\&
- /* Remainder of program... */
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR getopt (3)
diff --git a/man3/getttyent.3 b/man3/getttyent.3
deleted file mode 100644
index 05bf8cc6c..000000000
--- a/man3/getttyent.3
+++ /dev/null
@@ -1,103 +0,0 @@
-'\" t
-.\" Copyright 2002 walter harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH getttyent 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getttyent, getttynam, setttyent, endttyent \- get ttys file entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B "#include <ttyent.h>"
-.PP
-.B "struct ttyent *getttyent(void);"
-.BI "struct ttyent *getttynam(const char *" name );
-.PP
-.B "int setttyent(void);"
-.B "int endttyent(void);"
-.fi
-.SH DESCRIPTION
-These functions provide an interface to the file
-.B _PATH_TTYS
-(e.g.,
-.IR /etc/ttys ).
-.PP
-The function
-.BR setttyent ()
-opens the file or rewinds it if already open.
-.PP
-The function
-.BR endttyent ()
-closes the file.
-.PP
-The function
-.BR getttynam ()
-searches for a given terminal name in the file.
-It returns a pointer to a
-.I ttyent
-structure (description below).
-.PP
-The function
-.BR getttyent ()
-opens the file
-.B _PATH_TTYS
-(if necessary) and returns the first entry.
-If the file is already open, the next entry.
-The
-.I ttyent
-structure has the form:
-.PP
-.in +4n
-.EX
-struct ttyent {
- char *ty_name; /* terminal device name */
- char *ty_getty; /* command to execute, usually getty */
- char *ty_type; /* terminal type for termcap */
- int ty_status; /* status flags */
- char *ty_window; /* command to start up window manager */
- char *ty_comment; /* comment field */
-};
-.EE
-.in
-.PP
-.I ty_status
-can be:
-.PP
-.in +4n
-.EX
-#define TTY_ON 0x01 /* enable logins (start ty_getty program) */
-#define TTY_SECURE 0x02 /* allow UID 0 to login */
-.EE
-.in
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getttyent (),
-.BR setttyent (),
-.BR endttyent (),
-.BR getttynam ()
-T} Thread safety MT-Unsafe race:ttyent
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-BSD.
-.SH NOTES
-Under Linux, the file
-.IR /etc/ttys ,
-and the functions described above, are not used.
-.SH SEE ALSO
-.BR ttyname (3),
-.BR ttyslot (3)
diff --git a/man3/getttynam.3 b/man3/getttynam.3
deleted file mode 100644
index 1cd11e3d8..000000000
--- a/man3/getttynam.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getttyent.3
diff --git a/man3/getusershell.3 b/man3/getusershell.3
deleted file mode 100644
index d134dc3c4..000000000
--- a/man3/getusershell.3
+++ /dev/null
@@ -1,101 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 19:17:53 1993 by Rik Faith (faith@cs.unc.edu)
-.TH getusershell 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getusershell, setusershell, endusershell \- get permitted user shells
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.B char *getusershell(void);
-.B void setusershell(void);
-.B void endusershell(void);
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getusershell (),
-.BR setusershell (),
-.BR endusershell ():
-.nf
- Since glibc 2.21:
-.\" commit 266865c0e7b79d4196e2cc393693463f03c90bd8
- _DEFAULT_SOURCE
- In glibc 2.19 and 2.20:
- _DEFAULT_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
- Up to and including glibc 2.19:
- _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
-.fi
-.SH DESCRIPTION
-The
-.BR getusershell ()
-function returns the next line from the file
-.IR /etc/shells ,
-opening the file if necessary.
-The line should contain
-the pathname of a valid user shell.
-If
-.I /etc/shells
-does not exist or
-is unreadable,
-.BR getusershell ()
-behaves as if
-.I /bin/sh
-and
-.I /bin/csh
-were listed in the file.
-.PP
-The
-.BR setusershell ()
-function rewinds
-.IR /etc/shells .
-.PP
-The
-.BR endusershell ()
-function closes
-.IR /etc/shells .
-.SH RETURN VALUE
-The
-.BR getusershell ()
-function returns NULL on end-of-file.
-.SH FILES
-.I /etc/shells
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getusershell (),
-.BR setusershell (),
-.BR endusershell ()
-T} Thread safety MT-Unsafe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-4.3BSD.
-.SH SEE ALSO
-.BR shells (5)
diff --git a/man3/getutent.3 b/man3/getutent.3
deleted file mode 100644
index 88d323990..000000000
--- a/man3/getutent.3
+++ /dev/null
@@ -1,345 +0,0 @@
-'\" t
-.\" Copyright 1995 Mark D. Roth (roth@uiuc.edu)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Solaris manpages
-.\"
-.\" Modified Thu Jul 25 14:43:46 MET DST 1996 by Michael Haardt
-.\" <michael@cantor.informatik.rwth-aachen.de>
-.\"
-.TH getutent 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getutent, getutid, getutline, pututline, setutent, endutent,
-utmpname \- access utmp file entries
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <utmp.h>
-.PP
-.B struct utmp *getutent(void);
-.BI "struct utmp *getutid(const struct utmp *" ut );
-.BI "struct utmp *getutline(const struct utmp *" ut );
-.PP
-.BI "struct utmp *pututline(const struct utmp *" ut );
-.PP
-.B void setutent(void);
-.B void endutent(void);
-.PP
-.BI "int utmpname(const char *" file );
-.fi
-.SH DESCRIPTION
-New applications should use the POSIX.1-specified "utmpx" versions of
-these functions; see STANDARDS.
-.PP
-.BR utmpname ()
-sets the name of the utmp-format file for the other utmp
-functions to access.
-If
-.BR utmpname ()
-is not used to set the filename
-before the other functions are used, they assume \fB_PATH_UTMP\fP, as
-defined in \fI<paths.h>\fP.
-.PP
-.BR setutent ()
-rewinds the file pointer to the beginning of the utmp file.
-It is generally a good idea to call it before any of the other
-functions.
-.PP
-.BR endutent ()
-closes the utmp file.
-It should be called when the user
-code is done accessing the file with the other functions.
-.PP
-.BR getutent ()
-reads a line from the current file position in the utmp file.
-It returns a pointer to a structure containing the fields of
-the line.
-The definition of this structure is shown in
-.BR utmp (5).
-.PP
-.BR getutid ()
-searches forward from the current file position in the utmp
-file based upon \fIut\fP.
-If \fIut\->ut_type\fP is one of \fBRUN_LVL\fP,
-\fBBOOT_TIME\fP, \fBNEW_TIME\fP, or \fBOLD_TIME\fP,
-.BR getutid ()
-will
-find the first entry whose \fIut_type\fP field matches \fIut\->ut_type\fP.
-If \fIut\->ut_type\fP is one of \fBINIT_PROCESS\fP, \fBLOGIN_PROCESS\fP,
-\fBUSER_PROCESS\fP, or \fBDEAD_PROCESS\fP,
-.BR getutid ()
-will find the
-first entry whose
-.I ut_id
-field matches \fIut\->ut_id\fP.
-.PP
-.BR getutline ()
-searches forward from the current file position in the utmp file.
-It scans entries whose
-.I ut_type
-is \fBUSER_PROCESS\fP
-or \fBLOGIN_PROCESS\fP and returns the first one whose
-.I ut_line
-field
-matches \fIut\->ut_line\fP.
-.PP
-.BR pututline ()
-writes the
-.I utmp
-structure \fIut\fP into the utmp file.
-It uses
-.BR getutid ()
-to search for the proper place in the file to insert
-the new entry.
-If it cannot find an appropriate slot for \fIut\fP,
-.BR pututline ()
-will append the new entry to the end of the file.
-.SH RETURN VALUE
-.BR getutent (),
-.BR getutid (),
-and
-.BR getutline ()
-return a pointer to a \fIstruct utmp\fP on success,
-and NULL on failure (which includes the "record not found" case).
-This \fIstruct utmp\fP is allocated in static storage, and may be
-overwritten by subsequent calls.
-.PP
-On success
-.BR pututline ()
-returns
-.IR ut ;
-on failure, it returns NULL.
-.PP
-.BR utmpname ()
-returns 0 if the new name was successfully stored, or \-1 on failure.
-.PP
-On failure, these functions
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B ENOMEM
-Out of memory.
-.TP
-.B ESRCH
-Record not found.
-.PP
-.BR setutent (),
-.BR pututline (),
-and the
-.BR getut* ()
-functions can also fail for the reasons described in
-.BR open (2).
-.SH FILES
-.TP
-.I /var/run/utmp
-database of currently logged-in users
-.TP
-.I /var/log/wtmp
-database of past user logins
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR getutent ()
-T} Thread safety T{
-MT-Unsafe init race:utent
-race:utentbuf sig:ALRM timer
-T}
-T{
-.BR getutid (),
-.BR getutline ()
-T} Thread safety T{
-MT-Unsafe init race:utent
-sig:ALRM timer
-T}
-T{
-.BR pututline ()
-T} Thread safety T{
-MT-Unsafe race:utent
-sig:ALRM timer
-T}
-T{
-.BR setutent (),
-.BR endutent (),
-.BR utmpname ()
-T} Thread safety MT-Unsafe race:utent
-.TE
-.hy
-.ad
-.sp 1
-In the above table,
-.I utent
-in
-.I race:utent
-signifies that if any of the functions
-.BR setutent (),
-.BR getutent (),
-.BR getutid (),
-.BR getutline (),
-.BR pututline (),
-.BR utmpname (),
-or
-.BR endutent ()
-are used in parallel in different threads of a program,
-then data races could occur.
-.SH STANDARDS
-None.
-.SH HISTORY
-XPG2, SVr4.
-.PP
-In XPG2 and SVID 2 the function
-.BR pututline ()
-is documented to return void, and that is what it does on many systems
-(AIX, HP-UX).
-HP-UX introduces a new function
-.BR _pututline ()
-with the prototype given above for
-.BR pututline ().
-.PP
-All these functions are obsolete now on non-Linux systems.
-POSIX.1-2001 and POSIX.1-2008, following SUSv1,
-does not have any of these functions, but instead uses
-.PP
-.RS 4
-.EX
-.B #include <utmpx.h>
-.PP
-.B struct utmpx *getutxent(void);
-.B struct utmpx *getutxid(const struct utmpx *);
-.B struct utmpx *getutxline(const struct utmpx *);
-.B struct utmpx *pututxline(const struct utmpx *);
-.B void setutxent(void);
-.B void endutxent(void);
-.EE
-.RE
-.PP
-These functions are provided by glibc,
-and perform the same task as their equivalents without the "x", but use
-.IR "struct utmpx" ,
-defined on Linux to be the same as
-.IR "struct utmp" .
-For completeness, glibc also provides
-.BR utmpxname (),
-although this function is not specified by POSIX.1.
-.PP
-On some other systems,
-the \fIutmpx\fP structure is a superset of the \fIutmp\fP structure,
-with additional fields, and larger versions of the existing fields,
-and parallel files are maintained, often
-.I /var/*/utmpx
-and
-.IR /var/*/wtmpx .
-.PP
-Linux glibc on the other hand does not use a parallel \fIutmpx\fP file
-since its \fIutmp\fP structure is already large enough.
-The "x" functions listed above are just aliases for
-their counterparts without the "x" (e.g.,
-.BR getutxent ()
-is an alias for
-.BR getutent ()).
-.SH NOTES
-.SS glibc notes
-The above functions are not thread-safe.
-glibc adds reentrant versions
-.PP
-.nf
-.B #include <utmp.h>
-.PP
-.BI "int getutent_r(struct utmp *" ubuf ", struct utmp **" ubufp );
-.BI "int getutid_r(struct utmp *" ut ,
-.BI " struct utmp *" ubuf ", struct utmp **" ubufp );
-.BI "int getutline_r(struct utmp *" ut ,
-.BI " struct utmp *" ubuf ", struct utmp **" ubufp );
-.fi
-.PP
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.PP
-.BR getutent_r (),
-.BR getutid_r (),
-.BR getutline_r ():
-.nf
- _GNU_SOURCE
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
-.fi
-.PP
-These functions are GNU extensions, analogs of the functions of the
-same name without the _r suffix.
-The
-.I ubuf
-argument gives these functions a place to store their result.
-On success, they return 0, and a pointer to the result is written in
-.IR *ubufp .
-On error, these functions return \-1.
-There are no utmpx equivalents of the above functions.
-(POSIX.1 does not specify such functions.)
-.SH EXAMPLES
-The following example adds and removes a utmp record, assuming it is run
-from within a pseudo terminal.
-For usage in a real application, you
-should check the return values of
-.BR getpwuid (3)
-and
-.BR ttyname (3).
-.PP
-.\" SRC BEGIN (getutent.c)
-.EX
-#include <pwd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include <utmp.h>
-\&
-int
-main(void)
-{
- struct utmp entry;
-\&
- system("echo before adding entry:;who");
-\&
- entry.ut_type = USER_PROCESS;
- entry.ut_pid = getpid();
- strcpy(entry.ut_line, ttyname(STDIN_FILENO) + strlen("/dev/"));
- /* only correct for ptys named /dev/tty[pqr][0\-9a\-z] */
- strcpy(entry.ut_id, ttyname(STDIN_FILENO) + strlen("/dev/tty"));
- time(&entry.ut_time);
- strcpy(entry.ut_user, getpwuid(getuid())\->pw_name);
- memset(entry.ut_host, 0, UT_HOSTSIZE);
- entry.ut_addr = 0;
- setutent();
- pututline(&entry);
-\&
- system("echo after adding entry:;who");
-\&
- entry.ut_type = DEAD_PROCESS;
- memset(entry.ut_line, 0, UT_LINESIZE);
- entry.ut_time = 0;
- memset(entry.ut_user, 0, UT_NAMESIZE);
- setutent();
- pututline(&entry);
-\&
- system("echo after removing entry:;who");
-\&
- endutent();
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR getutmp (3),
-.BR utmp (5)
diff --git a/man3/getutent_r.3 b/man3/getutent_r.3
deleted file mode 100644
index 29c36b72a..000000000
--- a/man3/getutent_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getutent.3
diff --git a/man3/getutid.3 b/man3/getutid.3
deleted file mode 100644
index 29c36b72a..000000000
--- a/man3/getutid.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getutent.3
diff --git a/man3/getutid_r.3 b/man3/getutid_r.3
deleted file mode 100644
index 29c36b72a..000000000
--- a/man3/getutid_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getutent.3
diff --git a/man3/getutline.3 b/man3/getutline.3
deleted file mode 100644
index 29c36b72a..000000000
--- a/man3/getutline.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getutent.3
diff --git a/man3/getutline_r.3 b/man3/getutline_r.3
deleted file mode 100644
index 29c36b72a..000000000
--- a/man3/getutline_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getutent.3
diff --git a/man3/getutmp.3 b/man3/getutmp.3
deleted file mode 100644
index e50caedc4..000000000
--- a/man3/getutmp.3
+++ /dev/null
@@ -1,74 +0,0 @@
-'\" t
-.\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH getutmp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getutmp, getutmpx \- copy utmp structure to utmpx, and vice versa
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <utmpx.h>
-.PP
-.BI "void getutmp(const struct utmpx *" ux ", struct utmp *" u );
-.BI "void getutmpx(const struct utmp *" u ", struct utmpx *" ux );
-.fi
-.SH DESCRIPTION
-The
-.BR getutmp ()
-function copies the fields of the
-.I utmpx
-structure pointed to by
-.I ux
-to the corresponding fields of the
-.I utmp
-structure pointed to by
-.IR u .
-The
-.BR getutmpx ()
-function performs the converse operation.
-.SH RETURN VALUE
-These functions do not return a value.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getutmp (),
-.BR getutmpx ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-glibc 2.1.1.
-Solaris, NetBSD.
-.SH NOTES
-These functions exist primarily for compatibility with other
-systems where the
-.I utmp
-and
-.I utmpx
-structures contain different fields,
-or the size of corresponding fields differs.
-.\" e.g., on Solaris, the utmpx structure is rather larger than utmp.
-On Linux, the two structures contain the same fields,
-and the fields have the same sizes.
-.SH SEE ALSO
-.BR utmpdump (1),
-.BR getutent (3),
-.BR utmp (5)
diff --git a/man3/getutmpx.3 b/man3/getutmpx.3
deleted file mode 100644
index 668ecb5d7..000000000
--- a/man3/getutmpx.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getutmp.3
diff --git a/man3/getutxent.3 b/man3/getutxent.3
deleted file mode 100644
index 29c36b72a..000000000
--- a/man3/getutxent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getutent.3
diff --git a/man3/getutxid.3 b/man3/getutxid.3
deleted file mode 100644
index 29c36b72a..000000000
--- a/man3/getutxid.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getutent.3
diff --git a/man3/getutxline.3 b/man3/getutxline.3
deleted file mode 100644
index 29c36b72a..000000000
--- a/man3/getutxline.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getutent.3
diff --git a/man3/getw.3 b/man3/getw.3
deleted file mode 100644
index e311b78dc..000000000
--- a/man3/getw.3
+++ /dev/null
@@ -1,87 +0,0 @@
-'\" t
-.\" Copyright (c) 1995 by Jim Van Zandt <jrv@vanzandt.mv.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH getw 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getw, putw \- input and output of words (ints)
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "int getw(FILE *" stream );
-.BI "int putw(int " w ", FILE *" stream );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR getw (),
-.BR putw ():
-.nf
- Since glibc 2.3.3:
- _XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L)
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
- Before glibc 2.3.3:
- _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE
-.fi
-.SH DESCRIPTION
-.BR getw ()
-reads a word (that is, an \fIint\fP) from \fIstream\fP.
-It's provided for compatibility with SVr4.
-We recommend you use
-.BR fread (3)
-instead.
-.PP
-.BR putw ()
-writes the word \fIw\fP (that is,
-an \fIint\fP) to \fIstream\fP.
-It is provided for compatibility with SVr4, but we recommend you use
-.BR fwrite (3)
-instead.
-.SH RETURN VALUE
-Normally,
-.BR getw ()
-returns the word read, and
-.BR putw ()
-returns 0.
-On error, they return \fBEOF\fP.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getw (),
-.BR putw ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-SVr4, SUSv2.
-.SH BUGS
-The value returned on error is also a legitimate data value.
-.BR ferror (3)
-can be used to distinguish between the two cases.
-.SH SEE ALSO
-.BR ferror (3),
-.BR fread (3),
-.BR fwrite (3),
-.BR getc (3),
-.BR putc (3)
diff --git a/man3/getwc.3 b/man3/getwc.3
deleted file mode 100644
index 358c2d214..000000000
--- a/man3/getwc.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fgetwc.3
diff --git a/man3/getwc_unlocked.3 b/man3/getwc_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/getwc_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/getwchar.3 b/man3/getwchar.3
deleted file mode 100644
index 308ebadb0..000000000
--- a/man3/getwchar.3
+++ /dev/null
@@ -1,90 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification
-.\" http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH getwchar 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getwchar \- read a wide character from standard input
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.B "wint_t getwchar(void);"
-.fi
-.SH DESCRIPTION
-The
-.BR getwchar ()
-function is the wide-character equivalent of the
-.BR getchar (3)
-function.
-It reads a wide character from
-.I stdin
-and returns
-it.
-If the end of stream is reached, or if
-.I ferror(stdin)
-becomes true, it returns
-.BR WEOF .
-If a wide-character conversion error occurs, it sets
-.I errno
-to
-.B EILSEQ
-and returns
-.BR WEOF .
-.PP
-For a nonlocking counterpart, see
-.BR unlocked_stdio (3).
-.SH RETURN VALUE
-The
-.BR getwchar ()
-function returns the next wide-character from
-standard input, or
-.BR WEOF .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR getwchar ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.SH NOTES
-The behavior of
-.BR getwchar ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.PP
-It is reasonable to expect that
-.BR getwchar ()
-will actually
-read a multibyte sequence from standard input and then
-convert it to a wide character.
-.SH SEE ALSO
-.BR fgetwc (3),
-.BR unlocked_stdio (3)
diff --git a/man3/getwchar_unlocked.3 b/man3/getwchar_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/getwchar_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/getwd.3 b/man3/getwd.3
deleted file mode 100644
index f73c1579c..000000000
--- a/man3/getwd.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getcwd.3
diff --git a/man3/glob.3 b/man3/glob.3
deleted file mode 100644
index 41fb111e5..000000000
--- a/man3/glob.3
+++ /dev/null
@@ -1,351 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Wed Jul 28 11:12:17 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Mon May 13 23:08:50 1996 by Martin Schulze (joey@linux.de)
-.\" Modified 11 May 1998 by Joseph S. Myers (jsm28@cam.ac.uk)
-.\" Modified 990912 by aeb
-.\" 2007-10-10 mtk
-.\" Added description of GLOB_TILDE_NOMATCH
-.\" Expanded the description of various flags
-.\" Various wording fixes.
-.\"
-.TH glob 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-glob, globfree \- find pathnames matching a pattern, free memory from glob()
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <glob.h>
-.PP
-.BI "int glob(const char *restrict " pattern ", int " flags ,
-.BI " int (*" errfunc ")(const char *" epath ", int " eerrno ),
-.BI " glob_t *restrict " pglob );
-.BI "void globfree(glob_t *" pglob );
-.fi
-.SH DESCRIPTION
-The
-.BR glob ()
-function searches for all the pathnames matching
-.I pattern
-according to the rules used by the shell (see
-.BR glob (7)).
-No tilde expansion or parameter substitution is done; if you want
-these, use
-.BR wordexp (3).
-.PP
-The
-.BR globfree ()
-function frees the dynamically allocated storage from an earlier call
-to
-.BR glob ().
-.PP
-The results of a
-.BR glob ()
-call are stored in the structure pointed to by
-.IR pglob .
-This structure is of type
-.I glob_t
-(declared in
-.IR <glob.h> )
-and includes the following elements defined by POSIX.2 (more may be
-present as an extension):
-.PP
-.in +4n
-.EX
-typedef struct {
- size_t gl_pathc; /* Count of paths matched so far */
- char **gl_pathv; /* List of matched pathnames. */
- size_t gl_offs; /* Slots to reserve in \fIgl_pathv\fP. */
-} glob_t;
-.EE
-.in
-.PP
-Results are stored in dynamically allocated storage.
-.PP
-The argument
-.I flags
-is made up of the bitwise OR of zero or more the following symbolic
-constants, which modify the behavior of
-.BR glob ():
-.TP
-.B GLOB_ERR
-Return upon a read error (because a directory does not
-have read permission, for example).
-By default,
-.BR glob ()
-attempts carry on despite errors,
-reading all of the directories that it can.
-.TP
-.B GLOB_MARK
-Append a slash to each path which corresponds to a directory.
-.TP
-.B GLOB_NOSORT
-Don't sort the returned pathnames.
-The only reason to do this is to save processing time.
-By default, the returned pathnames are sorted.
-.TP
-.B GLOB_DOOFFS
-Reserve
-.I pglob\->gl_offs
-slots at the beginning of the list of strings in
-.IR pglob\->pathv .
-The reserved slots contain null pointers.
-.TP
-.B GLOB_NOCHECK
-If no pattern matches, return the original pattern.
-By default,
-.BR glob ()
-returns
-.B GLOB_NOMATCH
-if there are no matches.
-.TP
-.B GLOB_APPEND
-Append the results of this call to the vector of results
-returned by a previous call to
-.BR glob ().
-Do not set this flag on the first invocation of
-.BR glob ().
-.TP
-.B GLOB_NOESCAPE
-Don't allow backslash (\[aq]\e\[aq]) to be used as an escape
-character.
-Normally, a backslash can be used to quote the following character,
-providing a mechanism to turn off the special meaning
-metacharacters.
-.PP
-.I flags
-may also include any of the following, which are GNU
-extensions and not defined by POSIX.2:
-.TP
-.B GLOB_PERIOD
-Allow a leading period to be matched by metacharacters.
-By default, metacharacters can't match a leading period.
-.TP
-.B GLOB_ALTDIRFUNC
-Use alternative functions
-.IR pglob\->gl_closedir ,
-.IR pglob\->gl_readdir ,
-.IR pglob\->gl_opendir ,
-.IR pglob\->gl_lstat ,
-and
-.I pglob\->gl_stat
-for filesystem access instead of the normal library
-functions.
-.TP
-.B GLOB_BRACE
-Expand
-.BR csh (1)
-style brace expressions of the form
-.BR {a,b} .
-Brace expressions can be nested.
-Thus, for example, specifying the pattern
-"{foo/{,cat,dog},bar}" would return the same results as four separate
-.BR glob ()
-calls using the strings:
-"foo/",
-"foo/cat",
-"foo/dog",
-and
-"bar".
-.TP
-.B GLOB_NOMAGIC
-If the pattern contains no metacharacters,
-then it should be returned as the sole matching word,
-even if there is no file with that name.
-.TP
-.B GLOB_TILDE
-Carry out tilde expansion.
-If a tilde (\[aq]\[ti]\[aq]) is the only character in the pattern,
-or an initial tilde is followed immediately by a slash (\[aq]/\[aq]),
-then the home directory of the caller is substituted for
-the tilde.
-If an initial tilde is followed by a username (e.g., "\[ti]andrea/bin"),
-then the tilde and username are substituted by the home directory
-of that user.
-If the username is invalid, or the home directory cannot be
-determined, then no substitution is performed.
-.TP
-.B GLOB_TILDE_CHECK
-This provides behavior similar to that of
-.BR GLOB_TILDE .
-The difference is that if the username is invalid, or the
-home directory cannot be determined, then
-instead of using the pattern itself as the name,
-.BR glob ()
-returns
-.B GLOB_NOMATCH
-to indicate an error.
-.TP
-.B GLOB_ONLYDIR
-This is a
-.I hint
-to
-.BR glob ()
-that the caller is interested only in directories that match the pattern.
-If the implementation can easily determine file-type information,
-then nondirectory files are not returned to the caller.
-However, the caller must still check that returned files
-are directories.
-(The purpose of this flag is merely to optimize performance when
-the caller is interested only in directories.)
-.PP
-If
-.I errfunc
-is not NULL,
-it will be called in case of an error with the arguments
-.IR epath ,
-a pointer to the path which failed, and
-.IR eerrno ,
-the value of
-.I errno
-as returned from one of the calls to
-.BR opendir (3),
-.BR readdir (3),
-or
-.BR stat (2).
-If
-.I errfunc
-returns nonzero, or if
-.B GLOB_ERR
-is set,
-.BR glob ()
-will terminate after the call to
-.IR errfunc .
-.PP
-Upon successful return,
-.I pglob\->gl_pathc
-contains the number of matched pathnames and
-.I pglob\->gl_pathv
-contains a pointer to the list of pointers to matched pathnames.
-The list of pointers is terminated by a null pointer.
-.PP
-It is possible to call
-.BR glob ()
-several times.
-In that case, the
-.B GLOB_APPEND
-flag has to be set in
-.I flags
-on the second and later invocations.
-.PP
-As a GNU extension,
-.I pglob\->gl_flags
-is set to the flags specified,
-.BR or ed
-with
-.B GLOB_MAGCHAR
-if any metacharacters were found.
-.SH RETURN VALUE
-On successful completion,
-.BR glob ()
-returns zero.
-Other possible returns are:
-.TP
-.B GLOB_NOSPACE
-for running out of memory,
-.TP
-.B GLOB_ABORTED
-for a read error, and
-.TP
-.B GLOB_NOMATCH
-for no found matches.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR glob ()
-T} Thread safety T{
-MT-Unsafe race:utent env
-sig:ALRM timer locale
-T}
-T{
-.BR globfree ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-In the above table,
-.I utent
-in
-.I race:utent
-signifies that if any of the functions
-.BR setutent (3),
-.BR getutent (3),
-or
-.BR endutent (3)
-are used in parallel in different threads of a program,
-then data races could occur.
-.BR glob ()
-calls those functions,
-so we use race:utent to remind users.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, POSIX.2.
-.SH NOTES
-The structure elements
-.I gl_pathc
-and
-.I gl_offs
-are declared as
-.I size_t
-in glibc 2.1, as they should be according to POSIX.2,
-but are declared as
-.I int
-in glibc 2.0.
-.SH BUGS
-The
-.BR glob ()
-function may fail due to failure of underlying function calls, such as
-.BR malloc (3)
-or
-.BR opendir (3).
-These will store their error code in
-.IR errno .
-.SH EXAMPLES
-One example of use is the following code, which simulates typing
-.PP
-.in +4n
-.EX
-ls \-l *.c ../*.c
-.EE
-.in
-.PP
-in the shell:
-.PP
-.in +4n
-.EX
-glob_t globbuf;
-\&
-globbuf.gl_offs = 2;
-glob("*.c", GLOB_DOOFFS, NULL, &globbuf);
-glob("../*.c", GLOB_DOOFFS | GLOB_APPEND, NULL, &globbuf);
-globbuf.gl_pathv[0] = "ls";
-globbuf.gl_pathv[1] = "\-l";
-execvp("ls", &globbuf.gl_pathv[0]);
-.EE
-.in
-.SH SEE ALSO
-.BR ls (1),
-.BR sh (1),
-.BR stat (2),
-.BR exec (3),
-.BR fnmatch (3),
-.BR malloc (3),
-.BR opendir (3),
-.BR readdir (3),
-.BR wordexp (3),
-.BR glob (7)
diff --git a/man3/globfree.3 b/man3/globfree.3
deleted file mode 100644
index 20056c69a..000000000
--- a/man3/globfree.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/glob.3
diff --git a/man3/gmtime.3 b/man3/gmtime.3
deleted file mode 100644
index 84a3baa92..000000000
--- a/man3/gmtime.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ctime.3
diff --git a/man3/gmtime_r.3 b/man3/gmtime_r.3
deleted file mode 100644
index 84a3baa92..000000000
--- a/man3/gmtime_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ctime.3
diff --git a/man3/gnu_dev_major.3 b/man3/gnu_dev_major.3
deleted file mode 100644
index eabbdd013..000000000
--- a/man3/gnu_dev_major.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/makedev.3
diff --git a/man3/gnu_dev_makedev.3 b/man3/gnu_dev_makedev.3
deleted file mode 100644
index eabbdd013..000000000
--- a/man3/gnu_dev_makedev.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/makedev.3
diff --git a/man3/gnu_dev_minor.3 b/man3/gnu_dev_minor.3
deleted file mode 100644
index eabbdd013..000000000
--- a/man3/gnu_dev_minor.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/makedev.3
diff --git a/man3/gnu_get_libc_release.3 b/man3/gnu_get_libc_release.3
deleted file mode 100644
index 7f84005f3..000000000
--- a/man3/gnu_get_libc_release.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/gnu_get_libc_version.3
diff --git a/man3/gnu_get_libc_version.3 b/man3/gnu_get_libc_version.3
deleted file mode 100644
index c819d9c13..000000000
--- a/man3/gnu_get_libc_version.3
+++ /dev/null
@@ -1,82 +0,0 @@
-'\" t
-.\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH gnu_get_libc_version 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-gnu_get_libc_version, gnu_get_libc_release \- get glibc version and release
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <gnu/libc\-version.h>
-.PP
-.B const char *gnu_get_libc_version(void);
-.B const char *gnu_get_libc_release(void);
-.fi
-.SH DESCRIPTION
-The function
-.BR gnu_get_libc_version ()
-returns a string that identifies the glibc version available on the system.
-.PP
-The function
-.BR gnu_get_libc_release ()
-returns a string indicates the release status of the glibc version
-available on the system.
-This will be a string such as
-.IR "stable" .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR gnu_get_libc_version (),
-.BR gnu_get_libc_release ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH HISTORY
-glibc 2.1.
-.SH EXAMPLES
-When run, the program below will produce output such as the following:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out"
-GNU libc version: 2.8
-GNU libc release: stable
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (gnu_get_libc_version.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-\&
-#include <gnu/libc\-version.h>
-\&
-int
-main(void)
-{
- printf("GNU libc version: %s\en", gnu_get_libc_version());
- printf("GNU libc release: %s\en", gnu_get_libc_release());
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR confstr (3)
diff --git a/man3/grantpt.3 b/man3/grantpt.3
deleted file mode 100644
index a19172a3e..000000000
--- a/man3/grantpt.3
+++ /dev/null
@@ -1,112 +0,0 @@
-'\" t
-.\" %%%LICENSE_START(PUBLIC_DOMAIN)
-.\" This page is in the public domain. - aeb
-.\" %%%LICENSE_END
-.\"
-.TH grantpt 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-grantpt \- grant access to the slave pseudoterminal
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int grantpt(int " fd ");"
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR grantpt ():
-.nf
- Since glibc 2.24:
- _XOPEN_SOURCE >= 500
-.\" || (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED)
- glibc 2.23 and earlier:
- _XOPEN_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR grantpt ()
-function changes the mode and owner of the slave pseudoterminal device
-corresponding to the master pseudoterminal referred to by the file descriptor
-.IR fd .
-The user ID of the slave is set to the real UID of the calling process.
-The group ID is set to an unspecified value (e.g.,
-.IR tty ).
-The mode of the slave is set to 0620 (crw\-\-w\-\-\-\-).
-.PP
-The behavior of
-.BR grantpt ()
-is unspecified if a signal handler is installed to catch
-.B SIGCHLD
-signals.
-.SH RETURN VALUE
-When successful,
-.BR grantpt ()
-returns 0.
-Otherwise, it returns \-1 and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-The corresponding slave pseudoterminal could not be accessed.
-.TP
-.B EBADF
-The
-.I fd
-argument is not a valid open file descriptor.
-.TP
-.B EINVAL
-The
-.I fd
-argument is valid but not associated with a master pseudoterminal.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR grantpt ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-Many systems implement this function via a set-user-ID helper binary
-called "pt_chown".
-On Linux systems with a devpts filesystem (present since Linux 2.2),
-the kernel normally sets the correct ownership and permissions
-for the pseudoterminal slave when the master is opened
-.RB ( posix_openpt (3)),
-so that nothing must be done by
-.BR grantpt ().
-Thus, no such helper binary is required
-(and indeed it is configured to be absent during the
-glibc build that is typical on many systems).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001.
-.PP
-This is part of the UNIX 98 pseudoterminal support, see
-.BR pts (4).
-.SH SEE ALSO
-.BR open (2),
-.BR posix_openpt (3),
-.BR ptsname (3),
-.BR unlockpt (3),
-.BR pts (4),
-.BR pty (7)
diff --git a/man3/group_member.3 b/man3/group_member.3
deleted file mode 100644
index e82bca9d7..000000000
--- a/man3/group_member.3
+++ /dev/null
@@ -1,48 +0,0 @@
-.\" Copyright (C) 2014, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH group_member 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-group_member \- test whether a process is in a group
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int group_member(gid_t " gid );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR group_member ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR group_member ()
-function tests whether any of the caller's supplementary group IDs
-(as returned by
-.BR getgroups (2))
-matches
-.IR gid .
-.SH RETURN VALUE
-The
-.BR group_member ()
-function returns nonzero if any of the caller's
-supplementary group IDs matches
-.IR gid ,
-and zero otherwise.
-.SH STANDARDS
-GNU.
-.SH SEE ALSO
-.BR getgid (2),
-.BR getgroups (2),
-.BR getgrouplist (3),
-.BR group (5)
diff --git a/man3/gsignal.3 b/man3/gsignal.3
deleted file mode 100644
index 205f9297e..000000000
--- a/man3/gsignal.3
+++ /dev/null
@@ -1,119 +0,0 @@
-'\" t
-.\" Copyright (C) 2002 Andries Brouwer <aeb@cwi.nl>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" This replaces an earlier man page written by Walter Harms
-.\" <walter.harms@informatik.uni-oldenburg.de>.
-.TH gsignal 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-gsignal, ssignal \- software signal facility
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.B typedef void (*sighandler_t)(int);
-.PP
-.BI "[[deprecated]] int gsignal(int " signum );
-.PP
-.BI "[[deprecated]] sighandler_t ssignal(int " signum ", sighandler_t " action );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR gsignal (),
-.BR ssignal ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-Don't use these functions under Linux.
-Due to a historical mistake, under Linux these functions are
-aliases for
-.BR raise (3)
-and
-.BR signal (2),
-respectively.
-.PP
-Elsewhere, on System V-like systems, these functions implement
-software signaling, entirely independent of the classical
-.BR signal (2)
-and
-.BR kill (2)
-functions.
-The function
-.BR ssignal ()
-defines the action to take when the software signal with
-number
-.I signum
-is raised using the function
-.BR gsignal (),
-and returns the previous such action or
-.BR SIG_DFL .
-The function
-.BR gsignal ()
-does the following: if no action (or the action
-.BR SIG_DFL )
-was
-specified for
-.IR signum ,
-then it does nothing and returns 0.
-If the action
-.B SIG_IGN
-was specified for
-.IR signum ,
-then it does nothing and returns 1.
-Otherwise, it resets the action to
-.B SIG_DFL
-and calls
-the action function with argument
-.IR signum ,
-and returns the value returned by that function.
-The range of possible values
-.I signum
-varies (often 1\[en]15 or 1\[en]17).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR gsignal ()
-T} Thread safety MT-Safe
-T{
-.BR ssignal ()
-T} Thread safety MT-Safe sigintr
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-AIX, DG/UX, HP-UX, SCO, Solaris, Tru64.
-They are called obsolete under most of these systems, and are
-broken under
-.\" Linux libc and
-glibc.
-Some systems also have
-.BR gsignal_r ()
-and
-.BR ssignal_r ().
-.SH SEE ALSO
-.BR kill (2),
-.BR signal (2),
-.BR raise (3)
diff --git a/man3/h_errno.3 b/man3/h_errno.3
deleted file mode 100644
index 7d0fb4b7c..000000000
--- a/man3/h_errno.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/gethostbyname.3
diff --git a/man3/hash.3 b/man3/hash.3
deleted file mode 100644
index 43924e969..000000000
--- a/man3/hash.3
+++ /dev/null
@@ -1,145 +0,0 @@
-.\" Copyright (c) 1990, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)hash.3 8.6 (Berkeley) 8/18/94
-.\"
-.TH hash 3 (date) "Linux man-pages (unreleased)"
-.UC 7
-.SH NAME
-hash \- hash database access method
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.ft B
-#include <sys/types.h>
-#include <db.h>
-.ft R
-.fi
-.SH DESCRIPTION
-.IR "Note well" :
-This page documents interfaces provided up until glibc 2.1.
-Since glibc 2.2, glibc no longer provides these interfaces.
-Probably, you are looking for the APIs provided by the
-.I libdb
-library instead.
-.PP
-The routine
-.BR dbopen (3)
-is the library interface to database files.
-One of the supported file formats is hash files.
-The general description of the database access methods is in
-.BR dbopen (3),
-this manual page describes only the hash-specific information.
-.PP
-The hash data structure is an extensible, dynamic hashing scheme.
-.PP
-The access-method-specific data structure provided to
-.BR dbopen (3)
-is defined in the
-.I <db.h>
-include file as follows:
-.PP
-.in +4n
-.EX
-typedef struct {
- unsigned int bsize;
- unsigned int ffactor;
- unsigned int nelem;
- unsigned int cachesize;
- uint32_t (*hash)(const void *, size_t);
- int lorder;
-} HASHINFO;
-.EE
-.in
-.PP
-The elements of this structure are as follows:
-.TP 10
-.I bsize
-defines the hash table bucket size, and is, by default, 256 bytes.
-It may be preferable to increase the page size for disk-resident tables
-and tables with large data items.
-.TP
-.I ffactor
-indicates a desired density within the hash table.
-It is an approximation of the number of keys allowed to accumulate in any
-one bucket, determining when the hash table grows or shrinks.
-The default value is 8.
-.TP
-.I nelem
-is an estimate of the final size of the hash table.
-If not set or set too low, hash tables will expand gracefully as keys
-are entered, although a slight performance degradation may be noticed.
-The default value is 1.
-.TP
-.I cachesize
-is the suggested maximum size, in bytes, of the memory cache.
-This value is
-.IR "only advisory" ,
-and the access method will allocate more memory rather than fail.
-.TP
-.I hash
-is a user-defined hash function.
-Since no hash function performs equally well on all possible data, the
-user may find that the built-in hash function does poorly on a particular
-data set.
-A user-specified hash functions must take two arguments (a pointer to a byte
-string and a length) and return a 32-bit quantity to be used as the hash
-value.
-.TP
-.I lorder
-is the byte order for integers in the stored database metadata.
-The number should represent the order as an integer; for example,
-big endian order would be the number 4,321.
-If
-.I lorder
-is 0 (no order is specified), the current host order is used.
-If the file already exists, the specified value is ignored and the
-value specified when the tree was created is used.
-.PP
-If the file already exists (and the
-.B O_TRUNC
-flag is not specified), the
-values specified for
-.IR bsize ,
-.IR ffactor ,
-.IR lorder ,
-and
-.I nelem
-are
-ignored and the values specified when the tree was created are used.
-.PP
-If a hash function is specified,
-.I hash_open
-attempts to determine if the hash function specified is the same as
-the one with which the database was created, and fails if it is not.
-.PP
-Backward-compatible interfaces to the routines described in
-.BR dbm (3),
-and
-.BR ndbm (3)
-are provided, however these interfaces are not compatible with
-previous file formats.
-.SH ERRORS
-The
-.I hash
-access method routines may fail and set
-.I errno
-for any of the errors specified for the library routine
-.BR dbopen (3).
-.SH BUGS
-Only big and little endian byte order are supported.
-.SH SEE ALSO
-.BR btree (3),
-.BR dbopen (3),
-.BR mpool (3),
-.BR recno (3)
-.PP
-.IR "Dynamic Hash Tables" ,
-Per-Ake Larson, Communications of the ACM, April 1988.
-.PP
-.IR "A New Hash Package for UNIX" ,
-Margo Seltzer, USENIX Proceedings, Winter 1991.
diff --git a/man3/hasmntopt.3 b/man3/hasmntopt.3
deleted file mode 100644
index 3c2bb35c9..000000000
--- a/man3/hasmntopt.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getmntent.3
diff --git a/man3/hcreate.3 b/man3/hcreate.3
deleted file mode 100644
index f4a0405da..000000000
--- a/man3/hcreate.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/hsearch.3
diff --git a/man3/hcreate_r.3 b/man3/hcreate_r.3
deleted file mode 100644
index f4a0405da..000000000
--- a/man3/hcreate_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/hsearch.3
diff --git a/man3/hdestroy.3 b/man3/hdestroy.3
deleted file mode 100644
index f4a0405da..000000000
--- a/man3/hdestroy.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/hsearch.3
diff --git a/man3/hdestroy_r.3 b/man3/hdestroy_r.3
deleted file mode 100644
index f4a0405da..000000000
--- a/man3/hdestroy_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/hsearch.3
diff --git a/man3/herror.3 b/man3/herror.3
deleted file mode 100644
index 7d0fb4b7c..000000000
--- a/man3/herror.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/gethostbyname.3
diff --git a/man3/hsearch.3 b/man3/hsearch.3
deleted file mode 100644
index 422be88a9..000000000
--- a/man3/hsearch.3
+++ /dev/null
@@ -1,356 +0,0 @@
-'\" t
-.\" Copyright 1993 Ulrich Drepper (drepper@karlsruhe.gmd.de)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" SunOS 4.1.1 man pages
-.\" Modified Sat Sep 30 21:52:01 1995 by Jim Van Zandt <jrv@vanzandt.mv.com>
-.\" Remarks from dhw@gamgee.acad.emich.edu Fri Jun 19 06:46:31 1998
-.\" Modified 2001-12-26, 2003-11-28, 2004-05-20, aeb
-.\" 2008-09-02, mtk: various additions and rewrites
-.\" 2008-09-03, mtk, restructured somewhat, in part after suggestions from
-.\" Timothy S. Nelson <wayland@wayland.id.au>
-.\"
-.TH hsearch 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-hcreate, hdestroy, hsearch, hcreate_r, hdestroy_r,
-hsearch_r \- hash table management
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <search.h>
-.PP
-.BI "int hcreate(size_t " nel );
-.B "void hdestroy(void);"
-.PP
-.BI "ENTRY *hsearch(ENTRY " item ", ACTION " action );
-.PP
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <search.h>
-.PP
-.BI "int hcreate_r(size_t " nel ", struct hsearch_data *" htab );
-.BI "void hdestroy_r(struct hsearch_data *" htab );
-.PP
-.BI "int hsearch_r(ENTRY " item ", ACTION " action ", ENTRY **" retval ,
-.BI " struct hsearch_data *" htab );
-.fi
-.SH DESCRIPTION
-The three functions
-.BR hcreate (),
-.BR hsearch (),
-and
-.BR hdestroy ()
-allow the caller to create and manage a hash search table
-containing entries consisting of a key (a string) and associated data.
-Using these functions, only one hash table can be used at a time.
-.PP
-The three functions
-.BR hcreate_r (),
-.BR hsearch_r (),
-.BR hdestroy_r ()
-are reentrant versions that allow a program to use
-more than one hash search table at the same time.
-The last argument,
-.IR htab ,
-points to a structure that describes the table
-on which the function is to operate.
-The programmer should treat this structure as opaque
-(i.e., do not attempt to directly access or modify
-the fields in this structure).
-.PP
-First a hash table must be created using
-.BR hcreate ().
-The argument \fInel\fP specifies the maximum number of entries
-in the table.
-(This maximum cannot be changed later, so choose it wisely.)
-The implementation may adjust this value upward to improve the
-performance of the resulting hash table.
-.\" e.g., in glibc it is raised to the next higher prime number
-.PP
-The
-.BR hcreate_r ()
-function performs the same task as
-.BR hcreate (),
-but for the table described by the structure
-.IR *htab .
-The structure pointed to by
-.I htab
-must be zeroed before the first call to
-.BR hcreate_r ().
-.PP
-The function
-.BR hdestroy ()
-frees the memory occupied by the hash table that was created by
-.BR hcreate ().
-After calling
-.BR hdestroy (),
-a new hash table can be created using
-.BR hcreate ().
-The
-.BR hdestroy_r ()
-function performs the analogous task for a hash table described by
-.IR *htab ,
-which was previously created using
-.BR hcreate_r ().
-.PP
-The
-.BR hsearch ()
-function searches the hash table for an
-item with the same key as \fIitem\fP (where "the same" is determined using
-.BR strcmp (3)),
-and if successful returns a pointer to it.
-.PP
-The argument \fIitem\fP is of type \fIENTRY\fP, which is defined in
-\fI<search.h>\fP as follows:
-.PP
-.in +4n
-.EX
-typedef struct entry {
- char *key;
- void *data;
-} ENTRY;
-.EE
-.in
-.PP
-The field \fIkey\fP points to a null-terminated string which is the
-search key.
-The field \fIdata\fP points to data that is associated with that key.
-.PP
-The argument \fIaction\fP determines what
-.BR hsearch ()
-does after an unsuccessful search.
-This argument must either have the value
-.BR ENTER ,
-meaning insert a copy of
-.I item
-(and return a pointer to the new hash table entry as the function result),
-or the value
-.BR FIND ,
-meaning that NULL should be returned.
-(If
-.I action
-is
-.BR FIND ,
-then
-.I data
-is ignored.)
-.PP
-The
-.BR hsearch_r ()
-function is like
-.BR hsearch ()
-but operates on the hash table described by
-.IR *htab .
-The
-.BR hsearch_r ()
-function differs from
-.BR hsearch ()
-in that a pointer to the found item is returned in
-.IR *retval ,
-rather than as the function result.
-.SH RETURN VALUE
-.BR hcreate ()
-and
-.BR hcreate_r ()
-return nonzero on success.
-They return 0 on error, with
-.I errno
-set to indicate the error.
-.PP
-On success,
-.BR hsearch ()
-returns a pointer to an entry in the hash table.
-.BR hsearch ()
-returns NULL on error, that is,
-if \fIaction\fP is \fBENTER\fP and
-the hash table is full, or \fIaction\fP is \fBFIND\fP and \fIitem\fP
-cannot be found in the hash table.
-.BR hsearch_r ()
-returns nonzero on success, and 0 on error.
-In the event of an error, these two functions set
-.I errno
-to indicate the error.
-.SH ERRORS
-.BR hcreate_r ()
-and
-.BR hdestroy_r ()
-can fail for the following reasons:
-.TP
-.B EINVAL
-.I htab
-is NULL.
-.PP
-.BR hsearch ()
-and
-.BR hsearch_r ()
-can fail for the following reasons:
-.TP
-.B ENOMEM
-.I action
-was
-.BR ENTER ,
-.I key
-was not found in the table,
-and there was no room in the table to add a new entry.
-.TP
-.B ESRCH
-.I action
-was
-.BR FIND ,
-and
-.I key
-was not found in the table.
-.PP
-POSIX.1 specifies only the
-.\" PROX.1-2001, POSIX.1-2008
-.B ENOMEM
-error.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR hcreate (),
-.BR hsearch (),
-.BR hdestroy ()
-T} Thread safety MT-Unsafe race:hsearch
-T{
-.BR hcreate_r (),
-.BR hsearch_r (),
-.BR hdestroy_r ()
-T} Thread safety MT-Safe race:htab
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR hcreate ()
-.TQ
-.BR hsearch ()
-.TQ
-.BR hdestroy ()
-POSIX.1-2008.
-.TP
-.BR hcreate_r ()
-.TQ
-.BR hsearch_r ()
-.TQ
-.BR hdestroy_r ()
-GNU.
-.SH HISTORY
-.TP
-.BR hcreate ()
-.TQ
-.BR hsearch ()
-.TQ
-.BR hdestroy ()
-SVr4, POSIX.1-2001.
-.TP
-.BR hcreate_r ()
-.TQ
-.BR hsearch_r ()
-.TQ
-.BR hdestroy_r ()
-GNU.
-.SH NOTES
-Hash table implementations are usually more efficient when the
-table contains enough free space to minimize collisions.
-Typically, this means that
-.I nel
-should be at least 25% larger than the maximum number of elements
-that the caller expects to store in the table.
-.PP
-The
-.BR hdestroy ()
-and
-.BR hdestroy_r ()
-functions do not free the buffers pointed to by the
-.I key
-and
-.I data
-elements of the hash table entries.
-(It can't do this because it doesn't know
-whether these buffers were allocated dynamically.)
-If these buffers need to be freed (perhaps because the program
-is repeatedly creating and destroying hash tables,
-rather than creating a single table whose lifetime
-matches that of the program),
-then the program must maintain bookkeeping data structures that
-allow it to free them.
-.SH BUGS
-SVr4 and POSIX.1-2001 specify that \fIaction\fP
-is significant only for unsuccessful searches, so that an \fBENTER\fP
-should not do anything for a successful search.
-In libc and glibc (before glibc 2.3), the
-implementation violates the specification,
-updating the \fIdata\fP for the given \fIkey\fP in this case.
-.PP
-Individual hash table entries can be added, but not deleted.
-.SH EXAMPLES
-The following program inserts 24 items into a hash table, then prints
-some of them.
-.PP
-.\" SRC BEGIN (hsearch.c)
-.EX
-#include <search.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-static char *data[] = { "alpha", "bravo", "charlie", "delta",
- "echo", "foxtrot", "golf", "hotel", "india", "juliet",
- "kilo", "lima", "mike", "november", "oscar", "papa",
- "quebec", "romeo", "sierra", "tango", "uniform",
- "victor", "whisky", "x\-ray", "yankee", "zulu"
-};
-\&
-int
-main(void)
-{
- ENTRY e;
- ENTRY *ep;
-\&
- hcreate(30);
-\&
- for (size_t i = 0; i < 24; i++) {
- e.key = data[i];
- /* data is just an integer, instead of a
- pointer to something */
- e.data = (void *) i;
- ep = hsearch(e, ENTER);
- /* there should be no failures */
- if (ep == NULL) {
- fprintf(stderr, "entry failed\en");
- exit(EXIT_FAILURE);
- }
- }
-\&
- for (size_t i = 22; i < 26; i++) {
- /* print two entries from the table, and
- show that two are not in the table */
- e.key = data[i];
- ep = hsearch(e, FIND);
- printf("%9.9s \-> %9.9s:%d\en", e.key,
- ep ? ep\->key : "NULL", ep ? (int)(ep\->data) : 0);
- }
- hdestroy();
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR bsearch (3),
-.BR lsearch (3),
-.BR malloc (3),
-.BR tsearch (3)
diff --git a/man3/hsearch_r.3 b/man3/hsearch_r.3
deleted file mode 100644
index f4a0405da..000000000
--- a/man3/hsearch_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/hsearch.3
diff --git a/man3/hstrerror.3 b/man3/hstrerror.3
deleted file mode 100644
index 7d0fb4b7c..000000000
--- a/man3/hstrerror.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/gethostbyname.3
diff --git a/man3/htobe16.3 b/man3/htobe16.3
deleted file mode 100644
index 8b7bc7715..000000000
--- a/man3/htobe16.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/endian.3
diff --git a/man3/htobe32.3 b/man3/htobe32.3
deleted file mode 100644
index 8b7bc7715..000000000
--- a/man3/htobe32.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/endian.3
diff --git a/man3/htobe64.3 b/man3/htobe64.3
deleted file mode 100644
index 8b7bc7715..000000000
--- a/man3/htobe64.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/endian.3
diff --git a/man3/htole16.3 b/man3/htole16.3
deleted file mode 100644
index 8b7bc7715..000000000
--- a/man3/htole16.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/endian.3
diff --git a/man3/htole32.3 b/man3/htole32.3
deleted file mode 100644
index 8b7bc7715..000000000
--- a/man3/htole32.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/endian.3
diff --git a/man3/htole64.3 b/man3/htole64.3
deleted file mode 100644
index 8b7bc7715..000000000
--- a/man3/htole64.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/endian.3
diff --git a/man3/htonl.3 b/man3/htonl.3
deleted file mode 100644
index ba374e841..000000000
--- a/man3/htonl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/byteorder.3
diff --git a/man3/htons.3 b/man3/htons.3
deleted file mode 100644
index ba374e841..000000000
--- a/man3/htons.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/byteorder.3
diff --git a/man3/hypot.3 b/man3/hypot.3
deleted file mode 100644
index 119609b5e..000000000
--- a/man3/hypot.3
+++ /dev/null
@@ -1,158 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH hypot 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-hypot, hypotf, hypotl \- Euclidean distance function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double hypot(double " x ", double " y );
-.BI "float hypotf(float " x ", float " y );
-.BI "long double hypotl(long double " x ", long double " y );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR hypot ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || _XOPEN_SOURCE
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR hypotf (),
-.BR hypotl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return
-.RI sqrt( x * x + y * y ).
-This is the length of the hypotenuse of a right-angled triangle
-with sides of length
-.I x
-and
-.IR y ,
-or the distance of the point
-.RI ( x , y )
-from the origin.
-.PP
-The calculation is performed without undue overflow or underflow
-during the intermediate steps of the calculation.
-.\" e.g., hypot(DBL_MIN, DBL_MIN) does the right thing, as does, say
-.\" hypot(DBL_MAX/2.0, DBL_MAX/2.0).
-.SH RETURN VALUE
-On success, these functions return the length of the hypotenuse of
-a right-angled triangle
-with sides of length
-.I x
-and
-.IR y .
-.PP
-If
-.I x
-or
-.I y
-is an infinity,
-positive infinity is returned.
-.PP
-If
-.I x
-or
-.I y
-is a NaN,
-and the other argument is not an infinity,
-a NaN is returned.
-.PP
-If the result overflows,
-a range error occurs,
-and the functions return
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-or
-.BR HUGE_VALL ,
-respectively.
-.PP
-If both arguments are subnormal, and the result is subnormal,
-.\" Actually, could the result not be subnormal if both arguments
-.\" are subnormal? I think not -- mtk, Jul 2008
-a range error occurs,
-and the correct result is returned.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Range error: result overflow
-.I errno
-is set to
-.BR ERANGE .
-An overflow floating-point exception
-.RB ( FE_OVERFLOW )
-is raised.
-.TP
-Range error: result underflow
-An underflow floating-point exception
-.RB ( FE_UNDERFLOW )
-is raised.
-.IP
-These functions do not set
-.I errno
-for this case.
-.\" This is intentional; see
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6795
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR hypot (),
-.BR hypotf (),
-.BR hypotl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR cabs (3),
-.BR sqrt (3)
diff --git a/man3/hypotf.3 b/man3/hypotf.3
deleted file mode 100644
index e5c8ab887..000000000
--- a/man3/hypotf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/hypot.3
diff --git a/man3/hypotl.3 b/man3/hypotl.3
deleted file mode 100644
index e5c8ab887..000000000
--- a/man3/hypotl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/hypot.3
diff --git a/man3/iconv.3 b/man3/iconv.3
deleted file mode 100644
index c65f9c393..000000000
--- a/man3/iconv.3
+++ /dev/null
@@ -1,236 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" OpenGroup's Single UNIX specification
-.\" http://www.UNIX-systems.org/online.html
-.\"
-.\" 2000-06-30 correction by Yuichi SATO <sato@complex.eng.hokudai.ac.jp>
-.\" 2000-11-15 aeb, fixed prototype
-.\"
-.TH iconv 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iconv \- perform character set conversion
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <iconv.h>
-.PP
-.BI "size_t iconv(iconv_t " cd ,
-.BI " char **restrict " inbuf ", size_t *restrict " inbytesleft ,
-.BI " char **restrict " outbuf ", size_t *restrict " outbytesleft );
-.fi
-.SH DESCRIPTION
-The
-.BR iconv ()
-function converts a sequence of characters in one character encoding
-to a sequence of characters in another character encoding.
-The
-.I cd
-argument is a conversion descriptor,
-previously created by a call to
-.BR iconv_open (3);
-the conversion descriptor defines the character encodings that
-.BR iconv ()
-uses for the conversion.
-The
-.I inbuf
-argument is the address of a variable that points to
-the first character of the input sequence;
-.I inbytesleft
-indicates the number of bytes in that buffer.
-The
-.I outbuf
-argument is the address of a variable that points to
-the first byte available in the output buffer;
-.I outbytesleft
-indicates the number of bytes available in the output buffer.
-.PP
-The main case is when \fIinbuf\fP is not NULL and \fI*inbuf\fP is not NULL.
-In this case, the
-.BR iconv ()
-function converts the multibyte sequence
-starting at \fI*inbuf\fP to a multibyte sequence starting at \fI*outbuf\fP.
-At most \fI*inbytesleft\fP bytes, starting at \fI*inbuf\fP, will be read.
-At most \fI*outbytesleft\fP bytes, starting at \fI*outbuf\fP, will be written.
-.PP
-The
-.BR iconv ()
-function converts one multibyte character at a time, and for
-each character conversion it increments \fI*inbuf\fP and decrements
-\fI*inbytesleft\fP by the number of converted input bytes, it increments
-\fI*outbuf\fP and decrements \fI*outbytesleft\fP by the number of converted
-output bytes, and it updates the conversion state contained in \fIcd\fP.
-If the character encoding of the input is stateful, the
-.BR iconv ()
-function can also convert a sequence of input bytes
-to an update to the conversion state without producing any output bytes;
-such input is called a \fIshift sequence\fP.
-The conversion can stop for five reasons:
-.IP \[bu] 3
-An invalid multibyte sequence is encountered in the input.
-In this case,
-it sets \fIerrno\fP to \fBEILSEQ\fP and returns
-.IR (size_t)\ \-1 .
-\fI*inbuf\fP
-is left pointing to the beginning of the invalid multibyte sequence.
-.IP \[bu]
-A multibyte sequence is encountered that is valid but that
-cannot be translated to the character encoding of the output.
-This condition depends on the implementation and on the conversion descriptor.
-In the GNU C library and GNU libiconv, if
-.I cd
-was created without the suffix
-.B //TRANSLIT
-or
-.BR //IGNORE ,
-the conversion is strict:
-lossy conversions produce this condition.
-If the suffix
-.B //TRANSLIT
-was specified,
-transliteration can avoid this condition in some cases.
-In the musl C library,
-this condition cannot occur because a conversion to
-.B \[aq]*\[aq]
-is used as a fallback.
-In the FreeBSD, NetBSD, and Solaris implementations of
-.BR iconv (),
-this condition cannot occur either,
-because a conversion to
-.B \[aq]?\[aq]
-is used as a fallback.
-When this condition is met,
-.BR iconv ()
-sets
-.I errno
-to
-.B EILSEQ
-and returns
-.IR (size_t)\ \-1 .
-.I *inbuf
-is left pointing to the beginning of the unconvertible multibyte sequence.
-.IP \[bu]
-The input byte sequence has been entirely converted,
-that is, \fI*inbytesleft\fP has gone down to 0.
-In this case,
-.BR iconv ()
-returns the number of
-nonreversible conversions performed during this call.
-.IP \[bu]
-An incomplete multibyte sequence is encountered in the input, and the
-input byte sequence terminates after it.
-In this case, it sets \fIerrno\fP to
-\fBEINVAL\fP and returns
-.IR (size_t)\ \-1 .
-\fI*inbuf\fP is left pointing to the
-beginning of the incomplete multibyte sequence.
-.IP \[bu]
-The output buffer has no more room for the next converted character.
-In this case, it sets \fIerrno\fP to \fBE2BIG\fP and returns
-.IR (size_t)\ \-1 .
-.PP
-A different case is when \fIinbuf\fP is NULL or \fI*inbuf\fP is NULL, but
-\fIoutbuf\fP is not NULL and \fI*outbuf\fP is not NULL.
-In this case, the
-.BR iconv ()
-function attempts to set \fIcd\fP's conversion state to the
-initial state and store a corresponding shift sequence at \fI*outbuf\fP.
-At most \fI*outbytesleft\fP bytes, starting at \fI*outbuf\fP, will be written.
-If the output buffer has no more room for this reset sequence, it sets
-\fIerrno\fP to \fBE2BIG\fP and returns
-.IR (size_t)\ \-1 .
-Otherwise, it increments
-\fI*outbuf\fP and decrements \fI*outbytesleft\fP by the number of bytes
-written.
-.PP
-A third case is when \fIinbuf\fP is NULL or \fI*inbuf\fP is NULL, and
-\fIoutbuf\fP is NULL or \fI*outbuf\fP is NULL.
-In this case, the
-.BR iconv ()
-function sets \fIcd\fP's conversion state to the initial state.
-.SH RETURN VALUE
-The
-.BR iconv ()
-function returns the number of characters converted in a
-nonreversible way during this call; reversible conversions are not counted.
-In case of error,
-.BR iconv ()
-returns
-.I (size_t)\ \-1
-and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-The following errors can occur, among others:
-.TP
-.B E2BIG
-There is not sufficient room at \fI*outbuf\fP.
-.TP
-.B EILSEQ
-An invalid multibyte sequence has been encountered in the input.
-.TP
-.B EINVAL
-An incomplete multibyte sequence has been encountered in the input.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR iconv ()
-T} Thread safety MT-Safe race:cd
-.TE
-.hy
-.ad
-.sp 1
-.PP
-The
-.BR iconv ()
-function is MT-Safe, as long as callers arrange for
-mutual exclusion on the
-.I cd
-argument.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001.
-.SH NOTES
-In each series of calls to
-.BR iconv (),
-the last should be one with \fIinbuf\fP or \fI*inbuf\fP equal to NULL,
-in order to flush out any partially converted input.
-.PP
-Although
-.I inbuf
-and
-.I outbuf
-are typed as
-.IR "char\ **" ,
-this does not mean that the objects they point can be interpreted
-as C strings or as arrays of characters:
-the interpretation of character byte sequences is
-handled internally by the conversion functions.
-In some encodings, a zero byte may be a valid part of a multibyte character.
-.PP
-The caller of
-.BR iconv ()
-must ensure that the pointers passed to the function are suitable
-for accessing characters in the appropriate character set.
-This includes ensuring correct alignment on platforms that have
-tight restrictions on alignment.
-.SH SEE ALSO
-.BR iconv_close (3),
-.BR iconv_open (3),
-.BR iconvconfig (8)
diff --git a/man3/iconv_close.3 b/man3/iconv_close.3
deleted file mode 100644
index 4fc291444..000000000
--- a/man3/iconv_close.3
+++ /dev/null
@@ -1,59 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\"
-.TH iconv_close 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iconv_close \- deallocate descriptor for character set conversion
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <iconv.h>
-.PP
-.BI "int iconv_close(iconv_t " cd );
-.fi
-.SH DESCRIPTION
-The
-.BR iconv_close ()
-function deallocates a conversion descriptor
-.I cd
-previously allocated using
-.BR iconv_open (3).
-.SH RETURN VALUE
-On success,
-.BR iconv_close ()
-returns 0; otherwise, it returns \-1 and sets
-.I errno
-to indicate the error.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR iconv_close ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001.
-.SH SEE ALSO
-.BR iconv (3),
-.BR iconv_open (3)
diff --git a/man3/iconv_open.3 b/man3/iconv_open.3
deleted file mode 100644
index c6e4b6cdd..000000000
--- a/man3/iconv_open.3
+++ /dev/null
@@ -1,128 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" OpenGroup's Single UNIX specification
-.\" http://www.UNIX-systems.org/online.html
-.\"
-.\" 2007-03-31 Bruno Haible, Describe the glibc/libiconv //TRANSLIT
-.\" and //IGNORE extensions for 'tocode'.
-.\"
-.TH iconv_open 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iconv_open \- allocate descriptor for character set conversion
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <iconv.h>
-.PP
-.BI "iconv_t iconv_open(const char *" tocode ", const char *" fromcode );
-.fi
-.SH DESCRIPTION
-The
-.BR iconv_open ()
-function allocates a conversion descriptor suitable
-for converting byte sequences from character encoding
-.I fromcode
-to
-character encoding
-.IR tocode .
-.PP
-The values permitted for
-.I fromcode
-and
-.I tocode
-and the supported
-combinations are system-dependent.
-For the GNU C library, the permitted
-values are listed by the
-.I "iconv \-\-list"
-command, and all combinations
-of the listed values are supported.
-Furthermore the GNU C library and the
-GNU libiconv library support the following two suffixes:
-.TP
-//TRANSLIT
-When the string "//TRANSLIT" is appended to
-.IR tocode ,
-transliteration
-is activated.
-This means that when a character cannot be represented in the
-target character set, it can be approximated through one or several
-similarly looking characters.
-.TP
-//IGNORE
-When the string "//IGNORE" is appended to
-.IR tocode ,
-characters that
-cannot be represented in the target character set will be silently discarded.
-.PP
-The resulting conversion descriptor can be used with
-.BR iconv (3)
-any number of times.
-It remains valid until deallocated using
-.BR iconv_close (3).
-.PP
-A conversion descriptor contains a conversion state.
-After creation using
-.BR iconv_open (),
-the state is in the initial state.
-Using
-.BR iconv (3)
-modifies the descriptor's conversion state.
-To bring the state back to the initial state, use
-.BR iconv (3)
-with NULL as
-.I inbuf
-argument.
-.SH RETURN VALUE
-On success,
-.BR iconv_open ()
-returns a freshly allocated conversion
-descriptor.
-On failure, it returns
-.I (iconv_t)\ \-1
-and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-The following error can occur, among others:
-.TP
-.B EINVAL
-The conversion from
-.I fromcode
-to
-.I tocode
-is not supported by the
-implementation.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR iconv_open ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001, SUSv2.
-.SH SEE ALSO
-.BR iconv (1),
-.BR iconv (3),
-.BR iconv_close (3)
diff --git a/man3/if_freenameindex.3 b/man3/if_freenameindex.3
deleted file mode 100644
index d8aac8484..000000000
--- a/man3/if_freenameindex.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/if_nameindex.3
diff --git a/man3/if_indextoname.3 b/man3/if_indextoname.3
deleted file mode 100644
index 437965929..000000000
--- a/man3/if_indextoname.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/if_nametoindex.3
diff --git a/man3/if_nameindex.3 b/man3/if_nameindex.3
deleted file mode 100644
index bb98bb312..000000000
--- a/man3/if_nameindex.3
+++ /dev/null
@@ -1,157 +0,0 @@
-'\" t
-.\" Copyright (c) 2012 YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
-.\" and Copyright (c) 2012 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH if_nameindex 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-if_nameindex, if_freenameindex \- get network interface names and indexes
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <net/if.h>
-.PP
-.BI "struct if_nameindex *if_nameindex(" void );
-.BI "void if_freenameindex(struct if_nameindex *" "ptr" );
-.fi
-.SH DESCRIPTION
-The
-.BR if_nameindex ()
-function returns an array of
-.I if_nameindex
-structures, each containing information
-about one of the network interfaces on the local system.
-The
-.I if_nameindex
-structure contains at least the following entries:
-.PP
-.in +4n
-.EX
-unsigned int if_index; /* Index of interface (1, 2, ...) */
-char *if_name; /* Null\-terminated name ("eth0", etc.) */
-.EE
-.in
-.PP
-The
-.I if_index
-field contains the interface index.
-The
-.I if_name
-field points to the null-terminated interface name.
-The end of the array is indicated by entry with
-.I if_index
-set to zero and
-.I if_name
-set to NULL.
-.PP
-The data structure returned by
-.BR if_nameindex ()
-is dynamically allocated and should be freed using
-.BR if_freenameindex ()
-when no longer needed.
-.SH RETURN VALUE
-On success,
-.BR if_nameindex ()
-returns pointer to the array;
-on error, NULL is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.BR if_nameindex ()
-may fail and set
-.I errno
-if:
-.TP
-.B ENOBUFS
-Insufficient resources available.
-.PP
-.BR if_nameindex ()
-may also fail for any of the errors specified for
-.BR socket (2),
-.BR bind (2),
-.BR ioctl (2),
-.BR getsockname (2),
-.BR recvmsg (2),
-.BR sendto (2),
-or
-.BR malloc (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR if_nameindex (),
-.BR if_freenameindex ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008, RFC\ 3493.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001.
-BSDi.
-.PP
-Before glibc 2.3.4,
-the implementation supported only interfaces with IPv4 addresses.
-Support of interfaces that don't have IPv4 addresses is available only
-on kernels that support netlink.
-.SH EXAMPLES
-The program below demonstrates the use of the functions described
-on this page.
-An example of the output this program might produce is the following:
-.PP
-.in +4n
-.EX
-$ \fB./a.out\fI
-1: lo
-2: wlan0
-3: em1
-.EE
-.in
-.SS Program source
-.\" SRC BEGIN (if_nameindex.c)
-.EX
-#include <net/if.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-int
-main(void)
-{
- struct if_nameindex *if_ni, *i;
-\&
- if_ni = if_nameindex();
- if (if_ni == NULL) {
- perror("if_nameindex");
- exit(EXIT_FAILURE);
- }
-\&
- for (i = if_ni; !(i\->if_index == 0 && i\->if_name == NULL); i++)
- printf("%u: %s\en", i\->if_index, i\->if_name);
-\&
- if_freenameindex(if_ni);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR getsockopt (2),
-.BR setsockopt (2),
-.BR getifaddrs (3),
-.BR if_indextoname (3),
-.BR if_nametoindex (3),
-.BR ifconfig (8)
diff --git a/man3/if_nametoindex.3 b/man3/if_nametoindex.3
deleted file mode 100644
index 0b20e61f1..000000000
--- a/man3/if_nametoindex.3
+++ /dev/null
@@ -1,102 +0,0 @@
-'\" t
-.\" Copyright (c) 2012 YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH if_nametoindex 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-if_nametoindex, if_indextoname \- mappings between network interface
-names and indexes
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <net/if.h>
-.PP
-.BI "unsigned int if_nametoindex(const char *" "ifname" );
-.BI "char *if_indextoname(unsigned int ifindex, char *" ifname );
-.fi
-.SH DESCRIPTION
-The
-.BR if_nametoindex ()
-function returns the index of the network interface
-corresponding to the name
-.IR ifname .
-.PP
-The
-.BR if_indextoname ()
-function returns the name of the network interface
-corresponding to the interface index
-.IR ifindex .
-The name is placed in the buffer pointed to by
-.IR ifname .
-The buffer must allow for the storage of at least
-.B IF_NAMESIZE
-bytes.
-.SH RETURN VALUE
-On success,
-.BR if_nametoindex ()
-returns the index number of the network interface;
-on error, 0 is returned and
-.I errno
-is set to indicate the error.
-.PP
-On success,
-.BR if_indextoname ()
-returns
-.IR ifname ;
-on error, NULL is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.BR if_nametoindex ()
-may fail and set
-.I errno
-if:
-.TP
-.B ENODEV
-No interface found with given name.
-.PP
-.BR if_indextoname ()
-may fail and set
-.I errno
-if:
-.TP
-.B ENXIO
-No interface found for the index.
-.PP
-.BR if_nametoindex ()
-and
-.BR if_indextoname ()
-may also fail for any of the errors specified for
-.BR socket (2)
-or
-.BR ioctl (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR if_nametoindex (),
-.BR if_indextoname ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008, RFC\ 3493.
-.SH HISTORY
-POSIX.1-2001.
-BSDi.
-.SH SEE ALSO
-.BR getifaddrs (3),
-.BR if_nameindex (3),
-.BR ifconfig (8)
diff --git a/man3/ilogb.3 b/man3/ilogb.3
deleted file mode 100644
index 76266f3ef..000000000
--- a/man3/ilogb.3
+++ /dev/null
@@ -1,153 +0,0 @@
-'\" t
-.\" Copyright 2004 Andries Brouwer <aeb@cwi.nl>.
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Inspired by a page by Walter Harms created 2002-08-10
-.\"
-.TH ilogb 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ilogb, ilogbf, ilogbl \- get integer exponent of a floating-point value
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "int ilogb(double " x );
-.BI "int ilogbf(float " x );
-.BI "int ilogbl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR ilogb ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR ilogbf (),
-.BR ilogbl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the exponent part of their argument
-as a signed integer.
-When no error occurs, these functions
-are equivalent to the corresponding
-.BR logb (3)
-functions, cast to
-.IR int .
-.SH RETURN VALUE
-On success, these functions return the exponent of
-.IR x ,
-as a signed integer.
-.PP
-If
-.I x
-is zero, then a domain error occurs, and the functions return
-.\" the POSIX.1 spec for logb() says logb() gives pole error for this
-.\" case, but for ilogb() it says domain error.
-.BR FP_ILOGB0 .
-.\" glibc: The numeric value is either `INT_MIN' or `-INT_MAX'.
-.PP
-If
-.I x
-is a NaN, then a domain error occurs, and the functions return
-.BR FP_ILOGBNAN .
-.\" glibc: The numeric value is either `INT_MIN' or `INT_MAX'.
-.\" On i386, FP_ILOGB0 and FP_ILOGBNAN have the same value.
-.PP
-If
-.I x
-is negative infinity or positive infinity, then
-a domain error occurs, and the functions return
-.BR INT_MAX .
-.\"
-.\" POSIX.1-2001 also says:
-.\" If the correct value is greater than {INT_MAX}, {INT_MAX}
-.\" shall be returned and a domain error shall occur.
-.\"
-.\" If the correct value is less than {INT_MIN}, {INT_MIN}
-.\" shall be returned and a domain error shall occur.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is 0 or a NaN
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised, and
-.I errno
-is set to
-.B EDOM
-(but see BUGS).
-.TP
-Domain error: \fIx\fP is an infinity
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised, and
-.I errno
-is set to
-.B EDOM
-(but see BUGS).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ilogb (),
-.BR ilogbf (),
-.BR ilogbl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.SH BUGS
-.\" Bug raised: https://www.sourceware.org/bugzilla/show_bug.cgi?id=6794
-Before glibc 2.16, the following bugs existed in the
-glibc implementation of these functions:
-.IP \[bu] 3
-The domain error case where
-.I x
-is 0 or a NaN did not cause
-.I errno
-to be set or (on some architectures) raise a floating-point exception.
-.IP \[bu]
-The domain error case where
-.I x
-is an infinity did not cause
-.I errno
-to be set or raise a floating-point exception.
-.SH SEE ALSO
-.BR log (3),
-.BR logb (3),
-.BR significand (3)
diff --git a/man3/ilogbf.3 b/man3/ilogbf.3
deleted file mode 100644
index 213d00afa..000000000
--- a/man3/ilogbf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ilogb.3
diff --git a/man3/ilogbl.3 b/man3/ilogbl.3
deleted file mode 100644
index 213d00afa..000000000
--- a/man3/ilogbl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ilogb.3
diff --git a/man3/imaxabs.3 b/man3/imaxabs.3
deleted file mode 100644
index 97db8d2b6..000000000
--- a/man3/imaxabs.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/abs.3
diff --git a/man3/imaxdiv.3 b/man3/imaxdiv.3
deleted file mode 100644
index 934824e3e..000000000
--- a/man3/imaxdiv.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/div.3
diff --git a/man3/index.3 b/man3/index.3
deleted file mode 100644
index 7007a0c7e..000000000
--- a/man3/index.3
+++ /dev/null
@@ -1,44 +0,0 @@
-.\" Copyright 2022 Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH index 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-index, rindex \- locate character in string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <strings.h>
-.PP
-.BI "[[deprecated]] char *index(const char *" s ", int " c );
-.BI "[[deprecated]] char *rindex(const char *" s ", int " c );
-.fi
-.SH DESCRIPTION
-.BR index ()
-is identical to
-.BR strchr (3).
-.PP
-.BR rindex ()
-is identical to
-.BR strrchr (3).
-.PP
-Use
-.BR strchr (3)
-and
-.BR strrchr (3)
-instead of these functions.
-.SH STANDARDS
-None.
-.SH HISTORY
-4.3BSD; marked as LEGACY in POSIX.1-2001.
-Removed in POSIX.1-2008,
-recommending
-.BR strchr (3)
-and
-.BR strrchr (3)
-instead.
-.SH SEE ALSO
-.BR strchr (3),
-.BR strrchr (3)
diff --git a/man3/inet.3 b/man3/inet.3
deleted file mode 100644
index e482f12e8..000000000
--- a/man3/inet.3
+++ /dev/null
@@ -1,337 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" libc.info (from glibc distribution)
-.\" Modified Sat Jul 24 19:12:00 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Sun Sep 3 20:29:36 1995 by Jim Van Zandt <jrv@vanzandt.mv.com>
-.\" Changed network into host byte order (for inet_network),
-.\" Andreas Jaeger <aj@arthur.rhein-neckar.de>, 980130.
-.\" 2008-06-19, mtk
-.\" Describe the various address forms supported by inet_aton().
-.\" Clarify discussion of inet_lnaof(), inet_netof(), and inet_makeaddr().
-.\" Add discussion of Classful Addressing, noting that it is obsolete.
-.\" Added an EXAMPLE program.
-.\"
-.TH inet 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-inet_aton, inet_addr, inet_network, inet_ntoa, inet_makeaddr, inet_lnaof,
-inet_netof \- Internet address manipulation routines
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.B #include <netinet/in.h>
-.B #include <arpa/inet.h>
-.PP
-.BI "int inet_aton(const char *" cp ", struct in_addr *" inp );
-.PP
-.BI "in_addr_t inet_addr(const char *" cp );
-.BI "in_addr_t inet_network(const char *" cp );
-.PP
-.BI "[[deprecated]] char *inet_ntoa(struct in_addr " in );
-.PP
-.BI "[[deprecated]] struct in_addr inet_makeaddr(in_addr_t " net ,
-.BI " in_addr_t " host );
-.PP
-.BI "[[deprecated]] in_addr_t inet_lnaof(struct in_addr " in );
-.BI "[[deprecated]] in_addr_t inet_netof(struct in_addr " in );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR inet_aton (),
-.BR inet_ntoa ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- In glibc up to and including 2.19:
- _BSD_SOURCE || _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-.BR inet_aton ()
-converts the Internet host address \fIcp\fP from the
-IPv4 numbers-and-dots notation into binary form (in network byte order)
-and stores it in the structure that \fIinp\fP points to.
-.BR inet_aton ()
-returns nonzero if the address is valid, zero if not.
-The address supplied in
-.I cp
-can have one of the following forms:
-.TP 10
-.I a.b.c.d
-Each of the four numeric parts specifies a byte of the address;
-the bytes are assigned in left-to-right order to produce the binary address.
-.TP
-.I a.b.c
-Parts
-.I a
-and
-.I b
-specify the first two bytes of the binary address.
-Part
-.I c
-is interpreted as a 16-bit value that defines the rightmost two bytes
-of the binary address.
-This notation is suitable for specifying (outmoded) Class B
-network addresses.
-.TP
-.I a.b
-Part
-.I a
-specifies the first byte of the binary address.
-Part
-.I b
-is interpreted as a 24-bit value that defines the rightmost three bytes
-of the binary address.
-This notation is suitable for specifying (outmoded) Class A
-network addresses.
-.TP
-.I a
-The value
-.I a
-is interpreted as a 32-bit value that is stored directly
-into the binary address without any byte rearrangement.
-.PP
-In all of the above forms,
-components of the dotted address can be specified in decimal,
-octal (with a leading
-.IR 0 ),
-or hexadecimal, with a leading
-.IR 0X ).
-Addresses in any of these forms are collectively termed
-.IR "IPV4 numbers-and-dots notation" .
-The form that uses exactly four decimal numbers is referred to as
-.I IPv4 dotted-decimal notation
-(or sometimes:
-.IR "IPv4 dotted-quad notation" ).
-.PP
-.BR inet_aton ()
-returns 1 if the supplied string was successfully interpreted,
-or 0 if the string is invalid
-.RB ( errno
-is
-.I not
-set on error).
-.PP
-The
-.BR inet_addr ()
-function converts the Internet host address
-\fIcp\fP from IPv4 numbers-and-dots notation into binary data in network
-byte order.
-If the input is invalid,
-.B INADDR_NONE
-(usually \-1) is returned.
-Use of this function is problematic because \-1 is a valid address
-(255.255.255.255).
-Avoid its use in favor of
-.BR inet_aton (),
-.BR inet_pton (3),
-or
-.BR getaddrinfo (3),
-which provide a cleaner way to indicate error return.
-.PP
-The
-.BR inet_network ()
-function converts
-.IR cp ,
-a string in IPv4 numbers-and-dots notation,
-into a number in host byte order suitable for use as an
-Internet network address.
-On success, the converted address is returned.
-If the input is invalid, \-1 is returned.
-.PP
-The
-.BR inet_ntoa ()
-function converts the Internet host address
-\fIin\fP, given in network byte order, to a string in IPv4
-dotted-decimal notation.
-The string is returned in a statically
-allocated buffer, which subsequent calls will overwrite.
-.PP
-The
-.BR inet_lnaof ()
-function returns the local network address part
-of the Internet address \fIin\fP.
-The returned value is in host byte order.
-.PP
-The
-.BR inet_netof ()
-function returns the network number part of
-the Internet address \fIin\fP.
-The returned value is in host byte order.
-.PP
-The
-.BR inet_makeaddr ()
-function is the converse of
-.BR inet_netof ()
-and
-.BR inet_lnaof ().
-It returns an Internet host address in network byte order,
-created by combining the network number \fInet\fP
-with the local address \fIhost\fP, both in
-host byte order.
-.PP
-The structure \fIin_addr\fP as used in
-.BR inet_ntoa (),
-.BR inet_makeaddr (),
-.BR inet_lnaof (),
-and
-.BR inet_netof ()
-is defined in
-.I <netinet/in.h>
-as:
-.PP
-.in +4n
-.EX
-typedef uint32_t in_addr_t;
-\&
-struct in_addr {
- in_addr_t s_addr;
-};
-.EE
-.in
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR inet_aton (),
-.BR inet_addr (),
-.BR inet_network (),
-.BR inet_ntoa ()
-T} Thread safety MT-Safe locale
-T{
-.BR inet_makeaddr (),
-.BR inet_lnaof (),
-.BR inet_netof ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR inet_addr ()
-.TQ
-.BR inet_ntoa ()
-POSIX.1-2008.
-.TP
-.BR inet_aton ()
-None.
-.SH STANDARDS
-.TP
-.BR inet_addr ()
-.TQ
-.BR inet_ntoa ()
-POSIX.1-2001, 4.3BSD.
-.PP
-.BR inet_lnaof (),
-.BR inet_netof (),
-and
-.BR inet_makeaddr ()
-are legacy functions that assume they are dealing with
-.IR "classful network addresses" .
-Classful networking divides IPv4 network addresses into host and network
-components at byte boundaries, as follows:
-.TP 10
-Class A
-This address type is indicated by the value 0 in the
-most significant bit of the (network byte ordered) address.
-The network address is contained in the most significant byte,
-and the host address occupies the remaining three bytes.
-.TP
-Class B
-This address type is indicated by the binary value 10 in the
-most significant two bits of the address.
-The network address is contained in the two most significant bytes,
-and the host address occupies the remaining two bytes.
-.TP
-Class C
-This address type is indicated by the binary value 110 in the
-most significant three bits of the address.
-The network address is contained in the three most significant bytes,
-and the host address occupies the remaining byte.
-.PP
-Classful network addresses are now obsolete,
-having been superseded by Classless Inter-Domain Routing (CIDR),
-which divides addresses into network and host components at
-arbitrary bit (rather than byte) boundaries.
-.SH NOTES
-On x86 architectures, the host byte order is Least Significant Byte
-first (little endian), whereas the network byte order, as used on the
-Internet, is Most Significant Byte first (big endian).
-.SH EXAMPLES
-An example of the use of
-.BR inet_aton ()
-and
-.BR inet_ntoa ()
-is shown below.
-Here are some example runs:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out 226.000.000.037" " # Last byte is in octal"
-226.0.0.31
-.RB "$" " ./a.out 0x7f.1 " " # First byte is in hex"
-127.0.0.1
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (inet.c)
-.EX
-#define _DEFAULT_SOURCE
-#include <arpa/inet.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(int argc, char *argv[])
-{
- struct in_addr addr;
-\&
- if (argc != 2) {
- fprintf(stderr, "%s <dotted\-address>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- if (inet_aton(argv[1], &addr) == 0) {
- fprintf(stderr, "Invalid address\en");
- exit(EXIT_FAILURE);
- }
-\&
- printf("%s\en", inet_ntoa(addr));
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR byteorder (3),
-.BR getaddrinfo (3),
-.BR gethostbyname (3),
-.BR getnameinfo (3),
-.BR getnetent (3),
-.BR inet_net_pton (3),
-.BR inet_ntop (3),
-.BR inet_pton (3),
-.BR hosts (5),
-.BR networks (5)
diff --git a/man3/inet_addr.3 b/man3/inet_addr.3
deleted file mode 100644
index 0eba30eb9..000000000
--- a/man3/inet_addr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/inet.3
diff --git a/man3/inet_aton.3 b/man3/inet_aton.3
deleted file mode 100644
index 0eba30eb9..000000000
--- a/man3/inet_aton.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/inet.3
diff --git a/man3/inet_lnaof.3 b/man3/inet_lnaof.3
deleted file mode 100644
index 0eba30eb9..000000000
--- a/man3/inet_lnaof.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/inet.3
diff --git a/man3/inet_makeaddr.3 b/man3/inet_makeaddr.3
deleted file mode 100644
index 4a9e0fd11..000000000
--- a/man3/inet_makeaddr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/inet_addr.3
diff --git a/man3/inet_net_ntop.3 b/man3/inet_net_ntop.3
deleted file mode 100644
index 10b8d4473..000000000
--- a/man3/inet_net_ntop.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/inet_net_pton.3
diff --git a/man3/inet_net_pton.3 b/man3/inet_net_pton.3
deleted file mode 100644
index 10ea3b3c6..000000000
--- a/man3/inet_net_pton.3
+++ /dev/null
@@ -1,369 +0,0 @@
-.\" Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH inet_net_pton 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-inet_net_pton, inet_net_ntop \- Internet network number conversion
-.SH LIBRARY
-Resolver library
-.RI ( libresolv ", " \-lresolv )
-.SH SYNOPSIS
-.nf
-.B #include <arpa/inet.h>
-.PP
-.BI "int inet_net_pton(int " af ", const char *" pres ,
-.BI " void " netp [. nsize "], size_t " nsize );
-.BI "char *inet_net_ntop(int " af ,
-.BI " const void " netp [(. bits " - CHAR_BIT + 1) / CHAR_BIT],"
-.BI " int " bits ,
-.BI " char " pres [. psize "], size_t " psize );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR inet_net_pton (),
-.BR inet_net_ntop ():
-.nf
- Since glibc 2.20:
- _DEFAULT_SOURCE
- Before glibc 2.20:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions convert network numbers between
-presentation (i.e., printable) format and network (i.e., binary) format.
-.PP
-For both functions,
-.I af
-specifies the address family for the conversion;
-the only supported value is
-.BR AF_INET .
-.SS inet_net_pton()
-The
-.BR inet_net_pton ()
-function converts
-.IR pres ,
-a null-terminated string containing an Internet network number in
-presentation format to network format.
-The result of the conversion, which is in network byte order,
-is placed in the buffer pointed to by
-.IR netp .
-(The
-.I netp
-argument typically points to an
-.I in_addr
-structure.)
-The
-.I nsize
-argument specifies the number of bytes available in
-.IR netp .
-.PP
-On success,
-.BR inet_net_pton ()
-returns the number of bits in the network number field
-of the result placed in
-.IR netp .
-For a discussion of the input presentation format and the return value,
-see NOTES.
-.PP
-.IR Note :
-the buffer pointed to by
-.I netp
-should be zeroed out before calling
-.BR inet_net_pton (),
-since the call writes only as many bytes as are required
-for the network number (or as are explicitly specified by
-.IR pres ),
-which may be less than the number of bytes in a complete network address.
-.SS inet_net_ntop()
-The
-.BR inet_net_ntop ()
-function converts the network number in the buffer pointed to by
-.I netp
-to presentation format;
-.I *netp
-is interpreted as a value in network byte order.
-The
-.I bits
-argument specifies the number of bits in the network number in
-.IR *netp .
-.PP
-The null-terminated presentation-format string
-is placed in the buffer pointed to by
-.IR pres .
-The
-.I psize
-argument specifies the number of bytes available in
-.IR pres .
-The presentation string is in CIDR format:
-a dotted-decimal number representing the network address,
-followed by a slash, and the size of the network number in bits.
-.SH RETURN VALUE
-On success,
-.BR inet_net_pton ()
-returns the number of bits in the network number.
-On error, it returns \-1, and
-.I errno
-is set to indicate the error.
-.PP
-On success,
-.BR inet_net_ntop ()
-returns
-.IR pres .
-On error, it returns NULL, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EAFNOSUPPORT
-.I af
-specified a value other than
-.BR AF_INET .
-.TP
-.B EMSGSIZE
-The size of the output buffer was insufficient.
-.TP
-.B ENOENT
-.RB ( inet_net_pton ())
-.I pres
-was not in correct presentation format.
-.SH STANDARDS
-None.
-.SH NOTES
-.SS Input presentation format for inet_net_pton()
-The network number may be specified either
-as a hexadecimal value
-or in dotted-decimal notation.
-.PP
-Hexadecimal values are indicated by an initial "0x" or "0X".
-The hexadecimal digits populate the nibbles (half octets) of the
-network number from left to right in network byte order.
-.\" If the hexadecimal string is short, the remaining nibbles are zeroed.
-.PP
-In dotted-decimal notation, up to four octets are specified,
-as decimal numbers separated by dots.
-Thus, any of the following forms are accepted:
-.PP
-.in +4n
-.EX
-a.b.c.d
-a.b.c
-a.b
-a
-.EE
-.in
-.PP
-Each part is a number in the range 0 to 255 that
-populates one byte of the resulting network number,
-going from left to right, in network-byte (big endian) order.
-Where a part is omitted, the resulting byte in the network number is zero.
-.\" Reading other man pages, some other implementations treat
-.\" 'c' in a.b.c as a 16-bit number that populates right-most two bytes
-.\" 'b' in a.b as a 24-bit number that populates right-most three bytes
-.PP
-For either hexadecimal or dotted-decimal format,
-the network number can optionally be followed by a slash
-and a number in the range 0 to 32,
-which specifies the size of the network number in bits.
-.SS Return value of inet_net_pton()
-The return value of
-.BR inet_net_pton ()
-is the number of bits in the network number field.
-If the input presentation string terminates with a slash and
-an explicit size value, then that size becomes the return value of
-.BR inet_net_pton ().
-Otherwise, the return value,
-.IR bits ,
-is inferred as follows:
-.IP \[bu] 3
-If the most significant byte of the network number is
-greater than or equal to 240,
-then
-.I bits
-is 32.
-.IP \[bu]
-Otherwise,
-if the most significant byte of the network number is
-greater than or equal to 224,
-then
-.I bits
-is 4.
-.IP \[bu]
-Otherwise,
-if the most significant byte of the network number is
-greater than or equal to 192,
-then
-.I bits
-is 24.
-.IP \[bu]
-Otherwise,
-if the most significant byte of the network number is
-greater than or equal to 128,
-then
-.I bits
-is 16.
-.IP \[bu]
-Otherwise,
-.I bits
-is 8.
-.PP
-If the resulting
-.I bits
-value from the above steps is greater than or equal to 8,
-but the number of octets specified in the network number exceed
-.IR "bits/8" ,
-then
-.I bits
-is set to 8 times the number of octets actually specified.
-.SH EXAMPLES
-The program below demonstrates the use of
-.BR inet_net_pton ()
-and
-.BR inet_net_ntop ().
-It uses
-.BR inet_net_pton ()
-to convert the presentation format network address provided in
-its first command-line argument to binary form, displays the return value from
-.BR inet_net_pton ().
-It then uses
-.BR inet_net_ntop ()
-to convert the binary form back to presentation format,
-and displays the resulting string.
-.PP
-In order to demonstrate that
-.BR inet_net_pton ()
-may not write to all bytes of its
-.I netp
-argument, the program allows an optional second command-line argument,
-a number used to initialize the buffer before
-.BR inet_net_pton ()
-is called.
-As its final line of output,
-the program displays all of the bytes of the buffer returned by
-.BR inet_net_pton ()
-allowing the user to see which bytes have not been touched by
-.BR inet_net_pton ().
-.PP
-An example run, showing that
-.BR inet_net_pton ()
-infers the number of bits in the network number:
-.PP
-.in +4n
-.EX
-$ \fB./a.out 193.168\fP
-inet_net_pton() returned: 24
-inet_net_ntop() yielded: 193.168.0/24
-Raw address: c1a80000
-.EE
-.in
-.PP
-Demonstrate that
-.BR inet_net_pton ()
-does not zero out unused bytes in its result buffer:
-.PP
-.in +4n
-.EX
-$ \fB./a.out 193.168 0xffffffff\fP
-inet_net_pton() returned: 24
-inet_net_ntop() yielded: 193.168.0/24
-Raw address: c1a800ff
-.EE
-.in
-.PP
-Demonstrate that
-.BR inet_net_pton ()
-will widen the inferred size of the network number,
-if the supplied number of bytes in the presentation
-string exceeds the inferred value:
-.PP
-.in +4n
-.EX
-$ \fB./a.out 193.168.1.128\fP
-inet_net_pton() returned: 32
-inet_net_ntop() yielded: 193.168.1.128/32
-Raw address: c1a80180
-.EE
-.in
-.PP
-Explicitly specifying the size of the network number overrides any
-inference about its size
-(but any extra bytes that are explicitly specified will still be used by
-.BR inet_net_pton ():
-to populate the result buffer):
-.PP
-.in +4n
-.EX
-$ \fB./a.out 193.168.1.128/24\fP
-inet_net_pton() returned: 24
-inet_net_ntop() yielded: 193.168.1/24
-Raw address: c1a80180
-.EE
-.in
-.SS Program source
-.\" SRC BEGIN (inet_net_pton.c)
-.EX
-/* Link with "\-lresolv" */
-\&
-#include <arpa/inet.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \e
- } while (0)
-\&
-int
-main(int argc, char *argv[])
-{
- char buf[100];
- struct in_addr addr;
- int bits;
-\&
- if (argc < 2) {
- fprintf(stderr,
- "Usage: %s presentation\-form [addr\-init\-value]\en",
- argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- /* If argv[2] is supplied (a numeric value), use it to initialize
- the output buffer given to inet_net_pton(), so that we can see
- that inet_net_pton() initializes only those bytes needed for
- the network number. If argv[2] is not supplied, then initialize
- the buffer to zero (as is recommended practice). */
-\&
- addr.s_addr = (argc > 2) ? strtod(argv[2], NULL) : 0;
-\&
- /* Convert presentation network number in argv[1] to binary. */
-\&
- bits = inet_net_pton(AF_INET, argv[1], &addr, sizeof(addr));
- if (bits == \-1)
- errExit("inet_net_ntop");
-\&
- printf("inet_net_pton() returned: %d\en", bits);
-\&
- /* Convert binary format back to presentation, using \[aq]bits\[aq]
- returned by inet_net_pton(). */
-\&
- if (inet_net_ntop(AF_INET, &addr, bits, buf, sizeof(buf)) == NULL)
- errExit("inet_net_ntop");
-\&
- printf("inet_net_ntop() yielded: %s\en", buf);
-\&
- /* Display \[aq]addr\[aq] in raw form (in network byte order), so we can
- see bytes not displayed by inet_net_ntop(); some of those bytes
- may not have been touched by inet_net_ntop(), and so will still
- have any initial value that was specified in argv[2]. */
-\&
- printf("Raw address: %x\en", htonl(addr.s_addr));
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR inet (3),
-.BR networks (5)
diff --git a/man3/inet_netof.3 b/man3/inet_netof.3
deleted file mode 100644
index 0eba30eb9..000000000
--- a/man3/inet_netof.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/inet.3
diff --git a/man3/inet_network.3 b/man3/inet_network.3
deleted file mode 100644
index 0eba30eb9..000000000
--- a/man3/inet_network.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/inet.3
diff --git a/man3/inet_ntoa.3 b/man3/inet_ntoa.3
deleted file mode 100644
index 0eba30eb9..000000000
--- a/man3/inet_ntoa.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/inet.3
diff --git a/man3/inet_ntop.3 b/man3/inet_ntop.3
deleted file mode 100644
index ed2fad1af..000000000
--- a/man3/inet_ntop.3
+++ /dev/null
@@ -1,125 +0,0 @@
-'\" t
-.\" Copyright 2000 Sam Varshavchik <mrsam@courier-mta.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References: RFC 2553
-.TH inet_ntop 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-inet_ntop \- convert IPv4 and IPv6 addresses from binary to text form
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <arpa/inet.h>
-.PP
-.BI "const char *inet_ntop(int " af ", const void *restrict " src ,
-.BI " char " dst "[restrict ." size "], socklen_t " size );
-.fi
-.SH DESCRIPTION
-This function converts the network address structure
-.I src
-in the
-.I af
-address family into a character string.
-The resulting string is copied to the buffer pointed to by
-.IR dst ,
-which must be a non-null pointer.
-The caller specifies the number of bytes available in this buffer in
-the argument
-.IR size .
-.PP
-.BR inet_ntop ()
-extends the
-.BR inet_ntoa (3)
-function to support multiple address families,
-.BR inet_ntoa (3)
-is now considered to be deprecated in favor of
-.BR inet_ntop ().
-The following address families are currently supported:
-.TP
-.B AF_INET
-.I src
-points to a
-.I struct in_addr
-(in network byte order)
-which is converted to an IPv4 network address in
-the dotted-decimal format, "\fIddd.ddd.ddd.ddd\fP".
-The buffer
-.I dst
-must be at least
-.B INET_ADDRSTRLEN
-bytes long.
-.TP
-.B AF_INET6
-.I src
-points to a
-.I struct in6_addr
-(in network byte order)
-which is converted to a representation of this address in the
-most appropriate IPv6 network address format for this address.
-The buffer
-.I dst
-must be at least
-.B INET6_ADDRSTRLEN
-bytes long.
-.SH RETURN VALUE
-On success,
-.BR inet_ntop ()
-returns a non-null pointer to
-.IR dst .
-NULL is returned if there was an error, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EAFNOSUPPORT
-.I af
-was not a valid address family.
-.TP
-.B ENOSPC
-The converted address string would exceed the size given by
-.IR size .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR inet_ntop ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.PP
-Note that RFC\ 2553 defines a prototype where the last argument
-.I size
-is of type
-.IR size_t .
-Many systems follow RFC\ 2553.
-glibc 2.0 and 2.1 have
-.IR size_t ,
-but 2.2 and later have
-.IR socklen_t .
-.\" 2.1.3: size_t, 2.1.91: socklen_t
-.SH BUGS
-.B AF_INET6
-converts IPv4-mapped IPv6 addresses into an IPv6 format.
-.SH EXAMPLES
-See
-.BR inet_pton (3).
-.SH SEE ALSO
-.BR getnameinfo (3),
-.BR inet (3),
-.BR inet_pton (3)
diff --git a/man3/inet_pton.3 b/man3/inet_pton.3
deleted file mode 100644
index 54295f648..000000000
--- a/man3/inet_pton.3
+++ /dev/null
@@ -1,226 +0,0 @@
-'\" t
-.\" Copyright 2000 Sam Varshavchik <mrsam@courier-mta.com>
-.\" and Copyright (c) 2008 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References: RFC 2553
-.TH inet_pton 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-inet_pton \- convert IPv4 and IPv6 addresses from text to binary form
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <arpa/inet.h>
-.PP
-.BI "int inet_pton(int " af ", const char *restrict " src \
-", void *restrict " dst );
-.fi
-.SH DESCRIPTION
-This function converts the character string
-.I src
-into a network address structure in the
-.I af
-address family, then
-copies
-the network address structure to
-.IR dst .
-The
-.I af
-argument must be either
-.B AF_INET
-or
-.BR AF_INET6 .
-.I dst
-is written in network byte order.
-.PP
-The following address families are currently supported:
-.TP
-.B AF_INET
-.I src
-points to a character string containing an IPv4 network address in
-dotted-decimal format, "\fIddd.ddd.ddd.ddd\fP", where
-.I ddd
-is a decimal number of up to three digits in the range 0 to 255.
-The address is converted to a
-.I struct in_addr
-and copied to
-.IR dst ,
-which must be
-.I sizeof(struct in_addr)
-(4) bytes (32 bits) long.
-.TP
-.B AF_INET6
-.I src
-points to a character string containing an IPv6 network address.
-The address is converted to a
-.I struct in6_addr
-and copied to
-.IR dst ,
-which must be
-.I sizeof(struct in6_addr)
-(16) bytes (128 bits) long.
-The allowed formats for IPv6 addresses follow these rules:
-.RS
-.IP \[bu] 3
-The preferred format is
-.IR x:x:x:x:x:x:x:x .
-This form consists of eight hexadecimal numbers,
-each of which expresses a 16-bit value (i.e., each
-.I x
-can be up to 4 hex digits).
-.IP \[bu]
-A series of contiguous zero values in the preferred format
-can be abbreviated to
-.IR :: .
-Only one instance of
-.I ::
-can occur in an address.
-For example, the loopback address
-.I 0:0:0:0:0:0:0:1
-can be abbreviated as
-.IR ::1 .
-The wildcard address, consisting of all zeros, can be written as
-.IR :: .
-.IP \[bu]
-An alternate format is useful for expressing IPv4-mapped IPv6 addresses.
-This form is written as
-.IR x:x:x:x:x:x:d.d.d.d ,
-where the six leading
-.IR x s
-are hexadecimal values that define the six most-significant
-16-bit pieces of the address (i.e., 96 bits), and the
-.IR d s
-express a value in dotted-decimal notation that
-defines the least significant 32 bits of the address.
-An example of such an address is
-.IR ::FFFF:204.152.189.116 .
-.RE
-.IP
-See RFC 2373 for further details on the representation of IPv6 addresses.
-.SH RETURN VALUE
-.BR inet_pton ()
-returns 1 on success (network address was successfully converted).
-0 is returned if
-.I src
-does not contain a character string representing a valid network
-address in the specified address family.
-If
-.I af
-does not contain a valid address family, \-1 is returned and
-.I errno
-is set to
-.BR EAFNOSUPPORT .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR inet_pton ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-Unlike
-.BR inet_aton (3)
-and
-.BR inet_addr (3),
-.BR inet_pton ()
-supports IPv6 addresses.
-On the other hand,
-.BR inet_pton ()
-accepts only IPv4 addresses in dotted-decimal notation, whereas
-.BR inet_aton (3)
-and
-.BR inet_addr (3)
-allow the more general numbers-and-dots notation (hexadecimal
-and octal number formats, and formats that don't require all
-four bytes to be explicitly written).
-For an interface that handles both IPv6 addresses, and IPv4
-addresses in numbers-and-dots notation, see
-.BR getaddrinfo (3).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH BUGS
-.B AF_INET6
-does not recognize IPv4 addresses.
-An explicit IPv4-mapped IPv6 address must be supplied in
-.I src
-instead.
-.SH EXAMPLES
-The program below demonstrates the use of
-.BR inet_pton ()
-and
-.BR inet_ntop (3).
-Here are some example runs:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out i6 0:0:0:0:0:0:0:0"
-::
-.RB "$" " ./a.out i6 1:0:0:0:0:0:0:8"
-1::8
-.RB "$" " ./a.out i6 0:0:0:0:0:FFFF:204.152.189.116"
-::ffff:204.152.189.116
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (inet_pton.c)
-.EX
-#include <arpa/inet.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-int
-main(int argc, char *argv[])
-{
- unsigned char buf[sizeof(struct in6_addr)];
- int domain, s;
- char str[INET6_ADDRSTRLEN];
-\&
- if (argc != 3) {
- fprintf(stderr, "Usage: %s {i4|i6|<num>} string\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- domain = (strcmp(argv[1], "i4") == 0) ? AF_INET :
- (strcmp(argv[1], "i6") == 0) ? AF_INET6 : atoi(argv[1]);
-\&
- s = inet_pton(domain, argv[2], buf);
- if (s <= 0) {
- if (s == 0)
- fprintf(stderr, "Not in presentation format");
- else
- perror("inet_pton");
- exit(EXIT_FAILURE);
- }
-\&
- if (inet_ntop(domain, buf, str, INET6_ADDRSTRLEN) == NULL) {
- perror("inet_ntop");
- exit(EXIT_FAILURE);
- }
-\&
- printf("%s\en", str);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR getaddrinfo (3),
-.BR inet (3),
-.BR inet_ntop (3)
diff --git a/man3/initgroups.3 b/man3/initgroups.3
deleted file mode 100644
index f81824a79..000000000
--- a/man3/initgroups.3
+++ /dev/null
@@ -1,101 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 2004-10-10 by aeb
-.\"
-.TH initgroups 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-initgroups \- initialize the supplementary group access list
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.B #include <grp.h>
-.PP
-.BI "int initgroups(const char *" user ", gid_t " group );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR initgroups ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR initgroups ()
-function initializes the group access list by
-reading the group database
-.I /etc/group
-and using all groups of
-which
-.I user
-is a member.
-The additional group
-.I group
-is
-also added to the list.
-.PP
-The
-.I user
-argument must be non-NULL.
-.SH RETURN VALUE
-The
-.BR initgroups ()
-function returns 0 on success.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B ENOMEM
-Insufficient memory to allocate group information structure.
-.TP
-.B EPERM
-The calling process has insufficient privilege.
-See the underlying system call
-.BR setgroups (2).
-.SH FILES
-.TP
-.I /etc/group
-group database file
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR initgroups ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR getgroups (2),
-.BR setgroups (2),
-.BR credentials (7)
diff --git a/man3/initstate.3 b/man3/initstate.3
deleted file mode 100644
index 6e34104e2..000000000
--- a/man3/initstate.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/random.3
diff --git a/man3/initstate_r.3 b/man3/initstate_r.3
deleted file mode 100644
index b01937f4d..000000000
--- a/man3/initstate_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/random_r.3
diff --git a/man3/innetgr.3 b/man3/innetgr.3
deleted file mode 100644
index 34268f941..000000000
--- a/man3/innetgr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/setnetgrent.3
diff --git a/man3/insque.3 b/man3/insque.3
deleted file mode 100644
index 0a601970a..000000000
--- a/man3/insque.3
+++ /dev/null
@@ -1,251 +0,0 @@
-'\" t
-.\" peter memishian -- meem@gnu.ai.mit.edu
-.\" $Id: insque.3,v 1.2 1996/10/30 21:03:39 meem Exp meem $
-.\" and Copyright (c) 2010, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code (5.4.7)
-.\" Solaris 2.x, OSF/1, and HP-UX manpages
-.\" Curry's "UNIX Systems Programming for SVR4" (O'Reilly & Associates 1996)
-.\"
-.\" Changed to POSIX, 2003-08-11, aeb+wh
-.\" mtk, 2010-09-09: Noted glibc 2.4 bug, added info on circular
-.\" lists, added example program
-.\"
-.TH insque 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-insque, remque \- insert/remove an item from a queue
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <search.h>
-.PP
-.BI "void insque(void *" elem ", void *" prev );
-.BI "void remque(void *" elem );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR insque (),
-.BR remque ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR insque ()
-and
-.BR remque ()
-functions manipulate doubly linked lists.
-Each element in the list is a structure of
-which the first two elements are a forward and a
-backward pointer.
-The linked list may be linear (i.e., NULL forward pointer at
-the end of the list and NULL backward pointer at the start of the list)
-or circular.
-.PP
-The
-.BR insque ()
-function inserts the element pointed to by \fIelem\fP
-immediately after the element pointed to by \fIprev\fP.
-.PP
-If the list is linear, then the call
-.I "insque(elem, NULL)"
-can be used to insert the initial list element,
-and the call sets the forward and backward pointers of
-.I elem
-to NULL.
-.PP
-If the list is circular,
-the caller should ensure that the forward and backward pointers of the
-first element are initialized to point to that element,
-and the
-.I prev
-argument of the
-.BR insque ()
-call should also point to the element.
-.PP
-The
-.BR remque ()
-function removes the element pointed to by \fIelem\fP from the
-doubly linked list.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR insque (),
-.BR remque ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-On ancient systems,
-.\" e.g., SunOS, Linux libc4 and libc5
-the arguments of these functions were of type \fIstruct qelem *\fP,
-defined as:
-.PP
-.in +4n
-.EX
-struct qelem {
- struct qelem *q_forw;
- struct qelem *q_back;
- char q_data[1];
-};
-.EE
-.in
-.PP
-This is still what you will get if
-.B _GNU_SOURCE
-is defined before
-including \fI<search.h>\fP.
-.PP
-The location of the prototypes for these functions differs among several
-versions of UNIX.
-The above is the POSIX version.
-Some systems place them in \fI<string.h>\fP.
-.\" Linux libc4 and libc 5 placed them
-.\" in \fI<stdlib.h>\fP.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH BUGS
-In glibc 2.4 and earlier, it was not possible to specify
-.I prev
-as NULL.
-Consequently, to build a linear list, the caller had to build a list
-using an initial call that contained the first two elements of the list,
-with the forward and backward pointers in each element suitably initialized.
-.SH EXAMPLES
-The program below demonstrates the use of
-.BR insque ().
-Here is an example run of the program:
-.PP
-.in +4n
-.EX
-.RB "$ " "./a.out \-c a b c"
-Traversing completed list:
- a
- b
- c
-That was a circular list
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (insque.c)
-.EX
-#include <search.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-struct element {
- struct element *forward;
- struct element *backward;
- char *name;
-};
-\&
-static struct element *
-new_element(void)
-{
- struct element *e;
-\&
- e = malloc(sizeof(*e));
- if (e == NULL) {
- fprintf(stderr, "malloc() failed\en");
- exit(EXIT_FAILURE);
- }
-\&
- return e;
-}
-\&
-int
-main(int argc, char *argv[])
-{
- struct element *first, *elem, *prev;
- int circular, opt, errfnd;
-\&
- /* The "\-c" command\-line option can be used to specify that the
- list is circular. */
-\&
- errfnd = 0;
- circular = 0;
- while ((opt = getopt(argc, argv, "c")) != \-1) {
- switch (opt) {
- case \[aq]c\[aq]:
- circular = 1;
- break;
- default:
- errfnd = 1;
- break;
- }
- }
-\&
- if (errfnd || optind >= argc) {
- fprintf(stderr, "Usage: %s [\-c] string...\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- /* Create first element and place it in the linked list. */
-\&
- elem = new_element();
- first = elem;
-\&
- elem\->name = argv[optind];
-\&
- if (circular) {
- elem\->forward = elem;
- elem\->backward = elem;
- insque(elem, elem);
- } else {
- insque(elem, NULL);
- }
-\&
- /* Add remaining command\-line arguments as list elements. */
-\&
- while (++optind < argc) {
- prev = elem;
-\&
- elem = new_element();
- elem\->name = argv[optind];
- insque(elem, prev);
- }
-\&
- /* Traverse the list from the start, printing element names. */
-\&
- printf("Traversing completed list:\en");
- elem = first;
- do {
- printf(" %s\en", elem\->name);
- elem = elem\->forward;
- } while (elem != NULL && elem != first);
-\&
- if (elem == first)
- printf("That was a circular list\en");
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR queue (7)
diff --git a/man3/intro.3 b/man3/intro.3
deleted file mode 100644
index fd2ac01f5..000000000
--- a/man3/intro.3
+++ /dev/null
@@ -1,135 +0,0 @@
-.\" Copyright (C) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2007-10-23 mtk, Nearly a complete rewrite of the earlier page.
-.TH intro 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-intro \- introduction to library functions
-.SH DESCRIPTION
-Section 3 of the manual describes all library functions
-excluding the library functions
-(system call wrappers)
-described in Section 2,
-which implement system calls.
-.PP
-Many of the functions described in the section are part of the
-Standard C Library
-.RI ( libc ).
-Some functions are part of other libraries
-(e.g.,
-the math library,
-.IR libm ,
-or the real-time library,
-.IR librt )
-in which case the manual page will indicate
-the linker option needed to link against the required library
-(e.g.,
-.I \-lm
-and
-.IR \-lrt ,
-respectively,
-for the aforementioned libraries).
-.PP
-In some cases,
-the programmer must define a feature test macro in order to obtain
-the declaration of a function from the header file specified
-in the man page SYNOPSIS section.
-(Where required,
-these
-.I feature test macros
-must be defined before including
-.I any
-header files.)
-In such cases,
-the required macro is described in the man page.
-For further information on feature test macros,
-see
-.BR feature_test_macros (7).
-.\"
-.\" There
-.\" are various function groups which can be identified by a letter which
-.\" is appended to the chapter number:
-.\" .IP (3C)
-.\" These functions,
-.\" the functions from chapter 2 and from chapter 3S are
-.\" contained in the C standard library libc,
-.\" which will be used by
-.\" .BR cc (1)
-.\" by default.
-.\" .IP (3S)
-.\" These functions are parts of the
-.\" .BR stdio (3)
-.\" library. They are contained in the standard C library libc.
-.\" .IP (3M)
-.\" These functions are contained in the arithmetic library libm. They are
-.\" used by the
-.\" .BR f77 (1)
-.\" FORTRAN compiler by default,
-.\" but not by the
-.\" .BR cc (1)
-.\" C compiler,
-.\" which needs the option \fI\-lm\fP.
-.\" .IP (3F)
-.\" These functions are part of the FORTRAN library libF77. There are no
-.\" special compiler flags needed to use these functions.
-.\" .IP (3X)
-.\" Various special libraries. The manual pages documenting their functions
-.\" specify the library names.
-.SS Subsections
-Section 3 of this manual is organized into subsections
-that reflect the complex structure of the standard C library
-and its many implementations:
-.IP \[bu] 3
-3const
-.IP \[bu]
-3head
-.IP \[bu]
-3type
-.PP
-This difficult history frequently makes it a poor example to follow
-in design,
-implementation,
-and presentation.
-.PP
-Ideally,
-a library for the C language
-is designed such that each header file
-presents the interface to a coherent software module.
-It provides a small number of function declarations
-and exposes only data types and constants that
-are required for use of those functions.
-Together,
-these are termed an API or
-.IR "application program interface" .
-Types and constants to be shared among multiple APIs
-should be placed in header files that declare no functions.
-This organization permits a C library module
-to be documented concisely with one header file per manual page.
-Such an approach
-improves the readability and accessibility of library documentation,
-and thereby the usability of the software.
-.SH STANDARDS
-Certain terms and abbreviations are used to indicate UNIX variants
-and standards to which calls in this section conform.
-See
-.BR standards (7).
-.SH NOTES
-.SS Authors and copyright conditions
-Look at the header of the manual page source
-for the author(s) and copyright conditions.
-Note that these can be different from page to page!
-.SH SEE ALSO
-.BR intro (2),
-.BR errno (3),
-.BR capabilities (7),
-.BR credentials (7),
-.BR environ (7),
-.BR feature_test_macros (7),
-.BR libc (7),
-.BR math_error (7),
-.BR path_resolution (7),
-.BR pthreads (7),
-.BR signal (7),
-.BR standards (7),
-.BR system_data_types (7)
diff --git a/man3/iruserok.3 b/man3/iruserok.3
deleted file mode 100644
index b58efefab..000000000
--- a/man3/iruserok.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rcmd.3
diff --git a/man3/iruserok_af.3 b/man3/iruserok_af.3
deleted file mode 100644
index b58efefab..000000000
--- a/man3/iruserok_af.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rcmd.3
diff --git a/man3/isalnum.3 b/man3/isalnum.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isalnum.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isalnum_l.3 b/man3/isalnum_l.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isalnum_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isalpha.3 b/man3/isalpha.3
deleted file mode 100644
index 000e816d7..000000000
--- a/man3/isalpha.3
+++ /dev/null
@@ -1,408 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 19:10:00 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Sun Aug 21 17:51:50 1994 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Sat Sep 2 21:52:01 1995 by Jim Van Zandt <jrv@vanzandt.mv.com>
-.\" Modified Mon May 27 22:55:26 1996 by Martin Schulze (joey@linux.de)
-.\"
-.TH isalpha 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-isalnum, isalpha, isascii, isblank, iscntrl, isdigit, isgraph, islower,
-isprint, ispunct, isspace, isupper, isxdigit,
-isalnum_l, isalpha_l, isascii_l, isblank_l, iscntrl_l,
-isdigit_l, isgraph_l, islower_l,
-isprint_l, ispunct_l, isspace_l, isupper_l, isxdigit_l
-\- character classification functions
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <ctype.h>
-.PP
-.BI "int isalnum(int " c );
-.BI "int isalpha(int " c );
-.BI "int iscntrl(int " c );
-.BI "int isdigit(int " c );
-.BI "int isgraph(int " c );
-.BI "int islower(int " c );
-.BI "int isprint(int " c );
-.BI "int ispunct(int " c );
-.BI "int isspace(int " c );
-.BI "int isupper(int " c );
-.BI "int isxdigit(int " c );
-.PP
-.BI "int isascii(int " c );
-.BI "int isblank(int " c );
-.PP
-.BI "int isalnum_l(int " c ", locale_t " locale );
-.BI "int isalpha_l(int " c ", locale_t " locale );
-.BI "int isblank_l(int " c ", locale_t " locale );
-.BI "int iscntrl_l(int " c ", locale_t " locale );
-.BI "int isdigit_l(int " c ", locale_t " locale );
-.BI "int isgraph_l(int " c ", locale_t " locale );
-.BI "int islower_l(int " c ", locale_t " locale );
-.BI "int isprint_l(int " c ", locale_t " locale );
-.BI "int ispunct_l(int " c ", locale_t " locale );
-.BI "int isspace_l(int " c ", locale_t " locale );
-.BI "int isupper_l(int " c ", locale_t " locale );
-.BI "int isxdigit_l(int " c ", locale_t " locale );
-.PP
-.BI "int isascii_l(int " c ", locale_t " locale );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.ad l
-.PP
-.BR isascii ():
-.nf
- _XOPEN_SOURCE
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE
-.fi
-.PP
-.BR isblank ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.nh
-.PP
-.BR isalnum_l (),
-.BR isalpha_l (),
-.BR isblank_l (),
-.BR iscntrl_l (),
-.BR isdigit_l (),
-.BR isgraph_l (),
-.BR islower_l (),
-.BR isprint_l (),
-.BR ispunct_l (),
-.BR isspace_l (),
-.BR isupper_l (),
-.BR isxdigit_l ():
-.hy
-.nf
- Since glibc 2.10:
- _XOPEN_SOURCE >= 700
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.PP
-.BR isascii_l ():
-.nf
- Since glibc 2.10:
- _XOPEN_SOURCE >= 700 && (_SVID_SOURCE || _BSD_SOURCE)
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.ad
-.SH DESCRIPTION
-These functions check whether
-.IR c ,
-which must have the value of an
-.I unsigned char
-or
-.BR EOF ,
-falls into a certain character class according to the specified locale.
-The functions without the
-"_l" suffix perform the check based on the current locale.
-.PP
-The functions with the "_l" suffix perform the check
-based on the locale specified by the locale object
-.IR locale .
-The behavior of these functions is undefined if
-.I locale
-is the special locale object
-.B LC_GLOBAL_LOCALE
-(see
-.BR duplocale (3))
-or is not a valid locale object handle.
-.PP
-The list below explains the operation of the functions without
-the "_l" suffix;
-the functions with the "_l" suffix differ only in using the locale object
-.I locale
-instead of the current locale.
-.TP
-.BR isalnum ()
-checks for an alphanumeric character; it is equivalent to
-.BI "(isalpha(" c ") || isdigit(" c "))" \fR.
-.TP
-.BR isalpha ()
-checks for an alphabetic character; in the standard \fB"C"\fP
-locale, it is equivalent to
-.BI "(isupper(" c ") || islower(" c "))" \fR.
-In some locales, there may be additional characters for which
-.BR isalpha ()
-is true\[em]letters which are neither uppercase nor lowercase.
-.TP
-.BR isascii ()
-checks whether \fIc\fP is a 7-bit
-.I unsigned char
-value that fits into
-the ASCII character set.
-.TP
-.BR isblank ()
-checks for a blank character; that is, a space or a tab.
-.TP
-.BR iscntrl ()
-checks for a control character.
-.TP
-.BR isdigit ()
-checks for a digit (0 through 9).
-.TP
-.BR isgraph ()
-checks for any printable character except space.
-.TP
-.BR islower ()
-checks for a lowercase character.
-.TP
-.BR isprint ()
-checks for any printable character including space.
-.TP
-.BR ispunct ()
-checks for any printable character which is not a space or an
-alphanumeric character.
-.TP
-.BR isspace ()
-checks for white-space characters.
-In the
-.B """C"""
-and
-.B """POSIX"""
-locales, these are: space, form-feed
-.RB ( \[aq]\ef\[aq] ),
-newline
-.RB ( \[aq]\en\[aq] ),
-carriage return
-.RB ( \[aq]\er\[aq] ),
-horizontal tab
-.RB ( \[aq]\et\[aq] ),
-and vertical tab
-.RB ( \[aq]\ev\[aq] ).
-.TP
-.BR isupper ()
-checks for an uppercase letter.
-.TP
-.BR isxdigit ()
-checks for hexadecimal digits, that is, one of
-.br
-.BR "0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F" .
-.SH RETURN VALUE
-The values returned are nonzero if the character
-.I c
-falls into the tested class, and zero if not.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR isalnum (),
-.BR isalpha (),
-.BR isascii (),
-.BR isblank (),
-.BR iscntrl (),
-.BR isdigit (),
-.BR isgraph (),
-.BR islower (),
-.BR isprint (),
-.BR ispunct (),
-.BR isspace (),
-.BR isupper (),
-.BR isxdigit ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.\" FIXME: need a thread-safety statement about the *_l functions
-.SH STANDARDS
-.TP
-.BR isalnum ()
-.TQ
-.BR isalpha ()
-.TQ
-.BR iscntrl ()
-.TQ
-.BR isdigit ()
-.TQ
-.BR isgraph ()
-.TQ
-.BR islower ()
-.TQ
-.BR isprint ()
-.TQ
-.BR ispunct ()
-.TQ
-.BR isspace ()
-.TQ
-.BR isupper ()
-.TQ
-.BR isxdigit ()
-.TQ
-.BR isblank ()
-C11, POSIX.1-2008.
-.TP
-.BR isascii ()
-.TQ
-.BR isalnum_l ()
-.TQ
-.BR isalpha_l ()
-.TQ
-.BR isblank_l ()
-.TQ
-.BR iscntrl_l ()
-.TQ
-.BR isdigit_l ()
-.TQ
-.BR isgraph_l ()
-.TQ
-.BR islower_l ()
-.TQ
-.BR isprint_l ()
-.TQ
-.BR ispunct_l ()
-.TQ
-.BR isspace_l ()
-.TQ
-.BR isupper_l ()
-.TQ
-.BR isxdigit_l ()
-POSIX.1-2008.
-.TP
-.BR isascii_l ()
-GNU.
-.SH HISTORY
-.TP
-.BR isalnum ()
-.TQ
-.BR isalpha ()
-.TQ
-.BR iscntrl ()
-.TQ
-.BR isdigit ()
-.TQ
-.BR isgraph ()
-.TQ
-.BR islower ()
-.TQ
-.BR isprint ()
-.TQ
-.BR ispunct ()
-.TQ
-.BR isspace ()
-.TQ
-.BR isupper ()
-.TQ
-.BR isxdigit ()
-C89, POSIX.1-2001.
-.TP
-.BR isblank ()
-C99, POSIX.1-2001.
-.TP
-.BR isascii ()
-POSIX.1-2001 (XSI).
-.IP
-POSIX.1-2008 marks it as obsolete,
-noting that it cannot be used portably in a localized application.
-.TP
-.BR isalnum_l ()
-.TQ
-.BR isalpha_l ()
-.TQ
-.BR isblank_l ()
-.TQ
-.BR iscntrl_l ()
-.TQ
-.BR isdigit_l ()
-.TQ
-.BR isgraph_l ()
-.TQ
-.BR islower_l ()
-.TQ
-.BR isprint_l ()
-.TQ
-.BR ispunct_l ()
-.TQ
-.BR isspace_l ()
-.TQ
-.BR isupper_l ()
-.TQ
-.BR isxdigit_l ()
-glibc 2.3.
-POSIX.1-2008.
-.TP
-.BR isascii_l ()
-glibc 2.3.
-.SH NOTES
-The standards require that the argument
-.I c
-for these functions is either
-.B EOF
-or a value that is representable in the type
-.IR "unsigned char" .
-If the argument
-.I c
-is of type
-.IR char ,
-it must be cast to
-.IR "unsigned char" ,
-as in the following example:
-.PP
-.in +4n
-.EX
-char c;
-\&...
-res = toupper((unsigned char) c);
-.EE
-.in
-.PP
-This is necessary because
-.I char
-may be the equivalent of
-.IR "signed char" ,
-in which case a byte where the top bit is set would be sign extended when
-converting to
-.IR int ,
-yielding a value that is outside the range of
-.IR "unsigned char" .
-.PP
-The details of what characters belong to which class depend on the
-locale.
-For example,
-.BR isupper ()
-will not recognize an A-umlaut (\(:A) as an uppercase letter in the default
-.B "C"
-locale.
-.SH SEE ALSO
-.BR iswalnum (3),
-.BR iswalpha (3),
-.BR iswblank (3),
-.BR iswcntrl (3),
-.BR iswdigit (3),
-.BR iswgraph (3),
-.BR iswlower (3),
-.BR iswprint (3),
-.BR iswpunct (3),
-.BR iswspace (3),
-.BR iswupper (3),
-.BR iswxdigit (3),
-.BR newlocale (3),
-.BR setlocale (3),
-.BR toascii (3),
-.BR tolower (3),
-.BR toupper (3),
-.BR uselocale (3),
-.BR ascii (7),
-.BR locale (7)
diff --git a/man3/isalpha_l.3 b/man3/isalpha_l.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isalpha_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isascii.3 b/man3/isascii.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isascii.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isascii_l.3 b/man3/isascii_l.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isascii_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isatty.3 b/man3/isatty.3
deleted file mode 100644
index fdde6daef..000000000
--- a/man3/isatty.3
+++ /dev/null
@@ -1,71 +0,0 @@
-'\" t
-.\" Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH isatty 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-isatty \- test whether a file descriptor refers to a terminal
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int isatty(int " fd );
-.fi
-.SH DESCRIPTION
-The
-.BR isatty ()
-function tests whether
-.I fd
-is an open file descriptor referring to a terminal.
-.SH RETURN VALUE
-.BR isatty ()
-returns 1 if
-.I fd
-is an open file descriptor referring to a terminal;
-otherwise 0 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor.
-.TP
-.B ENOTTY
-.I fd
-refers to a file other than a terminal.
-On some older kernels, some types of files
-.\" e.g., FIFOs and pipes on 2.6.32
-resulted in the error
-.B EINVAL
-in this case (which is a violation of POSIX, which specifies the error
-.BR ENOTTY ).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR isatty ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR fstat (2),
-.BR ttyname (3)
diff --git a/man3/isblank.3 b/man3/isblank.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isblank.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isblank_l.3 b/man3/isblank_l.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isblank_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/iscntrl.3 b/man3/iscntrl.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/iscntrl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/iscntrl_l.3 b/man3/iscntrl_l.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/iscntrl_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isdigit.3 b/man3/isdigit.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isdigit.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isdigit_l.3 b/man3/isdigit_l.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isdigit_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isfdtype.3 b/man3/isfdtype.3
deleted file mode 100644
index 6287ff562..000000000
--- a/man3/isfdtype.3
+++ /dev/null
@@ -1,77 +0,0 @@
-.\" Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH isfdtype 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-isfdtype \- test file type of a file descriptor
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/stat.h>
-.B #include <sys/socket.h>
-.PP
-.BI "int isfdtype(int " fd ", int " fdtype );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR isfdtype ():
-.nf
- Since glibc 2.20:
- _DEFAULT_SOURCE
- Before glibc 2.20:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR isfdtype ()
-function tests whether the file descriptor
-.I fd
-refers to a file of type
-.IR fdtype .
-The
-.I fdtype
-argument specifies one of the
-.B S_IF*
-constants defined in
-.I <sys/stat.h>
-and documented in
-.BR stat (2)
-(e.g.,
-.BR S_IFREG ).
-.SH RETURN VALUE
-The
-.BR isfdtype ()
-function returns 1 if the file descriptor
-.I fd
-is of type
-.I fdtype
-and 0 if it is not.
-On failure, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-The
-.BR isfdtype ()
-function can fail with any of the same errors as
-.BR fstat (2).
-.SH VERSIONS
-Portable applications should use
-.BR fstat (2)
-instead.
-.SH STANDARDS
-None.
-.SH HISTORY
-It appeared in the draft POSIX.1g standard.
-It is present on OpenBSD and Tru64 UNIX
-(where the required header file in both cases is just
-.IR <sys/stat.h> ,
-as shown in the POSIX.1g draft).
-.SH SEE ALSO
-.BR fstat (2)
diff --git a/man3/isfinite.3 b/man3/isfinite.3
deleted file mode 100644
index 17676c2c7..000000000
--- a/man3/isfinite.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fpclassify.3
diff --git a/man3/isgraph.3 b/man3/isgraph.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isgraph.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isgraph_l.3 b/man3/isgraph_l.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isgraph_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isgreater.3 b/man3/isgreater.3
deleted file mode 100644
index 87533ea5a..000000000
--- a/man3/isgreater.3
+++ /dev/null
@@ -1,147 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" 2002-07-27 Walter Harms
-.\" this was done with the help of the glibc manual
-.\"
-.TH isgreater 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-isgreater, isgreaterequal, isless, islessequal, islessgreater,
-isunordered \- floating-point relational tests without exception for NaN
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "int isgreater(" x ", " y );
-.BI "int isgreaterequal(" x ", " y );
-.BI "int isless(" x ", " y );
-.BI "int islessequal(" x ", " y );
-.BI "int islessgreater(" x ", " y );
-.BI "int isunordered(" x ", " y );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.nf
- All functions described here:
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-The normal relational operations (like
-.BR < ,
-"less than")
-fail if one of the operands is NaN.
-This will cause an exception.
-To avoid this, C99 defines the macros listed below.
-.PP
-These macros are guaranteed to evaluate their arguments only once.
-The arguments must be of real floating-point type (note: do not pass
-integer values as arguments to these macros, since the arguments will
-.I not
-be promoted to real-floating types).
-.TP
-.BR isgreater ()
-determines \fI(x)\ >\ (y)\fP without an exception
-if
-.I x
-or
-.I y
-is NaN.
-.TP
-.BR isgreaterequal ()
-determines \fI(x)\ >=\ (y)\fP without an exception
-if
-.I x
-or
-.I y
-is NaN.
-.TP
-.BR isless ()
-determines \fI(x)\ <\ (y)\fP without an exception
-if
-.I x
-or
-.I y
-is NaN.
-.TP
-.BR islessequal ()
-determines \fI(x)\ <=\ (y)\fP without an exception
-if
-.I x
-or
-.I y
-is NaN.
-.TP
-.BR islessgreater ()
-determines \fI(x)\ < (y) || (x) >\ (y)\fP
-without an exception if
-.I x
-or
-.I y
-is NaN.
-This macro is not equivalent to \fIx\ !=\ y\fP because that expression is
-true if
-.I x
-or
-.I y
-is NaN.
-.TP
-.BR isunordered ()
-determines whether its arguments are unordered, that is, whether
-at least one of the arguments is a NaN.
-.SH RETURN VALUE
-The macros other than
-.BR isunordered ()
-return the result of the relational comparison;
-these macros return 0 if either argument is a NaN.
-.PP
-.BR isunordered ()
-returns 1 if
-.I x
-or
-.I y
-is NaN and 0 otherwise.
-.SH ERRORS
-No errors occur.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR isgreater (),
-.BR isgreaterequal (),
-.BR isless (),
-.BR islessequal (),
-.BR islessgreater (),
-.BR isunordered ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-Not all hardware supports these functions,
-and where hardware support isn't provided, they will be emulated by macros.
-This will result in a performance penalty.
-Don't use these functions if NaN is of no concern for you.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR fpclassify (3),
-.BR isnan (3)
diff --git a/man3/isgreaterequal.3 b/man3/isgreaterequal.3
deleted file mode 100644
index 24410b964..000000000
--- a/man3/isgreaterequal.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isgreater.3
diff --git a/man3/isinf.3 b/man3/isinf.3
deleted file mode 100644
index 17676c2c7..000000000
--- a/man3/isinf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fpclassify.3
diff --git a/man3/isinff.3 b/man3/isinff.3
deleted file mode 100644
index 19f709b1c..000000000
--- a/man3/isinff.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/finite.3
diff --git a/man3/isinfl.3 b/man3/isinfl.3
deleted file mode 100644
index 19f709b1c..000000000
--- a/man3/isinfl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/finite.3
diff --git a/man3/isless.3 b/man3/isless.3
deleted file mode 100644
index 24410b964..000000000
--- a/man3/isless.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isgreater.3
diff --git a/man3/islessequal.3 b/man3/islessequal.3
deleted file mode 100644
index 24410b964..000000000
--- a/man3/islessequal.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isgreater.3
diff --git a/man3/islessgreater.3 b/man3/islessgreater.3
deleted file mode 100644
index 24410b964..000000000
--- a/man3/islessgreater.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isgreater.3
diff --git a/man3/islower.3 b/man3/islower.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/islower.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/islower_l.3 b/man3/islower_l.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/islower_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isnan.3 b/man3/isnan.3
deleted file mode 100644
index 17676c2c7..000000000
--- a/man3/isnan.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fpclassify.3
diff --git a/man3/isnanf.3 b/man3/isnanf.3
deleted file mode 100644
index 19f709b1c..000000000
--- a/man3/isnanf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/finite.3
diff --git a/man3/isnanl.3 b/man3/isnanl.3
deleted file mode 100644
index 19f709b1c..000000000
--- a/man3/isnanl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/finite.3
diff --git a/man3/isnormal.3 b/man3/isnormal.3
deleted file mode 100644
index 17676c2c7..000000000
--- a/man3/isnormal.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fpclassify.3
diff --git a/man3/isprint.3 b/man3/isprint.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isprint.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isprint_l.3 b/man3/isprint_l.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isprint_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/ispunct.3 b/man3/ispunct.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/ispunct.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/ispunct_l.3 b/man3/ispunct_l.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/ispunct_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isspace.3 b/man3/isspace.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isspace.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isspace_l.3 b/man3/isspace_l.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isspace_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isunordered.3 b/man3/isunordered.3
deleted file mode 100644
index 24410b964..000000000
--- a/man3/isunordered.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isgreater.3
diff --git a/man3/isupper.3 b/man3/isupper.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isupper.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isupper_l.3 b/man3/isupper_l.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isupper_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/iswalnum.3 b/man3/iswalnum.3
deleted file mode 100644
index 1eabd151f..000000000
--- a/man3/iswalnum.3
+++ /dev/null
@@ -1,98 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH iswalnum 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iswalnum \- test for alphanumeric wide character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "int iswalnum(wint_t " wc );
-.fi
-.SH DESCRIPTION
-The
-.BR iswalnum ()
-function is the wide-character equivalent of the
-.BR isalnum (3)
-function.
-It tests whether
-.I wc
-is a wide character
-belonging to the wide-character class "alnum".
-.PP
-The wide-character class "alnum" is a subclass of the wide-character class
-"graph", and therefore also a subclass of the wide-character class "print".
-.PP
-Being a subclass of the wide-character class "print",
-the wide-character class
-"alnum" is disjoint from the wide-character class "cntrl".
-.PP
-Being a subclass of the wide-character class "graph",
-the wide-character class "alnum" is disjoint from
-the wide-character class "space" and its subclass "blank".
-.PP
-The wide-character class "alnum" is disjoint from the wide-character class
-"punct".
-.PP
-The wide-character class "alnum" is the union of the wide-character classes
-"alpha" and "digit".
-As such, it also contains the wide-character class
-"xdigit".
-.PP
-The wide-character class "alnum"
-always contains at least the letters
-\[aq]A\[aq] to \[aq]Z\[aq],
-\[aq]a\[aq] to \[aq]z\[aq],
-and the digits \[aq]0\[aq] to \[aq]9\[aq].
-.SH RETURN VALUE
-The
-.BR iswalnum ()
-function returns nonzero
-if
-.I wc
-is a wide character
-belonging to the wide-character class "alnum".
-Otherwise, it returns zero.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR iswalnum ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR iswalnum ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR isalnum (3),
-.BR iswctype (3)
diff --git a/man3/iswalpha.3 b/man3/iswalpha.3
deleted file mode 100644
index 3e61dd3a1..000000000
--- a/man3/iswalpha.3
+++ /dev/null
@@ -1,99 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH iswalpha 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iswalpha \- test for alphabetic wide character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "int iswalpha(wint_t " wc );
-.fi
-.SH DESCRIPTION
-The
-.BR iswalpha ()
-function is the wide-character equivalent of the
-.BR isalpha (3)
-function.
-It tests whether
-.I wc
-is a wide character
-belonging to the wide-character class "alpha".
-.PP
-The wide-character class "alpha" is a subclass of the
-wide-character class "alnum",
-and therefore also a subclass of the wide-character class "graph" and
-of the wide-character class "print".
-.PP
-Being a subclass of the wide-character class "print",
-the wide-character class
-"alpha" is disjoint from the wide-character class "cntrl".
-.PP
-Being a subclass of the wide-character class "graph",
-the wide-character class "alpha" is disjoint from
-the wide-character class "space" and its subclass "blank".
-.PP
-Being a subclass of the wide-character class "alnum",
-the wide-character class "alpha" is disjoint from the
-wide-character class "punct".
-.PP
-The wide-character class "alpha" is disjoint from the wide-character class
-"digit".
-.PP
-The wide-character class "alpha" contains the wide-character classes "upper"
-and "lower".
-.PP
-The wide-character class "alpha" always contains at least the
-letters \[aq]A\[aq] to \[aq]Z\[aq] and \[aq]a\[aq] to \[aq]z\[aq].
-.SH RETURN VALUE
-The
-.BR iswalpha ()
-function returns nonzero
-if
-.I wc
-is a wide character
-belonging to the wide-character class "alpha".
-Otherwise, it returns zero.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR iswalpha ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR iswalpha ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR isalpha (3),
-.BR iswctype (3)
diff --git a/man3/iswblank.3 b/man3/iswblank.3
deleted file mode 100644
index 5c9944f65..000000000
--- a/man3/iswblank.3
+++ /dev/null
@@ -1,92 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH iswblank 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iswblank \- test for whitespace wide character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "int iswblank(wint_t " wc );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR iswblank ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-The
-.BR iswblank ()
-function is the wide-character equivalent of the
-.BR isblank (3)
-function.
-It tests whether \fIwc\fP is a wide character
-belonging to the wide-character class "blank".
-.PP
-The wide-character class "blank" is a subclass of the wide-character class
-"space".
-.PP
-Being a subclass of the wide-character class "space",
-the wide-character class "blank" is disjoint from the
-wide-character class "graph" and therefore also disjoint
-from its subclasses "alnum", "alpha", "upper", "lower", "digit",
-"xdigit", "punct".
-.PP
-The wide-character class "blank" always contains
-at least the space character
-and the control character \[aq]\et\[aq].
-.SH RETURN VALUE
-The
-.BR iswblank ()
-function returns nonzero
-if \fIwc\fP is a wide character
-belonging to the wide-character class "blank".
-Otherwise, it returns zero.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR iswblank ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-The behavior of
-.BR iswblank ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR isblank (3),
-.BR iswctype (3)
diff --git a/man3/iswcntrl.3 b/man3/iswcntrl.3
deleted file mode 100644
index 09712ebee..000000000
--- a/man3/iswcntrl.3
+++ /dev/null
@@ -1,83 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH iswcntrl 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iswcntrl \- test for control wide character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "int iswcntrl(wint_t " wc );
-.fi
-.SH DESCRIPTION
-The
-.BR iswcntrl ()
-function is the wide-character equivalent of the
-.BR iscntrl (3)
-function.
-It tests whether
-.I wc
-is a wide character
-belonging to the wide-character class "cntrl".
-.PP
-The wide-character class "cntrl" is disjoint from the wide-character class
-"print" and therefore also disjoint from its subclasses "graph", "alpha",
-"upper", "lower", "digit", "xdigit", "punct".
-.PP
-For an unsigned char
-.IR c ,
-.I iscntrl(c)
-implies
-.IR iswcntrl(btowc(c)) ,
-but not vice versa.
-.SH RETURN VALUE
-The
-.BR iswcntrl ()
-function returns nonzero if
-.I wc
-is a
-wide character belonging to the wide-character class "cntrl".
-Otherwise, it returns zero.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR iswcntrl ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR iswcntrl ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR iscntrl (3),
-.BR iswctype (3)
diff --git a/man3/iswctype.3 b/man3/iswctype.3
deleted file mode 100644
index 6b0476df8..000000000
--- a/man3/iswctype.3
+++ /dev/null
@@ -1,97 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH iswctype 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iswctype \- wide-character classification
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "int iswctype(wint_t " wc ", wctype_t " desc );
-.fi
-.SH DESCRIPTION
-If
-.I wc
-is a wide character having the character property designated by
-.I desc
-(or in other words: belongs to the character class designated by
-.IR desc ),
-then the
-.BR iswctype ()
-function returns nonzero.
-Otherwise, it
-returns zero.
-If
-.I wc
-is
-.BR WEOF ,
-zero is returned.
-.PP
-.I desc
-must be a character property descriptor
-returned by the
-.BR wctype (3)
-function.
-.SH RETURN VALUE
-The
-.BR iswctype ()
-function returns nonzero if
-the
-.I wc
-has the designated
-property.
-Otherwise, it returns 0.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR iswctype ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR iswctype ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR iswalnum (3),
-.BR iswalpha (3),
-.BR iswblank (3),
-.BR iswcntrl (3),
-.BR iswdigit (3),
-.BR iswgraph (3),
-.BR iswlower (3),
-.BR iswprint (3),
-.BR iswpunct (3),
-.BR iswspace (3),
-.BR iswupper (3),
-.BR iswxdigit (3),
-.BR wctype (3)
diff --git a/man3/iswdigit.3 b/man3/iswdigit.3
deleted file mode 100644
index d05bf6e2c..000000000
--- a/man3/iswdigit.3
+++ /dev/null
@@ -1,98 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH iswdigit 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iswdigit \- test for decimal digit wide character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "int iswdigit(wint_t " wc );
-.fi
-.SH DESCRIPTION
-The
-.BR iswdigit ()
-function is the wide-character equivalent of the
-.BR isdigit (3)
-function.
-It tests whether
-.I wc
-is a wide character
-belonging to the wide-character class "digit".
-.PP
-The wide-character class "digit" is a subclass of the wide-character class
-"xdigit", and therefore also a subclass
-of the wide-character class "alnum", of
-the wide-character class "graph" and of the wide-character class "print".
-.PP
-Being a subclass of the wide character
-class "print", the wide-character class
-"digit" is disjoint from the wide-character class "cntrl".
-.PP
-Being a subclass of the wide-character class "graph",
-the wide-character class
-"digit" is disjoint from the wide-character class "space" and its subclass
-"blank".
-.PP
-Being a subclass of the wide-character
-class "alnum", the wide-character class
-"digit" is disjoint from the wide-character class "punct".
-.PP
-The wide-character class "digit" is
-disjoint from the wide-character class
-"alpha" and therefore also disjoint from its subclasses "lower", "upper".
-.PP
-The wide-character class "digit" always
-contains exactly the digits \[aq]0\[aq] to \[aq]9\[aq].
-.SH RETURN VALUE
-The
-.BR iswdigit ()
-function returns nonzero
-if
-.I wc
-is a wide character
-belonging to the wide-character class "digit".
-Otherwise, it returns zero.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR iswdigit ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR iswdigit ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR isdigit (3),
-.BR iswctype (3)
diff --git a/man3/iswgraph.3 b/man3/iswgraph.3
deleted file mode 100644
index 8a4386b5f..000000000
--- a/man3/iswgraph.3
+++ /dev/null
@@ -1,91 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH iswgraph 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iswgraph \- test for graphic wide character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "int iswgraph(wint_t " wc );
-.fi
-.SH DESCRIPTION
-The
-.BR iswgraph ()
-function is the wide-character equivalent of the
-.BR isgraph (3)
-function.
-It tests whether
-.I wc
-is a wide character
-belonging to the wide-character class "graph".
-.PP
-The wide-character class "graph" is a subclass of the wide-character class
-"print".
-.PP
-Being a subclass of the wide-character class "print",
-the wide-character class
-"graph" is disjoint from the wide-character class "cntrl".
-.PP
-The wide-character class "graph" is disjoint from the wide-character class
-"space" and therefore also disjoint from its subclass "blank".
-.\" Note: UNIX98 (susv2/xbd/locale.html) says that "graph" and "space" may
-.\" have characters in common, except U+0020. But C99 (ISO/IEC 9899:1999
-.\" section 7.25.2.1.10) says that "space" and "graph" are disjoint.
-.PP
-The wide-character class "graph" contains all the wide characters from the
-wide-character class "print" except the space character.
-It therefore contains
-the wide-character classes "alnum" and "punct".
-.SH RETURN VALUE
-The
-.BR iswgraph ()
-function returns nonzero
-if
-.I wc
-is a wide character
-belonging to the wide-character class "graph".
-Otherwise, it returns zero.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR iswgraph ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR iswgraph ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR isgraph (3),
-.BR iswctype (3)
diff --git a/man3/iswlower.3 b/man3/iswlower.3
deleted file mode 100644
index 98156ee47..000000000
--- a/man3/iswlower.3
+++ /dev/null
@@ -1,109 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH iswlower 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iswlower \- test for lowercase wide character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "int iswlower(wint_t " wc );
-.fi
-.SH DESCRIPTION
-The
-.BR iswlower ()
-function is the wide-character equivalent of the
-.BR islower (3)
-function.
-It tests whether
-.I wc
-is a wide character
-belonging to the wide-character class "lower".
-.PP
-The wide-character class "lower" is a subclass of the wide-character class
-"alpha", and therefore also a subclass
-of the wide-character class "alnum", of
-the wide-character class "graph" and of the wide-character class "print".
-.PP
-Being a subclass of the wide-character class "print",
-the wide-character class
-"lower" is disjoint from the wide-character class "cntrl".
-.PP
-Being a subclass of the wide-character class "graph",
-the wide-character class "lower" is disjoint from the
-wide-character class "space" and its subclass "blank".
-.PP
-Being a subclass of the wide-character class "alnum",
-the wide-character class
-"lower" is disjoint from the wide-character class "punct".
-.PP
-Being a subclass of the wide-character class "alpha",
-the wide-character class
-"lower" is disjoint from the wide-character class "digit".
-.PP
-The wide-character class "lower" contains at least
-those characters
-.I wc
-which are equal to
-.I towlower(wc)
-and different from
-.IR towupper(wc) .
-.PP
-The wide-character class "lower" always contains
-at least the letters \[aq]a\[aq] to \[aq]z\[aq].
-.SH RETURN VALUE
-The
-.BR iswlower ()
-function returns nonzero
-if
-.I wc
-is a wide character
-belonging to the wide-character class "lower".
-Otherwise, it returns zero.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR iswlower ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR iswlower ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.PP
-This function is not very appropriate for dealing with Unicode characters,
-because Unicode knows about three cases: upper, lower, and title case.
-.SH SEE ALSO
-.BR islower (3),
-.BR iswctype (3),
-.BR towlower (3)
diff --git a/man3/iswprint.3 b/man3/iswprint.3
deleted file mode 100644
index e9c4c922b..000000000
--- a/man3/iswprint.3
+++ /dev/null
@@ -1,77 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH iswprint 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iswprint \- test for printing wide character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "int iswprint(wint_t " wc );
-.fi
-.SH DESCRIPTION
-The
-.BR iswprint ()
-function is the wide-character equivalent of the
-.BR isprint (3)
-function.
-It tests whether
-.I wc
-is a wide character
-belonging to the wide-character class "print".
-.PP
-The wide-character class "print" is disjoint from the wide-character class
-"cntrl".
-.PP
-The wide-character class "print" contains the wide-character class "graph".
-.SH RETURN VALUE
-The
-.BR iswprint ()
-function returns nonzero if
-.I wc
-is a
-wide character belonging to the wide-character class "print".
-Otherwise, it returns zero.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR iswprint ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR iswprint ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR isprint (3),
-.BR iswctype (3)
diff --git a/man3/iswpunct.3 b/man3/iswpunct.3
deleted file mode 100644
index 921321cfc..000000000
--- a/man3/iswpunct.3
+++ /dev/null
@@ -1,93 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH iswpunct 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iswpunct \- test for punctuation or symbolic wide character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "int iswpunct(wint_t " wc );
-.fi
-.SH DESCRIPTION
-The
-.BR iswpunct ()
-function is the wide-character equivalent of the
-.BR ispunct (3)
-function.
-It tests whether
-.I wc
-is a wide character
-belonging to the wide-character class "punct".
-.PP
-The wide-character class "punct" is a subclass of the wide-character class
-"graph", and therefore also a subclass of the wide-character class "print".
-.PP
-The wide-character class "punct" is disjoint from the wide-character class
-"alnum" and therefore also disjoint from its subclasses "alpha", "upper",
-"lower", "digit", "xdigit".
-.PP
-Being a subclass of the wide-character class "print",
-the wide-character class
-"punct" is disjoint from the wide-character class "cntrl".
-.PP
-Being a subclass of the wide-character class "graph",
-the wide-character class
-"punct" is disjoint from the wide-character class "space" and its subclass
-"blank".
-.SH RETURN VALUE
-The
-.BR iswpunct ()
-function returns nonzero
-if
-.I wc
-is a wide-character
-belonging to the wide-character class "punct".
-Otherwise, it returns zero.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR iswpunct ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR iswpunct ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.PP
-This function's name is a misnomer when dealing with Unicode characters,
-because the wide-character class "punct" contains both punctuation characters
-and symbol (math, currency, etc.) characters.
-.SH SEE ALSO
-.BR ispunct (3),
-.BR iswctype (3)
diff --git a/man3/iswspace.3 b/man3/iswspace.3
deleted file mode 100644
index 2b737e5c6..000000000
--- a/man3/iswspace.3
+++ /dev/null
@@ -1,86 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH iswspace 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iswspace \- test for whitespace wide character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "int iswspace(wint_t " wc );
-.fi
-.SH DESCRIPTION
-The
-.BR iswspace ()
-function is the wide-character equivalent of the
-.BR isspace (3)
-function.
-It tests whether
-.I wc
-is a wide character
-belonging to the wide-character class "space".
-.PP
-The wide-character class "space" is disjoint from the wide-character class
-"graph" and therefore also disjoint from its subclasses "alnum", "alpha",
-"upper", "lower", "digit", "xdigit", "punct".
-.\" Note: UNIX98 (susv2/xbd/locale.html) says that "space" and "graph" may
-.\" have characters in common, except U+0020. But C99 (ISO/IEC 9899:1999
-.\" section 7.25.2.1.10) says that "space" and "graph" are disjoint.
-.PP
-The wide-character class "space" contains the wide-character class "blank".
-.PP
-The wide-character class "space"
-always contains at least the space character
-and the control characters
-\[aq]\ef\[aq], \[aq]\en\[aq], \[aq]\er\[aq], \[aq]\et\[aq], and \[aq]\ev\[aq].
-.SH RETURN VALUE
-The
-.BR iswspace ()
-function returns nonzero if
-.I wc
-is a wide character
-belonging to the wide-character class "space".
-Otherwise, it returns zero.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR iswspace ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR iswspace ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR isspace (3),
-.BR iswctype (3)
diff --git a/man3/iswupper.3 b/man3/iswupper.3
deleted file mode 100644
index 90d677b6f..000000000
--- a/man3/iswupper.3
+++ /dev/null
@@ -1,103 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH iswupper 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iswupper \- test for uppercase wide character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "int iswupper(wint_t " wc );
-.fi
-.SH DESCRIPTION
-The
-.BR iswupper ()
-function is the wide-character equivalent of the
-.BR isupper (3)
-function.
-It tests whether
-.I wc
-is a wide character
-belonging to the wide-character class "upper".
-.PP
-The wide-character class "upper" is a subclass of the wide-character class
-"alpha", and therefore also a subclass of the wide-character class "alnum", of
-the wide-character class "graph" and of the wide-character class "print".
-.PP
-Being a subclass of the wide-character class "print", the wide-character class
-"upper" is disjoint from the wide-character class "cntrl".
-.PP
-Being a subclass of the wide-character class "graph", the wide-character class
-"upper" is disjoint from the wide-character class "space" and its subclass
-"blank".
-.PP
-Being a subclass of the wide-character class "alnum", the wide-character class
-"upper" is disjoint from the wide-character class "punct".
-.PP
-Being a subclass of the wide-character class "alpha", the wide-character class
-"upper" is disjoint from the wide-character class "digit".
-.PP
-The wide-character class "upper" contains at least those characters
-.I wc
-which are equal to
-.I towupper(wc)
-and different from
-.IR towlower(wc) .
-.PP
-The wide-character class "upper" always contains at least the
-letters \[aq]A\[aq] to \[aq]Z\[aq].
-.SH RETURN VALUE
-The
-.BR iswupper ()
-function returns nonzero if
-.I wc
-is a wide character
-belonging to the wide-character class "upper".
-Otherwise, it returns zero.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR iswupper ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR iswupper ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.PP
-This function is not very appropriate for dealing with Unicode characters,
-because Unicode knows about three cases: upper, lower, and title case.
-.SH SEE ALSO
-.BR isupper (3),
-.BR iswctype (3),
-.BR towupper (3)
diff --git a/man3/iswxdigit.3 b/man3/iswxdigit.3
deleted file mode 100644
index 63caf1556..000000000
--- a/man3/iswxdigit.3
+++ /dev/null
@@ -1,90 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH iswxdigit 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iswxdigit \- test for hexadecimal digit wide character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "int iswxdigit(wint_t " wc );
-.fi
-.SH DESCRIPTION
-The
-.BR iswxdigit ()
-function is the wide-character equivalent of the
-.BR isxdigit (3)
-function.
-It tests whether
-.I wc
-is a wide character
-belonging to the wide-character class "xdigit".
-.PP
-The wide-character class "xdigit" is a subclass of the wide-character class
-"alnum", and therefore also a subclass of the wide-character class "graph" and
-of the wide-character class "print".
-.PP
-Being a subclass of the wide-character class "print", the wide-character class
-"xdigit" is disjoint from the wide-character class "cntrl".
-.PP
-Being a subclass of the wide-character class "graph", the wide-character class
-"xdigit" is disjoint from the wide-character class "space" and its subclass
-"blank".
-.PP
-Being a subclass of the wide-character class "alnum", the wide-character class
-"xdigit" is disjoint from the wide-character class "punct".
-.PP
-The wide-character class "xdigit" always contains at least the
-letters \[aq]A\[aq] to \[aq]F\[aq], \[aq]a\[aq] to \[aq]f\[aq]
-and the digits \[aq]0\[aq] to \[aq]9\[aq].
-.SH RETURN VALUE
-The
-.BR iswxdigit ()
-function returns nonzero if
-.I wc
-is a wide character
-belonging to the wide-character class "xdigit".
-Otherwise, it returns zero.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR iswxdigit ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR iswxdigit ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR iswctype (3),
-.BR isxdigit (3)
diff --git a/man3/isxdigit.3 b/man3/isxdigit.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isxdigit.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/isxdigit_l.3 b/man3/isxdigit_l.3
deleted file mode 100644
index 0b69c7544..000000000
--- a/man3/isxdigit_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/isalpha.3
diff --git a/man3/j0.3 b/man3/j0.3
deleted file mode 100644
index a81eb46fe..000000000
--- a/man3/j0.3
+++ /dev/null
@@ -1,194 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 19:08:17 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-08-25, aeb
-.\" Modified 2004-11-12 as per suggestion by Fabian Kreutz/AEB
-.\" 2008-07-24, mtk, moved yxx() material into separate y0.3 page
-.\"
-.TH j0 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-j0, j0f, j0l, j1, j1f, j1l, jn, jnf, jnl \-
-Bessel functions of the first kind
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double j0(double " x );
-.BI "double j1(double " x );
-.BI "double jn(int " n ", double " x );
-.PP
-.BI "float j0f(float " x );
-.BI "float j1f(float " x );
-.BI "float jnf(int " n ", float " x );
-.PP
-.BI "long double j0l(long double " x );
-.BI "long double j1l(long double " x );
-.BI "long double jnl(int " n ", long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR j0 (),
-.BR j1 (),
-.BR jn ():
-.nf
- _XOPEN_SOURCE
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
-.fi
-.PP
-.BR j0f (),
-.BR j0l (),
-.BR j1f (),
-.BR j1l (),
-.BR jnf (),
-.BR jnl ():
-.nf
- _XOPEN_SOURCE >= 600
- || (_ISOC99_SOURCE && _XOPEN_SOURCE)
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR j0 ()
-and
-.BR j1 ()
-functions return Bessel functions of
-.I x
-of the first kind of orders 0 and 1, respectively.
-The
-.BR jn ()
-function
-returns the Bessel function of
-.I x
-of the first kind of order
-.IR n .
-.PP
-The
-.BR j0f (),
-.BR j1f (),
-and
-.BR jnf (),
-functions are versions that take and return
-.I float
-values.
-The
-.BR j0l (),
-.BR j1l (),
-and
-.BR jnl ()
-functions are versions that take and return
-.I "long double"
-values.
-.SH RETURN VALUE
-On success, these functions return the appropriate
-Bessel value of the first kind for
-.IR x .
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is too large in magnitude,
-or the result underflows,
-a range error occurs,
-and the return value is 0.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Range error: result underflow, or \fIx\fP is too large in magnitude
-.I errno
-is set to
-.BR ERANGE .
-.PP
-These functions do not raise exceptions for
-.BR fetestexcept (3).
-.\" e.g., j0(1.5e16)
-.\" This is intentional.
-.\" See https://www.sourceware.org/bugzilla/show_bug.cgi?id=6805
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR j0 (),
-.BR j0f (),
-.BR j0l ()
-T} Thread safety MT-Safe
-T{
-.BR j1 (),
-.BR j1f (),
-.BR j1l ()
-T} Thread safety MT-Safe
-T{
-.BR jn (),
-.BR jnf (),
-.BR jnl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR j0 ()
-.TQ
-.BR j1 ()
-.TQ
-.BR jn ()
-POSIX.1-2008.
-.TP
-Others:
-BSD.
-.SH HISTORY
-.TP
-.BR j0 ()
-.TQ
-.BR j1 ()
-.TQ
-.BR jn ()
-SVr4, 4.3BSD,
-POSIX.1-2001, POSIX.1-2008.
-.TP
-Others:
-BSD.
-.SH BUGS
-There are errors of up to 2e\-16 in the values returned by
-.BR j0 (),
-.BR j1 (),
-and
-.BR jn ()
-for values of
-.I x
-between \-8 and 8.
-.SH SEE ALSO
-.BR y0 (3)
diff --git a/man3/j0f.3 b/man3/j0f.3
deleted file mode 100644
index 6dc181883..000000000
--- a/man3/j0f.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/j0.3
diff --git a/man3/j0l.3 b/man3/j0l.3
deleted file mode 100644
index 6dc181883..000000000
--- a/man3/j0l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/j0.3
diff --git a/man3/j1.3 b/man3/j1.3
deleted file mode 100644
index 6dc181883..000000000
--- a/man3/j1.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/j0.3
diff --git a/man3/j1f.3 b/man3/j1f.3
deleted file mode 100644
index 6dc181883..000000000
--- a/man3/j1f.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/j0.3
diff --git a/man3/j1l.3 b/man3/j1l.3
deleted file mode 100644
index 6dc181883..000000000
--- a/man3/j1l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/j0.3
diff --git a/man3/jn.3 b/man3/jn.3
deleted file mode 100644
index 6dc181883..000000000
--- a/man3/jn.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/j0.3
diff --git a/man3/jnf.3 b/man3/jnf.3
deleted file mode 100644
index 6dc181883..000000000
--- a/man3/jnf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/j0.3
diff --git a/man3/jnl.3 b/man3/jnl.3
deleted file mode 100644
index 6dc181883..000000000
--- a/man3/jnl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/j0.3
diff --git a/man3/jrand48.3 b/man3/jrand48.3
deleted file mode 100644
index 3133f7d62..000000000
--- a/man3/jrand48.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/drand48.3
diff --git a/man3/jrand48_r.3 b/man3/jrand48_r.3
deleted file mode 100644
index 81e9d8ef7..000000000
--- a/man3/jrand48_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/drand48_r.3
diff --git a/man3/key_decryptsession.3 b/man3/key_decryptsession.3
deleted file mode 100644
index bc4bb02b2..000000000
--- a/man3/key_decryptsession.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/key_setsecret.3
diff --git a/man3/key_encryptsession.3 b/man3/key_encryptsession.3
deleted file mode 100644
index bc4bb02b2..000000000
--- a/man3/key_encryptsession.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/key_setsecret.3
diff --git a/man3/key_gendes.3 b/man3/key_gendes.3
deleted file mode 100644
index bc4bb02b2..000000000
--- a/man3/key_gendes.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/key_setsecret.3
diff --git a/man3/key_secretkey_is_set.3 b/man3/key_secretkey_is_set.3
deleted file mode 100644
index bc4bb02b2..000000000
--- a/man3/key_secretkey_is_set.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/key_setsecret.3
diff --git a/man3/key_setsecret.3 b/man3/key_setsecret.3
deleted file mode 100644
index 49115a406..000000000
--- a/man3/key_setsecret.3
+++ /dev/null
@@ -1,90 +0,0 @@
-'\" t
-.\" Copyright 2002 walter harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" I had no way the check the functions out
-.\" be careful
-.TH key_setsecret 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-key_decryptsession, key_encryptsession, key_setsecret, key_gendes,
-key_secretkey_is_set \- interfaces to rpc keyserver daemon
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <rpc/rpc.h>
-.PP
-.BI "int key_decryptsession(char *" remotename ", des_block *" deskey );
-.BI "int key_encryptsession(char *" remotename ", des_block *" deskey );
-.PP
-.BI "int key_gendes(des_block *" deskey );
-.PP
-.BI "int key_setsecret(char *" key );
-.B int key_secretkey_is_set(void);
-.fi
-.SH DESCRIPTION
-The functions here are used within the RPC's secure authentication
-mechanism (AUTH_DES).
-There should be no need for user programs to
-use this functions.
-.PP
-The function
-.BR key_decryptsession ()
-uses the (remote) server netname and takes the DES key
-for decrypting.
-It uses the public key of the server and the
-secret key associated with the effective UID of the calling process.
-.PP
-The function
-.BR key_encryptsession ()
-is the inverse of
-.BR key_decryptsession ().
-It encrypts the DES keys with the public key of the server and
-the secret key associated with the effective UID of the calling process.
-.PP
-The function
-.BR key_gendes ()
-is used to ask the keyserver for a secure conversation key.
-.PP
-The function
-.BR key_setsecret ()
-is used to set the key for the effective UID of the calling process.
-.PP
-The function
-.BR key_secretkey_is_set ()
-can be used to determine whether a key has been
-set for the effective UID of the calling process.
-.SH RETURN VALUE
-These functions return 1 on success and 0 on failure.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR key_decryptsession (),
-.BR key_encryptsession (),
-.BR key_gendes (),
-.BR key_setsecret (),
-.BR key_secretkey_is_set ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH NOTES
-Note that we talk about two types of encryption here.
-One is asymmetric using a public and secret key.
-The other is symmetric, the
-64-bit DES.
-.PP
-These routines were part of the Linux/Doors-project, abandoned by now.
-.SH SEE ALSO
-.BR crypt (3)
diff --git a/man3/killpg.3 b/man3/killpg.3
deleted file mode 100644
index 68c008c79..000000000
--- a/man3/killpg.3
+++ /dev/null
@@ -1,113 +0,0 @@
-.\" Copyright (c) 1980, 1991 Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)killpg.2 6.5 (Berkeley) 3/10/91
-.\"
-.\" Modified Fri Jul 23 21:55:01 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Tue Oct 22 08:11:14 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 2004-06-16 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on CAP_KILL
-.\" Modified 2004-06-21 by aeb
-.\"
-.TH killpg 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-killpg \- send signal to a process group
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.BI "int killpg(int " pgrp ", int " sig );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR killpg ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-.BR killpg ()
-sends the signal
-.I sig
-to the process group
-.IR pgrp .
-See
-.BR signal (7)
-for a list of signals.
-.PP
-If
-.I pgrp
-is 0,
-.BR killpg ()
-sends the signal to the calling process's process group.
-(POSIX says: if
-.I pgrp
-is less than or equal to 1, the behavior is undefined.)
-.PP
-For the permissions required to send a signal to another process, see
-.BR kill (2).
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I sig
-is not a valid signal number.
-.TP
-.B EPERM
-The process does not have permission to send the signal
-to any of the target processes.
-For the required permissions, see
-.BR kill (2).
-.TP
-.B ESRCH
-No process can be found in the process group specified by
-.IR pgrp .
-.TP
-.B ESRCH
-The process group was given as 0 but the sending process does not
-have a process group.
-.SH VERSIONS
-There are various differences between the permission checking
-in BSD-type systems and System\ V-type systems.
-See the POSIX rationale for
-.BR kill (3p).
-A difference not mentioned by POSIX concerns the return
-value
-.BR EPERM :
-BSD documents that no signal is sent and
-.B EPERM
-returned when the permission check failed for at least one target process,
-while POSIX documents
-.B EPERM
-only when the permission check failed for all target processes.
-.SS C library/kernel differences
-On Linux,
-.BR killpg ()
-is implemented as a library function that makes the call
-.IR "kill(\-pgrp,\ sig)" .
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.4BSD
-(first appeared in 4BSD).
-.SH SEE ALSO
-.BR getpgrp (2),
-.BR kill (2),
-.BR signal (2),
-.BR capabilities (7),
-.BR credentials (7)
diff --git a/man3/klogctl.3 b/man3/klogctl.3
deleted file mode 100644
index bbe6ab283..000000000
--- a/man3/klogctl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/syslog.2
diff --git a/man3/l64a.3 b/man3/l64a.3
deleted file mode 100644
index e54ce2724..000000000
--- a/man3/l64a.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/a64l.3
diff --git a/man3/labs.3 b/man3/labs.3
deleted file mode 100644
index 97db8d2b6..000000000
--- a/man3/labs.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/abs.3
diff --git a/man3/lckpwdf.3 b/man3/lckpwdf.3
deleted file mode 100644
index 142c5a5ca..000000000
--- a/man3/lckpwdf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getspnam.3
diff --git a/man3/lcong48.3 b/man3/lcong48.3
deleted file mode 100644
index 3133f7d62..000000000
--- a/man3/lcong48.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/drand48.3
diff --git a/man3/lcong48_r.3 b/man3/lcong48_r.3
deleted file mode 100644
index 81e9d8ef7..000000000
--- a/man3/lcong48_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/drand48_r.3
diff --git a/man3/ldexp.3 b/man3/ldexp.3
deleted file mode 100644
index 107ba5c7d..000000000
--- a/man3/ldexp.3
+++ /dev/null
@@ -1,134 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2004-10-31 by aeb
-.\"
-.TH ldexp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ldexp, ldexpf, ldexpl \- multiply floating-point number by integral power of 2
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double ldexp(double " x ", int " exp );
-.BI "float ldexpf(float " x ", int " exp );
-.BI "long double ldexpl(long double " x ", int " exp );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR ldexpf (),
-.BR ldexpl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the result of multiplying the floating-point number
-.I x
-by 2 raised to the power
-.IR exp .
-.SH RETURN VALUE
-On success, these functions return
-.IR "x * (2\[ha]exp)" .
-.PP
-If
-.I exp
-is zero, then
-.I x
-is returned.
-.PP
-If
-.I x
-is a NaN,
-a NaN is returned.
-.PP
-If
-.I x
-is positive infinity (negative infinity),
-positive infinity (negative infinity) is returned.
-.PP
-If the result underflows,
-a range error occurs,
-and zero is returned.
-.PP
-If the result overflows,
-a range error occurs,
-and the functions return
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-or
-.BR HUGE_VALL ,
-respectively, with a sign the same as
-.IR x .
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Range error, overflow
-.I errno
-is set to
-.BR ERANGE .
-An overflow floating-point exception
-.RB ( FE_OVERFLOW )
-is raised.
-.TP
-Range error, underflow
-.I errno
-is set to
-.BR ERANGE .
-An underflow floating-point exception
-.RB ( FE_UNDERFLOW )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ldexp (),
-.BR ldexpf (),
-.BR ldexpl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH SEE ALSO
-.BR frexp (3),
-.BR modf (3),
-.BR scalbln (3)
diff --git a/man3/ldexpf.3 b/man3/ldexpf.3
deleted file mode 100644
index 0e74a023e..000000000
--- a/man3/ldexpf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ldexp.3
diff --git a/man3/ldexpl.3 b/man3/ldexpl.3
deleted file mode 100644
index 0e74a023e..000000000
--- a/man3/ldexpl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ldexp.3
diff --git a/man3/ldiv.3 b/man3/ldiv.3
deleted file mode 100644
index 934824e3e..000000000
--- a/man3/ldiv.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/div.3
diff --git a/man3/le16toh.3 b/man3/le16toh.3
deleted file mode 100644
index 8b7bc7715..000000000
--- a/man3/le16toh.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/endian.3
diff --git a/man3/le32toh.3 b/man3/le32toh.3
deleted file mode 100644
index 8b7bc7715..000000000
--- a/man3/le32toh.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/endian.3
diff --git a/man3/le64toh.3 b/man3/le64toh.3
deleted file mode 100644
index 8b7bc7715..000000000
--- a/man3/le64toh.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/endian.3
diff --git a/man3/lfind.3 b/man3/lfind.3
deleted file mode 100644
index 24179b4d9..000000000
--- a/man3/lfind.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/lsearch.3
diff --git a/man3/lgamma.3 b/man3/lgamma.3
deleted file mode 100644
index ae1474236..000000000
--- a/man3/lgamma.3
+++ /dev/null
@@ -1,202 +0,0 @@
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" based on glibc infopages
-.\"
-.TH lgamma 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-lgamma, lgammaf, lgammal, lgamma_r, lgammaf_r, lgammal_r, signgam \-
-log gamma function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double lgamma(double " x );
-.BI "float lgammaf(float " x );
-.BI "long double lgammal(long double " x );
-.PP
-.BI "double lgamma_r(double " x ", int *" signp );
-.BI "float lgammaf_r(float " x ", int *" signp );
-.BI "long double lgammal_r(long double " x ", int *" signp );
-.PP
-.BI "extern int " signgam ;
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.nf
-.BR lgamma ():
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR lgammaf (),
-.BR lgammal ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR lgamma_r (),
-.BR lgammaf_r (),
-.BR lgammal_r ():
-.nf
- /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.IR signgam :
-.nf
- _XOPEN_SOURCE
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-For the definition of the Gamma function, see
-.BR tgamma (3).
-.PP
-The
-.BR lgamma (),
-.BR lgammaf (),
-and
-.BR lgammal ()
-functions return the natural logarithm of
-the absolute value of the Gamma function.
-The sign of the Gamma function is returned in the
-external integer
-.I signgam
-declared in
-.IR <math.h> .
-It is 1 when the Gamma function is positive or zero, \-1
-when it is negative.
-.PP
-Since using a constant location
-.I signgam
-is not thread-safe, the functions
-.BR lgamma_r (),
-.BR lgammaf_r (),
-and
-.BR lgammal_r ()
-have been introduced; they return the sign via the argument
-.IR signp .
-.SH RETURN VALUE
-On success, these functions return the natural logarithm of Gamma(x).
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is 1 or 2, +0 is returned.
-.PP
-If
-.I x
-is positive infinity or negative infinity,
-positive infinity is returned.
-.PP
-If
-.I x
-is a nonpositive integer,
-a pole error occurs,
-and the functions return
-.RB + HUGE_VAL ,
-.RB + HUGE_VALF ,
-or
-.RB + HUGE_VALL ,
-respectively.
-.PP
-If the result overflows,
-a range error occurs,
-.\" e.g., lgamma(DBL_MAX)
-and the functions return
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-or
-.BR HUGE_VALL ,
-respectively, with the correct mathematical sign.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Pole error: \fIx\fP is a nonpositive integer
-.I errno
-is set to
-.B ERANGE
-(but see BUGS).
-A divide-by-zero floating-point exception
-.RB ( FE_DIVBYZERO )
-is raised.
-.TP
-Range error: result overflow
-.I errno
-is set to
-.BR ERANGE .
-An overflow floating-point exception
-.RB ( FE_OVERFLOW )
-is raised.
-.\" glibc (as at 2.8) also supports an inexact
-.\" exception for various cases.
-.SH STANDARDS
-.TP
-.BR lgamma ()
-.TQ
-.BR lgammaf ()
-.TQ
-.BR lgammal ()
-C11, POSIX.1-2008.
-.TP
-.I signgam
-POSIX.1-2008.
-.TP
-.BR lgamma_r ()
-.TQ
-.BR lgammaf_r ()
-.TQ
-.BR lgammal_r ()
-None.
-.SH HISTORY
-.TP
-.BR lgamma ()
-.TQ
-.BR lgammaf ()
-.TQ
-.BR lgammal ()
-C99, POSIX.1-2001.
-.TP
-.I signgam
-POSIX.1-2001.
-.TP
-.BR lgamma_r ()
-.TQ
-.BR lgammaf_r ()
-.TQ
-.BR lgammal_r ()
-None.
-.SH BUGS
-In glibc 2.9 and earlier,
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6777
-when a pole error occurs,
-.I errno
-is set to
-.BR EDOM ;
-instead of the POSIX-mandated
-.BR ERANGE .
-Since glibc 2.10, glibc does the right thing.
-.SH SEE ALSO
-.BR tgamma (3)
diff --git a/man3/lgamma_r.3 b/man3/lgamma_r.3
deleted file mode 100644
index be0ed98e0..000000000
--- a/man3/lgamma_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/lgamma.3
diff --git a/man3/lgammaf.3 b/man3/lgammaf.3
deleted file mode 100644
index be0ed98e0..000000000
--- a/man3/lgammaf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/lgamma.3
diff --git a/man3/lgammaf_r.3 b/man3/lgammaf_r.3
deleted file mode 100644
index be0ed98e0..000000000
--- a/man3/lgammaf_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/lgamma.3
diff --git a/man3/lgammal.3 b/man3/lgammal.3
deleted file mode 100644
index be0ed98e0..000000000
--- a/man3/lgammal.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/lgamma.3
diff --git a/man3/lgammal_r.3 b/man3/lgammal_r.3
deleted file mode 100644
index be0ed98e0..000000000
--- a/man3/lgammal_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/lgamma.3
diff --git a/man3/lio_listio.3 b/man3/lio_listio.3
deleted file mode 100644
index 103e951fd..000000000
--- a/man3/lio_listio.3
+++ /dev/null
@@ -1,227 +0,0 @@
-'\" t
-.\" Copyright (C) 2010, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH lio_listio 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-lio_listio \- initiate a list of I/O requests
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B "#include <aio.h>"
-.PP
-.BI "int lio_listio(int " mode ,
-.BI " struct aiocb *restrict const " aiocb_list [restrict],
-.BI " int " nitems ", struct sigevent *restrict " sevp );
-.fi
-.SH DESCRIPTION
-The
-.BR lio_listio ()
-function initiates the list of I/O operations described by the array
-.IR aiocb_list .
-.PP
-The
-.I mode
-operation has one of the following values:
-.TP
-.B LIO_WAIT
-The call blocks until all operations are complete.
-The
-.I sevp
-argument is ignored.
-.TP
-.B LIO_NOWAIT
-The I/O operations are queued for processing and the call returns immediately.
-When all of the I/O operations complete, asynchronous notification occurs,
-as specified by the
-.I sevp
-argument; see
-.BR sigevent (7)
-for details.
-If
-.I sevp
-is NULL, no asynchronous notification occurs.
-.PP
-The
-.I aiocb_list
-argument is an array of pointers to
-.I aiocb
-structures that describe I/O operations.
-These operations are executed in an unspecified order.
-The
-.I nitems
-argument specifies the size of the array
-.IR aiocb_list .
-Null pointers in
-.I aiocb_list
-are ignored.
-.PP
-In each control block in
-.IR aiocb_list ,
-the
-.I aio_lio_opcode
-field specifies the I/O operation to be initiated, as follows:
-.TP
-.B LIO_READ
-Initiate a read operation.
-The operation is queued as for a call to
-.BR aio_read (3)
-specifying this control block.
-.TP
-.B LIO_WRITE
-Initiate a write operation.
-The operation is queued as for a call to
-.BR aio_write (3)
-specifying this control block.
-.TP
-.B LIO_NOP
-Ignore this control block.
-.PP
-The remaining fields in each control block have the same meanings as for
-.BR aio_read (3)
-and
-.BR aio_write (3).
-The
-.I aio_sigevent
-fields of each control block can be used to specify notifications
-for the individual I/O operations (see
-.BR sigevent (7)).
-.SH RETURN VALUE
-If
-.I mode
-is
-.BR LIO_NOWAIT ,
-.BR lio_listio ()
-returns 0 if all I/O operations are successfully queued.
-Otherwise, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.PP
-If
-.I mode
-is
-.BR LIO_WAIT ,
-.BR lio_listio ()
-returns 0 when all of the I/O operations have completed successfully.
-Otherwise, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.PP
-The return status from
-.BR lio_listio ()
-provides information only about the call itself,
-not about the individual I/O operations.
-One or more of the I/O operations may fail,
-but this does not prevent other operations completing.
-The status of individual I/O operations in
-.I aiocb_list
-can be determined using
-.BR aio_error (3).
-When an operation has completed,
-its return status can be obtained using
-.BR aio_return (3).
-Individual I/O operations can fail for the reasons described in
-.BR aio_read (3)
-and
-.BR aio_write (3).
-.SH ERRORS
-The
-.BR lio_listio ()
-function may fail for the following reasons:
-.TP
-.B EAGAIN
-Out of resources.
-.TP
-.B EAGAIN
-.\" Doesn't happen in glibc(?)
-The number of I/O operations specified by
-.I nitems
-would cause the limit
-.B AIO_MAX
-to be exceeded.
-.TP
-.B EINTR
-.I mode
-was
-.B LIO_WAIT
-and a signal
-was caught before all I/O operations completed; see
-.BR signal (7).
-(This may even be one of the signals used for
-asynchronous I/O completion notification.)
-.TP
-.B EINVAL
-.I mode
-is invalid, or
-.\" Doesn't happen in glibc(?)
-.I nitems
-exceeds the limit
-.BR AIO_LISTIO_MAX .
-.TP
-.B EIO
-One of more of the operations specified by
-.I aiocb_list
-failed.
-.\" e.g., ioa_reqprio or aio_lio_opcode was invalid
-The application can check the status of each operation using
-.BR aio_return (3).
-.PP
-If
-.BR lio_listio ()
-fails with the error
-.BR EAGAIN ,
-.BR EINTR ,
-or
-.BR EIO ,
-then some of the operations in
-.I aiocb_list
-may have been initiated.
-If
-.BR lio_listio ()
-fails for any other reason,
-then none of the I/O operations has been initiated.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR lio_listio ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001.
-.SH NOTES
-It is a good idea to zero out the control blocks before use.
-The control blocks must not be changed while the I/O operations
-are in progress.
-The buffer areas being read into or written from
-.\" or the control block of the operation
-must not be accessed during the operations or undefined results may occur.
-The memory areas involved must remain valid.
-.PP
-Simultaneous I/O operations specifying the same
-.I aiocb
-structure produce undefined results.
-.SH SEE ALSO
-.BR aio_cancel (3),
-.BR aio_error (3),
-.BR aio_fsync (3),
-.BR aio_return (3),
-.BR aio_suspend (3),
-.BR aio_write (3),
-.BR aio (7)
diff --git a/man3/list.3 b/man3/list.3
deleted file mode 100644
index dbc95bf14..000000000
--- a/man3/list.3
+++ /dev/null
@@ -1,308 +0,0 @@
-.\" Copyright (c) 1993
-.\" The Regents of the University of California. All rights reserved.
-.\" and Copyright (c) 2020 by Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: BSD-3-Clause
-.\"
-.\"
-.TH LIST 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-LIST_EMPTY,
-LIST_ENTRY,
-LIST_FIRST,
-LIST_FOREACH,
-.\"LIST_FOREACH_FROM,
-.\"LIST_FOREACH_SAFE,
-.\"LIST_FOREACH_FROM_SAFE,
-LIST_HEAD,
-LIST_HEAD_INITIALIZER,
-LIST_INIT,
-LIST_INSERT_AFTER,
-LIST_INSERT_BEFORE,
-LIST_INSERT_HEAD,
-LIST_NEXT,
-.\"LIST_PREV,
-LIST_REMOVE
-.\"LIST_SWAP
-\- implementation of a doubly linked list
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/queue.h>
-.PP
-.B LIST_ENTRY(TYPE);
-.PP
-.B LIST_HEAD(HEADNAME, TYPE);
-.BI "LIST_HEAD LIST_HEAD_INITIALIZER(LIST_HEAD " head );
-.BI "void LIST_INIT(LIST_HEAD *" head );
-.PP
-.BI "int LIST_EMPTY(LIST_HEAD *" head );
-.PP
-.BI "void LIST_INSERT_HEAD(LIST_HEAD *" head ,
-.BI " struct TYPE *" elm ", LIST_ENTRY " NAME );
-.BI "void LIST_INSERT_BEFORE(struct TYPE *" listelm ,
-.BI " struct TYPE *" elm ", LIST_ENTRY " NAME );
-.BI "void LIST_INSERT_AFTER(struct TYPE *" listelm ,
-.BI " struct TYPE *" elm ", LIST_ENTRY " NAME );
-.PP
-.BI "struct TYPE *LIST_FIRST(LIST_HEAD *" head );
-.\" .BI "struct TYPE *LIST_PREV(struct TYPE *" elm ", LIST_HEAD *" head ,
-.\" .BI " struct TYPE, LIST_ENTRY " NAME );
-.BI "struct TYPE *LIST_NEXT(struct TYPE *" elm ", LIST_ENTRY " NAME );
-.PP
-.BI "LIST_FOREACH(struct TYPE *" var ", LIST_HEAD *" head ", LIST_ENTRY " NAME );
-.\" .BI "LIST_FOREACH_FROM(struct TYPE *" var ", LIST_HEAD *" head ", LIST_ENTRY " NAME );
-.\" .PP
-.\" .BI "LIST_FOREACH_SAFE(struct TYPE *" var ", LIST_HEAD *" head ,
-.\" .BI " LIST_ENTRY " NAME ", struct TYPE *" temp_var );
-.\" .BI "LIST_FOREACH_FROM_SAFE(struct TYPE *" var ", LIST_HEAD *" head ,
-.\" .BI " LIST_ENTRY " NAME ", struct TYPE *" temp_var );
-.PP
-.BI "void LIST_REMOVE(struct TYPE *" elm ", LIST_ENTRY " NAME );
-.\" .PP
-.\" .BI "void LIST_SWAP(LIST_HEAD *" head1 ", LIST_HEAD *" head2 ,
-.\" .BI " struct TYPE, LIST_ENTRY " NAME );
-.fi
-.SH DESCRIPTION
-These macros define and operate on doubly linked lists.
-.PP
-In the macro definitions,
-.I TYPE
-is the name of a user-defined structure,
-that must contain a field of type
-.IR LIST_ENTRY ,
-named
-.IR NAME .
-The argument
-.I HEADNAME
-is the name of a user-defined structure
-that must be declared using the macro
-.BR LIST_HEAD ().
-.SS Creation
-A list is headed by a structure defined by the
-.BR LIST_HEAD ()
-macro.
-This structure contains a single pointer to the first element on the list.
-The elements are doubly linked
-so that an arbitrary element can be removed without traversing the list.
-New elements can be added to the list
-after an existing element,
-before an existing element,
-or at the head of the list.
-A
-.I LIST_HEAD
-structure is declared as follows:
-.PP
-.in +4
-.EX
-LIST_HEAD(HEADNAME, TYPE) head;
-.EE
-.in
-.PP
-where
-.I struct HEADNAME
-is the structure to be defined, and
-.I struct TYPE
-is the type of the elements to be linked into the list.
-A pointer to the head of the list can later be declared as:
-.PP
-.in +4
-.EX
-struct HEADNAME *headp;
-.EE
-.in
-.PP
-(The names
-.I head
-and
-.I headp
-are user selectable.)
-.PP
-.BR LIST_ENTRY ()
-declares a structure that connects the elements in the list.
-.PP
-.BR LIST_HEAD_INITIALIZER ()
-evaluates to an initializer for the list
-.IR head .
-.PP
-.BR LIST_INIT ()
-initializes the list referenced by
-.IR head .
-.PP
-.BR LIST_EMPTY ()
-evaluates to true if there are no elements in the list.
-.SS Insertion
-.BR LIST_INSERT_HEAD ()
-inserts the new element
-.I elm
-at the head of the list.
-.PP
-.BR LIST_INSERT_BEFORE ()
-inserts the new element
-.I elm
-before the element
-.IR listelm .
-.PP
-.BR LIST_INSERT_AFTER ()
-inserts the new element
-.I elm
-after the element
-.IR listelm .
-.SS Traversal
-.BR LIST_FIRST ()
-returns the first element in the list, or NULL if the list is empty.
-.\" .PP
-.\" .BR LIST_PREV ()
-.\" returns the previous element in the list, or NULL if this is the first.
-.\" List
-.\" .I head
-.\" must contain element
-.\" .IR elm .
-.PP
-.BR LIST_NEXT ()
-returns the next element in the list, or NULL if this is the last.
-.PP
-.BR LIST_FOREACH ()
-traverses the list referenced by
-.I head
-in the forward direction,
-assigning each element in turn to
-.IR var .
-.\" .PP
-.\" .BR LIST_FOREACH_FROM ()
-.\" behaves identically to
-.\" .BR LIST_FOREACH ()
-.\" when
-.\" .I var
-.\" is NULL, else it treats
-.\" .I var
-.\" as a previously found LIST element and begins the loop at
-.\" .I var
-.\" instead of the first element in the LIST referenced by
-.\" .IR head .
-.\" .PP
-.\" .BR LIST_FOREACH_SAFE ()
-.\" traverses the list referenced by
-.\" .I head
-.\" in the forward direction, assigning each element in turn to
-.\" .IR var .
-.\" However, unlike
-.\" .BR LIST_FOREACH ()
-.\" here it is permitted to both remove
-.\" .I var
-.\" as well as free it from within the loop safely without interfering with the
-.\" traversal.
-.\" .PP
-.\" .BR LIST_FOREACH_FROM_SAFE ()
-.\" behaves identically to
-.\" .BR LIST_FOREACH_SAFE ()
-.\" when
-.\" .I var
-.\" is NULL, else it treats
-.\" .I var
-.\" as a previously found LIST element and begins the loop at
-.\" .I var
-.\" instead of the first element in the LIST referenced by
-.\" .IR head .
-.SS Removal
-.BR LIST_REMOVE ()
-removes the element
-.I elm
-from the list.
-.\" .SS Other features
-.\" .BR LIST_SWAP ()
-.\" swaps the contents of
-.\" .I head1
-.\" and
-.\" .IR head2 .
-.SH RETURN VALUE
-.BR LIST_EMPTY ()
-returns nonzero if the list is empty,
-and zero if the list contains at least one entry.
-.PP
-.BR LIST_FIRST (),
-and
-.BR LIST_NEXT ()
-return a pointer to the first or next
-.I TYPE
-structure, respectively.
-.PP
-.BR LIST_HEAD_INITIALIZER ()
-returns an initializer that can be assigned to the list
-.IR head .
-.SH STANDARDS
-BSD.
-.SH HISTORY
-4.4BSD.
-.SH BUGS
-.BR LIST_FOREACH ()
-doesn't allow
-.I var
-to be removed or freed within the loop,
-as it would interfere with the traversal.
-.BR LIST_FOREACH_SAFE (),
-which is present on the BSDs but is not present in glibc,
-fixes this limitation by allowing
-.I var
-to safely be removed from the list and freed from within the loop
-without interfering with the traversal.
-.SH EXAMPLES
-.\" SRC BEGIN (list.c)
-.EX
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/queue.h>
-\&
-struct entry {
- int data;
- LIST_ENTRY(entry) entries; /* List */
-};
-\&
-LIST_HEAD(listhead, entry);
-\&
-int
-main(void)
-{
- struct entry *n1, *n2, *n3, *np;
- struct listhead head; /* List head */
- int i;
-\&
- LIST_INIT(&head); /* Initialize the list */
-\&
- n1 = malloc(sizeof(struct entry)); /* Insert at the head */
- LIST_INSERT_HEAD(&head, n1, entries);
-\&
- n2 = malloc(sizeof(struct entry)); /* Insert after */
- LIST_INSERT_AFTER(n1, n2, entries);
-\&
- n3 = malloc(sizeof(struct entry)); /* Insert before */
- LIST_INSERT_BEFORE(n2, n3, entries);
-\&
- i = 0; /* Forward traversal */
- LIST_FOREACH(np, &head, entries)
- np\->data = i++;
-\&
- LIST_REMOVE(n2, entries); /* Deletion */
- free(n2);
- /* Forward traversal */
- LIST_FOREACH(np, &head, entries)
- printf("%i\en", np\->data);
- /* List deletion */
- n1 = LIST_FIRST(&head);
- while (n1 != NULL) {
- n2 = LIST_NEXT(n1, entries);
- free(n1);
- n1 = n2;
- }
- LIST_INIT(&head);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR insque (3),
-.BR queue (7)
diff --git a/man3/llabs.3 b/man3/llabs.3
deleted file mode 100644
index 97db8d2b6..000000000
--- a/man3/llabs.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/abs.3
diff --git a/man3/lldiv.3 b/man3/lldiv.3
deleted file mode 100644
index 934824e3e..000000000
--- a/man3/lldiv.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/div.3
diff --git a/man3/llrint.3 b/man3/llrint.3
deleted file mode 100644
index d1c0af3b8..000000000
--- a/man3/llrint.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/lrint.3
diff --git a/man3/llrintf.3 b/man3/llrintf.3
deleted file mode 100644
index d1c0af3b8..000000000
--- a/man3/llrintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/lrint.3
diff --git a/man3/llrintl.3 b/man3/llrintl.3
deleted file mode 100644
index d1c0af3b8..000000000
--- a/man3/llrintl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/lrint.3
diff --git a/man3/llround.3 b/man3/llround.3
deleted file mode 100644
index bcc9b0fda..000000000
--- a/man3/llround.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/lround.3
diff --git a/man3/llroundf.3 b/man3/llroundf.3
deleted file mode 100644
index bcc9b0fda..000000000
--- a/man3/llroundf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/lround.3
diff --git a/man3/llroundl.3 b/man3/llroundl.3
deleted file mode 100644
index bcc9b0fda..000000000
--- a/man3/llroundl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/lround.3
diff --git a/man3/localeconv.3 b/man3/localeconv.3
deleted file mode 100644
index 911ff0399..000000000
--- a/man3/localeconv.3
+++ /dev/null
@@ -1,84 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 19:01:20 1993 by Rik Faith (faith@cs.unc.edu)
-.TH localeconv 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-localeconv \- get numeric formatting information
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <locale.h>
-.PP
-.B struct lconv *localeconv(void);
-.fi
-.SH DESCRIPTION
-The
-.BR localeconv ()
-function returns a pointer to a
-.I struct lconv
-for the current locale.
-This structure is shown in
-.BR locale (7),
-and contains all values associated with the locale categories
-.B LC_NUMERIC
-and
-.BR LC_MONETARY .
-Programs may also use the functions
-.BR printf (3)
-and
-.BR strfmon (3),
-which behave according to the actual locale in use.
-.SH RETURN VALUE
-The
-.BR localeconv ()
-function returns a pointer to a filled in
-.IR "struct lconv" .
-This structure may be (in glibc,
-.IR is )
-statically allocated, and may be overwritten by subsequent calls.
-According to POSIX,
-the caller should not modify the contents of this structure.
-The
-.BR localeconv ()
-function always succeeds.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR localeconv ()
-T} Thread safety T{
-MT-Unsafe race:localeconv locale
-T}
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11.
-.SH HISTORY
-C89.
-.SH BUGS
-The
-.BR printf (3)
-family of functions may or may not honor the current locale.
-.SH SEE ALSO
-.BR locale (1),
-.BR localedef (1),
-.BR isalpha (3),
-.BR nl_langinfo (3),
-.BR setlocale (3),
-.BR strcoll (3),
-.BR strftime (3),
-.BR locale (7)
diff --git a/man3/localtime.3 b/man3/localtime.3
deleted file mode 100644
index 84a3baa92..000000000
--- a/man3/localtime.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ctime.3
diff --git a/man3/localtime_r.3 b/man3/localtime_r.3
deleted file mode 100644
index 84a3baa92..000000000
--- a/man3/localtime_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ctime.3
diff --git a/man3/lockf.3 b/man3/lockf.3
deleted file mode 100644
index 83e8b04b6..000000000
--- a/man3/lockf.3
+++ /dev/null
@@ -1,181 +0,0 @@
-'\" t
-.\" Copyright 1997 Nicolás Lichtmaier <nick@debian.org>
-.\" Created Thu Aug 7 00:44:00 ART 1997
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Added section stuff, aeb, 2002-04-22.
-.\" Corrected include file, drepper, 2003-06-15.
-.\"
-.TH lockf 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-lockf \- apply, test or remove a POSIX lock on an open file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int lockf(int " fd ", int " cmd ", off_t " len );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR lockf ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-Apply, test, or remove a POSIX lock on a section of an open file.
-The file is specified by
-.IR fd ,
-a file descriptor open for writing, the action by
-.IR cmd ,
-and the section consists of byte positions
-.IR pos .. pos + len \-1
-if
-.I len
-is positive, and
-.IR pos \- len .. pos \-1
-if
-.I len
-is negative, where
-.I pos
-is the current file position, and if
-.I len
-is zero, the section extends from the current file position to
-infinity, encompassing the present and future end-of-file positions.
-In all cases, the section may extend past current end-of-file.
-.PP
-On Linux,
-.BR lockf ()
-is just an interface on top of
-.BR fcntl (2)
-locking.
-Many other systems implement
-.BR lockf ()
-in this way, but note that POSIX.1 leaves the relationship between
-.BR lockf ()
-and
-.BR fcntl (2)
-locks unspecified.
-A portable application should probably avoid mixing calls
-to these interfaces.
-.PP
-Valid operations are given below:
-.TP
-.B F_LOCK
-Set an exclusive lock on the specified section of the file.
-If (part of) this section is already locked, the call
-blocks until the previous lock is released.
-If this section overlaps an earlier locked section,
-both are merged.
-File locks are released as soon as the process holding the locks
-closes some file descriptor for the file.
-A child process does not inherit these locks.
-.TP
-.B F_TLOCK
-Same as
-.B F_LOCK
-but the call never blocks and returns an error instead if the file is
-already locked.
-.TP
-.B F_ULOCK
-Unlock the indicated section of the file.
-This may cause a locked section to be split into two locked sections.
-.TP
-.B F_TEST
-Test the lock: return 0 if the specified section
-is unlocked or locked by this process; return \-1, set
-.I errno
-to
-.B EAGAIN
-.RB ( EACCES
-on some other systems),
-if another process holds a lock.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.BR EACCES " or " EAGAIN
-The file is locked and
-.B F_TLOCK
-or
-.B F_TEST
-was specified, or the operation is prohibited because the file has
-been memory-mapped by another process.
-.TP
-.B EBADF
-.I fd
-is not an open file descriptor; or
-.I cmd
-is
-.B F_LOCK
-or
-.B F_TLOCK
-and
-.I fd
-is not a writable file descriptor.
-.TP
-.B EDEADLK
-The command was
-.B F_LOCK
-and this lock operation would cause a deadlock.
-.TP
-.B EINTR
-While waiting to acquire a lock, the call was interrupted by
-delivery of a signal caught by a handler; see
-.BR signal (7).
-.TP
-.B EINVAL
-An invalid operation was specified in
-.IR cmd .
-.TP
-.B ENOLCK
-Too many segment locks open, lock table is full.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR lockf ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4.
-.SH SEE ALSO
-.BR fcntl (2),
-.BR flock (2)
-.PP
-.I locks.txt
-and
-.I mandatory\-locking.txt
-in the Linux kernel source directory
-.I Documentation/filesystems
-(on older kernels, these files are directly under the
-.I Documentation
-directory, and
-.I mandatory\-locking.txt
-is called
-.IR mandatory.txt )
diff --git a/man3/log.3 b/man3/log.3
deleted file mode 100644
index b58a628db..000000000
--- a/man3/log.3
+++ /dev/null
@@ -1,143 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 1995-08-14 by Arnt Gulbrandsen <agulbra@troll.no>
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH log 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-log, logf, logl \- natural logarithmic function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double log(double " x );
-.BI "float logf(float " x );
-.BI "long double logl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR logf (),
-.BR logl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the natural logarithm of
-.IR x .
-.SH RETURN VALUE
-On success, these functions return the natural logarithm of
-.IR x .
-.PP
-If
-.I x
-is a NaN,
-a NaN is returned.
-.PP
-If
-.I x
-is 1, the result is +0.
-.PP
-If
-.I x
-is positive infinity,
-positive infinity is returned.
-.PP
-If
-.I x
-is zero,
-then a pole error occurs, and the functions return
-.RB \- HUGE_VAL ,
-.RB \- HUGE_VALF ,
-or
-.RB \- HUGE_VALL ,
-respectively.
-.PP
-If
-.I x
-is negative (including negative infinity), then
-a domain error occurs, and a NaN (not a number) is returned.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is negative
-.I errno
-is set to
-.BR EDOM .
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.TP
-Pole error: \fIx\fP is zero
-.I errno
-is set to
-.BR ERANGE .
-A divide-by-zero floating-point exception
-.RB ( FE_DIVBYZERO )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR log (),
-.BR logf (),
-.BR logl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH BUGS
-In glibc 2.5 and earlier,
-taking the
-.BR log ()
-of a NaN produces a bogus invalid floating-point
-.RB ( FE_INVALID )
-exception.
-.SH SEE ALSO
-.BR cbrt (3),
-.BR clog (3),
-.BR log10 (3),
-.BR log1p (3),
-.BR log2 (3),
-.BR sqrt (3)
diff --git a/man3/log10.3 b/man3/log10.3
deleted file mode 100644
index 1aa5b8dfa..000000000
--- a/man3/log10.3
+++ /dev/null
@@ -1,97 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 1995-08-14 by Arnt Gulbrandsen <agulbra@troll.no>
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH log10 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-log10, log10f, log10l \- base-10 logarithmic function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double log10(double " x );
-.BI "float log10f(float " x );
-.BI "long double log10l(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR log10f (),
-.BR log10l ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the base 10 logarithm of
-.IR x .
-.SH RETURN VALUE
-On success, these functions return the base 10 logarithm of
-.IR x .
-.PP
-For special cases, including where
-.I x
-is 0, 1, negative, infinity, or NaN, see
-.BR log (3).
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-For a discussion of the errors that can occur for these functions, see
-.BR log (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR log10 (),
-.BR log10f (),
-.BR log10l ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH SEE ALSO
-.BR cbrt (3),
-.BR clog10 (3),
-.BR exp10 (3),
-.BR log (3),
-.BR log2 (3),
-.BR sqrt (3)
diff --git a/man3/log10f.3 b/man3/log10f.3
deleted file mode 100644
index dfa5796ed..000000000
--- a/man3/log10f.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/log10.3
diff --git a/man3/log10l.3 b/man3/log10l.3
deleted file mode 100644
index dfa5796ed..000000000
--- a/man3/log10l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/log10.3
diff --git a/man3/log1p.3 b/man3/log1p.3
deleted file mode 100644
index 3f15633bc..000000000
--- a/man3/log1p.3
+++ /dev/null
@@ -1,153 +0,0 @@
-'\" t
-.\" Copyright 1995 Jim Van Zandt <jrv@vanzandt.mv.com>
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.TH log1p 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-log1p, log1pf, log1pl \- logarithm of 1 plus argument
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double log1p(double " x );
-.BI "float log1pf(float " x );
-.BI "long double log1pl(long double " x );
-.PP
-.fi
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.nf
-.BR log1p ():
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR log1pf (),
-.BR log1pl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return a value equivalent to
-.PP
-.nf
- log (1 + \fIx\fP)
-.fi
-.PP
-The result is computed in a way
-that is accurate even if the value of
-.I x
-is near zero.
-.SH RETURN VALUE
-On success, these functions return the natural logarithm of
-.IR "(1\ +\ x)" .
-.PP
-If
-.I x
-is a NaN,
-a NaN is returned.
-.PP
-If
-.I x
-is positive infinity, positive infinity is returned.
-.PP
-If
-.I x
-is \-1, a pole error occurs,
-and the functions return
-.RB \- HUGE_VAL ,
-.RB \- HUGE_VALF ,
-or
-.RB \- HUGE_VALL ,
-respectively.
-.PP
-If
-.I x
-is less than \-1 (including negative infinity),
-a domain error occurs,
-and a NaN (not a number) is returned.
-.\" POSIX.1 specifies a possible range error if x is subnormal
-.\" glibc 2.8 doesn't do this
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is less than \-1
-.I errno
-is set to
-.B EDOM
-(but see BUGS).
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.TP
-Pole error: \fIx\fP is \-1
-.I errno
-is set to
-.B ERANGE
-(but see BUGS).
-A divide-by-zero floating-point exception
-.RB ( FE_DIVBYZERO )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR log1p (),
-.BR log1pf (),
-.BR log1pl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.\" BSD
-.SH BUGS
-Before glibc 2.22, the glibc implementation did not set
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6792
-.I errno
-to
-.B EDOM
-when a domain error occurred.
-.PP
-Before glibc 2.22, the glibc implementation did not set
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6792
-.I errno
-to
-.B ERANGE
-when a range error occurred.
-.SH SEE ALSO
-.BR exp (3),
-.BR expm1 (3),
-.BR log (3)
diff --git a/man3/log1pf.3 b/man3/log1pf.3
deleted file mode 100644
index a4dec80e7..000000000
--- a/man3/log1pf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/log1p.3
diff --git a/man3/log1pl.3 b/man3/log1pl.3
deleted file mode 100644
index a4dec80e7..000000000
--- a/man3/log1pl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/log1p.3
diff --git a/man3/log2.3 b/man3/log2.3
deleted file mode 100644
index b9360853c..000000000
--- a/man3/log2.3
+++ /dev/null
@@ -1,96 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 1995-08-14 by Arnt Gulbrandsen <agulbra@troll.no>
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH log2 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-log2, log2f, log2l \- base-2 logarithmic function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double log2(double " x );
-.BI "float log2f(float " x );
-.BI "long double log2l(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR log2 (),
-.BR log2f (),
-.BR log2l ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-These functions return the base 2 logarithm of
-.IR x .
-.SH RETURN VALUE
-On success, these functions return the base 2 logarithm of
-.IR x .
-.PP
-For special cases, including where
-.I x
-is 0, 1, negative, infinity, or NaN, see
-.BR log (3).
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-For a discussion of the errors that can occur for these functions, see
-.BR log (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR log2 (),
-.BR log2f (),
-.BR log2l ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR cbrt (3),
-.BR clog2 (3),
-.BR log (3),
-.BR log10 (3),
-.BR sqrt (3)
diff --git a/man3/log2f.3 b/man3/log2f.3
deleted file mode 100644
index 23aeb4ad0..000000000
--- a/man3/log2f.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/log2.3
diff --git a/man3/log2l.3 b/man3/log2l.3
deleted file mode 100644
index 23aeb4ad0..000000000
--- a/man3/log2l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/log2.3
diff --git a/man3/logb.3 b/man3/logb.3
deleted file mode 100644
index 009ca5a78..000000000
--- a/man3/logb.3
+++ /dev/null
@@ -1,144 +0,0 @@
-'\" t
-.\" Copyright 2004 Andries Brouwer <aeb@cwi.nl>.
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Inspired by a page by Walter Harms created 2002-08-10
-.\"
-.TH logb 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-logb, logbf, logbl \- get exponent of a floating-point value
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double logb(double " x );
-.BI "float logbf(float " x );
-.BI "long double logbl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR logb ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR logbf (),
-.BR logbl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions extract the exponent from the
-internal floating-point representation of
-.I x
-and return it as a floating-point value.
-The integer constant
-.BR FLT_RADIX ,
-defined in
-.IR <float.h> ,
-indicates the radix used for the system's floating-point representation.
-If
-.B FLT_RADIX
-is 2,
-.BI logb( x )
-is equal to
-.BI floor(log2( x ))\fR,
-except that it is probably faster.
-.PP
-If
-.I x
-is subnormal,
-.BR logb ()
-returns the exponent
-.I x
-would have if it were normalized.
-.SH RETURN VALUE
-On success, these functions return the exponent of
-.IR x .
-.PP
-If
-.I x
-is a NaN,
-a NaN is returned.
-.PP
-If
-.I x
-is zero, then a pole error occurs, and the functions return
-.RB \- HUGE_VAL ,
-.RB \- HUGE_VALF ,
-or
-.RB \- HUGE_VALL ,
-respectively.
-.PP
-If
-.I x
-is negative infinity or positive infinity, then
-positive infinity is returned.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Pole error: \fIx\fP is 0
-.\" .I errno
-.\" is set to
-.\" .BR ERANGE .
-A divide-by-zero floating-point exception
-.RB ( FE_DIVBYZERO )
-is raised.
-.PP
-These functions do not set
-.IR errno .
-.\" FIXME . Is it intentional that these functions do not set errno?
-.\" log(), log2(), log10() do set errno
-.\" Bug raised: https://www.sourceware.org/bugzilla/show_bug.cgi?id=6793
-.\"
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR logb (),
-.BR logbf (),
-.BR logbl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.TP
-.BR logb ()
-4.3BSD
-(see IEEE.3 in the 4.3BSD manual).
-.SH SEE ALSO
-.BR ilogb (3),
-.BR log (3)
diff --git a/man3/logbf.3 b/man3/logbf.3
deleted file mode 100644
index 4a70936a4..000000000
--- a/man3/logbf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/logb.3
diff --git a/man3/logbl.3 b/man3/logbl.3
deleted file mode 100644
index 4a70936a4..000000000
--- a/man3/logbl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/logb.3
diff --git a/man3/logf.3 b/man3/logf.3
deleted file mode 100644
index 7807e7642..000000000
--- a/man3/logf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/log.3
diff --git a/man3/login.3 b/man3/login.3
deleted file mode 100644
index 099a9a03d..000000000
--- a/man3/login.3
+++ /dev/null
@@ -1,151 +0,0 @@
-'\" t
-.\" Derived from text written by Martin Schulze (or taken from glibc.info)
-.\" and text written by Paul Thompson - both copyright 2002.
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH login 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-login, logout \- write utmp and wtmp entries
-.SH LIBRARY
-System utilities library
-.RI ( libutil ", " \-lutil )
-.SH SYNOPSIS
-.nf
-.B #include <utmp.h>
-.PP
-.BI "void login(const struct utmp *" ut );
-.BI "int logout(const char *" ut_line );
-.fi
-.SH DESCRIPTION
-The utmp file records who is currently using the system.
-The wtmp file records all logins and logouts.
-See
-.BR utmp (5).
-.PP
-The function
-.BR login ()
-takes the supplied
-.IR "struct utmp" ,
-.IR ut ,
-and writes it to both the utmp and the wtmp file.
-.PP
-The function
-.BR logout ()
-clears the entry in the utmp file again.
-.SS GNU details
-More precisely,
-.BR login ()
-takes the argument
-.I ut
-struct, fills the field
-.I ut\->ut_type
-(if there is such a field) with the value
-.BR USER_PROCESS ,
-and fills the field
-.I ut\->ut_pid
-(if there is such a field) with the process ID of the calling process.
-Then it tries to fill the field
-.IR ut\->ut_line .
-It takes the first of
-.IR stdin ,
-.IR stdout ,
-.I stderr
-that is a terminal, and
-stores the corresponding pathname minus a possible leading
-.I /dev/
-into this field, and then writes the struct to the utmp file.
-On the other hand,
-if no terminal name was found, this field is filled with "???"
-and the struct is not written to the utmp file.
-After this, the struct is written to the wtmp file.
-.PP
-The
-.BR logout ()
-function searches the utmp file for an entry matching the
-.I ut_line
-argument.
-If a record is found, it is updated by zeroing out the
-.I ut_name
-and
-.I ut_host
-fields, updating the
-.I ut_tv
-timestamp field and setting
-.I ut_type
-(if there is such a field) to
-.BR DEAD_PROCESS .
-.SH RETURN VALUE
-The
-.BR logout ()
-function returns 1 if the entry was successfully written to the
-database, or 0 if an error occurred.
-.SH FILES
-.TP
-.I /var/run/utmp
-user accounting database, configured through
-.B _PATH_UTMP
-in
-.I <paths.h>
-.TP
-.I /var/log/wtmp
-user accounting log file, configured through
-.B _PATH_WTMP
-in
-.I <paths.h>
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR login (),
-.BR logout ()
-T} Thread safety T{
-MT-Unsafe race:utent
-sig:ALRM timer
-T}
-.TE
-.hy
-.ad
-.sp 1
-In the above table,
-.I utent
-in
-.I race:utent
-signifies that if any of the functions
-.BR setutent (3),
-.BR getutent (3),
-or
-.BR endutent (3)
-are used in parallel in different threads of a program,
-then data races could occur.
-.BR login ()
-and
-.BR logout ()
-calls those functions,
-so we use race:utent to remind users.
-.SH VERSIONS
-The member
-.I ut_user
-of
-.I struct utmp
-is called
-.I ut_name
-in BSD.
-Therefore,
-.I ut_name
-is defined as an alias for
-.I ut_user
-in
-.IR <utmp.h> .
-.SH STANDARDS
-BSD.
-.SH SEE ALSO
-.BR getutent (3),
-.BR utmp (5)
diff --git a/man3/login_tty.3 b/man3/login_tty.3
deleted file mode 100644
index fb4952d52..000000000
--- a/man3/login_tty.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/openpty.3
diff --git a/man3/logl.3 b/man3/logl.3
deleted file mode 100644
index 7807e7642..000000000
--- a/man3/logl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/log.3
diff --git a/man3/logout.3 b/man3/logout.3
deleted file mode 100644
index a1ee67257..000000000
--- a/man3/logout.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/login.3
diff --git a/man3/logwtmp.3 b/man3/logwtmp.3
deleted file mode 100644
index 0dc4dea39..000000000
--- a/man3/logwtmp.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/updwtmp.3
diff --git a/man3/longjmp.3 b/man3/longjmp.3
deleted file mode 100644
index 7cf497fc3..000000000
--- a/man3/longjmp.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/setjmp.3
diff --git a/man3/lrand48.3 b/man3/lrand48.3
deleted file mode 100644
index 3133f7d62..000000000
--- a/man3/lrand48.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/drand48.3
diff --git a/man3/lrand48_r.3 b/man3/lrand48_r.3
deleted file mode 100644
index 81e9d8ef7..000000000
--- a/man3/lrand48_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/drand48_r.3
diff --git a/man3/lrint.3 b/man3/lrint.3
deleted file mode 100644
index a013b525b..000000000
--- a/man3/lrint.3
+++ /dev/null
@@ -1,113 +0,0 @@
-'\" t
-.\" Copyright 2001 Andries Brouwer <aeb@cwi.nl>.
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH lrint 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-lrint, lrintf, lrintl, llrint, llrintf, llrintl \- round to nearest integer
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "long lrint(double " x );
-.BI "long lrintf(float " x );
-.BI "long lrintl(long double " x );
-.PP
-.BI "long long llrint(double " x );
-.BI "long long llrintf(float " x );
-.BI "long long llrintl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-All functions shown above:
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-These functions round their argument to the nearest integer value,
-using the current rounding direction (see
-.BR fesetround (3)).
-.PP
-Note that unlike the
-.BR rint (3)
-family of functions,
-the return type of these functions differs from
-that of their arguments.
-.SH RETURN VALUE
-These functions return the rounded integer value.
-.PP
-If
-.I x
-is a NaN or an infinity,
-or the rounded value is too large to be stored in a
-.I long
-.RI ( "long long"
-in the case of the
-.B ll*
-functions),
-then a domain error occurs, and the return value is unspecified.
-.\" The return value is -(LONG_MAX - 1) or -(LLONG_MAX -1)
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is a NaN or infinite, or the rounded value is too large
-.\" .I errno
-.\" is set to
-.\" .BR EDOM .
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.PP
-These functions do not set
-.IR errno .
-.\" FIXME . Is it intentional that these functions do not set errno?
-.\" Bug raised: https://www.sourceware.org/bugzilla/show_bug.cgi?id=6798
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR lrint (),
-.BR lrintf (),
-.BR lrintl (),
-.BR llrint (),
-.BR llrintf (),
-.BR llrintl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR ceil (3),
-.BR floor (3),
-.BR lround (3),
-.BR nearbyint (3),
-.BR rint (3),
-.BR round (3)
diff --git a/man3/lrintf.3 b/man3/lrintf.3
deleted file mode 100644
index d1c0af3b8..000000000
--- a/man3/lrintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/lrint.3
diff --git a/man3/lrintl.3 b/man3/lrintl.3
deleted file mode 100644
index d1c0af3b8..000000000
--- a/man3/lrintl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/lrint.3
diff --git a/man3/lround.3 b/man3/lround.3
deleted file mode 100644
index 5bb659d49..000000000
--- a/man3/lround.3
+++ /dev/null
@@ -1,116 +0,0 @@
-'\" t
-.\" Copyright 2001 Andries Brouwer <aeb@cwi.nl>.
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH lround 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-lround, lroundf, lroundl, llround, llroundf, llroundl \- round to
-nearest integer
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "long lround(double " x );
-.BI "long lroundf(float " x );
-.BI "long lroundl(long double " x );
-.PP
-.BI "long long llround(double " x );
-.BI "long long llroundf(float " x );
-.BI "long long llroundl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-All functions shown above:
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-These functions round their argument to the nearest integer value,
-rounding halfway cases away from zero,
-regardless of the current rounding direction (see
-.BR fenv (3)).
-.PP
-Note that unlike the
-.BR round (3)
-and
-.BR ceil (3),
-functions, the return type of these functions differs from
-that of their arguments.
-.SH RETURN VALUE
-These functions return the rounded integer value.
-.PP
-If
-.I x
-is a NaN or an infinity,
-or the rounded value is too large to be stored in a
-.I long
-.RI ( "long long"
-in the case of the
-.B ll*
-functions),
-then a domain error occurs, and the return value is unspecified.
-.\" The return value is -(LONG_MAX - 1) or -(LLONG_MAX -1)
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is a NaN or infinite, or the rounded value is too large
-.\" .I errno
-.\" is set to
-.\" .BR EDOM .
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.PP
-These functions do not set
-.IR errno .
-.\" FIXME . Is it intentional that these functions do not set errno?
-.\" Bug raised: https://www.sourceware.org/bugzilla/show_bug.cgi?id=6797
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR lround (),
-.BR lroundf (),
-.BR lroundl (),
-.BR llround (),
-.BR llroundf (),
-.BR llroundl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR ceil (3),
-.BR floor (3),
-.BR lrint (3),
-.BR nearbyint (3),
-.BR rint (3),
-.BR round (3)
diff --git a/man3/lroundf.3 b/man3/lroundf.3
deleted file mode 100644
index bcc9b0fda..000000000
--- a/man3/lroundf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/lround.3
diff --git a/man3/lroundl.3 b/man3/lroundl.3
deleted file mode 100644
index bcc9b0fda..000000000
--- a/man3/lroundl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/lround.3
diff --git a/man3/lsearch.3 b/man3/lsearch.3
deleted file mode 100644
index 855b1a6ac..000000000
--- a/man3/lsearch.3
+++ /dev/null
@@ -1,97 +0,0 @@
-'\" t
-.\" Copyright 1995 Jim Van Zandt <jrv@vanzandt.mv.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Corrected prototype and include, aeb, 990927
-.TH lsearch 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-lfind, lsearch \- linear search of an array
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <search.h>
-.PP
-.BI "void *lfind(const void " key [. size "], \
-const void " base [. size " * ." nmemb ],
-.BI " size_t *" nmemb ", size_t " size ,
-.BI " int(*" compar ")(const void [." size "], \
-const void [." size ]));
-.BI "void *lsearch(const void " key [. size "], \
-void " base [. size " * ." nmemb ],
-.BI " size_t *" nmemb ", size_t " size ,
-.BI " int(*" compar ")(const void [." size "], \
-const void [." size ]));
-.fi
-.SH DESCRIPTION
-.BR lfind ()
-and
-.BR lsearch ()
-perform a linear search for
-.I key
-in the array
-.I base
-which has
-.I *nmemb
-elements of
-.I size
-bytes each.
-The comparison function referenced by
-.I compar
-is expected to have two arguments which point to the
-.I key
-object and to an array member, in that order, and which
-returns zero if the
-.I key
-object matches the array member, and
-nonzero otherwise.
-.PP
-If
-.BR lsearch ()
-does not find a matching element, then the
-.I key
-object is inserted at the end of the table, and
-.I *nmemb
-is
-incremented.
-In particular, one should know that a matching element
-exists, or that more room is available.
-.SH RETURN VALUE
-.BR lfind ()
-returns a pointer to a matching member of the array, or
-NULL if no match is found.
-.BR lsearch ()
-returns a pointer to
-a matching member of the array, or to the newly added member if no
-match is found.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR lfind (),
-.BR lsearch ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-libc-4.6.27.
-.SH BUGS
-The naming is unfortunate.
-.SH SEE ALSO
-.BR bsearch (3),
-.BR hsearch (3),
-.BR tsearch (3)
diff --git a/man3/lseek64.3 b/man3/lseek64.3
deleted file mode 100644
index 99f080fa1..000000000
--- a/man3/lseek64.3
+++ /dev/null
@@ -1,209 +0,0 @@
-'\" t
-.\" Copyright 2004 Andries Brouwer <aeb@cwi.nl>.
-.\" and Copyright (c) 2020 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH lseek64 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-lseek64 \- reposition 64-bit read/write file offset
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _LARGEFILE64_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <sys/types.h>
-.B #include <unistd.h>
-.PP
-.BI "off64_t lseek64(int " fd ", off64_t " offset ", int " whence );
-.fi
-.SH DESCRIPTION
-The
-.BR lseek ()
-family of functions reposition the offset of the open file associated
-with the file descriptor
-.I fd
-to
-.I offset
-bytes relative to the start, current position, or end of the file,
-when
-.I whence
-has the value
-.BR SEEK_SET ,
-.BR SEEK_CUR ,
-or
-.BR SEEK_END ,
-respectively.
-.PP
-For more details, return value, and errors, see
-.BR lseek (2).
-.PP
-Four interfaces are available:
-.BR lseek (),
-.BR lseek64 (),
-.BR llseek (),
-and
-.BR _llseek ().
-.\"
-.\" For some background details, see:
-.\" https://lore.kernel.org/linux-man/CAKgNAkhNSWR3uYhYYaxx74fZfJ3JrpfAAPVrK0AFk_cAOUsbDg@mail.gmail.com/
-.\"
-.SS lseek()
-Prototype:
-.PP
-.in +4n
-.EX
-.BI "off_t lseek(int " fd ", off_t " offset ", int " whence );
-.EE
-.in
-.PP
-The C library's
-.BR lseek ()
-wrapper function uses the type
-.IR off_t .
-This is a 32-bit signed type on 32-bit architectures, unless one
-compiles with
-.PP
-.in +4n
-.EX
-#define _FILE_OFFSET_BITS 64
-.EE
-.in
-.PP
-in which case it is a 64-bit signed type.
-.SS lseek64()
-Prototype:
-.PP
-.in +4n
-.EX
-.BI "off64_t lseek64(int " fd ", off64_t " offset ", int " whence );
-.EE
-.in
-.PP
-The
-.BR lseek64 ()
-library function uses a 64-bit type even when
-.I off_t
-is a 32-bit type.
-Its prototype (and the type
-.IR off64_t )
-is available only when one compiles with
-.PP
-.in +4n
-.EX
-#define _LARGEFILE64_SOURCE
-.EE
-.in
-.PP
-The function
-.BR lseek64 ()
-.\" in glibc 2.0.94, not in glibc 2.0.6
-is available since glibc 2.1.
-.\"
-.SS llseek()
-Prototype:
-.PP
-.in +4n
-.EX
-.BI "loff_t llseek(int " fd ", loff_t " offset ", int " whence );
-.EE
-.in
-.PP
-The type
-.I loff_t
-is a 64-bit signed type.
-The
-.BR llseek ()
-library function is available in glibc and works without special defines.
-However, the glibc headers do not provide a prototype.
-Users should add
-the above prototype, or something equivalent, to their own source.
-When users complained about data loss caused by a miscompilation of
-.BR e2fsck (8),
-glibc 2.1.3 added the link-time warning
-.PP
-.in +4n
-"the \`llseek\' function may be dangerous; use \`lseek64\' instead."
-.in
-.PP
-This makes this function unusable if one desires a warning-free
-compilation.
-.PP
-Since glibc 2.28,
-.\" glibc commit 5c5c0dd747070db624c8e2c43691cec854f114ef
-this function symbol is no longer available to newly linked applications.
-.\"
-.SS _llseek()
-On 32-bit architectures,
-this is the system call that is used (by the C library wrapper functions)
-to implement all of the above functions.
-The prototype is:
-.PP
-.in +4n
-.EX
-.BI "int _llseek(int " fd ", off_t " offset_hi ", off_t " offset_lo ,
-.BI " loff_t *" result ", int " whence );
-.EE
-.in
-.PP
-For more details, see
-.BR llseek (2).
-.PP
-64-bit systems don't need an
-.BR _llseek ()
-system call.
-Instead, they have an
-.BR lseek (2)
-system call that supports 64-bit file offsets.
-.\" In arch/x86/entry/syscalls/syscall_32.tbl,
-.\" we see the following line:
-.\"
-.\" 140 i386 _llseek sys_llseek
-.\"
-.\" This is essentially telling us that 'sys_llseek' (the name generated
-.\" by SYSCALL_DEFINE5(llseek...)) is exposed to user-space as system call
-.\" number 140, and that system call number will (IIUC) be exposed in
-.\" autogenerated headers with the name "__NR__llseek" (i.e., "_llseek").
-.\" The "i386" is telling us that this happens in i386 (32-bit Intel).
-.\" There is nothing equivalent on x86-64, because 64 bit systems don't
-.\" need an _llseek system call.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR lseek64 ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH NOTES
-.BR lseek64 ()
-is one of the functions that was specified in the Large File Summit (LFS)
-specification that was completed in 1996.
-The purpose of the specification was to provide transitional support
-that allowed applications on 32-bit systems to access
-files whose size exceeds that which can be represented with a 32-bit
-.I off_t
-type.
-As noted above, this symbol is exposed by header files if the
-.B _LARGEFILE64_SOURCE
-feature test macro is defined.
-ALternatively, on a 32-bit system, the symbol
-.I lseek
-is aliased to
-.I lseek64
-if the macro
-.B _FILE_OFFSET_BITS
-is defined with the value 64.
-.SH SEE ALSO
-.BR llseek (2),
-.BR lseek (2)
diff --git a/man3/lutimes.3 b/man3/lutimes.3
deleted file mode 100644
index 31459803f..000000000
--- a/man3/lutimes.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/futimes.3
diff --git a/man3/major.3 b/man3/major.3
deleted file mode 100644
index eabbdd013..000000000
--- a/man3/major.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/makedev.3
diff --git a/man3/makecontext.3 b/man3/makecontext.3
deleted file mode 100644
index 89e073ac9..000000000
--- a/man3/makecontext.3
+++ /dev/null
@@ -1,233 +0,0 @@
-'\" t
-.\" Copyright (C) 2001 Andries Brouwer (aeb@cwi.nl)
-.\" and Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2006-08-02, mtk, Added example program
-.\"
-.TH makecontext 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-makecontext, swapcontext \- manipulate user context
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <ucontext.h>
-.PP
-.BI "void makecontext(ucontext_t *" ucp ", void (*" func ")(), int " argc \
-", ...);"
-.BI "int swapcontext(ucontext_t *restrict " oucp ,
-.BI " const ucontext_t *restrict " ucp );
-.fi
-.SH DESCRIPTION
-In a System V-like environment, one has the type
-.I ucontext_t
-(defined in
-.I <ucontext.h>
-and described in
-.BR getcontext (3))
-and the four functions
-.BR getcontext (3),
-.BR setcontext (3),
-.BR makecontext (),
-and
-.BR swapcontext ()
-that allow user-level context switching
-between multiple threads of control within a process.
-.PP
-The
-.BR makecontext ()
-function modifies the context pointed to
-by \fIucp\fP (which was obtained from a call to
-.BR getcontext (3)).
-Before invoking
-.BR makecontext (),
-the caller must allocate a new stack
-for this context and assign its address to \fIucp\->uc_stack\fP,
-and define a successor context and
-assign its address to \fIucp\->uc_link\fP.
-.PP
-When this context is later activated (using
-.BR setcontext (3)
-or
-.BR swapcontext ())
-the function \fIfunc\fP is called,
-and passed the series of integer
-.RI ( int )
-arguments that follow
-.IR argc ;
-the caller must specify the number of these arguments in
-.IR argc .
-When this function returns, the successor context is activated.
-If the successor context pointer is NULL, the thread exits.
-.PP
-The
-.BR swapcontext ()
-function saves the current context in
-the structure pointed to by \fIoucp\fP, and then activates the
-context pointed to by \fIucp\fP.
-.SH RETURN VALUE
-When successful,
-.BR swapcontext ()
-does not return.
-(But we may return later, in case \fIoucp\fP is
-activated, in which case it looks like
-.BR swapcontext ()
-returns 0.)
-On error,
-.BR swapcontext ()
-returns \-1 and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B ENOMEM
-Insufficient stack space left.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR makecontext ()
-T} Thread safety T{
-MT-Safe race:ucp
-T}
-T{
-.BR swapcontext ()
-T} Thread safety T{
-MT-Safe race:oucp race:ucp
-T}
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-glibc 2.1.
-SUSv2, POSIX.1-2001.
-Removed in POSIX.1-2008,
-citing portability issues, and
-recommending that applications be rewritten to use POSIX threads instead.
-.SH NOTES
-The interpretation of \fIucp\->uc_stack\fP is just as in
-.BR sigaltstack (2),
-namely, this struct contains the start and length of a memory area
-to be used as the stack, regardless of the direction of growth of
-the stack.
-Thus, it is not necessary for the user program to
-worry about this direction.
-.PP
-On architectures where
-.I int
-and pointer types are the same size
-(e.g., x86-32, where both types are 32 bits),
-you may be able to get away with passing pointers as arguments to
-.BR makecontext ()
-following
-.IR argc .
-However, doing this is not guaranteed to be portable,
-is undefined according to the standards,
-and won't work on architectures where pointers are larger than
-.IR int s.
-Nevertheless, starting with glibc 2.8, glibc makes some changes to
-.BR makecontext (),
-to permit this on some 64-bit architectures (e.g., x86-64).
-.SH EXAMPLES
-The example program below demonstrates the use of
-.BR getcontext (3),
-.BR makecontext (),
-and
-.BR swapcontext ().
-Running the program produces the following output:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out"
-main: swapcontext(&uctx_main, &uctx_func2)
-func2: started
-func2: swapcontext(&uctx_func2, &uctx_func1)
-func1: started
-func1: swapcontext(&uctx_func1, &uctx_func2)
-func2: returning
-func1: returning
-main: exiting
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (makecontext.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <ucontext.h>
-\&
-static ucontext_t uctx_main, uctx_func1, uctx_func2;
-\&
-#define handle_error(msg) \e
- do { perror(msg); exit(EXIT_FAILURE); } while (0)
-\&
-static void
-func1(void)
-{
- printf("%s: started\en", __func__);
- printf("%s: swapcontext(&uctx_func1, &uctx_func2)\en", __func__);
- if (swapcontext(&uctx_func1, &uctx_func2) == \-1)
- handle_error("swapcontext");
- printf("%s: returning\en", __func__);
-}
-\&
-static void
-func2(void)
-{
- printf("%s: started\en", __func__);
- printf("%s: swapcontext(&uctx_func2, &uctx_func1)\en", __func__);
- if (swapcontext(&uctx_func2, &uctx_func1) == \-1)
- handle_error("swapcontext");
- printf("%s: returning\en", __func__);
-}
-\&
-int
-main(int argc, char *argv[])
-{
- char func1_stack[16384];
- char func2_stack[16384];
-\&
- if (getcontext(&uctx_func1) == \-1)
- handle_error("getcontext");
- uctx_func1.uc_stack.ss_sp = func1_stack;
- uctx_func1.uc_stack.ss_size = sizeof(func1_stack);
- uctx_func1.uc_link = &uctx_main;
- makecontext(&uctx_func1, func1, 0);
-\&
- if (getcontext(&uctx_func2) == \-1)
- handle_error("getcontext");
- uctx_func2.uc_stack.ss_sp = func2_stack;
- uctx_func2.uc_stack.ss_size = sizeof(func2_stack);
- /* Successor context is f1(), unless argc > 1 */
- uctx_func2.uc_link = (argc > 1) ? NULL : &uctx_func1;
- makecontext(&uctx_func2, func2, 0);
-\&
- printf("%s: swapcontext(&uctx_main, &uctx_func2)\en", __func__);
- if (swapcontext(&uctx_main, &uctx_func2) == \-1)
- handle_error("swapcontext");
-\&
- printf("%s: exiting\en", __func__);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR sigaction (2),
-.BR sigaltstack (2),
-.BR sigprocmask (2),
-.BR getcontext (3),
-.BR sigsetjmp (3)
diff --git a/man3/makedev.3 b/man3/makedev.3
deleted file mode 100644
index c16805045..000000000
--- a/man3/makedev.3
+++ /dev/null
@@ -1,95 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH makedev 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-makedev, major, minor \- manage a device number
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/sysmacros.h>
-.PP
-.BI "dev_t makedev(unsigned int " maj ", unsigned int " min );
-.PP
-.BI "unsigned int major(dev_t " dev );
-.BI "unsigned int minor(dev_t " dev );
-.fi
-.SH DESCRIPTION
-A device ID consists of two parts:
-a major ID, identifying the class of the device,
-and a minor ID, identifying a specific instance of a device in that class.
-A device ID is represented using the type
-.IR dev_t .
-.PP
-Given major and minor device IDs,
-.BR makedev ()
-combines these to produce a device ID, returned as the function result.
-This device ID can be given to
-.BR mknod (2),
-for example.
-.PP
-The
-.BR major ()
-and
-.BR minor ()
-functions perform the converse task: given a device ID,
-they return, respectively, the major and minor components.
-These macros can be useful to, for example,
-decompose the device IDs in the structure returned by
-.BR stat (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR makedev (),
-.BR major (),
-.BR minor ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The BSDs expose the definitions for these macros via
-.IR <sys/types.h> .
-.SH STANDARDS
-None.
-.SH HISTORY
-BSD, HP-UX, Solaris, AIX, Irix.
-.\" The header location is inconsistent:
-.\" Could be sys/mkdev.h, sys/sysmacros.h, or sys/types.h.
-.PP
-These interfaces are defined as macros.
-Since glibc 2.3.3,
-they have been aliases for three GNU-specific functions:
-.BR gnu_dev_makedev (),
-.BR gnu_dev_major (),
-and
-.BR gnu_dev_minor ().
-The latter names are exported, but the traditional names are more portable.
-.PP
-Depending on the version,
-glibc also exposes definitions for these macros from
-.I <sys/types.h>
-if suitable feature test macros are defined.
-However, this behavior was deprecated in glibc 2.25,
-.\" glibc commit dbab6577c6684c62bd2521c1c29dc25c3cac966f
-and since glibc 2.28,
-.\" glibc commit e16deca62e16f645213dffd4ecd1153c37765f17
-.I <sys/types.h>
-no longer provides these definitions.
-.SH SEE ALSO
-.BR mknod (2),
-.BR stat (2)
diff --git a/man3/mallinfo.3 b/man3/mallinfo.3
deleted file mode 100644
index 452abedc9..000000000
--- a/man3/mallinfo.3
+++ /dev/null
@@ -1,338 +0,0 @@
-'\" t
-.\" Copyright (c) 2012 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH mallinfo 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mallinfo, mallinfo2 \- obtain memory allocation information
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <malloc.h>
-.PP
-.B struct mallinfo mallinfo(void);
-.B struct mallinfo2 mallinfo2(void);
-.fi
-.SH DESCRIPTION
-These functions return a copy of a structure containing information about
-memory allocations performed by
-.BR malloc (3)
-and related functions.
-The structure returned by each function contains the same fields.
-However, the older function,
-.BR mallinfo (),
-is deprecated since the type used for the fields is too small (see BUGS).
-.PP
-Note that not all allocations are visible to these functions;
-see BUGS and consider using
-.BR malloc_info (3)
-instead.
-.PP
-The
-.I mallinfo2
-structure returned by
-.BR mallinfo2 ()
-is defined as follows:
-.PP
-.in +4n
-.EX
-struct mallinfo2 {
- size_t arena; /* Non\-mmapped space allocated (bytes) */
- size_t ordblks; /* Number of free chunks */
- size_t smblks; /* Number of free fastbin blocks */
- size_t hblks; /* Number of mmapped regions */
- size_t hblkhd; /* Space allocated in mmapped regions
- (bytes) */
- size_t usmblks; /* See below */
- size_t fsmblks; /* Space in freed fastbin blocks (bytes) */
- size_t uordblks; /* Total allocated space (bytes) */
- size_t fordblks; /* Total free space (bytes) */
- size_t keepcost; /* Top\-most, releasable space (bytes) */
-};
-.EE
-.in
-.PP
-The
-.I mallinfo
-structure returned by the deprecated
-.BR mallinfo ()
-function is exactly the same, except that the fields are typed as
-.IR int .
-.PP
-The structure fields contain the following information:
-.TP 10
-.I arena
-The total amount of memory allocated by means other than
-.BR mmap (2)
-(i.e., memory allocated on the heap).
-This figure includes both in-use blocks and blocks on the free list.
-.TP
-.I ordblks
-The number of ordinary (i.e., non-fastbin) free blocks.
-.TP
-.I smblks
-.\" the glibc info page wrongly says this field is unused
-.\" https://sourceware.org/bugzilla/show_bug.cgi?id=26746
-The number of fastbin free blocks (see
-.BR mallopt (3)).
-.TP
-.I hblks
-The number of blocks currently allocated using
-.BR mmap (2).
-(See the discussion of
-.B M_MMAP_THRESHOLD
-in
-.BR mallopt (3).)
-.TP
-.I hblkhd
-The number of bytes in blocks currently allocated using
-.BR mmap (2).
-.TP
-.I usmblks
-This field is unused, and is always 0.
-.\" It seems to have been zero since at least as far back as glibc 2.15
-Historically, it was the "highwater mark" for allocated space\[em]that is,
-the maximum amount of space that was ever allocated (in bytes);
-this field was maintained only in nonthreading environments.
-.TP
-.I fsmblks
-.\" the glibc info page wrongly says this field is unused
-.\" https://sourceware.org/bugzilla/show_bug.cgi?id=26746
-The total number of bytes in fastbin free blocks.
-.TP
-.I uordblks
-The total number of bytes used by in-use allocations.
-.TP
-.I fordblks
-The total number of bytes in free blocks.
-.TP
-.I keepcost
-The total amount of releasable free space at the top
-of the heap.
-This is the maximum number of bytes that could ideally
-(i.e., ignoring page alignment restrictions, and so on) be released by
-.BR malloc_trim (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR mallinfo (),
-.BR mallinfo2 ()
-T} Thread safety T{
-MT-Unsafe init const:mallopt
-T}
-.TE
-.hy
-.ad
-.sp 1
-.BR mallinfo ()/
-.BR mallinfo2 ()
-would access some global internal objects.
-If modify them with non-atomically,
-may get inconsistent results.
-The identifier
-.I mallopt
-in
-.I const:mallopt
-mean that
-.BR mallopt ()
-would modify the global internal objects with atomics, that make sure
-.BR mallinfo ()/
-.BR mallinfo2 ()
-is safe enough, others modify with non-atomically maybe not.
-.SH STANDARDS
-None.
-.SH HISTORY
-.TP
-.BR mallinfo ()
-glibc 2.0.
-SVID.
-.TP
-.BR mallinfo2 ()
-.\" commit e3960d1c57e57f33e0e846d615788f4ede73b945
-glibc 2.33.
-.SH BUGS
-.\" FIXME . http://sourceware.org/bugzilla/show_bug.cgi?id=208
-.\" See the 24 Aug 2011 mail by Paul Pluzhnikov:
-.\" "[patch] Fix mallinfo() to accumulate results for all arenas"
-.\" on libc-alpha@sourceware.org
-.B Information is returned for only the main memory allocation area.
-Allocations in other arenas are excluded.
-See
-.BR malloc_stats (3)
-and
-.BR malloc_info (3)
-for alternatives that include information about other arenas.
-.PP
-The fields of the
-.I mallinfo
-structure that is returned by the older
-.BR mallinfo ()
-function are typed as
-.IR int .
-However, because some internal bookkeeping values may be of type
-.IR long ,
-the reported values may wrap around zero and thus be inaccurate.
-.SH EXAMPLES
-The program below employs
-.BR mallinfo2 ()
-to retrieve memory allocation statistics before and after
-allocating and freeing some blocks of memory.
-The statistics are displayed on standard output.
-.PP
-The first two command-line arguments specify the number and size of
-blocks to be allocated with
-.BR malloc (3).
-.PP
-The remaining three arguments specify which of the allocated blocks
-should be freed with
-.BR free (3).
-These three arguments are optional, and specify (in order):
-the step size to be used in the loop that frees blocks
-(the default is 1, meaning free all blocks in the range);
-the ordinal position of the first block to be freed
-(default 0, meaning the first allocated block);
-and a number one greater than the ordinal position
-of the last block to be freed
-(default is one greater than the maximum block number).
-If these three arguments are omitted,
-then the defaults cause all allocated blocks to be freed.
-.PP
-In the following example run of the program,
-1000 allocations of 100 bytes are performed,
-and then every second allocated block is freed:
-.PP
-.in +4n
-.EX
-$ \fB./a.out 1000 100 2\fP
-============== Before allocating blocks ==============
-Total non\-mmapped bytes (arena): 0
-# of free chunks (ordblks): 1
-# of free fastbin blocks (smblks): 0
-# of mapped regions (hblks): 0
-Bytes in mapped regions (hblkhd): 0
-Max. total allocated space (usmblks): 0
-Free bytes held in fastbins (fsmblks): 0
-Total allocated space (uordblks): 0
-Total free space (fordblks): 0
-Topmost releasable block (keepcost): 0
-\&
-============== After allocating blocks ==============
-Total non\-mmapped bytes (arena): 135168
-# of free chunks (ordblks): 1
-# of free fastbin blocks (smblks): 0
-# of mapped regions (hblks): 0
-Bytes in mapped regions (hblkhd): 0
-Max. total allocated space (usmblks): 0
-Free bytes held in fastbins (fsmblks): 0
-Total allocated space (uordblks): 104000
-Total free space (fordblks): 31168
-Topmost releasable block (keepcost): 31168
-\&
-============== After freeing blocks ==============
-Total non\-mmapped bytes (arena): 135168
-# of free chunks (ordblks): 501
-# of free fastbin blocks (smblks): 0
-# of mapped regions (hblks): 0
-Bytes in mapped regions (hblkhd): 0
-Max. total allocated space (usmblks): 0
-Free bytes held in fastbins (fsmblks): 0
-Total allocated space (uordblks): 52000
-Total free space (fordblks): 83168
-Topmost releasable block (keepcost): 31168
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (mallinfo.c)
-.EX
-#include <malloc.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-static void
-display_mallinfo2(void)
-{
- struct mallinfo2 mi;
-\&
- mi = mallinfo2();
-\&
- printf("Total non\-mmapped bytes (arena): %zu\en", mi.arena);
- printf("# of free chunks (ordblks): %zu\en", mi.ordblks);
- printf("# of free fastbin blocks (smblks): %zu\en", mi.smblks);
- printf("# of mapped regions (hblks): %zu\en", mi.hblks);
- printf("Bytes in mapped regions (hblkhd): %zu\en", mi.hblkhd);
- printf("Max. total allocated space (usmblks): %zu\en", mi.usmblks);
- printf("Free bytes held in fastbins (fsmblks): %zu\en", mi.fsmblks);
- printf("Total allocated space (uordblks): %zu\en", mi.uordblks);
- printf("Total free space (fordblks): %zu\en", mi.fordblks);
- printf("Topmost releasable block (keepcost): %zu\en", mi.keepcost);
-}
-\&
-int
-main(int argc, char *argv[])
-{
-#define MAX_ALLOCS 2000000
- char *alloc[MAX_ALLOCS];
- size_t blockSize, numBlocks, freeBegin, freeEnd, freeStep;
-\&
- if (argc < 3 || strcmp(argv[1], "\-\-help") == 0) {
- fprintf(stderr, "%s num\-blocks block\-size [free\-step "
- "[start\-free [end\-free]]]\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- numBlocks = atoi(argv[1]);
- blockSize = atoi(argv[2]);
- freeStep = (argc > 3) ? atoi(argv[3]) : 1;
- freeBegin = (argc > 4) ? atoi(argv[4]) : 0;
- freeEnd = (argc > 5) ? atoi(argv[5]) : numBlocks;
-\&
- printf("============== Before allocating blocks ==============\en");
- display_mallinfo2();
-\&
- for (size_t j = 0; j < numBlocks; j++) {
- if (numBlocks >= MAX_ALLOCS) {
- fprintf(stderr, "Too many allocations\en");
- exit(EXIT_FAILURE);
- }
-\&
- alloc[j] = malloc(blockSize);
- if (alloc[j] == NULL) {
- perror("malloc");
- exit(EXIT_FAILURE);
- }
- }
-\&
- printf("\en============== After allocating blocks ==============\en");
- display_mallinfo2();
-\&
- for (size_t j = freeBegin; j < freeEnd; j += freeStep)
- free(alloc[j]);
-\&
- printf("\en============== After freeing blocks ==============\en");
- display_mallinfo2();
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.ad l
-.nh
-.BR mmap (2),
-.BR malloc (3),
-.BR malloc_info (3),
-.BR malloc_stats (3),
-.BR malloc_trim (3),
-.BR mallopt (3)
diff --git a/man3/mallinfo2.3 b/man3/mallinfo2.3
deleted file mode 100644
index 25caee77b..000000000
--- a/man3/mallinfo2.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/mallinfo.3
diff --git a/man3/malloc.3 b/man3/malloc.3
deleted file mode 100644
index b26a1955e..000000000
--- a/man3/malloc.3
+++ /dev/null
@@ -1,459 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\" and Copyright 2007, 2012, 2018, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 19:00:59 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Clarification concerning realloc, iwj10@cus.cam.ac.uk (Ian Jackson), 950701
-.\" Documented MALLOC_CHECK_, Wolfram Gloger (wmglo@dent.med.uni-muenchen.de)
-.\" 2007-09-15 mtk: added notes on malloc()'s use of sbrk() and mmap().
-.\"
-.\" FIXME . Review http://austingroupbugs.net/view.php?id=374
-.\" to see what changes are required on this page.
-.\"
-.TH malloc 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-malloc, free, calloc, realloc, reallocarray \- allocate and free dynamic memory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "void *malloc(size_t " size );
-.BI "void free(void *_Nullable " ptr );
-.BI "void *calloc(size_t " nmemb ", size_t " size );
-.BI "void *realloc(void *_Nullable " ptr ", size_t " size );
-.BI "void *reallocarray(void *_Nullable " ptr ", size_t " nmemb ", size_t " size );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR reallocarray ():
-.nf
- Since glibc 2.29:
- _DEFAULT_SOURCE
- glibc 2.28 and earlier:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-.SS malloc()
-The
-.BR malloc ()
-function allocates
-.I size
-bytes and returns a pointer to the allocated memory.
-.IR "The memory is not initialized" .
-If
-.I size
-is 0, then
-.BR malloc ()
-returns a unique pointer value that can later be successfully passed to
-.BR free ().
-(See "Nonportable behavior" for portability issues.)
-.SS free()
-The
-.BR free ()
-function frees the memory space pointed to by
-.IR ptr ,
-which must have been returned by a previous call to
-.BR malloc ()
-or related functions.
-Otherwise, or if
-.I ptr
-has already been freed, undefined behavior occurs.
-If
-.I ptr
-is NULL, no operation is performed.
-.SS calloc()
-The
-.BR calloc ()
-function allocates memory for an array of
-.I nmemb
-elements of
-.I size
-bytes each and returns a pointer to the allocated memory.
-The memory is set to zero.
-If
-.I nmemb
-or
-.I size
-is 0, then
-.BR calloc ()
-returns a unique pointer value that can later be successfully passed to
-.BR free ().
-.PP
-If the multiplication of
-.I nmemb
-and
-.I size
-would result in integer overflow, then
-.BR calloc ()
-returns an error.
-By contrast,
-an integer overflow would not be detected in the following call to
-.BR malloc (),
-with the result that an incorrectly sized block of memory would be allocated:
-.PP
-.in +4n
-.EX
-malloc(nmemb * size);
-.EE
-.in
-.SS realloc()
-The
-.BR realloc ()
-function changes the size of the memory block pointed to by
-.I ptr
-to
-.I size
-bytes.
-The contents of the memory
-will be unchanged in the range from the start of the region
-up to the minimum of the old and new sizes.
-If the new size is larger than the old size, the added memory will
-.I not
-be initialized.
-.PP
-If
-.I ptr
-is NULL, then the call is equivalent to
-.IR malloc(size) ,
-for all values of
-.IR size .
-.PP
-If
-.I size
-is equal to zero,
-and
-.I ptr
-is not NULL, then the call is equivalent to
-.I free(ptr)
-(but see "Nonportable behavior" for portability issues).
-.PP
-Unless
-.I ptr
-is NULL, it must have been returned by an earlier call to
-.B malloc
-or related functions.
-If the area pointed to was moved, a
-.I free(ptr)
-is done.
-.SS reallocarray()
-The
-.BR reallocarray ()
-function changes the size of (and possibly moves)
-the memory block pointed to by
-.I ptr
-to be large enough for an array of
-.I nmemb
-elements, each of which is
-.I size
-bytes.
-It is equivalent to the call
-.PP
-.in +4n
-.EX
-realloc(ptr, nmemb * size);
-.EE
-.in
-.PP
-However, unlike that
-.BR realloc ()
-call,
-.BR reallocarray ()
-fails safely in the case where the multiplication would overflow.
-If such an overflow occurs,
-.BR reallocarray ()
-returns an error.
-.SH RETURN VALUE
-The
-.BR malloc (),
-.BR calloc (),
-.BR realloc (),
-and
-.BR reallocarray ()
-functions return a pointer to the allocated memory,
-which is suitably aligned for any type that fits into
-the requested size or less.
-On error, these functions return NULL and set
-.IR errno .
-Attempting to allocate more than
-.B PTRDIFF_MAX
-bytes is considered an error, as an object that large
-could cause later pointer subtraction to overflow.
-.PP
-The
-.BR free ()
-function returns no value, and preserves
-.IR errno .
-.PP
-The
-.BR realloc ()
-and
-.BR reallocarray ()
-functions return NULL if
-.I ptr
-is not NULL and the requested size is zero;
-this is not considered an error.
-(See "Nonportable behavior" for portability issues.)
-Otherwise, the returned pointer may be the same as
-.I ptr
-if the allocation was not moved
-(e.g., there was room to expand the allocation in-place), or different from
-.I ptr
-if the allocation was moved to a new address.
-If these functions fail,
-the original block is left untouched; it is not freed or moved.
-.SH ERRORS
-.BR calloc (),
-.BR malloc (),
-.BR realloc (),
-and
-.BR reallocarray ()
-can fail with the following error:
-.TP
-.B ENOMEM
-Out of memory.
-Possibly, the application hit the
-.B RLIMIT_AS
-or
-.B RLIMIT_DATA
-limit described in
-.BR getrlimit (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR malloc (),
-.BR free (),
-.BR calloc (),
-.BR realloc ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR malloc ()
-.TQ
-.BR free ()
-.TQ
-.BR calloc ()
-.TQ
-.BR realloc ()
-C11, POSIX.1-2008.
-.TP
-.BR reallocarray ()
-None.
-.SH HISTORY
-.TP
-.BR malloc ()
-.TQ
-.BR free ()
-.TQ
-.BR calloc ()
-.TQ
-.BR realloc ()
-POSIX.1-2001, C89.
-.TP
-.BR reallocarray ()
-glibc 2.26.
-OpenBSD 5.6, FreeBSD 11.0.
-.PP
-.BR malloc ()
-and related functions rejected sizes greater than
-.B PTRDIFF_MAX
-starting in glibc 2.30.
-.PP
-.BR free ()
-preserved
-.I errno
-starting in glibc 2.33.
-.SH NOTES
-By default, Linux follows an optimistic memory allocation strategy.
-This means that when
-.BR malloc ()
-returns non-NULL there is no guarantee that the memory really
-is available.
-In case it turns out that the system is out of memory,
-one or more processes will be killed by the OOM killer.
-For more information, see the description of
-.I /proc/sys/vm/overcommit_memory
-and
-.I /proc/sys/vm/oom_adj
-in
-.BR proc (5),
-and the Linux kernel source file
-.IR Documentation/vm/overcommit\-accounting.rst .
-.PP
-Normally,
-.BR malloc ()
-allocates memory from the heap, and adjusts the size of the heap
-as required, using
-.BR sbrk (2).
-When allocating blocks of memory larger than
-.B MMAP_THRESHOLD
-bytes, the glibc
-.BR malloc ()
-implementation allocates the memory as a private anonymous mapping using
-.BR mmap (2).
-.B MMAP_THRESHOLD
-is 128\ kB by default, but is adjustable using
-.BR mallopt (3).
-Prior to Linux 4.7
-allocations performed using
-.BR mmap (2)
-were unaffected by the
-.B RLIMIT_DATA
-resource limit;
-since Linux 4.7, this limit is also enforced for allocations performed using
-.BR mmap (2).
-.PP
-To avoid corruption in multithreaded applications,
-mutexes are used internally to protect the memory-management
-data structures employed by these functions.
-In a multithreaded application in which threads simultaneously
-allocate and free memory,
-there could be contention for these mutexes.
-To scalably handle memory allocation in multithreaded applications,
-glibc creates additional
-.I memory allocation arenas
-if mutex contention is detected.
-Each arena is a large region of memory that is internally allocated
-by the system
-(using
-.BR brk (2)
-or
-.BR mmap (2)),
-and managed with its own mutexes.
-.PP
-If your program uses a private memory allocator,
-it should do so by replacing
-.BR malloc (),
-.BR free (),
-.BR calloc (),
-and
-.BR realloc ().
-The replacement functions must implement the documented glibc behaviors,
-including
-.I errno
-handling, size-zero allocations, and overflow checking;
-otherwise, other library routines may crash or operate incorrectly.
-For example, if the replacement
-.IR free ()
-does not preserve
-.IR errno ,
-then seemingly unrelated library routines may
-fail without having a valid reason in
-.IR errno .
-Private memory allocators may also need to replace other glibc functions;
-see "Replacing malloc" in the glibc manual for details.
-.PP
-Crashes in memory allocators
-are almost always related to heap corruption, such as overflowing
-an allocated chunk or freeing the same pointer twice.
-.PP
-The
-.BR malloc ()
-implementation is tunable via environment variables; see
-.BR mallopt (3)
-for details.
-.SS Nonportable behavior
-The behavior of
-these functions when the requested size is zero
-is glibc specific;
-other implementations may return NULL without setting
-.IR errno ,
-and portable POSIX programs should tolerate such behavior.
-See
-.BR realloc (3p).
-.PP
-POSIX requires memory allocators
-to set
-.I errno
-upon failure.
-However, the C standard does not require this, and applications
-portable to non-POSIX platforms should not assume this.
-.PP
-Portable programs should not use private memory allocators,
-as POSIX and the C standard do not allow replacement of
-.BR malloc (),
-.BR free (),
-.BR calloc (),
-and
-.BR realloc ().
-.SH EXAMPLES
-.EX
-#include <err.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-#define MALLOCARRAY(n, type) ((type *) my_mallocarray(n, sizeof(type)))
-#define MALLOC(type) MALLOCARRAY(1, type)
-\&
-static inline void *my_mallocarray(size_t nmemb, size_t size);
-\&
-int
-main(void)
-{
- char *p;
-\&
- p = MALLOCARRAY(32, char);
- if (p == NULL)
- err(EXIT_FAILURE, "malloc");
-\&
- strlcpy(p, "foo", 32);
- puts(p);
-}
-\&
-static inline void *
-my_mallocarray(size_t nmemb, size_t size)
-{
- return reallocarray(NULL, nmemb, size);
-}
-.EE
-.SH SEE ALSO
-.\" http://g.oswego.edu/dl/html/malloc.html
-.\" A Memory Allocator - by Doug Lea
-.\"
-.\" http://www.bozemanpass.com/info/linux/malloc/Linux_Heap_Contention.html
-.\" Linux Heap, Contention in free() - David Boreham
-.\"
-.\" http://www.citi.umich.edu/projects/linux-scalability/reports/malloc.html
-.\" malloc() Performance in a Multithreaded Linux Environment -
-.\" Check Lever, David Boreham
-.\"
-.ad l
-.nh
-.BR valgrind (1),
-.BR brk (2),
-.BR mmap (2),
-.BR alloca (3),
-.BR malloc_get_state (3),
-.BR malloc_info (3),
-.BR malloc_trim (3),
-.BR malloc_usable_size (3),
-.BR mallopt (3),
-.BR mcheck (3),
-.BR mtrace (3),
-.BR posix_memalign (3)
-.PP
-For details of the GNU C library implementation, see
-.UR https://sourceware.org/glibc/wiki/MallocInternals
-.UE .
diff --git a/man3/malloc_get_state.3 b/man3/malloc_get_state.3
deleted file mode 100644
index 23bfa2d8d..000000000
--- a/man3/malloc_get_state.3
+++ /dev/null
@@ -1,118 +0,0 @@
-'\" t
-.\" Copyright (c) 2012 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH malloc_get_state 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-malloc_get_state, malloc_set_state \-
-record and restore state of malloc implementation
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <malloc.h>
-.PP
-.B void *malloc_get_state(void);
-.BI "int malloc_set_state(void *" state );
-.fi
-.SH DESCRIPTION
-.IR Note :
-these function are removed in glibc 2.25.
-.PP
-The
-.BR malloc_get_state ()
-function records the current state of all
-.BR malloc (3)
-internal bookkeeping variables
-(but not the actual contents of the heap
-or the state of
-.BR malloc_hook (3)
-functions pointers).
-The state is recorded in a system-dependent opaque data structure
-dynamically allocated via
-.BR malloc (3),
-and a pointer to that data structure is returned as the function result.
-(It is the caller's responsibility to
-.BR free (3)
-this memory.)
-.PP
-The
-.BR malloc_set_state ()
-function restores the state of all
-.BR malloc (3)
-internal bookkeeping variables to the values recorded in
-the opaque data structure pointed to by
-.IR state .
-.SH RETURN VALUE
-On success,
-.BR malloc_get_state ()
-returns a pointer to a newly allocated opaque data structure.
-On error (for example, memory could not be allocated for the data structure),
-.BR malloc_get_state ()
-returns NULL.
-.PP
-On success,
-.BR malloc_set_state ()
-returns 0.
-If the implementation detects that
-.I state
-does not point to a correctly formed data structure,
-.\" if(ms->magic != MALLOC_STATE_MAGIC) return -1;
-.BR malloc_set_state ()
-returns \-1.
-If the implementation detects that
-the version of the data structure referred to by
-.I state
-is a more recent version than this implementation knows about,
-.\" /* Must fail if the major version is too high. */
-.\" if((ms->version & ~0xffl) > (MALLOC_STATE_VERSION & ~0xffl)) return -2;
-.BR malloc_set_state ()
-returns \-2.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR malloc_get_state (),
-.BR malloc_set_state ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH NOTES
-These functions are useful when using this
-.BR malloc (3)
-implementation as part of a shared library,
-and the heap contents are saved/restored via some other method.
-This technique is used by GNU Emacs to implement its "dumping" function.
-.PP
-Hook function pointers are never saved or restored by these
-functions, with two exceptions:
-if malloc checking (see
-.BR mallopt (3))
-was in use when
-.BR malloc_get_state ()
-was called, then
-.BR malloc_set_state ()
-resets malloc checking hooks
-.\" i.e., calls __malloc_check_init()
-if possible;
-.\" i.e., malloc checking is not already in use
-.\" and the caller requested malloc checking
-if malloc checking was not in use in the recorded state,
-but the caller has requested malloc checking,
-then the hooks are reset to 0.
-.SH SEE ALSO
-.BR malloc (3),
-.BR mallopt (3)
diff --git a/man3/malloc_hook.3 b/man3/malloc_hook.3
deleted file mode 100644
index e524d5939..000000000
--- a/man3/malloc_hook.3
+++ /dev/null
@@ -1,154 +0,0 @@
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" Heavily based on glibc documentation
-.\" Polished, added docs, removed glibc doc bug, 2002-07-20, aeb
-.\"
-.TH __malloc_hook 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-__malloc_hook, __malloc_initialize_hook,
-__memalign_hook, __free_hook, __realloc_hook,
-__after_morecore_hook \- malloc debugging variables (DEPRECATED)
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B "#include <malloc.h>"
-.PP
-.BI "void *(*volatile __malloc_hook)(size_t " size ", const void *" caller );
-.PP
-.BI "void *(*volatile __realloc_hook)(void *" ptr ", size_t " size ,
-.BI " const void *" caller );
-.PP
-.BI "void *(*volatile __memalign_hook)(size_t " alignment ", size_t " size ,
-.BI " const void *" caller );
-.PP
-.BI "void (*volatile __free_hook)(void *" ptr ", const void *" caller );
-.PP
-.B "void (*__malloc_initialize_hook)(void);"
-.PP
-.B "void (*volatile __after_morecore_hook)(void);"
-.fi
-.SH DESCRIPTION
-The GNU C library lets you modify the behavior of
-.BR malloc (3),
-.BR realloc (3),
-and
-.BR free (3)
-by specifying appropriate hook functions.
-You can use these hooks
-to help you debug programs that use dynamic memory allocation,
-for example.
-.PP
-The variable
-.B __malloc_initialize_hook
-points at a function that is called once when the malloc implementation
-is initialized.
-This is a weak variable, so it can be overridden in
-the application with a definition like the following:
-.PP
-.in +4n
-.EX
-void (*__malloc_initialize_hook)(void) = my_init_hook;
-.EE
-.in
-.PP
-Now the function
-.IR my_init_hook ()
-can do the initialization of all hooks.
-.PP
-The four functions pointed to by
-.BR __malloc_hook ,
-.BR __realloc_hook ,
-.BR __memalign_hook ,
-.B __free_hook
-have a prototype like the functions
-.BR malloc (3),
-.BR realloc (3),
-.BR memalign (3),
-.BR free (3),
-respectively, except that they have a final argument
-.I caller
-that gives the address of the caller of
-.BR malloc (3),
-etc.
-.PP
-The variable
-.B __after_morecore_hook
-points at a function that is called each time after
-.BR sbrk (2)
-was asked for more memory.
-.SH STANDARDS
-GNU.
-.SH NOTES
-The use of these hook functions is not safe in multithreaded programs,
-and they are now deprecated.
-From glibc 2.24 onwards, the
-.B __malloc_initialize_hook
-variable has been removed from the API,
-and from glibc 2.34 onwards, all
-the hook variables have been removed from the API.
-.\" https://bugzilla.redhat.com/show_bug.cgi?id=450187
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=9957
-Programmers should instead preempt calls to the relevant functions
-by defining and exporting
-.BR malloc (),
-.BR free (),
-.BR realloc (),
-and
-.BR calloc ().
-.SH EXAMPLES
-Here is a short example of how to use these variables.
-.PP
-.EX
-#include <stdio.h>
-#include <malloc.h>
-\&
-/* Prototypes for our hooks */
-static void my_init_hook(void);
-static void *my_malloc_hook(size_t, const void *);
-\&
-/* Variables to save original hooks */
-static void *(*old_malloc_hook)(size_t, const void *);
-\&
-/* Override initializing hook from the C library */
-void (*__malloc_initialize_hook)(void) = my_init_hook;
-\&
-static void
-my_init_hook(void)
-{
- old_malloc_hook = __malloc_hook;
- __malloc_hook = my_malloc_hook;
-}
-\&
-static void *
-my_malloc_hook(size_t size, const void *caller)
-{
- void *result;
-\&
- /* Restore all old hooks */
- __malloc_hook = old_malloc_hook;
-\&
- /* Call recursively */
- result = malloc(size);
-\&
- /* Save underlying hooks */
- old_malloc_hook = __malloc_hook;
-\&
- /* printf() might call malloc(), so protect it too */
- printf("malloc(%zu) called from %p returns %p\en",
- size, caller, result);
-\&
- /* Restore our own hooks */
- __malloc_hook = my_malloc_hook;
-\&
- return result;
-}
-.EE
-.SH SEE ALSO
-.BR mallinfo (3),
-.BR malloc (3),
-.BR mcheck (3),
-.BR mtrace (3)
diff --git a/man3/malloc_info.3 b/man3/malloc_info.3
deleted file mode 100644
index 6c73f72c8..000000000
--- a/man3/malloc_info.3
+++ /dev/null
@@ -1,260 +0,0 @@
-'\" t
-.\" Copyright (c) 2012 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH malloc_info 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-malloc_info \- export malloc state to a stream
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <malloc.h>
-.PP
-.BI "int malloc_info(int " options ", FILE *" stream );
-.fi
-.SH DESCRIPTION
-The
-.BR malloc_info ()
-function exports an XML string that describes the current state
-of the memory-allocation
-implementation in the caller.
-The string is printed on the file stream
-.IR stream .
-The exported string includes information about all arenas (see
-.BR malloc (3)).
-.PP
-As currently implemented,
-.I options
-must be zero.
-.SH RETURN VALUE
-On success,
-.BR malloc_info ()
-returns 0.
-On failure, it returns \-1, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I options
-was nonzero.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR malloc_info ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH HISTORY
-glibc 2.10.
-.SH NOTES
-The memory-allocation information is provided as an XML string
-(rather than a C structure)
-because the information may change over time
-(according to changes in the underlying implementation).
-The output XML string includes a version field.
-.PP
-The
-.BR open_memstream (3)
-function can be used to send the output of
-.BR malloc_info ()
-directly into a buffer in memory, rather than to a file.
-.PP
-The
-.BR malloc_info ()
-function is designed to address deficiencies in
-.BR malloc_stats (3)
-and
-.BR mallinfo (3).
-.SH EXAMPLES
-The program below takes up to four command-line arguments,
-of which the first three are mandatory.
-The first argument specifies the number of threads that
-the program should create.
-All of the threads, including the main thread,
-allocate the number of blocks of memory specified by the second argument.
-The third argument controls the size of the blocks to be allocated.
-The main thread creates blocks of this size,
-the second thread created by the program allocates blocks of twice this size,
-the third thread allocates blocks of three times this size, and so on.
-.PP
-The program calls
-.BR malloc_info ()
-twice to display the memory-allocation state.
-The first call takes place before any threads
-are created or memory allocated.
-The second call is performed after all threads have allocated memory.
-.PP
-In the following example,
-the command-line arguments specify the creation of one additional thread,
-and both the main thread and the additional thread
-allocate 10000 blocks of memory.
-After the blocks of memory have been allocated,
-.BR malloc_info ()
-shows the state of two allocation arenas.
-.PP
-.in +4n
-.EX
-.RB "$ " "getconf GNU_LIBC_VERSION"
-glibc 2.13
-.RB "$ " "./a.out 1 10000 100"
-============ Before allocating blocks ============
-<malloc version="1">
-<heap nr="0">
-<sizes>
-</sizes>
-<total type="fast" count="0" size="0"/>
-<total type="rest" count="0" size="0"/>
-<system type="current" size="135168"/>
-<system type="max" size="135168"/>
-<aspace type="total" size="135168"/>
-<aspace type="mprotect" size="135168"/>
-</heap>
-<total type="fast" count="0" size="0"/>
-<total type="rest" count="0" size="0"/>
-<system type="current" size="135168"/>
-<system type="max" size="135168"/>
-<aspace type="total" size="135168"/>
-<aspace type="mprotect" size="135168"/>
-</malloc>
-\&
-============ After allocating blocks ============
-<malloc version="1">
-<heap nr="0">
-<sizes>
-</sizes>
-<total type="fast" count="0" size="0"/>
-<total type="rest" count="0" size="0"/>
-<system type="current" size="1081344"/>
-<system type="max" size="1081344"/>
-<aspace type="total" size="1081344"/>
-<aspace type="mprotect" size="1081344"/>
-</heap>
-<heap nr="1">
-<sizes>
-</sizes>
-<total type="fast" count="0" size="0"/>
-<total type="rest" count="0" size="0"/>
-<system type="current" size="1032192"/>
-<system type="max" size="1032192"/>
-<aspace type="total" size="1032192"/>
-<aspace type="mprotect" size="1032192"/>
-</heap>
-<total type="fast" count="0" size="0"/>
-<total type="rest" count="0" size="0"/>
-<system type="current" size="2113536"/>
-<system type="max" size="2113536"/>
-<aspace type="total" size="2113536"/>
-<aspace type="mprotect" size="2113536"/>
-</malloc>
-.EE
-.in
-.SS Program source
-.\" SRC BEGIN (malloc_info.c)
-.EX
-#include <err.h>
-#include <errno.h>
-#include <malloc.h>
-#include <pthread.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-static size_t blockSize;
-static size_t numThreads;
-static unsigned int numBlocks;
-\&
-static void *
-thread_func(void *arg)
-{
- int tn = (int) arg;
-\&
- /* The multiplier \[aq](2 + tn)\[aq] ensures that each thread (including
- the main thread) allocates a different amount of memory. */
-\&
- for (unsigned int j = 0; j < numBlocks; j++)
- if (malloc(blockSize * (2 + tn)) == NULL)
- err(EXIT_FAILURE, "malloc\-thread");
-\&
- sleep(100); /* Sleep until main thread terminates. */
- return NULL;
-}
-\&
-int
-main(int argc, char *argv[])
-{
- int sleepTime;
- pthread_t *thr;
-\&
- if (argc < 4) {
- fprintf(stderr,
- "%s num\-threads num\-blocks block\-size [sleep\-time]\en",
- argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- numThreads = atoi(argv[1]);
- numBlocks = atoi(argv[2]);
- blockSize = atoi(argv[3]);
- sleepTime = (argc > 4) ? atoi(argv[4]) : 0;
-\&
- thr = calloc(numThreads, sizeof(*thr));
- if (thr == NULL)
- err(EXIT_FAILURE, "calloc");
-\&
- printf("============ Before allocating blocks ============\en");
- malloc_info(0, stdout);
-\&
- /* Create threads that allocate different amounts of memory. */
-\&
- for (size_t tn = 0; tn < numThreads; tn++) {
- errno = pthread_create(&thr[tn], NULL, thread_func,
- (void *) tn);
- if (errno != 0)
- err(EXIT_FAILURE, "pthread_create");
-\&
- /* If we add a sleep interval after the start\-up of each
- thread, the threads likely won\[aq]t contend for malloc
- mutexes, and therefore additional arenas won\[aq]t be
- allocated (see malloc(3)). */
-\&
- if (sleepTime > 0)
- sleep(sleepTime);
- }
-\&
- /* The main thread also allocates some memory. */
-\&
- for (unsigned int j = 0; j < numBlocks; j++)
- if (malloc(blockSize) == NULL)
- err(EXIT_FAILURE, "malloc");
-\&
- sleep(2); /* Give all threads a chance to
- complete allocations. */
-\&
- printf("\en============ After allocating blocks ============\en");
- malloc_info(0, stdout);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR mallinfo (3),
-.BR malloc (3),
-.BR malloc_stats (3),
-.BR mallopt (3),
-.BR open_memstream (3)
diff --git a/man3/malloc_set_state.3 b/man3/malloc_set_state.3
deleted file mode 100644
index ff16dd792..000000000
--- a/man3/malloc_set_state.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/malloc_get_state.3
diff --git a/man3/malloc_stats.3 b/man3/malloc_stats.3
deleted file mode 100644
index fdf471ad8..000000000
--- a/man3/malloc_stats.3
+++ /dev/null
@@ -1,68 +0,0 @@
-'\" t
-.\" Copyright (c) 2012 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH malloc_stats 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-malloc_stats \- print memory allocation statistics
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <malloc.h>
-.PP
-.B void malloc_stats(void);
-.fi
-.SH DESCRIPTION
-The
-.BR malloc_stats ()
-function prints (on standard error) statistics about memory allocated by
-.BR malloc (3)
-and related functions.
-For each arena (allocation area), this function prints
-the total amount of memory allocated
-and the total number of bytes consumed by in-use allocations.
-(These two values correspond to the
-.I arena
-and
-.I uordblks
-fields retrieved by
-.BR mallinfo (3).)
-In addition,
-the function prints the sum of these two statistics for all arenas,
-and the maximum number of blocks and bytes that were ever simultaneously
-allocated using
-.BR mmap (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR malloc_stats ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH HISTORY
-glibc 2.0.
-.SH NOTES
-More detailed information about memory allocations in the main arena
-can be obtained using
-.BR mallinfo (3).
-.SH SEE ALSO
-.BR mmap (2),
-.BR mallinfo (3),
-.BR malloc (3),
-.BR malloc_info (3),
-.BR mallopt (3)
diff --git a/man3/malloc_trim.3 b/man3/malloc_trim.3
deleted file mode 100644
index ec9d7d2d4..000000000
--- a/man3/malloc_trim.3
+++ /dev/null
@@ -1,84 +0,0 @@
-'\" t
-.\" Copyright (c) 2012 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH malloc_trim 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-malloc_trim \- release free memory from the heap
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <malloc.h>
-.PP
-.BI "int malloc_trim(size_t " pad );
-.fi
-.SH DESCRIPTION
-The
-.BR malloc_trim ()
-function attempts to release free memory from the heap
-(by calling
-.BR sbrk (2)
-or
-.BR madvise (2)
-with suitable arguments).
-.PP
-The
-.I pad
-argument specifies the amount of free space to leave untrimmed
-at the top of the heap.
-If this argument is 0, only the minimum amount of memory is maintained
-at the top of the heap (i.e., one page or less).
-A nonzero argument can be used to maintain some trailing space
-at the top of the heap in order to allow future allocations
-to be made without having to extend the heap with
-.BR sbrk (2).
-.SH RETURN VALUE
-The
-.BR malloc_trim ()
-function returns 1 if memory was actually released back to the system,
-or 0 if it was not possible to release any memory.
-.SH ERRORS
-No errors are defined.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR malloc_trim ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH VERSIONS
-glibc 2.0.
-.SH NOTES
-Only the main heap (using
-.BR sbrk (2))
-honors the
-.I pad
-argument; thread heaps do not.
-.PP
-Since glibc 2.8 this function frees memory in all arenas and in all
-chunks with whole free pages.
-.\" See commit 68631c8eb92ff38d9da1ae34f6aa048539b199cc
-.\" (dated 2007-12-16) which adds iteration over all
-.\" arenas and frees all pages in chunks which are free.
-.PP
-Before glibc 2.8 this function only freed memory at the
-top of the heap in the main arena.
-.SH SEE ALSO
-.BR sbrk (2),
-.BR malloc (3),
-.BR mallopt (3)
diff --git a/man3/malloc_usable_size.3 b/man3/malloc_usable_size.3
deleted file mode 100644
index f96f1abb5..000000000
--- a/man3/malloc_usable_size.3
+++ /dev/null
@@ -1,63 +0,0 @@
-'\" t
-.\" Copyright (c) 2012 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH malloc_usable_size 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-malloc_usable_size \- obtain size of block of memory allocated from heap
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <malloc.h>
-.PP
-.BI "size_t malloc_usable_size(void *_Nullable " ptr );
-.fi
-.SH DESCRIPTION
-This function can be used for
-diagnostics or statistics about allocations from
-.BR malloc (3)
-or a related function.
-.SH RETURN VALUE
-.BR malloc_usable_size ()
-returns a value no less than
-the size of the block of allocated memory pointed to by
-.IR ptr .
-If
-.I ptr
-is NULL, 0 is returned.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR malloc_usable_size ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH CAVEATS
-The value returned by
-.BR malloc_usable_size ()
-may be greater than the requested size of the allocation
-because of various internal implementation details,
-none of which the programmer should rely on.
-This function is intended to only be used
-for diagnostics and statistics;
-writing to the excess memory without first calling
-.BR realloc (3)
-to resize the allocation is not supported.
-The returned value is only valid at the time of the call.
-.SH SEE ALSO
-.BR malloc (3)
diff --git a/man3/mallopt.3 b/man3/mallopt.3
deleted file mode 100644
index 5f73c499d..000000000
--- a/man3/mallopt.3
+++ /dev/null
@@ -1,619 +0,0 @@
-.\" Copyright (c) 2012 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH mallopt 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mallopt \- set memory allocation parameters
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <malloc.h>
-.PP
-.BI "int mallopt(int " param ", int " value );
-.fi
-.SH DESCRIPTION
-The
-.BR mallopt ()
-function adjusts parameters that control the behavior of the
-memory-allocation functions (see
-.BR malloc (3)).
-The
-.I param
-argument specifies the parameter to be modified, and
-.I value
-specifies the new value for that parameter.
-.PP
-The following values can be specified for
-.IR param :
-.TP
-.B M_ARENA_MAX
-If this parameter has a nonzero value,
-it defines a hard limit on the maximum number of arenas that can be created.
-An arena represents a pool of memory that can be used by
-.BR malloc (3)
-(and similar) calls to service allocation requests.
-Arenas are thread safe and
-therefore may have multiple concurrent memory requests.
-The trade-off is between the number of threads and the number of arenas.
-The more arenas you have, the lower the per-thread contention,
-but the higher the memory usage.
-.IP
-The default value of this parameter is 0,
-meaning that the limit on the number of arenas is determined
-according to the setting of
-.BR M_ARENA_TEST .
-.IP
-This parameter has been available since glibc 2.10 via
-.BR \-\-enable\-experimental\-malloc ,
-and since glibc 2.15 by default.
-In some versions of the allocator there was no limit on the number
-of created arenas (e.g., CentOS 5, RHEL 5).
-.IP
-When employing newer glibc versions, applications may in
-some cases exhibit high contention when accessing arenas.
-In these cases, it may be beneficial to increase
-.B M_ARENA_MAX
-to match the number of threads.
-This is similar in behavior to strategies taken by tcmalloc and jemalloc
-(e.g., per-thread allocation pools).
-.TP
-.B M_ARENA_TEST
-This parameter specifies a value, in number of arenas created,
-at which point the system configuration will be examined
-to determine a hard limit on the number of created arenas.
-(See
-.B M_ARENA_MAX
-for the definition of an arena.)
-.IP
-The computation of the arena hard limit is implementation-defined
-and is usually calculated as a multiple of the number of available CPUs.
-Once the hard limit is computed, the result is final and constrains
-the total number of arenas.
-.IP
-The default value for the
-.B M_ARENA_TEST
-parameter is 2 on systems where
-.I sizeof(long)
-is 4; otherwise the default value is 8.
-.IP
-This parameter has been available since glibc 2.10 via
-.BR \-\-enable\-experimental\-malloc ,
-and since glibc 2.15 by default.
-.IP
-The value of
-.B M_ARENA_TEST
-is not used when
-.B M_ARENA_MAX
-has a nonzero value.
-.TP
-.B M_CHECK_ACTION
-Setting this parameter controls how glibc responds when various kinds
-of programming errors are detected (e.g., freeing the same pointer twice).
-The 3 least significant bits (2, 1, and 0) of the value assigned
-to this parameter determine the glibc behavior, as follows:
-.RS
-.TP
-Bit 0
-If this bit is set, then print a one-line message on
-.I stderr
-that provides details about the error.
-The message starts with the string "***\ glibc detected\ ***",
-followed by the program name,
-the name of the memory-allocation function in which the error was detected,
-a brief description of the error,
-and the memory address where the error was detected.
-.TP
-Bit 1
-If this bit is set, then,
-after printing any error message specified by bit 0,
-the program is terminated by calling
-.BR abort (3).
-Since glibc 2.4,
-if bit 0 is also set,
-then, between printing the error message and aborting,
-the program also prints a stack trace in the manner of
-.BR backtrace (3),
-and prints the process's memory mapping in the style of
-.IR /proc/ pid /maps
-(see
-.BR proc (5)).
-.TP
-Bit 2 (since glibc 2.4)
-This bit has an effect only if bit 0 is also set.
-If this bit is set,
-then the one-line message describing the error is simplified
-to contain just the name of the function where the error
-was detected and the brief description of the error.
-.RE
-.IP
-The remaining bits in
-.I value
-are ignored.
-.IP
-Combining the above details,
-the following numeric values are meaningful for
-.BR M_CHECK_ACTION :
-.RS 12
-.TP
-.B 0
-Ignore error conditions; continue execution (with undefined results).
-.TP
-.B 1
-Print a detailed error message and continue execution.
-.TP
-.B 2
-Abort the program.
-.TP
-.B 3
-Print detailed error message, stack trace, and memory mappings,
-and abort the program.
-.TP
-.B 5
-Print a simple error message and continue execution.
-.TP
-.B 7
-Print simple error message, stack trace, and memory mappings,
-and abort the program.
-.RE
-.IP
-Since glibc 2.3.4, the default value for the
-.B M_CHECK_ACTION
-parameter is 3.
-In glibc 2.3.3 and earlier, the default value is 1.
-.IP
-Using a nonzero
-.B M_CHECK_ACTION
-value can be useful because otherwise a crash may happen much later,
-and the true cause of the problem is then very hard to track down.
-.TP
-.B M_MMAP_MAX
-.\" The following text adapted from comments in the glibc source:
-This parameter specifies the maximum number of allocation requests that
-may be simultaneously serviced using
-.BR mmap (2).
-This parameter exists because some systems have a limited number
-of internal tables for use by
-.BR mmap (2),
-and using more than a few of them may degrade performance.
-.IP
-The default value is 65,536,
-a value which has no special significance and
-which serves only as a safeguard.
-Setting this parameter to 0 disables the use of
-.BR mmap (2)
-for servicing large allocation requests.
-.TP
-.B M_MMAP_THRESHOLD
-For allocations greater than or equal to the limit specified (in bytes) by
-.B M_MMAP_THRESHOLD
-that can't be satisfied from the free list,
-the memory-allocation functions employ
-.BR mmap (2)
-instead of increasing the program break using
-.BR sbrk (2).
-.IP
-Allocating memory using
-.BR mmap (2)
-has the significant advantage that the allocated memory blocks
-can always be independently released back to the system.
-(By contrast,
-the heap can be trimmed only if memory is freed at the top end.)
-On the other hand, there are some disadvantages to the use of
-.BR mmap (2):
-deallocated space is not placed on the free list
-for reuse by later allocations;
-memory may be wasted because
-.BR mmap (2)
-allocations must be page-aligned;
-and the kernel must perform the expensive task of zeroing out
-memory allocated via
-.BR mmap (2).
-Balancing these factors leads to a default setting of 128*1024 for the
-.B M_MMAP_THRESHOLD
-parameter.
-.IP
-The lower limit for this parameter is 0.
-The upper limit is
-.BR DEFAULT_MMAP_THRESHOLD_MAX :
-512*1024 on 32-bit systems or
-.I 4*1024*1024*sizeof(long)
-on 64-bit systems.
-.IP
-.IR Note :
-Nowadays, glibc uses a dynamic mmap threshold by default.
-The initial value of the threshold is 128*1024,
-but when blocks larger than the current threshold and less than or equal to
-.B DEFAULT_MMAP_THRESHOLD_MAX
-are freed,
-the threshold is adjusted upward to the size of the freed block.
-When dynamic mmap thresholding is in effect,
-the threshold for trimming the heap is also dynamically adjusted
-to be twice the dynamic mmap threshold.
-Dynamic adjustment of the mmap threshold is disabled if any of the
-.BR M_TRIM_THRESHOLD ,
-.BR M_TOP_PAD ,
-.BR M_MMAP_THRESHOLD ,
-or
-.B M_MMAP_MAX
-parameters is set.
-.TP
-.BR M_MXFAST " (since glibc 2.3)"
-.\" The following text adapted from comments in the glibc sources:
-Set the upper limit for memory allocation requests that are satisfied
-using "fastbins".
-(The measurement unit for this parameter is bytes.)
-Fastbins are storage areas that hold deallocated blocks of memory
-of the same size without merging adjacent free blocks.
-Subsequent reallocation of blocks of the same size can be handled
-very quickly by allocating from the fastbin,
-although memory fragmentation and the overall memory footprint
-of the program can increase.
-.IP
-The default value for this parameter is
-.I 64*sizeof(size_t)/4
-(i.e., 64 on 32-bit architectures).
-The range for this parameter is 0 to
-.IR 80*sizeof(size_t)/4 .
-Setting
-.B M_MXFAST
-to 0 disables the use of fastbins.
-.TP
-.BR M_PERTURB " (since glibc 2.4)"
-If this parameter is set to a nonzero value,
-then bytes of allocated memory (other than allocations via
-.BR calloc (3))
-are initialized to the complement of the value
-in the least significant byte of
-.IR value ,
-and when allocated memory is released using
-.BR free (3),
-the freed bytes are set to the least significant byte of
-.IR value .
-This can be useful for detecting errors where programs
-incorrectly rely on allocated memory being initialized to zero,
-or reuse values in memory that has already been freed.
-.IP
-The default value for this parameter is 0.
-.TP
-.B M_TOP_PAD
-This parameter defines the amount of padding to employ when calling
-.BR sbrk (2)
-to modify the program break.
-(The measurement unit for this parameter is bytes.)
-This parameter has an effect in the following circumstances:
-.RS
-.IP \[bu] 3
-When the program break is increased, then
-.B M_TOP_PAD
-bytes are added to the
-.BR sbrk (2)
-request.
-.IP \[bu]
-When the heap is trimmed as a consequence of calling
-.BR free (3)
-(see the discussion of
-.BR M_TRIM_THRESHOLD )
-this much free space is preserved at the top of the heap.
-.RE
-.IP
-In either case,
-the amount of padding is always rounded to a system page boundary.
-.IP
-Modifying
-.B M_TOP_PAD
-is a trade-off between increasing the number of system calls
-(when the parameter is set low)
-and wasting unused memory at the top of the heap
-(when the parameter is set high).
-.IP
-The default value for this parameter is 128*1024.
-.\" DEFAULT_TOP_PAD in glibc source
-.TP
-.B M_TRIM_THRESHOLD
-When the amount of contiguous free memory at the top of the heap
-grows sufficiently large,
-.BR free (3)
-employs
-.BR sbrk (2)
-to release this memory back to the system.
-(This can be useful in programs that continue to execute for
-a long period after freeing a significant amount of memory.)
-The
-.B M_TRIM_THRESHOLD
-parameter specifies the minimum size (in bytes) that
-this block of memory must reach before
-.BR sbrk (2)
-is used to trim the heap.
-.IP
-The default value for this parameter is 128*1024.
-Setting
-.B M_TRIM_THRESHOLD
-to \-1 disables trimming completely.
-.IP
-Modifying
-.B M_TRIM_THRESHOLD
-is a trade-off between increasing the number of system calls
-(when the parameter is set low)
-and wasting unused memory at the top of the heap
-(when the parameter is set high).
-.\"
-.SS Environment variables
-A number of environment variables can be defined
-to modify some of the same parameters as are controlled by
-.BR mallopt ().
-Using these variables has the advantage that the source code
-of the program need not be changed.
-To be effective, these variables must be defined before the
-first call to a memory-allocation function.
-(If the same parameters are adjusted via
-.BR mallopt (),
-then the
-.BR mallopt ()
-settings take precedence.)
-For security reasons,
-these variables are ignored in set-user-ID and set-group-ID programs.
-.PP
-The environment variables are as follows
-(note the trailing underscore at the end of the name of some variables):
-.TP
-.B MALLOC_ARENA_MAX
-Controls the same parameter as
-.BR mallopt ()
-.BR M_ARENA_MAX .
-.TP
-.B MALLOC_ARENA_TEST
-Controls the same parameter as
-.BR mallopt ()
-.BR M_ARENA_TEST .
-.TP
-.B MALLOC_CHECK_
-This environment variable controls the same parameter as
-.BR mallopt ()
-.BR M_CHECK_ACTION .
-If this variable is set to a nonzero value,
-then a special implementation of the memory-allocation functions is used.
-(This is accomplished using the
-.BR malloc_hook (3)
-feature.)
-This implementation performs additional error checking,
-but is slower
-.\" On glibc 2.12/x86, a simple malloc()+free() loop is about 70% slower
-.\" when MALLOC_CHECK_ was set.
-than the standard set of memory-allocation functions.
-(This implementation does not detect all possible errors;
-memory leaks can still occur.)
-.IP
-The value assigned to this environment variable should be a single digit,
-whose meaning is as described for
-.BR M_CHECK_ACTION .
-Any characters beyond the initial digit are ignored.
-.IP
-For security reasons, the effect of
-.B MALLOC_CHECK_
-is disabled by default for set-user-ID and set-group-ID programs.
-However, if the file
-.I /etc/suid\-debug
-exists (the content of the file is irrelevant), then
-.B MALLOC_CHECK_
-also has an effect for set-user-ID and set-group-ID programs.
-.TP
-.B MALLOC_MMAP_MAX_
-Controls the same parameter as
-.BR mallopt ()
-.BR M_MMAP_MAX .
-.TP
-.B MALLOC_MMAP_THRESHOLD_
-Controls the same parameter as
-.BR mallopt ()
-.BR M_MMAP_THRESHOLD .
-.TP
-.B MALLOC_PERTURB_
-Controls the same parameter as
-.BR mallopt ()
-.BR M_PERTURB .
-.TP
-.B MALLOC_TRIM_THRESHOLD_
-Controls the same parameter as
-.BR mallopt ()
-.BR M_TRIM_THRESHOLD .
-.TP
-.B MALLOC_TOP_PAD_
-Controls the same parameter as
-.BR mallopt ()
-.BR M_TOP_PAD .
-.SH RETURN VALUE
-On success,
-.BR mallopt ()
-returns 1.
-On error, it returns 0.
-.SH ERRORS
-On error,
-.I errno
-is
-.I not
-set.
-.SH VERSIONS
-A similar function exists on many System V derivatives,
-but the range of values for
-.I param
-varies across systems.
-The SVID defined options
-.BR M_MXFAST ,
-.BR M_NLBLKS ,
-.BR M_GRAIN ,
-and
-.BR M_KEEP ,
-but only the first of these is implemented in glibc.
-.SH STANDARDS
-None.
-.SH HISTORY
-glibc 2.0.
-.SH BUGS
-Specifying an invalid value for
-.I param
-does not generate an error.
-.PP
-A calculation error within the glibc implementation means that
-a call of the form:
-.\" FIXME . This looks buggy:
-.\" setting the M_MXFAST limit rounds up: (s + SIZE_SZ) & ~MALLOC_ALIGN_MASK)
-.\" malloc requests are rounded up:
-.\" (req) + SIZE_SZ + MALLOC_ALIGN_MASK) & ~MALLOC_ALIGN_MASK
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=12129
-.PP
-.in +4n
-.EX
-mallopt(M_MXFAST, n)
-.EE
-.in
-.PP
-does not result in fastbins being employed for all allocations of size up to
-.IR n .
-To ensure desired results,
-.I n
-should be rounded up to the next multiple greater than or equal to
-.IR (2k+1)*sizeof(size_t) ,
-where
-.I k
-is an integer.
-.\" Bins are multiples of 2 * sizeof(size_t) + sizeof(size_t)
-.PP
-If
-.BR mallopt ()
-is used to set
-.BR M_PERTURB ,
-then, as expected, the bytes of allocated memory are initialized
-to the complement of the byte in
-.IR value ,
-and when that memory is freed,
-the bytes of the region are initialized to the byte specified in
-.IR value .
-However, there is an
-.RI off-by- sizeof(size_t)
-error in the implementation:
-.\" FIXME . https://www.sourceware.org/bugzilla/show_bug.cgi?id=12140
-instead of initializing precisely the block of memory
-being freed by the call
-.IR free(p) ,
-the block starting at
-.I p+sizeof(size_t)
-is initialized.
-.SH EXAMPLES
-The program below demonstrates the use of
-.BR M_CHECK_ACTION .
-If the program is supplied with an (integer) command-line argument,
-then that argument is used to set the
-.B M_CHECK_ACTION
-parameter.
-The program then allocates a block of memory,
-and frees it twice (an error).
-.PP
-The following shell session shows what happens when we run this program
-under glibc, with the default value for
-.BR M_CHECK_ACTION :
-.PP
-.in +4n
-.EX
-$ \fB./a.out\fP
-main(): returned from first free() call
-*** glibc detected *** ./a.out: double free or corruption (top): 0x09d30008 ***
-======= Backtrace: =========
-/lib/libc.so.6(+0x6c501)[0x523501]
-/lib/libc.so.6(+0x6dd70)[0x524d70]
-/lib/libc.so.6(cfree+0x6d)[0x527e5d]
-\&./a.out[0x80485db]
-/lib/libc.so.6(__libc_start_main+0xe7)[0x4cdce7]
-\&./a.out[0x8048471]
-======= Memory map: ========
-001e4000\-001fe000 r\-xp 00000000 08:06 1083555 /lib/libgcc_s.so.1
-001fe000\-001ff000 r\-\-p 00019000 08:06 1083555 /lib/libgcc_s.so.1
-[some lines omitted]
-b7814000\-b7817000 rw\-p 00000000 00:00 0
-bff53000\-bff74000 rw\-p 00000000 00:00 0 [stack]
-Aborted (core dumped)
-.EE
-.in
-.PP
-The following runs show the results when employing other values for
-.BR M_CHECK_ACTION :
-.PP
-.in +4n
-.EX
-$ \fB./a.out 1\fP # Diagnose error and continue
-main(): returned from first free() call
-*** glibc detected *** ./a.out: double free or corruption (top): 0x09cbe008 ***
-main(): returned from second free() call
-$ \fB./a.out 2\fP # Abort without error message
-main(): returned from first free() call
-Aborted (core dumped)
-$ \fB./a.out 0\fP # Ignore error and continue
-main(): returned from first free() call
-main(): returned from second free() call
-.EE
-.in
-.PP
-The next run shows how to set the same parameter using the
-.B MALLOC_CHECK_
-environment variable:
-.PP
-.in +4n
-.EX
-$ \fBMALLOC_CHECK_=1 ./a.out\fP
-main(): returned from first free() call
-*** glibc detected *** ./a.out: free(): invalid pointer: 0x092c2008 ***
-main(): returned from second free() call
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (mallopt.c)
-.EX
-#include <malloc.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(int argc, char *argv[])
-{
- char *p;
-\&
- if (argc > 1) {
- if (mallopt(M_CHECK_ACTION, atoi(argv[1])) != 1) {
- fprintf(stderr, "mallopt() failed");
- exit(EXIT_FAILURE);
- }
- }
-\&
- p = malloc(1000);
- if (p == NULL) {
- fprintf(stderr, "malloc() failed");
- exit(EXIT_FAILURE);
- }
-\&
- free(p);
- printf("%s(): returned from first free() call\en", __func__);
-\&
- free(p);
- printf("%s(): returned from second free() call\en", __func__);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.ad l
-.nh
-.BR mmap (2),
-.BR sbrk (2),
-.BR mallinfo (3),
-.BR malloc (3),
-.BR malloc_hook (3),
-.BR malloc_info (3),
-.BR malloc_stats (3),
-.BR malloc_trim (3),
-.BR mcheck (3),
-.BR mtrace (3),
-.BR posix_memalign (3)
diff --git a/man3/matherr.3 b/man3/matherr.3
deleted file mode 100644
index 5447775c0..000000000
--- a/man3/matherr.3
+++ /dev/null
@@ -1,431 +0,0 @@
-'\" t
-.\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH matherr 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-matherr \- SVID math library exception handling
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "[[deprecated]] int matherr(struct exception *" exc );
-.PP
-.B [[deprecated]] extern _LIB_VERSION_TYPE _LIB_VERSION;
-.fi
-.SH DESCRIPTION
-.IR Note :
-the mechanism described in this page is no longer supported by glibc.
-Before glibc 2.27, it had been marked as obsolete.
-Since glibc 2.27,
-.\" glibc commit 813378e9fe17e029caf627cab76fe23eb46815fa
-the mechanism has been removed altogether.
-New applications should use the techniques described in
-.BR math_error (7)
-and
-.BR fenv (3).
-This page documents the
-.BR matherr ()
-mechanism as an aid for maintaining and porting older applications.
-.PP
-The System V Interface Definition (SVID) specifies that various
-math functions should invoke a function called
-.BR matherr ()
-if a math exception is detected.
-This function is called before the math function returns;
-after
-.BR matherr ()
-returns, the system then returns to the math function,
-which in turn returns to the caller.
-.PP
-To employ
-.BR matherr (),
-the programmer must define the
-.B _SVID_SOURCE
-feature test macro
-(before including
-.I any
-header files),
-and assign the value
-.B _SVID_
-to the external variable
-.BR _LIB_VERSION .
-.PP
-The system provides a default version of
-.BR matherr ().
-This version does nothing, and returns zero
-(see below for the significance of this).
-The default
-.BR matherr ()
-can be overridden by a programmer-defined
-version, which will be invoked when an exception occurs.
-The function is invoked with one argument, a pointer to an
-.I exception
-structure, defined as follows:
-.PP
-.in +4n
-.EX
-struct exception {
- int type; /* Exception type */
- char *name; /* Name of function causing exception */
- double arg1; /* 1st argument to function */
- double arg2; /* 2nd argument to function */
- double retval; /* Function return value */
-}
-.EE
-.in
-.PP
-The
-.I type
-field has one of the following values:
-.TP 12
-.B DOMAIN
-A domain error occurred (the function argument was outside the range
-for which the function is defined).
-The return value depends on the function;
-.I errno
-is set to
-.BR EDOM .
-.TP
-.B SING
-A pole error occurred (the function result is an infinity).
-The return value in most cases is
-.B HUGE
-(the largest single precision floating-point number),
-appropriately signed.
-In most cases,
-.I errno
-is set to
-.BR EDOM .
-.TP
-.B OVERFLOW
-An overflow occurred.
-In most cases, the value
-.B HUGE
-is returned, and
-.I errno
-is set to
-.BR ERANGE .
-.TP
-.B UNDERFLOW
-An underflow occurred.
-0.0 is returned, and
-.I errno
-is set to
-.BR ERANGE .
-.TP
-.B TLOSS
-Total loss of significance.
-0.0 is returned, and
-.I errno
-is set to
-.BR ERANGE .
-.TP
-.B PLOSS
-Partial loss of significance.
-This value is unused on glibc
-(and many other systems).
-.PP
-The
-.I arg1
-and
-.I arg2
-fields are the arguments supplied to the function
-.RI ( arg2
-is undefined for functions that take only one argument).
-.PP
-The
-.I retval
-field specifies the return value that the math
-function will return to its caller.
-The programmer-defined
-.BR matherr ()
-can modify this field to change the return value of the math function.
-.PP
-If the
-.BR matherr ()
-function returns zero, then the system sets
-.I errno
-as described above, and may print an error message on standard error
-(see below).
-.PP
-If the
-.BR matherr ()
-function returns a nonzero value, then the system does not set
-.IR errno ,
-and doesn't print an error message.
-.SS Math functions that employ matherr()
-The table below lists the functions and circumstances in which
-.BR matherr ()
-is called.
-The "Type" column indicates the value assigned to
-.I exc\->type
-when calling
-.BR matherr ().
-The "Result" column is the default return value assigned to
-.IR exc\->retval .
-.PP
-The "Msg?" and "errno" columns describe the default behavior if
-.BR matherr ()
-returns zero.
-If the "Msg?" columns contains "y",
-then the system prints an error message on standard error.
-.PP
-The table uses the following notations and abbreviations:
-.PP
-.RS
-.TS
-l l.
-x first argument to function
-y second argument to function
-fin finite value for argument
-neg negative value for argument
-int integral value for argument
-o/f result overflowed
-u/f result underflowed
-|x| absolute value of x
-X_TLOSS is a constant defined in \fI<math.h>\fP
-.TE
-.RE
-.\" Details below from glibc 2.8's sysdeps/ieee754/k_standard.c
-.\" A subset of cases were test by experimental programs.
-.TS
-lB lB lB cB lB
-l l l c l.
-Function Type Result Msg? errno
-acos(|x|>1) DOMAIN HUGE y EDOM
-asin(|x|>1) DOMAIN HUGE y EDOM
-atan2(0,0) DOMAIN HUGE y EDOM
-acosh(x<1) DOMAIN NAN y EDOM \" retval is 0.0/0.0
-atanh(|x|>1) DOMAIN NAN y EDOM \" retval is 0.0/0.0
-atanh(|x|==1) SING (x>0.0)? y EDOM \" retval is x/0.0
-\ \ HUGE_VAL :
-\ \ \-HUGE_VAL
-cosh(fin) o/f OVERFLOW HUGE n ERANGE
-sinh(fin) o/f OVERFLOW (x>0.0) ? n ERANGE
-\ \ HUGE : \-HUGE
-sqrt(x<0) DOMAIN 0.0 y EDOM
-hypot(fin,fin) o/f OVERFLOW HUGE n ERANGE
-exp(fin) o/f OVERFLOW HUGE n ERANGE
-exp(fin) u/f UNDERFLOW 0.0 n ERANGE
-exp2(fin) o/f OVERFLOW HUGE n ERANGE
-exp2(fin) u/f UNDERFLOW 0.0 n ERANGE
-exp10(fin) o/f OVERFLOW HUGE n ERANGE
-exp10(fin) u/f UNDERFLOW 0.0 n ERANGE
-j0(|x|>X_TLOSS) TLOSS 0.0 y ERANGE
-j1(|x|>X_TLOSS) TLOSS 0.0 y ERANGE
-jn(|x|>X_TLOSS) TLOSS 0.0 y ERANGE
-y0(x>X_TLOSS) TLOSS 0.0 y ERANGE
-y1(x>X_TLOSS) TLOSS 0.0 y ERANGE
-yn(x>X_TLOSS) TLOSS 0.0 y ERANGE
-y0(0) DOMAIN \-HUGE y EDOM
-y0(x<0) DOMAIN \-HUGE y EDOM
-y1(0) DOMAIN \-HUGE y EDOM
-y1(x<0) DOMAIN \-HUGE y EDOM
-yn(n,0) DOMAIN \-HUGE y EDOM
-yn(x<0) DOMAIN \-HUGE y EDOM
-lgamma(fin) o/f OVERFLOW HUGE n ERANGE
-lgamma(\-int) or SING HUGE y EDOM
-\ \ lgamma(0)
-tgamma(fin) o/f OVERFLOW HUGE_VAL n ERANGE
-tgamma(\-int) SING NAN y EDOM
-tgamma(0) SING copysign( y ERANGE
-\ \ HUGE_VAL,x)
-log(0) SING \-HUGE y EDOM
-log(x<0) DOMAIN \-HUGE y EDOM
-log2(0) SING \-HUGE n EDOM \" different from log()
-log2(x<0) DOMAIN \-HUGE n EDOM \" different from log()
-log10(0) SING \-HUGE y EDOM
-log10(x<0) DOMAIN \-HUGE y EDOM
-pow(0.0,0.0) DOMAIN 0.0 y EDOM
-pow(x,y) o/f OVERFLOW HUGE n ERANGE
-pow(x,y) u/f UNDERFLOW 0.0 n ERANGE
-pow(NaN,0.0) DOMAIN x n EDOM
-0**neg DOMAIN 0.0 y EDOM \" +0 and -0
-neg**non-int DOMAIN 0.0 y EDOM
-scalb() o/f OVERFLOW (x>0.0) ? n ERANGE
-\ \ HUGE_VAL :
-\ \ \-HUGE_VAL
-scalb() u/f UNDERFLOW copysign( n ERANGE
-\ \ \ \ 0.0,x)
-fmod(x,0) DOMAIN x y EDOM
-remainder(x,0) DOMAIN NAN y EDOM \" retval is 0.0/0.0
-.TE
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR matherr ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH EXAMPLES
-The example program demonstrates the use of
-.BR matherr ()
-when calling
-.BR log (3).
-The program takes up to three command-line arguments.
-The first argument is the floating-point number to be given to
-.BR log (3).
-If the optional second argument is provided, then
-.B _LIB_VERSION
-is set to
-.B _SVID_
-so that
-.BR matherr ()
-is called, and the integer supplied in the
-command-line argument is used as the return value from
-.BR matherr ().
-If the optional third command-line argument is supplied,
-then it specifies an alternative return value that
-.BR matherr ()
-should assign as the return value of the math function.
-.PP
-The following example run, where
-.BR log (3)
-is given an argument of 0.0, does not use
-.BR matherr ():
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out 0.0"
-errno: Numerical result out of range
-x=\-inf
-.EE
-.in
-.PP
-In the following run,
-.BR matherr ()
-is called, and returns 0:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out 0.0 0"
-matherr SING exception in log() function
- args: 0.000000, 0.000000
- retval: \-340282346638528859811704183484516925440.000000
-log: SING error
-errno: Numerical argument out of domain
-x=\-340282346638528859811704183484516925440.000000
-.EE
-.in
-.PP
-The message "log: SING error" was printed by the C library.
-.PP
-In the following run,
-.BR matherr ()
-is called, and returns a nonzero value:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out 0.0 1"
-matherr SING exception in log() function
- args: 0.000000, 0.000000
- retval: \-340282346638528859811704183484516925440.000000
-x=\-340282346638528859811704183484516925440.000000
-.EE
-.in
-.PP
-In this case, the C library did not print a message, and
-.I errno
-was not set.
-.PP
-In the following run,
-.BR matherr ()
-is called, changes the return value of the math function,
-and returns a nonzero value:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out 0.0 1 12345.0"
-matherr SING exception in log() function
- args: 0.000000, 0.000000
- retval: \-340282346638528859811704183484516925440.000000
-x=12345.000000
-.EE
-.in
-.SS Program source
-\&
-.\" [[deprecated]] SRC BEGIN (matherr.c)
-.EX
-#define _SVID_SOURCE
-#include <errno.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-static int matherr_ret = 0; /* Value that matherr()
- should return */
-static int change_retval = 0; /* Should matherr() change
- function\[aq]s return value? */
-static double new_retval; /* New function return value */
-\&
-int
-matherr(struct exception *exc)
-{
- fprintf(stderr, "matherr %s exception in %s() function\en",
- (exc\->type == DOMAIN) ? "DOMAIN" :
- (exc\->type == OVERFLOW) ? "OVERFLOW" :
- (exc\->type == UNDERFLOW) ? "UNDERFLOW" :
- (exc\->type == SING) ? "SING" :
- (exc\->type == TLOSS) ? "TLOSS" :
- (exc\->type == PLOSS) ? "PLOSS" : "???",
- exc\->name);
- fprintf(stderr, " args: %f, %f\en",
- exc\->arg1, exc\->arg2);
- fprintf(stderr, " retval: %f\en", exc\->retval);
-\&
- if (change_retval)
- exc\->retval = new_retval;
-\&
- return matherr_ret;
-}
-\&
-int
-main(int argc, char *argv[])
-{
- double x;
-\&
- if (argc < 2) {
- fprintf(stderr, "Usage: %s <argval>"
- " [<matherr\-ret> [<new\-func\-retval>]]\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- if (argc > 2) {
- _LIB_VERSION = _SVID_;
- matherr_ret = atoi(argv[2]);
- }
-\&
- if (argc > 3) {
- change_retval = 1;
- new_retval = atof(argv[3]);
- }
-\&
- x = log(atof(argv[1]));
- if (errno != 0)
- perror("errno");
-\&
- printf("x=%f\en", x);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR fenv (3),
-.BR math_error (7),
-.BR standards (7)
diff --git a/man3/mblen.3 b/man3/mblen.3
deleted file mode 100644
index e02c5f09a..000000000
--- a/man3/mblen.3
+++ /dev/null
@@ -1,120 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH mblen 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mblen \- determine number of bytes in next multibyte character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int mblen(const char " s [. n "], size_t " n );
-.fi
-.SH DESCRIPTION
-If
-.I s
-is not NULL, the
-.BR mblen ()
-function inspects at most
-.I n
-bytes of the multibyte string starting at
-.I s
-and extracts the
-next complete multibyte character.
-It uses a static anonymous shift state known only to the
-.BR mblen ()
-function.
-If the multibyte character is not the null wide
-character, it returns the number of bytes that were consumed from
-.IR s .
-If the multibyte character is the null wide character, it returns 0.
-.PP
-If the
-.I n
-bytes starting at
-.I s
-do not contain a complete multibyte
-character,
-.BR mblen ()
-returns \-1.
-This can happen even if
-.I n
-is greater than or equal to
-.IR MB_CUR_MAX ,
-if the multibyte string contains redundant shift sequences.
-.PP
-If the multibyte string starting at
-.I s
-contains an invalid multibyte
-sequence before the next complete character,
-.BR mblen ()
-also returns \-1.
-.PP
-If
-.I s
-is NULL, the
-.BR mblen ()
-function
-.\" The Dinkumware doc and the Single UNIX specification say this, but
-.\" glibc doesn't implement this.
-resets the shift state, known to only this function, to the initial state, and
-returns nonzero if the encoding has nontrivial shift state, or zero if the
-encoding is stateless.
-.SH RETURN VALUE
-The
-.BR mblen ()
-function returns the number of
-bytes parsed from the multibyte
-sequence starting at
-.IR s ,
-if a non-null wide character was recognized.
-It returns 0, if a null wide character was recognized.
-It returns \-1, if an
-invalid multibyte sequence was encountered or if it couldn't parse a complete
-multibyte character.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mblen ()
-T} Thread safety MT-Unsafe race
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The function
-.BR mbrlen (3)
-provides a better interface to the same
-functionality.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR mblen ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR mbrlen (3)
diff --git a/man3/mbrlen.3 b/man3/mbrlen.3
deleted file mode 100644
index b9613535e..000000000
--- a/man3/mbrlen.3
+++ /dev/null
@@ -1,133 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH mbrlen 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mbrlen \- determine number of bytes in next multibyte character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "size_t mbrlen(const char " s "[restrict ." n "], size_t " n ,
-.BI " mbstate_t *restrict " ps );
-.fi
-.SH DESCRIPTION
-The
-.BR mbrlen ()
-function inspects at most
-.I n
-bytes of the multibyte
-string starting at
-.I s
-and extracts the next complete multibyte character.
-It updates the shift state
-.IR *ps .
-If the multibyte character is not the
-null wide character, it returns the number of bytes that were consumed from
-.IR s .
-If the multibyte character is the null wide character, it resets the
-shift state
-.I *ps
-to the initial state and returns 0.
-.PP
-If the
-.I n
-bytes starting at
-.I s
-do not contain a complete multibyte
-character,
-.BR mbrlen ()
-returns
-.IR "(size_t)\ \-2" .
-This can happen even if
-.I n
->=
-.IR MB_CUR_MAX ,
-if the multibyte string contains redundant shift
-sequences.
-.PP
-If the multibyte string starting at
-.I s
-contains an invalid multibyte
-sequence before the next complete character,
-.BR mbrlen ()
-returns
-.I (size_t)\ \-1
-and sets
-.I errno
-to
-.BR EILSEQ .
-In this case,
-the effects on
-.I *ps
-are undefined.
-.PP
-If
-.I ps
-is NULL, a static anonymous state known only to the
-.BR mbrlen ()
-function is used instead.
-.SH RETURN VALUE
-The
-.BR mbrlen ()
-function returns the number of bytes
-parsed from the multibyte
-sequence starting at
-.IR s ,
-if a non-null wide character was recognized.
-It returns 0, if a null wide character was recognized.
-It returns
-.I "(size_t)\ \-1"
-and sets
-.I errno
-to
-.BR EILSEQ ,
-if an invalid multibyte sequence was
-encountered.
-It returns
-.I (size_t)\ \-2
-if it couldn't parse a complete multibyte
-character, meaning that
-.I n
-should be increased.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mbrlen ()
-T} Thread safety MT-Unsafe race:mbrlen/!ps
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR mbrlen ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR mbrtowc (3)
diff --git a/man3/mbrtowc.3 b/man3/mbrtowc.3
deleted file mode 100644
index 6248621a1..000000000
--- a/man3/mbrtowc.3
+++ /dev/null
@@ -1,204 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification
-.\" http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH mbrtowc 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mbrtowc \- convert a multibyte sequence to a wide character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "size_t mbrtowc(wchar_t *restrict " pwc ", const char " s "[restrict ." n ],
-.BI " size_t " n ", mbstate_t *restrict " ps );
-.fi
-.SH DESCRIPTION
-The main case for this function is when
-.I s
-is not NULL and
-.I pwc
-is
-not NULL.
-In this case, the
-.BR mbrtowc ()
-function inspects at most
-.I n
-bytes of the multibyte string starting at
-.IR s ,
-extracts the next complete
-multibyte character, converts it to a wide character and stores it at
-.IR *pwc .
-It updates the shift state
-.IR *ps .
-If the converted wide
-character is not L\[aq]\e0\[aq] (the null wide character),
-it returns the number of bytes that were consumed
-from
-.IR s .
-If the converted wide character is L\[aq]\e0\[aq], it resets the shift
-state
-.I *ps
-to the initial state and returns 0.
-.PP
-If the
-.I n
-bytes starting at
-.I s
-do not contain a complete multibyte
-character,
-.BR mbrtowc ()
-returns
-.IR "(size_t)\ \-2" .
-This can happen even if
-.I n
->=
-.IR MB_CUR_MAX ,
-if the multibyte string contains redundant shift
-sequences.
-.PP
-If the multibyte string starting at
-.I s
-contains an invalid multibyte
-sequence before the next complete character,
-.BR mbrtowc ()
-returns
-.I (size_t)\ \-1
-and sets
-.I errno
-to
-.BR EILSEQ .
-In this case,
-the effects on
-.I *ps
-are undefined.
-.PP
-A different case is when
-.I s
-is not NULL but
-.I pwc
-is NULL.
-In this case, the
-.BR mbrtowc ()
-function behaves as above, except that it does not
-store the converted wide character in memory.
-.PP
-A third case is when
-.I s
-is NULL.
-In this case,
-.I pwc
-and
-.I n
-are
-ignored.
-If the conversion state represented by
-.I *ps
-denotes an
-incomplete multibyte character conversion, the
-.BR mbrtowc ()
-function
-returns
-.IR "(size_t)\ \-1" ,
-sets
-.I errno
-to
-.BR EILSEQ ,
-and
-leaves
-.I *ps
-in an undefined state.
-Otherwise, the
-.BR mbrtowc ()
-function
-puts
-.I *ps
-in the initial state and returns 0.
-.PP
-In all of the above cases, if
-.I ps
-is NULL, a static anonymous
-state known only to the
-.BR mbrtowc ()
-function is used instead.
-Otherwise,
-.I *ps
-must be a valid
-.I mbstate_t
-object.
-An
-.I mbstate_t
-object
-.I a
-can be initialized to the initial state
-by zeroing it, for example using
-.PP
-.in +4n
-.EX
-memset(&a, 0, sizeof(a));
-.EE
-.in
-.SH RETURN VALUE
-The
-.BR mbrtowc ()
-function returns the number of bytes parsed from the
-multibyte sequence starting at
-.IR s ,
-if a non-L\[aq]\e0\[aq] wide character
-was recognized.
-It returns 0, if a L\[aq]\e0\[aq] wide character was recognized.
-It returns
-.I (size_t)\ \-1
-and sets
-.I errno
-to
-.BR EILSEQ ,
-if an invalid multibyte sequence was
-encountered.
-It returns
-.I "(size_t)\ \-2"
-if it couldn't parse a complete multibyte
-character, meaning that
-.I n
-should be increased.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mbrtowc ()
-T} Thread safety MT-Unsafe race:mbrtowc/!ps
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR mbrtowc ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR mbsinit (3),
-.BR mbsrtowcs (3)
diff --git a/man3/mbsinit.3 b/man3/mbsinit.3
deleted file mode 100644
index db8d28570..000000000
--- a/man3/mbsinit.3
+++ /dev/null
@@ -1,120 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH mbsinit 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mbsinit \- test for initial shift state
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "int mbsinit(const mbstate_t *" ps );
-.fi
-.SH DESCRIPTION
-Character conversion between the multibyte representation and the wide
-character representation uses conversion state, of type
-.IR mbstate_t .
-Conversion of a string uses a finite-state machine; when it is interrupted
-after the complete conversion of a number of characters, it may need to
-save a state for processing the remaining characters.
-Such a conversion
-state is needed for the sake of encodings such as ISO-2022 and UTF-7.
-.PP
-The initial state is the state at the beginning of conversion of a string.
-There are two kinds of state: the one used by multibyte to wide character
-conversion functions, such as
-.BR mbsrtowcs (3),
-and the one used by wide
-character to multibyte conversion functions, such as
-.BR wcsrtombs (3),
-but they both fit in a
-.IR mbstate_t ,
-and they both have the same
-representation for an initial state.
-.PP
-For 8-bit encodings, all states are equivalent to the initial state.
-For multibyte encodings like UTF-8, EUC-*, BIG5, or SJIS, the wide character
-to multibyte conversion functions never produce non-initial states, but the
-multibyte to wide-character conversion functions like
-.BR mbrtowc (3)
-do
-produce non-initial states when interrupted in the middle of a character.
-.PP
-One possible way to create an
-.I mbstate_t
-in initial state is to set it to zero:
-.PP
-.in +4n
-.EX
-mbstate_t state;
-memset(&state, 0, sizeof(state));
-.EE
-.in
-.PP
-On Linux, the following works as well, but might generate compiler warnings:
-.PP
-.in +4n
-.EX
-mbstate_t state = { 0 };
-.EE
-.in
-.PP
-The function
-.BR mbsinit ()
-tests whether
-.I *ps
-corresponds to an
-initial state.
-.SH RETURN VALUE
-.BR mbsinit ()
-returns nonzero if
-.I *ps
-is an initial state, or if
-.I ps
-is NULL.
-Otherwise, it returns 0.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mbsinit ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR mbsinit ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR mbrlen (3),
-.BR mbrtowc (3),
-.BR mbsrtowcs (3),
-.BR wcrtomb (3),
-.BR wcsrtombs (3)
diff --git a/man3/mbsnrtowcs.3 b/man3/mbsnrtowcs.3
deleted file mode 100644
index 2ec6a0ee0..000000000
--- a/man3/mbsnrtowcs.3
+++ /dev/null
@@ -1,200 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\"
-.TH mbsnrtowcs 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mbsnrtowcs \- convert a multibyte string to a wide-character string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "size_t mbsnrtowcs(wchar_t " dest "[restrict ." len "], const char **restrict " src ,
-.BI " size_t " nms ", size_t " len \
-", mbstate_t *restrict " ps );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR mbsnrtowcs ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR mbsnrtowcs ()
-function is like the
-.BR mbsrtowcs (3)
-function, except that
-the number of bytes to be converted, starting at
-.IR *src ,
-is limited to at most
-.I nms
-bytes.
-.PP
-If
-.I dest
-is not NULL, the
-.BR mbsnrtowcs ()
-function converts at
-most
-.I nms
-bytes from the
-multibyte string
-.I *src
-to a wide-character string starting at
-.IR dest .
-At most
-.I len
-wide characters are written to
-.IR dest .
-The shift state
-.I *ps
-is updated.
-The conversion is effectively performed by repeatedly
-calling
-.I "mbrtowc(dest, *src, n, ps)"
-where
-.I n
-is some
-positive number, as long as this call succeeds, and then incrementing
-.I dest
-by one and
-.I *src
-by the number of bytes consumed.
-The
-conversion can stop for three reasons:
-.IP \[bu] 3
-An invalid multibyte sequence has been encountered.
-In this case,
-.I *src
-is left pointing to the invalid multibyte sequence,
-.I (size_t)\ \-1
-is returned,
-and
-.I errno
-is set to
-.BR EILSEQ .
-.IP \[bu]
-The
-.I nms
-limit forces a stop,
-or
-.I len
-non-L\[aq]\e0\[aq] wide characters
-have been stored at
-.IR dest .
-In this case,
-.I *src
-is left pointing to the
-next multibyte sequence to be converted, and the number of wide characters
-written to
-.I dest
-is returned.
-.IP \[bu]
-The multibyte string has been completely converted, including the
-terminating null wide character (\[aq]\e0\[aq])
-(which has the side effect of bringing back
-.I *ps
-to the
-initial state).
-In this case,
-.I *src
-is set to NULL, and the number of wide
-characters written to
-.IR dest ,
-excluding the terminating null wide character,
-is returned.
-.PP
-According to POSIX.1,
-if the input buffer ends with an incomplete character,
-it is unspecified whether conversion stops at the end of
-the previous character (if any), or at the end of the input buffer.
-The glibc implementation adopts the former behavior.
-.PP
-If
-.I dest
-is NULL,
-.I len
-is ignored, and the conversion proceeds as
-above, except that the converted wide characters
-are not written out to memory,
-and that no destination length limit exists.
-.PP
-In both of the above cases, if
-.I ps
-is NULL, a static anonymous
-state known only to the
-.BR mbsnrtowcs ()
-function is used instead.
-.PP
-The programmer must ensure that there is room for at least
-.I len
-wide
-characters at
-.IR dest .
-.SH RETURN VALUE
-The
-.BR mbsnrtowcs ()
-function returns the number of wide characters
-that make up the converted part of the wide-character string,
-not including the terminating null wide character.
-If an invalid multibyte sequence was
-encountered,
-.I (size_t)\ \-1
-is returned, and
-.I errno
-set to
-.BR EILSEQ .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR mbsnrtowcs ()
-T} Thread safety T{
-MT-Unsafe race:mbsnrtowcs/!ps
-T}
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH NOTES
-The behavior of
-.BR mbsnrtowcs ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.PP
-Passing NULL as
-.I ps
-is not multithread safe.
-.SH SEE ALSO
-.BR iconv (3),
-.BR mbrtowc (3),
-.BR mbsinit (3),
-.BR mbsrtowcs (3)
diff --git a/man3/mbsrtowcs.3 b/man3/mbsrtowcs.3
deleted file mode 100644
index 1d2b2e1ed..000000000
--- a/man3/mbsrtowcs.3
+++ /dev/null
@@ -1,164 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH mbsrtowcs 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mbsrtowcs \- convert a multibyte string to a wide-character string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "size_t mbsrtowcs(wchar_t " dest "[restrict ." len "], const char **restrict " src ,
-.BI " size_t " len ", mbstate_t *restrict " ps );
-.fi
-.SH DESCRIPTION
-If
-.I dest
-is not NULL, the
-.BR mbsrtowcs ()
-function converts the
-multibyte string
-.I *src
-to a wide-character string starting at
-.IR dest .
-At most
-.I len
-wide characters are written to
-.IR dest .
-The shift state
-.I *ps
-is updated.
-The conversion is effectively performed by repeatedly
-calling
-.I "mbrtowc(dest, *src, n, ps)"
-where
-.I n
-is some
-positive number, as long as this call succeeds, and then incrementing
-.I dest
-by one and
-.I *src
-by the number of bytes consumed.
-The conversion can stop for three reasons:
-.IP \[bu] 3
-An invalid multibyte sequence has been encountered.
-In this case,
-.I *src
-is left pointing to the invalid multibyte sequence,
-.I (size_t)\ \-1
-is returned,
-and
-.I errno
-is set to
-.BR EILSEQ .
-.IP \[bu]
-.I len
-non-L\[aq]\e0\[aq] wide characters have been stored at
-.IR dest .
-In this case,
-.I *src
-is left pointing to the next
-multibyte sequence to be converted,
-and the number of wide characters written to
-.I dest
-is returned.
-.IP \[bu]
-The multibyte string has been completely converted, including the
-terminating null wide character (\[aq]\e0\[aq]), which has the side
-effect of bringing back
-.I *ps
-to the
-initial state.
-In this case,
-.I *src
-is set to NULL, and the number of wide
-characters written to
-.IR dest ,
-excluding the terminating null wide character, is returned.
-.PP
-If
-.I dest
-is NULL,
-.I len
-is ignored,
-and the conversion proceeds as above,
-except that the converted wide characters are not written out to memory,
-and that no length limit exists.
-.PP
-In both of the above cases,
-if
-.I ps
-is NULL, a static anonymous
-state known only to the
-.BR mbsrtowcs ()
-function is used instead.
-.PP
-The programmer must ensure that there is room for at least
-.I len
-wide
-characters at
-.IR dest .
-.SH RETURN VALUE
-The
-.BR mbsrtowcs ()
-function returns the number of wide characters that make
-up the converted part of the wide-character string, not including the
-terminating null wide character.
-If an invalid multibyte sequence was
-encountered,
-.I (size_t)\ \-1
-is returned, and
-.I errno
-set to
-.BR EILSEQ .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR mbsrtowcs ()
-T} Thread safety T{
-MT-Unsafe race:mbsrtowcs/!ps
-T}
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR mbsrtowcs ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.PP
-Passing NULL as
-.I ps
-is not multithread safe.
-.SH SEE ALSO
-.BR iconv (3),
-.BR mbrtowc (3),
-.BR mbsinit (3),
-.BR mbsnrtowcs (3),
-.BR mbstowcs (3)
diff --git a/man3/mbstowcs.3 b/man3/mbstowcs.3
deleted file mode 100644
index 19651ea57..000000000
--- a/man3/mbstowcs.3
+++ /dev/null
@@ -1,244 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\" and Copyright 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH mbstowcs 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mbstowcs \- convert a multibyte string to a wide-character string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "size_t mbstowcs(wchar_t " dest "[restrict ." n "], \
-const char *restrict " src ,
-.BI " size_t " n );
-.fi
-.SH DESCRIPTION
-If
-.I dest
-is not NULL,
-the
-.BR mbstowcs ()
-function converts the
-multibyte string
-.I src
-to a wide-character string starting at
-.IR dest .
-At most
-.I n
-wide characters are written to
-.IR dest .
-The sequence of characters in the string
-.I src
-shall begin in the initial shift state.
-The conversion can stop for three reasons:
-.IP \[bu] 3
-An invalid multibyte sequence has been encountered.
-In this case,
-.I (size_t)\ \-1
-is returned.
-.IP \[bu]
-.I n
-non-L\[aq]\e0\[aq] wide characters have been stored at
-.IR dest .
-In this case, the number of wide characters written to
-.I dest
-is returned, but the
-shift state at this point is lost.
-.IP \[bu]
-The multibyte string has been completely converted, including the
-terminating null character (\[aq]\e0\[aq]).
-In this case, the number of wide characters written to
-.IR dest ,
-excluding the terminating null wide character, is returned.
-.PP
-The programmer must ensure that there is room for at least
-.I n
-wide
-characters at
-.IR dest .
-.PP
-If
-.I dest
-is NULL,
-.I n
-is ignored, and the conversion proceeds as
-above, except that the converted wide characters are not written out to memory,
-and that no length limit exists.
-.PP
-In order to avoid the case 2 above, the programmer should make sure
-.I n
-is
-greater than or equal to
-.IR "mbstowcs(NULL,src,0)+1" .
-.SH RETURN VALUE
-The
-.BR mbstowcs ()
-function returns the number of wide characters that make
-up the converted part of the wide-character string, not including the
-terminating null wide character.
-If an invalid multibyte sequence was
-encountered,
-.I (size_t)\ \-1
-is returned.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mbstowcs ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The function
-.BR mbsrtowcs (3)
-provides a better interface to the same
-functionality.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR mbstowcs ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH EXAMPLES
-The program below illustrates the use of
-.BR mbstowcs (),
-as well as some of the wide character classification functions.
-An example run is the following:
-.PP
-.in +4n
-.EX
-$ ./t_mbstowcs de_DE.UTF\-8 Grüße!
-Length of source string (excluding terminator):
- 8 bytes
- 6 multibyte characters
-\&
-Wide character string is: Grüße! (6 characters)
- G alpha upper
- r alpha lower
- ü alpha lower
- ß alpha lower
- e alpha lower
- ! !alpha
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (mbstowcs.c)
-.EX
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-#include <wctype.h>
-\&
-int
-main(int argc, char *argv[])
-{
- size_t mbslen; /* Number of multibyte characters in source */
- wchar_t *wcs; /* Pointer to converted wide character string */
-\&
- if (argc < 3) {
- fprintf(stderr, "Usage: %s <locale> <string>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- /* Apply the specified locale. */
-\&
- if (setlocale(LC_ALL, argv[1]) == NULL) {
- perror("setlocale");
- exit(EXIT_FAILURE);
- }
-\&
- /* Calculate the length required to hold argv[2] converted to
- a wide character string. */
-\&
- mbslen = mbstowcs(NULL, argv[2], 0);
- if (mbslen == (size_t) \-1) {
- perror("mbstowcs");
- exit(EXIT_FAILURE);
- }
-\&
- /* Describe the source string to the user. */
-\&
- printf("Length of source string (excluding terminator):\en");
- printf(" %zu bytes\en", strlen(argv[2]));
- printf(" %zu multibyte characters\en\en", mbslen);
-\&
- /* Allocate wide character string of the desired size. Add 1
- to allow for terminating null wide character (L\[aq]\e0\[aq]). */
-\&
- wcs = calloc(mbslen + 1, sizeof(*wcs));
- if (wcs == NULL) {
- perror("calloc");
- exit(EXIT_FAILURE);
- }
-\&
- /* Convert the multibyte character string in argv[2] to a
- wide character string. */
-\&
- if (mbstowcs(wcs, argv[2], mbslen + 1) == (size_t) \-1) {
- perror("mbstowcs");
- exit(EXIT_FAILURE);
- }
-\&
- printf("Wide character string is: %ls (%zu characters)\en",
- wcs, mbslen);
-\&
- /* Now do some inspection of the classes of the characters in
- the wide character string. */
-\&
- for (wchar_t *wp = wcs; *wp != 0; wp++) {
- printf(" %lc ", (wint_t) *wp);
-\&
- if (!iswalpha(*wp))
- printf("!");
- printf("alpha ");
-\&
- if (iswalpha(*wp)) {
- if (iswupper(*wp))
- printf("upper ");
-\&
- if (iswlower(*wp))
- printf("lower ");
- }
-\&
- putchar(\[aq]\en\[aq]);
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR mblen (3),
-.BR mbsrtowcs (3),
-.BR mbtowc (3),
-.BR wcstombs (3),
-.BR wctomb (3)
diff --git a/man3/mbtowc.3 b/man3/mbtowc.3
deleted file mode 100644
index 8eb14b717..000000000
--- a/man3/mbtowc.3
+++ /dev/null
@@ -1,153 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH mbtowc 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mbtowc \- convert a multibyte sequence to a wide character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int mbtowc(wchar_t *restrict " pwc ", const char " s "[restrict ." n "], \
-size_t " n );
-.fi
-.SH DESCRIPTION
-The main case for this function is when
-.I s
-is not NULL and
-.I pwc
-is
-not NULL.
-In this case, the
-.BR mbtowc ()
-function inspects at most
-.I n
-bytes of the multibyte string starting at
-.IR s ,
-extracts the next complete
-multibyte character, converts it to a wide character and stores it at
-.IR *pwc .
-It updates an internal shift state known only to the
-.BR mbtowc ()
-function.
-If
-.I s
-does not point to a null byte (\[aq]\e0\[aq]), it returns the number
-of bytes that were consumed from
-.IR s ,
-otherwise it returns 0.
-.PP
-If the
-.I n
-bytes starting at
-.I s
-do not contain a complete multibyte
-character, or if they contain an invalid multibyte sequence,
-.BR mbtowc ()
-returns \-1.
-This can happen even if
-.I n
->=
-.IR MB_CUR_MAX ,
-if the multibyte string contains redundant shift sequences.
-.PP
-A different case is when
-.I s
-is not NULL but
-.I pwc
-is NULL.
-In this case, the
-.BR mbtowc ()
-function behaves as above, except that it does not
-store the converted wide character in memory.
-.PP
-A third case is when
-.I s
-is NULL.
-In this case,
-.I pwc
-and
-.I n
-are
-ignored.
-The
-.BR mbtowc ()
-function
-.\" The Dinkumware doc and the Single UNIX specification say this, but
-.\" glibc doesn't implement this.
-resets the shift state, only known to this function,
-to the initial state, and
-returns nonzero if the encoding has nontrivial shift state, or zero if the
-encoding is stateless.
-.SH RETURN VALUE
-If
-.I s
-is not NULL, the
-.BR mbtowc ()
-function returns the number of
-consumed bytes starting at
-.IR s ,
-or 0 if
-.I s
-points to a null byte,
-or \-1 upon failure.
-.PP
-If
-.I s
-is NULL, the
-.BR mbtowc ()
-function
-returns nonzero if the encoding
-has nontrivial shift state, or zero if the encoding is stateless.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mbtowc ()
-T} Thread safety MT-Unsafe race
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-This function is not multithread safe.
-The function
-.BR mbrtowc (3)
-provides
-a better interface to the same functionality.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR mbtowc ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR MB_CUR_MAX (3),
-.BR mblen (3),
-.BR mbrtowc (3),
-.BR mbstowcs (3),
-.BR wcstombs (3),
-.BR wctomb (3)
diff --git a/man3/mcheck.3 b/man3/mcheck.3
deleted file mode 100644
index 9d24aaf0a..000000000
--- a/man3/mcheck.3
+++ /dev/null
@@ -1,214 +0,0 @@
-'\" t
-.\" Copyright (c) 2012 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH mcheck 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mcheck, mcheck_check_all, mcheck_pedantic, mprobe \- heap consistency checking
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <mcheck.h>
-.PP
-.BI "int mcheck(void (*" abortfunc ")(enum mcheck_status " mstatus ));
-.BI "int mcheck_pedantic(void (*" abortfunc ")(enum mcheck_status " mstatus ));
-.B void mcheck_check_all(void);
-.PP
-.BI "enum mcheck_status mprobe(void *" ptr );
-.fi
-.SH DESCRIPTION
-The
-.BR mcheck ()
-function installs a set of debugging hooks for the
-.BR malloc (3)
-family of memory-allocation functions.
-These hooks cause certain consistency checks to be performed
-on the state of the heap.
-The checks can detect application errors such as freeing a block of memory
-more than once or corrupting the bookkeeping data structures
-that immediately precede a block of allocated memory.
-.PP
-To be effective, the
-.BR mcheck ()
-function must be called before the first call to
-.BR malloc (3)
-or a related function.
-In cases where this is difficult to ensure, linking the program with
-.I \-lmcheck
-inserts an implicit call to
-.BR mcheck ()
-(with a NULL argument)
-before the first call to a memory-allocation function.
-.PP
-The
-.BR mcheck_pedantic ()
-function is similar to
-.BR mcheck (),
-but performs checks on all allocated blocks whenever
-one of the memory-allocation functions is called.
-This can be very slow!
-.PP
-The
-.BR mcheck_check_all ()
-function causes an immediate check on all allocated blocks.
-This call is effective only if
-.BR mcheck ()
-is called beforehand.
-.PP
-If the system detects an inconsistency in the heap,
-the caller-supplied function pointed to by
-.I abortfunc
-is invoked with a single argument,
-.IR mstatus ,
-that indicates what type of inconsistency was detected.
-If
-.I abortfunc
-is NULL, a default function prints an error message on
-.I stderr
-and calls
-.BR abort (3).
-.PP
-The
-.BR mprobe ()
-function performs a consistency check on
-the block of allocated memory pointed to by
-.IR ptr .
-The
-.BR mcheck ()
-function should be called beforehand (otherwise
-.BR mprobe ()
-returns
-.BR MCHECK_DISABLED ).
-.PP
-The following list describes the values returned by
-.BR mprobe ()
-or passed as the
-.I mstatus
-argument when
-.I abortfunc
-is invoked:
-.TP
-.BR MCHECK_DISABLED " (" mprobe "() only)"
-.BR mcheck ()
-was not called before the first memory allocation function was called.
-Consistency checking is not possible.
-.TP
-.BR MCHECK_OK " (" mprobe "() only)"
-No inconsistency detected.
-.TP
-.B MCHECK_HEAD
-Memory preceding an allocated block was clobbered.
-.TP
-.B MCHECK_TAIL
-Memory following an allocated block was clobbered.
-.TP
-.B
-MCHECK_FREE
-A block of memory was freed twice.
-.SH RETURN VALUE
-.BR mcheck ()
-and
-.BR mcheck_pedantic ()
-return 0 on success, or \-1 on error.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mcheck (),
-.BR mcheck_pedantic (),
-.BR mcheck_check_all (),
-.BR mprobe ()
-T} Thread safety T{
-MT-Unsafe race:mcheck
-const:malloc_hooks
-T}
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH HISTORY
-.TP
-.BR mcheck_pedantic ()
-.TQ
-.BR mcheck_check_all ()
-glibc 2.2.
-.TP
-.BR mcheck ()
-.TQ
-.BR mprobe ()
-glibc 2.0.
-.SH NOTES
-Linking a program with
-.I \-lmcheck
-and using the
-.B MALLOC_CHECK_
-environment variable (described in
-.BR mallopt (3))
-cause the same kinds of errors to be detected.
-But, using
-.B MALLOC_CHECK_
-does not require the application to be relinked.
-.\" But is MALLOC_CHECK_ slower?
-.SH EXAMPLES
-The program below calls
-.BR mcheck ()
-with a NULL argument and then frees the same block of memory twice.
-The following shell session demonstrates what happens
-when running the program:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out"
-About to free
-\&
-About to free a second time
-block freed twice
-Aborted (core dumped)
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (mcheck.c)
-.EX
-#include <mcheck.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(void)
-{
- char *p;
-\&
- if (mcheck(NULL) != 0) {
- fprintf(stderr, "mcheck() failed\en");
-\&
- exit(EXIT_FAILURE);
- }
-\&
- p = malloc(1000);
-\&
- fprintf(stderr, "About to free\en");
- free(p);
- fprintf(stderr, "\enAbout to free a second time\en");
- free(p);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR malloc (3),
-.BR mallopt (3),
-.BR mtrace (3)
diff --git a/man3/mcheck_check_all.3 b/man3/mcheck_check_all.3
deleted file mode 100644
index 4baeaf2a5..000000000
--- a/man3/mcheck_check_all.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/mcheck.3
diff --git a/man3/mcheck_pedantic.3 b/man3/mcheck_pedantic.3
deleted file mode 100644
index 4baeaf2a5..000000000
--- a/man3/mcheck_pedantic.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/mcheck.3
diff --git a/man3/memalign.3 b/man3/memalign.3
deleted file mode 100644
index 791d4c801..000000000
--- a/man3/memalign.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/posix_memalign.3
diff --git a/man3/memccpy.3 b/man3/memccpy.3
deleted file mode 100644
index 5266fc751..000000000
--- a/man3/memccpy.3
+++ /dev/null
@@ -1,82 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:57:24 1993 by Rik Faith (faith@cs.unc.edu)
-.TH memccpy 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-memccpy \- copy memory area
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "void *memccpy(void " dest "[restrict ." n "], const void " src "[restrict ." n ],
-.BI " int " c ", size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR memccpy ()
-function copies no more than
-.I n
-bytes from
-memory area
-.I src
-to memory area
-.IR dest ,
-stopping when the
-character
-.I c
-is found.
-.PP
-If the memory areas overlap, the results are undefined.
-.SH RETURN VALUE
-The
-.BR memccpy ()
-function returns a pointer to the next character
-in
-.I dest
-after
-.IR c ,
-or NULL if
-.I c
-was not found in the
-first
-.I n
-characters of
-.IR src .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR memccpy ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR bcopy (3),
-.BR bstring (3),
-.BR memcpy (3),
-.BR memmove (3),
-.BR strcpy (3),
-.BR strncpy (3)
diff --git a/man3/memchr.3 b/man3/memchr.3
deleted file mode 100644
index e2916dc9a..000000000
--- a/man3/memchr.3
+++ /dev/null
@@ -1,145 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Mon Apr 12 12:49:57 1993, David Metcalfe
-.\" Modified Sat Jul 24 18:56:22 1993, Rik Faith (faith@cs.unc.edu)
-.\" Modified Wed Feb 20 21:09:36 2002, Ian Redfern (redferni@logica.com)
-.\" 2008-07-09, mtk, add rawmemchr()
-.\"
-.TH memchr 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-memchr, memrchr, rawmemchr \- scan memory for a character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "void *memchr(const void " s [. n "], int " c ", size_t " n );
-.BI "void *memrchr(const void " s [. n "], int " c ", size_t " n );
-.PP
-.BI "[[deprecated]] void *rawmemchr(const void " s [. n "], int " c );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR memrchr (),
-.BR rawmemchr ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR memchr ()
-function scans the initial
-.I n
-bytes of the memory
-area pointed to by
-.I s
-for the first instance of
-.IR c .
-Both
-.I c
-and the bytes of the memory area pointed to by
-.I s
-are interpreted as
-.IR "unsigned char" .
-.PP
-The
-.BR memrchr ()
-function is like the
-.BR memchr ()
-function,
-except that it searches backward from the end of the
-.I n
-bytes pointed to by
-.I s
-instead of forward from the beginning.
-.PP
-The
-.BR rawmemchr ()
-function is similar to
-.BR memchr (),
-but it assumes
-(i.e., the programmer knows for certain)
-that an instance of
-.I c
-lies somewhere in the memory area starting at the location pointed to by
-.IR s .
-If an instance of
-.I c
-is not found, the behavior is undefined.
-Use either
-.BR strlen (3)
-or
-.BR memchr (3)
-instead.
-.SH RETURN VALUE
-The
-.BR memchr ()
-and
-.BR memrchr ()
-functions return a pointer
-to the matching byte or NULL if the character does not occur in
-the given memory area.
-.PP
-The
-.BR rawmemchr ()
-function returns a pointer to the matching byte.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR memchr (),
-.BR memrchr (),
-.BR rawmemchr ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR memchr ()
-C11, POSIX.1-2008.
-.TP
-.BR memrchr ()
-.TQ
-.BR rawmemchr ()
-GNU.
-.SH HISTORY
-.TP
-.BR memchr ()
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.TP
-.BR memrchr ()
-glibc 2.2.
-.TP
-.BR rawmemchr ()
-glibc 2.1.
-.SH SEE ALSO
-.BR bstring (3),
-.BR ffs (3),
-.BR memmem (3),
-.BR strchr (3),
-.BR strpbrk (3),
-.BR strrchr (3),
-.BR strsep (3),
-.BR strspn (3),
-.BR strstr (3),
-.BR wmemchr (3)
diff --git a/man3/memcmp.3 b/man3/memcmp.3
deleted file mode 100644
index 5a56f1972..000000000
--- a/man3/memcmp.3
+++ /dev/null
@@ -1,86 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:55:27 1993 by Rik Faith (faith@cs.unc.edu)
-.TH memcmp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-memcmp \- compare memory areas
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "int memcmp(const void " s1 [. n "], const void " s2 [. n "], size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR memcmp ()
-function compares the first \fIn\fP bytes (each interpreted as
-.IR "unsigned char" )
-of the memory areas \fIs1\fP and \fIs2\fP.
-.SH RETURN VALUE
-The
-.BR memcmp ()
-function returns an integer less than, equal to, or
-greater than zero if the first \fIn\fP bytes of \fIs1\fP is found,
-respectively, to be less than, to match, or be greater than the first
-\fIn\fP bytes of \fIs2\fP.
-.PP
-For a nonzero return value, the sign is determined by the sign of
-the difference between the first pair of bytes (interpreted as
-.IR "unsigned char" )
-that differ in
-.I s1
-and
-.IR s2 .
-.PP
-If
-.I n
-is zero, the return value is zero.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR memcmp ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.SH CAVEATS
-Do not use
-.BR memcmp ()
-to compare security critical data, such as cryptographic secrets,
-because the required CPU time depends on the number of equal bytes.
-Instead, a function that performs comparisons in constant time is required.
-Some operating systems provide such a function (e.g., NetBSD's
-.BR consttime_memequal ()),
-but no such function is specified in POSIX.
-On Linux, you may need to implement such a function yourself.
-.SH SEE ALSO
-.BR bstring (3),
-.BR strcasecmp (3),
-.BR strcmp (3),
-.BR strcoll (3),
-.BR strncasecmp (3),
-.BR strncmp (3),
-.BR wmemcmp (3)
diff --git a/man3/memcpy.3 b/man3/memcpy.3
deleted file mode 100644
index c243e9f3b..000000000
--- a/man3/memcpy.3
+++ /dev/null
@@ -1,109 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2015 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sun Jul 25 10:41:09 1993 by Rik Faith (faith@cs.unc.edu)
-.TH memcpy 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-memcpy \- copy memory area
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "void *memcpy(void " dest "[restrict ." n "], const void " src "[restrict ." n ],
-.BI " size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR memcpy ()
-function copies \fIn\fP bytes from memory area
-\fIsrc\fP to memory area \fIdest\fP.
-The memory areas must not overlap.
-Use
-.BR memmove (3)
-if the memory areas do overlap.
-.SH RETURN VALUE
-The
-.BR memcpy ()
-function returns a pointer to \fIdest\fP.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR memcpy ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.SH CAVEATS
-Failure to observe the requirement that the memory areas
-do not overlap has been the source of significant bugs.
-(POSIX and the C standards are explicit that employing
-.BR memcpy ()
-with overlapping areas produces undefined behavior.)
-Most notably, in glibc 2.13
-.\" glibc commit 6fb8cbcb58a29fff73eb2101b34caa19a7f88eba
-a performance optimization of
-.BR memcpy ()
-on some platforms (including x86-64) included changing the order
-.\" From forward copying to backward copying
-in which bytes were copied from
-.I src
-to
-.IR dest .
-.PP
-This change revealed breakages in a number of applications that performed
-copying with overlapping areas.
-.\" Adobe Flash player was the highest profile example:
-.\" https://bugzilla.redhat.com/show_bug.cgi?id=638477
-.\" Reported: 2010-09-29 02:35 EDT by JCHuynh
-.\" Bug 638477 - Strange sound on mp3 flash website
-.\"
-.\" https://sourceware.org/bugzilla/show_bug.cgi?id=12518
-.\" Bug 12518 - memcpy acts randomly (and differently) with overlapping areas
-.\" Reported: 2011-02-25 02:26 UTC by Linus Torvalds
-.\"
-Under the previous implementation,
-the order in which the bytes were copied had fortuitously hidden the bug,
-which was revealed when the copying order was reversed.
-In glibc 2.14,
-.\" glibc commit 0354e355014b7bfda32622e0255399d859862fcd
-a versioned symbol was added so that old binaries
-(i.e., those linked against glibc versions earlier than 2.14)
-employed a
-.BR memcpy ()
-implementation that safely handles the overlapping buffers case
-(by providing an "older"
-.BR memcpy ()
-implementation that was aliased to
-.BR memmove (3)).
-.SH SEE ALSO
-.BR bcopy (3),
-.BR bstring (3),
-.BR memccpy (3),
-.BR memmove (3),
-.BR mempcpy (3),
-.BR strcpy (3),
-.BR strncpy (3),
-.BR wmemcpy (3)
diff --git a/man3/memfrob.3 b/man3/memfrob.3
deleted file mode 100644
index a75a03276..000000000
--- a/man3/memfrob.3
+++ /dev/null
@@ -1,63 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:54:45 1993 by Rik Faith (faith@cs.unc.edu)
-.TH memfrob 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-memfrob \- frobnicate (obfuscate) a memory area
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <string.h>
-.PP
-.BI "void *memfrob(void " s [. n "], size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR memfrob ()
-function obfuscates the first \fIn\fP bytes of the
-memory area \fIs\fP by exclusive-ORing each character with the number
-42.
-The effect can be reversed by using
-.BR memfrob ()
-on the
-obfuscated memory area.
-.PP
-Note that this function is not a proper encryption routine as the XOR
-constant is fixed, and is suitable only for hiding strings.
-.SH RETURN VALUE
-The
-.BR memfrob ()
-function returns a pointer to the obfuscated memory
-area.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR memfrob ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH SEE ALSO
-.BR bstring (3),
-.BR strfry (3)
diff --git a/man3/memmem.3 b/man3/memmem.3
deleted file mode 100644
index 0a81054e6..000000000
--- a/man3/memmem.3
+++ /dev/null
@@ -1,92 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:50:48 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Interchanged 'needle' and 'haystack'; added history, aeb, 980113.
-.TH memmem 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-memmem \- locate a substring
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <string.h>
-.PP
-.BI "void *memmem(const void " haystack [. haystacklen "], size_t " haystacklen ,
-.BI " const void " needle [. needlelen "], size_t " needlelen );
-.fi
-.SH DESCRIPTION
-The
-.BR memmem ()
-function finds the start of the first occurrence
-of the substring
-.I needle
-of length
-.I needlelen
-in the memory
-area
-.I haystack
-of length
-.IR haystacklen .
-.SH RETURN VALUE
-The
-.BR memmem ()
-function returns a pointer to the beginning of the
-substring, or NULL if the substring is not found.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR memmem ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-musl libc 0.9.7;
-FreeBSD 6.0, OpenBSD 5.4, NetBSD, Illumos.
-.SH BUGS
-.\" This function was broken in Linux libraries up to and including libc 5.0.9;
-.\" there the
-.\" .IR needle
-.\" and
-.\" .I haystack
-.\" arguments were interchanged,
-.\" and a pointer to the end of the first occurrence of
-.\" .I needle
-.\" was returned.
-.\"
-.\" Both old and new libc's have the bug that if
-.\" .I needle
-.\" is empty,
-.\" .I haystack\-1
-.\" (instead of
-.\" .IR haystack )
-.\" is returned.
-In glibc 2.0, if
-.I needle
-is empty,
-.BR memmem ()
-returns a pointer to the last byte of
-.IR haystack .
-This is fixed in glibc 2.1.
-.SH SEE ALSO
-.BR bstring (3),
-.BR strstr (3)
diff --git a/man3/memmove.3 b/man3/memmove.3
deleted file mode 100644
index 7745c4e29..000000000
--- a/man3/memmove.3
+++ /dev/null
@@ -1,74 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:49:59 1993 by Rik Faith (faith@cs.unc.edu)
-.TH memmove 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-memmove \- copy memory area
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "void *memmove(void " dest [. n "], const void " src [. n "], size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR memmove ()
-function copies
-.I n
-bytes from memory area
-.I src
-to memory area
-.IR dest .
-The memory areas may overlap: copying takes place as though
-the bytes in
-.I src
-are first copied into a temporary array that does not overlap
-.I src
-or
-.IR dest ,
-and the bytes are then copied from the temporary array to
-.IR dest .
-.SH RETURN VALUE
-The
-.BR memmove ()
-function returns a pointer to
-.IR dest .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR memmove ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR bcopy (3),
-.BR bstring (3),
-.BR memccpy (3),
-.BR memcpy (3),
-.BR strcpy (3),
-.BR strncpy (3),
-.BR wmemmove (3)
diff --git a/man3/mempcpy.3 b/man3/mempcpy.3
deleted file mode 100644
index 98c1c6f8d..000000000
--- a/man3/mempcpy.3
+++ /dev/null
@@ -1,97 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" Heavily based on glibc infopages, copyright Free Software Foundation
-.\"
-.\" aeb, 2003, polished a little
-.TH mempcpy 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mempcpy, wmempcpy \- copy memory area
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <string.h>
-.PP
-.BI "void *mempcpy(void " dest "[restrict ." n "], const void " src "[restrict ." n ],
-.BI " size_t " n );
-.PP
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *wmempcpy(wchar_t " dest "[restrict ." n ],
-.BI " const wchar_t " src "[restrict ." n ],
-.BI " size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR mempcpy ()
-function is nearly identical to the
-.BR memcpy (3)
-function.
-It copies
-.I n
-bytes from the object beginning at
-.I src
-into the object pointed to by
-.IR dest .
-But instead of returning the value of
-.I dest
-it returns a pointer to the byte following the last written byte.
-.PP
-This function is useful in situations where a number of objects
-shall be copied to consecutive memory positions.
-.PP
-The
-.BR wmempcpy ()
-function is identical but takes
-.I wchar_t
-type arguments and copies
-.I n
-wide characters.
-.SH RETURN VALUE
-.I dest
-+
-.IR n .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mempcpy (),
-.BR wmempcpy ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH HISTORY
-glibc 2.1.
-.SH EXAMPLES
-.EX
-void *
-combine(void *o1, size_t s1, void *o2, size_t s2)
-{
- void *result = malloc(s1 + s2);
- if (result != NULL)
- mempcpy(mempcpy(result, o1, s1), o2, s2);
- return result;
-}
-.EE
-.SH SEE ALSO
-.BR memccpy (3),
-.BR memcpy (3),
-.BR memmove (3),
-.BR wmemcpy (3)
diff --git a/man3/memrchr.3 b/man3/memrchr.3
deleted file mode 100644
index b62c8f10a..000000000
--- a/man3/memrchr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/memchr.3
diff --git a/man3/memset.3 b/man3/memset.3
deleted file mode 100644
index 92764b145..000000000
--- a/man3/memset.3
+++ /dev/null
@@ -1,63 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:49:23 1993 by Rik Faith (faith@cs.unc.edu)
-.TH memset 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-memset \- fill memory with a constant byte
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "void *memset(void " s [. n "], int " c ", size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR memset ()
-function fills the first
-.I n
-bytes of the
-memory area pointed to by
-.I s
-with the constant byte
-.IR c .
-.SH RETURN VALUE
-The
-.BR memset ()
-function returns a pointer to the memory area
-.IR s .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR memset ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR bstring (3),
-.BR bzero (3),
-.BR swab (3),
-.BR wmemset (3)
diff --git a/man3/minor.3 b/man3/minor.3
deleted file mode 100644
index eabbdd013..000000000
--- a/man3/minor.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/makedev.3
diff --git a/man3/mkdtemp.3 b/man3/mkdtemp.3
deleted file mode 100644
index a3c28728e..000000000
--- a/man3/mkdtemp.3
+++ /dev/null
@@ -1,90 +0,0 @@
-'\" t
-.\" Copyright 2001 John Levon <moz@compsoc.man.ac.uk>
-.\" Based on mkstemp(3), Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and GNU libc documentation
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.TH mkdtemp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mkdtemp \- create a unique temporary directory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "char *mkdtemp(char *" template );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR mkdtemp ():
-.nf
- /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc 2.19 and earlier: */ _BSD_SOURCE
- || /* Since glibc 2.10: */ _POSIX_C_SOURCE >= 200809L
-.fi
-.SH DESCRIPTION
-The
-.BR mkdtemp ()
-function generates a uniquely named temporary
-directory from \fItemplate\fP.
-The last six characters of \fItemplate\fP
-must be XXXXXX and these are replaced with a string that makes the
-directory name unique.
-The directory is then created with
-permissions 0700.
-Since it will be modified,
-.I template
-must not be a string constant, but should be declared as a character array.
-.SH RETURN VALUE
-The
-.BR mkdtemp ()
-function returns a pointer to the modified template
-string on success, and NULL on failure, in which case
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-The last six characters of \fItemplate\fP were not XXXXXX.
-Now \fItemplate\fP is unchanged.
-.PP
-Also see
-.BR mkdir (2)
-for other possible values for \fIerrno\fP.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mkdtemp ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.91.
-NetBSD 1.4.
-POSIX.1-2008.
-.SH SEE ALSO
-.BR mktemp (1),
-.BR mkdir (2),
-.BR mkstemp (3),
-.BR mktemp (3),
-.BR tempnam (3),
-.BR tmpfile (3),
-.BR tmpnam (3)
diff --git a/man3/mkfifo.3 b/man3/mkfifo.3
deleted file mode 100644
index 89d0fb2fa..000000000
--- a/man3/mkfifo.3
+++ /dev/null
@@ -1,204 +0,0 @@
-'\" t
-.\" This manpage is Copyright (C) 1995 James R. Van Zandt <jrv@vanzandt.mv.com>
-.\" and Copyright (C) 2006, 2014 Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" changed section from 2 to 3, aeb, 950919
-.\"
-.TH mkfifo 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mkfifo, mkfifoat \- make a FIFO special file (a named pipe)
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.B #include <sys/stat.h>
-.PP
-.BI "int mkfifo(const char *" pathname ", mode_t " mode );
-.PP
-.BR "#include <fcntl.h> " "/* Definition of AT_* constants */"
-.B #include <sys/stat.h>
-.PP
-.BI "int mkfifoat(int " dirfd ", const char *" pathname ", mode_t " mode );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR mkfifoat ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _ATFILE_SOURCE
-.fi
-.SH DESCRIPTION
-.BR mkfifo ()
-makes a FIFO special file with name \fIpathname\fP.
-\fImode\fP specifies the FIFO's permissions.
-It is modified by the
-process's \fBumask\fP in the usual way: the permissions of the created
-file are \fB(\fP\fImode\fP\fB & \[ti]umask)\fP.
-.PP
-A FIFO special file is similar to a pipe, except that it is created
-in a different way.
-Instead of being an anonymous communications
-channel, a FIFO special file is entered into the filesystem by
-calling
-.BR mkfifo ().
-.PP
-Once you have created a FIFO special file in this way, any process can
-open it for reading or writing, in the same way as an ordinary file.
-However, it has to be open at both ends simultaneously before you can
-proceed to do any input or output operations on it.
-Opening a FIFO for reading normally blocks until some
-other process opens the same FIFO for writing, and vice versa.
-See
-.BR fifo (7)
-for nonblocking handling of FIFO special files.
-.SS mkfifoat()
-The
-.BR mkfifoat ()
-function operates in exactly the same way as
-.BR mkfifo (),
-except for the differences described here.
-.PP
-If the pathname given in
-.I pathname
-is relative, then it is interpreted relative to the directory
-referred to by the file descriptor
-.I dirfd
-(rather than relative to the current working directory of
-the calling process, as is done by
-.BR mkfifo ()
-for a relative pathname).
-.PP
-If
-.I pathname
-is relative and
-.I dirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I pathname
-is interpreted relative to the current working
-directory of the calling process (like
-.BR mkfifo ()).
-.PP
-If
-.I pathname
-is absolute, then
-.I dirfd
-is ignored.
-.PP
-See
-.BR openat (2)
-for an explanation of the need for
-.BR mkfifoat ().
-.SH RETURN VALUE
-On success
-.BR mkfifo ()
-and
-.BR mkfifoat ()
-return 0.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-One of the directories in \fIpathname\fP did not allow search
-(execute) permission.
-.TP
-.B EBADF
-.RB ( mkfifoat ())
-.I pathname
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B EDQUOT
-The user's quota of disk blocks or inodes on the filesystem has been
-exhausted.
-.TP
-.B EEXIST
-\fIpathname\fP already exists.
-This includes the case where
-.I pathname
-is a symbolic link, dangling or not.
-.TP
-.B ENAMETOOLONG
-Either the total length of \fIpathname\fP is greater than
-\fBPATH_MAX\fP, or an individual filename component has a length
-greater than \fBNAME_MAX\fP.
-In the GNU system, there is no imposed
-limit on overall filename length, but some filesystems may place
-limits on the length of a component.
-.TP
-.B ENOENT
-A directory component in \fIpathname\fP does not exist or is a
-dangling symbolic link.
-.TP
-.B ENOSPC
-The directory or filesystem has no room for the new file.
-.TP
-.B ENOTDIR
-A component used as a directory in \fIpathname\fP is not, in fact, a
-directory.
-.TP
-.B ENOTDIR
-.RB ( mkfifoat ())
-.I pathname
-is a relative pathname and
-.I dirfd
-is a file descriptor referring to a file other than a directory.
-.TP
-.B EROFS
-\fIpathname\fP refers to a read-only filesystem.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mkfifo (),
-.BR mkfifoat ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-It is implemented using
-.BR mknodat (2).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR mkfifo ()
-POSIX.1-2001.
-.TP
-.BR mkfifoat ()
-glibc 2.4.
-POSIX.1-2008.
-.SH SEE ALSO
-.BR mkfifo (1),
-.BR close (2),
-.BR open (2),
-.BR read (2),
-.BR stat (2),
-.BR umask (2),
-.BR write (2),
-.BR fifo (7)
diff --git a/man3/mkfifoat.3 b/man3/mkfifoat.3
deleted file mode 100644
index 25f4896f6..000000000
--- a/man3/mkfifoat.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/mkfifo.3
diff --git a/man3/mkostemp.3 b/man3/mkostemp.3
deleted file mode 100644
index 08cc2dead..000000000
--- a/man3/mkostemp.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/mkstemp.3
diff --git a/man3/mkostemps.3 b/man3/mkostemps.3
deleted file mode 100644
index 08cc2dead..000000000
--- a/man3/mkostemps.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/mkstemp.3
diff --git a/man3/mkstemp.3 b/man3/mkstemp.3
deleted file mode 100644
index 0b4967ec8..000000000
--- a/man3/mkstemp.3
+++ /dev/null
@@ -1,250 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright (C) 2008, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:48:48 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 980310, aeb
-.\" Modified 990328, aeb
-.\" 2008-06-19, mtk, Added mkostemp(); various other changes
-.\"
-.TH mkstemp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mkstemp, mkostemp, mkstemps, mkostemps \- create a unique temporary file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int mkstemp(char *" template );
-.BI "int mkostemp(char *" template ", int " flags );
-.BI "int mkstemps(char *" template ", int " suffixlen );
-.BI "int mkostemps(char *" template ", int " suffixlen ", int " flags );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR mkstemp ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* glibc >= 2.12: */ _POSIX_C_SOURCE >= 200809L
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
-.fi
-.PP
-.BR mkostemp ():
-.nf
- _GNU_SOURCE
-.fi
-.PP
-.BR mkstemps ():
-.nf
- /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
-.fi
-.PP
-.BR mkostemps ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR mkstemp ()
-function generates a unique temporary filename from
-.IR template ,
-creates and opens the file,
-and returns an open file descriptor for the file.
-.PP
-The last six characters of
-.I template
-must be "XXXXXX" and these are replaced with a string that makes the
-filename unique.
-Since it will be modified,
-.I template
-must not be a string constant, but should be declared as a character array.
-.PP
-The file is created with
-permissions 0600, that is, read plus write for owner only.
-The returned file descriptor provides both read and write access to the file.
-The file is opened with the
-.BR open (2)
-.B O_EXCL
-flag, guaranteeing that the caller is the process that creates the file.
-.PP
-The
-.BR mkostemp ()
-function is like
-.BR mkstemp (),
-with the difference that the following bits\[em]with the same meaning as for
-.BR open (2)\[em]may
-be specified in
-.IR flags :
-.BR O_APPEND ,
-.BR O_CLOEXEC ,
-and
-.BR O_SYNC .
-Note that when creating the file,
-.BR mkostemp ()
-includes the values
-.BR O_RDWR ,
-.BR O_CREAT ,
-and
-.B O_EXCL
-in the
-.I flags
-argument given to
-.BR open (2);
-including these values in the
-.I flags
-argument given to
-.BR mkostemp ()
-is unnecessary, and produces errors on some
-.\" Reportedly, FreeBSD
-systems.
-.PP
-The
-.BR mkstemps ()
-function is like
-.BR mkstemp (),
-except that the string in
-.I template
-contains a suffix of
-.I suffixlen
-characters.
-Thus,
-.I template
-is of the form
-.IR "prefixXXXXXXsuffix" ,
-and the string XXXXXX is modified as for
-.BR mkstemp ().
-.PP
-The
-.BR mkostemps ()
-function is to
-.BR mkstemps ()
-as
-.BR mkostemp ()
-is to
-.BR mkstemp ().
-.SH RETURN VALUE
-On success, these functions return the file descriptor
-of the temporary file.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EEXIST
-Could not create a unique temporary filename.
-Now the contents of \fItemplate\fP are undefined.
-.TP
-.B EINVAL
-For
-.BR mkstemp ()
-and
-.BR mkostemp ():
-The last six characters of \fItemplate\fP were not XXXXXX;
-now \fItemplate\fP is unchanged.
-.IP
-For
-.BR mkstemps ()
-and
-.BR mkostemps ():
-.I template
-is less than
-.I "(6 + suffixlen)"
-characters long, or the last 6 characters before the suffix in
-.I template
-were not XXXXXX.
-.PP
-These functions may also fail with any of the errors described for
-.BR open (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mkstemp (),
-.BR mkostemp (),
-.BR mkstemps (),
-.BR mkostemps ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR mkstemp ()
-POSIX.1-2001.
-.TP
-.BR mkstemps ()
-BSD.
-.\" mkstemps() appears to be at least on the BSDs, Mac OS X, Solaris,
-.\" and Tru64.
-.TP
-.BR mkostemp ()
-.TQ
-.BR mkostemps ()
-GNU.
-.SH HISTORY
-.TP
-.BR mkstemp ()
-4.3BSD, POSIX.1-2001.
-.TP
-.BR mkstemps ()
-glibc 2.11.
-BSD, Mac OS X, Solaris, Tru64.
-.TP
-.BR mkostemp ()
-glibc 2.7.
-.TP
-.BR mkostemps ()
-glibc 2.11.
-.PP
-In glibc versions 2.06 and earlier, the file is created with permissions 0666,
-that is, read and write for all users.
-This old behavior may be
-a security risk, especially since other UNIX flavors use 0600,
-and somebody might overlook this detail when porting programs.
-POSIX.1-2008 adds a requirement that the file be created with mode 0600.
-.PP
-More generally, the POSIX specification of
-.BR mkstemp ()
-does not say anything
-about file modes, so the application should make sure its
-file mode creation mask (see
-.BR umask (2))
-is set appropriately before calling
-.BR mkstemp ()
-(and
-.BR mkostemp ()).
-.\"
-.\" The prototype for
-.\" .BR mkstemp ()
-.\" is in
-.\" .I <unistd.h>
-.\" for libc4, libc5, glibc1; glibc2 follows POSIX.1 and has the prototype in
-.\" .IR <stdlib.h> .
-.SH SEE ALSO
-.BR mkdtemp (3),
-.BR mktemp (3),
-.BR tempnam (3),
-.BR tmpfile (3),
-.BR tmpnam (3)
diff --git a/man3/mkstemps.3 b/man3/mkstemps.3
deleted file mode 100644
index 08cc2dead..000000000
--- a/man3/mkstemps.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/mkstemp.3
diff --git a/man3/mktemp.3 b/man3/mktemp.3
deleted file mode 100644
index 2b5ace8ae..000000000
--- a/man3/mktemp.3
+++ /dev/null
@@ -1,121 +0,0 @@
-'\" t
-.\" Copyright (C) 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:48:06 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Fri Jun 23 01:26:34 1995 by Andries Brouwer (aeb@cwi.nl)
-.\" (prompted by Scott Burkett <scottb@IntNet.net>)
-.\" Modified Sun Mar 28 23:44:38 1999 by Andries Brouwer (aeb@cwi.nl)
-.\"
-.TH mktemp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mktemp \- make a unique temporary filename
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "char *mktemp(char *" template );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR mktemp ():
-.nf
- Since glibc 2.12:
- (_XOPEN_SOURCE >= 500) && ! (_POSIX_C_SOURCE >= 200112L)
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
- Before glibc 2.12:
- _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
-.fi
-.SH DESCRIPTION
-.IR "Never use this function" ;
-see BUGS.
-.PP
-The
-.BR mktemp ()
-function generates a unique temporary filename
-from \fItemplate\fP.
-The last six characters of \fItemplate\fP must
-be XXXXXX and these are replaced with a string that makes the
-filename unique.
-Since it will be modified,
-.I template
-must not be a string constant, but should be declared as a character array.
-.SH RETURN VALUE
-The
-.BR mktemp ()
-function always returns \fItemplate\fP.
-If a unique name was created, the last six bytes of \fItemplate\fP will
-have been modified in such a way that the resulting name is unique
-(i.e., does not exist already)
-If a unique name could not be created,
-\fItemplate\fP is made an empty string, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-The last six characters of \fItemplate\fP were not XXXXXX.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mktemp ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-4.3BSD, POSIX.1-2001.
-Removed in POSIX.1-2008.
-.\" .SH NOTES
-.\" The prototype is in
-.\" .I <unistd.h>
-.\" for libc4, libc5, glibc1; glibc2 follows the Single UNIX Specification
-.\" and has the prototype in
-.\" .IR <stdlib.h> .
-.SH BUGS
-Never use
-.BR mktemp ().
-Some implementations follow 4.3BSD
-and replace XXXXXX by the current process ID and a single letter,
-so that at most 26 different names can be returned.
-Since on the one hand the names are easy to guess, and on the other
-hand there is a race between testing whether the name exists and
-opening the file, every use of
-.BR mktemp ()
-is a security risk.
-The race is avoided by
-.BR mkstemp (3)
-and
-.BR mkdtemp (3).
-.SH SEE ALSO
-.BR mktemp (1),
-.BR mkdtemp (3),
-.BR mkstemp (3),
-.BR tempnam (3),
-.BR tmpfile (3),
-.BR tmpnam (3)
diff --git a/man3/mktime.3 b/man3/mktime.3
deleted file mode 100644
index 84a3baa92..000000000
--- a/man3/mktime.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ctime.3
diff --git a/man3/mmap64.3 b/man3/mmap64.3
deleted file mode 100644
index 8902d1b35..000000000
--- a/man3/mmap64.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/mmap.2
diff --git a/man3/modf.3 b/man3/modf.3
deleted file mode 100644
index 103b5c2be..000000000
--- a/man3/modf.3
+++ /dev/null
@@ -1,97 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH modf 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-modf, modff, modfl \- extract signed integral and fractional values from
-floating-point number
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double modf(double " x ", double *" iptr );
-.BI "float modff(float " x ", float *" iptr );
-.BI "long double modfl(long double " x ", long double *" iptr );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR modff (),
-.BR modfl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions break the argument
-.I x
-into an integral
-part and a fractional part, each of which has the same sign as
-.IR x .
-The integral part is stored in the location pointed to by
-.IR iptr .
-.SH RETURN VALUE
-These functions return the fractional part of
-.IR x .
-.PP
-If
-.I x
-is a NaN, a NaN is returned, and
-.I *iptr
-is set to a NaN.
-.PP
-If
-.I x
-is positive infinity (negative infinity), +0 (\-0) is returned, and
-.I *iptr
-is set to positive infinity (negative infinity).
-.SH ERRORS
-No errors occur.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR modf (),
-.BR modff (),
-.BR modfl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH SEE ALSO
-.BR frexp (3),
-.BR ldexp (3)
diff --git a/man3/modff.3 b/man3/modff.3
deleted file mode 100644
index 84af2e33e..000000000
--- a/man3/modff.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/modf.3
diff --git a/man3/modfl.3 b/man3/modfl.3
deleted file mode 100644
index 84af2e33e..000000000
--- a/man3/modfl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/modf.3
diff --git a/man3/mpool.3 b/man3/mpool.3
deleted file mode 100644
index 1d09060ac..000000000
--- a/man3/mpool.3
+++ /dev/null
@@ -1,205 +0,0 @@
-.\" Copyright (c) 1990, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)mpool.3 8.1 (Berkeley) 6/4/93
-.\"
-.TH mpool 3 (date) "Linux man-pages (unreleased)"
-.UC 7
-.SH NAME
-mpool \- shared memory buffer pool
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <db.h>
-.B #include <mpool.h>
-.PP
-.BI "MPOOL *mpool_open(DBT *" key ", int " fd ", pgno_t " pagesize \
-", pgno_t " maxcache );
-.PP
-.BI "void mpool_filter(MPOOL *" mp ", void (*pgin)(void *, pgno_t, void *),"
-.BI " void (*" pgout ")(void *, pgno_t, void *),"
-.BI " void *" pgcookie );
-.PP
-.BI "void *mpool_new(MPOOL *" mp ", pgno_t *" pgnoaddr );
-.BI "void *mpool_get(MPOOL *" mp ", pgno_t " pgno ", unsigned int " flags );
-.BI "int mpool_put(MPOOL *" mp ", void *" pgaddr ", unsigned int " flags );
-.PP
-.BI "int mpool_sync(MPOOL *" mp );
-.BI "int mpool_close(MPOOL *" mp );
-.fi
-.SH DESCRIPTION
-.IR "Note well" :
-This page documents interfaces provided up until glibc 2.1.
-Since glibc 2.2, glibc no longer provides these interfaces.
-Probably, you are looking for the APIs provided by the
-.I libdb
-library instead.
-.PP
-.I Mpool
-is the library interface intended to provide page oriented buffer management
-of files.
-The buffers may be shared between processes.
-.PP
-The function
-.BR mpool_open ()
-initializes a memory pool.
-The
-.I key
-argument is the byte string used to negotiate between multiple
-processes wishing to share buffers.
-If the file buffers are mapped in shared memory, all processes using
-the same key will share the buffers.
-If
-.I key
-is NULL, the buffers are mapped into private memory.
-The
-.I fd
-argument is a file descriptor for the underlying file, which must be seekable.
-If
-.I key
-is non-NULL and matches a file already being mapped, the
-.I fd
-argument is ignored.
-.PP
-The
-.I pagesize
-argument is the size, in bytes, of the pages into which the file is broken up.
-The
-.I maxcache
-argument is the maximum number of pages from the underlying file to cache
-at any one time.
-This value is not relative to the number of processes which share a file's
-buffers, but will be the largest value specified by any of the processes
-sharing the file.
-.PP
-The
-.BR mpool_filter ()
-function is intended to make transparent input and output processing of the
-pages possible.
-If the
-.I pgin
-function is specified, it is called each time a buffer is read into the memory
-pool from the backing file.
-If the
-.I pgout
-function is specified, it is called each time a buffer is written into the
-backing file.
-Both functions are called with the
-.I pgcookie
-pointer, the page number and a pointer to the page to being read or written.
-.PP
-The function
-.BR mpool_new ()
-takes an
-.I MPOOL
-pointer and an address as arguments.
-If a new page can be allocated, a pointer to the page is returned and
-the page number is stored into the
-.I pgnoaddr
-address.
-Otherwise, NULL is returned and
-.I errno
-is set.
-.PP
-The function
-.BR mpool_get ()
-takes an
-.I MPOOL
-pointer and a page number as arguments.
-If the page exists, a pointer to the page is returned.
-Otherwise, NULL is returned and
-.I errno
-is set.
-The
-.I flags
-argument is not currently used.
-.PP
-The function
-.BR mpool_put ()
-unpins the page referenced by
-.IR pgaddr .
-.I pgaddr
-must be an address previously returned by
-.BR mpool_get ()
-or
-.BR mpool_new ().
-The flag value is specified by ORing
-any of the following values:
-.TP
-.B MPOOL_DIRTY
-The page has been modified and needs to be written to the backing file.
-.PP
-.BR mpool_put ()
-returns 0 on success and \-1 if an error occurs.
-.PP
-The function
-.BR mpool_sync ()
-writes all modified pages associated with the
-.I MPOOL
-pointer to the
-backing file.
-.BR mpool_sync ()
-returns 0 on success and \-1 if an error occurs.
-.PP
-The
-.BR mpool_close ()
-function free's up any allocated memory associated with the memory pool
-cookie.
-Modified pages are
-.B not
-written to the backing file.
-.BR mpool_close ()
-returns 0 on success and \-1 if an error occurs.
-.SH ERRORS
-The
-.BR mpool_open ()
-function may fail and set
-.I errno
-for any of the errors specified for the library routine
-.BR malloc (3).
-.PP
-The
-.BR mpool_get ()
-function may fail and set
-.I errno
-for the following:
-.TP 15
-.B EINVAL
-The requested record doesn't exist.
-.PP
-The
-.BR mpool_new ()
-and
-.BR mpool_get ()
-functions may fail and set
-.I errno
-for any of the errors specified for the library routines
-.BR read (2),
-.BR write (2),
-and
-.BR malloc (3).
-.PP
-The
-.BR mpool_sync ()
-function may fail and set
-.I errno
-for any of the errors specified for the library routine
-.BR write (2).
-.PP
-The
-.BR mpool_close ()
-function may fail and set
-.I errno
-for any of the errors specified for the library routine
-.BR free (3).
-.SH STANDARDS
-BSD.
-.SH SEE ALSO
-.BR btree (3),
-.BR dbopen (3),
-.BR hash (3),
-.BR recno (3)
diff --git a/man3/mprobe.3 b/man3/mprobe.3
deleted file mode 100644
index 4baeaf2a5..000000000
--- a/man3/mprobe.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/mcheck.3
diff --git a/man3/mq_close.3 b/man3/mq_close.3
deleted file mode 100644
index c422ec7ec..000000000
--- a/man3/mq_close.3
+++ /dev/null
@@ -1,73 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH mq_close 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mq_close \- close a message queue descriptor
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B #include <mqueue.h>
-.PP
-.BI "int mq_close(mqd_t " mqdes );
-.fi
-.SH DESCRIPTION
-.BR mq_close ()
-closes the message queue descriptor
-.IR mqdes .
-.PP
-If the calling process has attached a notification request (see
-.BR mq_notify (3))
-to this message queue via
-.IR mqdes ,
-then this request is removed,
-and another process can now attach a notification request.
-.SH RETURN VALUE
-On success
-.BR mq_close ()
-returns 0; on error, \-1 is returned, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-The message queue descriptor specified in
-.I mqdes
-is invalid.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mq_close ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-All open message queues are automatically closed on process termination,
-or upon
-.BR execve (2).
-.SH SEE ALSO
-.BR mq_getattr (3),
-.BR mq_notify (3),
-.BR mq_open (3),
-.BR mq_receive (3),
-.BR mq_send (3),
-.BR mq_unlink (3),
-.BR mq_overview (7)
diff --git a/man3/mq_getattr.3 b/man3/mq_getattr.3
deleted file mode 100644
index 5baf065bf..000000000
--- a/man3/mq_getattr.3
+++ /dev/null
@@ -1,232 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH mq_getattr 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mq_getattr, mq_setattr \- get/set message queue attributes
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B #include <mqueue.h>
-.PP
-.BI "int mq_getattr(mqd_t " mqdes ", struct mq_attr *" attr );
-.BI "int mq_setattr(mqd_t " mqdes ", const struct mq_attr *restrict " newattr ,
-.BI " struct mq_attr *restrict " oldattr );
-.fi
-.SH DESCRIPTION
-.BR mq_getattr ()
-and
-.BR mq_setattr ()
-respectively retrieve and modify attributes of the message queue
-referred to by the message queue descriptor
-.IR mqdes .
-.PP
-.BR mq_getattr ()
-returns an
-.I mq_attr
-structure in the buffer pointed by
-.IR attr .
-This structure is defined as:
-.PP
-.in +4n
-.EX
-struct mq_attr {
- long mq_flags; /* Flags: 0 or O_NONBLOCK */
- long mq_maxmsg; /* Max. # of messages on queue */
- long mq_msgsize; /* Max. message size (bytes) */
- long mq_curmsgs; /* # of messages currently in queue */
-};
-.EE
-.in
-.PP
-The
-.I mq_flags
-field contains flags associated with the open message queue description.
-This field is initialized when the queue is created by
-.BR mq_open (3).
-The only flag that can appear in this field is
-.BR O_NONBLOCK .
-.PP
-The
-.I mq_maxmsg
-and
-.I mq_msgsize
-fields are set when the message queue is created by
-.BR mq_open (3).
-The
-.I mq_maxmsg
-field is an upper limit on the number of messages
-that may be placed on the queue using
-.BR mq_send (3).
-The
-.I mq_msgsize
-field is an upper limit on the size of messages
-that may be placed on the queue.
-Both of these fields must have a value greater than zero.
-Two
-.I /proc
-files that place ceilings on the values for these fields are described in
-.BR mq_overview (7).
-.PP
-The
-.I mq_curmsgs
-field returns the number of messages currently held in the queue.
-.PP
-.BR mq_setattr ()
-sets message queue attributes using information supplied in the
-.I mq_attr
-structure pointed to by
-.IR newattr .
-The only attribute that can be modified is the setting of the
-.B O_NONBLOCK
-flag in
-.IR mq_flags .
-The other fields in
-.I newattr
-are ignored.
-If the
-.I oldattr
-field is not NULL,
-then the buffer that it points to is used to return an
-.I mq_attr
-structure that contains the same information that is returned by
-.BR mq_getattr ().
-.SH RETURN VALUE
-On success
-.BR mq_getattr ()
-and
-.BR mq_setattr ()
-return 0; on error, \-1 is returned, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-The message queue descriptor specified in
-.I mqdes
-is invalid.
-.TP
-.B EINVAL
-.I newattr\->mq_flags
-contained set bits other than
-.BR O_NONBLOCK .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mq_getattr (),
-.BR mq_setattr ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-On Linux,
-.BR mq_getattr ()
-and
-.BR mq_setattr ()
-are library functions layered on top of the
-.BR mq_getsetattr (2)
-system call.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH EXAMPLES
-The program below can be used to show the default
-.I mq_maxmsg
-and
-.I mq_msgsize
-values that are assigned to a message queue that is created with a call to
-.BR mq_open (3)
-in which the
-.I attr
-argument is NULL.
-Here is an example run of the program:
-.PP
-.in +4n
-.EX
-$ \fB./a.out /testq\fP
-Maximum # of messages on queue: 10
-Maximum message size: 8192
-.EE
-.in
-.PP
-Since Linux 3.5, the following
-.I /proc
-files (described in
-.BR mq_overview (7))
-can be used to control the defaults:
-.PP
-.in +4n
-.EX
-$ \fBuname \-sr\fP
-Linux 3.8.0
-$ \fBcat /proc/sys/fs/mqueue/msg_default\fP
-10
-$ \fBcat /proc/sys/fs/mqueue/msgsize_default\fP
-8192
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (mq_getattr.c)
-.EX
-#include <fcntl.h>
-#include <mqueue.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <unistd.h>
-\&
-#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \e
- } while (0)
-\&
-int
-main(int argc, char *argv[])
-{
- mqd_t mqd;
- struct mq_attr attr;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s mq\-name\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- mqd = mq_open(argv[1], O_CREAT | O_EXCL, 0600, NULL);
- if (mqd == (mqd_t) \-1)
- errExit("mq_open");
-\&
- if (mq_getattr(mqd, &attr) == \-1)
- errExit("mq_getattr");
-\&
- printf("Maximum # of messages on queue: %ld\en", attr.mq_maxmsg);
- printf("Maximum message size: %ld\en", attr.mq_msgsize);
-\&
- if (mq_unlink(argv[1]) == \-1)
- errExit("mq_unlink");
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR mq_close (3),
-.BR mq_notify (3),
-.BR mq_open (3),
-.BR mq_receive (3),
-.BR mq_send (3),
-.BR mq_unlink (3),
-.BR mq_overview (7)
diff --git a/man3/mq_notify.3 b/man3/mq_notify.3
deleted file mode 100644
index 4f8eb3f88..000000000
--- a/man3/mq_notify.3
+++ /dev/null
@@ -1,276 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH mq_notify 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mq_notify \- register for notification when a message is available
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B #include <mqueue.h>
-.BR "#include <signal.h> " "/* Definition of SIGEV_* constants */"
-.PP
-.BI "int mq_notify(mqd_t " mqdes ", const struct sigevent *" sevp );
-.fi
-.SH DESCRIPTION
-.BR mq_notify ()
-allows the calling process to register or unregister for delivery of
-an asynchronous notification when a new message arrives on
-the empty message queue referred to by the message queue descriptor
-.IR mqdes .
-.PP
-The
-.I sevp
-argument is a pointer to a
-.I sigevent
-structure.
-For the definition and general details of this structure, see
-.BR sigevent (7).
-.PP
-If
-.I sevp
-is a non-null pointer, then
-.BR mq_notify ()
-registers the calling process to receive message notification.
-The
-.I sigev_notify
-field of the
-.I sigevent
-structure to which
-.I sevp
-points specifies how notification is to be performed.
-This field has one of the following values:
-.TP
-.B SIGEV_NONE
-A "null" notification: the calling process is registered as the target
-for notification, but when a message arrives, no notification is sent.
-.\" When is SIGEV_NONE useful?
-.TP
-.B SIGEV_SIGNAL
-Notify the process by sending the signal specified in
-.IR sigev_signo .
-See
-.BR sigevent (7)
-for general details.
-The
-.I si_code
-field of the
-.I siginfo_t
-structure will be set to
-.BR SI_MESGQ .
-In addition,
-.\" I don't know of other implementations that set
-.\" si_pid and si_uid -- MTK
-.I si_pid
-will be set to the PID of the process that sent the message, and
-.I si_uid
-will be set to the real user ID of the sending process.
-.TP
-.B SIGEV_THREAD
-Upon message delivery, invoke
-.I sigev_notify_function
-as if it were the start function of a new thread.
-See
-.BR sigevent (7)
-for details.
-.PP
-Only one process can be registered to receive notification
-from a message queue.
-.PP
-If
-.I sevp
-is NULL, and the calling process is currently registered to receive
-notifications for this message queue, then the registration is removed;
-another process can then register to receive a message notification
-for this queue.
-.PP
-Message notification occurs only when a new message arrives and
-the queue was previously empty.
-If the queue was not empty at the time
-.BR mq_notify ()
-was called, then a notification will occur only after
-the queue is emptied and a new message arrives.
-.PP
-If another process or thread is waiting to read a message
-from an empty queue using
-.BR mq_receive (3),
-then any message notification registration is ignored:
-the message is delivered to the process or thread calling
-.BR mq_receive (3),
-and the message notification registration remains in effect.
-.PP
-Notification occurs once: after a notification is delivered,
-the notification registration is removed,
-and another process can register for message notification.
-If the notified process wishes to receive the next notification,
-it can use
-.BR mq_notify ()
-to request a further notification.
-This should be done before emptying all unread messages from the queue.
-(Placing the queue in nonblocking mode is useful for emptying
-the queue of messages without blocking once it is empty.)
-.SH RETURN VALUE
-On success
-.BR mq_notify ()
-returns 0; on error, \-1 is returned, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-The message queue descriptor specified in
-.I mqdes
-is invalid.
-.TP
-.B EBUSY
-Another process has already registered to receive notification
-for this message queue.
-.TP
-.B EINVAL
-.I sevp\->sigev_notify
-is not one of the permitted values; or
-.I sevp\->sigev_notify
-is
-.B SIGEV_SIGNAL
-and
-.I sevp\->sigev_signo
-is not a valid signal number.
-.TP
-.B ENOMEM
-Insufficient memory.
-.PP
-POSIX.1-2008 says that an implementation
-.I may
-generate an
-.B EINVAL
-.\" Linux does not do this
-error if
-.I sevp
-is NULL, and the caller is not currently registered to receive
-notifications for the queue
-.IR mqdes .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mq_notify ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-.SS C library/kernel differences
-In the glibc implementation, the
-.BR mq_notify ()
-library function is implemented on top of the system call of the same name.
-When
-.I sevp
-is NULL, or specifies a notification mechanism other than
-.BR SIGEV_THREAD ,
-the library function directly invokes the system call.
-For
-.BR SIGEV_THREAD ,
-much of the implementation resides within the library,
-rather than the kernel.
-(This is necessarily so,
-since the thread involved in handling the notification is one
-that must be managed by the C library POSIX threads implementation.)
-The implementation involves the use of a raw
-.BR netlink (7)
-socket and creates a new thread for each notification that is
-delivered to the process.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH EXAMPLES
-The following program registers a notification request for the
-message queue named in its command-line argument.
-Notification is performed by creating a thread.
-The thread executes a function which reads one message from the
-queue and then terminates the process.
-.SS Program source
-.\" SRC BEGIN (mq_notify.c)
-.EX
-#include <mqueue.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-#define handle_error(msg) \e
- do { perror(msg); exit(EXIT_FAILURE); } while (0)
-\&
-static void /* Thread start function */
-tfunc(union sigval sv)
-{
- struct mq_attr attr;
- ssize_t nr;
- void *buf;
- mqd_t mqdes = *((mqd_t *) sv.sival_ptr);
-\&
- /* Determine max. msg size; allocate buffer to receive msg */
-\&
- if (mq_getattr(mqdes, &attr) == \-1)
- handle_error("mq_getattr");
- buf = malloc(attr.mq_msgsize);
- if (buf == NULL)
- handle_error("malloc");
-\&
- nr = mq_receive(mqdes, buf, attr.mq_msgsize, NULL);
- if (nr == \-1)
- handle_error("mq_receive");
-\&
- printf("Read %zd bytes from MQ\en", nr);
- free(buf);
- exit(EXIT_SUCCESS); /* Terminate the process */
-}
-\&
-int
-main(int argc, char *argv[])
-{
- mqd_t mqdes;
- struct sigevent sev;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s <mq\-name>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- mqdes = mq_open(argv[1], O_RDONLY);
- if (mqdes == (mqd_t) \-1)
- handle_error("mq_open");
-\&
- sev.sigev_notify = SIGEV_THREAD;
- sev.sigev_notify_function = tfunc;
- sev.sigev_notify_attributes = NULL;
- sev.sigev_value.sival_ptr = &mqdes; /* Arg. to thread func. */
- if (mq_notify(mqdes, &sev) == \-1)
- handle_error("mq_notify");
-\&
- pause(); /* Process will be terminated by thread function */
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR mq_close (3),
-.BR mq_getattr (3),
-.BR mq_open (3),
-.BR mq_receive (3),
-.BR mq_send (3),
-.BR mq_unlink (3),
-.BR mq_overview (7),
-.BR sigevent (7)
diff --git a/man3/mq_open.3 b/man3/mq_open.3
deleted file mode 100644
index 8897d5e56..000000000
--- a/man3/mq_open.3
+++ /dev/null
@@ -1,301 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH mq_open 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mq_open \- open a message queue
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.BR "#include <fcntl.h>" " /* For O_* constants */"
-.BR "#include <sys/stat.h>" " /* For mode constants */"
-.B #include <mqueue.h>
-.PP
-.BI "mqd_t mq_open(const char *" name ", int " oflag );
-.BI "mqd_t mq_open(const char *" name ", int " oflag ", mode_t " mode ,
-.BI " struct mq_attr *" attr );
-.fi
-.SH DESCRIPTION
-.BR mq_open ()
-creates a new POSIX message queue or opens an existing queue.
-The queue is identified by
-.IR name .
-For details of the construction of
-.IR name ,
-see
-.BR mq_overview (7).
-.PP
-The
-.I oflag
-argument specifies flags that control the operation of the call.
-(Definitions of the flags values can be obtained by including
-.IR <fcntl.h> .)
-Exactly one of the following must be specified in
-.IR oflag :
-.TP
-.B O_RDONLY
-Open the queue to receive messages only.
-.TP
-.B O_WRONLY
-Open the queue to send messages only.
-.TP
-.B O_RDWR
-Open the queue to both send and receive messages.
-.PP
-Zero or more of the following flags can additionally be
-.IR OR ed
-in
-.IR oflag :
-.TP
-.BR O_CLOEXEC " (since Linux 2.6.26)"
-.\" commit 269f21344b23e552c21c9e2d7ca258479dcd7a0a
-Set the close-on-exec flag for the message queue descriptor.
-See
-.BR open (2)
-for a discussion of why this flag is useful.
-.TP
-.B O_CREAT
-Create the message queue if it does not exist.
-The owner (user ID) of the message queue is set to the effective
-user ID of the calling process.
-The group ownership (group ID) is set to the effective group ID
-of the calling process.
-.\" In reality the filesystem IDs are used on Linux.
-.TP
-.B O_EXCL
-If
-.B O_CREAT
-was specified in
-.IR oflag ,
-and a queue with the given
-.I name
-already exists, then fail with the error
-.BR EEXIST .
-.TP
-.B O_NONBLOCK
-Open the queue in nonblocking mode.
-In circumstances where
-.BR mq_receive (3)
-and
-.BR mq_send (3)
-would normally block, these functions instead fail with the error
-.BR EAGAIN .
-.PP
-If
-.B O_CREAT
-is specified in
-.IR oflag ,
-then two additional arguments must be supplied.
-The
-.I mode
-argument specifies the permissions to be placed on the new queue,
-as for
-.BR open (2).
-(Symbolic definitions for the permissions bits can be obtained by including
-.IR <sys/stat.h> .)
-The permissions settings are masked against the process umask.
-.PP
-The fields of the
-.I struct mq_attr
-pointed to
-.I attr
-specify the maximum number of messages and
-the maximum size of messages that the queue will allow.
-This structure is defined as follows:
-.PP
-.in +4n
-.EX
-struct mq_attr {
- long mq_flags; /* Flags (ignored for mq_open()) */
- long mq_maxmsg; /* Max. # of messages on queue */
- long mq_msgsize; /* Max. message size (bytes) */
- long mq_curmsgs; /* # of messages currently in queue
- (ignored for mq_open()) */
-};
-.EE
-.in
-.PP
-Only the
-.I mq_maxmsg
-and
-.I mq_msgsize
-fields are employed when calling
-.BR mq_open ();
-the values in the remaining fields are ignored.
-.PP
-If
-.I attr
-is NULL, then the queue is created with implementation-defined
-default attributes.
-Since Linux 3.5, two
-.I /proc
-files can be used to control these defaults; see
-.BR mq_overview (7)
-for details.
-.SH RETURN VALUE
-On success,
-.BR mq_open ()
-returns a message queue descriptor for use by other
-message queue functions.
-On error,
-.BR mq_open ()
-returns
-.IR "(mqd_t)\ \-1",
-with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-The queue exists, but the caller does not have permission to
-open it in the specified mode.
-.TP
-.B EACCES
-.I name
-contained more than one slash.
-.\" Note that this isn't consistent with the same case for sem_open()
-.TP
-.B EEXIST
-Both
-.B O_CREAT
-and
-.B O_EXCL
-were specified in
-.IR oflag ,
-but a queue with this
-.I name
-already exists.
-.TP
-.B EINVAL
-.\" glibc checks whether the name starts with a "/" and if not,
-.\" gives this error
-.I name
-doesn't follow the format in
-.BR mq_overview (7).
-.TP
-.B EINVAL
-.B O_CREAT
-was specified in
-.IR oflag ,
-and
-.I attr
-was not NULL, but
-.I attr\->mq_maxmsg
-or
-.I attr\->mq_msqsize
-was invalid.
-Both of these fields must be greater than zero.
-In a process that is unprivileged (does not have the
-.B CAP_SYS_RESOURCE
-capability),
-.I attr\->mq_maxmsg
-must be less than or equal to the
-.I msg_max
-limit, and
-.I attr\->mq_msgsize
-must be less than or equal to the
-.I msgsize_max
-limit.
-In addition, even in a privileged process,
-.I attr\->mq_maxmsg
-cannot exceed the
-.B HARD_MAX
-limit.
-(See
-.BR mq_overview (7)
-for details of these limits.)
-.TP
-.B EMFILE
-The per-process limit on the number of open file
-and message queue descriptors has been reached
-(see the description of
-.B RLIMIT_NOFILE
-in
-.BR getrlimit (2)).
-.TP
-.B ENAMETOOLONG
-.I name
-was too long.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files
-and message queues has been reached.
-.TP
-.B ENOENT
-The
-.B O_CREAT
-flag was not specified in
-.IR oflag ,
-and no queue with this
-.I name
-exists.
-.TP
-.B ENOENT
-.I name
-was just "/" followed by no other characters.
-.\" Note that this isn't consistent with the same case for sem_open()
-.TP
-.B ENOMEM
-Insufficient memory.
-.TP
-.B ENOSPC
-Insufficient space for the creation of a new message queue.
-This probably occurred because the
-.I queues_max
-limit was encountered; see
-.BR mq_overview (7).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mq_open ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-.SS C library/kernel differences
-The
-.BR mq_open ()
-library function is implemented on top of a system call of the same name.
-The library function performs the check that the
-.I name
-starts with a slash (/), giving the
-.B EINVAL
-error if it does not.
-The kernel system call expects
-.I name
-to contain no preceding slash,
-so the C library function passes
-.I name
-without the preceding slash (i.e.,
-.IR name+1 )
-to the system call.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH BUGS
-Before Linux 2.6.14,
-the process umask was not applied to the permissions specified in
-.IR mode .
-.SH SEE ALSO
-.BR mq_close (3),
-.BR mq_getattr (3),
-.BR mq_notify (3),
-.BR mq_receive (3),
-.BR mq_send (3),
-.BR mq_unlink (3),
-.BR mq_overview (7)
diff --git a/man3/mq_receive.3 b/man3/mq_receive.3
deleted file mode 100644
index fd49ad879..000000000
--- a/man3/mq_receive.3
+++ /dev/null
@@ -1,166 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH mq_receive 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mq_receive, mq_timedreceive \- receive a message from a message queue
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B #include <mqueue.h>
-.PP
-.BI "ssize_t mq_receive(mqd_t " mqdes ", char " msg_ptr [. msg_len ],
-.BI " size_t " msg_len ", unsigned int *" msg_prio );
-.PP
-.B #include <time.h>
-.B #include <mqueue.h>
-.PP
-.BI "ssize_t mq_timedreceive(mqd_t " mqdes ", \
-char *restrict " msg_ptr [. msg_len ],
-.BI " size_t " msg_len ", unsigned int *restrict " msg_prio ,
-.BI " const struct timespec *restrict " abs_timeout );
-.fi
-.PP
-.ad l
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR mq_timedreceive ():
-.nf
- _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-.BR mq_receive ()
-removes the oldest message with the highest priority from
-the message queue referred to by the message queue descriptor
-.IR mqdes ,
-and places it in the buffer pointed to by
-.IR msg_ptr .
-The
-.I msg_len
-argument specifies the size of the buffer pointed to by
-.IR msg_ptr ;
-this must be greater than or equal to the
-.I mq_msgsize
-attribute of the queue (see
-.BR mq_getattr (3)).
-If
-.I msg_prio
-is not NULL, then the buffer to which it points is used
-to return the priority associated with the received message.
-.PP
-If the queue is empty, then, by default,
-.BR mq_receive ()
-blocks until a message becomes available,
-or the call is interrupted by a signal handler.
-If the
-.B O_NONBLOCK
-flag is enabled for the message queue description,
-then the call instead fails immediately with the error
-.BR EAGAIN .
-.PP
-.BR mq_timedreceive ()
-behaves just like
-.BR mq_receive (),
-except that if the queue is empty and the
-.B O_NONBLOCK
-flag is not enabled for the message queue description, then
-.I abs_timeout
-points to a structure which specifies how long the call will block.
-This value is an absolute timeout in seconds and nanoseconds
-since the Epoch, 1970-01-01 00:00:00 +0000 (UTC),
-specified in a
-.BR timespec (3)
-structure.
-.PP
-If no message is available,
-and the timeout has already expired by the time of the call,
-.BR mq_timedreceive ()
-returns immediately.
-.SH RETURN VALUE
-On success,
-.BR mq_receive ()
-and
-.BR mq_timedreceive ()
-return the number of bytes in the received message;
-on error, \-1 is returned, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-The queue was empty, and the
-.B O_NONBLOCK
-flag was set for the message queue description referred to by
-.IR mqdes .
-.TP
-.B EBADF
-The descriptor specified in
-.I mqdes
-was invalid or not opened for reading.
-.TP
-.B EINTR
-The call was interrupted by a signal handler; see
-.BR signal (7).
-.TP
-.B EINVAL
-The call would have blocked, and
-.I abs_timeout
-was invalid, either because
-.I tv_sec
-was less than zero, or because
-.I tv_nsec
-was less than zero or greater than 1000 million.
-.TP
-.B EMSGSIZE
-.I msg_len
-was less than the
-.I mq_msgsize
-attribute of the message queue.
-.TP
-.B ETIMEDOUT
-The call timed out before a message could be transferred.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mq_receive (),
-.BR mq_timedreceive ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-On Linux,
-.BR mq_timedreceive ()
-is a system call, and
-.BR mq_receive ()
-is a library function layered on top of that system call.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH SEE ALSO
-.BR mq_close (3),
-.BR mq_getattr (3),
-.BR mq_notify (3),
-.BR mq_open (3),
-.BR mq_send (3),
-.BR mq_unlink (3),
-.BR timespec (3),
-.BR mq_overview (7),
-.BR time (7)
diff --git a/man3/mq_send.3 b/man3/mq_send.3
deleted file mode 100644
index 3dc05b7a2..000000000
--- a/man3/mq_send.3
+++ /dev/null
@@ -1,173 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH mq_send 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mq_send, mq_timedsend \- send a message to a message queue
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B #include <mqueue.h>
-.PP
-.BI "int mq_send(mqd_t " mqdes ", const char " msg_ptr [. msg_len ],
-.BI " size_t " msg_len ", unsigned int " msg_prio );
-.PP
-.B #include <time.h>
-.B #include <mqueue.h>
-.PP
-.BI "int mq_timedsend(mqd_t " mqdes ", const char " msg_ptr [. msg_len ],
-.BI " size_t " msg_len ", unsigned int " msg_prio ,
-.BI " const struct timespec *" abs_timeout );
-.fi
-.PP
-.ad l
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR mq_timedsend ():
-.nf
- _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-.BR mq_send ()
-adds the message pointed to by
-.I msg_ptr
-to the message queue referred to by the message queue descriptor
-.IR mqdes .
-The
-.I msg_len
-argument specifies the length of the message pointed to by
-.IR msg_ptr ;
-this length must be less than or equal to the queue's
-.I mq_msgsize
-attribute.
-Zero-length messages are allowed.
-.PP
-The
-.I msg_prio
-argument is a nonnegative integer that specifies the priority
-of this message.
-Messages are placed on the queue in decreasing order of priority,
-with newer messages of the same priority being placed after
-older messages with the same priority.
-See
-.BR mq_overview (7)
-for details on the range for the message priority.
-.PP
-If the message queue is already full
-(i.e., the number of messages on the queue equals the queue's
-.I mq_maxmsg
-attribute), then, by default,
-.BR mq_send ()
-blocks until sufficient space becomes available to allow the message
-to be queued, or until the call is interrupted by a signal handler.
-If the
-.B O_NONBLOCK
-flag is enabled for the message queue description,
-then the call instead fails immediately with the error
-.BR EAGAIN .
-.PP
-.BR mq_timedsend ()
-behaves just like
-.BR mq_send (),
-except that if the queue is full and the
-.B O_NONBLOCK
-flag is not enabled for the message queue description, then
-.I abs_timeout
-points to a structure which specifies how long the call will block.
-This value is an absolute timeout in seconds and nanoseconds
-since the Epoch, 1970-01-01 00:00:00 +0000 (UTC),
-specified in a
-.BR timespec (3)
-structure.
-.PP
-If the message queue is full,
-and the timeout has already expired by the time of the call,
-.BR mq_timedsend ()
-returns immediately.
-.SH RETURN VALUE
-On success,
-.BR mq_send ()
-and
-.BR mq_timedsend ()
-return zero; on error, \-1 is returned, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-The queue was full, and the
-.B O_NONBLOCK
-flag was set for the message queue description referred to by
-.IR mqdes .
-.TP
-.B EBADF
-The descriptor specified in
-.I mqdes
-was invalid or not opened for writing.
-.TP
-.B EINTR
-The call was interrupted by a signal handler; see
-.BR signal (7).
-.TP
-.B EINVAL
-The call would have blocked, and
-.I abs_timeout
-was invalid, either because
-.I tv_sec
-was less than zero, or because
-.I tv_nsec
-was less than zero or greater than 1000 million.
-.TP
-.B EMSGSIZE
-.I msg_len
-was greater than the
-.I mq_msgsize
-attribute of the message queue.
-.TP
-.B ETIMEDOUT
-The call timed out before a message could be transferred.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mq_send (),
-.BR mq_timedsend ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-On Linux,
-.BR mq_timedsend ()
-is a system call, and
-.BR mq_send ()
-is a library function layered on top of that system call.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH SEE ALSO
-.BR mq_close (3),
-.BR mq_getattr (3),
-.BR mq_notify (3),
-.BR mq_open (3),
-.BR mq_receive (3),
-.BR mq_unlink (3),
-.BR timespec (3),
-.BR mq_overview (7),
-.BR time (7)
diff --git a/man3/mq_setattr.3 b/man3/mq_setattr.3
deleted file mode 100644
index a3818a208..000000000
--- a/man3/mq_setattr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/mq_getattr.3
diff --git a/man3/mq_timedreceive.3 b/man3/mq_timedreceive.3
deleted file mode 100644
index 9fed5f293..000000000
--- a/man3/mq_timedreceive.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/mq_receive.3
diff --git a/man3/mq_timedsend.3 b/man3/mq_timedsend.3
deleted file mode 100644
index 28b1eff0a..000000000
--- a/man3/mq_timedsend.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/mq_send.3
diff --git a/man3/mq_unlink.3 b/man3/mq_unlink.3
deleted file mode 100644
index 17e15c145..000000000
--- a/man3/mq_unlink.3
+++ /dev/null
@@ -1,71 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH mq_unlink 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mq_unlink \- remove a message queue
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B #include <mqueue.h>
-.PP
-.BI "int mq_unlink(const char *" name );
-.fi
-.SH DESCRIPTION
-.BR mq_unlink ()
-removes the specified message queue
-.IR name .
-The message queue name is removed immediately.
-The queue itself is destroyed once any other processes that have
-the queue open close their descriptors referring to the queue.
-.SH RETURN VALUE
-On success
-.BR mq_unlink ()
-returns 0; on error, \-1 is returned, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-The caller does not have permission to unlink this message queue.
-.TP
-.B ENAMETOOLONG
-.I name
-was too long.
-.TP
-.B ENOENT
-There is no message queue with the given
-.IR name .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mq_unlink ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH SEE ALSO
-.BR mq_close (3),
-.BR mq_getattr (3),
-.BR mq_notify (3),
-.BR mq_open (3),
-.BR mq_receive (3),
-.BR mq_send (3),
-.BR mq_overview (7)
diff --git a/man3/mrand48.3 b/man3/mrand48.3
deleted file mode 100644
index 3133f7d62..000000000
--- a/man3/mrand48.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/drand48.3
diff --git a/man3/mrand48_r.3 b/man3/mrand48_r.3
deleted file mode 100644
index 81e9d8ef7..000000000
--- a/man3/mrand48_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/drand48_r.3
diff --git a/man3/mtrace.3 b/man3/mtrace.3
deleted file mode 100644
index c7fb2f81f..000000000
--- a/man3/mtrace.3
+++ /dev/null
@@ -1,183 +0,0 @@
-'\" t
-.\" Copyright (c) 2012 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH mtrace 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mtrace, muntrace \- malloc tracing
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B "#include <mcheck.h>"
-.PP
-.B "void mtrace(void);"
-.B "void muntrace(void);"
-.fi
-.SH DESCRIPTION
-The
-.BR mtrace ()
-function installs hook functions for the memory-allocation functions
-.RB ( malloc (3),
-.BR realloc (3)
-.BR memalign (3),
-.BR free (3)).
-These hook functions record tracing information about memory allocation
-and deallocation.
-The tracing information can be used to discover memory leaks and
-attempts to free nonallocated memory in a program.
-.PP
-The
-.BR muntrace ()
-function disables the hook functions installed by
-.BR mtrace (),
-so that tracing information is no longer recorded
-for the memory-allocation functions.
-If no hook functions were successfully installed by
-.BR mtrace (),
-.BR muntrace ()
-does nothing.
-.PP
-When
-.BR mtrace ()
-is called, it checks the value of the environment variable
-.BR MALLOC_TRACE ,
-which should contain the pathname of a file in which
-the tracing information is to be recorded.
-If the pathname is successfully opened, it is truncated to zero length.
-.PP
-If
-.B MALLOC_TRACE
-is not set,
-or the pathname it specifies is invalid or not writable,
-then no hook functions are installed, and
-.BR mtrace ()
-has no effect.
-In set-user-ID and set-group-ID programs,
-.B MALLOC_TRACE
-is ignored, and
-.BR mtrace ()
-has no effect.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR mtrace (),
-.BR muntrace ()
-T} Thread safety MT-Unsafe
-.TE
-.hy
-.ad
-.sp 1
-.\" FIXME: The marking is different from that in the glibc manual,
-.\" markings in glibc manual are more detailed:
-.\"
-.\" mtrace: MT-Unsafe env race:mtrace const:malloc_hooks init
-.\" muntrace: MT-Unsafe race:mtrace const:malloc_hooks locale
-.\"
-.\" But there is something wrong in glibc manual, for example:
-.\" glibc manual says muntrace should have marking locale because it calls
-.\" fprintf(), but muntrace does not execute area which cause locale problem.
-.SH STANDARDS
-GNU.
-.SH NOTES
-In normal usage,
-.BR mtrace ()
-is called once at the start of execution of a program, and
-.BR muntrace ()
-is never called.
-.PP
-The tracing output produced after a call to
-.BR mtrace ()
-is textual, but not designed to be human readable.
-The GNU C library provides a Perl script,
-.BR mtrace (1),
-that interprets the trace log and produces human-readable output.
-For best results,
-the traced program should be compiled with debugging enabled,
-so that line-number information is recorded in the executable.
-.PP
-The tracing performed by
-.BR mtrace ()
-incurs a performance penalty (if
-.B MALLOC_TRACE
-points to a valid, writable pathname).
-.SH BUGS
-The line-number information produced by
-.BR mtrace (1)
-is not always precise:
-the line number references may refer to the previous or following (nonblank)
-line of the source code.
-.SH EXAMPLES
-The shell session below demonstrates the use of the
-.BR mtrace ()
-function and the
-.BR mtrace (1)
-command in a program that has memory leaks at two different locations.
-The demonstration uses the following program:
-.PP
-.in +4n
-.RB "$ " "cat t_mtrace.c"
-.\" SRC BEGIN (t_mtrace.c)
-.EX
-#include <mcheck.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(void)
-{
- mtrace();
-\&
- for (unsigned int j = 0; j < 2; j++)
- malloc(100); /* Never freed\-\-a memory leak */
-\&
- calloc(16, 16); /* Never freed\-\-a memory leak */
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.in
-.PP
-When we run the program as follows, we see that
-.BR mtrace ()
-diagnosed memory leaks at two different locations in the program:
-.PP
-.in +4n
-.EX
-.RB "$ " "cc \-g t_mtrace.c \-o t_mtrace"
-.RB "$ " "export MALLOC_TRACE=/tmp/t"
-.RB "$ " "./t_mtrace"
-.RB "$ " "mtrace ./t_mtrace $MALLOC_TRACE"
-Memory not freed:
--\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
- Address Size Caller
-0x084c9378 0x64 at /home/cecilia/t_mtrace.c:12
-0x084c93e0 0x64 at /home/cecilia/t_mtrace.c:12
-0x084c9448 0x100 at /home/cecilia/t_mtrace.c:16
-.EE
-.in
-.PP
-The first two messages about unfreed memory correspond to the two
-.BR malloc (3)
-calls inside the
-.I for
-loop.
-The final message corresponds to the call to
-.BR calloc (3)
-(which in turn calls
-.BR malloc (3)).
-.SH SEE ALSO
-.BR mtrace (1),
-.BR malloc (3),
-.BR malloc_hook (3),
-.BR mcheck (3)
diff --git a/man3/muntrace.3 b/man3/muntrace.3
deleted file mode 100644
index 2b03d1071..000000000
--- a/man3/muntrace.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/mtrace.3
diff --git a/man3/nan.3 b/man3/nan.3
deleted file mode 100644
index 996e74067..000000000
--- a/man3/nan.3
+++ /dev/null
@@ -1,99 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" Based on glibc infopages
-.\"
-.\" Corrections by aeb
-.\"
-.TH nan 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-nan, nanf, nanl \- return 'Not a Number'
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double nan(const char *" tagp );
-.BI "float nanf(const char *" tagp );
-.BI "long double nanl(const char *" tagp );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR nan (),
-.BR nanf (),
-.BR nanl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-These functions return a representation (determined by
-.IR tagp )
-of a quiet NaN.
-If the implementation does not support
-quiet NaNs, these functions return zero.
-.PP
-The call
-.I nan("char\-sequence")
-is equivalent to:
-.PP
-.in +4n
-.EX
-strtod("NAN(char\-sequence)", NULL);
-.EE
-.in
-.PP
-Similarly, calls to
-.BR nanf ()
-and
-.BR nanl ()
-are equivalent to analogous calls to
-.BR strtof (3)
-and
-.BR strtold (3).
-.PP
-The argument
-.I tagp
-is used in an unspecified manner.
-On IEEE 754 systems, there are many representations of NaN, and
-.I tagp
-selects one.
-On other systems it may do nothing.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR nan (),
-.BR nanf (),
-.BR nanl ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.PP
-See also IEC 559 and the appendix with
-recommended functions in IEEE 754/IEEE 854.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR isnan (3),
-.BR strtod (3),
-.BR math_error (7)
diff --git a/man3/nanf.3 b/man3/nanf.3
deleted file mode 100644
index 08e9aa7c6..000000000
--- a/man3/nanf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/nan.3
diff --git a/man3/nanl.3 b/man3/nanl.3
deleted file mode 100644
index 08e9aa7c6..000000000
--- a/man3/nanl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/nan.3
diff --git a/man3/nearbyint.3 b/man3/nearbyint.3
deleted file mode 100644
index 3300c2c40..000000000
--- a/man3/nearbyint.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rint.3
diff --git a/man3/nearbyintf.3 b/man3/nearbyintf.3
deleted file mode 100644
index 3300c2c40..000000000
--- a/man3/nearbyintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rint.3
diff --git a/man3/nearbyintl.3 b/man3/nearbyintl.3
deleted file mode 100644
index 3300c2c40..000000000
--- a/man3/nearbyintl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rint.3
diff --git a/man3/netlink.3 b/man3/netlink.3
deleted file mode 100644
index 5da97632b..000000000
--- a/man3/netlink.3
+++ /dev/null
@@ -1,87 +0,0 @@
-.\" This manpage copyright 1998 by Andi Kleen.
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" Based on the original comments from Alexey Kuznetsov
-.\" $Id: netlink.3,v 1.1 1999/05/14 17:17:24 freitag Exp $
-.\"
-.TH netlink 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-netlink \- Netlink macros
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <asm/types.h>
-.B #include <linux/netlink.h>
-.PP
-.BI "int NLMSG_ALIGN(size_t " len );
-.BI "int NLMSG_LENGTH(size_t " len );
-.BI "int NLMSG_SPACE(size_t " len );
-.BI "void *NLMSG_DATA(struct nlmsghdr *" nlh );
-.BI "struct nlmsghdr *NLMSG_NEXT(struct nlmsghdr *" nlh ", int " len );
-.BI "int NLMSG_OK(struct nlmsghdr *" nlh ", int " len );
-.BI "int NLMSG_PAYLOAD(struct nlmsghdr *" nlh ", int " len );
-.fi
-.SH DESCRIPTION
-.I <linux/netlink.h>
-defines several standard macros to access or create a netlink datagram.
-They are similar in spirit to the macros defined in
-.BR cmsg (3)
-for auxiliary data.
-The buffer passed to and from a netlink socket should
-be accessed using only these macros.
-.TP
-.BR NLMSG_ALIGN ()
-Round the length of a netlink message up to align it properly.
-.TP
-.BR NLMSG_LENGTH ()
-Given the payload length,
-.IR len ,
-this macro returns the aligned length to store in the
-.I nlmsg_len
-field of the
-.IR nlmsghdr .
-.TP
-.BR NLMSG_SPACE ()
-Return the number of bytes that a netlink message with payload of
-.I len
-would occupy.
-.TP
-.BR NLMSG_DATA ()
-Return a pointer to the payload associated with the passed
-.IR nlmsghdr .
-.TP
-.\" this is bizarre, maybe the interface should be fixed.
-.BR NLMSG_NEXT ()
-Get the next
-.I nlmsghdr
-in a multipart message.
-The caller must check if the current
-.I nlmsghdr
-didn't have the
-.B NLMSG_DONE
-set\[em]this function doesn't return NULL on end.
-The
-.I len
-argument is an lvalue containing the remaining length
-of the message buffer.
-This macro decrements it by the length of the message header.
-.TP
-.BR NLMSG_OK ()
-Return true if the netlink message is not truncated and
-is in a form suitable for parsing.
-.TP
-.BR NLMSG_PAYLOAD ()
-Return the length of the payload associated with the
-.IR nlmsghdr .
-.SH VERSIONS
-It is often better to use netlink via
-.I libnetlink
-than via the low-level kernel interface.
-.SH STANDARDS
-Linux.
-.SH SEE ALSO
-.BR libnetlink (3),
-.BR netlink (7)
diff --git a/man3/newlocale.3 b/man3/newlocale.3
deleted file mode 100644
index 5d10e9a90..000000000
--- a/man3/newlocale.3
+++ /dev/null
@@ -1,356 +0,0 @@
-.\" Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH newlocale 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-newlocale, freelocale \- create, modify, and free a locale object
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <locale.h>
-.PP
-.BI "locale_t newlocale(int " category_mask ", const char *" locale ,
-.BI " locale_t " base );
-.BI "void freelocale(locale_t " locobj );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR newlocale (),
-.BR freelocale ():
-.nf
- Since glibc 2.10:
- _XOPEN_SOURCE >= 700
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR newlocale ()
-function creates a new locale object, or modifies an existing object,
-returning a reference to the new or modified object as the function result.
-Whether the call creates a new object or modifies an existing object
-is determined by the value of
-.IR base :
-.IP \[bu] 3
-If
-.I base
-is
-.IR "(locale_t)\ 0" ,
-a new object is created.
-.IP \[bu]
-If
-.I base
-refers to valid existing locale object
-(i.e., an object returned by a previous call to
-.BR newlocale ()
-or
-.BR duplocale (3)),
-then that object is modified by the call.
-If the call is successful, the contents of
-.I base
-are unspecified (in particular, the object referred to by
-.I base
-may be freed, and a new object created).
-Therefore, the caller should ensure that it stops using
-.I base
-before the call to
-.BR newlocale (),
-and should subsequently refer to the modified object via the
-reference returned as the function result.
-If the call fails, the contents of
-.I base
-remain valid and unchanged.
-.PP
-If
-.I base
-is the special locale object
-.B LC_GLOBAL_LOCALE
-(see
-.BR duplocale (3)),
-or is not
-.I (locale_t)\ 0
-and is not a valid locale object handle,
-the behavior is undefined.
-.PP
-The
-.I category_mask
-argument is a bit mask that specifies the locale categories
-that are to be set in a newly created locale object
-or modified in an existing object.
-The mask is constructed by a bitwise OR of the constants
-.BR LC_ADDRESS_MASK ,
-.BR LC_CTYPE_MASK ,
-.BR LC_COLLATE_MASK ,
-.BR LC_IDENTIFICATION_MASK ,
-.BR LC_MEASUREMENT_MASK ,
-.BR LC_MESSAGES_MASK ,
-.BR LC_MONETARY_MASK ,
-.BR LC_NUMERIC_MASK ,
-.BR LC_NAME_MASK ,
-.BR LC_PAPER_MASK ,
-.BR LC_TELEPHONE_MASK ,
-and
-.BR LC_TIME_MASK .
-Alternatively, the mask can be specified as
-.BR LC_ALL_MASK ,
-which is equivalent to ORing all of the preceding constants.
-.PP
-For each category specified in
-.IR category_mask ,
-the locale data from
-.I locale
-will be used in the object returned by
-.BR newlocale ().
-If a new locale object is being created,
-data for all categories not specified in
-.I category_mask
-is taken from the default ("POSIX") locale.
-.PP
-The following preset values of
-.I locale
-are defined for all categories that can be specified in
-.IR category_mask :
-.TP
-"POSIX"
-A minimal locale environment for C language programs.
-.TP
-"C"
-Equivalent to "POSIX".
-.TP
-""
-An implementation-defined native environment
-corresponding to the values of the
-.B LC_*
-and
-.B LANG
-environment variables (see
-.BR locale (7)).
-.SS freelocale()
-The
-.BR freelocale ()
-function deallocates the resources associated with
-.IR locobj ,
-a locale object previously returned by a call to
-.BR newlocale ()
-or
-.BR duplocale (3).
-If
-.I locobj
-is
-.B LC_GLOBAL_LOCALE
-or is not valid locale object handle, the results are undefined.
-.PP
-Once a locale object has been freed,
-the program should make no further use of it.
-.SH RETURN VALUE
-On success,
-.BR newlocale ()
-returns a handle that can be used in calls to
-.BR duplocale (3),
-.BR freelocale (),
-and other functions that take a
-.I locale_t
-argument.
-On error,
-.BR newlocale ()
-returns
-.IR "(locale_t)\ 0",
-and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-One or more bits in
-.I category_mask
-do not correspond to a valid locale category.
-.TP
-.B EINVAL
-.I locale
-is NULL.
-.TP
-.B ENOENT
-.I locale
-is not a string pointer referring to a valid locale.
-.TP
-.B ENOMEM
-Insufficient memory to create a locale object.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.3.
-.SH NOTES
-Each locale object created by
-.BR newlocale ()
-should be deallocated using
-.BR freelocale ().
-.SH EXAMPLES
-The program below takes up to two command-line arguments,
-which each identify locales.
-The first argument is required, and is used to set the
-.B LC_NUMERIC
-category in a locale object created using
-.BR newlocale ().
-The second command-line argument is optional;
-if it is present, it is used to set the
-.B LC_TIME
-category of the locale object.
-.PP
-Having created and initialized the locale object,
-the program then applies it using
-.BR uselocale (3),
-and then tests the effect of the locale changes by:
-.IP (1) 5
-Displaying a floating-point number with a fractional part.
-This output will be affected by the
-.B LC_NUMERIC
-setting.
-In many European-language locales,
-the fractional part of the number is separated from the integer part
-using a comma, rather than a period.
-.IP (2)
-Displaying the date.
-The format and language of the output will be affected by the
-.B LC_TIME
-setting.
-.PP
-The following shell sessions show some example runs of this program.
-.PP
-Set the
-.B LC_NUMERIC
-category to
-.I fr_FR
-(French):
-.PP
-.in +4n
-.EX
-$ \fB./a.out fr_FR\fP
-123456,789
-Fri Mar 7 00:25:08 2014
-.EE
-.in
-.PP
-Set the
-.B LC_NUMERIC
-category to
-.I fr_FR
-(French),
-and the
-.B LC_TIME
-category to
-.I it_IT
-(Italian):
-.PP
-.in +4n
-.EX
-$ \fB./a.out fr_FR it_IT\fP
-123456,789
-ven 07 mar 2014 00:26:01 CET
-.EE
-.in
-.PP
-Specify the
-.B LC_TIME
-setting as an empty string,
-which causes the value to be taken from environment variable settings
-(which, here, specify
-.IR mi_NZ ,
-New Zealand Māori):
-.PP
-.in +4n
-.EX
-$ LC_ALL=mi_NZ ./a.out fr_FR ""
-123456,789
-Te Paraire, te 07 o Poutū\-te\-rangi, 2014 00:38:44 CET
-.EE
-.in
-.SS Program source
-.\" SRC BEGIN (newlocale.c)
-.EX
-#define _XOPEN_SOURCE 700
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-\&
-#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \e
- } while (0)
-\&
-int
-main(int argc, char *argv[])
-{
- char buf[100];
- time_t t;
- size_t s;
- struct tm *tm;
- locale_t loc, nloc;
-\&
- if (argc < 2) {
- fprintf(stderr, "Usage: %s locale1 [locale2]\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- /* Create a new locale object, taking the LC_NUMERIC settings
- from the locale specified in argv[1]. */
-\&
- loc = newlocale(LC_NUMERIC_MASK, argv[1], (locale_t) 0);
- if (loc == (locale_t) 0)
- errExit("newlocale");
-\&
- /* If a second command\-line argument was specified, modify the
- locale object to take the LC_TIME settings from the locale
- specified in argv[2]. We assign the result of this newlocale()
- call to \[aq]nloc\[aq] rather than \[aq]loc\[aq], since in some cases, we might
- want to preserve \[aq]loc\[aq] if this call fails. */
-\&
- if (argc > 2) {
- nloc = newlocale(LC_TIME_MASK, argv[2], loc);
- if (nloc == (locale_t) 0)
- errExit("newlocale");
- loc = nloc;
- }
-\&
- /* Apply the newly created locale to this thread. */
-\&
- uselocale(loc);
-\&
- /* Test effect of LC_NUMERIC. */
-\&
- printf("%8.3f\en", 123456.789);
-\&
- /* Test effect of LC_TIME. */
-\&
- t = time(NULL);
- tm = localtime(&t);
- if (tm == NULL)
- errExit("time");
-\&
- s = strftime(buf, sizeof(buf), "%c", tm);
- if (s == 0)
- errExit("strftime");
-\&
- printf("%s\en", buf);
-\&
- /* Free the locale object. */
-\&
- uselocale(LC_GLOBAL_LOCALE); /* So \[aq]loc\[aq] is no longer in use */
- freelocale(loc);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR locale (1),
-.BR duplocale (3),
-.BR setlocale (3),
-.BR uselocale (3),
-.BR locale (5),
-.BR locale (7)
diff --git a/man3/nextafter.3 b/man3/nextafter.3
deleted file mode 100644
index f691aacbf..000000000
--- a/man3/nextafter.3
+++ /dev/null
@@ -1,203 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" Based on glibc infopages
-.\"
-.TH nextafter 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-nextafter, nextafterf, nextafterl, nexttoward, nexttowardf, nexttowardl \-
-floating-point number manipulation
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double nextafter(double " x ", double " y );
-.BI "float nextafterf(float " x ", float " y );
-.BI "long double nextafterl(long double " x ", long double " y );
-.PP
-.BI "double nexttoward(double " x ", long double " y );
-.BI "float nexttowardf(float " x ", long double " y );
-.BI "long double nexttowardl(long double " x ", long double " y );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR nextafter ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR nextafterf (),
-.BR nextafterl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR nexttoward (),
-.BR nexttowardf (),
-.BR nexttowardl ():
-.nf
- _XOPEN_SOURCE >= 600 || _ISOC99_SOURCE
- || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-The
-.BR nextafter (),
-.BR nextafterf (),
-and
-.BR nextafterl ()
-functions return the next representable floating-point value following
-.I x
-in the direction of
-.IR y .
-If
-.I y
-is less than
-.IR x ,
-these functions will return the largest representable number less than
-.IR x .
-.PP
-If
-.I x
-equals
-.IR y ,
-the functions return
-.IR y .
-.PP
-The
-.BR nexttoward (),
-.BR nexttowardf (),
-and
-.BR nexttowardl ()
-functions do the same as the corresponding
-.BR nextafter ()
-functions, except that they have a
-.I "long double"
-second argument.
-.SH RETURN VALUE
-On success,
-these functions return the next representable floating-point value after
-.I x
-in the direction of
-.IR y .
-.PP
-If
-.I x
-equals
-.IR y ,
-then
-.I y
-(cast to the same type as
-.IR x )
-is returned.
-.PP
-If
-.I x
-or
-.I y
-is a NaN,
-a NaN is returned.
-.PP
-If
-.I x
-is finite,
-.\" e.g., DBL_MAX
-and the result would overflow,
-a range error occurs,
-and the functions return
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-or
-.BR HUGE_VALL ,
-respectively, with the correct mathematical sign.
-.PP
-If
-.I x
-is not equal to
-.IR y ,
-and the correct function result would be subnormal, zero, or underflow,
-a range error occurs,
-and either the correct value (if it can be represented),
-or 0.0, is returned.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Range error: result overflow
-.\" e.g., nextafter(DBL_MAX, HUGE_VAL);
-.I errno
-is set to
-.BR ERANGE .
-An overflow floating-point exception
-.RB ( FE_OVERFLOW )
-is raised.
-.TP
-Range error: result is subnormal or underflows
-.\" e.g., nextafter(DBL_MIN, 0.0);
-.I errno
-is set to
-.BR ERANGE .
-An underflow floating-point exception
-.RB ( FE_UNDERFLOW )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR nextafter (),
-.BR nextafterf (),
-.BR nextafterl (),
-.BR nexttoward (),
-.BR nexttowardf (),
-.BR nexttowardl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.PP
-This function is defined in IEC 559 (and the appendix with
-recommended functions in IEEE 754/IEEE 854).
-.SH HISTORY
-C99, POSIX.1-2001.
-.SH BUGS
-In glibc 2.5 and earlier, these functions do not raise an underflow
-floating-point
-.RB ( FE_UNDERFLOW )
-exception when an underflow occurs.
-.PP
-Before glibc 2.23
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6799
-these functions did not set
-.IR errno .
-.SH SEE ALSO
-.BR nearbyint (3)
diff --git a/man3/nextafterf.3 b/man3/nextafterf.3
deleted file mode 100644
index 531e48f47..000000000
--- a/man3/nextafterf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/nextafter.3
diff --git a/man3/nextafterl.3 b/man3/nextafterl.3
deleted file mode 100644
index 531e48f47..000000000
--- a/man3/nextafterl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/nextafter.3
diff --git a/man3/nextdown.3 b/man3/nextdown.3
deleted file mode 100644
index 853b38897..000000000
--- a/man3/nextdown.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/nextup.3
diff --git a/man3/nextdownf.3 b/man3/nextdownf.3
deleted file mode 100644
index 853b38897..000000000
--- a/man3/nextdownf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/nextup.3
diff --git a/man3/nextdownl.3 b/man3/nextdownl.3
deleted file mode 100644
index 853b38897..000000000
--- a/man3/nextdownl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/nextup.3
diff --git a/man3/nexttoward.3 b/man3/nexttoward.3
deleted file mode 100644
index 531e48f47..000000000
--- a/man3/nexttoward.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/nextafter.3
diff --git a/man3/nexttowardf.3 b/man3/nexttowardf.3
deleted file mode 100644
index 531e48f47..000000000
--- a/man3/nexttowardf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/nextafter.3
diff --git a/man3/nexttowardl.3 b/man3/nexttowardl.3
deleted file mode 100644
index 531e48f47..000000000
--- a/man3/nexttowardl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/nextafter.3
diff --git a/man3/nextup.3 b/man3/nextup.3
deleted file mode 100644
index 7000489a3..000000000
--- a/man3/nextup.3
+++ /dev/null
@@ -1,97 +0,0 @@
-'\" t
-.\" Copyright (C) 2016, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH nextup 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-nextup, nextupf, nextupl, nextdown, nextdownf, nextdownl \-
-return next floating-point number toward positive/negative infinity
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <math.h>
-.PP
-.BI "double nextup(double " x );
-.BI "float nextupf(float " x );
-.BI "long double nextupl(long double " x );
-.PP
-.BI "double nextdown(double " x );
-.BI "float nextdownf(float " x );
-.BI "long double nextdownl(long double " x );
-.fi
-.SH DESCRIPTION
-The
-.BR nextup (),
-.BR nextupf (),
-and
-.BR nextupl ()
-functions return the next representable floating-point number greater than
-.IR x .
-.PP
-If
-.I x
-is the smallest representable negative number in the corresponding type,
-these functions return \-0.
-If
-.I x
-is 0, the returned value is the smallest representable positive number
-of the corresponding type.
-.PP
-If
-.I x
-is positive infinity, the returned value is positive infinity.
-If
-.I x
-is negative infinity,
-the returned value is the largest representable finite negative number
-of the corresponding type.
-.PP
-If
-.I x
-is Nan,
-the returned value is NaN.
-.PP
-The value returned by
-.I nextdown(x)
-is
-.IR \-nextup(\-x) ,
-and similarly for the other types.
-.SH RETURN VALUE
-See DESCRIPTION.
-.\" .SH ERRORS
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR nextup (),
-.BR nextupf (),
-.BR nextupl (),
-.BR nextdown (),
-.BR nextdownf (),
-.BR nextdownl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-These functions are described in
-.I IEEE Std 754-2008 - Standard for Floating-Point Arithmetic
-and
-.IR "ISO/IEC TS 18661".
-.SH HISTORY
-glibc 2.24.
-.SH SEE ALSO
-.BR nearbyint (3),
-.BR nextafter (3)
diff --git a/man3/nextupf.3 b/man3/nextupf.3
deleted file mode 100644
index 853b38897..000000000
--- a/man3/nextupf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/nextup.3
diff --git a/man3/nextupl.3 b/man3/nextupl.3
deleted file mode 100644
index 853b38897..000000000
--- a/man3/nextupl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/nextup.3
diff --git a/man3/nftw.3 b/man3/nftw.3
deleted file mode 100644
index 1a5c9c928..000000000
--- a/man3/nftw.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ftw.3
diff --git a/man3/nl_langinfo.3 b/man3/nl_langinfo.3
deleted file mode 100644
index efe74e9e4..000000000
--- a/man3/nl_langinfo.3
+++ /dev/null
@@ -1,356 +0,0 @@
-'\" t
-.\" Copyright (c) 2001 Markus Kuhn <mkuhn@acm.org>
-.\" and Copyright (c) 2015 Sam Varshavchik <mrsam@courier-mta.com>
-.\" and Copyright (c) 2015 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 manual
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\"
-.\" Corrected prototype, 2002-10-18, aeb
-.\"
-.TH nl_langinfo 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-nl_langinfo, nl_langinfo_l \- query language and locale information
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <langinfo.h>
-.PP
-.BI "char *nl_langinfo(nl_item " item );
-.BI "char *nl_langinfo_l(nl_item " item ", locale_t " locale );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR nl_langinfo_l ():
-.nf
- Since glibc 2.24:
- _POSIX_C_SOURCE >= 200809L
- glibc 2.23 and earlier:
- _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-The
-.BR nl_langinfo ()
-and
-.BR nl_langinfo_l ()
-functions provide access to locale information
-in a more flexible way than
-.BR localeconv (3).
-.BR nl_langinfo ()
-returns a string which is the value corresponding to
-\fIitem\fP in the program's current global
-locale.
-.BR nl_langinfo_l ()
-returns a string which is the value corresponding to \fIitem\fP
-for the locale identified by the locale object \fIlocale\fP,
-which was previously created by
-.BR newlocale (3).
-Individual and additional elements of the locale categories can
-be queried.
-.PP
-Examples for the locale elements that can be specified in \fIitem\fP
-using the constants defined in \fI<langinfo.h>\fP are:
-.TP
-.BR CODESET \ (LC_CTYPE)
-Return a string with the name of the character encoding used in the
-selected locale, such as "UTF-8", "ISO-8859-1", or "ANSI_X3.4-1968"
-(better known as US-ASCII).
-This is the same string that you get with
-"locale charmap".
-For a list of character encoding names,
-try "locale \-m" (see
-.BR locale (1)).
-.TP
-.BR D_T_FMT \ (LC_TIME)
-Return a string that can be used as a format string for
-.BR strftime (3)
-to represent time and date in a locale-specific way
-.RB ( %c
-conversion specification).
-.TP
-.BR D_FMT \ (LC_TIME)
-Return a string that can be used as a format string for
-.BR strftime (3)
-to represent a date in a locale-specific way
-.RB ( %x
-conversion specification).
-.TP
-.BR T_FMT \ (LC_TIME)
-Return a string that can be used as a format string for
-.BR strftime (3)
-to represent a time in a locale-specific way
-.RB ( %X
-conversion specification).
-.TP
-.BR AM_STR \ (LC_TIME)
-Return a string that represents affix for ante meridiem (before noon, "AM")
-time.
-(Used in
-.B %p
-.BR strftime (3)
-conversion specification.)
-.TP
-.BR PM_STR \ (LC_TIME)
-Return a string that represents affix for post meridiem (before midnight, "PM")
-time.
-(Used in
-.B %p
-.BR strftime (3)
-conversion specification.)
-.TP
-.BR T_FMT_AMPM \ (LC_TIME)
-Return a string that can be used as a format string for
-.BR strftime (3)
-to represent a time in a.m. or p.m. notation in a locale-specific way
-.RB ( %r
-conversion specification).
-.TP
-.BR ERA \ (LC_TIME)
-Return era description, which contains information about how years are counted
-and displayed for each era in a locale.
-Each era description segment shall have the format:
-.RS
-.IP
-.IR direction : offset : start_date : end_date : era_name : era_format
-.RE
-.IP
-according to the definitions below:
-.RS
-.TP 12
-.I direction
-Either a
-.RB \[dq] + "\[dq] or a \[dq]" - \[dq]
-character.
-The
-.RB \[dq] + \[dq]
-means that years increase from the
-.I start_date
-towards the
-.IR end_date ,
-.RB \[dq] - \[dq]
-means the opposite.
-.TP
-.I offset
-The epoch year of the
-.IR start_date .
-.TP
-.I start_date
-A date in the form
-.IR yyyy / mm / dd ,
-where
-.IR yyyy ", " mm ", and " dd
-are the year, month, and day numbers respectively of the start of the era.
-.TP
-.I end_date
-The ending date of the era, in the same format as the
-.IR start_date ,
-or one of the two special values
-.RB \[dq] -* \[dq]
-(minus infinity) or
-.RB \[dq] +* \[dq]
-(plus infinity).
-.TP
-.I era_name
-The name of the era, corresponding to the
-.B %EC
-.BR strftime (3)
-conversion specification.
-.TP
-.I era_format
-The format of the year in the era, corresponding to the
-.B %EY
-.BR strftime (3)
-conversion specification.
-.RE
-.IP
-Era description segments are separated by semicolons.
-Most locales do not define this value.
-Examples of locales that do define this value are the Japanese and Thai
-locales.
-.TP
-.BR ERA_D_T_FMT \ (LC_TIME)
-Return a string that can be used as a format string for
-.BR strftime (3)
-for alternative representation of time and date in a locale-specific way
-.RB ( %Ec
-conversion specification).
-.TP
-.BR ERA_D_FMT \ (LC_TIME)
-Return a string that can be used as a format string for
-.BR strftime (3)
-for alternative representation of a date in a locale-specific way
-.RB ( %Ex
-conversion specification).
-.TP
-.BR ERA_T_FMT \ (LC_TIME)
-Return a string that can be used as a format string for
-.BR strftime (3)
-for alternative representation of a time in a locale-specific way
-.RB ( %EX
-conversion specification).
-.TP
-.BR DAY_ "{1\[en]7} (LC_TIME)"
-Return name of the \fIn\fP-th day of the week.
-[Warning: this follows
-the US convention DAY_1 = Sunday, not the international convention
-(ISO 8601) that Monday is the first day of the week.]
-(Used in
-.B %A
-.BR strftime (3)
-conversion specification.)
-.TP
-.BR ABDAY_ "{1\[en]7} (LC_TIME)"
-Return abbreviated name of the \fIn\fP-th day of the week.
-(Used in
-.B %a
-.BR strftime (3)
-conversion specification.)
-.TP
-.BR MON_ "{1\[en]12} (LC_TIME)"
-Return name of the \fIn\fP-th month.
-(Used in
-.B %B
-.BR strftime (3)
-conversion specification.)
-.TP
-.BR ABMON_ "{1\[en]12} (LC_TIME)"
-Return abbreviated name of the \fIn\fP-th month.
-(Used in
-.B %b
-.BR strftime (3)
-conversion specification.)
-.TP
-.BR RADIXCHAR \ (LC_NUMERIC)
-Return radix character (decimal dot, decimal comma, etc.).
-.TP
-.BR THOUSEP \ (LC_NUMERIC)
-Return separator character for thousands (groups of three digits).
-.TP
-.BR YESEXPR \ (LC_MESSAGES)
-Return a regular expression that can be used with the
-.BR regex (3)
-function to recognize a positive response to a yes/no question.
-.TP
-.BR NOEXPR \ (LC_MESSAGES)
-Return a regular expression that can be used with the
-.BR regex (3)
-function to recognize a negative response to a yes/no question.
-.TP
-.BR CRNCYSTR \ (LC_MONETARY)
-Return the currency symbol, preceded by "\-" if the symbol should
-appear before the value, "+" if the symbol should appear after the
-value, or "." if the symbol should replace the radix character.
-.PP
-The above list covers just some examples of items that can be requested.
-For a more detailed list, consult
-.IR "The GNU C Library Reference Manual" .
-.SH RETURN VALUE
-On success, these functions return a pointer to a string which
-is the value corresponding to
-.I item
-in the specified locale.
-.PP
-If no locale has been selected by
-.BR setlocale (3)
-for the appropriate category,
-.BR nl_langinfo ()
-return a pointer to the corresponding string in the "C" locale.
-The same is true of
-.BR nl_langinfo_l ()
-if
-.I locale
-specifies a locale where
-.I langinfo
-data is not defined.
-.PP
-If \fIitem\fP is not valid, a pointer to an empty string is returned.
-.PP
-The pointer returned by these functions may point to static data that
-may be overwritten, or the pointer itself may be invalidated,
-by a subsequent call to
-.BR nl_langinfo (),
-.BR nl_langinfo_l (),
-or
-.BR setlocale (3).
-The same statements apply to
-.BR nl_langinfo_l ()
-if the locale object referred to by
-.I locale
-is freed or modified by
-.BR freelocale (3)
-or
-.BR newlocale (3).
-.PP
-POSIX specifies that the application may not modify
-the string returned by these functions.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR nl_langinfo ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SUSv2.
-.SH NOTES
-The behavior of
-.BR nl_langinfo_l ()
-is undefined if
-.I locale
-is the special locale object
-.B LC_GLOBAL_LOCALE
-or is not a valid locale object handle.
-.SH EXAMPLES
-The following program sets the character type and the numeric locale
-according to the environment and queries the terminal character set and
-the radix character.
-.PP
-.\" SRC BEGIN (nl_langinfo.c)
-.EX
-#include <langinfo.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(void)
-{
- setlocale(LC_CTYPE, "");
- setlocale(LC_NUMERIC, "");
-\&
- printf("%s\en", nl_langinfo(CODESET));
- printf("%s\en", nl_langinfo(RADIXCHAR));
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR locale (1),
-.BR localeconv (3),
-.BR setlocale (3),
-.BR charsets (7),
-.BR locale (7)
-.PP
-The GNU C Library Reference Manual
diff --git a/man3/nl_langinfo_l.3 b/man3/nl_langinfo_l.3
deleted file mode 100644
index 36c3e35c0..000000000
--- a/man3/nl_langinfo_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/nl_langinfo.3
diff --git a/man3/nrand48.3 b/man3/nrand48.3
deleted file mode 100644
index 3133f7d62..000000000
--- a/man3/nrand48.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/drand48.3
diff --git a/man3/nrand48_r.3 b/man3/nrand48_r.3
deleted file mode 100644
index 81e9d8ef7..000000000
--- a/man3/nrand48_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/drand48_r.3
diff --git a/man3/ntohl.3 b/man3/ntohl.3
deleted file mode 100644
index ba374e841..000000000
--- a/man3/ntohl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/byteorder.3
diff --git a/man3/ntohs.3 b/man3/ntohs.3
deleted file mode 100644
index ba374e841..000000000
--- a/man3/ntohs.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/byteorder.3
diff --git a/man3/ntp_adjtime.3 b/man3/ntp_adjtime.3
deleted file mode 100644
index b08b9c801..000000000
--- a/man3/ntp_adjtime.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man2/adjtimex.2
diff --git a/man3/ntp_gettime.3 b/man3/ntp_gettime.3
deleted file mode 100644
index 5da0b0915..000000000
--- a/man3/ntp_gettime.3
+++ /dev/null
@@ -1,138 +0,0 @@
-'\" t
-.\" Copyright (c) 2016 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH ntp_gettime 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ntp_gettime, ntp_gettimex \- get time parameters (NTP daemon interface)
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/timex.h>
-.PP
-.BI "int ntp_gettime(struct ntptimeval *" ntv );
-.BI "int ntp_gettimex(struct ntptimeval *" ntv );
-.fi
-.SH DESCRIPTION
-Both of these APIs return information to the caller via the
-.I ntv
-argument, a structure of the following type:
-.PP
-.in +4n
-.EX
-struct ntptimeval {
- struct timeval time; /* Current time */
- long maxerror; /* Maximum error */
- long esterror; /* Estimated error */
- long tai; /* TAI offset */
-\&
- /* Further padding bytes allowing for future expansion */
-};
-.EE
-.in
-.PP
-The fields of this structure are as follows:
-.TP
-.I time
-The current time, expressed as a
-.I timeval
-structure:
-.IP
-.in +4n
-.EX
-struct timeval {
- time_t tv_sec; /* Seconds since the Epoch */
- suseconds_t tv_usec; /* Microseconds */
-};
-.EE
-.in
-.TP
-.I maxerror
-Maximum error, in microseconds.
-This value can be initialized by
-.BR ntp_adjtime (3),
-and is increased periodically (on Linux: each second),
-but is clamped to an upper limit (the kernel constant
-.BR NTP_PHASE_MAX ,
-with a value of 16,000).
-.TP
-.I esterror
-Estimated error, in microseconds.
-This value can be set via
-.BR ntp_adjtime (3)
-to contain an estimate of the difference between the system clock
-and the true time.
-This value is not used inside the kernel.
-.TP
-.I tai
-TAI (Atomic International Time) offset.
-.PP
-.BR ntp_gettime ()
-returns an
-.I ntptimeval
-structure in which the
-.IR time ,
-.IR maxerror ,
-and
-.I esterror
-fields are filled in.
-.PP
-.BR ntp_gettimex ()
-performs the same task as
-.BR ntp_gettime (),
-but also returns information in the
-.I tai
-field.
-.SH RETURN VALUE
-The return values for
-.BR ntp_gettime ()
-and
-.BR ntp_gettimex ()
-are as for
-.BR adjtimex (2).
-Given a correct pointer argument, these functions always succeed.
-.\" FIXME . the info page incorrectly describes the return values.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ntp_gettime (),
-.BR ntp_gettimex ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR ntp_gettime ()
-NTP Kernel Application Program Interface.
-.TP
-.BR ntp_gettimex ()
-GNU.
-.SH HISTORY
-.TP
-.BR ntp_gettime ()
-glibc 2.1.
-.TP
-.BR ntp_gettimex ()
-glibc 2.12.
-.SH SEE ALSO
-.BR adjtimex (2),
-.BR ntp_adjtime (3),
-.BR time (7)
-.PP
-.ad l
-.UR http://www.slac.stanford.edu/comp/unix/\:package/\:rtems/\:src/\:ssrlApps/\:ntpNanoclock/\:api.htm
-NTP "Kernel Application Program Interface"
-.UE
diff --git a/man3/ntp_gettimex.3 b/man3/ntp_gettimex.3
deleted file mode 100644
index 142d76b59..000000000
--- a/man3/ntp_gettimex.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ntp_gettime.3
diff --git a/man3/offsetof.3 b/man3/offsetof.3
deleted file mode 100644
index 65e0ee4c2..000000000
--- a/man3/offsetof.3
+++ /dev/null
@@ -1,110 +0,0 @@
-.\" Copyright (C) 2006 Justin Pryzby <pryzbyj@justinpryzby.com>
-.\" and Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" %%%LICENSE_START(PERMISSIVE_MISC)
-.\" Permission is hereby granted, free of charge, to any person obtaining
-.\" a copy of this software and associated documentation files (the
-.\" "Software"), to deal in the Software without restriction, including
-.\" without limitation the rights to use, copy, modify, merge, publish,
-.\" distribute, sublicense, and/or sell copies of the Software, and to
-.\" permit persons to whom the Software is furnished to do so, subject to
-.\" the following conditions:
-.\"
-.\" The above copyright notice and this permission notice shall be
-.\" included in all copies or substantial portions of the Software.
-.\"
-.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-.\" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-.\" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-.\" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-.\" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-.\" %%%LICENSE_END
-.\"
-.\" References:
-.\" /usr/lib/gcc/i486-linux-gnu/4.1.1/include/stddef.h
-.\" glibc-doc
-.TH offsetof 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-offsetof \- offset of a structure member
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stddef.h>
-.PP
-.BI "size_t offsetof(" type ", " member );
-.fi
-.SH DESCRIPTION
-The macro
-.BR offsetof ()
-returns the offset of the field
-.I member
-from the start of the structure
-.IR type .
-.PP
-This macro is useful because the sizes of the fields that compose
-a structure can vary across implementations,
-and compilers may insert different numbers of padding
-bytes between fields.
-Consequently, an element's offset is not necessarily
-given by the sum of the sizes of the previous elements.
-.PP
-A compiler error will result if
-.I member
-is not aligned to a byte boundary
-(i.e., it is a bit field).
-.SH RETURN VALUE
-.BR offsetof ()
-returns the offset of the given
-.I member
-within the given
-.IR type ,
-in units of bytes.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89.
-.SH EXAMPLES
-On a Linux/i386 system, when compiled using the default
-.BR gcc (1)
-options, the program below produces the following output:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out"
-offsets: i=0; c=4; d=8 a=16
-sizeof(struct s)=16
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (offsetof.c)
-.EX
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(void)
-{
- struct s {
- int i;
- char c;
- double d;
- char a[];
- };
-\&
- /* Output is compiler dependent */
-\&
- printf("offsets: i=%zu; c=%zu; d=%zu a=%zu\en",
- offsetof(struct s, i), offsetof(struct s, c),
- offsetof(struct s, d), offsetof(struct s, a));
- printf("sizeof(struct s)=%zu\en", sizeof(struct s));
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
diff --git a/man3/on_exit.3 b/man3/on_exit.3
deleted file mode 100644
index f2fbec75d..000000000
--- a/man3/on_exit.3
+++ /dev/null
@@ -1,108 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-04-02, David Metcalfe
-.\" Modified 1993-07-25, Rik Faith (faith@cs.unc.edu)
-.TH on_exit 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-on_exit \- register a function to be called at normal process termination
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int on_exit(void (*" function ")(int, void *), void *" arg );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR on_exit ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR on_exit ()
-function registers the given
-.I function
-to be
-called at normal process termination, whether via
-.BR exit (3)
-or via return from the program's
-.IR main ().
-The
-.I function
-is passed the status argument given to the last call to
-.BR exit (3)
-and the
-.I arg
-argument from
-.BR on_exit ().
-.PP
-The same function may be registered multiple times:
-it is called once for each registration.
-.PP
-When a child process is created via
-.BR fork (2),
-it inherits copies of its parent's registrations.
-Upon a successful call to one of the
-.BR exec (3)
-functions, all registrations are removed.
-.SH RETURN VALUE
-The
-.BR on_exit ()
-function returns the value 0 if successful; otherwise
-it returns a nonzero value.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR on_exit ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-SunOS 4, glibc.
-Removed in Solaris (SunOS 5).
-Use the standard
-.BR atexit (3)
-instead.
-.SH CAVEATS
-By the time
-.I function
-is executed, stack
-.RI ( auto )
-variables may already have gone out of scope.
-Therefore,
-.I arg
-should not be a pointer to a stack variable;
-it may however be a pointer to a heap variable or a global variable.
-.SH SEE ALSO
-.BR _exit (2),
-.BR atexit (3),
-.BR exit (3)
diff --git a/man3/open_memstream.3 b/man3/open_memstream.3
deleted file mode 100644
index 5c3f666b5..000000000
--- a/man3/open_memstream.3
+++ /dev/null
@@ -1,144 +0,0 @@
-'\" t
-.\" Copyright 2005, 2012, 2016 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" 2008-12-04, Petr Baudis <pasky@suse.cz>: Document open_wmemstream()
-.\"
-.TH open_memstream 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-open_memstream, open_wmemstream \- open a dynamic memory buffer stream
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "FILE *open_memstream(char **" ptr ", size_t *" sizeloc );
-.PP
-.B #include <wchar.h>
-.PP
-.BI "FILE *open_wmemstream(wchar_t **" ptr ", size_t *" sizeloc );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR open_memstream (),
-.BR open_wmemstream ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR open_memstream ()
-function opens a stream for writing to a memory buffer.
-The function dynamically allocates the buffer,
-and the buffer automatically grows as needed.
-Initially, the buffer has a size of zero.
-After closing the stream, the caller should
-.BR free (3)
-this buffer.
-.PP
-The locations pointed to by
-.I ptr
-and
-.I sizeloc
-are used to report, respectively,
-the current location and the size of the buffer.
-The locations referred to by these pointers are updated
-each time the stream is flushed
-.RB ( fflush (3))
-and when the stream is closed
-.RB ( fclose (3)).
-These values remain valid only as long as the caller
-performs no further output on the stream.
-If further output is performed, then the stream
-must again be flushed before trying to access these values.
-.PP
-A null byte is maintained at the end of the buffer.
-This byte is
-.I not
-included in the size value stored at
-.IR sizeloc .
-.PP
-The stream maintains the notion of a current position,
-which is initially zero (the start of the buffer).
-Each write operation implicitly adjusts the buffer position.
-The stream's buffer position can be explicitly changed with
-.BR fseek (3)
-or
-.BR fseeko (3).
-Moving the buffer position past the end
-of the data already written fills the intervening space with
-null characters.
-.PP
-The
-.BR open_wmemstream ()
-is similar to
-.BR open_memstream (),
-but operates on wide characters instead of bytes.
-.SH RETURN VALUE
-Upon successful completion,
-.BR open_memstream ()
-and
-.BR open_wmemstream ()
-return a
-.I FILE
-pointer.
-Otherwise, NULL is returned and
-.I errno
-is set to indicate the error.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR open_memstream (),
-.BR open_wmemstream ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR open_memstream ()
-glibc 1.0.x.
-.TP
-.BR open_wmemstream ()
-glibc 2.4.
-.SH NOTES
-There is no file descriptor associated with the file stream
-returned by these functions
-(i.e.,
-.BR fileno (3)
-will return an error if called on the returned stream).
-.SH BUGS
-Before glibc 2.7, seeking past the end of a stream created by
-.BR open_memstream ()
-does not enlarge the buffer; instead the
-.BR fseek (3)
-call fails, returning \-1.
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=1996
-.SH EXAMPLES
-See
-.BR fmemopen (3).
-.SH SEE ALSO
-.BR fmemopen (3),
-.BR fopen (3),
-.BR setbuf (3)
diff --git a/man3/open_wmemstream.3 b/man3/open_wmemstream.3
deleted file mode 100644
index a113f1345..000000000
--- a/man3/open_wmemstream.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/open_memstream.3
diff --git a/man3/opendir.3 b/man3/opendir.3
deleted file mode 100644
index 0dcae187f..000000000
--- a/man3/opendir.3
+++ /dev/null
@@ -1,148 +0,0 @@
-'\" t
-.\" Copyright (C) 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:46:01 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 11 June 1995 by Andries Brouwer (aeb@cwi.nl)
-.\" 2007-07-30 Ulrich Drepper <drepper@redhat.com>: document fdopendir().
-.TH opendir 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-opendir, fdopendir \- open a directory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.B #include <dirent.h>
-.PP
-.BI "DIR *opendir(const char *" name );
-.BI "DIR *fdopendir(int " fd );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR fdopendir ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR opendir ()
-function opens a directory stream corresponding to the
-directory \fIname\fP, and returns a pointer to the directory stream.
-The stream is positioned at the first entry in the directory.
-.PP
-The
-.BR fdopendir ()
-function
-is like
-.BR opendir (),
-but returns a directory stream for the directory referred
-to by the open file descriptor
-.IR fd .
-After a successful call to
-.BR fdopendir (),
-.I fd
-is used internally by the implementation,
-and should not otherwise be used by the application.
-.SH RETURN VALUE
-The
-.BR opendir ()
-and
-.BR fdopendir ()
-functions return a pointer to the directory stream.
-On error, NULL is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-Permission denied.
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor opened for reading.
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOENT
-Directory does not exist, or \fIname\fP is an empty string.
-.TP
-.B ENOMEM
-Insufficient memory to complete the operation.
-.TP
-.B ENOTDIR
-\fIname\fP is not a directory.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR opendir (),
-.BR fdopendir ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH STANDARDS
-.TP
-.BR opendir ()
-SVr4, 4.3BSD, POSIX.1-2001.
-.TP
-.BR fdopendir ()
-POSIX.1-2008.
-glibc 2.4.
-.SH NOTES
-Filename entries can be read from a directory stream using
-.BR readdir (3).
-.PP
-The underlying file descriptor of the directory stream can be obtained using
-.BR dirfd (3).
-.PP
-The
-.BR opendir ()
-function sets the close-on-exec flag for the file descriptor underlying the
-.IR "DIR *" .
-The
-.BR fdopendir ()
-function leaves the setting of the close-on-exec
-flag unchanged for the file descriptor,
-.IR fd .
-POSIX.1-200x leaves it unspecified whether a successful call to
-.BR fdopendir ()
-will set the close-on-exec flag for the file descriptor,
-.IR fd .
-.SH SEE ALSO
-.BR open (2),
-.BR closedir (3),
-.BR dirfd (3),
-.BR readdir (3),
-.BR rewinddir (3),
-.BR scandir (3),
-.BR seekdir (3),
-.BR telldir (3)
diff --git a/man3/openlog.3 b/man3/openlog.3
deleted file mode 100644
index ec352b291..000000000
--- a/man3/openlog.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/syslog.3
diff --git a/man3/openpty.3 b/man3/openpty.3
deleted file mode 100644
index 0b1d4632d..000000000
--- a/man3/openpty.3
+++ /dev/null
@@ -1,180 +0,0 @@
-'\" t
-.\" Copyright (c) OpenBSD Group
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-3-Clause
-.\"
-.\" Converted into a manpage again by Martin Schulze <joey@infodrom.org>
-.\"
-.\" Added -lutil remark, 030718
-.\"
-.TH openpty 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-openpty, login_tty, forkpty \- terminal utility functions
-.SH LIBRARY
-System utilities library
-.RI ( libutil ", " \-lutil )
-.SH SYNOPSIS
-.nf
-.B #include <pty.h>
-.PP
-.BI "int openpty(int *" amaster ", int *" aslave ", char *" name ,
-.BI " const struct termios *" termp ,
-.BI " const struct winsize *" winp );
-.BI "pid_t forkpty(int *" amaster ", char *" name ,
-.BI " const struct termios *" termp ,
-.BI " const struct winsize *" winp );
-.PP
-.B #include <utmp.h>
-.PP
-.BI "int login_tty(int " fd );
-.fi
-.SH DESCRIPTION
-The
-.BR openpty ()
-function finds an available pseudoterminal and returns file descriptors
-for the master and slave in
-.I amaster
-and
-.IR aslave .
-If
-.I name
-is not NULL, the filename of the slave is returned in
-.IR name .
-If
-.I termp
-is not NULL, the terminal parameters of the slave will be set to the
-values in
-.IR termp .
-If
-.I winp
-is not NULL, the window size of the slave will be set to the values in
-.IR winp .
-.PP
-The
-.BR login_tty ()
-function prepares for a login on the terminal
-referred to by the file descriptor
-.I fd
-(which may be a real terminal device, or the slave of a pseudoterminal as
-returned by
-.BR openpty ())
-by creating a new session, making
-.I fd
-the controlling terminal for the calling process, setting
-.I fd
-to be the standard input, output, and error streams of the current
-process, and closing
-.IR fd .
-.PP
-The
-.BR forkpty ()
-function combines
-.BR openpty (),
-.BR fork (2),
-and
-.BR login_tty ()
-to create a new process operating in a pseudoterminal.
-A file descriptor referring to
-master side of the pseudoterminal is returned in
-.IR amaster .
-If
-.I name
-is not NULL, the buffer it points to is used to return the
-filename of the slave.
-The
-.I termp
-and
-.I winp
-arguments, if not NULL,
-will determine the terminal attributes and window size of the slave
-side of the pseudoterminal.
-.SH RETURN VALUE
-If a call to
-.BR openpty (),
-.BR login_tty (),
-or
-.BR forkpty ()
-is not successful, \-1 is returned and
-.I errno
-is set to indicate the error.
-Otherwise,
-.BR openpty (),
-.BR login_tty (),
-and the child process of
-.BR forkpty ()
-return 0, and the parent process of
-.BR forkpty ()
-returns the process ID of the child process.
-.SH ERRORS
-.BR openpty ()
-fails if:
-.TP
-.B ENOENT
-There are no available terminals.
-.PP
-.BR login_tty ()
-fails if
-.BR ioctl (2)
-fails to set
-.I fd
-to the controlling terminal of the calling process.
-.PP
-.BR forkpty ()
-fails if either
-.BR openpty ()
-or
-.BR fork (2)
-fails.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR forkpty (),
-.BR openpty ()
-T} Thread safety MT-Safe locale
-T{
-.BR login_tty ()
-T} Thread safety MT-Unsafe race:ttyname
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-BSD.
-.SH HISTORY
-The
-.B const
-modifiers were added to the structure pointer arguments of
-.BR openpty ()
-and
-.BR forkpty ()
-in glibc 2.8.
-.PP
-Before glibc 2.0.92,
-.BR openpty ()
-returns file descriptors for a BSD pseudoterminal pair;
-since glibc 2.0.92,
-it first attempts to open a UNIX 98 pseudoterminal pair,
-and falls back to opening a BSD pseudoterminal pair if that fails.
-.SH BUGS
-Nobody knows how much space should be reserved for
-.IR name .
-So, calling
-.BR openpty ()
-or
-.BR forkpty ()
-with non-NULL
-.I name
-may not be secure.
-.SH SEE ALSO
-.BR fork (2),
-.BR ttyname (3),
-.BR pty (7)
diff --git a/man3/optarg.3 b/man3/optarg.3
deleted file mode 100644
index 7612d3f67..000000000
--- a/man3/optarg.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getopt.3
diff --git a/man3/opterr.3 b/man3/opterr.3
deleted file mode 100644
index 7612d3f67..000000000
--- a/man3/opterr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getopt.3
diff --git a/man3/optind.3 b/man3/optind.3
deleted file mode 100644
index 7612d3f67..000000000
--- a/man3/optind.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getopt.3
diff --git a/man3/optopt.3 b/man3/optopt.3
deleted file mode 100644
index 7612d3f67..000000000
--- a/man3/optopt.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getopt.3
diff --git a/man3/passwd2des.3 b/man3/passwd2des.3
deleted file mode 100644
index 01b6ce65a..000000000
--- a/man3/passwd2des.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xcrypt.3
diff --git a/man3/pathconf.3 b/man3/pathconf.3
deleted file mode 100644
index 46d8c8b17..000000000
--- a/man3/pathconf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fpathconf.3
diff --git a/man3/pclose.3 b/man3/pclose.3
deleted file mode 100644
index 663d4a081..000000000
--- a/man3/pclose.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/popen.3
diff --git a/man3/perror.3 b/man3/perror.3
deleted file mode 100644
index 75e6aa20e..000000000
--- a/man3/perror.3
+++ /dev/null
@@ -1,145 +0,0 @@
-'\" t
-.\" Copyright (c) 1994 Michael Haardt (michael@moria.de), 1994-06-04
-.\" Copyright (c) 1995 Michael Haardt
-.\" (michael@cantor.informatik.rwth-aachen.de), 1995-03-16
-.\" Copyright (c) 1996 Andries Brouwer (aeb@cwi.nl), 1996-01-13
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 1996-01-13 aeb: merged in some text contributed by Melvin Smith
-.\" (msmith@falcon.mercer.peachnet.edu) and various other changes.
-.\" Modified 1996-05-16 by Martin Schulze (joey@infodrom.north.de)
-.\"
-.TH perror 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-perror \- print a system error message
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "void perror(const char *" s );
-.PP
-.B #include <errno.h>
-.PP
-.BI "int " errno "; \fR/* Not really declared this way; see errno(3) */"
-.PP
-.BI "[[deprecated]] const char *const " sys_errlist [];
-.BI "[[deprecated]] int " sys_nerr ;
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.IR sys_errlist ,
-.IR sys_nerr :
-.nf
- From glibc 2.19 to glibc 2.31:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR perror ()
-function produces a message on standard error describing the last
-error encountered during a call to a system or library function.
-.PP
-First (if
-.I s
-is not NULL and
-.I *s
-is not a null byte (\[aq]\e0\[aq])), the argument string
-.I s
-is printed, followed by a colon and a blank.
-Then an error message corresponding to the current value of
-.I errno
-and a new-line.
-.PP
-To be of most use, the argument string should include the name
-of the function that incurred the error.
-.PP
-The global error list
-.IR sys_errlist "[],"
-which can be indexed by
-.IR errno ,
-can be used to obtain the error message without the newline.
-The largest message number provided in the table is
-.IR sys_nerr "\-1."
-Be careful when directly accessing this list, because new error values
-may not have been added to
-.IR sys_errlist "[]."
-The use of
-.IR sys_errlist "[]"
-is nowadays deprecated; use
-.BR strerror (3)
-instead.
-.PP
-When a system call fails, it usually returns \-1 and sets the
-variable
-.I errno
-to a value describing what went wrong.
-(These values can be found in
-.IR <errno.h> .)
-Many library functions do likewise.
-The function
-.BR perror ()
-serves to translate this error code into human-readable form.
-Note that
-.I errno
-is undefined after a successful system call or library function call:
-this call may well change this variable, even though it succeeds,
-for example because it internally used some other library function that failed.
-Thus, if a failing call is not immediately followed by a call to
-.BR perror (),
-the value of
-.I errno
-should be saved.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR perror ()
-T} Thread safety MT-Safe race:stderr
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.I errno
-.TQ
-.BR perror ()
-C11, POSIX.1-2008.
-.TP
-.I sys_nerr
-.TQ
-.I sys_errlist
-BSD.
-.SH HISTORY
-.TP
-.I errno
-.TQ
-.BR perror ()
-POSIX.1-2001, C89, 4.3BSD.
-.TP
-.I sys_nerr
-.TQ
-.I sys_errlist
-Removed in glibc 2.32.
-.SH SEE ALSO
-.BR err (3),
-.BR errno (3),
-.BR error (3),
-.BR strerror (3)
diff --git a/man3/pmap_getmaps.3 b/man3/pmap_getmaps.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/pmap_getmaps.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/pmap_getport.3 b/man3/pmap_getport.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/pmap_getport.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/pmap_rmtcall.3 b/man3/pmap_rmtcall.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/pmap_rmtcall.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/pmap_set.3 b/man3/pmap_set.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/pmap_set.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/pmap_unset.3 b/man3/pmap_unset.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/pmap_unset.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/popen.3 b/man3/popen.3
deleted file mode 100644
index b955f3182..000000000
--- a/man3/popen.3
+++ /dev/null
@@ -1,211 +0,0 @@
-'\" t
-.\" Copyright 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)popen.3 6.4 (Berkeley) 4/30/91
-.\"
-.\" Converted for Linux, Mon Nov 29 14:45:38 1993, faith@cs.unc.edu
-.\" Modified Sat May 18 20:37:44 1996 by Martin Schulze (joey@linux.de)
-.\" Modified 7 May 1998 by Joseph S. Myers (jsm28@cam.ac.uk)
-.\"
-.TH popen 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-popen, pclose \- pipe stream to or from a process
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "FILE *popen(const char *" command ", const char *" type );
-.BI "int pclose(FILE *" stream );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR popen (),
-.BR pclose ():
-.nf
- _POSIX_C_SOURCE >= 2
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR popen ()
-function opens a process by creating a pipe, forking, and invoking the
-shell.
-Since a pipe is by definition unidirectional, the
-.I type
-argument may specify only reading or writing, not both; the resulting
-stream is correspondingly read-only or write-only.
-.PP
-The
-.I command
-argument is a pointer to a null-terminated string containing a shell
-command line.
-This command is passed to
-.I /bin/sh
-using the
-.B \-c
-flag; interpretation, if any, is performed by the shell.
-.PP
-The
-.I type
-argument is a pointer to a null-terminated string which must contain
-either the letter \[aq]r\[aq] for reading or the letter \[aq]w\[aq] for writing.
-Since glibc 2.9,
-this argument can additionally include the letter \[aq]e\[aq],
-which causes the close-on-exec flag
-.RB ( FD_CLOEXEC )
-to be set on the underlying file descriptor;
-see the description of the
-.B O_CLOEXEC
-flag in
-.BR open (2)
-for reasons why this may be useful.
-.PP
-The return value from
-.BR popen ()
-is a normal standard I/O stream in all respects save that it must be closed
-with
-.BR pclose ()
-rather than
-.BR fclose (3).
-Writing to such a stream writes to the standard input of the command; the
-command's standard output is the same as that of the process that called
-.BR popen (),
-unless this is altered by the command itself.
-Conversely, reading from
-the stream reads the command's standard output, and the command's
-standard input is the same as that of the process that called
-.BR popen ().
-.PP
-Note that output
-.BR popen ()
-streams are block buffered by default.
-.PP
-The
-.BR pclose ()
-function waits for the associated process to terminate and returns the exit
-status of the command as returned by
-.BR wait4 (2).
-.SH RETURN VALUE
-.BR popen ():
-on success, returns a pointer to an open stream that
-can be used to read or write to the pipe;
-if the
-.BR fork (2)
-or
-.BR pipe (2)
-calls fail, or if the function cannot allocate memory,
-NULL is returned.
-.PP
-.BR pclose ():
-on success, returns the exit status of the command; if
-.\" These conditions actually give undefined results, so I commented
-.\" them out.
-.\" .I stream
-.\" is not associated with a "popen()ed" command, if
-.\".I stream
-.\" already "pclose()d", or if
-.BR wait4 (2)
-returns an error, or some other error is detected,
-\-1 is returned.
-.PP
-On failure, both functions set
-.I errno
-to indicate the error.
-.SH ERRORS
-The
-.BR popen ()
-function does not set
-.I errno
-if memory allocation fails.
-If the underlying
-.BR fork (2)
-or
-.BR pipe (2)
-fails,
-.I errno
-is set to indicate the error.
-If the
-.I type
-argument is invalid, and this condition is detected,
-.I errno
-is set to
-.BR EINVAL .
-.PP
-If
-.BR pclose ()
-cannot obtain the child status,
-.I errno
-is set to
-.BR ECHILD .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR popen (),
-.BR pclose ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The \[aq]e\[aq] value for
-.I type
-is a Linux extension.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH CAVEATS
-Carefully read Caveats in
-.BR system (3).
-.SH BUGS
-Since the standard input of a command opened for reading shares its seek
-offset with the process that called
-.BR popen (),
-if the original process has done a buffered read, the command's input
-position may not be as expected.
-Similarly, the output from a command
-opened for writing may become intermingled with that of the original
-process.
-The latter can be avoided by calling
-.BR fflush (3)
-before
-.BR popen ().
-.PP
-Failure to execute the shell is indistinguishable from the shell's failure
-to execute command, or an immediate exit of the command.
-The only hint is an exit status of 127.
-.\" .SH HISTORY
-.\" A
-.\" .BR popen ()
-.\" and a
-.\" .BR pclose ()
-.\" function appeared in Version 7 AT&T UNIX.
-.SH SEE ALSO
-.BR sh (1),
-.BR fork (2),
-.BR pipe (2),
-.BR wait4 (2),
-.BR fclose (3),
-.BR fflush (3),
-.BR fopen (3),
-.BR stdio (3),
-.BR system (3)
diff --git a/man3/posix_fallocate.3 b/man3/posix_fallocate.3
deleted file mode 100644
index 8f3b71422..000000000
--- a/man3/posix_fallocate.3
+++ /dev/null
@@ -1,182 +0,0 @@
-'\" t
-.\" Copyright (c) 2006, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH posix_fallocate 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-posix_fallocate \- allocate file space
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <fcntl.h>
-.PP
-.BI "int posix_fallocate(int " fd ", off_t " offset ", off_t " len );
-.fi
-.PP
-.ad l
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR posix_fallocate ():
-.nf
- _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-The function
-.BR posix_fallocate ()
-ensures that disk space is allocated for the file referred to by the
-file descriptor
-.I fd
-for the bytes in the range starting at
-.I offset
-and continuing for
-.I len
-bytes.
-After a successful call to
-.BR posix_fallocate (),
-subsequent writes to bytes in the specified range are
-guaranteed not to fail because of lack of disk space.
-.PP
-If the size of the file is less than
-.IR offset + len ,
-then the file is increased to this size;
-otherwise the file size is left unchanged.
-.SH RETURN VALUE
-.BR posix_fallocate ()
-returns zero on success, or an error number on failure.
-Note that
-.I errno
-is not set.
-.SH ERRORS
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor, or is not opened for writing.
-.TP
-.B EFBIG
-.I offset+len
-exceeds the maximum file size.
-.TP
-.B EINTR
-A signal was caught during execution.
-.TP
-.B EINVAL
-.I offset
-was less than 0, or
-.I len
-was less than or equal to 0, or the underlying filesystem does not
-support the operation.
-.TP
-.B ENODEV
-.I fd
-does not refer to a regular file.
-.TP
-.B ENOSPC
-There is not enough space left on the device containing the file
-referred to by
-.IR fd .
-.TP
-.B EOPNOTSUPP
-The filesystem containing the file referred to by
-.I fd
-does not support this operation.
-This error code can be returned by C libraries that don't perform the
-emulation shown in NOTES, such as musl libc.
-.TP
-.B ESPIPE
-.I fd
-refers to a pipe.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR posix_fallocate ()
-T} Thread safety T{
-MT-Safe (but see NOTES)
-T}
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.94.
-POSIX.1-2001
-.PP
-POSIX.1-2008 says that an implementation
-.I shall
-give the
-.B EINVAL
-error if
-.I len
-was 0, or
-.I offset
-was less than 0.
-POSIX.1-2001 says that an implementation
-.I shall
-give the
-.B EINVAL
-error if
-.I len
-is less than 0, or
-.I offset
-was less than 0, and
-.I may
-give the error if
-.I len
-equals zero.
-.SH CAVEATS
-In the glibc implementation,
-.BR posix_fallocate ()
-is implemented using the
-.BR fallocate (2)
-system call, which is MT-safe.
-If the underlying filesystem does not support
-.BR fallocate (2),
-then the operation is emulated with the following caveats:
-.IP \[bu] 3
-The emulation is inefficient.
-.IP \[bu]
-There is a race condition where concurrent writes from another thread or
-process could be overwritten with null bytes.
-.IP \[bu]
-There is a race condition where concurrent file size increases by
-another thread or process could result in a file whose size is smaller
-than expected.
-.IP \[bu]
-If
-.I fd
-has been opened with the
-.B O_APPEND
-or
-.B O_WRONLY
-flags, the function fails with the error
-.BR EBADF .
-.PP
-In general, the emulation is not MT-safe.
-On Linux, applications may use
-.BR fallocate (2)
-if they cannot tolerate the emulation caveats.
-In general, this is
-only recommended if the application plans to terminate the operation if
-.B EOPNOTSUPP
-is returned, otherwise the application itself will need to implement a
-fallback with all the same problems as the emulation provided by glibc.
-.SH SEE ALSO
-.BR fallocate (1),
-.BR fallocate (2),
-.BR lseek (2),
-.BR posix_fadvise (2)
diff --git a/man3/posix_madvise.3 b/man3/posix_madvise.3
deleted file mode 100644
index 06c657afc..000000000
--- a/man3/posix_madvise.3
+++ /dev/null
@@ -1,112 +0,0 @@
-.\" Copyright (C) 2015 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH posix_madvise 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-posix_madvise \- give advice about patterns of memory usage
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/mman.h>
-.PP
-.BI "int posix_madvise(void " addr [. len "], size_t " len ", int " advice );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR posix_madvise ():
-.nf
- _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-The
-.BR posix_madvise ()
-function allows an application to advise the system about its expected
-patterns of usage of memory in the address range starting at
-.I addr
-and continuing for
-.I len
-bytes.
-The system is free to use this advice in order to improve the performance
-of memory accesses (or to ignore the advice altogether), but calling
-.BR posix_madvise ()
-shall not affect the semantics of access to memory in the specified range.
-.PP
-The
-.I advice
-argument is one of the following:
-.TP
-.B POSIX_MADV_NORMAL
-The application has no special advice regarding its memory usage patterns
-for the specified address range.
-This is the default behavior.
-.TP
-.B POSIX_MADV_SEQUENTIAL
-The application expects to access the specified address range sequentially,
-running from lower addresses to higher addresses.
-Hence, pages in this region can be aggressively read ahead,
-and may be freed soon after they are accessed.
-.TP
-.B POSIX_MADV_RANDOM
-The application expects to access the specified address range randomly.
-Thus, read ahead may be less useful than normally.
-.TP
-.B POSIX_MADV_WILLNEED
-The application expects to access the specified address range
-in the near future.
-Thus, read ahead may be beneficial.
-.TP
-.B POSIX_MADV_DONTNEED
-The application expects that it will not access the specified address range
-in the near future.
-.SH RETURN VALUE
-On success,
-.BR posix_madvise ()
-returns 0.
-On failure, it returns a positive error number.
-.SH ERRORS
-.TP
-.B EINVAL
-.I addr
-is not a multiple of the system page size or
-.I len
-is negative.
-.TP
-.B EINVAL
-.I advice
-is invalid.
-.TP
-.B ENOMEM
-Addresses in the specified range are partially or completely outside
-the caller's address space.
-.SH VERSIONS
-POSIX.1 permits an implementation to generate an error if
-.I len
-is 0.
-On Linux, specifying
-.I len
-as 0 is permitted (as a successful no-op).
-.PP
-In glibc, this function is implemented using
-.BR madvise (2).
-However, since glibc 2.6,
-.B POSIX_MADV_DONTNEED
-is treated as a no-op, because the corresponding
-.BR madvise (2)
-value,
-.BR MADV_DONTNEED ,
-has destructive semantics.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.2.
-POSIX.1-2001.
-.SH SEE ALSO
-.BR madvise (2),
-.BR posix_fadvise (2)
diff --git a/man3/posix_memalign.3 b/man3/posix_memalign.3
deleted file mode 100644
index 88e4a8b63..000000000
--- a/man3/posix_memalign.3
+++ /dev/null
@@ -1,279 +0,0 @@
-'\" t
-.\" Copyright (c) 2001 by John Levon <moz@compsoc.man.ac.uk>
-.\" Based in part on GNU libc documentation.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2001-10-11, 2003-08-22, aeb, added some details
-.\" 2012-03-23, Michael Kerrisk <mtk.manpages@mail.com>
-.\" Document pvalloc() and aligned_alloc()
-.TH posix_memalign 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-posix_memalign, aligned_alloc, memalign, valloc, pvalloc \-
-allocate aligned memory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int posix_memalign(void **" memptr ", size_t " alignment ", size_t " size );
-.BI "void *aligned_alloc(size_t " alignment ", size_t " size );
-.BI "[[deprecated]] void *valloc(size_t " size );
-.PP
-.B #include <malloc.h>
-.PP
-.BI "[[deprecated]] void *memalign(size_t " alignment ", size_t " size );
-.BI "[[deprecated]] void *pvalloc(size_t " size );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR posix_memalign ():
-.nf
- _POSIX_C_SOURCE >= 200112L
-.fi
-.PP
-.BR aligned_alloc ():
-.nf
- _ISOC11_SOURCE
-.fi
-.PP
-.BR valloc ():
-.nf
- Since glibc 2.12:
- (_XOPEN_SOURCE >= 500) && !(_POSIX_C_SOURCE >= 200112L)
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
- Before glibc 2.12:
- _BSD_SOURCE || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
-.fi
-.SH DESCRIPTION
-The function
-.BR posix_memalign ()
-allocates
-.I size
-bytes and places the address of the allocated memory in
-.IR "*memptr" .
-The address of the allocated memory will be a multiple of
-.IR "alignment" ,
-which must be a power of two and a multiple of
-.IR "sizeof(void\ *)" .
-This address can later be successfully passed to
-.BR free (3).
-If
-.I size
-is 0, then
-the value placed in
-.I *memptr
-is either NULL
-.\" glibc does this:
-or a unique pointer value.
-.PP
-The obsolete function
-.BR memalign ()
-allocates
-.I size
-bytes and returns a pointer to the allocated memory.
-The memory address will be a multiple of
-.IR alignment ,
-which must be a power of two.
-.\" The behavior of memalign() for size==0 is as for posix_memalign()
-.\" but no standards govern this.
-.PP
-The function
-.BR aligned_alloc ()
-is the same as
-.BR memalign (),
-except for the added restriction that
-.I alignment
-must be a power of two.
-.PP
-The obsolete function
-.BR valloc ()
-allocates
-.I size
-bytes and returns a pointer to the allocated memory.
-The memory address will be a multiple of the page size.
-It is equivalent to
-.IR "memalign(sysconf(_SC_PAGESIZE),size)" .
-.PP
-The obsolete function
-.BR pvalloc ()
-is similar to
-.BR valloc (),
-but rounds the size of the allocation up to
-the next multiple of the system page size.
-.PP
-For all of these functions, the memory is not zeroed.
-.SH RETURN VALUE
-.BR aligned_alloc (),
-.BR memalign (),
-.BR valloc (),
-and
-.BR pvalloc ()
-return a pointer to the allocated memory on success.
-On error, NULL is returned, and \fIerrno\fP is set
-to indicate the error.
-.PP
-.BR posix_memalign ()
-returns zero on success, or one of the error values listed in the
-next section on failure.
-The value of
-.I errno
-is not set.
-On Linux (and other systems),
-.BR posix_memalign ()
-does not modify
-.I memptr
-on failure.
-A requirement standardizing this behavior was added in POSIX.1-2008 TC2.
-.\" http://austingroupbugs.net/view.php?id=520
-.SH ERRORS
-.TP
-.B EINVAL
-The
-.I alignment
-argument was not a power of two, or was not a multiple of
-.IR "sizeof(void\ *)" .
-.TP
-.B ENOMEM
-There was insufficient memory to fulfill the allocation request.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR aligned_alloc (),
-.BR memalign (),
-.BR posix_memalign ()
-T} Thread safety MT-Safe
-T{
-.BR valloc (),
-.BR pvalloc ()
-T} Thread safety MT-Unsafe init
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR aligned_alloc ()
-C11.
-.TP
-.BR posix_memalign ()
-POSIX.1-2008.
-.TP
-.BR memalign ()
-.TQ
-.BR valloc ()
-None.
-.TP
-.BR pvalloc ()
-GNU.
-.SH HISTORY
-.TP
-.BR aligned_alloc ()
-glibc 2.16.
-C11.
-.TP
-.BR posix_memalign ()
-glibc 2.1.91.
-POSIX.1d, POSIX.1-2001.
-.TP
-.BR memalign ()
-glibc 2.0.
-SunOS 4.1.3.
-.TP
-.BR valloc ()
-glibc 2.0.
-3.0BSD.
-Documented as obsolete in 4.3BSD,
-and as legacy in SUSv2.
-.TP
-.BR pvalloc ()
-glibc 2.0.
-.\"
-.SS Headers
-Everybody agrees that
-.BR posix_memalign ()
-is declared in \fI<stdlib.h>\fP.
-.PP
-On some systems
-.BR memalign ()
-is declared in \fI<stdlib.h>\fP instead of \fI<malloc.h>\fP.
-.PP
-According to SUSv2,
-.BR valloc ()
-is declared in \fI<stdlib.h>\fP.
-.\" Libc4,5 and
-glibc declares it in \fI<malloc.h>\fP, and also in
-\fI<stdlib.h>\fP
-if suitable feature test macros are defined (see above).
-.SH NOTES
-On many systems there are alignment restrictions, for example, on buffers
-used for direct block device I/O.
-POSIX specifies the
-.I "pathconf(path,_PC_REC_XFER_ALIGN)"
-call that tells what alignment is needed.
-Now one can use
-.BR posix_memalign ()
-to satisfy this requirement.
-.PP
-.BR posix_memalign ()
-verifies that
-.I alignment
-matches the requirements detailed above.
-.BR memalign ()
-may not check that the
-.I alignment
-argument is correct.
-.PP
-POSIX requires that memory obtained from
-.BR posix_memalign ()
-can be freed using
-.BR free (3).
-Some systems provide no way to reclaim memory allocated with
-.BR memalign ()
-or
-.BR valloc ()
-(because one can pass to
-.BR free (3)
-only a pointer obtained from
-.BR malloc (3),
-while, for example,
-.BR memalign ()
-would call
-.BR malloc (3)
-and then align the obtained value).
-.\" Other systems allow passing the result of
-.\" .IR valloc ()
-.\" to
-.\" .IR free (3),
-.\" but not to
-.\" .IR realloc (3).
-The glibc implementation
-allows memory obtained from any of these functions to be
-reclaimed with
-.BR free (3).
-.PP
-The glibc
-.BR malloc (3)
-always returns 8-byte aligned memory addresses, so these functions are
-needed only if you require larger alignment values.
-.SH SEE ALSO
-.BR brk (2),
-.BR getpagesize (2),
-.BR free (3),
-.BR malloc (3)
diff --git a/man3/posix_openpt.3 b/man3/posix_openpt.3
deleted file mode 100644
index 0560879a0..000000000
--- a/man3/posix_openpt.3
+++ /dev/null
@@ -1,110 +0,0 @@
-'\" t
-.\" Copyright (C) 2004 Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH posix_openpt 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-posix_openpt \- open a pseudoterminal device
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.B #include <fcntl.h>
-.PP
-.BI "int posix_openpt(int " flags ");"
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR posix_openpt ():
-.nf
- _XOPEN_SOURCE >= 600
-.fi
-.SH DESCRIPTION
-The
-.BR posix_openpt ()
-function opens an unused pseudoterminal master device, returning a
-file descriptor that can be used to refer to that device.
-.PP
-The
-.I flags
-argument is a bit mask that ORs together zero or more of
-the following flags:
-.TP
-.B O_RDWR
-Open the device for both reading and writing.
-It is usual to specify this flag.
-.TP
-.B O_NOCTTY
-Do not make this device the controlling terminal for the process.
-.SH RETURN VALUE
-On success,
-.BR posix_openpt ()
-returns a file descriptor (a nonnegative integer) which is the lowest
-numbered unused file descriptor.
-On failure, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-See
-.BR open (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR posix_openpt ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.2.1.
-POSIX.1-2001.
-.PP
-It is part of the UNIX 98 pseudoterminal support (see
-.BR pts (4)).
-.SH NOTES
-Some older UNIX implementations that support System V
-(aka UNIX 98) pseudoterminals don't have this function, but it
-can be easily implemented by opening the pseudoterminal multiplexor device:
-.PP
-.in +4n
-.EX
-int
-posix_openpt(int flags)
-{
- return open("/dev/ptmx", flags);
-}
-.EE
-.in
-.PP
-Calling
-.BR posix_openpt ()
-creates a pathname for the corresponding pseudoterminal slave device.
-The pathname of the slave device can be obtained using
-.BR ptsname (3).
-The slave device pathname exists only as long as the master device is open.
-.SH SEE ALSO
-.BR open (2),
-.BR getpt (3),
-.BR grantpt (3),
-.BR ptsname (3),
-.BR unlockpt (3),
-.BR pts (4),
-.BR pty (7)
diff --git a/man3/posix_spawn.3 b/man3/posix_spawn.3
deleted file mode 100644
index b0190858d..000000000
--- a/man3/posix_spawn.3
+++ /dev/null
@@ -1,823 +0,0 @@
-.\" Copyright (c) 2009 Bill O. Gallmeister (bgallmeister@gmail.com)
-.\" and Copyright 2010 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux glibc source code
-.\" POSIX 1003.1-2004 documentation
-.\" (http://www.opengroup.org/onlinepubs/009695399)
-.\"
-.TH posix_spawn 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-posix_spawn, posix_spawnp \- spawn a process
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <spawn.h>
-.PP
-.BI "int posix_spawn(pid_t *restrict " pid ", const char *restrict " path ,
-.BI " const posix_spawn_file_actions_t *restrict " file_actions ,
-.BI " const posix_spawnattr_t *restrict " attrp ,
-.BI " char *const " argv [restrict],
-.BI " char *const " envp [restrict]);
-.BI "int posix_spawnp(pid_t *restrict " pid ", const char *restrict " file ,
-.BI " const posix_spawn_file_actions_t *restrict " file_actions ,
-.BI " const posix_spawnattr_t *restrict " attrp ,
-.BI " char *const " argv [restrict],
-.BI " char *const " envp [restrict]);
-.fi
-.SH DESCRIPTION
-The
-.BR posix_spawn ()
-and
-.BR posix_spawnp ()
-functions are used to create a new child process that executes
-a specified file.
-These functions were specified by POSIX to provide a standardized method
-of creating new processes on machines that lack the capability
-to support the
-.BR fork (2)
-system call.
-These machines are generally small, embedded systems lacking MMU support.
-.PP
-The
-.BR posix_spawn ()
-and
-.BR posix_spawnp ()
-functions provide the functionality of a combined
-.BR fork (2)
-and
-.BR exec (3),
-with some optional housekeeping steps in the child process before the
-.BR exec (3).
-These functions are not meant to replace the
-.BR fork (2)
-and
-.BR execve (2)
-system calls.
-In fact, they provide only a subset of the functionality
-that can be achieved by using the system calls.
-.PP
-The only difference between
-.BR posix_spawn ()
-and
-.BR posix_spawnp ()
-is the manner in which they specify the file to be executed by
-the child process.
-With
-.BR posix_spawn (),
-the executable file is specified as a pathname
-(which can be absolute or relative).
-With
-.BR posix_spawnp (),
-the executable file is specified as a simple filename;
-the system searches for this file in the list of directories specified by
-.B PATH
-(in the same way as for
-.BR execvp (3)).
-For the remainder of this page, the discussion is phrased in terms of
-.BR posix_spawn (),
-with the understanding that
-.BR posix_spawnp ()
-differs only on the point just described.
-.PP
-The remaining arguments to these two functions are as follows:
-.TP
-.I pid
-points to a buffer that is used to return the process ID
-of the new child process.
-.TP
-.I file_actions
-points to a
-.I "spawn file actions object"
-that specifies file-related actions to be performed in the child
-between the
-.BR fork (2)
-and
-.BR exec (3)
-steps.
-This object is initialized and populated before the
-.BR posix_spawn ()
-call using
-.BR posix_spawn_file_actions_init (3)
-and the
-.BR posix_spawn_file_actions_* ()
-functions.
-.TP
-.I attrp
-points to an
-.I attributes objects
-that specifies various attributes of the created child process.
-This object is initialized and populated before the
-.BR posix_spawn ()
-call using
-.BR posix_spawnattr_init (3)
-and the
-.BR posix_spawnattr_* ()
-functions.
-.TP
-.I argv
-.TQ
-.I envp
-specify the argument list and environment for the program
-that is executed in the child process, as for
-.BR execve (2).
-.PP
-Below, the functions are described in terms of a three-step process: the
-.BR fork ()
-step, the
-.RB pre- exec ()
-step (executed in the child),
-and the
-.BR exec ()
-step (executed in the child).
-.SS fork() step
-Since glibc 2.24, the
-.BR posix_spawn ()
-function commences by calling
-.BR clone (2)
-with
-.B CLONE_VM
-and
-.B CLONE_VFORK
-flags.
-Older implementations use
-.BR fork (2),
-or possibly
-.BR vfork (2)
-(see below).
-.PP
-The PID of the new child process is placed in
-.IR *pid .
-The
-.BR posix_spawn ()
-function then returns control to the parent process.
-.PP
-Subsequently, the parent can use one of the system calls described in
-.BR wait (2)
-to check the status of the child process.
-If the child fails in any of the housekeeping steps described below,
-or fails to execute the desired file,
-it exits with a status of 127.
-.PP
-Before glibc 2.24, the child process is created using
-.BR vfork (2)
-instead of
-.BR fork (2)
-when either of the following is true:
-.IP \[bu] 3
-the
-.I spawn-flags
-element of the attributes object pointed to by
-.I attrp
-contains the GNU-specific flag
-.BR POSIX_SPAWN_USEVFORK ;
-or
-.IP \[bu]
-.I file_actions
-is NULL and the
-.I spawn-flags
-element of the attributes object pointed to by
-.I attrp
-does \fInot\fP contain
-.BR POSIX_SPAWN_SETSIGMASK ,
-.BR POSIX_SPAWN_SETSIGDEF ,
-.BR POSIX_SPAWN_SETSCHEDPARAM ,
-.BR POSIX_SPAWN_SETSCHEDULER ,
-.BR POSIX_SPAWN_SETPGROUP ,
-or
-.BR POSIX_SPAWN_RESETIDS .
-.PP
-In other words,
-.BR vfork (2)
-is used if the caller requests it,
-or if there is no cleanup expected in the child before it
-.BR exec (3)s
-the requested file.
-.SS pre-exec() step: housekeeping
-In between the
-.B fork()
-and the
-.B exec()
-steps, a child process may need to perform a set of housekeeping actions.
-The
-.BR posix_spawn ()
-and
-.BR posix_spawnp ()
-functions support a small, well-defined set of system tasks that the child
-process can accomplish before it executes the executable file.
-These operations are controlled by the attributes object pointed to by
-.I attrp
-and the file actions object pointed to by
-.IR file_actions .
-In the child, processing is done in the following sequence:
-.IP (1) 5
-Process attribute actions: signal mask, signal default handlers,
-scheduling algorithm and parameters,
-process group, and effective user and group IDs
-are changed as specified by the attributes object pointed to by
-.IR attrp .
-.IP (2)
-File actions, as specified in the
-.I file_actions
-argument,
-are performed in the order that they were specified using calls to the
-.BR posix_spawn_file_actions_add* ()
-functions.
-.IP (3)
-File descriptors with the
-.B FD_CLOEXEC
-flag set are closed.
-.PP
-All process attributes in the child,
-other than those affected by attributes specified in the
-object pointed to by
-.I attrp
-and the file actions in the object pointed to by
-.IR file_actions ,
-will be affected as though the child was created with
-.BR fork (2)
-and it executed the program with
-.BR execve (2).
-.PP
-The process attributes actions are defined by the attributes object
-pointed to by
-.IR attrp .
-The
-.I spawn-flags
-attribute (set using
-.BR posix_spawnattr_setflags (3))
-controls the general actions that occur,
-and other attributes in the object specify values
-to be used during those actions.
-.PP
-The effects of the flags that may be specified in
-.I spawn-flags
-are as follows:
-.TP
-.B POSIX_SPAWN_SETSIGMASK
-Set the signal mask to the signal set specified in the
-.I spawn-sigmask
-attribute
-.\" FIXME .
-.\" (see
-.\" .BR posix_spawnattr_setsigmask (3))
-of the object pointed to by
-.IR attrp .
-If the
-.B POSIX_SPAWN_SETSIGMASK
-flag is not set, then the child inherits the parent's signal mask.
-.TP
-.B POSIX_SPAWN_SETSIGDEF
-Reset the disposition of all signals in the set specified in the
-.I spawn-sigdefault
-attribute
-.\" FIXME .
-.\" (see
-.\" .BR posix_spawnattr_setsigdefault (3))
-of the object pointed to by
-.I attrp
-to the default.
-For the treatment of the dispositions of signals not specified in the
-.I spawn-sigdefault
-attribute, or the treatment when
-.B POSIX_SPAWN_SETSIGDEF
-is not specified, see
-.BR execve (2).
-.TP
-.B POSIX_SPAWN_SETSCHEDPARAM
-.\" (POSIX_PRIORITY_SCHEDULING only)
-If this flag is set, and the
-.B POSIX_SPAWN_SETSCHEDULER
-flag is not set, then set the scheduling parameters
-to the parameters specified in the
-.I spawn-schedparam
-attribute
-.\" FIXME .
-.\" (see
-.\" .BR posix_spawnattr_setschedparam (3))
-of the object pointed to by
-.IR attrp .
-.TP
-.B POSIX_SPAWN_SETSCHEDULER
-Set the scheduling policy algorithm and parameters of the child,
-as follows:
-.RS
-.IP \[bu] 3
-The scheduling policy is set to the value specified in the
-.I spawn-schedpolicy
-attribute
-.\" FIXME .
-.\" (see
-.\" .BR posix_spawnattr_setpolicy (3))
-of the object pointed to by
-.IR attrp .
-.IP \[bu]
-The scheduling parameters are set to the value specified in the
-.I spawn-schedparam
-attribute
-.\" FIXME .
-.\" (see
-.\" .BR posix_spawnattr_setschedparam (3))
-of the object pointed to by
-.I attrp
-(but see BUGS).
-.PP
-If the
-.B POSIX_SPAWN_SETSCHEDPARAM
-and
-.B POSIX_SPAWN_SETSCHEDPOLICY
-flags are not specified,
-the child inherits the corresponding scheduling attributes from the parent.
-.RE
-.TP
-.B POSIX_SPAWN_RESETIDS
-If this flag is set,
-reset the effective UID and GID to the
-real UID and GID of the parent process.
-If this flag is not set,
-then the child retains the effective UID and GID of the parent.
-In either case, if the set-user-ID and set-group-ID permission
-bits are enabled on the executable file, their effect will override
-the setting of the effective UID and GID (se
-.BR execve (2)).
-.TP
-.B POSIX_SPAWN_SETPGROUP
-Set the process group to the value specified in the
-.I spawn-pgroup
-attribute
-.\" FIXME .
-.\" (see
-.\" .BR posix_spawnattr_setpgroup (3))
-of the object pointed to by
-.IR attrp .
-If the
-.I spawn-pgroup
-attribute has the value 0,
-the child's process group ID is made the same as its process ID.
-If the
-.B POSIX_SPAWN_SETPGROUP
-flag is not set, the child inherits the parent's process group ID.
-.TP
-.B POSIX_SPAWN_USEVFORK
-Since glibc 2.24, this flag has no effect.
-On older implementations, setting this flag forces the
-.B fork()
-step to use
-.BR vfork (2)
-instead of
-.BR fork (2).
-The
-.B _GNU_SOURCE
-feature test macro must be defined to obtain the definition of this constant.
-.TP
-.BR POSIX_SPAWN_SETSID " (since glibc 2.26)"
-If this flag is set,
-the child process shall create a new session and become the session leader.
-The child process shall also become the process group leader of the new process
-group in the session (see
-.BR setsid (2)).
-The
-.B _GNU_SOURCE
-feature test macro must be defined to obtain the definition of this constant.
-.\" This flag has been accepted in POSIX, see:
-.\" http://austingroupbugs.net/view.php?id=1044
-.\" and has been implemented since glibc 2.26
-.\" commit daeb1fa2e1b33323e719015f5f546988bd4cc73b
-.PP
-If
-.I attrp
-is NULL, then the default behaviors described above for each flag apply.
-.\" mtk: I think we probably don't want to say the following, since it
-.\" could lead people to do the wrong thing
-.\" The POSIX standard tells you to call
-.\" this function to de-initialize the attributes object pointed to by
-.\" .I attrp
-.\" when you are done with it;
-.\" however, on Linux systems this operation is a no-op.
-.PP
-The
-.I file_actions
-argument specifies a sequence of file operations
-that are performed in the child process after
-the general processing described above, and before it performs the
-.BR exec (3).
-If
-.I file_actions
-is NULL, then no special action is taken, and standard
-.BR exec (3)
-semantics apply\[em]file descriptors open before the exec
-remain open in the new process,
-except those for which the
-.B FD_CLOEXEC
-flag has been set.
-File locks remain in place.
-.PP
-If
-.I file_actions
-is not NULL, then it contains an ordered set of requests to
-.BR open (2),
-.BR close (2),
-and
-.BR dup2 (2)
-files.
-These requests are added to the
-.I file_actions
-by
-.BR posix_spawn_file_actions_addopen (3),
-.BR posix_spawn_file_actions_addclose (3),
-and
-.BR posix_spawn_file_actions_adddup2 (3).
-The requested operations are performed in the order they were added to
-.IR file_actions .
-.\" FIXME . I think the following is best placed in the
-.\" posix_spawn_file_actions_adddup2(3) page, and a similar statement is
-.\" also needed in posix_spawn_file_actions_addclose(3)
-.\" Note that you can specify file descriptors in
-.\" .I posix_spawn_file_actions_adddup2 (3)
-.\" which would not be usable if you called
-.\" .BR dup2 (2)
-.\" at that time--i.e., file descriptors that are opened or
-.\" closed by the earlier operations
-.\" added to
-.\" .I file_actions .
-.PP
-If any of the housekeeping actions fails
-(due to bogus values being passed or other reasons why signal handling,
-process scheduling, process group ID functions,
-and file descriptor operations might fail),
-the child process exits with exit value 127.
-.SS exec() step
-Once the child has successfully forked and performed
-all requested pre-exec steps,
-the child runs the requested executable.
-.PP
-The child process takes its environment from the
-.I envp
-argument, which is interpreted as if it had been passed to
-.BR execve (2).
-The arguments to the created process come from the
-.I argv
-argument, which is processed as for
-.BR execve (2).
-.SH RETURN VALUE
-Upon successful completion,
-.BR posix_spawn ()
-and
-.BR posix_spawnp ()
-place the PID of the child process in
-.IR pid ,
-and return 0.
-If there is an error during the
-.B fork()
-step,
-then no child is created,
-the contents of
-.I *pid
-are unspecified,
-and these functions return an error number as described below.
-.PP
-Even when these functions return a success status,
-the child process may still fail for a plethora of reasons related to its
-pre-\fBexec\fR() initialization.
-In addition, the
-.BR exec (3)
-may fail.
-In all of these cases, the child process will exit with the exit value of 127.
-.SH ERRORS
-The
-.BR posix_spawn ()
-and
-.BR posix_spawnp ()
-functions fail only in the case where the underlying
-.BR fork (2),
-.BR vfork (2),
-or
-.BR clone (2)
-call fails; in these cases, these functions return an error number,
-which will be one of the errors described for
-.BR fork (2),
-.BR vfork (2),
-or
-.BR clone (2).
-.PP
-In addition, these functions fail if:
-.TP
-.B ENOSYS
-Function not supported on this system.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.2.
-POSIX.1-2001.
-.\" FIXME . This piece belongs in spawnattr_setflags(3)
-.\" The
-.\" .B POSIX_SPAWN_USEVFORK
-.\" flag is a GNU extension; the
-.\" .B _GNU_SOURCE
-.\" feature test macro must be defined (before including any header files)
-.\" to obtain the definition of this constant.
-.SH NOTES
-The housekeeping activities in the child are controlled by
-the objects pointed to by
-.I attrp
-(for non-file actions) and
-.I file_actions
-In POSIX parlance, the
-.I posix_spawnattr_t
-and
-.I posix_spawn_file_actions_t
-data types are referred to as objects,
-and their elements are not specified by name.
-Portable programs should initialize these objects using
-only the POSIX-specified functions.
-(In other words,
-although these objects may be implemented as structures containing fields,
-portable programs must avoid dependence on such implementation details.)
-.PP
-According to POSIX, it is unspecified whether fork handlers established with
-.BR pthread_atfork (3)
-are called when
-.BR posix_spawn ()
-is invoked.
-Since glibc 2.24, the fork handlers are not executed in any case.
-.\" Tested on glibc 2.12
-On older implementations,
-fork handlers are called only if the child is created using
-.BR fork (2).
-.PP
-There is no "posix_fspawn" function (i.e., a function that is to
-.BR posix_spawn ()
-as
-.BR fexecve (3)
-is to
-.BR execve (2)).
-However, this functionality can be obtained by specifying the
-.I path
-argument as one of the files in the caller's
-.I /proc/self/fd
-directory.
-.SH BUGS
-POSIX.1 says that when
-.B POSIX_SPAWN_SETSCHEDULER
-is specified in
-.IR spawn-flags ,
-then the
-.B POSIX_SPAWN_SETSCHEDPARAM
-(if present) is ignored.
-However, before glibc 2.14, calls to
-.BR posix_spawn ()
-failed with an error if
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=12052
-.B POSIX_SPAWN_SETSCHEDULER
-was specified without also specifying
-.BR POSIX_SPAWN_SETSCHEDPARAM .
-.SH EXAMPLES
-The program below demonstrates the use of various functions in the
-POSIX spawn API.
-The program accepts command-line attributes that can be used
-to create file actions and attributes objects.
-The remaining command-line arguments are used as the executable name
-and command-line arguments of the program that is executed in the child.
-.PP
-In the first run, the
-.BR date (1)
-command is executed in the child, and the
-.BR posix_spawn ()
-call employs no file actions or attributes objects.
-.PP
-.in +4n
-.EX
-$ \fB./a.out date\fP
-PID of child: 7634
-Tue Feb 1 19:47:50 CEST 2011
-Child status: exited, status=0
-.EE
-.in
-.PP
-In the next run, the
-.I \-c
-command-line option is used to create a file actions object that closes
-standard output in the child.
-Consequently,
-.BR date (1)
-fails when trying to perform output and exits with a status of 1.
-.PP
-.in +4n
-.EX
-$ \fB./a.out \-c date\fP
-PID of child: 7636
-date: write error: Bad file descriptor
-Child status: exited, status=1
-.EE
-.in
-.PP
-In the next run, the
-.I \-s
-command-line option is used to create an attributes object that
-specifies that all (blockable) signals in the child should be blocked.
-Consequently, trying to kill child with the default signal sent by
-.BR kill (1)
-(i.e.,
-.BR SIGTERM )
-fails, because that signal is blocked.
-Therefore, to kill the child,
-.B SIGKILL
-is necessary
-.RB ( SIGKILL
-can't be blocked).
-.PP
-.in +4n
-.EX
-$ \fB./a.out \-s sleep 60 &\fP
-[1] 7637
-$ PID of child: 7638
-.PP
-$ \fBkill 7638\fP
-$ \fBkill \-KILL 7638\fP
-$ Child status: killed by signal 9
-[1]+ Done ./a.out \-s sleep 60
-.EE
-.in
-.PP
-When we try to execute a nonexistent command in the child, the
-.BR exec (3)
-fails and the child exits with a status of 127.
-.PP
-.in +4n
-.EX
-$ \fB./a.out xxxxx
-PID of child: 10190
-Child status: exited, status=127
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (posix_spawn.c)
-.EX
-#include <errno.h>
-#include <spawn.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <wait.h>
-\&
-#define errExit(msg) do { perror(msg); \e
- exit(EXIT_FAILURE); } while (0)
-\&
-#define errExitEN(en, msg) \e
- do { errno = en; perror(msg); \e
- exit(EXIT_FAILURE); } while (0)
-\&
-char **environ;
-\&
-int
-main(int argc, char *argv[])
-{
- pid_t child_pid;
- int s, opt, status;
- sigset_t mask;
- posix_spawnattr_t attr;
- posix_spawnattr_t *attrp;
- posix_spawn_file_actions_t file_actions;
- posix_spawn_file_actions_t *file_actionsp;
-\&
- /* Parse command\-line options, which can be used to specify an
- attributes object and file actions object for the child. */
-\&
- attrp = NULL;
- file_actionsp = NULL;
-\&
- while ((opt = getopt(argc, argv, "sc")) != \-1) {
- switch (opt) {
- case \[aq]c\[aq]: /* \-c: close standard output in child */
-\&
- /* Create a file actions object and add a "close"
- action to it. */
-\&
- s = posix_spawn_file_actions_init(&file_actions);
- if (s != 0)
- errExitEN(s, "posix_spawn_file_actions_init");
-\&
- s = posix_spawn_file_actions_addclose(&file_actions,
- STDOUT_FILENO);
- if (s != 0)
- errExitEN(s, "posix_spawn_file_actions_addclose");
-\&
- file_actionsp = &file_actions;
- break;
-\&
- case \[aq]s\[aq]: /* \-s: block all signals in child */
-\&
- /* Create an attributes object and add a "set signal mask"
- action to it. */
-\&
- s = posix_spawnattr_init(&attr);
- if (s != 0)
- errExitEN(s, "posix_spawnattr_init");
- s = posix_spawnattr_setflags(&attr, POSIX_SPAWN_SETSIGMASK);
- if (s != 0)
- errExitEN(s, "posix_spawnattr_setflags");
-\&
- sigfillset(&mask);
- s = posix_spawnattr_setsigmask(&attr, &mask);
- if (s != 0)
- errExitEN(s, "posix_spawnattr_setsigmask");
-\&
- attrp = &attr;
- break;
- }
- }
-\&
- /* Spawn the child. The name of the program to execute and the
- command\-line arguments are taken from the command\-line arguments
- of this program. The environment of the program execed in the
- child is made the same as the parent\[aq]s environment. */
-\&
- s = posix_spawnp(&child_pid, argv[optind], file_actionsp, attrp,
- &argv[optind], environ);
- if (s != 0)
- errExitEN(s, "posix_spawn");
-\&
- /* Destroy any objects that we created earlier. */
-\&
- if (attrp != NULL) {
- s = posix_spawnattr_destroy(attrp);
- if (s != 0)
- errExitEN(s, "posix_spawnattr_destroy");
- }
-\&
- if (file_actionsp != NULL) {
- s = posix_spawn_file_actions_destroy(file_actionsp);
- if (s != 0)
- errExitEN(s, "posix_spawn_file_actions_destroy");
- }
-\&
- printf("PID of child: %jd\en", (intmax_t) child_pid);
-\&
- /* Monitor status of the child until it terminates. */
-\&
- do {
- s = waitpid(child_pid, &status, WUNTRACED | WCONTINUED);
- if (s == \-1)
- errExit("waitpid");
-\&
- printf("Child status: ");
- if (WIFEXITED(status)) {
- printf("exited, status=%d\en", WEXITSTATUS(status));
- } else if (WIFSIGNALED(status)) {
- printf("killed by signal %d\en", WTERMSIG(status));
- } else if (WIFSTOPPED(status)) {
- printf("stopped by signal %d\en", WSTOPSIG(status));
- } else if (WIFCONTINUED(status)) {
- printf("continued\en");
- }
- } while (!WIFEXITED(status) && !WIFSIGNALED(status));
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.nh \" Disable hyphenation
-.ad l
-.BR close (2),
-.BR dup2 (2),
-.BR execl (2),
-.BR execlp (2),
-.BR fork (2),
-.BR open (2),
-.BR sched_setparam (2),
-.BR sched_setscheduler (2),
-.BR setpgid (2),
-.BR setuid (2),
-.BR sigaction (2),
-.BR sigprocmask (2),
-.BR posix_spawn_file_actions_addclose (3),
-.BR posix_spawn_file_actions_adddup2 (3),
-.BR posix_spawn_file_actions_addopen (3),
-.BR posix_spawn_file_actions_destroy (3),
-.BR posix_spawn_file_actions_init (3),
-.BR posix_spawnattr_destroy (3),
-.BR posix_spawnattr_getflags (3),
-.BR posix_spawnattr_getpgroup (3),
-.BR posix_spawnattr_getschedparam (3),
-.BR posix_spawnattr_getschedpolicy (3),
-.BR posix_spawnattr_getsigdefault (3),
-.BR posix_spawnattr_getsigmask (3),
-.BR posix_spawnattr_init (3),
-.BR posix_spawnattr_setflags (3),
-.BR posix_spawnattr_setpgroup (3),
-.BR posix_spawnattr_setschedparam (3),
-.BR posix_spawnattr_setschedpolicy (3),
-.BR posix_spawnattr_setsigdefault (3),
-.BR posix_spawnattr_setsigmask (3),
-.BR pthread_atfork (3),
-.IR <spawn.h> ,
-Base Definitions volume of POSIX.1-2001,
-.I http://www.opengroup.org/unix/online.html
diff --git a/man3/posix_spawnp.3 b/man3/posix_spawnp.3
deleted file mode 100644
index a6f49d0ef..000000000
--- a/man3/posix_spawnp.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/posix_spawn.3
diff --git a/man3/pow.3 b/man3/pow.3
deleted file mode 100644
index cfa0f9039..000000000
--- a/man3/pow.3
+++ /dev/null
@@ -1,386 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 1995-08-14 by Arnt Gulbrandsen <agulbra@troll.no>
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.TH pow 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pow, powf, powl \- power functions
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double pow(double " x ", double " y );
-.BI "float powf(float " x ", float " y );
-.BI "long double powl(long double " x ", long double " y );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR powf (),
-.BR powl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the value of
-.I x
-raised to the
-power of
-.IR y .
-.SH RETURN VALUE
-On success, these functions return the value of
-.I x
-to the power of
-.IR y .
-.PP
-If the result overflows,
-a range error occurs,
-.\" The range error is generated at least as far back as glibc 2.4
-and the functions return
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-or
-.BR HUGE_VALL ,
-respectively, with the mathematically correct sign.
-.PP
-If result underflows, and is not representable,
-a range error occurs,
-and 0.0 with the appropriate sign is returned.
-.\" POSIX.1 does not specify the sign of the zero,
-.\" but https://www.sourceware.org/bugzilla/show_bug.cgi?id=2678
-.\" points out that the zero has the wrong sign in some cases.
-.PP
-.\" pow(\(+-0, <0 [[odd]]) = HUGE_VAL*
-If
-.I x
-is +0 or \-0,
-and
-.I y
-is an odd integer less than 0,
-a pole error occurs and
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-or
-.BR HUGE_VALL ,
-is returned,
-with the same sign as
-.IR x .
-.PP
-.\" pow(\(+-0, <0 [[!odd]]) = HUGE_VAL*
-If
-.I x
-is +0 or \-0,
-and
-.I y
-is less than 0 and not an odd integer,
-a pole error occurs and
-.\" The pole error is generated at least as far back as glibc 2.4
-.RB + HUGE_VAL ,
-.RB + HUGE_VALF ,
-or
-.RB + HUGE_VALL ,
-is returned.
-.PP
-.\" pow(\(+-0, >0 [[odd]]) = \(+-0
-If
-.I x
-is +0 (\-0),
-and
-.I y
-is an odd integer greater than 0,
-the result is +0 (\-0).
-.PP
-.\" pow(\(+-0, >0 [[!odd]]) = +0
-If
-.I x
-is 0,
-and
-.I y
-greater than 0 and not an odd integer,
-the result is +0.
-.PP
-.\" pow(-1, \(+-INFINITY) = 1.0
-If
-.I x
-is \-1,
-and
-.I y
-is positive infinity or negative infinity,
-the result is 1.0.
-.PP
-.\" pow(+1, y) = 1.0
-If
-.I x
-is +1, the result is 1.0 (even if
-.I y
-is a NaN).
-.PP
-.\" pow(x, \(+-0) = 1.0
-If
-.I y
-is 0, the result is 1.0 (even if
-.I x
-is a NaN).
-.PP
-.\" pow(<0, y) = NaN
-If
-.I x
-is a finite value less than 0, and
-.I y
-is a finite noninteger, a domain error occurs,
-.\" The domain error is generated at least as far back as glibc 2.4
-and a NaN is returned.
-.PP
-.\" pow(|x|<1, -INFINITY) = INFINITY
-If the absolute value of
-.I x
-is less than 1,
-and
-.I y
-is negative infinity,
-the result is positive infinity.
-.PP
-.\" pow(|x|>1, -INFINITY) = +0
-If the absolute value of
-.I x
-is greater than 1,
-and
-.I y
-is negative infinity,
-the result is +0.
-.PP
-.\" pow(|x|<1, INFINITY) = +0
-If the absolute value of
-.I x
-is less than 1,
-and
-.I y
-is positive infinity,
-the result is +0.
-.PP
-.\" pow(|x|>1, INFINITY) = INFINITY
-If the absolute value of
-.I x
-is greater than 1,
-and
-.I y
-is positive infinity,
-the result is positive infinity.
-.PP
-.\" pow(-INFINITY, <0 [[odd]]) = -0
-If
-.I x
-is negative infinity,
-and
-.I y
-is an odd integer less than 0,
-the result is \-0.
-.PP
-.\" pow(-INFINITY, <0 [[!odd]]) = +0
-If
-.I x
-is negative infinity,
-and
-.I y
-less than 0 and not an odd integer,
-the result is +0.
-.PP
-.\" pow(-INFINITY, >0 [[odd]]) = -INFINITY
-If
-.I x
-is negative infinity,
-and
-.I y
-is an odd integer greater than 0,
-the result is negative infinity.
-.PP
-.\" pow(-INFINITY, >0 [[!odd]]) = INFINITY
-If
-.I x
-is negative infinity,
-and
-.I y
-greater than 0 and not an odd integer,
-the result is positive infinity.
-.PP
-.\" pow(INFINITY, <0) = +0
-If
-.I x
-is positive infinity,
-and
-.I y
-less than 0,
-the result is +0.
-.PP
-.\" pow(INFINITY, >0) = INFINITY
-If
-.I x
-is positive infinity,
-and
-.I y
-greater than 0,
-the result is positive infinity.
-.PP
-.\" pow(NaN, y) or pow(x, NaN) = NaN
-Except as specified above, if
-.I x
-or
-.I y
-is a NaN, the result is a NaN.
-.SH ERRORS
-.\" FIXME . review status of this error
-.\" longstanding bug report for glibc:
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=369
-.\" For negative x, and -large and +large y, glibc 2.8 gives incorrect
-.\" results
-.\" pow(-0.5,-DBL_MAX)=nan
-.\" EDOM FE_INVALID nan; fail-errno fail-except fail-result;
-.\" FAIL (expected: range-error-overflow (ERANGE, FE_OVERFLOW); +INF)
-.\"
-.\" pow(-1.5,-DBL_MAX)=nan
-.\" EDOM FE_INVALID nan; fail-errno fail-except fail-result;
-.\" FAIL (expected: range-error-underflow (ERANGE, FE_UNDERFLOW); +0)
-.\"
-.\" pow(-0.5,DBL_MAX)=nan
-.\" EDOM FE_INVALID nan; fail-errno fail-except fail-result;
-.\" FAIL (expected: range-error-underflow (ERANGE, FE_UNDERFLOW); +0)
-.\"
-.\" pow(-1.5,DBL_MAX)=nan
-.\" EDOM FE_INVALID nan; fail-errno fail-except fail-result;
-.\" FAIL (expected: range-error-overflow (ERANGE, FE_OVERFLOW); +INF)
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is negative, and \fIy\fP is a finite noninteger
-.I errno
-is set to
-.BR EDOM .
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.TP
-Pole error: \fIx\fP is zero, and \fIy\fP is negative
-.I errno
-is set to
-.B ERANGE
-(but see BUGS).
-A divide-by-zero floating-point exception
-.RB ( FE_DIVBYZERO )
-is raised.
-.TP
-Range error: the result overflows
-.I errno
-is set to
-.BR ERANGE .
-An overflow floating-point exception
-.RB ( FE_OVERFLOW )
-is raised.
-.TP
-Range error: the result underflows
-.I errno
-is set to
-.BR ERANGE .
-An underflow floating-point exception
-.RB ( FE_UNDERFLOW )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pow (),
-.BR powf (),
-.BR powl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH BUGS
-.SS Historical bugs (now fixed)
-Before glibc 2.28,
-.\" https://sourceware.org/bugzilla/show_bug.cgi?id=13932
-on some architectures (e.g., x86-64)
-.BR pow ()
-may be more than 10,000 times slower for some inputs
-than for other nearby inputs.
-This affects only
-.BR pow (),
-and not
-.BR powf ()
-nor
-.BR powl ().
-This problem was fixed
-.\" commit c3d466cba1692708a19c6ff829d0386c83a0c6e5
-in glibc 2.28.
-.PP
-A number of bugs
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=3866
-in the glibc implementation of
-.BR pow ()
-were fixed in glibc 2.16.
-.PP
-In glibc 2.9 and earlier,
-.\"
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6776
-when a pole error occurs,
-.I errno
-is set to
-.B EDOM
-instead of the POSIX-mandated
-.BR ERANGE .
-Since glibc 2.10,
-.\" or possibly 2.9, I haven't found the source code change
-.\" and I don't have a 2.9 system to test
-glibc does the right thing.
-.PP
-In glibc 2.3.2 and earlier,
-.\" Actually, glibc 2.3.2 is the earliest test result I have; so yet
-.\" to confirm if this error occurs only in glibc 2.3.2.
-when an overflow or underflow error occurs, glibc's
-.BR pow ()
-generates a bogus invalid floating-point exception
-.RB ( FE_INVALID )
-in addition to the overflow or underflow exception.
-.SH SEE ALSO
-.BR cbrt (3),
-.BR cpow (3),
-.BR sqrt (3)
diff --git a/man3/pow10.3 b/man3/pow10.3
deleted file mode 100644
index 6af433cae..000000000
--- a/man3/pow10.3
+++ /dev/null
@@ -1,59 +0,0 @@
-'\" t
-.\" Copyright 2004 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pow10 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pow10, pow10f, pow10l \- base-10 power functions
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <math.h>
-.PP
-.BI "double pow10(double " x );
-.BI "float pow10f(float " x );
-.BI "long double pow10l(long double " x );
-.fi
-.SH DESCRIPTION
-These functions return the value of 10 raised to the power
-.IR x .
-.PP
-.BR "Note well" :
-These functions perform exactly the same task as the functions described in
-.BR exp10 (3),
-with the difference that the latter functions are now standardized
-in TS\ 18661-4:2015.
-Those latter functions should be used in preference
-to the functions described in this page.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pow10 (),
-.BR pow10f (),
-.BR pow10l ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH VERSIONS
-glibc 2.1.
-Removed in glibc 2.27.
-.\" glibc commit 5a80d39d0d2587e9bd8e72f19e92eeb2a66fbe9e
-.SH SEE ALSO
-.BR exp10 (3),
-.BR pow (3)
diff --git a/man3/pow10f.3 b/man3/pow10f.3
deleted file mode 100644
index 8a7158015..000000000
--- a/man3/pow10f.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pow10.3
diff --git a/man3/pow10l.3 b/man3/pow10l.3
deleted file mode 100644
index 8a7158015..000000000
--- a/man3/pow10l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pow10.3
diff --git a/man3/powerof2.3 b/man3/powerof2.3
deleted file mode 100644
index 65420bfdc..000000000
--- a/man3/powerof2.3
+++ /dev/null
@@ -1,46 +0,0 @@
-.\" Copyright (C) 2022 Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH powerof2 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-powerof2 \- test if a value is a power of 2
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/param.h>
-.PP
-.BI "int powerof2(" x );
-.fi
-.SH DESCRIPTION
-This macro returns true if
-.I x
-is a power of 2,
-and false otherwise.
-.PP
-.B 0
-is considered a power of 2.
-This can make sense considering wrapping of unsigned integers,
-and has interesting properties.
-.SH RETURN VALUE
-True or false,
-if
-.I x
-is a power of 2 or not,
-respectively.
-.SH STANDARDS
-BSD.
-.SH CAVEATS
-The arguments may be evaluated more than once.
-.PP
-Because this macro is implemented using bitwise operations,
-some negative values can invoke undefined behavior.
-For example,
-the following invokes undefined behavior:
-.IR "powerof2(INT_MIN);".
-Call it only with unsigned types to be safe.
-.SH SEE ALSO
-.BR stdc_bit_ceil (3),
-.BR stdc_bit_floor (3)
diff --git a/man3/powf.3 b/man3/powf.3
deleted file mode 100644
index 63da756f5..000000000
--- a/man3/powf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pow.3
diff --git a/man3/powl.3 b/man3/powl.3
deleted file mode 100644
index 63da756f5..000000000
--- a/man3/powl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pow.3
diff --git a/man3/printf.3 b/man3/printf.3
deleted file mode 100644
index 962881a9c..000000000
--- a/man3/printf.3
+++ /dev/null
@@ -1,1242 +0,0 @@
-'\" t
-.\" Copyright (c) 1999 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" Earlier versions of this page influenced the present text.
-.\" It was derived from a Berkeley page with version
-.\" @(#)printf.3 6.14 (Berkeley) 7/30/91
-.\" converted for Linux by faith@cs.unc.edu, updated by
-.\" Helmut.Geyer@iwr.uni-heidelberg.de, agulbra@troll.no and Bruno Haible.
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 1999-11-25 aeb - Rewritten, using SUSv2 and C99.
-.\" 2000-07-26 jsm28@hermes.cam.ac.uk - three small fixes
-.\" 2000-10-16 jsm28@hermes.cam.ac.uk - more fixes
-.\"
-.TH printf 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-printf, fprintf, dprintf, sprintf, snprintf, vprintf, vfprintf, vdprintf,
-vsprintf, vsnprintf \- formatted output conversion
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "int printf(const char *restrict " format ", ...);"
-.BI "int fprintf(FILE *restrict " stream ,
-.BI " const char *restrict " format ", ...);"
-.BI "int dprintf(int " fd ,
-.BI " const char *restrict " format ", ...);"
-.BI "int sprintf(char *restrict " str ,
-.BI " const char *restrict " format ", ...);"
-.BI "int snprintf(char " str "[restrict ." size "], size_t " size ,
-.BI " const char *restrict " format ", ...);"
-.PP
-.BI "int vprintf(const char *restrict " format ", va_list " ap );
-.BI "int vfprintf(FILE *restrict " stream ,
-.BI " const char *restrict " format ", va_list " ap );
-.BI "int vdprintf(int " fd ,
-.BI " const char *restrict " format ", va_list " ap );
-.BI "int vsprintf(char *restrict " str ,
-.BI " const char *restrict " format ", va_list " ap );
-.BI "int vsnprintf(char " str "[restrict ." size "], size_t " size ,
-.BI " const char *restrict " format ", va_list " ap );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR snprintf (),
-.BR vsnprintf ():
-.nf
- _XOPEN_SOURCE >= 500 || _ISOC99_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE
-.fi
-.PP
-.BR dprintf (),
-.BR vdprintf ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The functions in the
-.BR printf ()
-family produce output according to a
-.I format
-as described below.
-The functions
-.BR printf ()
-and
-.BR vprintf ()
-write output to
-.IR stdout ,
-the standard output stream;
-.BR fprintf ()
-and
-.BR vfprintf ()
-write output to the given output
-.IR stream ;
-.BR sprintf (),
-.BR snprintf (),
-.BR vsprintf (),
-and
-.BR vsnprintf ()
-write to the character string
-.IR str .
-.PP
-The function
-.BR dprintf ()
-is the same as
-.BR fprintf ()
-except that it outputs to a file descriptor,
-.IR fd ,
-instead of to a
-.BR stdio (3)
-stream.
-.PP
-The functions
-.BR snprintf ()
-and
-.BR vsnprintf ()
-write at most
-.I size
-bytes (including the terminating null byte (\[aq]\e0\[aq])) to
-.IR str .
-.PP
-The functions
-.BR vprintf (),
-.BR vfprintf (),
-.BR vdprintf (),
-.BR vsprintf (),
-.BR vsnprintf ()
-are equivalent to the functions
-.BR printf (),
-.BR fprintf (),
-.BR dprintf (),
-.BR sprintf (),
-.BR snprintf (),
-respectively, except that they are called with a
-.I va_list
-instead of a variable number of arguments.
-These functions do not call the
-.I va_end
-macro.
-Because they invoke the
-.I va_arg
-macro, the value of
-.I ap
-is undefined after the call.
-See
-.BR stdarg (3).
-.PP
-All of these functions write the output under the control of a
-.I format
-string that specifies how subsequent arguments (or arguments accessed via
-the variable-length argument facilities of
-.BR stdarg (3))
-are converted for output.
-.PP
-C99 and POSIX.1-2001 specify that the results are undefined if a call to
-.BR sprintf (),
-.BR snprintf (),
-.BR vsprintf (),
-or
-.BR vsnprintf ()
-would cause copying to take place between objects that overlap
-(e.g., if the target string array and one of the supplied input arguments
-refer to the same buffer).
-See NOTES.
-.SS Format of the format string
-The format string is a character string, beginning and ending
-in its initial shift state, if any.
-The format string is composed of zero or more directives: ordinary
-characters (not
-.BR % ),
-which are copied unchanged to the output stream;
-and conversion specifications, each of which results in fetching zero or
-more subsequent arguments.
-Each conversion specification is introduced by
-the character
-.BR % ,
-and ends with a
-.IR "conversion specifier" .
-In between there may be (in this order) zero or more
-.IR flags ,
-an optional minimum
-.IR "field width" ,
-an optional
-.I precision
-and an optional
-.IR "length modifier" .
-.PP
-The overall syntax of a conversion specification is:
-.PP
-.in +4n
-.nf
-%[$][flags][width][.precision][length modifier]conversion
-.fi
-.in
-.PP
-The arguments must correspond properly (after type promotion) with the
-conversion specifier.
-By default, the arguments are used in the order
-given, where each \[aq]*\[aq] (see
-.I "Field width"
-and
-.I Precision
-below) and each conversion specifier asks for the next
-argument (and it is an error if insufficiently many arguments are given).
-One can also specify explicitly which argument is taken,
-at each place where an argument is required, by writing "%m$" instead
-of \[aq]%\[aq] and "*m$" instead of \[aq]*\[aq],
-where the decimal integer \fIm\fP denotes
-the position in the argument list of the desired argument, indexed starting
-from 1.
-Thus,
-.PP
-.in +4n
-.EX
-printf("%*d", width, num);
-.EE
-.in
-.PP
-and
-.PP
-.in +4n
-.EX
-printf("%2$*1$d", width, num);
-.EE
-.in
-.PP
-are equivalent.
-The second style allows repeated references to the
-same argument.
-The C99 standard does not include the style using \[aq]$\[aq],
-which comes from the Single UNIX Specification.
-If the style using
-\[aq]$\[aq] is used, it must be used throughout for all conversions taking an
-argument and all width and precision arguments, but it may be mixed
-with "%%" formats, which do not consume an argument.
-There may be no
-gaps in the numbers of arguments specified using \[aq]$\[aq]; for example, if
-arguments 1 and 3 are specified, argument 2 must also be specified
-somewhere in the format string.
-.PP
-For some numeric conversions a radix character ("decimal point") or
-thousands' grouping character is used.
-The actual character used
-depends on the
-.B LC_NUMERIC
-part of the locale.
-(See
-.BR setlocale (3).)
-The POSIX locale
-uses \[aq].\[aq] as radix character, and does not have a grouping character.
-Thus,
-.PP
-.in +4n
-.EX
-printf("%\[aq].2f", 1234567.89);
-.EE
-.in
-.PP
-results in "1234567.89" in the POSIX locale, in "1234567,89" in the
-nl_NL locale, and in "1.234.567,89" in the da_DK locale.
-.SS Flag characters
-The character % is followed by zero or more of the following flags:
-.TP
-.B #
-The value should be converted to an "alternate form".
-For
-.B o
-conversions, the first character of the output string is made zero
-(by prefixing a 0 if it was not zero already).
-For
-.B x
-and
-.B X
-conversions, a nonzero result has the string "0x" (or "0X" for
-.B X
-conversions) prepended to it.
-For
-.BR a ,
-.BR A ,
-.BR e ,
-.BR E ,
-.BR f ,
-.BR F ,
-.BR g ,
-and
-.B G
-conversions, the result will always contain a decimal point, even if no
-digits follow it (normally, a decimal point appears in the results of those
-conversions only if a digit follows).
-For
-.B g
-and
-.B G
-conversions, trailing zeros are not removed from the result as they would
-otherwise be.
-For
-.BR m ,
-if
-.I errno
-contains a valid error code,
-the output of
-.I strerrorname_np(errno)
-is printed;
-otherwise, the value stored in
-.I errno
-is printed as a decimal number.
-For other conversions, the result is undefined.
-.TP
-.B \&0
-The value should be zero padded.
-For
-.BR d ,
-.BR i ,
-.BR o ,
-.BR u ,
-.BR x ,
-.BR X ,
-.BR a ,
-.BR A ,
-.BR e ,
-.BR E ,
-.BR f ,
-.BR F ,
-.BR g ,
-and
-.B G
-conversions, the converted value is padded on the left with zeros rather
-than blanks.
-If the
-.B \&0
-and
-.B \-
-flags both appear, the
-.B \&0
-flag is ignored.
-If a precision is given with an integer conversion
-.RB ( d ,
-.BR i ,
-.BR o ,
-.BR u ,
-.BR x ,
-and
-.BR X ),
-the
-.B \&0
-flag is ignored.
-For other conversions, the behavior is undefined.
-.TP
-.B \-
-The converted value is to be left adjusted on the field boundary.
-(The default is right justification.)
-The converted value is padded on the right with blanks, rather
-than on the left with blanks or zeros.
-A
-.B \-
-overrides a
-.B \&0
-if both are given.
-.TP
-.B \[aq] \[aq]
-(a space) A blank should be left before a positive number
-(or empty string) produced by a signed conversion.
-.TP
-.B +
-A sign (+ or \-) should always be placed before a number produced by a signed
-conversion.
-By default, a sign is used only for negative numbers.
-A
-.B +
-overrides a space if both are used.
-.PP
-The five flag characters above are defined in the C99 standard.
-The Single UNIX Specification specifies one further flag character.
-.TP
-.B \[aq]
-For decimal conversion
-.RB ( i ,
-.BR d ,
-.BR u ,
-.BR f ,
-.BR F ,
-.BR g ,
-.BR G )
-the output is to be grouped with thousands' grouping characters
-if the locale information indicates any.
-(See
-.BR setlocale (3).)
-Note that many versions of
-.BR gcc (1)
-cannot parse this option and will issue a warning.
-(SUSv2 did not
-include \fI%\[aq]F\fP, but SUSv3 added it.)
-Note also that the default locale of a C program is "C"
-whose locale information indicates no thousands' grouping character.
-Therefore, without a prior call to
-.BR setlocale (3),
-no thousands' grouping characters will be printed.
-.PP
-glibc 2.2 adds one further flag character.
-.TP
-.B I
-For decimal integer conversion
-.RB ( i ,
-.BR d ,
-.BR u )
-the output uses the locale's alternative output digits, if any.
-For example, since glibc 2.2.3 this will give Arabic-Indic digits
-in the Persian ("fa_IR") locale.
-.\" outdigits keyword in locale file
-.SS Field width
-An optional decimal digit string (with nonzero first digit) specifying
-a minimum field width.
-If the converted value has fewer characters
-than the field width, it will be padded with spaces on the left
-(or right, if the left-adjustment flag has been given).
-Instead of a decimal digit string one may write "*" or "*m$"
-(for some decimal integer \fIm\fP) to specify that the field width
-is given in the next argument, or in the \fIm\fP-th argument, respectively,
-which must be of type
-.IR int .
-A negative field width is taken as a \[aq]\-\[aq] flag followed by a
-positive field width.
-In no case does a nonexistent or small field width cause truncation of a
-field; if the result of a conversion is wider than the field width, the
-field is expanded to contain the conversion result.
-.SS Precision
-An optional precision, in the form of a period (\[aq].\[aq]) followed by an
-optional decimal digit string.
-Instead of a decimal digit string one may write "*" or "*m$"
-(for some decimal integer \fIm\fP) to specify that the precision
-is given in the next argument, or in the \fIm\fP-th argument, respectively,
-which must be of type
-.IR int .
-If the precision is given as just \[aq].\[aq], the precision is taken to
-be zero.
-A negative precision is taken as if the precision were omitted.
-This gives the minimum number of digits to appear for
-.BR d ,
-.BR i ,
-.BR o ,
-.BR u ,
-.BR x ,
-and
-.B X
-conversions, the number of digits to appear after the radix character for
-.BR a ,
-.BR A ,
-.BR e ,
-.BR E ,
-.BR f ,
-and
-.B F
-conversions, the maximum number of significant digits for
-.B g
-and
-.B G
-conversions, or the maximum number of characters to be printed from a
-string for
-.B s
-and
-.B S
-conversions.
-.SS Length modifier
-Here, "integer conversion" stands for
-.BR d ,
-.BR i ,
-.BR o ,
-.BR u ,
-.BR x ,
-or
-.B X
-conversion.
-.TP
-.B hh
-A following integer conversion corresponds to a
-.I signed char
-or
-.I unsigned char
-argument, or a following
-.B n
-conversion corresponds to a pointer to a
-.I signed char
-argument.
-.TP
-.B h
-A following integer conversion corresponds to a
-.I short
-or
-.I unsigned short
-argument, or a following
-.B n
-conversion corresponds to a pointer to a
-.I short
-argument.
-.TP
-.B l
-(ell) A following integer conversion corresponds to a
-.I long
-or
-.I unsigned long
-argument, or a following
-.B n
-conversion corresponds to a pointer to a
-.I long
-argument, or a following
-.B c
-conversion corresponds to a
-.I wint_t
-argument, or a following
-.B s
-conversion corresponds to a pointer to
-.I wchar_t
-argument.
-On a following
-.BR a ,
-.BR A ,
-.BR e ,
-.BR E ,
-.BR f ,
-.BR F ,
-.BR g ,
-or
-.B G
-conversion, this length modifier is ignored (C99; not in SUSv2).
-.TP
-.B ll
-(ell-ell).
-A following integer conversion corresponds to a
-.I long long
-or
-.I unsigned long long
-argument, or a following
-.B n
-conversion corresponds to a pointer to a
-.I long long
-argument.
-.TP
-.B q
-A synonym for
-.BR ll .
-This is a nonstandard extension, derived from BSD;
-avoid its use in new code.
-.TP
-.B L
-A following
-.BR a ,
-.BR A ,
-.BR e ,
-.BR E ,
-.BR f ,
-.BR F ,
-.BR g ,
-or
-.B G
-conversion corresponds to a
-.I long double
-argument.
-(C99 allows %LF, but SUSv2 does not.)
-.TP
-.B j
-A following integer conversion corresponds to an
-.I intmax_t
-or
-.I uintmax_t
-argument, or a following
-.B n
-conversion corresponds to a pointer to an
-.I intmax_t
-argument.
-.TP
-.B z
-A following integer conversion corresponds to a
-.I size_t
-or
-.I ssize_t
-argument, or a following
-.B n
-conversion corresponds to a pointer to a
-.I size_t
-argument.
-.TP
-.B Z
-A nonstandard synonym for
-.B z
-that predates the appearance of
-.BR z .
-Do not use in new code.
-.TP
-.B t
-A following integer conversion corresponds to a
-.I ptrdiff_t
-argument, or a following
-.B n
-conversion corresponds to a pointer to a
-.I ptrdiff_t
-argument.
-.PP
-SUSv3 specifies all of the above,
-except for those modifiers explicitly noted as being nonstandard extensions.
-SUSv2 specified only the length modifiers
-.B h
-(in
-.BR hd ,
-.BR hi ,
-.BR ho ,
-.BR hx ,
-.BR hX ,
-.BR hn )
-and
-.B l
-(in
-.BR ld ,
-.BR li ,
-.BR lo ,
-.BR lx ,
-.BR lX ,
-.BR ln ,
-.BR lc ,
-.BR ls )
-and
-.B L
-(in
-.BR Le ,
-.BR LE ,
-.BR Lf ,
-.BR Lg ,
-.BR LG ).
-.PP
-As a nonstandard extension, the GNU implementations treats
-.B ll
-and
-.B L
-as synonyms, so that one can, for example, write
-.B llg
-(as a synonym for the standards-compliant
-.BR Lg )
-and
-.B Ld
-(as a synonym for the standards compliant
-.BR lld ).
-Such usage is nonportable.
-.\"
-.SS Conversion specifiers
-A character that specifies the type of conversion to be applied.
-The conversion specifiers and their meanings are:
-.TP
-.BR d ", " i
-The
-.I int
-argument is converted to signed decimal notation.
-The precision, if any, gives the minimum number of digits
-that must appear; if the converted value requires fewer digits, it is
-padded on the left with zeros.
-The default precision is 1.
-When 0 is printed with an explicit precision 0, the output is empty.
-.TP
-.BR o ", " u ", " x ", " X
-The
-.I "unsigned int"
-argument is converted to unsigned octal
-.RB ( o ),
-unsigned decimal
-.RB ( u ),
-or unsigned hexadecimal
-.RB ( x
-and
-.BR X )
-notation.
-The letters
-.B abcdef
-are used for
-.B x
-conversions; the letters
-.B ABCDEF
-are used for
-.B X
-conversions.
-The precision, if any, gives the minimum number of digits
-that must appear; if the converted value requires fewer digits, it is
-padded on the left with zeros.
-The default precision is 1.
-When 0 is printed with an explicit precision 0, the output is empty.
-.TP
-.BR e ", " E
-The
-.I double
-argument is rounded and converted in the style
-.RB [\-]d \&. ddd e \(+-dd
-where there is one digit (which is nonzero if the argument is nonzero)
-before the decimal-point character and the number
-of digits after it is equal to the precision; if the precision is missing,
-it is taken as 6; if the precision is zero, no decimal-point character
-appears.
-An
-.B E
-conversion uses the letter
-.B E
-(rather than
-.BR e )
-to introduce the exponent.
-The exponent always contains at least two
-digits; if the value is zero, the exponent is 00.
-.TP
-.BR f ", " F
-The
-.I double
-argument is rounded and converted to decimal notation in the style
-.RB [\-]ddd \&. ddd,
-where the number of digits after the decimal-point character is equal to
-the precision specification.
-If the precision is missing, it is taken as
-6; if the precision is explicitly zero, no decimal-point character appears.
-If a decimal point appears, at least one digit appears before it.
-.IP
-(SUSv2 does not know about
-.B F
-and says that character string representations for infinity and NaN
-may be made available.
-SUSv3 adds a specification for
-.BR F .
-The C99 standard specifies "[\-]inf" or "[\-]infinity"
-for infinity, and a string starting with "nan" for NaN, in the case of
-.B f
-conversion, and "[\-]INF" or "[\-]INFINITY" or "NAN" in the case of
-.B F
-conversion.)
-.TP
-.BR g ", " G
-The
-.I double
-argument is converted in style
-.B f
-or
-.B e
-(or
-.B F
-or
-.B E
-for
-.B G
-conversions).
-The precision specifies the number of significant digits.
-If the precision is missing, 6 digits are given; if the precision is zero,
-it is treated as 1.
-Style
-.B e
-is used if the exponent from its conversion is less than \-4 or greater
-than or equal to the precision.
-Trailing zeros are removed from the
-fractional part of the result; a decimal point appears only if it is
-followed by at least one digit.
-.TP
-.BR a ", " A
-(C99; not in SUSv2, but added in SUSv3)
-For
-.B a
-conversion, the
-.I double
-argument is converted to hexadecimal notation (using the letters abcdef)
-in the style
-.RB [\-] 0x h \&. hhhh p \(+-d;
-for
-.B A
-conversion the prefix
-.BR 0X ,
-the letters ABCDEF, and the exponent separator
-.B P
-is used.
-There is one hexadecimal digit before the decimal point,
-and the number of digits after it is equal to the precision.
-The default precision suffices for an exact representation of the value
-if an exact representation in base 2 exists
-and otherwise is sufficiently large to distinguish values of type
-.IR double .
-The digit before the decimal point is unspecified for nonnormalized
-numbers, and nonzero but otherwise unspecified for normalized numbers.
-The exponent always contains at least one
-digit; if the value is zero, the exponent is 0.
-.TP
-.B c
-If no
-.B l
-modifier is present, the
-.I int
-argument is converted to an
-.IR "unsigned char" ,
-and the resulting character is written.
-If an
-.B l
-modifier is present, the
-.I wint_t
-(wide character) argument is converted to a multibyte sequence by a call
-to the
-.BR wcrtomb (3)
-function, with a conversion state starting in the initial state, and the
-resulting multibyte string is written.
-.TP
-.B s
-If no
-.B l
-modifier is present: the
-.I "const char\ *"
-argument is expected to be a pointer to an array of character type (pointer
-to a string).
-Characters from the array are written up to (but not
-including) a terminating null byte (\[aq]\e0\[aq]);
-if a precision is specified, no more than the number specified
-are written.
-If a precision is given, no null byte need be present;
-if the precision is not specified, or is greater than the size of the
-array, the array must contain a terminating null byte.
-.IP
-If an
-.B l
-modifier is present: the
-.I "const wchar_t\ *"
-argument is expected to be a pointer to an array of wide characters.
-Wide characters from the array are converted to multibyte characters
-(each by a call to the
-.BR wcrtomb (3)
-function, with a conversion state starting in the initial state before
-the first wide character), up to and including a terminating null
-wide character.
-The resulting multibyte characters are written up to
-(but not including) the terminating null byte.
-If a precision is
-specified, no more bytes than the number specified are written, but
-no partial multibyte characters are written.
-Note that the precision
-determines the number of
-.I bytes
-written, not the number of
-.I wide characters
-or
-.IR "screen positions" .
-The array must contain a terminating null wide character, unless a
-precision is given and it is so small that the number of bytes written
-exceeds it before the end of the array is reached.
-.TP
-.B C
-(Not in C99 or C11, but in SUSv2, SUSv3, and SUSv4.)
-Synonym for
-.BR lc .
-Don't use.
-.TP
-.B S
-(Not in C99 or C11, but in SUSv2, SUSv3, and SUSv4.)
-Synonym for
-.BR ls .
-Don't use.
-.TP
-.B p
-The
-.I "void\ *"
-pointer argument is printed in hexadecimal (as if by
-.B %#x
-or
-.BR %#lx ).
-.TP
-.B n
-The number of characters written so far is stored into the integer
-pointed to by the corresponding argument.
-That argument shall be an
-.IR "int\ *" ,
-or variant whose size matches the (optionally)
-supplied integer length modifier.
-No argument is converted.
-(This specifier is not supported by the bionic C library.)
-The behavior is undefined if the conversion specification includes
-any flags, a field width, or a precision.
-.TP
-.B m
-(glibc extension; supported by uClibc and musl.)
-Print output of
-.I strerror(errno)
-(or
-.I strerrorname_np(errno)
-in the alternate form).
-No argument is required.
-.TP
-.B %
-A \[aq]%\[aq] is written.
-No argument is converted.
-The complete conversion
-specification is \[aq]%%\[aq].
-.SH RETURN VALUE
-Upon successful return, these functions return the number of characters
-printed (excluding the null byte used to end output to strings).
-.PP
-The functions
-.BR snprintf ()
-and
-.BR vsnprintf ()
-do not write more than
-.I size
-bytes (including the terminating null byte (\[aq]\e0\[aq])).
-If the output was truncated due to this limit, then the return value
-is the number of characters (excluding the terminating null byte)
-which would have been written to the final string if enough space
-had been available.
-Thus, a return value of
-.I size
-or more means that the output was truncated.
-(See also below under NOTES.)
-.PP
-If an output error is encountered, a negative value is returned.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR printf (),
-.BR fprintf (),
-.BR sprintf (),
-.BR snprintf (),
-.BR vprintf (),
-.BR vfprintf (),
-.BR vsprintf (),
-.BR vsnprintf ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR fprintf ()
-.TQ
-.BR printf ()
-.TQ
-.BR sprintf ()
-.TQ
-.BR vprintf ()
-.TQ
-.BR vfprintf ()
-.TQ
-.BR vsprintf ()
-.TQ
-.BR snprintf ()
-.TQ
-.BR vsnprintf ()
-C11, POSIX.1-2008.
-.TP
-.BR dprintf ()
-.TQ
-.BR vdprintf ()
-GNU, POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR fprintf ()
-.TQ
-.BR printf ()
-.TQ
-.BR sprintf ()
-.TQ
-.BR vprintf ()
-.TQ
-.BR vfprintf ()
-.TQ
-.BR vsprintf ()
-C89, POSIX.1-2001.
-.TP
-.BR snprintf ()
-.TQ
-.BR vsnprintf ()
-SUSv2, C99, POSIX.1-2001.
-.IP
-Concerning the return value of
-.BR snprintf (),
-SUSv2 and C99 contradict each other: when
-.BR snprintf ()
-is called with
-.IR size =0
-then SUSv2 stipulates an unspecified return value less than 1,
-while C99 allows
-.I str
-to be NULL in this case, and gives the return value (as always)
-as the number of characters that would have been written in case
-the output string has been large enough.
-POSIX.1-2001 and later align their specification of
-.BR snprintf ()
-with C99.
-.TP
-.BR dprintf ()
-.TQ
-.BR vdprintf ()
-GNU, POSIX.1-2008.
-.PP
-.\" Linux libc4 knows about the five C standard flags.
-.\" It knows about the length modifiers \fBh\fP, \fBl\fP, \fBL\fP,
-.\" and the conversions
-.\" \fBc\fP, \fBd\fP, \fBe\fP, \fBE\fP, \fBf\fP, \fBF\fP,
-.\" \fBg\fP, \fBG\fP, \fBi\fP, \fBn\fP, \fBo\fP, \fBp\fP,
-.\" \fBs\fP, \fBu\fP, \fBx\fP, and \fBX\fP,
-.\" where \fBF\fP is a synonym for \fBf\fP.
-.\" Additionally, it accepts \fBD\fP, \fBO\fP, and \fBU\fP as synonyms
-.\" for \fBld\fP, \fBlo\fP, and \fBlu\fP.
-.\" (This is bad, and caused serious bugs later, when
-.\" support for \fB%D\fP disappeared.)
-.\" No locale-dependent radix character,
-.\" no thousands' separator, no NaN or infinity, no "%m$" and "*m$".
-.\" .PP
-.\" Linux libc5 knows about the five C standard flags and the \[aq] flag,
-.\" locale, "%m$" and "*m$".
-.\" It knows about the length modifiers \fBh\fP, \fBl\fP, \fBL\fP,
-.\" \fBZ\fP, and \fBq\fP, but accepts \fBL\fP and \fBq\fP
-.\" both for \fIlong double\fP and for \fIlong long\fP (this is a bug).
-.\" It no longer recognizes \fBF\fP, \fBD\fP, \fBO\fP, and \fBU\fP,
-.\" but adds the conversion character
-.\" .BR m ,
-.\" which outputs
-.\" .IR strerror(errno) .
-.\" .PP
-.\" glibc 2.0 adds conversion characters \fBC\fP and \fBS\fP.
-.\" .PP
-glibc 2.1 adds length modifiers \fBhh\fP, \fBj\fP, \fBt\fP, and \fBz\fP
-and conversion characters \fBa\fP and \fBA\fP.
-.PP
-glibc 2.2 adds the conversion character \fBF\fP with C99 semantics,
-and the flag character \fBI\fP.
-.PP
-glibc 2.35 gives a meaning to the alternate form
-.RB ( # )
-of the
-.B m
-conversion specifier, that is
-.IR %#m .
-.SH CAVEATS
-Some programs imprudently rely on code such as the following
-.PP
-.in +4n
-.EX
-sprintf(buf, "%s some further text", buf);
-.EE
-.in
-.PP
-to append text to
-.IR buf .
-However, the standards explicitly note that the results are undefined
-if source and destination buffers overlap when calling
-.BR sprintf (),
-.BR snprintf (),
-.BR vsprintf (),
-and
-.BR vsnprintf ().
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=7075
-Depending on the version of
-.BR gcc (1)
-used, and the compiler options employed, calls such as the above will
-.B not
-produce the expected results.
-.PP
-The glibc implementation of the functions
-.BR snprintf ()
-and
-.BR vsnprintf ()
-conforms to the C99 standard, that is, behaves as described above,
-since glibc 2.1.
-Until glibc 2.0.6, they would return \-1
-when the output was truncated.
-.\" .SH HISTORY
-.\" UNIX V7 defines the three routines
-.\" .BR printf (),
-.\" .BR fprintf (),
-.\" .BR sprintf (),
-.\" and has the flag \-, the width or precision *, the length modifier l,
-.\" and the conversions doxfegcsu, and also D,O,U,X as synonyms for ld,lo,lu,lx.
-.\" This is still true for 2.9.1BSD, but 2.10BSD has the flags
-.\" #, + and <space> and no longer mentions D,O,U,X.
-.\" 2.11BSD has
-.\" .BR vprintf (),
-.\" .BR vfprintf (),
-.\" .BR vsprintf (),
-.\" and warns not to use D,O,U,X.
-.\" 4.3BSD Reno has the flag 0, the length modifiers h and L,
-.\" and the conversions n, p, E, G, X (with current meaning)
-.\" and deprecates D,O,U.
-.\" 4.4BSD introduces the functions
-.\" .BR snprintf ()
-.\" and
-.\" .BR vsnprintf (),
-.\" and the length modifier q.
-.\" FreeBSD also has functions
-.\" .BR asprintf ()
-.\" and
-.\" .BR vasprintf (),
-.\" that allocate a buffer large enough for
-.\" .BR sprintf ().
-.\" In glibc there are functions
-.\" .BR dprintf ()
-.\" and
-.\" .BR vdprintf ()
-.\" that print to a file descriptor instead of a stream.
-.SH BUGS
-Because
-.BR sprintf ()
-and
-.BR vsprintf ()
-assume an arbitrarily long string, callers must be careful not to overflow
-the actual space; this is often impossible to assure.
-Note that the length
-of the strings produced is locale-dependent and difficult to predict.
-Use
-.BR snprintf ()
-and
-.BR vsnprintf ()
-instead (or
-.BR asprintf (3)
-and
-.BR vasprintf (3)).
-.\" .PP
-.\" Linux libc4.[45] does not have a
-.\" .BR snprintf (),
-.\" but provides a libbsd that contains an
-.\" .BR snprintf ()
-.\" equivalent to
-.\" .BR sprintf (),
-.\" that is, one that ignores the
-.\" .I size
-.\" argument.
-.\" Thus, the use of
-.\" .BR snprintf ()
-.\" with early libc4 leads to serious security problems.
-.PP
-Code such as
-.BI printf( foo );
-often indicates a bug, since
-.I foo
-may contain a % character.
-If
-.I foo
-comes from untrusted user input, it may contain \fB%n\fP, causing the
-.BR printf ()
-call to write to memory and creating a security hole.
-.\" .PP
-.\" Some floating-point conversions under early libc4
-.\" caused memory leaks.
-.SH EXAMPLES
-To print
-.I Pi
-to five decimal places:
-.PP
-.in +4n
-.EX
-#include <math.h>
-#include <stdio.h>
-fprintf(stdout, "pi = %.5f\en", 4 * atan(1.0));
-.EE
-.in
-.PP
-To print a date and time in the form "Sunday, July 3, 10:02",
-where
-.I weekday
-and
-.I month
-are pointers to strings:
-.PP
-.in +4n
-.EX
-#include <stdio.h>
-fprintf(stdout, "%s, %s %d, %.2d:%.2d\en",
- weekday, month, day, hour, min);
-.EE
-.in
-.PP
-Many countries use the day-month-year order.
-Hence, an internationalized version must be able to print
-the arguments in an order specified by the format:
-.PP
-.in +4n
-.EX
-#include <stdio.h>
-fprintf(stdout, format,
- weekday, month, day, hour, min);
-.EE
-.in
-.PP
-where
-.I format
-depends on locale, and may permute the arguments.
-With the value:
-.PP
-.in +4n
-.EX
-"%1$s, %3$d. %2$s, %4$d:%5$.2d\en"
-.EE
-.in
-.PP
-one might obtain "Sonntag, 3. Juli, 10:02".
-.PP
-To allocate a sufficiently large string and print into it
-(code correct for both glibc 2.0 and glibc 2.1):
-.PP
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-\&
-char *
-make_message(const char *fmt, ...)
-{
- int n = 0;
- size_t size = 0;
- char *p = NULL;
- va_list ap;
-\&
- /* Determine required size. */
-\&
- va_start(ap, fmt);
- n = vsnprintf(p, size, fmt, ap);
- va_end(ap);
-\&
- if (n < 0)
- return NULL;
-\&
- size = (size_t) n + 1; /* One extra byte for \[aq]\e0\[aq] */
- p = malloc(size);
- if (p == NULL)
- return NULL;
-\&
- va_start(ap, fmt);
- n = vsnprintf(p, size, fmt, ap);
- va_end(ap);
-\&
- if (n < 0) {
- free(p);
- return NULL;
- }
-\&
- return p;
-}
-.EE
-.PP
-If truncation occurs in glibc versions prior to glibc 2.0.6,
-this is treated as an error instead of being handled gracefully.
-.SH SEE ALSO
-.BR printf (1),
-.BR asprintf (3),
-.BR puts (3),
-.BR scanf (3),
-.BR setlocale (3),
-.BR strfromd (3),
-.BR wcrtomb (3),
-.BR wprintf (3),
-.BR locale (5)
diff --git a/man3/profil.3 b/man3/profil.3
deleted file mode 100644
index 7791064a3..000000000
--- a/man3/profil.3
+++ /dev/null
@@ -1,97 +0,0 @@
-'\" t
-.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Fri Jun 23 01:35:19 1995 Andries Brouwer <aeb@cwi.nl>
-.\" (prompted by Bas V. de Bakker <bas@phys.uva.nl>)
-.\" Corrected (and moved to man3), 980612, aeb
-.TH profil 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-profil \- execution time profile
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "int profil(unsigned short *" buf ", size_t " bufsiz ,
-.BI " size_t " offset ", unsigned int " scale );
-.PP
-.fi
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR profil ():
-.nf
- Since glibc 2.21:
-.\" commit 266865c0e7b79d4196e2cc393693463f03c90bd8
- _DEFAULT_SOURCE
- In glibc 2.19 and 2.20:
- _DEFAULT_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
- Up to and including glibc 2.19:
- _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
-.fi
-.SH DESCRIPTION
-This routine provides a means to find out in what areas your program
-spends most of its time.
-The argument
-.I buf
-points to
-.I bufsiz
-bytes of core.
-Every virtual 10 milliseconds, the user's program counter (PC)
-is examined:
-.I offset
-is subtracted and the result is multiplied by
-.I scale
-and divided by 65536.
-If the resulting value is less than
-.IR bufsiz ,
-then the corresponding entry in
-.I buf
-is incremented.
-If
-.I buf
-is NULL, profiling is disabled.
-.SH RETURN VALUE
-Zero is always returned.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR profil ()
-T} Thread safety MT-Unsafe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-Similar to a call in SVr4.
-.SH BUGS
-.BR profil ()
-cannot be used on a program that also uses
-.B ITIMER_PROF
-interval timers (see
-.BR setitimer (2)).
-.PP
-True kernel profiling provides more accurate results.
-.\" Libc 4.4 contained a kernel patch providing a system call profil.
-.SH SEE ALSO
-.BR gprof (1),
-.BR sprof (1),
-.BR setitimer (2),
-.BR sigaction (2),
-.BR signal (2)
diff --git a/man3/program_invocation_name.3 b/man3/program_invocation_name.3
deleted file mode 100644
index 94b8866a0..000000000
--- a/man3/program_invocation_name.3
+++ /dev/null
@@ -1,66 +0,0 @@
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" %%%LICENSE_START(PERMISSIVE_MISC)
-.\" Permission is hereby granted, free of charge, to any person obtaining
-.\" a copy of this software and associated documentation files (the
-.\" "Software"), to deal in the Software without restriction, including
-.\" without limitation the rights to use, copy, modify, merge, publish,
-.\" distribute, sublicense, and/or sell copies of the Software, and to
-.\" permit persons to whom the Software is furnished to do so, subject to
-.\" the following conditions:
-.\"
-.\" The above copyright notice and this permission notice shall be
-.\" included in all copies or substantial portions of the Software.
-.\"
-.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-.\" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-.\" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-.\" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-.\" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-.\" %%%LICENSE_END
-.\"
-.TH program_invocation_name 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-program_invocation_name, program_invocation_short_name \- \
-obtain name used to invoke calling program
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <errno.h>
-.PP
-.BI "extern char *" program_invocation_name ;
-.BI "extern char *" program_invocation_short_name ;
-.fi
-.SH DESCRIPTION
-.I program_invocation_name
-contains the name that was used to invoke the calling program.
-This is the same as the value of
-.I argv[0]
-in
-.IR main (),
-with the difference that the scope of
-.I program_invocation_name
-is global.
-.PP
-.I program_invocation_short_name
-contains the basename component of name that was used to invoke
-the calling program.
-That is, it is the same value as
-.IR program_invocation_name ,
-with all text up to and including the final slash (/), if any, removed.
-.PP
-These variables are automatically initialized by the glibc run-time
-startup code.
-.SH VERSIONS
-The Linux-specific
-.IR /proc/ pid /cmdline
-file provides access to similar information.
-.SH STANDARDS
-GNU.
-.SH SEE ALSO
-.BR proc (5)
diff --git a/man3/program_invocation_short_name.3 b/man3/program_invocation_short_name.3
deleted file mode 100644
index f603f6c7f..000000000
--- a/man3/program_invocation_short_name.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/program_invocation_name.3
diff --git a/man3/psiginfo.3 b/man3/psiginfo.3
deleted file mode 100644
index cd748fa57..000000000
--- a/man3/psiginfo.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/psignal.3
diff --git a/man3/psignal.3 b/man3/psignal.3
deleted file mode 100644
index f428c0e7c..000000000
--- a/man3/psignal.3
+++ /dev/null
@@ -1,117 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:45:17 1993 by Rik Faith (faith@cs.unc.edu)
-.TH psignal 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-psignal, psiginfo \- print signal description
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.BI "void psignal(int " sig ", const char *" s );
-.BI "void psiginfo(const siginfo_t *" pinfo ", const char *" s );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR psignal ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR psiginfo ():
-.nf
- _POSIX_C_SOURCE >= 200809L
-.fi
-.SH DESCRIPTION
-The
-.BR psignal ()
-function displays a message on \fIstderr\fP
-consisting of the string \fIs\fP, a colon, a space, a string
-describing the signal number \fIsig\fP, and a trailing newline.
-If the string \fIs\fP is NULL or empty, the colon and space are omitted.
-If \fIsig\fP is invalid,
-the message displayed will indicate an unknown signal.
-.PP
-The
-.BR psiginfo ()
-function is like
-.BR psignal (),
-except that it displays information about the signal described by
-.IR pinfo ,
-which should point to a valid
-.I siginfo_t
-structure.
-As well as the signal description,
-.BR psiginfo ()
-displays information about the origin of the signal,
-and other information relevant to the signal
-(e.g., the relevant memory address for hardware-generated signals,
-the child process ID for
-.BR SIGCHLD ,
-and the user ID and process ID of the sender, for signals set using
-.BR kill (2)
-or
-.BR sigqueue (3)).
-.SH RETURN VALUE
-The
-.BR psignal ()
-and
-.BR psiginfo ()
-functions return no value.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR psignal (),
-.BR psiginfo ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.10.
-POSIX.1-2008, 4.3BSD.
-.SH BUGS
-Up to glibc 2.12,
-.BR psiginfo ()
-had the following bugs:
-.IP \[bu] 3
-In some circumstances, a trailing newline is not printed.
-.\" FIXME . http://sourceware.org/bugzilla/show_bug.cgi?id=12107
-.\" Reportedly now fixed; check glibc 2.13
-.IP \[bu]
-Additional details are not displayed for real-time signals.
-.\" FIXME . http://sourceware.org/bugzilla/show_bug.cgi?id=12108
-.\" Reportedly now fixed; check glibc 2.13
-.SH SEE ALSO
-.BR sigaction (2),
-.BR perror (3),
-.BR strsignal (3),
-.BR signal (7)
diff --git a/man3/pthread_atfork.3 b/man3/pthread_atfork.3
deleted file mode 100644
index 42811f85e..000000000
--- a/man3/pthread_atfork.3
+++ /dev/null
@@ -1,108 +0,0 @@
-.\" Copyright (C) 2017 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_atfork 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_atfork \- register fork handlers
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_atfork(void (*" prepare ")(void), void (*" parent ")(void),"
-.BI " void (*" child ")(void));"
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_atfork ()
-function registers fork handlers that are to be executed when
-.BR fork (2)
-is called by any thread in a process.
-The handlers are executed in the context of the thread that calls
-.BR fork (2).
-.PP
-Three kinds of handler can be registered:
-.IP \[bu] 3
-.I prepare
-specifies a handler that is executed in the parent process before
-.BR fork (2)
-processing starts.
-.IP \[bu]
-.I parent
-specifies a handler that is executed in the parent process after
-.BR fork (2)
-processing completes.
-.IP \[bu]
-.I child
-specifies a handler that is executed in the child process after
-.BR fork (2)
-processing completes.
-.PP
-Any of the three arguments may be NULL if no handler is needed
-in the corresponding phase of
-.BR fork (2)
-processing.
-.SH RETURN VALUE
-On success,
-.BR pthread_atfork ()
-returns zero.
-On error, it returns an error number.
-.BR pthread_atfork ()
-may be called multiple times by a process
-to register additional handlers.
-The handlers for each phase are called in a specified order: the
-.I prepare
-handlers are called in reverse order of registration; the
-.I parent
-and
-.I child
-handlers are called in the order of registration.
-.SH ERRORS
-.TP
-.B ENOMEM
-Could not allocate memory to record the fork handler list entry.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-When
-.BR fork (2)
-is called in a multithreaded process,
-only the calling thread is duplicated in the child process.
-The original intention of
-.BR pthread_atfork ()
-was to allow the child process to be returned to a consistent state.
-For example, at the time of the call to
-.BR fork (2),
-other threads may have locked mutexes that are visible in the
-user-space memory duplicated in the child.
-Such mutexes would never be unlocked,
-since the threads that placed the locks are not duplicated in the child.
-The intent of
-.BR pthread_atfork ()
-was to provide a mechanism whereby the application (or a library)
-could ensure that mutexes and other process and thread state would be
-restored to a consistent state.
-In practice, this task is generally too difficult to be practicable.
-.PP
-After a
-.BR fork (2)
-in a multithreaded process returns in the child,
-the child should call only async-signal-safe functions (see
-.BR signal\-safety (7))
-until such time as it calls
-.BR execve (2)
-to execute a new program.
-.PP
-POSIX.1 specifies that
-.BR pthread_atfork ()
-shall not fail with the error
-.BR EINTR .
-.SH SEE ALSO
-.BR fork (2),
-.BR atexit (3),
-.BR pthreads (7)
diff --git a/man3/pthread_attr_destroy.3 b/man3/pthread_attr_destroy.3
deleted file mode 100644
index 4e7c9494d..000000000
--- a/man3/pthread_attr_destroy.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_attr_init.3
diff --git a/man3/pthread_attr_getaffinity_np.3 b/man3/pthread_attr_getaffinity_np.3
deleted file mode 100644
index c6af8fa49..000000000
--- a/man3/pthread_attr_getaffinity_np.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_attr_setaffinity_np.3
diff --git a/man3/pthread_attr_getdetachstate.3 b/man3/pthread_attr_getdetachstate.3
deleted file mode 100644
index c57ecd59d..000000000
--- a/man3/pthread_attr_getdetachstate.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_attr_setdetachstate.3
diff --git a/man3/pthread_attr_getguardsize.3 b/man3/pthread_attr_getguardsize.3
deleted file mode 100644
index 766ca2f19..000000000
--- a/man3/pthread_attr_getguardsize.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_attr_setguardsize.3
diff --git a/man3/pthread_attr_getinheritsched.3 b/man3/pthread_attr_getinheritsched.3
deleted file mode 100644
index 65239cb76..000000000
--- a/man3/pthread_attr_getinheritsched.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_attr_setinheritsched.3
diff --git a/man3/pthread_attr_getschedparam.3 b/man3/pthread_attr_getschedparam.3
deleted file mode 100644
index 3f830fdce..000000000
--- a/man3/pthread_attr_getschedparam.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_attr_setschedparam.3
diff --git a/man3/pthread_attr_getschedpolicy.3 b/man3/pthread_attr_getschedpolicy.3
deleted file mode 100644
index 10f740c2c..000000000
--- a/man3/pthread_attr_getschedpolicy.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_attr_setschedpolicy.3
diff --git a/man3/pthread_attr_getscope.3 b/man3/pthread_attr_getscope.3
deleted file mode 100644
index 965fd629a..000000000
--- a/man3/pthread_attr_getscope.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_attr_setscope.3
diff --git a/man3/pthread_attr_getsigmask_np.3 b/man3/pthread_attr_getsigmask_np.3
deleted file mode 100644
index 92b55d302..000000000
--- a/man3/pthread_attr_getsigmask_np.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_attr_setsigmask_np.3
diff --git a/man3/pthread_attr_getstack.3 b/man3/pthread_attr_getstack.3
deleted file mode 100644
index 2b20d7eda..000000000
--- a/man3/pthread_attr_getstack.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_attr_setstack.3
diff --git a/man3/pthread_attr_getstackaddr.3 b/man3/pthread_attr_getstackaddr.3
deleted file mode 100644
index 49d8a85d4..000000000
--- a/man3/pthread_attr_getstackaddr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_attr_setstackaddr.3
diff --git a/man3/pthread_attr_getstacksize.3 b/man3/pthread_attr_getstacksize.3
deleted file mode 100644
index 52431f58f..000000000
--- a/man3/pthread_attr_getstacksize.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_attr_setstacksize.3
diff --git a/man3/pthread_attr_init.3 b/man3/pthread_attr_init.3
deleted file mode 100644
index 60657ee4b..000000000
--- a/man3/pthread_attr_init.3
+++ /dev/null
@@ -1,316 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_attr_init 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_attr_init, pthread_attr_destroy \- initialize and destroy
-thread attributes object
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_attr_init(pthread_attr_t *" attr );
-.BI "int pthread_attr_destroy(pthread_attr_t *" attr );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_attr_init ()
-function initializes the thread attributes object pointed to by
-.I attr
-with default attribute values.
-After this call, individual attributes of the object can be set
-using various related functions (listed under SEE ALSO),
-and then the object can be used in one or more
-.BR pthread_create (3)
-calls that create threads.
-.PP
-Calling
-.BR pthread_attr_init ()
-on a thread attributes object that has already been initialized
-results in undefined behavior.
-.PP
-When a thread attributes object is no longer required,
-it should be destroyed using the
-.BR pthread_attr_destroy ()
-function.
-Destroying a thread attributes object has no effect
-on threads that were created using that object.
-.PP
-Once a thread attributes object has been destroyed,
-it can be reinitialized using
-.BR pthread_attr_init ().
-Any other use of a destroyed thread attributes object
-has undefined results.
-.SH RETURN VALUE
-On success, these functions return 0;
-on error, they return a nonzero error number.
-.SH ERRORS
-POSIX.1 documents an
-.B ENOMEM
-error for
-.BR pthread_attr_init ();
-on Linux these functions always succeed
-(but portable and future-proof applications should nevertheless
-handle a possible error return).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_attr_init (),
-.BR pthread_attr_destroy ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-The
-.I pthread_attr_t
-type should be treated as opaque:
-any access to the object other than via pthreads functions
-is nonportable and produces undefined results.
-.SH EXAMPLES
-The program below optionally makes use of
-.BR pthread_attr_init ()
-and various related functions to initialize a thread attributes
-object that is used to create a single thread.
-Once created, the thread uses the
-.BR pthread_getattr_np (3)
-function (a nonstandard GNU extension) to retrieve the thread's
-attributes, and then displays those attributes.
-.PP
-If the program is run with no command-line argument,
-then it passes NULL as the
-.I attr
-argument of
-.BR pthread_create (3),
-so that the thread is created with default attributes.
-Running the program on Linux/x86-32 with the NPTL threading implementation,
-we see the following:
-.PP
-.in +4n
-.EX
-.\" Results from glibc 2.8, SUSE 11.0; Oct 2008
-.RB "$" " ulimit \-s" " # No stack limit ==> default stack size is 2 MB"
-unlimited
-.RB "$" " ./a.out"
-Thread attributes:
- Detach state = PTHREAD_CREATE_JOINABLE
- Scope = PTHREAD_SCOPE_SYSTEM
- Inherit scheduler = PTHREAD_INHERIT_SCHED
- Scheduling policy = SCHED_OTHER
- Scheduling priority = 0
- Guard size = 4096 bytes
- Stack address = 0x40196000
- Stack size = 0x201000 bytes
-.EE
-.in
-.PP
-When we supply a stack size as a command-line argument,
-the program initializes a thread attributes object,
-sets various attributes in that object,
-and passes a pointer to the object in the call to
-.BR pthread_create (3).
-Running the program on Linux/x86-32 with the NPTL threading implementation,
-we see the following:
-.PP
-.in +4n
-.EX
-.\" Results from glibc 2.8, SUSE 11.0; Oct 2008
-.RB "$" " ./a.out 0x3000000"
-posix_memalign() allocated at 0x40197000
-Thread attributes:
- Detach state = PTHREAD_CREATE_DETACHED
- Scope = PTHREAD_SCOPE_SYSTEM
- Inherit scheduler = PTHREAD_EXPLICIT_SCHED
- Scheduling policy = SCHED_OTHER
- Scheduling priority = 0
- Guard size = 0 bytes
- Stack address = 0x40197000
- Stack size = 0x3000000 bytes
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (pthread_attr_init.c)
-.EX
-#define _GNU_SOURCE /* To get pthread_getattr_np() declaration */
-#include <err.h>
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-static void
-display_pthread_attr(pthread_attr_t *attr, char *prefix)
-{
- int s, i;
- size_t v;
- void *stkaddr;
- struct sched_param sp;
-\&
- s = pthread_attr_getdetachstate(attr, &i);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_getdetachstate");
- printf("%sDetach state = %s\en", prefix,
- (i == PTHREAD_CREATE_DETACHED) ? "PTHREAD_CREATE_DETACHED" :
- (i == PTHREAD_CREATE_JOINABLE) ? "PTHREAD_CREATE_JOINABLE" :
- "???");
-\&
- s = pthread_attr_getscope(attr, &i);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_getscope");
- printf("%sScope = %s\en", prefix,
- (i == PTHREAD_SCOPE_SYSTEM) ? "PTHREAD_SCOPE_SYSTEM" :
- (i == PTHREAD_SCOPE_PROCESS) ? "PTHREAD_SCOPE_PROCESS" :
- "???");
-\&
- s = pthread_attr_getinheritsched(attr, &i);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_getinheritsched");
- printf("%sInherit scheduler = %s\en", prefix,
- (i == PTHREAD_INHERIT_SCHED) ? "PTHREAD_INHERIT_SCHED" :
- (i == PTHREAD_EXPLICIT_SCHED) ? "PTHREAD_EXPLICIT_SCHED" :
- "???");
-\&
- s = pthread_attr_getschedpolicy(attr, &i);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_getschedpolicy");
- printf("%sScheduling policy = %s\en", prefix,
- (i == SCHED_OTHER) ? "SCHED_OTHER" :
- (i == SCHED_FIFO) ? "SCHED_FIFO" :
- (i == SCHED_RR) ? "SCHED_RR" :
- "???");
-\&
- s = pthread_attr_getschedparam(attr, &sp);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_getschedparam");
- printf("%sScheduling priority = %d\en", prefix, sp.sched_priority);
-\&
- s = pthread_attr_getguardsize(attr, &v);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_getguardsize");
- printf("%sGuard size = %zu bytes\en", prefix, v);
-\&
- s = pthread_attr_getstack(attr, &stkaddr, &v);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_getstack");
- printf("%sStack address = %p\en", prefix, stkaddr);
- printf("%sStack size = %#zx bytes\en", prefix, v);
-}
-\&
-static void *
-thread_start(void *arg)
-{
- int s;
- pthread_attr_t gattr;
-\&
- /* pthread_getattr_np() is a non\-standard GNU extension that
- retrieves the attributes of the thread specified in its
- first argument. */
-\&
- s = pthread_getattr_np(pthread_self(), &gattr);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_getattr_np");
-\&
- printf("Thread attributes:\en");
- display_pthread_attr(&gattr, "\et");
-\&
- exit(EXIT_SUCCESS); /* Terminate all threads */
-}
-\&
-int
-main(int argc, char *argv[])
-{
- pthread_t thr;
- pthread_attr_t attr;
- pthread_attr_t *attrp; /* NULL or &attr */
- int s;
-\&
- attrp = NULL;
-\&
- /* If a command\-line argument was supplied, use it to set the
- stack\-size attribute and set a few other thread attributes,
- and set attrp pointing to thread attributes object. */
-\&
- if (argc > 1) {
- size_t stack_size;
- void *sp;
-\&
- attrp = &attr;
-\&
- s = pthread_attr_init(&attr);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_init");
-\&
- s = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_setdetachstate");
-\&
- s = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_setinheritsched");
-\&
- stack_size = strtoul(argv[1], NULL, 0);
-\&
- s = posix_memalign(&sp, sysconf(_SC_PAGESIZE), stack_size);
- if (s != 0)
- errc(EXIT_FAILURE, s, "posix_memalign");
-\&
- printf("posix_memalign() allocated at %p\en", sp);
-\&
- s = pthread_attr_setstack(&attr, sp, stack_size);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_setstack");
- }
-\&
- s = pthread_create(&thr, attrp, &thread_start, NULL);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_create");
-\&
- if (attrp != NULL) {
- s = pthread_attr_destroy(attrp);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_destroy");
- }
-\&
- pause(); /* Terminates when other thread calls exit() */
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.ad l
-.nh
-.BR pthread_attr_setaffinity_np (3),
-.BR pthread_attr_setdetachstate (3),
-.BR pthread_attr_setguardsize (3),
-.BR pthread_attr_setinheritsched (3),
-.BR pthread_attr_setschedparam (3),
-.BR pthread_attr_setschedpolicy (3),
-.BR pthread_attr_setscope (3),
-.BR pthread_attr_setsigmask_np (3),
-.BR pthread_attr_setstack (3),
-.BR pthread_attr_setstackaddr (3),
-.BR pthread_attr_setstacksize (3),
-.BR pthread_create (3),
-.BR pthread_getattr_np (3),
-.BR pthread_setattr_default_np (3),
-.BR pthreads (7)
diff --git a/man3/pthread_attr_setaffinity_np.3 b/man3/pthread_attr_setaffinity_np.3
deleted file mode 100644
index c095815d7..000000000
--- a/man3/pthread_attr_setaffinity_np.3
+++ /dev/null
@@ -1,123 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_attr_setaffinity_np 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_attr_setaffinity_np, pthread_attr_getaffinity_np \- set/get
-CPU affinity attribute in thread attributes object
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <pthread.h>
-.PP
-.BI "int pthread_attr_setaffinity_np(pthread_attr_t *" attr ,
-.BI " size_t " cpusetsize ", const cpu_set_t *" cpuset );
-.BI "int pthread_attr_getaffinity_np(const pthread_attr_t *" attr ,
-.BI " size_t " cpusetsize ", cpu_set_t *" cpuset );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_attr_setaffinity_np ()
-function
-sets the CPU affinity mask attribute of the
-thread attributes object referred to by
-.I attr
-to the value specified in
-.IR cpuset .
-This attribute determines the CPU affinity mask
-of a thread created using the thread attributes object
-.IR attr .
-.PP
-The
-.BR pthread_attr_getaffinity_np ()
-function
-returns the CPU affinity mask attribute of the thread attributes object
-referred to by
-.I attr
-in the buffer pointed to by
-.IR cpuset .
-.PP
-The argument
-.I cpusetsize
-is the length (in bytes) of the buffer pointed to by
-.IR cpuset .
-Typically, this argument would be specified as
-.IR sizeof(cpu_set_t) .
-.PP
-For more details on CPU affinity masks, see
-.BR sched_setaffinity (2).
-For a description of a set of macros
-that can be used to manipulate and inspect CPU sets, see
-.BR CPU_SET (3).
-.SH RETURN VALUE
-On success, these functions return 0;
-on error, they return a nonzero error number.
-.SH ERRORS
-.TP
-.B EINVAL
-.RB ( pthread_attr_setaffinity_np ())
-.I cpuset
-specified a CPU that was outside the set supported by the kernel.
-(The kernel configuration option
-.B CONFIG_NR_CPUS
-defines the range of the set supported by the kernel data type
-.\" cpumask_t
-used to represent CPU sets.)
-.\" The raw sched_getaffinity() system call returns the size (in bytes)
-.\" of the cpumask_t type.
-.TP
-.B EINVAL
-.RB ( pthread_attr_getaffinity_np ())
-A CPU in the affinity mask of the thread attributes object referred to by
-.I attr
-lies outside the range specified by
-.I cpusetsize
-(i.e.,
-.IR cpuset / cpusetsize
-is too small).
-.TP
-.B ENOMEM
-.RB ( pthread_attr_setaffinity_np ())
-Could not allocate memory.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_attr_setaffinity_np (),
-.BR pthread_attr_getaffinity_np ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU;
-hence the suffix "_np" (nonportable) in the names.
-.SH HISTORY
-glibc 2.3.4.
-.SH NOTES
-In glibc 2.3.3 only,
-versions of these functions were provided that did not have a
-.I cpusetsize
-argument.
-Instead the CPU set size given to the underlying system calls was always
-.IR sizeof(cpu_set_t) .
-.SH SEE ALSO
-.BR sched_setaffinity (2),
-.BR pthread_attr_init (3),
-.BR pthread_setaffinity_np (3),
-.BR cpuset (7),
-.BR pthreads (7)
diff --git a/man3/pthread_attr_setdetachstate.3 b/man3/pthread_attr_setdetachstate.3
deleted file mode 100644
index 402d8e01e..000000000
--- a/man3/pthread_attr_setdetachstate.3
+++ /dev/null
@@ -1,118 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_attr_setdetachstate 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_attr_setdetachstate, pthread_attr_getdetachstate \-
-set/get detach state attribute in thread attributes object
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_attr_setdetachstate(pthread_attr_t *" attr \
-", int " detachstate );
-.BI "int pthread_attr_getdetachstate(const pthread_attr_t *" attr ,
-.BI " int *" detachstate );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_attr_setdetachstate ()
-function sets the detach state attribute of the
-thread attributes object referred to by
-.I attr
-to the value specified in
-.IR detachstate .
-The detach state attribute determines whether a thread created using
-the thread attributes object
-.I attr
-will be created in a joinable or a detached state.
-.PP
-The following values may be specified in
-.IR detachstate :
-.TP
-.B PTHREAD_CREATE_DETACHED
-Threads that are created using
-.I attr
-will be created in a detached state.
-.TP
-.B PTHREAD_CREATE_JOINABLE
-Threads that are created using
-.I attr
-will be created in a joinable state.
-.PP
-The default setting of the detach state attribute in a newly initialized
-thread attributes object is
-.BR PTHREAD_CREATE_JOINABLE .
-.PP
-The
-.BR pthread_attr_getdetachstate ()
-returns the detach state attribute of the thread attributes object
-.I attr
-in the buffer pointed to by
-.IR detachstate .
-.SH RETURN VALUE
-On success, these functions return 0;
-on error, they return a nonzero error number.
-.SH ERRORS
-.BR pthread_attr_setdetachstate ()
-can fail with the following error:
-.TP
-.B EINVAL
-An invalid value was specified in
-.IR detachstate .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_attr_setdetachstate (),
-.BR pthread_attr_getdetachstate ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-See
-.BR pthread_create (3)
-for more details on detached and joinable threads.
-.PP
-A thread that is created in a joinable state should
-eventually either be joined using
-.BR pthread_join (3)
-or detached using
-.BR pthread_detach (3);
-see
-.BR pthread_create (3).
-.PP
-It is an error to specify the thread ID of
-a thread that was created in a detached state
-in a later call to
-.BR pthread_detach (3)
-or
-.BR pthread_join (3).
-.SH EXAMPLES
-See
-.BR pthread_attr_init (3).
-.SH SEE ALSO
-.BR pthread_attr_init (3),
-.BR pthread_create (3),
-.BR pthread_detach (3),
-.BR pthread_join (3),
-.BR pthreads (7)
diff --git a/man3/pthread_attr_setguardsize.3 b/man3/pthread_attr_setguardsize.3
deleted file mode 100644
index 00c65e4ff..000000000
--- a/man3/pthread_attr_setguardsize.3
+++ /dev/null
@@ -1,166 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_attr_setguardsize 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_attr_setguardsize, pthread_attr_getguardsize \- set/get guard size
-attribute in thread attributes object
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_attr_setguardsize(pthread_attr_t *" attr \
-", size_t " guardsize );
-.BI "int pthread_attr_getguardsize(const pthread_attr_t *restrict " attr ,
-.BI " size_t *restrict " guardsize );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_attr_setguardsize ()
-function sets the guard size attribute of the
-thread attributes object referred to by
-.I attr
-to the value specified in
-.IR guardsize .
-.PP
-If
-.I guardsize
-is greater than 0,
-then for each new thread created using
-.I attr
-the system allocates an additional region of at least
-.I guardsize
-bytes at the end of the thread's stack to act as the guard area
-for the stack (but see BUGS).
-.PP
-If
-.I guardsize
-is 0, then new threads created with
-.I attr
-will not have a guard area.
-.PP
-The default guard size is the same as the system page size.
-.PP
-If the stack address attribute has been set in
-.I attr
-(using
-.BR pthread_attr_setstack (3)
-or
-.BR pthread_attr_setstackaddr (3)),
-meaning that the caller is allocating the thread's stack,
-then the guard size attribute is ignored
-(i.e., no guard area is created by the system):
-it is the application's responsibility to handle stack overflow
-(perhaps by using
-.BR mprotect (2)
-to manually define a guard area at the end of the stack
-that it has allocated).
-.PP
-The
-.BR pthread_attr_getguardsize ()
-function returns the guard size attribute of the
-thread attributes object referred to by
-.I attr
-in the buffer pointed to by
-.IR guardsize .
-.SH RETURN VALUE
-On success, these functions return 0;
-on error, they return a nonzero error number.
-.SH ERRORS
-POSIX.1 documents an
-.B EINVAL
-error if
-.I attr
-or
-.I guardsize
-is invalid.
-On Linux these functions always succeed
-(but portable and future-proof applications should nevertheless
-handle a possible error return).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_attr_setguardsize (),
-.BR pthread_attr_getguardsize ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001.
-.SH NOTES
-A guard area consists of virtual memory pages that are protected
-to prevent read and write access.
-If a thread overflows its stack into the guard area,
-then, on most hard architectures, it receives a
-.B SIGSEGV
-signal, thus notifying it of the overflow.
-Guard areas start on page boundaries,
-and the guard size is internally rounded up to
-the system page size when creating a thread.
-(Nevertheless,
-.BR pthread_attr_getguardsize ()
-returns the guard size that was set by
-.BR pthread_attr_setguardsize ().)
-.PP
-Setting a guard size of 0 may be useful to save memory
-in an application that creates many threads
-and knows that stack overflow can never occur.
-.PP
-Choosing a guard size larger than the default size
-may be necessary for detecting stack overflows
-if a thread allocates large data structures on the stack.
-.SH BUGS
-As at glibc 2.8, the NPTL threading implementation includes
-the guard area within the stack size allocation,
-rather than allocating extra space at the end of the stack,
-as POSIX.1 requires.
-(This can result in an
-.B EINVAL
-error from
-.BR pthread_create (3)
-if the guard size value is too large,
-leaving no space for the actual stack.)
-.PP
-The obsolete LinuxThreads implementation did the right thing,
-allocating extra space at the end of the stack for the guard area.
-.\" glibc includes the guardsize within the allocated stack size,
-.\" which looks pretty clearly to be in violation of POSIX.
-.\"
-.\" Filed bug, 22 Oct 2008:
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6973
-.\"
-.\" Older reports:
-.\" https//bugzilla.redhat.com/show_bug.cgi?id=435337
-.\" Reportedly, LinuxThreads did the right thing, allocating
-.\" extra space at the end of the stack:
-.\" http://sourceware.org/ml/libc-alpha/2008-05/msg00086.html
-.SH EXAMPLES
-See
-.BR pthread_getattr_np (3).
-.SH SEE ALSO
-.BR mmap (2),
-.BR mprotect (2),
-.BR pthread_attr_init (3),
-.BR pthread_attr_setstack (3),
-.BR pthread_attr_setstacksize (3),
-.BR pthread_create (3),
-.BR pthreads (7)
diff --git a/man3/pthread_attr_setinheritsched.3 b/man3/pthread_attr_setinheritsched.3
deleted file mode 100644
index 98dc2eea1..000000000
--- a/man3/pthread_attr_setinheritsched.3
+++ /dev/null
@@ -1,143 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_attr_setinheritsched 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_attr_setinheritsched, pthread_attr_getinheritsched \- set/get
-inherit-scheduler attribute in thread attributes object
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_attr_setinheritsched(pthread_attr_t *" attr ,
-.BI " int " inheritsched );
-.BI "int pthread_attr_getinheritsched(const pthread_attr_t *restrict " attr ,
-.BI " int *restrict " inheritsched );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_attr_setinheritsched ()
-function sets the inherit-scheduler attribute of the
-thread attributes object referred to by
-.I attr
-to the value specified in
-.IR inheritsched .
-The inherit-scheduler attribute determines whether a thread created using
-the thread attributes object
-.I attr
-will inherit its scheduling attributes from the calling thread
-or whether it will take them from
-.IR attr .
-.PP
-The following scheduling attributes are affected by the
-inherit-scheduler attribute:
-scheduling policy
-.RB ( pthread_attr_setschedpolicy (3)),
-scheduling priority
-.RB ( pthread_attr_setschedparam (3)),
-and contention scope
-.RB ( pthread_attr_setscope (3)).
-.PP
-The following values may be specified in
-.IR inheritsched :
-.TP
-.B PTHREAD_INHERIT_SCHED
-Threads that are created using
-.I attr
-inherit scheduling attributes from the creating thread;
-the scheduling attributes in
-.I attr
-are ignored.
-.TP
-.B PTHREAD_EXPLICIT_SCHED
-Threads that are created using
-.I attr
-take their scheduling attributes from the values specified
-by the attributes object.
-.\" FIXME Document the defaults for scheduler settings
-.PP
-The default setting of the inherit-scheduler attribute in
-a newly initialized thread attributes object is
-.BR PTHREAD_INHERIT_SCHED .
-.PP
-The
-.BR pthread_attr_getinheritsched ()
-returns the inherit-scheduler attribute of the thread attributes object
-.I attr
-in the buffer pointed to by
-.IR inheritsched .
-.SH RETURN VALUE
-On success, these functions return 0;
-on error, they return a nonzero error number.
-.SH ERRORS
-.BR pthread_attr_setinheritsched ()
-can fail with the following error:
-.TP
-.B EINVAL
-Invalid value in
-.IR inheritsched .
-.PP
-POSIX.1 also documents an optional
-.B ENOTSUP
-error ("attempt was made to set the attribute to an unsupported value") for
-.BR pthread_attr_setinheritsched ().
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_attr_setinheritsched (),
-.BR pthread_attr_getinheritsched ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.0.
-POSIX.1-2001.
-.SH BUGS
-As at glibc 2.8, if a thread attributes object is initialized using
-.BR pthread_attr_init (3),
-then the scheduling policy of the attributes object is set to
-.B SCHED_OTHER
-and the scheduling priority is set to 0.
-However, if the inherit-scheduler attribute is then set to
-.BR PTHREAD_EXPLICIT_SCHED ,
-then a thread created using the attribute object
-wrongly inherits its scheduling attributes from the creating thread.
-This bug does not occur if either the scheduling policy or
-scheduling priority attribute is explicitly set
-in the thread attributes object before calling
-.BR pthread_create (3).
-.\" FIXME . Track status of the following bug:
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=7007
-.SH EXAMPLES
-See
-.BR pthread_setschedparam (3).
-.SH SEE ALSO
-.ad l
-.nh
-.BR pthread_attr_init (3),
-.BR pthread_attr_setschedparam (3),
-.BR pthread_attr_setschedpolicy (3),
-.BR pthread_attr_setscope (3),
-.BR pthread_create (3),
-.BR pthread_setschedparam (3),
-.BR pthread_setschedprio (3),
-.BR pthreads (7),
-.BR sched (7)
diff --git a/man3/pthread_attr_setschedparam.3 b/man3/pthread_attr_setschedparam.3
deleted file mode 100644
index c4ad066bf..000000000
--- a/man3/pthread_attr_setschedparam.3
+++ /dev/null
@@ -1,128 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_attr_setschedparam 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_attr_setschedparam, pthread_attr_getschedparam \- set/get
-scheduling parameter attributes in thread attributes object
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_attr_setschedparam(pthread_attr_t *restrict " attr ,
-.BI " const struct sched_param *restrict " param );
-.BI "int pthread_attr_getschedparam(const pthread_attr_t *restrict " attr ,
-.BI " struct sched_param *restrict " param );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_attr_setschedparam ()
-function sets the scheduling parameter attributes of the
-thread attributes object referred to by
-.I attr
-to the values specified in the buffer pointed to by
-.IR param .
-These attributes determine the scheduling parameters of
-a thread created using the thread attributes object
-.IR attr .
-.PP
-The
-.BR pthread_attr_getschedparam ()
-returns the scheduling parameter attributes of the thread attributes object
-.I attr
-in the buffer pointed to by
-.IR param .
-.PP
-Scheduling parameters are maintained in the following structure:
-.PP
-.in +4n
-.EX
-struct sched_param {
- int sched_priority; /* Scheduling priority */
-};
-.EE
-.in
-.PP
-As can be seen, only one scheduling parameter is supported.
-For details of the permitted ranges for scheduling priorities
-in each scheduling policy, see
-.BR sched (7).
-.PP
-In order for the parameter setting made by
-.BR pthread_attr_setschedparam ()
-to have effect when calling
-.BR pthread_create (3),
-the caller must use
-.BR pthread_attr_setinheritsched (3)
-to set the inherit-scheduler attribute of the attributes object
-.I attr
-to
-.BR PTHREAD_EXPLICIT_SCHED .
-.SH RETURN VALUE
-On success, these functions return 0;
-on error, they return a nonzero error number.
-.SH ERRORS
-.BR pthread_attr_setschedparam ()
-can fail with the following error:
-.TP
-.B EINVAL
-The priority specified in
-.I param
-does not make sense for the current scheduling policy of
-.IR attr .
-.PP
-POSIX.1 also documents an
-.B ENOTSUP
-error for
-.BR pthread_attr_setschedparam ().
-This value is never returned on Linux
-(but portable and future-proof applications should nevertheless
-handle this error return value).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_attr_setschedparam (),
-.BR pthread_attr_getschedparam ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-glibc 2.0.
-.SH NOTES
-See
-.BR pthread_attr_setschedpolicy (3)
-for a list of the thread scheduling policies supported on Linux.
-.SH EXAMPLES
-See
-.BR pthread_setschedparam (3).
-.SH SEE ALSO
-.ad l
-.nh
-.BR sched_get_priority_min (2),
-.BR pthread_attr_init (3),
-.BR pthread_attr_setinheritsched (3),
-.BR pthread_attr_setschedpolicy (3),
-.BR pthread_create (3),
-.BR pthread_setschedparam (3),
-.BR pthread_setschedprio (3),
-.BR pthreads (7),
-.BR sched (7)
diff --git a/man3/pthread_attr_setschedpolicy.3 b/man3/pthread_attr_setschedpolicy.3
deleted file mode 100644
index f727e7bdb..000000000
--- a/man3/pthread_attr_setschedpolicy.3
+++ /dev/null
@@ -1,115 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_attr_setschedpolicy 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_attr_setschedpolicy, pthread_attr_getschedpolicy \- set/get
-scheduling policy attribute in thread attributes object
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_attr_setschedpolicy(pthread_attr_t *" attr ", int " policy );
-.BI "int pthread_attr_getschedpolicy(const pthread_attr_t *restrict " attr ,
-.BI " int *restrict " policy );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_attr_setschedpolicy ()
-function sets the scheduling policy attribute of the
-thread attributes object referred to by
-.I attr
-to the value specified in
-.IR policy .
-This attribute determines the scheduling policy of
-a thread created using the thread attributes object
-.IR attr .
-.PP
-The supported values for
-.I policy
-are
-.BR SCHED_FIFO ,
-.BR SCHED_RR ,
-and
-.BR SCHED_OTHER ,
-with the semantics described in
-.BR sched (7).
-.\" FIXME . pthread_setschedparam() places no restriction on the policy,
-.\" but pthread_attr_setschedpolicy() restricts policy to RR/FIFO/OTHER
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=7013
-.PP
-The
-.BR pthread_attr_getschedpolicy ()
-returns the scheduling policy attribute of the thread attributes object
-.I attr
-in the buffer pointed to by
-.IR policy .
-.PP
-In order for the policy setting made by
-.BR pthread_attr_setschedpolicy ()
-to have effect when calling
-.BR pthread_create (3),
-the caller must use
-.BR pthread_attr_setinheritsched (3)
-to set the inherit-scheduler attribute of the attributes object
-.I attr
-to
-.BR PTHREAD_EXPLICIT_SCHED .
-.SH RETURN VALUE
-On success, these functions return 0;
-on error, they return a nonzero error number.
-.SH ERRORS
-.BR pthread_attr_setschedpolicy ()
-can fail with the following error:
-.TP
-.B EINVAL
-Invalid value in
-.IR policy .
-.PP
-POSIX.1 also documents an optional
-.B ENOTSUP
-error ("attempt was made to set the attribute to an unsupported value") for
-.BR pthread_attr_setschedpolicy ().
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_attr_setschedpolicy (),
-.BR pthread_attr_getschedpolicy ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.0.
-POSIX.1-2001.
-.SH EXAMPLES
-See
-.BR pthread_setschedparam (3).
-.SH SEE ALSO
-.ad l
-.nh
-.BR pthread_attr_init (3),
-.BR pthread_attr_setinheritsched (3),
-.BR pthread_attr_setschedparam (3),
-.BR pthread_create (3),
-.BR pthread_setschedparam (3),
-.BR pthread_setschedprio (3),
-.BR pthreads (7),
-.BR sched (7)
diff --git a/man3/pthread_attr_setscope.3 b/man3/pthread_attr_setscope.3
deleted file mode 100644
index 038661567..000000000
--- a/man3/pthread_attr_setscope.3
+++ /dev/null
@@ -1,142 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_attr_setscope 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_attr_setscope, pthread_attr_getscope \- set/get contention scope
-attribute in thread attributes object
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_attr_setscope(pthread_attr_t *" attr ", int " scope );
-.BI "int pthread_attr_getscope(const pthread_attr_t *restrict " attr ,
-.BI " int *restrict " scope );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_attr_setscope ()
-function sets the contention scope attribute of the
-thread attributes object referred to by
-.I attr
-to the value specified in
-.IR scope .
-The contention scope attribute defines the set of threads
-against which a thread competes for resources such as the CPU.
-POSIX.1 specifies two possible values for
-.IR scope :
-.TP
-.B PTHREAD_SCOPE_SYSTEM
-The thread competes for resources with all other threads
-in all processes on the system that are in the same scheduling
-allocation domain (a group of one or more processors).
-.B PTHREAD_SCOPE_SYSTEM
-threads are scheduled relative to one another
-according to their scheduling policy and priority.
-.TP
-.B PTHREAD_SCOPE_PROCESS
-The thread competes for resources with all other threads
-in the same process that were also created with the
-.B PTHREAD_SCOPE_PROCESS
-contention scope.
-.B PTHREAD_SCOPE_PROCESS
-threads are scheduled relative to other threads in the process
-according to their scheduling policy and priority.
-POSIX.1 leaves it unspecified how these threads contend
-with other threads in other process on the system or
-with other threads in the same process that
-were created with the
-.B PTHREAD_SCOPE_SYSTEM
-contention scope.
-.PP
-POSIX.1 requires that an implementation support at least one of these
-contention scopes.
-Linux supports
-.BR PTHREAD_SCOPE_SYSTEM ,
-but not
-.BR PTHREAD_SCOPE_PROCESS .
-.PP
-On systems that support multiple contention scopes, then,
-in order for the parameter setting made by
-.BR pthread_attr_setscope ()
-to have effect when calling
-.BR pthread_create (3),
-the caller must use
-.BR pthread_attr_setinheritsched (3)
-to set the inherit-scheduler attribute of the attributes object
-.I attr
-to
-.BR PTHREAD_EXPLICIT_SCHED .
-.PP
-The
-.BR pthread_attr_getscope ()
-function returns the contention scope attribute of the
-thread attributes object referred to by
-.I attr
-in the buffer pointed to by
-.IR scope .
-.SH RETURN VALUE
-On success, these functions return 0;
-on error, they return a nonzero error number.
-.SH ERRORS
-.BR pthread_attr_setscope ()
-can fail with the following errors:
-.TP
-.B EINVAL
-An invalid value was specified in
-.IR scope .
-.TP
-.B ENOTSUP
-.I scope
-specified the value
-.BR PTHREAD_SCOPE_PROCESS ,
-which is not supported on Linux.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_attr_setscope (),
-.BR pthread_attr_getscope ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-The
-.B PTHREAD_SCOPE_SYSTEM
-contention scope typically indicates that a user-space thread is
-bound directly to a single kernel-scheduling entity.
-This is the case on Linux for the obsolete LinuxThreads implementation
-and the modern NPTL implementation,
-which are both 1:1 threading implementations.
-.PP
-POSIX.1 specifies that the default contention scope is
-implementation-defined.
-.SH SEE ALSO
-.ad l
-.nh
-.BR pthread_attr_init (3),
-.BR pthread_attr_setaffinity_np (3),
-.BR pthread_attr_setinheritsched (3),
-.BR pthread_attr_setschedparam (3),
-.BR pthread_attr_setschedpolicy (3),
-.BR pthread_create (3),
-.BR pthreads (7)
diff --git a/man3/pthread_attr_setsigmask_np.3 b/man3/pthread_attr_setsigmask_np.3
deleted file mode 100644
index c005cb5ac..000000000
--- a/man3/pthread_attr_setsigmask_np.3
+++ /dev/null
@@ -1,133 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_attr_setsigmask_np 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_attr_setsigmask_np, pthread_attr_getsigmask_np \- set/get
-signal mask attribute in thread attributes object
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <pthread.h>
-.PP
-.BI "int pthread_attr_setsigmask_np(pthread_attr_t *" attr ,
-.BI " const sigset_t *" sigmask );
-.BI "int pthread_attr_getsigmask_np(const pthread_attr_t *" attr ,
-.BI " sigset_t *" sigmask );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_attr_setsigmask_np ()
-function sets the signal mask attribute of the
-thread attributes object referred to by
-.I attr
-to the value specified in
-.IR *sigmask .
-If
-.I sigmask
-is specified as NULL, then any existing signal mask attribute in
-.I attr
-is unset.
-.PP
-The
-.BR pthread_attr_getsigmask_np ()
-function returns the signal mask attribute of the thread attributes object
-referred to by
-.I attr
-in the buffer pointed to by
-.IR sigmask .
-If the signal mask attribute is currently unset,
-then this function returns the special value
-.B PTHREAD_ATTR_NO_SIGMASK_NP
-as its result.
-.SH RETURN VALUE
-The
-.BR pthread_attr_setsigmask_np ()
-function returns 0 on success, or a nonzero error number on failure.
-.PP
-the
-.BR pthread_attr_getsigmask_np ()
-function returns either 0 or
-.BR PTHREAD_ATTR_NO_SIGMASK_NP .
-When 0 is returned, the signal mask attribute is returned via
-.IR sigmask .
-A return value of
-.B PTHREAD_ATTR_NO_SIGMASK_NP
-indicates that the signal mask attribute is not set in
-.IR attr .
-.PP
-On error, these functions return a positive error number.
-.SH ERRORS
-.TP
-.B ENOMEM
-.RB ( pthread_attr_setsigmask_np ())
-Could not allocate memory.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_attr_setsigmask_np (),
-.BR pthread_attr_getsigmask_np ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU;
-hence the suffix "_np" (nonportable) in the names.
-.SH HISTORY
-glibc 2.32.
-.SH NOTES
-The signal mask attribute determines the signal mask that will be assigned to
-a thread created using the thread attributes object
-.IR attr .
-If this attribute is not set, then a thread created using
-.I attr
-will inherit a copy of the creating thread's signal mask.
-.PP
-For more details on signal masks, see
-.BR sigprocmask (2).
-For a description of a set of macros
-that can be used to manipulate and inspect signal sets, see
-.BR sigsetops (3).
-.PP
-In the absence of
-.BR pthread_attr_setsigmask_np ()
-it is possible to create a thread with a desired signal mask as follows:
-.IP \[bu] 3
-The creating thread uses
-.BR pthread_sigmask (3)
-to save its current signal mask and set its mask to block all signals.
-.IP \[bu]
-The new thread is then created using
-.BR pthread_create ();
-the new thread will inherit the creating thread's signal mask.
-.IP \[bu]
-The new thread sets its signal mask to the desired value using
-.BR pthread_sigmask (3).
-.IP \[bu]
-The creating thread restores its signal mask to the original value.
-.PP
-Following the above steps,
-there is no possibility for the new thread to receive a signal
-before it has adjusted its signal mask to the desired value.
-.SH SEE ALSO
-.BR sigprocmask (2),
-.BR pthread_attr_init (3),
-.BR pthread_sigmask (3),
-.BR pthreads (7),
-.BR signal (7)
diff --git a/man3/pthread_attr_setstack.3 b/man3/pthread_attr_setstack.3
deleted file mode 100644
index 0f883c26c..000000000
--- a/man3/pthread_attr_setstack.3
+++ /dev/null
@@ -1,167 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_attr_setstack 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_attr_setstack, pthread_attr_getstack \- set/get stack
-attributes in thread attributes object
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_attr_setstack(pthread_attr_t *" attr ,
-.BI " void " stackaddr [. stacksize ],
-.BI " size_t " stacksize );
-.BI "int pthread_attr_getstack(const pthread_attr_t *restrict " attr ,
-.BI " void **restrict " stackaddr ,
-.BI " size_t *restrict " stacksize );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR pthread_attr_getstack (),
-.BR pthread_attr_setstack ():
-.nf
- _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_attr_setstack ()
-function sets the stack address and stack size attributes of the
-thread attributes object referred to by
-.I attr
-to the values specified in
-.I stackaddr
-and
-.IR stacksize ,
-respectively.
-These attributes specify the location and size of the stack that should
-be used by a thread that is created using the thread attributes object
-.IR attr .
-.PP
-.I stackaddr
-should point to the lowest addressable byte of a buffer of
-.I stacksize
-bytes that was allocated by the caller.
-The pages of the allocated buffer should be both readable and writable.
-.PP
-The
-.BR pthread_attr_getstack ()
-function returns the stack address and stack size attributes of the
-thread attributes object referred to by
-.I attr
-in the buffers pointed to by
-.I stackaddr
-and
-.IR stacksize ,
-respectively.
-.SH RETURN VALUE
-On success, these functions return 0;
-on error, they return a nonzero error number.
-.SH ERRORS
-.BR pthread_attr_setstack ()
-can fail with the following error:
-.TP
-.B EINVAL
-.I stacksize
-is less than
-.B PTHREAD_STACK_MIN
-(16384) bytes.
-On some systems, this error may also occur if
-.I stackaddr
-or
-.I stackaddr\~+\~stacksize
-is not suitably aligned.
-.PP
-POSIX.1 also documents an
-.B EACCES
-error if the stack area described by
-.I stackaddr
-and
-.I stacksize
-is not both readable and writable by the caller.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_attr_setstack (),
-.BR pthread_attr_getstack ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.2.
-POSIX.1-2001.
-.SH NOTES
-These functions are provided for applications that must ensure that
-a thread's stack is placed in a particular location.
-For most applications, this is not necessary,
-and the use of these functions should be avoided.
-(Use
-.BR pthread_attr_setstacksize (3)
-if an application simply requires a stack size other than the default.)
-.PP
-When an application employs
-.BR pthread_attr_setstack (),
-it takes over the responsibility of allocating the stack.
-Any guard size value that was set using
-.BR pthread_attr_setguardsize (3)
-is ignored.
-If deemed necessary,
-it is the application's responsibility to allocate a guard area
-(one or more pages protected against reading and writing)
-to handle the possibility of stack overflow.
-.PP
-The address specified in
-.I stackaddr
-should be suitably aligned:
-for full portability, align it on a page boundary
-.RI ( sysconf(_SC_PAGESIZE) ).
-.BR posix_memalign (3)
-may be useful for allocation.
-Probably,
-.I stacksize
-should also be a multiple of the system page size.
-.PP
-If
-.I attr
-is used to create multiple threads, then the caller must change the
-stack address attribute between calls to
-.BR pthread_create (3);
-otherwise, the threads will attempt to use the same memory area
-for their stacks, and chaos will ensue.
-.SH EXAMPLES
-See
-.BR pthread_attr_init (3).
-.SH SEE ALSO
-.ad l
-.nh
-.BR mmap (2),
-.BR mprotect (2),
-.BR posix_memalign (3),
-.BR pthread_attr_init (3),
-.BR pthread_attr_setguardsize (3),
-.BR pthread_attr_setstackaddr (3),
-.BR pthread_attr_setstacksize (3),
-.BR pthread_create (3),
-.BR pthreads (7)
diff --git a/man3/pthread_attr_setstackaddr.3 b/man3/pthread_attr_setstackaddr.3
deleted file mode 100644
index e92e442db..000000000
--- a/man3/pthread_attr_setstackaddr.3
+++ /dev/null
@@ -1,118 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_attr_setstackaddr 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_attr_setstackaddr, pthread_attr_getstackaddr \-
-set/get stack address attribute in thread attributes object
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.B [[deprecated]]
-.BI "int pthread_attr_setstackaddr(pthread_attr_t *" attr \
-", void *" stackaddr );
-.B [[deprecated]]
-.BI "int pthread_attr_getstackaddr(const pthread_attr_t *restrict " attr ,
-.BI " void **restrict " stackaddr );
-.fi
-.SH DESCRIPTION
-These functions are obsolete:
-.B do not use them.
-Use
-.BR pthread_attr_setstack (3)
-and
-.BR pthread_attr_getstack (3)
-instead.
-.PP
-The
-.BR pthread_attr_setstackaddr ()
-function sets the stack address attribute of the
-thread attributes object referred to by
-.I attr
-to the value specified in
-.IR stackaddr .
-This attribute specifies the location of the stack that should
-be used by a thread that is created using the thread attributes object
-.IR attr .
-.PP
-.I stackaddr
-should point to a buffer of at least
-.B PTHREAD_STACK_MIN
-bytes that was allocated by the caller.
-The pages of the allocated buffer should be both readable and writable.
-.PP
-The
-.BR pthread_attr_getstackaddr ()
-function returns the stack address attribute of the
-thread attributes object referred to by
-.I attr
-in the buffer pointed to by
-.IR stackaddr .
-.SH RETURN VALUE
-On success, these functions return 0;
-on error, they return a nonzero error number.
-.SH ERRORS
-No errors are defined
-(but applications should nevertheless
-handle a possible error return).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_attr_setstackaddr (),
-.BR pthread_attr_getstackaddr ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-glibc 2.1.
-Marked obsolete in POSIX.1-2001.
-Removed in POSIX.1-2008.
-.SH NOTES
-.I Do not use these functions!
-They cannot be portably used, since they provide no way of specifying
-the direction of growth or the range of the stack.
-For example, on architectures with a stack that grows downward,
-.I stackaddr
-specifies the next address past the
-.I highest
-address of the allocated stack area.
-However, on architectures with a stack that grows upward,
-.I stackaddr
-specifies the
-.I lowest
-address in the allocated stack area.
-By contrast, the
-.I stackaddr
-used by
-.BR pthread_attr_setstack (3)
-and
-.BR pthread_attr_getstack (3),
-is always a pointer to the lowest address in the allocated stack area
-(and the
-.I stacksize
-argument specifies the range of the stack).
-.SH SEE ALSO
-.BR pthread_attr_init (3),
-.BR pthread_attr_setstack (3),
-.BR pthread_attr_setstacksize (3),
-.BR pthread_create (3),
-.BR pthreads (7)
diff --git a/man3/pthread_attr_setstacksize.3 b/man3/pthread_attr_setstacksize.3
deleted file mode 100644
index 7b9e4a2d1..000000000
--- a/man3/pthread_attr_setstacksize.3
+++ /dev/null
@@ -1,117 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_attr_setstacksize 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_attr_setstacksize, pthread_attr_getstacksize \- set/get stack size
-attribute in thread attributes object
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_attr_setstacksize(pthread_attr_t *" attr \
-", size_t " stacksize );
-.BI "int pthread_attr_getstacksize(const pthread_attr_t *restrict " attr ,
-.BI " size_t *restrict " stacksize );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_attr_setstacksize ()
-function sets the stack size attribute of the
-thread attributes object referred to by
-.I attr
-to the value specified in
-.IR stacksize .
-.PP
-The stack size attribute determines the minimum size (in bytes) that
-will be allocated for threads created using the thread attributes object
-.IR attr .
-.PP
-The
-.BR pthread_attr_getstacksize ()
-function returns the stack size attribute of the
-thread attributes object referred to by
-.I attr
-in the buffer pointed to by
-.IR stacksize .
-.SH RETURN VALUE
-On success, these functions return 0;
-on error, they return a nonzero error number.
-.SH ERRORS
-.BR pthread_attr_setstacksize ()
-can fail with the following error:
-.TP
-.B EINVAL
-The stack size is less than
-.B PTHREAD_STACK_MIN
-(16384) bytes.
-.PP
-On some systems,
-.\" e.g., MacOS
-.BR pthread_attr_setstacksize ()
-can fail with the error
-.B EINVAL
-if
-.I stacksize
-is not a multiple of the system page size.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_attr_setstacksize (),
-.BR pthread_attr_getstacksize ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-These functions are provided since glibc 2.1.
-.SH STANDARDS
-POSIX.1-2001, POSIX.1-2008.
-.SH NOTES
-For details on the default stack size of new threads, see
-.BR pthread_create (3).
-.PP
-A thread's stack size is fixed at the time of thread creation.
-Only the main thread can dynamically grow its stack.
-.PP
-The
-.BR pthread_attr_setstack (3)
-function allows an application to set both the size and location
-of a caller-allocated stack that is to be used by a thread.
-.SH BUGS
-As at glibc 2.8,
-if the specified
-.I stacksize
-is not a multiple of
-.B STACK_ALIGN
-(16 bytes on most architectures), it may be rounded
-.IR downward ,
-in violation of POSIX.1, which says that the allocated stack will
-be at least
-.I stacksize
-bytes.
-.SH EXAMPLES
-See
-.BR pthread_create (3).
-.SH SEE ALSO
-.BR getrlimit (2),
-.BR pthread_attr_init (3),
-.BR pthread_attr_setguardsize (3),
-.BR pthread_attr_setstack (3),
-.BR pthread_create (3),
-.BR pthreads (7)
diff --git a/man3/pthread_cancel.3 b/man3/pthread_cancel.3
deleted file mode 100644
index 5ff2ff8f7..000000000
--- a/man3/pthread_cancel.3
+++ /dev/null
@@ -1,240 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_cancel 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_cancel \- send a cancelation request to a thread
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_cancel(pthread_t " thread );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_cancel ()
-function sends a cancelation request to the thread
-.IR thread .
-Whether and when the target thread
-reacts to the cancelation request depends on
-two attributes that are under the control of that thread:
-its cancelability
-.I state
-and
-.IR type .
-.PP
-A thread's cancelability state, determined by
-.BR pthread_setcancelstate (3),
-can be
-.I enabled
-(the default for new threads) or
-.IR disabled .
-If a thread has disabled cancelation,
-then a cancelation request remains queued until the thread
-enables cancelation.
-If a thread has enabled cancelation,
-then its cancelability type determines when cancelation occurs.
-.PP
-A thread's cancelation type, determined by
-.BR pthread_setcanceltype (3),
-may be either
-.I asynchronous
-or
-.I deferred
-(the default for new threads).
-Asynchronous cancelability
-means that the thread can be canceled at any time
-(usually immediately, but the system does not guarantee this).
-Deferred cancelability means that cancelation will be delayed until
-the thread next calls a function that is a
-.IR "cancelation point" .
-A list of functions that are or may be cancelation points is provided in
-.BR pthreads (7).
-.PP
-When a cancelation requested is acted on, the following steps occur for
-.I thread
-(in this order):
-.IP (1) 5
-Cancelation clean-up handlers are popped
-(in the reverse of the order in which they were pushed) and called.
-(See
-.BR pthread_cleanup_push (3).)
-.IP (2)
-Thread-specific data destructors are called,
-in an unspecified order.
-(See
-.BR pthread_key_create (3).)
-.IP (3)
-The thread is terminated.
-(See
-.BR pthread_exit (3).)
-.PP
-The above steps happen asynchronously with respect to the
-.BR pthread_cancel ()
-call;
-the return status of
-.BR pthread_cancel ()
-merely informs the caller whether the cancelation request
-was successfully queued.
-.PP
-After a canceled thread has terminated,
-a join with that thread using
-.BR pthread_join (3)
-obtains
-.B PTHREAD_CANCELED
-as the thread's exit status.
-(Joining with a thread is the only way to know that cancelation
-has completed.)
-.SH RETURN VALUE
-On success,
-.BR pthread_cancel ()
-returns 0;
-on error, it returns a nonzero error number.
-.SH ERRORS
-.TP
-.B ESRCH
-No thread with the ID
-.I thread
-could be found.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_cancel ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-On Linux, cancelation is implemented using signals.
-Under the NPTL threading implementation,
-the first real-time signal (i.e., signal 32) is used for this purpose.
-On LinuxThreads, the second real-time signal is used,
-if real-time signals are available, otherwise
-.B SIGUSR2
-is used.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.0
-POSIX.1-2001.
-.SH EXAMPLES
-The program below creates a thread and then cancels it.
-The main thread joins with the canceled thread to check
-that its exit status was
-.BR PTHREAD_CANCELED .
-The following shell session shows what happens when we run the program:
-.PP
-.in +4n
-.EX
-$ ./a.out
-thread_func(): started; cancelation disabled
-main(): sending cancelation request
-thread_func(): about to enable cancelation
-main(): thread was canceled
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (pthread_cancel.c)
-.EX
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-#define handle_error_en(en, msg) \e
- do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)
-\&
-static void *
-thread_func(void *ignored_argument)
-{
- int s;
-\&
- /* Disable cancelation for a while, so that we don\[aq]t
- immediately react to a cancelation request. */
-\&
- s = pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
- if (s != 0)
- handle_error_en(s, "pthread_setcancelstate");
-\&
- printf("%s(): started; cancelation disabled\en", __func__);
- sleep(5);
- printf("%s(): about to enable cancelation\en", __func__);
-\&
- s = pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
- if (s != 0)
- handle_error_en(s, "pthread_setcancelstate");
-\&
- /* sleep() is a cancelation point. */
-\&
- sleep(1000); /* Should get canceled while we sleep */
-\&
- /* Should never get here. */
-\&
- printf("%s(): not canceled!\en", __func__);
- return NULL;
-}
-\&
-int
-main(void)
-{
- pthread_t thr;
- void *res;
- int s;
-\&
- /* Start a thread and then send it a cancelation request. */
-\&
- s = pthread_create(&thr, NULL, &thread_func, NULL);
- if (s != 0)
- handle_error_en(s, "pthread_create");
-\&
- sleep(2); /* Give thread a chance to get started */
-\&
- printf("%s(): sending cancelation request\en", __func__);
- s = pthread_cancel(thr);
- if (s != 0)
- handle_error_en(s, "pthread_cancel");
-\&
- /* Join with thread to see what its exit status was. */
-\&
- s = pthread_join(thr, &res);
- if (s != 0)
- handle_error_en(s, "pthread_join");
-\&
- if (res == PTHREAD_CANCELED)
- printf("%s(): thread was canceled\en", __func__);
- else
- printf("%s(): thread wasn\[aq]t canceled (shouldn\[aq]t happen!)\en",
- __func__);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.ad l
-.nh
-.BR pthread_cleanup_push (3),
-.BR pthread_create (3),
-.BR pthread_exit (3),
-.BR pthread_join (3),
-.BR pthread_key_create (3),
-.BR pthread_setcancelstate (3),
-.BR pthread_setcanceltype (3),
-.BR pthread_testcancel (3),
-.BR pthreads (7)
diff --git a/man3/pthread_cleanup_pop.3 b/man3/pthread_cleanup_pop.3
deleted file mode 100644
index fb0e68bc9..000000000
--- a/man3/pthread_cleanup_pop.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_cleanup_push.3
diff --git a/man3/pthread_cleanup_pop_restore_np.3 b/man3/pthread_cleanup_pop_restore_np.3
deleted file mode 100644
index c47e20a06..000000000
--- a/man3/pthread_cleanup_pop_restore_np.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_cleanup_push_defer_np.3
diff --git a/man3/pthread_cleanup_push.3 b/man3/pthread_cleanup_push.3
deleted file mode 100644
index 215f01d9f..000000000
--- a/man3/pthread_cleanup_push.3
+++ /dev/null
@@ -1,322 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_cleanup_push 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_cleanup_push, pthread_cleanup_pop \- push and pop
-thread cancelation clean-up handlers
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "void pthread_cleanup_push(void (*" routine ")(void *), void *" arg );
-.BI "void pthread_cleanup_pop(int " execute );
-.fi
-.SH DESCRIPTION
-These functions manipulate the calling thread's stack of
-thread-cancelation clean-up handlers.
-A clean-up handler is a function that is automatically executed
-when a thread is canceled (or in various other circumstances
-described below);
-it might, for example, unlock a mutex so that
-it becomes available to other threads in the process.
-.PP
-The
-.BR pthread_cleanup_push ()
-function pushes
-.I routine
-onto the top of the stack of clean-up handlers.
-When
-.I routine
-is later invoked, it will be given
-.I arg
-as its argument.
-.PP
-The
-.BR pthread_cleanup_pop ()
-function removes the routine at the top of the stack of clean-up handlers,
-and optionally executes it if
-.I execute
-is nonzero.
-.PP
-A cancelation clean-up handler is popped from the stack
-and executed in the following circumstances:
-.IP \[bu] 3
-When a thread is canceled,
-all of the stacked clean-up handlers are popped and executed in
-the reverse of the order in which they were pushed onto the stack.
-.IP \[bu]
-When a thread terminates by calling
-.BR pthread_exit (3),
-all clean-up handlers are executed as described in the preceding point.
-(Clean-up handlers are
-.I not
-called if the thread terminates by
-performing a
-.I return
-from the thread start function.)
-.IP \[bu]
-When a thread calls
-.BR pthread_cleanup_pop ()
-with a nonzero
-.I execute
-argument, the top-most clean-up handler is popped and executed.
-.PP
-POSIX.1 permits
-.BR pthread_cleanup_push ()
-and
-.BR pthread_cleanup_pop ()
-to be implemented as macros that expand to text
-containing \[aq]\fB{\fP\[aq] and \[aq]\fB}\fP\[aq], respectively.
-For this reason, the caller must ensure that calls to these
-functions are paired within the same function,
-and at the same lexical nesting level.
-(In other words, a clean-up handler is established only
-during the execution of a specified section of code.)
-.PP
-Calling
-.BR longjmp (3)
-.RB ( siglongjmp (3))
-produces undefined results if any call has been made to
-.BR pthread_cleanup_push ()
-or
-.BR pthread_cleanup_pop ()
-without the matching call of the pair since the jump buffer
-was filled by
-.BR setjmp (3)
-.RB ( sigsetjmp (3)).
-Likewise, calling
-.BR longjmp (3)
-.RB ( siglongjmp (3))
-from inside a clean-up handler produces undefined results
-unless the jump buffer was also filled by
-.BR setjmp (3)
-.RB ( sigsetjmp (3))
-inside the handler.
-.SH RETURN VALUE
-These functions do not return a value.
-.SH ERRORS
-There are no errors.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_cleanup_push (),
-.BR pthread_cleanup_pop ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-On glibc, the
-.BR pthread_cleanup_push ()
-and
-.BR pthread_cleanup_pop ()
-functions
-.I are
-implemented as macros that expand to text
-containing \[aq]\fB{\fP\[aq] and \[aq]\fB}\fP\[aq], respectively.
-This means that variables declared within the scope of
-paired calls to these functions will be visible within only that scope.
-.PP
-POSIX.1
-.\" The text was actually added in the 2004 TC2
-says that the effect of using
-.IR return ,
-.IR break ,
-.IR continue ,
-or
-.I goto
-to prematurely leave a block bracketed
-.BR pthread_cleanup_push ()
-and
-.BR pthread_cleanup_pop ()
-is undefined.
-Portable applications should avoid doing this.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-glibc 2.0.
-.SH EXAMPLES
-The program below provides a simple example of the use of the functions
-described in this page.
-The program creates a thread that executes a loop bracketed by
-.BR pthread_cleanup_push ()
-and
-.BR pthread_cleanup_pop ().
-This loop increments a global variable,
-.IR cnt ,
-once each second.
-Depending on what command-line arguments are supplied,
-the main thread sends the other thread a cancelation request,
-or sets a global variable that causes the other thread
-to exit its loop and terminate normally (by doing a
-.IR return ).
-.PP
-In the following shell session,
-the main thread sends a cancelation request to the other thread:
-.PP
-.in +4n
-.EX
-$ \fB./a.out\fP
-New thread started
-cnt = 0
-cnt = 1
-Canceling thread
-Called clean\-up handler
-Thread was canceled; cnt = 0
-.EE
-.in
-.PP
-From the above, we see that the thread was canceled,
-and that the cancelation clean-up handler was called
-and it reset the value of the global variable
-.I cnt
-to 0.
-.PP
-In the next run, the main program sets a
-global variable that causes other thread to terminate normally:
-.PP
-.in +4n
-.EX
-$ \fB./a.out x\fP
-New thread started
-cnt = 0
-cnt = 1
-Thread terminated normally; cnt = 2
-.EE
-.in
-.PP
-From the above, we see that the clean-up handler was not executed (because
-.I cleanup_pop_arg
-was 0), and therefore the value of
-.I cnt
-was not reset.
-.PP
-In the next run, the main program sets a global variable that
-causes the other thread to terminate normally,
-and supplies a nonzero value for
-.IR cleanup_pop_arg :
-.PP
-.in +4n
-.EX
-$ \fB./a.out x 1\fP
-New thread started
-cnt = 0
-cnt = 1
-Called clean\-up handler
-Thread terminated normally; cnt = 0
-.EE
-.in
-.PP
-In the above, we see that although the thread was not canceled,
-the clean-up handler was executed, because the argument given to
-.BR pthread_cleanup_pop ()
-was nonzero.
-.SS Program source
-\&
-.\" SRC BEGIN (pthread_cleanup_push.c)
-.EX
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <unistd.h>
-\&
-#define handle_error_en(en, msg) \e
- do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)
-\&
-static int done = 0;
-static int cleanup_pop_arg = 0;
-static int cnt = 0;
-\&
-static void
-cleanup_handler(void *arg)
-{
- printf("Called clean\-up handler\en");
- cnt = 0;
-}
-\&
-static void *
-thread_start(void *arg)
-{
- time_t curr;
-\&
- printf("New thread started\en");
-\&
- pthread_cleanup_push(cleanup_handler, NULL);
-\&
- curr = time(NULL);
-\&
- while (!done) {
- pthread_testcancel(); /* A cancelation point */
- if (curr < time(NULL)) {
- curr = time(NULL);
- printf("cnt = %d\en", cnt); /* A cancelation point */
- cnt++;
- }
- }
-\&
- pthread_cleanup_pop(cleanup_pop_arg);
- return NULL;
-}
-\&
-int
-main(int argc, char *argv[])
-{
- pthread_t thr;
- int s;
- void *res;
-\&
- s = pthread_create(&thr, NULL, thread_start, NULL);
- if (s != 0)
- handle_error_en(s, "pthread_create");
-\&
- sleep(2); /* Allow new thread to run a while */
-\&
- if (argc > 1) {
- if (argc > 2)
- cleanup_pop_arg = atoi(argv[2]);
- done = 1;
-\&
- } else {
- printf("Canceling thread\en");
- s = pthread_cancel(thr);
- if (s != 0)
- handle_error_en(s, "pthread_cancel");
- }
-\&
- s = pthread_join(thr, &res);
- if (s != 0)
- handle_error_en(s, "pthread_join");
-\&
- if (res == PTHREAD_CANCELED)
- printf("Thread was canceled; cnt = %d\en", cnt);
- else
- printf("Thread terminated normally; cnt = %d\en", cnt);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR pthread_cancel (3),
-.BR pthread_cleanup_push_defer_np (3),
-.BR pthread_setcancelstate (3),
-.BR pthread_testcancel (3),
-.BR pthreads (7)
diff --git a/man3/pthread_cleanup_push_defer_np.3 b/man3/pthread_cleanup_push_defer_np.3
deleted file mode 100644
index b60ea81c2..000000000
--- a/man3/pthread_cleanup_push_defer_np.3
+++ /dev/null
@@ -1,100 +0,0 @@
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_cleanup_push_defer_np 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_cleanup_push_defer_np, pthread_cleanup_pop_restore_np \- push and pop
-thread cancelation clean-up handlers while saving cancelability type
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "void pthread_cleanup_push_defer_np(void (*" routine ")(void *), void *" arg );
-.BI "void pthread_cleanup_pop_restore_np(int " execute );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR pthread_cleanup_push_defer_np (),
-.BR pthread_cleanup_pop_defer_np ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-These functions are the same as
-.BR pthread_cleanup_push (3)
-and
-.BR pthread_cleanup_pop (3),
-except for the differences noted on this page.
-.PP
-Like
-.BR pthread_cleanup_push (3),
-.BR pthread_cleanup_push_defer_np ()
-pushes
-.I routine
-onto the thread's stack of cancelation clean-up handlers.
-In addition, it also saves the thread's current cancelability type,
-and sets the cancelability type to "deferred" (see
-.BR pthread_setcanceltype (3));
-this ensures that cancelation clean-up will occur
-even if the thread's cancelability type was "asynchronous"
-before the call.
-.PP
-Like
-.BR pthread_cleanup_pop (3),
-.BR pthread_cleanup_pop_restore_np ()
-pops the top-most clean-up handler from the thread's
-stack of cancelation clean-up handlers.
-In addition, it restores the thread's cancelability
-type to its value at the time of the matching
-.BR pthread_cleanup_push_defer_np ().
-.PP
-The caller must ensure that calls to these
-functions are paired within the same function,
-and at the same lexical nesting level.
-Other restrictions apply, as described in
-.BR pthread_cleanup_push (3).
-.PP
-This sequence of calls:
-.PP
-.in +4n
-.EX
-pthread_cleanup_push_defer_np(routine, arg);
-pthread_cleanup_pop_restore_np(execute);
-.EE
-.in
-.PP
-is equivalent to (but shorter and more efficient than):
-.PP
-.\" As far as I can see, LinuxThreads reverses the two substeps
-.\" in the push and pop below.
-.in +4n
-.EX
-int oldtype;
-\&
-pthread_cleanup_push(routine, arg);
-pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype);
-\&...
-pthread_setcanceltype(oldtype, NULL);
-pthread_cleanup_pop(execute);
-.EE
-.in
-.SH STANDARDS
-GNU;
-hence the suffix "_np" (nonportable) in the names.
-.SH HISTORY
-glibc 2.0
-.SH SEE ALSO
-.BR pthread_cancel (3),
-.BR pthread_cleanup_push (3),
-.BR pthread_setcancelstate (3),
-.BR pthread_testcancel (3),
-.BR pthreads (7)
diff --git a/man3/pthread_create.3 b/man3/pthread_create.3
deleted file mode 100644
index 033acf01e..000000000
--- a/man3/pthread_create.3
+++ /dev/null
@@ -1,412 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_create 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_create \- create a new thread
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_create(pthread_t *restrict " thread ,
-.BI " const pthread_attr_t *restrict " attr ,
-.BI " void *(*" start_routine ")(void *),"
-.BI " void *restrict " arg );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_create ()
-function starts a new thread in the calling process.
-The new thread starts execution by invoking
-.IR start_routine ();
-.I arg
-is passed as the sole argument of
-.IR start_routine ().
-.PP
-The new thread terminates in one of the following ways:
-.IP \[bu] 3
-It calls
-.BR pthread_exit (3),
-specifying an exit status value that is available to another thread
-in the same process that calls
-.BR pthread_join (3).
-.IP \[bu]
-It returns from
-.IR start_routine ().
-This is equivalent to calling
-.BR pthread_exit (3)
-with the value supplied in the
-.I return
-statement.
-.IP \[bu]
-It is canceled (see
-.BR pthread_cancel (3)).
-.IP \[bu]
-Any of the threads in the process calls
-.BR exit (3),
-or the main thread performs a return from
-.IR main ().
-This causes the termination of all threads in the process.
-.PP
-The
-.I attr
-argument points to a
-.I pthread_attr_t
-structure whose contents are used at thread creation time to
-determine attributes for the new thread;
-this structure is initialized using
-.BR pthread_attr_init (3)
-and related functions.
-If
-.I attr
-is NULL,
-then the thread is created with default attributes.
-.PP
-Before returning, a successful call to
-.BR pthread_create ()
-stores the ID of the new thread in the buffer pointed to by
-.IR thread ;
-this identifier is used to refer to the thread
-in subsequent calls to other pthreads functions.
-.PP
-The new thread inherits a copy of the creating thread's signal mask
-.RB ( pthread_sigmask (3)).
-The set of pending signals for the new thread is empty
-.RB ( sigpending (2)).
-The new thread does not inherit the creating thread's
-alternate signal stack
-.RB ( sigaltstack (2)).
-.PP
-The new thread inherits the calling thread's floating-point environment
-.RB ( fenv (3)).
-.PP
-The initial value of the new thread's CPU-time clock is 0
-(see
-.BR pthread_getcpuclockid (3)).
-.\" CLOCK_THREAD_CPUTIME_ID in clock_gettime(2)
-.SS Linux-specific details
-The new thread inherits copies of the calling thread's capability sets
-(see
-.BR capabilities (7))
-and CPU affinity mask (see
-.BR sched_setaffinity (2)).
-.SH RETURN VALUE
-On success,
-.BR pthread_create ()
-returns 0;
-on error, it returns an error number, and the contents of
-.I *thread
-are undefined.
-.SH ERRORS
-.TP
-.B EAGAIN
-Insufficient resources to create another thread.
-.TP
-.B EAGAIN
-.\" NOTE! The following should match the description in fork(2)
-A system-imposed limit on the number of threads was encountered.
-There are a number of limits that may trigger this error: the
-.B RLIMIT_NPROC
-soft resource limit (set via
-.BR setrlimit (2)),
-which limits the number of processes and threads for a real user ID,
-was reached;
-the kernel's system-wide limit on the number of processes and threads,
-.IR /proc/sys/kernel/threads\-max ,
-was reached (see
-.BR proc (5));
-or the maximum number of PIDs,
-.IR /proc/sys/kernel/pid_max ,
-was reached (see
-.BR proc (5)).
-.TP
-.B EINVAL
-Invalid settings in
-.IR attr .
-.TP
-.\" FIXME . Test the following
-.B EPERM
-No permission to set the scheduling policy and parameters specified in
-.IR attr .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_create ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-See
-.BR pthread_self (3)
-for further information on the thread ID returned in
-.I *thread
-by
-.BR pthread_create ().
-Unless real-time scheduling policies are being employed,
-after a call to
-.BR pthread_create (),
-it is indeterminate which thread\[em]the caller or the new thread\[em]will
-next execute.
-.PP
-A thread may either be
-.I joinable
-or
-.IR detached .
-If a thread is joinable, then another thread can call
-.BR pthread_join (3)
-to wait for the thread to terminate and fetch its exit status.
-Only when a terminated joinable thread has been joined are
-the last of its resources released back to the system.
-When a detached thread terminates,
-its resources are automatically released back to the system:
-it is not possible to join with the thread in order to obtain
-its exit status.
-Making a thread detached is useful for some types of daemon threads
-whose exit status the application does not need to care about.
-By default, a new thread is created in a joinable state, unless
-.I attr
-was set to create the thread in a detached state (using
-.BR pthread_attr_setdetachstate (3)).
-.PP
-Under the NPTL threading implementation, if the
-.B RLIMIT_STACK
-soft resource limit
-.I at the time the program started
-has any value other than "unlimited",
-then it determines the default stack size of new threads.
-Using
-.BR pthread_attr_setstacksize (3),
-the stack size attribute can be explicitly set in the
-.I attr
-argument used to create a thread,
-in order to obtain a stack size other than the default.
-If the
-.B RLIMIT_STACK
-resource limit is set to "unlimited",
-a per-architecture value is used for the stack size.
-Here is the value for a few architectures:
-.RS
-.TS
-allbox;
-lb lb
-l r.
-Architecture Default stack size
-i386 2 MB
-IA-64 32 MB
-PowerPC 4 MB
-S/390 2 MB
-Sparc-32 2 MB
-Sparc-64 4 MB
-x86_64 2 MB
-.TE
-.RE
-.SH BUGS
-In the obsolete LinuxThreads implementation,
-each of the threads in a process has a different process ID.
-This is in violation of the POSIX threads specification,
-and is the source of many other nonconformances to the standard; see
-.BR pthreads (7).
-.SH EXAMPLES
-The program below demonstrates the use of
-.BR pthread_create (),
-as well as a number of other functions in the pthreads API.
-.PP
-In the following run,
-on a system providing the NPTL threading implementation,
-the stack size defaults to the value given by the
-"stack size" resource limit:
-.PP
-.in +4n
-.EX
-.RB "$" " ulimit \-s"
-8192 # The stack size limit is 8 MB (0x800000 bytes)
-.RB "$" " ./a.out hola salut servus"
-Thread 1: top of stack near 0xb7dd03b8; argv_string=hola
-Thread 2: top of stack near 0xb75cf3b8; argv_string=salut
-Thread 3: top of stack near 0xb6dce3b8; argv_string=servus
-Joined with thread 1; returned value was HOLA
-Joined with thread 2; returned value was SALUT
-Joined with thread 3; returned value was SERVUS
-.EE
-.in
-.PP
-In the next run, the program explicitly sets a stack size of 1\ MB (using
-.BR pthread_attr_setstacksize (3))
-for the created threads:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out \-s 0x100000 hola salut servus"
-Thread 1: top of stack near 0xb7d723b8; argv_string=hola
-Thread 2: top of stack near 0xb7c713b8; argv_string=salut
-Thread 3: top of stack near 0xb7b703b8; argv_string=servus
-Joined with thread 1; returned value was HOLA
-Joined with thread 2; returned value was SALUT
-Joined with thread 3; returned value was SERVUS
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (pthread_create.c)
-.EX
-#include <ctype.h>
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-\&
-#define handle_error_en(en, msg) \e
- do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)
-\&
-#define handle_error(msg) \e
- do { perror(msg); exit(EXIT_FAILURE); } while (0)
-\&
-struct thread_info { /* Used as argument to thread_start() */
- pthread_t thread_id; /* ID returned by pthread_create() */
- int thread_num; /* Application\-defined thread # */
- char *argv_string; /* From command\-line argument */
-};
-\&
-/* Thread start function: display address near top of our stack,
- and return upper\-cased copy of argv_string. */
-\&
-static void *
-thread_start(void *arg)
-{
- struct thread_info *tinfo = arg;
- char *uargv;
-\&
- printf("Thread %d: top of stack near %p; argv_string=%s\en",
- tinfo\->thread_num, (void *) &tinfo, tinfo\->argv_string);
-\&
- uargv = strdup(tinfo\->argv_string);
- if (uargv == NULL)
- handle_error("strdup");
-\&
- for (char *p = uargv; *p != \[aq]\e0\[aq]; p++)
- *p = toupper(*p);
-\&
- return uargv;
-}
-\&
-int
-main(int argc, char *argv[])
-{
- int s, opt;
- void *res;
- size_t num_threads;
- ssize_t stack_size;
- pthread_attr_t attr;
- struct thread_info *tinfo;
-\&
- /* The "\-s" option specifies a stack size for our threads. */
-\&
- stack_size = \-1;
- while ((opt = getopt(argc, argv, "s:")) != \-1) {
- switch (opt) {
- case \[aq]s\[aq]:
- stack_size = strtoul(optarg, NULL, 0);
- break;
-\&
- default:
- fprintf(stderr, "Usage: %s [\-s stack\-size] arg...\en",
- argv[0]);
- exit(EXIT_FAILURE);
- }
- }
-\&
- num_threads = argc \- optind;
-\&
- /* Initialize thread creation attributes. */
-\&
- s = pthread_attr_init(&attr);
- if (s != 0)
- handle_error_en(s, "pthread_attr_init");
-\&
- if (stack_size > 0) {
- s = pthread_attr_setstacksize(&attr, stack_size);
- if (s != 0)
- handle_error_en(s, "pthread_attr_setstacksize");
- }
-\&
- /* Allocate memory for pthread_create() arguments. */
-\&
- tinfo = calloc(num_threads, sizeof(*tinfo));
- if (tinfo == NULL)
- handle_error("calloc");
-\&
- /* Create one thread for each command\-line argument. */
-\&
- for (size_t tnum = 0; tnum < num_threads; tnum++) {
- tinfo[tnum].thread_num = tnum + 1;
- tinfo[tnum].argv_string = argv[optind + tnum];
-\&
- /* The pthread_create() call stores the thread ID into
- corresponding element of tinfo[]. */
-\&
- s = pthread_create(&tinfo[tnum].thread_id, &attr,
- &thread_start, &tinfo[tnum]);
- if (s != 0)
- handle_error_en(s, "pthread_create");
- }
-\&
- /* Destroy the thread attributes object, since it is no
- longer needed. */
-\&
- s = pthread_attr_destroy(&attr);
- if (s != 0)
- handle_error_en(s, "pthread_attr_destroy");
-\&
- /* Now join with each thread, and display its returned value. */
-\&
- for (size_t tnum = 0; tnum < num_threads; tnum++) {
- s = pthread_join(tinfo[tnum].thread_id, &res);
- if (s != 0)
- handle_error_en(s, "pthread_join");
-\&
- printf("Joined with thread %d; returned value was %s\en",
- tinfo[tnum].thread_num, (char *) res);
- free(res); /* Free memory allocated by thread */
- }
-\&
- free(tinfo);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.ad l
-.nh
-.BR getrlimit (2),
-.BR pthread_attr_init (3),
-.BR pthread_cancel (3),
-.BR pthread_detach (3),
-.BR pthread_equal (3),
-.BR pthread_exit (3),
-.BR pthread_getattr_np (3),
-.BR pthread_join (3),
-.BR pthread_self (3),
-.BR pthread_setattr_default_np (3),
-.BR pthreads (7)
diff --git a/man3/pthread_detach.3 b/man3/pthread_detach.3
deleted file mode 100644
index 946ae3140..000000000
--- a/man3/pthread_detach.3
+++ /dev/null
@@ -1,108 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_detach 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_detach \- detach a thread
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_detach(pthread_t " thread );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_detach ()
-function marks the thread identified by
-.I thread
-as detached.
-When a detached thread terminates,
-its resources are automatically released back to the system without
-the need for another thread to join with the terminated thread.
-.PP
-Attempting to detach an already detached thread results
-in unspecified behavior.
-.SH RETURN VALUE
-On success,
-.BR pthread_detach ()
-returns 0;
-on error, it returns an error number.
-.SH ERRORS
-.TP
-.B EINVAL
-.I thread
-is not a joinable thread.
-.TP
-.B ESRCH
-No thread with the ID
-.I thread
-could be found.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_detach ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-Once a thread has been detached, it can't be joined with
-.BR pthread_join (3)
-or be made joinable again.
-.PP
-A new thread can be created in a detached state using
-.BR pthread_attr_setdetachstate (3)
-to set the detached attribute of the
-.I attr
-argument of
-.BR pthread_create (3).
-.PP
-The detached attribute merely determines the behavior of the system
-when the thread terminates;
-it does not prevent the thread from being terminated
-if the process terminates using
-.BR exit (3)
-(or equivalently, if the main thread returns).
-.PP
-Either
-.BR pthread_join (3)
-or
-.BR pthread_detach ()
-should be called for each thread that an application creates,
-so that system resources for the thread can be released.
-(But note that the resources of any threads for which one of these
-actions has not been done will be freed when the process terminates.)
-.SH EXAMPLES
-The following statement detaches the calling thread:
-.PP
-.in +4n
-.EX
-pthread_detach(pthread_self());
-.EE
-.in
-.SH SEE ALSO
-.BR pthread_attr_setdetachstate (3),
-.BR pthread_cancel (3),
-.BR pthread_create (3),
-.BR pthread_exit (3),
-.BR pthread_join (3),
-.BR pthreads (7)
diff --git a/man3/pthread_equal.3 b/man3/pthread_equal.3
deleted file mode 100644
index 8777e682b..000000000
--- a/man3/pthread_equal.3
+++ /dev/null
@@ -1,60 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_equal 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_equal \- compare thread IDs
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_equal(pthread_t " t1 ", pthread_t " t2 );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_equal ()
-function compares two thread identifiers.
-.SH RETURN VALUE
-If the two thread IDs are equal,
-.BR pthread_equal ()
-returns a nonzero value; otherwise, it returns 0.
-.SH ERRORS
-This function always succeeds.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_equal ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-The
-.BR pthread_equal ()
-function is necessary because thread IDs should be considered opaque:
-there is no portable way for applications to directly compare two
-.I pthread_t
-values.
-.SH SEE ALSO
-.BR pthread_create (3),
-.BR pthread_self (3),
-.BR pthreads (7)
diff --git a/man3/pthread_exit.3 b/man3/pthread_exit.3
deleted file mode 100644
index 65b36cda5..000000000
--- a/man3/pthread_exit.3
+++ /dev/null
@@ -1,109 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_exit 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_exit \- terminate calling thread
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "[[noreturn]] void pthread_exit(void *" retval );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_exit ()
-function terminates the calling thread and returns a value via
-.I retval
-that (if the thread is joinable)
-is available to another thread in the same process that calls
-.BR pthread_join (3).
-.PP
-Any clean-up handlers established by
-.BR pthread_cleanup_push (3)
-that have not yet been popped,
-are popped (in the reverse of the order in which they were pushed)
-and executed.
-If the thread has any thread-specific data, then,
-after the clean-up handlers have been executed,
-the corresponding destructor functions are called,
-in an unspecified order.
-.PP
-When a thread terminates,
-process-shared resources (e.g., mutexes, condition variables,
-semaphores, and file descriptors) are not released,
-and functions registered using
-.BR atexit (3)
-are not called.
-.PP
-After the last thread in a process terminates,
-the process terminates as by calling
-.BR exit (3)
-with an exit status of zero;
-thus, process-shared resources
-are released and functions registered using
-.BR atexit (3)
-are called.
-.SH RETURN VALUE
-This function does not return to the caller.
-.SH ERRORS
-This function always succeeds.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_exit ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-Performing a return from the start function of any thread other
-than the main thread results in an implicit call to
-.BR pthread_exit (),
-using the function's return value as the thread's exit status.
-.PP
-To allow other threads to continue execution,
-the main thread should terminate by calling
-.BR pthread_exit ()
-rather than
-.BR exit (3).
-.PP
-The value pointed to by
-.I retval
-should not be located on the calling thread's stack,
-since the contents of that stack are undefined after the thread terminates.
-.SH BUGS
-Currently,
-.\" Linux 2.6.27
-there are limitations in the kernel implementation logic for
-.BR wait (2)ing
-on a stopped thread group with a dead thread group leader.
-This can manifest in problems such as a locked terminal if a stop signal is
-sent to a foreground process whose thread group leader has already called
-.BR pthread_exit ().
-.\" FIXME . review a later kernel to see if this gets fixed
-.\" http://thread.gmane.org/gmane.linux.kernel/611611
-.\" http://marc.info/?l=linux-kernel&m=122525468300823&w=2
-.SH SEE ALSO
-.BR pthread_create (3),
-.BR pthread_join (3),
-.BR pthreads (7)
diff --git a/man3/pthread_getaffinity_np.3 b/man3/pthread_getaffinity_np.3
deleted file mode 100644
index c4cd6af78..000000000
--- a/man3/pthread_getaffinity_np.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_setaffinity_np.3
diff --git a/man3/pthread_getattr_default_np.3 b/man3/pthread_getattr_default_np.3
deleted file mode 100644
index 1eb434ad1..000000000
--- a/man3/pthread_getattr_default_np.3
+++ /dev/null
@@ -1,195 +0,0 @@
-'\" t
-.\" Copyright (c) 2016 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_getattr_default_np 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_getattr_default_np, pthread_setattr_default_np, \-
-get or set default thread-creation attributes
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <pthread.h>
-.PP
-.BI "int pthread_getattr_default_np(pthread_attr_t *" attr );
-.BI "int pthread_setattr_default_np(const pthread_attr_t *" attr );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_setattr_default_np ()
-function sets the default attributes used for creation of a new
-thread\[em]that is, the attributes that are used when
-.BR pthread_create (3)
-is called with a second argument that is NULL.
-The default attributes are set using the attributes supplied in
-.IR *attr ,
-a previously initialized thread attributes object.
-Note the following details about the supplied attributes object:
-.IP \[bu] 3
-The attribute settings in the object must be valid.
-.IP \[bu]
-The
-.I stack address
-attribute must not be set in the object.
-.IP \[bu]
-Setting the
-.I stack size
-attribute to zero means leave the default stack size unchanged.
-.PP
-The
-.BR pthread_getattr_default_np ()
-function initializes the thread attributes object referred to by
-.I attr
-so that it contains the default attributes used for thread creation.
-.SH ERRORS
-.TP
-.B EINVAL
-.RB ( pthread_setattr_default_np ())
-One of the attribute settings in
-.I attr
-is invalid, or the stack address attribute is set in
-.IR attr .
-.TP
-.B ENOMEM
-.\" Can happen (but unlikely) while trying to allocate memory for cpuset
-.RB ( pthread_setattr_default_np ())
-Insufficient memory.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_getattr_default_np (),
-.BR pthread_setattr_default_np ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU;
-hence the suffix "_np" (nonportable) in their names.
-.SH HISTORY
-glibc 2.18.
-.SH EXAMPLES
-The program below uses
-.BR pthread_getattr_default_np ()
-to fetch the default thread-creation attributes and then displays
-various settings from the returned thread attributes object.
-When running the program, we see the following output:
-.PP
-.in +4n
-.EX
-$ \fB./a.out\fP
-Stack size: 8388608
-Guard size: 4096
-Scheduling policy: SCHED_OTHER
-Scheduling priority: 0
-Detach state: JOINABLE
-Inherit scheduler: INHERIT
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (pthread_getattr_default_np.c)
-.EX
-#define _GNU_SOURCE
-#include <err.h>
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-static void
-display_pthread_attr(pthread_attr_t *attr)
-{
- int s;
- size_t stacksize;
- size_t guardsize;
- int policy;
- struct sched_param schedparam;
- int detachstate;
- int inheritsched;
-\&
- s = pthread_attr_getstacksize(attr, &stacksize);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_getstacksize");
- printf("Stack size: %zd\en", stacksize);
-\&
- s = pthread_attr_getguardsize(attr, &guardsize);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_getguardsize");
- printf("Guard size: %zd\en", guardsize);
-\&
- s = pthread_attr_getschedpolicy(attr, &policy);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_getschedpolicy");
- printf("Scheduling policy: %s\en",
- (policy == SCHED_FIFO) ? "SCHED_FIFO" :
- (policy == SCHED_RR) ? "SCHED_RR" :
- (policy == SCHED_OTHER) ? "SCHED_OTHER" : "[unknown]");
-\&
- s = pthread_attr_getschedparam(attr, &schedparam);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_getschedparam");
- printf("Scheduling priority: %d\en", schedparam.sched_priority);
-\&
- s = pthread_attr_getdetachstate(attr, &detachstate);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_getdetachstate");
- printf("Detach state: %s\en",
- (detachstate == PTHREAD_CREATE_DETACHED) ? "DETACHED" :
- (detachstate == PTHREAD_CREATE_JOINABLE) ? "JOINABLE" :
- "???");
-\&
- s = pthread_attr_getinheritsched(attr, &inheritsched);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_getinheritsched");
- printf("Inherit scheduler: %s\en",
- (inheritsched == PTHREAD_INHERIT_SCHED) ? "INHERIT" :
- (inheritsched == PTHREAD_EXPLICIT_SCHED) ? "EXPLICIT" :
- "???");
-}
-\&
-int
-main(void)
-{
- int s;
- pthread_attr_t attr;
-\&
- s = pthread_getattr_default_np(&attr);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_getattr_default_np");
-\&
- display_pthread_attr(&attr);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.ad l
-.nh
-.BR pthread_attr_getaffinity_np (3),
-.BR pthread_attr_getdetachstate (3),
-.BR pthread_attr_getguardsize (3),
-.BR pthread_attr_getinheritsched (3),
-.BR pthread_attr_getschedparam (3),
-.BR pthread_attr_getschedpolicy (3),
-.BR pthread_attr_getscope (3),
-.BR pthread_attr_getstack (3),
-.BR pthread_attr_getstackaddr (3),
-.BR pthread_attr_getstacksize (3),
-.BR pthread_attr_init (3),
-.BR pthread_create (3),
-.BR pthreads (7)
diff --git a/man3/pthread_getattr_np.3 b/man3/pthread_getattr_np.3
deleted file mode 100644
index ddf846010..000000000
--- a/man3/pthread_getattr_np.3
+++ /dev/null
@@ -1,359 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_getattr_np 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_getattr_np \- get attributes of created thread
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <pthread.h>
-.PP
-.BI "int pthread_getattr_np(pthread_t " thread ", pthread_attr_t *" attr );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_getattr_np ()
-function initializes the thread attributes object referred to by
-.I attr
-so that it contains actual attribute values describing the running thread
-.IR thread .
-.PP
-The returned attribute values may differ from
-the corresponding attribute values passed in the
-.I attr
-object that was used to create the thread using
-.BR pthread_create (3).
-In particular, the following attributes may differ:
-.IP \[bu] 3
-the detach state, since a joinable thread may have detached itself
-after creation;
-.IP \[bu]
-the stack size,
-which the implementation may align to a suitable boundary.
-.IP \[bu]
-and the guard size,
-which the implementation may round upward to a multiple of the page size,
-or ignore (i.e., treat as 0),
-if the application is allocating its own stack.
-.PP
-Furthermore, if the stack address attribute was not set
-in the thread attributes object used to create the thread,
-then the returned thread attributes object will report the actual
-stack address that the implementation selected for the thread.
-.PP
-When the thread attributes object returned by
-.BR pthread_getattr_np ()
-is no longer required, it should be destroyed using
-.BR pthread_attr_destroy (3).
-.SH RETURN VALUE
-On success, this function returns 0;
-on error, it returns a nonzero error number.
-.SH ERRORS
-.TP
-.B ENOMEM
-.\" Can happen (but unlikely) while trying to allocate memory for cpuset
-Insufficient memory.
-.PP
-In addition, if
-.I thread
-refers to the main thread, then
-.BR pthread_getattr_np ()
-can fail because of errors from various underlying calls:
-.BR fopen (3),
-if
-.I /proc/self/maps
-can't be opened;
-and
-.BR getrlimit (2),
-if the
-.B RLIMIT_STACK
-resource limit is not supported.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_getattr_np ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU;
-hence the suffix "_np" (nonportable) in the name.
-.SH HISTORY
-glibc 2.2.3.
-.SH EXAMPLES
-The program below demonstrates the use of
-.BR pthread_getattr_np ().
-The program creates a thread that then uses
-.BR pthread_getattr_np ()
-to retrieve and display its guard size, stack address,
-and stack size attributes.
-Command-line arguments can be used to set these attributes
-to values other than the default when creating the thread.
-The shell sessions below demonstrate the use of the program.
-.PP
-In the first run, on an x86-32 system,
-a thread is created using default attributes:
-.PP
-.in +4n
-.EX
-.RB "$" " ulimit \-s" " # No stack limit ==> default stack size is 2 MB"
-unlimited
-.RB "$" " ./a.out"
-Attributes of created thread:
- Guard size = 4096 bytes
- Stack address = 0x40196000 (EOS = 0x40397000)
- Stack size = 0x201000 (2101248) bytes
-.EE
-.in
-.PP
-In the following run, we see that if a guard size is specified,
-it is rounded up to the next multiple of the system page size
-(4096 bytes on x86-32):
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out \-g 4097"
-Thread attributes object after initializations:
- Guard size = 4097 bytes
- Stack address = (nil)
- Stack size = 0x0 (0) bytes
-\&
-Attributes of created thread:
- Guard size = 8192 bytes
- Stack address = 0x40196000 (EOS = 0x40397000)
- Stack size = 0x201000 (2101248) bytes
-.EE
-.in
-.\".in +4n
-.\".nf
-.\"$ ./a.out \-s 0x8000
-.\"Thread attributes object after initializations:
-.\" Guard size = 4096 bytes
-.\" Stack address = 0xffff8000 (EOS = (nil))
-.\" Stack size = 0x8000 (32768) bytes
-.\"
-.\"Attributes of created thread:
-.\" Guard size = 4096 bytes
-.\" Stack address = 0x4001e000 (EOS = 0x40026000)
-.\" Stack size = 0x8000 (32768) bytes
-.\".fi
-.\".in
-.PP
-In the last run, the program manually allocates a stack for the thread.
-In this case, the guard size attribute is ignored.
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out \-g 4096 \-s 0x8000 \-a"
-Allocated thread stack at 0x804d000
-\&
-Thread attributes object after initializations:
- Guard size = 4096 bytes
- Stack address = 0x804d000 (EOS = 0x8055000)
- Stack size = 0x8000 (32768) bytes
-\&
-Attributes of created thread:
- Guard size = 0 bytes
- Stack address = 0x804d000 (EOS = 0x8055000)
- Stack size = 0x8000 (32768) bytes
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (pthread_getattr_np.c)
-.EX
-#define _GNU_SOURCE /* To get pthread_getattr_np() declaration */
-#include <err.h>
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-static void
-display_stack_related_attributes(pthread_attr_t *attr, char *prefix)
-{
- int s;
- size_t stack_size, guard_size;
- void *stack_addr;
-\&
- s = pthread_attr_getguardsize(attr, &guard_size);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_getguardsize");
- printf("%sGuard size = %zu bytes\en", prefix, guard_size);
-\&
- s = pthread_attr_getstack(attr, &stack_addr, &stack_size);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_getstack");
- printf("%sStack address = %p", prefix, stack_addr);
- if (stack_size > 0)
- printf(" (EOS = %p)", (char *) stack_addr + stack_size);
- printf("\en");
- printf("%sStack size = %#zx (%zu) bytes\en",
- prefix, stack_size, stack_size);
-}
-\&
-static void
-display_thread_attributes(pthread_t thread, char *prefix)
-{
- int s;
- pthread_attr_t attr;
-\&
- s = pthread_getattr_np(thread, &attr);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_getattr_np");
-\&
- display_stack_related_attributes(&attr, prefix);
-\&
- s = pthread_attr_destroy(&attr);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_destroy");
-}
-\&
-static void * /* Start function for thread we create */
-thread_start(void *arg)
-{
- printf("Attributes of created thread:\en");
- display_thread_attributes(pthread_self(), "\et");
-\&
- exit(EXIT_SUCCESS); /* Terminate all threads */
-}
-\&
-static void
-usage(char *pname, char *msg)
-{
- if (msg != NULL)
- fputs(msg, stderr);
- fprintf(stderr, "Usage: %s [\-s stack\-size [\-a]]"
- " [\-g guard\-size]\en", pname);
- fprintf(stderr, "\et\et\-a means program should allocate stack\en");
- exit(EXIT_FAILURE);
-}
-\&
-static pthread_attr_t * /* Get thread attributes from command line */
-get_thread_attributes_from_cl(int argc, char *argv[],
- pthread_attr_t *attrp)
-{
- int s, opt, allocate_stack;
- size_t stack_size, guard_size;
- void *stack_addr;
- pthread_attr_t *ret_attrp = NULL; /* Set to attrp if we initialize
- a thread attributes object */
- allocate_stack = 0;
- stack_size = \-1;
- guard_size = \-1;
-\&
- while ((opt = getopt(argc, argv, "ag:s:")) != \-1) {
- switch (opt) {
- case \[aq]a\[aq]: allocate_stack = 1; break;
- case \[aq]g\[aq]: guard_size = strtoul(optarg, NULL, 0); break;
- case \[aq]s\[aq]: stack_size = strtoul(optarg, NULL, 0); break;
- default: usage(argv[0], NULL);
- }
- }
-\&
- if (allocate_stack && stack_size == \-1)
- usage(argv[0], "Specifying \-a without \-s makes no sense\en");
-\&
- if (argc > optind)
- usage(argv[0], "Extraneous command\-line arguments\en");
-\&
- if (stack_size >= 0 || guard_size > 0) {
- ret_attrp = attrp;
-\&
- s = pthread_attr_init(attrp);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_init");
- }
-\&
- if (stack_size >= 0) {
- if (!allocate_stack) {
- s = pthread_attr_setstacksize(attrp, stack_size);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_setstacksize");
- } else {
- s = posix_memalign(&stack_addr, sysconf(_SC_PAGESIZE),
- stack_size);
- if (s != 0)
- errc(EXIT_FAILURE, s, "posix_memalign");
- printf("Allocated thread stack at %p\en\en", stack_addr);
-\&
- s = pthread_attr_setstack(attrp, stack_addr, stack_size);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_setstacksize");
- }
- }
-\&
- if (guard_size >= 0) {
- s = pthread_attr_setguardsize(attrp, guard_size);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_setstacksize");
- }
-\&
- return ret_attrp;
-}
-\&
-int
-main(int argc, char *argv[])
-{
- int s;
- pthread_t thr;
- pthread_attr_t attr;
- pthread_attr_t *attrp = NULL; /* Set to &attr if we initialize
- a thread attributes object */
-\&
- attrp = get_thread_attributes_from_cl(argc, argv, &attr);
-\&
- if (attrp != NULL) {
- printf("Thread attributes object after initializations:\en");
- display_stack_related_attributes(attrp, "\et");
- printf("\en");
- }
-\&
- s = pthread_create(&thr, attrp, &thread_start, NULL);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_create");
-\&
- if (attrp != NULL) {
- s = pthread_attr_destroy(attrp);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_attr_destroy");
- }
-\&
- pause(); /* Terminates when other thread calls exit() */
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.ad l
-.nh
-.BR pthread_attr_getaffinity_np (3),
-.BR pthread_attr_getdetachstate (3),
-.BR pthread_attr_getguardsize (3),
-.BR pthread_attr_getinheritsched (3),
-.BR pthread_attr_getschedparam (3),
-.BR pthread_attr_getschedpolicy (3),
-.BR pthread_attr_getscope (3),
-.BR pthread_attr_getstack (3),
-.BR pthread_attr_getstackaddr (3),
-.BR pthread_attr_getstacksize (3),
-.BR pthread_attr_init (3),
-.BR pthread_create (3),
-.BR pthreads (7)
diff --git a/man3/pthread_getconcurrency.3 b/man3/pthread_getconcurrency.3
deleted file mode 100644
index 8b2d54392..000000000
--- a/man3/pthread_getconcurrency.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_setconcurrency.3
diff --git a/man3/pthread_getcpuclockid.3 b/man3/pthread_getcpuclockid.3
deleted file mode 100644
index bac136159..000000000
--- a/man3/pthread_getcpuclockid.3
+++ /dev/null
@@ -1,183 +0,0 @@
-'\" t
-.\" Copyright (c) 2009 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_getcpuclockid 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_getcpuclockid \- retrieve ID of a thread's CPU time clock
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.B #include <time.h>
-.PP
-.BI "int pthread_getcpuclockid(pthread_t " thread ", clockid_t *" clockid );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_getcpuclockid ()
-function obtains the ID of the CPU-time clock of the thread whose ID is
-given in
-.IR thread ,
-and returns it in the location pointed to by
-.IR clockid .
-.\" The clockid is constructed as follows:
-.\" *clockid = CLOCK_THREAD_CPUTIME_ID | (pd->tid << CLOCK_IDFIELD_SIZE)
-.\" where CLOCK_IDFIELD_SIZE is 3.
-.SH RETURN VALUE
-On success, this function returns 0;
-on error, it returns a nonzero error number.
-.SH ERRORS
-.TP
-.B ENOENT
-.\" CLOCK_THREAD_CPUTIME_ID not defined
-Per-thread CPU time clocks are not supported by the system.
-.\"
-.\" Looking at nptl/pthread_getcpuclockid.c an ERANGE error would
-.\" be possible if kernel thread IDs took more than 29 bits (which
-.\" they currently cannot).
-.TP
-.B ESRCH
-No thread with the ID
-.I thread
-could be found.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_getcpuclockid ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.2.
-POSIX.1-2001.
-.SH NOTES
-When
-.I thread
-refers to the calling thread,
-this function returns an identifier that refers to the same clock
-manipulated by
-.BR clock_gettime (2)
-and
-.BR clock_settime (2)
-when given the clock ID
-.BR CLOCK_THREAD_CPUTIME_ID .
-.SH EXAMPLES
-The program below creates a thread and then uses
-.BR clock_gettime (2)
-to retrieve the total process CPU time,
-and the per-thread CPU time consumed by the two threads.
-The following shell session shows an example run:
-.PP
-.in +4n
-.EX
-$ \fB./a.out\fP
-Main thread sleeping
-Subthread starting infinite loop
-Main thread consuming some CPU time...
-Process total CPU time: 1.368
-Main thread CPU time: 0.376
-Subthread CPU time: 0.992
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (pthread_getcpuclockid.c)
-.EX
-/* Link with "\-lrt" */
-\&
-#include <errno.h>
-#include <pthread.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-\&
-#define handle_error(msg) \e
- do { perror(msg); exit(EXIT_FAILURE); } while (0)
-\&
-#define handle_error_en(en, msg) \e
- do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)
-\&
-static void *
-thread_start(void *arg)
-{
- printf("Subthread starting infinite loop\en");
- for (;;)
- continue;
-}
-\&
-static void
-pclock(char *msg, clockid_t cid)
-{
- struct timespec ts;
-\&
- printf("%s", msg);
- if (clock_gettime(cid, &ts) == \-1)
- handle_error("clock_gettime");
- printf("%4jd.%03ld\en", (intmax_t) ts.tv_sec, ts.tv_nsec / 1000000);
-}
-\&
-int
-main(void)
-{
- pthread_t thread;
- clockid_t cid;
- int s;
-\&
- s = pthread_create(&thread, NULL, thread_start, NULL);
- if (s != 0)
- handle_error_en(s, "pthread_create");
-\&
- printf("Main thread sleeping\en");
- sleep(1);
-\&
- printf("Main thread consuming some CPU time...\en");
- for (unsigned int j = 0; j < 2000000; j++)
- getppid();
-\&
- pclock("Process total CPU time: ", CLOCK_PROCESS_CPUTIME_ID);
-\&
- s = pthread_getcpuclockid(pthread_self(), &cid);
- if (s != 0)
- handle_error_en(s, "pthread_getcpuclockid");
- pclock("Main thread CPU time: ", cid);
-\&
- /* The preceding 4 lines of code could have been replaced by:
- pclock("Main thread CPU time: ", CLOCK_THREAD_CPUTIME_ID); */
-\&
- s = pthread_getcpuclockid(thread, &cid);
- if (s != 0)
- handle_error_en(s, "pthread_getcpuclockid");
- pclock("Subthread CPU time: 1 ", cid);
-\&
- exit(EXIT_SUCCESS); /* Terminates both threads */
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR clock_gettime (2),
-.BR clock_settime (2),
-.BR timer_create (2),
-.BR clock_getcpuclockid (3),
-.BR pthread_self (3),
-.BR pthreads (7),
-.BR time (7)
diff --git a/man3/pthread_getname_np.3 b/man3/pthread_getname_np.3
deleted file mode 100644
index a385c6e9e..000000000
--- a/man3/pthread_getname_np.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_setname_np.3
diff --git a/man3/pthread_getschedparam.3 b/man3/pthread_getschedparam.3
deleted file mode 100644
index 67299c578..000000000
--- a/man3/pthread_getschedparam.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_setschedparam.3
diff --git a/man3/pthread_join.3 b/man3/pthread_join.3
deleted file mode 100644
index 1cb5ee417..000000000
--- a/man3/pthread_join.3
+++ /dev/null
@@ -1,137 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_join 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_join \- join with a terminated thread
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_join(pthread_t " thread ", void **" retval );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_join ()
-function waits for the thread specified by
-.I thread
-to terminate.
-If that thread has already terminated, then
-.BR pthread_join ()
-returns immediately.
-The thread specified by
-.I thread
-must be joinable.
-.PP
-If
-.I retval
-is not NULL, then
-.BR pthread_join ()
-copies the exit status of the target thread
-(i.e., the value that the target thread supplied to
-.BR pthread_exit (3))
-into the location pointed to by
-.IR retval .
-If the target thread was canceled, then
-.B PTHREAD_CANCELED
-is placed in the location pointed to by
-.IR retval .
-.PP
-If multiple threads simultaneously try to join with the same thread,
-the results are undefined.
-If the thread calling
-.BR pthread_join ()
-is canceled, then the target thread will remain joinable
-(i.e., it will not be detached).
-.SH RETURN VALUE
-On success,
-.BR pthread_join ()
-returns 0;
-on error, it returns an error number.
-.SH ERRORS
-.TP
-.B EDEADLK
-A deadlock was detected
-.\" The following verified by testing on glibc 2.8/NPTL:
-(e.g., two threads tried to join with each other);
-or
-.\" The following verified by testing on glibc 2.8/NPTL:
-.I thread
-specifies the calling thread.
-.TP
-.B EINVAL
-.I thread
-is not a joinable thread.
-.TP
-.B EINVAL
-Another thread is already waiting to join with this thread.
-.\" POSIX.1-2001 does not specify this error case.
-.TP
-.B ESRCH
-No thread with the ID
-.I thread
-could be found.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_join ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-After a successful call to
-.BR pthread_join (),
-the caller is guaranteed that the target thread has terminated.
-The caller may then choose to do any clean-up that is required
-after termination of the thread (e.g., freeing memory or other
-resources that were allocated to the target thread).
-.PP
-Joining with a thread that has previously been joined results in
-undefined behavior.
-.PP
-Failure to join with a thread that is joinable
-(i.e., one that is not detached),
-produces a "zombie thread".
-Avoid doing this,
-since each zombie thread consumes some system resources,
-and when enough zombie threads have accumulated,
-it will no longer be possible to create new threads (or processes).
-.PP
-There is no pthreads analog of
-.IR "waitpid(\-1,\ &status,\ 0)" ,
-that is, "join with any terminated thread".
-If you believe you need this functionality,
-you probably need to rethink your application design.
-.PP
-All of the threads in a process are peers:
-any thread can join with any other thread in the process.
-.SH EXAMPLES
-See
-.BR pthread_create (3).
-.SH SEE ALSO
-.BR pthread_cancel (3),
-.BR pthread_create (3),
-.BR pthread_detach (3),
-.BR pthread_exit (3),
-.BR pthread_tryjoin_np (3),
-.BR pthreads (7)
diff --git a/man3/pthread_kill.3 b/man3/pthread_kill.3
deleted file mode 100644
index bce768fda..000000000
--- a/man3/pthread_kill.3
+++ /dev/null
@@ -1,111 +0,0 @@
-'\" t
-.\" Copyright (c) 2009 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_kill 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_kill \- send a signal to a thread
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.BI "int pthread_kill(pthread_t " thread ", int " sig );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR pthread_kill ():
-.nf
- _POSIX_C_SOURCE >= 199506L || _XOPEN_SOURCE >= 500
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_kill ()
-function sends the signal
-.I sig
-to
-.IR thread ,
-a thread in the same process as the caller.
-The signal is asynchronously directed to
-.IR thread .
-.PP
-If
-.I sig
-is 0, then no signal is sent, but error checking is still performed.
-.SH RETURN VALUE
-On success,
-.BR pthread_kill ()
-returns 0;
-on error, it returns an error number, and no signal is sent.
-.SH ERRORS
-.TP
-.B EINVAL
-An invalid signal was specified.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_kill ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The glibc implementation of
-.BR pthread_kill ()
-gives an error
-.RB ( EINVAL )
-on attempts to send either of the real-time signals
-used internally by the NPTL threading implementation.
-See
-.BR nptl (7)
-for details.
-.PP
-POSIX.1-2008 recommends that if an implementation detects the use
-of a thread ID after the end of its lifetime,
-.BR pthread_kill ()
-should return the error
-.BR ESRCH .
-The glibc implementation returns this error in the cases where
-an invalid thread ID can be detected.
-But note also that POSIX says that an attempt to use a thread ID whose
-lifetime has ended produces undefined behavior,
-and an attempt to use an invalid thread ID in a call to
-.BR pthread_kill ()
-can, for example, cause a segmentation fault.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-Signal dispositions are process-wide:
-if a signal handler is installed,
-the handler will be invoked in the thread
-.IR thread ,
-but if the disposition of the signal is "stop", "continue", or "terminate",
-this action will affect the whole process.
-.SH SEE ALSO
-.BR kill (2),
-.BR sigaction (2),
-.BR sigpending (2),
-.BR pthread_self (3),
-.BR pthread_sigmask (3),
-.BR raise (3),
-.BR pthreads (7),
-.BR signal (7)
diff --git a/man3/pthread_kill_other_threads_np.3 b/man3/pthread_kill_other_threads_np.3
deleted file mode 100644
index 950e46f96..000000000
--- a/man3/pthread_kill_other_threads_np.3
+++ /dev/null
@@ -1,72 +0,0 @@
-'\" t
-.\" Copyright (c) 2009 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_kill_other_threads_np 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_kill_other_threads_np \- terminate all other threads in process
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.B void pthread_kill_other_threads_np(void);
-.fi
-.SH DESCRIPTION
-.BR pthread_kill_other_threads_np ()
-has an effect only in the LinuxThreads threading implementation.
-On that implementation,
-calling this function causes the immediate termination of
-all threads in the application,
-except the calling thread.
-The cancelation state and cancelation type of the
-to-be-terminated threads are ignored,
-and the cleanup handlers are not called in those threads.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_kill_other_threads_np ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-In the NPTL threading implementation,
-.BR pthread_kill_other_threads_np ()
-exists, but does nothing.
-(Nothing needs to be done,
-because the implementation does the right thing during an
-.BR execve (2).)
-.SH STANDARDS
-GNU;
-hence the suffix "_np" (nonportable) in the name.
-.SH HISTORY
-glibc 2.0
-.SH NOTES
-.BR pthread_kill_other_threads_np ()
-is intended to be called just before a thread calls
-.BR execve (2)
-or a similar function.
-This function is designed to address a limitation in the obsolete
-LinuxThreads implementation whereby the other threads of an application
-are not automatically terminated (as POSIX.1-2001 requires) during
-.BR execve (2).
-.SH SEE ALSO
-.BR execve (2),
-.BR pthread_cancel (3),
-.BR pthread_setcancelstate (3),
-.BR pthread_setcanceltype (3),
-.BR pthreads (7)
diff --git a/man3/pthread_mutex_consistent.3 b/man3/pthread_mutex_consistent.3
deleted file mode 100644
index 57bcca162..000000000
--- a/man3/pthread_mutex_consistent.3
+++ /dev/null
@@ -1,86 +0,0 @@
-.\" Copyright (c) 2017, Yubin Ruan <ablacktshirt@gmail.com>
-.\" and Copyright (c) 2017, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_mutex_consistent 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_mutex_consistent \- make a robust mutex consistent
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_mutex_consistent(pthread_mutex_t *" mutex ");"
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR pthread_mutex_consistent ():
-.nf
- _POSIX_C_SOURCE >= 200809L
-.fi
-.SH DESCRIPTION
-This function makes a robust mutex consistent if it is in an inconsistent
-state.
-A mutex can be left in an inconsistent state if its owner terminates
-while holding the mutex, in which case the next owner who acquires the
-mutex will succeed and be notified by a return value of
-.B EOWNERDEAD
-from a call to
-.BR pthread_mutex_lock ().
-.SH RETURN VALUE
-On success,
-.IR pthread_mutex_consistent ()
-returns 0.
-Otherwise,
-it returns a positive error number to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-The mutex is either not robust or is not in an inconsistent state.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.12.
-POSIX.1-2008.
-.PP
-Before the addition of
-.BR pthread_mutex_consistent ()
-to POSIX,
-glibc defined the following equivalent nonstandard function if
-.B _GNU_SOURCE
-was defined:
-.PP
-.nf
-.B [[deprecated]]
-.BI "int pthread_mutex_consistent_np(const pthread_mutex_t *" mutex );
-.fi
-.PP
-This GNU-specific API, which first appeared in glibc 2.4,
-is nowadays obsolete and should not be used in new programs;
-since glibc 2.34 it has been marked as deprecated.
-.SH NOTES
-.BR pthread_mutex_consistent ()
-simply informs the implementation that the state (shared data)
-guarded by the mutex has been restored to a consistent state and that
-normal operations can now be performed with the mutex.
-It is the application's responsibility to ensure that the
-shared data has been restored to a consistent state before calling
-.BR pthread_mutex_consistent ().
-.SH EXAMPLES
-See
-.BR pthread_mutexattr_setrobust (3).
-.SH SEE ALSO
-.ad l
-.nh
-.BR pthread_mutex_lock (3),
-.BR pthread_mutexattr_getrobust (3),
-.BR pthread_mutexattr_init (3),
-.BR pthread_mutexattr_setrobust (3),
-.BR pthreads (7)
diff --git a/man3/pthread_mutex_consistent_np.3 b/man3/pthread_mutex_consistent_np.3
deleted file mode 100644
index a45bea431..000000000
--- a/man3/pthread_mutex_consistent_np.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_mutex_consistent.3
diff --git a/man3/pthread_mutexattr_destroy.3 b/man3/pthread_mutexattr_destroy.3
deleted file mode 100644
index eadaa9b83..000000000
--- a/man3/pthread_mutexattr_destroy.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_mutexattr_init.3
diff --git a/man3/pthread_mutexattr_getpshared.3 b/man3/pthread_mutexattr_getpshared.3
deleted file mode 100644
index 86056e573..000000000
--- a/man3/pthread_mutexattr_getpshared.3
+++ /dev/null
@@ -1,82 +0,0 @@
-.\" Copyright (c) 2017, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_mutexattr_getpshared 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_mutexattr_getpshared, pthread_mutexattr_setpshared \- get/set
-process-shared mutex attribute
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.B int pthread_mutexattr_getpshared(
-.BI " const pthread_mutexattr_t *restrict " attr ,
-.BI " int *restrict " pshared );
-.BI "int pthread_mutexattr_setpshared(pthread_mutexattr_t *" attr ,
-.BI " int " pshared );
-.fi
-.SH DESCRIPTION
-These functions get and set the process-shared attribute
-in a mutex attributes object.
-This attribute must be appropriately set to ensure correct,
-efficient operation of a mutex created using this attributes object.
-.PP
-The process-shared attribute can have one of the following values:
-.TP
-.B PTHREAD_PROCESS_PRIVATE
-Mutexes created with this attributes object are to be shared
-only among threads in the same process that initialized the mutex.
-This is the default value for the process-shared mutex attribute.
-.TP
-.B PTHREAD_PROCESS_SHARED
-Mutexes created with this attributes object can be shared between
-any threads that have access to the memory containing the object,
-including threads in different processes.
-.PP
-.BR pthread_mutexattr_getpshared ()
-places the value of the process-shared attribute of
-the mutex attributes object referred to by
-.I attr
-in the location pointed to by
-.IR pshared .
-.PP
-.BR pthread_mutexattr_setpshared ()
-sets the value of the process-shared attribute of
-the mutex attributes object referred to by
-.I attr
-to the value specified in
-.BR pshared .
-.PP
-If
-.I attr
-does not refer to an initialized mutex attributes object,
-the behavior is undefined.
-.SH RETURN VALUE
-On success, these functions return 0.
-On error, they return a positive error number.
-.SH ERRORS
-.BR pthread_mutexattr_setpshared ()
-can fail with the following errors:
-.TP
-.B EINVAL
-The value specified in
-.I pshared
-is invalid.
-.TP
-.B ENOTSUP
-.I pshared is
-.B PTHREAD_PROCESS_SHARED
-but the implementation does not support process-shared mutexes.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH SEE ALSO
-.ad l
-.nh
-.BR pthread_mutexattr_init (3),
-.BR pthreads (7)
diff --git a/man3/pthread_mutexattr_getrobust.3 b/man3/pthread_mutexattr_getrobust.3
deleted file mode 100644
index 8c40cc0a7..000000000
--- a/man3/pthread_mutexattr_getrobust.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_mutexattr_setrobust.3
diff --git a/man3/pthread_mutexattr_getrobust_np.3 b/man3/pthread_mutexattr_getrobust_np.3
deleted file mode 100644
index 8c40cc0a7..000000000
--- a/man3/pthread_mutexattr_getrobust_np.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_mutexattr_setrobust.3
diff --git a/man3/pthread_mutexattr_init.3 b/man3/pthread_mutexattr_init.3
deleted file mode 100644
index 6d8a6411f..000000000
--- a/man3/pthread_mutexattr_init.3
+++ /dev/null
@@ -1,53 +0,0 @@
-.\" Copyright (c) 2017, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_mutexattr_init 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_mutexattr_init, pthread_mutexattr_destroy \- initialize and
-destroy a mutex attributes object
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_mutexattr_init(pthread_mutexattr_t *" attr ");"
-.BI "int pthread_mutexattr_destroy(pthread_mutexattr_t *" attr ");"
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_mutexattr_init ()
-function initializes the mutex attributes object pointed to by
-.I attr
-with default values for all attributes defined by the implementation.
-.PP
-The results of initializing an already initialized mutex attributes
-object are undefined.
-.PP
-The
-.BR pthread_mutexattr_destroy ()
-function destroys a mutex attribute object (making it uninitialized).
-Once a mutex attributes object has been destroyed, it can be reinitialized with
-.BR pthread_mutexattr_init ().
-.PP
-The results of destroying an uninitialized mutex attributes
-object are undefined.
-.SH RETURN VALUE
-On success, these functions return 0.
-On error, they return a positive error number.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-Subsequent changes to a mutex attributes object do not affect mutex that
-have already been initialized using that object.
-.SH SEE ALSO
-.ad l
-.nh
-.BR pthread_mutex_init (3),
-.BR pthread_mutexattr_getpshared (3),
-.BR pthread_mutexattr_getrobust (3),
-.BR pthreads (7)
diff --git a/man3/pthread_mutexattr_setpshared.3 b/man3/pthread_mutexattr_setpshared.3
deleted file mode 100644
index 07899fdfc..000000000
--- a/man3/pthread_mutexattr_setpshared.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_mutexattr_getpshared.3
diff --git a/man3/pthread_mutexattr_setrobust.3 b/man3/pthread_mutexattr_setrobust.3
deleted file mode 100644
index fef113db2..000000000
--- a/man3/pthread_mutexattr_setrobust.3
+++ /dev/null
@@ -1,264 +0,0 @@
-.\" Copyright (c) 2017, Yubin Ruan <ablacktshirt@gmail.com>
-.\" and Copyright (c) 2017, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_mutexattr_setrobust 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_mutexattr_getrobust, pthread_mutexattr_setrobust
-\- get and set the robustness attribute of a mutex attributes object
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_mutexattr_getrobust(const pthread_mutexattr_t *" attr ,
-.BI " int *" robustness ");"
-.BI "int pthread_mutexattr_setrobust(pthread_mutexattr_t *" attr ,
-.BI " int " robustness ");"
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR pthread_mutexattr_getrobust (),
-.BR pthread_mutexattr_setrobust ():
-.nf
- _POSIX_C_SOURCE >= 200809L
-.\" FIXME .
-.\" But see https://sourceware.org/bugzilla/show_bug.cgi?id=22125
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_mutexattr_getrobust ()
-function places the value of the robustness attribute of
-the mutex attributes object referred to by
-.I attr
-in
-.IR *robustness .
-The
-.BR pthread_mutexattr_setrobust ()
-function sets the value of the robustness attribute of
-the mutex attributes object referred to by
-.I attr
-to the value specified in
-.IR *robustness .
-.PP
-The robustness attribute specifies the behavior of the mutex when
-the owning thread dies without unlocking the mutex.
-The following values are valid for
-.IR robustness :
-.TP
-.B PTHREAD_MUTEX_STALLED
-This is the default value for a mutex attributes object.
-If a mutex is initialized with the
-.B PTHREAD_MUTEX_STALLED
-attribute and its owner dies without unlocking it,
-the mutex remains locked afterwards and any future attempts to call
-.BR pthread_mutex_lock (3)
-on the mutex will block indefinitely.
-.TP
-.B PTHREAD_MUTEX_ROBUST
-If a mutex is initialized with the
-.B PTHREAD_MUTEX_ROBUST
-attribute and its owner dies without unlocking it,
-any future attempts to call
-.BR pthread_mutex_lock (3)
-on this mutex will succeed and return
-.B EOWNERDEAD
-to indicate that the original owner no longer exists and the mutex is in
-an inconsistent state.
-Usually after
-.B EOWNERDEAD
-is returned, the next owner should call
-.BR pthread_mutex_consistent (3)
-on the acquired mutex to make it consistent again before using it any further.
-.IP
-If the next owner unlocks the mutex using
-.BR pthread_mutex_unlock (3)
-before making it consistent, the mutex will be permanently unusable and any
-subsequent attempts to lock it using
-.BR pthread_mutex_lock (3)
-will fail with the error
-.BR ENOTRECOVERABLE .
-The only permitted operation on such a mutex is
-.BR pthread_mutex_destroy (3).
-.IP
-If the next owner terminates before calling
-.BR pthread_mutex_consistent (3),
-further
-.BR pthread_mutex_lock (3)
-operations on this mutex will still return
-.BR EOWNERDEAD .
-.PP
-Note that the
-.I attr
-argument of
-.BR pthread_mutexattr_getrobust ()
-and
-.BR pthread_mutexattr_setrobust ()
-should refer to a mutex attributes object that was initialized by
-.BR pthread_mutexattr_init (3),
-otherwise the behavior is undefined.
-.SH RETURN VALUE
-On success, these functions return 0.
-On error, they return a positive error number.
-.PP
-In the glibc implementation,
-.BR pthread_mutexattr_getrobust ()
-always return zero.
-.SH ERRORS
-.TP
-.B EINVAL
-A value other than
-.B PTHREAD_MUTEX_STALLED
-or
-.B PTHREAD_MUTEX_ROBUST
-was passed to
-.BR pthread_mutexattr_setrobust ().
-.SH VERSIONS
-In the Linux implementation,
-when using process-shared robust mutexes, a waiting thread also receives the
-.B EOWNERDEAD
-notification if the owner of a robust mutex performs an
-.BR execve (2)
-without first unlocking the mutex.
-POSIX.1 does not specify this detail,
-but the same behavior also occurs in at least some
-.\" E.g., Solaris, according to its manual page
-other implementations.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.12.
-POSIX.1-2008.
-.PP
-Before the addition of
-.BR pthread_mutexattr_getrobust ()
-and
-.BR pthread_mutexattr_setrobust ()
-to POSIX,
-glibc defined the following equivalent nonstandard functions if
-.B _GNU_SOURCE
-was defined:
-.PP
-.nf
-.B [[deprecated]]
-.BI "int pthread_mutexattr_getrobust_np(const pthread_mutexattr_t *" attr ,
-.BI " int *" robustness ");"
-.B [[deprecated]]
-.BI "int pthread_mutexattr_setrobust_np(const pthread_mutexattr_t *" attr ,
-.BI " int " robustness ");"
-.fi
-.PP
-Correspondingly, the constants
-.B PTHREAD_MUTEX_STALLED_NP
-and
-.B PTHREAD_MUTEX_ROBUST_NP
-were also defined.
-.PP
-These GNU-specific APIs, which first appeared in glibc 2.4,
-are nowadays obsolete and should not be used in new programs;
-since glibc 2.34 these APIs are marked as deprecated.
-.SH EXAMPLES
-The program below demonstrates the use of the robustness attribute of a
-mutex attributes object.
-In this program, a thread holding the mutex
-dies prematurely without unlocking the mutex.
-The main thread subsequently acquires the mutex
-successfully and gets the error
-.BR EOWNERDEAD ,
-after which it makes the mutex consistent.
-.PP
-The following shell session shows what we see when running this program:
-.PP
-.in +4n
-.EX
-$ \fB./a.out\fP
-[original owner] Setting lock...
-[original owner] Locked. Now exiting without unlocking.
-[main] Attempting to lock the robust mutex.
-[main] pthread_mutex_lock() returned EOWNERDEAD
-[main] Now make the mutex consistent
-[main] Mutex is now consistent; unlocking
-.EE
-.in
-.SS Program source
-.\" SRC BEGIN (pthread_mutexattr_setrobust.c)
-.EX
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-#define handle_error_en(en, msg) \e
- do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)
-\&
-static pthread_mutex_t mtx;
-\&
-static void *
-original_owner_thread(void *ptr)
-{
- printf("[original owner] Setting lock...\en");
- pthread_mutex_lock(&mtx);
- printf("[original owner] Locked. Now exiting without unlocking.\en");
- pthread_exit(NULL);
-}
-\&
-int
-main(void)
-{
- pthread_t thr;
- pthread_mutexattr_t attr;
- int s;
-\&
- pthread_mutexattr_init(&attr);
-\&
- pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST);
-\&
- pthread_mutex_init(&mtx, &attr);
-\&
- pthread_create(&thr, NULL, original_owner_thread, NULL);
-\&
- sleep(2);
-\&
- /* "original_owner_thread" should have exited by now. */
-\&
- printf("[main] Attempting to lock the robust mutex.\en");
- s = pthread_mutex_lock(&mtx);
- if (s == EOWNERDEAD) {
- printf("[main] pthread_mutex_lock() returned EOWNERDEAD\en");
- printf("[main] Now make the mutex consistent\en");
- s = pthread_mutex_consistent(&mtx);
- if (s != 0)
- handle_error_en(s, "pthread_mutex_consistent");
- printf("[main] Mutex is now consistent; unlocking\en");
- s = pthread_mutex_unlock(&mtx);
- if (s != 0)
- handle_error_en(s, "pthread_mutex_unlock");
-\&
- exit(EXIT_SUCCESS);
- } else if (s == 0) {
- printf("[main] pthread_mutex_lock() unexpectedly succeeded\en");
- exit(EXIT_FAILURE);
- } else {
- printf("[main] pthread_mutex_lock() unexpectedly failed\en");
- handle_error_en(s, "pthread_mutex_lock");
- }
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.ad l
-.nh
-.BR get_robust_list (2),
-.BR set_robust_list (2),
-.BR pthread_mutex_consistent (3),
-.BR pthread_mutex_init (3),
-.BR pthread_mutex_lock (3),
-.BR pthreads (7)
diff --git a/man3/pthread_mutexattr_setrobust_np.3 b/man3/pthread_mutexattr_setrobust_np.3
deleted file mode 100644
index 8c40cc0a7..000000000
--- a/man3/pthread_mutexattr_setrobust_np.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_mutexattr_setrobust.3
diff --git a/man3/pthread_rwlockattr_getkind_np.3 b/man3/pthread_rwlockattr_getkind_np.3
deleted file mode 100644
index 6f3f740e7..000000000
--- a/man3/pthread_rwlockattr_getkind_np.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_rwlockattr_setkind_np.3
diff --git a/man3/pthread_rwlockattr_setkind_np.3 b/man3/pthread_rwlockattr_setkind_np.3
deleted file mode 100644
index ff9051ce6..000000000
--- a/man3/pthread_rwlockattr_setkind_np.3
+++ /dev/null
@@ -1,119 +0,0 @@
-.\"Copyright (c) 2010 Novell Inc., written by Robert Schweikert
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_rwlockattr_setkind_np 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_rwlockattr_setkind_np, pthread_rwlockattr_getkind_np \- set/get
-the read-write lock kind of the thread read-write lock attribute object
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_rwlockattr_setkind_np(pthread_rwlockattr_t *" attr ,
-.BI " int " pref );
-.B int pthread_rwlockattr_getkind_np(
-.BI " const pthread_rwlockattr_t *restrict " attr ,
-.BI " int *restrict " pref );
-.PP
-.fi
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR pthread_rwlockattr_setkind_np (),
-.BR pthread_rwlockattr_getkind_np ():
-.nf
- _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200809L
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_rwlockattr_setkind_np ()
-function sets the "lock kind" attribute of the
-read-write lock attribute object referred to by
-.I attr
-to the value specified in
-.IR pref .
-The argument
-.I pref
-may be set to one of the following:
-.TP
-.B PTHREAD_RWLOCK_PREFER_READER_NP
-This is the default.
-A thread may hold multiple read locks; that is, read locks are recursive.
-According to The Single Unix Specification, the behavior is unspecified when a
-reader tries to place a lock, and there is no write lock but writers are
-waiting.
-Giving preference to the reader, as is set by
-.BR PTHREAD_RWLOCK_PREFER_READER_NP ,
-implies that the reader will receive the requested lock, even if
-a writer is waiting.
-As long as there are readers, the writer will be
-starved.
-.TP
-.B PTHREAD_RWLOCK_PREFER_WRITER_NP
-This is intended as the write lock analog of
-.BR PTHREAD_RWLOCK_PREFER_READER_NP .
-This is ignored by glibc because the POSIX requirement to support
-recursive read locks would cause this option to create trivial
-deadlocks; instead use
-.B PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP
-which ensures the application developer will not take recursive
-read locks thus avoiding deadlocks.
-.\" ---
-.\" Here is the relevant wording:
-.\"
-.\" A thread may hold multiple concurrent read locks on rwlock (that is,
-.\" successfully call the pthread_rwlock_rdlock() function n times). If
-.\" so, the thread must perform matching unlocks (that is, it must call
-.\" the pthread_rwlock_unlock() function n times).
-.\"
-.\" By making write-priority work correctly, I broke the above requirement,
-.\" because I had no clue that recursive read locks are permissible.
-.\"
-.\" If a thread which holds a read lock tries to acquire another read lock,
-.\" and now one or more writers is waiting for a write lock, then the algorithm
-.\" will lead to an obvious deadlock. The reader will be suspended, waiting for
-.\" the writers to acquire and release the lock, and the writers will be
-.\" suspended waiting for every existing read lock to be released.
-.\" ---
-.\" https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html
-.\" https://sourceware.org/legacy-ml/libc-alpha/2000-01/msg00055.html
-.\" https://sourceware.org/bugzilla/show_bug.cgi?id=7057
-.TP
-.B PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP
-Setting the lock kind to this
-avoids writer starvation as long as any read locking is not done in a
-recursive fashion.
-.PP
-The
-.BR pthread_rwlockattr_getkind_np ()
-function returns the value of the lock kind attribute of the
-read-write lock attribute object referred to by
-.I attr
-in the pointer
-.IR pref .
-.SH RETURN VALUE
-On success, these functions return 0.
-Given valid pointer arguments,
-.BR pthread_rwlockattr_getkind_np ()
-always succeeds.
-On error,
-.BR pthread_rwlockattr_setkind_np ()
-returns a nonzero error number.
-.SH ERRORS
-.TP
-.B EINVAL
-.I pref
-specifies an unsupported value.
-.SH STANDARDS
-GNU;
-hence the suffix "_np" (nonportable) in the names.
-.SH HISTORY
-glibc 2.1.
-.SH SEE ALSO
-.BR pthreads (7)
diff --git a/man3/pthread_self.3 b/man3/pthread_self.3
deleted file mode 100644
index 7f99018af..000000000
--- a/man3/pthread_self.3
+++ /dev/null
@@ -1,80 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_self 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_self \- obtain ID of the calling thread
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.B pthread_t pthread_self(void);
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_self ()
-function returns the ID of the calling thread.
-This is the same value that is returned in
-.I *thread
-in the
-.BR pthread_create (3)
-call that created this thread.
-.SH RETURN VALUE
-This function always succeeds, returning the calling thread's ID.
-.SH ERRORS
-This function always succeeds.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_self ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-POSIX.1 allows an implementation wide freedom in choosing
-the type used to represent a thread ID;
-for example, representation using either an arithmetic type or
-a structure is permitted.
-Therefore, variables of type
-.I pthread_t
-can't portably be compared using the C equality operator (\fB==\fP);
-use
-.BR pthread_equal (3)
-instead.
-.PP
-Thread identifiers should be considered opaque:
-any attempt to use a thread ID other than in pthreads calls
-is nonportable and can lead to unspecified results.
-.PP
-Thread IDs are guaranteed to be unique only within a process.
-A thread ID may be reused after a terminated thread has been joined,
-or a detached thread has terminated.
-.PP
-The thread ID returned by
-.BR pthread_self ()
-is not the same thing as the kernel thread ID returned by a call to
-.BR gettid (2).
-.SH SEE ALSO
-.BR pthread_create (3),
-.BR pthread_equal (3),
-.BR pthreads (7)
diff --git a/man3/pthread_setaffinity_np.3 b/man3/pthread_setaffinity_np.3
deleted file mode 100644
index 3aa75c196..000000000
--- a/man3/pthread_setaffinity_np.3
+++ /dev/null
@@ -1,210 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_setaffinity_np 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_setaffinity_np, pthread_getaffinity_np \- set/get
-CPU affinity of a thread
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <pthread.h>
-.PP
-.BI "int pthread_setaffinity_np(pthread_t " thread ", size_t " cpusetsize ,
-.BI " const cpu_set_t *" cpuset );
-.BI "int pthread_getaffinity_np(pthread_t " thread ", size_t " cpusetsize ,
-.BI " cpu_set_t *" cpuset );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_setaffinity_np ()
-function
-sets the CPU affinity mask of the thread
-.I thread
-to the CPU set pointed to by
-.IR cpuset .
-If the call is successful,
-and the thread is not currently running on one of the CPUs in
-.IR cpuset ,
-then it is migrated to one of those CPUs.
-.PP
-The
-.BR pthread_getaffinity_np ()
-function returns the CPU affinity mask of the thread
-.I thread
-in the buffer pointed to by
-.IR cpuset .
-.PP
-For more details on CPU affinity masks, see
-.BR sched_setaffinity (2).
-For a description of a set of macros
-that can be used to manipulate and inspect CPU sets, see
-.BR CPU_SET (3).
-.PP
-The argument
-.I cpusetsize
-is the length (in bytes) of the buffer pointed to by
-.IR cpuset .
-Typically, this argument would be specified as
-.IR sizeof(cpu_set_t) .
-(It may be some other value, if using the macros described in
-.BR CPU_SET (3)
-for dynamically allocating a CPU set.)
-.SH RETURN VALUE
-On success, these functions return 0;
-on error, they return a nonzero error number.
-.SH ERRORS
-.TP
-.B EFAULT
-A supplied memory address was invalid.
-.TP
-.B EINVAL
-.RB ( pthread_setaffinity_np ())
-The affinity bit mask
-.I mask
-contains no processors that are currently physically on the system
-and permitted to the thread according to any restrictions that
-may be imposed by the "cpuset" mechanism described in
-.BR cpuset (7).
-.TP
-.B EINVAL
-.RB ( pthread_setaffinity_np ())
-.I cpuset
-specified a CPU that was outside the set supported by the kernel.
-(The kernel configuration option
-.B CONFIG_NR_CPUS
-defines the range of the set supported by the kernel data type
-.\" cpumask_t
-used to represent CPU sets.)
-.\" The raw sched_getaffinity() system call returns the size (in bytes)
-.\" of the cpumask_t type.
-.TP
-.B EINVAL
-.RB ( pthread_getaffinity_np ())
-.I cpusetsize
-is smaller than the size of the affinity mask used by the kernel.
-.TP
-.B ESRCH
-No thread with the ID
-.I thread
-could be found.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_setaffinity_np (),
-.BR pthread_getaffinity_np ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU;
-hence the suffix "_np" (nonportable) in the names.
-.SH HISTORY
-glibc 2.3.4.
-.PP
-In glibc 2.3.3 only,
-versions of these functions were provided that did not have a
-.I cpusetsize
-argument.
-Instead the CPU set size given to the underlying system calls was always
-.IR sizeof(cpu_set_t) .
-.SH NOTES
-After a call to
-.BR pthread_setaffinity_np (),
-the set of CPUs on which the thread will actually run is
-the intersection of the set specified in the
-.I cpuset
-argument and the set of CPUs actually present on the system.
-The system may further restrict the set of CPUs on which the thread
-runs if the "cpuset" mechanism described in
-.BR cpuset (7)
-is being used.
-These restrictions on the actual set of CPUs on which the thread
-will run are silently imposed by the kernel.
-.PP
-These functions are implemented on top of the
-.BR sched_setaffinity (2)
-and
-.BR sched_getaffinity (2)
-system calls.
-.PP
-A new thread created by
-.BR pthread_create (3)
-inherits a copy of its creator's CPU affinity mask.
-.SH EXAMPLES
-In the following program, the main thread uses
-.BR pthread_setaffinity_np ()
-to set its CPU affinity mask to include CPUs 0 to 7
-(which may not all be available on the system),
-and then calls
-.BR pthread_getaffinity_np ()
-to check the resulting CPU affinity mask of the thread.
-.PP
-.\" SRC BEGIN (pthread_setaffinity_np.c)
-.EX
-#define _GNU_SOURCE
-#include <err.h>
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(void)
-{
- int s;
- cpu_set_t cpuset;
- pthread_t thread;
-\&
- thread = pthread_self();
-\&
- /* Set affinity mask to include CPUs 0 to 7. */
-\&
- CPU_ZERO(&cpuset);
- for (size_t j = 0; j < 8; j++)
- CPU_SET(j, &cpuset);
-\&
- s = pthread_setaffinity_np(thread, sizeof(cpuset), &cpuset);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_setaffinity_np");
-\&
- /* Check the actual affinity mask assigned to the thread. */
-\&
- s = pthread_getaffinity_np(thread, sizeof(cpuset), &cpuset);
- if (s != 0)
- errc(EXIT_FAILURE, s, "pthread_getaffinity_np");
-\&
- printf("Set returned by pthread_getaffinity_np() contained:\en");
- for (size_t j = 0; j < CPU_SETSIZE; j++)
- if (CPU_ISSET(j, &cpuset))
- printf(" CPU %zu\en", j);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR sched_setaffinity (2),
-.BR CPU_SET (3),
-.BR pthread_attr_setaffinity_np (3),
-.BR pthread_self (3),
-.BR sched_getcpu (3),
-.BR cpuset (7),
-.BR pthreads (7),
-.BR sched (7)
diff --git a/man3/pthread_setattr_default_np.3 b/man3/pthread_setattr_default_np.3
deleted file mode 100644
index 1ea2ab65b..000000000
--- a/man3/pthread_setattr_default_np.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_getattr_default_np.3
diff --git a/man3/pthread_setcancelstate.3 b/man3/pthread_setcancelstate.3
deleted file mode 100644
index 685ed4fb7..000000000
--- a/man3/pthread_setcancelstate.3
+++ /dev/null
@@ -1,198 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_setcancelstate 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_setcancelstate, pthread_setcanceltype \-
-set cancelability state and type
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_setcancelstate(int " state ", int *" oldstate );
-.BI "int pthread_setcanceltype(int " type ", int *" oldtype );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_setcancelstate ()
-sets the cancelability state of the calling thread to the value
-given in
-.IR state .
-The previous cancelability state of the thread is returned
-in the buffer pointed to by
-.IR oldstate .
-The
-.I state
-argument must have one of the following values:
-.TP
-.B PTHREAD_CANCEL_ENABLE
-The thread is cancelable.
-This is the default cancelability state in all new threads,
-including the initial thread.
-The thread's cancelability type determines when a cancelable thread
-will respond to a cancelation request.
-.TP
-.B PTHREAD_CANCEL_DISABLE
-The thread is not cancelable.
-If a cancelation request is received,
-it is blocked until cancelability is enabled.
-.PP
-The
-.BR pthread_setcanceltype ()
-sets the cancelability type of the calling thread to the value
-given in
-.IR type .
-The previous cancelability type of the thread is returned
-in the buffer pointed to by
-.IR oldtype .
-The
-.I type
-argument must have one of the following values:
-.TP
-.B PTHREAD_CANCEL_DEFERRED
-A cancelation request is deferred until the thread next calls
-a function that is a cancelation point (see
-.BR pthreads (7)).
-This is the default cancelability type in all new threads,
-including the initial thread.
-.IP
-Even with deferred cancelation, a
-cancelation point in an asynchronous signal handler may still
-be acted upon and the effect is as if it was an asynchronous
-cancelation.
-.TP
-.B PTHREAD_CANCEL_ASYNCHRONOUS
-The thread can be canceled at any time.
-(Typically,
-it will be canceled immediately upon receiving a cancelation request,
-but the system doesn't guarantee this.)
-.PP
-The set-and-get operation performed by each of these functions
-is atomic with respect to other threads in the process
-calling the same function.
-.SH RETURN VALUE
-On success, these functions return 0;
-on error, they return a nonzero error number.
-.SH ERRORS
-The
-.BR pthread_setcancelstate ()
-can fail with the following error:
-.TP
-.B EINVAL
-Invalid value for
-.IR state .
-.PP
-The
-.BR pthread_setcanceltype ()
-can fail with the following error:
-.TP
-.B EINVAL
-Invalid value for
-.IR type .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_setcancelstate (),
-.BR pthread_setcanceltype ()
-T} Thread safety T{
-MT-Safe
-T}
-T{
-.BR pthread_setcancelstate (),
-.BR pthread_setcanceltype ()
-T} Async-cancel safety T{
-AC-Safe
-T}
-.TE
-.hy
-.ad
-.sp 1
-.hy
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.0
-POSIX.1-2001.
-.SH NOTES
-For details of what happens when a thread is canceled, see
-.BR pthread_cancel (3).
-.PP
-Briefly disabling cancelability is useful
-if a thread performs some critical action
-that must not be interrupted by a cancelation request.
-Beware of disabling cancelability for long periods,
-or around operations that may block for long periods,
-since that will render the thread unresponsive to cancelation requests.
-.SS Asynchronous cancelability
-Setting the cancelability type to
-.B PTHREAD_CANCEL_ASYNCHRONOUS
-is rarely useful.
-Since the thread could be canceled at
-.I any
-time, it cannot safely reserve resources (e.g., allocating memory with
-.BR malloc (3)),
-acquire mutexes, semaphores, or locks, and so on.
-Reserving resources is unsafe because the application has no way of
-knowing what the state of these resources is when the thread is canceled;
-that is, did cancelation occur before the resources were reserved,
-while they were reserved, or after they were released?
-Furthermore, some internal data structures
-(e.g., the linked list of free blocks managed by the
-.BR malloc (3)
-family of functions) may be left in an inconsistent state
-if cancelation occurs in the middle of the function call.
-Consequently, clean-up handlers cease to be useful.
-.PP
-Functions that can be safely asynchronously canceled are called
-.IR "async-cancel-safe functions" .
-POSIX.1-2001 and POSIX.1-2008 require only that
-.BR pthread_cancel (3),
-.BR pthread_setcancelstate (),
-and
-.BR pthread_setcanceltype ()
-be async-cancel-safe.
-In general, other library functions
-can't be safely called from an asynchronously cancelable thread.
-.PP
-One of the few circumstances in which asynchronous cancelability is useful
-is for cancelation of a thread that is in a pure compute-bound loop.
-.SS Portability notes
-The Linux threading implementations permit the
-.I oldstate
-argument of
-.BR pthread_setcancelstate ()
-to be NULL, in which case the information about the previous
-cancelability state is not returned to the caller.
-Many other implementations also permit a NULL
-.I oldstat
-argument,
-.\" It looks like at least Solaris, FreeBSD and Tru64 support this.
-but POSIX.1 does not specify this point,
-so portable applications should always specify a non-NULL value in
-.IR oldstate .
-A precisely analogous set of statements applies for the
-.I oldtype
-argument of
-.BR pthread_setcanceltype ().
-.SH EXAMPLES
-See
-.BR pthread_cancel (3).
-.SH SEE ALSO
-.BR pthread_cancel (3),
-.BR pthread_cleanup_push (3),
-.BR pthread_testcancel (3),
-.BR pthreads (7)
diff --git a/man3/pthread_setcanceltype.3 b/man3/pthread_setcanceltype.3
deleted file mode 100644
index 9625bc20d..000000000
--- a/man3/pthread_setcanceltype.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_setcancelstate.3
diff --git a/man3/pthread_setconcurrency.3 b/man3/pthread_setconcurrency.3
deleted file mode 100644
index dcce679af..000000000
--- a/man3/pthread_setconcurrency.3
+++ /dev/null
@@ -1,103 +0,0 @@
-'\" t
-.\" Copyright (c) 2009 Michael Kerrisk, <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_setconcurrency 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_setconcurrency, pthread_getconcurrency \- set/get
-the concurrency level
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_setconcurrency(int " new_level );
-.BI "int pthread_getconcurrency(" void );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_setconcurrency ()
-function informs the implementation of the application's
-desired concurrency level, specified in
-.IR new_level .
-The implementation takes this only as a hint:
-POSIX.1 does not specify the level of concurrency that
-should be provided as a result of calling
-.BR pthread_setconcurrency ().
-.PP
-Specifying
-.I new_level
-as 0 instructs the implementation to manage the concurrency level
-as it deems appropriate.
-.PP
-.BR pthread_getconcurrency ()
-returns the current value of the concurrency level for this process.
-.SH RETURN VALUE
-On success,
-.BR pthread_setconcurrency ()
-returns 0;
-on error, it returns a nonzero error number.
-.PP
-.BR pthread_getconcurrency ()
-always succeeds, returning the concurrency level set by a previous call to
-.BR pthread_setconcurrency (),
-or 0, if
-.BR pthread_setconcurrency ()
-has not previously been called.
-.SH ERRORS
-.BR pthread_setconcurrency ()
-can fail with the following error:
-.TP
-.B EINVAL
-.I new_level
-is negative.
-.PP
-POSIX.1 also documents an
-.B EAGAIN
-error ("the value specified by
-.I new_level
-would cause a system resource to be exceeded").
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_setconcurrency (),
-.BR pthread_getconcurrency ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001.
-.SH NOTES
-The default concurrency level is 0.
-.PP
-Concurrency levels are meaningful only for M:N threading implementations,
-where at any moment a subset of a process's set of user-level threads
-may be bound to a smaller number of kernel-scheduling entities.
-Setting the concurrency level allows the application to
-give the system a hint as to the number of kernel-scheduling entities
-that should be provided for efficient execution of the application.
-.PP
-Both LinuxThreads and NPTL are 1:1 threading implementations,
-so setting the concurrency level has no meaning.
-In other words,
-on Linux these functions merely exist for compatibility with other systems,
-and they have no effect on the execution of a program.
-.SH SEE ALSO
-.BR pthread_attr_setscope (3),
-.BR pthreads (7)
diff --git a/man3/pthread_setname_np.3 b/man3/pthread_setname_np.3
deleted file mode 100644
index 6cca4c448..000000000
--- a/man3/pthread_setname_np.3
+++ /dev/null
@@ -1,205 +0,0 @@
-'\" t
-.\" Copyright (C) 2012 Chandan Apsangi <chandan.jc@gmail.com>
-.\" and Copyright (C) 2013 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_setname_np 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_setname_np, pthread_getname_np \- set/get the name of a thread
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <pthread.h>
-.PP
-.BI "int pthread_setname_np(pthread_t " thread ", const char *" name );
-.BI "int pthread_getname_np(pthread_t " thread ", char " name [. size "], \
-size_t " size );
-.fi
-.SH DESCRIPTION
-By default, all the threads created using
-.BR pthread_create ()
-inherit the program name.
-The
-.BR pthread_setname_np ()
-function can be used to set a unique name for a thread,
-which can be useful for debugging
-multithreaded applications.
-The thread name is a meaningful C language string,
-whose length is restricted to 16 characters,
-including the terminating null byte (\[aq]\e0\[aq]).
-The
-.I thread
-argument specifies the thread whose name is to be changed;
-.I name
-specifies the new name.
-.PP
-The
-.BR pthread_getname_np ()
-function can be used to retrieve the name of the thread.
-The
-.I thread
-argument specifies the thread whose name is to be retrieved.
-The buffer
-.I name
-is used to return the thread name;
-.I size
-specifies the number of bytes available in
-.IR name .
-The buffer specified by
-.I name
-should be at least 16 characters in length.
-The returned thread name in the output buffer will be null terminated.
-.SH RETURN VALUE
-On success, these functions return 0;
-on error, they return a nonzero error number.
-.SH ERRORS
-The
-.BR pthread_setname_np ()
-function can fail with the following error:
-.TP
-.B ERANGE
-The length of the string specified pointed to by
-.I name
-exceeds the allowed limit.
-.PP
-The
-.BR pthread_getname_np ()
-function can fail with the following error:
-.TP
-.B ERANGE
-The buffer specified by
-.I name
-and
-.I size
-is too small to hold the thread name.
-.PP
-If either of these functions fails to open
-.IR /proc/self/task/ tid /comm ,
-then the call may fail with one of the errors described in
-.BR open (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_setname_np (),
-.BR pthread_getname_np ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU;
-hence the suffix "_np" (nonportable) in the names.
-.SH HISTORY
-glibc 2.12.
-.SH NOTES
-.BR pthread_setname_np ()
-internally writes to the thread-specific
-.I comm
-file under the
-.I /proc
-filesystem:
-.IR /proc/self/task/ tid /comm .
-.BR pthread_getname_np ()
-retrieves it from the same location.
-.SH EXAMPLES
-The program below demonstrates the use of
-.BR pthread_setname_np ()
-and
-.BR pthread_getname_np ().
-.PP
-The following shell session shows a sample run of the program:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out"
-Created a thread. Default name is: a.out
-The thread name after setting it is THREADFOO.
-\fB\[ha]Z\fP # Suspend the program
-[1]+ Stopped ./a.out
-.RB "$ " "ps H \-C a.out \-o \[aq]pid tid cmd comm\[aq]"
- PID TID CMD COMMAND
- 5990 5990 ./a.out a.out
- 5990 5991 ./a.out THREADFOO
-.RB "$ " "cat /proc/5990/task/5990/comm"
-a.out
-.RB "$ " "cat /proc/5990/task/5991/comm"
-THREADFOO
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (pthread_setname_np.c)
-.EX
-#define _GNU_SOURCE
-#include <err.h>
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-\&
-#define NAMELEN 16
-\&
-static void *
-threadfunc(void *parm)
-{
- sleep(5); // allow main program to set the thread name
- return NULL;
-}
-\&
-int
-main(int argc, char *argv[])
-{
- pthread_t thread;
- int rc;
- char thread_name[NAMELEN];
-\&
- rc = pthread_create(&thread, NULL, threadfunc, NULL);
- if (rc != 0)
- errc(EXIT_FAILURE, rc, "pthread_create");
-\&
- rc = pthread_getname_np(thread, thread_name, NAMELEN);
- if (rc != 0)
- errc(EXIT_FAILURE, rc, "pthread_getname_np");
-\&
- printf("Created a thread. Default name is: %s\en", thread_name);
- rc = pthread_setname_np(thread, (argc > 1) ? argv[1] : "THREADFOO");
- if (rc != 0)
- errc(EXIT_FAILURE, rc, "pthread_setname_np");
-\&
- sleep(2);
-\&
- rc = pthread_getname_np(thread, thread_name, NAMELEN);
- if (rc != 0)
- errc(EXIT_FAILURE, rc, "pthread_getname_np");
- printf("The thread name after setting it is %s.\en", thread_name);
-\&
- rc = pthread_join(thread, NULL);
- if (rc != 0)
- errc(EXIT_FAILURE, rc, "pthread_join");
-\&
- printf("Done\en");
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.ad l
-.nh
-.BR prctl (2),
-.BR pthread_create (3),
-.BR pthreads (7)
diff --git a/man3/pthread_setschedparam.3 b/man3/pthread_setschedparam.3
deleted file mode 100644
index 7b34fdb84..000000000
--- a/man3/pthread_setschedparam.3
+++ /dev/null
@@ -1,450 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_setschedparam 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_setschedparam, pthread_getschedparam \- set/get
-scheduling policy and parameters of a thread
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_setschedparam(pthread_t " thread ", int " policy ,
-.BI " const struct sched_param *" param );
-.BI "int pthread_getschedparam(pthread_t " thread ", int *restrict " policy ,
-.BI " struct sched_param *restrict " param );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_setschedparam ()
-function sets the scheduling policy and parameters of the thread
-.IR thread .
-.PP
-.I policy
-specifies the new scheduling policy for
-.IR thread .
-The supported values for
-.IR policy ,
-and their semantics, are described in
-.BR sched (7).
-.\" FIXME . pthread_setschedparam() places no restriction on the policy,
-.\" but pthread_attr_setschedpolicy() restricts policy to RR/FIFO/OTHER
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=7013
-.PP
-The structure pointed to by
-.I param
-specifies the new scheduling parameters for
-.IR thread .
-Scheduling parameters are maintained in the following structure:
-.PP
-.in +4n
-.EX
-struct sched_param {
- int sched_priority; /* Scheduling priority */
-};
-.EE
-.in
-.PP
-As can be seen, only one scheduling parameter is supported.
-For details of the permitted ranges for scheduling priorities
-in each scheduling policy, see
-.BR sched (7).
-.PP
-The
-.BR pthread_getschedparam ()
-function returns the scheduling policy and parameters of the thread
-.IR thread ,
-in the buffers pointed to by
-.I policy
-and
-.IR param ,
-respectively.
-The returned priority value is that set by the most recent
-.BR pthread_setschedparam (),
-.BR pthread_setschedprio (3),
-or
-.BR pthread_create (3)
-call that affected
-.IR thread .
-The returned priority does not reflect any temporary priority adjustments
-as a result of calls to any priority inheritance or
-priority ceiling functions (see, for example,
-.BR pthread_mutexattr_setprioceiling (3)
-and
-.BR pthread_mutexattr_setprotocol (3)).
-.\" FIXME . nptl/pthread_setschedparam.c has the following
-.\" /* If the thread should have higher priority because of some
-.\" PTHREAD_PRIO_PROTECT mutexes it holds, adjust the priority. */
-.\" Eventually (perhaps after writing the mutexattr pages), we
-.\" may want to add something on the topic to this page.
-.SH RETURN VALUE
-On success, these functions return 0;
-on error, they return a nonzero error number.
-If
-.BR pthread_setschedparam ()
-fails, the scheduling policy and parameters of
-.I thread
-are not changed.
-.SH ERRORS
-Both of these functions can fail with the following error:
-.TP
-.B ESRCH
-No thread with the ID
-.I thread
-could be found.
-.PP
-.BR pthread_setschedparam ()
-may additionally fail with the following errors:
-.TP
-.B EINVAL
-.I policy
-is not a recognized policy, or
-.I param
-does not make sense for the
-.IR policy .
-.TP
-.B EPERM
-The caller does not have appropriate privileges
-to set the specified scheduling policy and parameters.
-.PP
-POSIX.1 also documents an
-.B ENOTSUP
-("attempt was made to set the policy or scheduling parameters
-to an unsupported value") error for
-.BR pthread_setschedparam ().
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_setschedparam (),
-.BR pthread_getschedparam ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.0
-POSIX.1-2001.
-.SH NOTES
-For a description of the permissions required to, and the effect of,
-changing a thread's scheduling policy and priority,
-and details of the permitted ranges for priorities
-in each scheduling policy, see
-.BR sched (7).
-.SH EXAMPLES
-The program below demonstrates the use of
-.BR pthread_setschedparam ()
-and
-.BR pthread_getschedparam (),
-as well as the use of a number of other scheduling-related
-pthreads functions.
-.PP
-In the following run, the main thread sets its scheduling policy to
-.B SCHED_FIFO
-with a priority of 10,
-and initializes a thread attributes object with
-a scheduling policy attribute of
-.B SCHED_RR
-and a scheduling priority attribute of 20.
-The program then sets (using
-.BR pthread_attr_setinheritsched (3))
-the inherit scheduler attribute of the thread attributes object to
-.BR PTHREAD_EXPLICIT_SCHED ,
-meaning that threads created using this attributes object should
-take their scheduling attributes from the thread attributes object.
-The program then creates a thread using the thread attributes object,
-and that thread displays its scheduling policy and priority.
-.PP
-.in +4n
-.EX
-$ \fBsu\fP # Need privilege to set real\-time scheduling policies
-Password:
-# \fB./a.out \-mf10 \-ar20 \-i e\fP
-Scheduler settings of main thread
- policy=SCHED_FIFO, priority=10
-\&
-Scheduler settings in \[aq]attr\[aq]
- policy=SCHED_RR, priority=20
- inheritsched is EXPLICIT
-\&
-Scheduler attributes of new thread
- policy=SCHED_RR, priority=20
-.EE
-.in
-.PP
-In the above output, one can see that the scheduling policy and priority
-were taken from the values specified in the thread attributes object.
-.PP
-The next run is the same as the previous,
-except that the inherit scheduler attribute is set to
-.BR PTHREAD_INHERIT_SCHED ,
-meaning that threads created using the thread attributes object should
-ignore the scheduling attributes specified in the attributes object
-and instead take their scheduling attributes from the creating thread.
-.PP
-.in +4n
-.EX
-# \fB./a.out \-mf10 \-ar20 \-i i\fP
-Scheduler settings of main thread
- policy=SCHED_FIFO, priority=10
-\&
-Scheduler settings in \[aq]attr\[aq]
- policy=SCHED_RR, priority=20
- inheritsched is INHERIT
-\&
-Scheduler attributes of new thread
- policy=SCHED_FIFO, priority=10
-.EE
-.in
-.PP
-In the above output, one can see that the scheduling policy and priority
-were taken from the creating thread,
-rather than the thread attributes object.
-.PP
-Note that if we had omitted the
-.I \-i\~i
-option, the output would have been the same, since
-.B PTHREAD_INHERIT_SCHED
-is the default for the inherit scheduler attribute.
-.SS Program source
-\&
-.\" SRC BEGIN (pthreads_sched_test.c)
-.EX
-/* pthreads_sched_test.c */
-\&
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-#define handle_error_en(en, msg) \e
- do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)
-\&
-static void
-usage(char *prog_name, char *msg)
-{
- if (msg != NULL)
- fputs(msg, stderr);
-\&
- fprintf(stderr, "Usage: %s [options]\en", prog_name);
- fprintf(stderr, "Options are:\en");
-#define fpe(msg) fprintf(stderr, "\et%s", msg) /* Shorter */
- fpe("\-a<policy><prio> Set scheduling policy and priority in\en");
- fpe(" thread attributes object\en");
- fpe(" <policy> can be\en");
- fpe(" f SCHED_FIFO\en");
- fpe(" r SCHED_RR\en");
- fpe(" o SCHED_OTHER\en");
- fpe("\-A Use default thread attributes object\en");
- fpe("\-i {e|i} Set inherit scheduler attribute to\en");
- fpe(" \[aq]explicit\[aq] or \[aq]inherit\[aq]\en");
- fpe("\-m<policy><prio> Set scheduling policy and priority on\en");
- fpe(" main thread before pthread_create() call\en");
- exit(EXIT_FAILURE);
-}
-\&
-static int
-get_policy(char p, int *policy)
-{
- switch (p) {
- case \[aq]f\[aq]: *policy = SCHED_FIFO; return 1;
- case \[aq]r\[aq]: *policy = SCHED_RR; return 1;
- case \[aq]o\[aq]: *policy = SCHED_OTHER; return 1;
- default: return 0;
- }
-}
-\&
-static void
-display_sched_attr(int policy, struct sched_param *param)
-{
- printf(" policy=%s, priority=%d\en",
- (policy == SCHED_FIFO) ? "SCHED_FIFO" :
- (policy == SCHED_RR) ? "SCHED_RR" :
- (policy == SCHED_OTHER) ? "SCHED_OTHER" :
- "???",
- param\->sched_priority);
-}
-\&
-static void
-display_thread_sched_attr(char *msg)
-{
- int policy, s;
- struct sched_param param;
-\&
- s = pthread_getschedparam(pthread_self(), &policy, &param);
- if (s != 0)
- handle_error_en(s, "pthread_getschedparam");
-\&
- printf("%s\en", msg);
- display_sched_attr(policy, &param);
-}
-\&
-static void *
-thread_start(void *arg)
-{
- display_thread_sched_attr("Scheduler attributes of new thread");
-\&
- return NULL;
-}
-\&
-int
-main(int argc, char *argv[])
-{
- int s, opt, inheritsched, use_null_attrib, policy;
- pthread_t thread;
- pthread_attr_t attr;
- pthread_attr_t *attrp;
- char *attr_sched_str, *main_sched_str, *inheritsched_str;
- struct sched_param param;
-\&
- /* Process command\-line options. */
-\&
- use_null_attrib = 0;
- attr_sched_str = NULL;
- main_sched_str = NULL;
- inheritsched_str = NULL;
-\&
- while ((opt = getopt(argc, argv, "a:Ai:m:")) != \-1) {
- switch (opt) {
- case \[aq]a\[aq]: attr_sched_str = optarg; break;
- case \[aq]A\[aq]: use_null_attrib = 1; break;
- case \[aq]i\[aq]: inheritsched_str = optarg; break;
- case \[aq]m\[aq]: main_sched_str = optarg; break;
- default: usage(argv[0], "Unrecognized option\en");
- }
- }
-\&
- if (use_null_attrib
- && (inheritsched_str != NULL || attr_sched_str != NULL))
- {
- usage(argv[0], "Can\[aq]t specify \-A with \-i or \-a\en");
- }
-\&
- /* Optionally set scheduling attributes of main thread,
- and display the attributes. */
-\&
- if (main_sched_str != NULL) {
- if (!get_policy(main_sched_str[0], &policy))
- usage(argv[0], "Bad policy for main thread (\-m)\en");
- param.sched_priority = strtol(&main_sched_str[1], NULL, 0);
-\&
- s = pthread_setschedparam(pthread_self(), policy, &param);
- if (s != 0)
- handle_error_en(s, "pthread_setschedparam");
- }
-\&
- display_thread_sched_attr("Scheduler settings of main thread");
- printf("\en");
-\&
- /* Initialize thread attributes object according to options. */
-\&
- attrp = NULL;
-\&
- if (!use_null_attrib) {
- s = pthread_attr_init(&attr);
- if (s != 0)
- handle_error_en(s, "pthread_attr_init");
- attrp = &attr;
- }
-\&
- if (inheritsched_str != NULL) {
- if (inheritsched_str[0] == \[aq]e\[aq])
- inheritsched = PTHREAD_EXPLICIT_SCHED;
- else if (inheritsched_str[0] == \[aq]i\[aq])
- inheritsched = PTHREAD_INHERIT_SCHED;
- else
- usage(argv[0], "Value for \-i must be \[aq]e\[aq] or \[aq]i\[aq]\en");
-\&
- s = pthread_attr_setinheritsched(&attr, inheritsched);
- if (s != 0)
- handle_error_en(s, "pthread_attr_setinheritsched");
- }
-\&
- if (attr_sched_str != NULL) {
- if (!get_policy(attr_sched_str[0], &policy))
- usage(argv[0], "Bad policy for \[aq]attr\[aq] (\-a)\en");
- param.sched_priority = strtol(&attr_sched_str[1], NULL, 0);
-\&
- s = pthread_attr_setschedpolicy(&attr, policy);
- if (s != 0)
- handle_error_en(s, "pthread_attr_setschedpolicy");
- s = pthread_attr_setschedparam(&attr, &param);
- if (s != 0)
- handle_error_en(s, "pthread_attr_setschedparam");
- }
-\&
- /* If we initialized a thread attributes object, display
- the scheduling attributes that were set in the object. */
-\&
- if (attrp != NULL) {
- s = pthread_attr_getschedparam(&attr, &param);
- if (s != 0)
- handle_error_en(s, "pthread_attr_getschedparam");
- s = pthread_attr_getschedpolicy(&attr, &policy);
- if (s != 0)
- handle_error_en(s, "pthread_attr_getschedpolicy");
-\&
- printf("Scheduler settings in \[aq]attr\[aq]\en");
- display_sched_attr(policy, &param);
-\&
- pthread_attr_getinheritsched(&attr, &inheritsched);
- printf(" inheritsched is %s\en",
- (inheritsched == PTHREAD_INHERIT_SCHED) ? "INHERIT" :
- (inheritsched == PTHREAD_EXPLICIT_SCHED) ? "EXPLICIT" :
- "???");
- printf("\en");
- }
-\&
- /* Create a thread that will display its scheduling attributes. */
-\&
- s = pthread_create(&thread, attrp, &thread_start, NULL);
- if (s != 0)
- handle_error_en(s, "pthread_create");
-\&
- /* Destroy unneeded thread attributes object. */
-\&
- if (!use_null_attrib) {
- s = pthread_attr_destroy(&attr);
- if (s != 0)
- handle_error_en(s, "pthread_attr_destroy");
- }
-\&
- s = pthread_join(thread, NULL);
- if (s != 0)
- handle_error_en(s, "pthread_join");
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.ad l
-.nh
-.BR getrlimit (2),
-.BR sched_get_priority_min (2),
-.BR pthread_attr_init (3),
-.BR pthread_attr_setinheritsched (3),
-.BR pthread_attr_setschedparam (3),
-.BR pthread_attr_setschedpolicy (3),
-.BR pthread_create (3),
-.BR pthread_self (3),
-.BR pthread_setschedprio (3),
-.BR pthreads (7),
-.BR sched (7)
diff --git a/man3/pthread_setschedprio.3 b/man3/pthread_setschedprio.3
deleted file mode 100644
index caa616825..000000000
--- a/man3/pthread_setschedprio.3
+++ /dev/null
@@ -1,104 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_setschedprio 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_setschedprio \- set scheduling priority of a thread
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_setschedprio(pthread_t " thread ", int " prio );
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_setschedprio ()
-function sets the scheduling priority of the thread
-.I thread
-to the value specified in
-.IR prio .
-(By contrast
-.BR pthread_setschedparam (3)
-changes both the scheduling policy and priority of a thread.)
-.\" FIXME . nptl/pthread_setschedprio.c has the following
-.\" /* If the thread should have higher priority because of some
-.\" PTHREAD_PRIO_PROTECT mutexes it holds, adjust the priority. */
-.\" Eventually (perhaps after writing the mutexattr pages), we
-.\" may want to add something on the topic to this page.
-.\" nptl/pthread_setschedparam.c has a similar case.
-.SH RETURN VALUE
-On success, this function returns 0;
-on error, it returns a nonzero error number.
-If
-.BR pthread_setschedprio ()
-fails, the scheduling priority of
-.I thread
-is not changed.
-.SH ERRORS
-.TP
-.B EINVAL
-.I prio
-is not valid for the scheduling policy of the specified thread.
-.TP
-.B EPERM
-The caller does not have appropriate privileges
-to set the specified priority.
-.TP
-.B ESRCH
-No thread with the ID
-.I thread
-could be found.
-.PP
-POSIX.1 also documents an
-.B ENOTSUP
-("attempt was made to set the priority
-to an unsupported value") error for
-.BR pthread_setschedparam (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_setschedprio ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.3.4.
-POSIX.1-2001.
-.SH NOTES
-For a description of the permissions required to, and the effect of,
-changing a thread's scheduling priority,
-and details of the permitted ranges for priorities
-in each scheduling policy, see
-.BR sched (7).
-.SH SEE ALSO
-.ad l
-.nh
-.BR getrlimit (2),
-.BR sched_get_priority_min (2),
-.BR pthread_attr_init (3),
-.BR pthread_attr_setinheritsched (3),
-.BR pthread_attr_setschedparam (3),
-.BR pthread_attr_setschedpolicy (3),
-.BR pthread_create (3),
-.BR pthread_self (3),
-.BR pthread_setschedparam (3),
-.BR pthreads (7),
-.BR sched (7)
diff --git a/man3/pthread_sigmask.3 b/man3/pthread_sigmask.3
deleted file mode 100644
index b4c912e49..000000000
--- a/man3/pthread_sigmask.3
+++ /dev/null
@@ -1,165 +0,0 @@
-'\" t
-.\" Copyright (c) 2009 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_sigmask 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_sigmask \- examine and change mask of blocked signals
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.BI "int pthread_sigmask(int " how ", const sigset_t *" set \
-", sigset_t *" oldset );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR pthread_sigmask ():
-.nf
- _POSIX_C_SOURCE >= 199506L || _XOPEN_SOURCE >= 500
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_sigmask ()
-function is just like
-.BR sigprocmask (2),
-with the difference that its use in multithreaded programs
-is explicitly specified by POSIX.1.
-Other differences are noted in this page.
-.PP
-For a description of the arguments and operation of this function, see
-.BR sigprocmask (2).
-.SH RETURN VALUE
-On success,
-.BR pthread_sigmask ()
-returns 0;
-on error, it returns an error number.
-.SH ERRORS
-See
-.BR sigprocmask (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_sigmask ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-A new thread inherits a copy of its creator's signal mask.
-.PP
-The glibc
-.BR pthread_sigmask ()
-function silently ignores attempts to block the two real-time signals that
-are used internally by the NPTL threading implementation.
-See
-.BR nptl (7)
-for details.
-.SH EXAMPLES
-The program below blocks some signals in the main thread,
-and then creates a dedicated thread to fetch those signals via
-.BR sigwait (3).
-The following shell session demonstrates its use:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out &"
-[1] 5423
-.RB "$" " kill \-QUIT %1"
-Signal handling thread got signal 3
-.RB "$" " kill \-USR1 %1"
-Signal handling thread got signal 10
-.RB "$" " kill \-TERM %1"
-[1]+ Terminated ./a.out
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (pthread_sigmask.c)
-.EX
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-/* Simple error handling functions */
-\&
-#define handle_error_en(en, msg) \e
- do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)
-\&
-static void *
-sig_thread(void *arg)
-{
- sigset_t *set = arg;
- int s, sig;
-\&
- for (;;) {
- s = sigwait(set, &sig);
- if (s != 0)
- handle_error_en(s, "sigwait");
- printf("Signal handling thread got signal %d\en", sig);
- }
-}
-\&
-int
-main(void)
-{
- pthread_t thread;
- sigset_t set;
- int s;
-\&
- /* Block SIGQUIT and SIGUSR1; other threads created by main()
- will inherit a copy of the signal mask. */
-\&
- sigemptyset(&set);
- sigaddset(&set, SIGQUIT);
- sigaddset(&set, SIGUSR1);
- s = pthread_sigmask(SIG_BLOCK, &set, NULL);
- if (s != 0)
- handle_error_en(s, "pthread_sigmask");
-\&
- s = pthread_create(&thread, NULL, &sig_thread, &set);
- if (s != 0)
- handle_error_en(s, "pthread_create");
-\&
- /* Main thread carries on to create other threads and/or do
- other work. */
-\&
- pause(); /* Dummy pause so we can test program */
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR sigaction (2),
-.BR sigpending (2),
-.BR sigprocmask (2),
-.BR pthread_attr_setsigmask_np (3),
-.BR pthread_create (3),
-.BR pthread_kill (3),
-.BR sigsetops (3),
-.BR pthreads (7),
-.BR signal (7)
diff --git a/man3/pthread_sigqueue.3 b/man3/pthread_sigqueue.3
deleted file mode 100644
index cd2c22926..000000000
--- a/man3/pthread_sigqueue.3
+++ /dev/null
@@ -1,112 +0,0 @@
-'\" t
-.\" Copyright (c) 2010 Michael Kerrisk, <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_sigqueue 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_sigqueue \- queue a signal and data to a thread
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.B #include <pthread.h>
-.PP
-.BI "int pthread_sigqueue(pthread_t " thread ", int " sig ,
-.BI " const union sigval " value );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR pthread_sigqueue ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_sigqueue ()
-function performs a similar task to
-.BR sigqueue (3),
-but, rather than sending a signal to a process,
-it sends a signal to a thread in the same process as the
-calling thread.
-.PP
-The
-.I thread
-argument is the ID of a thread in the same process as the caller.
-The
-.I sig
-argument specifies the signal to be sent.
-The
-.I value
-argument specifies data to accompany the signal; see
-.BR sigqueue (3)
-for details.
-.SH RETURN VALUE
-On success,
-.BR pthread_sigqueue ()
-returns 0;
-on error, it returns an error number.
-.SH ERRORS
-.TP
-.B EAGAIN
-The limit of signals which may be queued has been reached.
-(See
-.BR signal (7)
-for further information.)
-.TP
-.B EINVAL
-.I sig
-was invalid.
-.TP
-.B ENOSYS
-.BR pthread_sigqueue ()
-is not supported on this system.
-.TP
-.B ESRCH
-.I thread
-is not valid.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_sigqueue ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The glibc implementation of
-.BR pthread_sigqueue ()
-gives an error
-.RB ( EINVAL )
-on attempts to send either of the real-time signals
-used internally by the NPTL threading implementation.
-See
-.BR nptl (7)
-for details.
-.SH STANDARDS
-GNU.
-.SH HISTORY
-glibc 2.11.
-.SH SEE ALSO
-.BR rt_tgsigqueueinfo (2),
-.BR sigaction (2),
-.BR pthread_sigmask (3),
-.BR sigqueue (3),
-.BR sigwait (3),
-.BR pthreads (7),
-.BR signal (7)
diff --git a/man3/pthread_spin_destroy.3 b/man3/pthread_spin_destroy.3
deleted file mode 100644
index f19c34516..000000000
--- a/man3/pthread_spin_destroy.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_spin_init.3
diff --git a/man3/pthread_spin_init.3 b/man3/pthread_spin_init.3
deleted file mode 100644
index 450134f97..000000000
--- a/man3/pthread_spin_init.3
+++ /dev/null
@@ -1,148 +0,0 @@
-.\" Copyright (c) 2017, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_spin_init 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_spin_init, pthread_spin_destroy \- initialize or destroy a spin lock
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_spin_init(pthread_spinlock_t *" lock ", int " pshared ");"
-.BI "int pthread_spin_destroy(pthread_spinlock_t *" lock ");"
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR pthread_spin_init (),
-.BR pthread_spin_destroy ():
-.nf
- _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-.IR "General note" :
-Most programs should use mutexes
-instead of spin locks.
-Spin locks are primarily useful in conjunction with real-time
-scheduling policies.
-See NOTES.
-.PP
-The
-.BR pthread_spin_init ()
-function allocates any resources required for the use of
-the spin lock referred to by
-.I lock
-and initializes the lock to be in the unlocked state.
-The
-.I pshared
-argument must have one of the following values:
-.TP
-.B PTHREAD_PROCESS_PRIVATE
-The spin lock is to be operated on only by threads in the same process
-as the thread that calls
-.BR pthread_spin_init ().
-(Attempting to share the spin lock between processes
-results in undefined behavior.)
-.TP
-.B PTHREAD_PROCESS_SHARED
-The spin lock may be operated on by any thread in any process that
-has access to the memory containing the lock
-(i.e., the lock may be in a shared memory object that is
-shared among multiple processes).
-.PP
-Calling
-.BR pthread_spin_init ()
-on a spin lock that has already been initialized results
-in undefined behavior.
-.PP
-The
-.BR pthread_spin_destroy ()
-function destroys a previously initialized spin lock,
-freeing any resources that were allocated for that lock.
-Destroying a spin lock that has not been previously been initialized
-or destroying a spin lock while another thread holds the lock
-results in undefined behavior.
-.PP
-Once a spin lock has been destroyed,
-performing any operation on the lock other than
-once more initializing it with
-.BR pthread_spin_init ()
-results in undefined behavior.
-.PP
-The result of performing operations such as
-.BR pthread_spin_lock (3),
-.BR pthread_spin_unlock (3),
-and
-.BR pthread_spin_destroy ()
-on
-.I copies
-of the object referred to by
-.I lock
-is undefined.
-.SH RETURN VALUE
-On success, there functions return zero.
-On failure, they return an error number.
-In the event that
-.BR pthread_spin_init ()
-fails, the lock is not initialized.
-.SH ERRORS
-.BR pthread_spin_init ()
-may fail with the following errors:
-.\" These errors don't occur on the glibc implementation
-.TP
-.B EAGAIN
-The system has insufficient resources to initialize
-a new spin lock.
-.TP
-.B ENOMEM
-Insufficient memory to initialize the spin lock.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.2.
-POSIX.1-2001.
-.PP
-Support for process-shared spin locks is a POSIX option.
-The option is supported in the glibc implementation.
-.SH NOTES
-Spin locks should be employed in conjunction with
-real-time scheduling policies
-.RB ( SCHED_FIFO ,
-or possibly
-.BR SCHED_RR ).
-Use of spin locks with nondeterministic scheduling policies such as
-.B SCHED_OTHER
-probably indicates a design mistake.
-The problem is that if a thread operating under such a policy
-is scheduled off the CPU while it holds a spin lock,
-then other threads will waste time spinning on the lock
-until the lock holder is once more rescheduled and releases the lock.
-.PP
-If threads create a deadlock situation while employing spin locks,
-those threads will spin forever consuming CPU time.
-.PP
-User-space spin locks are
-.I not
-applicable as a general locking solution.
-They are, by definition,
-prone to priority inversion and unbounded spin times.
-A programmer using spin locks must be exceptionally careful not
-only in the code, but also in terms of system configuration,
-thread placement, and priority assignment.
-.\" FIXME . When PTHREAD_MUTEX_ADAPTIVE_NP is one day document
-.\" make reference to it here
-.SH SEE ALSO
-.ad l
-.nh
-.BR pthread_mutex_init (3),
-.BR pthread_mutex_lock (3),
-.BR pthread_spin_lock (3),
-.BR pthread_spin_unlock (3),
-.BR pthreads (7)
diff --git a/man3/pthread_spin_lock.3 b/man3/pthread_spin_lock.3
deleted file mode 100644
index 37898861a..000000000
--- a/man3/pthread_spin_lock.3
+++ /dev/null
@@ -1,102 +0,0 @@
-.\" Copyright (c) 2017, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_spin_lock 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock \-
-lock and unlock a spin lock
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.BI "int pthread_spin_lock(pthread_spinlock_t *" lock );
-.BI "int pthread_spin_trylock(pthread_spinlock_t *" lock );
-.BI "int pthread_spin_unlock(pthread_spinlock_t *" lock );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR pthread_spin_lock (),
-.BR pthread_spin_trylock ():
-.nf
- _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-The
-.BR pthread_spin_lock ()
-function locks the spin lock referred to by
-.IR lock .
-If the spin lock is currently unlocked,
-the calling thread acquires the lock immediately.
-If the spin lock is currently locked by another thread,
-the calling thread spins, testing the lock until it becomes available,
-at which point the calling thread acquires the lock.
-.PP
-Calling
-.BR pthread_spin_lock ()
-on a lock that is already held by the caller
-or a lock that has not been initialized with
-.BR pthread_spin_init (3)
-results in undefined behavior.
-.PP
-The
-.BR pthread_spin_trylock ()
-function is like
-.BR pthread_spin_lock (),
-except that if the spin lock referred to by
-.I lock
-is currently locked,
-then, instead of spinning, the call returns immediately with the error
-.BR EBUSY .
-.PP
-The
-.BR pthread_spin_unlock ()
-function unlocks the spin lock referred to
-.IR lock .
-If any threads are spinning on the lock,
-one of those threads will then acquire the lock.
-.PP
-Calling
-.BR pthread_spin_unlock ()
-on a lock that is not held by the caller results in undefined behavior.
-.SH RETURN VALUE
-On success, these functions return zero.
-On failure, they return an error number.
-.SH ERRORS
-.BR pthread_spin_lock ()
-may fail with the following errors:
-.TP
-.B EDEADLOCK
-.\" Not detected in glibc
-The system detected a deadlock condition.
-.PP
-.BR pthread_spin_trylock ()
-fails with the following errors:
-.TP
-.B EBUSY
-The spin lock is currently locked by another thread.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.2.
-POSIX.1-2001.
-.SH CAVEATS
-Applying any of the functions described on this page to
-an uninitialized spin lock results in undefined behavior.
-.PP
-Carefully read NOTES in
-.BR pthread_spin_init (3).
-.SH SEE ALSO
-.ad l
-.nh
-.\" FIXME . .BR pthread_mutex_lock (3),
-.BR pthread_spin_destroy (3),
-.BR pthread_spin_init (3),
-.BR pthreads (7)
diff --git a/man3/pthread_spin_trylock.3 b/man3/pthread_spin_trylock.3
deleted file mode 100644
index ad2969afc..000000000
--- a/man3/pthread_spin_trylock.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_spin_lock.3
diff --git a/man3/pthread_spin_unlock.3 b/man3/pthread_spin_unlock.3
deleted file mode 100644
index ad2969afc..000000000
--- a/man3/pthread_spin_unlock.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_spin_lock.3
diff --git a/man3/pthread_testcancel.3 b/man3/pthread_testcancel.3
deleted file mode 100644
index b976e1c78..000000000
--- a/man3/pthread_testcancel.3
+++ /dev/null
@@ -1,67 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_testcancel 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_testcancel \- request delivery of any pending cancelation request
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <pthread.h>
-.PP
-.B void pthread_testcancel(void);
-.fi
-.SH DESCRIPTION
-Calling
-.BR pthread_testcancel ()
-creates a cancelation point within the calling thread,
-so that a thread that is otherwise executing code that contains
-no cancelation points will respond to a cancelation request.
-.PP
-If cancelability is disabled (using
-.BR pthread_setcancelstate (3)),
-or no cancelation request is pending,
-then a call to
-.BR pthread_testcancel ()
-has no effect.
-.SH RETURN VALUE
-This function does not return a value.
-If the calling thread is canceled as a consequence of a call
-to this function, then the function does not return.
-.SH ERRORS
-This function always succeeds.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_testcancel ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.0.
-POSIX.1-2001.
-.SH EXAMPLES
-See
-.BR pthread_cleanup_push (3).
-.SH SEE ALSO
-.BR pthread_cancel (3),
-.BR pthread_cleanup_push (3),
-.BR pthread_setcancelstate (3),
-.BR pthreads (7)
diff --git a/man3/pthread_timedjoin_np.3 b/man3/pthread_timedjoin_np.3
deleted file mode 100644
index a741f46b5..000000000
--- a/man3/pthread_timedjoin_np.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/pthread_tryjoin_np.3
diff --git a/man3/pthread_tryjoin_np.3 b/man3/pthread_tryjoin_np.3
deleted file mode 100644
index ea6afb46d..000000000
--- a/man3/pthread_tryjoin_np.3
+++ /dev/null
@@ -1,157 +0,0 @@
-'\" t
-.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_tryjoin_np 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_tryjoin_np, pthread_timedjoin_np \- try to join with a
-terminated thread
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <pthread.h>
-.PP
-.BI "int pthread_tryjoin_np(pthread_t " thread ", void **" retval );
-.BI "int pthread_timedjoin_np(pthread_t " thread ", void **" retval ,
-.BI " const struct timespec *" abstime );
-.fi
-.SH DESCRIPTION
-These functions operate in the same way as
-.BR pthread_join (3),
-except for the differences described on this page.
-.PP
-The
-.BR pthread_tryjoin_np ()
-function performs a nonblocking join with the thread
-.IR thread ,
-returning the exit status of the thread in
-.IR *retval .
-If
-.I thread
-has not yet terminated, then instead of blocking, as is done by
-.BR pthread_join (3),
-the call returns an error.
-.PP
-The
-.BR pthread_timedjoin_np ()
-function performs a join-with-timeout.
-If
-.I thread
-has not yet terminated,
-then the call blocks until a maximum time, specified in
-.IR abstime ,
-measured against the
-.B CLOCK_REALTIME
-clock.
-If the timeout expires before
-.I thread
-terminates,
-the call returns an error.
-The
-.I abstime
-argument is a
-.BR timespec (3)
-structure,
-specifying an absolute time measured since the Epoch (see
-.BR time (2)).
-.SH RETURN VALUE
-On success,
-these functions return 0;
-on error, they return an error number.
-.SH ERRORS
-These functions can fail with the same errors as
-.BR pthread_join (3).
-.BR pthread_tryjoin_np ()
-can in addition fail with the following error:
-.TP
-.B EBUSY
-.I thread
-had not yet terminated at the time of the call.
-.PP
-.BR pthread_timedjoin_np ()
-can in addition fail with the following errors:
-.TP
-.B EINVAL
-.I abstime
-value is invalid
-.RI ( tv_sec
-is less than 0 or
-.I tv_nsec
-is greater than 1e9).
-.TP
-.B ETIMEDOUT
-The call timed out before
-.I thread
-terminated.
-.PP
-.BR pthread_timedjoin_np ()
-never returns the error
-.BR EINTR .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_tryjoin_np (),
-.BR pthread_timedjoin_np ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU;
-hence the suffix "_np" (nonportable) in the names.
-.SH HISTORY
-glibc 2.3.3.
-.SH BUGS
-The
-.BR pthread_timedjoin_np ()
-function measures time by internally calculating a relative sleep interval
-that is then measured against the
-.B CLOCK_MONOTONIC
-clock instead of the
-.B CLOCK_REALTIME
-clock.
-Consequently, the timeout is unaffected by discontinuous changes to the
-.B CLOCK_REALTIME
-clock.
-.SH EXAMPLES
-The following code waits to join for up to 5 seconds:
-.PP
-.in +4n
-.EX
-struct timespec ts;
-int s;
-\&
-\&...
-\&
-if (clock_gettime(CLOCK_REALTIME, &ts) == \-1) {
- /* Handle error */
-}
-\&
-ts.tv_sec += 5;
-\&
-s = pthread_timedjoin_np(thread, NULL, &ts);
-if (s != 0) {
- /* Handle error */
-}
-.EE
-.in
-.SH SEE ALSO
-.BR clock_gettime (2),
-.BR pthread_exit (3),
-.BR pthread_join (3),
-.BR timespec (3),
-.BR pthreads (7)
diff --git a/man3/pthread_yield.3 b/man3/pthread_yield.3
deleted file mode 100644
index ec57bdaef..000000000
--- a/man3/pthread_yield.3
+++ /dev/null
@@ -1,81 +0,0 @@
-'\" t
-.\" Copyright (c) 2009 Michael Kerrisk, <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthread_yield 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthread_yield \- yield the processor
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <pthread.h>
-.PP
-.B [[deprecated]] int pthread_yield(void);
-.fi
-.SH DESCRIPTION
-.BR Note :
-This function is deprecated; see below.
-.PP
-.BR pthread_yield ()
-causes the calling thread to relinquish the CPU.
-The thread is placed at the end of the run queue for its static
-priority and another thread is scheduled to run.
-For further details, see
-.BR sched_yield (2)
-.SH RETURN VALUE
-On success,
-.BR pthread_yield ()
-returns 0;
-on error, it returns an error number.
-.SH ERRORS
-On Linux, this call always succeeds
-(but portable and future-proof applications should nevertheless
-handle a possible error return).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR pthread_yield ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-On Linux, this function is implemented as a call to
-.BR sched_yield (2).
-.SH STANDARDS
-None.
-.SH HISTORY
-.\" BSD, Tru64, AIX, and Irix.
-Deprecated since glibc 2.34.
-Use the standardized
-.BR sched_yield (2)
-instead.
-.SH NOTES
-.BR pthread_yield ()
-is intended for use with real-time scheduling policies (i.e.,
-.B SCHED_FIFO
-or
-.BR SCHED_RR ).
-Use of
-.BR pthread_yield ()
-with nondeterministic scheduling policies such as
-.B SCHED_OTHER
-is unspecified and very likely means your application design is broken.
-.SH SEE ALSO
-.BR sched_yield (2),
-.\" FIXME . .BR pthread_cond_wait (3),
-.BR pthreads (7),
-.BR sched (7)
diff --git a/man3/ptsname.3 b/man3/ptsname.3
deleted file mode 100644
index d42ef713f..000000000
--- a/man3/ptsname.3
+++ /dev/null
@@ -1,147 +0,0 @@
-'\" t
-.\" %%%LICENSE_START(PUBLIC_DOMAIN)
-.\" This page is in the public domain. - aeb
-.\" %%%LICENSE_END
-.\"
-.\" 2004-12-17, mtk, added description of ptsname_r() + ERRORS
-.\"
-.TH ptsname 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ptsname, ptsname_r \- get the name of the slave pseudoterminal
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "char *ptsname(int " fd );
-.BI "int ptsname_r(int " fd ", char " buf [. buflen "], size_t " buflen );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR ptsname ():
-.nf
- Since glibc 2.24:
- _XOPEN_SOURCE >= 500
-.\" || (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED)
- glibc 2.23 and earlier:
- _XOPEN_SOURCE
-.fi
-.PP
-.BR ptsname_r ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR ptsname ()
-function returns the name of the slave pseudoterminal device
-corresponding to the master referred to by the file descriptor
-.IR fd .
-.PP
-The
-.BR ptsname_r ()
-function is the reentrant equivalent of
-.BR ptsname ().
-It returns the name of the slave pseudoterminal device as a
-null-terminated string in the buffer pointed to by
-.IR buf .
-The
-.I buflen
-argument specifies the number of bytes available in
-.IR buf .
-.SH RETURN VALUE
-On success,
-.BR ptsname ()
-returns a pointer to a string in static storage which will be
-overwritten by subsequent calls.
-This pointer must not be freed.
-On failure, NULL is returned.
-.PP
-On success,
-.BR ptsname_r ()
-returns 0.
-On failure, an error number is returned to indicate the error.
-.\" In glibc, the error number is not only returned as the return value
-.\" but also stored in errno. But this is not true for musl libc.
-.SH ERRORS
-.TP
-.B EINVAL
-.RB ( ptsname_r ()
-only)
-.I buf
-is NULL.
-(This error is returned only for
-.\" glibc commit 8f0a947cf55f3b0c4ebdf06953c57eff67a22fa9
-glibc 2.25 and earlier.)
-.TP
-.B ENOTTY
-.I fd
-does not refer to a pseudoterminal master device.
-.TP
-.B ERANGE
-.RB ( ptsname_r ()
-only)
-.I buf
-is too small.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ptsname ()
-T} Thread safety MT-Unsafe race:ptsname
-T{
-.BR ptsname_r ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-A version of
-.BR ptsname_r ()
-is documented on Tru64 and HP-UX,
-but on those implementations,
-\-1 is returned on error, with
-.I errno
-set to indicate the error.
-Avoid using this function in portable programs.
-.SH STANDARDS
-.TP
-.BR ptsname ():
-POSIX.1-2008.
-.PP
-.BR ptsname_r ()
-is a Linux extension, that is proposed for inclusion
-.\" FIXME . for later review when Issue 8 is one day released
-.\" http://austingroupbugs.net/tag_view_page.php?tag_id=8
-.\" http://austingroupbugs.net/view.php?id=508
-in the next major revision of POSIX.1 (Issue 8).
-.SH HISTORY
-.TP
-.BR ptsname ():
-POSIX.1-2001.
-glibc 2.1.
-.PP
-.BR ptsname ()
-is part of the UNIX 98 pseudoterminal support (see
-.BR pts (4)).
-.SH SEE ALSO
-.BR grantpt (3),
-.BR posix_openpt (3),
-.BR ttyname (3),
-.BR unlockpt (3),
-.BR pts (4),
-.BR pty (7)
diff --git a/man3/ptsname_r.3 b/man3/ptsname_r.3
deleted file mode 100644
index 0a5f98d4e..000000000
--- a/man3/ptsname_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ptsname.3
diff --git a/man3/putc.3 b/man3/putc.3
deleted file mode 100644
index a7c3b57fc..000000000
--- a/man3/putc.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/puts.3
diff --git a/man3/putc_unlocked.3 b/man3/putc_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/putc_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/putchar.3 b/man3/putchar.3
deleted file mode 100644
index a7c3b57fc..000000000
--- a/man3/putchar.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/puts.3
diff --git a/man3/putchar_unlocked.3 b/man3/putchar_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/putchar_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/putenv.3 b/man3/putenv.3
deleted file mode 100644
index b29c71399..000000000
--- a/man3/putenv.3
+++ /dev/null
@@ -1,144 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Single UNIX Specification, Version 2
-.\" Modified Thu Apr 8 15:00:12 1993, David Metcalfe
-.\" Modified Sat Jul 24 18:44:45 1993, Rik Faith (faith@cs.unc.edu)
-.\" Modified Fri Feb 14 21:47:50 1997 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified Mon Oct 11 11:11:11 1999 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified Wed Nov 10 00:02:26 1999 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified Sun May 20 22:17:20 2001 by Andries Brouwer (aeb@cwi.nl)
-.TH putenv 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-putenv \- change or add an environment variable
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int putenv(char *" string );
-.\" Not: const char *
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR putenv ():
-.nf
- _XOPEN_SOURCE
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR putenv ()
-function adds or changes the value of environment
-variables.
-The argument \fIstring\fP is of the form \fIname\fP=\fIvalue\fP.
-If \fIname\fP does not already exist in the environment, then
-\fIstring\fP is added to the environment.
-If \fIname\fP does exist,
-then the value of \fIname\fP in the environment is changed to
-\fIvalue\fP.
-The string pointed to by \fIstring\fP becomes part of the environment,
-so altering the string changes the environment.
-.SH RETURN VALUE
-The
-.BR putenv ()
-function returns zero on success.
-On failure, it returns a nonzero value, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B ENOMEM
-Insufficient space to allocate new environment.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR putenv ()
-T} Thread safety MT-Unsafe const:env
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr2, 4.3BSD-Reno.
-.PP
-The
-.BR putenv ()
-function is not required to be reentrant, and the
-one in glibc 2.0 is not, but the glibc 2.1 version is.
-.\" .LP
-.\" Description for libc4, libc5, glibc:
-.\" If the argument \fIstring\fP is of the form \fIname\fP,
-.\" and does not contain an \[aq]=\[aq] character, then the variable \fIname\fP
-.\" is removed from the environment.
-.\" If
-.\" .BR putenv ()
-.\" has to allocate a new array \fIenviron\fP,
-.\" and the previous array was also allocated by
-.\" .BR putenv (),
-.\" then it will be freed.
-.\" In no case will the old storage associated
-.\" to the environment variable itself be freed.
-.PP
-Since glibc 2.1.2, the glibc implementation conforms to SUSv2:
-the pointer \fIstring\fP given to
-.BR putenv ()
-is used.
-In particular, this string becomes part of the environment;
-changing it later will change the environment.
-(Thus, it is an error to call
-.BR putenv ()
-with an automatic variable
-as the argument, then return from the calling function while \fIstring\fP
-is still part of the environment.)
-However, from glibc 2.0 to glibc 2.1.1, it differs:
-a copy of the string is used.
-On the one hand this causes a memory leak, and on the other hand
-it violates SUSv2.
-.PP
-The 4.3BSD-Reno version, like glibc 2.0, uses a copy;
-this is fixed in all modern BSDs.
-.PP
-SUSv2 removes the \fIconst\fP from the prototype, and so does glibc 2.1.3.
-.PP
-The GNU C library implementation provides a nonstandard extension.
-If
-.I string
-does not include an equal sign:
-.PP
-.in +4n
-.EX
-putenv("NAME");
-.EE
-.in
-.PP
-then the named variable is removed from the caller's environment.
-.SH SEE ALSO
-.BR clearenv (3),
-.BR getenv (3),
-.BR setenv (3),
-.BR unsetenv (3),
-.BR environ (7)
diff --git a/man3/putgrent.3 b/man3/putgrent.3
deleted file mode 100644
index 2373de1e6..000000000
--- a/man3/putgrent.3
+++ /dev/null
@@ -1,69 +0,0 @@
-'\" t
-.\" Copyright 2003 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH putgrent 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-putgrent \- write a group database entry to a file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <grp.h>
-.PP
-.BI "int putgrent(const struct group *restrict " grp \
-", FILE *restrict " stream );
-.fi
-.SH DESCRIPTION
-The
-.BR putgrent ()
-function is the counterpart for
-.BR fgetgrent (3).
-The function writes the content of the provided
-.I struct group
-into the
-.IR stream .
-The list of group members must be NULL-terminated or NULL-initialized.
-.PP
-The
-.I struct group
-is defined as follows:
-.PP
-.in +4n
-.EX
-struct group {
- char *gr_name; /* group name */
- char *gr_passwd; /* group password */
- gid_t gr_gid; /* group ID */
- char **gr_mem; /* group members */
-};
-.EE
-.in
-.SH RETURN VALUE
-The function returns zero on success, and a nonzero value on error.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR putgrent ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH SEE ALSO
-.BR fgetgrent (3),
-.BR getgrent (3),
-.BR group (5)
diff --git a/man3/putpwent.3 b/man3/putpwent.3
deleted file mode 100644
index 7683c5319..000000000
--- a/man3/putpwent.3
+++ /dev/null
@@ -1,99 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:43:46 1993 by Rik Faith (faith@cs.unc.edu)
-.TH putpwent 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-putpwent \- write a password file entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.B #include <sys/types.h>
-.B #include <pwd.h>
-.PP
-.BI "int putpwent(const struct passwd *restrict " p \
-", FILE *restrict " stream );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR putpwent ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR putpwent ()
-function writes a password entry from the
-structure \fIp\fP in the file associated with \fIstream\fP.
-.PP
-The \fIpasswd\fP structure is defined in \fI<pwd.h>\fP as follows:
-.PP
-.in +4n
-.EX
-struct passwd {
- char *pw_name; /* username */
- char *pw_passwd; /* user password */
- uid_t pw_uid; /* user ID */
- gid_t pw_gid; /* group ID */
- char *pw_gecos; /* real name */
- char *pw_dir; /* home directory */
- char *pw_shell; /* shell program */
-};
-.EE
-.in
-.SH RETURN VALUE
-The
-.BR putpwent ()
-function returns 0 on success.
-On failure, it returns \-1, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-Invalid (NULL) argument given.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR putpwent ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-SVr4.
-.SH SEE ALSO
-.BR endpwent (3),
-.BR fgetpwent (3),
-.BR getpw (3),
-.BR getpwent (3),
-.BR getpwnam (3),
-.BR getpwuid (3),
-.BR setpwent (3)
diff --git a/man3/puts.3 b/man3/puts.3
deleted file mode 100644
index 34e3a6108..000000000
--- a/man3/puts.3
+++ /dev/null
@@ -1,127 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 18:42:59 1993 by Rik Faith (faith@cs.unc.edu)
-.TH puts 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fputc, fputs, putc, putchar, puts \- output of characters and strings
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "int fputc(int " c ", FILE *" stream );
-.BI "int putc(int " c ", FILE *" stream );
-.BI "int putchar(int " c );
-.PP
-.BI "int fputs(const char *restrict " s ", FILE *restrict " stream );
-.BI "int puts(const char *" s );
-.fi
-.SH DESCRIPTION
-.BR fputc ()
-writes the character
-.IR c ,
-cast to an
-.IR "unsigned char" ,
-to
-.IR stream .
-.PP
-.BR putc ()
-is equivalent to
-.BR fputc ()
-except that it may be implemented as a macro which evaluates
-.I stream
-more than once.
-.PP
-.BI "putchar(" c )
-is equivalent to
-.BI "putc(" c ", " stdout ) \fR.
-.PP
-.BR fputs ()
-writes the string
-.I s
-to
-.IR stream ,
-without its terminating null byte (\[aq]\e0\[aq]).
-.PP
-.BR puts ()
-writes the string
-.I s
-and a trailing newline
-to
-.IR stdout .
-.PP
-Calls to the functions described here can be mixed with each other and with
-calls to other output functions from the
-.I stdio
-library for the same output stream.
-.PP
-For nonlocking counterparts, see
-.BR unlocked_stdio (3).
-.SH RETURN VALUE
-.BR fputc (),
-.BR putc (),
-and
-.BR putchar ()
-return the character written as an
-.I unsigned char
-cast to an
-.I int
-or
-.B EOF
-on error.
-.PP
-.BR puts ()
-and
-.BR fputs ()
-return a nonnegative number on success, or
-.B EOF
-on error.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR fputc (),
-.BR fputs (),
-.BR putc (),
-.BR putchar (),
-.BR puts ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, C99.
-.SH BUGS
-It is not advisable to mix calls to output functions from the
-.I stdio
-library with low-level calls to
-.BR write (2)
-for the file descriptor associated with the same output stream; the results
-will be undefined and very probably not what you want.
-.SH SEE ALSO
-.BR write (2),
-.BR ferror (3),
-.BR fgets (3),
-.BR fopen (3),
-.BR fputwc (3),
-.BR fputws (3),
-.BR fseek (3),
-.BR fwrite (3),
-.BR putwchar (3),
-.BR scanf (3),
-.BR unlocked_stdio (3)
diff --git a/man3/putspent.3 b/man3/putspent.3
deleted file mode 100644
index 142c5a5ca..000000000
--- a/man3/putspent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getspnam.3
diff --git a/man3/pututline.3 b/man3/pututline.3
deleted file mode 100644
index 29c36b72a..000000000
--- a/man3/pututline.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getutent.3
diff --git a/man3/pututxline.3 b/man3/pututxline.3
deleted file mode 100644
index 29c36b72a..000000000
--- a/man3/pututxline.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getutent.3
diff --git a/man3/putw.3 b/man3/putw.3
deleted file mode 100644
index 750934559..000000000
--- a/man3/putw.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getw.3
diff --git a/man3/putwc.3 b/man3/putwc.3
deleted file mode 100644
index 81826be5d..000000000
--- a/man3/putwc.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fputwc.3
diff --git a/man3/putwc_unlocked.3 b/man3/putwc_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/putwc_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/putwchar.3 b/man3/putwchar.3
deleted file mode 100644
index f6c7fd750..000000000
--- a/man3/putwchar.3
+++ /dev/null
@@ -1,95 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification
-.\" http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH putwchar 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-putwchar \- write a wide character to standard output
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wint_t putwchar(wchar_t " wc );
-.fi
-.SH DESCRIPTION
-The
-.BR putwchar ()
-function is the wide-character equivalent of the
-.BR putchar (3)
-function.
-It writes the wide character
-.I wc
-to
-.IR stdout .
-If
-.I ferror(stdout)
-becomes true, it returns
-.BR WEOF .
-If a wide character
-conversion error occurs, it sets
-.I errno
-to
-.B EILSEQ
-and returns
-.BR WEOF .
-Otherwise, it returns
-.IR wc .
-.PP
-For a nonlocking counterpart, see
-.BR unlocked_stdio (3).
-.SH RETURN VALUE
-The
-.BR putwchar ()
-function returns
-.I wc
-if no error occurred, or
-.B WEOF
-to indicate an error.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR putwchar ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR putwchar ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.PP
-It is reasonable to expect that
-.BR putwchar ()
-will actually write
-the multibyte sequence corresponding to the wide character
-.IR wc .
-.SH SEE ALSO
-.BR fputwc (3),
-.BR unlocked_stdio (3)
diff --git a/man3/putwchar_unlocked.3 b/man3/putwchar_unlocked.3
deleted file mode 100644
index 858bd0849..000000000
--- a/man3/putwchar_unlocked.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/unlocked_stdio.3
diff --git a/man3/pvalloc.3 b/man3/pvalloc.3
deleted file mode 100644
index 791d4c801..000000000
--- a/man3/pvalloc.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/posix_memalign.3
diff --git a/man3/qecvt.3 b/man3/qecvt.3
deleted file mode 100644
index 78bcc88c3..000000000
--- a/man3/qecvt.3
+++ /dev/null
@@ -1,109 +0,0 @@
-'\" t
-.\" Copyright (C) 2002 Andries Brouwer <aeb@cwi.nl>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" This replaces an earlier man page written by Walter Harms
-.\" <walter.harms@informatik.uni-oldenburg.de>.
-.\"
-.TH qecvt 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-qecvt, qfcvt, qgcvt \- convert a floating-point number to a string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "[[deprecated]] char *qecvt(long double " number ", int " ndigits ,
-.BI " int *restrict " decpt ", int *restrict " sign );
-.BI "[[deprecated]] char *qfcvt(long double " number ", int " ndigits ,
-.BI " int *restrict " decpt ", int *restrict " sign );
-.BI "[[deprecated]] char *qgcvt(long double " number ", int " ndigit ", char *" buf );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR qecvt (),
-.BR qfcvt (),
-.BR qgcvt ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- In glibc up to and including 2.19:
- _SVID_SOURCE
-.fi
-.\" FIXME . The full FTM picture looks to have been something like the
-.\" following mess:
-.\" glibc 2.20 onward
-.\" _DEFAULT_SOURCE
-.\" glibc 2.18 to glibc 2.19
-.\" _BSD_SOURCE || _SVID_SOURCE
-.\" glibc 2.10 to glibc 2.17
-.\" _SVID_SOURCE || (_XOPEN_SOURCE >= 500 ||
-.\" (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) &&
-.\" ! (_POSIX_C_SOURCE >= 200809L))
-.\" Before glibc 2.10:
-.\" _SVID_SOURCE || _XOPEN_SOURCE >= 500 ||
-.\" (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED)
-.SH DESCRIPTION
-The functions
-.BR qecvt (),
-.BR qfcvt (),
-and
-.BR qgcvt ()
-are identical to
-.BR ecvt (3),
-.BR fcvt (3),
-and
-.BR gcvt (3)
-respectively, except that they use a
-.I "long double"
-argument
-.IR number .
-See
-.BR ecvt (3)
-and
-.BR gcvt (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR qecvt ()
-T} Thread safety MT-Unsafe race:qecvt
-T{
-.BR qfcvt ()
-T} Thread safety MT-Unsafe race:qfcvt
-T{
-.BR qgcvt ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-SVr4, SunOS, GNU.
-.\" Not supported by libc4 and libc5.
-.PP
-These functions are obsolete.
-Instead,
-.BR snprintf (3)
-is recommended.
-.SH SEE ALSO
-.BR ecvt (3),
-.BR ecvt_r (3),
-.BR gcvt (3),
-.BR sprintf (3)
diff --git a/man3/qecvt_r.3 b/man3/qecvt_r.3
deleted file mode 100644
index 41ce9ee8a..000000000
--- a/man3/qecvt_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ecvt_r.3
diff --git a/man3/qfcvt.3 b/man3/qfcvt.3
deleted file mode 100644
index 7e583109e..000000000
--- a/man3/qfcvt.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/qecvt.3
diff --git a/man3/qfcvt_r.3 b/man3/qfcvt_r.3
deleted file mode 100644
index 41ce9ee8a..000000000
--- a/man3/qfcvt_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ecvt_r.3
diff --git a/man3/qgcvt.3 b/man3/qgcvt.3
deleted file mode 100644
index 7e583109e..000000000
--- a/man3/qgcvt.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/qecvt.3
diff --git a/man3/qsort.3 b/man3/qsort.3
deleted file mode 100644
index 955f8cb43..000000000
--- a/man3/qsort.3
+++ /dev/null
@@ -1,160 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\"
-.\" Modified 1993-03-29, David Metcalfe
-.\" Modified 1993-07-24, Rik Faith (faith@cs.unc.edu)
-.\" 2006-01-15, mtk, Added example program.
-.\" Modified 2012-03-08, Mark R. Bannister <cambridge@users.sourceforge.net>
-.\" and Ben Bacarisse <software@bsb.me.uk>
-.\" Document qsort_r()
-.\"
-.TH qsort 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-qsort, qsort_r \- sort an array
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "void qsort(void " base [. size " * ." nmemb "], size_t " nmemb ", \
-size_t " size ,
-.BI " int (*" compar ")(const void [." size "], \
-const void [." size ]));
-.BI "void qsort_r(void " base [. size " * ." nmemb "], size_t " nmemb ", \
-size_t " size ,
-.BI " int (*" compar ")(const void [." size "], \
-const void [." size "], void *),"
-.BI " void *" arg ");"
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR qsort_r ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR qsort ()
-function sorts an array with \fInmemb\fP elements of
-size \fIsize\fP.
-The \fIbase\fP argument points to the start of the
-array.
-.PP
-The contents of the array are sorted in ascending order according to a
-comparison function pointed to by \fIcompar\fP, which is called with two
-arguments that point to the objects being compared.
-.PP
-The comparison function must return an integer less than, equal to, or
-greater than zero if the first argument is considered to be respectively
-less than, equal to, or greater than the second.
-If two members compare as equal,
-their order in the sorted array is undefined.
-.PP
-The
-.BR qsort_r ()
-function is identical to
-.BR qsort ()
-except that the comparison function
-.I compar
-takes a third argument.
-A pointer is passed to the comparison function via
-.IR arg .
-In this way, the comparison function does not need to use global variables to
-pass through arbitrary arguments, and is therefore reentrant and safe to
-use in threads.
-.SH RETURN VALUE
-The
-.BR qsort ()
-and
-.BR qsort_r ()
-functions return no value.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR qsort (),
-.BR qsort_r ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR qsort ()
-C11, POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR qsort ()
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.TP
-.BR qsort_r ()
-glibc 2.8.
-.SH NOTES
-To compare C strings, the comparison function can call
-.BR strcmp (3),
-as shown in the example below.
-.SH EXAMPLES
-For one example of use, see the example under
-.BR bsearch (3).
-.PP
-Another example is the following program,
-which sorts the strings given in its command-line arguments:
-.PP
-.\" SRC BEGIN (qsort.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-static int
-cmpstringp(const void *p1, const void *p2)
-{
- /* The actual arguments to this function are "pointers to
- pointers to char", but strcmp(3) arguments are "pointers
- to char", hence the following cast plus dereference. */
-\&
- return strcmp(*(const char **) p1, *(const char **) p2);
-}
-\&
-int
-main(int argc, char *argv[])
-{
- if (argc < 2) {
- fprintf(stderr, "Usage: %s <string>...\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- qsort(&argv[1], argc \- 1, sizeof(char *), cmpstringp);
-\&
- for (size_t j = 1; j < argc; j++)
- puts(argv[j]);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR sort (1),
-.BR alphasort (3),
-.BR strcmp (3),
-.BR versionsort (3)
diff --git a/man3/qsort_r.3 b/man3/qsort_r.3
deleted file mode 100644
index d073335b4..000000000
--- a/man3/qsort_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/qsort.3
diff --git a/man3/queue.3 b/man3/queue.3
deleted file mode 100644
index 000e4b150..000000000
--- a/man3/queue.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/queue.7
diff --git a/man3/raise.3 b/man3/raise.3
deleted file mode 100644
index 89afd746e..000000000
--- a/man3/raise.3
+++ /dev/null
@@ -1,86 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\" and Copyright (C) 2008 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 18:40:56 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 1995 by Mike Battersby (mib@deakin.edu.au)
-.\"
-.TH raise 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-raise \- send a signal to the caller
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.BI "int raise(int " sig );
-.fi
-.SH DESCRIPTION
-The
-.BR raise ()
-function sends a signal to the calling process or thread.
-In a single-threaded program it is equivalent to
-.PP
-.in +4n
-.EX
-kill(getpid(), sig);
-.EE
-.in
-.PP
-In a multithreaded program it is equivalent to
-.PP
-.in +4n
-.EX
-pthread_kill(pthread_self(), sig);
-.EE
-.in
-.PP
-If the signal causes a handler to be called,
-.BR raise ()
-will return only after the signal handler has returned.
-.SH RETURN VALUE
-.BR raise ()
-returns 0 on success, and nonzero for failure.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR raise ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89.
-.PP
-Since glibc 2.3.3,
-.BR raise ()
-is implemented by calling
-.BR tgkill (2),
-.\" 2.3.2 used the obsolete tkill(), if available.
-if the kernel supports that system call.
-Older glibc versions implemented
-.BR raise ()
-using
-.BR kill (2).
-.SH SEE ALSO
-.BR getpid (2),
-.BR kill (2),
-.BR sigaction (2),
-.BR signal (2),
-.BR pthread_kill (3),
-.BR signal (7)
diff --git a/man3/rand.3 b/man3/rand.3
deleted file mode 100644
index 8dfd80fb1..000000000
--- a/man3/rand.3
+++ /dev/null
@@ -1,243 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\"
-.\" Modified 1993-03-29, David Metcalfe
-.\" Modified 1993-04-28, Lars Wirzenius
-.\" Modified 1993-07-24, Rik Faith (faith@cs.unc.edu)
-.\" Modified 1995-05-18, Rik Faith (faith@cs.unc.edu) to add
-.\" better discussion of problems with rand on other systems.
-.\" (Thanks to Esa Hyyti{ (ehyytia@snakemail.hut.fi).)
-.\" Modified 1998-04-10, Nicolás Lichtmaier <nick@debian.org>
-.\" with contribution from Francesco Potorti <F.Potorti@cnuce.cnr.it>
-.\" Modified 2003-11-15, aeb, added rand_r
-.\" 2010-09-13, mtk, added example program
-.\"
-.TH rand 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-rand, rand_r, srand \- pseudo-random number generator
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.B int rand(void);
-.BI "void srand(unsigned int " seed );
-.PP
-.BI "[[deprecated]] int rand_r(unsigned int *" seedp );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR rand_r ():
-.nf
- Since glibc 2.24:
- _POSIX_C_SOURCE >= 199506L
- glibc 2.23 and earlier
- _POSIX_C_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR rand ()
-function returns a pseudo-random integer in the range 0 to
-.B RAND_MAX
-inclusive (i.e., the mathematical range [0,\ \fBRAND_MAX\fR]).
-.PP
-The
-.BR srand ()
-function sets its argument as the seed for a new
-sequence of pseudo-random integers to be returned by
-.BR rand ().
-These sequences are repeatable by calling
-.BR srand ()
-with the same seed value.
-.PP
-If no seed value is provided, the
-.BR rand ()
-function is automatically seeded with a value of 1.
-.PP
-The function
-.BR rand ()
-is not reentrant, since it
-uses hidden state that is modified on each call.
-This might just be the seed value to be used by the next call,
-or it might be something more elaborate.
-In order to get reproducible behavior in a threaded
-application, this state must be made explicit;
-this can be done using the reentrant function
-.BR rand_r ().
-.PP
-Like
-.BR rand (),
-.BR rand_r ()
-returns a pseudo-random integer in the range [0,\ \fBRAND_MAX\fR].
-The
-.I seedp
-argument is a pointer to an
-.I unsigned int
-that is used to store state between calls.
-If
-.BR rand_r ()
-is called with the same initial value for the integer pointed to by
-.IR seedp ,
-and that value is not modified between calls,
-then the same pseudo-random sequence will result.
-.PP
-The value pointed to by the
-.I seedp
-argument of
-.BR rand_r ()
-provides only a very small amount of state,
-so this function will be a weak pseudo-random generator.
-Try
-.BR drand48_r (3)
-instead.
-.SH RETURN VALUE
-The
-.BR rand ()
-and
-.BR rand_r ()
-functions return a value between 0 and
-.B RAND_MAX
-(inclusive).
-The
-.BR srand ()
-function returns no value.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR rand (),
-.BR rand_r (),
-.BR srand ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The versions of
-.BR rand ()
-and
-.BR srand ()
-in the Linux C Library use the same random number generator as
-.BR random (3)
-and
-.BR srandom (3),
-so the lower-order bits should be as random as the higher-order bits.
-However, on older
-.BR rand ()
-implementations, and on current implementations on different systems,
-the lower-order bits are much less random than the higher-order bits.
-Do not use this function in applications intended to be portable
-when good randomness is needed.
-(Use
-.BR random (3)
-instead.)
-.SH STANDARDS
-.TP
-.BR rand ()
-.TQ
-.BR srand ()
-C11, POSIX.1-2008.
-.TP
-.BR rand_r ()
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR rand ()
-.TQ
-.BR srand ()
-SVr4, 4.3BSD, C89, POSIX.1-2001.
-.TP
-.BR rand_r ()
-POSIX.1-2001.
-Obsolete in POSIX.1-2008.
-.SH EXAMPLES
-POSIX.1-2001 gives the following example of an implementation of
-.BR rand ()
-and
-.BR srand (),
-possibly useful when one needs the same sequence on two different machines.
-.PP
-.in +4n
-.EX
-static unsigned long next = 1;
-\&
-/* RAND_MAX assumed to be 32767 */
-int myrand(void) {
- next = next * 1103515245 + 12345;
- return((unsigned)(next/65536) % 32768);
-}
-\&
-void mysrand(unsigned int seed) {
- next = seed;
-}
-.EE
-.in
-.PP
-The following program can be used to display the
-pseudo-random sequence produced by
-.BR rand ()
-when given a particular seed.
-When the seed is
-.IR \-1 ,
-the program uses a random seed.
-.PP
-.in +4n
-.\" SRC BEGIN (rand.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int r;
- unsigned int seed, nloops;
-\&
- if (argc != 3) {
- fprintf(stderr, "Usage: %s <seed> <nloops>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- seed = atoi(argv[1]);
- nloops = atoi(argv[2]);
-\&
- if (seed == \-1) {
- seed = arc4random();
- printf("seed: %u\en", seed);
- }
-\&
- srand(seed);
- for (unsigned int j = 0; j < nloops; j++) {
- r = rand();
- printf("%d\en", r);
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.in
-.SH SEE ALSO
-.BR drand48 (3),
-.BR random (3)
diff --git a/man3/rand_r.3 b/man3/rand_r.3
deleted file mode 100644
index b007c2fc2..000000000
--- a/man3/rand_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rand.3
diff --git a/man3/random.3 b/man3/random.3
deleted file mode 100644
index 94f146a13..000000000
--- a/man3/random.3
+++ /dev/null
@@ -1,196 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sun Mar 28 00:25:51 1993, David Metcalfe
-.\" Modified Sat Jul 24 18:13:39 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Sun Aug 20 21:47:07 2000, aeb
-.\"
-.TH random 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-random, srandom, initstate, setstate \- random number generator
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.B long random(void);
-.BI "void srandom(unsigned int " seed );
-.PP
-.BI "char *initstate(unsigned int " seed ", char " state [. n "], size_t " n );
-.BI "char *setstate(char *" state );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR random (),
-.BR srandom (),
-.BR initstate (),
-.BR setstate ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR random ()
-function uses a nonlinear additive feedback random
-number generator employing a default table of size 31 long integers to
-return successive pseudo-random numbers in
-the range from 0 to 2\[ha]31\ \-\ 1.
-The period of this random number generator is very large, approximately
-.IR "16\ *\ ((2\[ha]31)\ \-\ 1)" .
-.PP
-The
-.BR srandom ()
-function sets its argument as the seed for a new
-sequence of pseudo-random integers to be returned by
-.BR random ().
-These sequences are repeatable by calling
-.BR srandom ()
-with the same
-seed value.
-If no seed value is provided, the
-.BR random ()
-function
-is automatically seeded with a value of 1.
-.PP
-The
-.BR initstate ()
-function allows a state array \fIstate\fP to
-be initialized for use by
-.BR random ().
-The size of the state array
-\fIn\fP is used by
-.BR initstate ()
-to decide how sophisticated a
-random number generator it should use\[em]the larger the state array,
-the better the random numbers will be.
-Current "optimal" values for the size of the state array \fIn\fP are
-8, 32, 64, 128, and 256 bytes; other amounts will be rounded down to
-the nearest known amount.
-Using less than 8 bytes results in an error.
-\fIseed\fP is the seed for the
-initialization, which specifies a starting point for the random number
-sequence, and provides for restarting at the same point.
-.PP
-The
-.BR setstate ()
-function changes the state array used by the
-.BR random ()
-function.
-The state array \fIstate\fP is used for
-random number generation until the next call to
-.BR initstate ()
-or
-.BR setstate ().
-\fIstate\fP must first have been initialized
-using
-.BR initstate ()
-or be the result of a previous call of
-.BR setstate ().
-.SH RETURN VALUE
-The
-.BR random ()
-function returns a value between 0 and
-.IR "(2\[ha]31)\ \-\ 1" .
-The
-.BR srandom ()
-function returns no value.
-.PP
-The
-.BR initstate ()
-function returns a pointer to the previous state array.
-On failure, it returns NULL, and
-.I errno
-is set to indicate the error.
-.PP
-On success,
-.BR setstate ()
-returns a pointer to the previous state array.
-On failure, it returns NULL, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-The
-.I state
-argument given to
-.BR setstate ()
-was NULL.
-.TP
-.B EINVAL
-A state array of less than 8 bytes was specified to
-.BR initstate ().
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR random (),
-.BR srandom (),
-.BR initstate (),
-.BR setstate ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, 4.3BSD.
-.SH NOTES
-Random-number generation is a complex topic.
-.I Numerical Recipes in C: The Art of Scientific Computing
-(William H.\& Press, Brian P.\& Flannery, Saul A.\& Teukolsky,
-William T.\& Vetterling; New York: Cambridge University Press, 2007, 3rd ed.)
-provides an excellent discussion of practical random-number generation
-issues in Chapter 7 (Random Numbers).
-.PP
-For a more theoretical discussion which also covers many practical issues
-in depth, see Chapter 3 (Random Numbers) in Donald E.\& Knuth's
-.IR "The Art of Computer Programming" ,
-volume 2 (Seminumerical Algorithms), 2nd ed.; Reading, Massachusetts:
-Addison-Wesley Publishing Company, 1981.
-.SH CAVEATS
-The
-.BR random ()
-function should not be used in multithreaded programs
-where reproducible behavior is required.
-Use
-.BR random_r (3)
-for that purpose.
-.SH BUGS
-According to POSIX,
-.BR initstate ()
-should return NULL on error.
-In the glibc implementation,
-.I errno
-is (as specified) set on error, but the function does not return NULL.
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=15380
-.SH SEE ALSO
-.BR getrandom (2),
-.BR drand48 (3),
-.BR rand (3),
-.BR random_r (3),
-.BR srand (3)
diff --git a/man3/random_r.3 b/man3/random_r.3
deleted file mode 100644
index b40c67717..000000000
--- a/man3/random_r.3
+++ /dev/null
@@ -1,179 +0,0 @@
-'\" t
-.\" Copyright 2008 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH random_r 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-random_r, srandom_r, initstate_r, setstate_r \- reentrant
-random number generator
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int random_r(struct random_data *restrict " buf ,
-.BI " int32_t *restrict " result );
-.BI "int srandom_r(unsigned int " seed ", struct random_data *" buf );
-.PP
-.BI "int initstate_r(unsigned int " seed ", \
-char " statebuf "[restrict ." statelen ],
-.BI " size_t " statelen ", struct random_data *restrict " buf );
-.BI "int setstate_r(char *restrict " statebuf ,
-.BI " struct random_data *restrict " buf );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR random_r (),
-.BR srandom_r (),
-.BR initstate_r (),
-.BR setstate_r ():
-.nf
- /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-These functions are the reentrant equivalents
-of the functions described in
-.BR random (3).
-They are suitable for use in multithreaded programs where each thread
-needs to obtain an independent, reproducible sequence of random numbers.
-.PP
-The
-.BR random_r ()
-function is like
-.BR random (3),
-except that instead of using state information maintained
-in a global variable,
-it uses the state information in the argument pointed to by
-.IR buf ,
-which must have been previously initialized by
-.BR initstate_r ().
-The generated random number is returned in the argument
-.IR result .
-.PP
-The
-.BR srandom_r ()
-function is like
-.BR srandom (3),
-except that it initializes the seed for the random number generator
-whose state is maintained in the object pointed to by
-.IR buf ,
-which must have been previously initialized by
-.BR initstate_r (),
-instead of the seed associated with the global state variable.
-.PP
-The
-.BR initstate_r ()
-function is like
-.BR initstate (3)
-except that it initializes the state in the object pointed to by
-.IR buf ,
-rather than initializing the global state variable.
-Before calling this function, the
-.I buf.state
-field must be initialized to NULL.
-The
-.BR initstate_r ()
-function records a pointer to the
-.I statebuf
-argument inside the structure pointed to by
-.IR buf .
-Thus,
-.I statebuf
-should not be deallocated so long as
-.I buf
-is still in use.
-(So,
-.I statebuf
-should typically be allocated as a static variable,
-or allocated on the heap using
-.BR malloc (3)
-or similar.)
-.PP
-The
-.BR setstate_r ()
-function is like
-.BR setstate (3)
-except that it modifies the state in the object pointed to by
-.IR buf ,
-rather than modifying the global state variable.
-\fIstate\fP must first have been initialized
-using
-.BR initstate_r ()
-or be the result of a previous call of
-.BR setstate_r ().
-.SH RETURN VALUE
-All of these functions return 0 on success.
-On error, \-1 is returned, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-A state array of less than 8 bytes was specified to
-.BR initstate_r ().
-.TP
-.B EINVAL
-The
-.I statebuf
-or
-.I buf
-argument to
-.BR setstate_r ()
-was NULL.
-.TP
-.B EINVAL
-The
-.I buf
-or
-.I result
-argument to
-.BR random_r ()
-was NULL.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR random_r (),
-.BR srandom_r (),
-.BR initstate_r (),
-.BR setstate_r ()
-T} Thread safety MT-Safe race:buf
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.\" These functions appear to be on Tru64, but don't seem to be on
-.\" Solaris, HP-UX, or FreeBSD.
-.SH BUGS
-The
-.BR initstate_r ()
-interface is confusing.
-.\" FIXME . https://sourceware.org/bugzilla/show_bug.cgi?id=3662
-It appears that the
-.I random_data
-type is intended to be opaque,
-but the implementation requires the user to either initialize the
-.I buf.state
-field to NULL or zero out the entire structure before the call.
-.SH SEE ALSO
-.BR drand48 (3),
-.BR rand (3),
-.BR random (3)
diff --git a/man3/rawmemchr.3 b/man3/rawmemchr.3
deleted file mode 100644
index b62c8f10a..000000000
--- a/man3/rawmemchr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/memchr.3
diff --git a/man3/rcmd.3 b/man3/rcmd.3
deleted file mode 100644
index c907ec74e..000000000
--- a/man3/rcmd.3
+++ /dev/null
@@ -1,303 +0,0 @@
-'\" t
-.\" $NetBSD: rcmd.3,v 1.9 1996/05/28 02:07:39 mrg Exp $
-.\"
-.\" Copyright (c) 1983, 1991, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)rcmd.3 8.1 (Berkeley) 6/4/93
-.\"
-.\" Contributed as Linux man page by David A. Holland, 970908
-.\" I have not checked whether the Linux situation is exactly the same.
-.\"
-.\" 2007-12-08, mtk, Converted from mdoc to man macros
-.\"
-.TH rcmd 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-rcmd, rresvport, iruserok, ruserok, rcmd_af,
-rresvport_af, iruserok_af, ruserok_af \- routines for returning a
-stream to a remote command
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <netdb.h> " "/* Or <unistd.h> on some systems */"
-.PP
-.BI "int rcmd(char **restrict " ahost ", unsigned short " inport ,
-.BI " const char *restrict " locuser ,
-.BI " const char *restrict " remuser ,
-.BI " const char *restrict " cmd ", int *restrict " fd2p );
-.PP
-.BI "int rresvport(int *" port );
-.PP
-.BI "int iruserok(uint32_t " raddr ", int " superuser ,
-.BI " const char *" ruser ", const char *" luser );
-.BI "int ruserok(const char *" rhost ", int " superuser ,
-.BI " const char *" ruser ", const char *" luser );
-.PP
-.BI "int rcmd_af(char **restrict " ahost ", unsigned short " inport ,
-.BI " const char *restrict " locuser ,
-.BI " const char *restrict " remuser ,
-.BI " const char *restrict " cmd ", int *restrict " fd2p ,
-.BI " sa_family_t " af );
-.PP
-.BI "int rresvport_af(int *" port ", sa_family_t " af );
-.PP
-.BI "int iruserok_af(const void *restrict " raddr ", int " superuser ,
-.BI " const char *restrict " ruser ", const char *restrict " luser ,
-.BI " sa_family_t " af );
-.BI "int ruserok_af(const char *" rhost ", int " superuser ,
-.BI " const char *" ruser ", const char *" luser ,
-.BI " sa_family_t " af );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.ad l
-.PP
-.BR rcmd (),
-.BR rcmd_af (),
-.BR rresvport (),
-.BR rresvport_af (),
-.BR iruserok (),
-.BR iruserok_af (),
-.BR ruserok (),
-.BR ruserok_af ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.ad
-.SH DESCRIPTION
-The
-.BR rcmd ()
-function is used by the superuser to execute a command on
-a remote machine using an authentication scheme based
-on privileged port numbers.
-The
-.BR rresvport ()
-function
-returns a file descriptor to a socket
-with an address in the privileged port space.
-The
-.BR iruserok ()
-and
-.BR ruserok ()
-functions are used by servers
-to authenticate clients requesting service with
-.BR rcmd ().
-All four functions are used by the
-.BR rshd (8)
-server (among others).
-.SS rcmd()
-The
-.BR rcmd ()
-function
-looks up the host
-.I *ahost
-using
-.BR gethostbyname (3),
-returning \-1 if the host does not exist.
-Otherwise,
-.I *ahost
-is set to the standard name of the host
-and a connection is established to a server
-residing at the well-known Internet port
-.IR inport .
-.PP
-If the connection succeeds,
-a socket in the Internet domain of type
-.B SOCK_STREAM
-is returned to the caller, and given to the remote
-command as
-.I stdin
-and
-.IR stdout .
-If
-.I fd2p
-is nonzero, then an auxiliary channel to a control
-process will be set up, and a file descriptor for it will be placed
-in
-.IR *fd2p .
-The control process will return diagnostic
-output from the command (unit 2) on this channel, and will also
-accept bytes on this channel as being UNIX signal numbers, to be
-forwarded to the process group of the command.
-If
-.I fd2p
-is 0, then the
-.I stderr
-(unit 2 of the remote
-command) will be made the same as the
-.I stdout
-and no
-provision is made for sending arbitrary signals to the remote process,
-although you may be able to get its attention by using out-of-band data.
-.PP
-The protocol is described in detail in
-.BR rshd (8).
-.SS rresvport()
-The
-.BR rresvport ()
-function is used to obtain a socket with a privileged
-port bound to it.
-This socket is suitable for use by
-.BR rcmd ()
-and several other functions.
-Privileged ports are those in the range 0 to 1023.
-Only a privileged process
-(on Linux, a process that has the
-.B CAP_NET_BIND_SERVICE
-capability in the user namespace governing its network namespace)
-is allowed to bind to a privileged port.
-In the glibc implementation,
-this function restricts its search to the ports from 512 to 1023.
-The
-.I port
-argument is value-result:
-the value it supplies to the call is used as the starting point
-for a circular search of the port range;
-on (successful) return, it contains the port number that was bound to.
-.\"
-.SS iruserok() and ruserok()
-The
-.BR iruserok ()
-and
-.BR ruserok ()
-functions take a remote host's IP address or name, respectively,
-two usernames and a flag indicating whether the local user's
-name is that of the superuser.
-Then, if the user is
-.I not
-the superuser, it checks the
-.I /etc/hosts.equiv
-file.
-If that lookup is not done, or is unsuccessful, the
-.I .rhosts
-in the local user's home directory is checked to see if the request for
-service is allowed.
-.PP
-If this file does not exist, is not a regular file, is owned by anyone
-other than the user or the superuser, is writable by anyone other
-than the owner, or is hardlinked anywhere, the check automatically fails.
-Zero is returned if the machine name is listed in the
-.I hosts.equiv
-file, or the host and remote username are found in the
-.I .rhosts
-file; otherwise
-.BR iruserok ()
-and
-.BR ruserok ()
-return \-1.
-If the local domain (as obtained from
-.BR gethostname (2))
-is the same as the remote domain, only the machine name need be specified.
-.PP
-If the IP address of the remote host is known,
-.BR iruserok ()
-should be used in preference to
-.BR ruserok (),
-as it does not require trusting the DNS server for the remote host's domain.
-.SS *_af() variants
-All of the functions described above work with IPv4
-.RB ( AF_INET )
-sockets.
-The "_af" variants take an extra argument that allows the
-socket address family to be specified.
-For these functions, the
-.I af
-argument can be specified as
-.B AF_INET
-or
-.BR AF_INET6 .
-In addition,
-.BR rcmd_af ()
-supports the use of
-.BR AF_UNSPEC .
-.SH RETURN VALUE
-The
-.BR rcmd ()
-function
-returns a valid socket descriptor on success.
-It returns \-1 on error and prints a diagnostic message on the standard error.
-.PP
-The
-.BR rresvport ()
-function
-returns a valid, bound socket descriptor on success.
-On failure, it returns \-1 and sets
-.I errno
-to indicate the error.
-The error code
-.B EAGAIN
-is overloaded to mean: "All network ports in use".
-.PP
-For information on the return from
-.BR ruserok ()
-and
-.BR iruserok (),
-see above.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR rcmd (),
-.BR rcmd_af ()
-T} Thread safety MT-Unsafe
-T{
-.BR rresvport (),
-.BR rresvport_af ()
-T} Thread safety MT-Safe
-T{
-.BR iruserok (),
-.BR ruserok (),
-.BR iruserok_af (),
-.BR ruserok_af ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-BSD.
-.SH HISTORY
-.TP
-.BR iruserok_af ()
-.TQ
-.BR rcmd_af ()
-.TQ
-.BR rresvport_af ()
-.TQ
-.BR ruserok_af ()
-glibc 2.2.
-.PP
-Solaris, 4.2BSD.
-The "_af" variants are more recent additions,
-and are not present on as wide a range of systems.
-.SH BUGS
-.BR iruserok ()
-and
-.BR iruserok_af ()
-are declared in glibc headers only since glibc 2.12.
-.\" Bug filed 25 Nov 2007:
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=5399
-.SH SEE ALSO
-.BR rlogin (1),
-.BR rsh (1),
-.BR rexec (3),
-.BR rexecd (8),
-.BR rlogind (8),
-.BR rshd (8)
diff --git a/man3/rcmd_af.3 b/man3/rcmd_af.3
deleted file mode 100644
index b58efefab..000000000
--- a/man3/rcmd_af.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rcmd.3
diff --git a/man3/re_comp.3 b/man3/re_comp.3
deleted file mode 100644
index 0ec5e1e04..000000000
--- a/man3/re_comp.3
+++ /dev/null
@@ -1,78 +0,0 @@
-'\" t
-.\" Copyright (C), 1995, Graeme W. Wilford. (Wilf.)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Wed Jun 14 16:10:28 BST 1995 Wilf. (G.Wilford@@ee.surrey.ac.uk)
-.\"
-.TH re_comp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-re_comp, re_exec \- BSD regex functions
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #define _REGEX_RE_COMP
-.B #include <sys/types.h>
-.B #include <regex.h>
-.PP
-.BI "[[deprecated]] char *re_comp(const char *" regex );
-.BI "[[deprecated]] int re_exec(const char *" string );
-.fi
-.SH DESCRIPTION
-.BR re_comp ()
-is used to compile the null-terminated regular expression pointed to by
-.IR regex .
-The compiled pattern occupies a static area, the pattern buffer,
-which is overwritten by subsequent use of
-.BR re_comp ().
-If
-.I regex
-is NULL,
-no operation is performed and the pattern buffer's contents are not
-altered.
-.PP
-.BR re_exec ()
-is used to assess whether the null-terminated string pointed to by
-.I string
-matches the previously compiled
-.IR regex .
-.SH RETURN VALUE
-.BR re_comp ()
-returns NULL on successful compilation of
-.I regex
-otherwise it returns a pointer to an appropriate error message.
-.PP
-.BR re_exec ()
-returns 1 for a successful match, zero for failure.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR re_comp (),
-.BR re_exec ()
-T} Thread safety MT-Unsafe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-4.3BSD.
-.PP
-These functions are obsolete; the functions documented in
-.BR regcomp (3)
-should be used instead.
-.SH SEE ALSO
-.BR regcomp (3),
-.BR regex (7),
-GNU regex manual
diff --git a/man3/re_exec.3 b/man3/re_exec.3
deleted file mode 100644
index 36aba3917..000000000
--- a/man3/re_exec.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/re_comp.3
diff --git a/man3/readdir.3 b/man3/readdir.3
deleted file mode 100644
index cdb03ab33..000000000
--- a/man3/readdir.3
+++ /dev/null
@@ -1,307 +0,0 @@
-'\" t
-.\" Copyright (C) 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright (C) 2008, 2016 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 16:09:49 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 11 June 1995 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified 22 July 1996 by Andries Brouwer (aeb@cwi.nl)
-.\" 2007-07-30 Ulrich Drepper <drepper@redhat.com>, mtk:
-.\" Rework discussion of nonstandard structure fields.
-.\"
-.TH readdir 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-readdir \- read a directory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <dirent.h>
-.PP
-.BI "struct dirent *readdir(DIR *" dirp );
-.fi
-.SH DESCRIPTION
-The
-.BR readdir ()
-function returns a pointer to a \fIdirent\fP structure
-representing the next directory entry in the directory stream pointed
-to by \fIdirp\fP.
-It returns NULL on reaching the end of the directory stream or if
-an error occurred.
-.PP
-In the glibc implementation, the
-.I dirent
-structure is defined as follows:
-.PP
-.in +4n
-.EX
-struct dirent {
- ino_t d_ino; /* Inode number */
- off_t d_off; /* Not an offset; see below */
- unsigned short d_reclen; /* Length of this record */
- unsigned char d_type; /* Type of file; not supported
- by all filesystem types */
- char d_name[256]; /* Null\-terminated filename */
-};
-.EE
-.in
-.PP
-The only fields in the
-.I dirent
-structure that are mandated by POSIX.1 are
-.I d_name
-and
-.IR d_ino .
-The other fields are unstandardized, and not present on all systems;
-see NOTES below for some further details.
-.PP
-The fields of the
-.I dirent
-structure are as follows:
-.TP
-.I d_ino
-This is the inode number of the file.
-.TP
-.I d_off
-The value returned in
-.I d_off
-is the same as would be returned by calling
-.BR telldir (3)
-at the current position in the directory stream.
-Be aware that despite its type and name, the
-.I d_off
-field is seldom any kind of directory offset on modern filesystems.
-.\" https://lwn.net/Articles/544298/
-Applications should treat this field as an opaque value,
-making no assumptions about its contents; see also
-.BR telldir (3).
-.TP
-.I d_reclen
-This is the size (in bytes) of the returned record.
-This may not match the size of the structure definition shown above;
-see NOTES.
-.TP
-.I d_type
-This field contains a value indicating the file type,
-making it possible to avoid the expense of calling
-.BR lstat (2)
-if further actions depend on the type of the file.
-.IP
-When a suitable feature test macro is defined
-.RB ( _DEFAULT_SOURCE
-since glibc 2.19, or
-.B _BSD_SOURCE
-on glibc 2.19 and earlier),
-glibc defines the following macro constants for the value returned in
-.IR d_type :
-.RS
-.TP 12
-.B DT_BLK
-This is a block device.
-.TP
-.B DT_CHR
-This is a character device.
-.TP
-.B DT_DIR
-This is a directory.
-.TP
-.B DT_FIFO
-This is a named pipe (FIFO).
-.TP
-.B DT_LNK
-This is a symbolic link.
-.TP
-.B DT_REG
-This is a regular file.
-.TP
-.B DT_SOCK
-This is a UNIX domain socket.
-.TP
-.B DT_UNKNOWN
-The file type could not be determined.
-.RE
-.IP
-Currently,
-.\" kernel 2.6.27
-.\" The same sentence is in getdents.2
-only some filesystems (among them: Btrfs, ext2, ext3, and ext4)
-have full support for returning the file type in
-.IR d_type .
-All applications must properly handle a return of
-.BR DT_UNKNOWN .
-.TP
-.I d_name
-This field contains the null terminated filename.
-.IR "See NOTES" .
-.PP
-The data returned by
-.BR readdir ()
-may be overwritten by subsequent calls to
-.BR readdir ()
-for the same directory stream.
-.SH RETURN VALUE
-On success,
-.BR readdir ()
-returns a pointer to a
-.I dirent
-structure.
-(This structure may be statically allocated; do not attempt to
-.BR free (3)
-it.)
-.PP
-If the end of the directory stream is reached, NULL is returned and
-.I errno
-is not changed.
-If an error occurs, NULL is returned and
-.I errno
-is set to indicate the error.
-To distinguish end of stream from an error, set
-.I errno
-to zero before calling
-.BR readdir ()
-and then check the value of
-.I errno
-if NULL is returned.
-.SH ERRORS
-.TP
-.B EBADF
-Invalid directory stream descriptor \fIdirp\fP.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR readdir ()
-T} Thread safety MT-Unsafe race:dirstream
-.TE
-.hy
-.ad
-.sp 1
-.PP
-In the current POSIX.1 specification (POSIX.1-2008),
-.BR readdir ()
-is not required to be thread-safe.
-However, in modern implementations (including the glibc implementation),
-concurrent calls to
-.BR readdir ()
-that specify different directory streams are thread-safe.
-In cases where multiple threads must read from the same directory stream,
-using
-.BR readdir ()
-with external synchronization is still preferable to the use of the deprecated
-.BR readdir_r (3)
-function.
-It is expected that a future version of POSIX.1
-.\" FIXME .
-.\" http://www.austingroupbugs.net/view.php?id=696
-will require that
-.BR readdir ()
-be thread-safe when concurrently employed on different directory streams.
-.SH VERSIONS
-Only the fields
-.I d_name
-and (as an XSI extension)
-.I d_ino
-are specified in POSIX.1.
-.\" POSIX.1-2001, POSIX.1-2008
-Other than Linux, the
-.I d_type
-field is available mainly only on BSD systems.
-The remaining fields are available on many, but not all systems.
-Under glibc,
-programs can check for the availability of the fields not defined
-in POSIX.1 by testing whether the macros
-.BR _DIRENT_HAVE_D_NAMLEN ,
-.BR _DIRENT_HAVE_D_RECLEN ,
-.BR _DIRENT_HAVE_D_OFF ,
-or
-.B _DIRENT_HAVE_D_TYPE
-are defined.
-.\"
-.SS The d_name field
-The
-.I dirent
-structure definition shown above is taken from the glibc headers,
-and shows the
-.I d_name
-field with a fixed size.
-.PP
-.IR Warning :
-applications should avoid any dependence on the size of the
-.I d_name
-field.
-POSIX defines it as
-.IR "char\ d_name[]",
-a character array of unspecified size, with at most
-.B NAME_MAX
-characters preceding the terminating null byte (\[aq]\e0\[aq]).
-.PP
-POSIX.1 explicitly notes that this field should not be used as an lvalue.
-The standard also notes that the use of
-.I sizeof(d_name)
-is incorrect; use
-.I strlen(d_name)
-instead.
-(On some systems, this field is defined as
-.IR char\~d_name[1] !)
-By implication, the use
-.I sizeof(struct dirent)
-to capture the size of the record including the size of
-.I d_name
-is also incorrect.
-.PP
-Note that while the call
-.PP
-.in +4n
-.EX
-fpathconf(fd, _PC_NAME_MAX)
-.EE
-.in
-.PP
-returns the value 255 for most filesystems,
-on some filesystems (e.g., CIFS, Windows SMB servers),
-the null-terminated filename that is (correctly) returned in
-.I d_name
-can actually exceed this size.
-In such cases, the
-.I d_reclen
-field will contain a value that exceeds the size of the glibc
-.I dirent
-structure shown above.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.SH NOTES
-A directory stream is opened using
-.BR opendir (3).
-.PP
-The order in which filenames are read by successive calls to
-.BR readdir ()
-depends on the filesystem implementation;
-it is unlikely that the names will be sorted in any fashion.
-.SH SEE ALSO
-.BR getdents (2),
-.BR read (2),
-.BR closedir (3),
-.BR dirfd (3),
-.BR ftw (3),
-.BR offsetof (3),
-.BR opendir (3),
-.BR readdir_r (3),
-.BR rewinddir (3),
-.BR scandir (3),
-.BR seekdir (3),
-.BR telldir (3)
diff --git a/man3/readdir_r.3 b/man3/readdir_r.3
deleted file mode 100644
index 9b34f991b..000000000
--- a/man3/readdir_r.3
+++ /dev/null
@@ -1,148 +0,0 @@
-'\" t
-.\" Copyright (C) 2008, 2016 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (C) 2016 Florian Weimer <fweimer@redhat.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH readdir_r 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-readdir_r \- read a directory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <dirent.h>
-.PP
-.BI "[[deprecated]] int readdir_r(DIR *restrict " dirp ,
-.BI " struct dirent *restrict " entry ,
-.BI " struct dirent **restrict " result );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR readdir_r ():
-.nf
- _POSIX_C_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-This function is deprecated; use
-.BR readdir (3)
-instead.
-.PP
-The
-.BR readdir_r ()
-function was invented as a reentrant version of
-.BR readdir (3).
-It reads the next directory entry from the directory stream
-.IR dirp ,
-and returns it in the caller-allocated buffer pointed to by
-.IR entry .
-For details of the
-.I dirent
-structure, see
-.BR readdir (3).
-.PP
-A pointer to the returned buffer is placed in
-.IR *result ;
-if the end of the directory stream was encountered,
-then NULL is instead returned in
-.IR *result .
-.PP
-It is recommended that applications use
-.BR readdir (3)
-instead of
-.BR readdir_r ().
-Furthermore, since glibc 2.24, glibc deprecates
-.BR readdir_r ().
-The reasons are as follows:
-.IP \[bu] 3
-On systems where
-.B NAME_MAX
-is undefined, calling
-.BR readdir_r ()
-may be unsafe because the interface does not allow the caller to specify
-the length of the buffer used for the returned directory entry.
-.IP \[bu]
-On some systems,
-.BR readdir_r ()
-can't read directory entries with very long names.
-When the glibc implementation encounters such a name,
-.BR readdir_r ()
-fails with the error
-.B ENAMETOOLONG
-.IR "after the final directory entry has been read" .
-On some other systems,
-.BR readdir_r ()
-may return a success status, but the returned
-.I d_name
-field may not be null terminated or may be truncated.
-.IP \[bu]
-In the current POSIX.1 specification (POSIX.1-2008),
-.BR readdir (3)
-is not required to be thread-safe.
-However, in modern implementations (including the glibc implementation),
-concurrent calls to
-.BR readdir (3)
-that specify different directory streams are thread-safe.
-Therefore, the use of
-.BR readdir_r ()
-is generally unnecessary in multithreaded programs.
-In cases where multiple threads must read from the same directory stream,
-using
-.BR readdir (3)
-with external synchronization is still preferable to the use of
-.BR readdir_r (),
-for the reasons given in the points above.
-.IP \[bu]
-It is expected that a future version of POSIX.1
-.\" FIXME .
-.\" http://www.austingroupbugs.net/view.php?id=696
-will make
-.BR readdir_r ()
-obsolete, and require that
-.BR readdir (3)
-be thread-safe when concurrently employed on different directory streams.
-.SH RETURN VALUE
-The
-.BR readdir_r ()
-function returns 0 on success.
-On error, it returns a positive error number (listed under ERRORS).
-If the end of the directory stream is reached,
-.BR readdir_r ()
-returns 0, and returns NULL in
-.IR *result .
-.SH ERRORS
-.TP
-.B EBADF
-Invalid directory stream descriptor \fIdirp\fP.
-.TP
-.B ENAMETOOLONG
-A directory entry whose name was too long to be read was encountered.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR readdir_r ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH SEE ALSO
-.BR readdir (3)
diff --git a/man3/realloc.3 b/man3/realloc.3
deleted file mode 100644
index a4b9d4455..000000000
--- a/man3/realloc.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/malloc.3
diff --git a/man3/reallocarray.3 b/man3/reallocarray.3
deleted file mode 100644
index a4b9d4455..000000000
--- a/man3/reallocarray.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/malloc.3
diff --git a/man3/realpath.3 b/man3/realpath.3
deleted file mode 100644
index f36d81fd1..000000000
--- a/man3/realpath.3
+++ /dev/null
@@ -1,234 +0,0 @@
-'\" t
-.\" Copyright (C) 1999 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Rewritten old page, 990824, aeb@cwi.nl
-.\" 2004-12-14, mtk, added discussion of resolved_path == NULL
-.\"
-.TH realpath 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-realpath \- return the canonicalized absolute pathname
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <limits.h>
-.B #include <stdlib.h>
-.PP
-.BI "char *realpath(const char *restrict " path ,
-.BI " char *restrict " resolved_path );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR realpath ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-.BR realpath ()
-expands all symbolic links and resolves references
-to
-.IR "/./" ", " "/../"
-and extra \[aq]/\[aq]
-characters in the null-terminated string named by
-.I path
-to produce a canonicalized absolute pathname.
-The resulting pathname is stored as a null-terminated string,
-up to a maximum of
-.B PATH_MAX
-bytes,
-in the buffer pointed to by
-.IR resolved_path .
-The resulting path will have no symbolic link,
-.I "/./"
-or
-.I "/../"
-components.
-.PP
-If
-.I resolved_path
-is specified as NULL, then
-.BR realpath ()
-uses
-.BR malloc (3)
-to allocate a buffer of up to
-.B PATH_MAX
-bytes to hold the resolved pathname,
-and returns a pointer to this buffer.
-The caller should deallocate this buffer using
-.BR free (3).
-.\" Even if we use resolved_path == NULL, then realpath() will still
-.\" return ENAMETOOLONG if the resolved pathname would exceed PATH_MAX
-.\" bytes -- MTK, Dec 04
-.SH RETURN VALUE
-If there is no error,
-.BR realpath ()
-returns a pointer to the
-.IR resolved_path .
-.PP
-Otherwise, it returns NULL, the contents
-of the array
-.I resolved_path
-are undefined, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-Read or search permission was denied for a component of the path prefix.
-.TP
-.B EINVAL
-.I path
-is NULL.
-.\" (In libc5 this would just cause a segfault.)
-(Before glibc 2.3,
-this error is also returned if
-.I resolved_path
-is NULL.)
-.TP
-.B EIO
-An I/O error occurred while reading from the filesystem.
-.TP
-.B ELOOP
-Too many symbolic links were encountered in translating the pathname.
-.TP
-.B ENAMETOOLONG
-A component of a pathname exceeded
-.B NAME_MAX
-characters, or an entire pathname exceeded
-.B PATH_MAX
-characters.
-.TP
-.B ENOENT
-The named file does not exist.
-.TP
-.B ENOMEM
-Out of memory.
-.TP
-.B ENOTDIR
-A component of the path prefix is not a directory.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR realpath ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-.SS GNU extensions
-If the call fails with either
-.B EACCES
-or
-.B ENOENT
-and
-.I resolved_path
-is not NULL, then the prefix of
-.I path
-that is not readable or does not exist is returned in
-.IR resolved_path .
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-4.4BSD, POSIX.1-2001, Solaris.
-.PP
-POSIX.1-2001 says that the behavior if
-.I resolved_path
-is NULL is implementation-defined.
-POSIX.1-2008 specifies the behavior described in this page.
-.PP
-In 4.4BSD and Solaris, the limit on the pathname length is
-.B MAXPATHLEN
-(found in \fI<sys/param.h>\fP).
-SUSv2 prescribes
-.B PATH_MAX
-and
-.BR NAME_MAX ,
-as found in \fI<limits.h>\fP or provided by the
-.BR pathconf (3)
-function.
-A typical source fragment would be
-.PP
-.in +4n
-.EX
-#ifdef PATH_MAX
- path_max = PATH_MAX;
-#else
- path_max = pathconf(path, _PC_PATH_MAX);
- if (path_max <= 0)
- path_max = 4096;
-#endif
-.EE
-.in
-.PP
-(But see the BUGS section.)
-.\".PP
-.\" 2012-05-05, According to Casper Dik, the statement about
-.\" Solaris was not true at least as far back as 1997, and
-.\" may never have been true.
-.\"
-.\" The 4.4BSD, Linux and SUSv2 versions always return an absolute
-.\" pathname.
-.\" Solaris may return a relative pathname when the
-.\" .I path
-.\" argument is relative.
-.\" The prototype of
-.\" .BR realpath ()
-.\" is given in \fI<unistd.h>\fP in libc4 and libc5,
-.\" but in \fI<stdlib.h>\fP everywhere else.
-.SH BUGS
-The POSIX.1-2001 standard version of this function is broken by design,
-since it is impossible to determine a suitable size for the output buffer,
-.IR resolved_path .
-According to POSIX.1-2001 a buffer of size
-.B PATH_MAX
-suffices, but
-.B PATH_MAX
-need not be a defined constant, and may have to be obtained using
-.BR pathconf (3).
-And asking
-.BR pathconf (3)
-does not really help, since, on the one hand POSIX warns that
-the result of
-.BR pathconf (3)
-may be huge and unsuitable for mallocing memory,
-and on the other hand
-.BR pathconf (3)
-may return \-1 to signify that
-.B PATH_MAX
-is not bounded.
-The
-.I "resolved_path\ ==\ NULL"
-feature, not standardized in POSIX.1-2001,
-but standardized in POSIX.1-2008, allows this design problem to be avoided.
-.\" .LP
-.\" The libc4 and libc5 implementation contained a buffer overflow
-.\" (fixed in libc-5.4.13).
-.\" Thus, set-user-ID programs like
-.\" .BR mount (8)
-.\" needed a private version.
-.SH SEE ALSO
-.BR realpath (1),
-.BR readlink (2),
-.BR canonicalize_file_name (3),
-.BR getcwd (3),
-.BR pathconf (3),
-.BR sysconf (3)
diff --git a/man3/recno.3 b/man3/recno.3
deleted file mode 100644
index 320285a84..000000000
--- a/man3/recno.3
+++ /dev/null
@@ -1,207 +0,0 @@
-.\" Copyright (c) 1990, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)recno.3 8.5 (Berkeley) 8/18/94
-.\"
-.TH recno 3 (date) "Linux man-pages (unreleased)"
-.UC 7
-.SH NAME
-recno \- record number database access method
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.ft B
-#include <sys/types.h>
-#include <db.h>
-.ft R
-.fi
-.SH DESCRIPTION
-.IR "Note well" :
-This page documents interfaces provided up until glibc 2.1.
-Since glibc 2.2, glibc no longer provides these interfaces.
-Probably, you are looking for the APIs provided by the
-.I libdb
-library instead.
-.PP
-The routine
-.BR dbopen (3)
-is the library interface to database files.
-One of the supported file formats is record number files.
-The general description of the database access methods is in
-.BR dbopen (3),
-this manual page describes only the recno-specific information.
-.PP
-The record number data structure is either variable or fixed-length
-records stored in a flat-file format, accessed by the logical record
-number.
-The existence of record number five implies the existence of records
-one through four, and the deletion of record number one causes
-record number five to be renumbered to record number four, as well
-as the cursor, if positioned after record number one, to shift down
-one record.
-.PP
-The recno access-method-specific data structure provided to
-.BR dbopen (3)
-is defined in the
-.I <db.h>
-include file as follows:
-.PP
-.in +4n
-.EX
-typedef struct {
- unsigned long flags;
- unsigned int cachesize;
- unsigned int psize;
- int lorder;
- size_t reclen;
- unsigned char bval;
- char *bfname;
-} RECNOINFO;
-.EE
-.in
-.PP
-The elements of this structure are defined as follows:
-.TP
-.I flags
-The flag value is specified by ORing
-any of the following values:
-.RS
-.TP
-.B R_FIXEDLEN
-The records are fixed-length, not byte delimited.
-The structure element
-.I reclen
-specifies the length of the record, and the structure element
-.I bval
-is used as the pad character.
-Any records, inserted into the database, that are less than
-.I reclen
-bytes long are automatically padded.
-.TP
-.B R_NOKEY
-In the interface specified by
-.BR dbopen (3),
-the sequential record retrieval fills in both the caller's key and
-data structures.
-If the
-.B R_NOKEY
-flag is specified, the
-.I cursor
-routines are not required to fill in the key structure.
-This permits applications to retrieve records at the end of files without
-reading all of the intervening records.
-.TP
-.B R_SNAPSHOT
-This flag requires that a snapshot of the file be taken when
-.BR dbopen (3)
-is called, instead of permitting any unmodified records to be read from
-the original file.
-.RE
-.TP
-.I cachesize
-A suggested maximum size, in bytes, of the memory cache.
-This value is
-.B only
-advisory, and the access method will allocate more memory rather than fail.
-If
-.I cachesize
-is 0 (no size is specified), a default cache is used.
-.TP
-.I psize
-The recno access method stores the in-memory copies of its records
-in a btree.
-This value is the size (in bytes) of the pages used for nodes in that tree.
-If
-.I psize
-is 0 (no page size is specified), a page size is chosen based on the
-underlying filesystem I/O block size.
-See
-.BR btree (3)
-for more information.
-.TP
-.I lorder
-The byte order for integers in the stored database metadata.
-The number should represent the order as an integer; for example,
-big endian order would be the number 4,321.
-If
-.I lorder
-is 0 (no order is specified), the current host order is used.
-.TP
-.I reclen
-The length of a fixed-length record.
-.TP
-.I bval
-The delimiting byte to be used to mark the end of a record for
-variable-length records, and the pad character for fixed-length
-records.
-If no value is specified, newlines ("\en") are used to mark the end
-of variable-length records and fixed-length records are padded with
-spaces.
-.TP
-.I bfname
-The recno access method stores the in-memory copies of its records
-in a btree.
-If
-.I bfname
-is non-NULL, it specifies the name of the btree file,
-as if specified as the filename for a
-.BR dbopen (3)
-of a btree file.
-.PP
-The data part of the key/data pair used by the
-.I recno
-access method
-is the same as other access methods.
-The key is different.
-The
-.I data
-field of the key should be a pointer to a memory location of type
-.IR recno_t ,
-as defined in the
-.I <db.h>
-include file.
-This type is normally the largest unsigned integral type available to
-the implementation.
-The
-.I size
-field of the key should be the size of that type.
-.PP
-Because there can be no metadata associated with the underlying
-recno access method files, any changes made to the default values
-(e.g., fixed record length or byte separator value) must be explicitly
-specified each time the file is opened.
-.PP
-In the interface specified by
-.BR dbopen (3),
-using the
-.I put
-interface to create a new record will cause the creation of multiple,
-empty records if the record number is more than one greater than the
-largest record currently in the database.
-.SH ERRORS
-The
-.I recno
-access method routines may fail and set
-.I errno
-for any of the errors specified for the library routine
-.BR dbopen (3)
-or the following:
-.TP
-.B EINVAL
-An attempt was made to add a record to a fixed-length database that
-was too large to fit.
-.SH BUGS
-Only big and little endian byte order is supported.
-.SH SEE ALSO
-.BR btree (3),
-.BR dbopen (3),
-.BR hash (3),
-.BR mpool (3)
-.PP
-.IR "Document Processing in a Relational Database System" ,
-Michael Stonebraker, Heidi Stettner, Joseph Kalash, Antonin Guttman,
-Nadene Lynn, Memorandum No. UCB/ERL M82/32, May 1982.
diff --git a/man3/regcomp.3 b/man3/regcomp.3
deleted file mode 100644
index c0daaf0ff..000000000
--- a/man3/regcomp.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/regex.3
diff --git a/man3/regerror.3 b/man3/regerror.3
deleted file mode 100644
index c0daaf0ff..000000000
--- a/man3/regerror.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/regex.3
diff --git a/man3/regex.3 b/man3/regex.3
deleted file mode 100644
index 13e540b22..000000000
--- a/man3/regex.3
+++ /dev/null
@@ -1,410 +0,0 @@
-'\" t
-.\" Copyright (C), 1995, Graeme W. Wilford. (Wilf.)
-.\" Copyright 2023, Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
-.\" Copyright 2023, Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Wed Jun 14 16:10:28 BST 1995 Wilf. (G.Wilford@ee.surrey.ac.uk)
-.\" Tiny change in formatting - aeb, 950812
-.\" Modified 8 May 1998 by Joseph S. Myers (jsm28@cam.ac.uk)
-.\"
-.\" show the synopsis section nicely
-.TH regex 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-regcomp, regexec, regerror, regfree \- POSIX regex functions
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <regex.h>
-.PP
-.BI "int regcomp(regex_t *restrict " preg ", const char *restrict " regex ,
-.BI " int " cflags );
-.BI "int regexec(const regex_t *restrict " preg \
-", const char *restrict " string ,
-.BI " size_t " nmatch ", \
-regmatch_t " pmatch "[_Nullable restrict ." nmatch ],
-.BI " int " eflags );
-.PP
-.BI "size_t regerror(int " errcode ", const regex_t *_Nullable restrict " preg ,
-.BI " char " errbuf "[_Nullable restrict ." errbuf_size ],
-.BI " size_t " errbuf_size );
-.BI "void regfree(regex_t *" preg );
-.PP
-.B typedef struct {
-.B " size_t re_nsub;"
-.B } regex_t;
-.PP
-.B typedef struct {
-.B " regoff_t rm_so;"
-.B " regoff_t rm_eo;"
-.B } regmatch_t;
-.PP
-.BR typedef " /* ... */ " regoff_t;
-.fi
-.SH DESCRIPTION
-.SS Compilation
-.BR regcomp ()
-is used to compile a regular expression into a form that is suitable
-for subsequent
-.BR regexec ()
-searches.
-.PP
-On success, the pattern buffer at
-.I *preg
-is initialized.
-.I regex
-is a null-terminated string.
-The locale must be the same when running
-.BR regexec ().
-.PP
-After
-.BR regcomp ()
-succeeds,
-.I preg->re_nsub
-holds the number of subexpressions in
-.IR regex .
-Thus, a value of
-.I preg->re_nsub
-+ 1
-passed as
-.I nmatch
-to
-.BR regexec ()
-is sufficient to capture all matches.
-.PP
-.I cflags
-is the
-bitwise OR
-of zero or more of the following:
-.TP
-.B REG_EXTENDED
-Use
-POSIX
-Extended Regular Expression syntax when interpreting
-.IR regex .
-If not set,
-POSIX
-Basic Regular Expression syntax is used.
-.TP
-.B REG_ICASE
-Do not differentiate case.
-Subsequent
-.BR regexec ()
-searches using this pattern buffer will be case insensitive.
-.TP
-.B REG_NOSUB
-Report only overall success.
-.BR regexec ()
-will use only
-.I pmatch
-for
-.BR REG_STARTEND ,
-ignoring
-.IR nmatch .
-.TP
-.B REG_NEWLINE
-Match-any-character operators don't match a newline.
-.IP
-A nonmatching list
-.RB ( [\[ha]...] )
-not containing a newline does not match a newline.
-.IP
-Match-beginning-of-line operator
-.RB ( \[ha] )
-matches the empty string immediately after a newline, regardless of
-whether
-.IR eflags ,
-the execution flags of
-.BR regexec (),
-contains
-.BR REG_NOTBOL .
-.IP
-Match-end-of-line operator
-.RB ( $ )
-matches the empty string immediately before a newline, regardless of
-whether
-.I eflags
-contains
-.BR REG_NOTEOL .
-.SS Matching
-.BR regexec ()
-is used to match a null-terminated string
-against the compiled pattern buffer in
-.IR *preg ,
-which must have been initialised with
-.BR regexec ().
-.I eflags
-is the
-bitwise OR
-of zero or more of the following flags:
-.TP
-.B REG_NOTBOL
-The match-beginning-of-line operator always fails to match (but see the
-compilation flag
-.B REG_NEWLINE
-above).
-This flag may be used when different portions of a string are passed to
-.BR regexec ()
-and the beginning of the string should not be interpreted as the
-beginning of the line.
-.TP
-.B REG_NOTEOL
-The match-end-of-line operator always fails to match (but see the
-compilation flag
-.B REG_NEWLINE
-above).
-.TP
-.B REG_STARTEND
-Match
-.RI [ "string + pmatch[0].rm_so" , " string + pmatch[0].rm_eo" )
-instead of
-.RI [ string , " string + strlen(string)" ).
-This allows matching embedded NUL bytes
-and avoids a
-.BR strlen (3)
-on known-length strings.
-If any matches are returned
-.RB ( REG_NOSUB
-wasn't passed to
-.BR regcomp (),
-the match succeeded, and
-.I nmatch
-> 0), they overwrite
-.I pmatch
-as usual, and the match offsets remain relative to
-.I string
-(not
-.IR "string + pmatch[0].rm_so" ).
-This flag is a BSD extension, not present in POSIX.
-.SS Match offsets
-Unless
-.B REG_NOSUB
-was passed to
-.BR regcomp (),
-it is possible to
-obtain the locations of matches within
-.IR string :
-.BR regexec ()
-fills
-.I nmatch
-elements of
-.I pmatch
-with results:
-.I pmatch[0]
-corresponds to the entire match,
-.I pmatch[1]
-to the first subexpression, etc.
-If there were more matches than
-.IR nmatch ,
-they are discarded;
-if fewer,
-unused elements of
-.I pmatch
-are filled with
-.BR \-1 s.
-.PP
-Each returned valid
-.RB (non- \-1 )
-match corresponds to the range
-.RI [ "string + rm_so" , " string + rm_eo" ).
-.PP
-.I regoff_t
-is a signed integer type
-capable of storing the largest value that can be stored in either an
-.I ptrdiff_t
-type or a
-.I ssize_t
-type.
-.SS Error reporting
-.BR regerror ()
-is used to turn the error codes that can be returned by both
-.BR regcomp ()
-and
-.BR regexec ()
-into error message strings.
-.PP
-If
-.I preg
-isn't a null pointer,
-.I errcode
-must be the latest error returned from an operation on
-.IR preg .
-.PP
-If
-.I errbuf_size
-isn't 0, up to
-.I errbuf_size
-bytes are copied to
-.IR errbuf ;
-the error string is always null-terminated, and truncated to fit.
-.SS Freeing
-.BR regfree ()
-deinitializes the pattern buffer at
-.IR *preg ,
-freeing any associated memory;
-.I *preg
-must have been initialized via
-.BR regcomp ().
-.SH RETURN VALUE
-.BR regcomp ()
-returns zero for a successful compilation or an error code for failure.
-.PP
-.BR regexec ()
-returns zero for a successful match or
-.B REG_NOMATCH
-for failure.
-.PP
-.BR regerror ()
-returns the size of the buffer required to hold the string.
-.SH ERRORS
-The following errors can be returned by
-.BR regcomp ():
-.TP
-.B REG_BADBR
-Invalid use of back reference operator.
-.TP
-.B REG_BADPAT
-Invalid use of pattern operators such as group or list.
-.TP
-.B REG_BADRPT
-Invalid use of repetition operators such as using \[aq]*\[aq]
-as the first character.
-.TP
-.B REG_EBRACE
-Un-matched brace interval operators.
-.TP
-.B REG_EBRACK
-Un-matched bracket list operators.
-.TP
-.B REG_ECOLLATE
-Invalid collating element.
-.TP
-.B REG_ECTYPE
-Unknown character class name.
-.TP
-.B REG_EEND
-Nonspecific error.
-This is not defined by POSIX.
-.TP
-.B REG_EESCAPE
-Trailing backslash.
-.TP
-.B REG_EPAREN
-Un-matched parenthesis group operators.
-.TP
-.B REG_ERANGE
-Invalid use of the range operator; for example, the ending point of the range
-occurs prior to the starting point.
-.TP
-.B REG_ESIZE
-Compiled regular expression requires a pattern buffer larger than 64\ kB.
-This is not defined by POSIX.
-.TP
-.B REG_ESPACE
-The regex routines ran out of memory.
-.TP
-.B REG_ESUBREG
-Invalid back reference to a subexpression.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR regcomp (),
-.BR regexec ()
-T} Thread safety MT-Safe locale
-T{
-.BR regerror ()
-T} Thread safety MT-Safe env
-T{
-.BR regfree ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.PP
-Prior to POSIX.1-2008,
-.I regoff_t
-was required to be
-capable of storing the largest value that can be stored in either an
-.I off_t
-type or a
-.I ssize_t
-type.
-.SH CAVEATS
-.I re_nsub
-is only required to be initialized if
-.B REG_NOSUB
-wasn't specified, but all known implementations initialize it regardless.
-.\" glibc, musl, 4.4BSD, illumos
-.PP
-Both
-.I regex_t
-and
-.I regmatch_t
-may (and do) have more members, in any order.
-Always reference them by name.
-.\" illumos has two more start/end pairs and the first one is of pointers
-.SH EXAMPLES
-.EX
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <regex.h>
-\&
-#define ARRAY_SIZE(arr) (sizeof((arr)) / sizeof((arr)[0]))
-\&
-static const char *const str =
- "1) John Driverhacker;\en2) John Doe;\en3) John Foo;\en";
-static const char *const re = "John.*o";
-\&
-int main(void)
-{
- static const char *s = str;
- regex_t regex;
- regmatch_t pmatch[1];
- regoff_t off, len;
-\&
- if (regcomp(&regex, re, REG_NEWLINE))
- exit(EXIT_FAILURE);
-\&
- printf("String = \e"%s\e"\en", str);
- printf("Matches:\en");
-\&
- for (unsigned int i = 0; ; i++) {
- if (regexec(&regex, s, ARRAY_SIZE(pmatch), pmatch, 0))
- break;
-\&
- off = pmatch[0].rm_so + (s \- str);
- len = pmatch[0].rm_eo \- pmatch[0].rm_so;
- printf("#%zu:\en", i);
- printf("offset = %jd; length = %jd\en", (intmax_t) off,
- (intmax_t) len);
- printf("substring = \e"%.*s\e"\en", len, s + pmatch[0].rm_so);
-\&
- s += pmatch[0].rm_eo;
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.SH SEE ALSO
-.BR grep (1),
-.BR regex (7)
-.PP
-The glibc manual section,
-.I "Regular Expressions"
diff --git a/man3/regexec.3 b/man3/regexec.3
deleted file mode 100644
index c0daaf0ff..000000000
--- a/man3/regexec.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/regex.3
diff --git a/man3/regfree.3 b/man3/regfree.3
deleted file mode 100644
index c0daaf0ff..000000000
--- a/man3/regfree.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/regex.3
diff --git a/man3/register_printf_modifier.3 b/man3/register_printf_modifier.3
deleted file mode 100644
index ad10bad38..000000000
--- a/man3/register_printf_modifier.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3/register_printf_specifier.3 b/man3/register_printf_specifier.3
deleted file mode 100644
index ad10bad38..000000000
--- a/man3/register_printf_specifier.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3/register_printf_type.3 b/man3/register_printf_type.3
deleted file mode 100644
index ad10bad38..000000000
--- a/man3/register_printf_type.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3/registerrpc.3 b/man3/registerrpc.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/registerrpc.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/remainder.3 b/man3/remainder.3
deleted file mode 100644
index ab04ae984..000000000
--- a/man3/remainder.3
+++ /dev/null
@@ -1,237 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\"
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-08-10 Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\" Modified 2003-11-18, 2004-10-05 aeb
-.\"
-.TH remainder 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-drem, dremf, dreml, remainder, remainderf, remainderl \- \
-floating-point remainder function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double remainder(double " x ", double " y );
-.BI "float remainderf(float " x ", float " y );
-.BI "long double remainderl(long double " x ", long double " y );
-.PP
-/* Obsolete synonyms */
-.BI "[[deprecated]] double drem(double " x ", double " y );
-.BI "[[deprecated]] float dremf(float " x ", float " y );
-.BI "[[deprecated]] long double dreml(long double " x ", long double " y );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR remainder ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR remainderf (),
-.BR remainderl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR drem (),
-.BR dremf (),
-.BR dreml ():
-.nf
- /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These
-functions compute the remainder of dividing
-.I x
-by
-.IR y .
-The return value is
-\fIx\fP\-\fIn\fP*\fIy\fP,
-where
-.I n
-is the value
-.IR "x\ /\ y" ,
-rounded to the nearest integer.
-If the absolute value of
-\fIx\fP\-\fIn\fP*\fIy\fP
-is 0.5,
-.I n
-is chosen to be even.
-.PP
-These functions are unaffected by the current rounding mode (see
-.BR fenv (3)).
-.PP
-The
-.BR drem ()
-function does precisely the same thing.
-.SH RETURN VALUE
-On success, these
-functions return the floating-point remainder,
-\fIx\fP\-\fIn\fP*\fIy\fP.
-If the return value is 0, it has the sign of
-.IR x .
-.PP
-If
-.I x
-or
-.I y
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is an infinity,
-and
-.I y
-is not a NaN,
-a domain error occurs, and
-a NaN is returned.
-.PP
-If
-.I y
-is zero,
-.\" FIXME . Instead, glibc gives a domain error even if x is a NaN
-and
-.I x
-is not a NaN,
-.\" Interestingly, remquo(3) does not have the same problem.
-a domain error occurs, and
-a NaN is returned.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is an infinity and \fIy\fP is not a NaN
-.I errno
-is set to
-.B EDOM
-(but see BUGS).
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.IP
-These functions do not set
-.I errno
-for this case.
-.TP
-Domain error: \fIy\fP is zero\" [XXX see bug above] and \fIx\fP is not a NaN
-.I errno
-is set to
-.BR EDOM .
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR drem (),
-.BR dremf (),
-.BR dreml (),
-.BR remainder (),
-.BR remainderf (),
-.BR remainderl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.\" IEC 60559.
-.TP
-.BR remainder ()
-.TQ
-.BR remainderf ()
-.TQ
-.BR remainderl ()
-C11, POSIX.1-2008.
-.TP
-.BR drem ()
-.TQ
-.BR dremf ()
-.TQ
-.BR dreml ()
-None.
-.SH HISTORY
-.\" IEC 60559.
-.TP
-.BR remainder ()
-.TQ
-.BR remainderf ()
-.TQ
-.BR remainderl ()
-C99, POSIX.1-2001.
-.TP
-.BR drem ()
-4.3BSD.
-.TP
-.BR dremf ()
-.TQ
-.BR dreml ()
-Tru64, glibc2.
-.SH BUGS
-Before glibc 2.15,
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6779
-the call
-.PP
-.in +4n
-.EX
-remainder(nan(""), 0);
-.EE
-.in
-.PP
-returned a NaN, as expected, but wrongly caused a domain error.
-Since glibc 2.15, a silent NaN (i.e., no domain error) is returned.
-.PP
-Before glibc 2.15,
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6783
-.I errno
-was not set to
-.B EDOM
-for the domain error that occurs when
-.I x
-is an infinity and
-.I y
-is not a NaN.
-.SH EXAMPLES
-The call "remainder(29.0, 3.0)" returns \-1.
-.SH SEE ALSO
-.BR div (3),
-.BR fmod (3),
-.BR remquo (3)
diff --git a/man3/remainderf.3 b/man3/remainderf.3
deleted file mode 100644
index b7a5b23bf..000000000
--- a/man3/remainderf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/remainder.3
diff --git a/man3/remainderl.3 b/man3/remainderl.3
deleted file mode 100644
index b7a5b23bf..000000000
--- a/man3/remainderl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/remainder.3
diff --git a/man3/remove.3 b/man3/remove.3
deleted file mode 100644
index 125eb9e55..000000000
--- a/man3/remove.3
+++ /dev/null
@@ -1,96 +0,0 @@
-'\" t
-.\" This file is derived from unlink.2, which has the following copyright:
-.\"
-.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\" and Copyright (C) 1993 Ian Jackson.
-.\"
-.\" Edited into remove.3 shape by:
-.\" Graeme W. Wilford (G.Wilford@ee.surrey.ac.uk) on 13th July 1994
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH remove 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-remove \- remove a file or directory
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "int remove(const char *" pathname );
-.fi
-.SH DESCRIPTION
-.BR remove ()
-deletes a name from the filesystem.
-It calls
-.BR unlink (2)
-for files, and
-.BR rmdir (2)
-for directories.
-.PP
-If the removed name was the
-last link to a file and no processes have the file open, the file is
-deleted and the space it was using is made available for reuse.
-.PP
-If the name was the last link to a file,
-but any processes still have the file open,
-the file will remain in existence until the last file
-descriptor referring to it is closed.
-.PP
-If the name referred to a symbolic link, the link is removed.
-.PP
-If the name referred to a socket, FIFO, or device, the name is removed,
-but processes which have the object open may continue to use it.
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-The errors that occur are those for
-.BR unlink (2)
-and
-.BR rmdir (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR remove ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, 4.3BSD.
-.\" .SH NOTES
-.\" Under libc4 and libc5,
-.\" .BR remove ()
-.\" was an alias for
-.\" .BR unlink (2)
-.\" (and hence would not remove directories).
-.SH BUGS
-Infelicities in the protocol underlying NFS can cause the unexpected
-disappearance of files which are still being used.
-.SH SEE ALSO
-.BR rm (1),
-.BR unlink (1),
-.BR link (2),
-.BR mknod (2),
-.BR open (2),
-.BR rename (2),
-.BR rmdir (2),
-.BR unlink (2),
-.BR mkfifo (3),
-.BR symlink (7)
diff --git a/man3/remque.3 b/man3/remque.3
deleted file mode 100644
index a0c88361a..000000000
--- a/man3/remque.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/insque.3
diff --git a/man3/remquo.3 b/man3/remquo.3
deleted file mode 100644
index 3b6b803b5..000000000
--- a/man3/remquo.3
+++ /dev/null
@@ -1,141 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" based on glibc infopages
-.\" polished, aeb
-.\"
-.TH remquo 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-remquo, remquof, remquol \- remainder and part of quotient
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double remquo(double " x ", double " y ", int *" quo );
-.BI "float remquof(float " x ", float " y ", int *" quo );
-.BI "long double remquol(long double " x ", long double " y ", int *" quo );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR remquo (),
-.BR remquof (),
-.BR remquol ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-These functions compute the remainder and part of the quotient
-upon division of
-.I x
-by
-.IR y .
-A few bits of the quotient are stored via the
-.I quo
-pointer.
-The remainder is returned as the function result.
-.PP
-The value of the remainder is the same as that computed by the
-.BR remainder (3)
-function.
-.PP
-The value stored via the
-.I quo
-pointer has the sign of
-.I x\~/\~y
-and agrees with the quotient in at least the low order 3 bits.
-.PP
-For example, \fIremquo(29.0,\ 3.0)\fP returns \-1.0 and might store 2.
-Note that the actual quotient might not fit in an integer.
-.\" A possible application of this function might be the computation
-.\" of sin(x). Compute remquo(x, pi/2, &quo) or so.
-.\"
-.\" glibc, UnixWare: return 3 bits
-.\" MacOS 10: return 7 bits
-.SH RETURN VALUE
-On success, these functions return the same value as
-the analogous functions described in
-.BR remainder (3).
-.PP
-If
-.I x
-or
-.I y
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is an infinity,
-and
-.I y
-is not a NaN,
-a domain error occurs, and
-a NaN is returned.
-.PP
-If
-.I y
-is zero,
-and
-.I x
-is not a NaN,
-a domain error occurs, and
-a NaN is returned.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is an infinity or \fIy\fP is 0, \
-and the other argument is not a NaN
-.\" .I errno
-.\" is set to
-.\" .BR EDOM .
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.PP
-These functions do not set
-.IR errno .
-.\" FIXME . Is it intentional that these functions do not set errno?
-.\" Bug raised: https://www.sourceware.org/bugzilla/show_bug.cgi?id=6802
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR remquo (),
-.BR remquof (),
-.BR remquol ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR fmod (3),
-.BR logb (3),
-.BR remainder (3)
diff --git a/man3/remquof.3 b/man3/remquof.3
deleted file mode 100644
index 458f05120..000000000
--- a/man3/remquof.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/remquo.3
diff --git a/man3/remquol.3 b/man3/remquol.3
deleted file mode 100644
index 458f05120..000000000
--- a/man3/remquol.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/remquo.3
diff --git a/man3/res_init.3 b/man3/res_init.3
deleted file mode 100644
index 87a6d0e83..000000000
--- a/man3/res_init.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/resolver.3
diff --git a/man3/res_mkquery.3 b/man3/res_mkquery.3
deleted file mode 100644
index 87a6d0e83..000000000
--- a/man3/res_mkquery.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/resolver.3
diff --git a/man3/res_nclose.3 b/man3/res_nclose.3
deleted file mode 100644
index 87a6d0e83..000000000
--- a/man3/res_nclose.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/resolver.3
diff --git a/man3/res_ninit.3 b/man3/res_ninit.3
deleted file mode 100644
index 87a6d0e83..000000000
--- a/man3/res_ninit.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/resolver.3
diff --git a/man3/res_nmkquery.3 b/man3/res_nmkquery.3
deleted file mode 100644
index 87a6d0e83..000000000
--- a/man3/res_nmkquery.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/resolver.3
diff --git a/man3/res_nquery.3 b/man3/res_nquery.3
deleted file mode 100644
index 87a6d0e83..000000000
--- a/man3/res_nquery.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/resolver.3
diff --git a/man3/res_nquerydomain.3 b/man3/res_nquerydomain.3
deleted file mode 100644
index 87a6d0e83..000000000
--- a/man3/res_nquerydomain.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/resolver.3
diff --git a/man3/res_nsearch.3 b/man3/res_nsearch.3
deleted file mode 100644
index 87a6d0e83..000000000
--- a/man3/res_nsearch.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/resolver.3
diff --git a/man3/res_nsend.3 b/man3/res_nsend.3
deleted file mode 100644
index 87a6d0e83..000000000
--- a/man3/res_nsend.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/resolver.3
diff --git a/man3/res_query.3 b/man3/res_query.3
deleted file mode 100644
index 87a6d0e83..000000000
--- a/man3/res_query.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/resolver.3
diff --git a/man3/res_querydomain.3 b/man3/res_querydomain.3
deleted file mode 100644
index 87a6d0e83..000000000
--- a/man3/res_querydomain.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/resolver.3
diff --git a/man3/res_search.3 b/man3/res_search.3
deleted file mode 100644
index 87a6d0e83..000000000
--- a/man3/res_search.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/resolver.3
diff --git a/man3/res_send.3 b/man3/res_send.3
deleted file mode 100644
index 87a6d0e83..000000000
--- a/man3/res_send.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/resolver.3
diff --git a/man3/resolver.3 b/man3/resolver.3
deleted file mode 100644
index e6a3f318e..000000000
--- a/man3/resolver.3
+++ /dev/null
@@ -1,512 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and (C) Copyright 2015 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-25 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2004-10-31 by aeb
-.\"
-.TH resolver 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-res_ninit, res_nquery, res_nsearch, res_nquerydomain, res_nmkquery, res_nsend,
-res_nclose,
-res_init, res_query, res_search, res_querydomain, res_mkquery, res_send,
-dn_comp, dn_expand \-
-resolver routines
-.SH LIBRARY
-Resolver library
-.RI ( libresolv ", " \-lresolv )
-.SH SYNOPSIS
-.nf
-.B #include <netinet/in.h>
-.B #include <arpa/nameser.h>
-.B #include <resolv.h>
-.PP
-.B struct __res_state;
-.B typedef struct __res_state *res_state;
-.PP
-.BI "int res_ninit(res_state " statep );
-.PP
-.BI "void res_nclose(res_state " statep );
-.PP
-.BI "int res_nquery(res_state " statep ,
-.BI " const char *" dname ", int " class ", int " type ,
-.BI " unsigned char " answer [. anslen "], int " anslen );
-.PP
-.BI "int res_nsearch(res_state " statep ,
-.BI " const char *" dname ", int " class ", int " type ,
-.BI " unsigned char " answer [. anslen "], int " anslen );
-.PP
-.BI "int res_nquerydomain(res_state " statep ,
-.BI " const char *" name ", const char *" domain ,
-.BI " int " class ", int " type ", unsigned char " answer [. anslen ],
-.BI " int " anslen );
-.PP
-.BI "int res_nmkquery(res_state " statep ,
-.BI " int " op ", const char *" dname ", int " class ,
-.BI " int " type ", const unsigned char " data [. datalen "], \
-int " datalen ,
-.BI " const unsigned char *" newrr ,
-.BI " unsigned char " buf [. buflen "], int " buflen );
-.PP
-.BI "int res_nsend(res_state " statep ,
-.BI " const unsigned char " msg [. msglen "], int " msglen ,
-.BI " unsigned char " answer [. anslen "], int " anslen );
-.PP
-.BI "int dn_comp(const char *" exp_dn ", unsigned char " comp_dn [. length ],
-.BI " int " length ", unsigned char **" dnptrs ,
-.BI " unsigned char **" lastdnptr );
-.PP
-.BI "int dn_expand(const unsigned char *" msg ,
-.BI " const unsigned char *" eomorig ,
-.BI " const unsigned char *" comp_dn ", char " exp_dn [. length ],
-.BI " int " length );
-.PP
-.B [[deprecated]] extern struct __res_state _res;
-.PP
-.B [[deprecated]] int res_init(void);
-.PP
-.B [[deprecated]]
-.BI "int res_query(const char *" dname ", int " class ", int " type ,
-.BI " unsigned char " answer [. anslen "], int " anslen );
-.PP
-.B [[deprecated]]
-.BI "int res_search(const char *" dname ", int " class ", int " type ,
-.BI " unsigned char " answer [. anslen "], int " anslen );
-.PP
-.B [[deprecated]]
-.BI "int res_querydomain(const char *" name ", const char *" domain ,
-.BI " int " class ", int " type ", unsigned char " answer [. anslen ],
-.BI " int " anslen );
-.PP
-.B [[deprecated]]
-.BI "int res_mkquery(int " op ", const char *" dname ", int " class ,
-.BI " int " type ", const unsigned char " data [. datalen "], \
-int " datalen ,
-.BI " const unsigned char *" newrr ,
-.BI " unsigned char " buf [. buflen "], int " buflen );
-.PP
-.B [[deprecated]]
-.BI "int res_send(const unsigned char " msg [. msglen "], int " msglen ,
-.BI " unsigned char " answer [. anslen "], int " anslen );
-.fi
-.SH DESCRIPTION
-.B Note:
-This page is incomplete (various resolver functions provided by glibc
-are not described) and likely out of date.
-.PP
-The functions described below make queries to and interpret
-the responses from Internet domain name servers.
-.PP
-The API consists of a set of more modern, reentrant functions
-and an older set of nonreentrant functions that have been superseded.
-The traditional resolver interfaces such as
-.BR res_init ()
-and
-.BR res_query ()
-use some static (global) state stored in the
-.I _res
-structure, rendering these functions non-thread-safe.
-BIND 8.2 introduced a set of new interfaces
-.BR res_ninit (),
-.BR res_nquery (),
-and so on, which take a
-.I res_state
-as their first argument, so you can use a per-thread resolver state.
-.PP
-The
-.BR res_ninit ()
-and
-.BR res_init ()
-functions read the configuration files (see
-.BR resolv.conf (5))
-to get the default domain name and name
-server address(es).
-If no server is given, the local host is tried.
-If no domain is given, that associated with the local host is used.
-It can be overridden with the environment variable
-.BR LOCALDOMAIN .
-.BR res_ninit ()
-or
-.BR res_init ()
-is normally executed by the first call to one of the
-other functions.
-Every call to
-.BR res_ninit ()
-requires a corresponding call to
-.BR res_nclose ()
-to free memory allocated by
-.BR res_ninit ()
-and subsequent calls to
-.BR res_nquery ().
-.PP
-The
-.BR res_nquery ()
-and
-.BR res_query ()
-functions query the name server for the
-fully qualified domain name \fIname\fP of specified \fItype\fP and
-\fIclass\fP.
-The reply is left in the buffer \fIanswer\fP of length
-\fIanslen\fP supplied by the caller.
-.PP
-The
-.BR res_nsearch ()
-and
-.BR res_search ()
-functions make a query and waits for the response like
-.BR res_nquery ()
-and
-.BR res_query (),
-but in addition they implement the default and search
-rules controlled by
-.B RES_DEFNAMES
-and
-.B RES_DNSRCH
-(see description of
-\fI_res\fP options below).
-.PP
-The
-.BR res_nquerydomain ()
-and
-.BR res_querydomain ()
-functions make a query using
-.BR res_nquery ()/ res_query ()
-on the concatenation of \fIname\fP and \fIdomain\fP.
-.PP
-The following functions are lower-level routines used by
-.BR res_nquery ()/ res_query ().
-.PP
-The
-.BR res_nmkquery ()
-and
-.BR res_mkquery ()
-functions construct a query message in \fIbuf\fP
-of length \fIbuflen\fP for the domain name \fIdname\fP.
-The query type
-\fIop\fP is one of the following (typically
-.BR QUERY ):
-.TP
-.B QUERY
-Standard query.
-.TP
-.B IQUERY
-Inverse query.
-This option was removed in glibc 2.26,
-.\" commit e4e794841e3140875f2aa86b90e2ada3d61e1244
-since it has not been supported by DNS servers for a very long time.
-.TP
-.B NS_NOTIFY_OP
-Notify secondary of SOA (Start of Authority) change.
-.PP
-\fInewrr\fP is currently unused.
-.PP
-The
-.BR res_nsend ()
-and
-.BR res_send ()
-function send a preformatted query given in
-\fImsg\fP of length \fImsglen\fP and returns the answer in \fIanswer\fP
-which is of length \fIanslen\fP.
-They will call
-.BR res_ninit ()/ res_init ()
-if it has not already been called.
-.PP
-The
-.BR dn_comp ()
-function compresses the domain name \fIexp_dn\fP
-and stores it in the buffer \fIcomp_dn\fP of length \fIlength\fP.
-The compression uses an array of pointers \fIdnptrs\fP to previously
-compressed names in the current message.
-The first pointer points
-to the beginning of the message and the list ends with NULL.
-The limit of the array is specified by \fIlastdnptr\fP.
-If \fIdnptr\fP is NULL, domain names are not compressed.
-If \fIlastdnptr\fP is NULL, the list
-of labels is not updated.
-.PP
-The
-.BR dn_expand ()
-function expands the compressed domain name
-\fIcomp_dn\fP to a full domain name, which is placed in the buffer
-\fIexp_dn\fP of size \fIlength\fP.
-The compressed name is contained
-in a query or reply message, and \fImsg\fP points to the beginning of
-the message.
-.PP
-The resolver routines use configuration and state information
-contained in a
-.I __res_state
-structure (either passed as the
-.I statep
-argument, or in the global variable
-.IR _res ,
-in the case of the older nonreentrant functions).
-The only field of this structure that is normally manipulated by the
-user is the
-.I options
-field.
-This field can contain the bitwise "OR"
-of the following options:
-.TP
-.B RES_INIT
-True if
-.BR res_ninit ()
-or
-.BR res_init ()
-has been called.
-.TP
-.B RES_DEBUG
-Print debugging messages.
-This option is available only if glibc was built with debugging enabled,
-.\" See resolv/README.
-.\" Support for RES_DEBUG was made conditional in glibc 2.2.
-which is not the default.
-.TP
-.BR RES_AAONLY " (unimplemented; deprecated in glibc 2.25)"
-Accept authoritative answers only.
-.BR res_send ()
-continues until
-it finds an authoritative answer or returns an error.
-This option was present but unimplemented until glibc 2.24;
-since glibc 2.25, it is deprecated, and its usage produces a warning.
-.TP
-.B RES_USEVC
-Use TCP connections for queries rather than UDP datagrams.
-.TP
-.BR RES_PRIMARY " (unimplemented; deprecated in glibc 2.25)"
-Query primary domain name server only.
-This option was present but unimplemented until glibc 2.24;
-since glibc 2.25, it is deprecated, and its usage produces a warning.
-.TP
-.B RES_IGNTC
-Ignore truncation errors.
-Don't retry with TCP.
-.TP
-.B RES_RECURSE
-Set the recursion desired bit in queries.
-Recursion is carried out
-by the domain name server, not by
-.BR res_send ().
-[Enabled by default].
-.TP
-.B RES_DEFNAMES
-If set,
-.BR res_search ()
-will append the default domain name to
-single component names\[em]that is, those that do not contain a dot.
-[Enabled by default].
-.TP
-.B RES_STAYOPEN
-Used with
-.B RES_USEVC
-to keep the TCP connection open between queries.
-.TP
-.B RES_DNSRCH
-If set,
-.BR res_search ()
-will search for hostnames in the current
-domain and in parent domains.
-This option is used by
-.BR gethostbyname (3).
-[Enabled by default].
-.TP
-.B RES_INSECURE1
-Accept a response from a wrong server.
-This can be used to detect potential security hazards,
-but you need to compile glibc with debugging enabled and use
-.B RES_DEBUG
-option (for debug purpose only).
-.TP
-.B RES_INSECURE2
-Accept a response which contains a wrong query.
-This can be used to detect potential security hazards,
-but you need to compile glibc with debugging enabled and use
-.B RES_DEBUG
-option (for debug purpose only).
-.TP
-.B RES_NOALIASES
-Disable usage of
-.B HOSTALIASES
-environment variable.
-.TP
-.B RES_USE_INET6
-Try an AAAA query before an A query inside the
-.BR gethostbyname (3)
-function, and map IPv4 responses in IPv6 "tunneled form" if no AAAA records
-are found but an A record set exists.
-Since glibc 2.25, this option is deprecated,
-and its usage produces a warning;
-applications should use
-.BR getaddrinfo (3),
-rather than
-.BR gethostbyname (3).
-.TP
-.B RES_ROTATE
-Causes round-robin selection of name servers from among those listed.
-This has the effect of spreading the query load among all listed servers,
-rather than having all clients try the first listed server first every
-time.
-.TP
-.BR RES_NOCHECKNAME " (unimplemented; deprecated in glibc 2.25)"
-Disable the modern BIND checking of incoming hostnames and mail names
-for invalid characters such as underscore (_), non-ASCII,
-or control characters.
-This option was present until glibc 2.24;
-since glibc 2.25, it is deprecated, and its usage produces a warning.
-.TP
-.BR RES_KEEPTSIG " (unimplemented; deprecated in glibc 2.25)"
-Do not strip TSIG records.
-This option was present but unimplemented until glibc 2.24;
-since glibc 2.25, it is deprecated, and its usage produces a warning.
-.TP
-.BR RES_BLAST " (unimplemented; deprecated in glibc 2.25)"
-Send each query simultaneously and recursively to all servers.
-This option was present but unimplemented until glibc 2.24;
-since glibc 2.25, it is deprecated, and its usage produces a warning.
-.TP
-.BR RES_USEBSTRING " (glibc 2.3.4 to glibc 2.24)"
-Make reverse IPv6 lookups using the bit-label format described in RFC 2673;
-if this option is not set (which is the default), then nibble format is used.
-This option was removed in glibc 2.25,
-since it relied on a backward-incompatible
-DNS extension that was never deployed on the Internet.
-.TP
-.BR RES_NOIP6DOTINT " (glibc 2.24 and earlier)"
-Use
-.I ip6.arpa
-zone in IPv6 reverse lookup instead of
-.IR ip6.int ,
-which is deprecated since glibc 2.3.4.
-This option is present up to and including glibc 2.24,
-where it is enabled by default.
-In glibc 2.25, this option was removed.
-.TP
-.BR RES_USE_EDNS0 " (since glibc 2.6)"
-Enables support for the DNS extensions (EDNS0) described in RFC 2671.
-.TP
-.BR RES_SNGLKUP " (since glibc 2.10)"
-By default, glibc performs IPv4 and IPv6 lookups in parallel
-since glibc 2.9.
-Some appliance DNS servers cannot handle these queries properly
-and make the requests time out.
-This option disables the behavior and makes glibc
-perform the IPv6 and IPv4 requests sequentially
-(at the cost of some slowdown of the resolving process).
-.TP
-.B RES_SNGLKUPREOP
-When
-.B RES_SNGLKUP
-option is enabled, opens a new socket for the each request.
-.TP
-.B RES_USE_DNSSEC
-Use DNSSEC with OK bit in OPT record.
-This option implies
-.BR RES_USE_EDNS0 .
-.TP
-.B RES_NOTLDQUERY
-Do not look up unqualified name as a top-level domain (TLD).
-.TP
-.B RES_DEFAULT
-Default option which implies:
-.BR RES_RECURSE ,
-.BR RES_DEFNAMES ,
-.BR RES_DNSRCH ,
-and
-.BR RES_NOIP6DOTINT .
-.\"
-.SH RETURN VALUE
-The
-.BR res_ninit ()
-and
-.BR res_init ()
-functions return 0 on success, or \-1 if an error
-occurs.
-.PP
-The
-.BR res_nquery (),
-.BR res_query (),
-.BR res_nsearch (),
-.BR res_search (),
-.BR res_nquerydomain (),
-.BR res_querydomain (),
-.BR res_nmkquery (),
-.BR res_mkquery (),
-.BR res_nsend (),
-and
-.BR res_send ()
-functions return the length
-of the response, or \-1 if an error occurs.
-.PP
-The
-.BR dn_comp ()
-and
-.BR dn_expand ()
-functions return the length
-of the compressed name, or \-1 if an error occurs.
-.PP
-In the case of an error return from
-.BR res_nquery (),
-.BR res_query (),
-.BR res_nsearch (),
-.BR res_search (),
-.BR res_nquerydomain (),
-or
-.BR res_querydomain (),
-the global variable
-.I h_errno
-(see
-.BR gethostbyname (3))
-can be consulted to determine the cause of the error.
-.SH FILES
-.TP
-.I /etc/resolv.conf
-resolver configuration file
-.TP
-.I /etc/host.conf
-resolver configuration file
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR res_ninit (),
-.BR res_nclose (),
-.BR res_nquery (),
-.BR res_nsearch (),
-.BR res_nquerydomain (),
-.BR res_nsend ()
-T} Thread safety MT-Safe locale
-T{
-.BR res_nmkquery (),
-.BR dn_comp (),
-.BR dn_expand ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-4.3BSD.
-.SH SEE ALSO
-.BR gethostbyname (3),
-.BR resolv.conf (5),
-.BR resolver (5),
-.BR hostname (7),
-.BR named (8)
-.PP
-The GNU C library source file
-.IR resolv/README .
diff --git a/man3/rewind.3 b/man3/rewind.3
deleted file mode 100644
index a1487b5a8..000000000
--- a/man3/rewind.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fseek.3
diff --git a/man3/rewinddir.3 b/man3/rewinddir.3
deleted file mode 100644
index 3b7ff779e..000000000
--- a/man3/rewinddir.3
+++ /dev/null
@@ -1,63 +0,0 @@
-'\" t
-.\" Copyright (C) 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:29:11 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 11 June 1995 by Andries Brouwer (aeb@cwi.nl)
-.TH rewinddir 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-rewinddir \- reset directory stream
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.B #include <dirent.h>
-.PP
-.BI "void rewinddir(DIR *" dirp );
-.fi
-.SH DESCRIPTION
-The
-.BR rewinddir ()
-function resets the position of the directory
-stream
-.I dirp
-to the beginning of the directory.
-.SH RETURN VALUE
-The
-.BR rewinddir ()
-function returns no value.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR rewinddir ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR closedir (3),
-.BR opendir (3),
-.BR readdir (3),
-.BR scandir (3),
-.BR seekdir (3),
-.BR telldir (3)
diff --git a/man3/rexec.3 b/man3/rexec.3
deleted file mode 100644
index ce0a4cde0..000000000
--- a/man3/rexec.3
+++ /dev/null
@@ -1,164 +0,0 @@
-'\" t
-.\" Copyright (c) 1983, 1991, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)rexec.3 8.1 (Berkeley) 6/4/93
-.\" $FreeBSD: src/lib/libcompat/4.3/rexec.3,v 1.12 2004/07/02 23:52:14 ru Exp $
-.\"
-.\" Taken from FreeBSD 5.4; not checked against Linux reality (mtk)
-.\"
-.\" 2013-06-21, mtk, Converted from mdoc to man macros
-.\"
-.TH rexec 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-rexec, rexec_af \- return stream to a remote command
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <netdb.h>
-.PP
-.B [[deprecated]]
-.BI "int rexec(char **restrict " ahost ", int " inport ,
-.BI " const char *restrict " user ", const char *restrict " passwd ,
-.BI " const char *restrict " cmd ", int *restrict " fd2p );
-.PP
-.B [[deprecated]]
-.BI "int rexec_af(char **restrict " ahost ", int " inport ,
-.BI " const char *restrict " user ", const char *restrict " passwd ,
-.BI " const char *restrict " cmd ", int *restrict " fd2p ,
-.BI " sa_family_t " af );
-.fi
-.PP
-.BR rexec (),
-.BR rexec_af ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- In glibc up to and including 2.19:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-This interface is obsoleted by
-.BR rcmd (3).
-.PP
-The
-.BR rexec ()
-function
-looks up the host
-.I *ahost
-using
-.BR gethostbyname (3),
-returning \-1 if the host does not exist.
-Otherwise,
-.I *ahost
-is set to the standard name of the host.
-If a username and password are both specified, then these
-are used to authenticate to the foreign host; otherwise
-the environment and then the
-.I .netrc
-file in user's
-home directory are searched for appropriate information.
-If all this fails, the user is prompted for the information.
-.PP
-The port
-.I inport
-specifies which well-known DARPA Internet port to use for
-the connection; the call
-.I "getservbyname(""exec"", ""tcp"")"
-(see
-.BR getservent (3))
-will return a pointer to a structure that contains the necessary port.
-The protocol for connection is described in detail in
-.BR rexecd (8).
-.PP
-If the connection succeeds,
-a socket in the Internet domain of type
-.B SOCK_STREAM
-is returned to
-the caller, and given to the remote command as
-.I stdin
-and
-.IR stdout .
-If
-.I fd2p
-is nonzero, then an auxiliary channel to a control
-process will be setup, and a file descriptor for it will be placed
-in
-.IR *fd2p .
-The control process will return diagnostic
-output from the command (unit 2) on this channel, and will also
-accept bytes on this channel as being UNIX signal numbers, to be
-forwarded to the process group of the command.
-The diagnostic
-information returned does not include remote authorization failure,
-as the secondary connection is set up after authorization has been
-verified.
-If
-.I fd2p
-is 0, then the
-.I stderr
-(unit 2 of the remote
-command) will be made the same as the
-.I stdout
-and no
-provision is made for sending arbitrary signals to the remote process,
-although you may be able to get its attention by using out-of-band data.
-.SS rexec_af()
-The
-.BR rexec ()
-function works over IPv4
-.RB ( AF_INET ).
-By contrast, the
-.BR rexec_af ()
-function provides an extra argument,
-.IR af ,
-that allows the caller to select the protocol.
-This argument can be specified as
-.BR AF_INET ,
-.BR AF_INET6 ,
-or
-.B AF_UNSPEC
-(to allow the implementation to select the protocol).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR rexec (),
-.BR rexec_af ()
-T} Thread safety MT-Unsafe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-.TP
-.BR rexec ()
-4.2BSD, BSD, Solaris.
-.TP
-.BR rexec_af ()
-glibc 2.2.
-.SH BUGS
-The
-.BR rexec ()
-function sends the unencrypted password across the network.
-.PP
-The underlying service is considered a big security hole and therefore
-not enabled on many sites; see
-.BR rexecd (8)
-for explanations.
-.SH SEE ALSO
-.BR rcmd (3),
-.BR rexecd (8)
diff --git a/man3/rexec_af.3 b/man3/rexec_af.3
deleted file mode 100644
index 517a2d23b..000000000
--- a/man3/rexec_af.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rexec.3
diff --git a/man3/rindex.3 b/man3/rindex.3
deleted file mode 100644
index a9cd4b342..000000000
--- a/man3/rindex.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/index.3
diff --git a/man3/rint.3 b/man3/rint.3
deleted file mode 100644
index a21212288..000000000
--- a/man3/rint.3
+++ /dev/null
@@ -1,148 +0,0 @@
-'\" t
-.\" Copyright 2001 Andries Brouwer <aeb@cwi.nl>.
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH rint 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-nearbyint, nearbyintf, nearbyintl, rint, rintf, rintl \- round
-to nearest integer
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double nearbyint(double " x );
-.BI "float nearbyintf(float " x );
-.BI "long double nearbyintl(long double " x );
-.PP
-.BI "double rint(double " x );
-.BI "float rintf(float " x );
-.BI "long double rintl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR nearbyint (),
-.BR nearbyintf (),
-.BR nearbyintl ():
-.nf
- _POSIX_C_SOURCE >= 200112L || _ISOC99_SOURCE
-.fi
-.PP
-.BR rint ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR rintf (),
-.BR rintl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR nearbyint (),
-.BR nearbyintf (),
-and
-.BR nearbyintl ()
-functions round their argument to an integer value in floating-point
-format, using the current rounding direction (see
-.BR fesetround (3))
-and without raising the
-.I inexact
-exception.
-When the current rounding direction is to nearest, these
-functions round halfway cases to the even integer in accordance with
-IEEE-754.
-.PP
-The
-.BR rint (),
-.BR rintf (),
-and
-.BR rintl ()
-functions do the same, but will raise the
-.I inexact
-exception
-.RB ( FE_INEXACT ,
-checkable via
-.BR fetestexcept (3))
-when the result differs in value from the argument.
-.SH RETURN VALUE
-These functions return the rounded integer value.
-.PP
-If
-.I x
-is integral, +0, \-0, NaN, or infinite,
-.I x
-itself is returned.
-.SH ERRORS
-No errors occur.
-POSIX.1-2001 documents a range error for overflows, but see NOTES.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR nearbyint (),
-.BR nearbyintf (),
-.BR nearbyintl (),
-.BR rint (),
-.BR rintf (),
-.BR rintl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.SH NOTES
-SUSv2 and POSIX.1-2001 contain text about overflow (which might set
-.I errno
-to
-.BR ERANGE ,
-or raise an
-.B FE_OVERFLOW
-exception).
-In practice, the result cannot overflow on any current machine,
-so this error-handling stuff is just nonsense.
-(More precisely, overflow can happen only when the maximum value
-of the exponent is smaller than the number of mantissa bits.
-For the IEEE-754 standard 32-bit and 64-bit floating-point numbers
-the maximum value of the exponent is 127 (respectively, 1023),
-and the number of mantissa bits
-including the implicit bit
-is 24 (respectively, 53).)
-.PP
-If you want to store the rounded value in an integer type,
-you probably want to use one of the functions described in
-.BR lrint (3)
-instead.
-.SH SEE ALSO
-.BR ceil (3),
-.BR floor (3),
-.BR lrint (3),
-.BR round (3),
-.BR trunc (3)
diff --git a/man3/rintf.3 b/man3/rintf.3
deleted file mode 100644
index 3300c2c40..000000000
--- a/man3/rintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rint.3
diff --git a/man3/rintl.3 b/man3/rintl.3
deleted file mode 100644
index 3300c2c40..000000000
--- a/man3/rintl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rint.3
diff --git a/man3/round.3 b/man3/round.3
deleted file mode 100644
index 34c0efbf6..000000000
--- a/man3/round.3
+++ /dev/null
@@ -1,113 +0,0 @@
-'\" t
-.\" Copyright 2001 Andries Brouwer <aeb@cwi.nl>.
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH round 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-round, roundf, roundl \- round to nearest integer, away from zero
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double round(double " x );
-.BI "float roundf(float " x );
-.BI "long double roundl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR round (),
-.BR roundf (),
-.BR roundl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-These functions round
-.I x
-to the nearest integer, but
-round halfway cases away from zero (regardless of the current rounding
-direction, see
-.BR fenv (3)),
-instead of to the nearest even integer like
-.BR rint (3).
-.PP
-For example,
-.I round(0.5)
-is 1.0, and
-.I round(\-0.5)
-is \-1.0.
-.SH RETURN VALUE
-These functions return the rounded integer value.
-.PP
-If
-.I x
-is integral, +0, \-0, NaN, or infinite,
-.I x
-itself is returned.
-.SH ERRORS
-No errors occur.
-POSIX.1-2001 documents a range error for overflows, but see NOTES.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR round (),
-.BR roundf (),
-.BR roundl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH NOTES
-POSIX.1-2001 contains text about overflow (which might set
-.I errno
-to
-.BR ERANGE ,
-or raise an
-.B FE_OVERFLOW
-exception).
-In practice, the result cannot overflow on any current machine,
-so this error-handling stuff is just nonsense.
-.\" The POSIX.1-2001 APPLICATION USAGE SECTION discusses this point.
-(More precisely, overflow can happen only when the maximum value
-of the exponent is smaller than the number of mantissa bits.
-For the IEEE-754 standard 32-bit and 64-bit floating-point numbers
-the maximum value of the exponent is 127 (respectively, 1023),
-and the number of mantissa bits
-including the implicit bit
-is 24 (respectively, 53).)
-.PP
-If you want to store the rounded value in an integer type,
-you probably want to use one of the functions described in
-.BR lround (3)
-instead.
-.SH SEE ALSO
-.BR ceil (3),
-.BR floor (3),
-.BR lround (3),
-.BR nearbyint (3),
-.BR rint (3),
-.BR trunc (3)
diff --git a/man3/roundf.3 b/man3/roundf.3
deleted file mode 100644
index f7ab38670..000000000
--- a/man3/roundf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/round.3
diff --git a/man3/roundl.3 b/man3/roundl.3
deleted file mode 100644
index f7ab38670..000000000
--- a/man3/roundl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/round.3
diff --git a/man3/roundup.3 b/man3/roundup.3
deleted file mode 100644
index 55c59f9f8..000000000
--- a/man3/roundup.3
+++ /dev/null
@@ -1,56 +0,0 @@
-.\" Copyright (C) 2023 Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH roundup 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-roundup \- round up in steps
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/param.h>
-.PP
-.BI roundup( x ", " step );
-.fi
-.SH DESCRIPTION
-This macro rounds
-.I x
-to the nearest multiple of
-.I step
-that is not less than
-.IR x .
-.PP
-It is typically used for
-rounding up a pointer to align it or
-increasing a buffer to be allocated.
-.PP
-This API is not designed to be generic,
-and doesn't work in some cases
-that are not important for the typical use cases described above.
-See CAVEATS.
-.SH RETURN VALUE
-This macro returns the rounded value.
-.SH STANDARDS
-None.
-.SH CAVEATS
-The arguments may be evaluated more than once.
-.PP
-.I x
-should be nonnegative,
-and
-.I step
-should be positive.
-.PP
-If
-.I x + step
-would overflow or wrap around,
-the behavior is undefined.
-.SH SEE ALSO
-.BR ceil (3),
-.BR floor (3),
-.BR lrint (3),
-.BR rint (3),
-.BR lround (3),
-.BR round (3)
diff --git a/man3/rpc.3 b/man3/rpc.3
deleted file mode 100644
index 7ebe97898..000000000
--- a/man3/rpc.3
+++ /dev/null
@@ -1,1204 +0,0 @@
-'\" t
-.\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
-.\"
-.\" %%%LICENSE_START(BSD_ONELINE_CDROM)
-.\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
-.\" %%%LICENSE_END
-.\"
-.\" @(#)rpc.3n 2.4 88/08/08 4.0 RPCSRC; from 1.19 88/06/24 SMI
-.\"
-.\" 2007-12-30, mtk, Convert function prototypes to modern C syntax
-.\"
-.TH rpc 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-rpc \- library routines for remote procedure calls
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS AND DESCRIPTION
-These routines allow C programs to make procedure
-calls on other machines across the network.
-First, the client calls a procedure to send a data packet to the server.
-Upon receipt of the packet, the server calls a dispatch routine
-to perform the requested service, and then sends back a reply.
-Finally, the procedure call returns to the client.
-.\" .LP
-.\" We don't have an rpc_secure.3 page at the moment -- MTK, 19 Sep 05
-.\" Routines that are used for Secure RPC (DES authentication) are described in
-.\" .BR rpc_secure (3).
-.\" Secure RPC can be used only if DES encryption is available.
-.PP
-To take use of these routines, include the header file
-.IR "<rpc/rpc.h>" .
-.PP
-The prototypes below make use of the following types:
-.PP
-.RS 4
-.EX
-.BI "typedef int " bool_t ;
-.PP
-.BI "typedef bool_t (*" xdrproc_t ")(XDR *, void *, ...);"
-.PP
-.BI "typedef bool_t (*" resultproc_t ")(caddr_t " resp ,
-.BI " struct sockaddr_in *" raddr );
-.EE
-.RE
-.PP
-See the header files for the declarations of the
-.IR AUTH ,
-.IR CLIENT ,
-.IR SVCXPRT ,
-and
-.I XDR
-types.
-.PP
-.nf
-.BI "void auth_destroy(AUTH *" auth );
-.fi
-.IP
-A macro that destroys the authentication information associated with
-.IR auth .
-Destruction usually involves deallocation of private data structures.
-The use of
-.I auth
-is undefined after calling
-.BR auth_destroy ().
-.PP
-.nf
-.B AUTH *authnone_create(void);
-.fi
-.IP
-Create and return an RPC
-authentication handle that passes nonusable authentication
-information with each remote procedure call.
-This is the default authentication used by RPC.
-.PP
-.nf
-.BI "AUTH *authunix_create(char *" host ", uid_t " uid ", gid_t " gid ,
-.BI " int " len ", gid_t " aup_gids [. len ]);
-.fi
-.IP
-Create and return an RPC authentication handle that contains
-authentication information.
-The parameter
-.I host
-is the name of the machine on which the information was created;
-.I uid
-is the user's user ID;
-.I gid
-is the user's current group ID;
-.I len
-and
-.I aup_gids
-refer to a counted array of groups to which the user belongs.
-It is easy to impersonate a user.
-.PP
-.nf
-.B AUTH *authunix_create_default(void);
-.fi
-.IP
-Calls
-.BR authunix_create ()
-with the appropriate parameters.
-.PP
-.nf
-.BI "int callrpc(char *" host ", unsigned long " prognum ,
-.BI " unsigned long " versnum ", unsigned long " procnum ,
-.BI " xdrproc_t " inproc ", const char *" in ,
-.BI " xdrproc_t " outproc ", char *" out );
-.fi
-.IP
-Call the remote procedure associated with
-.IR prognum ,
-.IR versnum ,
-and
-.I procnum
-on the machine,
-.IR host .
-The parameter
-.I in
-is the address of the procedure's argument(s), and
-.I out
-is the address of where to place the result(s);
-.I inproc
-is used to encode the procedure's parameters, and
-.I outproc
-is used to decode the procedure's results.
-This routine returns zero if it succeeds, or the value of
-.B "enum clnt_stat"
-cast to an integer if it fails.
-The routine
-.BR clnt_perrno ()
-is handy for translating failure statuses into messages.
-.IP
-Warning: calling remote procedures with this routine
-uses UDP/IP as a transport; see
-.BR clntudp_create ()
-for restrictions.
-You do not have control of timeouts or authentication using this routine.
-.PP
-.nf
-.BI "enum clnt_stat clnt_broadcast(unsigned long " prognum ,
-.BI " unsigned long " versnum ", unsigned long " procnum ,
-.BI " xdrproc_t " inproc ", char *" in ,
-.BI " xdrproc_t " outproc ", char *" out ,
-.BI " resultproc_t " eachresult );
-.fi
-.IP
-Like
-.BR callrpc (),
-except the call message is broadcast to all locally
-connected broadcast nets.
-Each time it receives a response, this routine calls
-.BR eachresult (),
-whose form is:
-.IP
-.in +4n
-.EX
-.BI "eachresult(char *" out ", struct sockaddr_in *" addr );
-.EE
-.in
-.IP
-where
-.I out
-is the same as
-.I out
-passed to
-.BR clnt_broadcast (),
-except that the remote procedure's output is decoded there;
-.I addr
-points to the address of the machine that sent the results.
-If
-.BR eachresult ()
-returns zero,
-.BR clnt_broadcast ()
-waits for more replies; otherwise it returns with appropriate status.
-.IP
-Warning: broadcast sockets are limited in size to the
-maximum transfer unit of the data link.
-For ethernet, this value is 1500 bytes.
-.PP
-.nf
-.BI "enum clnt_stat clnt_call(CLIENT *" clnt ", unsigned long " procnum ,
-.BI " xdrproc_t " inproc ", char *" in ,
-.BI " xdrproc_t " outproc ", char *" out ,
-.BI " struct timeval " tout );
-.fi
-.IP
-A macro that calls the remote procedure
-.I procnum
-associated with the client handle,
-.IR clnt ,
-which is obtained with an RPC client creation routine such as
-.BR clnt_create ().
-The parameter
-.I in
-is the address of the procedure's argument(s), and
-.I out
-is the address of where to place the result(s);
-.I inproc
-is used to encode the procedure's parameters, and
-.I outproc
-is used to decode the procedure's results;
-.I tout
-is the time allowed for results to come back.
-.PP
-.nf
-.BI "clnt_destroy(CLIENT *" clnt );
-.fi
-.IP
-A macro that destroys the client's RPC handle.
-Destruction usually involves deallocation
-of private data structures, including
-.I clnt
-itself.
-Use of
-.I clnt
-is undefined after calling
-.BR clnt_destroy ().
-If the RPC library opened the associated socket, it will close it also.
-Otherwise, the socket remains open.
-.PP
-.nf
-.BI "CLIENT *clnt_create(const char *" host ", unsigned long " prog ,
-.BI " unsigned long " vers ", const char *" proto );
-.fi
-.IP
-Generic client creation routine.
-.I host
-identifies the name of the remote host where the server is located.
-.I proto
-indicates which kind of transport protocol to use.
-The currently supported values for this field are \[lq]udp\[rq]
-and \[lq]tcp\[rq].
-Default timeouts are set, but can be modified using
-.BR clnt_control ().
-.IP
-Warning: using UDP has its shortcomings.
-Since UDP-based RPC messages can hold only up to 8 Kbytes of encoded data,
-this transport cannot be used for procedures that take
-large arguments or return huge results.
-.PP
-.nf
-.BI "bool_t clnt_control(CLIENT *" cl ", int " req ", char *" info );
-.fi
-.IP
-A macro used to change or retrieve various information
-about a client object.
-.I req
-indicates the type of operation, and
-.I info
-is a pointer to the information.
-For both UDP and TCP, the supported values of
-.I req
-and their argument types and what they do are:
-.IP
-.in +4n
-.EX
-\fBCLSET_TIMEOUT\fP \fIstruct timeval\fP // set total timeout
-\fBCLGET_TIMEOUT\fP \fIstruct timeval\fP // get total timeout
-.EE
-.in
-.IP
-Note: if you set the timeout using
-.BR clnt_control (),
-the timeout parameter passed to
-.BR clnt_call ()
-will be ignored in all future calls.
-.IP
-.in +4n
-.EX
-\fBCLGET_SERVER_ADDR\fP \fIstruct sockaddr_in\fP
- // get server\[aq]s address
-.EE
-.in
-.IP
-The following operations are valid for UDP only:
-.IP
-.in +4n
-.EX
-\fBCLSET_RETRY_TIMEOUT\fP \fIstruct timeval\fP // set the retry timeout
-\fBCLGET_RETRY_TIMEOUT\fP \fIstruct timeval\fP // get the retry timeout
-.EE
-.in
-.IP
-The retry timeout is the time that "UDP RPC"
-waits for the server to reply before
-retransmitting the request.
-.PP
-.nf
-.BI "clnt_freeres(CLIENT * " clnt ", xdrproc_t " outproc ", char *" out );
-.fi
-.IP
-A macro that frees any data allocated by the RPC/XDR
-system when it decoded the results of an RPC call.
-The parameter
-.I out
-is the address of the results, and
-.I outproc
-is the XDR routine describing the results.
-This routine returns one if the results were successfully freed,
-and zero otherwise.
-.PP
-.nf
-.BI "void clnt_geterr(CLIENT *" clnt ", struct rpc_err *" errp );
-.fi
-.IP
-A macro that copies the error structure out of the client
-handle to the structure at address
-.IR errp .
-.PP
-.nf
-.BI "void clnt_pcreateerror(const char *" s );
-.fi
-.IP
-Print a message to standard error indicating why a client RPC
-handle could not be created.
-The message is prepended with string
-.I s
-and a colon.
-Used when a
-.BR clnt_create (),
-.BR clntraw_create (),
-.BR clnttcp_create (),
-or
-.BR clntudp_create ()
-call fails.
-.PP
-.nf
-.BI "void clnt_perrno(enum clnt_stat " stat );
-.fi
-.IP
-Print a message to standard error corresponding
-to the condition indicated by
-.IR stat .
-Used after
-.BR callrpc ().
-.PP
-.nf
-.BI "clnt_perror(CLIENT *" clnt ", const char *" s );
-.fi
-.IP
-Print a message to standard error indicating why an RPC call failed;
-.I clnt
-is the handle used to do the call.
-The message is prepended with string
-.I s
-and a colon.
-Used after
-.BR clnt_call ().
-.PP
-.nf
-.BI "char *clnt_spcreateerror(const char *" s );
-.fi
-.IP
-Like
-.BR clnt_pcreateerror (),
-except that it returns a string instead of printing to the standard error.
-.IP
-Bugs: returns pointer to static data that is overwritten on each call.
-.PP
-.nf
-.BI "char *clnt_sperrno(enum clnt_stat " stat );
-.fi
-.IP
-Take the same arguments as
-.BR clnt_perrno (),
-but instead of sending a message to the standard error indicating why an RPC
-call failed, return a pointer to a string which contains the message.
-The string ends with a NEWLINE.
-.IP
-.BR clnt_sperrno ()
-is used instead of
-.BR clnt_perrno ()
-if the program does not have a standard error (as a program
-running as a server quite likely does not), or if the programmer
-does not want the message to be output with
-.BR printf (3),
-or if a message format different than that supported by
-.BR clnt_perrno ()
-is to be used.
-Note: unlike
-.BR clnt_sperror ()
-and
-.BR clnt_spcreateerror (),
-.BR clnt_sperrno ()
-returns pointer to static data, but the
-result will not get overwritten on each call.
-.PP
-.nf
-.BI "char *clnt_sperror(CLIENT *" rpch ", const char *" s );
-.fi
-.IP
-Like
-.BR clnt_perror (),
-except that (like
-.BR clnt_sperrno ())
-it returns a string instead of printing to standard error.
-.IP
-Bugs: returns pointer to static data that is overwritten on each call.
-.PP
-.nf
-.BI "CLIENT *clntraw_create(unsigned long " prognum \
-", unsigned long " versnum );
-.fi
-.IP
-This routine creates a toy RPC client for the remote program
-.IR prognum ,
-version
-.IR versnum .
-The transport used to pass messages to the service is
-actually a buffer within the process's address space, so the
-corresponding RPC server should live in the same address space; see
-.BR svcraw_create ().
-This allows simulation of RPC and acquisition of RPC
-overheads, such as round trip times, without any kernel interference.
-This routine returns NULL if it fails.
-.PP
-.nf
-.BI "CLIENT *clnttcp_create(struct sockaddr_in *" addr ,
-.BI " unsigned long " prognum ", unsigned long " versnum ,
-.BI " int *" sockp ", unsigned int " sendsz \
-", unsigned int " recvsz );
-.fi
-.IP
-This routine creates an RPC client for the remote program
-.IR prognum ,
-version
-.IR versnum ;
-the client uses TCP/IP as a transport.
-The remote program is located at Internet address
-.IR *addr .
-If
-.\"The following inline font conversion is necessary for the hyphen indicator
-.I addr\->sin_port
-is zero, then it is set to the actual port that the remote
-program is listening on (the remote
-.B portmap
-service is consulted for this information).
-The parameter
-.I sockp
-is a socket; if it is
-.BR RPC_ANYSOCK ,
-then this routine opens a new one and sets
-.IR sockp .
-Since TCP-based RPC uses buffered I/O,
-the user may specify the size of the send and receive buffers
-with the parameters
-.I sendsz
-and
-.IR recvsz ;
-values of zero choose suitable defaults.
-This routine returns NULL if it fails.
-.PP
-.nf
-.BI "CLIENT *clntudp_create(struct sockaddr_in *" addr ,
-.BI " unsigned long " prognum ", unsigned long " versnum ,
-.BI " struct timeval " wait ", int *" sockp );
-.fi
-.IP
-This routine creates an RPC client for the remote program
-.IR prognum ,
-version
-.IR versnum ;
-the client uses use UDP/IP as a transport.
-The remote program is located at Internet address
-.IR addr .
-If
-.I addr\->sin_port
-is zero, then it is set to actual port that the remote
-program is listening on (the remote
-.B portmap
-service is consulted for this information).
-The parameter
-.I sockp
-is a socket; if it is
-.BR RPC_ANYSOCK ,
-then this routine opens a new one and sets
-.IR sockp .
-The UDP transport resends the call message in intervals of
-.I wait
-time until a response is received or until the call times out.
-The total time for the call to time out is specified by
-.BR clnt_call ().
-.IP
-Warning: since UDP-based RPC messages can hold only up to 8 Kbytes
-of encoded data, this transport cannot be used for procedures
-that take large arguments or return huge results.
-.PP
-.nf
-.BI "CLIENT *clntudp_bufcreate(struct sockaddr_in *" addr ,
-.BI " unsigned long " prognum ", unsigned long " versnum ,
-.BI " struct timeval " wait ", int *" sockp ,
-.BI " unsigned int " sendsize ", unsigned int "recosize );
-.fi
-.IP
-This routine creates an RPC client for the remote program
-.IR prognum ,
-on
-.IR versnum ;
-the client uses use UDP/IP as a transport.
-The remote program is located at Internet address
-.IR addr .
-If
-.I addr\->sin_port
-is zero, then it is set to actual port that the remote
-program is listening on (the remote
-.B portmap
-service is consulted for this information).
-The parameter
-.I sockp
-is a socket; if it is
-.BR RPC_ANYSOCK ,
-then this routine opens a new one and sets
-.IR sockp .
-The UDP transport resends the call message in intervals of
-.I wait
-time until a response is received or until the call times out.
-The total time for the call to time out is specified by
-.BR clnt_call ().
-.IP
-This allows the user to specify the maximum packet
-size for sending and receiving UDP-based RPC messages.
-.PP
-.nf
-.BI "void get_myaddress(struct sockaddr_in *" addr );
-.fi
-.IP
-Stuff the machine's IP address into
-.IR *addr ,
-without consulting the library routines that deal with
-.IR /etc/hosts .
-The port number is always set to
-.BR htons(PMAPPORT) .
-.PP
-.nf
-.BI "struct pmaplist *pmap_getmaps(struct sockaddr_in *" addr );
-.fi
-.IP
-A user interface to the
-.B portmap
-service, which returns a list of the current RPC
-program-to-port mappings on the host located at IP address
-.IR *addr .
-This routine can return NULL.
-The command
-.I rpcinfo\~\-p
-uses this routine.
-.PP
-.nf
-.BI "unsigned short pmap_getport(struct sockaddr_in *" addr ,
-.BI " unsigned long " prognum ", unsigned long " versnum ,
-.BI " unsigned int " protocol );
-.fi
-.IP
-A user interface to the
-.B portmap
-service, which returns the port number
-on which waits a service that supports program number
-.IR prognum ,
-version
-.IR versnum ,
-and speaks the transport protocol associated with
-.IR protocol .
-The value of
-.I protocol
-is most likely
-.B IPPROTO_UDP
-or
-.BR IPPROTO_TCP .
-A return value of zero means that the mapping does not exist
-or that the RPC system failed to contact the remote
-.B portmap
-service.
-In the latter case, the global variable
-.I rpc_createerr
-contains the RPC status.
-.PP
-.nf
-.BI "enum clnt_stat pmap_rmtcall(struct sockaddr_in *" addr ,
-.BI " unsigned long " prognum ", unsigned long " versnum ,
-.BI " unsigned long " procnum ,
-.BI " xdrproc_t " inproc ", char *" in ,
-.BI " xdrproc_t " outproc ", char *" out ,
-.BI " struct timeval " tout ", unsigned long *" portp );
-.fi
-.IP
-A user interface to the
-.B portmap
-service, which instructs
-.B portmap
-on the host at IP address
-.I *addr
-to make an RPC call on your behalf to a procedure on that host.
-The parameter
-.I *portp
-will be modified to the program's port number if the procedure succeeds.
-The definitions of other parameters are discussed
-in
-.BR callrpc ()
-and
-.BR clnt_call ().
-This procedure should be used for a \[lq]ping\[rq] and nothing else.
-See also
-.BR clnt_broadcast ().
-.PP
-.nf
-.BI "bool_t pmap_set(unsigned long " prognum ", unsigned long " versnum ,
-.BI " int " protocol ", unsigned short " port );
-.fi
-.IP
-A user interface to the
-.B portmap
-service, which establishes a mapping between the triple
-.RI [ prognum , versnum , protocol ]
-and
-.I port
-on the machine's
-.B portmap
-service.
-The value of
-.I protocol
-is most likely
-.B IPPROTO_UDP
-or
-.BR IPPROTO_TCP .
-This routine returns one if it succeeds, zero otherwise.
-Automatically done by
-.BR svc_register ().
-.PP
-.nf
-.BI "bool_t pmap_unset(unsigned long " prognum ", unsigned long " versnum );
-.fi
-.IP
-A user interface to the
-.B portmap
-service, which destroys all mapping between the triple
-.RI [ prognum , versnum , * ]
-and
-.B ports
-on the machine's
-.B portmap
-service.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "int registerrpc(unsigned long " prognum ", unsigned long " versnum ,
-.BI " unsigned long " procnum ", char *(*" procname ")(char *),"
-.BI " xdrproc_t " inproc ", xdrproc_t " outproc );
-.fi
-.IP
-Register procedure
-.I procname
-with the RPC service package.
-If a request arrives for program
-.IR prognum ,
-version
-.IR versnum ,
-and procedure
-.IR procnum ,
-.I procname
-is called with a pointer to its parameter(s);
-.I procname
-should return a pointer to its static result(s);
-.I inproc
-is used to decode the parameters while
-.I outproc
-is used to encode the results.
-This routine returns zero if the registration succeeded, \-1 otherwise.
-.IP
-Warning: remote procedures registered in this form
-are accessed using the UDP/IP transport; see
-.BR svcudp_create ()
-for restrictions.
-.PP
-.nf
-.BI "struct rpc_createerr " rpc_createerr ;
-.fi
-.IP
-A global variable whose value is set by any RPC client creation routine
-that does not succeed.
-Use the routine
-.BR clnt_pcreateerror ()
-to print the reason why.
-.PP
-.nf
-.BI "void svc_destroy(SVCXPRT *" xprt );
-.fi
-.IP
-A macro that destroys the RPC service transport handle,
-.IR xprt .
-Destruction usually involves deallocation
-of private data structures, including
-.I xprt
-itself.
-Use of
-.I xprt
-is undefined after calling this routine.
-.PP
-.nf
-.BI "fd_set " svc_fdset ;
-.fi
-.IP
-A global variable reflecting the RPC service side's
-read file descriptor bit mask; it is suitable as a parameter to the
-.BR select (2)
-system call.
-This is of interest only if a service implementor does their own
-asynchronous event processing, instead of calling
-.BR svc_run ().
-This variable is read-only (do not pass its address to
-.BR select (2)!),
-yet it may change after calls to
-.BR svc_getreqset ()
-or any creation routines.
-.PP
-.nf
-.BI "int " svc_fds ;
-.fi
-.IP
-Similar to
-.BR svc_fdset ,
-but limited to 32 file descriptors.
-This interface is obsoleted by
-.BR svc_fdset .
-.PP
-.nf
-.BI "svc_freeargs(SVCXPRT *" xprt ", xdrproc_t " inproc ", char *" in );
-.fi
-.IP
-A macro that frees any data allocated by the RPC/XDR
-system when it decoded the arguments to a service procedure using
-.BR svc_getargs ().
-This routine returns 1 if the results were successfully freed,
-and zero otherwise.
-.PP
-.nf
-.BI "svc_getargs(SVCXPRT *" xprt ", xdrproc_t " inproc ", char *" in );
-.fi
-.IP
-A macro that decodes the arguments of an RPC request
-associated with the RPC service transport handle,
-.IR xprt .
-The parameter
-.I in
-is the address where the arguments will be placed;
-.I inproc
-is the XDR routine used to decode the arguments.
-This routine returns one if decoding succeeds, and zero otherwise.
-.PP
-.nf
-.BI "struct sockaddr_in *svc_getcaller(SVCXPRT *" xprt );
-.fi
-.IP
-The approved way of getting the network address of the caller
-of a procedure associated with the RPC service transport handle,
-.IR xprt .
-.PP
-.nf
-.BI "void svc_getreqset(fd_set *" rdfds );
-.fi
-.IP
-This routine is of interest only if a service implementor does not call
-.BR svc_run (),
-but instead implements custom asynchronous event processing.
-It is called when the
-.BR select (2)
-system call has determined that an RPC request has arrived on some
-RPC socket(s);
-.I rdfds
-is the resultant read file descriptor bit mask.
-The routine returns when all sockets associated with the value of
-.I rdfds
-have been serviced.
-.PP
-.nf
-.BI "void svc_getreq(int " rdfds );
-.fi
-.IP
-Similar to
-.BR svc_getreqset (),
-but limited to 32 file descriptors.
-This interface is obsoleted by
-.BR svc_getreqset ().
-.PP
-.nf
-.BI "bool_t svc_register(SVCXPRT *" xprt ", unsigned long " prognum ,
-.BI " unsigned long " versnum ,
-.BI " void (*" dispatch ")(struct svc_req *, SVCXPRT *),"
-.BI " unsigned long " protocol );
-.fi
-.IP
-Associates
-.I prognum
-and
-.I versnum
-with the service dispatch procedure,
-.IR dispatch .
-If
-.I protocol
-is zero, the service is not registered with the
-.B portmap
-service.
-If
-.I protocol
-is nonzero, then a mapping of the triple
-.RI [ prognum , versnum , protocol ]
-to
-.I xprt\->xp_port
-is established with the local
-.B portmap
-service (generally
-.I protocol
-is zero,
-.B IPPROTO_UDP
-or
-.BR IPPROTO_TCP ).
-The procedure
-.I dispatch
-has the following form:
-.IP
-.in +4n
-.EX
-dispatch(struct svc_req *request, SVCXPRT *xprt);
-.EE
-.in
-.IP
-The
-.BR svc_register ()
-routine returns one if it succeeds, and zero otherwise.
-.PP
-.nf
-.B "void svc_run(void);"
-.fi
-.IP
-This routine never returns.
-It waits for RPC requests to arrive, and calls the appropriate service
-procedure using
-.BR svc_getreq ()
-when one arrives.
-This procedure is usually waiting for a
-.BR select (2)
-system call to return.
-.PP
-.nf
-.BI "bool_t svc_sendreply(SVCXPRT *" xprt ", xdrproc_t " outproc \
-", char *" out );
-.fi
-.IP
-Called by an RPC service's dispatch routine to send the results of a
-remote procedure call.
-The parameter
-.I xprt
-is the request's associated transport handle;
-.I outproc
-is the XDR routine which is used to encode the results; and
-.I out
-is the address of the results.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "void svc_unregister(unsigned long " prognum ", unsigned long " versnum );
-.fi
-.IP
-Remove all mapping of the double
-.RI [ prognum , versnum ]
-to dispatch routines, and of the triple
-.RI [ prognum , versnum , * ]
-to port number.
-.PP
-.nf
-.BI "void svcerr_auth(SVCXPRT *" xprt ", enum auth_stat " why );
-.fi
-.IP
-Called by a service dispatch routine that refuses to perform
-a remote procedure call due to an authentication error.
-.PP
-.nf
-.BI "void svcerr_decode(SVCXPRT *" xprt );
-.fi
-.IP
-Called by a service dispatch routine that cannot successfully
-decode its parameters.
-See also
-.BR svc_getargs ().
-.PP
-.nf
-.BI "void svcerr_noproc(SVCXPRT *" xprt );
-.fi
-.IP
-Called by a service dispatch routine that does not implement
-the procedure number that the caller requests.
-.PP
-.nf
-.BI "void svcerr_noprog(SVCXPRT *" xprt );
-.fi
-.IP
-Called when the desired program is not registered with the RPC package.
-Service implementors usually do not need this routine.
-.PP
-.nf
-.BI "void svcerr_progvers(SVCXPRT *" xprt ", unsigned long " low_vers ,
-.BI " unsigned long " high_vers );
-.fi
-.IP
-Called when the desired version of a program is not registered
-with the RPC package.
-Service implementors usually do not need this routine.
-.PP
-.nf
-.BI "void svcerr_systemerr(SVCXPRT *" xprt );
-.fi
-.IP
-Called by a service dispatch routine when it detects a system
-error not covered by any particular protocol.
-For example, if a service can no longer allocate storage,
-it may call this routine.
-.PP
-.nf
-.BI "void svcerr_weakauth(SVCXPRT *" xprt );
-.fi
-.IP
-Called by a service dispatch routine that refuses to perform
-a remote procedure call due to insufficient authentication parameters.
-The routine calls
-.BR "svcerr_auth(xprt, AUTH_TOOWEAK)" .
-.PP
-.nf
-.BI "SVCXPRT *svcfd_create(int " fd ", unsigned int " sendsize ,
-.BI " unsigned int " recvsize );
-.fi
-.IP
-Create a service on top of any open file descriptor.
-Typically, this file descriptor is a connected socket for a stream protocol such
-as TCP.
-.I sendsize
-and
-.I recvsize
-indicate sizes for the send and receive buffers.
-If they are zero, a reasonable default is chosen.
-.PP
-.nf
-.B SVCXPRT *svcraw_create(void);
-.fi
-.IP
-This routine creates a toy RPC
-service transport, to which it returns a pointer.
-The transport is really a buffer within the process's address space,
-so the corresponding RPC client should live in the same address space; see
-.BR clntraw_create ().
-This routine allows simulation of RPC and acquisition of RPC
-overheads (such as round trip times), without any kernel interference.
-This routine returns NULL if it fails.
-.PP
-.nf
-.BI "SVCXPRT *svctcp_create(int " sock ", unsigned int " send_buf_size ,
-.BI " unsigned int " recv_buf_size );
-.fi
-.IP
-This routine creates a TCP/IP-based RPC
-service transport, to which it returns a pointer.
-The transport is associated with the socket
-.IR sock ,
-which may be
-.BR RPC_ANYSOCK ,
-in which case a new socket is created.
-If the socket is not bound to a local TCP
-port, then this routine binds it to an arbitrary port.
-Upon completion,
-.I xprt\->xp_sock
-is the transport's socket descriptor, and
-.I xprt\->xp_port
-is the transport's port number.
-This routine returns NULL if it fails.
-Since TCP-based RPC uses buffered I/O,
-users may specify the size of buffers; values of zero
-choose suitable defaults.
-.PP
-.nf
-.BI "SVCXPRT *svcudp_bufcreate(int " sock ", unsigned int " sendsize ,
-.BI " unsigned int " recosize );
-.fi
-.IP
-This routine creates a UDP/IP-based RPC
-service transport, to which it returns a pointer.
-The transport is associated with the socket
-.IR sock ,
-which may be
-.BR RPC_ANYSOCK ,
-in which case a new socket is created.
-If the socket is not bound to a local UDP
-port, then this routine binds it to an arbitrary port.
-Upon completion,
-.I xprt\->xp_sock
-is the transport's socket descriptor, and
-.I xprt\->xp_port
-is the transport's port number.
-This routine returns NULL if it fails.
-.IP
-This allows the user to specify the maximum packet size for sending and
-receiving UDP-based RPC messages.
-.PP
-.nf
-.BI "SVCXPRT *svcudp_create(int " sock );
-.fi
-.IP
-This call is equivalent to
-.I svcudp_bufcreate(sock,SZ,SZ)
-for some default size
-.IR SZ .
-.PP
-.nf
-.BI "bool_t xdr_accepted_reply(XDR *" xdrs ", struct accepted_reply *" ar );
-.fi
-.IP
-Used for encoding RPC reply messages.
-This routine is useful for users who wish to generate
-RPC-style messages without using the RPC package.
-.PP
-.nf
-.BI "bool_t xdr_authunix_parms(XDR *" xdrs ", struct authunix_parms *" aupp );
-.fi
-.IP
-Used for describing UNIX credentials.
-This routine is useful for users
-who wish to generate these credentials without using the RPC
-authentication package.
-.PP
-.nf
-.BI "void xdr_callhdr(XDR *" xdrs ", struct rpc_msg *" chdr );
-.fi
-.IP
-Used for describing RPC call header messages.
-This routine is useful for users who wish to generate
-RPC-style messages without using the RPC package.
-.PP
-.nf
-.BI "bool_t xdr_callmsg(XDR *" xdrs ", struct rpc_msg *" cmsg );
-.fi
-.IP
-Used for describing RPC call messages.
-This routine is useful for users who wish to generate RPC-style
-messages without using the RPC package.
-.PP
-.nf
-.BI "bool_t xdr_opaque_auth(XDR *" xdrs ", struct opaque_auth *" ap );
-.fi
-.IP
-Used for describing RPC authentication information messages.
-This routine is useful for users who wish to generate
-RPC-style messages without using the RPC package.
-.PP
-.nf
-.BI "bool_t xdr_pmap(XDR *" xdrs ", struct pmap *" regs );
-.fi
-.IP
-Used for describing parameters to various
-.B portmap
-procedures, externally.
-This routine is useful for users who wish to generate
-these parameters without using the
-.B pmap
-interface.
-.PP
-.nf
-.BI "bool_t xdr_pmaplist(XDR *" xdrs ", struct pmaplist **" rp );
-.fi
-.IP
-Used for describing a list of port mappings, externally.
-This routine is useful for users who wish to generate
-these parameters without using the
-.B pmap
-interface.
-.PP
-.nf
-.BI "bool_t xdr_rejected_reply(XDR *" xdrs ", struct rejected_reply *" rr );
-.fi
-.IP
-Used for describing RPC reply messages.
-This routine is useful for users who wish to generate
-RPC-style messages without using the RPC package.
-.PP
-.nf
-.BI "bool_t xdr_replymsg(XDR *" xdrs ", struct rpc_msg *" rmsg );
-.fi
-.IP
-Used for describing RPC reply messages.
-This routine is useful for users who wish to generate
-RPC style messages without using the RPC package.
-.PP
-.nf
-.BI "void xprt_register(SVCXPRT *" xprt );
-.fi
-.IP
-After RPC service transport handles are created,
-they should register themselves with the RPC service package.
-This routine modifies the global variable
-.IR svc_fds .
-Service implementors usually do not need this routine.
-.PP
-.nf
-.BI "void xprt_unregister(SVCXPRT *" xprt );
-.fi
-.IP
-Before an RPC service transport handle is destroyed,
-it should unregister itself with the RPC service package.
-This routine modifies the global variable
-.IR svc_fds .
-Service implementors usually do not need this routine.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR auth_destroy (),
-.BR authnone_create (),
-.BR authunix_create (),
-.BR authunix_create_default (),
-.BR callrpc (),
-.BR clnt_broadcast (),
-.BR clnt_call (),
-.BR clnt_destroy (),
-.BR clnt_create (),
-.BR clnt_control (),
-.BR clnt_freeres (),
-.BR clnt_geterr (),
-.BR clnt_pcreateerror (),
-.BR clnt_perrno (),
-.BR clnt_perror (),
-.BR clnt_spcreateerror (),
-.BR clnt_sperrno (),
-.BR clnt_sperror (),
-.BR clntraw_create (),
-.BR clnttcp_create (),
-.BR clntudp_create (),
-.BR clntudp_bufcreate (),
-.BR get_myaddress (),
-.BR pmap_getmaps (),
-.BR pmap_getport (),
-.BR pmap_rmtcall (),
-.BR pmap_set (),
-.BR pmap_unset (),
-.BR registerrpc (),
-.BR svc_destroy (),
-.BR svc_freeargs (),
-.BR svc_getargs (),
-.BR svc_getcaller (),
-.BR svc_getreqset (),
-.BR svc_getreq (),
-.BR svc_register (),
-.BR svc_run (),
-.BR svc_sendreply (),
-.BR svc_unregister (),
-.BR svcerr_auth (),
-.BR svcerr_decode (),
-.BR svcerr_noproc (),
-.BR svcerr_noprog (),
-.BR svcerr_progvers (),
-.BR svcerr_systemerr (),
-.BR svcerr_weakauth (),
-.BR svcfd_create (),
-.BR svcraw_create (),
-.BR svctcp_create (),
-.BR svcudp_bufcreate (),
-.BR svcudp_create (),
-.BR xdr_accepted_reply (),
-.BR xdr_authunix_parms (),
-.BR xdr_callhdr (),
-.BR xdr_callmsg (),
-.BR xdr_opaque_auth (),
-.BR xdr_pmap (),
-.BR xdr_pmaplist (),
-.BR xdr_rejected_reply (),
-.BR xdr_replymsg (),
-.BR xprt_register (),
-.BR xprt_unregister ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH SEE ALSO
-.\" We don't have an rpc_secure.3 page in the set at the moment -- MTK, 19 Sep 05
-.\" .BR rpc_secure (3),
-.BR xdr (3)
-.PP
-The following manuals:
-.RS
-Remote Procedure Calls: Protocol Specification
-.br
-Remote Procedure Call Programming Guide
-.br
-rpcgen Programming Guide
-.br
-.RE
-.PP
-.IR "RPC: Remote Procedure Call Protocol Specification" ,
-RFC\ 1050, Sun Microsystems, Inc.,
-USC-ISI.
diff --git a/man3/rpmatch.3 b/man3/rpmatch.3
deleted file mode 100644
index b70bf2557..000000000
--- a/man3/rpmatch.3
+++ /dev/null
@@ -1,172 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Justin Pryzby <pryzbyj@justinpryzby.com>
-.\"
-.\" %%%LICENSE_START(PERMISSIVE_MISC)
-.\" Permission is hereby granted, free of charge, to any person obtaining
-.\" a copy of this software and associated documentation files (the
-.\" "Software"), to deal in the Software without restriction, including
-.\" without limitation the rights to use, copy, modify, merge, publish,
-.\" distribute, sublicense, and/or sell copies of the Software, and to
-.\" permit persons to whom the Software is furnished to do so, subject to
-.\" the following conditions:
-.\"
-.\" The above copyright notice and this permission notice shall be
-.\" included in all copies or substantial portions of the Software.
-.\"
-.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-.\" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-.\" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-.\" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-.\" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-.\" %%%LICENSE_END
-.\"
-.\" References:
-.\" glibc manual and source
-.\"
-.\" 2006-05-19, mtk, various edits and example program
-.\"
-.TH rpmatch 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-rpmatch \- determine if the answer to a question is affirmative or negative
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int rpmatch(const char *" response );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR rpmatch ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-.BR rpmatch ()
-handles a user response to yes or no questions, with
-support for internationalization.
-.PP
-.I response
-should be a null-terminated string containing a
-user-supplied response, perhaps obtained with
-.BR fgets (3)
-or
-.BR getline (3).
-.PP
-The user's language preference is taken into account per the
-environment variables
-.BR LANG ,
-.BR LC_MESSAGES ,
-and
-.BR LC_ALL ,
-if the program has called
-.BR setlocale (3)
-to effect their changes.
-.PP
-Regardless of the locale, responses matching
-.B \[ha][Yy]
-are always accepted as affirmative, and those matching
-.B \[ha][Nn]
-are always accepted as negative.
-.SH RETURN VALUE
-After examining
-.IR response ,
-.BR rpmatch ()
-returns 0 for a recognized negative response ("no"), 1
-for a recognized positive response ("yes"), and \-1 when the value
-of
-.I response
-is unrecognized.
-.SH ERRORS
-A return value of \-1 may indicate either an invalid input, or some
-other error.
-It is incorrect to only test if the return value is nonzero.
-.PP
-.BR rpmatch ()
-can fail for any of the reasons that
-.BR regcomp (3)
-or
-.BR regexec (3)
-can fail; the cause of the error
-is not available from
-.I errno
-or anywhere else, but indicates a
-failure of the regex engine (but this case is indistinguishable from
-that of an unrecognized value of
-.IR response ).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR rpmatch ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-GNU, FreeBSD, AIX.
-.SH BUGS
-The
-.BR YESEXPR " and " NOEXPR
-of some locales (including "C") only inspect the first character of the
-.IR response .
-This can mean that "yno" et al. resolve to
-.BR 1 .
-This is an unfortunate historical side-effect which should be fixed in time
-with proper localisation, and should not deter from
-.BR rpmatch ()
-being the proper way to distinguish between binary answers.
-.SH EXAMPLES
-The following program displays the results when
-.BR rpmatch ()
-is applied to the string given in the program's command-line argument.
-.PP
-.\" SRC BEGIN (rpmatch.c)
-.EX
-#define _DEFAULT_SOURCE
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-int
-main(int argc, char *argv[])
-{
- if (argc != 2 || strcmp(argv[1], "\-\-help") == 0) {
- fprintf(stderr, "%s response\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- setlocale(LC_ALL, "");
- printf("rpmatch() returns: %d\en", rpmatch(argv[1]));
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR fgets (3),
-.BR getline (3),
-.BR nl_langinfo (3),
-.BR regcomp (3),
-.BR setlocale (3)
diff --git a/man3/rresvport.3 b/man3/rresvport.3
deleted file mode 100644
index b58efefab..000000000
--- a/man3/rresvport.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rcmd.3
diff --git a/man3/rresvport_af.3 b/man3/rresvport_af.3
deleted file mode 100644
index b58efefab..000000000
--- a/man3/rresvport_af.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rcmd.3
diff --git a/man3/rtime.3 b/man3/rtime.3
deleted file mode 100644
index 80ee2655f..000000000
--- a/man3/rtime.3
+++ /dev/null
@@ -1,155 +0,0 @@
-'\" t
-.\" Copyright 2003 walter harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" Modified 2003-04-04 Walter Harms
-.\" <walter.harms@informatik.uni-oldenburg.de>
-.\"
-.\" Slightly polished, aeb, 2003-04-06
-.\"
-.TH rtime 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-rtime \- get time from a remote machine
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B "#include <rpc/auth_des.h>"
-.PP
-.BI "int rtime(struct sockaddr_in *" addrp ", struct rpc_timeval *" timep ,
-.BI " struct rpc_timeval *" timeout );
-.fi
-.SH DESCRIPTION
-This function uses the Time Server Protocol as described in
-RFC\ 868 to obtain the time from a remote machine.
-.PP
-The Time Server Protocol gives the time in seconds since
-00:00:00 UTC, 1 Jan 1900,
-and this function subtracts the appropriate constant in order to
-convert the result to seconds since the
-Epoch, 1970-01-01 00:00:00 +0000 (UTC).
-.PP
-When
-.I timeout
-is non-NULL, the udp/time socket (port 37) is used.
-Otherwise, the tcp/time socket (port 37) is used.
-.SH RETURN VALUE
-On success, 0 is returned, and the obtained 32-bit time value is stored in
-.IR timep\->tv_sec .
-In case of error \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-All errors for underlying functions
-.RB ( sendto (2),
-.BR poll (2),
-.BR recvfrom (2),
-.BR connect (2),
-.BR read (2))
-can occur.
-Moreover:
-.TP
-.B EIO
-The number of returned bytes is not 4.
-.TP
-.B ETIMEDOUT
-The waiting time as defined in timeout has expired.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR rtime ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH NOTES
-Only IPv4 is supported.
-.PP
-Some
-.I in.timed
-versions support only TCP.
-Try the example program with
-.I use_tcp
-set to 1.
-.\" .PP
-.\" Libc5 uses the prototype
-.\" .PP
-.\" .nf
-.\" int rtime(struct sockaddr_in *, struct timeval *, struct timeval *);
-.\" .fi
-.\" .PP
-.\" and requires
-.\" .I <sys/time.h>
-.\" instead of
-.\" .IR <rpc/auth_des.h> .
-.SH BUGS
-.BR rtime ()
-in glibc 2.2.5 and earlier does not work properly on 64-bit machines.
-.SH EXAMPLES
-This example requires that port 37 is up and open.
-You may check
-that the time entry within
-.I /etc/inetd.conf
-is not commented out.
-.PP
-The program connects to a computer called "linux".
-Using "localhost" does not work.
-The result is the localtime of the computer "linux".
-.PP
-.\" SRC BEGIN (rtime.c)
-.EX
-#include <errno.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-\&
-#include <rpc/auth_des.h>
-\&
-static int use_tcp = 0;
-static const char servername[] = "linux";
-\&
-int
-main(void)
-{
- int ret;
- time_t t;
- struct hostent *hent;
- struct rpc_timeval time1 = {0, 0};
- struct rpc_timeval timeout = {1, 0};
- struct sockaddr_in name;
-\&
- memset(&name, 0, sizeof(name));
- sethostent(1);
- hent = gethostbyname(servername);
- memcpy(&name.sin_addr, hent\->h_addr, hent\->h_length);
-\&
- ret = rtime(&name, &time1, use_tcp ? NULL : &timeout);
- if (ret < 0)
- perror("rtime error");
- else {
- t = time1.tv_sec;
- printf("%s\en", ctime(&t));
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.\" .BR netdate (1),
-.BR ntpdate (1),
-.\" .BR rdate (1),
-.BR inetd (8)
diff --git a/man3/rtnetlink.3 b/man3/rtnetlink.3
deleted file mode 100644
index 4e9a0a02a..000000000
--- a/man3/rtnetlink.3
+++ /dev/null
@@ -1,127 +0,0 @@
-.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
-.\"
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" $Id: rtnetlink.3,v 1.2 1999/05/18 10:35:10 freitag Exp $
-.\"
-.TH rtnetlink 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-rtnetlink \- macros to manipulate rtnetlink messages
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <asm/types.h>
-.B #include <linux/netlink.h>
-.B #include <linux/rtnetlink.h>
-.B #include <sys/socket.h>
-.PP
-.BI "rtnetlink_socket = socket(AF_NETLINK, int " socket_type \
-", NETLINK_ROUTE);"
-.PP
-.BI "int RTA_OK(struct rtattr *" rta ", int " rtabuflen );
-.PP
-.BI "void *RTA_DATA(struct rtattr *" rta );
-.BI "unsigned int RTA_PAYLOAD(struct rtattr *" rta );
-.PP
-.BI "struct rtattr *RTA_NEXT(struct rtattr *" rta \
-", unsigned int " rtabuflen );
-.PP
-.BI "unsigned int RTA_LENGTH(unsigned int " length );
-.BI "unsigned int RTA_SPACE(unsigned int "length );
-.fi
-.SH DESCRIPTION
-All
-.BR rtnetlink (7)
-messages consist of a
-.BR netlink (7)
-message header and appended attributes.
-The attributes should be manipulated only using the macros provided here.
-.PP
-.BI RTA_OK( rta ", " attrlen )
-returns true if
-.I rta
-points to a valid routing attribute;
-.I attrlen
-is the running length of the attribute buffer.
-When not true then you must assume there are no more attributes in the
-message, even if
-.I attrlen
-is nonzero.
-.PP
-.BI RTA_DATA( rta )
-returns a pointer to the start of this attribute's data.
-.PP
-.BI RTA_PAYLOAD( rta )
-returns the length of this attribute's data.
-.PP
-.BI RTA_NEXT( rta ", " attrlen )
-gets the next attribute after
-.IR rta .
-Calling this macro will update
-.IR attrlen .
-You should use
-.B RTA_OK
-to check the validity of the returned pointer.
-.PP
-.BI RTA_LENGTH( len )
-returns the length which is required for
-.I len
-bytes of data plus the header.
-.PP
-.BI RTA_SPACE( len )
-returns the amount of space which will be needed in a message with
-.I len
-bytes of data.
-.SH STANDARDS
-Linux.
-.SH BUGS
-This manual page is incomplete.
-.SH EXAMPLES
-.\" FIXME . ? would be better to use libnetlink in the EXAMPLE code here
-Creating a rtnetlink message to set the MTU of a device:
-.PP
-.in +4n
-.EX
-#include <linux/rtnetlink.h>
-\&
-\&...
-\&
-struct {
- struct nlmsghdr nh;
- struct ifinfomsg if;
- char attrbuf[512];
-} req;
-\&
-struct rtattr *rta;
-unsigned int mtu = 1000;
-\&
-int rtnetlink_sk = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);
-\&
-memset(&req, 0, sizeof(req));
-req.nh.nlmsg_len = NLMSG_LENGTH(sizeof(req.if));
-req.nh.nlmsg_flags = NLM_F_REQUEST;
-req.nh.nlmsg_type = RTM_NEWLINK;
-req.if.ifi_family = AF_UNSPEC;
-req.if.ifi_index = INTERFACE_INDEX;
-req.if.ifi_change = 0xffffffff; /* ??? */
-rta = (struct rtattr *)(((char *) &req) +
- NLMSG_ALIGN(req.nh.nlmsg_len));
-rta\->rta_type = IFLA_MTU;
-rta\->rta_len = RTA_LENGTH(sizeof(mtu));
-req.nh.nlmsg_len = NLMSG_ALIGN(req.nh.nlmsg_len) +
- RTA_LENGTH(sizeof(mtu));
-memcpy(RTA_DATA(rta), &mtu, sizeof(mtu));
-send(rtnetlink_sk, &req, req.nh.nlmsg_len, 0);
-.EE
-.in
-.SH SEE ALSO
-.BR netlink (3),
-.BR netlink (7),
-.BR rtnetlink (7)
diff --git a/man3/ruserok.3 b/man3/ruserok.3
deleted file mode 100644
index b58efefab..000000000
--- a/man3/ruserok.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rcmd.3
diff --git a/man3/ruserok_af.3 b/man3/ruserok_af.3
deleted file mode 100644
index b58efefab..000000000
--- a/man3/ruserok_af.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rcmd.3
diff --git a/man3/scalb.3 b/man3/scalb.3
deleted file mode 100644
index 22cab303a..000000000
--- a/man3/scalb.3
+++ /dev/null
@@ -1,199 +0,0 @@
-'\" t
-.\" Copyright 2004 Andries Brouwer <aeb@cwi.nl>.
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH scalb 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-scalb, scalbf, scalbl \- multiply floating-point number
-by integral power of radix (OBSOLETE)
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "[[deprecated]] double scalb(double " x ", double " exp );
-.BI "[[deprecated]] float scalbf(float " x ", float " exp );
-.BI "[[deprecated]] long double scalbl(long double " x ", long double " exp );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR scalb ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR scalbf (),
-.BR scalbl ():
-.nf
- _XOPEN_SOURCE >= 600
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions multiply their first argument
-.I x
-by
-.B FLT_RADIX
-(probably 2)
-to the power of
-.IR exp ,
-that is:
-.PP
-.nf
- x * FLT_RADIX ** exp
-.fi
-.PP
-The definition of
-.B FLT_RADIX
-can be obtained by including
-.IR <float.h> .
-.\" not in /usr/include but in a gcc lib
-.SH RETURN VALUE
-On success, these functions return
-.I x
-*
-.B FLT_RADIX
-**
-.IR exp .
-.PP
-If
-.I x
-or
-.I exp
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is positive infinity (negative infinity),
-and
-.I exp
-is not negative infinity,
-positive infinity (negative infinity) is returned.
-.PP
-If
-.I x
-is +0 (\-0), and
-.I exp
-is not positive infinity, +0 (\-0) is returned.
-.PP
-If
-.I x
-is zero, and
-.I exp
-is positive infinity,
-a domain error occurs, and
-a NaN is returned.
-.PP
-If
-.I x
-is an infinity,
-and
-.I exp
-is negative infinity,
-a domain error occurs, and
-a NaN is returned.
-.PP
-If the result overflows,
-a range error occurs,
-and the functions return
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-or
-.BR HUGE_VALL ,
-respectively, with a sign the same as
-.IR x .
-.PP
-If the result underflows,
-a range error occurs,
-and the functions return zero, with a sign the same as
-.IR x .
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is 0, and \fIexp\fP is positive infinity, \
-or \fIx\fP is positive infinity and \fIexp\fP is negative infinity \
-and the other argument is not a NaN
-.I errno
-is set to
-.BR EDOM .
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.TP
-Range error, overflow
-.I errno
-is set to
-.BR ERANGE .
-An overflow floating-point exception
-.RB ( FE_OVERFLOW )
-is raised.
-.TP
-Range error, underflow
-.I errno
-is set to
-.BR ERANGE .
-An underflow floating-point exception
-.RB ( FE_UNDERFLOW )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR scalb (),
-.BR scalbf (),
-.BR scalbl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-.TP
-.BR scalb ()
-4.3BSD.
-Obsolescent in POSIX.1-2001;
-Removed in POSIX.1-2008,
-recommending the use of
-.BR scalbln (3),
-.BR scalblnf (3),
-or
-.BR scalblnl (3)
-instead.
-.\" Looking at header files: scalbf() is present on the
-.\" BSDs, Tru64, HP-UX 11, Irix 6.5; scalbl() is on HP-UX 11 and Tru64.
-.SH BUGS
-Before glibc 2.20,
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6803
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6804
-these functions did not set
-.I errno
-for domain and range errors.
-.SH SEE ALSO
-.BR ldexp (3),
-.BR scalbln (3)
diff --git a/man3/scalbf.3 b/man3/scalbf.3
deleted file mode 100644
index 5a33fb820..000000000
--- a/man3/scalbf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/scalb.3
diff --git a/man3/scalbl.3 b/man3/scalbl.3
deleted file mode 100644
index 5a33fb820..000000000
--- a/man3/scalbl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/scalb.3
diff --git a/man3/scalbln.3 b/man3/scalbln.3
deleted file mode 100644
index 98fec74da..000000000
--- a/man3/scalbln.3
+++ /dev/null
@@ -1,177 +0,0 @@
-'\" t
-.\" Copyright 2004 Andries Brouwer <aeb@cwi.nl>.
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH scalbln 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-scalbn, scalbnf, scalbnl, scalbln, scalblnf, scalblnl \-
-multiply floating-point number by integral power of radix
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double scalbln(double " x ", long " exp );
-.BI "float scalblnf(float " x ", long " exp );
-.BI "long double scalblnl(long double " x ", long " exp );
-.PP
-.BI "double scalbn(double " x ", int " exp );
-.BI "float scalbnf(float " x ", int " exp );
-.BI "long double scalbnl(long double " x ", int " exp );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR scalbln (),
-.BR scalblnf (),
-.BR scalblnl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
-.fi
-.PP
-.BR scalbn (),
-.BR scalbnf (),
-.BR scalbnl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions multiply their first argument
-.I x
-by
-.B FLT_RADIX
-(probably 2)
-to the power of
-.IR exp ,
-that is:
-.PP
-.nf
- x * FLT_RADIX ** exp
-.fi
-.PP
-The definition of
-.B FLT_RADIX
-can be obtained by including
-.IR <float.h> .
-.\" not in /usr/include but in a gcc lib
-.SH RETURN VALUE
-On success, these functions return
-.I x
-*
-.B FLT_RADIX
-**
-.IR exp .
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is positive infinity (negative infinity),
-positive infinity (negative infinity) is returned.
-.PP
-If
-.I x
-is +0 (\-0), +0 (\-0) is returned.
-.PP
-If the result overflows,
-a range error occurs,
-and the functions return
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-or
-.BR HUGE_VALL ,
-respectively, with a sign the same as
-.IR x .
-.PP
-If the result underflows,
-a range error occurs,
-and the functions return zero, with a sign the same as
-.IR x .
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Range error, overflow
-.\" .I errno
-.\" is set to
-.\" .BR ERANGE .
-An overflow floating-point exception
-.RB ( FE_OVERFLOW )
-is raised.
-.TP
-Range error, underflow
-.I errno
-is set to
-.BR ERANGE .
-An underflow floating-point exception
-.RB ( FE_UNDERFLOW )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR scalbn (),
-.BR scalbnf (),
-.BR scalbnl (),
-.BR scalbln (),
-.BR scalblnf (),
-.BR scalblnl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH HISTORY
-These functions differ from the obsolete functions described in
-.BR scalb (3)
-in the type of their second argument.
-The functions described on this page have a second argument
-of an integral type, while those in
-.BR scalb (3)
-have a second argument of type
-.IR double .
-.SH NOTES
-If
-.B FLT_RADIX
-equals 2 (which is usual), then
-.BR scalbn ()
-is equivalent to
-.BR ldexp (3).
-.SH BUGS
-Before glibc 2.20,
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6803
-these functions did not set
-.I errno
-for range errors.
-.SH SEE ALSO
-.BR ldexp (3),
-.BR scalb (3)
diff --git a/man3/scalblnf.3 b/man3/scalblnf.3
deleted file mode 100644
index 58d82f2d5..000000000
--- a/man3/scalblnf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/scalbln.3
diff --git a/man3/scalblnl.3 b/man3/scalblnl.3
deleted file mode 100644
index 58d82f2d5..000000000
--- a/man3/scalblnl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/scalbln.3
diff --git a/man3/scalbn.3 b/man3/scalbn.3
deleted file mode 100644
index 58d82f2d5..000000000
--- a/man3/scalbn.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/scalbln.3
diff --git a/man3/scalbnf.3 b/man3/scalbnf.3
deleted file mode 100644
index 58d82f2d5..000000000
--- a/man3/scalbnf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/scalbln.3
diff --git a/man3/scalbnl.3 b/man3/scalbnl.3
deleted file mode 100644
index 58d82f2d5..000000000
--- a/man3/scalbnl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/scalbln.3
diff --git a/man3/scandir.3 b/man3/scandir.3
deleted file mode 100644
index 3eb65a9a4..000000000
--- a/man3/scandir.3
+++ /dev/null
@@ -1,311 +0,0 @@
-'\" t
-.\" Copyright (C) 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:26:16 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Thu Apr 11 17:11:33 1996 by Andries Brouwer (aeb@cwi.nl):
-.\" Corrected type of compar routines, as suggested by
-.\" Miguel Barreiro (enano@avalon.yaix.es). Added example.
-.\" Modified Sun Sep 24 20:15:46 2000 by aeb, following Petter Reinholdtsen.
-.\" Modified 2001-12-26 by aeb, following Joey. Added versionsort.
-.\"
-.\" The pieces on scandirat(3) were copyright and licensed as follows.
-.\"
-.\" Copyright (c) 2012, Mark R. Bannister <cambridge@users.sourceforge.net>
-.\" based on text in mkfifoat.3 Copyright (c) 2006, Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH scandir 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-scandir, scandirat, alphasort, versionsort \- scan
-a directory for matching entries
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <dirent.h>
-.PP
-.BI "int scandir(const char *restrict " dirp ,
-.BI " struct dirent ***restrict " namelist ,
-.BI " int (*" filter ")(const struct dirent *),"
-.BI " int (*" compar ")(const struct dirent **,"
-.B " const struct dirent **));"
-.PP
-.BI "int alphasort(const struct dirent **" a ", const struct dirent **" b );
-.BI "int versionsort(const struct dirent **" a ", const struct dirent **" b );
-.PP
-.BR "#include <fcntl.h>" " /* Definition of AT_* constants */"
-.B #include <dirent.h>
-.PP
-.BI "int scandirat(int " dirfd ", const char *restrict " dirp ,
-.BI " struct dirent ***restrict " namelist ,
-.BI " int (*" filter ")(const struct dirent *),"
-.BI " int (*" compar ")(const struct dirent **,"
-.B " const struct dirent **));"
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR scandir (),
-.BR alphasort ():
-.nf
- /* Since glibc 2.10: */ _POSIX_C_SOURCE >= 200809L
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR versionsort ():
-.nf
- _GNU_SOURCE
-.fi
-.PP
-.BR scandirat ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR scandir ()
-function scans the directory \fIdirp\fP, calling
-\fIfilter\fP() on each directory entry.
-Entries for which
-\fIfilter\fP() returns nonzero are stored in strings allocated via
-.BR malloc (3),
-sorted using
-.BR qsort (3)
-with the comparison
-function \fIcompar\fP(), and collected in array \fInamelist\fP
-which is allocated via
-.BR malloc (3).
-If \fIfilter\fP is NULL, all entries are selected.
-.PP
-The
-.BR alphasort ()
-and
-.BR versionsort ()
-functions can be used as the comparison function
-.IR compar ().
-The former sorts directory entries using
-.BR strcoll (3),
-the latter using
-.BR strverscmp (3)
-on the strings \fI(*a)\->d_name\fP and \fI(*b)\->d_name\fP.
-.SS scandirat()
-The
-.BR scandirat ()
-function operates in exactly the same way as
-.BR scandir (),
-except for the differences described here.
-.PP
-If the pathname given in
-.I dirp
-is relative, then it is interpreted relative to the directory
-referred to by the file descriptor
-.I dirfd
-(rather than relative to the current working directory of
-the calling process, as is done by
-.BR scandir ()
-for a relative pathname).
-.PP
-If
-.I dirp
-is relative and
-.I dirfd
-is the special value
-.BR AT_FDCWD ,
-then
-.I dirp
-is interpreted relative to the current working
-directory of the calling process (like
-.BR scandir ()).
-.PP
-If
-.I dirp
-is absolute, then
-.I dirfd
-is ignored.
-.PP
-See
-.BR openat (2)
-for an explanation of the need for
-.BR scandirat ().
-.SH RETURN VALUE
-The
-.BR scandir ()
-function returns the number of directory entries
-selected.
-On error, \-1 is returned, with
-.I errno
-set to indicate the error.
-.PP
-The
-.BR alphasort ()
-and
-.BR versionsort ()
-functions return an integer less than, equal to,
-or greater than zero if the first argument is considered to be
-respectively less than, equal to, or greater than the second.
-.SH ERRORS
-.TP
-.B EBADF
-.RB ( scandirat ())
-.I dirp
-is relative but
-.I dirfd
-is neither
-.B AT_FDCWD
-nor a valid file descriptor.
-.TP
-.B ENOENT
-The path in \fIdirp\fR does not exist.
-.TP
-.B ENOMEM
-Insufficient memory to complete the operation.
-.TP
-.B ENOTDIR
-The path in \fIdirp\fR is not a directory.
-.TP
-.B ENOTDIR
-.RB ( scandirat ())
-.I dirp
-is a relative pathname and
-.I dirfd
-is a file descriptor referring to a file other than a directory.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR scandir (),
-.BR scandirat ()
-T} Thread safety MT-Safe
-T{
-.BR alphasort (),
-.BR versionsort ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR alphasort ()
-.TQ
-.BR scandir ()
-POSIX.1-2008.
-.TP
-.BR versionsort ()
-.TQ
-.BR scandirat ()
-GNU.
-.SH HISTORY
-.TP
-.BR alphasort ()
-.TQ
-.BR scandir ()
-4.3BSD, POSIX.1-2008.
-.TP
-.BR versionsort ()
-glibc 2.1.
-.TP
-.BR scandirat ()
-glibc 2.15.
-.\" .LP
-.\" The functions
-.\" .BR scandir ()
-.\" and
-.\" .BR alphasort ()
-.\" are from 4.3BSD, and have been available under Linux since libc4.
-.\" Libc4 and libc5 use the more precise prototype
-.\" .sp
-.\" .nf
-.\" int alphasort(const struct dirent ** a,
-.\" const struct dirent **b);
-.\" .fi
-.\" .sp
-.\" but glibc 2.0 returns to the imprecise BSD prototype.
-.SH NOTES
-Since glibc 2.1,
-.BR alphasort ()
-calls
-.BR strcoll (3);
-earlier it used
-.BR strcmp (3).
-.PP
-Before glibc 2.10, the two arguments of
-.BR alphasort ()
-and
-.BR versionsort ()
-were typed as
-.IR "const void\ *" .
-When
-.BR alphasort ()
-was standardized in POSIX.1-2008,
-the argument type was specified as the type-safe
-.IR "const struct dirent\ **",
-and glibc 2.10 changed the definition of
-.BR alphasort ()
-(and the nonstandard
-.BR versionsort ())
-to match the standard.
-.SH EXAMPLES
-The program below prints a list of the files in the current directory
-in reverse order.
-.\"
-.SS Program source
-\&
-.\" SRC BEGIN (scandir.c)
-.EX
-#define _DEFAULT_SOURCE
-#include <dirent.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(void)
-{
- struct dirent **namelist;
- int n;
-\&
- n = scandir(".", &namelist, NULL, alphasort);
- if (n == \-1) {
- perror("scandir");
- exit(EXIT_FAILURE);
- }
-\&
- while (n\-\-) {
- printf("%s\en", namelist[n]\->d_name);
- free(namelist[n]);
- }
- free(namelist);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR closedir (3),
-.BR fnmatch (3),
-.BR opendir (3),
-.BR readdir (3),
-.BR rewinddir (3),
-.BR seekdir (3),
-.BR strcmp (3),
-.BR strcoll (3),
-.BR strverscmp (3),
-.BR telldir (3)
diff --git a/man3/scandirat.3 b/man3/scandirat.3
deleted file mode 100644
index 7e757c7a0..000000000
--- a/man3/scandirat.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/scandir.3
diff --git a/man3/scanf.3 b/man3/scanf.3
deleted file mode 100644
index 108b0e4ca..000000000
--- a/man3/scanf.3
+++ /dev/null
@@ -1,145 +0,0 @@
-'\" t
-.\" Copyright 2022 Alejandro Colomar <alx@kernel.org>
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH scanf 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-scanf, fscanf, vscanf, vfscanf \- input FILE format conversion
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "int scanf(const char *restrict " format ", ...);"
-.BI "int fscanf(FILE *restrict " stream ,
-.BI " const char *restrict " format ", ...);"
-.PP
-.B #include <stdarg.h>
-.PP
-.BI "int vscanf(const char *restrict " format ", va_list " ap );
-.BI "int vfscanf(FILE *restrict " stream ,
-.BI " const char *restrict " format ", va_list " ap );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR vscanf (),
-.BR vfscanf ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-The
-.BR scanf ()
-family of functions scans input like
-.BR sscanf (3),
-but read from a
-.IR FILE .
-It is very difficult to use these functions correctly,
-and it is preferable to read entire lines with
-.BR fgets (3)
-or
-.BR getline (3)
-and parse them later with
-.BR sscanf (3)
-or more specialized functions such as
-.BR strtol (3).
-.PP
-The
-.BR scanf ()
-function reads input from the standard input stream
-.I stdin
-and
-.BR fscanf ()
-reads input from the stream pointer
-.IR stream .
-.PP
-The
-.BR vfscanf ()
-function is analogous to
-.BR vfprintf (3)
-and reads input from the stream pointer
-.I stream
-using a variable argument list of pointers (see
-.BR stdarg (3).
-The
-.BR vscanf ()
-function is analogous to
-.BR vprintf (3)
-and reads from the standard input.
-.SH RETURN VALUE
-On success, these functions return the number of input items
-successfully matched and assigned;
-this can be fewer than provided for,
-or even zero, in the event of an early matching failure.
-.PP
-The value
-.B EOF
-is returned if the end of input is reached before either the first
-successful conversion or a matching failure occurs.
-.B EOF
-is also returned if a read error occurs,
-in which case the error indicator for the stream (see
-.BR ferror (3))
-is set, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-The file descriptor underlying
-.I stream
-is marked nonblocking, and the read operation would block.
-.TP
-.B EBADF
-The file descriptor underlying
-.I stream
-is invalid, or not open for reading.
-.TP
-.B EILSEQ
-Input byte sequence does not form a valid character.
-.TP
-.B EINTR
-The read operation was interrupted by a signal; see
-.BR signal (7).
-.TP
-.B EINVAL
-Not enough arguments; or
-.I format
-is NULL.
-.TP
-.B ENOMEM
-Out of memory.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR scanf (),
-.BR fscanf (),
-.BR vscanf (),
-.BR vfscanf ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR fgets (3),
-.BR getline (3),
-.BR sscanf (3)
diff --git a/man3/sched_getcpu.3 b/man3/sched_getcpu.3
deleted file mode 100644
index f116b2dfb..000000000
--- a/man3/sched_getcpu.3
+++ /dev/null
@@ -1,92 +0,0 @@
-'\" t
-.\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sched_getcpu 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sched_getcpu \- determine CPU on which the calling thread is running
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sched.h>
-.PP
-.B int sched_getcpu(void);
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sched_getcpu ():
-.nf
- Since glibc 2.14:
- _GNU_SOURCE
- Before glibc 2.14:
- _BSD_SOURCE || _SVID_SOURCE
- /* _GNU_SOURCE also suffices */
-.fi
-.SH DESCRIPTION
-.BR sched_getcpu ()
-returns the number of the CPU
-on which the calling thread is currently executing.
-.SH RETURN VALUE
-On success,
-.BR sched_getcpu ()
-returns a nonnegative CPU number.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B ENOSYS
-This kernel does not implement
-.BR getcpu (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sched_getcpu ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH HISTORY
-glibc 2.6.
-.SH NOTES
-The call
-.PP
-.in +4n
-.EX
-cpu = sched_getcpu();
-.EE
-.in
-.PP
-is equivalent to the following
-.BR getcpu (2)
-call:
-.PP
-.in +4n
-.EX
-int c, s;
-s = getcpu(&c, NULL, NULL);
-cpu = (s == \-1) ? s : c;
-.EE
-.in
-.SH SEE ALSO
-.BR getcpu (2),
-.BR sched (7)
diff --git a/man3/secure_getenv.3 b/man3/secure_getenv.3
deleted file mode 100644
index 5142befad..000000000
--- a/man3/secure_getenv.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getenv.3
diff --git a/man3/seed48.3 b/man3/seed48.3
deleted file mode 100644
index 3133f7d62..000000000
--- a/man3/seed48.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/drand48.3
diff --git a/man3/seed48_r.3 b/man3/seed48_r.3
deleted file mode 100644
index 81e9d8ef7..000000000
--- a/man3/seed48_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/drand48_r.3
diff --git a/man3/seekdir.3 b/man3/seekdir.3
deleted file mode 100644
index 5b5b3e988..000000000
--- a/man3/seekdir.3
+++ /dev/null
@@ -1,92 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:25:21 1993 by Rik Faith (faith@cs.unc.edu)
-.\"
-.TH seekdir 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-seekdir \- set the position of the next readdir() call in the directory
-stream.
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <dirent.h>
-.PP
-.BI "void seekdir(DIR *" dirp ", long " loc );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR seekdir ():
-.nf
- _XOPEN_SOURCE
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR seekdir ()
-function sets the location in the directory stream
-from which the next
-.BR readdir (2)
-call will start.
-The
-.I loc
-argument should be a value returned by a previous call to
-.BR telldir (3).
-.SH RETURN VALUE
-The
-.BR seekdir ()
-function returns no value.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR seekdir ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, 4.3BSD.
-.SH CAVEATS
-Up to glibc 2.1.1, the type of the
-.I loc
-argument was
-.IR off_t .
-POSIX.1-2001 specifies
-.IR long ,
-and this is the type used since glibc 2.1.2.
-See
-.BR telldir (3)
-for information on why you should be careful in making any
-assumptions about the value in this argument.
-.SH SEE ALSO
-.BR lseek (2),
-.BR closedir (3),
-.BR opendir (3),
-.BR readdir (3),
-.BR rewinddir (3),
-.BR scandir (3),
-.BR telldir (3)
diff --git a/man3/sem_close.3 b/man3/sem_close.3
deleted file mode 100644
index a7b5a604d..000000000
--- a/man3/sem_close.3
+++ /dev/null
@@ -1,66 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sem_close 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sem_close \- close a named semaphore
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <semaphore.h>
-.PP
-.BI "int sem_close(sem_t *" sem );
-.fi
-.SH DESCRIPTION
-.BR sem_close ()
-closes the named semaphore referred to by
-.IR sem ,
-allowing any resources that the system has allocated to
-the calling process for this semaphore to be freed.
-.SH RETURN VALUE
-On success
-.BR sem_close ()
-returns 0; on error, \-1 is returned, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I sem
-is not a valid semaphore.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sem_close ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-All open named semaphores are automatically closed on process
-termination, or upon
-.BR execve (2).
-.SH SEE ALSO
-.BR sem_getvalue (3),
-.BR sem_open (3),
-.BR sem_post (3),
-.BR sem_unlink (3),
-.BR sem_wait (3),
-.BR sem_overview (7)
diff --git a/man3/sem_destroy.3 b/man3/sem_destroy.3
deleted file mode 100644
index a14f76a2c..000000000
--- a/man3/sem_destroy.3
+++ /dev/null
@@ -1,78 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sem_destroy 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sem_destroy \- destroy an unnamed semaphore
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <semaphore.h>
-.PP
-.BI "int sem_destroy(sem_t *" sem );
-.fi
-.SH DESCRIPTION
-.BR sem_destroy ()
-destroys the unnamed semaphore at the address pointed to by
-.IR sem .
-.PP
-Only a semaphore that has been initialized by
-.BR sem_init (3)
-should be destroyed using
-.BR sem_destroy ().
-.PP
-Destroying a semaphore that other processes or threads are
-currently blocked on (in
-.BR sem_wait (3))
-produces undefined behavior.
-.PP
-Using a semaphore that has been destroyed produces undefined results,
-until the semaphore has been reinitialized using
-.BR sem_init (3).
-.SH RETURN VALUE
-.BR sem_destroy ()
-returns 0 on success;
-on error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I sem
-is not a valid semaphore.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sem_destroy ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-An unnamed semaphore should be destroyed with
-.BR sem_destroy ()
-before the memory in which it is located is deallocated.
-Failure to do this can result in resource leaks on some implementations.
-.\" But not on NPTL, where sem_destroy () is a no-op..
-.SH SEE ALSO
-.BR sem_init (3),
-.BR sem_post (3),
-.BR sem_wait (3),
-.BR sem_overview (7)
diff --git a/man3/sem_getvalue.3 b/man3/sem_getvalue.3
deleted file mode 100644
index 57161cd15..000000000
--- a/man3/sem_getvalue.3
+++ /dev/null
@@ -1,77 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sem_getvalue 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sem_getvalue \- get the value of a semaphore
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <semaphore.h>
-.PP
-.BI "int sem_getvalue(sem_t *restrict " sem ", int *restrict " sval );
-.fi
-.SH DESCRIPTION
-.BR sem_getvalue ()
-places the current value of the semaphore pointed to
-.I sem
-into the integer pointed to by
-.IR sval .
-.PP
-If one or more processes or threads are blocked
-waiting to lock the semaphore with
-.BR sem_wait (3),
-POSIX.1 permits two possibilities for the value returned in
-.IR sval :
-either 0 is returned;
-or a negative number whose absolute value is the count
-of the number of processes and threads currently blocked in
-.BR sem_wait (3).
-Linux adopts the former behavior.
-.SH RETURN VALUE
-.BR sem_getvalue ()
-returns 0 on success;
-on error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I sem
-is not a valid semaphore.
-(The glibc implementation currently does not check whether
-.I sem
-is valid.)
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sem_getvalue ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-The value of the semaphore may already have changed by the time
-.BR sem_getvalue ()
-returns.
-.SH SEE ALSO
-.BR sem_post (3),
-.BR sem_wait (3),
-.BR sem_overview (7)
diff --git a/man3/sem_init.3 b/man3/sem_init.3
deleted file mode 100644
index e1dcc586e..000000000
--- a/man3/sem_init.3
+++ /dev/null
@@ -1,111 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sem_init 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sem_init \- initialize an unnamed semaphore
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <semaphore.h>
-.PP
-.BI "int sem_init(sem_t *" sem ", int " pshared ", unsigned int " value );
-.fi
-.SH DESCRIPTION
-.BR sem_init ()
-initializes the unnamed semaphore at the address pointed to by
-.IR sem .
-The
-.I value
-argument specifies the initial value for the semaphore.
-.PP
-The
-.I pshared
-argument indicates whether this semaphore is to be shared
-between the threads of a process, or between processes.
-.PP
-If
-.I pshared
-has the value 0,
-then the semaphore is shared between the threads of a process,
-and should be located at some address that is visible to all threads
-(e.g., a global variable, or a variable allocated dynamically on
-the heap).
-.PP
-If
-.I pshared
-is nonzero, then the semaphore is shared between processes,
-and should be located in a region of shared memory (see
-.BR shm_open (3),
-.BR mmap (2),
-and
-.BR shmget (2)).
-(Since a child created by
-.BR fork (2)
-inherits its parent's memory mappings, it can also access the semaphore.)
-Any process that can access the shared memory region
-can operate on the semaphore using
-.BR sem_post (3),
-.BR sem_wait (3),
-and so on.
-.PP
-Initializing a semaphore that has already been initialized
-results in undefined behavior.
-.SH RETURN VALUE
-.BR sem_init ()
-returns 0 on success;
-on error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I value
-exceeds
-.BR SEM_VALUE_MAX .
-.TP
-.B ENOSYS
-.I pshared
-is nonzero,
-but the system does not support process-shared semaphores (see
-.BR sem_overview (7)).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sem_init ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.PP
-Bizarrely, POSIX.1-2001 does not specify the value that should
-be returned by a successful call to
-.BR sem_init ().
-POSIX.1-2008 rectifies this, specifying the zero return on success.
-.SH EXAMPLES
-See
-.BR shm_open (3)
-and
-.BR sem_wait (3).
-.SH SEE ALSO
-.BR sem_destroy (3),
-.BR sem_post (3),
-.BR sem_wait (3),
-.BR sem_overview (7)
diff --git a/man3/sem_open.3 b/man3/sem_open.3
deleted file mode 100644
index b8f4ada8c..000000000
--- a/man3/sem_open.3
+++ /dev/null
@@ -1,178 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sem_open 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sem_open \- initialize and open a named semaphore
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.BR "#include <fcntl.h>" " /* For O_* constants */"
-.BR "#include <sys/stat.h>" " /* For mode constants */"
-.B #include <semaphore.h>
-.PP
-.BI "sem_t *sem_open(const char *" name ", int " oflag );
-.BI "sem_t *sem_open(const char *" name ", int " oflag ,
-.BI " mode_t " mode ", unsigned int " value );
-.fi
-.SH DESCRIPTION
-.BR sem_open ()
-creates a new POSIX semaphore or opens an existing semaphore.
-The semaphore is identified by
-.IR name .
-For details of the construction of
-.IR name ,
-see
-.BR sem_overview (7).
-.PP
-The
-.I oflag
-argument specifies flags that control the operation of the call.
-(Definitions of the flags values can be obtained by including
-.IR <fcntl.h> .)
-If
-.B O_CREAT
-is specified in
-.IR oflag ,
-then the semaphore is created if
-it does not already exist.
-The owner (user ID) of the semaphore is set to the effective
-user ID of the calling process.
-The group ownership (group ID) is set to the effective group ID
-of the calling process.
-.\" In reality the filesystem IDs are used on Linux.
-If both
-.B O_CREAT
-and
-.B O_EXCL
-are specified in
-.IR oflag ,
-then an error is returned if a semaphore with the given
-.I name
-already exists.
-.PP
-If
-.B O_CREAT
-is specified in
-.IR oflag ,
-then two additional arguments must be supplied.
-The
-.I mode
-argument specifies the permissions to be placed on the new semaphore,
-as for
-.BR open (2).
-(Symbolic definitions for the permissions bits can be obtained by including
-.IR <sys/stat.h> .)
-The permissions settings are masked against the process umask.
-Both read and write permission should be granted to each class of
-user that will access the semaphore.
-The
-.I value
-argument specifies the initial value for the new semaphore.
-If
-.B O_CREAT
-is specified, and a semaphore with the given
-.I name
-already exists, then
-.I mode
-and
-.I value
-are ignored.
-.SH RETURN VALUE
-On success,
-.BR sem_open ()
-returns the address of the new semaphore;
-this address is used when calling other semaphore-related functions.
-On error,
-.BR sem_open ()
-returns
-.BR SEM_FAILED ,
-with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-The semaphore exists, but the caller does not have permission to
-open it.
-.TP
-.B EEXIST
-Both
-.B O_CREAT
-and
-.B O_EXCL
-were specified in
-.IR oflag ,
-but a semaphore with this
-.I name
-already exists.
-.TP
-.B EINVAL
-.I value
-was greater than
-.BR SEM_VALUE_MAX .
-.TP
-.B EINVAL
-.I name
-consists of just "/", followed by no other characters.
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENAMETOOLONG
-.I name
-was too long.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOENT
-The
-.B O_CREAT
-flag was not specified in
-.I oflag
-and no semaphore with this
-.I name
-exists;
-or,
-.\" this error can occur if we have a name of the (nonportable) form
-.\" /dir/name, and the directory /dev/shm/dir does not exist.
-.B O_CREAT
-was specified, but
-.I name
-wasn't well formed.
-.TP
-.B ENOMEM
-Insufficient memory.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sem_open ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH SEE ALSO
-.BR sem_close (3),
-.BR sem_getvalue (3),
-.BR sem_post (3),
-.BR sem_unlink (3),
-.BR sem_wait (3),
-.BR sem_overview (7)
diff --git a/man3/sem_post.3 b/man3/sem_post.3
deleted file mode 100644
index 9b6b026b9..000000000
--- a/man3/sem_post.3
+++ /dev/null
@@ -1,76 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sem_post 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sem_post \- unlock a semaphore
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <semaphore.h>
-.PP
-.BI "int sem_post(sem_t *" sem );
-.fi
-.SH DESCRIPTION
-.BR sem_post ()
-increments (unlocks) the semaphore pointed to by
-.IR sem .
-If the semaphore's value consequently becomes greater than zero,
-then another process or thread blocked in a
-.BR sem_wait (3)
-call will be woken up and proceed to lock the semaphore.
-.SH RETURN VALUE
-.BR sem_post ()
-returns 0 on success;
-on error, the value of the semaphore is left unchanged,
-\-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I sem
-is not a valid semaphore.
-.TP
-.B EOVERFLOW
-.\" Added in POSIX.1-2008 TC1 (Austin Interpretation 213)
-The maximum allowable value for a semaphore would be exceeded.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sem_post ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-.BR sem_post ()
-is async-signal-safe:
-it may be safely called within a signal handler.
-.SH EXAMPLES
-See
-.BR sem_wait (3)
-and
-.BR shm_open (3).
-.SH SEE ALSO
-.BR sem_getvalue (3),
-.BR sem_wait (3),
-.BR sem_overview (7),
-.BR signal\-safety (7)
diff --git a/man3/sem_timedwait.3 b/man3/sem_timedwait.3
deleted file mode 100644
index c7b43fa88..000000000
--- a/man3/sem_timedwait.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sem_wait.3
diff --git a/man3/sem_trywait.3 b/man3/sem_trywait.3
deleted file mode 100644
index c7b43fa88..000000000
--- a/man3/sem_trywait.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sem_wait.3
diff --git a/man3/sem_unlink.3 b/man3/sem_unlink.3
deleted file mode 100644
index 6ccb17c0e..000000000
--- a/man3/sem_unlink.3
+++ /dev/null
@@ -1,69 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sem_unlink 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sem_unlink \- remove a named semaphore
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <semaphore.h>
-.PP
-.BI "int sem_unlink(const char *" name );
-.fi
-.SH DESCRIPTION
-.BR sem_unlink ()
-removes the named semaphore referred to by
-.IR name .
-The semaphore name is removed immediately.
-The semaphore is destroyed once all other processes that have
-the semaphore open close it.
-.SH RETURN VALUE
-On success
-.BR sem_unlink ()
-returns 0; on error, \-1 is returned, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-The caller does not have permission to unlink this semaphore.
-.TP
-.B ENAMETOOLONG
-.I name
-was too long.
-.TP
-.B ENOENT
-There is no semaphore with the given
-.IR name .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sem_unlink ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH SEE ALSO
-.BR sem_getvalue (3),
-.BR sem_open (3),
-.BR sem_post (3),
-.BR sem_wait (3),
-.BR sem_overview (7)
diff --git a/man3/sem_wait.3 b/man3/sem_wait.3
deleted file mode 100644
index da4893202..000000000
--- a/man3/sem_wait.3
+++ /dev/null
@@ -1,254 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sem_wait 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sem_wait, sem_timedwait, sem_trywait \- lock a semaphore
-.SH LIBRARY
-POSIX threads library
-.RI ( libpthread ", " \-lpthread )
-.SH SYNOPSIS
-.nf
-.B #include <semaphore.h>
-.PP
-.BI "int sem_wait(sem_t *" sem );
-.BI "int sem_trywait(sem_t *" sem );
-.BI "int sem_timedwait(sem_t *restrict " sem ,
-.BI " const struct timespec *restrict " abs_timeout );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sem_timedwait ():
-.nf
- _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-.BR sem_wait ()
-decrements (locks) the semaphore pointed to by
-.IR sem .
-If the semaphore's value is greater than zero,
-then the decrement proceeds, and the function returns, immediately.
-If the semaphore currently has the value zero,
-then the call blocks until either it becomes possible to perform
-the decrement (i.e., the semaphore value rises above zero),
-or a signal handler interrupts the call.
-.PP
-.BR sem_trywait ()
-is the same as
-.BR sem_wait (),
-except that if the decrement cannot be immediately performed,
-then call returns an error
-.RI ( errno
-set to
-.BR EAGAIN )
-instead of blocking.
-.PP
-.BR sem_timedwait ()
-is the same as
-.BR sem_wait (),
-except that
-.I abs_timeout
-specifies a limit on the amount of time that the call
-should block if the decrement cannot be immediately performed.
-The
-.I abs_timeout
-argument points to a
-.BR timespec (3)
-structure that specifies an absolute timeout
-in seconds and nanoseconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC).
-.PP
-If the timeout has already expired by the time of the call,
-and the semaphore could not be locked immediately,
-then
-.BR sem_timedwait ()
-fails with a timeout error
-.RI ( errno
-set to
-.BR ETIMEDOUT ).
-.PP
-If the operation can be performed immediately, then
-.BR sem_timedwait ()
-never fails with a timeout error, regardless of the value of
-.IR abs_timeout .
-Furthermore, the validity of
-.I abs_timeout
-is not checked in this case.
-.SH RETURN VALUE
-All of these functions return 0 on success;
-on error, the value of the semaphore is left unchanged,
-\-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-.RB ( sem_trywait ())
-The operation could not be performed without blocking (i.e., the
-semaphore currently has the value zero).
-.TP
-.B EINTR
-The call was interrupted by a signal handler; see
-.BR signal (7).
-.TP
-.B EINVAL
-.I sem
-is not a valid semaphore.
-.TP
-.B EINVAL
-.RB ( sem_timedwait ())
-The value of
-.I abs_timeout.tv_nsecs
-is less than 0, or greater than or equal to 1000 million.
-.TP
-.B ETIMEDOUT
-.RB ( sem_timedwait ())
-The call timed out before the semaphore could be locked.
-.\" POSIX.1-2001 also allows EDEADLK -- "A deadlock condition
-.\" was detected", but this does not occur on Linux(?).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sem_wait (),
-.BR sem_trywait (),
-.BR sem_timedwait ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH EXAMPLES
-The (somewhat trivial) program shown below operates on an
-unnamed semaphore.
-The program expects two command-line arguments.
-The first argument specifies a seconds value that is used to
-set an alarm timer to generate a
-.B SIGALRM
-signal.
-This handler performs a
-.BR sem_post (3)
-to increment the semaphore that is being waited on in
-.I main()
-using
-.BR sem_timedwait ().
-The second command-line argument specifies the length
-of the timeout, in seconds, for
-.BR sem_timedwait ().
-The following shows what happens on two different runs of the program:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out 2 3"
-About to call sem_timedwait()
-sem_post() from handler
-sem_timedwait() succeeded
-.RB "$" " ./a.out 2 1"
-About to call sem_timedwait()
-sem_timedwait() timed out
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (sem_wait.c)
-.EX
-#include <errno.h>
-#include <semaphore.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <unistd.h>
-\&
-#include <assert.h>
-\&
-sem_t sem;
-\&
-#define handle_error(msg) \e
- do { perror(msg); exit(EXIT_FAILURE); } while (0)
-\&
-static void
-handler(int sig)
-{
- write(STDOUT_FILENO, "sem_post() from handler\en", 24);
- if (sem_post(&sem) == \-1) {
- write(STDERR_FILENO, "sem_post() failed\en", 18);
- _exit(EXIT_FAILURE);
- }
-}
-\&
-int
-main(int argc, char *argv[])
-{
- struct sigaction sa;
- struct timespec ts;
- int s;
-\&
- if (argc != 3) {
- fprintf(stderr, "Usage: %s <alarm\-secs> <wait\-secs>\en",
- argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- if (sem_init(&sem, 0, 0) == \-1)
- handle_error("sem_init");
-\&
- /* Establish SIGALRM handler; set alarm timer using argv[1]. */
-\&
- sa.sa_handler = handler;
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
- if (sigaction(SIGALRM, &sa, NULL) == \-1)
- handle_error("sigaction");
-\&
- alarm(atoi(argv[1]));
-\&
- /* Calculate relative interval as current time plus
- number of seconds given argv[2]. */
-\&
- if (clock_gettime(CLOCK_REALTIME, &ts) == \-1)
- handle_error("clock_gettime");
-\&
- ts.tv_sec += atoi(argv[2]);
-\&
- printf("%s() about to call sem_timedwait()\en", __func__);
- while ((s = sem_timedwait(&sem, &ts)) == \-1 && errno == EINTR)
- continue; /* Restart if interrupted by handler. */
-\&
- /* Check what happened. */
-\&
- if (s == \-1) {
- if (errno == ETIMEDOUT)
- printf("sem_timedwait() timed out\en");
- else
- perror("sem_timedwait");
- } else
- printf("sem_timedwait() succeeded\en");
-\&
- exit((s == 0) ? EXIT_SUCCESS : EXIT_FAILURE);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR clock_gettime (2),
-.BR sem_getvalue (3),
-.BR sem_post (3),
-.BR timespec (3),
-.BR sem_overview (7),
-.BR time (7)
diff --git a/man3/setaliasent.3 b/man3/setaliasent.3
deleted file mode 100644
index adf5f13d7..000000000
--- a/man3/setaliasent.3
+++ /dev/null
@@ -1,185 +0,0 @@
-'\" t
-.\" Copyright 2003 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" Polished a bit, added a little, aeb
-.\"
-.TH setaliasent 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setaliasent, endaliasent, getaliasent, getaliasent_r,
-getaliasbyname, getaliasbyname_r \- read an alias entry
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <aliases.h>
-.PP
-.B "void setaliasent(void);"
-.B "void endaliasent(void);"
-.PP
-.B "struct aliasent *getaliasent(void);"
-.BI "int getaliasent_r(struct aliasent *restrict " result ,
-.BI " char " buffer "[restrict ." buflen "], \
-size_t " buflen ,
-.BI " struct aliasent **restrict " res );
-.PP
-.BI "struct aliasent *getaliasbyname(const char *" name );
-.BI "int getaliasbyname_r(const char *restrict " name ,
-.BI " struct aliasent *restrict " result ,
-.BI " char " buffer "[restrict ." buflen "], \
-size_t " buflen ,
-.BI " struct aliasent **restrict " res );
-.fi
-.SH DESCRIPTION
-One of the databases available with the Name Service Switch (NSS)
-is the aliases database, that contains mail aliases.
-(To find out which databases are supported, try
-.IR "getent \-\-help" .)
-Six functions are provided to access the aliases database.
-.PP
-The
-.BR getaliasent ()
-function returns a pointer to a structure containing
-the group information from the aliases database.
-The first time it is called it returns the first entry;
-thereafter, it returns successive entries.
-.PP
-The
-.BR setaliasent ()
-function rewinds the file pointer to the beginning of the
-aliases database.
-.PP
-The
-.BR endaliasent ()
-function closes the aliases database.
-.PP
-.BR getaliasent_r ()
-is the reentrant version of the previous function.
-The requested structure
-is stored via the first argument but the programmer needs to fill the other
-arguments also.
-Not providing enough space causes the function to fail.
-.PP
-The function
-.BR getaliasbyname ()
-takes the name argument and searches the aliases database.
-The entry is returned as a pointer to a
-.IR "struct aliasent" .
-.PP
-.BR getaliasbyname_r ()
-is the reentrant version of the previous function.
-The requested structure
-is stored via the second argument but the programmer needs to fill the other
-arguments also.
-Not providing enough space causes the function to fail.
-.PP
-The
-.I "struct aliasent"
-is defined in
-.IR <aliases.h> :
-.PP
-.in +4n
-.EX
-struct aliasent {
- char *alias_name; /* alias name */
- size_t alias_members_len;
- char **alias_members; /* alias name list */
- int alias_local;
-};
-.EE
-.in
-.SH RETURN VALUE
-The functions
-.BR getaliasent_r ()
-and
-.BR getaliasbyname_r ()
-return a nonzero value on error.
-.SH FILES
-The default alias database is the file
-.IR /etc/aliases .
-This can be changed in the
-.I /etc/nsswitch.conf
-file.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR setaliasent (),
-.BR endaliasent (),
-.BR getaliasent_r (),
-.BR getaliasbyname_r ()
-T} Thread safety MT-Safe locale
-T{
-.BR getaliasent (),
-.BR getaliasbyname ()
-T} Thread safety MT-Unsafe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH HISTORY
-The NeXT system has similar routines:
-.PP
-.in +4n
-.EX
-#include <aliasdb.h>
-\&
-void alias_setent(void);
-void alias_endent(void);
-alias_ent *alias_getent(void);
-alias_ent *alias_getbyname(char *name);
-.EE
-.in
-.SH EXAMPLES
-The following example compiles with
-.IR "gcc example.c \-o example" .
-It will dump all names in the alias database.
-.PP
-.\" SRC BEGIN (setaliasent.c)
-.EX
-#include <aliases.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(void)
-{
- struct aliasent *al;
-\&
- setaliasent();
- for (;;) {
- al = getaliasent();
- if (al == NULL)
- break;
- printf("Name: %s\en", al\->alias_name);
- }
- if (errno) {
- perror("reading alias");
- exit(EXIT_FAILURE);
- }
- endaliasent();
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR getgrent (3),
-.BR getpwent (3),
-.BR getspent (3),
-.BR aliases (5)
-.\"
-.\" /etc/sendmail/aliases
-.\" Yellow Pages
-.\" newaliases, postalias
diff --git a/man3/setbuf.3 b/man3/setbuf.3
deleted file mode 100644
index 7db3f1c55..000000000
--- a/man3/setbuf.3
+++ /dev/null
@@ -1,230 +0,0 @@
-'\" t
-.\" Copyright (c) 1980, 1991 Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" the American National Standards Committee X3, on Information
-.\" Processing Systems.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)setbuf.3 6.10 (Berkeley) 6/29/91
-.\"
-.\" Converted for Linux, Mon Nov 29 14:55:24 1993, faith@cs.unc.edu
-.\" Added section to BUGS, Sun Mar 12 22:28:33 MET 1995,
-.\" Thomas.Koenig@ciw.uni-karlsruhe.de
-.\" Correction, Sun, 11 Apr 1999 15:55:18,
-.\" Martin Vicente <martin@netadmin.dgac.fr>
-.\" Correction, 2000-03-03, Andreas Jaeger <aj@suse.de>
-.\" Added return value for setvbuf, aeb,
-.\"
-.TH setbuf 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setbuf, setbuffer, setlinebuf, setvbuf \- stream buffering operations
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "int setvbuf(FILE *restrict " stream ", char " buf "[restrict ." size ],
-.BI " int " mode ", size_t " size );
-.PP
-.BI "void setbuf(FILE *restrict " stream ", char *restrict " buf );
-.BI "void setbuffer(FILE *restrict " stream ", char " buf "[restrict ." size ],
-.BI " size_t " size );
-.BI "void setlinebuf(FILE *" stream );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR setbuffer (),
-.BR setlinebuf ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The three types of buffering available are unbuffered, block buffered, and
-line buffered.
-When an output stream is unbuffered, information appears on
-the destination file or terminal as soon as written; when it is block
-buffered, many characters are saved up and written as a block; when it is
-line buffered, characters are saved up until a newline is output or input is
-read from any stream attached to a terminal device (typically \fIstdin\fP).
-The function
-.BR fflush (3)
-may be used to force the block out early.
-(See
-.BR fclose (3).)
-.PP
-Normally all files are block buffered.
-If a stream refers to a terminal (as
-.I stdout
-normally does), it is line buffered.
-The standard error stream
-.I stderr
-is always unbuffered by default.
-.PP
-The
-.BR setvbuf ()
-function may be used on any open stream to change its buffer.
-The
-.I mode
-argument must be one of the following three macros:
-.RS
-.TP
-.B _IONBF
-unbuffered
-.TP
-.B _IOLBF
-line buffered
-.TP
-.B _IOFBF
-fully buffered
-.RE
-.PP
-Except for unbuffered files, the
-.I buf
-argument should point to a buffer at least
-.I size
-bytes long; this buffer will be used instead of the current buffer.
-If the argument
-.I buf
-is NULL,
-only the mode is affected; a new buffer will be allocated on the next read
-or write operation.
-The
-.BR setvbuf ()
-function may be used only after opening a stream and before any other
-operations have been performed on it.
-.PP
-The other three calls are, in effect, simply aliases for calls to
-.BR setvbuf ().
-The
-.BR setbuf ()
-function is exactly equivalent to the call
-.PP
-.in +4n
-setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
-.in
-.PP
-The
-.BR setbuffer ()
-function is the same, except that the size of the buffer is up to the
-caller, rather than being determined by the default
-.BR BUFSIZ .
-The
-.BR setlinebuf ()
-function is exactly equivalent to the call:
-.PP
-.in +4n
-setvbuf(stream, NULL, _IOLBF, 0);
-.in
-.SH RETURN VALUE
-The function
-.BR setvbuf ()
-returns 0 on success.
-It returns nonzero on failure
-.RI ( mode
-is invalid or the request cannot be honored).
-It may set
-.I errno
-on failure.
-.PP
-The other functions do not return a value.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR setbuf (),
-.BR setbuffer (),
-.BR setlinebuf (),
-.BR setvbuf ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR setbuf ()
-.TQ
-.BR setvbuf ()
-C11, POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR setbuf ()
-.TQ
-.BR setvbuf ()
-C89, POSIX.1-2001.
-.SH CAVEATS
-POSIX notes
-.\" https://www.austingroupbugs.net/view.php?id=397#c799
-.\" 0000397: setbuf and errno
-that the value of
-.I errno
-is unspecified after a call to
-.BR setbuf ()
-and further notes that, since the value of
-.I errno
-is not required to be unchanged after a successful call to
-.BR setbuf (),
-applications should instead use
-.BR setvbuf ()
-in order to detect errors.
-.SH BUGS
-.\" The
-.\" .BR setbuffer ()
-.\" and
-.\" .BR setlinebuf ()
-.\" functions are not portable to versions of BSD before 4.2BSD, and
-.\" are available under Linux since libc 4.5.21.
-.\" On 4.2BSD and 4.3BSD systems,
-.\" .BR setbuf ()
-.\" always uses a suboptimal buffer size and should be avoided.
-.\".PP
-You must make sure that the space that
-.I buf
-points to still exists by the time
-.I stream
-is closed, which also happens at program termination.
-For example, the following is invalid:
-.PP
-.\" [[invalid]] SRC BEGIN (setbuf.c)
-.EX
-#include <stdio.h>
-\&
-int
-main(void)
-{
- char buf[BUFSIZ];
-\&
- setbuf(stdout, buf);
- printf("Hello, world!\en");
- return 0;
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR stdbuf (1),
-.BR fclose (3),
-.BR fflush (3),
-.BR fopen (3),
-.BR fread (3),
-.BR malloc (3),
-.BR printf (3),
-.BR puts (3)
diff --git a/man3/setbuffer.3 b/man3/setbuffer.3
deleted file mode 100644
index dc02d9e88..000000000
--- a/man3/setbuffer.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/setbuf.3
diff --git a/man3/setcontext.3 b/man3/setcontext.3
deleted file mode 100644
index b01818d4f..000000000
--- a/man3/setcontext.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getcontext.3
diff --git a/man3/setenv.3 b/man3/setenv.3
deleted file mode 100644
index 86b7860f1..000000000
--- a/man3/setenv.3
+++ /dev/null
@@ -1,153 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright (C) 2004, 2007 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:20:58 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Fri Feb 14 21:47:50 1997 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified 9 Jun 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Changed unsetenv() prototype; added EINVAL error
-.\" Noted nonstandard behavior of setenv() if name contains '='
-.\" 2005-08-12, mtk, glibc 2.3.4 fixed the "name contains '='" bug
-.\"
-.TH setenv 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setenv \- change or add an environment variable
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int setenv(const char *" name ", const char *" value ", int " overwrite );
-.BI "int unsetenv(const char *" name );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR setenv (),
-.BR unsetenv ():
-.nf
- _POSIX_C_SOURCE >= 200112L
- || /* glibc <= 2.19: */ _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR setenv ()
-function adds the variable
-.I name
-to the
-environment with the value
-.IR value ,
-if
-.I name
-does not
-already exist.
-If
-.I name
-does exist in the environment, then
-its value is changed to
-.I value
-if
-.I overwrite
-is nonzero;
-if
-.I overwrite
-is zero, then the value of
-.I name
-is not changed (and
-.BR setenv ()
-returns a success status).
-This function makes copies of the strings pointed to by
-.I name
-and
-.I value
-(by contrast with
-.BR putenv (3)).
-.PP
-The
-.BR unsetenv ()
-function deletes the variable
-.I name
-from
-the environment.
-If
-.I name
-does not exist in the environment,
-then the function succeeds, and the environment is unchanged.
-.SH RETURN VALUE
-.BR setenv ()
-and
-.BR unsetenv ()
-functions return zero on success,
-or \-1 on error, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I name
-is NULL, points to a string of length 0,
-or contains an \[aq]=\[aq] character.
-.TP
-.B ENOMEM
-Insufficient memory to add a new variable to the environment.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR setenv (),
-.BR unsetenv ()
-T} Thread safety MT-Unsafe const:env
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, 4.3BSD.
-.PP
-Prior to glibc 2.2.2,
-.BR unsetenv ()
-was prototyped
-as returning
-.IR void ;
-more recent glibc versions follow the
-POSIX.1-compliant prototype shown in the SYNOPSIS.
-.SH CAVEATS
-POSIX.1 does not require
-.BR setenv ()
-or
-.BR unsetenv ()
-to be reentrant.
-.SH BUGS
-POSIX.1 specifies that if
-.I name
-contains an \[aq]=\[aq] character, then
-.BR setenv ()
-should fail with the error
-.BR EINVAL ;
-however, versions of glibc before glibc 2.3.4 allowed an \[aq]=\[aq] sign in
-.IR name .
-.SH SEE ALSO
-.BR clearenv (3),
-.BR getenv (3),
-.BR putenv (3),
-.BR environ (7)
diff --git a/man3/setfsent.3 b/man3/setfsent.3
deleted file mode 100644
index 1e6a3eb7e..000000000
--- a/man3/setfsent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getfsent.3
diff --git a/man3/setgrent.3 b/man3/setgrent.3
deleted file mode 100644
index bde736fff..000000000
--- a/man3/setgrent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getgrent.3
diff --git a/man3/sethostent.3 b/man3/sethostent.3
deleted file mode 100644
index 7d0fb4b7c..000000000
--- a/man3/sethostent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/gethostbyname.3
diff --git a/man3/sethostid.3 b/man3/sethostid.3
deleted file mode 100644
index 3210db030..000000000
--- a/man3/sethostid.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/gethostid.3
diff --git a/man3/setjmp.3 b/man3/setjmp.3
deleted file mode 100644
index 138db4ca2..000000000
--- a/man3/setjmp.3
+++ /dev/null
@@ -1,333 +0,0 @@
-'\" t
-.\" Copyright (C) 2016 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH setjmp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setjmp, sigsetjmp, longjmp, siglongjmp \- performing a nonlocal goto
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <setjmp.h>
-.PP
-.BI "int setjmp(jmp_buf " env );
-.BI "int sigsetjmp(sigjmp_buf " env ", int " savesigs );
-.PP
-.BI "[[noreturn]] void longjmp(jmp_buf " env ", int " val );
-.BI "[[noreturn]] void siglongjmp(sigjmp_buf " env ", int " val );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR setjmp ():
-see NOTES.
-.PP
-.BR sigsetjmp ():
-.nf
- _POSIX_C_SOURCE
-.fi
-.SH DESCRIPTION
-The functions described on this page are used for performing "nonlocal gotos":
-transferring execution from one function to a predetermined location
-in another function.
-The
-.BR setjmp ()
-function dynamically establishes the target to which control
-will later be transferred, and
-.BR longjmp ()
-performs the transfer of execution.
-.PP
-The
-.BR setjmp ()
-function saves various information about the calling environment
-(typically, the stack pointer, the instruction pointer,
-possibly the values of other registers and the signal mask)
-in the buffer
-.I env
-for later use by
-.BR longjmp ().
-In this case,
-.BR setjmp ()
-returns 0.
-.PP
-The
-.BR longjmp ()
-function uses the information saved in
-.I env
-to transfer control back to the point where
-.BR setjmp ()
-was called and to restore ("rewind") the stack to its state at the time of the
-.BR setjmp ()
-call.
-In addition, and depending on the implementation (see NOTES),
-the values of some other registers and the process signal mask
-may be restored to their state at the time of the
-.BR setjmp ()
-call.
-.PP
-Following a successful
-.BR longjmp (),
-execution continues as if
-.BR setjmp ()
-had returned for a second time.
-This "fake" return can be distinguished from a true
-.BR setjmp ()
-call because the "fake" return returns the value provided in
-.IR val .
-If the programmer mistakenly passes the value 0 in
-.IR val ,
-the "fake" return will instead return 1.
-.SS sigsetjmp() and siglongjmp()
-.BR sigsetjmp ()
-and
-.BR siglongjmp ()
-also perform nonlocal gotos, but provide predictable handling of
-the process signal mask.
-.PP
-If, and only if, the
-.I savesigs
-argument provided to
-.BR sigsetjmp ()
-is nonzero, the process's current signal mask is saved in
-.I env
-and will be restored if a
-.BR siglongjmp ()
-is later performed with this
-.IR env .
-.SH RETURN VALUE
-.BR setjmp ()
-and
-.BR sigsetjmp ()
-return 0 when called directly;
-on the "fake" return that occurs after
-.BR longjmp ()
-or
-.BR siglongjmp (),
-the nonzero value specified in
-.I val
-is returned.
-.PP
-The
-.BR longjmp ()
-or
-.BR siglongjmp ()
-functions do not return.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR setjmp (),
-.BR sigsetjmp ()
-T} Thread safety MT-Safe
-T{
-.BR longjmp (),
-.BR siglongjmp ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR setjmp ()
-.TQ
-.BR longjmp ()
-C11, POSIX.1-2008.
-.TP
-.BR sigsetjmp ()
-.TQ
-.BR siglongjmp ()
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR setjmp ()
-.TQ
-.BR longjmp ()
-POSIX.1-2001, C89.
-.TP
-.BR sigsetjmp ()
-.TQ
-.BR siglongjmp ()
-POSIX.1-2001.
-.PP
-POSIX does not specify whether
-.BR setjmp ()
-will save the signal mask
-(to be later restored during
-.BR longjmp ()).
-In System V it will not.
-In 4.3BSD it will, and there
-is a function
-.BR _setjmp ()
-that will not.
-The behavior under Linux depends on the glibc version
-and the setting of feature test macros.
-Before glibc 2.19,
-.BR setjmp ()
-follows the System V behavior by default,
-but the BSD behavior is provided if the
-.B _BSD_SOURCE
-feature test macro is explicitly defined
-.\" so that _FAVOR_BSD is triggered
-and none of
-.BR _POSIX_SOURCE ,
-.BR _POSIX_C_SOURCE ,
-.BR _XOPEN_SOURCE ,
-.\" .BR _XOPEN_SOURCE_EXTENDED ,
-.BR _GNU_SOURCE ,
-or
-.B _SVID_SOURCE
-is defined.
-Since glibc 2.19,
-.I <setjmp.h>
-exposes only the System V version of
-.BR setjmp ().
-Programs that need the BSD semantics should replace calls to
-.BR setjmp ()
-with calls to
-.BR sigsetjmp ()
-with a nonzero
-.I savesigs
-argument.
-.SH NOTES
-.BR setjmp ()
-and
-.BR longjmp ()
-can be useful for dealing with errors inside deeply nested function calls
-or to allow a signal handler to pass control to
-a specific point in the program,
-rather than returning to the point where the handler interrupted
-the main program.
-In the latter case,
-if you want to portably save and restore signal masks, use
-.BR sigsetjmp ()
-and
-.BR siglongjmp ().
-See also the discussion of program readability below.
-.SH CAVEATS
-The compiler may optimize variables into registers, and
-.BR longjmp ()
-may restore the values of other registers in addition to the
-stack pointer and program counter.
-Consequently, the values of automatic variables are unspecified
-after a call to
-.BR longjmp ()
-if they meet all the following criteria:
-.IP \[bu] 3
-they are local to the function that made the corresponding
-.BR setjmp ()
-call;
-.IP \[bu]
-their values are changed between the calls to
-.BR setjmp ()
-and
-.BR longjmp ();
-and
-.IP \[bu]
-they are not declared as
-.IR volatile .
-.PP
-Analogous remarks apply for
-.BR siglongjmp ().
-.\"
-.SS Nonlocal gotos and program readability
-While it can be abused,
-the traditional C "goto" statement at least has the benefit that lexical cues
-(the goto statement and the target label)
-allow the programmer to easily perceive the flow of control.
-Nonlocal gotos provide no such cues: multiple
-.BR setjmp ()
-calls might employ the same
-.I jmp_buf
-variable so that the content of the variable may change
-over the lifetime of the application.
-Consequently, the programmer may be forced to perform detailed
-reading of the code to determine the dynamic target of a particular
-.BR longjmp ()
-call.
-(To make the programmer's life easier, each
-.BR setjmp ()
-call should employ a unique
-.I jmp_buf
-variable.)
-.PP
-Adding further difficulty, the
-.BR setjmp ()
-and
-.BR longjmp ()
-calls may not even be in the same source code module.
-.PP
-In summary, nonlocal gotos can make programs harder to understand
-and maintain, and an alternative should be used if possible.
-.\"
-.SS Undefined Behavior
-If the function which called
-.BR setjmp ()
-returns before
-.BR longjmp ()
-is called, the behavior is undefined.
-Some kind of subtle or unsubtle chaos is sure to result.
-.PP
-If, in a multithreaded program, a
-.BR longjmp ()
-call employs an
-.I env
-buffer that was initialized by a call to
-.BR setjmp ()
-in a different thread, the behavior is undefined.
-.\"
-.\" The following statement appeared in versions up to POSIX.1-2008 TC1,
-.\" but is set to be removed in POSIX.1-2008 TC2:
-.\"
-.\" According to POSIX.1, if a
-.\" .BR longjmp ()
-.\" call is performed from a nested signal handler
-.\" (i.e., from a handler that was invoked in response to a signal that was
-.\" generated while another signal was already in the process of being
-.\" handled), the behavior is undefined.
-.PP
-POSIX.1-2008 Technical Corrigendum 2 adds
-.\" http://austingroupbugs.net/view.php?id=516#c1195
-.BR longjmp ()
-and
-.BR siglongjmp ()
-to the list of async-signal-safe functions.
-However, the standard recommends avoiding the use of these functions
-from signal handlers and goes on to point out that
-if these functions are called from a signal handler that interrupted
-a call to a non-async-signal-safe function (or some equivalent,
-such as the steps equivalent to
-.BR exit (3)
-that occur upon a return from the initial call to
-.IR main ()),
-the behavior is undefined if the program subsequently makes a call to
-a non-async-signal-safe function.
-The only way of avoiding undefined behavior is to ensure one of the following:
-.IP \[bu] 3
-After long jumping from the signal handler,
-the program does not call any non-async-signal-safe functions
-and does not return from the initial call to
-.IR main ().
-.IP \[bu]
-Any signal whose handler performs a long jump must be blocked during
-.I every
-call to a non-async-signal-safe function and
-no non-async-signal-safe functions are called after
-returning from the initial call to
-.IR main ().
-.SH SEE ALSO
-.BR signal (7),
-.BR signal\-safety (7)
diff --git a/man3/setkey.3 b/man3/setkey.3
deleted file mode 100644
index e34c9e911..000000000
--- a/man3/setkey.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/encrypt.3
diff --git a/man3/setkey_r.3 b/man3/setkey_r.3
deleted file mode 100644
index e34c9e911..000000000
--- a/man3/setkey_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/encrypt.3
diff --git a/man3/setlinebuf.3 b/man3/setlinebuf.3
deleted file mode 100644
index dc02d9e88..000000000
--- a/man3/setlinebuf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/setbuf.3
diff --git a/man3/setlocale.3 b/man3/setlocale.3
deleted file mode 100644
index 610066167..000000000
--- a/man3/setlocale.3
+++ /dev/null
@@ -1,255 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\" and Copyright 1999 by Bruno Haible (haible@clisp.cons.org)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 18:20:12 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Tue Jul 15 16:49:10 1997 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified Sun Jul 4 14:52:16 1999 by Bruno Haible (haible@clisp.cons.org)
-.\" Modified Tue Aug 24 17:11:01 1999 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified Tue Feb 6 03:31:55 2001 by Andries Brouwer (aeb@cwi.nl)
-.\"
-.TH setlocale 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setlocale \- set the current locale
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <locale.h>
-.PP
-.BI "char *setlocale(int " category ", const char *" locale );
-.fi
-.SH DESCRIPTION
-The
-.BR setlocale ()
-function is used to set or query the program's current locale.
-.PP
-If
-.I locale
-is not NULL,
-the program's current locale is modified according to the arguments.
-The argument
-.I category
-determines which parts of the program's current locale should be modified.
-.ad l
-.nh
-.TS
-lB lB
-lB lx.
-Category Governs
-LC_ALL All of the locale
-LC_ADDRESS T{
-Formatting of addresses and
-geography-related items (*)
-T}
-LC_COLLATE String collation
-LC_CTYPE Character classification
-LC_IDENTIFICATION T{
-Metadata describing the locale (*)
-T}
-LC_MEASUREMENT T{
-Settings related to measurements
-(metric versus US customary) (*)
-T}
-LC_MESSAGES T{
-Localizable natural-language messages
-T}
-LC_MONETARY T{
-Formatting of monetary values
-T}
-LC_NAME T{
-Formatting of salutations for persons (*)
-T}
-LC_NUMERIC T{
-Formatting of nonmonetary numeric values
-T}
-LC_PAPER T{
-Settings related to the standard paper size (*)
-T}
-LC_TELEPHONE T{
-Formats to be used with telephone services (*)
-T}
-LC_TIME T{
-Formatting of date and time values
-T}
-.TE
-.hy
-.ad
-.PP
-The categories marked with an asterisk in the above table
-are GNU extensions.
-For further information on these locale categories, see
-.BR locale (7).
-.PP
-The argument
-.I locale
-is a pointer to a character string containing the
-required setting of
-.IR category .
-Such a string is either a well-known constant like "C" or "da_DK"
-(see below), or an opaque string that was returned by another call of
-.BR setlocale ().
-.PP
-If
-.I locale
-is an empty string,
-.BR """""" ,
-each part of the locale that should be modified is set according to the
-environment variables.
-The details are implementation-dependent.
-For glibc, first (regardless of
-.IR category ),
-the environment variable
-.B LC_ALL
-is inspected,
-next the environment variable with the same name as the category
-(see the table above),
-and finally the environment variable
-.BR LANG .
-The first existing environment variable is used.
-If its value is not a valid locale specification, the locale
-is unchanged, and
-.BR setlocale ()
-returns NULL.
-.PP
-The locale
-.B """C"""
-or
-.B """POSIX"""
-is a portable locale;
-it exists on all conforming systems.
-.PP
-A locale name is typically of the form
-.IR language "[_" territory "][." codeset "][@" modifier "],"
-where
-.I language
-is an ISO 639 language code,
-.I territory
-is an ISO 3166 country code, and
-.I codeset
-is a character set or encoding identifier like
-.B "ISO\-8859\-1"
-or
-.BR "UTF\-8" .
-For a list of all supported locales, try "locale \-a" (see
-.BR locale (1)).
-.PP
-If
-.I locale
-is NULL, the current locale is only queried, not modified.
-.PP
-On startup of the main program, the portable
-.B """C"""
-locale is selected as default.
-A program may be made portable to all locales by calling:
-.PP
-.in +4n
-.EX
-setlocale(LC_ALL, "");
-.EE
-.in
-.PP
-after program initialization, and then:
-.IP \[bu] 3
-using the values returned from a
-.BR localeconv (3)
-call for locale-dependent information;
-.IP \[bu]
-using the multibyte and wide character functions for text processing if
-.BR "MB_CUR_MAX > 1" ;
-.IP \[bu]
-using
-.BR strcoll (3)
-and
-.BR strxfrm (3)
-to compare strings; and
-.IP \[bu]
-using
-.BR wcscoll (3)
-and
-.BR wcsxfrm (3)
-to compare wide-character strings.
-.SH RETURN VALUE
-A successful call to
-.BR setlocale ()
-returns an opaque string that corresponds to the locale set.
-This string may be allocated in static storage.
-The string returned is such that a subsequent call with that string
-and its associated category will restore that part of the process's
-locale.
-The return value is NULL if the request cannot be honored.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR setlocale ()
-T} Thread safety MT-Unsafe const:locale env
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SS Categories
-.TP
-.B LC_ALL
-.TQ
-.B LC_COLLATE
-.TQ
-.B LC_CTYPE
-.TQ
-.B LC_MONETARY
-.TQ
-.B LC_NUMERIC
-.TQ
-.B LC_TIME
-C11, POSIX.1-2008.
-.TP
-.B LC_MESSAGES
-POSIX.1-2008.
-.TP
-Others:
-GNU.
-.SH HISTORY
-POSIX.1-2001, C89.
-.SS Categories
-.TP
-.B LC_ALL
-.TQ
-.B LC_COLLATE
-.TQ
-.B LC_CTYPE
-.TQ
-.B LC_MONETARY
-.TQ
-.B LC_NUMERIC
-.TQ
-.B LC_TIME
-C89, POSIX.1-2001.
-.TP
-.B LC_MESSAGES
-POSIX.1-2001.
-.TP
-Others:
-GNU.
-.SH SEE ALSO
-.BR locale (1),
-.BR localedef (1),
-.BR isalpha (3),
-.BR localeconv (3),
-.BR nl_langinfo (3),
-.BR rpmatch (3),
-.BR strcoll (3),
-.BR strftime (3),
-.BR charsets (7),
-.BR locale (7)
diff --git a/man3/setlogmask.3 b/man3/setlogmask.3
deleted file mode 100644
index c5030e7e0..000000000
--- a/man3/setlogmask.3
+++ /dev/null
@@ -1,88 +0,0 @@
-'\" t
-.\" Copyright (C) 2001 Andries Brouwer <aeb@cwi.nl>.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH setlogmask 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setlogmask \- set log priority mask
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <syslog.h>
-.PP
-.BI "int setlogmask(int " mask );
-.fi
-.SH DESCRIPTION
-A process has a log priority mask that determines which calls to
-.BR syslog (3)
-may be logged.
-All other calls will be ignored.
-Logging is enabled for the priorities that have the corresponding
-bit set in
-.IR mask .
-The initial mask is such that logging is enabled for all priorities.
-.PP
-The
-.BR setlogmask ()
-function sets this logmask for the calling process,
-and returns the previous mask.
-If the mask argument is 0, the current logmask is not modified.
-.PP
-The eight priorities are
-.BR LOG_EMERG ,
-.BR LOG_ALERT ,
-.BR LOG_CRIT ,
-.BR LOG_ERR ,
-.BR LOG_WARNING ,
-.BR LOG_NOTICE ,
-.BR LOG_INFO ,
-and
-.BR LOG_DEBUG .
-The bit corresponding to a priority
-.I p
-is
-.IR LOG_MASK(p) .
-Some systems also provide a macro
-.I LOG_UPTO(p)
-for the mask
-of all priorities in the above list up to and including
-.IR p .
-.SH RETURN VALUE
-This function returns the previous log priority mask.
-.SH ERRORS
-None.
-.\" .SH NOTES
-.\" The glibc logmask handling was broken before glibc 2.1.1.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR setlogmask ()
-T} Thread safety MT-Unsafe race:LogMask
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.\" Note that the description in POSIX.1-2001 is flawed.
-.PP
-.BR LOG_UPTO ()
-will be included in the next release of the POSIX specification (Issue 8).
-.\" FIXME . https://www.austingroupbugs.net/view.php?id=1033
-.SH SEE ALSO
-.BR closelog (3),
-.BR openlog (3),
-.BR syslog (3)
diff --git a/man3/setmntent.3 b/man3/setmntent.3
deleted file mode 100644
index 3c2bb35c9..000000000
--- a/man3/setmntent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getmntent.3
diff --git a/man3/setnetent.3 b/man3/setnetent.3
deleted file mode 100644
index 70f5670dc..000000000
--- a/man3/setnetent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getnetent.3
diff --git a/man3/setnetgrent.3 b/man3/setnetgrent.3
deleted file mode 100644
index 38b492099..000000000
--- a/man3/setnetgrent.3
+++ /dev/null
@@ -1,166 +0,0 @@
-'\" t
-.\" Copyright 2002 walter harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" based on glibc infopages
-.\" polished - aeb
-.\"
-.TH setnetgrent 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-setnetgrent, endnetgrent, getnetgrent, getnetgrent_r, innetgr \-
-handle network group entries
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <netdb.h>
-.PP
-.BI "int setnetgrent(const char *" netgroup );
-.B "void endnetgrent(void);"
-.PP
-.BI "int getnetgrent(char **restrict " host ,
-.BI " char **restrict " user ", char **restrict " domain );
-.BI "int getnetgrent_r(char **restrict " host ,
-.BI " char **restrict " user ", char **restrict " domain ,
-.BI " char " buf "[restrict ." buflen "], size_t " buflen );
-.PP
-.BI "int innetgr(const char *" netgroup ", const char *" host ,
-.BI " const char *" user ", const char *" domain );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.ad l
-.PP
-.nh
-.BR setnetgrent (),
-.BR endnetgrent (),
-.BR getnetgrent (),
-.BR getnetgrent_r (),
-.BR innetgr ():
-.hy
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.ad
-.SH DESCRIPTION
-The
-.I netgroup
-is a SunOS invention.
-A netgroup database is a list of string triples
-.RI ( hostname ", " username ", " domainname )
-or other netgroup names.
-Any of the elements in a triple can be empty,
-which means that anything matches.
-The functions described here allow access to the netgroup databases.
-The file
-.I /etc/nsswitch.conf
-defines what database is searched.
-.PP
-The
-.BR setnetgrent ()
-call defines the netgroup that will be searched by subsequent
-.BR getnetgrent ()
-calls.
-The
-.BR getnetgrent ()
-function retrieves the next netgroup entry, and returns pointers in
-.IR host ,
-.IR user ,
-.IR domain .
-A null pointer means that the corresponding entry matches any string.
-The pointers are valid only as long as there is no call to other
-netgroup-related functions.
-To avoid this problem you can use the GNU function
-.BR getnetgrent_r ()
-that stores the strings in the supplied buffer.
-To free all allocated buffers use
-.BR endnetgrent ().
-.PP
-In most cases you want to check only if the triplet
-.RI ( hostname ", " username ", " domainname )
-is a member of a netgroup.
-The function
-.BR innetgr ()
-can be used for this without calling the above three functions.
-Again, a null pointer is a wildcard and matches any string.
-The function is thread-safe.
-.SH RETURN VALUE
-These functions return 1 on success and 0 for failure.
-.SH FILES
-.I /etc/netgroup
-.br
-.I /etc/nsswitch.conf
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR setnetgrent (),
-.BR getnetgrent_r (),
-.BR innetgr ()
-T} Thread safety T{
-MT-Unsafe race:netgrent
-locale
-T}
-T{
-.BR endnetgrent ()
-T} Thread safety T{
-MT-Unsafe race:netgrent
-T}
-T{
-.BR getnetgrent ()
-T} Thread safety T{
-MT-Unsafe race:netgrent
-race:netgrentbuf locale
-T}
-.TE
-.hy
-.ad
-.sp 1
-In the above table,
-.I netgrent
-in
-.I race:netgrent
-signifies that if any of the functions
-.BR setnetgrent (),
-.BR getnetgrent_r (),
-.BR innetgr (),
-.BR getnetgrent (),
-or
-.BR endnetgrent ()
-are used in parallel in different threads of a program,
-then data races could occur.
-.SH VERSIONS
-In the BSD implementation,
-.BR setnetgrent ()
-returns void.
-.SH STANDARDS
-None.
-.SH HISTORY
-.BR setnetgrent (),
-.BR endnetgrent (),
-.BR getnetgrent (),
-and
-.BR innetgr ()
-are available on most UNIX systems.
-.BR getnetgrent_r ()
-is not widely available on other systems.
-.\" getnetgrent_r() is on Solaris 8 and AIX 5.1, but not the BSDs.
-.SH SEE ALSO
-.BR sethostent (3),
-.BR setprotoent (3),
-.BR setservent (3)
diff --git a/man3/setprotoent.3 b/man3/setprotoent.3
deleted file mode 100644
index f8cb4bba2..000000000
--- a/man3/setprotoent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getprotoent.3
diff --git a/man3/setpwent.3 b/man3/setpwent.3
deleted file mode 100644
index f2d121b80..000000000
--- a/man3/setpwent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getpwent.3
diff --git a/man3/setrpcent.3 b/man3/setrpcent.3
deleted file mode 100644
index 923085e2e..000000000
--- a/man3/setrpcent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getrpcent.3
diff --git a/man3/setservent.3 b/man3/setservent.3
deleted file mode 100644
index eaafb1c1e..000000000
--- a/man3/setservent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getservent.3
diff --git a/man3/setspent.3 b/man3/setspent.3
deleted file mode 100644
index 142c5a5ca..000000000
--- a/man3/setspent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getspnam.3
diff --git a/man3/setstate.3 b/man3/setstate.3
deleted file mode 100644
index 6e34104e2..000000000
--- a/man3/setstate.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/random.3
diff --git a/man3/setstate_r.3 b/man3/setstate_r.3
deleted file mode 100644
index b01937f4d..000000000
--- a/man3/setstate_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/random_r.3
diff --git a/man3/setttyent.3 b/man3/setttyent.3
deleted file mode 100644
index 1cd11e3d8..000000000
--- a/man3/setttyent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getttyent.3
diff --git a/man3/setusershell.3 b/man3/setusershell.3
deleted file mode 100644
index 718ed12e9..000000000
--- a/man3/setusershell.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getusershell.3
diff --git a/man3/setutent.3 b/man3/setutent.3
deleted file mode 100644
index 29c36b72a..000000000
--- a/man3/setutent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getutent.3
diff --git a/man3/setutxent.3 b/man3/setutxent.3
deleted file mode 100644
index 29c36b72a..000000000
--- a/man3/setutxent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getutent.3
diff --git a/man3/setvbuf.3 b/man3/setvbuf.3
deleted file mode 100644
index dc02d9e88..000000000
--- a/man3/setvbuf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/setbuf.3
diff --git a/man3/sgetspent.3 b/man3/sgetspent.3
deleted file mode 100644
index 142c5a5ca..000000000
--- a/man3/sgetspent.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getspnam.3
diff --git a/man3/sgetspent_r.3 b/man3/sgetspent_r.3
deleted file mode 100644
index 142c5a5ca..000000000
--- a/man3/sgetspent_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getspnam.3
diff --git a/man3/shm_open.3 b/man3/shm_open.3
deleted file mode 100644
index ee1c54d46..000000000
--- a/man3/shm_open.3
+++ /dev/null
@@ -1,511 +0,0 @@
-'\" t
-.\" Copyright (C) 2002, 2020 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH shm_open 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-shm_open, shm_unlink \- create/open or unlink POSIX shared memory objects
-.SH LIBRARY
-Real-time library
-.RI ( librt ", " \-lrt )
-.SH SYNOPSIS
-.nf
-.B #include <sys/mman.h>
-.BR "#include <sys/stat.h>" " /* For mode constants */"
-.BR "#include <fcntl.h>" " /* For O_* constants */"
-.PP
-.BI "int shm_open(const char *" name ", int " oflag ", mode_t " mode );
-.BI "int shm_unlink(const char *" name );
-.fi
-.SH DESCRIPTION
-.BR shm_open ()
-creates and opens a new, or opens an existing, POSIX shared memory object.
-A POSIX shared memory object is in effect a handle which can
-be used by unrelated processes to
-.BR mmap (2)
-the same region of shared memory.
-The
-.BR shm_unlink ()
-function performs the converse operation,
-removing an object previously created by
-.BR shm_open ().
-.PP
-The operation of
-.BR shm_open ()
-is analogous to that of
-.BR open (2).
-.I name
-specifies the shared memory object to be created or opened.
-For portable use,
-a shared memory object should be identified by a name of the form
-.IR /somename ;
-that is, a null-terminated string of up to
-.B NAME_MAX
-(i.e., 255) characters consisting of an initial slash,
-.\" glibc allows the initial slash to be omitted, and makes
-.\" multiple initial slashes equivalent to a single slash.
-.\" This differs from the implementation of POSIX message queues.
-followed by one or more characters, none of which are slashes.
-.\" glibc allows subdirectory components in the name, in which
-.\" case the subdirectory must exist under /dev/shm, and allow the
-.\" required permissions if a user wants to create a shared memory
-.\" object in that subdirectory.
-.PP
-.I oflag
-is a bit mask created by ORing together exactly one of
-.B O_RDONLY
-or
-.B O_RDWR
-and any of the other flags listed here:
-.TP
-.B O_RDONLY
-Open the object for read access.
-A shared memory object opened in this way can be
-.BR mmap (2)ed
-only for read
-.RB ( PROT_READ )
-access.
-.TP
-.B O_RDWR
-Open the object for read-write access.
-.TP
-.B O_CREAT
-Create the shared memory object if it does not exist.
-The user and group ownership of the object are taken
-from the corresponding effective IDs of the calling process,
-.\" In truth it is actually the filesystem IDs on Linux, but these
-.\" are nearly always the same as the effective IDs. (MTK, Jul 05)
-and the object's
-permission bits are set according to the low-order 9 bits of
-.IR mode ,
-except that those bits set in the process file mode
-creation mask (see
-.BR umask (2))
-are cleared for the new object.
-A set of macro constants which can be used to define
-.I mode
-is listed in
-.BR open (2).
-(Symbolic definitions of these constants can be obtained by including
-.IR <sys/stat.h> .)
-.IP
-A new shared memory object initially has zero length\[em]the size of the
-object can be set using
-.BR ftruncate (2).
-The newly allocated bytes of a shared memory
-object are automatically initialized to 0.
-.TP
-.B O_EXCL
-If
-.B O_CREAT
-was also specified, and a shared memory object with the given
-.I name
-already exists, return an error.
-The check for the existence of the object, and its creation if it
-does not exist, are performed atomically.
-.TP
-.B O_TRUNC
-If the shared memory object already exists, truncate it to zero bytes.
-.PP
-Definitions of these flag values can be obtained by including
-.IR <fcntl.h> .
-.PP
-On successful completion
-.BR shm_open ()
-returns a new file descriptor referring to the shared memory object.
-This file descriptor is guaranteed to be the lowest-numbered file descriptor
-not previously opened within the process.
-The
-.B FD_CLOEXEC
-flag (see
-.BR fcntl (2))
-is set for the file descriptor.
-.PP
-The file descriptor is normally used in subsequent calls
-to
-.BR ftruncate (2)
-(for a newly created object) and
-.BR mmap (2).
-After a call to
-.BR mmap (2)
-the file descriptor may be closed without affecting the memory mapping.
-.PP
-The operation
-of
-.BR shm_unlink ()
-is analogous to
-.BR unlink (2):
-it removes a shared memory object name, and, once all processes
-have unmapped the object, deallocates and
-destroys the contents of the associated memory region.
-After a successful
-.BR shm_unlink (),
-attempts to
-.BR shm_open ()
-an object with the same
-.I name
-fail (unless
-.B O_CREAT
-was specified, in which case a new, distinct object is created).
-.SH RETURN VALUE
-On success,
-.BR shm_open ()
-returns a file descriptor (a nonnegative integer).
-On success,
-.BR shm_unlink ()
-returns 0.
-On failure, both functions return \-1 and set
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-Permission to
-.BR shm_unlink ()
-the shared memory object was denied.
-.TP
-.B EACCES
-Permission was denied to
-.BR shm_open ()
-.I name
-in the specified
-.IR mode ,
-or
-.B O_TRUNC
-was specified and the caller does not have write permission on the object.
-.TP
-.B EEXIST
-Both
-.B O_CREAT
-and
-.B O_EXCL
-were specified to
-.BR shm_open ()
-and the shared memory object specified by
-.I name
-already exists.
-.TP
-.B EINVAL
-The
-.I name
-argument to
-.BR shm_open ()
-was invalid.
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENAMETOOLONG
-The length of
-.I name
-exceeds
-.BR PATH_MAX .
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOENT
-An attempt was made to
-.BR shm_open ()
-a
-.I name
-that did not exist, and
-.B O_CREAT
-was not specified.
-.TP
-.B ENOENT
-An attempt was to made to
-.BR shm_unlink ()
-a
-.I name
-that does not exist.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR shm_open (),
-.BR shm_unlink ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-POSIX leaves the behavior of the combination of
-.B O_RDONLY
-and
-.B O_TRUNC
-unspecified.
-On Linux, this will successfully truncate an existing
-shared memory object\[em]this may not be so on other UNIX systems.
-.PP
-The POSIX shared memory object implementation on Linux makes use
-of a dedicated
-.BR tmpfs (5)
-filesystem that is normally mounted under
-.IR /dev/shm .
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.2.
-POSIX.1-2001.
-.PP
-POSIX.1-2001 says that the group ownership of a newly created shared
-memory object is set to either the calling process's effective group ID
-or "a system default group ID".
-POSIX.1-2008 says that the group ownership
-may be set to either the calling process's effective group ID
-or, if the object is visible in the filesystem,
-the group ID of the parent directory.
-.SH EXAMPLES
-The programs below employ POSIX shared memory and POSIX unnamed semaphores
-to exchange a piece of data.
-The "bounce" program (which must be run first) raises the case
-of a string that is placed into the shared memory by the "send" program.
-Once the data has been modified, the "send" program then prints
-the contents of the modified shared memory.
-An example execution of the two programs is the following:
-.PP
-.in +4n
-.EX
-$ \fB./pshm_ucase_bounce /myshm &\fP
-[1] 270171
-$ \fB./pshm_ucase_send /myshm hello\fP
-HELLO
-.EE
-.in
-.PP
-Further detail about these programs is provided below.
-.\"
-.SS Program source: pshm_ucase.h
-The following header file is included by both programs below.
-Its primary purpose is to define a structure that will be imposed
-on the memory object that is shared between the two programs.
-.PP
-.in +4n
-.\" SRC BEGIN (pshm_ucase.h)
-.EX
-#include <fcntl.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <unistd.h>
-\&
-#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \e
- } while (0)
-\&
-#define BUF_SIZE 1024 /* Maximum size for exchanged string */
-\&
-/* Define a structure that will be imposed on the shared
- memory object */
-\&
-struct shmbuf {
- sem_t sem1; /* POSIX unnamed semaphore */
- sem_t sem2; /* POSIX unnamed semaphore */
- size_t cnt; /* Number of bytes used in \[aq]buf\[aq] */
- char buf[BUF_SIZE]; /* Data being transferred */
-};
-.EE
-.\" SRC END
-.in
-.\"
-.SS Program source: pshm_ucase_bounce.c
-The "bounce" program creates a new shared memory object with the name
-given in its command-line argument and sizes the object to
-match the size of the
-.I shmbuf
-structure defined in the header file.
-It then maps the object into the process's address space,
-and initializes two POSIX semaphores inside the object to 0.
-.PP
-After the "send" program has posted the first of the semaphores,
-the "bounce" program upper cases the data that has been placed
-in the memory by the "send" program and then posts the second semaphore
-to tell the "send" program that it may now access the shared memory.
-.PP
-.in +4n
-.\" SRC BEGIN (pshm_ucase_bounce.c)
-.EX
-/* pshm_ucase_bounce.c
-\&
- Licensed under GNU General Public License v2 or later.
-*/
-#include <ctype.h>
-\&
-#include "pshm_ucase.h"
-\&
-int
-main(int argc, char *argv[])
-{
- int fd;
- char *shmpath;
- struct shmbuf *shmp;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s /shm\-path\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- shmpath = argv[1];
-\&
- /* Create shared memory object and set its size to the size
- of our structure. */
-\&
- fd = shm_open(shmpath, O_CREAT | O_EXCL | O_RDWR, 0600);
- if (fd == \-1)
- errExit("shm_open");
-\&
- if (ftruncate(fd, sizeof(struct shmbuf)) == \-1)
- errExit("ftruncate");
-\&
- /* Map the object into the caller\[aq]s address space. */
-\&
- shmp = mmap(NULL, sizeof(*shmp), PROT_READ | PROT_WRITE,
- MAP_SHARED, fd, 0);
- if (shmp == MAP_FAILED)
- errExit("mmap");
-\&
- /* Initialize semaphores as process\-shared, with value 0. */
-\&
- if (sem_init(&shmp\->sem1, 1, 0) == \-1)
- errExit("sem_init\-sem1");
- if (sem_init(&shmp\->sem2, 1, 0) == \-1)
- errExit("sem_init\-sem2");
-\&
- /* Wait for \[aq]sem1\[aq] to be posted by peer before touching
- shared memory. */
-\&
- if (sem_wait(&shmp\->sem1) == \-1)
- errExit("sem_wait");
-\&
- /* Convert data in shared memory into upper case. */
-\&
- for (size_t j = 0; j < shmp\->cnt; j++)
- shmp\->buf[j] = toupper((unsigned char) shmp\->buf[j]);
-\&
- /* Post \[aq]sem2\[aq] to tell the peer that it can now
- access the modified data in shared memory. */
-\&
- if (sem_post(&shmp\->sem2) == \-1)
- errExit("sem_post");
-\&
- /* Unlink the shared memory object. Even if the peer process
- is still using the object, this is okay. The object will
- be removed only after all open references are closed. */
-\&
- shm_unlink(shmpath);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.in
-.\"
-.SS Program source: pshm_ucase_send.c
-The "send" program takes two command-line arguments:
-the pathname of a shared memory object previously created by the "bounce"
-program and a string that is to be copied into that object.
-.PP
-The program opens the shared memory object
-and maps the object into its address space.
-It then copies the data specified in its second argument
-into the shared memory,
-and posts the first semaphore,
-which tells the "bounce" program that it can now access that data.
-After the "bounce" program posts the second semaphore,
-the "send" program prints the contents of the shared memory
-on standard output.
-.PP
-.in +4n
-.\" SRC BEGIN (pshm_ucase_send.c)
-.EX
-/* pshm_ucase_send.c
-\&
- Licensed under GNU General Public License v2 or later.
-*/
-#include <string.h>
-\&
-#include "pshm_ucase.h"
-\&
-int
-main(int argc, char *argv[])
-{
- int fd;
- char *shmpath, *string;
- size_t len;
- struct shmbuf *shmp;
-\&
- if (argc != 3) {
- fprintf(stderr, "Usage: %s /shm\-path string\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- shmpath = argv[1];
- string = argv[2];
- len = strlen(string);
-\&
- if (len > BUF_SIZE) {
- fprintf(stderr, "String is too long\en");
- exit(EXIT_FAILURE);
- }
-\&
- /* Open the existing shared memory object and map it
- into the caller\[aq]s address space. */
-\&
- fd = shm_open(shmpath, O_RDWR, 0);
- if (fd == \-1)
- errExit("shm_open");
-\&
- shmp = mmap(NULL, sizeof(*shmp), PROT_READ | PROT_WRITE,
- MAP_SHARED, fd, 0);
- if (shmp == MAP_FAILED)
- errExit("mmap");
-\&
- /* Copy data into the shared memory object. */
-\&
- shmp\->cnt = len;
- memcpy(&shmp\->buf, string, len);
-\&
- /* Tell peer that it can now access shared memory. */
-\&
- if (sem_post(&shmp\->sem1) == \-1)
- errExit("sem_post");
-\&
- /* Wait until peer says that it has finished accessing
- the shared memory. */
-\&
- if (sem_wait(&shmp\->sem2) == \-1)
- errExit("sem_wait");
-\&
- /* Write modified data in shared memory to standard output. */
-\&
- write(STDOUT_FILENO, &shmp\->buf, len);
- write(STDOUT_FILENO, "\en", 1);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.in
-.SH SEE ALSO
-.BR close (2),
-.BR fchmod (2),
-.BR fchown (2),
-.BR fcntl (2),
-.BR fstat (2),
-.BR ftruncate (2),
-.BR memfd_create (2),
-.BR mmap (2),
-.BR open (2),
-.BR umask (2),
-.BR shm_overview (7)
diff --git a/man3/shm_unlink.3 b/man3/shm_unlink.3
deleted file mode 100644
index 74f298654..000000000
--- a/man3/shm_unlink.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/shm_open.3
diff --git a/man3/sigabbrev_np.3 b/man3/sigabbrev_np.3
deleted file mode 100644
index f64f75692..000000000
--- a/man3/sigabbrev_np.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strsignal.3
diff --git a/man3/sigaddset.3 b/man3/sigaddset.3
deleted file mode 100644
index c73078101..000000000
--- a/man3/sigaddset.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sigsetops.3
diff --git a/man3/sigandset.3 b/man3/sigandset.3
deleted file mode 100644
index c73078101..000000000
--- a/man3/sigandset.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sigsetops.3
diff --git a/man3/sigblock.3 b/man3/sigblock.3
deleted file mode 100644
index 5582b115f..000000000
--- a/man3/sigblock.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sigvec.3
diff --git a/man3/sigdelset.3 b/man3/sigdelset.3
deleted file mode 100644
index c73078101..000000000
--- a/man3/sigdelset.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sigsetops.3
diff --git a/man3/sigdescr_np.3 b/man3/sigdescr_np.3
deleted file mode 100644
index f64f75692..000000000
--- a/man3/sigdescr_np.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strsignal.3
diff --git a/man3/sigemptyset.3 b/man3/sigemptyset.3
deleted file mode 100644
index c73078101..000000000
--- a/man3/sigemptyset.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sigsetops.3
diff --git a/man3/sigfillset.3 b/man3/sigfillset.3
deleted file mode 100644
index c73078101..000000000
--- a/man3/sigfillset.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sigsetops.3
diff --git a/man3/siggetmask.3 b/man3/siggetmask.3
deleted file mode 100644
index 5582b115f..000000000
--- a/man3/siggetmask.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sigvec.3
diff --git a/man3/sighold.3 b/man3/sighold.3
deleted file mode 100644
index c4e1d3caa..000000000
--- a/man3/sighold.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sigset.3
diff --git a/man3/sigignore.3 b/man3/sigignore.3
deleted file mode 100644
index c4e1d3caa..000000000
--- a/man3/sigignore.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sigset.3
diff --git a/man3/siginterrupt.3 b/man3/siginterrupt.3
deleted file mode 100644
index 1712bb280..000000000
--- a/man3/siginterrupt.3
+++ /dev/null
@@ -1,99 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sun Jul 25 10:40:51 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Sun Apr 14 16:20:34 1996 by Andries Brouwer (aeb@cwi.nl)
-.TH siginterrupt 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-siginterrupt \- allow signals to interrupt system calls
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.BI "[[deprecated]] int siginterrupt(int " sig ", int " flag );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR siginterrupt ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
- || /* glibc <= 2.19: */ _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR siginterrupt ()
-function changes the restart behavior when
-a system call is interrupted by the signal \fIsig\fP.
-If the \fIflag\fP
-argument is false (0), then system calls will be restarted if interrupted
-by the specified signal \fIsig\fP.
-This is the default behavior in Linux.
-.PP
-If the \fIflag\fP argument is true (1) and no data has been transferred,
-then a system call interrupted by the signal \fIsig\fP will return \-1
-and \fIerrno\fP will be set to
-.BR EINTR .
-.PP
-If the \fIflag\fP argument is true (1) and data transfer has started,
-then the system call will be interrupted and will return the actual
-amount of data transferred.
-.SH RETURN VALUE
-The
-.BR siginterrupt ()
-function returns 0 on success.
-It returns \-1 if the
-signal number
-.I sig
-is invalid, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-The specified signal number is invalid.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR siginterrupt ()
-T} Thread safety T{
-MT-Unsafe const:sigintr
-T}
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-4.3BSD, POSIX.1-2001.
-Obsolete in POSIX.1-2008,
-recommending the use of
-.BR sigaction (2)
-with the
-.B SA_RESTART
-flag instead.
-.SH SEE ALSO
-.BR signal (2)
diff --git a/man3/sigisemptyset.3 b/man3/sigisemptyset.3
deleted file mode 100644
index c73078101..000000000
--- a/man3/sigisemptyset.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sigsetops.3
diff --git a/man3/sigismember.3 b/man3/sigismember.3
deleted file mode 100644
index c73078101..000000000
--- a/man3/sigismember.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sigsetops.3
diff --git a/man3/siglongjmp.3 b/man3/siglongjmp.3
deleted file mode 100644
index 7cf497fc3..000000000
--- a/man3/siglongjmp.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/setjmp.3
diff --git a/man3/sigmask.3 b/man3/sigmask.3
deleted file mode 100644
index 5582b115f..000000000
--- a/man3/sigmask.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sigvec.3
diff --git a/man3/signbit.3 b/man3/signbit.3
deleted file mode 100644
index 4135da199..000000000
--- a/man3/signbit.3
+++ /dev/null
@@ -1,82 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" Based on glibc infopages, copyright Free Software Foundation
-.\"
-.TH signbit 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-signbit \- test sign of a real floating-point number
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B "#include <math.h>"
-.PP
-.BI "int signbit(" x ");"
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR signbit ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-.BR signbit ()
-is a generic macro which can work on all real floating-point types.
-It returns a nonzero value if the value of
-.I x
-has its sign bit set.
-.PP
-This is not the same as
-.IR "x < 0.0" ,
-because IEEE 754 floating point allows zero to be signed.
-The comparison
-.I \-0.0\~<\~0.0
-is false, but
-.I signbit(\-0.0)
-will return a nonzero value.
-.PP
-NaNs and infinities have a sign bit.
-.SH RETURN VALUE
-The
-.BR signbit ()
-macro returns nonzero if the sign of
-.I x
-is negative; otherwise it returns zero.
-.SH ERRORS
-No errors occur.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR signbit ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.PP
-This function is defined in IEC 559 (and the appendix with
-recommended functions in IEEE 754/IEEE 854).
-.SH SEE ALSO
-.BR copysign (3)
diff --git a/man3/signgam.3 b/man3/signgam.3
deleted file mode 100644
index be0ed98e0..000000000
--- a/man3/signgam.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/lgamma.3
diff --git a/man3/significand.3 b/man3/significand.3
deleted file mode 100644
index 164869851..000000000
--- a/man3/significand.3
+++ /dev/null
@@ -1,80 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" heavily based on glibc infopages, copyright Free Software Foundation
-.\"
-.TH significand 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-significand, significandf, significandl \-
-get mantissa of floating-point number
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double significand(double " x );
-.BI "float significandf(float " x );
-.BI "long double significandl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR significand (),
-.BR significandf (),
-.BR significandl ():
-.nf
- /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the mantissa of
-.I x
-scaled to the range [1,2).
-They are equivalent to
-.PP
-.in +4n
-.EX
-scalb(x, (double) \-ilogb(x))
-.EE
-.in
-.PP
-This function exists mainly for use in certain standardized tests
-for IEEE 754 conformance.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR significand (),
-.BR significandf (),
-.BR significandl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.TP
-.BR significand ()
-BSD.
-.SH HISTORY
-.TP
-.BR significand ()
-BSD.
-.SH SEE ALSO
-.BR ilogb (3),
-.BR scalb (3)
diff --git a/man3/significandf.3 b/man3/significandf.3
deleted file mode 100644
index 4ae39f580..000000000
--- a/man3/significandf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/significand.3
diff --git a/man3/significandl.3 b/man3/significandl.3
deleted file mode 100644
index 4ae39f580..000000000
--- a/man3/significandl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/significand.3
diff --git a/man3/sigorset.3 b/man3/sigorset.3
deleted file mode 100644
index c73078101..000000000
--- a/man3/sigorset.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sigsetops.3
diff --git a/man3/sigpause.3 b/man3/sigpause.3
deleted file mode 100644
index bbe743462..000000000
--- a/man3/sigpause.3
+++ /dev/null
@@ -1,128 +0,0 @@
-'\" t
-.\" Copyright (C) 2004 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sigpause 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sigpause \- atomically release blocked signals and wait for interrupt
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.BI "[[deprecated]] int sigpause(int " sigmask "); /* BSD (but see NOTES) */"
-.PP
-.BI "[[deprecated]] int sigpause(int " sig "); /* POSIX.1 / SysV / UNIX 95 */"
-.fi
-.SH DESCRIPTION
-Don't use this function.
-Use
-.BR sigsuspend (2)
-instead.
-.PP
-The function
-.BR sigpause ()
-is designed to wait for some signal.
-It changes the process's signal mask (set of blocked signals),
-and then waits for a signal to arrive.
-Upon arrival of a signal, the original signal mask is restored.
-.SH RETURN VALUE
-If
-.BR sigpause ()
-returns, it was interrupted by a signal and the return value is \-1
-with
-.I errno
-set to
-.BR EINTR .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sigpause ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.\" FIXME: The marking is different from that in the glibc manual,
-.\" marking in glibc manual is more detailed:
-.\"
-.\" sigpause: MT-Unsafe race:sigprocmask/!bsd!linux
-.\"
-.\" glibc manual says /!linux!bsd indicate the preceding marker only applies
-.\" when the underlying kernel is neither Linux nor a BSD kernel.
-.\" So, it is safe in Linux kernel.
-.SH VERSIONS
-On Linux, this routine is a system call only on the Sparc (sparc64)
-architecture.
-.PP
-.\" Libc4 and libc5 know only about the BSD version.
-.\"
-glibc uses the BSD version if the
-.B _BSD_SOURCE
-feature test macro is defined and none of
-.BR _POSIX_SOURCE ,
-.BR _POSIX_C_SOURCE ,
-.BR _XOPEN_SOURCE ,
-.BR _GNU_SOURCE ,
-or
-.B _SVID_SOURCE
-is defined.
-Otherwise, the System V version is used,
-and feature test macros must be defined as follows to obtain the declaration:
-.IP \[bu] 3
-Since glibc 2.26:
-_XOPEN_SOURCE >= 500
-.\" || (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED)
-.IP \[bu]
-glibc 2.25 and earlier: _XOPEN_SOURCE
-.PP
-Since glibc 2.19, only the System V version is exposed by
-.IR <signal.h> ;
-applications that formerly used the BSD
-.BR sigpause ()
-should be amended to use
-.BR sigsuspend (2).
-.\"
-.\" For the BSD version, one usually uses a zero
-.\" .I sigmask
-.\" to indicate that no signals are to be blocked.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-Obsoleted in POSIX.1-2008.
-.PP
-The classical BSD version of this function appeared in 4.2BSD.
-It sets the process's signal mask to
-.IR sigmask .
-UNIX 95 standardized the incompatible System V version of
-this function, which removes only the specified signal
-.I sig
-from the process's signal mask.
-.\" __xpg_sigpause: UNIX 95, spec 1170, SVID, SVr4, XPG
-The unfortunate situation with two incompatible functions with the
-same name was solved by the
-.BR \%sigsuspend (2)
-function, that takes a
-.I "sigset_t\ *"
-argument (instead of an
-.IR int ).
-.SH SEE ALSO
-.BR kill (2),
-.BR sigaction (2),
-.BR sigprocmask (2),
-.BR sigsuspend (2),
-.BR sigblock (3),
-.BR sigvec (3),
-.BR feature_test_macros (7)
diff --git a/man3/sigqueue.3 b/man3/sigqueue.3
deleted file mode 100644
index c2bff7aa3..000000000
--- a/man3/sigqueue.3
+++ /dev/null
@@ -1,165 +0,0 @@
-'\" t
-.\" Copyright (c) 2002 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" added note on self-signaling, aeb, 2002-06-07
-.\" added note on CAP_KILL, mtk, 2004-06-16
-.\"
-.TH sigqueue 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sigqueue \- queue a signal and data to a process
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.BI "int sigqueue(pid_t " pid ", int " sig ", const union sigval " value );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sigqueue ():
-.nf
- _POSIX_C_SOURCE >= 199309L
-.fi
-.SH DESCRIPTION
-.BR sigqueue ()
-sends the signal specified in
-.I sig
-to the process whose PID is given in
-.IR pid .
-The permissions required to send a signal are the same as for
-.BR kill (2).
-As with
-.BR kill (2),
-the null signal (0) can be used to check if a process with a given
-PID exists.
-.PP
-The
-.I value
-argument is used to specify an accompanying item of data (either an integer
-or a pointer value) to be sent with the signal, and has the following type:
-.PP
-.in +4n
-.EX
-union sigval {
- int sival_int;
- void *sival_ptr;
-};
-.EE
-.in
-.PP
-If the receiving process has installed a handler for this signal using the
-.B SA_SIGINFO
-flag to
-.BR sigaction (2),
-then it can obtain this data via the
-.I si_value
-field of the
-.I siginfo_t
-structure passed as the second argument to the handler.
-Furthermore, the
-.I si_code
-field of that structure will be set to
-.BR SI_QUEUE .
-.SH RETURN VALUE
-On success,
-.BR sigqueue ()
-returns 0, indicating that the signal was successfully
-queued to the receiving process.
-Otherwise, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EAGAIN
-The limit of signals which may be queued has been reached.
-(See
-.BR signal (7)
-for further information.)
-.TP
-.B EINVAL
-.I sig
-was invalid.
-.TP
-.B EPERM
-The process does not have permission to send the signal
-to the receiving process.
-For the required permissions, see
-.BR kill (2).
-.TP
-.B ESRCH
-No process has a PID matching
-.IR pid .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sigqueue ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-.SS C library/kernel differences
-On Linux,
-.BR sigqueue ()
-is implemented using the
-.BR rt_sigqueueinfo (2)
-system call.
-The system call differs in its third argument, which is the
-.I siginfo_t
-structure that will be supplied to the receiving process's
-signal handler or returned by the receiving process's
-.BR sigtimedwait (2)
-call.
-Inside the glibc
-.BR sigqueue ()
-wrapper, this argument,
-.IR uinfo ,
-is initialized as follows:
-.PP
-.in +4n
-.EX
-uinfo.si_signo = sig; /* Argument supplied to sigqueue() */
-uinfo.si_code = SI_QUEUE;
-uinfo.si_pid = getpid(); /* Process ID of sender */
-uinfo.si_uid = getuid(); /* Real UID of sender */
-uinfo.si_value = val; /* Argument supplied to sigqueue() */
-.EE
-.in
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-Linux 2.2.
-POSIX.1-2001.
-.SH NOTES
-If this function results in the sending of a signal to the process
-that invoked it, and that signal was not blocked by the calling thread,
-and no other threads were willing to handle this signal (either by
-having it unblocked, or by waiting for it using
-.BR sigwait (3)),
-then at least some signal must be delivered to this thread before this
-function returns.
-.SH SEE ALSO
-.BR kill (2),
-.BR rt_sigqueueinfo (2),
-.BR sigaction (2),
-.BR signal (2),
-.BR pthread_sigqueue (3),
-.BR sigwait (3),
-.BR signal (7)
diff --git a/man3/sigrelse.3 b/man3/sigrelse.3
deleted file mode 100644
index c4e1d3caa..000000000
--- a/man3/sigrelse.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sigset.3
diff --git a/man3/sigset.3 b/man3/sigset.3
deleted file mode 100644
index 9e6637ef9..000000000
--- a/man3/sigset.3
+++ /dev/null
@@ -1,268 +0,0 @@
-'\" t
-.\" Copyright (c) 2005 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sigset 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sigset, sighold, sigrelse, sigignore \- System V signal API
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.B typedef void (*sighandler_t)(int);
-.PP
-.BI "[[deprecated]] sighandler_t sigset(int " sig ", sighandler_t " disp );
-.PP
-.BI "[[deprecated]] int sighold(int " sig );
-.BI "[[deprecated]] int sigrelse(int " sig );
-.BI "[[deprecated]] int sigignore(int " sig );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sigset (),
-.BR sighold (),
-.BR sigrelse (),
-.BR sigignore ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
-.fi
-.SH DESCRIPTION
-These functions are provided in glibc as a compatibility interface
-for programs that make use of the historical System V signal API.
-This API is obsolete: new applications should use the POSIX signal API
-.RB ( sigaction (2),
-.BR sigprocmask (2),
-etc.)
-.PP
-The
-.BR sigset ()
-function modifies the disposition of the signal
-.IR sig .
-The
-.I disp
-argument can be the address of a signal handler function,
-or one of the following constants:
-.TP
-.B SIG_DFL
-Reset the disposition of
-.I sig
-to the default.
-.TP
-.B SIG_IGN
-Ignore
-.IR sig .
-.TP
-.B SIG_HOLD
-Add
-.I sig
-to the process's signal mask, but leave the disposition of
-.I sig
-unchanged.
-.PP
-If
-.I disp
-specifies the address of a signal handler, then
-.I sig
-is added to the process's signal mask during execution of the handler.
-.PP
-If
-.I disp
-was specified as a value other than
-.BR SIG_HOLD ,
-then
-.I sig
-is removed from the process's signal mask.
-.PP
-The dispositions for
-.B SIGKILL
-and
-.B SIGSTOP
-cannot be changed.
-.PP
-The
-.BR sighold ()
-function adds
-.I sig
-to the calling process's signal mask.
-.PP
-The
-.BR sigrelse ()
-function removes
-.I sig
-from the calling process's signal mask.
-.PP
-The
-.BR sigignore ()
-function sets the disposition of
-.I sig
-to
-.BR SIG_IGN .
-.SH RETURN VALUE
-On success,
-.BR sigset ()
-returns
-.B SIG_HOLD
-if
-.I sig
-was blocked before the call,
-or the signal's previous disposition
-if it was not blocked before the call.
-On error,
-.BR sigset ()
-returns \-1, with
-.I errno
-set to indicate the error.
-(But see BUGS below.)
-.PP
-The
-.BR sighold (),
-.BR sigrelse (),
-and
-.BR sigignore ()
-functions return 0 on success; on error, these functions return \-1 and set
-.I errno
-to indicate the error.
-.SH ERRORS
-For
-.BR sigset ()
-see the ERRORS under
-.BR sigaction (2)
-and
-.BR sigprocmask (2).
-.PP
-For
-.BR sighold ()
-and
-.BR sigrelse ()
-see the ERRORS under
-.BR sigprocmask (2).
-.PP
-For
-.BR sigignore (),
-see the errors under
-.BR sigaction (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sigset (),
-.BR sighold (),
-.BR sigrelse (),
-.BR sigignore ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.TP
-.I sighandler_t
-GNU.
-POSIX.1 uses the same type but without a
-.IR typedef .
-.SH HISTORY
-glibc 2.1.
-SVr4, POSIX.1-2001.
-POSIX.1-2008 marks these functions
-as obsolete, recommending the use of
-.BR sigaction (2),
-.BR sigprocmask (2),
-.BR pthread_sigmask (3),
-and
-.BR sigsuspend (2)
-instead.
-.SH NOTES
-The
-.BR sigset ()
-function provides reliable signal handling semantics (as when calling
-.BR sigaction (2)
-with
-.I sa_mask
-equal to 0).
-.PP
-On System V, the
-.BR signal ()
-function provides unreliable semantics (as when calling
-.BR sigaction (2)
-with
-.I sa_mask
-equal to
-.IR "SA_RESETHAND | SA_NODEFER" ).
-On BSD,
-.BR signal ()
-provides reliable semantics.
-POSIX.1-2001 leaves these aspects of
-.BR signal ()
-unspecified.
-See
-.BR signal (2)
-for further details.
-.PP
-In order to wait for a signal,
-BSD and System V both provided a function named
-.BR sigpause (3),
-but this function has a different argument on the two systems.
-See
-.BR sigpause (3)
-for details.
-.SH BUGS
-Before glibc 2.2,
-.BR sigset ()
-did not unblock
-.I sig
-if
-.I disp
-was specified as a value other than
-.BR SIG_HOLD .
-.PP
-Before glibc 2.5,
-.BR sigset ()
-does not correctly return the previous disposition of the signal
-in two cases.
-First, if
-.I disp
-is specified as
-.BR SIG_HOLD ,
-then a successful
-.BR sigset ()
-always returns
-.BR SIG_HOLD .
-Instead, it should return the previous disposition of the signal
-(unless the signal was blocked, in which case
-.B SIG_HOLD
-should be returned).
-Second, if the signal is currently blocked, then
-the return value of a successful
-.BR sigset ()
-should be
-.BR SIG_HOLD .
-Instead, the previous disposition of the signal is returned.
-These problems have been fixed since glibc 2.5.
-.\" See http://sourceware.org/bugzilla/show_bug.cgi?id=1951
-.SH SEE ALSO
-.BR kill (2),
-.BR pause (2),
-.BR sigaction (2),
-.BR signal (2),
-.BR sigprocmask (2),
-.BR raise (3),
-.BR sigpause (3),
-.BR sigvec (3),
-.BR signal (7)
diff --git a/man3/sigsetjmp.3 b/man3/sigsetjmp.3
deleted file mode 100644
index 7cf497fc3..000000000
--- a/man3/sigsetjmp.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/setjmp.3
diff --git a/man3/sigsetmask.3 b/man3/sigsetmask.3
deleted file mode 100644
index 5582b115f..000000000
--- a/man3/sigsetmask.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sigvec.3
diff --git a/man3/sigsetops.3 b/man3/sigsetops.3
deleted file mode 100644
index 089c34256..000000000
--- a/man3/sigsetops.3
+++ /dev/null
@@ -1,193 +0,0 @@
-'\" t
-.\" Copyright (c) 1994 Mike Battersby
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified by aeb, 960721
-.\" 2005-11-21, mtk, added descriptions of sigisemptyset(), sigandset(),
-.\" and sigorset()
-.\" 2007-10-26 mdw added wording that a sigset_t must be initialized
-.\" prior to use
-.\"
-.TH SIGSETOPS 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sigemptyset, sigfillset, sigaddset, sigdelset, sigismember \- POSIX
-signal set operations
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.BI "int sigemptyset(sigset_t *" set );
-.BI "int sigfillset(sigset_t *" set );
-.PP
-.BI "int sigaddset(sigset_t *" set ", int " signum );
-.BI "int sigdelset(sigset_t *" set ", int " signum );
-.PP
-.BI "int sigismember(const sigset_t *" set ", int " signum );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sigemptyset (),
-.BR sigfillset (),
-.BR sigaddset (),
-.BR sigdelset (),
-.BR sigismember ():
-.nf
- _POSIX_C_SOURCE
-.fi
-.SH DESCRIPTION
-These functions allow the manipulation of POSIX signal sets.
-.PP
-.BR sigemptyset ()
-initializes the signal set given by
-.I set
-to empty, with all signals excluded from the set.
-.PP
-.BR sigfillset ()
-initializes
-.I set
-to full, including all signals.
-.PP
-.BR sigaddset ()
-and
-.BR sigdelset ()
-add and delete respectively signal
-.I signum
-from
-.IR set .
-.PP
-.BR sigismember ()
-tests whether
-.I signum
-is a member of
-.IR set .
-.PP
-Objects of type
-.I sigset_t
-must be initialized by a call to either
-.BR sigemptyset ()
-or
-.BR sigfillset ()
-before being passed to the functions
-.BR sigaddset (),
-.BR sigdelset (),
-and
-.BR sigismember ()
-or the additional glibc functions described below
-.RB ( sigisemptyset (),
-.BR sigandset (),
-and
-.BR sigorset ()).
-The results are undefined if this is not done.
-.SH RETURN VALUE
-.BR sigemptyset (),
-.BR sigfillset (),
-.BR sigaddset (),
-and
-.BR sigdelset ()
-return 0 on success and \-1 on error.
-.PP
-.BR sigismember ()
-returns 1 if
-.I signum
-is a member of
-.IR set ,
-0 if
-.I signum
-is not a member, and \-1 on error.
-.PP
-On error, these functions set
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I signum
-is not a valid signal.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sigemptyset (),
-.BR sigfillset (),
-.BR sigaddset (),
-.BR sigdelset (),
-.BR sigismember (),
-.BR sigisemptyset (),
-.BR sigorset (),
-.BR sigandset ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-.SS GNU
-If the
-.B _GNU_SOURCE
-feature test macro is defined, then \fI<signal.h>\fP
-exposes three other functions for manipulating signal
-sets:
-.PP
-.nf
-.BI "int sigisemptyset(const sigset_t *" set );
-.BI "int sigorset(sigset_t *" dest ", const sigset_t *" left ,
-.BI " const sigset_t *" right );
-.BI "int sigandset(sigset_t *" dest ", const sigset_t *" left ,
-.BI " const sigset_t *" right );
-.fi
-.PP
-.BR sigisemptyset ()
-returns 1 if
-.I set
-contains no signals, and 0 otherwise.
-.PP
-.BR sigorset ()
-places the union of the sets
-.I left
-and
-.I right
-in
-.IR dest .
-.BR sigandset ()
-places the intersection of the sets
-.I left
-and
-.I right
-in
-.IR dest .
-Both functions return 0 on success, and \-1 on failure.
-.PP
-These functions are nonstandard (a few other systems provide similar
-functions) and their use should be avoided in portable applications.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-When creating a filled signal set, the glibc
-.BR sigfillset ()
-function does not include the two real-time signals used internally
-by the NPTL threading implementation.
-See
-.BR nptl (7)
-for details.
-.SH SEE ALSO
-.BR sigaction (2),
-.BR sigpending (2),
-.BR sigprocmask (2),
-.BR sigsuspend (2)
diff --git a/man3/sigstack.3 b/man3/sigstack.3
deleted file mode 100644
index bf8596149..000000000
--- a/man3/sigstack.3
+++ /dev/null
@@ -1,3 +0,0 @@
-.so man2/sigaltstack.2
-.\" No new programs should use sigstack(3).
-.\" sigaltstack(2) briefly discusses sigstack(3), so point the user there.
diff --git a/man3/sigvec.3 b/man3/sigvec.3
deleted file mode 100644
index 6865b9a76..000000000
--- a/man3/sigvec.3
+++ /dev/null
@@ -1,285 +0,0 @@
-'\" t
-.\" Copyright (c) 2005 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sigvec 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sigvec, sigblock, sigsetmask, siggetmask, sigmask \- BSD signal API
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.BI "[[deprecated]] int sigvec(int " sig ", const struct sigvec *" vec ,
-.BI " struct sigvec *" ovec );
-.PP
-.BI "[[deprecated]] int sigmask(int " signum );
-.PP
-.BI "[[deprecated]] int sigblock(int " mask );
-.BI "[[deprecated]] int sigsetmask(int " mask );
-.B [[deprecated]] int siggetmask(void);
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-All functions shown above:
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-These functions are provided in glibc as a compatibility interface
-for programs that make use of the historical BSD signal API.
-This API is obsolete: new applications should use the POSIX signal API
-.RB ( sigaction (2),
-.BR sigprocmask (2),
-etc.).
-.PP
-The
-.BR sigvec ()
-function sets and/or gets the disposition of the signal
-.I sig
-(like the POSIX
-.BR sigaction (2)).
-If
-.I vec
-is not NULL, it points to a
-.I sigvec
-structure that defines the new disposition for
-.IR sig .
-If
-.I ovec
-is not NULL, it points to a
-.I sigvec
-structure that is used to return the previous disposition of
-.IR sig .
-To obtain the current disposition of
-.I sig
-without changing it, specify NULL for
-.IR vec ,
-and a non-null pointer for
-.IR ovec .
-.PP
-The dispositions for
-.B SIGKILL
-and
-.B SIGSTOP
-cannot be changed.
-.PP
-The
-.I sigvec
-structure has the following form:
-.PP
-.in +4n
-.EX
-struct sigvec {
- void (*sv_handler)(int); /* Signal disposition */
- int sv_mask; /* Signals to be blocked in handler */
- int sv_flags; /* Flags */
-};
-.EE
-.in
-.PP
-The
-.I sv_handler
-field specifies the disposition of the signal, and is either:
-the address of a signal handler function;
-.BR SIG_DFL ,
-meaning the default disposition applies for the signal; or
-.BR SIG_IGN ,
-meaning that the signal is ignored.
-.PP
-If
-.I sv_handler
-specifies the address of a signal handler, then
-.I sv_mask
-specifies a mask of signals that are to be blocked while
-the handler is executing.
-In addition, the signal for which the handler is invoked is
-also blocked.
-Attempts to block
-.B SIGKILL
-or
-.B SIGSTOP
-are silently ignored.
-.PP
-If
-.I sv_handler
-specifies the address of a signal handler, then the
-.I sv_flags
-field specifies flags controlling what happens when the handler is called.
-This field may contain zero or more of the following flags:
-.TP
-.B SV_INTERRUPT
-If the signal handler interrupts a blocking system call,
-then upon return from the handler the system call is not restarted:
-instead it fails with the error
-.BR EINTR .
-If this flag is not specified, then system calls are restarted
-by default.
-.TP
-.B SV_RESETHAND
-Reset the disposition of the signal to the default
-before calling the signal handler.
-If this flag is not specified, then the handler remains established
-until explicitly removed by a later call to
-.BR sigvec ()
-or until the process performs an
-.BR execve (2).
-.TP
-.B SV_ONSTACK
-Handle the signal on the alternate signal stack
-(historically established under BSD using the obsolete
-.BR sigstack ()
-function; the POSIX replacement is
-.BR sigaltstack (2)).
-.PP
-The
-.BR sigmask ()
-macro constructs and returns a "signal mask" for
-.IR signum .
-For example, we can initialize the
-.I vec.sv_mask
-field given to
-.BR sigvec ()
-using code such as the following:
-.PP
-.in +4n
-.EX
-vec.sv_mask = sigmask(SIGQUIT) | sigmask(SIGABRT);
- /* Block SIGQUIT and SIGABRT during
- handler execution */
-.EE
-.in
-.PP
-The
-.BR sigblock ()
-function adds the signals in
-.I mask
-to the process's signal mask
-(like POSIX
-.IR sigprocmask(SIG_BLOCK) ),
-and returns the process's previous signal mask.
-Attempts to block
-.B SIGKILL
-or
-.B SIGSTOP
-are silently ignored.
-.PP
-The
-.BR sigsetmask ()
-function sets the process's signal mask to the value given in
-.I mask
-(like POSIX
-.IR sigprocmask(SIG_SETMASK) ),
-and returns the process's previous signal mask.
-.PP
-The
-.BR siggetmask ()
-function returns the process's current signal mask.
-This call is equivalent to
-.IR sigblock(0) .
-.SH RETURN VALUE
-The
-.BR sigvec ()
-function returns 0 on success; on error, it returns \-1 and sets
-.I errno
-to indicate the error.
-.PP
-The
-.BR sigblock ()
-and
-.BR sigsetmask ()
-functions return the previous signal mask.
-.PP
-The
-.BR sigmask ()
-macro returns the signal mask for
-.IR signum .
-.SH ERRORS
-See the ERRORS under
-.BR sigaction (2)
-and
-.BR sigprocmask (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sigvec (),
-.BR sigmask (),
-.BR sigblock (),
-.BR sigsetmask (),
-.BR siggetmask ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-.TP
-.BR sigvec ()
-.TQ
-.BR sigblock ()
-.TQ
-.BR sigmask ()
-.TQ
-.BR sigsetmask ()
-4.3BSD.
-.TP
-.BR siggetmask ()
-Unclear origin.
-.TP
-.BR sigvec ()
-Removed in glibc 2.21.
-.SH NOTES
-On 4.3BSD, the
-.BR signal ()
-function provided reliable semantics (as when calling
-.BR sigvec ()
-with
-.I vec.sv_mask
-equal to 0).
-On System V,
-.BR signal ()
-provides unreliable semantics.
-POSIX.1 leaves these aspects of
-.BR signal ()
-unspecified.
-See
-.BR signal (2)
-for further details.
-.PP
-In order to wait for a signal,
-BSD and System V both provided a function named
-.BR sigpause (3),
-but this function has a different argument on the two systems.
-See
-.BR sigpause (3)
-for details.
-.SH SEE ALSO
-.BR kill (2),
-.BR pause (2),
-.BR sigaction (2),
-.BR signal (2),
-.BR sigprocmask (2),
-.BR raise (3),
-.BR sigpause (3),
-.BR sigset (3),
-.BR signal (7)
diff --git a/man3/sigwait.3 b/man3/sigwait.3
deleted file mode 100644
index 3f1df3e27..000000000
--- a/man3/sigwait.3
+++ /dev/null
@@ -1,110 +0,0 @@
-'\" t
-.\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sigwait 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sigwait \- wait for a signal
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <signal.h>
-.PP
-.BI "int sigwait(const sigset_t *restrict " set ", int *restrict " sig );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sigwait ():
-.nf
- Since glibc 2.26:
- _POSIX_C_SOURCE >= 199506L
- glibc 2.25 and earlier:
- _POSIX_C_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR sigwait ()
-function suspends execution of the calling thread until
-one of the signals specified in the signal set
-.I set
-becomes pending.
-The function accepts the signal
-(removes it from the pending list of signals),
-and returns the signal number in
-.IR sig .
-.PP
-The operation of
-.BR sigwait ()
-is the same as
-.BR sigwaitinfo (2),
-except that:
-.IP \[bu] 3
-.BR sigwait ()
-returns only the signal number, rather than a
-.I siginfo_t
-structure describing the signal.
-.IP \[bu]
-The return values of the two functions are different.
-.SH RETURN VALUE
-On success,
-.BR sigwait ()
-returns 0.
-On error, it returns a positive error number (listed in ERRORS).
-.SH ERRORS
-.TP
-.B EINVAL
-.\" Does not occur for glibc.
-.I set
-contains an invalid signal number.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sigwait ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-.BR sigwait ()
-is implemented using
-.BR sigtimedwait (2).
-.PP
-The glibc implementation of
-.BR sigwait ()
-silently ignores attempts to wait for the two real-time signals that
-are used internally by the NPTL threading implementation.
-See
-.BR nptl (7)
-for details.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH EXAMPLES
-See
-.BR pthread_sigmask (3).
-.SH SEE ALSO
-.BR sigaction (2),
-.BR signalfd (2),
-.BR sigpending (2),
-.BR sigsuspend (2),
-.BR sigwaitinfo (2),
-.BR sigsetops (3),
-.BR signal (7)
diff --git a/man3/simpleq.3 b/man3/simpleq.3
deleted file mode 100644
index fbb71f02c..000000000
--- a/man3/simpleq.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stailq.3
diff --git a/man3/sin.3 b/man3/sin.3
deleted file mode 100644
index 3b403ff3b..000000000
--- a/man3/sin.3
+++ /dev/null
@@ -1,125 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH sin 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sin, sinf, sinl \- sine function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double sin(double " x );
-.BI "float sinf(float " x );
-.BI "long double sinl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sinf (),
-.BR sinl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the sine of
-.IR x ,
-where
-.I x
-is
-given in radians.
-.SH RETURN VALUE
-On success, these functions return the sine of
-.IR x .
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is positive infinity or negative infinity,
-a domain error occurs,
-and a NaN is returned.
-.\"
-.\" POSIX.1 allows an optional range error for subnormal x
-.\" glibc 2.8 doesn't do this
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is an infinity
-.I errno
-is set to
-.B EDOM
-(but see BUGS).
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sin (),
-.BR sinf (),
-.BR sinl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH BUGS
-Before glibc 2.10, the glibc implementation did not set
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6781
-.I errno
-to
-.B EDOM
-when a domain error occurred.
-.SH SEE ALSO
-.BR acos (3),
-.BR asin (3),
-.BR atan (3),
-.BR atan2 (3),
-.BR cos (3),
-.BR csin (3),
-.BR sincos (3),
-.BR tan (3)
diff --git a/man3/sincos.3 b/man3/sincos.3
deleted file mode 100644
index 6e05c9f00..000000000
--- a/man3/sincos.3
+++ /dev/null
@@ -1,115 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH sincos 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sincos, sincosf, sincosl \- calculate sin and cos simultaneously
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <math.h>
-.PP
-.BI "void sincos(double " x ", double *" sin ", double *" cos );
-.BI "void sincosf(float " x ", float *" sin ", float *" cos );
-.BI "void sincosl(long double " x ", long double *" sin ", long double *" cos );
-.fi
-.SH DESCRIPTION
-Several applications need sine and cosine of the same angle
-.IR x .
-These functions compute both at the same time, and store the results in
-.I *sin
-and
-.IR *cos .
-Using this function can be more efficient than two separate calls to
-.BR sin (3)
-and
-.BR cos (3).
-.PP
-If
-.I x
-is a NaN,
-a NaN is returned in
-.I *sin
-and
-.IR *cos .
-.PP
-If
-.I x
-is positive infinity or negative infinity,
-a domain error occurs, and
-a NaN is returned in
-.I *sin
-and
-.IR *cos .
-.SH RETURN VALUE
-These functions return
-.IR void .
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is an infinity
-.I errno
-is set to
-.B EDOM
-(but see BUGS).
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sincos (),
-.BR sincosf (),
-.BR sincosl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH HISTORY
-glibc 2.1.
-.SH NOTES
-To see the performance advantage of
-.BR sincos (),
-it may be necessary to disable
-.BR gcc (1)
-built-in optimizations, using flags such as:
-.PP
-.in +4n
-.EX
-cc \-O \-lm \-fno\-builtin prog.c
-.EE
-.in
-.SH BUGS
-Before glibc 2.22, the glibc implementation did not set
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=15467
-.I errno
-to
-.B EDOM
-when a domain error occurred.
-.SH SEE ALSO
-.BR cos (3),
-.BR sin (3),
-.BR tan (3)
diff --git a/man3/sincosf.3 b/man3/sincosf.3
deleted file mode 100644
index 9faef654f..000000000
--- a/man3/sincosf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sincos.3
diff --git a/man3/sincosl.3 b/man3/sincosl.3
deleted file mode 100644
index 9faef654f..000000000
--- a/man3/sincosl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sincos.3
diff --git a/man3/sinf.3 b/man3/sinf.3
deleted file mode 100644
index eab51f4a7..000000000
--- a/man3/sinf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sin.3
diff --git a/man3/sinh.3 b/man3/sinh.3
deleted file mode 100644
index ebb8bbb7e..000000000
--- a/man3/sinh.3
+++ /dev/null
@@ -1,132 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 1996-06-08 by aeb
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH sinh 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sinh, sinhf, sinhl \- hyperbolic sine function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double sinh(double " x );
-.BI "float sinhf(float " x );
-.BI "long double sinhl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sinhf (),
-.BR sinhl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the hyperbolic sine of
-.IR x ,
-which
-is defined mathematically as:
-.PP
-.nf
- sinh(x) = (exp(x) \- exp(\-x)) / 2
-.fi
-.SH RETURN VALUE
-On success, these functions return the hyperbolic sine of
-.IR x .
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is +0 (\-0), +0 (\-0) is returned.
-.PP
-If
-.I x
-is positive infinity (negative infinity),
-positive infinity (negative infinity) is returned.
-.PP
-If the result overflows,
-a range error occurs,
-and the functions return
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-or
-.BR HUGE_VALL ,
-respectively, with the same sign as
-.IR x .
-.\"
-.\" POSIX.1-2001 documents an optional range error (underflow)
-.\" for subnormal x;
-.\" glibc 2.8 does not do this.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Range error: result overflow
-.I errno
-is set to
-.BR ERANGE .
-An overflow floating-point exception
-.RB ( FE_OVERFLOW )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sinh (),
-.BR sinhf (),
-.BR sinhl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH SEE ALSO
-.BR acosh (3),
-.BR asinh (3),
-.BR atanh (3),
-.BR cosh (3),
-.BR csinh (3),
-.BR tanh (3)
diff --git a/man3/sinhf.3 b/man3/sinhf.3
deleted file mode 100644
index dc3ce9415..000000000
--- a/man3/sinhf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sinh.3
diff --git a/man3/sinhl.3 b/man3/sinhl.3
deleted file mode 100644
index dc3ce9415..000000000
--- a/man3/sinhl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sinh.3
diff --git a/man3/sinl.3 b/man3/sinl.3
deleted file mode 100644
index eab51f4a7..000000000
--- a/man3/sinl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sin.3
diff --git a/man3/sleep.3 b/man3/sleep.3
deleted file mode 100644
index 4d2d4e581..000000000
--- a/man3/sleep.3
+++ /dev/null
@@ -1,82 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 18:16:02 1993 by Rik Faith (faith@cs.unc.edu)
-.TH sleep 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sleep \- sleep for a specified number of seconds
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "unsigned int sleep(unsigned int " "seconds" );
-.fi
-.SH DESCRIPTION
-.BR sleep ()
-causes the calling thread to sleep either until
-the number of real-time seconds specified in
-.I seconds
-have elapsed or until a signal arrives which is not ignored.
-.SH RETURN VALUE
-Zero if the requested time has elapsed,
-or the number of seconds left to sleep,
-if the call was interrupted by a signal handler.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sleep ()
-T} Thread safety MT-Unsafe sig:SIGCHLD/linux
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-On Linux,
-.BR sleep ()
-is implemented via
-.BR nanosleep (2).
-See the
-.BR nanosleep (2)
-man page for a discussion of the clock used.
-.PP
-On some systems,
-.BR sleep ()
-may be implemented using
-.BR alarm (2)
-and
-.B SIGALRM
-(POSIX.1 permits this);
-mixing calls to
-.BR alarm (2)
-and
-.BR sleep ()
-is a bad idea.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH CAVEATS
-Using
-.BR longjmp (3)
-from a signal handler or modifying the handling of
-.B SIGALRM
-while sleeping will cause undefined results.
-.SH SEE ALSO
-.BR sleep (1),
-.BR alarm (2),
-.BR nanosleep (2),
-.BR signal (2),
-.BR signal (7)
diff --git a/man3/slist.3 b/man3/slist.3
deleted file mode 100644
index bbfc8de18..000000000
--- a/man3/slist.3
+++ /dev/null
@@ -1,319 +0,0 @@
-.\" Copyright (c) 1993
-.\" The Regents of the University of California. All rights reserved.
-.\" and Copyright (c) 2020 by Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: BSD-3-Clause
-.\"
-.\"
-.TH SLIST 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-SLIST_EMPTY,
-SLIST_ENTRY,
-SLIST_FIRST,
-SLIST_FOREACH,
-.\"SLIST_FOREACH_FROM,
-.\"SLIST_FOREACH_FROM_SAFE,
-.\"SLIST_FOREACH_SAFE,
-SLIST_HEAD,
-SLIST_HEAD_INITIALIZER,
-SLIST_INIT,
-SLIST_INSERT_AFTER,
-SLIST_INSERT_HEAD,
-SLIST_NEXT,
-SLIST_REMOVE,
-.\"SLIST_REMOVE_AFTER,
-SLIST_REMOVE_HEAD
-.\"SLIST_SWAP
-\- implementation of a singly linked list
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/queue.h>
-.PP
-.B SLIST_ENTRY(TYPE);
-.PP
-.B SLIST_HEAD(HEADNAME, TYPE);
-.BI "SLIST_HEAD SLIST_HEAD_INITIALIZER(SLIST_HEAD " head );
-.BI "void SLIST_INIT(SLIST_HEAD *" head );
-.PP
-.BI "int SLIST_EMPTY(SLIST_HEAD *" head );
-.PP
-.BI "void SLIST_INSERT_HEAD(SLIST_HEAD *" head ,
-.BI " struct TYPE *" elm ", SLIST_ENTRY " NAME );
-.BI "void SLIST_INSERT_AFTER(struct TYPE *" listelm ,
-.BI " struct TYPE *" elm ", SLIST_ENTRY " NAME );
-.PP
-.BI "struct TYPE *SLIST_FIRST(SLIST_HEAD *" head );
-.BI "struct TYPE *SLIST_NEXT(struct TYPE *" elm ", SLIST_ENTRY " NAME );
-.PP
-.BI "SLIST_FOREACH(struct TYPE *" var ", SLIST_HEAD *" head ", SLIST_ENTRY " NAME );
-.\" .BI "SLIST_FOREACH_FROM(struct TYPE *" var ", SLIST_HEAD *" head ,
-.\" .BI " SLIST_ENTRY " NAME );
-.\" .PP
-.\" .BI "SLIST_FOREACH_SAFE(struct TYPE *" var ", SLIST_HEAD *" head ,
-.\" .BI " SLIST_ENTRY " NAME ", struct TYPE *" temp_var );
-.\" .BI "SLIST_FOREACH_FROM_SAFE(struct TYPE *" var ", SLIST_HEAD *" head ,
-.\" .BI " SLIST_ENTRY " NAME ", struct TYPE *" temp_var );
-.PP
-.BI "void SLIST_REMOVE(SLIST_HEAD *" head ", struct TYPE *" elm ,
-.BI " SLIST_ENTRY " NAME );
-.BI "void SLIST_REMOVE_HEAD(SLIST_HEAD *" head ,
-.BI " SLIST_ENTRY " NAME );
-.\" .BI "void SLIST_REMOVE_AFTER(struct TYPE *" elm ,
-.\" .BI " SLIST_ENTRY " NAME );
-.\" .PP
-.\" .BI "void SLIST_SWAP(SLIST_HEAD *" head1 ", SLIST_HEAD *" head2 ,
-.\" .BI " SLIST_ENTRY " NAME );
-.fi
-.SH DESCRIPTION
-These macros define and operate on doubly linked lists.
-.PP
-In the macro definitions,
-.I TYPE
-is the name of a user-defined structure,
-that must contain a field of type
-.IR SLIST_ENTRY ,
-named
-.IR NAME .
-The argument
-.I HEADNAME
-is the name of a user-defined structure
-that must be declared using the macro
-.BR SLIST_HEAD ().
-.SS Creation
-A singly linked list is headed by a structure defined by the
-.BR SLIST_HEAD ()
-macro.
-This structure contains a single pointer to the first element on the list.
-The elements are singly linked
-for minimum space and pointer manipulation overhead
-at the expense of O(n) removal for arbitrary elements.
-New elements can be added to the list
-after an existing element
-or at the head of the list.
-An
-.I SLIST_HEAD
-structure is declared as follows:
-.PP
-.in +4
-.EX
-SLIST_HEAD(HEADNAME, TYPE) head;
-.EE
-.in
-.PP
-where
-.I struct HEADNAME
-is the structure to be defined, and
-.I struct TYPE
-is the type of the elements to be linked into the list.
-A pointer to the head of the list can later be declared as:
-.PP
-.in +4
-.EX
-struct HEADNAME *headp;
-.EE
-.in
-.PP
-(The names
-.I head
-and
-.I headp
-are user selectable.)
-.PP
-.BR SLIST_ENTRY ()
-declares a structure that connects the elements in
-the list.
-.PP
-.BR SLIST_HEAD_INITIALIZER ()
-evaluates to an initializer for the list
-.IR head .
-.PP
-.BR SLIST_INIT ()
-initializes the list referenced by
-.IR head .
-.PP
-.BR SLIST_EMPTY ()
-evaluates to true if there are no elements in the list.
-.SS Insertion
-.BR SLIST_INSERT_HEAD ()
-inserts the new element
-.I elm
-at the head of the list.
-.PP
-.BR SLIST_INSERT_AFTER ()
-inserts the new element
-.I elm
-after the element
-.IR listelm .
-.SS Traversal
-.BR SLIST_FIRST ()
-returns the first element in the list, or NULL if the list is empty.
-.PP
-.BR SLIST_NEXT ()
-returns the next element in the list.
-.PP
-.BR SLIST_FOREACH ()
-traverses the list referenced by
-.I head
-in the forward direction,
-assigning each element in turn to
-.IR var .
-.\" .PP
-.\" .BR SLIST_FOREACH_FROM ()
-.\" behaves identically to
-.\" .BR SLIST_FOREACH ()
-.\" when
-.\" .I var
-.\" is NULL, else it treats
-.\" .I var
-.\" as a previously found SLIST element and begins the loop at
-.\" .I var
-.\" instead of the first element in the SLIST referenced by
-.\" .IR head .
-.\" .Pp
-.\" .BR SLIST_FOREACH_SAFE ()
-.\" traverses the list referenced by
-.\" .I head
-.\" in the forward direction, assigning each element in
-.\" turn to
-.\" .IR var .
-.\" However, unlike
-.\" .BR SLIST_FOREACH ()
-.\" here it is permitted to both remove
-.\" .I var
-.\" as well as free it from within the loop safely without interfering with the
-.\" traversal.
-.\" .PP
-.\" .BR SLIST_FOREACH_FROM_SAFE ()
-.\" behaves identically to
-.\" .BR SLIST_FOREACH_SAFE ()
-.\" when
-.\" .I var
-.\" is NULL, else it treats
-.\" .I var
-.\" as a previously found SLIST element and begins the loop at
-.\" .I var
-.\" instead of the first element in the SLIST referenced by
-.\" .IR head .
-.SS Removal
-.BR SLIST_REMOVE ()
-removes the element
-.I elm
-from the list.
-.PP
-.BR SLIST_REMOVE_HEAD ()
-removes the element
-.I elm
-from the head of the list.
-For optimum efficiency,
-elements being removed from the head of the list
-should explicitly use this macro instead of the generic
-.BR SLIST_REMOVE ().
-.\" .PP
-.\" .BR SLIST_REMOVE_AFTER ()
-.\" removes the element after
-.\" .I elm
-.\" from the list.
-.\" Unlike
-.\" .IR SLIST_REMOVE ,
-.\" this macro does not traverse the entire list.
-.\" .SS Other features
-.\" .BR SLIST_SWAP ()
-.\" swaps the contents of
-.\" .I head1
-.\" and
-.\" .IR head2 .
-.SH RETURN VALUE
-.BR SLIST_EMPTY ()
-returns nonzero if the list is empty,
-and zero if the list contains at least one entry.
-.PP
-.BR SLIST_FIRST (),
-and
-.BR SLIST_NEXT ()
-return a pointer to the first or next
-.I TYPE
-structure, respectively.
-.PP
-.BR SLIST_HEAD_INITIALIZER ()
-returns an initializer that can be assigned to the list
-.IR head .
-.SH STANDARDS
-BSD.
-.SH HISTORY
-4.4BSD.
-.SH BUGS
-.BR SLIST_FOREACH ()
-doesn't allow
-.I var
-to be removed or freed within the loop,
-as it would interfere with the traversal.
-.BR SLIST_FOREACH_SAFE (),
-which is present on the BSDs but is not present in glibc,
-fixes this limitation by allowing
-.I var
-to safely be removed from the list and freed from within the loop
-without interfering with the traversal.
-.SH EXAMPLES
-.\" SRC BEGIN (slist.c)
-.EX
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/queue.h>
-\&
-struct entry {
- int data;
- SLIST_ENTRY(entry) entries; /* Singly linked list */
-};
-\&
-SLIST_HEAD(slisthead, entry);
-\&
-int
-main(void)
-{
- struct entry *n1, *n2, *n3, *np;
- struct slisthead head; /* Singly linked list
- head */
-\&
- SLIST_INIT(&head); /* Initialize the queue */
-\&
- n1 = malloc(sizeof(struct entry)); /* Insert at the head */
- SLIST_INSERT_HEAD(&head, n1, entries);
-\&
- n2 = malloc(sizeof(struct entry)); /* Insert after */
- SLIST_INSERT_AFTER(n1, n2, entries);
-\&
- SLIST_REMOVE(&head, n2, entry, entries);/* Deletion */
- free(n2);
-\&
- n3 = SLIST_FIRST(&head);
- SLIST_REMOVE_HEAD(&head, entries); /* Deletion from the head */
- free(n3);
-\&
- for (unsigned int i = 0; i < 5; i++) {
- n1 = malloc(sizeof(struct entry));
- SLIST_INSERT_HEAD(&head, n1, entries);
- n1\->data = i;
- }
-\&
- /* Forward traversal */
- SLIST_FOREACH(np, &head, entries)
- printf("%i\en", np\->data);
-\&
- while (!SLIST_EMPTY(&head)) { /* List deletion */
- n1 = SLIST_FIRST(&head);
- SLIST_REMOVE_HEAD(&head, entries);
- free(n1);
- }
- SLIST_INIT(&head);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR insque (3),
-.BR queue (7)
diff --git a/man3/snprintf.3 b/man3/snprintf.3
deleted file mode 100644
index 975530d90..000000000
--- a/man3/snprintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/printf.3
diff --git a/man3/sockatmark.3 b/man3/sockatmark.3
deleted file mode 100644
index b5627052d..000000000
--- a/man3/sockatmark.3
+++ /dev/null
@@ -1,141 +0,0 @@
-'\" t
-.\" Copyright (c) 2006, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sockatmark 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sockatmark \- determine whether socket is at out-of-band mark
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.PP
-.BI "int sockatmark(int " sockfd );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sockatmark ():
-.nf
- _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-.BR sockatmark ()
-returns a value indicating whether or not the socket referred
-to by the file descriptor
-.I sockfd
-is at the out-of-band mark.
-If the socket is at the mark, then 1 is returned;
-if the socket is not at the mark, 0 is returned.
-This function does not remove the out-of-band mark.
-.SH RETURN VALUE
-A successful call to
-.BR sockatmark ()
-returns 1 if the socket is at the out-of-band mark, or 0 if it is not.
-On error, \-1 is returned and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I sockfd
-is not a valid file descriptor.
-.TP
-.B EINVAL
-.\" POSIX.1 says ENOTTY for this case
-.I sockfd
-is not a file descriptor to which
-.BR sockatmark ()
-can be applied.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sockatmark ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.2.4.
-POSIX.1-2001.
-.SH NOTES
-If
-.BR sockatmark ()
-returns 1, then the out-of-band data can be read using the
-.B MSG_OOB
-flag of
-.BR recv (2).
-.PP
-Out-of-band data is supported only on some stream socket protocols.
-.PP
-.BR sockatmark ()
-can safely be called from a handler for the
-.B SIGURG
-signal.
-.PP
-.BR sockatmark ()
-is implemented using the
-.B SIOCATMARK
-.BR ioctl (2)
-operation.
-.SH BUGS
-Prior to glibc 2.4,
-.BR sockatmark ()
-did not work.
-.SH EXAMPLES
-The following code can be used after receipt of a
-.B SIGURG
-signal to read (and discard) all data up to the mark,
-and then read the byte of data at the mark:
-.PP
-.EX
- char buf[BUF_LEN];
- char oobdata;
- int atmark, s;
-\&
- for (;;) {
- atmark = sockatmark(sockfd);
- if (atmark == \-1) {
- perror("sockatmark");
- break;
- }
-\&
- if (atmark)
- break;
-\&
- s = read(sockfd, buf, BUF_LEN);
- if (s == \-1)
- perror("read");
- if (s <= 0)
- break;
- }
-\&
- if (atmark == 1) {
- if (recv(sockfd, &oobdata, 1, MSG_OOB) == \-1) {
- perror("recv");
- ...
- }
- }
-.EE
-.SH SEE ALSO
-.BR fcntl (2),
-.BR recv (2),
-.BR send (2),
-.BR tcp (7)
diff --git a/man3/sprintf.3 b/man3/sprintf.3
deleted file mode 100644
index 975530d90..000000000
--- a/man3/sprintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/printf.3
diff --git a/man3/sqrt.3 b/man3/sqrt.3
deleted file mode 100644
index 010d30561..000000000
--- a/man3/sqrt.3
+++ /dev/null
@@ -1,112 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.TH sqrt 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sqrt, sqrtf, sqrtl \- square root function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double sqrt(double " x );
-.BI "float sqrtf(float " x );
-.BI "long double sqrtl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sqrtf (),
-.BR sqrtl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the nonnegative square root of
-.IR x .
-.SH RETURN VALUE
-On success, these functions return the square root of
-.IR x .
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is +0 (\-0), +0 (\-0) is returned.
-.PP
-If
-.I x
-is positive infinity, positive infinity is returned.
-.PP
-If
-.I x
-is less than \-0,
-a domain error occurs,
-and a NaN is returned.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP less than \-0
-.I errno
-is set to
-.BR EDOM .
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sqrt (),
-.BR sqrtf (),
-.BR sqrtl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH SEE ALSO
-.BR cbrt (3),
-.BR csqrt (3),
-.BR hypot (3)
diff --git a/man3/sqrtf.3 b/man3/sqrtf.3
deleted file mode 100644
index 81258bbc0..000000000
--- a/man3/sqrtf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sqrt.3
diff --git a/man3/sqrtl.3 b/man3/sqrtl.3
deleted file mode 100644
index 81258bbc0..000000000
--- a/man3/sqrtl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sqrt.3
diff --git a/man3/srand.3 b/man3/srand.3
deleted file mode 100644
index b007c2fc2..000000000
--- a/man3/srand.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rand.3
diff --git a/man3/srand48.3 b/man3/srand48.3
deleted file mode 100644
index 3133f7d62..000000000
--- a/man3/srand48.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/drand48.3
diff --git a/man3/srand48_r.3 b/man3/srand48_r.3
deleted file mode 100644
index 81e9d8ef7..000000000
--- a/man3/srand48_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/drand48_r.3
diff --git a/man3/srandom.3 b/man3/srandom.3
deleted file mode 100644
index 6e34104e2..000000000
--- a/man3/srandom.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/random.3
diff --git a/man3/srandom_r.3 b/man3/srandom_r.3
deleted file mode 100644
index b01937f4d..000000000
--- a/man3/srandom_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/random_r.3
diff --git a/man3/sscanf.3 b/man3/sscanf.3
deleted file mode 100644
index 922c9e62d..000000000
--- a/man3/sscanf.3
+++ /dev/null
@@ -1,744 +0,0 @@
-'\" t
-.\" Copyright (c) 1990, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" Chris Torek and the American National Standards Committee X3,
-.\" on Information Processing Systems.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)scanf.3 6.14 (Berkeley) 1/8/93
-.\"
-.\" Converted for Linux, Mon Nov 29 15:22:01 1993, faith@cs.unc.edu
-.\" modified to resemble the GNU libio setup used in the Linux libc
-.\" used in versions 4.x (x>4) and 5 Helmut.Geyer@iwr.uni-heidelberg.de
-.\" Modified, aeb, 970121
-.\" 2005-07-14, mtk, added description of %n$ form; various text
-.\" incorporated from the GNU C library documentation ((C) The
-.\" Free Software Foundation); other parts substantially rewritten.
-.\"
-.\" 2008-06-23, mtk
-.\" Add ERRORS section.
-.\" Document the 'a' and 'm' modifiers for dynamic string allocation.
-.\"
-.TH sscanf 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sscanf, vsscanf \- input string format conversion
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "int sscanf(const char *restrict " str ,
-.BI " const char *restrict " format ", ...);"
-.PP
-.B #include <stdarg.h>
-.PP
-.BI "int vsscanf(const char *restrict " str ,
-.BI " const char *restrict " format ", va_list " ap );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR vsscanf ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-The
-.BR sscanf ()
-family of functions scans input according to
-.I format
-as described below.
-This format may contain
-.IR "conversion specifications" ;
-the results from such conversions, if any,
-are stored in the locations pointed to by the
-.I pointer
-arguments that follow
-.IR format .
-Each
-.I pointer
-argument must be of a type that is appropriate for the value returned
-by the corresponding conversion specification.
-.PP
-If the number of conversion specifications in
-.I format
-exceeds the number of
-.I pointer
-arguments, the results are undefined.
-If the number of
-.I pointer
-arguments exceeds the number of conversion specifications, then the excess
-.I pointer
-arguments are evaluated, but are otherwise ignored.
-.PP
-.BR sscanf ()
-These functions
-read their input from the string pointed to by
-.IR str .
-.PP
-The
-.BR vsscanf ()
-function is analogous to
-.BR vsprintf (3).
-.PP
-The
-.I format
-string consists of a sequence of
-.I directives
-which describe how to process the sequence of input characters.
-If processing of a directive fails, no further input is read, and
-.BR sscanf ()
-returns.
-A "failure" can be either of the following:
-.IR "input failure" ,
-meaning that input characters were unavailable, or
-.IR "matching failure" ,
-meaning that the input was inappropriate (see below).
-.PP
-A directive is one of the following:
-.TP
-\[bu]
-A sequence of white-space characters (space, tab, newline, etc.; see
-.BR isspace (3)).
-This directive matches any amount of white space,
-including none, in the input.
-.TP
-\[bu]
-An ordinary character (i.e., one other than white space or \[aq]%\[aq]).
-This character must exactly match the next character of input.
-.TP
-\[bu]
-A conversion specification,
-which commences with a \[aq]%\[aq] (percent) character.
-A sequence of characters from the input is converted according to
-this specification, and the result is placed in the corresponding
-.I pointer
-argument.
-If the next item of input does not match the conversion specification,
-the conversion fails\[em]this is a
-.IR "matching failure" .
-.PP
-Each
-.I conversion specification
-in
-.I format
-begins with either the character \[aq]%\[aq] or the character sequence
-"\fB%\fP\fIn\fP\fB$\fP"
-(see below for the distinction) followed by:
-.TP
-\[bu]
-An optional \[aq]*\[aq] assignment-suppression character:
-.BR sscanf ()
-reads input as directed by the conversion specification,
-but discards the input.
-No corresponding
-.I pointer
-argument is required, and this specification is not
-included in the count of successful assignments returned by
-.BR scanf ().
-.TP
-\[bu]
-For decimal conversions, an optional quote character (\[aq]).
-This specifies that the input number may include thousands'
-separators as defined by the
-.B LC_NUMERIC
-category of the current locale.
-(See
-.BR setlocale (3).)
-The quote character may precede or follow the \[aq]*\[aq]
-assignment-suppression character.
-.TP
-\[bu]
-An optional \[aq]m\[aq] character.
-This is used with string conversions
-.RI ( %s ,
-.IR %c ,
-.IR %[ ),
-and relieves the caller of the
-need to allocate a corresponding buffer to hold the input: instead,
-.BR sscanf ()
-allocates a buffer of sufficient size,
-and assigns the address of this buffer to the corresponding
-.I pointer
-argument, which should be a pointer to a
-.I "char\ *"
-variable (this variable does not need to be initialized before the call).
-The caller should subsequently
-.BR free (3)
-this buffer when it is no longer required.
-.TP
-\[bu]
-An optional decimal integer which specifies the
-.IR "maximum field width" .
-Reading of characters stops either when this maximum is reached or
-when a nonmatching character is found, whichever happens first.
-Most conversions discard initial white space characters (the exceptions
-are noted below),
-and these discarded characters don't count toward the maximum field width.
-String input conversions store a terminating null byte (\[aq]\e0\[aq])
-to mark the end of the input;
-the maximum field width does not include this terminator.
-.TP
-\[bu]
-An optional
-.IR "type modifier character" .
-For example, the
-.B l
-type modifier is used with integer conversions such as
-.B %d
-to specify that the corresponding
-.I pointer
-argument refers to a
-.I "long"
-rather than a pointer to an
-.IR int .
-.TP
-\[bu]
-A
-.I "conversion specifier"
-that specifies the type of input conversion to be performed.
-.PP
-The conversion specifications in
-.I format
-are of two forms, either beginning with \[aq]%\[aq] or beginning with
-"\fB%\fP\fIn\fP\fB$\fP".
-The two forms should not be mixed in the same
-.I format
-string, except that a string containing
-"\fB%\fP\fIn\fP\fB$\fP"
-specifications can include
-.B %%
-and
-.BR %* .
-If
-.I format
-contains \[aq]%\[aq]
-specifications, then these correspond in order with successive
-.I pointer
-arguments.
-In the
-"\fB%\fP\fIn\fP\fB$\fP"
-form (which is specified in POSIX.1-2001, but not C99),
-.I n
-is a decimal integer that specifies that the converted input should
-be placed in the location referred to by the
-.IR n -th
-.I pointer
-argument following
-.IR format .
-.SS Conversions
-The following
-.I "type modifier characters"
-can appear in a conversion specification:
-.TP
-.B h
-Indicates that the conversion will be one of
-\fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP, \fBX\fP, or \fBn\fP
-and the next pointer is a pointer to a
-.I short
-or
-.I unsigned short
-(rather than
-.IR int ).
-.TP
-.B hh
-As for
-.BR h ,
-but the next pointer is a pointer to a
-.I signed char
-or
-.IR "unsigned char" .
-.TP
-.B j
-As for
-.BR h ,
-but the next pointer is a pointer to an
-.I intmax_t
-or a
-.IR uintmax_t .
-This modifier was introduced in C99.
-.TP
-.B l
-Indicates either that the conversion will be one of
-\fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP, \fBX\fP, or \fBn\fP
-and the next pointer is a pointer to a
-.I long
-or
-.I unsigned long
-(rather than
-.IR int ),
-or that the conversion will be one of
-\fBe\fP, \fBf\fP, or \fBg\fP
-and the next pointer is a pointer to
-.I double
-(rather than
-.IR float ).
-If used with
-.B %c
-or
-.BR %s ,
-the corresponding parameter is considered
-as a pointer to a wide character or wide-character string respectively.
-.\" This use of l was introduced in Amendment 1 to ISO C90.
-.TP
-.B ll
-(ell-ell)
-Indicates that the conversion will be one of
-.BR b ,
-.BR d ,
-.BR i ,
-.BR o ,
-.BR u ,
-.BR x ,
-.BR X ,
-or
-.B n
-and the next pointer is a pointer to a
-.I long long
-or
-.I unsigned long long
-(rather than
-.IR int ).
-.TP
-.B L
-Indicates that the conversion will be either
-\fBe\fP, \fBf\fP, or \fBg\fP
-and the next pointer is a pointer to
-.I "long double"
-or
-(as a GNU extension)
-the conversion will be
-\fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, or \fBx\fP
-and the next pointer is a pointer to
-.IR "long long" .
-.\" MTK, Jul 05: The following is no longer true for modern
-.\" ANSI C (i.e., C99):
-.\" (Note that long long is not an
-.\" ANSI C
-.\" type. Any program using this will not be portable to all
-.\" architectures).
-.TP
-.B q
-equivalent to
-.BR L .
-This specifier does not exist in ANSI C.
-.TP
-.B t
-As for
-.BR h ,
-but the next pointer is a pointer to a
-.IR ptrdiff_t .
-This modifier was introduced in C99.
-.TP
-.B z
-As for
-.BR h ,
-but the next pointer is a pointer to a
-.IR size_t .
-This modifier was introduced in C99.
-.PP
-The following
-.I "conversion specifiers"
-are available:
-.TP
-.B %
-Matches a literal \[aq]%\[aq].
-That is,
-.B %\&%
-in the format string matches a
-single input \[aq]%\[aq] character.
-No conversion is done (but initial white space characters are discarded),
-and assignment does not occur.
-.TP
-.B d
-.IR Deprecated .
-Matches an optionally signed decimal integer;
-the next pointer must be a pointer to
-.IR int .
-.\" .TP
-.\" .B D
-.\" Equivalent to
-.\" .IR ld ;
-.\" this exists only for backward compatibility.
-.\" (Note: thus only in libc4
-.\" In libc5 and glibc the
-.\" .B %D
-.\" is silently ignored, causing old programs to fail mysteriously.)
-.TP
-.B i
-.IR Deprecated .
-Matches an optionally signed integer; the next pointer must be a pointer to
-.IR int .
-The integer is read in base 16 if it begins with
-.I 0x
-or
-.IR 0X ,
-in base 8 if it begins with
-.IR 0 ,
-and in base 10 otherwise.
-Only characters that correspond to the base are used.
-.TP
-.B o
-.IR Deprecated .
-Matches an unsigned octal integer; the next pointer must be a pointer to
-.IR "unsigned int" .
-.TP
-.B u
-.IR Deprecated .
-Matches an unsigned decimal integer; the next pointer must be a
-pointer to
-.IR "unsigned int" .
-.TP
-.B x
-.IR Deprecated .
-Matches an unsigned hexadecimal integer
-(that may optionally begin with a prefix of
-.I 0x
-or
-.IR 0X ,
-which is discarded); the next pointer must
-be a pointer to
-.IR "unsigned int" .
-.TP
-.B X
-.IR Deprecated .
-Equivalent to
-.BR x .
-.TP
-.B f
-.IR Deprecated .
-Matches an optionally signed floating-point number; the next pointer must
-be a pointer to
-.IR float .
-.TP
-.B e
-.IR Deprecated .
-Equivalent to
-.BR f .
-.TP
-.B g
-.IR Deprecated .
-Equivalent to
-.BR f .
-.TP
-.B E
-.IR Deprecated .
-Equivalent to
-.BR f .
-.TP
-.B a
-.IR Deprecated .
-(C99) Equivalent to
-.BR f .
-.TP
-.B s
-Matches a sequence of non-white-space characters;
-the next pointer must be a pointer to the initial element of a
-character array that is long enough to hold the input sequence and
-the terminating null byte (\[aq]\e0\[aq]), which is added automatically.
-The input string stops at white space or at the maximum field
-width, whichever occurs first.
-.TP
-.B c
-Matches a sequence of characters whose length is specified by the
-.I maximum field width
-(default 1); the next pointer must be a pointer to
-.IR char ,
-and there must be enough room for all the characters
-(no terminating null byte is added).
-The usual skip of leading white space is suppressed.
-To skip white space first, use an explicit space in the format.
-.TP
-.B \&[
-Matches a nonempty sequence of characters from the specified set of
-accepted characters; the next pointer must be a pointer to
-.IR char ,
-and there must be enough room for all the characters in the string, plus a
-terminating null byte.
-The usual skip of leading white space is suppressed.
-The string is to be made up of characters in (or not in) a particular set;
-the set is defined by the characters between the open bracket
-.B [
-character and a close bracket
-.B ]
-character.
-The set
-.I excludes
-those characters if the first character after the open bracket is a
-circumflex
-.RB ( \[ha] ).
-To include a close bracket in the set, make it the first character after
-the open bracket or the circumflex; any other position will end the set.
-The hyphen character
-.B \-
-is also special; when placed between two other characters, it adds all
-intervening characters to the set.
-To include a hyphen, make it the last
-character before the final close bracket.
-For instance,
-.B [\[ha]]0\-9\-]
-means
-the set "everything except close bracket, zero through nine, and hyphen".
-The string ends with the appearance of a character not in the (or, with a
-circumflex, in) set or when the field width runs out.
-.TP
-.B p
-Matches a pointer value (as printed by
-.B %p
-in
-.BR printf (3));
-the next pointer must be a pointer to a pointer to
-.IR void .
-.TP
-.B n
-Nothing is expected; instead, the number of characters consumed thus far
-from the input is stored through the next pointer, which must be a pointer
-to
-.IR int ,
-or variant whose size matches the (optionally)
-supplied integer length modifier.
-This is
-.I not
-a conversion and does
-.I not
-increase the count returned by the function.
-The assignment can be suppressed with the
-.B *
-assignment-suppression character, but the effect on the
-return value is undefined.
-Therefore
-.B %*n
-conversions should not be used.
-.SH RETURN VALUE
-On success, these functions return the number of input items
-successfully matched and assigned;
-this can be fewer than provided for,
-or even zero, in the event of an early matching failure.
-.PP
-The value
-.B EOF
-is returned if the end of input is reached before either the first
-successful conversion or a matching failure occurs.
-.SH ERRORS
-.TP
-.B EILSEQ
-Input byte sequence does not form a valid character.
-.TP
-.B EINVAL
-Not enough arguments; or
-.I format
-is NULL.
-.TP
-.B ENOMEM
-Out of memory.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sscanf (),
-.BR vsscanf ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C89, POSIX.1-2001.
-.PP
-The
-.B q
-specifier is the 4.4BSD notation for
-.IR "long long" ,
-while
-.B ll
-or the usage of
-.B L
-in integer conversions is the GNU notation.
-.PP
-The Linux version of these functions is based on the
-.I GNU
-.I libio
-library.
-Take a look at the
-.I info
-documentation of
-.I GNU
-.I libc (glibc-1.08)
-for a more concise description.
-.SH NOTES
-.SS The 'a' assignment-allocation modifier
-Originally, the GNU C library supported dynamic allocation for string inputs
-(as a nonstandard extension) via the
-.B a
-character.
-(This feature is present at least as far back as glibc 2.0.)
-Thus, one could write the following to have
-.BR sscanf ()
-allocate a buffer for a string,
-with a pointer to that buffer being returned in
-.IR *buf :
-.PP
-.in +4n
-.EX
-char *buf;
-sscanf(str, "%as", &buf);
-.EE
-.in
-.PP
-The use of the letter
-.B a
-for this purpose was problematic, since
-.B a
-is also specified by the ISO C standard as a synonym for
-.B f
-(floating-point input).
-POSIX.1-2008 instead specifies the
-.B m
-modifier for assignment allocation (as documented in DESCRIPTION, above).
-.PP
-Note that the
-.B a
-modifier is not available if the program is compiled with
-.I gcc\~\-std=c99
-or
-.I gcc\~\-D_ISOC99_SOURCE
-(unless
-.B _GNU_SOURCE
-is also specified), in which case the
-.B a
-is interpreted as a specifier for floating-point numbers (see above).
-.PP
-Support for the
-.B m
-modifier was added to glibc 2.7,
-and new programs should use that modifier instead of
-.BR a .
-.PP
-As well as being standardized by POSIX, the
-.B m
-modifier has the following further advantages over
-the use of
-.BR a :
-.IP \[bu] 3
-It may also be applied to
-.B %c
-conversion specifiers (e.g.,
-.BR %3mc ).
-.IP \[bu]
-It avoids ambiguity with respect to the
-.B %a
-floating-point conversion specifier (and is unaffected by
-.I gcc\~\-std=c99
-etc.).
-.SH BUGS
-.SS Numeric conversion specifiers
-Use of the numeric conversion specifiers produces Undefined Behavior
-for invalid input.
-See
-.UR https://port70.net/\:%7Ensz/\:c/\:c11/\:n1570.html\:#7.21.6.2p10
-C11 7.21.6.2/10
-.UE .
-This is a bug in the ISO C standard,
-and not an inherent design issue with the API.
-However,
-current implementations are not safe from that bug,
-so it is not recommended to use them.
-Instead,
-programs should use functions such as
-.BR strtol (3)
-to parse numeric input.
-This manual page deprecates use of the numeric conversion specifiers
-until they are fixed by ISO C.
-.SS Nonstandard modifiers
-These functions are fully C99 conformant, but provide the
-additional modifiers
-.B q
-and
-.B a
-as well as an additional behavior of the
-.B L
-and
-.B ll
-modifiers.
-The latter may be considered to be a bug, as it changes the
-behavior of modifiers defined in C99.
-.PP
-Some combinations of the type modifiers and conversion
-specifiers defined by C99 do not make sense
-(e.g.,
-.BR "%Ld" ).
-While they may have a well-defined behavior on Linux, this need not
-to be so on other architectures.
-Therefore it usually is better to use
-modifiers that are not defined by C99 at all, that is, use
-.B q
-instead of
-.B L
-in combination with
-\fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP, and \fBX\fP
-conversions or
-.BR ll .
-.PP
-The usage of
-.B q
-is not the same as on 4.4BSD,
-as it may be used in float conversions equivalently to
-.BR L .
-.SH EXAMPLES
-To use the dynamic allocation conversion specifier, specify
-.B m
-as a length modifier (thus
-.B %ms
-or
-\fB%m[\fP\fIrange\fP\fB]\fP).
-The caller must
-.BR free (3)
-the returned string, as in the following example:
-.PP
-.in +4n
-.EX
-char *p;
-int n;
-\&
-errno = 0;
-n = sscanf(str, "%m[a\-z]", &p);
-if (n == 1) {
- printf("read: %s\en", p);
- free(p);
-} else if (errno != 0) {
- perror("sscanf");
-} else {
- fprintf(stderr, "No matching characters\en");
-}
-.EE
-.in
-.PP
-As shown in the above example, it is necessary to call
-.BR free (3)
-only if the
-.BR sscanf ()
-call successfully read a string.
-.SH SEE ALSO
-.BR getc (3),
-.BR printf (3),
-.BR setlocale (3),
-.BR strtod (3),
-.BR strtol (3),
-.BR strtoul (3)
diff --git a/man3/ssignal.3 b/man3/ssignal.3
deleted file mode 100644
index 047cab287..000000000
--- a/man3/ssignal.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/gsignal.3
diff --git a/man3/stailq.3 b/man3/stailq.3
deleted file mode 100644
index f0584beec..000000000
--- a/man3/stailq.3
+++ /dev/null
@@ -1,377 +0,0 @@
-.\" Copyright (c) 1993
-.\" The Regents of the University of California. All rights reserved.
-.\" and Copyright (c) 2020 by Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: BSD-3-Clause
-.\"
-.\"
-.TH STAILQ 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-.\"SIMPLEQ_CONCAT,
-SIMPLEQ_EMPTY,
-SIMPLEQ_ENTRY,
-SIMPLEQ_FIRST,
-SIMPLEQ_FOREACH,
-.\"SIMPLEQ_FOREACH_FROM,
-.\"SIMPLEQ_FOREACH_FROM_SAFE,
-.\"SIMPLEQ_FOREACH_SAFE,
-SIMPLEQ_HEAD,
-SIMPLEQ_HEAD_INITIALIZER,
-SIMPLEQ_INIT,
-SIMPLEQ_INSERT_AFTER,
-SIMPLEQ_INSERT_HEAD,
-SIMPLEQ_INSERT_TAIL,
-.\"SIMPLEQ_LAST,
-SIMPLEQ_NEXT,
-SIMPLEQ_REMOVE,
-.\"SIMPLEQ_REMOVE_AFTER,
-SIMPLEQ_REMOVE_HEAD,
-.\"SIMPLEQ_SWAP,
-STAILQ_CONCAT,
-STAILQ_EMPTY,
-STAILQ_ENTRY,
-STAILQ_FIRST,
-STAILQ_FOREACH,
-.\"STAILQ_FOREACH_FROM,
-.\"STAILQ_FOREACH_FROM_SAFE,
-.\"STAILQ_FOREACH_SAFE,
-STAILQ_HEAD,
-STAILQ_HEAD_INITIALIZER,
-STAILQ_INIT,
-STAILQ_INSERT_AFTER,
-STAILQ_INSERT_HEAD,
-STAILQ_INSERT_TAIL,
-.\"STAILQ_LAST,
-STAILQ_NEXT,
-STAILQ_REMOVE,
-.\"STAILQ_REMOVE_AFTER,
-STAILQ_REMOVE_HEAD,
-.\"STAILQ_SWAP
-\- implementation of a singly linked tail queue
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/queue.h>
-.PP
-.B STAILQ_ENTRY(TYPE);
-.PP
-.B STAILQ_HEAD(HEADNAME, TYPE);
-.BI "STAILQ_HEAD STAILQ_HEAD_INITIALIZER(STAILQ_HEAD " head );
-.BI "void STAILQ_INIT(STAILQ_HEAD *" head );
-.PP
-.BI "int STAILQ_EMPTY(STAILQ_HEAD *" head );
-.PP
-.BI "void STAILQ_INSERT_HEAD(STAILQ_HEAD *" head ,
-.BI " struct TYPE *" elm ", STAILQ_ENTRY " NAME );
-.BI "void STAILQ_INSERT_TAIL(STAILQ_HEAD *" head ,
-.BI " struct TYPE *" elm ", STAILQ_ENTRY " NAME );
-.BI "void STAILQ_INSERT_AFTER(STAILQ_HEAD *" head ", struct TYPE *" listelm ,
-.BI " struct TYPE *" elm ", STAILQ_ENTRY " NAME );
-.PP
-.BI "struct TYPE *STAILQ_FIRST(STAILQ_HEAD *" head );
-.\" .BI "struct TYPE *STAILQ_LAST(STAILQ_HEAD *" head ", struct TYPE *" elm ,
-.\" .BI " STAILQ_ENTRY " NAME );
-.BI "struct TYPE *STAILQ_NEXT(struct TYPE *" elm ", STAILQ_ENTRY " NAME );
-.PP
-.BI "STAILQ_FOREACH(struct TYPE *" var ", STAILQ_HEAD *" head ", STAILQ_ENTRY " NAME );
-.\" .BI "STAILQ_FOREACH_FROM(struct TYPE *" var ", STAILQ_HEAD *" head ,
-.\" .BI " STAILQ_ENTRY " NAME );
-.\" .PP
-.\" .BI "STAILQ_FOREACH_SAFE(struct TYPE *" var ", STAILQ_HEAD *" head ,
-.\" .BI " STAILQ_ENTRY " NAME ", struct TYPE *" temp_var );
-.\" .BI "STAILQ_FOREACH_FROM_SAFE(struct TYPE *" var ", STAILQ_HEAD *" head ,
-.\" .BI " STAILQ_ENTRY " NAME ", struct TYPE *" temp_var );
-.PP
-.BI "void STAILQ_REMOVE(STAILQ_HEAD *" head ", struct TYPE *" elm ", TYPE,"
-.BI " STAILQ_ENTRY " NAME );
-.BI "void STAILQ_REMOVE_HEAD(STAILQ_HEAD *" head ,
-.BI " STAILQ_ENTRY " NAME );
-.\" .BI "void STAILQ_REMOVE_AFTER(STAILQ_HEAD *" head ", struct TYPE *" elm ,
-.\" .BI " STAILQ_ENTRY " NAME );
-.PP
-.BI "void STAILQ_CONCAT(STAILQ_HEAD *" head1 ", STAILQ_HEAD *" head2 );
-.\" .BI "void STAILQ_SWAP(STAILQ_HEAD *" head1 ", STAILQ_HEAD *" head2 ,
-.\" .BI " STAILQ_ENTRY " NAME );
-.fi
-.IR Note :
-Identical macros prefixed with SIMPLEQ instead of STAILQ exist; see NOTES.
-.SH DESCRIPTION
-These macros define and operate on singly linked tail queues.
-.PP
-In the macro definitions,
-.I TYPE
-is the name of a user-defined structure,
-that must contain a field of type
-.IR STAILQ_ENTRY ,
-named
-.IR NAME .
-The argument
-.I HEADNAME
-is the name of a user-defined structure that must be declared
-using the macro
-.BR STAILQ_HEAD ().
-.SS Creation
-A singly linked tail queue is headed by a structure defined by the
-.BR STAILQ_HEAD ()
-macro.
-This structure contains a pair of pointers,
-one to the first element in the tail queue and the other to
-the last element in the tail queue.
-The elements are singly linked for minimum space and pointer
-manipulation overhead at the expense of O(n) removal for arbitrary elements.
-New elements can be added to the tail queue after an existing element,
-at the head of the tail queue, or at the end of the tail queue.
-A
-.I STAILQ_HEAD
-structure is declared as follows:
-.PP
-.in +4
-.EX
-STAILQ_HEAD(HEADNAME, TYPE) head;
-.EE
-.in
-.PP
-where
-.I struct HEADNAME
-is the structure to be defined, and
-.I struct TYPE
-is the type of the elements to be linked into the tail queue.
-A pointer to the head of the tail queue can later be declared as:
-.PP
-.in +4
-.EX
-struct HEADNAME *headp;
-.EE
-.in
-.PP
-(The names
-.I head
-and
-.I headp
-are user selectable.)
-.PP
-.BR STAILQ_ENTRY ()
-declares a structure that connects the elements in the tail queue.
-.PP
-.BR STAILQ_HEAD_INITIALIZER ()
-evaluates to an initializer for the tail queue
-.IR head .
-.PP
-.BR STAILQ_INIT ()
-initializes the tail queue referenced by
-.IR head .
-.PP
-.BR STAILQ_EMPTY ()
-evaluates to true if there are no items on the tail queue.
-.SS Insertion
-.BR STAILQ_INSERT_HEAD ()
-inserts the new element
-.I elm
-at the head of the tail queue.
-.PP
-.BR STAILQ_INSERT_TAIL ()
-inserts the new element
-.I elm
-at the end of the tail queue.
-.PP
-.BR STAILQ_INSERT_AFTER ()
-inserts the new element
-.I elm
-after the element
-.IR listelm .
-.SS Traversal
-.BR STAILQ_FIRST ()
-returns the first item on the tail queue or NULL if the tail queue is empty.
-.\" .PP
-.\" .BR STAILQ_LAST ()
-.\" returns the last item on the tail queue.
-.\" If the tail queue is empty the return value is NULL .
-.PP
-.BR STAILQ_NEXT ()
-returns the next item on the tail queue, or NULL this item is the last.
-.PP
-.BR STAILQ_FOREACH ()
-traverses the tail queue referenced by
-.I head
-in the forward direction,
-assigning each element in turn to
-.IR var .
-.\" .PP
-.\" .BR STAILQ_FOREACH_FROM ()
-.\" behaves identically to
-.\" .BR STAILQ_FOREACH ()
-.\" when
-.\" .I var
-.\" is NULL, else it treats
-.\" .I var
-.\" as a previously found STAILQ element and begins the loop at
-.\" .I var
-.\" instead of the first element in the STAILQ referenced by
-.\" .IR head .
-.\" .PP
-.\" .BR STAILQ_FOREACH_SAFE ()
-.\" traverses the tail queue referenced by
-.\" .I head
-.\" in the forward direction, assigning each element
-.\" in turn to
-.\" .IR var .
-.\" However, unlike
-.\" .BR STAILQ_FOREACH ()
-.\" here it is permitted to both remove
-.\" .I var
-.\" as well as free it from within the loop safely without interfering with the
-.\" traversal.
-.\" .PP
-.\" .BR STAILQ_FOREACH_FROM_SAFE ()
-.\" behaves identically to
-.\" .BR STAILQ_FOREACH_SAFE ()
-.\" when
-.\" .I var
-.\" is NULL, else it treats
-.\" .I var
-.\" as a previously found STAILQ element and begins the loop at
-.\" .I var
-.\" instead of the first element in the STAILQ referenced by
-.\" .IR head .
-.SS Removal
-.BR STAILQ_REMOVE ()
-removes the element
-.I elm
-from the tail queue.
-.PP
-.BR STAILQ_REMOVE_HEAD ()
-removes the element at the head of the tail queue.
-For optimum efficiency,
-elements being removed from the head of the tail queue should
-use this macro explicitly rather than the generic
-.BR STAILQ_REMOVE ()
-macro.
-.\" .PP
-.\" .BR STAILQ_REMOVE_AFTER ()
-.\" removes the element after
-.\" .I elm
-.\" from the tail queue.
-.\" Unlike
-.\" .BR STAILQ_REMOVE (),
-.\" this macro does not traverse the entire tail queue.
-.SS Other features
-.BR STAILQ_CONCAT ()
-concatenates the tail queue headed by
-.I head2
-onto the end of the one headed by
-.I head1
-removing all entries from the former.
-.\" .PP
-.\" .BR STAILQ_SWAP ()
-.\" swaps the contents of
-.\" .I head1
-.\" and
-.\" .IR head2 .
-.SH RETURN VALUE
-.BR STAILQ_EMPTY ()
-returns nonzero if the queue is empty,
-and zero if the queue contains at least one entry.
-.PP
-.BR STAILQ_FIRST (),
-and
-.BR STAILQ_NEXT ()
-return a pointer to the first or next
-.I TYPE
-structure, respectively.
-.PP
-.BR STAILQ_HEAD_INITIALIZER ()
-returns an initializer that can be assigned to the queue
-.IR head .
-.SH VERSIONS
-Some BSDs provide SIMPLEQ instead of STAILQ.
-They are identical, but for historical reasons
-they were named differently on different BSDs.
-STAILQ originated on FreeBSD, and SIMPLEQ originated on NetBSD.
-For compatibility reasons, some systems provide both sets of macros.
-glibc provides both STAILQ and SIMPLEQ,
-which are identical except for a missing SIMPLEQ equivalent to
-.BR STAILQ_CONCAT ().
-.SH BUGS
-.BR STAILQ_FOREACH ()
-doesn't allow
-.I var
-to be removed or freed within the loop,
-as it would interfere with the traversal.
-.BR STAILQ_FOREACH_SAFE (),
-which is present on the BSDs but is not present in glibc,
-fixes this limitation by allowing
-.I var
-to safely be removed from the list and freed from within the loop
-without interfering with the traversal.
-.SH STANDARDS
-BSD.
-.SH HISTORY
-4.4BSD.
-.SH EXAMPLES
-.\" SRC BEGIN (stailq.c)
-.EX
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/queue.h>
-\&
-struct entry {
- int data;
- STAILQ_ENTRY(entry) entries; /* Singly linked tail queue */
-};
-\&
-STAILQ_HEAD(stailhead, entry);
-\&
-int
-main(void)
-{
- struct entry *n1, *n2, *n3, *np;
- struct stailhead head; /* Singly linked tail queue
- head */
-\&
- STAILQ_INIT(&head); /* Initialize the queue */
-\&
- n1 = malloc(sizeof(struct entry)); /* Insert at the head */
- STAILQ_INSERT_HEAD(&head, n1, entries);
-\&
- n1 = malloc(sizeof(struct entry)); /* Insert at the tail */
- STAILQ_INSERT_TAIL(&head, n1, entries);
-\&
- n2 = malloc(sizeof(struct entry)); /* Insert after */
- STAILQ_INSERT_AFTER(&head, n1, n2, entries);
-\&
- STAILQ_REMOVE(&head, n2, entry, entries); /* Deletion */
- free(n2);
-\&
- n3 = STAILQ_FIRST(&head);
- STAILQ_REMOVE_HEAD(&head, entries); /* Deletion from the head */
- free(n3);
-\&
- n1 = STAILQ_FIRST(&head);
- n1\->data = 0;
- for (unsigned int i = 1; i < 5; i++) {
- n1 = malloc(sizeof(struct entry));
- STAILQ_INSERT_HEAD(&head, n1, entries);
- n1\->data = i;
- }
- /* Forward traversal */
- STAILQ_FOREACH(np, &head, entries)
- printf("%i\en", np\->data);
- /* TailQ deletion */
- n1 = STAILQ_FIRST(&head);
- while (n1 != NULL) {
- n2 = STAILQ_NEXT(n1, entries);
- free(n1);
- n1 = n2;
- }
- STAILQ_INIT(&head);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR insque (3),
-.BR queue (7)
diff --git a/man3/static_assert.3 b/man3/static_assert.3
deleted file mode 100644
index e01ff1d47..000000000
--- a/man3/static_assert.3
+++ /dev/null
@@ -1,119 +0,0 @@
-.\" Copyright (c) 2022 by Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH static_assert 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-static_assert, _Static_assert \- fail compilation if assertion is false
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <assert.h>
-.PP
-.BI "void static_assert(scalar " constant-expression ", const char *" msg );
-.PP
-/* Since C23: */
-.BI "void static_assert(scalar " constant-expression );
-.fi
-.SH DESCRIPTION
-This macro is similar to
-.BR \%assert (3),
-but it works at compile time,
-generating a compilation error (with an optional message)
-when the input is false (i.e., compares equal to zero).
-.PP
-If the input is nonzero,
-no code is emitted.
-.PP
-.I msg
-must be a string literal.
-Since C23, this argument is optional.
-.PP
-There's a keyword,
-.BR \%_Static_assert (),
-that behaves identically,
-and can be used without including
-.IR <assert.h> .
-.SH RETURN VALUE
-No value is returned.
-.SH VERSIONS
-In C11,
-the second argument
-.RI ( msg )
-was mandatory;
-since C23,
-it can be omitted.
-.SH STANDARDS
-C11 and later.
-.SH EXAMPLES
-.BR static_assert ()
-can't be used in some places,
-like for example at global scope.
-For that,
-a macro
-.BR \%must_be ()
-can be written in terms of
-.BR \%static_assert ().
-The following program uses the macro to get the size of an array safely.
-.PP
-.in +4n
-.\" SRC BEGIN (must_be.c)
-.EX
-#include <assert.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-/*
- * This macro behaves like static_assert(), failing to
- * compile if its argument is not true. However, it always
- * returns 0, which allows using it everywhere an expression
- * can be used.
- */
-#define must_be(e) \e
-( \e
- 0 * (int) sizeof( \e
- struct { \e
- static_assert(e); \e
- int ISO_C_forbids_a_struct_with_no_members; \e
- } \e
- ) \e
-)
-\&
-#define is_same_type(a, b) \e
- __builtin_types_compatible_p(typeof(a), typeof(b))
-\&
-#define is_array(arr) (!is_same_type((arr), &*(arr)))
-#define must_be_array(arr) must_be(is_array(arr))
-\&
-#define sizeof_array(arr) (sizeof(arr) + must_be_array(arr))
-#define nitems(arr) (sizeof((arr)) / sizeof((arr)[0]) \e
- + must_be_array(arr))
-\&
-int foo[10];
-int8_t bar[sizeof_array(foo)];
-\&
-int
-main(void)
-{
- for (size_t i = 0; i < nitems(foo); i++) {
- foo[i] = i;
- }
-\&
- memcpy(bar, foo, sizeof_array(bar));
-\&
- for (size_t i = 0; i < nitems(bar); i++) {
- printf("%d,", bar[i]);
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.in
-.SH SEE ALSO
-.BR assert (3)
diff --git a/man3/statvfs.3 b/man3/statvfs.3
deleted file mode 100644
index b1f0e7545..000000000
--- a/man3/statvfs.3
+++ /dev/null
@@ -1,251 +0,0 @@
-'\" t
-.\" Copyright (C) 2003 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" The pathconf note is from Walter Harms
-.\" This is not a system call on Linux
-.\"
-.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH statvfs 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-statvfs, fstatvfs \- get filesystem statistics
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/statvfs.h>
-.PP
-.BI "int statvfs(const char *restrict " path \
-", struct statvfs *restrict " buf );
-.BI "int fstatvfs(int " fd ", struct statvfs *" buf );
-.fi
-.SH DESCRIPTION
-The function
-.BR statvfs ()
-returns information about a mounted filesystem.
-.I path
-is the pathname of any file within the mounted filesystem.
-.I buf
-is a pointer to a
-.I statvfs
-structure defined approximately as follows:
-.PP
-.in +4n
-.EX
-struct statvfs {
- unsigned long f_bsize; /* Filesystem block size */
- unsigned long f_frsize; /* Fragment size */
- fsblkcnt_t f_blocks; /* Size of fs in f_frsize units */
- fsblkcnt_t f_bfree; /* Number of free blocks */
- fsblkcnt_t f_bavail; /* Number of free blocks for
- unprivileged users */
- fsfilcnt_t f_files; /* Number of inodes */
- fsfilcnt_t f_ffree; /* Number of free inodes */
- fsfilcnt_t f_favail; /* Number of free inodes for
- unprivileged users */
- unsigned long f_fsid; /* Filesystem ID */
- unsigned long f_flag; /* Mount flags */
- unsigned long f_namemax; /* Maximum filename length */
-};
-.EE
-.in
-.PP
-Here the types
-.I fsblkcnt_t
-and
-.I fsfilcnt_t
-are defined in
-.IR <sys/types.h> .
-Both used to be
-.IR "unsigned long" .
-.PP
-The field
-.I f_flag
-is a bit mask indicating various options that were employed
-when mounting this filesystem.
-It contains zero or more of the following flags:
-.\" XXX Keep this list in sync with statfs(2)
-.TP
-.B ST_MANDLOCK
-Mandatory locking is permitted on the filesystem (see
-.BR fcntl (2)).
-.TP
-.B ST_NOATIME
-Do not update access times; see
-.BR mount (2).
-.TP
-.B ST_NODEV
-Disallow access to device special files on this filesystem.
-.TP
-.B ST_NODIRATIME
-Do not update directory access times; see
-.BR mount (2).
-.TP
-.B ST_NOEXEC
-Execution of programs is disallowed on this filesystem.
-.TP
-.B ST_NOSUID
-The set-user-ID and set-group-ID bits are ignored by
-.BR exec (3)
-for executable files on this filesystem
-.TP
-.B ST_RDONLY
-This filesystem is mounted read-only.
-.TP
-.B ST_RELATIME
-Update atime relative to mtime/ctime; see
-.BR mount (2).
-.TP
-.B ST_SYNCHRONOUS
-Writes are synched to the filesystem immediately (see the description of
-.B O_SYNC
-in
-.BR open (2)).
-.PP
-It is unspecified whether all members of the returned struct
-have meaningful values on all filesystems.
-.PP
-.BR fstatvfs ()
-returns the same information about an open file referenced by descriptor
-.IR fd .
-.SH RETURN VALUE
-On success, zero is returned.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-.RB ( statvfs ())
-Search permission is denied for a component of the path prefix of
-.IR path .
-(See also
-.BR path_resolution (7).)
-.TP
-.B EBADF
-.RB ( fstatvfs ())
-.I fd
-is not a valid open file descriptor.
-.TP
-.B EFAULT
-.I Buf
-or
-.I path
-points to an invalid address.
-.TP
-.B EINTR
-This call was interrupted by a signal; see
-.BR signal (7).
-.TP
-.B EIO
-An I/O error occurred while reading from the filesystem.
-.TP
-.B ELOOP
-.RB ( statvfs ())
-Too many symbolic links were encountered in translating
-.IR path .
-.TP
-.B ENAMETOOLONG
-.RB ( statvfs ())
-.I path
-is too long.
-.TP
-.B ENOENT
-.RB ( statvfs ())
-The file referred to by
-.I path
-does not exist.
-.TP
-.B ENOMEM
-Insufficient kernel memory was available.
-.TP
-.B ENOSYS
-The filesystem does not support this call.
-.TP
-.B ENOTDIR
-.RB ( statvfs ())
-A component of the path prefix of
-.I path
-is not a directory.
-.TP
-.B EOVERFLOW
-Some values were too large to be represented in the returned struct.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR statvfs (),
-.BR fstatvfs ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-Only the
-.B ST_NOSUID
-and
-.B ST_RDONLY
-flags of the
-.I f_flag
-field are specified in POSIX.1.
-To obtain definitions of the remaining flags, one must define
-.BR _GNU_SOURCE .
-.SH NOTES
-The Linux kernel has system calls
-.BR statfs (2)
-and
-.BR fstatfs (2)
-to support this library call.
-.PP
-The glibc implementations of
-.PP
-.in +4n
-.EX
-pathconf(path, _PC_REC_XFER_ALIGN);
-pathconf(path, _PC_ALLOC_SIZE_MIN);
-pathconf(path, _PC_REC_MIN_XFER_SIZE);
-.EE
-.in
-.PP
-respectively use the
-.IR f_frsize ,
-.IR f_frsize ,
-and
-.I f_bsize
-fields returned by a call to
-.BR statvfs ()
-with the argument
-.IR path .
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.PP
-Before glibc 2.13,
-.\" glibc commit 3cdaa6adb113a088fdfb87aa6d7747557eccc58d
-.BR statvfs ()
-populated the bits of the
-.I f_flag
-field by scanning the mount options shown in
-.IR /proc/mounts .
-However, starting with Linux 2.6.36, the underlying
-.BR statfs (2)
-system call provides the necessary information via the
-.I f_flags
-field, and since glibc 2.13, the
-.BR statvfs ()
-function will use information from that field rather than scanning
-.IR /proc/mounts .
-.SH SEE ALSO
-.BR statfs (2)
diff --git a/man3/stdarg.3 b/man3/stdarg.3
deleted file mode 100644
index 68529802a..000000000
--- a/man3/stdarg.3
+++ /dev/null
@@ -1,298 +0,0 @@
-'\" t
-.\" Copyright (c) 1990, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" the American National Standards Committee X3, on Information
-.\" Processing Systems.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)stdarg.3 6.8 (Berkeley) 6/29/91
-.\"
-.\" Converted for Linux, Mon Nov 29 15:11:11 1993, faith@cs.unc.edu
-.\" Additions, 2001-10-14, aeb
-.\"
-.TH stdarg 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-stdarg, va_start, va_arg, va_end, va_copy \- variable argument lists
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdarg.h>
-.PP
-.BI "void va_start(va_list " ap ", " last );
-.IB type " va_arg(va_list " ap ", " type );
-.BI "void va_end(va_list " ap );
-.BI "void va_copy(va_list " dest ", va_list " src );
-.fi
-.SH DESCRIPTION
-A function may be called with a varying number of arguments of varying
-types.
-The include file
-.I <stdarg.h>
-declares a type
-.I va_list
-and defines three macros for stepping through a list of arguments whose
-number and types are not known to the called function.
-.PP
-The called function must declare an object of type
-.I va_list
-which is used by the macros
-.BR va_start (),
-.BR va_arg (),
-and
-.BR va_end ().
-.SS va_start()
-The
-.BR va_start ()
-macro initializes
-.I ap
-for subsequent use by
-.BR va_arg ()
-and
-.BR va_end (),
-and must be called first.
-.PP
-The argument
-.I last
-is the name of the last argument before the variable argument list, that is,
-the last argument of which the calling function knows the type.
-.PP
-Because the address of this argument may be used in the
-.BR va_start ()
-macro, it should not be declared as a register variable,
-or as a function or an array type.
-.SS va_arg()
-The
-.BR va_arg ()
-macro expands to an expression that has the type and value of the next
-argument in the call.
-The argument
-.I ap
-is the
-.I va_list
-.I ap
-initialized by
-.BR va_start ().
-Each call to
-.BR va_arg ()
-modifies
-.I ap
-so that the next call returns the next argument.
-The argument
-.I type
-is a type name specified so that the type of a pointer to an object that
-has the specified type can be obtained simply by adding a * to
-.IR type .
-.PP
-The first use of the
-.BR va_arg ()
-macro after that of the
-.BR va_start ()
-macro returns the argument after
-.IR last .
-Successive invocations return the values of the remaining arguments.
-.PP
-If there is no next argument, or if
-.I type
-is not compatible with the type of the actual next argument (as promoted
-according to the default argument promotions), random errors will occur.
-.PP
-If
-.I ap
-is passed to a function that uses
-.BI va_arg( ap , type ),
-then the value of
-.I ap
-is undefined after the return of that function.
-.SS va_end()
-Each invocation of
-.BR va_start ()
-must be matched by a corresponding invocation of
-.BR va_end ()
-in the same function.
-After the call
-.BI va_end( ap )
-the variable
-.I ap
-is undefined.
-Multiple traversals of the list, each
-bracketed by
-.BR va_start ()
-and
-.BR va_end ()
-are possible.
-.BR va_end ()
-may be a macro or a function.
-.SS va_copy()
-The
-.BR va_copy ()
-macro copies the (previously initialized) variable argument list
-.I src
-to
-.IR dest .
-The behavior is as if
-.BR va_start ()
-were applied to
-.I dest
-with the same
-.I last
-argument, followed by the same number of
-.BR va_arg ()
-invocations that was used to reach the current state of
-.IR src .
-.PP
-.\" Proposal from clive@demon.net, 1997-02-28
-An obvious implementation would have a
-.I va_list
-be a pointer to the stack frame of the variadic function.
-In such a setup (by far the most common) there seems
-nothing against an assignment
-.PP
-.in +4n
-.EX
-va_list aq = ap;
-.EE
-.in
-.PP
-Unfortunately, there are also systems that make it an
-array of pointers (of length 1), and there one needs
-.PP
-.in +4n
-.EX
-va_list aq;
-*aq = *ap;
-.EE
-.in
-.PP
-Finally, on systems where arguments are passed in registers,
-it may be necessary for
-.BR va_start ()
-to allocate memory, store the arguments there, and also
-an indication of which argument is next, so that
-.BR va_arg ()
-can step through the list.
-Now
-.BR va_end ()
-can free the allocated memory again.
-To accommodate this situation, C99 adds a macro
-.BR va_copy (),
-so that the above assignment can be replaced by
-.PP
-.in +4n
-.EX
-va_list aq;
-va_copy(aq, ap);
-\&...
-va_end(aq);
-.EE
-.in
-.PP
-Each invocation of
-.BR va_copy ()
-must be matched by a corresponding invocation of
-.BR va_end ()
-in the same function.
-Some systems that do not supply
-.BR va_copy ()
-have
-.B __va_copy
-instead, since that was the name used in the draft proposal.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR va_start (),
-.BR va_end (),
-.BR va_copy ()
-T} Thread safety MT-Safe
-T{
-.BR va_arg ()
-T} Thread safety MT-Safe race:ap
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR va_start ()
-.TQ
-.BR va_arg ()
-.TQ
-.BR va_end ()
-C89, POSIX.1-2001.
-.TP
-.BR va_copy ()
-C99, POSIX.1-2001.
-.SH CAVEATS
-Unlike the historical
-.B varargs
-macros, the
-.B stdarg
-macros do not permit programmers to code a function with no fixed
-arguments.
-This problem generates work mainly when converting
-.B varargs
-code to
-.B stdarg
-code, but it also creates difficulties for variadic functions that wish to
-pass all of their arguments on to a function that takes a
-.I va_list
-argument, such as
-.BR vfprintf (3).
-.SH EXAMPLES
-The function
-.I foo
-takes a string of format characters and prints out the argument associated
-with each format character based on the type.
-.PP
-.EX
-#include <stdio.h>
-#include <stdarg.h>
-\&
-void
-foo(char *fmt, ...) /* \[aq]...\[aq] is C syntax for a variadic function */
-\&
-{
- va_list ap;
- int d;
- char c;
- char *s;
-\&
- va_start(ap, fmt);
- while (*fmt)
- switch (*fmt++) {
- case \[aq]s\[aq]: /* string */
- s = va_arg(ap, char *);
- printf("string %s\en", s);
- break;
- case \[aq]d\[aq]: /* int */
- d = va_arg(ap, int);
- printf("int %d\en", d);
- break;
- case \[aq]c\[aq]: /* char */
- /* need a cast here since va_arg only
- takes fully promoted types */
- c = (char) va_arg(ap, int);
- printf("char %c\en", c);
- break;
- }
- va_end(ap);
-}
-.EE
-.SH SEE ALSO
-.BR vprintf (3),
-.BR vscanf (3),
-.BR vsyslog (3)
diff --git a/man3/stderr.3 b/man3/stderr.3
deleted file mode 100644
index 752ae2794..000000000
--- a/man3/stderr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stdin.3
diff --git a/man3/stdin.3 b/man3/stdin.3
deleted file mode 100644
index e80f48281..000000000
--- a/man3/stdin.3
+++ /dev/null
@@ -1,160 +0,0 @@
-.\" From dholland@burgundy.eecs.harvard.edu Tue Mar 24 18:08:15 1998
-.\"
-.\" This man page was written in 1998 by David A. Holland
-.\" Polished a bit by aeb.
-.\"
-.\" %%%LICENSE_START(PUBLIC_DOMAIN)
-.\" Placed in the Public Domain.
-.\" %%%LICENSE_END
-.\"
-.\" 2005-06-16 mtk, mentioned freopen()
-.\" 2007-12-08, mtk, Converted from mdoc to man macros
-.\"
-.TH stdin 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-stdin, stdout, stderr \- standard I/O streams
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "extern FILE *" stdin ;
-.BI "extern FILE *" stdout ;
-.BI "extern FILE *" stderr ;
-.fi
-.SH DESCRIPTION
-Under normal circumstances every UNIX program has three streams opened
-for it when it starts up, one for input, one for output, and one for
-printing diagnostic or error messages.
-These are typically attached to
-the user's terminal (see
-.BR tty (4))
-but might instead refer to files or other devices, depending on what
-the parent process chose to set up.
-(See also the "Redirection" section of
-.BR sh (1).)
-.PP
-The input stream is referred to as "standard input"; the output stream is
-referred to as "standard output"; and the error stream is referred to
-as "standard error".
-These terms are abbreviated to form the symbols
-used to refer to these files, namely
-.IR stdin ,
-.IR stdout ,
-and
-.IR stderr .
-.PP
-Each of these symbols is a
-.BR stdio (3)
-macro of type pointer to
-.IR FILE ,
-and can be used with functions like
-.BR fprintf (3)
-or
-.BR fread (3).
-.PP
-Since
-.IR FILE s
-are a buffering wrapper around UNIX file descriptors, the
-same underlying files may also be accessed using the raw UNIX file
-interface, that is, the functions like
-.BR read (2)
-and
-.BR lseek (2).
-.PP
-On program startup, the integer file descriptors
-associated with the streams
-.IR stdin ,
-.IR stdout ,
-and
-.I stderr
-are 0, 1, and 2, respectively.
-The preprocessor symbols
-.BR STDIN_FILENO ,
-.BR STDOUT_FILENO ,
-and
-.B STDERR_FILENO
-are defined with these values in
-.IR <unistd.h> .
-(Applying
-.BR freopen (3)
-to one of these streams can change the file descriptor number
-associated with the stream.)
-.PP
-Note that mixing use of
-.IR FILE s
-and raw file descriptors can produce
-unexpected results and should generally be avoided.
-(For the masochistic among you: POSIX.1, section 8.2.3, describes
-in detail how this interaction is supposed to work.)
-A general rule is that file descriptors are handled in the kernel,
-while stdio is just a library.
-This means for example, that after an
-.BR exec (3),
-the child inherits all open file descriptors, but all old streams
-have become inaccessible.
-.PP
-Since the symbols
-.IR stdin ,
-.IR stdout ,
-and
-.I stderr
-are specified to be macros, assigning to them is nonportable.
-The standard streams can be made to refer to different files
-with help of the library function
-.BR freopen (3),
-specially introduced to make it possible to reassign
-.IR stdin ,
-.IR stdout ,
-and
-.IR stderr .
-The standard streams are closed by a call to
-.BR exit (3)
-and by normal program termination.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.PP
-The standards also stipulate that these three
-streams shall be open at program startup.
-.SH HISTORY
-C89, POSIX.1-2001.
-.SH NOTES
-The stream
-.I stderr
-is unbuffered.
-The stream
-.I stdout
-is line-buffered when it points to a terminal.
-Partial lines will not
-appear until
-.BR fflush (3)
-or
-.BR exit (3)
-is called, or a newline is printed.
-This can produce unexpected
-results, especially with debugging output.
-The buffering mode of the standard streams (or any other stream)
-can be changed using the
-.BR setbuf (3)
-or
-.BR setvbuf (3)
-call.
-Note that in case
-.I stdin
-is associated with a terminal, there may also be input buffering
-in the terminal driver, entirely unrelated to stdio buffering.
-(Indeed, normally terminal input is line buffered in the kernel.)
-This kernel input handling can be modified using calls like
-.BR tcsetattr (3);
-see also
-.BR stty (1),
-and
-.BR termios (3).
-.SH SEE ALSO
-.BR csh (1),
-.BR sh (1),
-.BR open (2),
-.BR fopen (3),
-.BR stdio (3)
diff --git a/man3/stdio.3 b/man3/stdio.3
deleted file mode 100644
index fb99cdd21..000000000
--- a/man3/stdio.3
+++ /dev/null
@@ -1,345 +0,0 @@
-'\" t
-.\" Copyright (c) 1990, 1991 Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)stdio.3 6.5 (Berkeley) 5/6/91
-.\"
-.\" Converted for Linux, Mon Nov 29 16:07:22 1993, faith@cs.unc.edu
-.\" Modified, 2001-12-26, aeb
-.\"
-.TH stdio 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-stdio \- standard input/output library functions
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "FILE *" stdin ;
-.BI "FILE *" stdout ;
-.BI "FILE *" stderr ;
-.fi
-.SH DESCRIPTION
-The standard I/O library provides a simple and efficient buffered stream
-I/O interface.
-Input and output is mapped into logical data streams and the
-physical I/O characteristics are concealed.
-The functions and macros are
-listed below; more information is available from the individual man pages.
-.PP
-A stream is associated with an external file (which may be a physical
-device) by
-.I opening
-a file, which may involve creating a new file.
-Creating an existing file
-causes its former contents to be discarded.
-If a file can support positioning requests (such as a disk file,
-as opposed to a terminal), then a
-.I file position indicator
-associated with the stream is positioned at the start of the file (byte
-zero), unless the file is opened with append mode.
-If append mode is used,
-it is unspecified whether the position indicator will be placed at the
-start or the end of the file.
-The position indicator is maintained by
-subsequent reads, writes, and positioning requests.
-All input occurs as if the characters were read by successive calls to the
-.BR fgetc (3)
-function; all output takes place as if all characters were written by
-successive calls to the
-.BR fputc (3)
-function.
-.PP
-A file is disassociated from a stream by
-.I closing
-the file.
-Output streams are flushed (any unwritten buffer contents are
-transferred to the host environment) before the stream is disassociated from
-the file.
-The value of a pointer to a
-.I FILE
-object is indeterminate after a file is closed (garbage).
-.PP
-A file may be subsequently reopened, by the same or another program
-execution, and its contents reclaimed or modified (if it can be
-repositioned at the start).
-If the main function returns to its original
-caller, or the
-.BR exit (3)
-function is called, all open files are closed (hence all output streams are
-flushed) before program termination.
-Other methods of program termination,
-such as
-.BR abort (3)
-do not bother about closing files properly.
-.PP
-At program startup, three text streams are predefined and need not be
-opened explicitly:
-.I standard input
-(for reading conventional input),
-.I standard output
-(for writing conventional output), and
-.I standard error
-(for writing diagnostic output).
-These streams are abbreviated
-.IR stdin ,
-.IR stdout ,
-and
-.IR stderr .
-When opened, the standard error stream is not fully buffered; the standard
-input and output streams are fully buffered if and only if the streams do
-not refer to an interactive device.
-.PP
-Output streams that refer to terminal devices are always line buffered by
-default; pending output to such streams is written automatically whenever
-an input stream that refers to a terminal device is read.
-In cases where a
-large amount of computation is done after printing part of a line on an
-output terminal, it is necessary to
-.BR fflush (3)
-the standard output before going off and computing so that the output will
-appear.
-.PP
-The
-.I stdio
-library is a part of the library
-.B libc
-and routines are automatically loaded as needed by
-.BR cc (1).
-The
-SYNOPSIS
-sections of the following manual pages indicate which include files are to
-be used, what the compiler declaration for the function looks like and
-which external variables are of interest.
-.PP
-The following are defined as macros; these names may not be reused without
-first removing their current definitions with
-.BR #undef :
-.BR BUFSIZ ,
-.BR EOF ,
-.BR FILENAME_MAX ,
-.BR FOPEN_MAX ,
-.BR L_cuserid ,
-.BR L_ctermid ,
-.BR L_tmpnam ,
-.BR NULL ,
-.BR SEEK_END ,
-.BR SEEK_SET ,
-.BR SEEK_CUR ,
-.BR TMP_MAX ,
-.BR clearerr ,
-.BR feof ,
-.BR ferror ,
-.BR fileno ,
-.\" Not on Linux: .BR fropen ,
-.\" Not on Linux: .BR fwopen ,
-.BR getc ,
-.BR getchar ,
-.BR putc ,
-.BR putchar ,
-.BR stderr ,
-.BR stdin ,
-.BR stdout .
-Function versions of the macro functions
-.BR feof ,
-.BR ferror ,
-.BR clearerr ,
-.BR fileno ,
-.BR getc ,
-.BR getchar ,
-.BR putc ,
-and
-.B putchar
-exist and will be used if the macros definitions are explicitly removed.
-.SS List of functions
-.nh
-.ad l
-.TS
-;
-lb lbx
-l l.
-Function Description
-_
-\fBclearerr\fP(3) T{
-check and reset stream status
-T}
-\fBfclose\fP(3) T{
-close a stream
-T}
-\fBfdopen\fP(3) T{
-stream open functions
-T}
-\fBfeof\fP(3) T{
-check and reset stream status
-T}
-\fBferror\fP(3) T{
-check and reset stream status
-T}
-\fBfflush\fP(3) T{
-flush a stream
-T}
-\fBfgetc\fP(3) T{
-get next character or word from input stream
-T}
-\fBfgetpos\fP(3) T{
-reposition a stream
-T}
-\fBfgets\fP(3) T{
-get a line from a stream
-T}
-\fBfileno\fP(3) T{
-return the integer descriptor of the argument stream
-T}
-\fBfopen\fP(3) T{
-stream open functions
-T}
-\fBfprintf\fP(3) T{
-formatted output conversion
-T}
-\fBfpurge\fP(3) T{
-flush a stream
-T}
-\fBfputc\fP(3) T{
-output a character or word to a stream
-T}
-\fBfputs\fP(3) T{
-output a line to a stream
-T}
-\fBfread\fP(3) T{
-binary stream input/output
-T}
-\fBfreopen\fP(3) T{
-stream open functions
-T}
-\fBfscanf\fP(3) T{
-input format conversion
-T}
-\fBfseek\fP(3) T{
-reposition a stream
-T}
-\fBfsetpos\fP(3) T{
-reposition a stream
-T}
-\fBftell\fP(3) T{
-reposition a stream
-T}
-\fBfwrite\fP(3) T{
-binary stream input/output
-T}
-\fBgetc\fP(3) T{
-get next character or word from input stream
-T}
-\fBgetchar\fP(3) T{
-get next character or word from input stream
-T}
-\fBgets\fP(3) T{
-get a line from a stream
-T}
-\fBgetw\fP(3) T{
-get next character or word from input stream
-T}
-\fBmktemp\fP(3) T{
-make temporary filename (unique)
-T}
-\fBperror\fP(3) T{
-system error messages
-T}
-\fBprintf\fP(3) T{
-formatted output conversion
-T}
-\fBputc\fP(3) T{
-output a character or word to a stream
-T}
-\fBputchar\fP(3) T{
-output a character or word to a stream
-T}
-\fBputs\fP(3) T{
-output a line to a stream
-T}
-\fBputw\fP(3) T{
-output a character or word to a stream
-T}
-\fBremove\fP(3) T{
-remove directory entry
-T}
-\fBrewind\fP(3) T{
-reposition a stream
-T}
-\fBscanf\fP(3) T{
-input format conversion
-T}
-\fBsetbuf\fP(3) T{
-stream buffering operations
-T}
-\fBsetbuffer\fP(3) T{
-stream buffering operations
-T}
-\fBsetlinebuf\fP(3) T{
-stream buffering operations
-T}
-\fBsetvbuf\fP(3) T{
-stream buffering operations
-T}
-\fBsprintf\fP(3) T{
-formatted output conversion
-T}
-\fBsscanf\fP(3) T{
-input format conversion
-T}
-\fBstrerror\fP(3) T{
-system error messages
-T}
-\fBsys_errlist\fP(3) T{
-system error messages
-T}
-\fBsys_nerr\fP(3) T{
-system error messages
-T}
-\fBtempnam\fP(3) T{
-temporary file routines
-T}
-\fBtmpfile\fP(3) T{
-temporary file routines
-T}
-\fBtmpnam\fP(3) T{
-temporary file routines
-T}
-\fBungetc\fP(3) T{
-un-get character from input stream
-T}
-\fBvfprintf\fP(3) T{
-formatted output conversion
-T}
-\fBvfscanf\fP(3) T{
-input format conversion
-T}
-\fBvprintf\fP(3) T{
-formatted output conversion
-T}
-\fBvscanf\fP(3) T{
-input format conversion
-T}
-\fBvsprintf\fP(3) T{
-formatted output conversion
-T}
-\fBvsscanf\fP(3) T{
-input format conversion
-T}
-.TE
-.ad
-.hy
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C89, POSIX.1-2001.
-.SH SEE ALSO
-.BR close (2),
-.BR open (2),
-.BR read (2),
-.BR write (2),
-.BR stdout (3),
-.BR unlocked_stdio (3)
diff --git a/man3/stdio_ext.3 b/man3/stdio_ext.3
deleted file mode 100644
index 62a7f9907..000000000
--- a/man3/stdio_ext.3
+++ /dev/null
@@ -1,138 +0,0 @@
-'\" t
-.\" Copyright (C) 2001 Andries Brouwer <aeb@cwi.nl>.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH stdio_ext 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-__fbufsize, __flbf, __fpending, __fpurge, __freadable,
-__freading, __fsetlocking, __fwritable, __fwriting, _flushlbf \-
-interfaces to stdio FILE structure
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.B #include <stdio_ext.h>
-.PP
-.BI "size_t __fbufsize(FILE *" stream );
-.BI "size_t __fpending(FILE *" stream );
-.BI "int __flbf(FILE *" stream );
-.BI "int __freadable(FILE *" stream );
-.BI "int __fwritable(FILE *" stream );
-.BI "int __freading(FILE *" stream );
-.BI "int __fwriting(FILE *" stream );
-.BI "int __fsetlocking(FILE *" stream ", int " type );
-.B "void _flushlbf(void);"
-.BI "void __fpurge(FILE *" stream );
-.fi
-.SH DESCRIPTION
-Solaris introduced routines to allow portable access to the
-internals of the
-.I FILE
-structure, and glibc also implemented these.
-.PP
-The
-.BR __fbufsize ()
-function returns the size of the buffer currently used
-by the given stream.
-.PP
-The
-.BR __fpending ()
-function returns the number of bytes in the output buffer.
-For wide-oriented streams the unit is wide characters.
-This function is undefined on buffers in reading mode,
-or opened read-only.
-.PP
-The
-.BR __flbf ()
-function returns a nonzero value if the stream is line-buffered,
-and zero otherwise.
-.PP
-The
-.BR __freadable ()
-function returns a nonzero value if the stream allows reading,
-and zero otherwise.
-.PP
-The
-.BR __fwritable ()
-function returns a nonzero value if the stream allows writing,
-and zero otherwise.
-.PP
-The
-.BR __freading ()
-function returns a nonzero value if the stream is read-only, or
-if the last operation on the stream was a read operation,
-and zero otherwise.
-.PP
-The
-.BR __fwriting ()
-function returns a nonzero value if the stream is write-only (or
-append-only), or if the last operation on the stream was a write
-operation, and zero otherwise.
-.PP
-The
-.BR __fsetlocking ()
-function can be used to select the desired type of locking on the stream.
-It returns the current type.
-The
-.I type
-argument can take the following three values:
-.TP
-.B FSETLOCKING_INTERNAL
-Perform implicit locking around every operation on the given stream
-(except for the *_unlocked ones).
-This is the default.
-.TP
-.B FSETLOCKING_BYCALLER
-The caller will take care of the locking (possibly using
-.BR flockfile (3)
-in case there is more than one thread), and the stdio routines
-will not do locking until the state is reset to
-.BR FSETLOCKING_INTERNAL .
-.TP
-.B FSETLOCKING_QUERY
-Don't change the type of locking.
-(Only return it.)
-.PP
-The
-.BR _flushlbf ()
-function flushes all line-buffered streams.
-(Presumably so that
-output to a terminal is forced out, say before reading keyboard input.)
-.PP
-The
-.BR __fpurge ()
-function discards the contents of the stream's buffer.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR __fbufsize (),
-.BR __fpending (),
-.BR __fpurge (),
-.BR __fsetlocking ()
-T} Thread safety MT-Safe race:stream
-T{
-.BR __flbf (),
-.BR __freadable (),
-.BR __freading (),
-.BR __fwritable (),
-.BR __fwriting (),
-.BR _flushlbf ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH SEE ALSO
-.BR flockfile (3),
-.BR fpurge (3)
diff --git a/man3/stdout.3 b/man3/stdout.3
deleted file mode 100644
index 752ae2794..000000000
--- a/man3/stdout.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stdin.3
diff --git a/man3/stpcpy.3 b/man3/stpcpy.3
deleted file mode 100644
index ff7476a84..000000000
--- a/man3/stpcpy.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strcpy.3
diff --git a/man3/stpecpy.3 b/man3/stpecpy.3
deleted file mode 100644
index beb850746..000000000
--- a/man3/stpecpy.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/string_copying.7
diff --git a/man3/stpecpyx.3 b/man3/stpecpyx.3
deleted file mode 100644
index beb850746..000000000
--- a/man3/stpecpyx.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/string_copying.7
diff --git a/man3/stpncpy.3 b/man3/stpncpy.3
deleted file mode 100644
index e7367cf63..000000000
--- a/man3/stpncpy.3
+++ /dev/null
@@ -1,165 +0,0 @@
-'\" t
-.\" Copyright 2022 Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH stpncpy 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-stpncpy, strncpy
-\- zero a fixed-width buffer and
-copy a string into a character sequence with truncation
-and zero the rest of it
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "char *strncpy(char " dst "[restrict ." sz "], \
-const char *restrict " src ,
-.BI " size_t " sz );
-.BI "char *stpncpy(char " dst "[restrict ." sz "], \
-const char *restrict " src ,
-.BI " size_t " sz );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR stpncpy ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-These functions copy the string pointed to by
-.I src
-into a null-padded character sequence at the fixed-width buffer pointed to by
-.IR dst .
-If the destination buffer,
-limited by its size,
-isn't large enough to hold the copy,
-the resulting character sequence is truncated.
-For the difference between the two functions, see RETURN VALUE.
-.PP
-An implementation of these functions might be:
-.PP
-.in +4n
-.EX
-char *
-strncpy(char *restrict dst, const char *restrict src, size_t sz)
-{
- stpncpy(dst, src, sz);
- return dst;
-}
-\&
-char *
-stpncpy(char *restrict dst, const char *restrict src, size_t sz)
-{
- bzero(dst, sz);
- return mempcpy(dst, src, strnlen(src, sz));
-}
-.EE
-.in
-.SH RETURN VALUE
-.TP
-.BR strncpy ()
-returns
-.IR dst .
-.TP
-.BR stpncpy ()
-returns a pointer to
-one after the last character in the destination character sequence.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR stpncpy (),
-.BR strncpy ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR strncpy ()
-C11, POSIX.1-2008.
-.TP
-.BR stpncpy ()
-POSIX.1-2008.
-.SH STANDARDS
-.TP
-.BR strncpy ()
-C89, POSIX.1-2001, SVr4, 4.3BSD.
-.TP
-.BR stpncpy ()
-glibc 1.07.
-POSIX.1-2008.
-.SH CAVEATS
-The name of these functions is confusing.
-These functions produce a null-padded character sequence,
-not a string (see
-.BR string_copying (7)).
-.PP
-It's impossible to distinguish truncation by the result of the call,
-from a character sequence that just fits the destination buffer;
-truncation should be detected by
-comparing the length of the input string
-with the size of the destination buffer.
-.PP
-If you're going to use this function in chained calls,
-it would be useful to develop a similar function that accepts
-a pointer to the end (one after the last element) of the destination buffer
-instead of its size.
-.SH EXAMPLES
-.\" SRC BEGIN (stpncpy.c)
-.EX
-#include <err.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-int
-main(void)
-{
- char *p;
- char buf1[20];
- char buf2[20];
- size_t len;
-\&
- if (sizeof(buf2) < strlen("Hello world!"))
- warnx("strncpy: truncating character sequence");
- strncpy(buf2, "Hello world!", sizeof(buf2));
- len = strnlen(buf2, sizeof(buf2));
-\&
- printf("[len = %zu]: ", len);
- printf("%.*s\en", (int) len, buf2); // "Hello world!"
-\&
- if (sizeof(buf1) < strlen("Hello world!"))
- warnx("stpncpy: truncating character sequence");
- p = stpncpy(buf1, "Hello world!", sizeof(buf1));
- len = p \- buf1;
-\&
- printf("[len = %zu]: ", len);
- printf("%.*s\en", (int) len, buf1); // "Hello world!"
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR wcpncpy (3),
-.BR string_copying (7)
diff --git a/man3/strcasecmp.3 b/man3/strcasecmp.3
deleted file mode 100644
index 7bebe7a53..000000000
--- a/man3/strcasecmp.3
+++ /dev/null
@@ -1,115 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:12:45 1993 by Rik Faith (faith@cs.unc.edu)
-.TH strcasecmp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strcasecmp, strncasecmp \- compare two strings ignoring case
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <strings.h>
-.PP
-.BI "int strcasecmp(const char *" s1 ", const char *" s2 );
-.BI "int strncasecmp(const char " s1 [. n "], const char " s2 [. n "], \
-size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR strcasecmp ()
-function performs a byte-by-byte comparison of the strings
-.I s1
-and
-.IR s2 ,
-ignoring the case of the characters.
-It returns an integer
-less than, equal to, or greater than zero if
-.I s1
-is found,
-respectively, to be less than, to match, or be greater than
-.IR s2 .
-.PP
-The
-.BR strncasecmp ()
-function is similar, except that it compares
-no more than
-.I n
-bytes of
-.I s1
-and
-.IR s2 .
-.SH RETURN VALUE
-The
-.BR strcasecmp ()
-and
-.BR strncasecmp ()
-functions return
-an integer less than, equal to, or greater than zero if
-.I s1
-is, after ignoring case, found to be
-less than, to match, or be greater than
-.IR s2 ,
-respectively.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strcasecmp (),
-.BR strncasecmp ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-4.4BSD, POSIX.1-2001.
-.PP
-The
-.BR strcasecmp ()
-and
-.BR strncasecmp ()
-functions first appeared in 4.4BSD, where they were declared in
-.IR <string.h> .
-Thus, for reasons of historical compatibility, the glibc
-.I <string.h>
-header file also declares these functions, if the
-.B _DEFAULT_SOURCE
-(or, in glibc 2.19 and earlier,
-.BR _BSD_SOURCE )
-feature test macro is defined.
-.PP
-The POSIX.1-2008 standard says of these functions:
-.PP
-.RS
-When the
-.B LC_CTYPE
-category of the locale being used is from the POSIX locale,
-these functions shall behave as if the strings had been converted
-to lowercase and then a byte comparison performed.
-Otherwise, the results are unspecified.
-.RE
-.SH SEE ALSO
-.BR memcmp (3),
-.BR strcmp (3),
-.BR strcoll (3),
-.BR string (3),
-.BR strncmp (3),
-.BR wcscasecmp (3),
-.BR wcsncasecmp (3)
diff --git a/man3/strcasestr.3 b/man3/strcasestr.3
deleted file mode 100644
index 2feb2c57e..000000000
--- a/man3/strcasestr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strstr.3
diff --git a/man3/strcat.3 b/man3/strcat.3
deleted file mode 100644
index ff7476a84..000000000
--- a/man3/strcat.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strcpy.3
diff --git a/man3/strchr.3 b/man3/strchr.3
deleted file mode 100644
index d3d88beeb..000000000
--- a/man3/strchr.3
+++ /dev/null
@@ -1,132 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Mon Apr 12 12:51:24 1993, David Metcalfe
-.\" 2006-05-19, Justin Pryzby <pryzbyj@justinpryzby.com>
-.\" Document strchrnul(3).
-.\"
-.TH strchr 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strchr, strrchr, strchrnul \- locate character in string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "char *strchr(const char *" s ", int " c );
-.BI "char *strrchr(const char *" s ", int " c );
-.PP
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <string.h>
-.PP
-.BI "char *strchrnul(const char *" s ", int " c );
-.fi
-.SH DESCRIPTION
-The
-.BR strchr ()
-function returns a pointer to the first occurrence
-of the character
-.I c
-in the string
-.IR s .
-.PP
-The
-.BR strrchr ()
-function returns a pointer to the last occurrence
-of the character
-.I c
-in the string
-.IR s .
-.PP
-The
-.BR strchrnul ()
-function is like
-.BR strchr ()
-except that if
-.I c
-is not found in
-.IR s ,
-then it returns a pointer to the null byte
-at the end of
-.IR s ,
-rather than NULL.
-.PP
-Here "character" means "byte"; these functions do not work with
-wide or multibyte characters.
-.SH RETURN VALUE
-The
-.BR strchr ()
-and
-.BR strrchr ()
-functions return a pointer to
-the matched character or NULL if the character is not found.
-The terminating null byte is considered part of the string,
-so that if
-.I c
-is specified as \[aq]\e0\[aq],
-these functions return a pointer to the terminator.
-.PP
-The
-.BR strchrnul ()
-function returns a pointer to the matched character,
-or a pointer to the null byte at the end of
-.I s
-(i.e.,
-.IR "s+strlen(s)" )
-if the character is not found.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strchr (),
-.BR strrchr (),
-.BR strchrnul ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR strchr ()
-.TQ
-.BR strrchr ()
-C11, POSIX.1-2008.
-.TP
-.BR strchrnul ()
-GNU.
-.SH HISTORY
-.TP
-.BR strchr ()
-.TQ
-.BR strrchr ()
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.TP
-.BR strchrnul ()
-glibc 2.1.1.
-.SH SEE ALSO
-.BR memchr (3),
-.BR string (3),
-.BR strlen (3),
-.BR strpbrk (3),
-.BR strsep (3),
-.BR strspn (3),
-.BR strstr (3),
-.BR strtok (3),
-.BR wcschr (3),
-.BR wcsrchr (3)
diff --git a/man3/strchrnul.3 b/man3/strchrnul.3
deleted file mode 100644
index 322b7a896..000000000
--- a/man3/strchrnul.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strchr.3
diff --git a/man3/strcmp.3 b/man3/strcmp.3
deleted file mode 100644
index a6cd2c758..000000000
--- a/man3/strcmp.3
+++ /dev/null
@@ -1,211 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2020 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:08:52 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2001-08-31, aeb
-.\"
-.TH strcmp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strcmp, strncmp \- compare two strings
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "int strcmp(const char *" s1 ", const char *" s2 );
-.BI "int strncmp(const char " s1 [. n "], const char " s2 [. n "], size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR strcmp ()
-function compares the two strings
-.I s1
-and
-.IR s2 .
-The locale is not taken into account (for a locale-aware comparison, see
-.BR strcoll (3)).
-The comparison is done using unsigned characters.
-.PP
-.BR strcmp ()
-returns an integer indicating the result of the comparison, as follows:
-.IP \[bu] 3
-0, if the
-.I s1
-and
-.I s2
-are equal;
-.IP \[bu]
-a negative value if
-.I s1
-is less than
-.IR s2 ;
-.IP \[bu]
-a positive value if
-.I s1
-is greater than
-.IR s2 .
-.PP
-The
-.BR strncmp ()
-function is similar, except it compares
-only the first (at most)
-.I n
-bytes of
-.I s1
-and
-.IR s2 .
-.SH RETURN VALUE
-The
-.BR strcmp ()
-and
-.BR strncmp ()
-functions return an integer
-less than, equal to, or greater than zero if
-.I s1
-(or the first
-.I n
-bytes thereof) is found, respectively, to be less than, to
-match, or be greater than
-.IR s2 .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strcmp (),
-.BR strncmp ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-POSIX.1 specifies only that:
-.RS
-.PP
-The sign of a nonzero return value shall be determined by the sign
-of the difference between the values of the first pair of bytes
-(both interpreted as type
-.IR "unsigned char" )
-that differ in the strings being compared.
-.RE
-.PP
-In glibc, as in most other implementations,
-the return value is the arithmetic result of subtracting
-the last compared byte in
-.I s2
-from the last compared byte in
-.IR s1 .
-(If the two characters are equal, this difference is 0.)
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.SH EXAMPLES
-The program below can be used to demonstrate the operation of
-.BR strcmp ()
-(when given two arguments) and
-.BR strncmp ()
-(when given three arguments).
-First, some examples using
-.BR strcmp ():
-.PP
-.in +4n
-.EX
-$ \fB./string_comp ABC ABC\fP
-<str1> and <str2> are equal
-$ \fB./string_comp ABC AB\fP # \[aq]C\[aq] is ASCII 67; \[aq]C\[aq] \- \[aq]\e0\[aq] = 67
-<str1> is greater than <str2> (67)
-$ \fB./string_comp ABA ABZ\fP # \[aq]A\[aq] is ASCII 65; \[aq]Z\[aq] is ASCII 90
-<str1> is less than <str2> (\-25)
-$ \fB./string_comp ABJ ABC\fP
-<str1> is greater than <str2> (7)
-$ .\fB/string_comp $\[aq]\e201\[aq] A\fP # 0201 \- 0101 = 0100 (or 64 decimal)
-<str1> is greater than <str2> (64)
-.EE
-.in
-.PP
-The last example uses
-.BR bash (1)-specific
-syntax to produce a string containing an 8-bit ASCII code;
-the result demonstrates that the string comparison uses unsigned
-characters.
-.PP
-And then some examples using
-.BR strncmp ():
-.PP
-.in +4n
-.EX
-$ \fB./string_comp ABC AB 3\fP
-<str1> is greater than <str2> (67)
-$ \fB./string_comp ABC AB 2\fP
-<str1> and <str2> are equal in the first 2 bytes
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (string_comp.c)
-.EX
-/* string_comp.c
-\&
- Licensed under GNU General Public License v2 or later.
-*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int res;
-\&
- if (argc < 3) {
- fprintf(stderr, "Usage: %s <str1> <str2> [<len>]\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- if (argc == 3)
- res = strcmp(argv[1], argv[2]);
- else
- res = strncmp(argv[1], argv[2], atoi(argv[3]));
-\&
- if (res == 0) {
- printf("<str1> and <str2> are equal");
- if (argc > 3)
- printf(" in the first %d bytes\en", atoi(argv[3]));
- printf("\en");
- } else if (res < 0) {
- printf("<str1> is less than <str2> (%d)\en", res);
- } else {
- printf("<str1> is greater than <str2> (%d)\en", res);
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR memcmp (3),
-.BR strcasecmp (3),
-.BR strcoll (3),
-.BR string (3),
-.BR strncasecmp (3),
-.BR strverscmp (3),
-.BR wcscmp (3),
-.BR wcsncmp (3),
-.BR ascii (7)
diff --git a/man3/strcoll.3 b/man3/strcoll.3
deleted file mode 100644
index 56c2fc435..000000000
--- a/man3/strcoll.3
+++ /dev/null
@@ -1,89 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sun Jul 25 10:40:44 1993 by Rik Faith (faith@cs.unc.edu)
-.TH strcoll 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strcoll \- compare two strings using the current locale
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "int strcoll(const char *" s1 ", const char *" s2 );
-.fi
-.SH DESCRIPTION
-The
-.BR strcoll ()
-function compares the two strings
-.I s1
-and
-.IR s2 .
-It returns an integer less than, equal to, or greater
-than zero if
-.I s1
-is found, respectively, to be less than,
-to match, or be greater than
-.IR s2 .
-The comparison is based on
-strings interpreted as appropriate for the program's current locale
-for category
-.BR LC_COLLATE .
-(See
-.BR setlocale (3).)
-.SH RETURN VALUE
-The
-.BR strcoll ()
-function returns an integer less than, equal to,
-or greater than zero if
-.I s1
-is found, respectively, to be less
-than, to match, or be greater than
-.IR s2 ,
-when both are interpreted
-as appropriate for the current locale.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strcoll ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.SH NOTES
-In the
-.I "POSIX"
-or
-.I "C"
-locales
-.BR strcoll ()
-is equivalent to
-.BR strcmp (3).
-.SH SEE ALSO
-.BR memcmp (3),
-.BR setlocale (3),
-.BR strcasecmp (3),
-.BR strcmp (3),
-.BR string (3),
-.BR strxfrm (3)
diff --git a/man3/strcpy.3 b/man3/strcpy.3
deleted file mode 100644
index 74f67644c..000000000
--- a/man3/strcpy.3
+++ /dev/null
@@ -1,207 +0,0 @@
-'\" t
-.\" Copyright 2022 Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH strcpy 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-stpcpy, strcpy, strcat \- copy or catenate a string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "char *stpcpy(char *restrict " dst ", const char *restrict " src );
-.BI "char *strcpy(char *restrict " dst ", const char *restrict " src );
-.BI "char *strcat(char *restrict " dst ", const char *restrict " src );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR stpcpy ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-.TP
-.BR stpcpy ()
-.TQ
-.BR strcpy ()
-These functions copy the string pointed to by
-.IR src ,
-into a string
-at the buffer pointed to by
-.IR dst .
-The programmer is responsible for allocating a destination buffer large enough,
-that is,
-.IR "strlen(src) + 1" .
-For the difference between the two functions, see RETURN VALUE.
-.TP
-.BR strcat ()
-This function catenates the string pointed to by
-.IR src ,
-after the string pointed to by
-.I dst
-(overwriting its terminating null byte).
-The programmer is responsible for allocating a destination buffer large enough,
-that is,
-.IR "strlen(dst) + strlen(src) + 1" .
-.PP
-An implementation of these functions might be:
-.PP
-.in +4n
-.EX
-char *
-stpcpy(char *restrict dst, const char *restrict src)
-{
- char *p;
-\&
- p = mempcpy(dst, src, strlen(src));
- *p = \[aq]\e0\[aq];
-\&
- return p;
-}
-\&
-char *
-strcpy(char *restrict dst, const char *restrict src)
-{
- stpcpy(dst, src);
- return dst;
-}
-\&
-char *
-strcat(char *restrict dst, const char *restrict src)
-{
- stpcpy(dst + strlen(dst), src);
- return dst;
-}
-.EE
-.in
-.SH RETURN VALUE
-.TP
-.BR stpcpy ()
-This function returns
-a pointer to the terminating null byte of the copied string.
-.TP
-.BR strcpy ()
-.TQ
-.BR strcat ()
-These functions return
-.IR dst .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR stpcpy (),
-.BR strcpy (),
-.BR strcat ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR stpcpy ()
-POSIX.1-2008.
-.TP
-.BR strcpy ()
-.TQ
-.BR strcat ()
-C11, POSIX.1-2008.
-.SH STANDARDS
-.TP
-.BR stpcpy ()
-POSIX.1-2008.
-.TP
-.BR strcpy ()
-.TQ
-.BR strcat ()
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.SH CAVEATS
-The strings
-.I src
-and
-.I dst
-may not overlap.
-.PP
-If the destination buffer is not large enough,
-the behavior is undefined.
-See
-.B _FORTIFY_SOURCE
-in
-.BR feature_test_macros (7).
-.PP
-.BR strcat ()
-can be very inefficient.
-Read about
-.UR https://www.joelonsoftware.com/\:2001/12/11/\:back\-to\-basics/
-Shlemiel the painter
-.UE .
-.SH EXAMPLES
-.\" SRC BEGIN (strcpy.c)
-.EX
-#include <err.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-int
-main(void)
-{
- char *p;
- char *buf1;
- char *buf2;
- size_t len, maxsize;
-\&
- maxsize = strlen("Hello ") + strlen("world") + strlen("!") + 1;
- buf1 = malloc(sizeof(*buf1) * maxsize);
- if (buf1 == NULL)
- err(EXIT_FAILURE, "malloc()");
- buf2 = malloc(sizeof(*buf2) * maxsize);
- if (buf2 == NULL)
- err(EXIT_FAILURE, "malloc()");
-\&
- p = buf1;
- p = stpcpy(p, "Hello ");
- p = stpcpy(p, "world");
- p = stpcpy(p, "!");
- len = p \- buf1;
-\&
- printf("[len = %zu]: ", len);
- puts(buf1); // "Hello world!"
- free(buf1);
-\&
- strcpy(buf2, "Hello ");
- strcat(buf2, "world");
- strcat(buf2, "!");
- len = strlen(buf2);
-\&
- printf("[len = %zu]: ", len);
- puts(buf2); // "Hello world!"
- free(buf2);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR strdup (3),
-.BR string (3),
-.BR wcscpy (3),
-.BR string_copying (7)
diff --git a/man3/strcspn.3 b/man3/strcspn.3
deleted file mode 100644
index 26284f29a..000000000
--- a/man3/strcspn.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strspn.3
diff --git a/man3/strdup.3 b/man3/strdup.3
deleted file mode 100644
index 82d438b5e..000000000
--- a/man3/strdup.3
+++ /dev/null
@@ -1,148 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sun Jul 25 10:41:34 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Wed Oct 17 01:12:26 2001 by John Levon <moz@compsoc.man.ac.uk>
-.TH strdup 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strdup, strndup, strdupa, strndupa \- duplicate a string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "char *strdup(const char *" s );
-.PP
-.BI "char *strndup(const char " s [. n "], size_t " n );
-.BI "char *strdupa(const char *" s );
-.BI "char *strndupa(const char " s [. n "], size_t " n );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR strdup ():
-.nf
- _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
- || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.PP
-.BR strndup ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.PP
-.BR strdupa (),
-.BR strndupa ():
-.nf
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR strdup ()
-function returns a pointer to a new string which
-is a duplicate of the string
-.IR s .
-Memory for the new string is
-obtained with
-.BR malloc (3),
-and can be freed with
-.BR free (3).
-.PP
-The
-.BR strndup ()
-function is similar, but copies at most
-.I n
-bytes.
-If
-.I s
-is longer than
-.IR n ,
-only
-.I n
-bytes are copied, and a terminating null byte (\[aq]\e0\[aq]) is added.
-.PP
-.BR strdupa ()
-and
-.BR strndupa ()
-are similar, but use
-.BR alloca (3)
-to allocate the buffer.
-.SH RETURN VALUE
-On success, the
-.BR strdup ()
-function returns a pointer to the duplicated
-string.
-It returns NULL if insufficient memory was available, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B ENOMEM
-Insufficient memory available to allocate duplicate string.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strdup (),
-.BR strndup (),
-.BR strdupa (),
-.BR strndupa ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR strdup ()
-.TQ
-.BR strndup ()
-POSIX.1-2008.
-.TP
-.BR strdupa ()
-.TQ
-.BR strndupa ()
-GNU.
-.SH HISTORY
-.TP
-.BR strdup ()
-SVr4, 4.3BSD-Reno, POSIX.1-2001.
-.TP
-.BR strndup ()
-POSIX.1-2008.
-.TP
-.BR strdupa ()
-.TQ
-.BR strndupa ()
-GNU.
-.SH SEE ALSO
-.BR alloca (3),
-.BR calloc (3),
-.BR free (3),
-.BR malloc (3),
-.BR realloc (3),
-.BR string (3),
-.BR wcsdup (3)
diff --git a/man3/strdupa.3 b/man3/strdupa.3
deleted file mode 100644
index 2dd8f88c3..000000000
--- a/man3/strdupa.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strdup.3
diff --git a/man3/strerror.3 b/man3/strerror.3
deleted file mode 100644
index 1c80449d3..000000000
--- a/man3/strerror.3
+++ /dev/null
@@ -1,318 +0,0 @@
-'\" t
-.\" Copyright (C) 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright (C) 2005, 2014, 2020 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:05:30 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Fri Feb 16 14:25:17 1996 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified Sun Jul 21 20:55:44 1996 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified Mon Oct 15 21:16:25 2001 by John Levon <moz@compsoc.man.ac.uk>
-.\" Modified Tue Oct 16 00:04:43 2001 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified Fri Jun 20 03:04:30 2003 by Andries Brouwer <aeb@cwi.nl>
-.\" 2005-12-13, mtk, Substantial rewrite of strerror_r() description
-.\" Addition of extra material on portability and standards.
-.\"
-.TH strerror 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strerror, strerrorname_np, strerrordesc_np, strerror_r, strerror_l \-
-return string describing error number
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "char *strerror(int " errnum );
-.BI "const char *strerrorname_np(int " errnum );
-.BI "const char *strerrordesc_np(int " errnum );
-.PP
-.BI "int strerror_r(int " errnum ", char " buf [. buflen "], size_t " buflen );
- /* XSI-compliant */
-.PP
-.BI "char *strerror_r(int " errnum ", char " buf [. buflen "], size_t " buflen );
- /* GNU-specific */
-.PP
-.BI "char *strerror_l(int " errnum ", locale_t " locale );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR strerrorname_np (),
-.BR strerrordesc_np ():
-.nf
- _GNU_SOURCE
-.fi
-.PP
-.BR strerror_r ():
-.nf
- The XSI-compliant version is provided if:
- (_POSIX_C_SOURCE >= 200112L) && ! _GNU_SOURCE
- Otherwise, the GNU-specific version is provided.
-.fi
-.SH DESCRIPTION
-The
-.BR strerror ()
-function returns a pointer to a string that describes the error
-code passed in the argument
-.IR errnum ,
-possibly using the
-.B LC_MESSAGES
-part of the current locale to select the appropriate language.
-(For example, if
-.I errnum
-is
-.BR EINVAL ,
-the returned description will be "Invalid argument".)
-This string must not be modified by the application, but may be
-modified by a subsequent call to
-.BR strerror ()
-or
-.BR strerror_l ().
-No other library function, including
-.BR perror (3),
-will modify this string.
-.PP
-Like
-.BR strerror (),
-the
-.BR strerrordesc_np ()
-function returns a pointer to a string that describes the error
-code passed in the argument
-.IR errnum ,
-with the difference that the returned string is not translated
-according to the current locale.
-.PP
-The
-.BR strerrorname_np ()
-function returns a pointer to a string containing the name of the error
-code passed in the argument
-.IR errnum .
-For example, given
-.B EPERM
-as an argument, this function returns a pointer to the string "EPERM".
-.\"
-.SS strerror_r()
-The
-.BR strerror_r ()
-function is similar to
-.BR strerror (),
-but is
-thread safe.
-This function is available in two versions:
-an XSI-compliant version specified in POSIX.1-2001
-(available since glibc 2.3.4, but not POSIX-compliant until glibc 2.13),
-and a GNU-specific version (available since glibc 2.0).
-The XSI-compliant version is provided with the feature test macros
-settings shown in the SYNOPSIS;
-otherwise the GNU-specific version is provided.
-If no feature test macros are explicitly defined,
-then (since glibc 2.4)
-.B _POSIX_C_SOURCE
-is defined by default with the value
-200112L, so that the XSI-compliant version of
-.BR strerror_r ()
-is provided by default.
-.PP
-The XSI-compliant
-.BR strerror_r ()
-is preferred for portable applications.
-It returns the error string in the user-supplied buffer
-.I buf
-of length
-.IR buflen .
-.PP
-The GNU-specific
-.BR strerror_r ()
-returns a pointer to a string containing the error message.
-This may be either a pointer to a string that the function stores in
-.IR buf ,
-or a pointer to some (immutable) static string
-(in which case
-.I buf
-is unused).
-If the function stores a string in
-.IR buf ,
-then at most
-.I buflen
-bytes are stored (the string may be truncated if
-.I buflen
-is too small and
-.I errnum
-is unknown).
-The string always includes a terminating null byte (\[aq]\e0\[aq]).
-.\"
-.SS strerror_l()
-.BR strerror_l ()
-is like
-.BR strerror (),
-but maps
-.I errnum
-to a locale-dependent error message in the locale specified by
-.IR locale .
-The behavior of
-.BR strerror_l ()
-is undefined if
-.I locale
-is the special locale object
-.B LC_GLOBAL_LOCALE
-or is not a valid locale object handle.
-.SH RETURN VALUE
-The
-.BR strerror (),
-.BR strerror_l (),
-and the GNU-specific
-.BR strerror_r ()
-functions return
-the appropriate error description string,
-or an "Unknown error nnn" message if the error number is unknown.
-.PP
-On success,
-.BR strerrorname_np ()
-and
-.BR strerrordesc_np ()
-return the appropriate error description string.
-If
-.I errnum
-is an invalid error number, these functions return NULL.
-.PP
-The XSI-compliant
-.BR strerror_r ()
-function returns 0 on success.
-On error,
-a (positive) error number is returned (since glibc 2.13),
-or \-1 is returned and
-.I errno
-is set to indicate the error (before glibc 2.13).
-.PP
-POSIX.1-2001 and POSIX.1-2008 require that a successful call to
-.BR strerror ()
-or
-.BR strerror_l ()
-shall leave
-.I errno
-unchanged, and note that,
-since no function return value is reserved to indicate an error,
-an application that wishes to check for errors should initialize
-.I errno
-to zero before the call,
-and then check
-.I errno
-after the call.
-.SH ERRORS
-.TP
-.B EINVAL
-The value of
-.I errnum
-is not a valid error number.
-.TP
-.B ERANGE
-Insufficient storage was supplied to contain the error description string.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR strerror ()
-T} Thread safety T{
-MT-Unsafe race:strerror
-T}
-T{
-.BR strerrorname_np (),
-.BR strerrordesc_np ()
-T} Thread safety MT-Safe
-T{
-.BR strerror_r (),
-.BR strerror_l ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR strerror ()
-C11, POSIX.1-2008.
-.TP
-.BR strerror_r ()
-.\" FIXME . for later review when Issue 8 is one day released...
-.\" A future POSIX.1 may remove strerror_r()
-.\" http://austingroupbugs.net/tag_view_page.php?tag_id=8
-.\" http://austingroupbugs.net/view.php?id=508
-.TQ
-.BR strerror_l ()
-POSIX.1-2008.
-.TP
-.BR strerrorname_np ()
-.TQ
-.BR strerrordesc_np ()
-GNU.
-.PP
-POSIX.1-2001 permits
-.BR strerror ()
-to set
-.I errno
-if the call encounters an error, but does not specify what
-value should be returned as the function result in the event of an error.
-On some systems,
-.\" e.g., Solaris 8, HP-UX 11
-.BR strerror ()
-returns NULL if the error number is unknown.
-On other systems,
-.\" e.g., FreeBSD 5.4, Tru64 5.1B
-.BR strerror ()
-returns a string something like "Error nnn occurred" and sets
-.I errno
-to
-.B EINVAL
-if the error number is unknown.
-C99 and POSIX.1-2008 require the return value to be non-NULL.
-.SH HISTORY
-.TP
-.BR strerror ()
-POSIX.1-2001, C89.
-.TP
-.BR strerror_r ()
-POSIX.1-2001.
-.TP
-.BR strerror_l ()
-glibc 2.6.
-POSIX.1-2008.
-.TP
-.BR strerrorname_np ()
-.TQ
-.BR strerrordesc_np ()
-glibc 2.32.
-.SH NOTES
-The GNU C Library uses a buffer of 1024 characters for
-.BR strerror ().
-This buffer size therefore should be sufficient to avoid an
-.B ERANGE
-error when calling
-.BR strerror_r ().
-.PP
-.BR strerrorname_np ()
-and
-.BR strerrordesc_np ()
-are thread-safe and async-signal-safe.
-.SH SEE ALSO
-.BR err (3),
-.BR errno (3),
-.BR error (3),
-.BR perror (3),
-.BR strsignal (3),
-.BR locale (7)
diff --git a/man3/strerror_l.3 b/man3/strerror_l.3
deleted file mode 100644
index 649dd6d91..000000000
--- a/man3/strerror_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strerror.3
diff --git a/man3/strerror_r.3 b/man3/strerror_r.3
deleted file mode 100644
index 649dd6d91..000000000
--- a/man3/strerror_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strerror.3
diff --git a/man3/strerrordesc_np.3 b/man3/strerrordesc_np.3
deleted file mode 100644
index 649dd6d91..000000000
--- a/man3/strerrordesc_np.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strerror.3
diff --git a/man3/strerrorname_np.3 b/man3/strerrorname_np.3
deleted file mode 100644
index 649dd6d91..000000000
--- a/man3/strerrorname_np.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strerror.3
diff --git a/man3/strfmon.3 b/man3/strfmon.3
deleted file mode 100644
index a7f7333a2..000000000
--- a/man3/strfmon.3
+++ /dev/null
@@ -1,210 +0,0 @@
-'\" t
-.\" Copyright (c) 2000 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH strfmon 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strfmon, strfmon_l \- convert monetary value to a string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <monetary.h>
-.PP
-.BI "ssize_t strfmon(char " s "[restrict ." max "], size_t " max ,
-.BI " const char *restrict " format ", ...);"
-.BI "ssize_t strfmon_l(char " s "[restrict ." max "], size_t " max ", \
-locale_t " locale ,
-.BI " const char *restrict " format ", ...);"
-.fi
-.SH DESCRIPTION
-The
-.BR strfmon ()
-function formats the specified monetary amount
-according to the current locale
-and format specification
-.I format
-and places the
-result in the character array
-.I s
-of size
-.IR max .
-.PP
-The
-.BR strfmon_l ()
-function performs the same task,
-but uses
-the locale specified by
-.IR locale .
-The behavior of
-.BR strfmon_l ()
-is undefined if
-.I locale
-is the special locale object
-.B LC_GLOBAL_LOCALE
-(see
-.BR duplocale (3))
-or is not a valid locale object handle.
-.PP
-Ordinary characters in
-.I format
-are copied to
-.I s
-without conversion.
-Conversion specifiers are introduced by a \[aq]%\[aq]
-character.
-Immediately following it there can be zero or more
-of the following flags:
-.TP
-.BI = f
-The single-byte character
-.I f
-is used as the numeric fill character (to be used with
-a left precision, see below).
-When not specified, the space character is used.
-.TP
-.B \[ha]
-Do not use any grouping characters that might be defined
-for the current locale.
-By default, grouping is enabled.
-.TP
-.BR ( " or " +
-The ( flag indicates that negative amounts should be enclosed between
-parentheses.
-The + flag indicates that signs should be handled
-in the default way, that is, amounts are preceded by the locale's
-sign indication, for example, nothing for positive, "\-" for negative.
-.TP
-.B !
-Omit the currency symbol.
-.TP
-.B \-
-Left justify all fields.
-The default is right justification.
-.PP
-Next, there may be a field width: a decimal digit string specifying
-a minimum field width in bytes.
-The default is 0.
-A result smaller than this width is padded with spaces
-(on the left, unless the left-justify flag was given).
-.PP
-Next, there may be a left precision of the form "#" followed by
-a decimal digit string.
-If the number of digits left of the
-radix character is smaller than this, the representation is
-padded on the left with the numeric fill character.
-Grouping characters are not counted in this field width.
-.PP
-Next, there may be a right precision of the form "." followed by
-a decimal digit string.
-The amount being formatted is rounded to
-the specified number of digits prior to formatting.
-The default is specified in the
-.I frac_digits
-and
-.I int_frac_digits
-items of the current locale.
-If the right precision is 0, no radix character is printed.
-(The radix character here is determined by
-.BR LC_MONETARY ,
-and may differ from that specified by
-.BR LC_NUMERIC .)
-.PP
-Finally, the conversion specification must be ended with a
-conversion character.
-The three conversion characters are
-.TP
-.B %
-(In this case, the entire specification must be exactly "%%".)
-Put a \[aq]%\[aq] character in the result string.
-.TP
-.B i
-One argument of type
-.I double
-is converted using the locale's international currency format.
-.TP
-.B n
-One argument of type
-.I double
-is converted using the locale's national currency format.
-.SH RETURN VALUE
-The
-.BR strfmon ()
-function returns the number of characters placed
-in the array
-.IR s ,
-not including the terminating null byte,
-provided the string, including the terminating null byte, fits.
-Otherwise, it sets
-.I errno
-to
-.BR E2BIG ,
-returns \-1, and the contents of the array is undefined.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strfmon ()
-T} Thread safety MT-Safe locale
-T{
-.BR strfmon_l ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH EXAMPLES
-The call
-.PP
-.in +4n
-.EX
-strfmon(buf, sizeof(buf), "[%\[ha]=*#6n] [%=*#6i]",
- 1234.567, 1234.567);
-.EE
-.in
-.PP
-outputs
-.PP
-.in +4n
-.EX
-[€ **1234,57] [EUR **1 234,57]
-.EE
-.in
-.PP
-in the
-.I nl_NL
-locale.
-The
-.IR de_DE ,
-.IR de_CH ,
-.IR en_AU ,
-and
-.I en_GB
-locales yield
-.PP
-.in +4n
-.EX
-[ **1234,57 €] [ **1.234,57 EUR]
-[ Fr. **1234.57] [ CHF **1\[aq]234.57]
-[ $**1234.57] [ AUD**1,234.57]
-[ £**1234.57] [ GBP**1,234.57]
-.EE
-.in
-.SH SEE ALSO
-.BR duplocale (3),
-.BR setlocale (3),
-.BR sprintf (3),
-.BR locale (7)
diff --git a/man3/strfmon_l.3 b/man3/strfmon_l.3
deleted file mode 100644
index cdbc31041..000000000
--- a/man3/strfmon_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strfmon.3
diff --git a/man3/strfromd.3 b/man3/strfromd.3
deleted file mode 100644
index 6101af75c..000000000
--- a/man3/strfromd.3
+++ /dev/null
@@ -1,233 +0,0 @@
-'\" t
-.\" Copyright (c) 2016, IBM Corporation.
-.\" Written by Wainer dos Santos Moschetta <wainersm@linux.vnet.ibm.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" glibc 2.25 source code and manual.
-.\" C99 standard document.
-.\" ISO/IEC TS 18661-1 technical specification.
-.\" snprintf and other man.3 pages.
-.\"
-.TH strfromd 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strfromd, strfromf, strfroml \- convert a floating-point value into
-a string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int strfromd(char " str "[restrict ." n "], size_t " n ,
-.BI " const char *restrict " format ", double " fp ");"
-.BI "int strfromf(char " str "[restrict ." n "], size_t " n ,
-.BI " const char *restrict " format ", float "fp ");"
-.BI "int strfroml(char " str "[restrict ." n "], size_t " n ,
-.BI " const char *restrict " format ", long double " fp ");"
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR strfromd (),
-.BR strfromf (),
-.BR strfroml ():
-.nf
- __STDC_WANT_IEC_60559_BFP_EXT__
-.fi
-.SH DESCRIPTION
-These functions convert a floating-point value,
-.IR fp ,
-into a string of characters,
-.IR str ,
-with a configurable
-.I format
-string.
-At most
-.I n
-characters are stored into
-.IR str .
-.PP
-The terminating null byte ('\e0') is written if and only if
-.I n
-is sufficiently large, otherwise the written string is truncated at
-.I n
-characters.
-.PP
-The
-.BR strfromd (),
-.BR strfromf (),
-and
-.BR strfroml ()
-functions are equivalent to
-.PP
-.in +4n
-.EX
-snprintf(str, n, format, fp);
-.EE
-.in
-.PP
-except for the
-.I format
-string.
-.SS Format of the format string
-The
-.I format
-string must start with the character \[aq]%\[aq].
-This is followed by an optional precision which starts with the period
-character (.), followed by an optional decimal integer.
-If no integer is specified after the period character,
-a precision of zero is used.
-Finally, the format string should have one of the conversion specifiers
-.BR a ,
-.BR A ,
-.BR e ,
-.BR E ,
-.BR f ,
-.BR F ,
-.BR g ,
-or
-.BR G .
-.PP
-The conversion specifier is applied based on the floating-point type
-indicated by the function suffix.
-Therefore, unlike
-.BR snprintf (),
-the format string does not have a length modifier character.
-See
-.BR snprintf (3)
-for a detailed description of these conversion specifiers.
-.PP
-The implementation conforms to the C99 standard on conversion of NaN and
-infinity values:
-.PP
-.RS
-If
-.I fp
-is a NaN, +NaN, or \-NaN, and
-.B f
-(or
-.BR a ,
-.BR e ,
-.BR g )
-is the conversion specifier, the conversion is to "nan", "nan", or "\-nan",
-respectively.
-If
-.B F
-(or
-.BR A ,
-.BR E ,
-.BR G )
-is the conversion specifier, the conversion is to "NAN" or "\-NAN".
-.PP
-Likewise if
-.I fp
-is infinity, it is converted to [\-]inf or [\-]INF.
-.RE
-.PP
-A malformed
-.I format
-string results in undefined behavior.
-.SH RETURN VALUE
-The
-.BR strfromd (),
-.BR strfromf (),
-and
-.BR strfroml ()
-functions return the number of characters that would have been written in
-.I str
-if
-.I n
-had enough space,
-not counting the terminating null byte.
-Thus, a return value of
-.I n
-or greater means that the output was truncated.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7)
-and the
-.B POSIX Safety Concepts
-section in GNU C Library manual.
-.PP
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strfromd (),
-.BR strfromf (),
-.BR strfroml ()
-T} Thread safety MT-Safe locale
-\^ Async-signal safety AS-Unsafe heap
-\^ Async-cancel safety AC-Unsafe mem
-.TE
-.hy
-.ad
-.sp 1
-Note: these attributes are preliminary.
-.SH STANDARDS
-ISO/IEC TS 18661-1.
-.SH VERSIONS
-.TP
-.BR strfromd ()
-.TQ
-.BR strfromf ()
-.TQ
-.BR strfroml ()
-glibc 2.25.
-.SH NOTES
-These functions take account of the
-.B LC_NUMERIC
-category of the current locale.
-.SH EXAMPLES
-To convert the value 12.1 as a float type to a string using decimal
-notation, resulting in "12.100000":
-.PP
-.in +4n
-.EX
-#define __STDC_WANT_IEC_60559_BFP_EXT__
-#include <stdlib.h>
-int ssize = 10;
-char s[ssize];
-strfromf(s, ssize, "%f", 12.1);
-.EE
-.in
-.PP
-To convert the value 12.3456 as a float type to a string using
-decimal notation with two digits of precision, resulting in "12.35":
-.PP
-.in +4n
-.EX
-#define __STDC_WANT_IEC_60559_BFP_EXT__
-#include <stdlib.h>
-int ssize = 10;
-char s[ssize];
-strfromf(s, ssize, "%.2f", 12.3456);
-.EE
-.in
-.PP
-To convert the value 12.345e19 as a double type to a string using
-scientific notation with zero digits of precision, resulting in "1E+20":
-.PP
-.in +4n
-.EX
-#define __STDC_WANT_IEC_60559_BFP_EXT__
-#include <stdlib.h>
-int ssize = 10;
-char s[ssize];
-strfromd(s, ssize, "%.E", 12.345e19);
-.EE
-.in
-.SH SEE ALSO
-.BR atof (3),
-.BR snprintf (3),
-.BR strtod (3)
diff --git a/man3/strfromf.3 b/man3/strfromf.3
deleted file mode 100644
index d20099dc8..000000000
--- a/man3/strfromf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strfromd.3
diff --git a/man3/strfroml.3 b/man3/strfroml.3
deleted file mode 100644
index d20099dc8..000000000
--- a/man3/strfroml.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strfromd.3
diff --git a/man3/strfry.3 b/man3/strfry.3
deleted file mode 100644
index f1f539ea0..000000000
--- a/man3/strfry.3
+++ /dev/null
@@ -1,58 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sun Jul 25 10:39:43 1993 by Rik Faith (faith@cs.unc.edu)
-.TH strfry 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strfry \- randomize a string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <string.h>
-.PP
-.BI "char *strfry(char *" string );
-.fi
-.SH DESCRIPTION
-The
-.BR strfry ()
-function randomizes the contents of
-.I string
-by randomly swapping characters in the string.
-The result is an anagram of
-.IR string .
-.SH RETURN VALUE
-The
-.BR strfry ()
-functions returns a pointer to the randomized
-string.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strfry ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-GNU.
-.SH SEE ALSO
-.BR memfrob (3),
-.BR string (3)
diff --git a/man3/strftime.3 b/man3/strftime.3
deleted file mode 100644
index 6d77faf14..000000000
--- a/man3/strftime.3
+++ /dev/null
@@ -1,780 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" GNU texinfo documentation on glibc date/time functions.
-.\" Modified Sat Jul 24 18:03:44 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Applied fix by Wolfgang Franke, aeb, 961011
-.\" Corrected return value, aeb, 970307
-.\" Added Single UNIX Spec conversions and %z, aeb/esr, 990329.
-.\" 2005-11-22 mtk, added glibc Notes covering optional 'flag' and
-.\" 'width' components of conversion specifications.
-.\"
-.TH strftime 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strftime \- format date and time
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <time.h>
-.PP
-.BI "size_t strftime(char " s "[restrict ." max "], size_t " max ,
-.BI " const char *restrict " format ,
-.BI " const struct tm *restrict " tm );
-.PP
-.BI "size_t strftime_l(char " s "[restrict ." max "], size_t " max ,
-.BI " const char *restrict " format ,
-.BI " const struct tm *restrict " tm ,
-.BI " locale_t " locale );
-.fi
-.SH DESCRIPTION
-The
-.BR strftime ()
-function formats the broken-down time
-.I tm
-according to the format specification
-.I format
-and places the
-result in the character array
-.I s
-of size
-.IR max .
-The broken-down time structure
-.I tm
-is defined in
-.IR <time.h> .
-See also
-.BR ctime (3).
-.\" FIXME . POSIX says: Local timezone information is used as though
-.\" strftime() called tzset(). But this doesn't appear to be the case
-.PP
-The format specification is a null-terminated string and may contain
-special character sequences called
-.IR "conversion specifications",
-each of which is introduced by a \[aq]%\[aq] character and terminated by
-some other character known as a
-.IR "conversion specifier character".
-All other character sequences are
-.IR "ordinary character sequences".
-.PP
-The characters of ordinary character sequences (including the null byte)
-are copied verbatim from
-.I format
-to
-.IR s .
-However, the characters
-of conversion specifications are replaced as shown in the list below.
-In this list, the field(s) employed from the
-.I tm
-structure are also shown.
-.TP
-.B %a
-The abbreviated name of the day of the week according to the current locale.
-(Calculated from
-.IR tm_wday .)
-(The specific names used in the current locale can be obtained by calling
-.BR nl_langinfo (3)
-with
-.BR ABDAY_ { 1 \[en] 7 }
-as an argument.)
-.TP
-.B %A
-The full name of the day of the week according to the current locale.
-(Calculated from
-.IR tm_wday .)
-(The specific names used in the current locale can be obtained by calling
-.BR nl_langinfo (3)
-with
-.BR DAY_ { 1 \[en] 7 }
-as an argument.)
-.TP
-.B %b
-The abbreviated month name according to the current locale.
-(Calculated from
-.IR tm_mon .)
-(The specific names used in the current locale can be obtained by calling
-.BR nl_langinfo (3)
-with
-.BR ABMON_ { 1 \[en] 12 }
-as an argument.)
-.TP
-.B %B
-The full month name according to the current locale.
-(Calculated from
-.IR tm_mon .)
-(The specific names used in the current locale can be obtained by calling
-.BR nl_langinfo (3)
-with
-.BR MON_ { 1 \[en] 12 }
-as an argument.)
-.TP
-.B %c
-The preferred date and time representation for the current locale.
-(The specific format used in the current locale can be obtained by calling
-.BR nl_langinfo (3)
-with
-.B D_T_FMT
-as an argument for the
-.B %c
-conversion specification, and with
-.B ERA_D_T_FMT
-for the
-.B %Ec
-conversion specification.)
-(In the POSIX locale this is equivalent to
-.BR "%a %b %e %H:%M:%S %Y" .)
-.TP
-.B %C
-The century number (year/100) as a 2-digit integer. (SU)
-(The
-.B %EC
-conversion specification corresponds to the name of the era.)
-(Calculated from
-.IR tm_year .)
-.TP
-.B %d
-The day of the month as a decimal number (range 01 to 31).
-(Calculated from
-.IR tm_mday .)
-.TP
-.B %D
-Equivalent to
-.BR %m/%d/%y .
-(Yecch\[em]for Americans only.
-Americans should note that in other countries
-.B %d/%m/%y
-is rather common.
-This means that in international context this format is
-ambiguous and should not be used.) (SU)
-.TP
-.B %e
-Like
-.BR %d ,
-the day of the month as a decimal number, but a leading
-zero is replaced by a space. (SU)
-(Calculated from
-.IR tm_mday .)
-.TP
-.B %E
-Modifier: use alternative ("era-based") format, see below. (SU)
-.TP
-.B %F
-Equivalent to
-.B %Y\-%m\-%d
-(the ISO\ 8601 date format). (C99)
-.TP
-.B %G
-The ISO\ 8601 week-based year (see NOTES) with century as a decimal number.
-The 4-digit year corresponding to the ISO week number (see
-.BR %V ).
-This has the same format and value as
-.BR %Y ,
-except that if the ISO week number belongs to the previous or next year,
-that year is used instead. (TZ)
-(Calculated from
-.IR tm_year ,
-.IR tm_yday ,
-and
-.IR tm_wday .)
-.TP
-.B %g
-Like
-.BR %G ,
-but without century, that is, with a 2-digit year (00\[en]99). (TZ)
-(Calculated from
-.IR tm_year ,
-.IR tm_yday ,
-and
-.IR tm_wday .)
-.TP
-.B %h
-Equivalent to
-.BR %b .
-(SU)
-.TP
-.B %H
-The hour as a decimal number using a 24-hour clock (range 00 to 23).
-(Calculated from
-.IR tm_hour .)
-.TP
-.B %I
-The hour as a decimal number using a 12-hour clock (range 01 to 12).
-(Calculated from
-.IR tm_hour .)
-.TP
-.B %j
-The day of the year as a decimal number (range 001 to 366).
-(Calculated from
-.IR tm_yday .)
-.TP
-.B %k
-The hour (24-hour clock) as a decimal number (range 0 to 23);
-single digits are preceded by a blank.
-(See also
-.BR %H .)
-(Calculated from
-.IR tm_hour .)
-(TZ)
-.TP
-.B %l
-The hour (12-hour clock) as a decimal number (range 1 to 12);
-single digits are preceded by a blank.
-(See also
-.BR %I .)
-(Calculated from
-.IR tm_hour .)
-(TZ)
-.TP
-.B %m
-The month as a decimal number (range 01 to 12).
-(Calculated from
-.IR tm_mon .)
-.TP
-.B %M
-The minute as a decimal number (range 00 to 59).
-(Calculated from
-.IR tm_min .)
-.TP
-.B %n
-A newline character. (SU)
-.TP
-.B %O
-Modifier: use alternative numeric symbols, see below. (SU)
-.TP
-.B %p
-Either "AM" or "PM" according to the given time value, or the
-corresponding strings for the current locale.
-Noon is treated as "PM" and midnight as "AM".
-(Calculated from
-.IR tm_hour .)
-(The specific string representations used for "AM" and "PM"
-in the current locale can be obtained by calling
-.BR nl_langinfo (3)
-with
-.BR AM_STR " and " PM_STR ,
-respectively.)
-.TP
-.B %P
-Like
-.B %p
-but in lowercase: "am" or "pm" or a corresponding
-string for the current locale.
-(Calculated from
-.IR tm_hour .)
-(GNU)
-.TP
-.B %r
-The time in a.m. or p.m. notation.
-(SU)
-(The specific format used in the current locale can be obtained by calling
-.BR nl_langinfo (3)
-with
-.B T_FMT_AMPM
-as an argument.)
-(In the POSIX locale this is equivalent to
-.BR "%I:%M:%S %p" .)
-.TP
-.B %R
-The time in 24-hour notation
-.RB ( %H:%M ).
-(SU)
-For a version including the seconds, see
-.B %T
-below.
-.TP
-.B %s
-The number of seconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC). (TZ)
-(Calculated from
-.IR mktime(tm) .)
-.TP
-.B %S
-The second as a decimal number (range 00 to 60).
-(The range is up to 60 to allow for occasional leap seconds.)
-(Calculated from
-.IR tm_sec .)
-.TP
-.B %t
-A tab character. (SU)
-.TP
-.B %T
-The time in 24-hour notation
-.RB ( %H:%M:%S ).
-(SU)
-.TP
-.B %u
-The day of the week as a decimal, range 1 to 7, Monday being 1.
-See also
-.BR %w .
-(Calculated from
-.IR tm_wday .)
-(SU)
-.TP
-.B %U
-The week number of the current year as a decimal number,
-range 00 to 53, starting with the first Sunday as the first day
-of week 01.
-See also
-.B %V
-and
-.BR %W .
-(Calculated from
-.I tm_yday
-and
-.IR tm_wday .)
-.TP
-.B %V
-The ISO\ 8601 week number (see NOTES) of the current year as a decimal number,
-range 01 to 53, where week 1 is the first week that has at least
-4 days in the new year.
-See also
-.B %U
-and
-.BR %W .
-(Calculated from
-.IR tm_year ,
-.IR tm_yday ,
-and
-.IR tm_wday .)
-(SU)
-.TP
-.B %w
-The day of the week as a decimal, range 0 to 6, Sunday being 0.
-See also
-.BR %u .
-(Calculated from
-.IR tm_wday .)
-.TP
-.B %W
-The week number of the current year as a decimal number,
-range 00 to 53, starting with the first Monday as the first day of week 01.
-(Calculated from
-.I tm_yday
-and
-.IR tm_wday .)
-.TP
-.B %x
-The preferred date representation for the current locale without the time.
-(The specific format used in the current locale can be obtained by calling
-.BR nl_langinfo (3)
-with
-.B D_FMT
-as an argument for the
-.B %x
-conversion specification, and with
-.B ERA_D_FMT
-for the
-.B %Ex
-conversion specification.)
-(In the POSIX locale this is equivalent to
-.BR %m/%d/%y .)
-.TP
-.B %X
-The preferred time representation for the current locale without the date.
-(The specific format used in the current locale can be obtained by calling
-.BR nl_langinfo (3)
-with
-.B T_FMT
-as an argument for the
-.B %X
-conversion specification, and with
-.B ERA_T_FMT
-for the
-.B %EX
-conversion specification.)
-(In the POSIX locale this is equivalent to
-.BR %H:%M:%S .)
-.TP
-.B %y
-The year as a decimal number without a century (range 00 to 99).
-(The
-.B %Ey
-conversion specification corresponds to the year since the beginning of the era
-denoted by the
-.B %EC
-conversion specification.)
-(Calculated from
-.IR tm_year )
-.TP
-.B %Y
-The year as a decimal number including the century.
-(The
-.B %EY
-conversion specification corresponds to
-the full alternative year representation.)
-(Calculated from
-.IR tm_year )
-.TP
-.B %z
-The
-.I +hhmm
-or
-.I \-hhmm
-numeric timezone (that is, the hour and minute offset from UTC). (SU)
-.TP
-.B %Z
-The timezone name or abbreviation.
-.TP
-.B %+
-.\" Nov 05 -- Not in Linux/glibc, but is in some BSDs (according to
-.\" their man pages)
-The date and time in
-.BR date (1)
-format. (TZ)
-(Not supported in glibc2.)
-.TP
-.B %%
-A literal \[aq]%\[aq] character.
-.PP
-Some conversion specifications can be modified by preceding the
-conversion specifier character by the
-.B E
-or
-.B O
-.I modifier
-to indicate that an alternative format should be used.
-If the alternative format or specification does not exist for
-the current locale, the behavior will be as if the unmodified
-conversion specification were used. (SU)
-The Single UNIX Specification mentions
-.BR %Ec ,
-.BR %EC ,
-.BR %Ex ,
-.BR %EX ,
-.BR %Ey ,
-.BR %EY ,
-.BR %Od ,
-.BR %Oe ,
-.BR %OH ,
-.BR %OI ,
-.BR %Om ,
-.BR %OM ,
-.BR %OS ,
-.BR %Ou ,
-.BR %OU ,
-.BR %OV ,
-.BR %Ow ,
-.BR %OW ,
-.BR %Oy ,
-where the effect of the
-.B O
-modifier is to use
-alternative numeric symbols (say, roman numerals), and that of the
-.B E
-modifier is to use a locale-dependent alternative representation.
-The rules governing date representation with the
-.B E
-modifier can be obtained by supplying
-.B ERA
-as an argument to a
-.BR nl_langinfo (3).
-One example of such alternative forms is the Japanese era calendar scheme in the
-.B ja_JP
-glibc locale.
-.PP
-.BR strftime_l ()
-is equivalent to
-.BR strftime (),
-except it uses the specified
-.I locale
-instead of the current locale.
-The behaviour is undefined if
-.I locale
-is invalid or
-.BR LC_GLOBAL_LOCALE .
-.SH RETURN VALUE
-Provided that the result string,
-including the terminating null byte, does not exceed
-.I max
-bytes,
-.BR strftime ()
-returns the number of bytes (excluding the terminating null byte)
-placed in the array
-.IR s .
-If the length of the result string (including the terminating null byte)
-would exceed
-.I max
-bytes, then
-.BR strftime ()
-returns 0, and the contents of the array are undefined.
-.\" (This behavior applies since at least libc 4.4.4;
-.\" very old versions of libc, such as libc 4.4.1,
-.\" would return
-.\" .I max
-.\" if the array was too small.)
-.PP
-Note that the return value 0 does not necessarily indicate an error.
-For example, in many locales
-.B %p
-yields an empty string.
-An empty
-.I format
-string will likewise yield an empty string.
-.SH ENVIRONMENT
-The environment variables
-.B TZ
-and
-.B LC_TIME
-are used.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strftime (),
-.BR strftime_l ()
-T} Thread safety MT-Safe env locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR strftime ()
-C11, POSIX.1-2008.
-.TP
-.BR strftime_l ()
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR strftime ()
-SVr4, C89.
-.\" FIXME strftime() is in POSIX.1-2001 and POSIX.1-2008, but the details
-.\" in the standards changed across versions. Investigate and
-.\" write up.
-.TP
-.BR strftime_l ()
-POSIX.1-2008.
-.PP
-There are strict inclusions between the set of conversions
-given in ANSI C (unmarked), those given in the Single UNIX Specification
-(marked SU), those given in Olson's timezone package (marked TZ),
-and those given in glibc (marked GNU), except that
-.B %+
-is not supported in glibc2.
-On the other hand glibc2 has several more extensions.
-POSIX.1 only refers to ANSI C; POSIX.2 describes under
-.BR date (1)
-several extensions that could apply to
-.BR strftime ()
-as well.
-The
-.B %F
-conversion is in C99 and POSIX.1-2001.
-.PP
-In SUSv2, the
-.B %S
-specifier allowed a range of 00 to 61,
-to allow for the theoretical possibility of a minute that
-included a double leap second
-(there never has been such a minute).
-.SH NOTES
-.SS ISO 8601 week dates
-.BR %G ,
-.BR %g ,
-and
-.B %V
-yield values calculated from the week-based year defined by the
-ISO\ 8601 standard.
-In this system, weeks start on a Monday, and are numbered from 01,
-for the first week, up to 52 or 53, for the last week.
-Week 1 is the first week where four or more days fall within the
-new year (or, synonymously, week 01 is:
-the first week of the year that contains a Thursday;
-or, the week that has 4 January in it).
-When three or fewer days of the first calendar week of the new year fall
-within that year,
-then the ISO 8601 week-based system counts those days as part of week 52
-or 53 of the preceding year.
-For example, 1 January 2010 is a Friday,
-meaning that just three days of that calendar week fall in 2010.
-Thus, the ISO\ 8601 week-based system considers these days to be part of
-week 53
-.RB ( %V )
-of the year 2009
-.RB ( %G );
-week 01 of ISO\ 8601 year 2010 starts on Monday, 4 January 2010.
-Similarly, the first two days of January 2011 are considered to be part
-of week 52 of the year 2010.
-.SS glibc notes
-glibc provides some extensions for conversion specifications.
-(These extensions are not specified in POSIX.1-2001, but a few other
-systems provide similar features.)
-.\" HP-UX and Tru64 also have features like this.
-Between the \[aq]%\[aq] character and the conversion specifier character,
-an optional
-.I flag
-and field
-.I width
-may be specified.
-(These precede the
-.B E
-or
-.B O
-modifiers, if present.)
-.PP
-The following flag characters are permitted:
-.TP
-.B _
-(underscore)
-Pad a numeric result string with spaces.
-.TP
-.B \-
-(dash)
-Do not pad a numeric result string.
-.TP
-.B 0
-Pad a numeric result string with zeros even if the conversion
-specifier character uses space-padding by default.
-.TP
-.B \[ha]
-Convert alphabetic characters in result string to uppercase.
-.TP
-.B #
-Swap the case of the result string.
-(This flag works only with certain conversion specifier characters,
-and of these, it is only really useful with
-.BR %Z .)
-.PP
-An optional decimal width specifier may follow the (possibly absent) flag.
-If the natural size of the field is smaller than this width,
-then the result string is padded (on the left) to the specified width.
-.SH BUGS
-If the output string would exceed
-.I max
-bytes,
-.I errno
-is
-.I not
-set.
-This makes it impossible to distinguish this error case from cases where the
-.I format
-string legitimately produces a zero-length output string.
-POSIX.1-2001
-does
-.I not
-specify any
-.I errno
-settings for
-.BR strftime ().
-.PP
-Some buggy versions of
-.BR gcc (1)
-complain about the use of
-.BR %c :
-.IR "warning: \`%c\[aq] yields only last 2 digits of year in some locales" .
-Of course programmers are encouraged to use
-.BR %c ,
-as it gives the preferred date and time representation.
-One meets all kinds of strange obfuscations
-to circumvent this
-.BR gcc (1)
-problem.
-A relatively clean one is to add an
-intermediate function
-.PP
-.in +4n
-.EX
-size_t
-my_strftime(char *s, size_t max, const char *fmt,
- const struct tm *tm)
-{
- return strftime(s, max, fmt, tm);
-}
-.EE
-.in
-.PP
-Nowadays,
-.BR gcc (1)
-provides the
-.I \-Wno\-format\-y2k
-option to prevent the warning,
-so that the above workaround is no longer required.
-.SH EXAMPLES
-.B RFC\~2822-compliant date format
-(with an English locale for %a and %b)
-.PP
-.in +4n
-.EX
-"%a,\ %d\ %b\ %Y\ %T\ %z"
-.EE
-.in
-.PP
-.B RFC\~822-compliant date format
-(with an English locale for %a and %b)
-.PP
-.in +4n
-.EX
-"%a,\ %d\ %b\ %y\ %T\ %z"
-.EE
-.in
-.SS Example program
-The program below can be used to experiment with
-.BR strftime ().
-.PP
-Some examples of the result string produced by the glibc implementation of
-.BR strftime ()
-are as follows:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out \[aq]%m\[aq]"
-Result string is "11"
-.RB "$" " ./a.out \[aq]%5m\[aq]"
-Result string is "00011"
-.RB "$" " ./a.out \[aq]%_5m\[aq]"
-Result string is " 11"
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (strftime.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-\&
-int
-main(int argc, char *argv[])
-{
- char outstr[200];
- time_t t;
- struct tm *tmp;
-\&
- t = time(NULL);
- tmp = localtime(&t);
- if (tmp == NULL) {
- perror("localtime");
- exit(EXIT_FAILURE);
- }
-\&
- if (strftime(outstr, sizeof(outstr), argv[1], tmp) == 0) {
- fprintf(stderr, "strftime returned 0");
- exit(EXIT_FAILURE);
- }
-\&
- printf("Result string is \e"%s\e"\en", outstr);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR date (1),
-.BR time (2),
-.BR ctime (3),
-.BR nl_langinfo (3),
-.BR setlocale (3),
-.BR sprintf (3),
-.BR strptime (3)
diff --git a/man3/strftime_l.3 b/man3/strftime_l.3
deleted file mode 100644
index 02e797a23..000000000
--- a/man3/strftime_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strftime.3
diff --git a/man3/string.3 b/man3/string.3
deleted file mode 100644
index aba5efd2b..000000000
--- a/man3/string.3
+++ /dev/null
@@ -1,224 +0,0 @@
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sun Jul 25 10:54:31 1993, Rik Faith (faith@cs.unc.edu)
-.TH string 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-stpcpy, strcasecmp, strcat, strchr, strcmp, strcoll, strcpy, strcspn,
-strdup, strfry, strlen, strncat, strncmp, strncpy, strncasecmp, strpbrk,
-strrchr, strsep, strspn, strstr, strtok, strxfrm, index, rindex
-\- string operations
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.B #include <strings.h>
-.TP
-.BI "int strcasecmp(const char *" s1 ", const char *" s2 );
-Compare the strings
-.I s1
-and
-.I s2
-ignoring case.
-.TP
-.BI "int strncasecmp(const char " s1 [. n "], const char " s2 [. n "], \
-size_t " n );
-Compare the first
-.I n
-bytes of the strings
-.I s1
-and
-.I s2
-ignoring case.
-.TP
-.BI "char *index(const char *" s ", int " c );
-Identical to
-.BR strchr (3).
-.TP
-.BI "char *rindex(const char *" s ", int " c );
-Identical to
-.BR strrchr (3).
-.TP
-.B #include <string.h>
-.TP
-.BI "char *stpcpy(char *restrict " dest ", const char *restrict " src );
-Copy a string from
-.I src
-to
-.IR dest ,
-returning a pointer to the end of the resulting string at
-.IR dest .
-.TP
-.BI "char *strcat(char *restrict " dest ", const char *restrict " src );
-Append the string
-.I src
-to the string
-.IR dest ,
-returning a pointer
-.IR dest .
-.TP
-.BI "char *strchr(const char *" s ", int " c );
-Return a pointer to the first occurrence of the character
-.I c
-in the string
-.IR s .
-.TP
-.BI "int strcmp(const char *" s1 ", const char *" s2 );
-Compare the strings
-.I s1
-with
-.IR s2 .
-.TP
-.BI "int strcoll(const char *" s1 ", const char *" s2 );
-Compare the strings
-.I s1
-with
-.I s2
-using the current locale.
-.TP
-.BI "char *strcpy(char *restrict " dest ", const char *restrict " src );
-Copy the string
-.I src
-to
-.IR dest ,
-returning a pointer to the start of
-.IR dest .
-.TP
-.BI "size_t strcspn(const char *" s ", const char *" reject );
-Calculate the length of the initial segment of the string
-.I s
-which does not contain any of bytes in the string
-.IR reject ,
-.TP
-.BI "char *strdup(const char *" s );
-Return a duplicate of the string
-.I s
-in memory allocated using
-.BR malloc (3).
-.TP
-.BI "char *strfry(char *" string );
-Randomly swap the characters in
-.IR string .
-.TP
-.BI "size_t strlen(const char *" s );
-Return the length of the string
-.IR s .
-.TP
-.nf
-.BI "char *strncat(char " dest "[restrict strlen(." dest ") + ." n " + 1],"
-.BI " const char " src "[restrict ." n ],
-.BI " size_t " n );
-.fi
-Append at most
-.I n
-bytes from the unterminated string
-.I src
-to the string
-.IR dest ,
-returning a pointer to
-.IR dest .
-.TP
-.BI "int strncmp(const char " s1 [. n "], const char " s2 [. n "], size_t " n );
-Compare at most
-.I n
-bytes of the strings
-.I s1
-and
-.IR s2 .
-.TP
-.BI "char *strpbrk(const char *" s ", const char *" accept );
-Return a pointer to the first occurrence in the string
-.I s
-of one of the bytes in the string
-.IR accept .
-.TP
-.BI "char *strrchr(const char *" s ", int " c );
-Return a pointer to the last occurrence of the character
-.I c
-in the string
-.IR s .
-.TP
-.BI "char *strsep(char **restrict " stringp ", const char *restrict " delim );
-Extract the initial token in
-.I stringp
-that is delimited by one of the bytes in
-.IR delim .
-.TP
-.BI "size_t strspn(const char *" s ", const char *" accept );
-Calculate the length of the starting segment in the string
-.I s
-that consists entirely of bytes in
-.IR accept .
-.TP
-.BI "char *strstr(const char *" haystack ", const char *" needle );
-Find the first occurrence of the substring
-.I needle
-in the string
-.IR haystack ,
-returning a pointer to the found substring.
-.TP
-.BI "char *strtok(char *restrict " s ", const char *restrict " delim );
-Extract tokens from the string
-.I s
-that are delimited by one of the bytes in
-.IR delim .
-.TP
-.nf
-.BI "size_t strxfrm(char " dest "[restrict ." n "], \
-const char " src "[restrict ." n ],
-.BI " size_t " n );
-.fi
-Transforms
-.I src
-to the current locale and copies the first
-.I n
-bytes to
-.IR dest .
-.SS Obsolete functions
-.TP
-.nf
-.BI "char *strncpy(char " dest "[restrict ." n "], \
-const char " src "[restrict ." n ],
-.BI " size_t " n );
-.fi
-Copy at most
-.I n
-bytes from string
-.I src
-to
-.IR dest ,
-returning a pointer to the start of
-.IR dest .
-.SH DESCRIPTION
-The string functions perform operations on null-terminated
-strings.
-See the individual man pages for descriptions of each function.
-.SH SEE ALSO
-.BR bstring (3),
-.BR stpcpy (3),
-.BR strcasecmp (3),
-.BR strcat (3),
-.BR strchr (3),
-.BR strcmp (3),
-.BR strcoll (3),
-.BR strcpy (3),
-.BR strcspn (3),
-.BR strdup (3),
-.BR strfry (3),
-.BR strlen (3),
-.BR strncasecmp (3),
-.BR strncat (3),
-.BR strncmp (3),
-.BR strncpy (3),
-.BR strpbrk (3),
-.BR strrchr (3),
-.BR strsep (3),
-.BR strspn (3),
-.BR strstr (3),
-.BR strtok (3),
-.BR strxfrm (3)
diff --git a/man3/strlen.3 b/man3/strlen.3
deleted file mode 100644
index ac587a48f..000000000
--- a/man3/strlen.3
+++ /dev/null
@@ -1,64 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:02:26 1993 by Rik Faith (faith@cs.unc.edu)
-.TH strlen 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strlen \- calculate the length of a string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "size_t strlen(const char *" s );
-.fi
-.SH DESCRIPTION
-The
-.BR strlen ()
-function calculates the length of the string pointed to by
-.IR s ,
-excluding the terminating null byte (\[aq]\e0\[aq]).
-.SH RETURN VALUE
-The
-.BR strlen ()
-function returns the number of bytes in the string pointed to by
-.IR s .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strlen ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.SH NOTES
-In cases where the input buffer may not contain
-a terminating null byte,
-.BR strnlen (3)
-should be used instead.
-.SH SEE ALSO
-.BR string (3),
-.BR strnlen (3),
-.BR wcslen (3),
-.BR wcsnlen (3)
diff --git a/man3/strncasecmp.3 b/man3/strncasecmp.3
deleted file mode 100644
index fd3b6715e..000000000
--- a/man3/strncasecmp.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strcasecmp.3
diff --git a/man3/strncat.3 b/man3/strncat.3
deleted file mode 100644
index 266268199..000000000
--- a/man3/strncat.3
+++ /dev/null
@@ -1,133 +0,0 @@
-'\" t
-.\" Copyright 2022 Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH strncat 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strncat \- concatenate a null-padded character sequence into a string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "char *strncat(char *restrict " dst ", const char " src "[restrict ." sz ],
-.BI " size_t " sz );
-.fi
-.SH DESCRIPTION
-This function catenates the input character sequence
-contained in a null-padded fixed-width buffer,
-into a string at the buffer pointed to by
-.IR dst .
-The programmer is responsible for allocating a destination buffer large enough,
-that is,
-.IR "strlen(dst) + strnlen(src, sz) + 1" .
-.PP
-An implementation of this function might be:
-.PP
-.in +4n
-.EX
-char *
-strncat(char *restrict dst, const char *restrict src, size_t sz)
-{
- int len;
- char *p;
-\&
- len = strnlen(src, sz);
- p = dst + strlen(dst);
- p = mempcpy(p, src, len);
- *p = \[aq]\e0\[aq];
-\&
- return dst;
-}
-.EE
-.in
-.SH RETURN VALUE
-.BR strncat ()
-returns
-.IR dst .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strncat ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.SH CAVEATS
-The name of this function is confusing.
-This function has no relation to
-.BR strncpy (3).
-.PP
-If the destination buffer is not large enough,
-the behavior is undefined.
-See
-.B _FORTIFY_SOURCE
-in
-.BR feature_test_macros (7).
-.SH BUGS
-This function can be very inefficient.
-Read about
-.UR https://www.joelonsoftware.com/\:2001/12/11/\:back\-to\-basics/
-Shlemiel the painter
-.UE .
-.SH EXAMPLES
-.\" SRC BEGIN (strncat.c)
-.EX
-#include <err.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-#define nitems(arr) (sizeof((arr)) / sizeof((arr)[0]))
-\&
-int
-main(void)
-{
- size_t maxsize;
-\&
- // Null-padded fixed-width character sequences
- char pre[4] = "pre.";
- char new_post[50] = ".foo.bar";
-\&
- // Strings
- char post[] = ".post";
- char src[] = "some_long_body.post";
- char *dest;
-\&
- maxsize = nitems(pre) + strlen(src) \- strlen(post) +
- nitems(new_post) + 1;
- dest = malloc(sizeof(*dest) * maxsize);
- if (dest == NULL)
- err(EXIT_FAILURE, "malloc()");
-\&
- dest[0] = \[aq]\e0\[aq]; // There's no 'cpy' function to this 'cat'.
- strncat(dest, pre, nitems(pre));
- strncat(dest, src, strlen(src) \- strlen(post));
- strncat(dest, new_post, nitems(new_post));
-\&
- puts(dest); // "pre.some_long_body.foo.bar"
- free(dest);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.in
-.SH SEE ALSO
-.BR string (3),
-.BR string_copying (3)
diff --git a/man3/strncmp.3 b/man3/strncmp.3
deleted file mode 100644
index 1007f4346..000000000
--- a/man3/strncmp.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strcmp.3
diff --git a/man3/strncpy.3 b/man3/strncpy.3
deleted file mode 100644
index 4710b0201..000000000
--- a/man3/strncpy.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stpncpy.3
diff --git a/man3/strndup.3 b/man3/strndup.3
deleted file mode 100644
index 2dd8f88c3..000000000
--- a/man3/strndup.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strdup.3
diff --git a/man3/strndupa.3 b/man3/strndupa.3
deleted file mode 100644
index 2dd8f88c3..000000000
--- a/man3/strndupa.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strdup.3
diff --git a/man3/strnlen.3 b/man3/strnlen.3
deleted file mode 100644
index 9f922f6ca..000000000
--- a/man3/strnlen.3
+++ /dev/null
@@ -1,86 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\"
-.TH strnlen 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strnlen \- determine the length of a fixed-size string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "size_t strnlen(const char " s [. maxlen "], size_t " maxlen );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR strnlen ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR strnlen ()
-function returns the number of bytes in the string
-pointed to by
-.IR s ,
-excluding the terminating null byte (\[aq]\e0\[aq]),
-but at most
-.IR maxlen .
-In doing this,
-.BR strnlen ()
-looks only at the first
-.I maxlen
-characters in the string pointed to by
-.I s
-and never beyond
-.IR s[maxlen\-1] .
-.SH RETURN VALUE
-The
-.BR strnlen ()
-function returns
-.IR strlen(s) ,
-if that is less than
-.IR maxlen ,
-or
-.I maxlen
-if there is no null terminating (\[aq]\e0\[aq]) among the first
-.I maxlen
-characters pointed to by
-.IR s .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strnlen ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2008.
-.SH SEE ALSO
-.BR strlen (3)
diff --git a/man3/strpbrk.3 b/man3/strpbrk.3
deleted file mode 100644
index 9d4ac9327..000000000
--- a/man3/strpbrk.3
+++ /dev/null
@@ -1,69 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:01:24 1993 by Rik Faith (faith@cs.unc.edu)
-.TH strpbrk 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strpbrk \- search a string for any of a set of bytes
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "char *strpbrk(const char *" s ", const char *" accept );
-.fi
-.SH DESCRIPTION
-The
-.BR strpbrk ()
-function locates the first occurrence in the
-string
-.I s
-of any of the bytes in the string
-.IR accept .
-.SH RETURN VALUE
-The
-.BR strpbrk ()
-function returns a pointer to the byte in
-.I s
-that matches one of the bytes in
-.IR accept ,
-or NULL
-if no such byte is found.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strpbrk ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR memchr (3),
-.BR strchr (3),
-.BR string (3),
-.BR strsep (3),
-.BR strspn (3),
-.BR strstr (3),
-.BR strtok (3),
-.BR wcspbrk (3)
diff --git a/man3/strptime.3 b/man3/strptime.3
deleted file mode 100644
index 0a1bf4c49..000000000
--- a/man3/strptime.3
+++ /dev/null
@@ -1,416 +0,0 @@
-'\" t
-.\" Copyright 1993 Mitchum DSouza <m.dsouza@mrc-apu.cam.ac.uk>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified, jmv@lucifer.dorms.spbu.ru, 1999-11-08
-.\" Modified, aeb, 2000-04-07
-.\" Updated from glibc docs, C. Scott Ananian, 2001-08-25
-.\" Modified, aeb, 2001-08-31
-.\" Modified, wharms 2001-11-12, remark on white space and example
-.\"
-.TH strptime 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strptime \- convert a string representation of time to a time tm structure
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _XOPEN_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <time.h>
-.PP
-.BI "char *strptime(const char *restrict " s ", const char *restrict " format ,
-.BI " struct tm *restrict " tm );
-.fi
-.SH DESCRIPTION
-The
-.BR strptime ()
-function is the converse of
-.BR strftime (3);
-it converts the character string pointed to by
-.I s
-to values which are stored in the
-"broken-down time"
-structure pointed to by
-.IR tm ,
-using the format specified by
-.IR format .
-.PP
-The broken-down time structure
-.I tm
-is described in
-.BR tm (3type).
-.PP
-The
-.I format
-argument
-is a character string that consists of field descriptors and text characters,
-reminiscent of
-.BR scanf (3).
-Each field descriptor consists of a
-.B %
-character followed by another character that specifies the replacement
-for the field descriptor.
-All other characters in the
-.I format
-string must have a matching character in the input string,
-except for whitespace, which matches zero or more
-whitespace characters in the input string.
-There should be white\%space or other alphanumeric characters
-between any two field descriptors.
-.PP
-The
-.BR strptime ()
-function processes the input string from left
-to right.
-Each of the three possible input elements (whitespace,
-literal, or format) are handled one after the other.
-If the input cannot be matched to the format string, the function stops.
-The remainder of the format and input strings are not processed.
-.PP
-The supported input field descriptors are listed below.
-In case a text string (such as the name of a day of the week or a month name)
-is to be matched, the comparison is case insensitive.
-In case a number is to be matched, leading zeros are
-permitted but not required.
-.TP
-.B %%
-The
-.B %
-character.
-.TP
-.BR %a " or " %A
-The name of the day of the week according to the current locale,
-in abbreviated form or the full name.
-.TP
-.BR %b " or " %B " or " %h
-The month name according to the current locale,
-in abbreviated form or the full name.
-.TP
-.B %c
-The date and time representation for the current locale.
-.TP
-.B %C
-The century number (0\[en]99).
-.TP
-.BR %d " or " %e
-The day of month (1\[en]31).
-.TP
-.B %D
-Equivalent to
-.BR %m/%d/%y .
-(This is the American style date, very confusing
-to non-Americans, especially since
-.B %d/%m/%y
-is widely used in Europe.
-The ISO 8601 standard format is
-.BR %Y\-%m\-%d .)
-.TP
-.B %H
-The hour (0\[en]23).
-.TP
-.B %I
-The hour on a 12-hour clock (1\[en]12).
-.TP
-.B %j
-The day number in the year (1\[en]366).
-.TP
-.B %m
-The month number (1\[en]12).
-.TP
-.B %M
-The minute (0\[en]59).
-.TP
-.B %n
-Arbitrary whitespace.
-.TP
-.B %p
-The locale's equivalent of AM or PM.
-(Note: there may be none.)
-.TP
-.B %r
-The 12-hour clock time (using the locale's AM or PM).
-In the POSIX locale equivalent to
-.BR "%I:%M:%S %p" .
-If
-.I t_fmt_ampm
-is empty in the
-.B LC_TIME
-part of the current locale,
-then the behavior is undefined.
-.TP
-.B %R
-Equivalent to
-.BR %H:%M .
-.TP
-.B %S
-The second (0\[en]60; 60 may occur for leap seconds;
-earlier also 61 was allowed).
-.TP
-.B %t
-Arbitrary whitespace.
-.TP
-.B %T
-Equivalent to
-.BR %H:%M:%S .
-.TP
-.B %U
-The week number with Sunday the first day of the week (0\[en]53).
-The first Sunday of January is the first day of week 1.
-.TP
-.B %w
-The ordinal number of the day of the week (0\[en]6), with Sunday = 0.
-.TP
-.B %W
-The week number with Monday the first day of the week (0\[en]53).
-The first Monday of January is the first day of week 1.
-.TP
-.B %x
-The date, using the locale's date format.
-.TP
-.B %X
-The time, using the locale's time format.
-.TP
-.B %y
-The year within century (0\[en]99).
-When a century is not otherwise specified, values in the range 69\[en]99 refer
-to years in the twentieth century (1969\[en]1999); values in the
-range 00\[en]68 refer to years in the twenty-first century (2000\[en]2068).
-.TP
-.B %Y
-The year, including century (for example, 1991).
-.PP
-Some field descriptors can be modified by the E or O modifier characters
-to indicate that an alternative format or specification should be used.
-If the
-alternative format or specification does not exist in the current locale, the
-unmodified field descriptor is used.
-.PP
-The E modifier specifies that the input string may contain
-alternative locale-dependent versions of the date and time representation:
-.TP
-.B %Ec
-The locale's alternative date and time representation.
-.TP
-.B %EC
-The name of the base year (period) in the locale's alternative representation.
-.TP
-.B %Ex
-The locale's alternative date representation.
-.TP
-.B %EX
-The locale's alternative time representation.
-.TP
-.B %Ey
-The offset from
-.B %EC
-(year only) in the locale's alternative representation.
-.TP
-.B %EY
-The full alternative year representation.
-.PP
-The O modifier specifies that the numerical input may be in an
-alternative locale-dependent format:
-.TP
-.BR %Od " or " %Oe
-The day of the month using the locale's alternative numeric symbols;
-leading zeros are permitted but not required.
-.TP
-.B %OH
-The hour (24-hour clock) using the locale's alternative numeric symbols.
-.TP
-.B %OI
-The hour (12-hour clock) using the locale's alternative numeric symbols.
-.TP
-.B %Om
-The month using the locale's alternative numeric symbols.
-.TP
-.B %OM
-The minutes using the locale's alternative numeric symbols.
-.TP
-.B %OS
-The seconds using the locale's alternative numeric symbols.
-.TP
-.B %OU
-The week number of the year (Sunday as the first day of the week)
-using the locale's alternative numeric symbols.
-.TP
-.B %Ow
-The ordinal number of the day of the week (Sunday=0),
-using the locale's alternative numeric symbols.
-.TP
-.B %OW
-The week number of the year (Monday as the first day of the week)
-using the locale's alternative numeric symbols.
-.TP
-.B %Oy
-The year (offset from
-.BR %C )
-using the locale's alternative numeric symbols.
-.SH RETURN VALUE
-The return value of the function is a pointer to the first character
-not processed in this function call.
-In case the input string
-contains more characters than required by the format string, the return
-value points right after the last consumed input character.
-In case the whole input string is consumed,
-the return value points to the null byte at the end of the string.
-If
-.BR strptime ()
-fails to match all
-of the format string and therefore an error occurred, the function
-returns NULL.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strptime ()
-T} Thread safety MT-Safe env locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SUSv2.
-.SH NOTES
-In principle, this function does not initialize
-.I tm
-but
-stores only the values specified.
-This means that
-.I tm
-should be initialized before the call.
-Details differ a bit between different UNIX systems.
-The glibc implementation does not touch those fields which are not
-explicitly specified, except that it recomputes the
-.I tm_wday
-and
-.I tm_yday
-field if any of the year, month, or day elements changed.
-.\" .PP
-.\" This function is available since libc 4.6.8.
-.\" Linux libc4 and libc5 includes define the prototype unconditionally;
-.\" glibc2 includes provide a prototype only when
-.\" .B _XOPEN_SOURCE
-.\" or
-.\" .B _GNU_SOURCE
-.\" are defined.
-.\" .PP
-.\" Before libc 5.4.13 whitespace
-.\" (and the \[aq]n\[aq] and \[aq]t\[aq] specifications) was not handled,
-.\" no \[aq]E\[aq] and \[aq]O\[aq] locale modifier characters were accepted,
-.\" and the \[aq]C\[aq] specification was a synonym for the \[aq]c\[aq] specification.
-.PP
-The \[aq]y\[aq] (year in century) specification is taken to specify a year
-.\" in the 20th century by libc4 and libc5.
-.\" It is taken to be a year
-in the range 1950\[en]2049 by glibc 2.0.
-It is taken to be a year in
-1969\[en]2068 since glibc 2.1.
-.\" In libc4 and libc5 the code for %I is broken (fixed in glibc;
-.\" %OI was fixed in glibc 2.2.4).
-.SS glibc notes
-For reasons of symmetry, glibc tries to support for
-.BR strptime ()
-the same format characters as for
-.BR strftime (3).
-(In most cases, the corresponding fields are parsed, but no field in
-.I tm
-is changed.)
-This leads to
-.TP
-.B %F
-Equivalent to
-.BR %Y\-%m\-%d ,
-the ISO 8601 date format.
-.TP
-.B %g
-The year corresponding to the ISO week number, but without the century
-(0\[en]99).
-.TP
-.B %G
-The year corresponding to the ISO week number.
-(For example, 1991.)
-.TP
-.B %u
-The day of the week as a decimal number (1\[en]7, where Monday = 1).
-.TP
-.B %V
-The ISO 8601:1988 week number as a decimal number (1\[en]53).
-If the week (starting on Monday) containing 1 January has four or more days
-in the new year, then it is considered week 1.
-Otherwise, it is the last week
-of the previous year, and the next week is week 1.
-.TP
-.B %z
-An RFC-822/ISO 8601 standard timezone specification.
-.TP
-.B %Z
-The timezone name.
-.PP
-Similarly, because of GNU extensions to
-.BR strftime (3),
-.B %k
-is accepted as a synonym for
-.BR %H ,
-and
-.B %l
-should be accepted
-as a synonym for
-.BR %I ,
-and
-.B %P
-is accepted as a synonym for
-.BR %p .
-Finally
-.TP
-.B %s
-The number of seconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC).
-Leap seconds are not counted unless leap second support is available.
-.PP
-The glibc implementation does not require whitespace between
-two field descriptors.
-.SH EXAMPLES
-The following example demonstrates the use of
-.BR strptime ()
-and
-.BR strftime (3).
-.PP
-.\" SRC BEGIN (strptime.c)
-.EX
-#define _XOPEN_SOURCE
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-\&
-int
-main(void)
-{
- struct tm tm;
- char buf[255];
-\&
- memset(&tm, 0, sizeof(tm));
- strptime("2001\-11\-12 18:31:01", "%Y\-%m\-%d %H:%M:%S", &tm);
- strftime(buf, sizeof(buf), "%d %b %Y %H:%M", &tm);
- puts(buf);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR time (2),
-.BR getdate (3),
-.BR scanf (3),
-.BR setlocale (3),
-.BR strftime (3)
diff --git a/man3/strrchr.3 b/man3/strrchr.3
deleted file mode 100644
index 322b7a896..000000000
--- a/man3/strrchr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strchr.3
diff --git a/man3/strsep.3 b/man3/strsep.3
deleted file mode 100644
index 19caafeb1..000000000
--- a/man3/strsep.3
+++ /dev/null
@@ -1,165 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 18:00:10 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Mon Jan 20 12:04:18 1997 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified Tue Jan 23 20:23:07 2001 by Andries Brouwer (aeb@cwi.nl)
-.\"
-.TH strsep 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strsep \- extract token from string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "char *strsep(char **restrict " stringp ", const char *restrict " delim );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR strsep ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-If
-.I *stringp
-is NULL, the
-.BR strsep ()
-function returns NULL
-and does nothing else.
-Otherwise, this function finds the first token
-in the string
-.I *stringp
-that is delimited by one of the bytes in the string
-.IR delim .
-This token is terminated by overwriting the delimiter
-with a null byte (\[aq]\e0\[aq]),
-and
-.I *stringp
-is updated to point past the token.
-In case no delimiter was found, the token is taken to be
-the entire string
-.IR *stringp ,
-and
-.I *stringp
-is made NULL.
-.SH RETURN VALUE
-The
-.BR strsep ()
-function returns a pointer to the token,
-that is, it returns the original value of
-.IR *stringp .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strsep ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-4.4BSD.
-.PP
-The
-.BR strsep ()
-function was introduced as a replacement for
-.BR strtok (3),
-since the latter cannot handle empty fields.
-However,
-.BR strtok (3)
-conforms to C89/C99 and hence is more portable.
-.SH BUGS
-Be cautious when using this function.
-If you do use it, note that:
-.IP \[bu] 3
-This function modifies its first argument.
-.IP \[bu]
-This function cannot be used on constant strings.
-.IP \[bu]
-The identity of the delimiting character is lost.
-.SH EXAMPLES
-The program below is a port of the one found in
-.BR strtok (3),
-which, however, doesn't discard multiple delimiters or empty tokens:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out \[aq]a/bbb///cc;xxx:yyy:\[aq] \[aq]:;\[aq] \[aq]/\[aq]"
-1: a/bbb///cc
- \-\-> a
- \-\-> bbb
- \-\->
- \-\->
- \-\-> cc
-2: xxx
- \-\-> xxx
-3: yyy
- \-\-> yyy
-4:
- \-\->
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (strsep.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-int
-main(int argc, char *argv[])
-{
- char *token, *subtoken;
-\&
- if (argc != 4) {
- fprintf(stderr, "Usage: %s string delim subdelim\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- for (unsigned int j = 1; (token = strsep(&argv[1], argv[2])); j++) {
- printf("%u: %s\en", j, token);
-\&
- while ((subtoken = strsep(&token, argv[3])))
- printf("\et \-\-> %s\en", subtoken);
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR memchr (3),
-.BR strchr (3),
-.BR string (3),
-.BR strpbrk (3),
-.BR strspn (3),
-.BR strstr (3),
-.BR strtok (3)
diff --git a/man3/strsignal.3 b/man3/strsignal.3
deleted file mode 100644
index 03b437ac6..000000000
--- a/man3/strsignal.3
+++ /dev/null
@@ -1,168 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright (C) 2020 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 17:59:03 1993 by Rik Faith (faith@cs.unc.edu)
-.TH strsignal 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strsignal, sigabbrev_np, sigdescr_np, sys_siglist \-
-return string describing signal
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "char *strsignal(int " sig );
-.BI "const char *sigdescr_np(int " sig );
-.BI "const char *sigabbrev_np(int " sig );
-.PP
-.BI "[[deprecated]] extern const char *const " sys_siglist [];
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR sigabbrev_np (),
-.BR sigdescr_np ():
-.nf
- _GNU_SOURCE
-.fi
-.PP
-.BR strsignal ():
-.nf
- From glibc 2.10 to glibc 2.31:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.PP
-.IR sys_siglist :
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR strsignal ()
-function returns a string describing the signal
-number passed in the argument
-.IR sig .
-The string can be used only until the next call to
-.BR strsignal ().
-The string returned by
-.BR strsignal ()
-is localized according to the
-.B LC_MESSAGES
-category in the current locale.
-.PP
-The
-.BR sigdescr_np ()
-function returns a string describing the signal
-number passed in the argument
-.IR sig .
-Unlike
-.BR strsignal ()
-this string is not influenced by the current locale.
-.PP
-The
-.BR sigabbrev_np ()
-function returns the abbreviated name of the signal,
-.IR sig .
-For example, given the value
-.BR SIGINT ,
-it returns the string "INT".
-.PP
-The (deprecated) array
-.I sys_siglist
-holds the signal description strings
-indexed by signal number.
-The
-.BR strsignal ()
-or the
-.BR sigdescr_np ()
-function should be used instead of this array; see also VERSIONS.
-.SH RETURN VALUE
-The
-.BR strsignal ()
-function returns the appropriate description
-string, or an unknown signal message if the signal number is invalid.
-On some systems (but not on Linux), NULL may instead be
-returned for an invalid signal number.
-.PP
-The
-.BR sigdescr_np ()
-and
-.BR sigabbrev_np ()
-functions return the appropriate description string.
-The returned string is statically allocated and valid for
-the lifetime of the program.
-These functions return NULL for an invalid signal number.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR strsignal ()
-T} Thread safety T{
-MT-Unsafe race:strsignal locale
-T}
-T{
-.BR sigdescr_np (),
-.BR sigabbrev_np ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR strsignal ()
-POSIX.1-2008.
-.TP
-.BR sigdescr_np ()
-.TQ
-.BR sigabbrev_np ()
-GNU.
-.TP
-.I sys_siglist
-None.
-.\" glibc commit b1ccfc061feee9ce616444ded8e1cd5acf9fa97f
-.SH HISTORY
-.TP
-.BR strsignal ()
-POSIX.1-2008.
-Solaris, BSD.
-.TP
-.BR sigdescr_np ()
-.TQ
-.BR sigabbrev_np ()
-glibc 2.32.
-.TP
-.I sys_siglist
-Removed in glibc 2.32.
-.SH NOTES
-.BR sigdescr_np ()
-and
-.BR sigabbrev_np ()
-are thread-safe and async-signal-safe.
-.SH SEE ALSO
-.BR psignal (3),
-.BR strerror (3)
diff --git a/man3/strspn.3 b/man3/strspn.3
deleted file mode 100644
index 941d310d7..000000000
--- a/man3/strspn.3
+++ /dev/null
@@ -1,88 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 17:57:50 1993 by Rik Faith (faith@cs.unc.edu)
-.TH strspn 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strspn, strcspn \- get length of a prefix substring
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "size_t strspn(const char *" s ", const char *" accept );
-.BI "size_t strcspn(const char *" s ", const char *" reject );
-.fi
-.SH DESCRIPTION
-The
-.BR strspn ()
-function calculates the length (in bytes) of the initial
-segment of
-.I s
-which consists entirely of bytes in
-.IR accept .
-.PP
-The
-.BR strcspn ()
-function calculates the length of the initial
-segment of
-.I s
-which consists entirely of bytes not in
-.IR reject .
-.SH RETURN VALUE
-The
-.BR strspn ()
-function returns the number of bytes in
-the initial segment of
-.I s
-which consist only of bytes
-from
-.IR accept .
-.PP
-The
-.BR strcspn ()
-function returns the number of bytes in
-the initial segment of
-.I s
-which are not in the string
-.IR reject .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strspn (),
-.BR strcspn ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR memchr (3),
-.BR strchr (3),
-.BR string (3),
-.BR strpbrk (3),
-.BR strsep (3),
-.BR strstr (3),
-.BR strtok (3),
-.BR wcscspn (3),
-.BR wcsspn (3)
diff --git a/man3/strstr.3 b/man3/strstr.3
deleted file mode 100644
index 53eee8080..000000000
--- a/man3/strstr.3
+++ /dev/null
@@ -1,99 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 17:56:43 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Added history, aeb, 980113.
-.\" 2005-05-05 mtk: added strcasestr()
-.\"
-.TH strstr 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strstr, strcasestr \- locate a substring
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "char *strstr(const char *" haystack ", const char *" needle );
-.PP
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <string.h>
-.PP
-.BI "char *strcasestr(const char *" haystack ", const char *" needle );
-.fi
-.SH DESCRIPTION
-The
-.BR strstr ()
-function finds the first occurrence of the substring
-.I needle
-in the string
-.IR haystack .
-The terminating null bytes (\[aq]\e0\[aq]) are not compared.
-.PP
-The
-.BR strcasestr ()
-function is like
-.BR strstr (),
-but ignores the case of both arguments.
-.SH RETURN VALUE
-These functions return a pointer to the beginning of the
-located substring, or NULL if the substring is not found.
-.PP
-If
-.I needle
-is the empty string,
-the return value is always
-.I haystack
-itself.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strstr ()
-T} Thread safety MT-Safe
-T{
-.BR strcasestr ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR strstr ()
-C11, POSIX.1-2008.
-.TP
-.BR strcasestr ()
-GNU.
-.SH HISTORY
-.TP
-.BR strstr ()
-POSIX.1-2001, C89.
-.TP
-.BR strcasestr ()
-GNU.
-.SH SEE ALSO
-.BR memchr (3),
-.BR memmem (3),
-.BR strcasecmp (3),
-.BR strchr (3),
-.BR string (3),
-.BR strpbrk (3),
-.BR strsep (3),
-.BR strspn (3),
-.BR strtok (3),
-.BR wcsstr (3)
diff --git a/man3/strtod.3 b/man3/strtod.3
deleted file mode 100644
index 9d7ab11a8..000000000
--- a/man3/strtod.3
+++ /dev/null
@@ -1,208 +0,0 @@
-'\" t
-.\" Copyright (c) 1990, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" the American National Standards Committee X3, on Information
-.\" Processing Systems.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)strtod.3 5.3 (Berkeley) 6/29/91
-.\"
-.\" Modified Sun Aug 21 17:16:22 1994 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Sat May 04 19:34:31 MET DST 1996 by Michael Haardt
-.\" (michael@cantor.informatik.rwth-aachen.de)
-.\" Added strof, strtold, aeb, 2001-06-07
-.\"
-.TH strtod 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strtod, strtof, strtold \- convert ASCII string to floating-point number
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "double strtod(const char *restrict " nptr ", char **restrict " endptr );
-.BI "float strtof(const char *restrict " nptr ", char **restrict " endptr );
-.BI "long double strtold(const char *restrict " nptr \
-", char **restrict " endptr );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR strtof (),
-.BR strtold ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-The
-.BR strtod (),
-.BR strtof (),
-and
-.BR strtold ()
-functions convert the initial portion of the string pointed to by
-.I nptr
-to
-.IR double ,
-.IR float ,
-and
-.I long double
-representation, respectively.
-.PP
-The expected form of the (initial portion of the) string is
-optional leading white space as recognized by
-.BR isspace (3),
-an optional plus (\[aq]+\[aq]) or minus sign (\[aq]\-\[aq]) and then either
-(i) a decimal number, or (ii) a hexadecimal number,
-or (iii) an infinity, or (iv) a NAN (not-a-number).
-.PP
-A
-.I "decimal number"
-consists of a nonempty sequence of decimal digits
-possibly containing a radix character (decimal point, locale-dependent,
-usually \[aq].\[aq]), optionally followed by a decimal exponent.
-A decimal exponent consists of an \[aq]E\[aq] or \[aq]e\[aq], followed by an
-optional plus or minus sign, followed by a nonempty sequence of
-decimal digits, and indicates multiplication by a power of 10.
-.PP
-A
-.I "hexadecimal number"
-consists of a "0x" or "0X" followed by a nonempty sequence of
-hexadecimal digits possibly containing a radix character,
-optionally followed by a binary exponent.
-A binary exponent
-consists of a \[aq]P\[aq] or \[aq]p\[aq], followed by an optional
-plus or minus sign, followed by a nonempty sequence of
-decimal digits, and indicates multiplication by a power of 2.
-At least one of radix character and binary exponent must be present.
-.PP
-An
-.I infinity
-is either "INF" or "INFINITY", disregarding case.
-.PP
-A
-.I NAN
-is "NAN" (disregarding case) optionally followed by a string,
-.IR (n-char-sequence) ,
-where
-.I n-char-sequence
-specifies in an implementation-dependent
-way the type of NAN (see NOTES).
-.SH RETURN VALUE
-These functions return the converted value, if any.
-.PP
-If
-.I endptr
-is not NULL,
-a pointer to the character after the last character used in the conversion
-is stored in the location referenced by
-.IR endptr .
-.PP
-If no conversion is performed, zero is returned and (unless
-.I endptr
-is null) the value of
-.I nptr
-is stored in the location referenced by
-.IR endptr .
-.PP
-If the correct value would cause overflow, plus or minus
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-or
-.B HUGE_VALL
-is returned (according to the return type and sign of the value),
-and
-.B ERANGE
-is stored in
-.IR errno .
-.PP
-If the correct value would cause underflow,
-a value with magnitude no larger than
-.BR DBL_MIN ,
-.BR FLT_MIN ,
-or
-.B LDBL_MIN
-is returned and
-.B ERANGE
-is stored in
-.IR errno .
-.SH ERRORS
-.TP
-.B ERANGE
-Overflow or underflow occurred.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strtod (),
-.BR strtof (),
-.BR strtold ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-In the glibc implementation, the
-.I n-char-sequence
-that optionally follows "NAN"
-is interpreted as an integer number
-(with an optional '0' or '0x' prefix to select base 8 or 16)
-that is to be placed in the
-mantissa component of the returned value.
-.\" From glibc 2.8's stdlib/strtod_l.c:
-.\" We expect it to be a number which is put in the
-.\" mantissa of the number.
-.\" It looks as though at least FreeBSD (according to the manual) does
-.\" something similar.
-.\" C11 says: "An implementation may use the n-char sequence to determine
-.\" extra information to be represented in the NaN's significant."
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR strtod ()
-C89, POSIX.1-2001.
-.TP
-.BR strtof ()
-.TQ
-.BR strtold ()
-C99, POSIX.1-2001.
-.SH NOTES
-Since
-0 can legitimately be returned
-on both success and failure, the calling program should set
-.I errno
-to 0 before the call,
-and then determine if an error occurred by checking whether
-.I errno
-has a nonzero value after the call.
-.SH EXAMPLES
-See the example on the
-.BR strtol (3)
-manual page;
-the use of the functions described in this manual page is similar.
-.SH SEE ALSO
-.BR atof (3),
-.BR atoi (3),
-.BR atol (3),
-.BR nan (3),
-.BR nanf (3),
-.BR nanl (3),
-.BR strfromd (3),
-.BR strtol (3),
-.BR strtoul (3)
diff --git a/man3/strtof.3 b/man3/strtof.3
deleted file mode 100644
index ac3e4a55c..000000000
--- a/man3/strtof.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strtod.3
diff --git a/man3/strtoimax.3 b/man3/strtoimax.3
deleted file mode 100644
index 541e7e481..000000000
--- a/man3/strtoimax.3
+++ /dev/null
@@ -1,71 +0,0 @@
-'\" t
-.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH strtoimax 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strtoimax, strtoumax \- convert string to integer
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <inttypes.h>
-.PP
-.BI "intmax_t strtoimax(const char *restrict " nptr ", char **restrict " endptr ,
-.BI " int " base );
-.BI "uintmax_t strtoumax(const char *restrict " nptr ", char **restrict " endptr ,
-.BI " int " base );
-.fi
-.SH DESCRIPTION
-These functions are just like
-.BR strtol (3)
-and
-.BR strtoul (3),
-except that they return a value of type
-.I intmax_t
-and
-.IR uintmax_t ,
-respectively.
-.SH RETURN VALUE
-On success, the converted value is returned.
-If nothing was found to convert, zero is returned.
-On overflow or underflow
-.B INTMAX_MAX
-or
-.B INTMAX_MIN
-or
-.B UINTMAX_MAX
-is returned, and
-.I errno
-is set to
-.BR ERANGE .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strtoimax (),
-.BR strtoumax ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR imaxabs (3),
-.BR imaxdiv (3),
-.BR strtol (3),
-.BR strtoul (3),
-.BR wcstoimax (3)
diff --git a/man3/strtok.3 b/man3/strtok.3
deleted file mode 100644
index b702e287a..000000000
--- a/man3/strtok.3
+++ /dev/null
@@ -1,289 +0,0 @@
-'\" t
-.\" Copyright (C) 2005, 2013 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" a few fragments from an earlier (1996) version by
-.\" Andries Brouwer (aeb@cwi.nl) remain.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Rewritten old page, 960210, aeb@cwi.nl
-.\" Updated, added strtok_r. 2000-02-13 Nicolás Lichtmaier <nick@debian.org>
-.\" 2005-11-17, mtk: Substantial parts rewritten
-.\" 2013-05-19, mtk: added much further detail on the operation of strtok()
-.\"
-.TH strtok 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strtok, strtok_r \- extract tokens from strings
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "char *strtok(char *restrict " str ", const char *restrict " delim );
-.BI "char *strtok_r(char *restrict " str ", const char *restrict " delim ,
-.BI " char **restrict " saveptr );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR strtok_r ():
-.nf
- _POSIX_C_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR strtok ()
-function breaks a string into a sequence of zero or more nonempty tokens.
-On the first call to
-.BR strtok (),
-the string to be parsed should be
-specified in
-.IR str .
-In each subsequent call that should parse the same string,
-.I str
-must be NULL.
-.PP
-The
-.I delim
-argument specifies a set of bytes that
-delimit the tokens in the parsed string.
-The caller may specify different strings in
-.I delim
-in successive
-calls that parse the same string.
-.PP
-Each call to
-.BR strtok ()
-returns a pointer to a
-null-terminated string containing the next token.
-This string does not include the delimiting byte.
-If no more tokens are found,
-.BR strtok ()
-returns NULL.
-.PP
-A sequence of calls to
-.BR strtok ()
-that operate on the same string maintains a pointer
-that determines the point from which to start searching for the next token.
-The first call to
-.BR strtok ()
-sets this pointer to point to the first byte of the string.
-The start of the next token is determined by scanning forward
-for the next nondelimiter byte in
-.IR str .
-If such a byte is found, it is taken as the start of the next token.
-If no such byte is found,
-then there are no more tokens, and
-.BR strtok ()
-returns NULL.
-(A string that is empty or that contains only delimiters
-will thus cause
-.BR strtok ()
-to return NULL on the first call.)
-.PP
-The end of each token is found by scanning forward until either
-the next delimiter byte is found or until the
-terminating null byte (\[aq]\e0\[aq]) is encountered.
-If a delimiter byte is found, it is overwritten with
-a null byte to terminate the current token, and
-.BR strtok ()
-saves a pointer to the following byte;
-that pointer will be used as the starting point
-when searching for the next token.
-In this case,
-.BR strtok ()
-returns a pointer to the start of the found token.
-.PP
-From the above description,
-it follows that a sequence of two or more contiguous delimiter bytes in
-the parsed string is considered to be a single delimiter, and that
-delimiter bytes at the start or end of the string are ignored.
-Put another way: the tokens returned by
-.BR strtok ()
-are always nonempty strings.
-Thus, for example, given the string "\fIaaa;;bbb,\fP",
-successive calls to
-.BR strtok ()
-that specify the delimiter string "\fI;,\fP"
-would return the strings "\fIaaa\fP" and "\fIbbb\fP",
-and then a null pointer.
-.PP
-The
-.BR strtok_r ()
-function is a reentrant version of
-.BR strtok ().
-The
-.I saveptr
-argument is a pointer to a
-.I char\~*
-variable that is used internally by
-.BR strtok_r ()
-in order to maintain context between successive calls that parse the
-same string.
-.PP
-On the first call to
-.BR strtok_r (),
-.I str
-should point to the string to be parsed, and the value of
-.I *saveptr
-is ignored (but see NOTES).
-In subsequent calls,
-.I str
-should be NULL, and
-.I saveptr
-(and the buffer that it points to)
-should be unchanged since the previous call.
-.PP
-Different strings may be parsed concurrently using sequences of calls to
-.BR strtok_r ()
-that specify different
-.I saveptr
-arguments.
-.SH RETURN VALUE
-The
-.BR strtok ()
-and
-.BR strtok_r ()
-functions return a pointer to
-the next token, or NULL if there are no more tokens.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strtok ()
-T} Thread safety MT-Unsafe race:strtok
-T{
-.BR strtok_r ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-On some implementations,
-.\" Tru64, according to its manual page
-.I *saveptr
-is required to be NULL on the first call to
-.BR strtok_r ()
-that is being used to parse
-.IR str .
-.SH STANDARDS
-.TP
-.BR strtok ()
-C11, POSIX.1-2008.
-.TP
-.BR strtok_r ()
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR strtok ()
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.TP
-.BR strtok_r ()
-POSIX.1-2001.
-.SH BUGS
-Be cautious when using these functions.
-If you do use them, note that:
-.IP \[bu] 3
-These functions modify their first argument.
-.IP \[bu]
-These functions cannot be used on constant strings.
-.IP \[bu]
-The identity of the delimiting byte is lost.
-.IP \[bu]
-The
-.BR strtok ()
-function uses a static buffer while parsing, so it's not thread safe.
-Use
-.BR strtok_r ()
-if this matters to you.
-.SH EXAMPLES
-The program below uses nested loops that employ
-.BR strtok_r ()
-to break a string into a two-level hierarchy of tokens.
-The first command-line argument specifies the string to be parsed.
-The second argument specifies the delimiter byte(s)
-to be used to separate that string into "major" tokens.
-The third argument specifies the delimiter byte(s)
-to be used to separate the "major" tokens into subtokens.
-.PP
-An example of the output produced by this program is the following:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out \[aq]a/bbb///cc;xxx:yyy:\[aq] \[aq]:;\[aq] \[aq]/\[aq]"
-1: a/bbb///cc
- \-\-> a
- \-\-> bbb
- \-\-> cc
-2: xxx
- \-\-> xxx
-3: yyy
- \-\-> yyy
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (strtok.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-int
-main(int argc, char *argv[])
-{
- char *str1, *str2, *token, *subtoken;
- char *saveptr1, *saveptr2;
- int j;
-\&
- if (argc != 4) {
- fprintf(stderr, "Usage: %s string delim subdelim\en",
- argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- for (j = 1, str1 = argv[1]; ; j++, str1 = NULL) {
- token = strtok_r(str1, argv[2], &saveptr1);
- if (token == NULL)
- break;
- printf("%d: %s\en", j, token);
-\&
- for (str2 = token; ; str2 = NULL) {
- subtoken = strtok_r(str2, argv[3], &saveptr2);
- if (subtoken == NULL)
- break;
- printf("\et \-\-> %s\en", subtoken);
- }
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.PP
-Another example program using
-.BR strtok ()
-can be found in
-.BR getaddrinfo_a (3).
-.SH SEE ALSO
-.BR memchr (3),
-.BR strchr (3),
-.BR string (3),
-.BR strpbrk (3),
-.BR strsep (3),
-.BR strspn (3),
-.BR strstr (3),
-.BR wcstok (3)
diff --git a/man3/strtok_r.3 b/man3/strtok_r.3
deleted file mode 100644
index 19095a017..000000000
--- a/man3/strtok_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strtok.3
diff --git a/man3/strtol.3 b/man3/strtol.3
deleted file mode 100644
index 95b291ab8..000000000
--- a/man3/strtol.3
+++ /dev/null
@@ -1,297 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2006 Michael Kerrisk <mtk.manpages@ganil.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sun Jul 25 10:53:39 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Added correction due to nsd@bbc.com (Nick Duffek) - aeb, 950610
-.TH strtol 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strtol, strtoll, strtoq \- convert a string to a long integer
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "long strtol(const char *restrict " nptr ,
-.BI " char **restrict " endptr ", int " base );
-.BI "long long strtoll(const char *restrict " nptr ,
-.BI " char **restrict " endptr ", int " base );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR strtoll ():
-.nf
- _ISOC99_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR strtol ()
-function converts the initial part of the string
-in
-.I nptr
-to a long integer value according to the given
-.IR base ,
-which must be between 2 and 36 inclusive, or be the special value 0.
-.PP
-The string may begin with an arbitrary amount of white space (as
-determined by
-.BR isspace (3))
-followed by a single optional \[aq]+\[aq] or \[aq]\-\[aq] sign.
-If
-.I base
-is zero or 16, the string may then include a
-"0x" or "0X" prefix, and the number will be read in base 16; otherwise, a
-zero
-.I base
-is taken as 10 (decimal) unless the next character
-is \[aq]0\[aq], in which case it is taken as 8 (octal).
-.PP
-The remainder of the string is converted to a
-.I long
-value
-in the obvious manner, stopping at the first character which is not a
-valid digit in the given base.
-(In bases above 10, the letter \[aq]A\[aq] in
-either uppercase or lowercase represents 10, \[aq]B\[aq] represents 11, and so
-forth, with \[aq]Z\[aq] representing 35.)
-.PP
-If
-.I endptr
-is not NULL,
-.BR strtol ()
-stores the address of the
-first invalid character in
-.IR *endptr .
-If there were no digits at
-all,
-.BR strtol ()
-stores the original value of
-.I nptr
-in
-.I *endptr
-(and returns 0).
-In particular, if
-.I *nptr
-is not \[aq]\e0\[aq] but
-.I **endptr
-is \[aq]\e0\[aq] on return, the entire string is valid.
-.PP
-The
-.BR strtoll ()
-function works just like the
-.BR strtol ()
-function but returns a
-.I long long
-integer value.
-.SH RETURN VALUE
-The
-.BR strtol ()
-function returns the result of the conversion,
-unless the value would underflow or overflow.
-If an underflow occurs,
-.BR strtol ()
-returns
-.BR LONG_MIN .
-If an overflow occurs,
-.BR strtol ()
-returns
-.BR LONG_MAX .
-In both cases,
-.I errno
-is set to
-.BR ERANGE .
-Precisely the same holds for
-.BR strtoll ()
-(with
-.B LLONG_MIN
-and
-.B LLONG_MAX
-instead of
-.B LONG_MIN
-and
-.BR LONG_MAX ).
-.SH ERRORS
-.TP
-.B EINVAL
-(not in C99)
-The given
-.I base
-contains an unsupported value.
-.TP
-.B ERANGE
-The resulting value was out of range.
-.PP
-The implementation may also set
-.I errno
-to
-.B EINVAL
-in case
-no conversion was performed (no digits seen, and 0 returned).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strtol (),
-.BR strtoll (),
-.BR strtoq ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR strtol ()
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.TP
-.BR strtoll ()
-POSIX.1-2001, C99.
-.SH NOTES
-Since
-.BR strtol ()
-can legitimately return 0,
-.BR LONG_MAX ,
-or
-.B LONG_MIN
-.RB ( LLONG_MAX
-or
-.B LLONG_MIN
-for
-.BR strtoll ())
-on both success and failure, the calling program should set
-.I errno
-to 0 before the call,
-and then determine if an error occurred by checking whether
-.I errno
-has a nonzero value after the call.
-.PP
-According to POSIX.1,
-in locales other than "C" and "POSIX",
-these functions may accept other,
-implementation-defined numeric strings.
-.PP
-BSD also has
-.PP
-.in +4n
-.EX
-.BI "quad_t strtoq(const char *" nptr ", char **" endptr ", int " base );
-.EE
-.in
-.PP
-with completely analogous definition.
-Depending on the wordsize of the current architecture, this
-may be equivalent to
-.BR strtoll ()
-or to
-.BR strtol ().
-.SH EXAMPLES
-The program shown below demonstrates the use of
-.BR strtol ().
-The first command-line argument specifies a string from which
-.BR strtol ()
-should parse a number.
-The second (optional) argument specifies the base to be used for
-the conversion.
-(This argument is converted to numeric form using
-.BR atoi (3),
-a function that performs no error checking and
-has a simpler interface than
-.BR strtol ().)
-Some examples of the results produced by this program are the following:
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out 123"
-strtol() returned 123
-.RB "$" " ./a.out \[aq] 123\[aq]"
-strtol() returned 123
-.RB "$" " ./a.out 123abc"
-strtol() returned 123
-Further characters after number: "abc"
-.RB "$" " ./a.out 123abc 55"
-strtol: Invalid argument
-.RB "$" " ./a.out \[aq]\[aq]"
-No digits were found
-.RB "$" " ./a.out 4000000000"
-strtol: Numerical result out of range
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (strtol.c)
-.EX
-#include <errno.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int base;
- char *endptr, *str;
- long val;
-\&
- if (argc < 2) {
- fprintf(stderr, "Usage: %s str [base]\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- str = argv[1];
- base = (argc > 2) ? atoi(argv[2]) : 0;
-\&
- errno = 0; /* To distinguish success/failure after call */
- val = strtol(str, &endptr, base);
-\&
- /* Check for various possible errors. */
-\&
- if (errno != 0) {
- perror("strtol");
- exit(EXIT_FAILURE);
- }
-\&
- if (endptr == str) {
- fprintf(stderr, "No digits were found\en");
- exit(EXIT_FAILURE);
- }
-\&
- /* If we got here, strtol() successfully parsed a number. */
-\&
- printf("strtol() returned %ld\en", val);
-\&
- if (*endptr != \[aq]\e0\[aq]) /* Not necessarily an error... */
- printf("Further characters after number: \e"%s\e"\en", endptr);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR atof (3),
-.BR atoi (3),
-.BR atol (3),
-.BR strtod (3),
-.BR strtoimax (3),
-.BR strtoul (3)
diff --git a/man3/strtold.3 b/man3/strtold.3
deleted file mode 100644
index ac3e4a55c..000000000
--- a/man3/strtold.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strtod.3
diff --git a/man3/strtoll.3 b/man3/strtoll.3
deleted file mode 100644
index d09039391..000000000
--- a/man3/strtoll.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strtol.3
diff --git a/man3/strtoq.3 b/man3/strtoq.3
deleted file mode 100644
index d09039391..000000000
--- a/man3/strtoq.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strtol.3
diff --git a/man3/strtoul.3 b/man3/strtoul.3
deleted file mode 100644
index 14c72fb77..000000000
--- a/man3/strtoul.3
+++ /dev/null
@@ -1,221 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sun Jul 25 10:54:03 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Fixed typo, aeb, 950823
-.\" 2002-02-22, joey, mihtjel: Added strtoull()
-.\"
-.TH strtoul 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strtoul, strtoull, strtouq \- convert a string to an unsigned long integer
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "unsigned long strtoul(const char *restrict " nptr ,
-.BI " char **restrict " endptr ", int " base );
-.BI "unsigned long long strtoull(const char *restrict " nptr ,
-.BI " char **restrict " endptr ", int " base );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR strtoull ():
-.nf
- _ISOC99_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR strtoul ()
-function converts the initial part of the string
-in
-.I nptr
-to an
-.I "unsigned long"
-value according to the
-given
-.IR base ,
-which must be between 2 and 36 inclusive, or be
-the special value 0.
-.PP
-The string may begin with an arbitrary amount of white space (as
-determined by
-.BR isspace (3))
-followed by a single optional \[aq]+\[aq] or \[aq]\-\[aq]
-sign.
-If
-.I base
-is zero or 16, the string may then include a
-"0x" prefix, and the number will be read in base 16; otherwise, a
-zero
-.I base
-is taken as 10 (decimal) unless the next character
-is \[aq]0\[aq], in which case it is taken as 8 (octal).
-.PP
-The remainder of the string is converted to an
-.I "unsigned long"
-value in the obvious manner,
-stopping at the first character which is not a
-valid digit in the given base.
-(In bases above 10, the letter \[aq]A\[aq] in
-either uppercase or lowercase represents 10, \[aq]B\[aq] represents 11, and so
-forth, with \[aq]Z\[aq] representing 35.)
-.PP
-If
-.I endptr
-is not NULL,
-.BR strtoul ()
-stores the address of the
-first invalid character in
-.IR *endptr .
-If there were no digits at
-all,
-.BR strtoul ()
-stores the original value of
-.I nptr
-in
-.I *endptr
-(and returns 0).
-In particular, if
-.I *nptr
-is not \[aq]\e0\[aq] but
-.I **endptr
-is \[aq]\e0\[aq] on return, the entire string is valid.
-.PP
-The
-.BR strtoull ()
-function works just like the
-.BR strtoul ()
-function but returns an
-.I "unsigned long long"
-value.
-.SH RETURN VALUE
-The
-.BR strtoul ()
-function returns either the result of the conversion
-or, if there was a leading minus sign, the negation of the result of the
-conversion represented as an unsigned value,
-unless the original (nonnegated) value would overflow; in
-the latter case,
-.BR strtoul ()
-returns
-.B ULONG_MAX
-and sets
-.I errno
-to
-.BR ERANGE .
-Precisely the same holds for
-.BR strtoull ()
-(with
-.B ULLONG_MAX
-instead of
-.BR ULONG_MAX ).
-.SH ERRORS
-.TP
-.B EINVAL
-(not in C99)
-The given
-.I base
-contains an unsupported value.
-.TP
-.B ERANGE
-The resulting value was out of range.
-.PP
-The implementation may also set
-.I errno
-to
-.B EINVAL
-in case
-no conversion was performed (no digits seen, and 0 returned).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strtoul (),
-.BR strtoull (),
-.BR strtouq ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR strtoul ()
-POSIX.1-2001, C89, SVr4.
-.TP
-.BR strtoull ()
-POSIX.1-2001, C99.
-.SH NOTES
-Since
-.BR strtoul ()
-can legitimately return 0 or
-.B ULONG_MAX
-.RB ( ULLONG_MAX
-for
-.BR strtoull ())
-on both success and failure, the calling program should set
-.I errno
-to 0 before the call,
-and then determine if an error occurred by checking whether
-.I errno
-has a nonzero value after the call.
-.PP
-In locales other than the "C" locale, other strings may be accepted.
-(For example, the thousands separator of the current locale may be
-supported.)
-.PP
-BSD also has
-.PP
-.in +4n
-.EX
-.BI "u_quad_t strtouq(const char *" nptr ", char **" endptr ", int " base );
-.EE
-.in
-.PP
-with completely analogous definition.
-Depending on the wordsize of the current architecture, this
-may be equivalent to
-.BR strtoull ()
-or to
-.BR strtoul ().
-.PP
-Negative values are considered valid input and are
-silently converted to the equivalent
-.I "unsigned long"
-value.
-.SH EXAMPLES
-See the example on the
-.BR strtol (3)
-manual page;
-the use of the functions described in this manual page is similar.
-.SH SEE ALSO
-.BR a64l (3),
-.BR atof (3),
-.BR atoi (3),
-.BR atol (3),
-.BR strtod (3),
-.BR strtol (3),
-.BR strtoumax (3)
diff --git a/man3/strtoull.3 b/man3/strtoull.3
deleted file mode 100644
index 3340a8373..000000000
--- a/man3/strtoull.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strtoul.3
diff --git a/man3/strtoumax.3 b/man3/strtoumax.3
deleted file mode 100644
index 753be84df..000000000
--- a/man3/strtoumax.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strtoimax.3
diff --git a/man3/strtouq.3 b/man3/strtouq.3
deleted file mode 100644
index 3340a8373..000000000
--- a/man3/strtouq.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strtoul.3
diff --git a/man3/strverscmp.3 b/man3/strverscmp.3
deleted file mode 100644
index 6cea27af4..000000000
--- a/man3/strverscmp.3
+++ /dev/null
@@ -1,149 +0,0 @@
-'\" t
-.\" Copyright (C) 2001 Andries Brouwer <aeb@cwi.nl>
-.\" and Copyright (C) 2016 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH strverscmp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strverscmp \- compare two version strings
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <string.h>
-.PP
-.BI "int strverscmp(const char *" s1 ", const char *" s2 );
-.fi
-.SH DESCRIPTION
-Often one has files
-.IR jan1 ", " jan2 ", ..., " jan9 ", " jan10 ", ..."
-and it feels wrong when
-.BR ls (1)
-orders them
-.IR jan1 ", " jan10 ", ..., " jan2 ", ..., " jan9 .
-.\" classical solution: "rename jan jan0 jan?"
-In order to rectify this, GNU introduced the
-.I \-v
-option to
-.BR ls (1),
-which is implemented using
-.BR versionsort (3),
-which again uses
-.BR strverscmp ().
-.PP
-Thus, the task of
-.BR strverscmp ()
-is to compare two strings and find the "right" order, while
-.BR strcmp (3)
-finds only the lexicographic order.
-This function does not use
-the locale category
-.BR LC_COLLATE ,
-so is meant mostly for situations
-where the strings are expected to be in ASCII.
-.PP
-What this function does is the following.
-If both strings are equal, return 0.
-Otherwise, find the position
-between two bytes with the property that before it both strings are equal,
-while directly after it there is a difference.
-Find the largest consecutive digit strings containing (or starting at,
-or ending at) this position.
-If one or both of these is empty,
-then return what
-.BR strcmp (3)
-would have returned (numerical ordering of byte values).
-Otherwise, compare both digit strings numerically, where digit strings with
-one or more leading zeros are interpreted as if they have a decimal point
-in front (so that in particular digit strings with more leading zeros
-come before digit strings with fewer leading zeros).
-Thus, the ordering is
-.IR 000 ", " 00 ", " 01 ", " 010 ", " 09 ", " 0 ", " 1 ", " 9 ", " 10 .
-.SH RETURN VALUE
-The
-.BR strverscmp ()
-function returns an integer
-less than, equal to, or greater than zero if
-.I s1
-is found, respectively, to be earlier than, equal to,
-or later than
-.IR s2 .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strverscmp ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.\" FIXME: The marking is different from that in the glibc manual,
-.\" which has:
-.\"
-.\" strverscmp: MT-Safe locale
-.\"
-.\" glibc manual says strverscmp should have marking locale because it calls
-.\" isdigit() multiple times and isdigit() uses locale variable.
-.\" But isdigit() has two implementations. With different compiling conditions,
-.\" we may call isdigit() in macro, then strverscmp() should not have locale
-.\" problem.
-.SH STANDARDS
-GNU.
-.SH EXAMPLES
-The program below can be used to demonstrate the behavior of
-.BR strverscmp ().
-It uses
-.BR strverscmp ()
-to compare the two strings given as its command-line arguments.
-An example of its use is the following:
-.PP
-.in +4n
-.EX
-$ \fB./a.out jan1 jan10\fP
-jan1 < jan10
-.EE
-.in
-.SS Program source
-\&
-.\" SRC BEGIN (strverscmp.c)
-.EX
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-\&
-int
-main(int argc, char *argv[])
-{
- int res;
-\&
- if (argc != 3) {
- fprintf(stderr, "Usage: %s <string1> <string2>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- res = strverscmp(argv[1], argv[2]);
-\&
- printf("%s %s %s\en", argv[1],
- (res < 0) ? "<" : (res == 0) ? "==" : ">", argv[2]);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR rename (1),
-.BR strcasecmp (3),
-.BR strcmp (3),
-.BR strcoll (3)
diff --git a/man3/strxfrm.3 b/man3/strxfrm.3
deleted file mode 100644
index 4c92fea4d..000000000
--- a/man3/strxfrm.3
+++ /dev/null
@@ -1,89 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sun Jul 25 10:41:28 1993 by Rik Faith (faith@cs.unc.edu)
-.TH strxfrm 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-strxfrm \- string transformation
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <string.h>
-.PP
-.BI "size_t strxfrm(char " dest "[restrict ." n "], \
-const char " src "[restrict ." n ],
-.BI " size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR strxfrm ()
-function transforms the
-.I src
-string into a
-form such that the result of
-.BR strcmp (3)
-on two strings that have
-been transformed with
-.BR strxfrm ()
-is the same as the result of
-.BR strcoll (3)
-on the two strings before their transformation.
-The first
-.I n
-bytes of the transformed string are placed in
-.IR dest .
-The transformation is based on the program's current
-locale for category
-.BR LC_COLLATE .
-(See
-.BR setlocale (3)).
-.SH RETURN VALUE
-The
-.BR strxfrm ()
-function returns the number of bytes required to
-store the transformed string in
-.I dest
-excluding the
-terminating null byte (\[aq]\e0\[aq]).
-If the value returned is
-.I n
-or more, the
-contents of
-.I dest
-are indeterminate.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR strxfrm ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR memcmp (3),
-.BR setlocale (3),
-.BR strcasecmp (3),
-.BR strcmp (3),
-.BR strcoll (3),
-.BR string (3)
diff --git a/man3/svc_destroy.3 b/man3/svc_destroy.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svc_destroy.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svc_freeargs.3 b/man3/svc_freeargs.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svc_freeargs.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svc_getargs.3 b/man3/svc_getargs.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svc_getargs.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svc_getcaller.3 b/man3/svc_getcaller.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svc_getcaller.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svc_getreq.3 b/man3/svc_getreq.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svc_getreq.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svc_getreqset.3 b/man3/svc_getreqset.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svc_getreqset.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svc_register.3 b/man3/svc_register.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svc_register.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svc_run.3 b/man3/svc_run.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svc_run.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svc_sendreply.3 b/man3/svc_sendreply.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svc_sendreply.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svc_unregister.3 b/man3/svc_unregister.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svc_unregister.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svcerr_auth.3 b/man3/svcerr_auth.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svcerr_auth.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svcerr_decode.3 b/man3/svcerr_decode.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svcerr_decode.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svcerr_noproc.3 b/man3/svcerr_noproc.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svcerr_noproc.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svcerr_noprog.3 b/man3/svcerr_noprog.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svcerr_noprog.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svcerr_progvers.3 b/man3/svcerr_progvers.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svcerr_progvers.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svcerr_systemerr.3 b/man3/svcerr_systemerr.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svcerr_systemerr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svcerr_weakauth.3 b/man3/svcerr_weakauth.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svcerr_weakauth.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svcfd_create.3 b/man3/svcfd_create.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svcfd_create.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svcraw_create.3 b/man3/svcraw_create.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svcraw_create.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svctcp_create.3 b/man3/svctcp_create.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svctcp_create.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svcudp_bufcreate.3 b/man3/svcudp_bufcreate.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svcudp_bufcreate.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/svcudp_create.3 b/man3/svcudp_create.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/svcudp_create.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/swab.3 b/man3/swab.3
deleted file mode 100644
index 2f7a3236b..000000000
--- a/man3/swab.3
+++ /dev/null
@@ -1,79 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 17:52:15 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2001-12-15, aeb
-.TH swab 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-swab \- swap adjacent bytes
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _XOPEN_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <unistd.h>
-.PP
-.BI "void swab(const void " from "[restrict ." n "], void " to "[restrict ." n ],
-.BI " ssize_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR swab ()
-function copies
-.I n
-bytes from the array pointed
-to by
-.I from
-to the array pointed to by
-.IR to ,
-exchanging
-adjacent even and odd bytes.
-This function is used to exchange data
-between machines that have different low/high byte ordering.
-.PP
-This function does nothing when
-.I n
-is negative.
-When
-.I n
-is positive and odd, it handles
-.I n\-1
-bytes
-as above, and does something unspecified with the last byte.
-(In other words,
-.I n
-should be even.)
-.SH RETURN VALUE
-The
-.BR swab ()
-function returns no value.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR swab ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.SH SEE ALSO
-.BR bstring (3)
diff --git a/man3/swapcontext.3 b/man3/swapcontext.3
deleted file mode 100644
index cdccd64ec..000000000
--- a/man3/swapcontext.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/makecontext.3
diff --git a/man3/swprintf.3 b/man3/swprintf.3
deleted file mode 100644
index 56ec9685b..000000000
--- a/man3/swprintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/wprintf.3
diff --git a/man3/sys_errlist.3 b/man3/sys_errlist.3
deleted file mode 100644
index 837f1a191..000000000
--- a/man3/sys_errlist.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/perror.3
diff --git a/man3/sys_nerr.3 b/man3/sys_nerr.3
deleted file mode 100644
index 837f1a191..000000000
--- a/man3/sys_nerr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/perror.3
diff --git a/man3/sys_siglist.3 b/man3/sys_siglist.3
deleted file mode 100644
index f64f75692..000000000
--- a/man3/sys_siglist.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/strsignal.3
diff --git a/man3/sysconf.3 b/man3/sysconf.3
deleted file mode 100644
index a15e1483a..000000000
--- a/man3/sysconf.3
+++ /dev/null
@@ -1,393 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 17:51:42 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Tue Aug 17 11:42:20 1999 by Ariel Scolnicov (ariels@compugen.co.il)
-.TH sysconf 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sysconf \- get configuration information at run time
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "long sysconf(int " "name" );
-.fi
-.SH DESCRIPTION
-POSIX allows an application to test at compile or run time
-whether certain options are supported, or what the value is
-of certain configurable constants or limits.
-.PP
-At compile time this is done by including
-.I <unistd.h>
-and/or
-.I <limits.h>
-and testing the value of certain macros.
-.PP
-At run time, one can ask for numerical values using the present function
-.BR sysconf ().
-One can ask for numerical values that may depend
-on the filesystem in which a file resides using
-.BR fpathconf (3)
-and
-.BR pathconf (3).
-One can ask for string values using
-.BR confstr (3).
-.PP
-The values obtained from these functions are system configuration constants.
-They do not change during the lifetime of a process.
-.\" except that sysconf(_SC_OPEN_MAX) may change answer after a call
-.\" to setrlimit( ) which changes the RLIMIT_NOFILE soft limit
-.PP
-For options, typically, there is a constant
-.B _POSIX_FOO
-that may be defined in
-.IR <unistd.h> .
-If it is undefined, one should ask at run time.
-If it is defined to \-1, then the option is not supported.
-If it is defined to 0, then relevant functions and headers exist,
-but one has to ask at run time what degree of support is available.
-If it is defined to a value other than \-1 or 0, then the option is
-supported.
-Usually the value (such as 200112L) indicates the year and month
-of the POSIX revision describing the option.
-glibc uses the value 1
-to indicate support as long as the POSIX revision has not been published yet.
-.\" and 999 to indicate support for options no longer present in the latest
-.\" standard. (?)
-The
-.BR sysconf ()
-argument will be
-.BR _SC_FOO .
-For a list of options, see
-.BR posixoptions (7).
-.PP
-For variables or limits, typically, there is a constant
-.BR _FOO ,
-maybe defined in
-.IR <limits.h> ,
-or
-.BR _POSIX_FOO ,
-maybe defined in
-.IR <unistd.h> .
-The constant will not be defined if the limit is unspecified.
-If the constant is defined, it gives a guaranteed value, and
-a greater value might actually be supported.
-If an application wants to take advantage of values which may change
-between systems, a call to
-.BR sysconf ()
-can be made.
-The
-.BR sysconf ()
-argument will be
-.BR _SC_FOO .
-.SS POSIX.1 variables
-We give the name of the variable, the name of the
-.BR sysconf ()
-argument used to inquire about its value,
-and a short description.
-.PP
-First, the POSIX.1 compatible values.
-.\" [for the moment: only the things that are unconditionally present]
-.\" .TP
-.\" .BR AIO_LISTIO_MAX " - " _SC_AIO_LISTIO_MAX
-.\" (if _POSIX_ASYNCHRONOUS_IO)
-.\" Maximum number of I/O operations in a single list I/O call.
-.\" Must not be less than _POSIX_AIO_LISTIO_MAX.
-.\" .TP
-.\" .BR AIO_MAX " - " _SC_AIO_MAX
-.\" (if _POSIX_ASYNCHRONOUS_IO)
-.\" Maximum number of outstanding asynchronous I/O operations.
-.\" Must not be less than _POSIX_AIO_MAX.
-.\" .TP
-.\" .BR AIO_PRIO_DELTA_MAX " - " _SC_AIO_PRIO_DELTA_MAX
-.\" (if _POSIX_ASYNCHRONOUS_IO)
-.\" The maximum amount by which a process can decrease its
-.\" asynchronous I/O priority level from its own scheduling priority.
-.\" Must be nonnegative.
-.TP
-.BR ARG_MAX " - " _SC_ARG_MAX
-The maximum length of the arguments to the
-.BR exec (3)
-family of functions.
-Must not be less than
-.B _POSIX_ARG_MAX
-(4096).
-.TP
-.BR CHILD_MAX " - " _SC_CHILD_MAX
-The maximum number of simultaneous processes per user ID.
-Must not be less than
-.B _POSIX_CHILD_MAX
-(25).
-.TP
-.BR HOST_NAME_MAX " - " _SC_HOST_NAME_MAX
-Maximum length of a hostname, not including the terminating null byte,
-as returned by
-.BR gethostname (2).
-Must not be less than
-.B _POSIX_HOST_NAME_MAX
-(255).
-.TP
-.BR LOGIN_NAME_MAX " - " _SC_LOGIN_NAME_MAX
-Maximum length of a login name, including the terminating null byte.
-Must not be less than
-.B _POSIX_LOGIN_NAME_MAX
-(9).
-.TP
-.BR NGROUPS_MAX " - " _SC_NGROUPS_MAX
-Maximum number of supplementary group IDs.
-.TP
-.BR "" "clock ticks - " _SC_CLK_TCK
-The number of clock ticks per second.
-The corresponding variable is obsolete.
-It was of course called
-.BR CLK_TCK .
-(Note: the macro
-.B CLOCKS_PER_SEC
-does not give information: it must equal 1000000.)
-.TP
-.BR OPEN_MAX " - " _SC_OPEN_MAX
-The maximum number of files that a process can have open at any time.
-Must not be less than
-.B _POSIX_OPEN_MAX
-(20).
-.TP
-.BR PAGESIZE " - " _SC_PAGESIZE
-Size of a page in bytes.
-Must not be less than 1.
-.TP
-.BR PAGE_SIZE " - " _SC_PAGE_SIZE
-A synonym for
-.BR PAGESIZE / _SC_PAGESIZE .
-(Both
-.B PAGESIZE
-and
-.B PAGE_SIZE
-are specified in POSIX.)
-.TP
-.BR RE_DUP_MAX " - " _SC_RE_DUP_MAX
-The number of repeated occurrences of a BRE permitted by
-.BR regexec (3)
-and
-.BR regcomp (3).
-Must not be less than
-.B _POSIX2_RE_DUP_MAX
-(255).
-.TP
-.BR STREAM_MAX " - " _SC_STREAM_MAX
-The maximum number of streams that a process can have open at any
-time.
-If defined, it has the same value as the standard C macro
-.BR FOPEN_MAX .
-Must not be less than
-.B _POSIX_STREAM_MAX
-(8).
-.TP
-.BR SYMLOOP_MAX " - " _SC_SYMLOOP_MAX
-The maximum number of symbolic links seen in a pathname before resolution
-returns
-.BR ELOOP .
-Must not be less than
-.B _POSIX_SYMLOOP_MAX
-(8).
-.TP
-.BR TTY_NAME_MAX " - " _SC_TTY_NAME_MAX
-The maximum length of terminal device name,
-including the terminating null byte.
-Must not be less than
-.B _POSIX_TTY_NAME_MAX
-(9).
-.TP
-.BR TZNAME_MAX " - " _SC_TZNAME_MAX
-The maximum number of bytes in a timezone name.
-Must not be less than
-.B _POSIX_TZNAME_MAX
-(6).
-.TP
-.BR _POSIX_VERSION " - " _SC_VERSION
-indicates the year and month the POSIX.1 standard was approved in the
-format
-.BR YYYYMML ;
-the value
-.B 199009L
-indicates the Sept. 1990 revision.
-.SS POSIX.2 variables
-Next, the POSIX.2 values, giving limits for utilities.
-.TP
-.BR BC_BASE_MAX " - " _SC_BC_BASE_MAX
-indicates the maximum
-.I obase
-value accepted by the
-.BR bc (1)
-utility.
-.TP
-.BR BC_DIM_MAX " - " _SC_BC_DIM_MAX
-indicates the maximum value of elements permitted in an array by
-.BR bc (1).
-.TP
-.BR BC_SCALE_MAX " - " _SC_BC_SCALE_MAX
-indicates the maximum
-.I scale
-value allowed by
-.BR bc (1).
-.TP
-.BR BC_STRING_MAX " - " _SC_BC_STRING_MAX
-indicates the maximum length of a string accepted by
-.BR bc (1).
-.TP
-.BR COLL_WEIGHTS_MAX " - " _SC_COLL_WEIGHTS_MAX
-indicates the maximum numbers of weights that can be assigned to an
-entry of the
-.B LC_COLLATE order
-keyword in the locale definition file.
-.TP
-.BR EXPR_NEST_MAX " - " _SC_EXPR_NEST_MAX
-is the maximum number of expressions which can be nested within
-parentheses by
-.BR expr (1).
-.TP
-.BR LINE_MAX " - " _SC_LINE_MAX
-The maximum length of a utility's input line, either from
-standard input or from a file.
-This includes space for a trailing
-newline.
-.TP
-.BR RE_DUP_MAX " - " _SC_RE_DUP_MAX
-The maximum number of repeated occurrences of a regular expression when
-the interval notation
-.B \e{m,n\e}
-is used.
-.TP
-.BR POSIX2_VERSION " - " _SC_2_VERSION
-indicates the version of the POSIX.2 standard in the format of
-YYYYMML.
-.TP
-.BR POSIX2_C_DEV " - " _SC_2_C_DEV
-indicates whether the POSIX.2 C language development facilities are
-supported.
-.TP
-.BR POSIX2_FORT_DEV " - " _SC_2_FORT_DEV
-indicates whether the POSIX.2 FORTRAN development utilities are
-supported.
-.TP
-.BR POSIX2_FORT_RUN " - " _SC_2_FORT_RUN
-indicates whether the POSIX.2 FORTRAN run-time utilities are supported.
-.TP
-.BR _POSIX2_LOCALEDEF " - " _SC_2_LOCALEDEF
-indicates whether the POSIX.2 creation of locales via
-.BR localedef (1)
-is supported.
-.TP
-.BR POSIX2_SW_DEV " - " _SC_2_SW_DEV
-indicates whether the POSIX.2 software development utilities option is
-supported.
-.PP
-These values also exist, but may not be standard.
-.TP
-.BR "" " - " _SC_PHYS_PAGES
-The number of pages of physical memory.
-Note that it is possible
-for the product of this value and the value of
-.B _SC_PAGESIZE
-to overflow.
-.TP
-.BR "" " - " _SC_AVPHYS_PAGES
-The number of currently available pages of physical memory.
-.TP
-.BR "" " - " _SC_NPROCESSORS_CONF
-The number of processors configured.
-See also
-.BR get_nprocs_conf (3).
-.TP
-.BR "" " - " _SC_NPROCESSORS_ONLN
-The number of processors currently online (available).
-See also
-.BR get_nprocs_conf (3).
-.SH RETURN VALUE
-The return value of
-.BR sysconf ()
-is one of the following:
-.IP \[bu] 3
-On error, \-1 is returned and
-.I errno
-is set to indicate the error
-(for example,
-.BR EINVAL ,
-indicating that
-.I name
-is invalid).
-.IP \[bu]
-If
-.I name
-corresponds to a maximum or minimum limit, and that limit is indeterminate,
-\-1 is returned and
-.I errno
-is not changed.
-(To distinguish an indeterminate limit from an error, set
-.I errno
-to zero before the call, and then check whether
-.I errno
-is nonzero when \-1 is returned.)
-.IP \[bu]
-If
-.I name
-corresponds to an option,
-a positive value is returned if the option is supported,
-and \-1 is returned if the option is not supported.
-.IP \[bu]
-Otherwise,
-the current value of the option or limit is returned.
-This value will not be more restrictive than
-the corresponding value that was described to the application in
-.I <unistd.h>
-or
-.I <limits.h>
-when the application was compiled.
-.SH ERRORS
-.TP
-.B EINVAL
-.I name
-is invalid.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sysconf ()
-T} Thread safety MT-Safe env
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH BUGS
-It is difficult to use
-.B ARG_MAX
-because it is not specified how much of the argument space for
-.BR exec (3)
-is consumed by the user's environment variables.
-.PP
-Some returned values may be huge; they are not suitable for allocating
-memory.
-.SH SEE ALSO
-.BR bc (1),
-.BR expr (1),
-.BR getconf (1),
-.BR locale (1),
-.BR confstr (3),
-.BR fpathconf (3),
-.BR pathconf (3),
-.BR posixoptions (7)
diff --git a/man3/syslog.3 b/man3/syslog.3
deleted file mode 100644
index 6fa3a1b3f..000000000
--- a/man3/syslog.3
+++ /dev/null
@@ -1,360 +0,0 @@
-'\" t
-.\" Written Feb 1994 by Steve Greenland (stevegr@neosoft.com)
-.\" and Copyright 2001, 2017 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Updated 1999.12.19 by Karl M. Hegbloom <karlheg@debian.org>
-.\"
-.\" Updated 13 Oct 2001, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added description of vsyslog
-.\" Added descriptions of LOG_ODELAY and LOG_NOWAIT
-.\" Added brief description of facility and option arguments
-.\" Added CONFORMING TO section
-.\" 2001-10-13, aeb, minor changes
-.\" Modified 13 Dec 2001, Martin Schulze <joey@infodrom.org>
-.\" Modified 3 Jan 2002, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH syslog 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-closelog, openlog, syslog, vsyslog \- send messages to the system logger
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <syslog.h>
-.PP
-.BI "void openlog(const char *" ident ", int " option ", int " facility );
-.BI "void syslog(int " priority ", const char *" format ", ...);"
-.B "void closelog(void);"
-.PP
-.BI "void vsyslog(int " priority ", const char *" format ", va_list " ap );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR vsyslog ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-.SS openlog()
-.BR openlog ()
-opens a connection to the system logger for a program.
-.PP
-The string pointed to by
-.I ident
-is prepended to every message, and is typically set to the program name.
-If
-.I ident
-is NULL, the program name is used.
-(POSIX.1-2008 does not specify the behavior when
-.I ident
-is NULL.)
-.PP
-The
-.I option
-argument specifies flags which control the operation of
-.BR openlog ()
-and subsequent calls to
-.BR syslog ().
-The
-.I facility
-argument establishes a default to be used if
-none is specified in subsequent calls to
-.BR syslog ().
-The values that may be specified for
-.I option
-and
-.I facility
-are described below.
-.PP
-The use of
-.BR openlog ()
-is optional; it will automatically be called by
-.BR syslog ()
-if necessary, in which case
-.I ident
-will default to NULL.
-.\"
-.SS syslog() and vsyslog()
-.BR syslog ()
-generates a log message, which will be distributed by
-.BR syslogd (8).
-.PP
-The
-.I priority
-argument is formed by ORing together a
-.I facility
-value and a
-.I level
-value (described below).
-If no
-.I facility
-value is ORed into
-.IR priority ,
-then the default value set by
-.BR openlog ()
-is used, or, if there was no preceding
-.BR openlog ()
-call, a default of
-.B LOG_USER
-is employed.
-.PP
-The remaining arguments are a
-.IR format ,
-as in
-.BR printf (3),
-and any arguments required by the
-.IR format ,
-except that the two-character sequence
-.B %m
-will be replaced by
-the error message string
-.IR strerror ( errno ).
-The format string need not include a terminating newline character.
-.PP
-The function
-.BR vsyslog ()
-performs the same task as
-.BR syslog ()
-with the difference that it takes a set of arguments which have
-been obtained using the
-.BR stdarg (3)
-variable argument list macros.
-.\"
-.SS closelog()
-.BR closelog ()
-closes the file descriptor being used to write to the system logger.
-The use of
-.BR closelog ()
-is optional.
-.\"
-.SS Values for \fIoption\fP
-The
-.I option
-argument to
-.BR openlog ()
-is a bit mask constructed by ORing together any of the following values:
-.TP 15
-.B LOG_CONS
-Write directly to the system console if there is an error while sending to
-the system logger.
-.TP
-.B LOG_NDELAY
-Open the connection immediately (normally, the connection is opened when
-the first message is logged).
-This may be useful, for example, if a subsequent
-.BR chroot (2)
-would make the pathname used internally by the logging facility unreachable.
-.TP
-.B LOG_NOWAIT
-Don't wait for child processes that may have been created while logging
-the message.
-(The GNU C library does not create a child process, so this
-option has no effect on Linux.)
-.TP
-.B LOG_ODELAY
-The converse of
-.BR LOG_NDELAY ;
-opening of the connection is delayed until
-.BR syslog ()
-is called.
-(This is the default, and need not be specified.)
-.TP
-.B LOG_PERROR
-(Not in POSIX.1-2001 or POSIX.1-2008.)
-Also log the message to
-.IR stderr .
-.TP
-.B LOG_PID
-Include the caller's PID with each message.
-.\"
-.SS Values for \fIfacility\fP
-The
-.I facility
-argument is used to specify what type of program is logging the message.
-This lets the configuration file specify that messages from different
-facilities will be handled differently.
-.TP 15
-.B LOG_AUTH
-security/authorization messages
-.TP
-.B LOG_AUTHPRIV
-security/authorization messages (private)
-.TP
-.B LOG_CRON
-clock daemon
-.RB ( cron " and " at )
-.TP
-.B LOG_DAEMON
-system daemons without separate facility value
-.TP
-.B LOG_FTP
-ftp daemon
-.TP
-.B LOG_KERN
-kernel messages (these can't be generated from user processes)
-.\" LOG_KERN has the value 0; if used as a facility, zero translates to:
-.\" "use the default facility".
-.TP
-.BR LOG_LOCAL0 " through " LOG_LOCAL7
-reserved for local use
-.TP
-.B LOG_LPR
-line printer subsystem
-.TP
-.B LOG_MAIL
-mail subsystem
-.TP
-.B LOG_NEWS
-USENET news subsystem
-.TP
-.B LOG_SYSLOG
-messages generated internally by
-.BR syslogd (8)
-.TP
-.BR LOG_USER " (default)"
-generic user-level messages
-.TP
-.B LOG_UUCP
-UUCP subsystem
-.\"
-.SS Values for \fIlevel\fP
-This determines the importance of the message.
-The levels are, in order of decreasing importance:
-.TP 15
-.B LOG_EMERG
-system is unusable
-.TP
-.B LOG_ALERT
-action must be taken immediately
-.TP
-.B LOG_CRIT
-critical conditions
-.TP
-.B LOG_ERR
-error conditions
-.TP
-.B LOG_WARNING
-warning conditions
-.TP
-.B LOG_NOTICE
-normal, but significant, condition
-.TP
-.B LOG_INFO
-informational message
-.TP
-.B LOG_DEBUG
-debug-level message
-.PP
-The function
-.BR setlogmask (3)
-can be used to restrict logging to specified levels only.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR openlog (),
-.BR closelog ()
-T} Thread safety MT-Safe
-T{
-.BR syslog (),
-.BR vsyslog ()
-T} Thread safety MT-Safe env locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR syslog ()
-.TQ
-.BR openlog ()
-.TQ
-.BR closelog ()
-POSIX.1-2008.
-.TP
-.BR vsyslog ()
-None.
-.SH HISTORY
-.TP
-.BR syslog ()
-4.2BSD, SUSv2, POSIX.1-2001.
-.TP
-.BR openlog ()
-.TQ
-.BR closelog ()
-4.3BSD, SUSv2, POSIX.1-2001.
-.\" .SH HISTORY
-.\" 4.3BSD documents
-.\" .BR setlogmask ().
-.TP
-.BR vsyslog ()
-4.3BSD-Reno.
-.\" Of course early v* functions used the
-.\" .I <varargs.h>
-.\" mechanism, which is not compatible with
-.\" .IR <stdarg.h> .
-.PP
-POSIX.1-2001 specifies only the
-.B LOG_USER
-and
-.B LOG_LOCAL*
-values for
-.IR facility .
-However, with the exception of
-.B LOG_AUTHPRIV
-and
-.BR LOG_FTP ,
-the other
-.I facility
-values appear on most UNIX systems.
-.PP
-The
-.B LOG_PERROR
-value for
-.I option
-is not specified by POSIX.1-2001 or POSIX.1-2008, but is available
-in most versions of UNIX.
-.SH NOTES
-The argument
-.I ident
-in the call of
-.BR openlog ()
-is probably stored as-is.
-Thus, if the string it points to
-is changed,
-.BR syslog ()
-may start prepending the changed string, and if the string
-it points to ceases to exist, the results are undefined.
-Most portable is to use a string constant.
-.PP
-Never pass a string with user-supplied data as a format,
-use the following instead:
-.PP
-.in +4n
-.EX
-syslog(priority, "%s", string);
-.EE
-.in
-.SH SEE ALSO
-.BR journalctl (1),
-.BR logger (1),
-.BR setlogmask (3),
-.BR syslog.conf (5),
-.BR syslogd (8)
diff --git a/man3/system.3 b/man3/system.3
deleted file mode 100644
index 9bf432b09..000000000
--- a/man3/system.3
+++ /dev/null
@@ -1,272 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\" and Copyright (c) 2014 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 17:51:15 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 11 May 1998 by Joseph S. Myers (jsm28@cam.ac.uk)
-.\" Modified 14 May 2001, 23 Sep 2001 by aeb
-.\" 2004-12-20, mtk
-.\"
-.TH system 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-system \- execute a shell command
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int system(const char *" "command" );
-.fi
-.SH DESCRIPTION
-The
-.BR system ()
-library function behaves as if it used
-.BR fork (2)
-to create a child process that executed the shell command specified in
-.I command
-using
-.BR execl (3)
-as follows:
-.PP
-.in +4n
-.EX
-execl("/bin/sh", "sh", "\-c", command, (char *) NULL);
-.EE
-.in
-.PP
-.BR system ()
-returns after the command has been completed.
-.PP
-During execution of the command,
-.B SIGCHLD
-will be blocked, and
-.B SIGINT
-and
-.B SIGQUIT
-will be ignored, in the process that calls
-.BR system ().
-(These signals will be handled according to their defaults inside
-the child process that executes
-.IR command .)
-.PP
-If
-.I command
-is NULL, then
-.BR system ()
-returns a status indicating whether a shell is available on the system.
-.SH RETURN VALUE
-The return value of
-.BR system ()
-is one of the following:
-.IP \[bu] 3
-If
-.I command
-is NULL, then a nonzero value if a shell is available,
-or 0 if no shell is available.
-.IP \[bu]
-If a child process could not be created,
-or its status could not be retrieved,
-the return value is \-1 and
-.I errno
-is set to indicate the error.
-.IP \[bu]
-If a shell could not be executed in the child process,
-then the return value is as though the child shell terminated by calling
-.BR _exit (2)
-with the status 127.
-.IP \[bu]
-If all system calls succeed,
-then the return value is the termination status of the child shell
-used to execute
-.IR command .
-(The termination status of a shell is the termination status of
-the last command it executes.)
-.PP
-In the last two cases,
-the return value is a "wait status" that can be examined using
-the macros described in
-.BR waitpid (2).
-(i.e.,
-.BR WIFEXITED (),
-.BR WEXITSTATUS (),
-and so on).
-.PP
-.BR system ()
-does not affect the wait status of any other children.
-.SH ERRORS
-.BR system ()
-can fail with any of the same errors as
-.BR fork (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR system ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89.
-.SH NOTES
-.BR system ()
-provides simplicity and convenience:
-it handles all of the details of calling
-.BR fork (2),
-.BR execl (3),
-and
-.BR waitpid (2),
-as well as the necessary manipulations of signals;
-in addition,
-the shell performs the usual substitutions and I/O redirections for
-.IR command .
-The main cost of
-.BR system ()
-is inefficiency:
-additional system calls are required to create the process that
-runs the shell and to execute the shell.
-.PP
-If the
-.B _XOPEN_SOURCE
-feature test macro is defined
-(before including
-.I any
-header files),
-then the macros described in
-.BR waitpid (2)
-.RB ( WEXITSTATUS (),
-etc.) are made available when including
-.IR <stdlib.h> .
-.PP
-As mentioned,
-.BR system ()
-ignores
-.B SIGINT
-and
-.BR SIGQUIT .
-This may make programs that call it
-from a loop uninterruptible, unless they take care themselves
-to check the exit status of the child.
-For example:
-.PP
-.in +4n
-.EX
-while (something) {
- int ret = system("foo");
-\&
- if (WIFSIGNALED(ret) &&
- (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT))
- break;
-}
-.EE
-.in
-.PP
-According to POSIX.1, it is unspecified whether handlers registered using
-.BR pthread_atfork (3)
-are called during the execution of
-.BR system ().
-In the glibc implementation, such handlers are not called.
-.PP
-Before glibc 2.1.3, the check for the availability of
-.I /bin/sh
-was not actually performed if
-.I command
-was NULL; instead it was always assumed to be available, and
-.BR system ()
-always returned 1 in this case.
-Since glibc 2.1.3, this check is performed because, even though
-POSIX.1-2001 requires a conforming implementation to provide
-a shell, that shell may not be available or executable if
-the calling program has previously called
-.BR chroot (2)
-(which is not specified by POSIX.1-2001).
-.PP
-It is possible for the shell command to terminate with a status of 127,
-which yields a
-.BR system ()
-return value that is indistinguishable from the case
-where a shell could not be executed in the child process.
-.\"
-.SS Caveats
-Do not use
-.BR system ()
-from a privileged program
-(a set-user-ID or set-group-ID program, or a program with capabilities)
-because strange values for some environment variables
-might be used to subvert system integrity.
-For example,
-.B PATH
-could be manipulated so that an arbitrary program
-is executed with privilege.
-Use the
-.BR exec (3)
-family of functions instead, but not
-.BR execlp (3)
-or
-.BR execvp (3)
-(which also use the
-.B PATH
-environment variable to search for an executable).
-.PP
-.BR system ()
-will not, in fact, work properly from programs with set-user-ID or
-set-group-ID privileges on systems on which
-.I /bin/sh
-is bash version 2: as a security measure, bash 2 drops privileges on startup.
-(Debian uses a different shell,
-.BR dash (1),
-which does not do this when invoked as
-.BR sh .)
-.PP
-Any user input that is employed as part of
-.I command
-should be
-.I carefully
-sanitized, to ensure that unexpected shell commands or command options
-are not executed.
-Such risks are especially grave when using
-.BR system ()
-from a privileged program.
-.SH BUGS
-.\" [BUG 211029](https://bugzilla.kernel.org/show_bug.cgi?id=211029)
-.\" [glibc bug](https://sourceware.org/bugzilla/show_bug.cgi?id=27143)
-.\" [POSIX bug](https://www.austingroupbugs.net/view.php?id=1440)
-If the command name starts with a hyphen,
-.BR sh (1)
-interprets the command name as an option,
-and the behavior is undefined.
-(See the
-.B \-c
-option to
-.BR sh (1).)
-To work around this problem,
-prepend the command with a space as in the following call:
-.PP
-.in +4n
-.EX
- system(" \-unfortunate\-command\-name");
-.EE
-.in
-.SH SEE ALSO
-.BR sh (1),
-.BR execve (2),
-.BR fork (2),
-.BR sigaction (2),
-.BR sigprocmask (2),
-.BR wait (2),
-.BR exec (3),
-.BR signal (7)
diff --git a/man3/sysv_signal.3 b/man3/sysv_signal.3
deleted file mode 100644
index aa75609b8..000000000
--- a/man3/sysv_signal.3
+++ /dev/null
@@ -1,93 +0,0 @@
-'\" t
-.\" Copyright (c) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sysv_signal 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sysv_signal \- signal handling with System V semantics
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <signal.h>
-.PP
-.B typedef void (*sighandler_t)(int);
-.PP
-.BI "sighandler_t sysv_signal(int " signum ", sighandler_t " handler );
-.fi
-.SH DESCRIPTION
-The
-.BR sysv_signal ()
-function takes the same arguments, and performs the same task, as
-.BR signal (2).
-.PP
-However
-.BR sysv_signal ()
-provides the System V unreliable signal semantics, that is:
-a) the disposition of the signal is reset to the default
-when the handler is invoked;
-b) delivery of further instances of the signal is not blocked while
-the signal handler is executing; and
-c) if the handler interrupts (certain) blocking system calls,
-then the system call is not automatically restarted.
-.SH RETURN VALUE
-The
-.BR sysv_signal ()
-function returns the previous value of the signal handler, or
-.B SIG_ERR
-on error.
-.SH ERRORS
-As for
-.BR signal (2).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR sysv_signal ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-Use of
-.BR sysv_signal ()
-should be avoided; use
-.BR sigaction (2)
-instead.
-.PP
-On older Linux systems,
-.BR sysv_signal ()
-and
-.BR signal (2)
-were equivalent.
-But on newer systems,
-.BR signal (2)
-provides reliable signal semantics; see
-.BR signal (2)
-for details.
-.PP
-The use of
-.I sighandler_t
-is a GNU extension;
-this type is defined only if
-the
-.B _GNU_SOURCE
-feature test macro is defined.
-.SH STANDARDS
-None.
-.SH SEE ALSO
-.BR sigaction (2),
-.BR signal (2),
-.BR bsd_signal (3),
-.BR signal (7)
diff --git a/man3/tailq.3 b/man3/tailq.3
deleted file mode 100644
index af34c5424..000000000
--- a/man3/tailq.3
+++ /dev/null
@@ -1,397 +0,0 @@
-.\" Copyright (c) 1993
-.\" The Regents of the University of California. All rights reserved.
-.\" and Copyright (c) 2020 by Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: BSD-3-Clause
-.\"
-.\"
-.TH TAILQ 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-TAILQ_CONCAT,
-TAILQ_EMPTY,
-TAILQ_ENTRY,
-TAILQ_FIRST,
-TAILQ_FOREACH,
-.\"TAILQ_FOREACH_FROM,
-.\"TAILQ_FOREACH_FROM_SAFE,
-TAILQ_FOREACH_REVERSE,
-.\"TAILQ_FOREACH_REVERSE_FROM,
-.\"TAILQ_FOREACH_REVERSE_FROM_SAFE,
-.\"TAILQ_FOREACH_REVERSE_SAFE,
-.\"TAILQ_FOREACH_SAFE,
-TAILQ_HEAD,
-TAILQ_HEAD_INITIALIZER,
-TAILQ_INIT,
-TAILQ_INSERT_AFTER,
-TAILQ_INSERT_BEFORE,
-TAILQ_INSERT_HEAD,
-TAILQ_INSERT_TAIL,
-TAILQ_LAST,
-TAILQ_NEXT,
-TAILQ_PREV,
-TAILQ_REMOVE
-.\"TAILQ_SWAP
-\- implementation of a doubly linked tail queue
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/queue.h>
-.PP
-.B TAILQ_ENTRY(TYPE);
-.PP
-.B TAILQ_HEAD(HEADNAME, TYPE);
-.BI "TAILQ_HEAD TAILQ_HEAD_INITIALIZER(TAILQ_HEAD " head );
-.BI "void TAILQ_INIT(TAILQ_HEAD *" head );
-.PP
-.BI "int TAILQ_EMPTY(TAILQ_HEAD *" head );
-.PP
-.BI "void TAILQ_INSERT_HEAD(TAILQ_HEAD *" head ,
-.BI " struct TYPE *" elm ", TAILQ_ENTRY " NAME );
-.BI "void TAILQ_INSERT_TAIL(TAILQ_HEAD *" head ,
-.BI " struct TYPE *" elm ", TAILQ_ENTRY " NAME );
-.BI "void TAILQ_INSERT_BEFORE(struct TYPE *" listelm ,
-.BI " struct TYPE *" elm ", TAILQ_ENTRY " NAME );
-.BI "void TAILQ_INSERT_AFTER(TAILQ_HEAD *" head ", struct TYPE *" listelm ,
-.BI " struct TYPE *" elm ", TAILQ_ENTRY " NAME );
-.PP
-.BI "struct TYPE *TAILQ_FIRST(TAILQ_HEAD *" head );
-.BI "struct TYPE *TAILQ_LAST(TAILQ_HEAD *" head ", HEADNAME);"
-.BI "struct TYPE *TAILQ_PREV(struct TYPE *" elm ", HEADNAME, TAILQ_ENTRY " NAME );
-.BI "struct TYPE *TAILQ_NEXT(struct TYPE *" elm ", TAILQ_ENTRY " NAME );
-.PP
-.BI "TAILQ_FOREACH(struct TYPE *" var ", TAILQ_HEAD *" head ,
-.BI " TAILQ_ENTRY " NAME );
-.\" .BI "TAILQ_FOREACH_FROM(struct TYPE *" var ", TAILQ_HEAD *" head ,
-.\" .BI " TAILQ_ENTRY " NAME );
-.BI "TAILQ_FOREACH_REVERSE(struct TYPE *" var ", TAILQ_HEAD *" head ", HEADNAME,"
-.BI " TAILQ_ENTRY " NAME );
-.\" .BI "TAILQ_FOREACH_REVERSE_FROM(struct TYPE *" var ", TAILQ_HEAD *" head ", HEADNAME,"
-.\" .BI " TAILQ_ENTRY " NAME );
-.\" .PP
-.\" .BI "TAILQ_FOREACH_SAFE(struct TYPE *" var ", TAILQ_HEAD *" head ,
-.\" .BI " TAILQ_ENTRY " NAME ,
-.\" .BI " struct TYPE *" temp_var );
-.\" .BI "TAILQ_FOREACH_FROM_SAFE(struct TYPE *" var ", TAILQ_HEAD *" head ,
-.\" .BI " TAILQ_ENTRY " NAME ,
-.\" .BI " struct TYPE *" temp_var );
-.\" .BI "TAILQ_FOREACH_REVERSE_SAFE(struct TYPE *" var ", TAILQ_HEAD *" head ,
-.\" .BI " HEADNAME, TAILQ_ENTRY " NAME ,
-.\" .BI " struct TYPE *" temp_var );
-.\" .BI "TAILQ_FOREACH_REVERSE_FROM_SAFE(struct TYPE *" var ", TAILQ_HEAD *" head ,
-.\" .BI " HEADNAME, TAILQ_ENTRY " NAME ,
-.\" .BI " struct TYPE *" temp_var );
-.PP
-.BI "void TAILQ_REMOVE(TAILQ_HEAD *" head ", struct TYPE *" elm ,
-.BI " TAILQ_ENTRY " NAME );
-.PP
-.BI "void TAILQ_CONCAT(TAILQ_HEAD *" head1 ", TAILQ_HEAD *" head2 ,
-.BI " TAILQ_ENTRY " NAME );
-.\" .BI "void TAILQ_SWAP(TAILQ_HEAD *" head1 ", TAILQ_HEAD *" head2 ", TYPE,"
-.\" .BI " TAILQ_ENTRY " NAME );
-.fi
-.SH DESCRIPTION
-These macros define and operate on doubly linked tail queues.
-.PP
-In the macro definitions,
-.I TYPE
-is the name of a user defined structure,
-that must contain a field of type
-.IR TAILQ_ENTRY ,
-named
-.IR NAME .
-The argument
-.I HEADNAME
-is the name of a user defined structure that must be declared
-using the macro
-.BR TAILQ_HEAD ().
-.SS Creation
-A tail queue is headed by a structure defined by the
-.BR TAILQ_HEAD ()
-macro.
-This structure contains a pair of pointers,
-one to the first element in the queue
-and the other to the last element in the queue.
-The elements are doubly linked
-so that an arbitrary element can be removed without traversing the queue.
-New elements can be added to the queue
-after an existing element,
-before an existing element,
-at the head of the queue,
-or at the end of the queue.
-A
-.I TAILQ_HEAD
-structure is declared as follows:
-.PP
-.in +4
-.EX
-TAILQ_HEAD(HEADNAME, TYPE) head;
-.EE
-.in
-.PP
-where
-.I struct HEADNAME
-is the structure to be defined, and
-.I struct TYPE
-is the type of the elements to be linked into the queue.
-A pointer to the head of the queue can later be declared as:
-.PP
-.in +4
-.EX
-struct HEADNAME *headp;
-.EE
-.in
-.PP
-(The names
-.I head
-and
-.I headp
-are user selectable.)
-.PP
-.BR TAILQ_ENTRY ()
-declares a structure that connects the elements in the queue.
-.PP
-.BR TAILQ_HEAD_INITIALIZER ()
-evaluates to an initializer for the queue
-.IR head .
-.PP
-.BR TAILQ_INIT ()
-initializes the queue referenced by
-.PP
-.BR TAILQ_EMPTY ()
-evaluates to true if there are no items on the queue.
-.IR head .
-.SS Insertion
-.BR TAILQ_INSERT_HEAD ()
-inserts the new element
-.I elm
-at the head of the queue.
-.PP
-.BR TAILQ_INSERT_TAIL ()
-inserts the new element
-.I elm
-at the end of the queue.
-.PP
-.BR TAILQ_INSERT_BEFORE ()
-inserts the new element
-.I elm
-before the element
-.IR listelm .
-.PP
-.BR TAILQ_INSERT_AFTER ()
-inserts the new element
-.I elm
-after the element
-.IR listelm .
-.SS Traversal
-.BR TAILQ_FIRST ()
-returns the first item on the queue, or NULL if the queue is empty.
-.PP
-.BR TAILQ_LAST ()
-returns the last item on the queue.
-If the queue is empty the return value is NULL.
-.PP
-.BR TAILQ_PREV ()
-returns the previous item on the queue, or NULL if this item is the first.
-.PP
-.BR TAILQ_NEXT ()
-returns the next item on the queue, or NULL if this item is the last.
-.PP
-.BR TAILQ_FOREACH ()
-traverses the queue referenced by
-.I head
-in the forward direction,
-assigning each element in turn to
-.IR var .
-.I var
-is set to NULL if the loop completes normally,
-or if there were no elements.
-.\" .PP
-.\" .BR TAILQ_FOREACH_FROM ()
-.\" behaves identically to
-.\" .BR TAILQ_FOREACH ()
-.\" when
-.\" .I var
-.\" is NULL, else it treats
-.\" .I var
-.\" as a previously found TAILQ element and begins the loop at
-.\" .I var
-.\" instead of the first element in the TAILQ referenced by
-.\" .IR head .
-.PP
-.BR TAILQ_FOREACH_REVERSE ()
-traverses the queue referenced by
-.I head
-in the reverse direction,
-assigning each element in turn to
-.IR var .
-.\" .PP
-.\" .BR TAILQ_FOREACH_REVERSE_FROM ()
-.\" behaves identically to
-.\" .BR TAILQ_FOREACH_REVERSE ()
-.\" when
-.\" .I var
-.\" is NULL, else it treats
-.\" .I var
-.\" as a previously found TAILQ element and begins the reverse loop at
-.\" .I var
-.\" instead of the last element in the TAILQ referenced by
-.\" .IR head .
-.\" .PP
-.\" .BR TAILQ_FOREACH_SAFE ()
-.\" and
-.\" .BR TAILQ_FOREACH_REVERSE_SAFE ()
-.\" traverse the list referenced by
-.\" .I head
-.\" in the forward or reverse direction respectively,
-.\" assigning each element in turn to
-.\" .IR var .
-.\" However, unlike their unsafe counterparts,
-.\" .BR TAILQ_FOREACH ()
-.\" and
-.\" .BR TAILQ_FOREACH_REVERSE ()
-.\" permit to both remove
-.\" .I var
-.\" as well as free it from within the loop safely without interfering with the
-.\" traversal.
-.\" .PP
-.\" .BR TAILQ_FOREACH_FROM_SAFE ()
-.\" behaves identically to
-.\" .BR TAILQ_FOREACH_SAFE ()
-.\" when
-.\" .I var
-.\" is NULL, else it treats
-.\" .I var
-.\" as a previously found TAILQ element and begins the loop at
-.\" .I var
-.\" instead of the first element in the TAILQ referenced by
-.\" .IR head .
-.\" .PP
-.\" .BR TAILQ_FOREACH_REVERSE_FROM_SAFE ()
-.\" behaves identically to
-.\" .BR TAILQ_FOREACH_REVERSE_SAFE ()
-.\" when
-.\" .I var
-.\" is NULL, else it treats
-.\" .I var
-.\" as a previously found TAILQ element and begins the reverse loop at
-.\" .I var
-.\" instead of the last element in the TAILQ referenced by
-.\" .IR head .
-.SS Removal
-.BR TAILQ_REMOVE ()
-removes the element
-.I elm
-from the queue.
-.SS Other features
-.\" .BR TAILQ_SWAP ()
-.\" swaps the contents of
-.\" .I head1
-.\" and
-.\" .IR head2 .
-.\" .PP
-.BR TAILQ_CONCAT ()
-concatenates the queue headed by
-.I head2
-onto the end of the one headed by
-.I head1
-removing all entries from the former.
-.SH RETURN VALUE
-.BR TAILQ_EMPTY ()
-returns nonzero if the queue is empty,
-and zero if the queue contains at least one entry.
-.PP
-.BR TAILQ_FIRST (),
-.BR TAILQ_LAST (),
-.BR TAILQ_PREV (),
-and
-.BR TAILQ_NEXT ()
-return a pointer to the first, last, previous, or next
-.I TYPE
-structure, respectively.
-.PP
-.BR TAILQ_HEAD_INITIALIZER ()
-returns an initializer that can be assigned to the queue
-.IR head .
-.SH STANDARDS
-BSD.
-.SH HISTORY
-4.4BSD.
-.SH CAVEATS
-.BR TAILQ_FOREACH ()
-and
-.BR TAILQ_FOREACH_REVERSE ()
-don't allow
-.I var
-to be removed or freed within the loop,
-as it would interfere with the traversal.
-.BR TAILQ_FOREACH_SAFE ()
-and
-.BR TAILQ_FOREACH_REVERSE_SAFE (),
-which are present on the BSDs but are not present in glibc,
-fix this limitation by allowing
-.I var
-to safely be removed from the list and freed from within the loop
-without interfering with the traversal.
-.SH EXAMPLES
-.\" SRC BEGIN (tailq.c)
-.EX
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/queue.h>
-\&
-struct entry {
- int data;
- TAILQ_ENTRY(entry) entries; /* Tail queue */
-};
-\&
-TAILQ_HEAD(tailhead, entry);
-\&
-int
-main(void)
-{
- struct entry *n1, *n2, *n3, *np;
- struct tailhead head; /* Tail queue head */
- int i;
-\&
- TAILQ_INIT(&head); /* Initialize the queue */
-\&
- n1 = malloc(sizeof(struct entry)); /* Insert at the head */
- TAILQ_INSERT_HEAD(&head, n1, entries);
-\&
- n1 = malloc(sizeof(struct entry)); /* Insert at the tail */
- TAILQ_INSERT_TAIL(&head, n1, entries);
-\&
- n2 = malloc(sizeof(struct entry)); /* Insert after */
- TAILQ_INSERT_AFTER(&head, n1, n2, entries);
-\&
- n3 = malloc(sizeof(struct entry)); /* Insert before */
- TAILQ_INSERT_BEFORE(n2, n3, entries);
-\&
- TAILQ_REMOVE(&head, n2, entries); /* Deletion */
- free(n2);
- /* Forward traversal */
- i = 0;
- TAILQ_FOREACH(np, &head, entries)
- np\->data = i++;
- /* Reverse traversal */
- TAILQ_FOREACH_REVERSE(np, &head, tailhead, entries)
- printf("%i\en", np\->data);
- /* TailQ deletion */
- n1 = TAILQ_FIRST(&head);
- while (n1 != NULL) {
- n2 = TAILQ_NEXT(n1, entries);
- free(n1);
- n1 = n2;
- }
- TAILQ_INIT(&head);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR insque (3),
-.BR queue (7)
diff --git a/man3/tan.3 b/man3/tan.3
deleted file mode 100644
index e4afae40d..000000000
--- a/man3/tan.3
+++ /dev/null
@@ -1,149 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH tan 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-tan, tanf, tanl \- tangent function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double tan(double " x );
-.BI "float tanf(float " x );
-.BI "long double tanl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR tanf (),
-.BR tanl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the tangent of
-.IR x ,
-where
-.I x
-is
-given in radians.
-.SH RETURN VALUE
-On success, these functions return the tangent of
-.IR x .
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is positive infinity or negative infinity,
-a domain error occurs,
-and a NaN is returned.
-.PP
-If the correct result would overflow,
-a range error occurs,
-and the functions return
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-or
-.BR HUGE_VALL ,
-respectively, with the mathematically correct sign.
-.\" I think overflow can't occur, because the closest floating-point
-.\" representation of pi/2 is still not close enough to pi/2 to
-.\" produce a large enough value to overflow.
-.\" Testing certainly seems to bear this out. -- mtk, Jul 08
-.\"
-.\" POSIX.1 allows an optional underflow error;
-.\" glibc 2.8 doesn't do this
-.\" POSIX.1 an optional range error for subnormal x;
-.\" glibc 2.8 doesn't do this
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is an infinity
-.I errno
-is set to
-.B EDOM
-(but see BUGS).
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.TP
-Range error: result overflow
-.\" Unable to test this case, since the best approximation of
-.\" pi/2 in double precision only yields a tan() value of 1.633e16.
-.\" .I errno
-.\" is set to
-.\" .BR ERANGE .
-An overflow floating-point exception
-.RB ( FE_OVERFLOW )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR tan (),
-.BR tanf (),
-.BR tanl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH BUGS
-Before glibc 2.10, the glibc implementation did not set
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=6782
-.I errno
-to
-.B EDOM
-when a domain error occurred.
-.SH SEE ALSO
-.BR acos (3),
-.BR asin (3),
-.BR atan (3),
-.BR atan2 (3),
-.BR cos (3),
-.BR ctan (3),
-.BR sin (3)
diff --git a/man3/tanf.3 b/man3/tanf.3
deleted file mode 100644
index 58e5a1659..000000000
--- a/man3/tanf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tan.3
diff --git a/man3/tanh.3 b/man3/tanh.3
deleted file mode 100644
index c9bff10b5..000000000
--- a/man3/tanh.3
+++ /dev/null
@@ -1,108 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-07-27 by Walter Harms
-.\" (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.TH tanh 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-tanh, tanhf, tanhl \- hyperbolic tangent function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double tanh(double " x );
-.BI "float tanhf(float " x );
-.BI "long double tanhl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR tanhf (),
-.BR tanhl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-These functions return the hyperbolic tangent of
-.IR x ,
-which
-is defined mathematically as:
-.PP
-.nf
- tanh(x) = sinh(x) / cosh(x)
-.fi
-.SH RETURN VALUE
-On success, these functions return the hyperbolic tangent of
-.IR x .
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is +0 (\-0), +0 (\-0) is returned.
-.PP
-If
-.I x
-is positive infinity (negative infinity),
-+1 (\-1) is returned.
-.\"
-.\" POSIX.1-2001 documents an optional range error (underflow)
-.\" for subnormal x;
-.\" glibc 2.8 does not do this.
-.SH ERRORS
-No errors occur.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR tanh (),
-.BR tanhf (),
-.BR tanhl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The variant returning
-.I double
-also conforms to
-SVr4, 4.3BSD, C89.
-.SH SEE ALSO
-.BR acosh (3),
-.BR asinh (3),
-.BR atanh (3),
-.BR cosh (3),
-.BR ctanh (3),
-.BR sinh (3)
diff --git a/man3/tanhf.3 b/man3/tanhf.3
deleted file mode 100644
index 3556edba4..000000000
--- a/man3/tanhf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tanh.3
diff --git a/man3/tanhl.3 b/man3/tanhl.3
deleted file mode 100644
index 3556edba4..000000000
--- a/man3/tanhl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tanh.3
diff --git a/man3/tanl.3 b/man3/tanl.3
deleted file mode 100644
index 58e5a1659..000000000
--- a/man3/tanl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tan.3
diff --git a/man3/tcdrain.3 b/man3/tcdrain.3
deleted file mode 100644
index eb472496d..000000000
--- a/man3/tcdrain.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/termios.3
diff --git a/man3/tcflow.3 b/man3/tcflow.3
deleted file mode 100644
index eb472496d..000000000
--- a/man3/tcflow.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/termios.3
diff --git a/man3/tcflush.3 b/man3/tcflush.3
deleted file mode 100644
index eb472496d..000000000
--- a/man3/tcflush.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/termios.3
diff --git a/man3/tcgetattr.3 b/man3/tcgetattr.3
deleted file mode 100644
index eb472496d..000000000
--- a/man3/tcgetattr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/termios.3
diff --git a/man3/tcgetpgrp.3 b/man3/tcgetpgrp.3
deleted file mode 100644
index edf50a80f..000000000
--- a/man3/tcgetpgrp.3
+++ /dev/null
@@ -1,128 +0,0 @@
-'\" t
-.\" Copyright (C) 2002 Andries Brouwer <aeb@cwi.nl>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH tcgetpgrp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-tcgetpgrp, tcsetpgrp \- get and set terminal foreground process group
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B "#include <unistd.h>"
-.PP
-.BI "pid_t tcgetpgrp(int " fd );
-.BI "int tcsetpgrp(int " fd ", pid_t " pgrp );
-.fi
-.SH DESCRIPTION
-The function
-.BR tcgetpgrp ()
-returns the process group ID of the foreground process group on the
-terminal associated to
-.IR fd ,
-which must be the controlling terminal of the calling process.
-.\" The process itself may be a background process.
-.PP
-The function
-.BR tcsetpgrp ()
-makes the process group with process group ID
-.I pgrp
-the foreground process group on the terminal associated to
-.IR fd ,
-which must be the controlling terminal of the calling process,
-and still be associated with its session.
-Moreover,
-.I pgrp
-must be a (nonempty) process group belonging to
-the same session as the calling process.
-.PP
-If
-.BR tcsetpgrp ()
-is called by a member of a background process group in its session,
-and the calling process is not blocking or ignoring
-.BR SIGTTOU ,
-a
-.B SIGTTOU
-signal is sent to all members of this background process group.
-.SH RETURN VALUE
-When
-.I fd
-refers to the controlling terminal of the calling process,
-the function
-.BR tcgetpgrp ()
-will return the foreground process group ID of that terminal
-if there is one, and some value larger than 1 that is not
-presently a process group ID otherwise.
-When
-.I fd
-does not refer to the controlling terminal of the calling process,
-\-1 is returned, and
-.I errno
-is set to indicate the error.
-.PP
-When successful,
-.BR tcsetpgrp ()
-returns 0.
-Otherwise, it returns \-1, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor.
-.TP
-.B EINVAL
-.I pgrp
-has an unsupported value.
-.TP
-.B ENOTTY
-The calling process does not have a controlling terminal, or
-it has one but it is not described by
-.IR fd ,
-or, for
-.BR tcsetpgrp (),
-this controlling terminal is no longer associated with the session
-of the calling process.
-.TP
-.B EPERM
-.I pgrp
-has a supported value, but is not the process group ID of a
-process in the same session as the calling process.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR tcgetpgrp (),
-.BR tcsetpgrp ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-These functions are implemented via the
-.B TIOCGPGRP
-and
-.B TIOCSPGRP
-ioctls.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.PP
-The ioctls appeared in 4.2BSD.
-The functions are POSIX inventions.
-.SH SEE ALSO
-.BR setpgid (2),
-.BR setsid (2),
-.BR credentials (7)
diff --git a/man3/tcgetsid.3 b/man3/tcgetsid.3
deleted file mode 100644
index 9ea42bbda..000000000
--- a/man3/tcgetsid.3
+++ /dev/null
@@ -1,76 +0,0 @@
-'\" t
-.\" Copyright (C) 2002 Andries Brouwer <aeb@cwi.nl>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH tcgetsid 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-tcgetsid \- get session ID
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _XOPEN_SOURCE 500" " /* See feature_test_macros(7) */"
-.B "#include <termios.h>"
-.PP
-.BI "pid_t tcgetsid(int " fd );
-.fi
-.SH DESCRIPTION
-The function
-.BR tcgetsid ()
-returns the session ID of the current session that has the
-terminal associated to
-.I fd
-as controlling terminal.
-This terminal must be the controlling terminal of the calling process.
-.SH RETURN VALUE
-When
-.I fd
-refers to the controlling terminal of our session,
-the function
-.BR tcgetsid ()
-will return the session ID of this session.
-Otherwise, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-.I fd
-is not a valid file descriptor.
-.TP
-.B ENOTTY
-The calling process does not have a controlling terminal, or
-it has one but it is not described by
-.IR fd .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR tcgetsid ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001.
-.PP
-This function is implemented via the
-.B TIOCGSID
-.BR ioctl (2),
-present
-since Linux 2.1.71.
-.SH SEE ALSO
-.BR getsid (2)
diff --git a/man3/tcsendbreak.3 b/man3/tcsendbreak.3
deleted file mode 100644
index eb472496d..000000000
--- a/man3/tcsendbreak.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/termios.3
diff --git a/man3/tcsetattr.3 b/man3/tcsetattr.3
deleted file mode 100644
index eb472496d..000000000
--- a/man3/tcsetattr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/termios.3
diff --git a/man3/tcsetpgrp.3 b/man3/tcsetpgrp.3
deleted file mode 100644
index 1a8b3604a..000000000
--- a/man3/tcsetpgrp.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tcgetpgrp.3
diff --git a/man3/tdelete.3 b/man3/tdelete.3
deleted file mode 100644
index 72f125195..000000000
--- a/man3/tdelete.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tsearch.3
diff --git a/man3/tdestroy.3 b/man3/tdestroy.3
deleted file mode 100644
index 72f125195..000000000
--- a/man3/tdestroy.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tsearch.3
diff --git a/man3/telldir.3 b/man3/telldir.3
deleted file mode 100644
index 60b4f784a..000000000
--- a/man3/telldir.3
+++ /dev/null
@@ -1,103 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 17:48:42 1993 by Rik Faith (faith@cs.unc.edu)
-.TH telldir 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-telldir \- return current location in directory stream
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <dirent.h>
-.PP
-.BI "long telldir(DIR *" dirp );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR telldir ():
-.nf
- _XOPEN_SOURCE
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR telldir ()
-function returns the current location associated with
-the directory stream \fIdirp\fP.
-.SH RETURN VALUE
-On success, the
-.BR telldir ()
-function returns the current location
-in the directory stream.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-Invalid directory stream descriptor \fIdirp\fP.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR telldir ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, 4.3BSD.
-.PP
-Up to glibc 2.1.1, the return type of
-.BR telldir ()
-was
-.IR off_t .
-POSIX.1-2001 specifies
-.IR long ,
-and this is the type used since glibc 2.1.2.
-.PP
-In early filesystems, the value returned by
-.BR telldir ()
-was a simple file offset within a directory.
-Modern filesystems use tree or hash structures, rather than flat tables,
-to represent directories.
-On such filesystems, the value returned by
-.BR telldir ()
-(and used internally by
-.BR readdir (3))
-is a "cookie" that is used by the implementation
-to derive a position within a directory.
-.\" https://lwn.net/Articles/544298/
-Application programs should treat this strictly as an opaque value, making
-.I no
-assumptions about its contents.
-.SH SEE ALSO
-.BR closedir (3),
-.BR opendir (3),
-.BR readdir (3),
-.BR rewinddir (3),
-.BR scandir (3),
-.BR seekdir (3)
diff --git a/man3/tempnam.3 b/man3/tempnam.3
deleted file mode 100644
index 1b517659d..000000000
--- a/man3/tempnam.3
+++ /dev/null
@@ -1,178 +0,0 @@
-'\" t
-.\" Copyright (c) 1999 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH tempnam 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-tempnam \- create a name for a temporary file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "char *tempnam(const char *" dir ", const char *" pfx );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR tempnam ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-.I "Never use this function."
-Use
-.BR mkstemp (3)
-or
-.BR tmpfile (3)
-instead.
-.PP
-The
-.BR tempnam ()
-function returns a pointer to a string that is a valid filename,
-and such that a file with this name did not exist when
-.BR tempnam ()
-checked.
-The filename suffix of the pathname generated will start with
-.I pfx
-in case
-.I pfx
-is a non-NULL string of at most five bytes.
-The directory prefix part of the pathname generated is required to
-be "appropriate" (often that at least implies writable).
-.PP
-Attempts to find an appropriate directory go through the following
-steps:
-.TP 3
-a)
-In case the environment variable
-.B TMPDIR
-exists and
-contains the name of an appropriate directory, that is used.
-.TP
-b)
-Otherwise, if the
-.I dir
-argument is non-NULL and appropriate, it is used.
-.TP
-c)
-Otherwise,
-.I P_tmpdir
-(as defined in
-.IR <stdio.h> )
-is used when appropriate.
-.TP
-d)
-Finally an implementation-defined directory may be used.
-.PP
-The string returned by
-.BR tempnam ()
-is allocated using
-.BR malloc (3)
-and hence should be freed by
-.BR free (3).
-.SH RETURN VALUE
-On success, the
-.BR tempnam ()
-function returns a pointer to a unique temporary filename.
-It returns NULL if a unique name cannot be generated, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B ENOMEM
-Allocation of storage failed.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR tempnam ()
-T} Thread safety MT-Safe env
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-SVr4, 4.3BSD, POSIX.1-2001.
-Obsoleted in POSIX.1-2008.
-.SH NOTES
-Although
-.BR tempnam ()
-generates names that are difficult to guess,
-it is nevertheless possible that between the time that
-.BR tempnam ()
-returns a pathname, and the time that the program opens it,
-another program might create that pathname using
-.BR open (2),
-or create it as a symbolic link.
-This can lead to security holes.
-To avoid such possibilities, use the
-.BR open (2)
-.B O_EXCL
-flag to open the pathname.
-Or better yet, use
-.BR mkstemp (3)
-or
-.BR tmpfile (3).
-.PP
-SUSv2 does not mention the use of
-.BR TMPDIR ;
-glibc will use it only
-when the program is not set-user-ID.
-On SVr4, the directory used under \fBd)\fP is
-.I /tmp
-(and this is what glibc does).
-.PP
-Because it dynamically allocates memory used to return the pathname,
-.BR tempnam ()
-is reentrant, and thus thread safe, unlike
-.BR tmpnam (3).
-.PP
-The
-.BR tempnam ()
-function generates a different string each time it is called,
-up to
-.B TMP_MAX
-(defined in
-.IR <stdio.h> )
-times.
-If it is called more than
-.B TMP_MAX
-times,
-the behavior is implementation defined.
-.PP
-.BR tempnam ()
-uses at most the first five bytes from
-.IR pfx .
-.PP
-The glibc implementation of
-.BR tempnam ()
-fails with the error
-.B EEXIST
-upon failure to find a unique name.
-.SH BUGS
-The precise meaning of "appropriate" is undefined;
-it is unspecified how accessibility of a directory is determined.
-.SH SEE ALSO
-.BR mkstemp (3),
-.BR mktemp (3),
-.BR tmpfile (3),
-.BR tmpnam (3)
diff --git a/man3/termios.3 b/man3/termios.3
deleted file mode 100644
index 05d342c7a..000000000
--- a/man3/termios.3
+++ /dev/null
@@ -1,1240 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de)
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\" Copyright (c) 2006-2015, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
-.\" Modified 1995-02-25 by Jim Van Zandt <jrv@vanzandt.mv.com>
-.\" Modified 1995-09-02 by Jim Van Zandt <jrv@vanzandt.mv.com>
-.\" moved to man3, aeb, 950919
-.\" Modified 2001-09-22 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 2001-12-17, aeb
-.\" Modified 2004-10-31, aeb
-.\" 2006-12-28, mtk:
-.\" Added .SS headers to give some structure to this page; and a
-.\" small amount of reordering.
-.\" Added a section on canonical and noncanonical mode.
-.\" Enhanced the discussion of "raw" mode for cfmakeraw().
-.\" Document CMSPAR.
-.\"
-.TH termios 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-termios, tcgetattr, tcsetattr, tcsendbreak, tcdrain, tcflush, tcflow,
-cfmakeraw, cfgetospeed, cfgetispeed, cfsetispeed, cfsetospeed, cfsetspeed \-
-get and set terminal attributes, line control, get and set baud rate
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <termios.h>
-.B #include <unistd.h>
-.PP
-.BI "int tcgetattr(int " fd ", struct termios *" termios_p );
-.BI "int tcsetattr(int " fd ", int " optional_actions ,
-.BI " const struct termios *" termios_p );
-.PP
-.BI "int tcsendbreak(int " fd ", int " duration );
-.BI "int tcdrain(int " fd );
-.BI "int tcflush(int " fd ", int " queue_selector );
-.BI "int tcflow(int " fd ", int " action );
-.PP
-.BI "void cfmakeraw(struct termios *" termios_p );
-.PP
-.BI "speed_t cfgetispeed(const struct termios *" termios_p );
-.BI "speed_t cfgetospeed(const struct termios *" termios_p );
-.PP
-.BI "int cfsetispeed(struct termios *" termios_p ", speed_t " speed );
-.BI "int cfsetospeed(struct termios *" termios_p ", speed_t " speed );
-.BI "int cfsetspeed(struct termios *" termios_p ", speed_t " speed );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR cfsetspeed (),
-.BR cfmakeraw ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The termios functions describe a general terminal interface that is
-provided to control asynchronous communications ports.
-.SS The termios structure
-Many of the functions described here have a \fItermios_p\fP argument
-that is a pointer to a \fItermios\fP structure.
-This structure contains at least the following members:
-.PP
-.in +4n
-.EX
-tcflag_t c_iflag; /* input modes */
-tcflag_t c_oflag; /* output modes */
-tcflag_t c_cflag; /* control modes */
-tcflag_t c_lflag; /* local modes */
-cc_t c_cc[NCCS]; /* special characters */
-.EE
-.in
-.PP
-The values that may be assigned to these fields are described below.
-In the case of the first four bit-mask fields,
-the definitions of some of the associated flags that may be set are
-exposed only if a specific feature test macro (see
-.BR feature_test_macros (7))
-is defined, as noted in brackets ("[]").
-.PP
-In the descriptions below, "not in POSIX" means that the
-value is not specified in POSIX.1-2001,
-and "XSI" means that the value is specified in POSIX.1-2001
-as part of the XSI extension.
-.PP
-\fIc_iflag\fP flag constants:
-.TP
-.B IGNBRK
-Ignore BREAK condition on input.
-.TP
-.B BRKINT
-If \fBIGNBRK\fP is set, a BREAK is ignored.
-If it is not set
-but \fBBRKINT\fP is set, then a BREAK causes the input and output
-queues to be flushed, and if the terminal is the controlling
-terminal of a foreground process group, it will cause a
-\fBSIGINT\fP to be sent to this foreground process group.
-When neither \fBIGNBRK\fP nor \fBBRKINT\fP are set, a BREAK
-reads as a null byte (\[aq]\e0\[aq]), except when \fBPARMRK\fP is set,
-in which case it reads as the sequence \e377 \e0 \e0.
-.TP
-.B IGNPAR
-Ignore framing errors and parity errors.
-.TP
-.B PARMRK
-If this bit is set, input bytes with parity or framing errors are
-marked when passed to the program.
-This bit is meaningful only when
-\fBINPCK\fP is set and \fBIGNPAR\fP is not set.
-The way erroneous bytes are marked is with two preceding bytes,
-\e377 and \e0.
-Thus, the program actually reads three bytes for one
-erroneous byte received from the terminal.
-If a valid byte has the value \e377,
-and \fBISTRIP\fP (see below) is not set,
-the program might confuse it with the prefix that marks a
-parity error.
-Therefore, a valid byte \e377 is passed to the program as two
-bytes, \e377 \e377, in this case.
-.IP
-If neither \fBIGNPAR\fP nor \fBPARMRK\fP
-is set, read a character with a parity error or framing error
-as \e0.
-.TP
-.B INPCK
-Enable input parity checking.
-.TP
-.B ISTRIP
-Strip off eighth bit.
-.TP
-.B INLCR
-Translate NL to CR on input.
-.TP
-.B IGNCR
-Ignore carriage return on input.
-.TP
-.B ICRNL
-Translate carriage return to newline on input (unless \fBIGNCR\fP is set).
-.TP
-.B IUCLC
-(not in POSIX) Map uppercase characters to lowercase on input.
-.TP
-.B IXON
-Enable XON/XOFF flow control on output.
-.TP
-.B IXANY
-(XSI) Typing any character will restart stopped output.
-(The default is to allow just the START character to restart output.)
-.TP
-.B IXOFF
-Enable XON/XOFF flow control on input.
-.TP
-.B IMAXBEL
-(not in POSIX) Ring bell when input queue is full.
-Linux does not implement this bit, and acts as if it is always set.
-.TP
-.BR IUTF8 " (since Linux 2.6.4)"
-(not in POSIX) Input is UTF8;
-this allows character-erase to be correctly performed in cooked mode.
-.PP
-.I c_oflag
-flag constants:
-.TP
-.B OPOST
-Enable implementation-defined output processing.
-.TP
-.B OLCUC
-(not in POSIX) Map lowercase characters to uppercase on output.
-.TP
-.B ONLCR
-(XSI) Map NL to CR-NL on output.
-.TP
-.B OCRNL
-Map CR to NL on output.
-.TP
-.B ONOCR
-Don't output CR at column 0.
-.TP
-.B ONLRET
-The NL character is assumed to do the carriage-return function;
-the kernel's idea of the current column is set to 0
-after both NL and CR.
-.TP
-.B OFILL
-Send fill characters for a delay, rather than using a timed delay.
-.TP
-.B OFDEL
-Fill character is ASCII DEL (0177).
-If unset, fill character is ASCII NUL (\[aq]\e0\[aq]).
-(Not implemented on Linux.)
-.TP
-.B NLDLY
-Newline delay mask.
-Values are \fBNL0\fP and \fBNL1\fP.
-[requires
-.B _BSD_SOURCE
-or
-.B _SVID_SOURCE
-or
-.BR _XOPEN_SOURCE ]
-.TP
-.B CRDLY
-Carriage return delay mask.
-Values are \fBCR0\fP, \fBCR1\fP, \fBCR2\fP, or \fBCR3\fP.
-[requires
-.B _BSD_SOURCE
-or
-.B _SVID_SOURCE
-or
-.BR _XOPEN_SOURCE ]
-.TP
-.B TABDLY
-Horizontal tab delay mask.
-Values are \fBTAB0\fP, \fBTAB1\fP, \fBTAB2\fP, \fBTAB3\fP (or \fBXTABS\fP,
-but see the
-.B BUGS
-section).
-A value of TAB3, that is, XTABS, expands tabs to spaces
-(with tab stops every eight columns).
-[requires
-.B _BSD_SOURCE
-or
-.B _SVID_SOURCE
-or
-.BR _XOPEN_SOURCE ]
-.TP
-.B BSDLY
-Backspace delay mask.
-Values are \fBBS0\fP or \fBBS1\fP.
-(Has never been implemented.)
-[requires
-.B _BSD_SOURCE
-or
-.B _SVID_SOURCE
-or
-.BR _XOPEN_SOURCE ]
-.TP
-.B VTDLY
-Vertical tab delay mask.
-Values are \fBVT0\fP or \fBVT1\fP.
-.TP
-.B FFDLY
-Form feed delay mask.
-Values are \fBFF0\fP or \fBFF1\fP.
-[requires
-.B _BSD_SOURCE
-or
-.B _SVID_SOURCE
-or
-.BR _XOPEN_SOURCE ]
-.PP
-\fIc_cflag\fP flag constants:
-.TP
-.B CBAUD
-(not in POSIX) Baud speed mask (4+1 bits).
-[requires
-.B _BSD_SOURCE
-or
-.BR _SVID_SOURCE ]
-.TP
-.B CBAUDEX
-(not in POSIX) Extra baud speed mask (1 bit), included in
-.BR CBAUD .
-[requires
-.B _BSD_SOURCE
-or
-.BR _SVID_SOURCE ]
-.IP
-(POSIX says that the baud speed is stored in the
-.I termios
-structure without specifying where precisely, and provides
-.BR cfgetispeed ()
-and
-.BR cfsetispeed ()
-for getting at it.
-Some systems use bits selected by
-.B CBAUD
-in
-.IR c_cflag ,
-other systems use separate fields, for example,
-.I sg_ispeed
-and
-.IR sg_ospeed .)
-.TP
-.B CSIZE
-Character size mask.
-Values are \fBCS5\fP, \fBCS6\fP, \fBCS7\fP, or \fBCS8\fP.
-.TP
-.B CSTOPB
-Set two stop bits, rather than one.
-.TP
-.B CREAD
-Enable receiver.
-.TP
-.B PARENB
-Enable parity generation on output and parity checking for input.
-.TP
-.B PARODD
-If set, then parity for input and output is odd;
-otherwise even parity is used.
-.TP
-.B HUPCL
-Lower modem control lines after last process closes the device (hang up).
-.TP
-.B CLOCAL
-Ignore modem control lines.
-.TP
-.B LOBLK
-(not in POSIX) Block output from a noncurrent shell layer.
-For use by \fBshl\fP (shell layers).
-(Not implemented on Linux.)
-.TP
-.B CIBAUD
-(not in POSIX) Mask for input speeds.
-The values for the
-.B CIBAUD
-bits are
-the same as the values for the
-.B CBAUD
-bits, shifted left
-.B IBSHIFT
-bits.
-[requires
-.B _BSD_SOURCE
-or
-.BR _SVID_SOURCE ]
-(Not implemented in glibc, supported on Linux via
-.BR TCGET *
-and
-.BR TCSET *
-ioctls; see
-.BR ioctl_tty (2))
-.TP
-.B CMSPAR
-(not in POSIX)
-Use "stick" (mark/space) parity (supported on certain serial
-devices): if
-.B PARODD
-is set, the parity bit is always 1; if
-.B PARODD
-is not set, then the parity bit is always 0.
-[requires
-.B _BSD_SOURCE
-or
-.BR _SVID_SOURCE ]
-.TP
-.B CRTSCTS
-(not in POSIX) Enable RTS/CTS (hardware) flow control.
-[requires
-.B _BSD_SOURCE
-or
-.BR _SVID_SOURCE ]
-.PP
-\fIc_lflag\fP flag constants:
-.TP
-.B ISIG
-When any of the characters INTR, QUIT, SUSP, or DSUSP are received,
-generate the corresponding signal.
-.TP
-.B ICANON
-Enable canonical mode (described below).
-.TP
-.B XCASE
-(not in POSIX; not supported under Linux)
-If \fBICANON\fP is also set, terminal is uppercase only.
-Input is converted to lowercase, except for characters preceded by \e.
-On output, uppercase characters are preceded by \e and lowercase
-characters are converted to uppercase.
-[requires
-.B _BSD_SOURCE
-or
-.B _SVID_SOURCE
-or
-.BR _XOPEN_SOURCE ]
-.\" glibc is probably now wrong to allow
-.\" Define
-.\" .B _XOPEN_SOURCE
-.\" to expose
-.\" .BR XCASE .
-.TP
-.B ECHO
-Echo input characters.
-.TP
-.B ECHOE
-If \fBICANON\fP is also set, the ERASE character erases the preceding
-input character, and WERASE erases the preceding word.
-.TP
-.B ECHOK
-If \fBICANON\fP is also set, the KILL character erases the current line.
-.TP
-.B ECHONL
-If \fBICANON\fP is also set, echo the NL character even if ECHO is not set.
-.TP
-.B ECHOCTL
-(not in POSIX) If \fBECHO\fP is also set,
-terminal special characters other than
-TAB, NL, START, and STOP are echoed as \fB\[ha]X\fP,
-where X is the character with
-ASCII code 0x40 greater than the special character.
-For example, character
-0x08 (BS) is echoed as \fB\[ha]H\fP.
-[requires
-.B _BSD_SOURCE
-or
-.BR _SVID_SOURCE ]
-.TP
-.B ECHOPRT
-(not in POSIX) If \fBICANON\fP and \fBECHO\fP are also set, characters
-are printed as they are being erased.
-[requires
-.B _BSD_SOURCE
-or
-.BR _SVID_SOURCE ]
-.TP
-.B ECHOKE
-(not in POSIX) If \fBICANON\fP is also set, KILL is echoed by erasing
-each character on the line, as specified by \fBECHOE\fP and \fBECHOPRT\fP.
-[requires
-.B _BSD_SOURCE
-or
-.BR _SVID_SOURCE ]
-.TP
-.B DEFECHO
-(not in POSIX) Echo only when a process is reading.
-(Not implemented on Linux.)
-.TP
-.B FLUSHO
-(not in POSIX; not supported under Linux)
-Output is being flushed.
-This flag is toggled by typing
-the DISCARD character.
-[requires
-.B _BSD_SOURCE
-or
-.BR _SVID_SOURCE ]
-.TP
-.B NOFLSH
-Disable flushing the input and output queues when generating signals for the
-INT, QUIT, and SUSP characters.
-.\" Stevens lets SUSP only flush the input queue
-.TP
-.B TOSTOP
-Send the
-.B SIGTTOU
-signal to the process group of a background process
-which tries to write to its controlling terminal.
-.TP
-.B PENDIN
-(not in POSIX; not supported under Linux)
-All characters in the input queue are reprinted when
-the next character is read.
-.RB ( bash (1)
-handles typeahead this way.)
-[requires
-.B _BSD_SOURCE
-or
-.BR _SVID_SOURCE ]
-.TP
-.B IEXTEN
-Enable implementation-defined input processing.
-This flag, as well as \fBICANON\fP must be enabled for the
-special characters EOL2, LNEXT, REPRINT, WERASE to be interpreted,
-and for the \fBIUCLC\fP flag to be effective.
-.PP
-The \fIc_cc\fP array defines the terminal special characters.
-The symbolic indices (initial values) and meaning are:
-.TP
-.B VDISCARD
-(not in POSIX; not supported under Linux; 017, SI, Ctrl-O)
-Toggle: start/stop discarding pending output.
-Recognized when
-.B IEXTEN
-is set, and then not passed as input.
-.TP
-.B VDSUSP
-(not in POSIX; not supported under Linux; 031, EM, Ctrl-Y)
-Delayed suspend character (DSUSP):
-send
-.B SIGTSTP
-signal when the character is read by the user program.
-Recognized when
-.B IEXTEN
-and
-.B ISIG
-are set, and the system supports
-job control, and then not passed as input.
-.TP
-.B VEOF
-(004, EOT, Ctrl-D)
-End-of-file character (EOF).
-More precisely: this character causes the pending tty buffer to be sent
-to the waiting user program without waiting for end-of-line.
-If it is the first character of the line, the
-.BR read (2)
-in the user program returns 0, which signifies end-of-file.
-Recognized when
-.B ICANON
-is set, and then not passed as input.
-.TP
-.B VEOL
-(0, NUL)
-Additional end-of-line character (EOL).
-Recognized when
-.B ICANON
-is set.
-.TP
-.B VEOL2
-(not in POSIX; 0, NUL)
-Yet another end-of-line character (EOL2).
-Recognized when
-.B ICANON
-is set.
-.TP
-.B VERASE
-(0177, DEL, rubout, or 010, BS, Ctrl-H, or also #)
-Erase character (ERASE).
-This erases the previous not-yet-erased character,
-but does not erase past EOF or beginning-of-line.
-Recognized when
-.B ICANON
-is set, and then not passed as input.
-.TP
-.B VINTR
-(003, ETX, Ctrl-C, or also 0177, DEL, rubout)
-Interrupt character (INTR).
-Send a
-.B SIGINT
-signal.
-Recognized when
-.B ISIG
-is set, and then not passed as input.
-.TP
-.B VKILL
-(025, NAK, Ctrl-U, or Ctrl-X, or also @)
-Kill character (KILL).
-This erases the input since the last EOF or beginning-of-line.
-Recognized when
-.B ICANON
-is set, and then not passed as input.
-.TP
-.B VLNEXT
-(not in POSIX; 026, SYN, Ctrl-V)
-Literal next (LNEXT).
-Quotes the next input character, depriving it of
-a possible special meaning.
-Recognized when
-.B IEXTEN
-is set, and then not passed as input.
-.TP
-.B VMIN
-Minimum number of characters for noncanonical read (MIN).
-.TP
-.B VQUIT
-(034, FS, Ctrl-\e)
-Quit character (QUIT).
-Send
-.B SIGQUIT
-signal.
-Recognized when
-.B ISIG
-is set, and then not passed as input.
-.TP
-.B VREPRINT
-(not in POSIX; 022, DC2, Ctrl-R)
-Reprint unread characters (REPRINT).
-Recognized when
-.B ICANON
-and
-.B IEXTEN
-are set, and then not passed as input.
-.TP
-.B VSTART
-(021, DC1, Ctrl-Q)
-Start character (START).
-Restarts output stopped by the Stop character.
-Recognized when
-.B IXON
-is set, and then not passed as input.
-.TP
-.B VSTATUS
-(not in POSIX; not supported under Linux;
-status request: 024, DC4, Ctrl-T).
-Status character (STATUS).
-Display status information at terminal,
-including state of foreground process and amount of CPU time it has consumed.
-Also sends a
-.B SIGINFO
-signal (not supported on Linux) to the foreground process group.
-.TP
-.B VSTOP
-(023, DC3, Ctrl-S)
-Stop character (STOP).
-Stop output until Start character typed.
-Recognized when
-.B IXON
-is set, and then not passed as input.
-.TP
-.B VSUSP
-(032, SUB, Ctrl-Z)
-Suspend character (SUSP).
-Send
-.B SIGTSTP
-signal.
-Recognized when
-.B ISIG
-is set, and then not passed as input.
-.TP
-.B VSWTCH
-(not in POSIX; not supported under Linux; 0, NUL)
-Switch character (SWTCH).
-Used in System V to switch shells in
-.IR "shell layers" ,
-a predecessor to shell job control.
-.TP
-.B VTIME
-Timeout in deciseconds for noncanonical read (TIME).
-.TP
-.B VWERASE
-(not in POSIX; 027, ETB, Ctrl-W)
-Word erase (WERASE).
-Recognized when
-.B ICANON
-and
-.B IEXTEN
-are set, and then not passed as input.
-.PP
-An individual terminal special character can be disabled by setting
-the value of the corresponding
-.I c_cc
-element to
-.BR _POSIX_VDISABLE .
-.PP
-The above symbolic subscript values are all different, except that
-.BR VTIME ,
-.B VMIN
-may have the same value as
-.BR VEOL ,
-.BR VEOF ,
-respectively.
-In noncanonical mode the special character meaning is replaced
-by the timeout meaning.
-For an explanation of
-.B VMIN
-and
-.BR VTIME ,
-see the description of
-noncanonical mode below.
-.SS Retrieving and changing terminal settings
-.BR tcgetattr ()
-gets the parameters associated with the object referred by \fIfd\fP and
-stores them in the \fItermios\fP structure referenced by
-\fItermios_p\fP.
-This function may be invoked from a background process;
-however, the terminal attributes may be subsequently changed by a
-foreground process.
-.PP
-.BR tcsetattr ()
-sets the parameters associated with the terminal (unless support is
-required from the underlying hardware that is not available) from the
-\fItermios\fP structure referred to by \fItermios_p\fP.
-\fIoptional_actions\fP specifies when the changes take effect:
-.TP
-.B TCSANOW
-the change occurs immediately.
-.TP
-.B TCSADRAIN
-the change occurs after all output written to
-.I fd
-has been transmitted.
-This option should be used when changing
-parameters that affect output.
-.TP
-.B TCSAFLUSH
-the change occurs after all output written to the object referred by
-.I fd
-has been transmitted, and all input that has been received but not read
-will be discarded before the change is made.
-.SS Canonical and noncanonical mode
-The setting of the
-.B ICANON
-canon flag in
-.I c_lflag
-determines whether the terminal is operating in canonical mode
-.RB ( ICANON
-set) or
-noncanonical mode
-.RB ( ICANON
-unset).
-By default,
-.B ICANON
-is set.
-.PP
-In canonical mode:
-.IP \[bu] 3
-Input is made available line by line.
-An input line is available when one of the line delimiters
-is typed (NL, EOL, EOL2; or EOF at the start of line).
-Except in the case of EOF, the line delimiter is included
-in the buffer returned by
-.BR read (2).
-.IP \[bu]
-Line editing is enabled (ERASE, KILL;
-and if the
-.B IEXTEN
-flag is set: WERASE, REPRINT, LNEXT).
-A
-.BR read (2)
-returns at most one line of input; if the
-.BR read (2)
-requested fewer bytes than are available in the current line of input,
-then only as many bytes as requested are read,
-and the remaining characters will be available for a future
-.BR read (2).
-.IP \[bu]
-The maximum line length is 4096 chars
-(including the terminating newline character);
-lines longer than 4096 chars are truncated.
-After 4095 characters, input processing (e.g.,
-.B ISIG
-and
-.B ECHO*
-processing) continues, but any input data after 4095 characters up to
-(but not including) any terminating newline is discarded.
-This ensures that the terminal can always receive
-more input until at least one line can be read.
-.PP
-In noncanonical mode input is available immediately (without
-the user having to type a line-delimiter character),
-no input processing is performed,
-and line editing is disabled.
-The read buffer will only accept 4095 chars; this provides the
-necessary space for a newline char if the input mode is switched
-to canonical.
-The settings of MIN
-.RI ( c_cc[VMIN] )
-and TIME
-.RI ( c_cc[VTIME] )
-determine the circumstances in which a
-.BR read (2)
-completes; there are four distinct cases:
-.TP
-MIN == 0, TIME == 0 (polling read)
-If data is available,
-.BR read (2)
-returns immediately, with the lesser of the number of bytes
-available, or the number of bytes requested.
-If no data is available,
-.BR read (2)
-returns 0.
-.TP
-MIN > 0, TIME == 0 (blocking read)
-.BR read (2)
-blocks until MIN bytes are available,
-and returns up to the number of bytes requested.
-.TP
-MIN == 0, TIME > 0 (read with timeout)
-TIME specifies the limit for a timer in tenths of a second.
-The timer is started when
-.BR read (2)
-is called.
-.BR read (2)
-returns either when at least one byte of data is available,
-or when the timer expires.
-If the timer expires without any input becoming available,
-.BR read (2)
-returns 0.
-If data is already available at the time of the call to
-.BR read (2),
-the call behaves as though the data was received immediately after the call.
-.TP
-MIN > 0, TIME > 0 (read with interbyte timeout)
-TIME specifies the limit for a timer in tenths of a second.
-Once an initial byte of input becomes available,
-the timer is restarted after each further byte is received.
-.BR read (2)
-returns when any of the following conditions is met:
-.RS
-.IP \[bu] 3
-MIN bytes have been received.
-.IP \[bu]
-The interbyte timer expires.
-.IP \[bu]
-The number of bytes requested by
-.BR read (2)
-has been received.
-(POSIX does not specify this termination condition,
-and on some other implementations
-.\" e.g., Solaris
-.BR read (2)
-does not return in this case.)
-.RE
-.IP
-Because the timer is started only after the initial byte
-becomes available, at least one byte will be read.
-If data is already available at the time of the call to
-.BR read (2),
-the call behaves as though the data was received immediately after the call.
-.PP
-POSIX
-.\" POSIX.1-2008 XBD 11.1.7
-does not specify whether the setting of the
-.B O_NONBLOCK
-file status flag takes precedence over the MIN and TIME settings.
-If
-.B O_NONBLOCK
-is set, a
-.BR read (2)
-in noncanonical mode may return immediately,
-regardless of the setting of MIN or TIME.
-Furthermore, if no data is available,
-POSIX permits a
-.BR read (2)
-in noncanonical mode to return either 0, or \-1 with
-.I errno
-set to
-.BR EAGAIN .
-.SS Raw mode
-.BR cfmakeraw ()
-sets the terminal to something like the
-"raw" mode of the old Version 7 terminal driver:
-input is available character by character,
-echoing is disabled, and all special processing of
-terminal input and output characters is disabled.
-The terminal attributes are set as follows:
-.PP
-.in +4n
-.EX
-termios_p\->c_iflag &= \[ti](IGNBRK | BRKINT | PARMRK | ISTRIP
- | INLCR | IGNCR | ICRNL | IXON);
-termios_p\->c_oflag &= \[ti]OPOST;
-termios_p\->c_lflag &= \[ti](ECHO | ECHONL | ICANON | ISIG | IEXTEN);
-termios_p\->c_cflag &= \[ti](CSIZE | PARENB);
-termios_p\->c_cflag |= CS8;
-.EE
-.in
-.\"
-.SS Line control
-.BR tcsendbreak ()
-transmits a continuous stream of zero-valued bits for a specific
-duration, if the terminal is using asynchronous serial data
-transmission.
-If \fIduration\fP is zero, it transmits zero-valued bits
-for at least 0.25 seconds, and not more than 0.5 seconds.
-If \fIduration\fP is not zero, it sends zero-valued bits for some
-implementation-defined length of time.
-.PP
-If the terminal is not using asynchronous serial data transmission,
-.BR tcsendbreak ()
-returns without taking any action.
-.PP
-.BR tcdrain ()
-waits until all output written to the object referred to by
-.I fd
-has been transmitted.
-.PP
-.BR tcflush ()
-discards data written to the object referred to by
-.I fd
-but not transmitted, or data received but not read, depending on the
-value of
-.IR queue_selector :
-.TP
-.B TCIFLUSH
-flushes data received but not read.
-.TP
-.B TCOFLUSH
-flushes data written but not transmitted.
-.TP
-.B TCIOFLUSH
-flushes both data received but not read, and data written but not
-transmitted.
-.PP
-.BR tcflow ()
-suspends transmission or reception of data on the object referred to by
-.IR fd ,
-depending on the value of
-.IR action :
-.TP
-.B TCOOFF
-suspends output.
-.TP
-.B TCOON
-restarts suspended output.
-.TP
-.B TCIOFF
-transmits a STOP character, which stops the terminal device from
-transmitting data to the system.
-.TP
-.B TCION
-transmits a START character, which starts the terminal device
-transmitting data to the system.
-.PP
-The default on open of a terminal file is that neither its input nor its
-output is suspended.
-.SS Line speed
-The baud rate functions are provided for getting and setting the values
-of the input and output baud rates in the \fItermios\fP structure.
-The new values do not take effect
-until
-.BR tcsetattr ()
-is successfully called.
-.PP
-Setting the speed to \fBB0\fP instructs the modem to "hang up".
-The actual bit rate corresponding to \fBB38400\fP may be altered with
-.BR setserial (8).
-.PP
-The input and output baud rates are stored in the \fItermios\fP
-structure.
-.PP
-.BR cfgetospeed ()
-returns the output baud rate stored in the \fItermios\fP structure
-pointed to by
-.IR termios_p .
-.PP
-.BR cfsetospeed ()
-sets the output baud rate stored in the \fItermios\fP structure pointed
-to by \fItermios_p\fP to \fIspeed\fP, which must be one of these constants:
-.RS
-.TP
-.B B0
-.TQ
-.B B50
-.TQ
-.B B75
-.TQ
-.B B110
-.TQ
-.B B134
-.TQ
-.B B150
-.TQ
-.B B200
-.TQ
-.B B300
-.TQ
-.B B600
-.TQ
-.B B1200
-.TQ
-.B B1800
-.TQ
-.B B2400
-.TQ
-.B B4800
-.TQ
-.B B9600
-.TQ
-.B B19200
-.TQ
-.B B38400
-.TQ
-.B B57600
-.TQ
-.B B115200
-.TQ
-.B B230400
-.TQ
-.B B460800
-.TQ
-.B B500000
-.TQ
-.B B576000
-.TQ
-.B B921600
-.TQ
-.B B1000000
-.TQ
-.B B1152000
-.TQ
-.B B1500000
-.TQ
-.B B2000000
-.RE
-.PP
-These constants are additionally supported on the SPARC architecture:
-.RS
-.TP
-.B B76800
-.TQ
-.B B153600
-.TQ
-.B B307200
-.TQ
-.B B614400
-.RE
-.PP
-These constants are additionally supported on non-SPARC architectures:
-.RS
-.TP
-.B B2500000
-.TQ
-.B B3000000
-.TQ
-.B B3500000
-.TQ
-.B B4000000
-.RE
-.PP
-Due to differences between architectures, portable applications should check
-if a particular
-.BI B nnn
-constant is defined prior to using it.
-.PP
-The zero baud rate,
-.BR B0 ,
-is used to terminate the connection.
-If
-.B B0
-is specified, the modem control lines shall no longer be asserted.
-Normally, this will disconnect the line.
-.B CBAUDEX
-is a mask
-for the speeds beyond those defined in POSIX.1 (57600 and above).
-Thus,
-.BR B57600 " & " CBAUDEX
-is nonzero.
-.PP
-Setting the baud rate to a value other than those defined by
-.BI B nnn
-constants is possible via the
-.B TCSETS2
-ioctl; see
-.BR ioctl_tty (2).
-.PP
-.BR cfgetispeed ()
-returns the input baud rate stored in the
-.I termios
-structure.
-.PP
-.BR cfsetispeed ()
-sets the input baud rate stored in the
-.I termios
-structure to
-.IR speed ,
-which must be specified as one of the
-.BI B nnn
-constants listed above for
-.BR cfsetospeed ().
-If the input baud rate is set to the literal constant
-.B 0
-(not the symbolic constant
-.BR B0 ),
-the input baud rate will be
-equal to the output baud rate.
-.PP
-.BR cfsetspeed ()
-is a 4.4BSD extension.
-It takes the same arguments as
-.BR cfsetispeed (),
-and sets both input and output speed.
-.SH RETURN VALUE
-.BR cfgetispeed ()
-returns the input baud rate stored in the
-\fItermios\fP
-structure.
-.PP
-.BR cfgetospeed ()
-returns the output baud rate stored in the \fItermios\fP structure.
-.PP
-All other functions return:
-.TP
-.B 0
-on success.
-.TP
-.B \-1
-on failure and set
-.I errno
-to indicate the error.
-.PP
-Note that
-.BR tcsetattr ()
-returns success if \fIany\fP of the requested changes could be
-successfully carried out.
-Therefore, when making multiple changes
-it may be necessary to follow this call with a further call to
-.BR tcgetattr ()
-to check that all changes have been performed successfully.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.nh
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR tcgetattr (),
-.BR tcsetattr (),
-.BR tcdrain (),
-.BR tcflush (),
-.BR tcflow (),
-.BR tcsendbreak (),
-.BR cfmakeraw (),
-.BR cfgetispeed (),
-.BR cfgetospeed (),
-.BR cfsetispeed (),
-.BR cfsetospeed (),
-.BR cfsetspeed ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.\" FIXME: The markings are different from that in the glibc manual.
-.\" markings in glibc manual are more detailed:
-.\"
-.\" tcsendbreak: MT-Unsafe race:tcattr(filedes)/bsd
-.\" tcflow: MT-Unsafe race:tcattr(filedes)/bsd
-.\"
-.\" glibc manual says /bsd indicate the preceding marker only applies
-.\" when the underlying kernel is a BSD kernel.
-.\" So, it is safety in Linux kernel.
-.hy
-.SH STANDARDS
-.TP
-.BR tcgetattr ()
-.TQ
-.BR tcsetattr ()
-.TQ
-.BR tcsendbreak ()
-.TQ
-.BR tcdrain ()
-.TQ
-.BR tcflush ()
-.TQ
-.BR tcflow ()
-.TQ
-.BR cfgetispeed ()
-.TQ
-.BR cfgetospeed ()
-.TQ
-.BR cfsetispeed ()
-.TQ
-.BR cfsetospeed ()
-POSIX.1-2008.
-.TP
-.BR cfmakeraw ()
-.TQ
-.BR cfsetspeed ()
-BSD.
-.SH HISTORY
-.TP
-.BR tcgetattr ()
-.TQ
-.BR tcsetattr ()
-.TQ
-.BR tcsendbreak ()
-.TQ
-.BR tcdrain ()
-.TQ
-.BR tcflush ()
-.TQ
-.BR tcflow ()
-.TQ
-.BR cfgetispeed ()
-.TQ
-.BR cfgetospeed ()
-.TQ
-.BR cfsetispeed ()
-.TQ
-.BR cfsetospeed ()
-POSIX.1-2001.
-.TP
-.BR cfmakeraw ()
-.TQ
-.BR cfsetspeed ()
-BSD.
-.SH NOTES
-UNIX\ V7 and several later systems have a list of baud rates
-where after the values
-.B B0
-through
-.B B9600
-one finds the two constants
-.BR EXTA ,
-.B EXTB
-("External A" and "External B").
-Many systems extend the list with much higher baud rates.
-.PP
-The effect of a nonzero \fIduration\fP with
-.BR tcsendbreak ()
-varies.
-SunOS specifies a break of
-.I "duration\ *\ N"
-seconds, where \fIN\fP is at least 0.25, and not more than 0.5.
-Linux, AIX, DU, Tru64 send a break of
-.I duration
-milliseconds.
-FreeBSD and NetBSD and HP-UX and MacOS ignore the value of
-.IR duration .
-Under Solaris and UnixWare,
-.BR tcsendbreak ()
-with nonzero
-.I duration
-behaves like
-.BR tcdrain ().
-.\" libc4 until 4.7.5, glibc for sysv: EINVAL for duration > 0.
-.\" libc4.7.6, libc5, glibc for unix: duration in ms.
-.\" glibc for bsd: duration in us
-.\" glibc for sunos4: ignore duration
-.SH BUGS
-.\" kernel 77e5bff1640432f28794a00800955e646dcd7455
-.\" glibc 573963e32ffac46d9891970ddebde2ac3212c5c0
-On the Alpha architecture before Linux 4.16 (and glibc before glibc 2.28), the
-.B XTABS
-value was different from
-.B TAB3
-and it was ignored by the
-.B N_TTY
-line discipline code of the terminal driver as a result
-(because as it wasn't part of the
-.B TABDLY
-mask).
-.SH SEE ALSO
-.BR reset (1),
-.BR setterm (1),
-.BR stty (1),
-.BR tput (1),
-.BR tset (1),
-.BR tty (1),
-.BR ioctl_console (2),
-.BR ioctl_tty (2),
-.BR cc_t (3type),
-.BR speed_t (3type),
-.BR tcflag_t (3type),
-.BR setserial (8)
diff --git a/man3/tfind.3 b/man3/tfind.3
deleted file mode 100644
index 72f125195..000000000
--- a/man3/tfind.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tsearch.3
diff --git a/man3/tgamma.3 b/man3/tgamma.3
deleted file mode 100644
index 9a4c8d1dd..000000000
--- a/man3/tgamma.3
+++ /dev/null
@@ -1,219 +0,0 @@
-'\" t
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" Based on glibc infopages
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\" Modified 2004-11-15, fixed error noted by Fabian Kreutz
-.\" <kreutz@dbs.uni-hannover.de>
-.\"
-.TH tgamma 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-tgamma, tgammaf, tgammal \- true gamma function
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double tgamma(double " x );
-.BI "float tgammaf(float " x );
-.BI "long double tgammal(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR tgamma (),
-.BR tgammaf (),
-.BR tgammal ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-These functions calculate the Gamma function of
-.IR x .
-.PP
-The Gamma function is defined by
-.PP
-.RS
-Gamma(x) = integral from 0 to infinity of t\[ha](x\-1) e\[ha]\-t dt
-.RE
-.PP
-It is defined for every real number except for nonpositive integers.
-For nonnegative integral
-.I m
-one has
-.PP
-.RS
-Gamma(m+1) = m!
-.RE
-.PP
-and, more generally, for all
-.IR x :
-.PP
-.RS
-Gamma(x+1) = x * Gamma(x)
-.RE
-.PP
-Furthermore, the following is valid for all values of
-.I x
-outside the poles:
-.PP
-.RS
-Gamma(x) * Gamma(1 \- x) = PI / sin(PI * x)
-.RE
-.SH RETURN VALUE
-On success, these functions return Gamma(x).
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is positive infinity, positive infinity is returned.
-.PP
-If
-.I x
-is a negative integer, or is negative infinity,
-a domain error occurs,
-and a NaN is returned.
-.PP
-If the result overflows,
-a range error occurs,
-and the functions return
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-or
-.BR HUGE_VALL ,
-respectively, with the correct mathematical sign.
-.PP
-If the result underflows,
-a range error occurs,
-and the functions return 0, with the correct mathematical sign.
-.PP
-If
-.I x
-is \-0 or +0,
-a pole error occurs,
-and the functions return
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-or
-.BR HUGE_VALL ,
-respectively, with the same sign as the 0.
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is a negative integer, or negative infinity
-.I errno
-is set to
-.BR EDOM .
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised (but see BUGS).
-.TP
-Pole error: \fIx\fP is +0 or \-0
-.I errno
-is set to
-.BR ERANGE .
-A divide-by-zero floating-point exception
-.RB ( FE_DIVBYZERO )
-is raised.
-.TP
-Range error: result overflow
-.I errno
-is set to
-.BR ERANGE .
-An overflow floating-point exception
-.RB ( FE_OVERFLOW )
-is raised.
-.PP
-glibc also gives the following error which is not specified
-in C99 or POSIX.1-2001.
-.TP
-Range error: result underflow
-.\" e.g., tgamma(-172.5) on glibc 2.8/x86-32
-.\" .I errno
-.\" is set to
-.\" .BR ERANGE .
-An underflow floating-point exception
-.RB ( FE_UNDERFLOW )
-is raised, and
-.I errno
-is set to
-.BR ERANGE .
-.\" glibc (as at 2.8) also supports an inexact
-.\" exception for various cases.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR tgamma (),
-.BR tgammaf (),
-.BR tgammal ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH NOTES
-This function had to be called "true gamma function"
-since there is already a function
-.BR gamma (3)
-that returns something else (see
-.BR gamma (3)
-for details).
-.SH BUGS
-Before glibc 2.18, the glibc implementation of these functions did not set
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6809
-.I errno
-to
-.B EDOM
-when
-.I x
-is negative infinity.
-.PP
-Before glibc 2.19,
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6810
-the glibc implementation of these functions did not set
-.I errno
-to
-.B ERANGE
-on an underflow range error.
-.PP
-.\"
-In glibc versions 2.3.3 and earlier,
-an argument of +0 or \-0 incorrectly produced a domain error
-.RI ( errno
-set to
-.B EDOM
-and an
-.B FE_INVALID
-exception raised), rather than a pole error.
-.SH SEE ALSO
-.BR gamma (3),
-.BR lgamma (3)
diff --git a/man3/tgammaf.3 b/man3/tgammaf.3
deleted file mode 100644
index 4a0248a0d..000000000
--- a/man3/tgammaf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tgamma.3
diff --git a/man3/tgammal.3 b/man3/tgammal.3
deleted file mode 100644
index 4a0248a0d..000000000
--- a/man3/tgammal.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tgamma.3
diff --git a/man3/timegm.3 b/man3/timegm.3
deleted file mode 100644
index ed207d93a..000000000
--- a/man3/timegm.3
+++ /dev/null
@@ -1,95 +0,0 @@
-'\" t
-.\" Copyright (C) 2001 Andries Brouwer <aeb@cwi.nl>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH timegm 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-timegm, timelocal \- inverses of gmtime and localtime
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <time.h>
-.PP
-.BI "[[deprecated]] time_t timelocal(struct tm *" tm );
-.BI "time_t timegm(struct tm *" tm );
-.PP
-.fi
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR timelocal (),
-.BR timegm ():
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The functions
-.BR timelocal ()
-and
-.BR timegm ()
-are the inverses of
-.BR localtime (3)
-and
-.BR gmtime (3).
-Both functions take a broken-down time and convert it to calendar time
-(seconds since the Epoch, 1970-01-01 00:00:00 +0000, UTC).
-The difference between the two functions is that
-.BR timelocal ()
-takes the local timezone into account when doing the conversion, while
-.BR timegm ()
-takes the input value to be Coordinated Universal Time (UTC).
-.SH RETURN VALUE
-On success,
-these functions return the calendar time (seconds since the Epoch),
-expressed as a value of type
-.IR time_t .
-On error, they return the value
-.I (time_t)\ \-1
-and set
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B EOVERFLOW
-The result cannot be represented.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR timelocal (),
-.BR timegm ()
-T} Thread safety MT-Safe env locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-BSD.
-.SH HISTORY
-GNU, BSD.
-.PP
-The
-.BR timelocal ()
-function is equivalent to the POSIX standard function
-.BR mktime (3).
-There is no reason to ever use it.
-.SH SEE ALSO
-.BR gmtime (3),
-.BR localtime (3),
-.BR mktime (3),
-.BR tzset (3)
diff --git a/man3/timelocal.3 b/man3/timelocal.3
deleted file mode 100644
index 45d4c0907..000000000
--- a/man3/timelocal.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/timegm.3
diff --git a/man3/timeradd.3 b/man3/timeradd.3
deleted file mode 100644
index cf23d6cf2..000000000
--- a/man3/timeradd.3
+++ /dev/null
@@ -1,143 +0,0 @@
-.\" Copyright (c) 2007 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2007-07-31, mtk, Created
-.\"
-.TH timeradd 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-timeradd, timersub, timercmp, timerclear, timerisset \- timeval operations
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/time.h>
-.PP
-.BI "void timeradd(struct timeval *" a ", struct timeval *" b ,
-.BI " struct timeval *" res );
-.BI "void timersub(struct timeval *" a ", struct timeval *" b ,
-.BI " struct timeval *" res );
-.PP
-.BI "void timerclear(struct timeval *" tvp );
-.BI "int timerisset(struct timeval *" tvp );
-.PP
-.BI "int timercmp(struct timeval *" a ", struct timeval *" b ", " CMP );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-All functions shown above:
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- glibc 2.19 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The macros are provided to operate on
-.I timeval
-structures, defined in
-.I <sys/time.h>
-as:
-.PP
-.in +4n
-.EX
-struct timeval {
- time_t tv_sec; /* seconds */
- suseconds_t tv_usec; /* microseconds */
-};
-.EE
-.in
-.PP
-.BR timeradd ()
-adds the time values in
-.I a
-and
-.IR b ,
-and places the sum in the
-.I timeval
-pointed to by
-.IR res .
-The result is normalized such that
-.I res\->tv_usec
-has a value in the range 0 to 999,999.
-.PP
-.BR timersub ()
-subtracts the time value in
-.I b
-from the time value in
-.IR a ,
-and places the result in the
-.I timeval
-pointed to by
-.IR res .
-The result is normalized such that
-.I res\->tv_usec
-has a value in the range 0 to 999,999.
-.PP
-.BR timerclear ()
-zeros out the
-.I timeval
-structure pointed to by
-.IR tvp ,
-so that it represents the Epoch: 1970-01-01 00:00:00 +0000 (UTC).
-.PP
-.BR timerisset ()
-returns true (nonzero) if either field of the
-.I timeval
-structure pointed to by
-.I tvp
-contains a nonzero value.
-.PP
-.BR timercmp ()
-compares the timer values in
-.I a
-and
-.I b
-using the comparison operator
-.IR CMP ,
-and returns true (nonzero) or false (0) depending on
-the result of the comparison.
-Some systems (but not Linux/glibc),
-have a broken
-.BR timercmp ()
-implementation,
-.\" HP-UX, Tru64, Irix have a definition like:
-.\"#define timercmp(tvp, uvp, cmp) \
-.\" ((tvp)->tv_sec cmp (uvp)->tv_sec || \
-.\" (tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec)
-in which
-.I CMP
-of
-.IR >= ,
-.IR <= ,
-and
-.I ==
-do not work;
-portable applications can instead use
-.PP
-.in +4n
-.EX
-!timercmp(..., <)
-!timercmp(..., >)
-!timercmp(..., !=)
-.EE
-.in
-.SH RETURN VALUE
-.BR timerisset ()
-and
-.BR timercmp ()
-return true (nonzero) or false (0).
-.SH ERRORS
-No errors are defined.
-.SH STANDARDS
-None.
-.SH HISTORY
-BSD.
-.SH SEE ALSO
-.BR gettimeofday (2),
-.BR time (7)
diff --git a/man3/timerclear.3 b/man3/timerclear.3
deleted file mode 100644
index 8e977c98a..000000000
--- a/man3/timerclear.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/timeradd.3
diff --git a/man3/timercmp.3 b/man3/timercmp.3
deleted file mode 100644
index 8e977c98a..000000000
--- a/man3/timercmp.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/timeradd.3
diff --git a/man3/timerisset.3 b/man3/timerisset.3
deleted file mode 100644
index 8e977c98a..000000000
--- a/man3/timerisset.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/timeradd.3
diff --git a/man3/timersub.3 b/man3/timersub.3
deleted file mode 100644
index 8e977c98a..000000000
--- a/man3/timersub.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/timeradd.3
diff --git a/man3/timezone.3 b/man3/timezone.3
deleted file mode 100644
index 80907636c..000000000
--- a/man3/timezone.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tzset.3
diff --git a/man3/tmpfile.3 b/man3/tmpfile.3
deleted file mode 100644
index cbb59b9e0..000000000
--- a/man3/tmpfile.3
+++ /dev/null
@@ -1,106 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 17:46:57 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2001-11-17, aeb
-.TH tmpfile 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-tmpfile \- create a temporary file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.B FILE *tmpfile(void);
-.fi
-.SH DESCRIPTION
-The
-.BR tmpfile ()
-function opens a unique temporary file
-in binary read/write (w+b) mode.
-The file will be automatically deleted when it is closed or the
-program terminates.
-.SH RETURN VALUE
-The
-.BR tmpfile ()
-function returns a stream descriptor, or NULL if
-a unique filename cannot be generated or the unique file cannot be
-opened.
-In the latter case,
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EACCES
-Search permission denied for directory in file's path prefix.
-.TP
-.B EEXIST
-Unable to generate a unique filename.
-.TP
-.B EINTR
-The call was interrupted by a signal; see
-.BR signal (7).
-.TP
-.B EMFILE
-The per-process limit on the number of open file descriptors has been reached.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOSPC
-There was no room in the directory to add the new filename.
-.TP
-.B EROFS
-Read-only filesystem.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR tmpfile ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The standard does not specify the directory that
-.BR tmpfile ()
-will use.
-glibc will try the path prefix
-.I P_tmpdir
-defined
-in
-.IR <stdio.h> ,
-and if that fails, then the directory
-.IR /tmp .
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C89, SVr4, 4.3BSD, SUSv2.
-.SH NOTES
-POSIX.1-2001 specifies:
-an error message may be written to
-.I stdout
-if the stream
-cannot be opened.
-.SH SEE ALSO
-.BR exit (3),
-.BR mkstemp (3),
-.BR mktemp (3),
-.BR tempnam (3),
-.BR tmpnam (3)
diff --git a/man3/tmpnam.3 b/man3/tmpnam.3
deleted file mode 100644
index a8e93a083..000000000
--- a/man3/tmpnam.3
+++ /dev/null
@@ -1,169 +0,0 @@
-'\" t
-.\" Copyright (c) 1999 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2003-11-15, aeb, added tmpnam_r
-.\"
-.TH tmpnam 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-tmpnam, tmpnam_r \- create a name for a temporary file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "[[deprecated]] char *tmpnam(char *" s );
-.BI "[[deprecated]] char *tmpnam_r(char *" s );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR tmpnam_r ()
-.nf
- Since glibc 2.19:
- _DEFAULT_SOURCE
- Up to and including glibc 2.19:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-.B Note:
-avoid using these functions; use
-.BR mkstemp (3)
-or
-.BR tmpfile (3)
-instead.
-.PP
-The
-.BR tmpnam ()
-function returns a pointer to a string that is a valid filename,
-and such that a file with this name did not exist at some point
-in time, so that naive programmers may think it
-a suitable name for a temporary file.
-If the argument
-.I s
-is NULL, this name is generated in an internal static buffer
-and may be overwritten by the next call to
-.BR tmpnam ().
-If
-.I s
-is not NULL, the name is copied to the character array (of length
-at least
-.IR L_tmpnam )
-pointed to by
-.I s
-and the value
-.I s
-is returned in case of success.
-.PP
-The created pathname has a directory prefix
-.IR P_tmpdir .
-(Both
-.I L_tmpnam
-and
-.I P_tmpdir
-are defined in
-.IR <stdio.h> ,
-just like the
-.B TMP_MAX
-mentioned below.)
-.PP
-The
-.BR tmpnam_r ()
-function performs the same task as
-.BR tmpnam (),
-but returns NULL (to indicate an error) if
-.I s
-is NULL.
-.SH RETURN VALUE
-These functions return a pointer to a unique temporary
-filename, or NULL if a unique name cannot be generated.
-.SH ERRORS
-No errors are defined.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR tmpnam ()
-T} Thread safety MT-Unsafe race:tmpnam/!s
-T{
-.BR tmpnam_r ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR tmpnam ()
-C11, POSIX.1-2008.
-.TP
-.BR tmpnam_r ()
-None.
-.SH HISTORY
-.TP
-.BR tmpnam ()
-SVr4, 4.3BSD, C89, POSIX.1-2001.
-Obsolete in POSIX.1-2008.
-.TP
-.BR tmpnam_r ()
-Solaris.
-.SH NOTES
-The
-.BR tmpnam ()
-function generates a different string each time it is called,
-up to
-.B TMP_MAX
-times.
-If it is called more than
-.B TMP_MAX
-times,
-the behavior is implementation defined.
-.PP
-Although these functions generate names that are difficult to guess,
-it is nevertheless possible that between the time that
-the pathname is returned and the time that the program opens it,
-another program might create that pathname using
-.BR open (2),
-or create it as a symbolic link.
-This can lead to security holes.
-To avoid such possibilities, use the
-.BR open (2)
-.B O_EXCL
-flag to open the pathname.
-Or better yet, use
-.BR mkstemp (3)
-or
-.BR tmpfile (3).
-.PP
-Portable applications that use threads cannot call
-.BR tmpnam ()
-with a NULL argument if either
-.B _POSIX_THREADS
-or
-.B _POSIX_THREAD_SAFE_FUNCTIONS
-is defined.
-.SH BUGS
-Never use these functions.
-Use
-.BR mkstemp (3)
-or
-.BR tmpfile (3)
-instead.
-.SH SEE ALSO
-.BR mkstemp (3),
-.BR mktemp (3),
-.BR tempnam (3),
-.BR tmpfile (3)
diff --git a/man3/tmpnam_r.3 b/man3/tmpnam_r.3
deleted file mode 100644
index c1bd6dc1a..000000000
--- a/man3/tmpnam_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tmpnam.3
diff --git a/man3/toascii.3 b/man3/toascii.3
deleted file mode 100644
index f37562580..000000000
--- a/man3/toascii.3
+++ /dev/null
@@ -1,71 +0,0 @@
-'\" t
-.\" Copyright (c) 1995 by Jim Van Zandt <jrv@vanzandt.mv.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Added BUGS section, aeb, 950919
-.\"
-.TH toascii 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-toascii \- convert character to ASCII
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <ctype.h>
-.PP
-.BI "[[deprecated]] int toascii(int " c );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR toascii ():
-.nf
- _XOPEN_SOURCE
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-.BR toascii ()
-converts
-.I c
-to a 7-bit
-.I "unsigned char"
-value that fits into the ASCII character set, by clearing the
-high-order bits.
-.SH RETURN VALUE
-The value returned is that of the converted character.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR toascii ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-SVr4, BSD, POSIX.1-2001.
-Obsolete in POSIX.1-2008,
-noting that it cannot be used portably in a localized application.
-.SH BUGS
-Many people will be unhappy if you use this function.
-This function will convert accented letters into random characters.
-.SH SEE ALSO
-.BR isascii (3),
-.BR tolower (3),
-.BR toupper (3)
diff --git a/man3/tolower.3 b/man3/tolower.3
deleted file mode 100644
index 033f16e9e..000000000
--- a/man3/tolower.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/toupper.3
diff --git a/man3/tolower_l.3 b/man3/tolower_l.3
deleted file mode 100644
index 033f16e9e..000000000
--- a/man3/tolower_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/toupper.3
diff --git a/man3/toupper.3 b/man3/toupper.3
deleted file mode 100644
index fa3d68512..000000000
--- a/man3/toupper.3
+++ /dev/null
@@ -1,188 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\" and Copyright 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 17:45:39 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2000-02-13 by Nicolás Lichtmaier <nick@debian.org>
-.TH toupper 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-toupper, tolower, toupper_l, tolower_l \- convert uppercase or lowercase
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <ctype.h>
-.PP
-.BI "int toupper(int " "c" );
-.BI "int tolower(int " "c" );
-.PP
-.BI "int toupper_l(int " c ", locale_t " locale );
-.BI "int tolower_l(int " c ", locale_t " locale );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR toupper_l (),
-.BR tolower_l ():
-.nf
- Since glibc 2.10:
- _XOPEN_SOURCE >= 700
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-These functions convert lowercase letters to uppercase, and vice versa.
-.PP
-If
-.I c
-is a lowercase letter,
-.BR toupper ()
-returns its uppercase equivalent,
-if an uppercase representation exists in the current locale.
-Otherwise, it returns
-.IR c .
-The
-.BR toupper_l ()
-function performs the same task,
-but uses the locale referred to by the locale handle
-.IR locale .
-.PP
-If
-.I c
-is an uppercase letter,
-.BR tolower ()
-returns its lowercase equivalent,
-if a lowercase representation exists in the current locale.
-Otherwise, it returns
-.IR c .
-The
-.BR tolower_l ()
-function performs the same task,
-but uses the locale referred to by the locale handle
-.IR locale .
-.PP
-If
-.I c
-is neither an
-.I "unsigned char"
-value nor
-.BR EOF ,
-the behavior of these functions
-is undefined.
-.PP
-The behavior of
-.BR toupper_l ()
-and
-.BR tolower_l ()
-is undefined if
-.I locale
-is the special locale object
-.B LC_GLOBAL_LOCALE
-(see
-.BR duplocale (3))
-or is not a valid locale object handle.
-.SH RETURN VALUE
-The value returned is that of the converted letter, or
-.I c
-if the conversion was not possible.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR toupper (),
-.BR tolower (),
-.BR toupper_l (),
-.BR tolower_l ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR toupper ()
-.TQ
-.BR tolower ()
-C11, POSIX.1-2008.
-.TP
-.BR toupper_l ()
-.TQ
-.BR tolower_l ()
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR toupper ()
-.TQ
-.BR tolower ()
-C89, 4.3BSD, POSIX.1-2001.
-.TP
-.BR toupper_l ()
-.TQ
-.BR tolower_l ()
-POSIX.1-2008.
-.SH NOTES
-The standards require that the argument
-.I c
-for these functions is either
-.B EOF
-or a value that is representable in the type
-.IR "unsigned char" .
-If the argument
-.I c
-is of type
-.IR char ,
-it must be cast to
-.IR "unsigned char" ,
-as in the following example:
-.PP
-.in +4n
-.EX
-char c;
-\&...
-res = toupper((unsigned char) c);
-.EE
-.in
-.PP
-This is necessary because
-.I char
-may be the equivalent
-.IR "signed char" ,
-in which case a byte where the top bit is set would be sign extended when
-converting to
-.IR int ,
-yielding a value that is outside the range of
-.IR "unsigned char" .
-.PP
-The details of what constitutes an uppercase or lowercase letter depend
-on the locale.
-For example, the default
-.B """C"""
-locale does not know about umlauts, so no conversion is done for them.
-.PP
-In some non-English locales, there are lowercase letters with no
-corresponding uppercase equivalent;
-.\" FIXME One day the statement about "sharp s" needs to be reworked,
-.\" since there is nowadays a capital "sharp s" that has a codepoint
-.\" in Unicode 5.0; see https://en.wikipedia.org/wiki/Capital_%E1%BA%9E
-the German sharp s is one example.
-.SH SEE ALSO
-.BR isalpha (3),
-.BR newlocale (3),
-.BR setlocale (3),
-.BR towlower (3),
-.BR towupper (3),
-.BR uselocale (3),
-.BR locale (7)
diff --git a/man3/toupper_l.3 b/man3/toupper_l.3
deleted file mode 100644
index 033f16e9e..000000000
--- a/man3/toupper_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/toupper.3
diff --git a/man3/towctrans.3 b/man3/towctrans.3
deleted file mode 100644
index b8dca62ac..000000000
--- a/man3/towctrans.3
+++ /dev/null
@@ -1,85 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH towctrans 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-towctrans \- wide-character transliteration
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "wint_t towctrans(wint_t " wc ", wctrans_t " desc );
-.fi
-.SH DESCRIPTION
-If
-.I wc
-is a wide character, then the
-.BR towctrans ()
-function
-translates it according to the transliteration descriptor
-.IR desc .
-If
-.I wc
-is
-.BR WEOF ,
-.B WEOF
-is returned.
-.PP
-.I desc
-must be a transliteration descriptor returned by
-the
-.BR wctrans (3)
-function.
-.SH RETURN VALUE
-The
-.BR towctrans ()
-function returns the translated wide character,
-or
-.B WEOF
-if
-.I wc
-is
-.BR WEOF .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR towctrans ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR towctrans ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR towlower (3),
-.BR towupper (3),
-.BR wctrans (3)
diff --git a/man3/towlower.3 b/man3/towlower.3
deleted file mode 100644
index 64377c761..000000000
--- a/man3/towlower.3
+++ /dev/null
@@ -1,132 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\" and Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH towlower 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-towlower, towlower_l \- convert a wide character to lowercase
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "wint_t towlower(wint_t " wc );
-.BI "wint_t towlower_l(wint_t " wc ", locale_t " locale );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR towlower_l ():
-.nf
- Since glibc 2.10:
- _XOPEN_SOURCE >= 700
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR towlower ()
-function is the wide-character equivalent of the
-.BR tolower (3)
-function.
-If
-.I wc
-is an uppercase wide character,
-and there exists a lowercase equivalent in the current locale,
-it returns the lowercase equivalent of
-.IR wc .
-In all other cases,
-.I wc
-is returned unchanged.
-.PP
-The
-.BR towlower_l ()
-function performs the same task,
-but performs the conversion based on the character type information in
-the locale specified by
-.IR locale .
-The behavior of
-.BR towlower_l ()
-is undefined if
-.I locale
-is the special locale object
-.B LC_GLOBAL_LOCALE
-(see
-.BR duplocale (3))
-or is not a valid locale object handle.
-.PP
-The argument
-.I wc
-must be representable as a
-.I wchar_t
-and be a valid character in the locale or be the value
-.BR WEOF .
-.SH RETURN VALUE
-If
-.I wc
-was convertible to lowercase,
-.BR towlower ()
-returns its lowercase equivalent;
-otherwise it returns
-.IR wc .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR towlower ()
-T} Thread safety MT-Safe locale
-T{
-.BR towlower_l ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR towlower ()
-C11, POSIX.1-2008 (XSI).
-.TP
-.BR towlower_l ()
-POSIX.1-2008.
-.SH STANDARDS
-.TP
-.BR towlower ()
-C99, POSIX.1-2001 (XSI).
-Obsolete in POSIX.1-2008 (XSI).
-.TP
-.BR towlower_l ()
-glibc 2.3.
-POSIX.1-2008.
-.SH NOTES
-The behavior of these functions depends on the
-.B LC_CTYPE
-category of the locale.
-.PP
-These functions are not very appropriate for dealing with Unicode characters,
-because Unicode knows about three cases: upper, lower, and title case.
-.SH SEE ALSO
-.BR iswlower (3),
-.BR towctrans (3),
-.BR towupper (3),
-.BR locale (7)
diff --git a/man3/towlower_l.3 b/man3/towlower_l.3
deleted file mode 100644
index 6135f865c..000000000
--- a/man3/towlower_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/towlower.3
diff --git a/man3/towupper.3 b/man3/towupper.3
deleted file mode 100644
index 7d9aabed9..000000000
--- a/man3/towupper.3
+++ /dev/null
@@ -1,131 +0,0 @@
-'\" t
-.\" and Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH towupper 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-towupper, towupper_l \- convert a wide character to uppercase
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "wint_t towupper(wint_t " wc );
-.BI "wint_t towupper_l(wint_t " wc ", locale_t " locale );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR towupper_l ():
-.nf
- Since glibc 2.10:
- _XOPEN_SOURCE >= 700
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR towupper ()
-function is the wide-character equivalent of the
-.BR toupper (3)
-function.
-If
-.I wc
-is a lowercase wide character,
-and there exists an uppercase equivalent in the current locale,
-it returns the uppercase equivalent of
-.IR wc .
-In all other cases,
-.I wc
-is returned unchanged.
-.PP
-The
-.BR towupper_l ()
-function performs the same task,
-but performs the conversion based on the character type information in
-the locale specified by
-.IR locale .
-The behavior of
-.BR towupper_l ()
-is undefined if
-.I locale
-is the special locale object
-.B LC_GLOBAL_LOCALE
-(see
-.BR duplocale (3))
-or is not a valid locale object handle.
-.PP
-The argument
-.I wc
-must be representable as a
-.I wchar_t
-and be a valid character in the locale or be the value
-.BR WEOF .
-.SH RETURN VALUE
-If
-.I wc
-was convertible to uppercase,
-.BR towupper ()
-returns its uppercase equivalent;
-otherwise it returns
-.IR wc .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR towupper ()
-T} Thread safety MT-Safe locale
-T{
-.BR towupper_l ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR towupper ()
-C11, POSIX.1-2008 (XSI).
-.TP
-.BR towupper_l ()
-POSIX.1-2008.
-.SH HISTORY
-.TP
-.BR towupper ()
-C99, POSIX.1-2001 (XSI).
-Obsolete in POSIX.1-2008 (XSI).
-.TP
-.BR towupper_l ()
-POSIX.1-2008.
-glibc 2.3.
-.SH NOTES
-The behavior of these functions depends on the
-.B LC_CTYPE
-category of the locale.
-.PP
-These functions are not very appropriate for dealing with Unicode characters,
-because Unicode knows about three cases: upper, lower, and title case.
-.SH SEE ALSO
-.BR iswupper (3),
-.BR towctrans (3),
-.BR towlower (3),
-.BR locale (7)
diff --git a/man3/towupper_l.3 b/man3/towupper_l.3
deleted file mode 100644
index a0b0e89f8..000000000
--- a/man3/towupper_l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/towupper.3
diff --git a/man3/trunc.3 b/man3/trunc.3
deleted file mode 100644
index 42071922a..000000000
--- a/man3/trunc.3
+++ /dev/null
@@ -1,86 +0,0 @@
-'\" t
-.\" Copyright (C) 2001 Andries Brouwer <aeb@cwi.nl>.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH trunc 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-trunc, truncf, truncl \- round to integer, toward zero
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double trunc(double " x );
-.BI "float truncf(float " x );
-.BI "long double truncl(long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR trunc (),
-.BR truncf (),
-.BR truncl ():
-.nf
- _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-These functions round
-.I x
-to the nearest integer value that is not larger in magnitude than
-.IR x .
-.SH RETURN VALUE
-These functions return the rounded integer value, in floating format.
-.PP
-If
-.I x
-is integral, infinite, or NaN,
-.I x
-itself is returned.
-.SH ERRORS
-No errors occur.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR trunc (),
-.BR truncf (),
-.BR truncl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-C99, POSIX.1-2001.
-.SH NOTES
-The integral value returned by these functions may be too large
-to store in an integer type
-.RI ( int ,
-.IR long ,
-etc.).
-To avoid an overflow, which will produce undefined results,
-an application should perform a range check on the returned value
-before assigning it to an integer type.
-.SH SEE ALSO
-.BR ceil (3),
-.BR floor (3),
-.BR lrint (3),
-.BR nearbyint (3),
-.BR rint (3),
-.BR round (3)
diff --git a/man3/truncf.3 b/man3/truncf.3
deleted file mode 100644
index b85934168..000000000
--- a/man3/truncf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/trunc.3
diff --git a/man3/truncl.3 b/man3/truncl.3
deleted file mode 100644
index b85934168..000000000
--- a/man3/truncl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/trunc.3
diff --git a/man3/tsearch.3 b/man3/tsearch.3
deleted file mode 100644
index 958de6d2c..000000000
--- a/man3/tsearch.3
+++ /dev/null
@@ -1,353 +0,0 @@
-'\" t
-.\" Copyright 1995 by Jim Van Zandt <jrv@vanzandt.mv.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH tsearch 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-tsearch, tfind, tdelete, twalk, twalk_r, tdestroy \- manage a binary search tree
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <search.h>
-.PP
-.B typedef enum { preorder, postorder, endorder, leaf } VISIT;
-.PP
-.BI "void *tsearch(const void *" key ", void **" rootp ,
-.BI " int (*" compar ")(const void *, const void *));"
-.BI "void *tfind(const void *" key ", void *const *" rootp ,
-.BI " int (*" compar ")(const void *, const void *));"
-.BI "void *tdelete(const void *restrict " key ", void **restrict " rootp ,
-.BI " int (*" compar ")(const void *, const void *));"
-.BI "void twalk(const void *" root ,
-.BI " void (*" action ")(const void *" nodep ", VISIT " which ,
-.BI " int " depth ));
-.PP
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <search.h>
-.PP
-.BI "void twalk_r(const void *" root ,
-.BI " void (*" action ")(const void *" nodep ", VISIT " which ,
-.BI " void *" closure ),
-.BI " void *" closure );
-.BI "void tdestroy(void *" root ", void (*" free_node ")(void *" nodep ));
-.fi
-.SH DESCRIPTION
-.BR tsearch (),
-.BR tfind (),
-.BR twalk (),
-and
-.BR tdelete ()
-manage a
-binary search tree.
-They are generalized from Knuth (6.2.2) Algorithm T.
-The first field in each node of the tree is a pointer to the
-corresponding data item.
-(The calling program must store the actual data.)
-.I compar
-points to a comparison routine, which takes
-pointers to two items.
-It should return an integer which is negative,
-zero, or positive, depending on whether the first item is less than,
-equal to, or greater than the second.
-.PP
-.BR tsearch ()
-searches the tree for an item.
-.I key
-points to the item to be searched for.
-.I rootp
-points to a variable which points to the root of the tree.
-If the tree is empty,
-then the variable that
-.I rootp
-points to should be set to NULL.
-If the item is found in the tree, then
-.BR tsearch ()
-returns a pointer
-to the corresponding tree node.
-(In other words,
-.BR tsearch ()
-returns a pointer to a pointer to the data item.)
-If the item is not found, then
-.BR tsearch ()
-adds it, and returns a
-pointer to the corresponding tree node.
-.PP
-.BR tfind ()
-is like
-.BR tsearch (),
-except that if the item is not
-found, then
-.BR tfind ()
-returns NULL.
-.PP
-.BR tdelete ()
-deletes an item from the tree.
-Its arguments are the same as for
-.BR tsearch ().
-.PP
-.BR twalk ()
-performs depth-first, left-to-right traversal of a binary
-tree.
-.I root
-points to the starting node for the traversal.
-If that node is not the root, then only part of the tree will be visited.
-.BR twalk ()
-calls the user function
-.I action
-each time a node is
-visited (that is, three times for an internal node, and once for a
-leaf).
-.IR action ,
-in turn, takes three arguments.
-The first argument is a pointer to the node being visited.
-The structure of the node is unspecified,
-but it is possible to cast the pointer to a pointer-to-pointer-to-element
-in order to access the element stored within the node.
-The application must not modify the structure pointed to by this argument.
-The second argument is an integer which
-takes one of the values
-.BR preorder ,
-.BR postorder ,
-or
-.B endorder
-depending on whether this is the first, second, or
-third visit to the internal node,
-or the value
-.B leaf
-if this is the single visit to a leaf node.
-(These symbols are defined in
-.IR <search.h> .)
-The third argument is the depth of the node;
-the root node has depth zero.
-.PP
-(More commonly,
-.BR preorder ,
-.BR postorder ,
-and
-.B endorder
-are known as
-.BR preorder ,
-.BR inorder ,
-and
-.BR postorder :
-before visiting the children, after the first and before the second,
-and after visiting the children.
-Thus, the choice of name
-.B post\%order
-is rather confusing.)
-.PP
-.BR twalk_r ()
-is similar to
-.BR twalk (),
-but instead of the
-.I depth
-argument, the
-.I closure
-argument pointer is passed to each invocation of the action callback,
-unchanged.
-This pointer can be used to pass information to and from
-the callback function in a thread-safe fashion, without resorting
-to global variables.
-.PP
-.BR tdestroy ()
-removes the whole tree pointed to by
-.IR root ,
-freeing all resources allocated by the
-.BR tsearch ()
-function.
-For the data in each tree node the function
-.I free_node
-is called.
-The pointer to the data is passed as the argument to the function.
-If no such work is necessary,
-.I free_node
-must point to a function
-doing nothing.
-.SH RETURN VALUE
-.BR tsearch ()
-returns a pointer to a matching node in the tree, or to
-the newly added node, or NULL if there was insufficient memory
-to add the item.
-.BR tfind ()
-returns a pointer to the node, or
-NULL if no match is found.
-If there are multiple items that match the key,
-the item whose node is returned is unspecified.
-.PP
-.BR tdelete ()
-returns a pointer to the parent of the node deleted, or
-NULL if the item was not found.
-If the deleted node was the root node,
-.BR tdelete ()
-returns a dangling pointer that must not be accessed.
-.PP
-.BR tsearch (),
-.BR tfind (),
-and
-.BR tdelete ()
-also
-return NULL if
-.I rootp
-was NULL on entry.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR tsearch (),
-.BR tfind (),
-.BR tdelete ()
-T} Thread safety MT-Safe race:rootp
-T{
-.BR twalk ()
-T} Thread safety MT-Safe race:root
-T{
-.BR twalk_r ()
-T} Thread safety MT-Safe race:root
-T{
-.BR tdestroy ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR tsearch ()
-.TQ
-.BR tfind ()
-.TQ
-.BR tdelete ()
-.TQ
-.BR twalk ()
-POSIX.1-2008.
-.TP
-.BR tdestroy ()
-.TQ
-.BR twalk_r ()
-GNU.
-.SH HISTORY
-.TP
-.BR tsearch ()
-.TQ
-.BR tfind ()
-.TQ
-.BR tdelete ()
-.TQ
-.BR twalk ()
-POSIX.1-2001, POSIX.1-2008, SVr4.
-.TP
-.BR twalk_r ()
-glibc 2.30.
-.SH NOTES
-.BR twalk ()
-takes a pointer to the root, while the other functions
-take a pointer to a variable which points to the root.
-.PP
-.BR tdelete ()
-frees the memory required for the node in the tree.
-The user is responsible for freeing the memory for the corresponding
-data.
-.PP
-The example program depends on the fact that
-.BR twalk ()
-makes no
-further reference to a node after calling the user function with
-argument "endorder" or "leaf".
-This works with the GNU library
-implementation, but is not in the System V documentation.
-.SH EXAMPLES
-The following program inserts twelve random numbers into a binary
-tree, where duplicate numbers are collapsed, then prints the numbers
-in order.
-.PP
-.\" SRC BEGIN (tsearch.c)
-.EX
-#define _GNU_SOURCE /* Expose declaration of tdestroy() */
-#include <search.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-\&
-static void *root = NULL;
-\&
-static void *
-xmalloc(size_t n)
-{
- void *p;
-\&
- p = malloc(n);
- if (p)
- return p;
- fprintf(stderr, "insufficient memory\en");
- exit(EXIT_FAILURE);
-}
-\&
-static int
-compare(const void *pa, const void *pb)
-{
- if (*(int *) pa < *(int *) pb)
- return \-1;
- if (*(int *) pa > *(int *) pb)
- return 1;
- return 0;
-}
-\&
-static void
-action(const void *nodep, VISIT which, int depth)
-{
- int *datap;
-\&
- switch (which) {
- case preorder:
- break;
- case postorder:
- datap = *(int **) nodep;
- printf("%6d\en", *datap);
- break;
- case endorder:
- break;
- case leaf:
- datap = *(int **) nodep;
- printf("%6d\en", *datap);
- break;
- }
-}
-\&
-int
-main(void)
-{
- int *ptr;
- int **val;
-\&
- srand(time(NULL));
- for (unsigned int i = 0; i < 12; i++) {
- ptr = xmalloc(sizeof(*ptr));
- *ptr = rand() & 0xff;
- val = tsearch(ptr, &root, compare);
- if (val == NULL)
- exit(EXIT_FAILURE);
- if (*val != ptr)
- free(ptr);
- }
- twalk(root, action);
- tdestroy(root, free);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR bsearch (3),
-.BR hsearch (3),
-.BR lsearch (3),
-.BR qsort (3)
diff --git a/man3/ttyname.3 b/man3/ttyname.3
deleted file mode 100644
index 60f9c9cb2..000000000
--- a/man3/ttyname.3
+++ /dev/null
@@ -1,112 +0,0 @@
-'\" t
-.\" Copyright (c) 1995 Jim Van Zandt <jrv@vanzandt.mv.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified 2001-12-13, Martin Schulze <joey@infodrom.org>
-.\" Added ttyname_r, aeb, 2002-07-20
-.\"
-.TH ttyname 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ttyname, ttyname_r \- return name of a terminal
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <unistd.h>
-.PP
-.BI "char *ttyname(int " fd );
-.BI "int ttyname_r(int " fd ", char " buf [. buflen "], size_t " buflen );
-.fi
-.SH DESCRIPTION
-The function
-.BR ttyname ()
-returns a pointer to the null-terminated pathname of the terminal device
-that is open on the file descriptor \fIfd\fP, or NULL on error
-(for example, if \fIfd\fP is not connected to a terminal).
-The return value may point to static data, possibly overwritten by the
-next call.
-The function
-.BR ttyname_r ()
-stores this pathname in the buffer
-.I buf
-of length
-.IR buflen .
-.SH RETURN VALUE
-The function
-.BR ttyname ()
-returns a pointer to a pathname on success.
-On error, NULL is returned, and
-.I errno
-is set to indicate the error.
-The function
-.BR ttyname_r ()
-returns 0 on success, and an error number upon error.
-.SH ERRORS
-.TP
-.B EBADF
-Bad file descriptor.
-.TP
-.\" glibc commit 15e9a4f378c8607c2ae1aa465436af4321db0e23
-.B ENODEV
-.I fd
-refers to a slave pseudoterminal device
-but the corresponding pathname could not be found (see NOTES).
-.TP
-.B ENOTTY
-.I fd
-does not refer to a terminal device.
-.TP
-.B ERANGE
-.RB ( ttyname_r ())
-.I buflen
-was too small to allow storing the pathname.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ttyname ()
-T} Thread safety MT-Unsafe race:ttyname
-T{
-.BR ttyname_r ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, 4.2BSD.
-.SH NOTES
-A process that keeps a file descriptor that refers to a
-.BR pts (4)
-device open when switching to another mount namespace that uses a different
-.I /dev/ptmx
-instance may still accidentally find that a device path of the same name
-for that file descriptor exists.
-However, this device path refers to a different device and thus
-can't be used to access the device that the file descriptor refers to.
-Calling
-.BR ttyname ()
-or
-.BR ttyname_r ()
-on the file descriptor in the new mount namespace will cause these
-functions to return NULL and set
-.I errno
-to
-.BR ENODEV .
-.SH SEE ALSO
-.BR tty (1),
-.BR fstat (2),
-.BR ctermid (3),
-.BR isatty (3),
-.BR pts (4)
diff --git a/man3/ttyname_r.3 b/man3/ttyname_r.3
deleted file mode 100644
index aaa18ee8b..000000000
--- a/man3/ttyname_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ttyname.3
diff --git a/man3/ttyslot.3 b/man3/ttyslot.3
deleted file mode 100644
index 36946bb94..000000000
--- a/man3/ttyslot.3
+++ /dev/null
@@ -1,172 +0,0 @@
-'\" t
-.\" Copyright (C) 2002 Andries Brouwer <aeb@cwi.nl>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" This replaces an earlier man page written by Walter Harms
-.\" <walter.harms@informatik.uni-oldenburg.de>.
-.\"
-.TH ttyslot 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ttyslot \- find the slot of the current user's terminal in some file
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#include <unistd.h>" " /* See NOTES */"
-.PP
-.B "int ttyslot(void);"
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR ttyslot ():
-.nf
- Since glibc 2.24:
- _DEFAULT_SOURCE
- From glibc 2.20 to glibc 2.23:
- _DEFAULT_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
- glibc 2.19 and earlier:
- _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
-.fi
-.SH DESCRIPTION
-The legacy function
-.BR ttyslot ()
-returns the index of the current user's entry in some file.
-.PP
-Now "What file?" you ask.
-Well, let's first look at some history.
-.SS Ancient history
-There used to be a file
-.I /etc/ttys
-in UNIX\ V6, that was read by the
-.BR init (1)
-program to find out what to do with each terminal line.
-Each line consisted of three characters.
-The first character was either \[aq]0\[aq] or \[aq]1\[aq],
-where \[aq]0\[aq] meant "ignore".
-The second character denoted the terminal: \[aq]8\[aq] stood for "/dev/tty8".
-The third character was an argument to
-.BR getty (8)
-indicating the sequence of line speeds to try (\[aq]\-\[aq] was: start trying
-110 baud).
-Thus a typical line was "18\-".
-A hang on some line was solved by changing the \[aq]1\[aq] to a \[aq]0\[aq],
-signaling init, changing back again, and signaling init again.
-.PP
-In UNIX\ V7 the format was changed: here the second character
-was the argument to
-.BR getty (8)
-indicating the sequence of line speeds to try (\[aq]0\[aq] was: cycle through
-300-1200-150-110 baud; \[aq]4\[aq] was for the on-line console DECwriter)
-while the rest of the line contained the name of the tty.
-Thus a typical line was "14console".
-.PP
-Later systems have more elaborate syntax.
-System V-like systems have
-.I /etc/inittab
-instead.
-.SS Ancient history (2)
-On the other hand, there is the file
-.I /etc/utmp
-listing the people currently logged in.
-It is maintained by
-.BR login (1).
-It has a fixed size, and the appropriate index in the file was
-determined by
-.BR login (1)
-using the
-.BR ttyslot ()
-call to find the number of the line in
-.I /etc/ttys
-(counting from 1).
-.SS The semantics of ttyslot
-Thus, the function
-.BR ttyslot ()
-returns the index of the controlling terminal of the calling process
-in the file
-.IR /etc/ttys ,
-and that is (usually) the same as the index of the entry for the
-current user in the file
-.IR /etc/utmp .
-BSD still has the
-.I /etc/ttys
-file, but System V-like systems do not, and hence cannot refer to it.
-Thus, on such systems the documentation says that
-.BR ttyslot ()
-returns the current user's index in the user accounting data base.
-.SH RETURN VALUE
-If successful, this function returns the slot number.
-On error (e.g., if none of the file descriptors 0, 1, or 2 is
-associated with a terminal that occurs in this data base)
-it returns 0 on UNIX\ V6 and V7 and BSD-like systems,
-but \-1 on System V-like systems.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ttyslot ()
-T} Thread safety MT-Unsafe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The utmp file is found in various places on various systems, such as
-.IR /etc/utmp ,
-.IR /var/adm/utmp ,
-.IR /var/run/utmp .
-.SH STANDARDS
-None.
-.SH HISTORY
-SUSv1; marked as LEGACY in SUSv2; removed in POSIX.1-2001.
-SUSv2 requires \-1 on error.
-.PP
-The glibc2 implementation of this function reads the file
-.BR _PATH_TTYS ,
-defined in
-.I <ttyent.h>
-as "/etc/ttys".
-It returns 0 on error.
-Since Linux systems do not usually have "/etc/ttys", it will
-always return 0.
-.PP
-On BSD-like systems and Linux, the declaration of
-.BR ttyslot ()
-is provided by
-.IR <unistd.h> .
-On System V-like systems, the declaration is provided by
-.IR <stdlib.h> .
-Since glibc 2.24,
-.I <stdlib.h>
-also provides the declaration with the following
-feature test macro definitions:
-.PP
-.in +4n
-.EX
-(_XOPEN_SOURCE >= 500 ||
- (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED))
- && ! (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600)
-.EE
-.in
-.PP
-Minix also has
-.IR fttyslot ( fd ).
-.\" .SH HISTORY
-.\" .BR ttyslot ()
-.\" appeared in UNIX V7.
-.SH SEE ALSO
-.BR getttyent (3),
-.BR ttyname (3),
-.BR utmp (5)
diff --git a/man3/twalk.3 b/man3/twalk.3
deleted file mode 100644
index 72f125195..000000000
--- a/man3/twalk.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tsearch.3
diff --git a/man3/twalk_r.3 b/man3/twalk_r.3
deleted file mode 100644
index 72f125195..000000000
--- a/man3/twalk_r.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tsearch.3
diff --git a/man3/tzname.3 b/man3/tzname.3
deleted file mode 100644
index 80907636c..000000000
--- a/man3/tzname.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/tzset.3
diff --git a/man3/tzset.3 b/man3/tzset.3
deleted file mode 100644
index d7faf8b98..000000000
--- a/man3/tzset.3
+++ /dev/null
@@ -1,247 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sun Jul 25 11:01:58 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2001-11-13, aeb
-.\" Modified 2004-12-01 mtk and Martin Schulze <joey@infodrom.org>
-.\"
-.TH tzset 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-tzset, tzname, timezone, daylight \- initialize time conversion information
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <time.h>
-.PP
-.B void tzset(void);
-.PP
-.BI "extern char *" tzname [2];
-.BI "extern long " timezone ;
-.BI "extern int " daylight ;
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR tzset ():
-.nf
- _POSIX_C_SOURCE
-.fi
-.PP
-.IR tzname :
-.nf
- _POSIX_C_SOURCE
-.fi
-.PP
-.IR timezone ,
-.IR daylight :
-.nf
- _XOPEN_SOURCE
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR tzset ()
-function initializes the \fItzname\fP variable from the
-.B TZ
-environment variable.
-This function is automatically called by the
-other time conversion functions that depend on the timezone.
-In a System-V-like environment, it will also set the variables \fItimezone\fP
-(seconds West of UTC) and \fIdaylight\fP (to 0 if this timezone does not
-have any daylight saving time rules, or to nonzero if there is a time,
-past, present, or future when daylight saving time applies).
-.PP
-If the
-.B TZ
-variable does not appear in the environment, the system timezone is used.
-The system timezone is configured by copying, or linking, a file in the
-.BR tzfile (5)
-format to
-.IR /etc/localtime .
-A timezone database of these files may be located in the system
-timezone directory (see the \fBFILES\fP section below).
-.PP
-If the
-.B TZ
-variable does appear in the environment, but its value is empty,
-or its value cannot be interpreted using any of the formats specified
-below, then Coordinated Universal Time (UTC) is used.
-.PP
-The value of
-.B TZ
-can be one of two formats.
-The first format is a string of characters that directly represent the
-timezone to be used:
-.PP
-.in +4n
-.EX
-.IR "std offset" [ dst [ offset ][, start [ /time ], end [ /time ]]]
-.EE
-.in
-.PP
-There are no spaces in the specification.
-The \fIstd\fP string specifies an abbreviation for the timezone and must be
-three or more alphabetic characters.
-When enclosed between the less-than (<) and greater-than (>) signs, the
-character set is expanded to include the plus (+) sign, the minus (\-)
-sign, and digits.
-The \fIoffset\fP string immediately
-follows \fIstd\fP and specifies the time value to be added to the local
-time to get Coordinated Universal Time (UTC).
-The \fIoffset\fP is positive
-if the local timezone is west of the Prime Meridian and negative if it is
-east.
-The hour must be between 0 and 24, and the minutes and seconds 00 and 59:
-.PP
-.in +4n
-.EX
-.RI [ + | \- ] hh [ :mm [ :ss ]]
-.EE
-.in
-.PP
-The \fIdst\fP string and \fIoffset\fP specify the name and offset for the
-corresponding daylight saving timezone.
-If the offset is omitted,
-it defaults to one hour ahead of standard time.
-.PP
-The \fIstart\fP field specifies when daylight saving time goes into
-effect and the \fIend\fP field specifies when the change is made back to
-standard time.
-These fields may have the following formats:
-.TP
-J\fIn\fP
-This specifies the Julian day with \fIn\fP between 1 and 365.
-Leap days are not counted.
-In this format, February 29 can't be represented;
-February 28 is day 59, and March 1 is always day 60.
-.TP
-.I n
-This specifies the zero-based Julian day with \fIn\fP between 0 and 365.
-February 29 is counted in leap years.
-.TP
-M\fIm\fP.\fIw\fP.\fId\fP
-This specifies day \fId\fP (0 <= \fId\fP <= 6) of week \fIw\fP
-(1 <= \fIw\fP <= 5) of month \fIm\fP (1 <= \fIm\fP <= 12).
-Week 1 is
-the first week in which day \fId\fP occurs and week 5 is the last week
-in which day \fId\fP occurs.
-Day 0 is a Sunday.
-.PP
-The \fItime\fP fields specify when, in the local time currently in effect,
-the change to the other time occurs.
-If omitted, the default is 02:00:00.
-.PP
-Here is an example for New Zealand,
-where the standard time (NZST) is 12 hours ahead of UTC,
-and daylight saving time (NZDT), 13 hours ahead of UTC,
-runs from the first Sunday in October to the third Sunday in March,
-and the changeovers happen at the default time of 02:00:00:
-.PP
-.in +4n
-.EX
-TZ="NZST\-12:00:00NZDT\-13:00:00,M10.1.0,M3.3.0"
-.EE
-.in
-.PP
-The second format specifies that the timezone information should be read
-from a file:
-.PP
-.in +4n
-.EX
-:[filespec]
-.EE
-.in
-.PP
-If the file specification \fIfilespec\fP is omitted, or its value cannot
-be interpreted, then Coordinated Universal Time (UTC) is used.
-If \fIfilespec\fP is given, it specifies another
-.BR tzfile (5)-format
-file to read the timezone information from.
-If \fIfilespec\fP does not begin with a \[aq]/\[aq], the file specification is
-relative to the system timezone directory.
-If the colon is omitted each
-of the above \fBTZ\fP formats will be tried.
-.PP
-Here's an example, once more for New Zealand:
-.PP
-.in +4n
-.EX
-TZ=":Pacific/Auckland"
-.EE
-.in
-.SH ENVIRONMENT
-.TP
-.B TZ
-If this variable is set its value takes precedence over the system
-configured timezone.
-.TP
-.B TZDIR
-If this variable is set its value takes precedence over the system
-configured timezone database directory path.
-.SH FILES
-.TP
-.I /etc/localtime
-The system timezone file.
-.TP
-.I /usr/share/zoneinfo/
-The system timezone database directory.
-.TP
-.I /usr/share/zoneinfo/posixrules
-When a TZ string includes a dst timezone without anything following it,
-then this file is used for the start/end rules.
-It is in the
-.BR tzfile (5)
-format.
-By default, the zoneinfo Makefile hard links it to the
-.IR America/New_York " tzfile."
-.PP
-Above are the current standard file locations, but they are
-configurable when glibc is compiled.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR tzset ()
-T} Thread safety MT-Safe env locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, SVr4, 4.3BSD.
-.PP
-4.3BSD had a function
-.BI "char *timezone(" zone ", " dst )
-that returned the
-name of the timezone corresponding to its first argument (minutes
-West of UTC).
-If the second argument was 0, the standard name was used,
-otherwise the daylight saving time version.
-.SH SEE ALSO
-.BR date (1),
-.BR gettimeofday (2),
-.BR time (2),
-.BR ctime (3),
-.BR getenv (3),
-.BR tzfile (5)
diff --git a/man3/ualarm.3 b/man3/ualarm.3
deleted file mode 100644
index f66d85b3d..000000000
--- a/man3/ualarm.3
+++ /dev/null
@@ -1,143 +0,0 @@
-'\" t
-.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH ualarm 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ualarm \- schedule signal after given number of microseconds
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B "#include <unistd.h>"
-.PP
-.BI "useconds_t ualarm(useconds_t " usecs ", useconds_t " interval );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR ualarm ():
-.nf
- Since glibc 2.12:
- (_XOPEN_SOURCE >= 500) && ! (_POSIX_C_SOURCE >= 200809L)
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE
- Before glibc 2.12:
- _BSD_SOURCE || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
-.fi
-.SH DESCRIPTION
-The
-.BR ualarm ()
-function causes the signal
-.B SIGALRM
-to be sent to the invoking process after (not less than)
-.I usecs
-microseconds.
-The delay may be lengthened slightly by any system activity
-or by the time spent processing the call or by the
-granularity of system timers.
-.PP
-Unless caught or ignored, the
-.B SIGALRM
-signal will terminate the process.
-.PP
-If the
-.I interval
-argument is nonzero, further
-.B SIGALRM
-signals will be sent every
-.I interval
-microseconds after the first.
-.SH RETURN VALUE
-This function returns the number of microseconds remaining for
-any alarm that was previously set, or 0 if no alarm was pending.
-.SH ERRORS
-.TP
-.B EINTR
-Interrupted by a signal; see
-.BR signal (7).
-.TP
-.B EINVAL
-\fIusecs\fP or \fIinterval\fP is not smaller than 1000000.
-(On systems where that is considered an error.)
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ualarm ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-4.3BSD, POSIX.1-2001.
-POSIX.1-2001 marks it as obsolete.
-Removed in POSIX.1-2008.
-.PP
-4.3BSD, SUSv2, and POSIX do not define any errors.
-.PP
-POSIX.1-2001 does not specify what happens if the
-.I usecs
-argument is 0.
-.\" This case is not documented in HP-US, Solar, FreeBSD, NetBSD, or OpenBSD!
-On Linux (and probably most other systems),
-the effect is to cancel any pending alarm.
-.PP
-The type
-.I useconds_t
-is an unsigned integer type capable of holding integers
-in the range [0,1000000].
-On the original BSD implementation, and in glibc before glibc 2.1,
-the arguments to
-.BR ualarm ()
-were instead typed as
-.IR "unsigned int" .
-Programs will be more portable if they never mention
-.I useconds_t
-explicitly.
-.PP
-The interaction of this function with
-other timer functions such as
-.BR alarm (2),
-.BR sleep (3),
-.BR nanosleep (2),
-.BR setitimer (2),
-.BR timer_create (2),
-.BR timer_delete (2),
-.BR timer_getoverrun (2),
-.BR timer_gettime (2),
-.BR timer_settime (2),
-.BR usleep (3)
-is unspecified.
-.PP
-This function is obsolete.
-Use
-.BR setitimer (2)
-or POSIX interval timers
-.RB ( timer_create (2),
-etc.)
-instead.
-.SH SEE ALSO
-.BR alarm (2),
-.BR getitimer (2),
-.BR nanosleep (2),
-.BR select (2),
-.BR setitimer (2),
-.BR usleep (3),
-.BR time (7)
diff --git a/man3/ulckpwdf.3 b/man3/ulckpwdf.3
deleted file mode 100644
index 142c5a5ca..000000000
--- a/man3/ulckpwdf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getspnam.3
diff --git a/man3/ulimit.3 b/man3/ulimit.3
deleted file mode 100644
index 5f7671d87..000000000
--- a/man3/ulimit.3
+++ /dev/null
@@ -1,90 +0,0 @@
-'\" t
-.\" Copyright (C) 1996 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Moved to man3, aeb, 980612
-.\"
-.TH ulimit 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ulimit \- get and set user limits
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <ulimit.h>
-.PP
-.BI "[[deprecated]] long ulimit(int " cmd ", long " newlimit );
-.fi
-.SH DESCRIPTION
-Warning: this routine is obsolete.
-Use
-.BR getrlimit (2),
-.BR setrlimit (2),
-and
-.BR sysconf (3)
-instead.
-For the shell command
-.BR ulimit ,
-see
-.BR bash (1).
-.PP
-The
-.BR ulimit ()
-call will get or set some limit for the calling process.
-The
-.I cmd
-argument can have one of the following values.
-.TP
-.B UL_GETFSIZE
-Return the limit on the size of a file, in units of 512 bytes.
-.TP
-.B UL_SETFSIZE
-Set the limit on the size of a file.
-.TP
-.B 3
-(Not implemented for Linux.)
-Return the maximum possible address of the data segment.
-.TP
-.B 4
-(Implemented but no symbolic constant provided.)
-Return the maximum number of files that the calling process can open.
-.SH RETURN VALUE
-On success,
-.BR ulimit ()
-returns a nonnegative value.
-On error, \-1 is returned, and
-.I errno
-is set to indicate the error.
-.SH ERRORS
-.TP
-.B EPERM
-An unprivileged process tried to increase a limit.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ulimit ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-SVr4, POSIX.1-2001.
-POSIX.1-2008 marks it as obsolete.
-.SH SEE ALSO
-.BR bash (1),
-.BR getrlimit (2),
-.BR setrlimit (2),
-.BR sysconf (3)
diff --git a/man3/undocumented.3 b/man3/undocumented.3
deleted file mode 100644
index bb025e848..000000000
--- a/man3/undocumented.3
+++ /dev/null
@@ -1,164 +0,0 @@
-.\" Copyright 1995 Jim Van Zandt
-.\" From jrv@vanzandt.mv.com Mon Sep 4 21:11:50 1995
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 1996-11-08, meem@sherilyn.wustl.edu, corrections
-.\" 2004-10-31, aeb, changed maintainer address, updated list
-.\" 2015-04-20, william@tuffbizz.com, updated list
-.\"
-.TH undocumented 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-undocumented \- undocumented library functions
-.SH SYNOPSIS
-.nf
-Undocumented library functions
-.fi
-.SH DESCRIPTION
-This man page mentions those library functions which are implemented in
-the standard libraries but not yet documented in man pages.
-.SS Solicitation
-If you have information about these functions,
-please look in the source code, write a man page (using a style
-similar to that of the other Linux section 3 man pages), and send it to
-.B mtk.manpages@gmail.com
-for inclusion in the next man page release.
-.SS The list
-.BR authdes_create (3),
-.BR authdes_getucred (3),
-.BR authdes_pk_create (3),
-.\" .BR chflags (3),
-.BR clntunix_create (3),
-.BR creat64 (3),
-.BR dn_skipname (3),
-.\" .BR fattach (3),
-.\" .BR fchflags (3),
-.\" .BR fclean (3),
-.BR fcrypt (3),
-.\" .BR fdetach (3),
-.BR fp_nquery (3),
-.BR fp_query (3),
-.BR fp_resstat (3),
-.BR freading (3),
-.BR freopen64 (3),
-.BR fseeko64 (3),
-.BR ftello64 (3),
-.BR ftw64 (3),
-.BR fwscanf (3),
-.BR get_avphys_pages (3),
-.BR getdirentries64 (3),
-.BR getmsg (3),
-.BR getnetname (3),
-.BR get_phys_pages (3),
-.BR getpublickey (3),
-.BR getsecretkey (3),
-.BR h_errlist (3),
-.BR host2netname (3),
-.BR hostalias (3),
-.BR inet_nsap_addr (3),
-.BR inet_nsap_ntoa (3),
-.BR init_des (3),
-.BR libc_nls_init (3),
-.BR mstats (3),
-.BR netname2host (3),
-.BR netname2user (3),
-.BR nlist (3),
-.BR obstack_free (3),
-.\" .BR obstack stuff (3),
-.BR parse_printf_format (3),
-.BR p_cdname (3),
-.BR p_cdnname (3),
-.BR p_class (3),
-.BR p_fqname (3),
-.BR p_option (3),
-.BR p_query (3),
-.BR printf_size (3),
-.BR printf_size_info (3),
-.BR p_rr (3),
-.BR p_time (3),
-.BR p_type (3),
-.BR putlong (3),
-.BR putshort (3),
-.BR re_compile_fastmap (3),
-.BR re_compile_pattern (3),
-.BR register_printf_function (3),
-.BR re_match (3),
-.BR re_match_2 (3),
-.BR re_rx_search (3),
-.BR re_search (3),
-.BR re_search_2 (3),
-.BR re_set_registers (3),
-.BR re_set_syntax (3),
-.BR res_send_setqhook (3),
-.BR res_send_setrhook (3),
-.BR ruserpass (3),
-.BR setfileno (3),
-.BR sethostfile (3),
-.BR svc_exit (3),
-.BR svcudp_enablecache (3),
-.BR tell (3),
-.BR thrd_create (3),
-.BR thrd_current (3),
-.BR thrd_equal (3),
-.BR thrd_sleep (3),
-.BR thrd_yield (3),
-.BR tr_break (3),
-.BR tzsetwall (3),
-.BR ufc_dofinalperm (3),
-.BR ufc_doit (3),
-.BR user2netname (3),
-.BR wcschrnul (3),
-.BR wcsftime (3),
-.BR wscanf (3),
-.BR xdr_authdes_cred (3),
-.BR xdr_authdes_verf (3),
-.BR xdr_cryptkeyarg (3),
-.BR xdr_cryptkeyres (3),
-.BR xdr_datum (3),
-.BR xdr_des_block (3),
-.BR xdr_domainname (3),
-.BR xdr_getcredres (3),
-.BR xdr_keybuf (3),
-.BR xdr_keystatus (3),
-.BR xdr_mapname (3),
-.BR xdr_netnamestr (3),
-.BR xdr_netobj (3),
-.BR xdr_passwd (3),
-.BR xdr_peername (3),
-.BR xdr_rmtcall_args (3),
-.BR xdr_rmtcallres (3),
-.BR xdr_unixcred (3),
-.BR xdr_yp_buf (3),
-.BR xdr_yp_inaddr (3),
-.BR xdr_ypbind_binding (3),
-.BR xdr_ypbind_resp (3),
-.BR xdr_ypbind_resptype (3),
-.BR xdr_ypbind_setdom (3),
-.BR xdr_ypdelete_args (3),
-.BR xdr_ypmaplist (3),
-.BR xdr_ypmaplist_str (3),
-.BR xdr_yppasswd (3),
-.BR xdr_ypreq_key (3),
-.BR xdr_ypreq_nokey (3),
-.BR xdr_ypresp_all (3),
-.BR xdr_ypresp_all_seq (3),
-.BR xdr_ypresp_key_val (3),
-.BR xdr_ypresp_maplist (3),
-.BR xdr_ypresp_master (3),
-.BR xdr_ypresp_order (3),
-.BR xdr_ypresp_val (3),
-.BR xdr_ypstat (3),
-.BR xdr_ypupdate_args (3),
-.BR yp_all (3),
-.BR yp_bind (3),
-.BR yperr_string (3),
-.BR yp_first (3),
-.BR yp_get_default_domain (3),
-.BR yp_maplist (3),
-.BR yp_master (3),
-.BR yp_match (3),
-.BR yp_next (3),
-.BR yp_order (3),
-.BR ypprot_err (3),
-.BR yp_unbind (3),
-.BR yp_update (3)
diff --git a/man3/ungetc.3 b/man3/ungetc.3
deleted file mode 100644
index 2f6585a10..000000000
--- a/man3/ungetc.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/fgetc.3
diff --git a/man3/ungetwc.3 b/man3/ungetwc.3
deleted file mode 100644
index 924dd99cb..000000000
--- a/man3/ungetwc.3
+++ /dev/null
@@ -1,105 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH ungetwc 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ungetwc \- push back a wide character onto a FILE stream
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wint_t ungetwc(wint_t " wc ", FILE *" stream );
-.fi
-.SH DESCRIPTION
-The
-.BR ungetwc ()
-function is the wide-character equivalent of the
-.BR ungetc (3)
-function.
-It pushes back a wide character onto
-.I stream
-and returns it.
-.PP
-If
-.I wc
-is
-.BR WEOF ,
-it returns
-.BR WEOF .
-If
-.I wc
-is an invalid wide character,
-it sets
-.I errno
-to
-.B EILSEQ
-and returns
-.BR WEOF .
-.PP
-If
-.I wc
-is a valid wide character, it is pushed back onto the stream
-and thus becomes available for future wide-character read operations.
-The file-position indicator is decremented by one or more.
-The end-of-file
-indicator is cleared.
-The backing storage of the file is not affected.
-.PP
-Note:
-.I wc
-need not be the last wide-character read from the stream;
-it can be any other valid wide character.
-.PP
-If the implementation supports multiple push-back operations in a row, the
-pushed-back wide characters will be read in reverse order; however, only one
-level of push-back is guaranteed.
-.SH RETURN VALUE
-The
-.BR ungetwc ()
-function returns
-.I wc
-when successful, or
-.B WEOF
-upon
-failure.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR ungetwc ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR ungetwc ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR fgetwc (3)
diff --git a/man3/unlocked_stdio.3 b/man3/unlocked_stdio.3
deleted file mode 100644
index feed708db..000000000
--- a/man3/unlocked_stdio.3
+++ /dev/null
@@ -1,197 +0,0 @@
-'\" t
-.\" Copyright (C) 2001 Andries Brouwer <aeb@cwi.nl>.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH unlocked_stdio 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-getc_unlocked, getchar_unlocked, putc_unlocked,
-putchar_unlocked \- nonlocking stdio functions
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BI "int getc_unlocked(FILE *" stream );
-.B "int getchar_unlocked(void);"
-.BI "int putc_unlocked(int " c ", FILE *" stream );
-.BI "int putchar_unlocked(int " c );
-.PP
-.BI "void clearerr_unlocked(FILE *" stream );
-.BI "int feof_unlocked(FILE *" stream );
-.BI "int ferror_unlocked(FILE *" stream );
-.BI "int fileno_unlocked(FILE *" stream );
-.BI "int fflush_unlocked(FILE *_Nullable " stream );
-.PP
-.BI "int fgetc_unlocked(FILE *" stream );
-.BI "int fputc_unlocked(int " c ", FILE *" stream );
-.PP
-.BI "size_t fread_unlocked(void " ptr "[restrict ." size " * ." n ],
-.BI " size_t " size ", size_t " n ,
-.BI " FILE *restrict " stream );
-.BI "size_t fwrite_unlocked(const void " ptr "[restrict ." size " * ." n ],
-.BI " size_t " size ", size_t " n ,
-.BI " FILE *restrict " stream );
-.PP
-.BI "char *fgets_unlocked(char " s "[restrict ." n "], int " n \
-", FILE *restrict " stream );
-.BI "int fputs_unlocked(const char *restrict " s ", FILE *restrict " stream );
-.PP
-.B #include <wchar.h>
-.PP
-.BI "wint_t getwc_unlocked(FILE *" stream );
-.B "wint_t getwchar_unlocked(void);"
-.BI "wint_t fgetwc_unlocked(FILE *" stream );
-.PP
-.BI "wint_t fputwc_unlocked(wchar_t " wc ", FILE *" stream );
-.BI "wint_t putwc_unlocked(wchar_t " wc ", FILE *" stream );
-.BI "wint_t putwchar_unlocked(wchar_t " wc );
-.PP
-.BI "wchar_t *fgetws_unlocked(wchar_t " ws "[restrict ." n "], int " n ,
-.BI " FILE *restrict " stream );
-.BI "int fputws_unlocked(const wchar_t *restrict " ws ,
-.BI " FILE *restrict " stream );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.nh
-.RE
-.ad l
-.PP
-.BR getc_unlocked (),
-.BR getchar_unlocked (),
-.BR putc_unlocked (),
-.BR putchar_unlocked ():
-.nf
- /* glibc >= 2.24: */ _POSIX_C_SOURCE >= 199309L
- || /* glibc <= 2.23: */ _POSIX_C_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
-.fi
-.PP
-.BR clearerr_unlocked (),
-.BR feof_unlocked (),
-.BR ferror_unlocked (),
-.BR fileno_unlocked (),
-.BR fflush_unlocked (),
-.BR fgetc_unlocked (),
-.BR fputc_unlocked (),
-.BR fread_unlocked (),
-.BR fwrite_unlocked ():
-.nf
- /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
-.fi
-.PP
-.BR fgets_unlocked (),
-.BR fputs_unlocked (),
-.BR getwc_unlocked (),
-.BR getwchar_unlocked (),
-.BR fgetwc_unlocked (),
-.BR fputwc_unlocked (),
-.BR putwchar_unlocked (),
-.BR fgetws_unlocked (),
-.BR fputws_unlocked ():
-.nf
- _GNU_SOURCE
-.fi
-.hy
-.ad
-.SH DESCRIPTION
-Each of these functions has the same behavior as its counterpart
-without the "_unlocked" suffix, except that they do not use locking
-(they do not set locks themselves, and do not test for the presence
-of locks set by others) and hence are thread-unsafe.
-See
-.BR flockfile (3).
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR getc_unlocked (),
-.BR putc_unlocked (),
-.BR clearerr_unlocked (),
-.BR fflush_unlocked (),
-.BR fgetc_unlocked (),
-.BR fputc_unlocked (),
-.BR fread_unlocked (),
-.BR fwrite_unlocked (),
-.BR fgets_unlocked (),
-.BR fputs_unlocked (),
-.BR getwc_unlocked (),
-.BR fgetwc_unlocked (),
-.BR fputwc_unlocked (),
-.BR putwc_unlocked (),
-.BR fgetws_unlocked (),
-.BR fputws_unlocked ()
-T} Thread safety T{
-MT-Safe race:stream
-T}
-T{
-.BR getchar_unlocked (),
-.BR getwchar_unlocked ()
-T} Thread safety T{
-MT-Unsafe race:stdin
-T}
-T{
-.BR putchar_unlocked (),
-.BR putwchar_unlocked ()
-T} Thread safety T{
-MT-Unsafe race:stdout
-T}
-T{
-.BR feof_unlocked (),
-.BR ferror_unlocked (),
-.BR fileno_unlocked ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR getc_unlocked ()
-.TQ
-.BR getchar_unlocked ()
-.TQ
-.BR putc_unlocked ()
-.TQ
-.BR putchar_unlocked ()
-POSIX.1-2008.
-.TP
-Others:
-None.
-.SH HISTORY
-.TP
-.BR getc_unlocked ()
-.TQ
-.BR getchar_unlocked ()
-.TQ
-.BR putc_unlocked ()
-.TQ
-.BR putchar_unlocked ()
-POSIX.1-2001.
-.\" E.g., in HP-UX 10.0. In HP-UX 10.30 they are called obsolescent, and
-.\" moved to a compatibility library.
-.\" Available in HP-UX 10.0: clearerr_unlocked, fclose_unlocked,
-.\" feof_unlocked, ferror_unlocked, fflush_unlocked, fgets_unlocked,
-.\" fgetwc_unlocked, fgetws_unlocked, fileno_unlocked, fputs_unlocked,
-.\" fputwc_unlocked, fputws_unlocked, fread_unlocked, fseek_unlocked,
-.\" ftell_unlocked, fwrite_unlocked, getc_unlocked, getchar_unlocked,
-.\" getw_unlocked, getwc_unlocked, getwchar_unlocked, putc_unlocked,
-.\" putchar_unlocked, puts_unlocked, putws_unlocked, putw_unlocked,
-.\" putwc_unlocked, putwchar_unlocked, rewind_unlocked, setvbuf_unlocked,
-.\" ungetc_unlocked, ungetwc_unlocked.
-.SH SEE ALSO
-.BR flockfile (3),
-.BR stdio (3)
diff --git a/man3/unlockpt.3 b/man3/unlockpt.3
deleted file mode 100644
index 73b6ef8c1..000000000
--- a/man3/unlockpt.3
+++ /dev/null
@@ -1,87 +0,0 @@
-'\" t
-.\" %%%LICENSE_START(PUBLIC_DOMAIN)
-.\" This page is in the public domain. - aeb
-.\" %%%LICENSE_END
-.\"
-.TH unlockpt 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-unlockpt \- unlock a pseudoterminal master/slave pair
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #define _XOPEN_SOURCE
-.B #include <stdlib.h>
-.PP
-.BI "int unlockpt(int " fd );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR unlockpt ():
-.nf
- Since glibc 2.24:
- _XOPEN_SOURCE >= 500
-.\" || (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED)
- glibc 2.23 and earlier:
- _XOPEN_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR unlockpt ()
-function unlocks the slave pseudoterminal device
-corresponding to the master pseudoterminal referred to by the file descriptor
-.IR fd .
-.PP
-.BR unlockpt ()
-should be called before opening the slave side of a pseudoterminal.
-.SH RETURN VALUE
-When successful,
-.BR unlockpt ()
-returns 0.
-Otherwise, it returns \-1 and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B EBADF
-The
-.I fd
-argument is not a file descriptor open for writing.
-.TP
-.B EINVAL
-The
-.I fd
-argument is not associated with a master pseudoterminal.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR unlockpt ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-POSIX.1-2001.
-.SH SEE ALSO
-.BR grantpt (3),
-.BR posix_openpt (3),
-.BR ptsname (3),
-.BR pts (4),
-.BR pty (7)
diff --git a/man3/unsetenv.3 b/man3/unsetenv.3
deleted file mode 100644
index 19ec56c24..000000000
--- a/man3/unsetenv.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/setenv.3
diff --git a/man3/updwtmp.3 b/man3/updwtmp.3
deleted file mode 100644
index c5373e772..000000000
--- a/man3/updwtmp.3
+++ /dev/null
@@ -1,84 +0,0 @@
-'\" t
-.\" Copyright 1997 Nicolás Lichtmaier <nick@debian.org>
-.\" Created Wed Jul 2 23:27:34 ART 1997
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Added info on availability, aeb, 971207
-.\" Added -lutil remark, 030718
-.\" 2008-07-02, mtk, document updwtmpx()
-.\"
-.TH updwtmp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-updwtmp, logwtmp \- append an entry to the wtmp file
-.SH LIBRARY
-System utilities library
-.RI ( libutil ", " \-lutil )
-.SH SYNOPSIS
-.nf
-.B #include <utmp.h>
-.PP
-.BI "void updwtmp(const char *" wtmp_file ", const struct utmp *" ut );
-.BI "void logwtmp(const char *" line ", const char *" name \
-", const char *" host );
-.fi
-.SH DESCRIPTION
-.BR updwtmp ()
-appends the utmp structure
-.I ut
-to the wtmp file.
-.PP
-.BR logwtmp ()
-constructs a utmp structure using
-.IR line ", " name ", " host ,
-current time, and current process ID.
-Then it calls
-.BR updwtmp ()
-to append the structure to the wtmp file.
-.SH FILES
-.TP
-.I /var/log/wtmp
-database of past user logins
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR updwtmp (),
-.BR logwtmp ()
-T} Thread safety MT-Unsafe sig:ALRM timer
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-For consistency with the other "utmpx" functions (see
-.BR getutxent (3)),
-glibc provides (since glibc 2.1):
-.PP
-.in +4n
-.EX
-.BR "#define _GNU_SOURCE " "/* See feature_test_macros(7) */"
-.B #include <utmpx.h>
-.BI "void updwtmpx (const char *" wtmpx_file ", const struct utmpx *" utx );
-.EE
-.in
-.PP
-This function performs the same task as
-.BR updwtmp (),
-but differs in that it takes a
-.I utmpx
-structure as its last argument.
-.SH STANDARDS
-None.
-.SH HISTORY
-Solaris, NetBSD.
-.SH SEE ALSO
-.BR getutxent (3),
-.BR wtmp (5)
diff --git a/man3/updwtmpx.3 b/man3/updwtmpx.3
deleted file mode 100644
index 0dc4dea39..000000000
--- a/man3/updwtmpx.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/updwtmp.3
diff --git a/man3/uselocale.3 b/man3/uselocale.3
deleted file mode 100644
index e9c930077..000000000
--- a/man3/uselocale.3
+++ /dev/null
@@ -1,102 +0,0 @@
-.\" Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH uselocale 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-uselocale \- set/get the locale for the calling thread
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <locale.h>
-.PP
-.BI "locale_t uselocale(locale_t " newloc );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR uselocale ():
-.nf
- Since glibc 2.10:
- _XOPEN_SOURCE >= 700
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR uselocale ()
-function sets the current locale for the calling thread,
-and returns the thread's previously current locale.
-After a successful call to
-.BR uselocale (),
-any calls by this thread to functions that depend on the locale
-will operate as though the locale has been set to
-.IR newloc .
-.PP
-The
-.I newloc
-argument can have one of the following values:
-.TP
-A handle returned by a call to \fBnewlocale\fP(3) or \fBduplocale\fP(3)
-The calling thread's current locale is set to the specified locale.
-.TP
-The special locale object handle \fBLC_GLOBAL_LOCALE\fP
-The calling thread's current locale is set to the global locale determined by
-.BR setlocale (3).
-.TP
-.I "(locale_t) 0"
-The calling thread's current locale is left unchanged
-(and the current locale is returned as the function result).
-.SH RETURN VALUE
-On success,
-.BR uselocale ()
-returns the locale handle that was set by the previous call to
-.BR uselocale ()
-in this thread, or
-.B LC_GLOBAL_LOCALE
-if there was no such previous call.
-On error, it returns
-.IR "(locale_t)\ 0" ,
-and sets
-.I errno
-to indicate the error.
-.SH ERRORS
-.TP
-.B EINVAL
-.I newloc
-does not refer to a valid locale object.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.3.
-POSIX.1-2008.
-.SH NOTES
-Unlike
-.BR setlocale (3),
-.BR uselocale ()
-does not allow selective replacement of individual locale categories.
-To employ a locale that differs in only a few categories from the current
-locale, use calls to
-.BR duplocale (3)
-and
-.BR newlocale (3)
-to obtain a locale object equivalent to the current locale and
-modify the desired categories in that object.
-.SH EXAMPLES
-See
-.BR newlocale (3)
-and
-.BR duplocale (3).
-.SH SEE ALSO
-.BR locale (1),
-.BR duplocale (3),
-.BR freelocale (3),
-.BR newlocale (3),
-.BR setlocale (3),
-.BR locale (5),
-.BR locale (7)
diff --git a/man3/usleep.3 b/man3/usleep.3
deleted file mode 100644
index 03804d436..000000000
--- a/man3/usleep.3
+++ /dev/null
@@ -1,126 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2001-04-01 by aeb
-.\" Modified 2003-07-23 by aeb
-.\"
-.TH usleep 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-usleep \- suspend execution for microsecond intervals
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B "#include <unistd.h>"
-.PP
-.BI "int usleep(useconds_t " usec );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR usleep ():
-.nf
- Since glibc 2.12:
- (_XOPEN_SOURCE >= 500) && ! (_POSIX_C_SOURCE >= 200809L)
- || /* glibc >= 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _BSD_SOURCE
- Before glibc 2.12:
- _BSD_SOURCE || _XOPEN_SOURCE >= 500
-.\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
-.fi
-.SH DESCRIPTION
-The
-.BR usleep ()
-function suspends execution of the calling thread for
-(at least) \fIusec\fP microseconds.
-The sleep may be lengthened slightly
-by any system activity or by the time spent processing the call or by the
-granularity of system timers.
-.SH RETURN VALUE
-The
-.BR usleep ()
-function returns 0 on success.
-On error, \-1 is returned, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B EINTR
-Interrupted by a signal; see
-.BR signal (7).
-.TP
-.B EINVAL
-\fIusec\fP is greater than or equal to 1000000.
-(On systems where that is considered an error.)
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR usleep ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-None.
-.SH HISTORY
-4.3BSD, POSIX.1-2001.
-POSIX.1-2001 declares it obsolete, suggesting
-.BR nanosleep (2)
-instead.
-Removed in POSIX.1-2008.
-.PP
-On the original BSD implementation,
-and before glibc 2.2.2, the return type of this function is
-.IR void .
-The POSIX version returns
-.IR int ,
-and this is also the prototype used since glibc 2.2.2.
-.PP
-Only the
-.B EINVAL
-error return is documented by SUSv2 and POSIX.1-2001.
-.SH CAVEATS
-The interaction of this function with the
-.B SIGALRM
-signal, and with other timer functions such as
-.BR alarm (2),
-.BR sleep (3),
-.BR nanosleep (2),
-.BR setitimer (2),
-.BR timer_create (2),
-.BR timer_delete (2),
-.BR timer_getoverrun (2),
-.BR timer_gettime (2),
-.BR timer_settime (2),
-.BR ualarm (3)
-is unspecified.
-.SH SEE ALSO
-.BR alarm (2),
-.BR getitimer (2),
-.BR nanosleep (2),
-.BR select (2),
-.BR setitimer (2),
-.BR sleep (3),
-.BR ualarm (3),
-.BR useconds_t (3type),
-.BR time (7)
diff --git a/man3/ustpcpy.3 b/man3/ustpcpy.3
deleted file mode 100644
index beb850746..000000000
--- a/man3/ustpcpy.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/string_copying.7
diff --git a/man3/ustr2stp.3 b/man3/ustr2stp.3
deleted file mode 100644
index beb850746..000000000
--- a/man3/ustr2stp.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/string_copying.7
diff --git a/man3/utmpname.3 b/man3/utmpname.3
deleted file mode 100644
index 29c36b72a..000000000
--- a/man3/utmpname.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getutent.3
diff --git a/man3/utmpxname.3 b/man3/utmpxname.3
deleted file mode 100644
index 29c36b72a..000000000
--- a/man3/utmpxname.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/getutent.3
diff --git a/man3/va_arg.3 b/man3/va_arg.3
deleted file mode 100644
index c419248e8..000000000
--- a/man3/va_arg.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stdarg.3
diff --git a/man3/va_copy.3 b/man3/va_copy.3
deleted file mode 100644
index c419248e8..000000000
--- a/man3/va_copy.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stdarg.3
diff --git a/man3/va_end.3 b/man3/va_end.3
deleted file mode 100644
index c419248e8..000000000
--- a/man3/va_end.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stdarg.3
diff --git a/man3/va_start.3 b/man3/va_start.3
deleted file mode 100644
index c419248e8..000000000
--- a/man3/va_start.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/stdarg.3
diff --git a/man3/valloc.3 b/man3/valloc.3
deleted file mode 100644
index 791d4c801..000000000
--- a/man3/valloc.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/posix_memalign.3
diff --git a/man3/vasprintf.3 b/man3/vasprintf.3
deleted file mode 100644
index 5a8753a9c..000000000
--- a/man3/vasprintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/asprintf.3
diff --git a/man3/vdprintf.3 b/man3/vdprintf.3
deleted file mode 100644
index fa36f35d8..000000000
--- a/man3/vdprintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/dprintf.3
diff --git a/man3/verr.3 b/man3/verr.3
deleted file mode 100644
index 3ee2e497a..000000000
--- a/man3/verr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/err.3
diff --git a/man3/verrx.3 b/man3/verrx.3
deleted file mode 100644
index 3ee2e497a..000000000
--- a/man3/verrx.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/err.3
diff --git a/man3/versionsort.3 b/man3/versionsort.3
deleted file mode 100644
index 7e757c7a0..000000000
--- a/man3/versionsort.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/scandir.3
diff --git a/man3/vfprintf.3 b/man3/vfprintf.3
deleted file mode 100644
index 975530d90..000000000
--- a/man3/vfprintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/printf.3
diff --git a/man3/vfscanf.3 b/man3/vfscanf.3
deleted file mode 100644
index 9fd424bb2..000000000
--- a/man3/vfscanf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/scanf.3
diff --git a/man3/vfwprintf.3 b/man3/vfwprintf.3
deleted file mode 100644
index 56ec9685b..000000000
--- a/man3/vfwprintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/wprintf.3
diff --git a/man3/vlimit.3 b/man3/vlimit.3
deleted file mode 100644
index 58a817be8..000000000
--- a/man3/vlimit.3
+++ /dev/null
@@ -1,3 +0,0 @@
-.so man2/getrlimit.2
-.\" No new programs should use vlimit(3).
-.\" getrlimit(2) briefly discusses vlimit(3), so point the user there.
diff --git a/man3/vprintf.3 b/man3/vprintf.3
deleted file mode 100644
index 975530d90..000000000
--- a/man3/vprintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/printf.3
diff --git a/man3/vscanf.3 b/man3/vscanf.3
deleted file mode 100644
index 9fd424bb2..000000000
--- a/man3/vscanf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/scanf.3
diff --git a/man3/vsnprintf.3 b/man3/vsnprintf.3
deleted file mode 100644
index 975530d90..000000000
--- a/man3/vsnprintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/printf.3
diff --git a/man3/vsprintf.3 b/man3/vsprintf.3
deleted file mode 100644
index 975530d90..000000000
--- a/man3/vsprintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/printf.3
diff --git a/man3/vsscanf.3 b/man3/vsscanf.3
deleted file mode 100644
index 8f5ebc15e..000000000
--- a/man3/vsscanf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/sscanf.3
diff --git a/man3/vswprintf.3 b/man3/vswprintf.3
deleted file mode 100644
index 56ec9685b..000000000
--- a/man3/vswprintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/wprintf.3
diff --git a/man3/vsyslog.3 b/man3/vsyslog.3
deleted file mode 100644
index ec352b291..000000000
--- a/man3/vsyslog.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/syslog.3
diff --git a/man3/vtimes.3 b/man3/vtimes.3
deleted file mode 100644
index 4097ab77b..000000000
--- a/man3/vtimes.3
+++ /dev/null
@@ -1,3 +0,0 @@
-.so man2/getrusage.2
-.\" No new programs should use vtimes(3).
-.\" getrusage(2) briefly discusses vtimes(3), so point the user there.
diff --git a/man3/vwarn.3 b/man3/vwarn.3
deleted file mode 100644
index 3ee2e497a..000000000
--- a/man3/vwarn.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/err.3
diff --git a/man3/vwarnx.3 b/man3/vwarnx.3
deleted file mode 100644
index 3ee2e497a..000000000
--- a/man3/vwarnx.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/err.3
diff --git a/man3/vwprintf.3 b/man3/vwprintf.3
deleted file mode 100644
index 56ec9685b..000000000
--- a/man3/vwprintf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/wprintf.3
diff --git a/man3/warn.3 b/man3/warn.3
deleted file mode 100644
index 3ee2e497a..000000000
--- a/man3/warn.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/err.3
diff --git a/man3/warnx.3 b/man3/warnx.3
deleted file mode 100644
index 3ee2e497a..000000000
--- a/man3/warnx.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/err.3
diff --git a/man3/wcpcpy.3 b/man3/wcpcpy.3
deleted file mode 100644
index 36f02bbcd..000000000
--- a/man3/wcpcpy.3
+++ /dev/null
@@ -1,82 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\"
-.TH wcpcpy 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcpcpy \- copy a wide-character string, returning a pointer to its end
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *wcpcpy(wchar_t *restrict " dest \
-", const wchar_t *restrict " src );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR wcpcpy ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR wcpcpy ()
-function is the wide-character equivalent of the
-.BR stpcpy (3)
-function.
-It copies the wide-character string pointed to by
-.IR src ,
-including the terminating null wide character (L\[aq]\e0\[aq]),
-to the array pointed to by
-.IR dest .
-.PP
-The strings may not overlap.
-.PP
-The programmer must ensure that there
-is room for at least
-.I wcslen(src)+1
-wide characters at
-.IR dest .
-.SH RETURN VALUE
-.BR wcpcpy ()
-returns a pointer to the end of the wide-character string
-.IR dest ,
-that is, a pointer to the terminating null wide character.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcpcpy ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH SEE ALSO
-.BR strcpy (3),
-.BR wcscpy (3)
diff --git a/man3/wcpncpy.3 b/man3/wcpncpy.3
deleted file mode 100644
index 96c7b95af..000000000
--- a/man3/wcpncpy.3
+++ /dev/null
@@ -1,109 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\"
-.TH wcpncpy 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcpncpy \- copy a fixed-size string of wide characters,
-returning a pointer to its end
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *wcpncpy(wchar_t " dest "[restrict ." n ],
-.BI " const wchar_t " src "[restrict ." n ],
-.BI " size_t " n );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR wcpncpy ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR wcpncpy ()
-function is the wide-character equivalent
-of the
-.BR stpncpy (3)
-function.
-It copies at most
-.I n
-wide characters from the wide-character
-string pointed to by
-.IR src ,
-including the terminating null wide (L\[aq]\e0\[aq]),
-to the array pointed to by
-.IR dest .
-Exactly
-.I n
-wide characters are
-written at
-.IR dest .
-If the length
-.I wcslen(src)
-is smaller than
-.IR n ,
-the remaining wide characters in the array pointed to
-by
-.I dest
-are filled with L\[aq]\e0\[aq] characters.
-If the length
-.I wcslen(src)
-is greater than or equal
-to
-.IR n ,
-the string pointed to by
-.I dest
-will
-not be L\[aq]\e0\[aq] terminated.
-.PP
-The strings may not overlap.
-.PP
-The programmer must ensure that there is room for at least
-.I n
-wide
-characters at
-.IR dest .
-.SH RETURN VALUE
-.BR wcpncpy ()
-returns a pointer to the last wide character written, that is,
-.IR dest + n \-1.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcpncpy ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH SEE ALSO
-.BR stpncpy (3),
-.BR wcsncpy (3)
diff --git a/man3/wcrtomb.3 b/man3/wcrtomb.3
deleted file mode 100644
index 2f1df9a02..000000000
--- a/man3/wcrtomb.3
+++ /dev/null
@@ -1,147 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wcrtomb 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcrtomb \- convert a wide character to a multibyte sequence
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "size_t wcrtomb(char *restrict " s ", wchar_t " wc \
-", mbstate_t *restrict " ps );
-.fi
-.SH DESCRIPTION
-The main case for this function is when
-.I s
-is
-not NULL and
-.I wc
-is not a null wide character (L\[aq]\e0\[aq]).
-In this case, the
-.BR wcrtomb ()
-function
-converts the wide character
-.I wc
-to its multibyte representation and stores it
-at the beginning of the character
-array pointed to by
-.IR s .
-It updates the shift state
-.IR *ps ,
-and
-returns the length of said multibyte representation,
-that is, the number of bytes
-written at
-.IR s .
-.PP
-A different case is when
-.I s
-is not NULL,
-but
-.I wc
-is a null wide character (L\[aq]\e0\[aq]).
-In this case, the
-.BR wcrtomb ()
-function stores at
-the character array pointed to by
-.I s
-the shift sequence needed to
-bring
-.I *ps
-back to the initial state,
-followed by a \[aq]\e0\[aq] byte.
-It updates the shift state
-.I *ps
-(i.e., brings
-it into the initial state),
-and returns the length of the shift sequence plus
-one, that is, the number of bytes written at
-.IR s .
-.PP
-A third case is when
-.I s
-is NULL.
-In this case,
-.I wc
-is ignored,
-and the function effectively returns
-.PP
-.in +4n
-.EX
-wcrtomb(buf, L\[aq]\e0\[aq], ps)
-.EE
-.in
-.PP
-where
-.I buf
-is an internal anonymous buffer.
-.PP
-In all of the above cases, if
-.I ps
-is NULL, a static anonymous
-state known only to the
-.BR wcrtomb ()
-function is used instead.
-.SH RETURN VALUE
-The
-.BR wcrtomb ()
-function returns the number of
-bytes that have been or would
-have been written to the byte array at
-.IR s .
-If
-.I wc
-can not be
-represented as a multibyte sequence (according to the current locale),
-.I (size_t)\ \-1
-is returned, and
-.I errno
-set to
-.BR EILSEQ .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcrtomb ()
-T} Thread safety MT-Unsafe race:wcrtomb/!ps
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR wcrtomb ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.PP
-Passing NULL as
-.I ps
-is not multithread safe.
-.SH SEE ALSO
-.BR mbsinit (3),
-.BR wcsrtombs (3)
diff --git a/man3/wcscasecmp.3 b/man3/wcscasecmp.3
deleted file mode 100644
index 7f4812b4a..000000000
--- a/man3/wcscasecmp.3
+++ /dev/null
@@ -1,102 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\"
-.TH wcscasecmp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcscasecmp \- compare two wide-character strings, ignoring case
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "int wcscasecmp(const wchar_t *" s1 ", const wchar_t *" s2 );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR wcscasecmp ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR wcscasecmp ()
-function is the wide-character equivalent of the
-.BR strcasecmp (3)
-function.
-It compares the wide-character string pointed to
-by
-.I s1
-and the wide-character string pointed to by
-.IR s2 ,
-ignoring
-case differences
-.RB ( towupper (3),
-.BR towlower (3)).
-.SH RETURN VALUE
-The
-.BR wcscasecmp ()
-function returns zero if the wide-character strings at
-.I s1
-and
-.I s2
-are equal except for case distinctions.
-It returns a
-positive integer if
-.I s1
-is greater than
-.IR s2 ,
-ignoring case.
-It
-returns a negative integer if
-.I s1
-is smaller
-than
-.IR s2 ,
-ignoring case.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcscasecmp ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-.SH NOTES
-The behavior of
-.BR wcscasecmp ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR strcasecmp (3),
-.BR wcscmp (3)
diff --git a/man3/wcscat.3 b/man3/wcscat.3
deleted file mode 100644
index 597b72a1a..000000000
--- a/man3/wcscat.3
+++ /dev/null
@@ -1,73 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wcscat 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcscat \- concatenate two wide-character strings
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *wcscat(wchar_t *restrict " dest \
-", const wchar_t *restrict " src );
-.fi
-.SH DESCRIPTION
-The
-.BR wcscat ()
-function is the wide-character equivalent
-of the
-.BR strcat (3)
-function.
-It copies the wide-character string pointed to by
-.IR src ,
-including the terminating null wide character (L\[aq]\e0\[aq]),
-to the end of the wide-character string pointed to by
-.IR dest .
-.PP
-The strings may not overlap.
-.PP
-The programmer must ensure that there is room for at least
-.IR wcslen(dest) + wcslen(src) +1
-wide characters at
-.IR dest .
-.SH RETURN VALUE
-.BR wcscat ()
-returns
-.IR dest .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcscat ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR strcat (3),
-.BR wcpcpy (3),
-.BR wcscpy (3),
-.BR wcsncat (3)
diff --git a/man3/wcschr.3 b/man3/wcschr.3
deleted file mode 100644
index da39a356d..000000000
--- a/man3/wcschr.3
+++ /dev/null
@@ -1,72 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wcschr 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcschr \- search a wide character in a wide-character string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *wcschr(const wchar_t *" wcs ", wchar_t " wc );
-.fi
-.SH DESCRIPTION
-The
-.BR wcschr ()
-function is the wide-character equivalent
-of the
-.BR strchr (3)
-function.
-It searches the first occurrence of
-.I wc
-in the wide-character
-string pointed to by
-.IR wcs .
-.SH RETURN VALUE
-The
-.BR wcschr ()
-function returns a pointer to the first occurrence of
-.I wc
-in the wide-character string pointed to by
-.IR wcs ,
-or NULL if
-.I wc
-does not occur in the string.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcschr ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR strchr (3),
-.BR wcspbrk (3),
-.BR wcsrchr (3),
-.BR wcsstr (3),
-.BR wmemchr (3)
diff --git a/man3/wcscmp.3 b/man3/wcscmp.3
deleted file mode 100644
index 7530fae45..000000000
--- a/man3/wcscmp.3
+++ /dev/null
@@ -1,82 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wcscmp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcscmp \- compare two wide-character strings
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "int wcscmp(const wchar_t *" s1 ", const wchar_t *" s2 );
-.fi
-.SH DESCRIPTION
-The
-.BR wcscmp ()
-function is the wide-character equivalent
-of the
-.BR strcmp (3)
-function.
-It compares the wide-character string pointed to by
-.I s1
-and the
-wide-character string pointed to by
-.IR s2 .
-.SH RETURN VALUE
-The
-.BR wcscmp ()
-function returns zero if the wide-character strings at
-.I s1
-and
-.I s2
-are equal.
-It returns an integer greater than zero if
-at the first differing position
-.IR i ,
-the corresponding wide-character
-.I s1[i]
-is greater than
-.IR s2[i] .
-It returns an integer less than zero if
-at the first differing position
-.IR i ,
-the corresponding wide-character
-.I s1[i]
-is less than
-.IR s2[i] .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcscmp ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR strcmp (3),
-.BR wcscasecmp (3),
-.BR wmemcmp (3)
diff --git a/man3/wcscpy.3 b/man3/wcscpy.3
deleted file mode 100644
index 9cc5f7a28..000000000
--- a/man3/wcscpy.3
+++ /dev/null
@@ -1,75 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wcscpy 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcscpy \- copy a wide-character string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *wcscpy(wchar_t *restrict " dest \
-", const wchar_t *restrict " src );
-.fi
-.SH DESCRIPTION
-The
-.BR wcscpy ()
-function is the wide-character equivalent
-of the
-.BR strcpy (3)
-function.
-It copies the wide-character string pointed to by
-.IR src ,
-including the terminating null wide character (L\[aq]\e0\[aq]),
-to the array pointed to by
-.IR dest .
-.PP
-The strings may not overlap.
-.PP
-The programmer must ensure that there is
-room for at least
-.I wcslen(src)+1
-wide characters at
-.IR dest .
-.SH RETURN VALUE
-.BR wcscpy ()
-returns
-.IR dest .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcscpy ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR strcpy (3),
-.BR wcpcpy (3),
-.BR wcscat (3),
-.BR wcsdup (3),
-.BR wmemcpy (3)
diff --git a/man3/wcscspn.3 b/man3/wcscspn.3
deleted file mode 100644
index e11833673..000000000
--- a/man3/wcscspn.3
+++ /dev/null
@@ -1,84 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wcscspn 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcscspn \- search a wide-character string for any of a set of wide characters
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "size_t wcscspn(const wchar_t *" wcs ", const wchar_t *" reject );
-.fi
-.SH DESCRIPTION
-The
-.BR wcscspn ()
-function is the wide-character equivalent
-of the
-.BR strcspn (3)
-function.
-It determines the length of the longest initial segment of
-.I wcs
-which consists entirely of wide-characters not listed in
-.IR reject .
-In
-other words, it searches for the first occurrence in the wide-character
-string
-.I wcs
-of any of the characters in the wide-character string
-.IR reject .
-.SH RETURN VALUE
-The
-.BR wcscspn ()
-function returns the number of
-wide characters in the longest
-initial segment of
-.I wcs
-which consists entirely of wide-characters not
-listed in
-.IR reject .
-In other words, it returns the position of the first
-occurrence in the wide-character string
-.I wcs
-of any of the characters in
-the wide-character string
-.IR reject ,
-or
-.I wcslen(wcs)
-if there is none.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcscspn ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR strcspn (3),
-.BR wcspbrk (3),
-.BR wcsspn (3)
diff --git a/man3/wcsdup.3 b/man3/wcsdup.3
deleted file mode 100644
index fc259fbd0..000000000
--- a/man3/wcsdup.3
+++ /dev/null
@@ -1,86 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\"
-.TH wcsdup 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcsdup \- duplicate a wide-character string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *wcsdup(const wchar_t *" s );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR wcsdup ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR wcsdup ()
-function is the wide-character equivalent
-of the
-.BR strdup (3)
-function.
-It allocates and returns a new wide-character string whose initial
-contents is a duplicate of the wide-character string pointed to by
-.IR s .
-.PP
-Memory for the new wide-character string is
-obtained with
-.BR malloc (3),
-and should be freed with
-.BR free (3).
-.SH RETURN VALUE
-On success,
-.BR wcsdup ()
-returns a pointer to the new wide-character string.
-On error, it returns NULL, with
-.I errno
-set to indicate the error.
-.SH ERRORS
-.TP
-.B ENOMEM
-Insufficient memory available to allocate duplicate string.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcsdup ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-libc5, glibc 2.0.
-.SH SEE ALSO
-.BR strdup (3),
-.BR wcscpy (3)
diff --git a/man3/wcslen.3 b/man3/wcslen.3
deleted file mode 100644
index 477053a95..000000000
--- a/man3/wcslen.3
+++ /dev/null
@@ -1,68 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wcslen 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcslen \- determine the length of a wide-character string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "size_t wcslen(const wchar_t *" s );
-.fi
-.SH DESCRIPTION
-The
-.BR wcslen ()
-function is the wide-character equivalent
-of the
-.BR strlen (3)
-function.
-It determines the length of the wide-character string pointed to
-by
-.IR s ,
-excluding the terminating null wide character (L\[aq]\e0\[aq]).
-.SH RETURN VALUE
-The
-.BR wcslen ()
-function returns the
-number of wide characters in
-.IR s .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcslen ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-In cases where the input buffer may not contain
-a terminating null wide character,
-.BR wcsnlen (3)
-should be used instead.
-.SH SEE ALSO
-.BR strlen (3)
diff --git a/man3/wcsncasecmp.3 b/man3/wcsncasecmp.3
deleted file mode 100644
index f474fb09d..000000000
--- a/man3/wcsncasecmp.3
+++ /dev/null
@@ -1,108 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\"
-.TH wcsncasecmp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcsncasecmp \- compare two fixed-size wide-character strings, ignoring case
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "int wcsncasecmp(const wchar_t " s1 [. n "], const wchar_t " s2 [. n "], s\
-ize_t " n );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR wcsncasecmp ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR wcsncasecmp ()
-function is the wide-character equivalent of the
-.BR strncasecmp (3)
-function.
-It compares the wide-character string pointed to
-by
-.I s1
-and the wide-character string
-pointed to by
-.IR s2 ,
-but at most
-.I n
-wide characters from each string, ignoring case differences
-.RB ( towupper (3),
-.BR towlower (3)).
-.SH RETURN VALUE
-The
-.BR wcsncasecmp ()
-function returns zero
-if the wide-character strings at
-.I s1
-and
-.IR s2 ,
-truncated to at most length
-.IR n ,
-are equal except
-for case distinctions.
-It returns a positive integer if truncated
-.I s1
-is
-greater than truncated
-.IR s2 ,
-ignoring case.
-It returns a negative integer
-if truncated
-.I s1
-is smaller than truncated
-.IR s2 ,
-ignoring case.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcsncasecmp ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-.SH NOTES
-The behavior of
-.BR wcsncasecmp ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR strncasecmp (3),
-.BR wcsncmp (3)
diff --git a/man3/wcsncat.3 b/man3/wcsncat.3
deleted file mode 100644
index f7bae0881..000000000
--- a/man3/wcsncat.3
+++ /dev/null
@@ -1,75 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wcsncat 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcsncat \- concatenate two wide-character strings
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *wcsncat(wchar_t " dest "[restrict ." n ],
-.BI " const wchar_t " src "[restrict ." n ],
-.BI " size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR wcsncat ()
-function is the wide-character equivalent of the
-.BR strncat (3)
-function.
-It copies at most
-.I n
-wide characters from the wide-character
-string pointed to by
-.I src
-to the end of the wide-character string pointed
-to by
-.IR dest ,
-and adds a terminating null wide character (L\[aq]\e0\[aq]).
-.PP
-The strings may not overlap.
-.PP
-The programmer must ensure that there is room for at least
-.IR wcslen(dest) + n +1
-wide characters at
-.IR dest .
-.SH RETURN VALUE
-.BR wcsncat ()
-returns
-.IR dest .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcsncat ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR strncat (3),
-.BR wcscat (3)
diff --git a/man3/wcsncmp.3 b/man3/wcsncmp.3
deleted file mode 100644
index f3dbc1ede..000000000
--- a/man3/wcsncmp.3
+++ /dev/null
@@ -1,96 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wcsncmp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcsncmp \- compare two fixed-size wide-character strings
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "int wcsncmp(const wchar_t " s1 [. n "], const wchar_t " s2 [. n "], \
-size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR wcsncmp ()
-function is the wide-character equivalent of the
-.BR strncmp (3)
-function.
-It compares the wide-character string pointed to by
-.I s1
-and the
-wide-character string pointed to by
-.IR s2 ,
-but at most
-.I n
-wide
-characters from each string.
-In each string, the comparison extends only up
-to the first occurrence of a null wide character (L\[aq]\e0\[aq]), if any.
-.SH RETURN VALUE
-The
-.BR wcsncmp ()
-function returns zero if the wide-character strings at
-.I s1
-and
-.IR s2 ,
-truncated to at most length
-.IR n ,
-are equal.
-It returns an integer greater than zero if at the first differing position
-.I i
-.RI ( i
-<
-.IR n ),
-the corresponding wide-character
-.I s1[i]
-is
-greater than
-.IR s2[i] .
-It returns an integer less than zero if at the first
-differing position
-.I i
-.RI ( i
-<
-.IR n ),
-the corresponding
-wide-character
-.I s1[i]
-is less than
-.IR s2[i] .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcsncmp ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR strncmp (3),
-.BR wcsncasecmp (3)
diff --git a/man3/wcsncpy.3 b/man3/wcsncpy.3
deleted file mode 100644
index 8f9b07db1..000000000
--- a/man3/wcsncpy.3
+++ /dev/null
@@ -1,92 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wcsncpy 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcsncpy \- copy a fixed-size string of wide characters
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *wcsncpy(wchar_t " dest "[restrict ." n ],
-.BI " const wchar_t " src "[restrict ." n ],
-.BI " size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR wcsncpy ()
-function is the wide-character equivalent of the
-.BR strncpy (3)
-function.
-It copies at most
-.I n
-wide characters from the wide-character
-string pointed to by
-.IR src ,
-including the terminating null wide character (L\[aq]\e0\[aq]),
-to the array pointed to by
-.IR dest .
-Exactly
-.I n
-wide characters are
-written at
-.IR dest .
-If the length \fIwcslen(src)\fP is smaller than
-.IR n ,
-the remaining wide characters in the array
-pointed to by
-.I dest
-are filled
-with null wide characters.
-If the length \fIwcslen(src)\fP is greater than or equal
-to
-.IR n ,
-the string pointed to by
-.I dest
-will not be terminated by a null wide character.
-.PP
-The strings may not overlap.
-.PP
-The programmer must ensure that there is room for at least
-.I n
-wide
-characters at
-.IR dest .
-.SH RETURN VALUE
-.BR wcsncpy ()
-returns
-.IR dest .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcsncpy ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR strncpy (3)
diff --git a/man3/wcsnlen.3 b/man3/wcsnlen.3
deleted file mode 100644
index 64a7c4d47..000000000
--- a/man3/wcsnlen.3
+++ /dev/null
@@ -1,94 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\"
-.TH wcsnlen 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcsnlen \- determine the length of a fixed-size wide-character string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "size_t wcsnlen(const wchar_t " s [. maxlen "], size_t " maxlen );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR wcsnlen ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR wcsnlen ()
-function is the wide-character equivalent
-of the
-.BR strnlen (3)
-function.
-It returns the number of wide-characters in the string pointed to by
-.IR s ,
-not including the terminating null wide character (L\[aq]\e0\[aq]),
-but at most
-.I maxlen
-wide characters (note: this parameter is not a byte count).
-In doing this,
-.BR wcsnlen ()
-looks at only the first
-.I maxlen
-wide characters at
-.I s
-and never beyond
-.IR s[maxlen\-1] .
-.SH RETURN VALUE
-The
-.BR wcsnlen ()
-function returns
-.IR wcslen(s) ,
-if that is less than
-.IR maxlen ,
-or
-.I maxlen
-if there is no null wide character among the
-first
-.I maxlen
-wide characters pointed to by
-.IR s .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcsnlen ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-glibc 2.1.
-.SH SEE ALSO
-.BR strnlen (3),
-.BR wcslen (3)
diff --git a/man3/wcsnrtombs.3 b/man3/wcsnrtombs.3
deleted file mode 100644
index 2b9d38781..000000000
--- a/man3/wcsnrtombs.3
+++ /dev/null
@@ -1,190 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\"
-.TH wcsnrtombs 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcsnrtombs \- convert a wide-character string to a multibyte string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "size_t wcsnrtombs(char " dest "[restrict ." len "], \
-const wchar_t **restrict " src ,
-.BI " size_t " nwc ", size_t " len ", \
-mbstate_t *restrict " ps );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR wcsnrtombs ():
-.nf
- Since glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _GNU_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR wcsnrtombs ()
-function is like the
-.BR wcsrtombs (3)
-function,
-except that the number of wide characters to be converted,
-starting at
-.IR *src ,
-is limited to
-.IR nwc .
-.PP
-If
-.I dest
-is not NULL,
-the
-.BR wcsnrtombs ()
-function converts
-at most
-.I nwc
-wide characters from
-the wide-character string
-.I *src
-to a multibyte string starting at
-.IR dest .
-At most
-.I len
-bytes are written to
-.IR dest .
-The shift state
-.I *ps
-is updated.
-The conversion is effectively performed by repeatedly
-calling
-.IR "wcrtomb(dest, *src, ps)" ,
-as long as this call succeeds,
-and then incrementing
-.I dest
-by the
-number of bytes written and
-.I *src
-by one.
-The conversion can stop for three reasons:
-.IP \[bu] 3
-A wide character has been encountered that can not be represented as a
-multibyte sequence (according to the current locale).
-In this case,
-.I *src
-is left pointing to the invalid wide character,
-.I (size_t)\ \-1
-is returned,
-and
-.I errno
-is set to
-.BR EILSEQ .
-.IP \[bu]
-.I nwc
-wide characters have been
-converted without encountering a null wide character (L\[aq]\e0\[aq]),
-or the length limit forces a stop.
-In this case,
-.I *src
-is left pointing
-to the next wide character to be converted, and the number of bytes written
-to
-.I dest
-is returned.
-.IP \[bu]
-The wide-character string has been completely converted, including the
-terminating null wide character (which has the side effect of bringing back
-.I *ps
-to the initial state).
-In this case,
-.I *src
-is set to NULL, and the number
-of bytes written to
-.IR dest ,
-excluding the terminating null byte (\[aq]\e0\[aq]), is
-returned.
-.PP
-If
-.I dest
-is NULL,
-.I len
-is ignored,
-and the conversion proceeds as above,
-except that the converted bytes are not written out to memory, and that
-no destination length limit exists.
-.PP
-In both of the above cases,
-if
-.I ps
-is NULL, a static anonymous
-state known only to the
-.BR wcsnrtombs ()
-function is used instead.
-.PP
-The programmer must ensure that there is room for at least
-.I len
-bytes
-at
-.IR dest .
-.SH RETURN VALUE
-The
-.BR wcsnrtombs ()
-function returns
-the number of bytes that make up the
-converted part of multibyte sequence,
-not including the terminating null byte.
-If a wide character was encountered which
-could not be converted,
-.I (size_t)\ \-1
-is returned, and
-.I errno
-set to
-.BR EILSEQ .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR wcsnrtombs ()
-T} Thread safety T{
-MT-Unsafe race:wcsnrtombs/!ps
-T}
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH NOTES
-The behavior of
-.BR wcsnrtombs ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.PP
-Passing NULL as
-.I ps
-is not multithread safe.
-.SH SEE ALSO
-.BR iconv (3),
-.BR mbsinit (3),
-.BR wcsrtombs (3)
diff --git a/man3/wcspbrk.3 b/man3/wcspbrk.3
deleted file mode 100644
index 6d557bd1b..000000000
--- a/man3/wcspbrk.3
+++ /dev/null
@@ -1,72 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wcspbrk 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcspbrk \- search a wide-character string for any of a set of wide characters
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *wcspbrk(const wchar_t *" wcs ", const wchar_t *" accept );
-.fi
-.SH DESCRIPTION
-The
-.BR wcspbrk ()
-function is the wide-character equivalent
-of the
-.BR strpbrk (3)
-function.
-It searches for the first occurrence in the wide-character
-string pointed to by
-.I wcs
-of any of the
-characters in the wide-character
-string pointed to by
-.IR accept .
-.SH RETURN VALUE
-The
-.BR wcspbrk ()
-function returns a pointer to the first occurrence in
-.I wcs
-of any of the characters listed in
-.IR accept .
-If
-.I wcs
-contains none of these characters, NULL is returned.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcspbrk ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR strpbrk (3),
-.BR wcschr (3),
-.BR wcscspn (3)
diff --git a/man3/wcsrchr.3 b/man3/wcsrchr.3
deleted file mode 100644
index ec1973687..000000000
--- a/man3/wcsrchr.3
+++ /dev/null
@@ -1,69 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wcsrchr 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcsrchr \- search a wide character in a wide-character string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *wcsrchr(const wchar_t *" wcs ", wchar_t " wc );
-.fi
-.SH DESCRIPTION
-The
-.BR wcsrchr ()
-function is the wide-character equivalent
-of the
-.BR strrchr (3)
-function.
-It searches the last occurrence of
-.I wc
-in the wide-character
-string pointed to by
-.IR wcs .
-.SH RETURN VALUE
-The
-.BR wcsrchr ()
-function returns a pointer to the last occurrence of
-.I wc
-in the wide-character string pointed to by
-.IR wcs ,
-or NULL if
-.I wc
-does not occur in the string.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcsrchr ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR strrchr (3),
-.BR wcschr (3)
diff --git a/man3/wcsrtombs.3 b/man3/wcsrtombs.3
deleted file mode 100644
index df094abc2..000000000
--- a/man3/wcsrtombs.3
+++ /dev/null
@@ -1,165 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wcsrtombs 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcsrtombs \- convert a wide-character string to a multibyte string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "size_t wcsrtombs(char " dest "[restrict ." len "], \
-const wchar_t **restrict " src ,
-.BI " size_t " len ", mbstate_t *restrict " ps );
-.fi
-.SH DESCRIPTION
-If
-.I dest
-is not NULL,
-the
-.BR wcsrtombs ()
-function converts
-the wide-character string
-.I *src
-to a multibyte string starting at
-.IR dest .
-At most
-.I len
-bytes are written to
-.IR dest .
-The shift state
-.I *ps
-is updated.
-The conversion is effectively performed by repeatedly
-calling
-.IR "wcrtomb(dest, *src, ps)" ,
-as long as this call succeeds,
-and then incrementing
-.I dest
-by the
-number of bytes written and
-.I *src
-by one.
-The conversion can stop for three reasons:
-.IP \[bu] 3
-A wide character has been encountered that can not be represented as a
-multibyte sequence (according to the current locale).
-In this case,
-.I *src
-is left pointing to the invalid wide character,
-.I (size_t)\ \-1
-is returned,
-and
-.I errno
-is set to
-.BR EILSEQ .
-.IP \[bu]
-The length limit forces a stop.
-In this case,
-.I *src
-is left pointing
-to the next wide character to be converted,
-and the number of bytes written to
-.I dest
-is returned.
-.IP \[bu]
-The wide-character string has been completely converted, including the
-terminating null wide character (L\[aq]\e0\[aq]),
-which has the side effect of bringing back
-.I *ps
-to the initial state.
-In this case,
-.I *src
-is set to NULL, and the number
-of bytes written to
-.IR dest ,
-excluding the terminating null byte (\[aq]\e0\[aq]),
-is returned.
-.PP
-If
-.I dest
-is NULL,
-.I len
-is ignored,
-and the conversion proceeds as above, except that the converted bytes
-are not written out to memory, and that
-no length limit exists.
-.PP
-In both of the above cases,
-if
-.I ps
-is NULL, a static anonymous
-state known only to the
-.BR wcsrtombs ()
-function is used instead.
-.PP
-The programmer must ensure that there is room for at least
-.I len
-bytes
-at
-.IR dest .
-.SH RETURN VALUE
-The
-.BR wcsrtombs ()
-function returns
-the number of bytes that make up the
-converted part of multibyte sequence,
-not including the terminating null byte.
-If a wide character was encountered
-which could not be converted,
-.I (size_t)\ \-1
-is returned, and
-.I errno
-set to
-.BR EILSEQ .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR wcsrtombs ()
-T} Thread safety T{
-MT-Unsafe race:wcsrtombs/!ps
-T}
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR wcsrtombs ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.PP
-Passing NULL as
-.I ps
-is not multithread safe.
-.SH SEE ALSO
-.BR iconv (3),
-.BR mbsinit (3),
-.BR wcrtomb (3),
-.BR wcsnrtombs (3),
-.BR wcstombs (3)
diff --git a/man3/wcsspn.3 b/man3/wcsspn.3
deleted file mode 100644
index 8c62063d0..000000000
--- a/man3/wcsspn.3
+++ /dev/null
@@ -1,81 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wcsspn 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcsspn \- get length of a prefix wide-character substring
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "size_t wcsspn(const wchar_t *" wcs ", const wchar_t *" accept );
-.fi
-.SH DESCRIPTION
-The
-.BR wcsspn ()
-function is the wide-character equivalent of the
-.BR strspn (3)
-function.
-It determines the length of the longest initial segment of
-.I wcs
-which consists entirely of wide-characters listed in
-.IR accept .
-In other
-words, it searches for the first occurrence in the wide-character string
-.I wcs
-of a wide-character not contained in the wide-character string
-.IR accept .
-.SH RETURN VALUE
-The
-.BR wcsspn ()
-function returns the number of
-wide characters in the longest
-initial segment of
-.I wcs
-which consists entirely of wide-characters listed
-in
-.IR accept .
-In other words, it returns the position of the first
-occurrence in the wide-character string
-.I wcs
-of a wide-character not
-contained in the wide-character string
-.IR accept ,
-or
-.I wcslen(wcs)
-if there is none.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcsspn ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR strspn (3),
-.BR wcscspn (3)
diff --git a/man3/wcsstr.3 b/man3/wcsstr.3
deleted file mode 100644
index 175395a97..000000000
--- a/man3/wcsstr.3
+++ /dev/null
@@ -1,78 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wcsstr 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcsstr \- locate a substring in a wide-character string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *wcsstr(const wchar_t *" haystack ", const wchar_t *" needle );
-.fi
-.SH DESCRIPTION
-The
-.BR wcsstr ()
-function is the wide-character equivalent of the
-.BR strstr (3)
-function.
-It searches for the first occurrence of the wide-character string
-.I needle
-(without its terminating null wide character (L\[aq]\e0\[aq]))
-as a substring in the wide-character string
-.IR haystack .
-.SH RETURN VALUE
-The
-.BR wcsstr ()
-function returns a pointer to the first occurrence of
-.I needle
-in
-.IR haystack .
-It returns NULL if
-.I needle
-does not occur
-as a substring in
-.IR haystack .
-.PP
-Note the special case:
-If
-.I needle
-is the empty wide-character string,
-the return value is always
-.I haystack
-itself.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcsstr ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR strstr (3),
-.BR wcschr (3)
diff --git a/man3/wcstoimax.3 b/man3/wcstoimax.3
deleted file mode 100644
index 566dcdb76..000000000
--- a/man3/wcstoimax.3
+++ /dev/null
@@ -1,61 +0,0 @@
-'\" t
-.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH wcstoimax 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcstoimax, wcstoumax \- convert wide-character string to integer
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stddef.h>
-.B #include <inttypes.h>
-.PP
-.BI "intmax_t wcstoimax(const wchar_t *restrict " nptr ,
-.BI " wchar_t **restrict " endptr ", int " base );
-.BI "uintmax_t wcstoumax(const wchar_t *restrict " nptr ,
-.BI " wchar_t **restrict " endptr ", int " base );
-.fi
-.SH DESCRIPTION
-These functions are just like
-.BR wcstol (3)
-and
-.BR wcstoul (3),
-except that they return a value of type
-.I intmax_t
-and
-.IR uintmax_t ,
-respectively.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcstoimax (),
-.BR wcstoumax ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR imaxabs (3),
-.BR imaxdiv (3),
-.BR strtoimax (3),
-.BR strtoumax (3),
-.\" FIXME . the pages referred to by the following xrefs are not yet written
-.BR wcstol (3),
-.BR wcstoul (3)
diff --git a/man3/wcstok.3 b/man3/wcstok.3
deleted file mode 100644
index 4cbcc3170..000000000
--- a/man3/wcstok.3
+++ /dev/null
@@ -1,120 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wcstok 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcstok \- split wide-character string into tokens
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *wcstok(wchar_t *restrict " wcs \
-", const wchar_t *restrict " delim ,
-.BI " wchar_t **restrict " ptr );
-.fi
-.SH DESCRIPTION
-The
-.BR wcstok ()
-function is the wide-character equivalent of the
-.BR strtok (3)
-function,
-with an added argument to make it multithread-safe.
-It can be used
-to split a wide-character string
-.I wcs
-into tokens, where a token is
-defined as a substring not containing any wide-characters from
-.IR delim .
-.PP
-The search starts at
-.IR wcs ,
-if
-.I wcs
-is not NULL,
-or at
-.IR *ptr ,
-if
-.I wcs
-is NULL.
-First, any delimiter wide-characters are skipped, that is, the
-pointer is advanced beyond any wide-characters which occur in
-.IR delim .
-If the end of the wide-character string is now
-reached,
-.BR wcstok ()
-returns NULL, to indicate that no tokens
-were found, and stores an appropriate value in
-.IR *ptr ,
-so that subsequent calls to
-.BR wcstok ()
-will continue to return NULL.
-Otherwise, the
-.BR wcstok ()
-function recognizes the beginning of a token
-and returns a pointer to it, but before doing that, it zero-terminates the
-token by replacing the next wide-character which occurs in
-.I delim
-with
-a null wide character (L\[aq]\e0\[aq]),
-and it updates
-.I *ptr
-so that subsequent calls will
-continue searching after the end of recognized token.
-.SH RETURN VALUE
-The
-.BR wcstok ()
-function returns a pointer to the next token,
-or NULL if no further token was found.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcstok ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The original
-.I wcs
-wide-character string is destructively modified during
-the operation.
-.SH EXAMPLES
-The following code loops over the tokens contained in a wide-character string.
-.PP
-.EX
-wchar_t *wcs = ...;
-wchar_t *token;
-wchar_t *state;
-for (token = wcstok(wcs, L" \et\en", &state);
- token != NULL;
- token = wcstok(NULL, L" \et\en", &state)) {
- ...
-}
-.EE
-.SH SEE ALSO
-.BR strtok (3),
-.BR wcschr (3)
diff --git a/man3/wcstombs.3 b/man3/wcstombs.3
deleted file mode 100644
index 39381005a..000000000
--- a/man3/wcstombs.3
+++ /dev/null
@@ -1,128 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wcstombs 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcstombs \- convert a wide-character string to a multibyte string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "size_t wcstombs(char " dest "[restrict ." n "], \
-const wchar_t *restrict " src ,
-.BI " size_t " n );
-.fi
-.SH DESCRIPTION
-If
-.I dest
-is not NULL, the
-.BR wcstombs ()
-function converts
-the wide-character string
-.I src
-to a multibyte string starting at
-.IR dest .
-At most
-.I n
-bytes are written to
-.IR dest .
-The sequence of characters placed in
-.I dest
-begins in the initial shift state.
-The conversion can stop for three reasons:
-.IP \[bu] 3
-A wide character has been encountered that can not be represented as a
-multibyte sequence (according to the current locale).
-In this case,
-.I (size_t)\ \-1
-is returned.
-.IP \[bu]
-The length limit forces a stop.
-In this case, the number of bytes written to
-.I dest
-is returned, but the shift state at this point is lost.
-.IP \[bu]
-The wide-character string has been completely converted, including the
-terminating null wide character (L\[aq]\e0\[aq]).
-In this case, the conversion ends in the initial shift state.
-The number of bytes written to
-.IR dest ,
-excluding the terminating null byte (\[aq]\e0\[aq]), is returned.
-.PP
-The programmer must ensure that there is room for at least
-.I n
-bytes
-at
-.IR dest .
-.PP
-If
-.I dest
-is NULL,
-.I n
-is ignored, and the conversion proceeds as
-above, except that the converted bytes are not written out to memory,
-and no length limit exists.
-.PP
-In order to avoid the case 2 above, the programmer should make sure
-.I n
-is greater than or equal to
-.IR "wcstombs(NULL,src,0)+1" .
-.SH RETURN VALUE
-The
-.BR wcstombs ()
-function returns the number of bytes that make up the
-converted part of a multibyte sequence,
-not including the terminating null byte.
-If a wide character was encountered which could not be
-converted,
-.I (size_t)\ \-1
-is returned.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcstombs ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The function
-.BR wcsrtombs (3)
-provides a better interface to the same functionality.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR wcstombs ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR mblen (3),
-.BR mbstowcs (3),
-.BR mbtowc (3),
-.BR wcsrtombs (3),
-.BR wctomb (3)
diff --git a/man3/wcstoumax.3 b/man3/wcstoumax.3
deleted file mode 100644
index f3aa5d2a0..000000000
--- a/man3/wcstoumax.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/wcstoimax.3
diff --git a/man3/wcswidth.3 b/man3/wcswidth.3
deleted file mode 100644
index 4e9b19062..000000000
--- a/man3/wcswidth.3
+++ /dev/null
@@ -1,76 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\"
-.TH wcswidth 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcswidth \- determine columns needed for a fixed-size wide-character string
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _XOPEN_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <wchar.h>
-.PP
-.BI "int wcswidth(const wchar_t *" s ", size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR wcswidth ()
-function returns the
-number of columns needed to represent
-the wide-character string pointed to by
-.IR s ,
-but at most
-.I n
-wide
-characters.
-If a nonprintable wide character occurs among these characters,
-\-1 is returned.
-.SH RETURN VALUE
-The
-.BR wcswidth ()
-function
-returns the number of column positions for the
-wide-character string
-.IR s ,
-truncated to at most length
-.IR n .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcswidth ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-The behavior of
-.BR wcswidth ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR iswprint (3),
-.BR wcwidth (3)
diff --git a/man3/wctob.3 b/man3/wctob.3
deleted file mode 100644
index 23bfd222a..000000000
--- a/man3/wctob.3
+++ /dev/null
@@ -1,89 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wctob 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wctob \- try to represent a wide character as a single byte
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "int wctob(wint_t " c );
-.fi
-.SH DESCRIPTION
-The
-.BR wctob ()
-function tests whether
-the multibyte representation of the
-wide character
-.IR c ,
-starting in the initial state, consists of a single
-byte.
-If so, it is returned as an
-.IR "unsigned char" .
-.PP
-Never use this function.
-It cannot help you in writing internationalized
-programs.
-Internationalized programs must never distinguish single-byte and
-multibyte characters.
-.SH RETURN VALUE
-The
-.BR wctob ()
-function returns the single-byte representation of
-.IR c ,
-if it exists, or
-.B EOF
-otherwise.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wctob ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR wctob ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.PP
-This function should never be used.
-Internationalized programs must never
-distinguish single-byte and multibyte characters.
-Use either
-.BR wctomb (3)
-or the thread-safe
-.BR wcrtomb (3)
-instead.
-.SH SEE ALSO
-.BR btowc (3),
-.BR wcrtomb (3),
-.BR wctomb (3)
diff --git a/man3/wctomb.3 b/man3/wctomb.3
deleted file mode 100644
index c5c437720..000000000
--- a/man3/wctomb.3
+++ /dev/null
@@ -1,122 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wctomb 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wctomb \- convert a wide character to a multibyte sequence
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BI "int wctomb(char *" s ", wchar_t " wc );
-.fi
-.SH DESCRIPTION
-If
-.I s
-is not NULL,
-the
-.BR wctomb ()
-function converts the wide character
-.I wc
-to its multibyte representation and stores it at the beginning of
-the character array pointed to by
-.IR s .
-It updates the shift state, which
-is stored in a static anonymous variable
-known only to the
-.BR wctomb ()
-function,
-and returns the length of said multibyte representation,
-that is, the number of
-bytes written at
-.IR s .
-.PP
-The programmer must ensure that there is
-room for at least
-.B MB_CUR_MAX
-bytes at
-.IR s .
-.PP
-If
-.I s
-is NULL, the
-.BR wctomb ()
-function
-.\" The Dinkumware doc and the Single UNIX specification say this, but
-.\" glibc doesn't implement this.
-resets the shift state, known only to this function,
-to the initial state, and
-returns nonzero if the encoding has nontrivial shift state,
-or zero if the encoding is stateless.
-.SH RETURN VALUE
-If
-.I s
-is not NULL, the
-.BR wctomb ()
-function
-returns the number of bytes
-that have been written to the byte array at
-.IR s .
-If
-.I wc
-can not be
-represented as a multibyte sequence (according
-to the current locale), \-1 is returned.
-.PP
-If
-.I s
-is NULL, the
-.BR wctomb ()
-function returns nonzero if the
-encoding has nontrivial shift state, or zero if the encoding is stateless.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wctomb ()
-T} Thread safety MT-Unsafe race
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-The function
-.BR wcrtomb (3)
-provides
-a better interface to the same functionality.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR wctomb ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR MB_CUR_MAX (3),
-.BR mblen (3),
-.BR mbstowcs (3),
-.BR mbtowc (3),
-.BR wcrtomb (3),
-.BR wcstombs (3)
diff --git a/man3/wctrans.3 b/man3/wctrans.3
deleted file mode 100644
index cacf05ea5..000000000
--- a/man3/wctrans.3
+++ /dev/null
@@ -1,91 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wctrans 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wctrans \- wide-character translation mapping
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "wctrans_t wctrans(const char *" name );
-.fi
-.SH DESCRIPTION
-The
-.I wctrans_t
-type represents a mapping
-which can map a wide character to
-another wide character.
-Its nature is implementation-dependent, but the special
-value
-.I (wctrans_t)\ 0
-denotes an invalid mapping.
-Nonzero
-.I wctrans_t
-values can be passed to the
-.BR towctrans (3)
-function to actually perform
-the wide-character mapping.
-.PP
-The
-.BR wctrans ()
-function returns a mapping, given by its name.
-The set of
-valid names depends on the
-.B LC_CTYPE
-category of the current locale, but the
-following names are valid in all locales.
-.PP
-.nf
- "tolower" \- realizes the \fBtolower\fP(3) mapping
- "toupper" \- realizes the \fBtoupper\fP(3) mapping
-.fi
-.SH RETURN VALUE
-The
-.BR wctrans ()
-function returns a mapping descriptor if the
-.I name
-is valid.
-Otherwise, it returns
-.IR "(wctrans_t)\ 0" .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wctrans ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR wctrans ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR towctrans (3)
diff --git a/man3/wctype.3 b/man3/wctype.3
deleted file mode 100644
index f2b1429bf..000000000
--- a/man3/wctype.3
+++ /dev/null
@@ -1,103 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wctype 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wctype \- wide-character classification
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wctype.h>
-.PP
-.BI "wctype_t wctype(const char *" name );
-.fi
-.SH DESCRIPTION
-The
-.I wctype_t
-type represents a property which a wide character may or
-may not have.
-In other words, it represents a class of wide characters.
-This type's nature is implementation-dependent, but the special value
-.I "(wctype_t) 0"
-denotes an invalid property.
-Nonzero
-.I wctype_t
-values
-can be passed to the
-.BR iswctype (3)
-function
-to actually test whether a given
-wide character has the property.
-.PP
-The
-.BR wctype ()
-function returns a property, given by its name.
-The set of
-valid names depends on the
-.B LC_CTYPE
-category of the current locale, but the
-following names are valid in all locales.
-.PP
-.nf
- "alnum" \- realizes the \fBisalnum\fP(3) classification function
- "alpha" \- realizes the \fBisalpha\fP(3) classification function
- "blank" \- realizes the \fBisblank\fP(3) classification function
- "cntrl" \- realizes the \fBiscntrl\fP(3) classification function
- "digit" \- realizes the \fBisdigit\fP(3) classification function
- "graph" \- realizes the \fBisgraph\fP(3) classification function
- "lower" \- realizes the \fBislower\fP(3) classification function
- "print" \- realizes the \fBisprint\fP(3) classification function
- "punct" \- realizes the \fBispunct\fP(3) classification function
- "space" \- realizes the \fBisspace\fP(3) classification function
- "upper" \- realizes the \fBisupper\fP(3) classification function
- "xdigit" \- realizes the \fBisxdigit\fP(3) classification function
-.fi
-.SH RETURN VALUE
-The
-.BR wctype ()
-function returns a property descriptor
-if the
-.I name
-is valid.
-Otherwise, it returns
-.IR "(wctype_t) 0" .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wctype ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR wctype ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR iswctype (3)
diff --git a/man3/wcwidth.3 b/man3/wcwidth.3
deleted file mode 100644
index 2bf243b08..000000000
--- a/man3/wcwidth.3
+++ /dev/null
@@ -1,80 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\"
-.TH wcwidth 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wcwidth \- determine columns needed for a wide character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.BR "#define _XOPEN_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <wchar.h>
-.PP
-.BI "int wcwidth(wchar_t " c );
-.fi
-.SH DESCRIPTION
-The
-.BR wcwidth ()
-function returns the number of columns
-needed to represent the wide character
-.IR c .
-If
-.I c
-is a printable wide character, the value
-is at least 0.
-If
-.I c
-is null wide character (L\[aq]\e0\[aq]), the value is 0.
-Otherwise, \-1 is returned.
-.SH RETURN VALUE
-The
-.BR wcwidth ()
-function returns the number of
-column positions for
-.IR c .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wcwidth ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.PP
-Note that before glibc 2.2.5, glibc used the prototype
-.PP
-.nf
-.BI "int wcwidth(wint_t " c );
-.fi
-.SH NOTES
-The behavior of
-.BR wcwidth ()
-depends on the
-.B LC_CTYPE
-category of the
-current locale.
-.SH SEE ALSO
-.BR iswprint (3),
-.BR wcswidth (3)
diff --git a/man3/wmemchr.3 b/man3/wmemchr.3
deleted file mode 100644
index 8add6a473..000000000
--- a/man3/wmemchr.3
+++ /dev/null
@@ -1,73 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wmemchr 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wmemchr \- search a wide character in a wide-character array
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *wmemchr(const wchar_t " s [. n "], wchar_t " c ", size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR wmemchr ()
-function is the wide-character equivalent of the
-.BR memchr (3)
-function.
-It searches the
-.I n
-wide characters starting at
-.I s
-for
-the first occurrence of the wide character
-.IR c .
-.SH RETURN VALUE
-The
-.BR wmemchr ()
-function returns a pointer to the first occurrence of
-.I c
-among the
-.I n
-wide characters starting at
-.IR s ,
-or NULL if
-.I c
-does
-not occur among these.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wmemchr ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR memchr (3),
-.BR wcschr (3)
diff --git a/man3/wmemcmp.3 b/man3/wmemcmp.3
deleted file mode 100644
index 9f470209f..000000000
--- a/man3/wmemcmp.3
+++ /dev/null
@@ -1,93 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\"
-.TH wmemcmp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wmemcmp \- compare two arrays of wide-characters
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "int wmemcmp(const wchar_t " s1 [. n "], const wchar_t " s2 [. n "], \
-size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR wmemcmp ()
-function is the wide-character equivalent of the
-.BR memcmp (3)
-function.
-It compares the
-.I n
-wide-characters starting at
-.I s1
-and the
-.I n
-wide-characters starting at
-.IR s2 .
-.SH RETURN VALUE
-The
-.BR wmemcmp ()
-function returns
-zero if the wide-character arrays of size
-.I n
-at
-.I s1
-and
-.I s2
-are equal.
-It returns an integer greater than
-zero if at the first differing position
-.I i
-.RI ( i " <"
-.IR n ),
-the
-corresponding wide-character
-.I s1[i]
-is greater than
-.IR s2[i] .
-It returns an integer less than zero if
-at the first differing position
-.I i
-.RI ( i
-<
-.IR n ),
-the corresponding
-wide-character
-.I s1[i]
-is less than
-.IR s2[i] .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wmemcmp ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR memcmp (3),
-.BR wcscmp (3)
diff --git a/man3/wmemcpy.3 b/man3/wmemcpy.3
deleted file mode 100644
index e667dd972..000000000
--- a/man3/wmemcpy.3
+++ /dev/null
@@ -1,78 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wmemcpy 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wmemcpy \- copy an array of wide-characters
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *wmemcpy(wchar_t " dest "[restrict ." n ],
-.BI " const wchar_t " src "[restrict ." n ],
-.BI " size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR wmemcpy ()
-function is the wide-character equivalent of the
-.BR memcpy (3)
-function.
-It copies
-.I n
-wide characters from the array starting at
-.I src
-to the array starting at
-.IR dest .
-.PP
-The arrays may not overlap; use
-.BR wmemmove (3)
-to copy between overlapping
-arrays.
-.PP
-The programmer must ensure that there is room for at least
-.I n
-wide
-characters at
-.IR dest .
-.SH RETURN VALUE
-.BR wmemcpy ()
-returns
-.IR dest .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wmemcpy ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR memcpy (3),
-.BR wcscpy (3),
-.BR wmemmove (3),
-.BR wmempcpy (3)
diff --git a/man3/wmemmove.3 b/man3/wmemmove.3
deleted file mode 100644
index a2aba5b9e..000000000
--- a/man3/wmemmove.3
+++ /dev/null
@@ -1,73 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wmemmove 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wmemmove \- copy an array of wide-characters
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *wmemmove(wchar_t " dest [. n "], const wchar_t " src [. n "], \
-size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR wmemmove ()
-function is the wide-character equivalent of the
-.BR memmove (3)
-function.
-It copies
-.I n
-wide characters from the array
-starting at
-.I src
-to the array starting at
-.IR dest .
-The arrays may
-overlap.
-.PP
-The programmer must ensure that there is room for at least
-.I n
-wide
-characters at
-.IR dest .
-.SH RETURN VALUE
-.BR wmemmove ()
-returns
-.IR dest .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wmemmove ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR memmove (3),
-.BR wmemcpy (3)
diff --git a/man3/wmempcpy.3 b/man3/wmempcpy.3
deleted file mode 100644
index 26750cb64..000000000
--- a/man3/wmempcpy.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/mempcpy.3
diff --git a/man3/wmemset.3 b/man3/wmemset.3
deleted file mode 100644
index 385ebf77c..000000000
--- a/man3/wmemset.3
+++ /dev/null
@@ -1,64 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wmemset 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wmemset \- fill an array of wide-characters with a constant wide character
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <wchar.h>
-.PP
-.BI "wchar_t *wmemset(wchar_t " wcs [. n "], wchar_t " wc ", size_t " n );
-.fi
-.SH DESCRIPTION
-The
-.BR wmemset ()
-function is the wide-character equivalent of the
-.BR memset (3)
-function.
-It fills the array of
-.I n
-wide-characters starting at
-.I wcs
-with
-.I n
-copies of the wide character
-.IR wc .
-.SH RETURN VALUE
-.BR wmemset ()
-returns
-.IR wcs .
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wmemset ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH SEE ALSO
-.BR memset (3)
diff --git a/man3/wordexp.3 b/man3/wordexp.3
deleted file mode 100644
index 2a9e0fa93..000000000
--- a/man3/wordexp.3
+++ /dev/null
@@ -1,243 +0,0 @@
-'\" t
-.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH wordexp 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wordexp, wordfree \- perform word expansion like a posix-shell
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B "#include <wordexp.h>"
-.PP
-.BI "int wordexp(const char *restrict " s ", wordexp_t *restrict " p \
-", int " flags );
-.BI "void wordfree(wordexp_t *" p );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR wordexp (),
-.BR wordfree ():
-.nf
- _XOPEN_SOURCE
-.fi
-.SH DESCRIPTION
-The function
-.BR wordexp ()
-performs a shell-like expansion of the string
-.I s
-and returns the result in the structure pointed to by
-.IR p .
-The data type
-.I wordexp_t
-is a structure that at least has the fields
-.IR we_wordc ,
-.IR we_wordv ,
-and
-.IR we_offs .
-The field
-.I we_wordc
-is a
-.I size_t
-that gives the number of words in the expansion of
-.IR s .
-The field
-.I we_wordv
-is a
-.I "char\ **"
-that points to the array of words found.
-The field
-.I we_offs
-of type
-.I size_t
-is sometimes (depending on
-.IR flags ,
-see below) used to indicate the number of initial elements in the
-.I we_wordv
-array that should be filled with NULLs.
-.PP
-The function
-.BR wordfree ()
-frees the allocated memory again.
-More precisely, it does not free
-its argument, but it frees the array
-.I we_wordv
-and the strings that points to.
-.SS The string argument
-Since the expansion is the same as the expansion by the shell (see
-.BR sh (1))
-of the parameters to a command, the string
-.I s
-must not contain characters that would be illegal in shell command
-parameters.
-In particular, there must not be any unescaped
-newline or |, &, ;, <, >, (, ), {, } characters
-outside a command substitution or parameter substitution context.
-.PP
-If the argument
-.I s
-contains a word that starts with an unquoted comment character #,
-then it is unspecified whether that word and all following words
-are ignored, or the # is treated as a non-comment character.
-.SS The expansion
-The expansion done consists of the following stages:
-tilde expansion (replacing \[ti]user by user's home directory),
-variable substitution (replacing $FOO by the value of the environment
-variable FOO), command substitution (replacing $(command) or \`command\`
-by the output of command), arithmetic expansion, field splitting,
-wildcard expansion, quote removal.
-.PP
-The result of expansion of special parameters
-($@, $*, $#, $?, $\-, $$, $!, $0) is unspecified.
-.PP
-Field splitting is done using the environment variable $IFS.
-If it is not set, the field separators are space, tab, and newline.
-.SS The output array
-The array
-.I we_wordv
-contains the words found, followed by a NULL.
-.SS The flags argument
-The
-.I flag
-argument is a bitwise inclusive OR of the following values:
-.TP
-.B WRDE_APPEND
-Append the words found to the array resulting from a previous call.
-.TP
-.B WRDE_DOOFFS
-Insert
-.I we_offs
-initial NULLs in the array
-.IR we_wordv .
-(These are not counted in the returned
-.IR we_wordc .)
-.TP
-.B WRDE_NOCMD
-Don't do command substitution.
-.TP
-.B WRDE_REUSE
-The argument
-.I p
-resulted from a previous call to
-.BR wordexp (),
-and
-.BR wordfree ()
-was not called.
-Reuse the allocated storage.
-.TP
-.B WRDE_SHOWERR
-Normally during command substitution
-.I stderr
-is redirected to
-.IR /dev/null .
-This flag specifies that
-.I stderr
-is not to be redirected.
-.TP
-.B WRDE_UNDEF
-Consider it an error if an undefined shell variable is expanded.
-.SH RETURN VALUE
-On success,
-.BR wordexp ()
-returns 0.
-On failure,
-.BR wordexp ()
-returns one of the following nonzero values:
-.TP
-.B WRDE_BADCHAR
-Illegal occurrence of newline or one of |, &, ;, <, >, (, ), {, }.
-.TP
-.B WRDE_BADVAL
-An undefined shell variable was referenced, and the
-.B WRDE_UNDEF
-flag
-told us to consider this an error.
-.TP
-.B WRDE_CMDSUB
-Command substitution requested, but the
-.B WRDE_NOCMD
-flag told us to consider this an error.
-.TP
-.B WRDE_NOSPACE
-Out of memory.
-.TP
-.B WRDE_SYNTAX
-Shell syntax error, such as unbalanced parentheses or
-unmatched quotes.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lb lb lbx
-l l l.
-Interface Attribute Value
-T{
-.BR wordexp ()
-T} Thread safety T{
-MT-Unsafe race:utent const:env
-env sig:ALRM timer locale
-T}
-T{
-.BR wordfree ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-In the above table,
-.I utent
-in
-.I race:utent
-signifies that if any of the functions
-.BR setutent (3),
-.BR getutent (3),
-or
-.BR endutent (3)
-are used in parallel in different threads of a program,
-then data races could occur.
-.BR wordexp ()
-calls those functions,
-so we use race:utent to remind users.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-glibc 2.1.
-.SH EXAMPLES
-The output of the following example program
-is approximately that of "ls [a-c]*.c".
-.PP
-.\" SRC BEGIN (wordexp.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-#include <wordexp.h>
-\&
-int
-main(void)
-{
- wordexp_t p;
- char **w;
-\&
- wordexp("[a\-c]*.c", &p, 0);
- w = p.we_wordv;
- for (size_t i = 0; i < p.we_wordc; i++)
- printf("%s\en", w[i]);
- wordfree(&p);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR fnmatch (3),
-.BR glob (3)
diff --git a/man3/wordfree.3 b/man3/wordfree.3
deleted file mode 100644
index f0035e0ba..000000000
--- a/man3/wordfree.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/wordexp.3
diff --git a/man3/wprintf.3 b/man3/wprintf.3
deleted file mode 100644
index 16ffb9e43..000000000
--- a/man3/wprintf.3
+++ /dev/null
@@ -1,276 +0,0 @@
-'\" t
-.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" References consulted:
-.\" GNU glibc-2 source code and manual
-.\" Dinkumware C library reference http://www.dinkumware.com/
-.\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
-.\" ISO/IEC 9899:1999
-.\"
-.TH wprintf 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wprintf, fwprintf, swprintf, vwprintf, vfwprintf, vswprintf \- formatted
-wide-character output conversion
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.B #include <wchar.h>
-.PP
-.BI "int wprintf(const wchar_t *restrict " format ", ...);"
-.BI "int fwprintf(FILE *restrict " stream ,
-.BI " const wchar_t *restrict " format ", ...);"
-.BI "int swprintf(wchar_t " wcs "[restrict ." maxlen "], size_t " maxlen ,
-.BI " const wchar_t *restrict " format ", ...);"
-.PP
-.BI "int vwprintf(const wchar_t *restrict " format ", va_list " args );
-.BI "int vfwprintf(FILE *restrict " stream ,
-.BI " const wchar_t *restrict " format ", va_list " args );
-.BI "int vswprintf(wchar_t " wcs "[restrict ." maxlen "], size_t " maxlen ,
-.BI " const wchar_t *restrict " format ", va_list " args );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-All functions shown above:
-.\" .BR wprintf (),
-.\" .BR fwprintf (),
-.\" .BR swprintf (),
-.\" .BR vwprintf (),
-.\" .BR vfwprintf (),
-.\" .BR vswprintf ():
-.nf
- _XOPEN_SOURCE >= 500 || _ISOC99_SOURCE
- || _POSIX_C_SOURCE >= 200112L
-.fi
-.SH DESCRIPTION
-The
-.BR wprintf ()
-family of functions is
-the wide-character equivalent of the
-.BR printf (3)
-family of functions.
-It performs formatted output of wide
-characters.
-.PP
-The
-.BR wprintf ()
-and
-.BR vwprintf ()
-functions
-perform wide-character output to
-.IR stdout .
-.I stdout
-must not be byte oriented; see
-.BR fwide (3)
-for more information.
-.PP
-The
-.BR fwprintf ()
-and
-.BR vfwprintf ()
-functions
-perform wide-character output to
-.IR stream .
-.I stream
-must not be byte oriented; see
-.BR fwide (3)
-for more information.
-.PP
-The
-.BR swprintf ()
-and
-.BR vswprintf ()
-functions
-perform wide-character output
-to an array of wide characters.
-The programmer must ensure that there is
-room for at least
-.I maxlen
-wide
-characters at
-.IR wcs .
-.PP
-These functions are like
-the
-.BR printf (3),
-.BR vprintf (3),
-.BR fprintf (3),
-.BR vfprintf (3),
-.BR sprintf (3),
-.BR vsprintf (3)
-functions except for the
-following differences:
-.TP
-.B \[bu]
-The
-.I format
-string is a wide-character string.
-.TP
-.B \[bu]
-The output consists of wide characters, not bytes.
-.TP
-.B \[bu]
-.BR swprintf ()
-and
-.BR vswprintf ()
-take a
-.I maxlen
-argument,
-.BR sprintf (3)
-and
-.BR vsprintf (3)
-do not.
-.RB ( snprintf (3)
-and
-.BR vsnprintf (3)
-take a
-.I maxlen
-argument, but these functions do not return \-1 upon
-buffer overflow on Linux.)
-.PP
-The treatment of the conversion characters
-.B c
-and
-.B s
-is different:
-.TP
-.B c
-If no
-.B l
-modifier is present, the
-.I int
-argument is converted to a wide character by a call to the
-.BR btowc (3)
-function, and the resulting wide character is written.
-If an
-.B l
-modifier is present, the
-.I wint_t
-(wide character) argument is written.
-.TP
-.B s
-If no
-.B l
-modifier is present: the
-.I "const\ char\ *"
-argument is expected to be a pointer to an array of character type
-(pointer to a string) containing a multibyte character sequence beginning
-in the initial shift state.
-Characters from the array are converted to
-wide characters (each by a call to the
-.BR mbrtowc (3)
-function with a conversion state starting in the initial state before
-the first byte).
-The resulting wide characters are written up to
-(but not including) the terminating null wide character (L\[aq]\e0\[aq]).
-If a precision is
-specified, no more wide characters than the number specified are written.
-Note that the precision determines the number of
-.I wide characters
-written, not the number of
-.I bytes
-or
-.IR "screen positions" .
-The array must contain a terminating null byte (\[aq]\e0\[aq]),
-unless a precision is given
-and it is so small that the number of converted wide characters reaches it
-before the end of the array is reached.
-If an
-.B l
-modifier is present: the
-.I "const\ wchar_t\ *"
-argument is expected to be a pointer to an array of wide characters.
-Wide characters from the array are written up to (but not including) a
-terminating null wide character.
-If a precision is specified, no more than
-the number specified are written.
-The array must contain a terminating null
-wide character, unless a precision is given and it is smaller than or equal
-to the number of wide characters in the array.
-.SH RETURN VALUE
-The functions return the number of wide characters written, excluding the
-terminating null wide character in
-case of the functions
-.BR swprintf ()
-and
-.BR vswprintf ().
-They return \-1 when an error occurs.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR wprintf (),
-.BR fwprintf (),
-.BR swprintf (),
-.BR vwprintf (),
-.BR vfwprintf (),
-.BR vswprintf ()
-T} Thread safety MT-Safe locale
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001, C99.
-.SH NOTES
-The behavior of
-.BR wprintf ()
-et al. depends
-on the
-.B LC_CTYPE
-category of the
-current locale.
-.PP
-If the
-.I format
-string contains non-ASCII wide characters, the program
-will work correctly only if the
-.B LC_CTYPE
-category of the current locale at
-run time is the same as the
-.B LC_CTYPE
-category of the current locale at
-compile time.
-This is because the
-.I wchar_t
-representation is platform- and locale-dependent.
-(The glibc represents
-wide characters using their Unicode (ISO/IEC 10646) code point, but other
-platforms don't do this.
-Also, the use of C99 universal character names
-of the form \eunnnn does not solve this problem.)
-Therefore, in
-internationalized programs, the
-.I format
-string should consist of ASCII
-wide characters only, or should be constructed at run time in an
-internationalized way (e.g., using
-.BR gettext (3)
-or
-.BR iconv (3),
-followed by
-.BR mbstowcs (3)).
-.SH SEE ALSO
-.BR fprintf (3),
-.BR fputwc (3),
-.BR fwide (3),
-.BR printf (3),
-.BR snprintf (3)
-.\" .BR wscanf (3)
diff --git a/man3/xcrypt.3 b/man3/xcrypt.3
deleted file mode 100644
index c49995dab..000000000
--- a/man3/xcrypt.3
+++ /dev/null
@@ -1,98 +0,0 @@
-'\" t
-.\" Copyright 2003 walter harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" this is the 3rd type of interface for cryptographic routines
-.\" 1. encrypt() expects a bit field
-.\" 2. cbc_crypt() byte values
-.\" 3. xencrypt() a hexstring
-.\" to bad to be true :(
-.\"
-.TH XCRYPT 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-xencrypt, xdecrypt, passwd2des \- RFS password encryption
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B "#include <rpc/des_crypt.h>"
-.PP
-.BI "void passwd2des(char " *passwd ", char *" key ");"
-.PP
-.BI "int xencrypt(char *" secret ", char *" passwd ");"
-.BI "int xdecrypt(char *" secret ", char *" passwd ");"
-.fi
-.SH DESCRIPTION
-.BR WARNING :
-Do not use these functions in new code.
-They do not achieve any type of acceptable cryptographic security guarantees.
-.PP
-The function
-.BR passwd2des ()
-takes a character string
-.I passwd
-of arbitrary length and fills a character array
-.I key
-of length 8.
-The array
-.I key
-is suitable for use as DES key.
-It has odd parity set in bit 0 of each byte.
-Both other functions described here use this function to turn their
-argument
-.I passwd
-into a DES key.
-.PP
-The
-.BR xencrypt ()
-function takes the ASCII character string
-.I secret
-given in hex,
-.\" (over the alphabet 0123456789abcdefABCDEF),
-which must have a length that is a multiple of 16,
-encrypts it using the DES key derived from
-.I passwd
-by
-.BR passwd2des (),
-and outputs the result again in
-.I secret
-as a hex string
-.\" (over the alphabet 0123456789abcdef)
-of the same length.
-.PP
-The
-.BR xdecrypt ()
-function performs the converse operation.
-.SH RETURN VALUE
-The functions
-.BR xencrypt ()
-and
-.BR xdecrypt ()
-return 1 on success and 0 on error.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR passwd2des (),
-.BR xencrypt (),
-.BR xdecrypt ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH VERSIONS
-These functions are available since glibc 2.1.
-.SH BUGS
-The prototypes are missing from the abovementioned include file.
-.SH SEE ALSO
-.BR cbc_crypt (3)
diff --git a/man3/xdecrypt.3 b/man3/xdecrypt.3
deleted file mode 100644
index 01b6ce65a..000000000
--- a/man3/xdecrypt.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xcrypt.3
diff --git a/man3/xdr.3 b/man3/xdr.3
deleted file mode 100644
index 289738a47..000000000
--- a/man3/xdr.3
+++ /dev/null
@@ -1,612 +0,0 @@
-'\" t
-.\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
-.\"
-.\" %%%LICENSE_START(BSD_ONELINE_CDROM)
-.\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
-.\" %%%LICENSE_END
-.\"
-.\" @(#)xdr.3n 2.2 88/08/03 4.0 RPCSRC; from 1.16 88/03/14 SMI
-.\"
-.\" 2007-12-30, mtk, Convert function prototypes to modern C syntax
-.\"
-.TH xdr 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-xdr \- library routines for external data representation
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS AND DESCRIPTION
-These routines allow C programmers to describe
-arbitrary data structures in a machine-independent fashion.
-Data for remote procedure calls are transmitted using these
-routines.
-.PP
-The prototypes below are declared in
-.I <rpc/xdr.h>
-and make use of the following types:
-.PP
-.RS 4
-.EX
-.BI "typedef int " bool_t ;
-.PP
-.BI "typedef bool_t (*" xdrproc_t ")(XDR *, void *,...);"
-.EE
-.RE
-.PP
-For the declaration of the
-.I XDR
-type, see
-.IR <rpc/xdr.h> .
-.PP
-.nf
-.BI "bool_t xdr_array(XDR *" xdrs ", char **" arrp ", unsigned int *" sizep ,
-.BI " unsigned int " maxsize ", unsigned int " elsize ,
-.BI " xdrproc_t " elproc );
-.fi
-.IP
-A filter primitive that translates between variable-length arrays
-and their corresponding external representations.
-The argument
-.I arrp
-is the address of the pointer to the array, while
-.I sizep
-is the address of the element count of the array;
-this element count cannot exceed
-.IR maxsize .
-The argument
-.I elsize
-is the
-.I sizeof
-each of the array's elements, and
-.I elproc
-is an XDR filter that translates between
-the array elements' C form, and their external
-representation.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "bool_t xdr_bool(XDR *" xdrs ", bool_t *" bp );
-.fi
-.IP
-A filter primitive that translates between booleans (C
-integers)
-and their external representations.
-When encoding data, this
-filter produces values of either one or zero.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "bool_t xdr_bytes(XDR *" xdrs ", char **" sp ", unsigned int *" sizep ,
-.BI " unsigned int " maxsize );
-.fi
-.IP
-A filter primitive that translates between counted byte
-strings and their external representations.
-The argument
-.I sp
-is the address of the string pointer.
-The length of the
-string is located at address
-.IR sizep ;
-strings cannot be longer than
-.IR maxsize .
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "bool_t xdr_char(XDR *" xdrs ", char *" cp );
-.fi
-.IP
-A filter primitive that translates between C characters
-and their external representations.
-This routine returns one if it succeeds, zero otherwise.
-Note: encoded characters are not packed, and occupy 4 bytes each.
-For arrays of characters, it is worthwhile to
-consider
-.BR xdr_bytes (),
-.BR xdr_opaque (),
-or
-.BR xdr_string ().
-.PP
-.nf
-.BI "void xdr_destroy(XDR *" xdrs );
-.fi
-.IP
-A macro that invokes the destroy routine associated with the XDR stream,
-.IR xdrs .
-Destruction usually involves freeing private data structures
-associated with the stream.
-Using
-.I xdrs
-after invoking
-.BR xdr_destroy ()
-is undefined.
-.PP
-.nf
-.BI "bool_t xdr_double(XDR *" xdrs ", double *" dp );
-.fi
-.IP
-A filter primitive that translates between C
-.I double
-precision numbers and their external representations.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "bool_t xdr_enum(XDR *" xdrs ", enum_t *" ep );
-.fi
-.IP
-A filter primitive that translates between C
-.IR enum s
-(actually integers) and their external representations.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "bool_t xdr_float(XDR *" xdrs ", float *" fp );
-.fi
-.IP
-A filter primitive that translates between C
-.IR float s
-and their external representations.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "void xdr_free(xdrproc_t " proc ", char *" objp );
-.fi
-.IP
-Generic freeing routine.
-The first argument is the XDR routine for the object being freed.
-The second argument is a pointer to the object itself.
-Note: the pointer passed to this routine is
-.I not
-freed, but what it points to
-.I is
-freed (recursively).
-.PP
-.nf
-.BI "unsigned int xdr_getpos(XDR *" xdrs );
-.fi
-.IP
-A macro that invokes the get-position routine
-associated with the XDR stream,
-.IR xdrs .
-The routine returns an unsigned integer,
-which indicates the position of the XDR byte stream.
-A desirable feature of XDR
-streams is that simple arithmetic works with this number,
-although the XDR stream instances need not guarantee this.
-.PP
-.nf
-.BI "long *xdr_inline(XDR *" xdrs ", int " len );
-.fi
-.IP
-A macro that invokes the inline routine associated with the XDR stream,
-.IR xdrs .
-The routine returns a pointer
-to a contiguous piece of the stream's buffer;
-.I len
-is the byte length of the desired buffer.
-Note: pointer is cast to
-.IR "long\ *" .
-.IP
-Warning:
-.BR xdr_inline ()
-may return NULL (0)
-if it cannot allocate a contiguous piece of a buffer.
-Therefore the behavior may vary among stream instances;
-it exists for the sake of efficiency.
-.PP
-.nf
-.BI "bool_t xdr_int(XDR *" xdrs ", int *" ip );
-.fi
-.IP
-A filter primitive that translates between C integers
-and their external representations.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "bool_t xdr_long(XDR *" xdrs ", long *" lp );
-.fi
-.IP
-A filter primitive that translates between C
-.I long
-integers and their external representations.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "void xdrmem_create(XDR *" xdrs ", char *" addr ", unsigned int " size ,
-.BI " enum xdr_op " op );
-.fi
-.IP
-This routine initializes the XDR stream object pointed to by
-.IR xdrs .
-The stream's data is written to, or read from,
-a chunk of memory at location
-.I addr
-whose length is no more than
-.I size
-bytes long.
-The
-.I op
-determines the direction of the XDR stream (either
-.BR XDR_ENCODE ,
-.BR XDR_DECODE ,
-or
-.BR XDR_FREE ).
-.PP
-.nf
-.BI "bool_t xdr_opaque(XDR *" xdrs ", char *" cp ", unsigned int " cnt );
-.fi
-.IP
-A filter primitive that translates between fixed size opaque data
-and its external representation.
-The argument
-.I cp
-is the address of the opaque object, and
-.I cnt
-is its size in bytes.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "bool_t xdr_pointer(XDR *" xdrs ", char **" objpp ,
-.BI " unsigned int " objsize ", xdrproc_t " xdrobj );
-.fi
-.IP
-Like
-.BR xdr_reference ()
-except that it serializes null pointers, whereas
-.BR xdr_reference ()
-does not.
-Thus,
-.BR xdr_pointer ()
-can represent
-recursive data structures, such as binary trees or
-linked lists.
-.PP
-.nf
-.BI "void xdrrec_create(XDR *" xdrs ", unsigned int " sendsize ,
-.BI " unsigned int " recvsize ", char *" handle ,
-.BI " int (*" readit ")(char *, char *, int),"
-.BI " int (*" writeit ")(char *, char *, int));"
-.fi
-.IP
-This routine initializes the XDR stream object pointed to by
-.IR xdrs .
-The stream's data is written to a buffer of size
-.IR sendsize ;
-a value of zero indicates the system should use a suitable default.
-The stream's data is read from a buffer of size
-.IR recvsize ;
-it too can be set to a suitable default by passing a zero value.
-When a stream's output buffer is full,
-.I writeit
-is called.
-Similarly, when a stream's input buffer is empty,
-.I readit
-is called.
-The behavior of these two routines is similar to
-the system calls
-.BR read (2)
-and
-.BR write (2),
-except that
-.I handle
-is passed to the former routines as the first argument.
-Note: the XDR stream's
-.I op
-field must be set by the caller.
-.IP
-Warning: to read from an XDR stream created by this API,
-you'll need to call
-.BR xdrrec_skiprecord ()
-first before calling any other XDR APIs.
-This inserts additional bytes in the stream to provide
-record boundary information.
-Also, XDR streams created with different
-.B xdr*_create
-APIs are not compatible for the same reason.
-.PP
-.nf
-.BI "bool_t xdrrec_endofrecord(XDR *" xdrs ", int " sendnow );
-.fi
-.IP
-This routine can be invoked only on streams created by
-.BR xdrrec_create ().
-The data in the output buffer is marked as a completed record,
-and the output buffer is optionally written out if
-.I sendnow
-is nonzero.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "bool_t xdrrec_eof(XDR *" xdrs );
-.fi
-.IP
-This routine can be invoked only on streams created by
-.BR xdrrec_create ().
-After consuming the rest of the current record in the stream,
-this routine returns one if the stream has no more input,
-zero otherwise.
-.PP
-.nf
-.BI "bool_t xdrrec_skiprecord(XDR *" xdrs );
-.fi
-.IP
-This routine can be invoked only on
-streams created by
-.BR xdrrec_create ().
-It tells the XDR implementation that the rest of the current record
-in the stream's input buffer should be discarded.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "bool_t xdr_reference(XDR *" xdrs ", char **" pp ", unsigned int " size ,
-.BI " xdrproc_t " proc );
-.fi
-.IP
-A primitive that provides pointer chasing within structures.
-The argument
-.I pp
-is the address of the pointer;
-.I size
-is the
-.I sizeof
-the structure that
-.I *pp
-points to; and
-.I proc
-is an XDR procedure that filters the structure
-between its C form and its external representation.
-This routine returns one if it succeeds, zero otherwise.
-.IP
-Warning: this routine does not understand null pointers.
-Use
-.BR xdr_pointer ()
-instead.
-.PP
-.nf
-.BI "xdr_setpos(XDR *" xdrs ", unsigned int " pos );
-.fi
-.IP
-A macro that invokes the set position routine associated with
-the XDR stream
-.IR xdrs .
-The argument
-.I pos
-is a position value obtained from
-.BR xdr_getpos ().
-This routine returns one if the XDR stream could be repositioned,
-and zero otherwise.
-.IP
-Warning: it is difficult to reposition some types of XDR
-streams, so this routine may fail with one
-type of stream and succeed with another.
-.PP
-.nf
-.BI "bool_t xdr_short(XDR *" xdrs ", short *" sp );
-.fi
-.IP
-A filter primitive that translates between C
-.I short
-integers and their external representations.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "void xdrstdio_create(XDR *" xdrs ", FILE *" file ", enum xdr_op " op );
-.fi
-.IP
-This routine initializes the XDR stream object pointed to by
-.IR xdrs .
-The XDR stream data is written to, or read from, the
-.I stdio
-stream
-.IR file .
-The argument
-.I op
-determines the direction of the XDR stream (either
-.BR XDR_ENCODE ,
-.BR XDR_DECODE ,
-or
-.BR XDR_FREE ).
-.IP
-Warning: the destroy routine associated with such XDR streams calls
-.BR fflush (3)
-on the
-.I file
-stream, but never
-.BR fclose (3).
-.PP
-.nf
-.BI "bool_t xdr_string(XDR *" xdrs ", char **" sp ", unsigned int " maxsize );
-.fi
-.IP
-A filter primitive that translates between C strings and
-their corresponding external representations.
-Strings cannot be longer than
-.IR maxsize .
-Note:
-.I sp
-is the address of the string's pointer.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "bool_t xdr_u_char(XDR *" xdrs ", unsigned char *" ucp );
-.fi
-.IP
-A filter primitive that translates between
-.I unsigned
-C characters and their external representations.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "bool_t xdr_u_int(XDR *" xdrs ", unsigned int *" up );
-.fi
-.IP
-A filter primitive that translates between C
-.I unsigned
-integers and their external representations.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "bool_t xdr_u_long(XDR *" xdrs ", unsigned long *" ulp );
-.fi
-.IP
-A filter primitive that translates between C
-.I "unsigned long"
-integers and their external representations.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "bool_t xdr_u_short(XDR *" xdrs ", unsigned short *" usp );
-.fi
-.IP
-A filter primitive that translates between C
-.I "unsigned short"
-integers and their external representations.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "bool_t xdr_union(XDR *" xdrs ", enum_t *" dscmp ", char *" unp ,
-.BI " const struct xdr_discrim *" choices ,
-.BI " xdrproc_t " defaultarm "); /* may equal NULL */"
-.fi
-.IP
-A filter primitive that translates between a discriminated C
-.I union
-and its corresponding external representation.
-It first
-translates the discriminant of the union located at
-.IR dscmp .
-This discriminant is always an
-.IR enum_t .
-Next the union located at
-.I unp
-is translated.
-The argument
-.I choices
-is a pointer to an array of
-.BR xdr_discrim ()
-structures.
-Each structure contains an ordered pair of
-.RI [ value , proc ].
-If the union's discriminant is equal to the associated
-.IR value ,
-then the
-.I proc
-is called to translate the union.
-The end of the
-.BR xdr_discrim ()
-structure array is denoted by a routine of value NULL.
-If the discriminant is not found in the
-.I choices
-array, then the
-.I defaultarm
-procedure is called (if it is not NULL).
-Returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.BI "bool_t xdr_vector(XDR *" xdrs ", char *" arrp ", unsigned int " size ,
-.BI " unsigned int " elsize ", xdrproc_t " elproc );
-.fi
-.IP
-A filter primitive that translates between fixed-length arrays
-and their corresponding external representations.
-The argument
-.I arrp
-is the address of the pointer to the array, while
-.I size
-is the element count of the array.
-The argument
-.I elsize
-is the
-.I sizeof
-each of the array's elements, and
-.I elproc
-is an XDR filter that translates between
-the array elements' C form, and their external
-representation.
-This routine returns one if it succeeds, zero otherwise.
-.PP
-.nf
-.B bool_t xdr_void(void);
-.fi
-.IP
-This routine always returns one.
-It may be passed to RPC routines that require a function argument,
-where nothing is to be done.
-.PP
-.nf
-.BI "bool_t xdr_wrapstring(XDR *" xdrs ", char **" sp );
-.fi
-.IP
-A primitive that calls
-.B "xdr_string(xdrs, sp,MAXUN.UNSIGNED );"
-where
-.B MAXUN.UNSIGNED
-is the maximum value of an unsigned integer.
-.BR xdr_wrapstring ()
-is handy because the RPC package passes a maximum of two XDR
-routines as arguments, and
-.BR xdr_string (),
-one of the most frequently used primitives, requires three.
-Returns one if it succeeds, zero otherwise.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR xdr_array (),
-.BR xdr_bool (),
-.BR xdr_bytes (),
-.BR xdr_char (),
-.BR xdr_destroy (),
-.BR xdr_double (),
-.BR xdr_enum (),
-.BR xdr_float (),
-.BR xdr_free (),
-.BR xdr_getpos (),
-.BR xdr_inline (),
-.BR xdr_int (),
-.BR xdr_long (),
-.BR xdrmem_create (),
-.BR xdr_opaque (),
-.BR xdr_pointer (),
-.BR xdrrec_create (),
-.BR xdrrec_eof (),
-.BR xdrrec_endofrecord (),
-.BR xdrrec_skiprecord (),
-.BR xdr_reference (),
-.BR xdr_setpos (),
-.BR xdr_short (),
-.BR xdrstdio_create (),
-.BR xdr_string (),
-.BR xdr_u_char (),
-.BR xdr_u_int (),
-.BR xdr_u_long (),
-.BR xdr_u_short (),
-.BR xdr_union (),
-.BR xdr_vector (),
-.BR xdr_void (),
-.BR xdr_wrapstring ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH SEE ALSO
-.BR rpc (3)
-.PP
-The following manuals:
-.RS
-eXternal Data Representation Standard: Protocol Specification
-.br
-eXternal Data Representation: Sun Technical Notes
-.br
-.IR "XDR: External Data Representation Standard" ,
-RFC\ 1014, Sun Microsystems, Inc.,
-USC-ISI.
-.RE
diff --git a/man3/xdr_accepted_reply.3 b/man3/xdr_accepted_reply.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/xdr_accepted_reply.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/xdr_array.3 b/man3/xdr_array.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_array.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_authunix_parms.3 b/man3/xdr_authunix_parms.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/xdr_authunix_parms.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/xdr_bool.3 b/man3/xdr_bool.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_bool.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_bytes.3 b/man3/xdr_bytes.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_bytes.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_callhdr.3 b/man3/xdr_callhdr.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/xdr_callhdr.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/xdr_callmsg.3 b/man3/xdr_callmsg.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/xdr_callmsg.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/xdr_char.3 b/man3/xdr_char.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_char.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_destroy.3 b/man3/xdr_destroy.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_destroy.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_double.3 b/man3/xdr_double.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_double.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_enum.3 b/man3/xdr_enum.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_enum.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_float.3 b/man3/xdr_float.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_float.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_free.3 b/man3/xdr_free.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_free.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_getpos.3 b/man3/xdr_getpos.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_getpos.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_inline.3 b/man3/xdr_inline.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_inline.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_int.3 b/man3/xdr_int.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_int.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_long.3 b/man3/xdr_long.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_long.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_opaque.3 b/man3/xdr_opaque.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_opaque.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_opaque_auth.3 b/man3/xdr_opaque_auth.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/xdr_opaque_auth.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/xdr_pmap.3 b/man3/xdr_pmap.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/xdr_pmap.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/xdr_pmaplist.3 b/man3/xdr_pmaplist.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/xdr_pmaplist.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/xdr_pointer.3 b/man3/xdr_pointer.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_pointer.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_reference.3 b/man3/xdr_reference.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_reference.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_rejected_reply.3 b/man3/xdr_rejected_reply.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/xdr_rejected_reply.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/xdr_replymsg.3 b/man3/xdr_replymsg.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/xdr_replymsg.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/xdr_setpos.3 b/man3/xdr_setpos.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_setpos.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_short.3 b/man3/xdr_short.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_short.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_string.3 b/man3/xdr_string.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_string.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_u_char.3 b/man3/xdr_u_char.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_u_char.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_u_int.3 b/man3/xdr_u_int.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_u_int.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_u_long.3 b/man3/xdr_u_long.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_u_long.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_u_short.3 b/man3/xdr_u_short.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_u_short.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_union.3 b/man3/xdr_union.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_union.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_vector.3 b/man3/xdr_vector.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_vector.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_void.3 b/man3/xdr_void.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_void.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdr_wrapstring.3 b/man3/xdr_wrapstring.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdr_wrapstring.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdrmem_create.3 b/man3/xdrmem_create.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdrmem_create.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdrrec_create.3 b/man3/xdrrec_create.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdrrec_create.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdrrec_endofrecord.3 b/man3/xdrrec_endofrecord.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdrrec_endofrecord.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdrrec_eof.3 b/man3/xdrrec_eof.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdrrec_eof.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdrrec_skiprecord.3 b/man3/xdrrec_skiprecord.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdrrec_skiprecord.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xdrstdio_create.3 b/man3/xdrstdio_create.3
deleted file mode 100644
index 7ff092d05..000000000
--- a/man3/xdrstdio_create.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xdr.3
diff --git a/man3/xencrypt.3 b/man3/xencrypt.3
deleted file mode 100644
index 01b6ce65a..000000000
--- a/man3/xencrypt.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/xcrypt.3
diff --git a/man3/xprt_register.3 b/man3/xprt_register.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/xprt_register.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/xprt_unregister.3 b/man3/xprt_unregister.3
deleted file mode 100644
index b18471167..000000000
--- a/man3/xprt_unregister.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/rpc.3
diff --git a/man3/y0.3 b/man3/y0.3
deleted file mode 100644
index 861b6f40b..000000000
--- a/man3/y0.3
+++ /dev/null
@@ -1,275 +0,0 @@
-'\" t
-.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
-.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References consulted:
-.\" Linux libc source code
-.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
-.\" 386BSD man pages
-.\" Modified Sat Jul 24 19:08:17 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2002-08-25, aeb
-.\" Modified 2004-11-12 as per suggestion by Fabian Kreutz/AEB
-.\" 2008-07-24, mtk, created this page, based on material from j0.3.
-.\"
-.TH y0 3 (date) "Linux man-pages (unreleased)"
-.SH NAME
-y0, y0f, y0l, y1, y1f, y1l, yn, ynf, ynl \-
-Bessel functions of the second kind
-.SH LIBRARY
-Math library
-.RI ( libm ", " \-lm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BI "double y0(double " x );
-.BI "double y1(double " x );
-.BI "double yn(int " n ", double " x );
-.PP
-.BI "float y0f(float " x );
-.BI "float y1f(float " x );
-.BI "float ynf(int " n ", float " x );
-.PP
-.BI "long double y0l(long double " x );
-.BI "long double y1l(long double " x );
-.BI "long double ynl(int " n ", long double " x );
-.fi
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.BR y0 (),
-.BR y1 (),
-.BR yn ():
-.nf
- _XOPEN_SOURCE
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
-.fi
-.PP
-.BR y0f (),
-.BR y0l (),
-.BR y1f (),
-.BR y1l (),
-.BR ynf (),
-.BR ynl ():
-.nf
- _XOPEN_SOURCE >= 600
- || (_ISOC99_SOURCE && _XOPEN_SOURCE)
- || /* Since glibc 2.19: */ _DEFAULT_SOURCE
- || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-The
-.BR y0 ()
-and
-.BR y1 ()
-functions return Bessel functions of
-.I x
-of the second kind of orders 0 and 1, respectively.
-The
-.BR yn ()
-function
-returns the Bessel function of
-.I x
-of the second kind of order
-.IR n .
-.PP
-The value of
-.I x
-must be positive.
-.PP
-The
-.BR y0f (),
-.BR y1f (),
-and
-.BR ynf ()
-functions are versions that take and return
-.I float
-values.
-The
-.BR y0l (),
-.BR y1l (),
-and
-.BR ynl ()
-functions are versions that take and return
-.I "long double"
-values.
-.SH RETURN VALUE
-On success, these functions return the appropriate
-Bessel value of the second kind for
-.IR x .
-.PP
-If
-.I x
-is a NaN, a NaN is returned.
-.PP
-If
-.I x
-is negative,
-a domain error occurs,
-and the functions return
-.RB \- HUGE_VAL ,
-.RB \- HUGE_VALF ,
-or
-.RB \- HUGE_VALL ,
-respectively.
-(POSIX.1-2001 also allows a NaN return for this case.)
-.PP
-If
-.I x
-is 0.0,
-a pole error occurs,
-and the functions return
-.RB \- HUGE_VAL ,
-.RB \- HUGE_VALF ,
-or
-.RB \- HUGE_VALL ,
-respectively.
-.PP
-If the result underflows,
-a range error occurs,
-and the functions return 0.0
-.PP
-If the result overflows,
-a range error occurs,
-and the functions return
-.RB \- HUGE_VAL ,
-.RB \- HUGE_VALF ,
-or
-.RB \- HUGE_VALL ,
-respectively.
-(POSIX.1-2001 also allows a 0.0 return for this case.)
-.SH ERRORS
-See
-.BR math_error (7)
-for information on how to determine whether an error has occurred
-when calling these functions.
-.PP
-The following errors can occur:
-.TP
-Domain error: \fIx\fP is negative
-.I errno
-is set to
-.BR EDOM .
-An invalid floating-point exception
-.RB ( FE_INVALID )
-is raised.
-.TP
-Pole error: \fIx\fP is 0.0
-.\" Before POSIX.1-2001 TC2, this was (inconsistently) specified
-.\" as a range error.
-.I errno
-is set to
-.B ERANGE
-and an
-.B FE_DIVBYZERO
-exception is raised
-(but see BUGS).
-.TP
-Range error: result underflow
-.\" e.g., y0(1e33) on glibc 2.8/x86-32
-.I errno
-is set to
-.BR ERANGE .
-No
-.B FE_UNDERFLOW
-exception is returned by
-.\" This is intended behavior
-.\" See https://www.sourceware.org/bugzilla/show_bug.cgi?id=6806
-.BR fetestexcept (3)
-for this case.
-.TP
-Range error: result overflow
-.\" e.g., yn(10, 1e-40) on glibc 2.8/x86-32
-.I errno
-is set to
-.B ERANGE
-(but see BUGS).
-An overflow floating-point exception
-.RB ( FE_OVERFLOW )
-is raised.
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.ad l
-.nh
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.BR y0 (),
-.BR y0f (),
-.BR y0l ()
-T} Thread safety MT-Safe
-T{
-.BR y1 (),
-.BR y1f (),
-.BR y1l ()
-T} Thread safety MT-Safe
-T{
-.BR yn (),
-.BR ynf (),
-.BR ynl ()
-T} Thread safety MT-Safe
-.TE
-.hy
-.ad
-.sp 1
-.SH STANDARDS
-.TP
-.BR y0 ()
-.TQ
-.BR y1 ()
-.TQ
-.BR yn ()
-POSIX.1-2008.
-.TP
-Others:
-BSD.
-.SH HISTORY
-.TP
-.BR y0 ()
-.TQ
-.BR y1 ()
-.TQ
-.BR yn ()
-SVr4, 4.3BSD,
-POSIX.1-2001.
-.TP
-Others:
-BSD.
-.SH BUGS
-Before glibc 2.19,
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=6807
-these functions misdiagnosed pole errors:
-.I errno
-was set to
-.BR EDOM ,
-instead of
-.B ERANGE
-and no
-.B FE_DIVBYZERO
-exception was raised.
-.PP
-Before glibc 2.17,
-.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6808
-did not set
-.I errno
-for "range error: result underflow".
-.PP
-In glibc 2.3.2 and earlier,
-.\" Actually, 2.3.2 is the earliest test result I have; so yet
-.\" to confirm if this error occurs only in glibc 2.3.2.
-these functions do not raise an invalid floating-point exception
-.RB ( FE_INVALID )
-when a domain error occurs.
-.SH SEE ALSO
-.BR j0 (3)
diff --git a/man3/y0f.3 b/man3/y0f.3
deleted file mode 100644
index 88b3c9990..000000000
--- a/man3/y0f.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/y0.3
diff --git a/man3/y0l.3 b/man3/y0l.3
deleted file mode 100644
index 88b3c9990..000000000
--- a/man3/y0l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/y0.3
diff --git a/man3/y1.3 b/man3/y1.3
deleted file mode 100644
index 88b3c9990..000000000
--- a/man3/y1.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/y0.3
diff --git a/man3/y1f.3 b/man3/y1f.3
deleted file mode 100644
index 88b3c9990..000000000
--- a/man3/y1f.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/y0.3
diff --git a/man3/y1l.3 b/man3/y1l.3
deleted file mode 100644
index 88b3c9990..000000000
--- a/man3/y1l.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/y0.3
diff --git a/man3/yn.3 b/man3/yn.3
deleted file mode 100644
index 88b3c9990..000000000
--- a/man3/yn.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/y0.3
diff --git a/man3/ynf.3 b/man3/ynf.3
deleted file mode 100644
index 88b3c9990..000000000
--- a/man3/ynf.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/y0.3
diff --git a/man3/ynl.3 b/man3/ynl.3
deleted file mode 100644
index 88b3c9990..000000000
--- a/man3/ynl.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/y0.3
diff --git a/man3/zustr2stp.3 b/man3/zustr2stp.3
deleted file mode 100644
index beb850746..000000000
--- a/man3/zustr2stp.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/string_copying.7
diff --git a/man3/zustr2ustp.3 b/man3/zustr2ustp.3
deleted file mode 100644
index beb850746..000000000
--- a/man3/zustr2ustp.3
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/string_copying.7
diff --git a/man3const/EOF.3const b/man3const/EOF.3const
deleted file mode 100644
index 3f1146ea8..000000000
--- a/man3const/EOF.3const
+++ /dev/null
@@ -1,42 +0,0 @@
-.\" Copyright (c) 2022 by Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH EOF 3const (date) "Linux man-pages (unreleased)"
-.SH NAME
-EOF \- end of file or error indicator
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BR "#define EOF " "/* ... */"
-.fi
-.SH DESCRIPTION
-.B EOF
-represents the end of an input file, or an error indication.
-It is a negative value, of type
-.IR int .
-.PP
-.B EOF
-is not a character
-(it can't be represented by
-.IR "unsigned char" ).
-It is instead a sentinel value outside of the valid range for valid characters.
-.SH CONFORMING TO
-C99 and later;
-POSIX.1-2001 and later.
-.SH CAVEATS
-Programs can't pass this value to an output function
-to "write" the end of a file.
-That would likely result in undefined behavior.
-Instead,
-closing the writing stream or file descriptor
-that refers to such file
-is the way to signal the end of that file.
-.SH SEE ALSO
-.BR feof (3),
-.BR fgetc (3)
diff --git a/man3const/EXIT_FAILURE.3const b/man3const/EXIT_FAILURE.3const
deleted file mode 100644
index ba0d62df9..000000000
--- a/man3const/EXIT_FAILURE.3const
+++ /dev/null
@@ -1 +0,0 @@
-.so man3const/EXIT_SUCCESS.3const
diff --git a/man3const/EXIT_SUCCESS.3const b/man3const/EXIT_SUCCESS.3const
deleted file mode 100644
index 067e0b689..000000000
--- a/man3const/EXIT_SUCCESS.3const
+++ /dev/null
@@ -1,61 +0,0 @@
-.\" Copyright (c) 2022 by Thomas Voss <mail@thomasvoss.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH EXIT_SUCCESS 3const (date) "Linux man-pages (unreleased)"
-.SH NAME
-EXIT_SUCCESS, EXIT_FAILURE \- termination status constants
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <stdlib.h>
-.PP
-.BR "#define EXIT_SUCCESS " 0
-.BR "#define EXIT_FAILURE " "/* nonzero */"
-.fi
-.SH DESCRIPTION
-.B EXIT_SUCCESS
-and
-.B EXIT_FAILURE
-represent a successful and unsuccessful exit status respectively,
-and can be used as arguments to the
-.BR exit (3)
-function.
-.SH CONFORMING TO
-C99 and later;
-POSIX.1-2001 and later.
-.SH EXAMPLES
-.\" SRC BEGIN (EXIT_SUCCESS.c)
-.EX
-#include <stdio.h>
-#include <stdlib.h>
-\&
-int
-main(int argc, char *argv[])
-{
- FILE *fp;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s <file>\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- fp = fopen(argv[1], "r");
- if (fp == NULL) {
- perror(argv[1]);
- exit(EXIT_FAILURE);
- }
-\&
- /* Other code omitted */
-\&
- fclose(fp);
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR exit (3),
-.BR sysexits.h (3head)
diff --git a/man3const/NULL.3const b/man3const/NULL.3const
deleted file mode 100644
index 3b10bd5ed..000000000
--- a/man3const/NULL.3const
+++ /dev/null
@@ -1,74 +0,0 @@
-.\" Copyright (c) 2022 by Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH NULL 3const (date) "Linux man-pages (unreleased)"
-.SH NAME
-NULL \- null pointer constant
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <stddef.h>
-.PP
-.B "#define NULL ((void *) 0)"
-.fi
-.SH DESCRIPTION
-.B NULL
-represents a null pointer constant,
-that is, a pointer that does not point to anything.
-.SH CONFORMING TO
-C99 and later;
-POSIX.1-2001 and later.
-.SH NOTES
-The following headers also provide
-.BR NULL :
-.IR <locale.h> ,
-.IR <stdio.h> ,
-.IR <stdlib.h> ,
-.IR <string.h> ,
-.IR <time.h> ,
-.IR <unistd.h> ,
-and
-.IR <wchar.h> .
-.SH CAVEATS
-It is undefined behavior to dereference a null pointer,
-and that usually causes a segmentation fault in practice.
-.PP
-It is also undefined behavior to perform pointer arithmetic on it.
-.PP
-.I NULL \- NULL
-is undefined behavior, according to ISO C, but is defined to be 0 in C++.
-.PP
-To avoid confusing human readers of the code,
-do not compare pointer variables to
-.BR 0 ,
-and do not assign
-.B 0
-to them.
-Instead, always use
-.BR NULL .
-.PP
-.B NULL
-shouldn't be confused with
-.BR NUL ,
-which is an
-.BR ascii (7)
-character,
-represented in C as
-.BR \[aq]\e0\[aq] .
-.SH BUGS
-When it is necessary to set a pointer variable to a null pointer,
-it is not enough to use
-.BR memset (3)
-to zero the pointer
-(this is usually done when zeroing a struct that contains pointers),
-since ISO C and POSIX don't guarantee that a bit pattern of all 0s
-represent a null pointer.
-See the EXAMPLES section in
-.BR getaddrinfo (3)
-for an example program that does this correctly.
-.SH SEE ALSO
-.BR void (3type)
diff --git a/man3const/PA_CHAR.3const b/man3const/PA_CHAR.3const
deleted file mode 100644
index ad10bad38..000000000
--- a/man3const/PA_CHAR.3const
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3const/PA_DOUBLE.3const b/man3const/PA_DOUBLE.3const
deleted file mode 100644
index ad10bad38..000000000
--- a/man3const/PA_DOUBLE.3const
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3const/PA_FLAG_LONG.3const b/man3const/PA_FLAG_LONG.3const
deleted file mode 100644
index ad10bad38..000000000
--- a/man3const/PA_FLAG_LONG.3const
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3const/PA_FLAG_LONG_DOUBLE.3const b/man3const/PA_FLAG_LONG_DOUBLE.3const
deleted file mode 100644
index ad10bad38..000000000
--- a/man3const/PA_FLAG_LONG_DOUBLE.3const
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3const/PA_FLAG_LONG_LONG.3const b/man3const/PA_FLAG_LONG_LONG.3const
deleted file mode 100644
index ad10bad38..000000000
--- a/man3const/PA_FLAG_LONG_LONG.3const
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3const/PA_FLAG_PTR.3const b/man3const/PA_FLAG_PTR.3const
deleted file mode 100644
index ad10bad38..000000000
--- a/man3const/PA_FLAG_PTR.3const
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3const/PA_FLAG_SHORT.3const b/man3const/PA_FLAG_SHORT.3const
deleted file mode 100644
index ad10bad38..000000000
--- a/man3const/PA_FLAG_SHORT.3const
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3const/PA_FLOAT.3const b/man3const/PA_FLOAT.3const
deleted file mode 100644
index ad10bad38..000000000
--- a/man3const/PA_FLOAT.3const
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3const/PA_INT.3const b/man3const/PA_INT.3const
deleted file mode 100644
index ad10bad38..000000000
--- a/man3const/PA_INT.3const
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3const/PA_LAST.3const b/man3const/PA_LAST.3const
deleted file mode 100644
index ad10bad38..000000000
--- a/man3const/PA_LAST.3const
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3const/PA_POINTER.3const b/man3const/PA_POINTER.3const
deleted file mode 100644
index ad10bad38..000000000
--- a/man3const/PA_POINTER.3const
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3const/PA_STRING.3const b/man3const/PA_STRING.3const
deleted file mode 100644
index ad10bad38..000000000
--- a/man3const/PA_STRING.3const
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3const/PA_WCHAR.3const b/man3const/PA_WCHAR.3const
deleted file mode 100644
index ad10bad38..000000000
--- a/man3const/PA_WCHAR.3const
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3const/PA_WSTRING.3const b/man3const/PA_WSTRING.3const
deleted file mode 100644
index ad10bad38..000000000
--- a/man3const/PA_WSTRING.3const
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3head/printf.h.3head b/man3head/printf.h.3head
deleted file mode 100644
index 2729a0184..000000000
--- a/man3head/printf.h.3head
+++ /dev/null
@@ -1,582 +0,0 @@
-.\" Copyright (C) 2022 Alejandro Colomar <alx.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH printf.h 3head 2022-09-18 "Linux man-pages (unreleased)"
-.SH NAME
-printf.h,
-\%register_printf_specifier,
-\%register_printf_modifier,
-\%register_printf_type,
-\%printf_function,
-\%printf_arginfo_size_function,
-\%printf_va_arg_function,
-\%printf_info,
-\%PA_INT,
-\%PA_CHAR,
-\%PA_WCHAR,
-\%PA_STRING,
-\%PA_WSTRING,
-\%PA_POINTER,
-\%PA_FLOAT,
-\%PA_DOUBLE,
-\%PA_LAST,
-\%PA_FLAG_LONG_LONG,
-\%PA_FLAG_LONG_DOUBLE,
-\%PA_FLAG_LONG,
-\%PA_FLAG_SHORT,
-\%PA_FLAG_PTR
-\- define custom behavior for printf-like functions
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <printf.h>
-.PP
-.BI "int register_printf_specifier(int " spec ", printf_function " func ,
-.BI " printf_arginfo_size_function " arginfo );
-.BI "int register_printf_modifier(const wchar_t *" str );
-.BI "int register_printf_type(printf_va_arg_function " fct );
-.fi
-.SS Callbacks
-.nf
-.BI "typedef int printf_function(FILE *" stream ", const struct printf_info *" info ,
-.BI " const void *const " args []);
-.BI "typedef int printf_arginfo_size_function(const struct printf_info *" info ,
-.BI " size_t " n ", int " argtypes [ n "], int " size [ n ]);
-.BI "typedef void printf_va_arg_function(void *" mem ", va_list *" ap );
-.fi
-.SS Types
-.EX
-.B struct printf_info {
-.BR " int prec; " "// Precision"
-.BR " int width; " "// Width"
-.BR " wchar_t spec; " "// Format letter"
-.BR " unsigned int is_long_double:1;" "// " L " or " ll " flag"
-.BR " unsigned int is_short:1; " "// " h " flag"
-.BR " unsigned int is_long:1; " "// " l " flag"
-.BR " unsigned int alt:1; " "// " # " flag"
-.BR " unsigned int space:1; " "// Space flag"
-.BR " unsigned int left:1; " "// " - " flag"
-.BR " unsigned int showsign:1; " "// " + " flag"
-.BR " unsigned int group:1; " "// " \[aq] " flag"
-.BR " unsigned int extra:1; " "// For special use"
-.BR " unsigned int is_char:1; " "// " hh " flag"
-.BR " unsigned int wide:1; " "// True for wide character streams"
-.BR " unsigned int i18n:1; " "// " I " flag"
-.BR " unsigned int is_binary128:1; " "/* Floating-point argument is"
-.BR " " " ABI-compatible with"
-.BR " " " IEC 60559 binary128 */"
-.BR " unsigned short user; " "// Bits for user-installed modifiers"
-.BR " wchar_t pad; " "// Padding character"
-.B };
-.EE
-.SS Constants
-.EX
-.BR "#define PA_FLAG_LONG_LONG " "/* ... */"
-.BR "#define PA_FLAG_LONG_DOUBLE " "/* ... */"
-.BR "#define PA_FLAG_LONG " "/* ... */"
-.BR "#define PA_FLAG_SHORT " "/* ... */"
-.BR "#define PA_FLAG_PTR " "/* ... */"
-.EE
-.SH DESCRIPTION
-These functions serve to extend and/or modify the behavior of the
-.BR printf (3)
-family of functions.
-.SS register_printf_specifier()
-This function registers a custom conversion specifier for the
-.BR printf (3)
-family of functions.
-.TP
-.I spec
-The character which will be used as a conversion specifier in the format string.
-.TP
-.I func
-Callback function that will be executed by the
-.BR printf (3)
-family of functions
-to format the input arguments into the output
-.IR stream .
-.RS
-.TP
-.I stream
-Output stream where the formatted output should be printed.
-This stream transparently represents the output,
-even in the case of functions that write to a string.
-.TP
-.I info
-Structure that holds context information,
-including the modifiers specified in the format string.
-This holds the same contents as in
-.IR arginfo .
-.TP
-.I args
-Array of pointers to the arguments to the
-.BR printf (3)\c
--like function.
-.RE
-.TP
-.I arginfo
-Callback function that will be executed by the
-.BR printf (3)
-family of functions
-to know how many arguments should be parsed for the custom specifier
-and also their types.
-.RS
-.TP
-.I info
-Structure that holds context information,
-including the modifiers specified in the format string.
-This holds the same contents as in
-.IR func .
-.TP
-.I n
-Number of arguments remaining to be parsed.
-.TP
-.I argtypes
-This array should be set to
-define the type of each of the arguments that will be parsed.
-Each element in the array represents one of the arguments to be parsed,
-in the same order that they are passed to the
-.BR printf (3)\c
--like function.
-Each element should be set to a base type
-.RB ( PA_ *)
-from the enum above,
-or a custom one,
-and optionally ORed with an appropriate length modifier
-.RB ( PA_FLAG_ *).
-.RS
-.PP
-The type is determined by using one of the following constants:
-.TP
-.B PA_INT
-.IR int .
-.TP
-.B PA_CHAR
-.IR int ,
-cast to
-.IR char .
-.TP
-.B PA_WCHAR
-.IR wchar_t .
-.TP
-.B PA_STRING
-.IR "const char\~*" ,
-a \(aq\e0\(aq-terminated string.
-.TP
-.B PA_WSTRING
-.IR "const wchar_t\~*" ,
-a wide character L\(aq\e0\(aq-terminated string.
-.TP
-.B PA_POINTER
-.IR void\~* .
-.TP
-.B PA_FLOAT
-.IR float .
-.TP
-.B PA_DOUBLE
-.IR double .
-.TP
-.B PA_LAST
-TODO.
-.RE
-.TP
-.I size
-For user-defined types,
-the size of the type (in bytes) should also be specified through this array.
-Otherwise, leave it unused.
-.RE
-.PP
-.I arginfo
-is called before
-.IR func ,
-and prepares some information needed to call
-.IR func .
-.SS register_printf_modifier()
-TODO
-.SS register_printf_type()
-TODO
-.SH RETURN VALUE
-.BR \%register_printf_specifier (),
-.BR \%register_printf_modifier (),
-and
-.BR \%register_printf_type ()
-return zero on success, or \-1 on error.
-.SS Callbacks
-The callback of type
-.I printf_function
-should return the number of characters written,
-or \-1 on error.
-.PP
-The callback of type
-.I \%printf_arginfo_size_function
-should return the number of arguments to be parsed by this specifier.
-It also passes information about the type of those arguments
-to the caller through
-.IR argtypes .
-On error, it should return \-1.
-.SH ERRORS
-.TP
-.B EINVAL
-The specifier was not a valid character.
-.SH STANDARDS
-GNU.
-.SH HISTORY
-.BR \%register_printf_function (3)
-is an older function similar to
-.BR \%register_printf_specifier (),
-and is now deprecated.
-That function can't handle user-defined types.
-.PP
-.BR \%register_printf_specifier ()
-superseeds
-.BR \%register_printf_function (3).
-.SH EXAMPLES
-The following example program registers the 'b' and 'B' specifiers
-to print integers in binary format,
-mirroring rules for other unsigned conversion specifiers like 'x' and 'u'.
-This can be used to print in binary prior to C23.
-.PP
-.\" SRC BEGIN (register_printf_specifier.c)
-.EX
-/* This code is in the public domain */
-\&
-#include <err.h>
-#include <limits.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/param.h>
-\&
-#include <printf.h>
-\&
-#define GROUP_SEP \[aq]\e\[aq]\[aq]
-\&
-struct Printf_Pad {
- char ch;
- size_t len;
-};
-\&
-static int b_printf(FILE *stream, const struct printf_info *info,
- const void *const args[]);
-static int b_arginf_sz(const struct printf_info *info,
- size_t n, int argtypes[n], int size[n]);
-\&
-static uintmax_t b_value(const struct printf_info *info,
- const void *arg);
-static size_t b_bin_repr(char bin[UINTMAX_WIDTH],
- const struct printf_info *info, const void *arg);
-static size_t b_bin_len(const struct printf_info *info,
- ptrdiff_t min_len);
-static size_t b_pad_len(const struct printf_info *info,
- ptrdiff_t bin_len);
-static ssize_t b_print_prefix(FILE *stream,
- const struct printf_info *info);
-static ssize_t b_pad_zeros(FILE *stream, const struct printf_info *info,
- ptrdiff_t min_len);
-static ssize_t b_print_number(FILE *stream,
- const struct printf_info *info,
- const char bin[UINTMAX_WIDTH],
- size_t min_len, size_t bin_len);
-static char pad_ch(const struct printf_info *info);
-static ssize_t pad_spaces(FILE *stream, size_t pad_len);
-\&
-int
-main(void)
-{
- if (register_printf_specifier(\[aq]b\[aq], b_printf, b_arginf_sz) == \-1)
- err(EXIT_FAILURE, "register_printf_specifier(\[aq]b\[aq], ...)");
- if (register_printf_specifier(\[aq]B\[aq], b_printf, b_arginf_sz) == \-1)
- err(EXIT_FAILURE, "register_printf_specifier(\[aq]B\[aq], ...)");
-\&
- printf("....----....----....----....----\en");
- printf("%llb;\en", 0x5Ellu);
- printf("%lB;\en", 0x5Elu);
- printf("%b;\en", 0x5Eu);
- printf("%hB;\en", 0x5Eu);
- printf("%hhb;\en", 0x5Eu);
- printf("%jb;\en", (uintmax_t)0x5E);
- printf("%zb;\en", (size_t)0x5E);
- printf("....----....----....----....----\en");
- printf("%#b;\en", 0x5Eu);
- printf("%#B;\en", 0x5Eu);
- printf("....----....----....----....----\en");
- printf("%10b;\en", 0x5Eu);
- printf("%010b;\en", 0x5Eu);
- printf("%.10b;\en", 0x5Eu);
- printf("....----....----....----....----\en");
- printf("%\-10B;\en", 0x5Eu);
- printf("....----....----....----....----\en");
- printf("%\[aq]B;\en", 0x5Eu);
- printf("....----....----....----....----\en");
- printf("....----....----....----....----\en");
- printf("%#16.12b;\en", 0xAB);
- printf("%\-#\[aq]20.12b;\en", 0xAB);
- printf("%#\[aq]020B;\en", 0xAB);
- printf("....----....----....----....----\en");
- printf("%#020B;\en", 0xAB);
- printf("%\[aq]020B;\en", 0xAB);
- printf("%020B;\en", 0xAB);
- printf("....----....----....----....----\en");
- printf("%#021B;\en", 0xAB);
- printf("%\[aq]021B;\en", 0xAB);
- printf("%021B;\en", 0xAB);
- printf("....----....----....----....----\en");
- printf("%#022B;\en", 0xAB);
- printf("%\[aq]022B;\en", 0xAB);
- printf("%022B;\en", 0xAB);
- printf("....----....----....----....----\en");
- printf("%#023B;\en", 0xAB);
- printf("%\[aq]023B;\en", 0xAB);
- printf("%023B;\en", 0xAB);
- printf("....----....----....----....----\en");
- printf("%\-#\[aq]19.11b;\en", 0xAB);
- printf("%#\[aq]019B;\en", 0xAB);
- printf("%#019B;\en", 0xAB);
- printf("....----....----....----....----\en");
- printf("%\[aq]019B;\en", 0xAB);
- printf("%019B;\en", 0xAB);
- printf("%#016b;\en", 0xAB);
- printf("....----....----....----....----\en");
-\&
- return 0;
-}
-\&
-static int
-b_printf(FILE *stream, const struct printf_info *info,
- const void *const args[])
-{
- char bin[UINTMAX_WIDTH];
- size_t min_len, bin_len;
- ssize_t len, tmp;
- struct Printf_Pad pad = {0};
-\&
- len = 0;
-\&
- min_len = b_bin_repr(bin, info, args[0]);
- bin_len = b_bin_len(info, min_len);
-\&
- pad.ch = pad_ch(info);
- if (pad.ch == \[aq] \[aq])
- pad.len = b_pad_len(info, bin_len);
-\&
- /* Padding with \[aq] \[aq] (right aligned) */
- if ((pad.ch == \[aq] \[aq]) && !info->left) {
- tmp = pad_spaces(stream, pad.len);
- if (tmp == EOF)
- return EOF;
- len += tmp;
- }
-\&
- /* "0b"/"0B" prefix */
- if (info->alt) {
- tmp = b_print_prefix(stream, info);
- if (tmp == EOF)
- return EOF;
- len += tmp;
- }
-\&
- /* Padding with \[aq]0\[aq] */
- if (pad.ch == \[aq]0\[aq]) {
- tmp = b_pad_zeros(stream, info, min_len);
- if (tmp == EOF)
- return EOF;
- len += tmp;
- }
-\&
- /* Print number (including leading 0s to fill precision) */
- tmp = b_print_number(stream, info, bin, min_len, bin_len);
- if (tmp == EOF)
- return EOF;
- len += tmp;
-\&
- /* Padding with \[aq] \[aq] (left aligned) */
- if (info\->left) {
- tmp = pad_spaces(stream, pad.len);
- if (tmp == EOF)
- return EOF;
- len += tmp;
- }
-\&
- return len;
-}
-\&
-static int
-b_arginf_sz(const struct printf_info *info, size_t n, int argtypes[n],
- [[maybe_unused]] int size[n])
-{
- if (n < 1)
- return \-1;
-\&
- if (info\->is_long_double)
- argtypes[0] = PA_INT | PA_FLAG_LONG_LONG;
- else if (info\->is_long)
- argtypes[0] = PA_INT | PA_FLAG_LONG;
- else
- argtypes[0] = PA_INT;
-\&
- return 1;
-}
-\&
-static uintmax_t
-b_value(const struct printf_info *info, const void *arg)
-{
- if (info\->is_long_double)
- return *(const unsigned long long *)arg;
- if (info\->is_long)
- return *(const unsigned long *)arg;
-\&
- /* short and char are both promoted to int */
- return *(const unsigned int *)arg;
-}
-\&
-static size_t
-b_bin_repr(char bin[UINTMAX_WIDTH],
- const struct printf_info *info, const void *arg)
-{
- size_t min_len;
- uintmax_t val;
-\&
- val = b_value(info, arg);
-\&
- bin[0] = \[aq]0\[aq];
- for (min_len = 0; val; min_len++) {
- bin[min_len] = \[aq]0\[aq] + (val % 2);
- val >>= 1;
- }
-\&
- return MAX(min_len, 1);
-}
-\&
-static size_t
-b_bin_len(const struct printf_info *info, ptrdiff_t min_len)
-{
- return MAX(info\->prec, min_len);
-}
-\&
-static size_t
-b_pad_len(const struct printf_info *info, ptrdiff_t bin_len)
-{
- ptrdiff_t pad_len;
-\&
- pad_len = info\->width \- bin_len;
- if (info\->alt)
- pad_len \-= 2;
- if (info\->group)
- pad_len \-= (bin_len \- 1) / 4;
-\&
- return MAX(pad_len, 0);
-}
-\&
-static ssize_t
-b_print_prefix(FILE *stream, const struct printf_info *info)
-{
- ssize_t len;
-\&
- len = 0;
- if (fputc(\[aq]0\[aq], stream) == EOF)
- return EOF;
- len++;
- if (fputc(info\->spec, stream) == EOF)
- return EOF;
- len++;
-\&
- return len;
-}
-\&
-static ssize_t
-b_pad_zeros(FILE *stream, const struct printf_info *info,
- ptrdiff_t min_len)
-{
- ssize_t len;
- ptrdiff_t tmp;
-\&
- len = 0;
- tmp = info\->width \- (info\->alt * 2);
- if (info\->group)
- tmp \-= tmp / 5 \- !(tmp % 5);
- for (ptrdiff_t i = tmp \- 1; i > min_len \- 1; i\-\-) {
- if (fputc(\[aq]0\[aq], stream) == EOF)
- return EOF;
- len++;
-\&
- if (!info\->group || (i % 4))
- continue;
- if (fputc(GROUP_SEP, stream) == EOF)
- return EOF;
- len++;
- }
-\&
- return len;
-}
-\&
-static ssize_t
-b_print_number(FILE *stream, const struct printf_info *info,
- const char bin[UINTMAX_WIDTH],
- size_t min_len, size_t bin_len)
-{
- ssize_t len;
-\&
- len = 0;
-\&
- /* Print leading zeros to fill precision */
- for (size_t i = bin_len \- 1; i > min_len \- 1; i\-\-) {
- if (fputc(\[aq]0\[aq], stream) == EOF)
- return EOF;
- len++;
-\&
- if (!info\->group || (i % 4))
- continue;
- if (fputc(GROUP_SEP, stream) == EOF)
- return EOF;
- len++;
- }
-\&
- /* Print number */
- for (size_t i = min_len \- 1; i < min_len; i\-\-) {
- if (fputc(bin[i], stream) == EOF)
- return EOF;
- len++;
-\&
- if (!info\->group || (i % 4) || !i)
- continue;
- if (fputc(GROUP_SEP, stream) == EOF)
- return EOF;
- len++;
- }
-\&
- return len;
-}
-\&
-static char
-pad_ch(const struct printf_info *info)
-{
- if ((info\->prec != \-1) || (info\->pad == \[aq] \[aq]) || info\->left)
- return \[aq] \[aq];
- return \[aq]0\[aq];
-}
-\&
-static ssize_t
-pad_spaces(FILE *stream, size_t pad_len)
-{
- ssize_t len;
-\&
- len = 0;
- for (size_t i = pad_len - 1; i < pad_len; i\-\-) {
- if (fputc(\[aq] \[aq], stream) == EOF)
- return EOF;
- len++;
- }
-\&
- return len;
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.BR asprintf (3),
-.BR printf (3),
-.BR wprintf (3)
diff --git a/man3head/sysexits.h.3head b/man3head/sysexits.h.3head
deleted file mode 100644
index 4014b8028..000000000
--- a/man3head/sysexits.h.3head
+++ /dev/null
@@ -1,200 +0,0 @@
-'\" t
-.\" Copyright (c) 1996 Joerg Wunsch
-.\" Copyright (c) 2022 Alejandro Colomar <alx@kernel.org>
-.\"
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-2-Clause
-.\"
-.\" Rewritten for the Linux man-pages by Alejandro Colomar
-.\"
-.TH sysexits.h 3head (date) "Linux man-pages (unreleased)"
-.SH NAME
-sysexits.h \- exit codes for programs
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <sysexits.h>
-.fi
-.TS
-lB2 lB2 l1 lX.
-#define EX_OK 0 /* T{
-successful termination */
-T}
-.PP
-#define EX__BASE 64 /* T{
-base value for error messages */
-T}
-.PP
-#define EX_USAGE 64 /* T{
-command line usage error */
-T}
-#define EX_DATAERR 65 /* T{
-data format error */
-T}
-#define EX_NOINPUT 66 /* T{
-cannot open input */
-T}
-#define EX_NOUSER 67 /* T{
-addressee unknown */
-T}
-#define EX_NOHOST 68 /* T{
-host name unknown */
-T}
-#define EX_UNAVAILABLE 69 /* T{
-service unavailable */
-T}
-#define EX_SOFTWARE 70 /* T{
-internal software error */
-T}
-#define EX_OSERR 71 /* T{
-system error (e.g., can't fork) */
-T}
-#define EX_OSFILE 72 /* T{
-critical OS file missing */
-T}
-#define EX_CANTCREAT 73 /* T{
-can't create (user) output file */
-T}
-#define EX_IOERR 74 /* T{
-input/output error */
-T}
-#define EX_TEMPFAIL 75 /* T{
-temp failure; user is invited to retry */
-T}
-#define EX_PROTOCOL 76 /* T{
-remote error in protocol */
-T}
-#define EX_NOPERM 77 /* T{
-permission denied */
-T}
-#define EX_CONFIG 78 /* T{
-configuration error */
-T}
-.PP
-.T&
-lB2 l2 l1 lX.
-#define EX__MAX ... /* T{
-maximum listed value */
-T}
-.TE
-.SH DESCRIPTION
-A few programs exit with the following error codes.
-.PP
-The successful exit is always indicated by a status of
-.BR 0 ,
-or
-.B EX_OK
-(equivalent to
-.B EXIT_SUCCESS
-from
-.IR <stdlib.h> ).
-Error numbers begin at
-.B EX__BASE
-to reduce the possibility of clashing with other exit statuses
-that random programs may already return.
-The meaning of the code is approximately as follows:
-.TP
-.B EX_USAGE
-The command was used incorrectly,
-e.g.,
-with the wrong number of arguments,
-a bad flag,
-bad syntax in a parameter,
-or whatever.
-.TP
-.B EX_DATAERR
-The input data was incorrect in some way.
-This should only be used for user's data and not system files.
-.TP
-.B EX_NOINPUT
-An input file (not a system file) did not exist or was not readable.
-This could also include errors like "No message" to a mailer
-(if it cared to catch it).
-.TP
-.B EX_NOUSER
-The user specified did not exist.
-This might be used for mail addresses or remote logins.
-.TP
-.B EX_NOHOST
-The host specified did not exist.
-This is used in mail addresses or network requests.
-.TP
-.B EX_UNAVAILABLE
-A service is unavailable.
-This can occur if a support program or file does not exist.
-This can also be used as a catch-all message
-when something you wanted to do doesn't work, but you don't know why.
-.TP
-.B EX_SOFTWARE
-An internal software error has been detected.
-This should be limited to non-operating system related errors if possible.
-.TP
-.B EX_OSERR
-An operating system error has been detected.
-This is intended to be used for such things as
-"cannot fork",
-"cannot create pipe",
-or the like.
-It includes things like
-.BR getuid (2)
-returning a user that does not exist in the
-.BR passwd (5)
-file.
-.TP
-.B EX_OSFILE
-Some system file
-(e.g.,
-.IR /etc/passwd ,
-.IR /etc/utmp ,
-etc.)
-does not exist,
-cannot be opened,
-or has some sort of error (e.g., syntax error).
-.TP
-.B EX_CANTCREAT
-A (user specified) output file cannot be created.
-.TP
-.B EX_IOERR
-An error occurred while doing I/O on some file.
-.TP
-.B EX_TEMPFAIL
-Temporary failure,
-indicating something that is not really an error.
-For example that a mailer could not create a connection,
-and the request should be reattempted later.
-.TP
-.B EX_PROTOCOL
-The remote system returned something that
-was "not possible" during a protocol exchange.
-.TP
-.B EX_OSFILE
-You did not have sufficient permission to perform the operation.
-This is not intended for file system problems,
-which should use
-.B EX_NOINPUT
-or
-.BR EX_CANTCREAT ,
-but rather for higher level permissions.
-.TP
-.B EX_CONFIG
-Something was found in an unconfigured or misconfigured state.
-.PP
-The numerical values corresponding to the symbolical ones
-are given in parenthesis for easy reference.
-.SH STANDARDS
-BSD.
-.SH HISTORY
-The
-.I <sysexits.h>
-file appeared in 4.0BSD for use by the deliverymail utility,
-later renamed to
-.BR sendmail (8).
-.SH CAVEATS
-The choice of an appropriate exit value is often ambiguous.
-.SH SEE ALSO
-.BR err (3),
-.BR error (3),
-.BR exit (3)
diff --git a/man3type/FILE.3type b/man3type/FILE.3type
deleted file mode 100644
index 902557511..000000000
--- a/man3type/FILE.3type
+++ /dev/null
@@ -1,36 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH FILE 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-FILE \- input/output stream
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <stdio.h>
-.PP
-.BR typedef " /* ... */ " FILE;
-.fi
-.SH DESCRIPTION
-An object type used for streams.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C89, POSIX.1-2001.
-.SH NOTES
-The following header also provides this type:
-.IR <wchar.h> .
-.SH SEE ALSO
-.BR fclose (3),
-.BR flockfile (3),
-.BR fopen (3),
-.BR fprintf (3),
-.BR fread (3),
-.BR fscanf (3),
-.BR stdin (3),
-.BR stdio (3)
diff --git a/man3type/aiocb.3type b/man3type/aiocb.3type
deleted file mode 100644
index 945561710..000000000
--- a/man3type/aiocb.3type
+++ /dev/null
@@ -1,42 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH aiocb 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-aiocb \- asynchronous I/O control block
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.EX
-.B #include <aio.h>
-.PP
-.B struct aiocb {
-.BR " int aio_fildes;" " /* File descriptor */"
-.BR " off_t aio_offset;" " /* File offset */"
-.BR " volatile void *aio_buf;" " /* Location of buffer */"
-.BR " size_t aio_nbytes;" " /* Length of transfer */"
-.BR " int aio_reqprio;" " /* Request priority offset */"
-.BR " struct sigevent aio_sigevent;" " /* Signal number and value */"
-.BR " int aio_lio_opcode;" " /* Operation to be performed */"
-.B };
-.EE
-.SH DESCRIPTION
-For further information about this structure, see
-.BR aio (7).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH SEE ALSO
-.BR aio_cancel (3),
-.BR aio_error (3),
-.BR aio_fsync (3),
-.BR aio_read (3),
-.BR aio_return (3),
-.BR aio_suspend (3),
-.BR aio_write (3),
-.BR lio_listio (3)
diff --git a/man3type/blkcnt_t.3type b/man3type/blkcnt_t.3type
deleted file mode 100644
index 6b7836115..000000000
--- a/man3type/blkcnt_t.3type
+++ /dev/null
@@ -1,30 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH blkcnt_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-blkcnt_t \- file block counts
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.PP
-.BR typedef " /* ... */ " blkcnt_t;
-.fi
-.SH DESCRIPTION
-Used for file block counts.
-It is a signed integer type.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-The following header also provides this type:
-.IR <sys/stat.h> .
-.SH SEE ALSO
-.BR stat (3type)
diff --git a/man3type/blksize_t.3type b/man3type/blksize_t.3type
deleted file mode 100644
index 5c0a24e81..000000000
--- a/man3type/blksize_t.3type
+++ /dev/null
@@ -1,30 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH blksize_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-blksize_t \- file block sizes
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.PP
-.BR typedef " /* ... */ " blksize_t;
-.fi
-.SH DESCRIPTION
-Used for file block sizes.
-It is a signed integer type.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-The following header also provides this type:
-.IR <sys/stat.h> .
-.SH SEE ALSO
-.BR stat (3type)
diff --git a/man3type/cc_t.3type b/man3type/cc_t.3type
deleted file mode 100644
index f0c7a490c..000000000
--- a/man3type/cc_t.3type
+++ /dev/null
@@ -1,35 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH cc_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-cc_t, speed_t, tcflag_t \- terminal special characters, baud rates, modes
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <termios.h>
-.PP
-.BR typedef " /* ... */ " cc_t;
-.BR typedef " /* ... */ " speed_t;
-.BR typedef " /* ... */ " tcflag_t;
-.fi
-.SH DESCRIPTION
-.I cc_t
-is used for terminal special characters,
-.I speed_t
-for baud rates, and
-.I tcflag_t
-for modes.
-.PP
-All are unsigned integer types.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH SEE ALSO
-.BR termios (3)
diff --git a/man3type/clock_t.3type b/man3type/clock_t.3type
deleted file mode 100644
index 12da83de9..000000000
--- a/man3type/clock_t.3type
+++ /dev/null
@@ -1,37 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH clock_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-clock_t \- system time
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <time.h>
-.PP
-.BR typedef " /* ... */ " clock_t;
-.fi
-.SH DESCRIPTION
-Used for system time in clock ticks or
-.B CLOCKS_PER_SEC
-(defined in
-.IR <time.h> ).
-According to POSIX,
-it is an integer type or a real-floating type.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C89, POSIX.1-2001.
-.SH NOTES
-The following headers also provide this type:
-.I <sys/types.h>
-and
-.IR <sys/time.h> .
-.SH SEE ALSO
-.BR times (2),
-.BR clock (3)
diff --git a/man3type/clockid_t.3type b/man3type/clockid_t.3type
deleted file mode 100644
index 97ce86661..000000000
--- a/man3type/clockid_t.3type
+++ /dev/null
@@ -1,28 +0,0 @@
-.TH clockid_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-clockid_t \- clock ID for the clock and timer functions
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.PP
-.BR typedef " /* ... */ " clockid_t;
-.fi
-.SH DESCRIPTION
-Used for clock ID type in the clock and timer functions.
-It is defined as an arithmetic type.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-The following header also provides this type:
-.IR <time.h> .
-.SH SEE ALSO
-.BR clock_adjtime (2),
-.BR clock_getres (2),
-.BR clock_nanosleep (2),
-.BR timer_create (2),
-.BR clock_getcpuclockid (3)
diff --git a/man3type/dev_t.3type b/man3type/dev_t.3type
deleted file mode 100644
index 0a3df9353..000000000
--- a/man3type/dev_t.3type
+++ /dev/null
@@ -1,33 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH dev_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-dev_t \- device ID
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.PP
-.BR typedef " /* ... */ " dev_t;
-.fi
-.SH DESCRIPTION
-Used for device IDs.
-It is an integer type.
-For further details of this type, see
-.BR makedev (3).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-The following header also provides this type:
-.IR <sys/stat.h> .
-.SH SEE ALSO
-.BR mknod (2),
-.BR stat (3type)
diff --git a/man3type/div_t.3type b/man3type/div_t.3type
deleted file mode 100644
index d62ea2cca..000000000
--- a/man3type/div_t.3type
+++ /dev/null
@@ -1,58 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH div_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-div_t, ldiv_t, lldiv_t, imaxdiv_t \-
-quotient and remainder of an integer division
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.EX
-.B #include <stdlib.h>
-.PP
-.B typedef struct {
-.BR " int quot;" " /* Quotient */"
-.BR " int rem;" " /* Remainder */"
-.B } div_t;
-.PP
-.B typedef struct {
-.BR " long quot;" " /* Quotient */"
-.BR " long rem;" " /* Remainder */"
-.B } ldiv_t;
-.PP
-.B typedef struct {
-.BR " long long quot;" " /* Quotient */"
-.BR " long long rem;" " /* Remainder */"
-.B } lldiv_t;
-.PP
-.B #include <inttypes.h>
-.PP
-.B typedef struct {
-.BR " intmax_t quot;" " /* Quotient */"
-.BR " intmax_t rem;" " /* Remainder */"
-.B } imaxdiv_t;
-.EE
-.SH DESCRIPTION
-.RI [[ l ] l ] div_t
-is the type of the value returned by the
-.RB [[ l ] l ] div (3)
-function.
-.PP
-.I imaxdiv_t
-is the type of the value returned by the
-.BR imaxdiv (3)
-function.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR div (3),
-.BR imaxdiv (3),
-.BR ldiv (3),
-.BR lldiv (3)
diff --git a/man3type/double_t.3type b/man3type/double_t.3type
deleted file mode 100644
index 1bf1946eb..000000000
--- a/man3type/double_t.3type
+++ /dev/null
@@ -1,56 +0,0 @@
-'\" t
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH double_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-float_t, double_t \- most efficient floating types
-.SH LIBRARY
-Math library
-.RI ( libm )
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.PP
-.BR typedef " /* ... */ " float_t;
-.BR typedef " /* ... */ " double_t;
-.fi
-.SH DESCRIPTION
-The implementation's most efficient floating types at least as wide as
-.I float
-and
-.I double
-respectively.
-Their type depends on the value of the macro
-.B FLT_EVAL_METHOD
-(defined in
-.IR <float.h> ):
-.PP
-.TS
-lB rI rI.
-FLT_EVAL_METHOD float_t double_t
-.T&
-n rI rI.
-_
-0 float double
-1 double double
-2 long double long double
-.TE
-.PP
-For other values of
-.BR FLT_EVAL_METHOD ,
-the types of
-.I float_t
-and
-.I double_t
-are implementation-defined.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR float.h (0p),
-.BR math.h (0p)
diff --git a/man3type/epoll_data.3type b/man3type/epoll_data.3type
deleted file mode 100644
index 033a55fc4..000000000
--- a/man3type/epoll_data.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/epoll_event.3type
diff --git a/man3type/epoll_data_t.3type b/man3type/epoll_data_t.3type
deleted file mode 100644
index 033a55fc4..000000000
--- a/man3type/epoll_data_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/epoll_event.3type
diff --git a/man3type/epoll_event.3type b/man3type/epoll_event.3type
deleted file mode 100644
index efb229fd3..000000000
--- a/man3type/epoll_event.3type
+++ /dev/null
@@ -1,55 +0,0 @@
-.\" Copyright (c) 2022 by Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH epoll_event 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-epoll_event, epoll_data, epoll_data_t
-\- epoll event
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.EX
-.B #include <sys/epoll.h>
-.PP
-.B struct epoll_event {
-.BR " uint32_t events;" " /* Epoll events */"
-.BR " epoll_data_t data;" " /* User data variable */"
-.B };
-.PP
-.B union epoll_data {
-.B " void *ptr;"
-.B " int fd;"
-.B " uint32_t u32;"
-.B " uint64_t u64;"
-.B };
-.PP
-.B "typedef union epoll_data epoll_data_t;"
-.EE
-.SH DESCRIPTION
-The
-.I epoll_event
-structure specifies data that the kernel should save and
-return when the corresponding file descriptor becomes ready.
-.SH VERSIONS
-.SS C library/kernel differences
-The Linux kernel headers also provide this type,
-with a slightly different definition:
-.PP
-.in +4n
-.EX
-#include <linux/eventpoll.h>
-\&
-struct epoll_event {
- __poll_t events;
- __u64 data;
-};
-.EE
-.in
-.SH STANDARDS
-Linux.
-.SH SEE ALSO
-.BR epoll_wait (2),
-.BR epoll_ctl (7)
diff --git a/man3type/fenv_t.3type b/man3type/fenv_t.3type
deleted file mode 100644
index 9e2202257..000000000
--- a/man3type/fenv_t.3type
+++ /dev/null
@@ -1,35 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH fenv_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-fenv_t, fexcept_t \- floating-point environment
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <fenv.h>
-.PP
-.BR typedef " /* ... */ " fenv_t;
-.BR typedef " /* ... */ " fexcept_t;
-.fi
-.SH DESCRIPTION
-.I fenv_t
-represents the entire floating-point environment,
-including control modes and status flags.
-.PP
-.I fexcept_t
-represents the floating-point status flags collectively.
-.PP
-For further details see
-.BR fenv (3).
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.SH SEE ALSO
-.BR fenv (3)
diff --git a/man3type/fexcept_t.3type b/man3type/fexcept_t.3type
deleted file mode 100644
index 5bedba097..000000000
--- a/man3type/fexcept_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/fenv_t.3type
diff --git a/man3type/float_t.3type b/man3type/float_t.3type
deleted file mode 100644
index 104734cfe..000000000
--- a/man3type/float_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/double_t.3type
diff --git a/man3type/gid_t.3type b/man3type/gid_t.3type
deleted file mode 100644
index 52bae7406..000000000
--- a/man3type/gid_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/id_t.3type
diff --git a/man3type/id_t.3type b/man3type/id_t.3type
deleted file mode 100644
index 4c76ad2f6..000000000
--- a/man3type/id_t.3type
+++ /dev/null
@@ -1,110 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH id_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-pid_t, uid_t, gid_t, id_t \- process/user/group identifier
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.PP
-.BR typedef " /* ... */ " pid_t;
-.BR typedef " /* ... */ " uid_t;
-.BR typedef " /* ... */ " gid_t;
-.BR typedef " /* ... */ " id_t;
-.fi
-.SH DESCRIPTION
-.I pid_t
-is a type used for storing process IDs, process group IDs, and session IDs.
-It is a signed integer type.
-.PP
-.I uid_t
-is a type used to hold user IDs.
-It is an integer type.
-.PP
-.I gid_t
-is a type used to hold group IDs.
-It is an integer type.
-.PP
-.I id_t
-is a type used to hold a general identifier.
-It is an integer type that can be used to contain a
-.IR pid_t ,
-.IR uid_t ,
-or
-.IR gid_t .
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-The following headers also provide
-.IR pid_t :
-.IR <fcntl.h> ,
-.IR <sched.h> ,
-.IR <signal.h> ,
-.IR <spawn.h> ,
-.IR <sys/msg.h> ,
-.IR <sys/sem.h> ,
-.IR <sys/shm.h> ,
-.IR <sys/wait.h> ,
-.IR <termios.h> ,
-.IR <time.h> ,
-.IR <unistd.h> ,
-and
-.IR <utmpx.h> .
-.PP
-The following headers also provide
-.IR uid_t :
-.IR <pwd.h> ,
-.IR <signal.h> ,
-.IR <stropts.h> ,
-.IR <sys/ipc.h> ,
-.IR <sys/stat.h> ,
-and
-.IR <unistd.h> .
-.PP
-The following headers also provide
-.IR gid_t :
-.IR <grp.h> ,
-.IR <pwd.h> ,
-.IR <signal.h> ,
-.IR <stropts.h> ,
-.IR <sys/ipc.h> ,
-.IR <sys/stat.h> ,
-and
-.IR <unistd.h> .
-.PP
-The following header also provides
-.IR id_t :
-.IR <sys/resource.h> .
-.SH SEE ALSO
-.BR chown (2),
-.BR fork (2),
-.BR getegid (2),
-.BR geteuid (2),
-.BR getgid (2),
-.BR getgroups (2),
-.BR getpgid (2),
-.BR getpid (2),
-.BR getppid (2),
-.BR getpriority (2),
-.BR getpwnam (3),
-.BR getresgid (2),
-.BR getresuid (2),
-.BR getsid (2),
-.BR gettid (2),
-.BR getuid (2),
-.BR kill (2),
-.BR pidfd_open (2),
-.BR sched_setscheduler (2),
-.BR waitid (2),
-.BR getgrnam (3),
-.BR sigqueue (3),
-.BR credentials (7)
diff --git a/man3type/imaxdiv_t.3type b/man3type/imaxdiv_t.3type
deleted file mode 100644
index 3ab8f3447..000000000
--- a/man3type/imaxdiv_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/div_t.3type
diff --git a/man3type/in6_addr.3type b/man3type/in6_addr.3type
deleted file mode 100644
index 39e914c30..000000000
--- a/man3type/in6_addr.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/sockaddr.3type
diff --git a/man3type/in_addr.3type b/man3type/in_addr.3type
deleted file mode 100644
index 39e914c30..000000000
--- a/man3type/in_addr.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/sockaddr.3type
diff --git a/man3type/in_addr_t.3type b/man3type/in_addr_t.3type
deleted file mode 100644
index 39e914c30..000000000
--- a/man3type/in_addr_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/sockaddr.3type
diff --git a/man3type/in_port_t.3type b/man3type/in_port_t.3type
deleted file mode 100644
index 39e914c30..000000000
--- a/man3type/in_port_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/sockaddr.3type
diff --git a/man3type/int16_t.3type b/man3type/int16_t.3type
deleted file mode 100644
index a0d1a82b8..000000000
--- a/man3type/int16_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/intN_t.3type
diff --git a/man3type/int32_t.3type b/man3type/int32_t.3type
deleted file mode 100644
index a0d1a82b8..000000000
--- a/man3type/int32_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/intN_t.3type
diff --git a/man3type/int64_t.3type b/man3type/int64_t.3type
deleted file mode 100644
index a0d1a82b8..000000000
--- a/man3type/int64_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/intN_t.3type
diff --git a/man3type/int8_t.3type b/man3type/int8_t.3type
deleted file mode 100644
index a0d1a82b8..000000000
--- a/man3type/int8_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/intN_t.3type
diff --git a/man3type/intN_t.3type b/man3type/intN_t.3type
deleted file mode 100644
index 3a1e51518..000000000
--- a/man3type/intN_t.3type
+++ /dev/null
@@ -1,177 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH intN_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-intN_t, int8_t, int16_t, int32_t, int64_t,
-uintN_t, uint8_t, uint16_t, uint32_t, uint64_t
-\- fixed-width basic integer types
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <stdint.h>
-.PP
-.BR typedef " /* ... */ " int8_t;
-.BR typedef " /* ... */ " int16_t;
-.BR typedef " /* ... */ " int32_t;
-.BR typedef " /* ... */ " int64_t;
-.PP
-.BR typedef " /* ... */ " uint8_t;
-.BR typedef " /* ... */ " uint16_t;
-.BR typedef " /* ... */ " uint32_t;
-.BR typedef " /* ... */ " uint64_t;
-.PP
-.B "#define INT8_WIDTH 8"
-.B "#define INT16_WIDTH 16"
-.B "#define INT32_WIDTH 32"
-.B "#define INT64_WIDTH 64"
-.PP
-.B "#define UINT8_WIDTH 8"
-.B "#define UINT16_WIDTH 16"
-.B "#define UINT32_WIDTH 32"
-.B "#define UINT64_WIDTH 64"
-.PP
-.BR "#define INT8_MAX " "/* 2**(INT8_WIDTH - 1) - 1 */"
-.BR "#define INT16_MAX " "/* 2**(INT16_WIDTH - 1) - 1 */"
-.BR "#define INT32_MAX " "/* 2**(INT32_WIDTH - 1) - 1 */"
-.BR "#define INT64_MAX " "/* 2**(INT64_WIDTH - 1) - 1 */"
-.PP
-.BR "#define INT8_MIN " "/* - 2**(INT8_WIDTH - 1) */"
-.BR "#define INT16_MIN " "/* - 2**(INT16_WIDTH - 1) */"
-.BR "#define INT32_MIN " "/* - 2**(INT32_WIDTH - 1) */"
-.BR "#define INT64_MIN " "/* - 2**(INT64_WIDTH - 1) */"
-.PP
-.BR "#define UINT8_MAX " "/* 2**INT8_WIDTH - 1 */"
-.BR "#define UINT16_MAX " "/* 2**INT16_WIDTH - 1 */"
-.BR "#define UINT32_MAX " "/* 2**INT32_WIDTH - 1 */"
-.BR "#define UINT64_MAX " "/* 2**INT64_WIDTH - 1 */"
-.PP
-.BI "#define INT8_C(" c ") " c " ## " "\fR/* ... */\fP"
-.BI "#define INT16_C(" c ") " c " ## " "\fR/* ... */\fP"
-.BI "#define INT32_C(" c ") " c " ## " "\fR/* ... */\fP"
-.BI "#define INT64_C(" c ") " c " ## " "\fR/* ... */\fP"
-.PP
-.BI "#define UINT8_C(" c ") " c " ## " "\fR/* ... */\fP"
-.BI "#define UINT16_C(" c ") " c " ## " "\fR/* ... */\fP"
-.BI "#define UINT32_C(" c ") " c " ## " "\fR/* ... */\fP"
-.BI "#define UINT64_C(" c ") " c " ## " "\fR/* ... */\fP"
-.fi
-.SH DESCRIPTION
-.IR int N _t
-are
-signed integer types
-of a fixed width of exactly N bits,
-.I N
-being the value specified in its type name.
-They are be capable of storing values in the range
-.RB [ INT \fIN\fP _MIN ,
-.BR INT \fIN\fP _MAX ],
-substituting
-.I N
-by the appropriate number.
-.PP
-.IR uint N _t
-are
-unsigned integer types
-of a fixed width of exactly N bits,
-N being the value specified in its type name.
-They are capable of storing values in the range
-.RB [ 0 ,
-.BR UINT \fIN\fP _MAX ],
-substituting
-.I N
-by the appropriate number.
-.PP
-According to POSIX,
-.RI [ u ] int8_t ,
-.RI [ u ] int16_t ,
-and
-.RI [ u ] int32_t
-are required;
-.RI [ u ] int64_t
-are only required in implementations that provide integer types with width 64;
-and all other types of this form are optional.
-.PP
-The macros
-.RB [ U ] INT \fIN\fP _WIDTH
-expand to the width in bits of these types
-.RI ( N ).
-.PP
-The macros
-.RB [ U ] INT \fIN\fP _MAX
-expand to the maximum value that these types can hold.
-.PP
-The macros
-.BI INT N _MIN
-expand to the minimum value that these types can hold.
-.PP
-The macros
-.RB [ U ] INT \fIN\fP _C ()
-expand their argument to an integer constant of type
-.RI [ u ] int N _t .
-.PP
-The length modifiers for the
-.RI [ u ] int N _t
-types for the
-.BR printf (3)
-family of functions
-are expanded by macros of the forms
-.BR PRId \fIN\fP,
-.BR PRIi \fIN\fP,
-.BR PRIu \fIN\fP,
-and
-.BI PRIx N
-(defined in
-.IR <inttypes.h> );
-resulting for example in
-.B %"PRId64"
-or
-.B %"PRIi64"
-for printing
-.I int64_t
-values.
-The length modifiers for the
-.RI [ u ] int N _t
-types for the
-.BR scanf (3)
-family of functions
-are expanded by macros of the forms
-.BR SCNd \fIN\fP,
-.BR SCNi \fIN\fP,
-.BR SCNu \fIN\fP,
-and
-.BI SCNx N,
-(defined in
-.IR <inttypes.h> );
-resulting for example in
-.B %"SCNu8"
-or
-.B %"SCNx8"
-for scanning
-.I uint8_t
-values.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.PP
-The
-.RB [ U ] INT \fIN\fP _WIDTH
-macros were added in C23.
-.SH NOTES
-The following header also provides these types:
-.IR <inttypes.h> .
-.I <arpa/inet.h>
-also provides
-.I uint16_t
-and
-.IR uint32_t .
-.SH SEE ALSO
-.BR intmax_t (3type),
-.BR intptr_t (3type),
-.BR printf (3)
diff --git a/man3type/intmax_t.3type b/man3type/intmax_t.3type
deleted file mode 100644
index e5feb4c56..000000000
--- a/man3type/intmax_t.3type
+++ /dev/null
@@ -1,97 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH intmax_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-intmax_t, uintmax_t \- greatest-width basic integer types
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <stdint.h>
-.PP
-.BR typedef " /* ... */ " intmax_t;
-.BR typedef " /* ... */ " uintmax_t;
-.PP
-.BR "#define INTMAX_WIDTH " "/* ... */"
-.B "#define UINTMAX_WIDTH INTMAX_WIDTH"
-.PP
-.BR "#define INTMAX_MAX " "/* 2**(INTMAX_WIDTH - 1) - 1 */"
-.BR "#define INTMAX_MIN " "/* - 2**(INTMAX_WIDTH - 1) */"
-.BR "#define UINTMAX_MAX " "/* 2**UINTMAX_WIDTH - 1 */"
-.PP
-.BI "#define INTMAX_C(" c ) " c " ## " \fR/* ... */\fP"
-.BI "#define UINTMAX_C(" c ) " c " ## " \fR/* ... */\fP"
-.fi
-.SH DESCRIPTION
-.I intmax_t
-is a signed integer type
-capable of representing any value of any basic signed integer type
-supported by the implementation.
-It is capable of storing values in the range
-.RB [ INTMAX_MIN ,
-.BR INTMAX_MAX ].
-.PP
-.I uintmax_t
-is an unsigned integer type
-capable of representing any value of any basic unsigned integer type
-supported by the implementation.
-It is capable of storing values in the range
-.RB [ 0 ,
-.BR UINTMAX_MAX ].
-.PP
-The macros
-.RB [ U ] INTMAX_WIDTH
-expand to the width in bits of these types.
-.PP
-The macros
-.RB [ U ] INTMAX_MAX
-expand to the maximum value that these types can hold.
-.PP
-The macro
-.B INTMAX_MIN
-expands to the minimum value that
-.I intmax_t
-can hold.
-.PP
-The macros
-.RB [ U ] INTMAX_C ()
-expand their argument to an integer constant of type
-.RI [ u ] intmax_t .
-.PP
-The length modifier for
-.RI [ u ] intmax_t
-for the
-.BR printf (3)
-and the
-.BR scanf (3)
-families of functions is
-.BR j ;
-resulting commonly in
-.BR %jd ,
-.BR %ji ,
-.BR %ju ,
-or
-.B %jx
-for printing
-.RI [ u ] intmax_t
-values.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.SH NOTES
-The following header also provides these types:
-.IR <inttypes.h> .
-.SH BUGS
-These types may not be as large as extended integer types, such as
-.I __int128
-.SH SEE ALSO
-.BR int64_t (3type),
-.BR intptr_t (3type),
-.BR printf (3),
-.BR strtoimax (3)
diff --git a/man3type/intptr_t.3type b/man3type/intptr_t.3type
deleted file mode 100644
index 9481baf91..000000000
--- a/man3type/intptr_t.3type
+++ /dev/null
@@ -1,107 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH intptr_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-intptr_t, uintptr_t \- integer types wide enough to hold pointers
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <stdint.h>
-.PP
-.BR typedef " /* ... */ " intptr_t;
-.BR typedef " /* ... */ " uintptr_t;
-.PP
-.BR "#define INTPTR_WIDTH" " /* ... */"
-.B #define UINTPTR_WIDTH INTPTR_WIDTH
-.PP
-.BR "#define INTPTR_MAX" " /* 2**(INTPTR_WIDTH \- 1) \- 1 */"
-.BR "#define INTPTR_MIN" " /* \- 2**(INTPTR_WIDTH \- 1) */"
-.BR "#define UINTPTR_MAX" " /* 2**UINTPTR_WIDTH \- 1 */"
-.fi
-.SH DESCRIPTION
-.I intptr_t
-is a signed integer type
-such that any valid
-.RI ( "void *" )
-value can be converted to this type and then converted back.
-It is capable of storing values in the range
-.RB [ INTPTR_MIN ,
-.BR INTPTR_MAX ].
-.PP
-.I uintptr_t
-is an unsigned integer type
-such that any valid
-.RI ( "void *" )
-value can be converted to this type and then converted back.
-It is capable of storing values in the range
-.RB [ 0 ,
-.BR INTPTR_MAX ].
-.PP
-The macros
-.RB [ U ] INTPTR_WIDTH
-expand to the width in bits of these types.
-.PP
-The macros
-.RB [ U ] INTPTR_MAX
-expand to the maximum value that these types can hold.
-.PP
-The macro
-.B INTPTR_MIN
-expands to the minimum value that
-.I intptr_t
-can hold.
-.PP
-The length modifiers for the
-.RI [ u ] intptr_t
-types
-for the
-.BR printf (3)
-family of functions
-are expanded by the macros
-.BR PRIdPTR ,
-.BR PRIiPTR ,
-and
-.B PRIuPTR
-(defined in
-.IR <inttypes.h> );
-resulting commonly in
-.B %"PRIdPTR"
-or
-.B %"PRIiPTR"
-for printing
-.I intptr_t
-values.
-The length modifiers for the
-.IR [ u ] intptr_t
-types
-for the
-.BR scanf (3)
-family of functions
-are expanded by the macros
-.BR SCNdPTR ,
-.BR SCNiPTR ,
-and
-.B SCNuPTR
-(defined in
-.IR <inttypes.h> );
-resulting commonly in
-.B %"SCNuPTR"
-for scanning
-.I uintptr_t
-values.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C99, POSIX.1-2001.
-.SH NOTES
-The following header also provides these types:
-.IR <inttypes.h> .
-.SH SEE ALSO
-.BR intmax_t (3type),
-.BR void (3)
diff --git a/man3type/iovec.3type b/man3type/iovec.3type
deleted file mode 100644
index 559883183..000000000
--- a/man3type/iovec.3type
+++ /dev/null
@@ -1,49 +0,0 @@
-.\" Copyright (c) 2022 by Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH iovec 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-iovec \- Vector I/O data structure
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.EX
-.B #include <sys/uio.h>
-.PP
-.B struct iovec {
-.BR " void *iov_base;" " /* Starting address */"
-.BR " size_t iov_len;" " /* Size of the memory pointed to by "\c
-.IR iov_base ". */"
-.B };
-.EE
-.SH DESCRIPTION
-Describes a region of memory, beginning at
-.I iov_base
-address and with the size of
-.I iov_len
-bytes.
-System calls use arrays of this structure,
-where each element of the array represents a memory region,
-and the whole array represents a vector of memory regions.
-The maximum number of
-.I iovec
-structures in that array
-is limited by
-.B IOV_MAX
-(defined in
-.IR <limits.h> ,
-or accessible via the call
-.IR sysconf(_SC_IOV_MAX) ).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-The following header also provides this type:
-.IR <sys/socket.h> .
-.SH SEE ALSO
-.BR process_madvise (2),
-.BR readv (2)
diff --git a/man3type/itimerspec.3type b/man3type/itimerspec.3type
deleted file mode 100644
index 5d645e2f7..000000000
--- a/man3type/itimerspec.3type
+++ /dev/null
@@ -1,33 +0,0 @@
-.\" Copyright (c) 2022 by Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH itimerspec 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-timespec \- interval for a timer with nanosecond precision
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.EX
-.B #include <time.h>
-.PP
-.B struct itimerspec {
-.BR " struct timespec it_interval;" " /* Interval for periodic timer */"
-.BR " struct timespec it_value;" " /* Initial expiration */"
-.B };
-.EE
-.SH DESCRIPTION
-Describes the initial expiration of a timer,
-and its interval,
-in seconds and nanoseconds.
-.SH STANDARDS
-Linux.
-.SH NOTES
-The following header also provides this type:
-.IR <sys/timerfd.h> .
-.SH SEE ALSO
-.BR timerfd_create (2),
-.BR timer_settime (2),
-.BR timespec (3type)
diff --git a/man3type/lconv.3type b/man3type/lconv.3type
deleted file mode 100644
index 5c326d7c9..000000000
--- a/man3type/lconv.3type
+++ /dev/null
@@ -1,56 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH lconv 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-lconv \- numeric formatting information
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.EX
-.B #include <locale.h>
-.PP
-.BR "struct lconv {" " /* Values in the \[dq]C\[dq] locale: */"
-.BR " char *decimal_point;" " /* \[dq].\[dq] */"
-.BR " char *thousands_sep;" " /* \[dq]\[dq] */"
-.BR " char *grouping;" " /* \[dq]\[dq] */"
-.BR " char *mon_decimal_point;" " /* \[dq]\[dq] */"
-.BR " char *mon_thousands_sep;" " /* \[dq]\[dq] */"
-.BR " char *mon_grouping;" " /* \[dq]\[dq] */"
-.BR " char *positive_sign;" " /* \[dq]\[dq] */"
-.BR " char *negative_sign;" " /* \[dq]\[dq] */"
-.BR " char *currency_symbol;" " /* \[dq]\[dq] */"
-.BR " char frac_digits;" " /* CHAR_MAX */"
-.BR " char p_cs_precedes;" " /* CHAR_MAX */"
-.BR " char n_cs_precedes;" " /* CHAR_MAX */"
-.BR " char p_sep_by_space;" " /* CHAR_MAX */"
-.BR " char n_sep_by_space;" " /* CHAR_MAX */"
-.BR " char p_sign_posn;" " /* CHAR_MAX */"
-.BR " char n_sign_posn;" " /* CHAR_MAX */"
-.BR " char *int_curr_symbol;" " /* \[dq]\[dq] */"
-.BR " char int_frac_digits;" " /* CHAR_MAX */"
-.BR " char int_p_cs_precedes;" " /* CHAR_MAX */"
-.BR " char int_n_cs_precedes;" " /* CHAR_MAX */"
-.BR " char int_p_sep_by_space;" " /* CHAR_MAX */"
-.BR " char int_n_sep_by_space;" " /* CHAR_MAX */"
-.BR " char int_p_sign_posn;" " /* CHAR_MAX */"
-.BR " char int_n_sign_posn;" " /* CHAR_MAX */"
-.B };
-.EE
-.SH DESCRIPTION
-Contains members related to the formatting of numeric values.
-In the "C" locale, its members have the values
-shown in the comments above.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH SEE ALSO
-.BR setlocale (3),
-.BR localeconv (3),
-.BR charsets (7),
-.BR locale (7)
diff --git a/man3type/ldiv_t.3type b/man3type/ldiv_t.3type
deleted file mode 100644
index 3ab8f3447..000000000
--- a/man3type/ldiv_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/div_t.3type
diff --git a/man3type/lldiv_t.3type b/man3type/lldiv_t.3type
deleted file mode 100644
index 3ab8f3447..000000000
--- a/man3type/lldiv_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/div_t.3type
diff --git a/man3type/loff_t.3type b/man3type/loff_t.3type
deleted file mode 100644
index e59af3f11..000000000
--- a/man3type/loff_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/off_t.3type
diff --git a/man3type/mode_t.3type b/man3type/mode_t.3type
deleted file mode 100644
index c90a35fb0..000000000
--- a/man3type/mode_t.3type
+++ /dev/null
@@ -1,40 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH mode_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-mode_t \- file attributes
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.PP
-.BR typedef " /* ... */ " mode_t;
-.fi
-.SH DESCRIPTION
-Used for some file attributes (e.g., file mode).
-It is an integer type.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-The following headers also provide this type:
-.IR <fcntl.h> ,
-.IR <ndbm.h> ,
-.IR <spawn.h> ,
-.IR <sys/ipc.h> ,
-.IR <sys/mman.h> ,
-and
-.IR <sys/stat.h> .
-.SH SEE ALSO
-.BR chmod (2),
-.BR mkdir (2),
-.BR open (2),
-.BR umask (2),
-.BR stat (3type)
diff --git a/man3type/off64_t.3type b/man3type/off64_t.3type
deleted file mode 100644
index e59af3f11..000000000
--- a/man3type/off64_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/off_t.3type
diff --git a/man3type/off_t.3type b/man3type/off_t.3type
deleted file mode 100644
index 4d4bae143..000000000
--- a/man3type/off_t.3type
+++ /dev/null
@@ -1,92 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH off_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-off_t, off64_t, loff_t \- file sizes
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.PP
-.BR typedef " /* ... */ " off_t;
-.PP
-.B #define _LARGEFILE64_SOURCE
-.B #include <sys/types.h>
-.PP
-.BR typedef " /* ... */ " off64_t;
-.PP
-.B #define _GNU_SOURCE
-.B #include <sys/types.h>
-.PP
-.BR typedef " /* ... */ " loff_t;
-.fi
-.SH DESCRIPTION
-.I off_t
-is used for describing file sizes.
-It is a signed integer type.
-.PP
-.I off64_t
-is a 64-bit version of the type,
-used in glibc.
-.PP
-.I loff_t
-is a 64-bit version of the type,
-introduced by the Linux kernel.
-.SH STANDARDS
-.TP
-.I off_t
-POSIX.1-2008.
-.TP
-.I off64_t
-GNU and some BSDs.
-.TP
-.I loff_t
-Linux.
-.SH VERSIONS
-.TP
-.I off_t
-POSIX.1-2001.
-.PP
-.I <aio.h>
-and
-.I <stdio.h>
-define
-.I off_t
-since POSIX.1-2008.
-.SH NOTES
-On some architectures,
-the width of
-.I off_t
-can be controlled with the feature test macro
-.BR _FILE_OFFSET_BITS .
-.PP
-The following headers also provide
-.IR off_t :
-.IR <aio.h> ,
-.IR <fcntl.h> ,
-.IR <stdio.h> ,
-.IR <sys/mman.h> ,
-.IR <sys/stat.h> ,
-and
-.IR <unistd.h> .
-.SH SEE ALSO
-.BR copy_file_range (2),
-.BR llseek (2),
-.BR lseek (2),
-.BR mmap (2),
-.BR posix_fadvise (2),
-.BR pread (2),
-.BR readahead (2),
-.BR sync_file_range (2),
-.BR truncate (2),
-.BR fseeko (3),
-.BR lockf (3),
-.BR lseek64 (3),
-.BR posix_fallocate (3),
-.BR feature_test_macros (7)
diff --git a/man3type/pid_t.3type b/man3type/pid_t.3type
deleted file mode 100644
index 52bae7406..000000000
--- a/man3type/pid_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/id_t.3type
diff --git a/man3type/printf_arginfo_size_function.3type b/man3type/printf_arginfo_size_function.3type
deleted file mode 100644
index ad10bad38..000000000
--- a/man3type/printf_arginfo_size_function.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3type/printf_function.3type b/man3type/printf_function.3type
deleted file mode 100644
index ad10bad38..000000000
--- a/man3type/printf_function.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3type/printf_info.3type b/man3type/printf_info.3type
deleted file mode 100644
index ad10bad38..000000000
--- a/man3type/printf_info.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3type/printf_va_arg_function.3type b/man3type/printf_va_arg_function.3type
deleted file mode 100644
index ad10bad38..000000000
--- a/man3type/printf_va_arg_function.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3head/printf.h.3head
diff --git a/man3type/ptrdiff_t.3type b/man3type/ptrdiff_t.3type
deleted file mode 100644
index 093e630bf..000000000
--- a/man3type/ptrdiff_t.3type
+++ /dev/null
@@ -1,47 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH ptrdiff_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-ptrdiff_t \- count of elements or array index
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <stddef.h>
-.PP
-.BR typedef " /* ... */ " ptrdiff_t;
-.fi
-.SH DESCRIPTION
-Used for a count of elements, or an array index.
-It is the result of subtracting two pointers.
-It is a signed integer type
-capable of storing values in the range
-.RB [ PTRDIFF_MAX ,
-.BR PTRDIFF_MAX ].
-.PP
-The length modifier for
-.I ptrdiff_t
-for the
-.BR printf (3)
-and the
-.BR scanf (3)
-families of functions is
-.BR t ,
-resulting commonly in
-.B %td
-or
-.B %ti
-for printing
-.I ptrdiff_t
-values.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C89, POSIX.1-2001.
-.SH SEE ALSO
-.BR size_t (3type)
diff --git a/man3type/regex_t.3type b/man3type/regex_t.3type
deleted file mode 100644
index c0daaf0ff..000000000
--- a/man3type/regex_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/regex.3
diff --git a/man3type/regmatch_t.3type b/man3type/regmatch_t.3type
deleted file mode 100644
index c0daaf0ff..000000000
--- a/man3type/regmatch_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/regex.3
diff --git a/man3type/regoff_t.3type b/man3type/regoff_t.3type
deleted file mode 100644
index c0daaf0ff..000000000
--- a/man3type/regoff_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/regex.3
diff --git a/man3type/sa_family_t.3type b/man3type/sa_family_t.3type
deleted file mode 100644
index 39e914c30..000000000
--- a/man3type/sa_family_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/sockaddr.3type
diff --git a/man3type/sigevent.3type b/man3type/sigevent.3type
deleted file mode 100644
index db50c0f09..000000000
--- a/man3type/sigevent.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/system_data_types.7
diff --git a/man3type/siginfo_t.3type b/man3type/siginfo_t.3type
deleted file mode 100644
index db50c0f09..000000000
--- a/man3type/siginfo_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/system_data_types.7
diff --git a/man3type/sigset_t.3type b/man3type/sigset_t.3type
deleted file mode 100644
index db50c0f09..000000000
--- a/man3type/sigset_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/system_data_types.7
diff --git a/man3type/sigval.3type b/man3type/sigval.3type
deleted file mode 100644
index db50c0f09..000000000
--- a/man3type/sigval.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/system_data_types.7
diff --git a/man3type/size_t.3type b/man3type/size_t.3type
deleted file mode 100644
index 1c5894f45..000000000
--- a/man3type/size_t.3type
+++ /dev/null
@@ -1,181 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH size_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-size_t, ssize_t \- count of bytes
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <stddef.h>
-.PP
-.BR typedef " /* ... */ " size_t;
-.PP
-.B #include <sys/types.h>
-.PP
-.BR typedef " /* ... */ " ssize_t;
-.fi
-.SH DESCRIPTION
-.TP
-.I size_t
-Used for a count of bytes.
-It is the result of the
-.IR sizeof ()
-operator.
-It is an unsigned integer type
-capable of storing values in the range
-.RB [ 0 ,
-.BR SIZE_MAX ].
-.TP
-.I ssize_t
-Used for a count of bytes or an error indication.
-It is a signed integer type
-capable of storing values at least in the range
-.RB [ \-1 ,
-.BR SSIZE_MAX ].
-.SS Use with printf(3) and scanf(3)
-.TP
-.I size_t
-The length modifier for
-.I size_t
-for the
-.BR printf (3)
-and the
-.BR scanf (3)
-families of functions is
-.BR z ,
-resulting commonly in
-.B %zu
-or
-.B %zx
-for printing
-.I size_t
-values.
-.TP
-.I ssize_t
-glibc and most other implementations provide a length modifier for
-.I ssize_t
-for the
-.BR printf (3)
-and the
-.BR scanf (3)
-families of functions,
-which is
-.BR z ;
-resulting commonly in
-.B %zd
-or
-.B %zi
-for printing
-.I ssize_t
-values.
-Although
-.B z
-works for
-.I ssize_t
-on most implementations,
-portable POSIX programs should avoid using it\[em]for example,
-by converting the value to
-.I intmax_t
-and using its length modifier
-.RB ( j ).
-.SH STANDARDS
-.TP
-.I size_t
-C11, POSIX.1-2008.
-.TP
-.I ssize_t
-POSIX.1-2008.
-.PD
-.SH HISTORY
-.TP
-.I size_t
-C89, POSIX.1-2001.
-.TP
-.I ssize_t
-POSIX.1-2001.
-.PP
-.IR <aio.h> ,
-.IR <glob.h> ,
-.IR <grp.h> ,
-.IR <iconv.h> ,
-.IR <mqueue.h> ,
-.IR <pwd.h> ,
-.IR <signal.h> ,
-and
-.I <sys/socket.h>
-define
-.I size_t
-since POSIX.1-2008.
-.PP
-.IR <aio.h> ,
-.IR <mqueue.h> ,
-and
-.I <sys/socket.h>
-define
-.I ssize_t
-since POSIX.1-2008.
-.SH NOTES
-.TP
-.I size_t
-The following headers also provide
-.IR size_t :
-.IR <aio.h> ,
-.IR <glob.h> ,
-.IR <grp.h> ,
-.IR <iconv.h> ,
-.IR <monetary.h> ,
-.IR <mqueue.h> ,
-.IR <ndbm.h> ,
-.IR <pwd.h> ,
-.IR <regex.h> ,
-.IR <search.h> ,
-.IR <signal.h> ,
-.IR <stdio.h> ,
-.IR <stdlib.h> ,
-.IR <string.h> ,
-.IR <strings.h> ,
-.IR <sys/mman.h> ,
-.IR <sys/msg.h> ,
-.IR <sys/sem.h> ,
-.IR <sys/shm.h> ,
-.IR <sys/socket.h> ,
-.IR <sys/types.h> ,
-.IR <sys/uio.h> ,
-.IR <time.h> ,
-.IR <unistd.h> ,
-.IR <wchar.h> ,
-and
-.IR <wordexp.h> .
-.TP
-.I ssize_t
-The following headers also provide
-.IR ssize_t :
-.IR <aio.h> ,
-.IR <monetary.h> ,
-.IR <mqueue.h> ,
-.IR <stdio.h> ,
-.IR <sys/msg.h> ,
-.IR <sys/socket.h> ,
-.IR <sys/uio.h> ,
-and
-.IR <unistd.h> .
-.SH SEE ALSO
-.BR read (2),
-.BR readlink (2),
-.BR readv (2),
-.BR recv (2),
-.BR send (2),
-.BR write (2),
-.BR fread (3),
-.BR fwrite (3),
-.BR memcmp (3),
-.BR memcpy (3),
-.BR memset (3),
-.BR offsetof (3),
-.BR ptrdiff_t (3type)
diff --git a/man3type/sockaddr.3type b/man3type/sockaddr.3type
deleted file mode 100644
index cf8d601f5..000000000
--- a/man3type/sockaddr.3type
+++ /dev/null
@@ -1,154 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH sockaddr 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-sockaddr, sockaddr_storage, sockaddr_in, sockaddr_in6, sockaddr_un, socklen_t,
-in_addr, in6_addr, in_addr_t, in_port_t,
-\- socket address
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.EX
-.B #include <sys/socket.h>
-.PP
-.B struct sockaddr {
-.BR " sa_family_t sa_family;" " /* Address family */"
-.BR " char sa_data[];" " /* Socket address */"
-.B };
-.PP
-.B struct sockaddr_storage {
-.BR " sa_family_t ss_family;" " /* Address family */"
-.B };
-.PP
-.BR typedef " /* ... */ " socklen_t;
-.BR typedef " /* ... */ " sa_family_t;
-.PP
-.EE
-.SS Internet domain sockets
-.EX
-.B #include <netinet/in.h>
-.PP
-.B struct sockaddr_in {
-.BR " sa_family_t sin_family;" " /* " AF_INET " */"
-.BR " in_port_t sin_port;" " /* Port number */"
-.BR " struct in_addr sin_addr;" " /* IPv4 address */"
-.B };
-.PP
-.B struct sockaddr_in6 {
-.BR " sa_family_t sin6_family;" " /* " AF_INET6 " */"
-.BR " in_port_t sin6_port;" " /* Port number */"
-.BR " uint32_t sin6_flowinfo;" " /* IPv6 flow info */"
-.BR " struct in6_addr sin6_addr;" " /* IPv6 address */"
-.BR " uint32_t sin6_scope_id;" " /* Set of interfaces for a scope */"
-.B };
-.PP
-.B struct in_addr {
-.B " in_addr_t s_addr;"
-.B };
-.PP
-.B struct in6_addr {
-.B " uint8_t s6_addr[16];"
-.B };
-.PP
-.B typedef uint32_t in_addr_t;
-.B typedef uint16_t in_port_t;
-.EE
-.SS UNIX domain sockets
-.EX
-.B #include <sys/un.h>
-.PP
-.B struct sockaddr_un {
-.BR " sa_family_t sun_family;" " /* Address family */"
-.BR " char sun_path[];" " /* Socket pathname */"
-.B };
-.EE
-.SH DESCRIPTION
-.TP
-.I sockaddr
-Describes a socket address.
-.TP
-.I sockaddr_storage
-A structure at least as large as any other
-.IR sockaddr_ *
-address structures.
-It's aligned so that a pointer to it can be cast
-as a pointer to other
-.IR sockaddr_ *
-structures and used to access its fields.
-.TP
-.I socklen_t
-Describes the length of a socket address.
-This is an integer type of at least 32 bits.
-.TP
-.I sa_family_t
-Describes a socket's protocol family.
-This is an unsigned integer type.
-.SS Internet domain sockets
-.TP
-.I sockaddr_in
-Describes an IPv4 Internet domain socket address.
-The
-.I sin_port
-and
-.I sin_addr
-members are stored in network byte order.
-.TP
-.I sockaddr_in6
-Describes an IPv6 Internet domain socket address.
-The
-.I sin6_addr.s6_addr
-array is used to contain a 128-bit IPv6 address,
-stored in network byte order.
-.SS UNIX domain sockets
-.TP
-.I sockaddr_un
-Describes a UNIX domain socket address.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.PP
-.I socklen_t
-was invented by POSIX.
-See also
-.BR accept (2).
-.PP
-These structures were invented before modern ISO C strict-aliasing rules.
-If aliasing rules are applied strictly,
-these structures would be extremely difficult to use
-without invoking Undefined Behavior.
-POSIX Issue 8 will fix this by requiring that implementations
-make sure that these structures
-can be safely used as they were designed.
-.SH NOTES
-.I socklen_t
-is also defined in
-.IR <netdb.h> .
-.PP
-.I sa_family_t
-is also defined in
-.I <netinet/in.h>
-and
-.IR <sys/un.h> .
-.SH SEE ALSO
-.BR accept (2),
-.BR bind (2),
-.BR connect (2),
-.BR getpeername (2),
-.BR getsockname (2),
-.BR getsockopt (2),
-.BR sendto (2),
-.BR setsockopt (2),
-.BR socket (2),
-.BR socketpair (2),
-.BR getaddrinfo (3),
-.BR gethostbyaddr (3),
-.BR getnameinfo (3),
-.BR htonl (3),
-.BR ipv6 (7),
-.BR socket (7)
diff --git a/man3type/sockaddr_in.3type b/man3type/sockaddr_in.3type
deleted file mode 100644
index 39e914c30..000000000
--- a/man3type/sockaddr_in.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/sockaddr.3type
diff --git a/man3type/sockaddr_in6.3type b/man3type/sockaddr_in6.3type
deleted file mode 100644
index 39e914c30..000000000
--- a/man3type/sockaddr_in6.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/sockaddr.3type
diff --git a/man3type/sockaddr_storage.3type b/man3type/sockaddr_storage.3type
deleted file mode 100644
index 39e914c30..000000000
--- a/man3type/sockaddr_storage.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/sockaddr.3type
diff --git a/man3type/sockaddr_un.3type b/man3type/sockaddr_un.3type
deleted file mode 100644
index 39e914c30..000000000
--- a/man3type/sockaddr_un.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/sockaddr.3type
diff --git a/man3type/socklen_t.3type b/man3type/socklen_t.3type
deleted file mode 100644
index 39e914c30..000000000
--- a/man3type/socklen_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/sockaddr.3type
diff --git a/man3type/speed_t.3type b/man3type/speed_t.3type
deleted file mode 100644
index 26cfd0171..000000000
--- a/man3type/speed_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/cc_t.3type
diff --git a/man3type/ssize_t.3type b/man3type/ssize_t.3type
deleted file mode 100644
index c8d440814..000000000
--- a/man3type/ssize_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/size_t.3type
diff --git a/man3type/stat.3type b/man3type/stat.3type
deleted file mode 100644
index 939dc3c8f..000000000
--- a/man3type/stat.3type
+++ /dev/null
@@ -1,162 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH stat 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-stat \- file status
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.EX
-.B #include <sys/stat.h>
-.PP
-.B struct stat {
-.BR " dev_t st_dev;" " /* ID of device containing file */"
-.BR " ino_t st_ino;" " /* Inode number */"
-.BR " mode_t st_mode;" " /* File type and mode */"
-.BR " nlink_t st_nlink;" " /* Number of hard links */"
-.BR " uid_t st_uid;" " /* User ID of owner */"
-.BR " gid_t st_gid;" " /* Group ID of owner */"
-.BR " dev_t st_rdev;" " /* Device ID (if special file) */"
-.BR " off_t st_size;" " /* Total size, in bytes */"
-.BR " blksize_t st_blksize;" " /* Block size for filesystem I/O */"
-.BR " blkcnt_t st_blocks;" " /* Number of 512 B blocks allocated */"
-\&
- /* Since POSIX.1-2008, this structure supports nanosecond
- precision for the following timestamp fields.
- For the details before POSIX.1-2008, see VERSIONS. */
-\&
-.BR " struct timespec st_atim;" " /* Time of last access */"
-.BR " struct timespec st_mtim;" " /* Time of last modification */"
-.BR " struct timespec st_ctim;" " /* Time of last status change */"
-\&
-.BR "#define st_atime st_atim.tv_sec" " /* Backward compatibility */"
-.B "#define st_mtime st_mtim.tv_sec"
-.B "#define st_ctime st_ctim.tv_sec"
-.B };
-.EE
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.IR st_atim ,
-.IR st_mtim ,
-.IR st_ctim :
-.nf
- Since glibc 2.12:
- _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700
- glibc 2.19 and earlier:
- _BSD_SOURCE || _SVID_SOURCE
-.fi
-.SH DESCRIPTION
-Describes information about a file.
-.PP
-The fields are as follows:
-.TP
-.I st_dev
-This field describes the device on which this file resides.
-(The
-.BR major (3)
-and
-.BR minor (3)
-macros may be useful to decompose the device ID in this field.)
-.TP
-.I st_ino
-This field contains the file's inode number.
-.TP
-.I st_mode
-This field contains the file type and mode.
-See
-.BR inode (7)
-for further information.
-.TP
-.I st_nlink
-This field contains the number of hard links to the file.
-.TP
-.I st_uid
-This field contains the user ID of the owner of the file.
-.TP
-.I st_gid
-This field contains the ID of the group owner of the file.
-.TP
-.I st_rdev
-This field describes the device that this file (inode) represents.
-.TP
-.I st_size
-This field gives the size of the file (if it is a regular
-file or a symbolic link) in bytes.
-The size of a symbolic link is the length of the pathname
-it contains, without a terminating null byte.
-.TP
-.I st_blksize
-This field gives the "preferred" block size for efficient filesystem I/O.
-.TP
-.I st_blocks
-This field indicates the number of blocks allocated to the file,
-in 512-byte units.
-(This may be smaller than
-.IR st_size /512
-when the file has holes.)
-.TP
-.I st_atime
-This is the time of the last access of file data.
-.TP
-.I st_mtime
-This is the time of last modification of file data.
-.TP
-.I st_ctime
-This is the file's last status change timestamp
-(time of last change to the inode).
-.PP
-For further information on the above fields, see
-.BR inode (7).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.PP
-Old kernels and old standards did not support nanosecond timestamp fields.
-Instead, there were three timestamp
-.RI fields\[em] st_atime ,
-.IR st_mtime ,
-and
-.IR st_ctime \[em]typed
-as
-.I time_t
-that recorded timestamps with one-second precision.
-.PP
-Since Linux 2.5.48, the
-.I stat
-structure supports nanosecond resolution for the three file timestamp fields.
-The nanosecond components of each timestamp are available
-via names of the form
-.IR st_atim.tv_nsec ,
-if suitable test macros are defined.
-Nanosecond timestamps were standardized in POSIX.1-2008,
-and, starting with glibc 2.12,
-glibc exposes the nanosecond component names if
-.B _POSIX_C_SOURCE
-is defined with the value 200809L or greater, or
-.B _XOPEN_SOURCE
-is defined with the value 700 or greater.
-Up to and including glibc 2.19,
-the definitions of the nanoseconds components are also defined if
-.B _BSD_SOURCE
-or
-.B _SVID_SOURCE
-is defined.
-If none of the aforementioned macros are defined,
-then the nanosecond values are exposed with names of the form
-.IR st_atimensec .
-.SH NOTES
-The following header also provides this type:
-.IR <ftw.h> .
-.SH SEE ALSO
-.BR stat (2),
-.BR inode (7)
diff --git a/man3type/suseconds_t.3type b/man3type/suseconds_t.3type
deleted file mode 100644
index 7f430e1eb..000000000
--- a/man3type/suseconds_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/time_t.3type
diff --git a/man3type/tcflag_t.3type b/man3type/tcflag_t.3type
deleted file mode 100644
index 26cfd0171..000000000
--- a/man3type/tcflag_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/cc_t.3type
diff --git a/man3type/time_t.3type b/man3type/time_t.3type
deleted file mode 100644
index 2ba4f6833..000000000
--- a/man3type/time_t.3type
+++ /dev/null
@@ -1,109 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH time_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-time_t, suseconds_t, useconds_t \- integer time
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <time.h>
-.PP
-.BR typedef " /* ... */ " time_t;
-.PP
-.B #include <sys/types.h>
-.PP
-.BR typedef " /* ... */ " suseconds_t;
-.BR typedef " /* ... */ " useconds_t;
-.fi
-.SH DESCRIPTION
-.TP
-.I time_t
-Used for time in seconds.
-According to POSIX,
-it is an integer type.
-.\" In POSIX.1-2001, the type was specified as being either an integer
-.\" type or a real-floating type. However, existing implementations
-.\" used an integer type, and POSIX.1-2008 tightened the specification
-.\" to reflect this.
-.TP
-.I suseconds_t
-Used for time in microseconds.
-It is a signed integer type
-capable of storing values at least in the range
-.RB [ \-1 ,
-.BR 1000000 ].
-.TP
-.I useconds_t
-Used for time in microseconds.
-It is an unsigned integer type
-capable of storing values at least in the range
-.RB [ 0 ,
-.BR 1000000 ].
-.SH STANDARDS
-.TP
-.I time_t
-C11, POSIX.1-2008.
-.TP
-.I suseconds_t
-.TQ
-.I useconds_t
-POSIX.1-2008.
-.PD
-.SH HISTORY
-.TP
-.I time_t
-C89, POSIX.1-2001.
-.TP
-.I suseconds_t
-.TQ
-.I useconds_t
-POSIX.1-2001.
-.PP
-.I <sched.h>
-defines
-.I time_t
-since POSIX.1-2008.
-.PP
-POSIX.1-2001 defined
-.I useconds_t
-in
-.I <unistd.h>
-too.
-.SH NOTES
-On some architectures,
-the width of
-.I time_t
-can be controlled with the feature test macro
-.BR _TIME_BITS .
-.PP
-The following headers also provide
-.IR time_t :
-.IR <sched.h> ,
-.IR <sys/msg.h> ,
-.IR <sys/select.h> ,
-.IR <sys/sem.h> ,
-.IR <sys/shm.h> ,
-.IR <sys/stat.h> ,
-.IR <sys/time.h> ,
-.IR <sys/types.h> ,
-and
-.IR <utime.h> .
-.PP
-The following headers also provide
-.IR suseconds_t :
-.I <sys/select.h>
-and
-.IR <sys/time.h> .
-.SH SEE ALSO
-.BR stime (2),
-.BR time (2),
-.BR ctime (3),
-.BR difftime (3),
-.BR usleep (3),
-.BR timeval (3type)
diff --git a/man3type/timer_t.3type b/man3type/timer_t.3type
deleted file mode 100644
index 6470855f7..000000000
--- a/man3type/timer_t.3type
+++ /dev/null
@@ -1,34 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH timer_t 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-timer_t \- timer ID
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.PP
-.BR typedef " /* ... */ " timer_t;
-.fi
-.SH DESCRIPTION
-Used for timer ID returned by
-.BR timer_create (2).
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-The following header also provides
-.IR timer_t :
-.IR <time.h> .
-.SH SEE ALSO
-.BR timer_create (2),
-.BR timer_delete (2),
-.BR timer_getoverrun (2),
-.BR timer_settime (2)
diff --git a/man3type/timespec.3type b/man3type/timespec.3type
deleted file mode 100644
index b5028a105..000000000
--- a/man3type/timespec.3type
+++ /dev/null
@@ -1,60 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH timespec 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-timespec \- time in seconds and nanoseconds
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.EX
-.B #include <time.h>
-.PP
-.B struct timespec {
-.BR " time_t tv_sec;" " /* Seconds */"
-.RB " /* ... */" " tv_nsec;" \
-" /* Nanoseconds [" 0 ", " 999\[aq]999\[aq]999 "] */"
-.B };
-.EE
-.SH DESCRIPTION
-Describes times in seconds and nanoseconds.
-.PP
-.I tv_nsec
-is of an implementation-defined signed type
-capable of holding the specified range.
-Under glibc, this is usually
-.IR long ,
-and
-.I long long
-on X32.
-It can be safely down-cast to any concrete 32-bit integer type for processing.
-.SH VERSIONS
-Prior to C23,
-.I tv_nsec
-was
-.IR long .
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-The following headers also provide this type:
-.IR <aio.h> ,
-.IR <mqueue.h> ,
-.IR <sched.h> ,
-.IR <signal.h> ,
-.IR <sys/select.h> ,
-and
-.IR <sys/stat.h> .
-.SH SEE ALSO
-.BR clock_gettime (2),
-.BR clock_nanosleep (2),
-.BR nanosleep (2),
-.BR timerfd_gettime (2),
-.BR timer_gettime (2),
-.BR time_t (3type),
-.BR timeval (3type)
diff --git a/man3type/timeval.3type b/man3type/timeval.3type
deleted file mode 100644
index c8963ef4a..000000000
--- a/man3type/timeval.3type
+++ /dev/null
@@ -1,43 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH timeval 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-timeval \- time in seconds and microseconds
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.EX
-.B #include <sys/time.h>
-.PP
-.B struct timeval {
-.BR " time_t tv_sec;" " /* Seconds */"
-.BR " suseconds_t tv_usec;" " /* Microseconds */"
-.B };
-.EE
-.SH DESCRIPTION
-Describes times in seconds and microseconds.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.SH NOTES
-The following headers also provide this type:
-.IR <sys/resource.h> ,
-.IR <sys/select.h> ,
-and
-.IR <utmpx.h> .
-.SH SEE ALSO
-.BR gettimeofday (2),
-.BR select (2),
-.BR utimes (2),
-.BR adjtime (3),
-.BR futimes (3),
-.BR timeradd (3),
-.BR suseconds_t (3type),
-.BR time_t (3type),
-.BR timespec (3type)
diff --git a/man3type/tm.3type b/man3type/tm.3type
deleted file mode 100644
index e203b15e7..000000000
--- a/man3type/tm.3type
+++ /dev/null
@@ -1,112 +0,0 @@
-.\" Copyright (c) 2022 by Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH tm 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-tm \- broken-down time
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.EX
-.B #include <time.h>
-.PP
-.B struct tm {
-.BR " int tm_sec;" " /* Seconds [" 0 ", " 60 "] */"
-.BR " int tm_min;" " /* Minutes [" 0 ", " 59 "] */"
-.BR " int tm_hour;" " /* Hour [" 0 ", " 23 "] */"
-.BR " int tm_mday;" " /* Day of the month [" 1 ", " 31 "] */"
-.BR " int tm_mon;" \
-" /* Month [" 0 ", " 11 "] (January = " 0 ") */"
-.BR " int tm_year;" " /* Year minus " 1900 " */"
-.BR " int tm_wday;" \
-" /* Day of the week [" 0 ", " 6 "] (Sunday = " 0 ") */"
-.BR " int tm_yday;" \
-" /* Day of the year [" 0 ", " 365 "] (Jan/01 = " 0 ") */"
-.BR " int tm_isdst;" " /* Daylight savings flag */"
-.PP
-.BR " long tm_gmtoff;" " /* Seconds East of UTC */"
-.BR " const char *tm_zone;" " /* Timezone abbreviation */"
-.B };
-.EE
-.PP
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.PP
-.IR tm_gmtoff ,
-.IR tm_zone :
-.nf
-.\" Guarded with __USE_MISC:
- Since glibc 2.20:
- _DEFAULT_SOURCE
- glibc 2.20 and earlier:
- _BSD_SOURCE
-.fi
-.SH DESCRIPTION
-Describes time, broken down into distinct components.
-.PP
-.I tm_isdst
-describes whether daylight saving time is in effect at the time described.
-The value is positive if daylight saving time is in effect,
-zero if it is not,
-and negative if the information is not available.
-.PP
-.I tm_gmtoff
-is the difference, in seconds,
-of the timezone represented by this broken-down time and UTC
-(this is the additive inverse of
-.BR timezone (3)).
-.PP
-.I tm_zone
-is the equivalent of
-.BR tzname (3)
-for the timezone represented by this broken-down time.
-.SH VERSIONS
-In C90,
-.I tm_sec
-could represent values in the range
-.RB [ 0 ", " 61 ],
-which could represent a double leap second.
-UTC doesn't permit double leap seconds,
-so it was limited to
-.B 60
-in C99.
-.PP
-.BR timezone (3),
-as a variable, is an XSI extension: some systems provide the V7-compatible
-.\" FreeBSD
-.BR timezone (3)
-function.
-The
-.I tm_gmtoff
-field provides an alternative (with the opposite sign) for those systems.
-.PP
-.I tm_zone
-points to static storage and may be overridden on subsequent calls to
-.BR localtime (3)
-and similar functions (however, this never happens under glibc).
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C89, POSIX.1-2001.
-.PP
-.I tm_gmtoff
-and
-.I tm_zone
-originate from 4.3BSD-Tahoe (where
-.I tm_zone
-is a
-.IR "char *" ).
-.SH NOTES
-.I tm_sec
-can represent a leap second with the value
-.BR 60 .
-.SH SEE ALSO
-.BR ctime (3),
-.BR strftime (3),
-.BR strptime (3),
-.BR time (7)
diff --git a/man3type/uid_t.3type b/man3type/uid_t.3type
deleted file mode 100644
index 52bae7406..000000000
--- a/man3type/uid_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/id_t.3type
diff --git a/man3type/uint16_t.3type b/man3type/uint16_t.3type
deleted file mode 100644
index a0d1a82b8..000000000
--- a/man3type/uint16_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/intN_t.3type
diff --git a/man3type/uint32_t.3type b/man3type/uint32_t.3type
deleted file mode 100644
index a0d1a82b8..000000000
--- a/man3type/uint32_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/intN_t.3type
diff --git a/man3type/uint64_t.3type b/man3type/uint64_t.3type
deleted file mode 100644
index a0d1a82b8..000000000
--- a/man3type/uint64_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/intN_t.3type
diff --git a/man3type/uint8_t.3type b/man3type/uint8_t.3type
deleted file mode 100644
index a0d1a82b8..000000000
--- a/man3type/uint8_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/intN_t.3type
diff --git a/man3type/uintN_t.3type b/man3type/uintN_t.3type
deleted file mode 100644
index a0d1a82b8..000000000
--- a/man3type/uintN_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/intN_t.3type
diff --git a/man3type/uintmax_t.3type b/man3type/uintmax_t.3type
deleted file mode 100644
index 497d4ace1..000000000
--- a/man3type/uintmax_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/intmax_t.3type
diff --git a/man3type/uintptr_t.3type b/man3type/uintptr_t.3type
deleted file mode 100644
index 6a55bc9be..000000000
--- a/man3type/uintptr_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/intptr_t.3type
diff --git a/man3type/useconds_t.3type b/man3type/useconds_t.3type
deleted file mode 100644
index 7f430e1eb..000000000
--- a/man3type/useconds_t.3type
+++ /dev/null
@@ -1 +0,0 @@
-.so man3type/time_t.3type
diff --git a/man3type/va_list.3type b/man3type/va_list.3type
deleted file mode 100644
index 08b1abfdd..000000000
--- a/man3type/va_list.3type
+++ /dev/null
@@ -1,44 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH va_list 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-va_list \- variable argument list
-.SH LIBRARY
-Standard C library
-.RI ( libc )
-.SH SYNOPSIS
-.nf
-.B #include <stdarg.h>
-.PP
-.BR typedef " /* ... */ " va_list;
-.fi
-.SH DESCRIPTION
-Used by functions with a varying number of arguments of varying types.
-The function must declare an object of type
-.I va_list
-which is used by the macros
-.BR va_start (3),
-.BR va_arg (3),
-.BR va_copy (3),
-and
-.BR va_end (3)
-to traverse the list of arguments.
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C89, POSIX.1-2001.
-.SH NOTES
-The following headers also provide
-.IR va_list :
-.I <stdio.h>
-and
-.IR <wchar.h> .
-.SH SEE ALSO
-.BR va_start (3),
-.BR va_arg (3),
-.BR va_copy (3),
-.BR va_end (3)
diff --git a/man3type/void.3type b/man3type/void.3type
deleted file mode 100644
index c8a638a78..000000000
--- a/man3type/void.3type
+++ /dev/null
@@ -1,76 +0,0 @@
-.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH void 3type (date) "Linux man-pages (unreleased)"
-.SH NAME
-void \- abstract type
-.SH SYNOPSIS
-.nf
-.B void *
-.fi
-.SH DESCRIPTION
-A pointer to any object type may be converted to a pointer to
-.I void
-and back.
-POSIX further requires that any pointer,
-including pointers to functions,
-may be converted to a pointer to
-.I void
-and back.
-.PP
-Conversions from and to any other pointer type are done implicitly,
-not requiring casts at all.
-Note that this feature prevents any kind of type checking:
-the programmer should be careful not to convert a
-.I void *
-value to a type incompatible to that of the underlying data,
-because that would result in undefined behavior.
-.PP
-This type is useful in function parameters and return value
-to allow passing values of any type.
-The function will typically use some mechanism to know
-the real type of the data being passed via a pointer to
-.IR void .
-.PP
-A value of this type can't be dereferenced,
-as it would give a value of type
-.IR void ,
-which is not possible.
-Likewise, pointer arithmetic is not possible with this type.
-However, in GNU C, pointer arithmetic is allowed
-as an extension to the standard;
-this is done by treating the size of a
-.I void
-or of a function as 1.
-A consequence of this is that
-.I sizeof
-is also allowed on
-.I void
-and on function types, and returns 1.
-.SS Use with printf(3) and scanf(3)
-The conversion specifier for
-.I void *
-for the
-.BR printf (3)
-and the
-.BR scanf (3)
-families of functions is
-.BR p .
-.SH VERSIONS
-The POSIX requirement about compatibility between
-.I void *
-and function pointers was added in
-POSIX.1-2008 Technical Corrigendum 1 (2013).
-.SH STANDARDS
-C11, POSIX.1-2008.
-.SH HISTORY
-C89, POSIX.1-2001.
-.SH SEE ALSO
-.BR malloc (3),
-.BR memcmp (3),
-.BR memcpy (3),
-.BR memset (3),
-.BR intptr_t (3type)
diff --git a/man4/cciss.4 b/man4/cciss.4
deleted file mode 100644
index 873ef9118..000000000
--- a/man4/cciss.4
+++ /dev/null
@@ -1,385 +0,0 @@
-'\" t
-.\" Copyright (C) 2011, Hewlett-Packard Development Company, L.P.
-.\" Written by Stephen M. Cameron <scameron@beardog.cce.hp.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-only
-.\"
-.\" shorthand for double quote that works everywhere.
-.ds q \N'34'
-.TH cciss 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cciss \- HP Smart Array block driver
-.SH SYNOPSIS
-.nf
-modprobe cciss [ cciss_allow_hpsa=1 ]
-.fi
-.SH DESCRIPTION
-.\" commit 253d2464df446456c0bba5ed4137a7be0b278aa8
-.BR Note :
-This obsolete driver was removed in Linux 4.14,
-as it is superseded by the
-.BR hpsa (4)
-driver in newer kernels.
-.PP
-.B cciss
-is a block driver for older HP Smart Array RAID controllers.
-.SS Options
-.IR "cciss_allow_hpsa=1" :
-This option prevents the
-.B cciss
-driver from attempting to drive any controllers that the
-.BR hpsa (4)
-driver is capable of controlling, which is to say, the
-.B cciss
-driver is restricted by this option to the following controllers:
-.PP
-.nf
- Smart Array 5300
- Smart Array 5i
- Smart Array 532
- Smart Array 5312
- Smart Array 641
- Smart Array 642
- Smart Array 6400
- Smart Array 6400 EM
- Smart Array 6i
- Smart Array P600
- Smart Array P400i
- Smart Array E200i
- Smart Array E200
- Smart Array E200i
- Smart Array E200i
- Smart Array E200i
- Smart Array E500
-.fi
-.SS Supported hardware
-The
-.B cciss
-driver supports the following Smart Array boards:
-.PP
-.nf
- Smart Array 5300
- Smart Array 5i
- Smart Array 532
- Smart Array 5312
- Smart Array 641
- Smart Array 642
- Smart Array 6400
- Smart Array 6400 U320 Expansion Module
- Smart Array 6i
- Smart Array P600
- Smart Array P800
- Smart Array E400
- Smart Array P400i
- Smart Array E200
- Smart Array E200i
- Smart Array E500
- Smart Array P700m
- Smart Array P212
- Smart Array P410
- Smart Array P410i
- Smart Array P411
- Smart Array P812
- Smart Array P712m
- Smart Array P711m
-.fi
-.SS Configuration details
-To configure HP Smart Array controllers,
-use the HP Array Configuration Utility
-(either
-.BR hpacuxe (8)
-or
-.BR hpacucli (8))
-or the Offline ROM-based Configuration Utility (ORCA)
-run from the Smart Array's option ROM at boot time.
-.SH FILES
-.SS Device nodes
-The device naming scheme is as follows:
-.PP
-Major numbers:
-.IP
-.TS
-r r.
-104 cciss0
-105 cciss1
-106 cciss2
-105 cciss3
-108 cciss4
-109 cciss5
-110 cciss6
-111 cciss7
-.TE
-.PP
-Minor numbers:
-.PP
-.EX
- b7 b6 b5 b4 b3 b2 b1 b0
- |\-\-\-\-+\-\-\-\-| |\-\-\-\-+\-\-\-\-|
- | |
- | +\-\-\-\-\-\-\-\- Partition ID (0=wholedev, 1\-15 partition)
- |
- +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- Logical Volume number
-.EE
-.PP
-The device naming scheme is:
-.TS
-li l.
-/dev/cciss/c0d0 Controller 0, disk 0, whole device
-/dev/cciss/c0d0p1 Controller 0, disk 0, partition 1
-/dev/cciss/c0d0p2 Controller 0, disk 0, partition 2
-/dev/cciss/c0d0p3 Controller 0, disk 0, partition 3
-\&
-/dev/cciss/c1d1 Controller 1, disk 1, whole device
-/dev/cciss/c1d1p1 Controller 1, disk 1, partition 1
-/dev/cciss/c1d1p2 Controller 1, disk 1, partition 2
-/dev/cciss/c1d1p3 Controller 1, disk 1, partition 3
-.TE
-.SS Files in /proc
-The files
-.I /proc/driver/cciss/cciss[0\-9]+
-contain information about
-the configuration of each controller.
-For example:
-.PP
-.in +4n
-.EX
-$ \fBcd /proc/driver/cciss\fP
-$ \fBls \-l\fP
-total 0
--rw\-r\-\-r\-\- 1 root root 0 2010\-09\-10 10:38 cciss0
--rw\-r\-\-r\-\- 1 root root 0 2010\-09\-10 10:38 cciss1
--rw\-r\-\-r\-\- 1 root root 0 2010\-09\-10 10:38 cciss2
-$ \fBcat cciss2\fP
-cciss2: HP Smart Array P800 Controller
-Board ID: 0x3223103c
-Firmware Version: 7.14
-IRQ: 16
-Logical drives: 1
-Current Q depth: 0
-Current # commands on controller: 0
-Max Q depth since init: 1
-Max # commands on controller since init: 2
-Max SG entries since init: 32
-Sequential access devices: 0
-\&
-cciss/c2d0: 36.38GB RAID 0
-.EE
-.in
-.\"
-.SS Files in /sys
-.TP
-.IR /sys/bus/pci/devices/ dev /cciss X /c X d Y /model
-Displays the SCSI INQUIRY page 0 model for logical drive
-.I Y
-of controller
-.IR X .
-.TP
-.IR /sys/bus/pci/devices/ dev /cciss X /c X d Y /rev
-Displays the SCSI INQUIRY page 0 revision for logical drive
-.I Y
-of controller
-.IR X .
-.TP
-.IR /sys/bus/pci/devices/ dev /cciss X /c X d Y /unique_id
-Displays the SCSI INQUIRY page 83 serial number for logical drive
-.I Y
-of controller
-.IR X .
-.TP
-.IR /sys/bus/pci/devices/ dev /cciss X /c X d Y /vendor
-Displays the SCSI INQUIRY page 0 vendor for logical drive
-.I Y
-of controller
-.IR X .
-.TP
-.IR /sys/bus/pci/devices/ dev /cciss X /c X d Y /block:cciss!c X d Y
-A symbolic link to
-.IR /sys/block/cciss!c X d Y.
-.TP
-.IR /sys/bus/pci/devices/ dev /cciss X /rescan
-When this file is written to, the driver rescans the controller
-to discover any new, removed, or modified logical drives.
-.TP
-.IR /sys/bus/pci/devices/ dev /cciss X /resettable
-A value of 1 displayed in this file indicates that
-the "reset_devices=1" kernel parameter (used by
-.BR kdump )
-is honored by this controller.
-A value of 0 indicates that the
-"reset_devices=1" kernel parameter will not be honored.
-Some models of Smart Array are not able to honor this parameter.
-.TP
-.IR /sys/bus/pci/devices/ dev /cciss X /c X d Y /lunid
-Displays the 8-byte LUN ID used to address logical drive
-.I Y
-of controller
-.IR X .
-.TP
-.IR /sys/bus/pci/devices/ dev /cciss X /c X d Y /raid_level
-Displays the RAID level of logical drive
-.I Y
-of controller
-.IR X .
-.TP
-.IR /sys/bus/pci/devices/ dev /cciss X /c X d Y /usage_count
-Displays the usage count (number of opens) of logical drive
-.I Y
-of controller
-.IR X .
-.SS SCSI tape drive and medium changer support
-SCSI sequential access devices and medium changer devices are supported and
-appropriate device nodes are automatically created (e.g.,
-.IR /dev/st0 ,
-.IR /dev/st1 ,
-etc.; see
-.BR st (4)
-for more details.)
-You must enable "SCSI tape drive support for Smart Array 5xxx" and
-"SCSI support" in your kernel configuration to be able to use SCSI
-tape drives with your Smart Array 5xxx controller.
-.PP
-Additionally, note that the driver will not engage the SCSI core at
-init time.
-The driver must be directed to dynamically engage the SCSI core via the
-.I /proc
-filesystem entry,
-which the "block" side of the driver creates as
-.I /proc/driver/cciss/cciss*
-at run time.
-This is because at driver init time,
-the SCSI core may not yet be initialized (because the driver is a block
-driver) and attempting to register it with the SCSI core in such a case
-would cause a hang.
-This is best done via an initialization script
-(typically in
-.IR /etc/init.d ,
-but could vary depending on distribution).
-For example:
-.PP
-.in +4n
-.EX
-for x in /proc/driver/cciss/cciss[0\-9]*
-do
- echo "engage scsi" > $x
-done
-.EE
-.in
-.PP
-Once the SCSI core is engaged by the driver, it cannot be disengaged
-(except by unloading the driver, if it happens to be linked as a module.)
-.PP
-Note also that if no sequential access devices or medium changers are
-detected, the SCSI core will not be engaged by the action of the above
-script.
-.SS Hot plug support for SCSI tape drives
-Hot plugging of SCSI tape drives is supported, with some caveats.
-The
-.B cciss
-driver must be informed that changes to the SCSI bus
-have been made.
-This may be done via the
-.I /proc
-filesystem.
-For example:
-.IP
-echo "rescan" > /proc/scsi/cciss0/1
-.PP
-This causes the driver to:
-.RS
-.IP (1) 5
-query the adapter about changes to the
-physical SCSI buses and/or fiber channel arbitrated loop, and
-.IP (2)
-make note of any new or removed sequential access devices
-or medium changers.
-.RE
-.PP
-The driver will output messages indicating which
-devices have been added or removed and the controller, bus, target, and
-lun used to address each device.
-The driver then notifies the SCSI midlayer
-of these changes.
-.PP
-Note that the naming convention of the
-.I /proc
-filesystem entries
-contains a number in addition to the driver name
-(e.g., "cciss0"
-instead of just "cciss", which you might expect).
-.PP
-Note:
-.I Only
-sequential access devices and medium changers are presented
-as SCSI devices to the SCSI midlayer by the
-.B cciss
-driver.
-Specifically, physical SCSI disk drives are
-.I not
-presented to the SCSI midlayer.
-The only disk devices that are presented to the kernel are logical
-drives that the array controller constructs from regions on
-the physical drives.
-The logical drives are presented to the block layer
-(not to the SCSI midlayer).
-It is important for the driver to prevent the kernel from accessing the
-physical drives directly, since these drives are used by the array
-controller to construct the logical drives.
-.SS SCSI error handling for tape drives and medium changers
-The Linux SCSI midlayer provides an error-handling protocol that
-is initiated whenever a SCSI command fails to complete within a
-certain amount of time (which can vary depending on the command).
-The
-.B cciss
-driver participates in this protocol to some extent.
-The normal protocol is a four-step process:
-.IP (1) 5
-First, the device is told to abort the command.
-.IP (2)
-If that doesn't work, the device is reset.
-.IP (3)
-If that doesn't work, the SCSI bus is reset.
-.IP (4)
-If that doesn't work, the host bus adapter is reset.
-.PP
-The
-.B cciss
-driver is a block
-driver as well as a SCSI driver and only the tape drives and medium
-changers are presented to the SCSI midlayer.
-Furthermore, unlike more
-straightforward SCSI drivers, disk I/O continues through the block
-side during the SCSI error-recovery process.
-Therefore, the
-.B cciss
-driver implements only the first two of these actions,
-aborting the command, and resetting the device.
-Note also that most tape drives will not oblige
-in aborting commands, and sometimes it appears they will not even
-obey a reset command, though in most circumstances they will.
-If the command cannot be aborted and the device cannot be
-reset, the device will be set offline.
-.PP
-In the event that the error-handling code is triggered and a tape drive is
-successfully reset or the tardy command is successfully aborted, the
-tape drive may still not allow I/O to continue until some command
-is issued that positions the tape to a known position.
-Typically you must rewind the tape (by issuing
-.I "mt \-f /dev/st0 rewind"
-for example) before I/O can proceed again to a tape drive that was reset.
-.SH SEE ALSO
-.BR hpsa (4),
-.BR cciss_vol_status (8),
-.BR hpacucli (8),
-.BR hpacuxe (8)
-.PP
-.UR http://cciss.sf.net
-.UE ,
-and
-.I Documentation/blockdev/cciss.txt
-and
-.I Documentation/ABI/testing/sysfs\-bus\-pci\-devices\-cciss
-in the Linux kernel source tree
-.\" .SH AUTHORS
-.\" Don Brace, Steve Cameron, Chase Maupin, Mike Miller, Michael Ni,
-.\" Charles White, Francis Wiran
-.\" and probably some other people.
diff --git a/man4/console_codes.4 b/man4/console_codes.4
deleted file mode 100644
index 5fc7f0b73..000000000
--- a/man4/console_codes.4
+++ /dev/null
@@ -1,810 +0,0 @@
-'\" t
-.\" Copyright (c) 1996 Andries Brouwer <aeb@cwi.nl>, Mon Oct 31 22:13:04 1996
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" This is combined from many sources.
-.\" For Linux, the definitive source is of course console.c.
-.\" About vt100-like escape sequences in general there are
-.\" the ISO 6429 and ISO 2022 norms, the descriptions of
-.\" an actual vt100, and the xterm docs (ctlseqs.ms).
-.\" Substantial portions of this text are derived from a write-up
-.\" by Eric S. Raymond <esr@thyrsus.com>.
-.\"
-.\" Tiny correction, aeb, 961107.
-.\"
-.\" 2006-05-27, Several corrections - Thomas E. Dickey
-.\"
-.TH console_codes 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-console_codes \- Linux console escape and control sequences
-.SH DESCRIPTION
-The Linux console implements a large subset of the VT102 and ECMA-48/ISO
-6429/ANSI X3.64 terminal controls, plus certain private-mode sequences
-for changing the color palette, character-set mapping, and so on.
-In the tabular descriptions below, the second column gives ECMA-48 or DEC
-mnemonics (the latter if prefixed with DEC) for the given function.
-Sequences without a mnemonic are neither ECMA-48 nor VT102.
-.PP
-After all the normal output processing has been done, and a
-stream of characters arrives at the console driver for actual
-printing, the first thing that happens is a translation from
-the code used for processing to the code used for printing.
-.PP
-If the console is in UTF-8 mode, then the incoming bytes are
-first assembled into 16-bit Unicode codes.
-Otherwise, each byte is transformed according to the current mapping table
-(which translates it to a Unicode value).
-See the \fBCharacter Sets\fP section below for discussion.
-.PP
-In the normal case, the Unicode value is converted to a font index,
-and this is stored in video memory, so that the corresponding glyph
-(as found in video ROM) appears on the screen.
-Note that the use of Unicode (and the design of the PC hardware)
-allows us to use 512 different glyphs simultaneously.
-.PP
-If the current Unicode value is a control character, or we are
-currently processing an escape sequence, the value will treated
-specially.
-Instead of being turned into a font index and rendered as
-a glyph, it may trigger cursor movement or other control functions.
-See the \fBLinux Console Controls\fP section below for discussion.
-.PP
-It is generally not good practice to hard-wire terminal controls into
-programs.
-Linux supports a
-.BR terminfo (5)
-database of terminal capabilities.
-Rather than emitting console escape sequences by hand, you will almost
-always want to use a terminfo-aware screen library or utility such as
-.BR ncurses (3),
-.BR tput (1),
-or
-.BR reset (1).
-.SS Linux console controls
-This section describes all the control characters and escape sequences
-that invoke special functions (i.e., anything other than writing a
-glyph at the current cursor location) on the Linux console.
-.PP
-.B "Control characters"
-.PP
-A character is a control character if (before transformation
-according to the mapping table) it has one of the 14 codes
-00 (NUL), 07 (BEL), 08 (BS), 09 (HT), 0a (LF), 0b (VT),
-0c (FF), 0d (CR), 0e (SO), 0f (SI), 18 (CAN), 1a (SUB),
-1b (ESC), 7f (DEL).
-One can set a "display control characters" mode (see below),
-and allow 07, 09, 0b, 18, 1a, 7f to be displayed as glyphs.
-On the other hand, in UTF-8 mode all codes 00\[en]1f are regarded
-as control characters, regardless of any "display control characters"
-mode.
-.PP
-If we have a control character, it is acted upon immediately
-and then discarded (even in the middle of an escape sequence)
-and the escape sequence continues with the next character.
-(However, ESC starts a new escape sequence, possibly aborting a previous
-unfinished one, and CAN and SUB abort any escape sequence.)
-The recognized control characters are BEL, BS, HT, LF, VT, FF,
-CR, SO, SI, CAN, SUB, ESC, DEL, CSI.
-They do what one would expect:
-.TP
-BEL (0x07, \fB\[ha]G\fP)
-beeps;
-.TP
-BS (0x08, \fB\[ha]H\fP)
-backspaces one column
-(but not past the beginning of the line);
-.TP
-HT (0x09, \fB\[ha]I\fP)
-goes to the next tab stop or to the end of the line
-if there is no earlier tab stop;
-.TP
-LF (0x0A, \fB\[ha]J\fP)
-.TQ
-VT (0x0B, \fB\[ha]K\fP)
-.TQ
-FF (0x0C, \fB\[ha]L\fP)
-all give a linefeed,
-and if LF/NL (new-line mode) is set also a carriage return;
-.TP
-CR (0x0D, \fB\[ha]M\fP)
-gives a carriage return;
-.TP
-SO (0x0E, \fB\[ha]N\fP)
-activates the G1 character set;
-.TP
-SI (0x0F, \fB\[ha]O\fP)
-activates the G0 character set;
-.TP
-CAN (0x18, \fB\[ha]X\fP)
-.TQ
-SUB (0x1A, \fB\[ha]Z\fP)
-abort escape sequences;
-.TP
-ESC (0x1B, \fB\[ha][\fP)
-starts an escape sequence;
-.TP
-DEL (0x7F)
-is ignored;
-.TP
-CSI (0x9B)
-is equivalent to ESC [.
-.PP
-.B "ESC- but not CSI-sequences"
-.ad l
-.TS
-l l lx.
-ESC c RIS Reset.
-ESC D IND Linefeed.
-ESC E NEL Newline.
-ESC H HTS Set tab stop at current column.
-ESC M RI Reverse linefeed.
-ESC Z DECID T{
-DEC private identification. The kernel
-returns the string ESC [ ? 6 c, claiming
-that it is a VT102.
-T}
-ESC 7 DECSC T{
-Save current state (cursor coordinates,
-attributes, character sets pointed at by G0, G1).
-T}
-ESC 8 DECRC T{
-Restore state most recently saved by ESC 7.
-T}
-ESC % Start sequence selecting character set
-ESC % @ \0\0\0Select default (ISO 646 / ISO 8859-1)
-ESC % G \0\0\0Select UTF-8
-ESC % 8 \0\0\0Select UTF-8 (obsolete)
-ESC # 8 DECALN T{
-DEC screen alignment test \- fill screen with E's.
-T}
-ESC ( T{
-Start sequence defining G0 character set
-(followed by one of B, 0, U, K, as below)
-T}
-ESC ( B T{
-Select default (ISO 8859-1 mapping).
-T}
-ESC ( 0 T{
-Select VT100 graphics mapping.
-T}
-ESC ( U T{
-Select null mapping \- straight to character ROM.
-T}
-ESC ( K T{
-Select user mapping \- the map that is loaded by the utility \fBmapscrn\fP(8).
-T}
-ESC ) T{
-Start sequence defining G1 (followed by one of B, 0, U, K, as above).
-T}
-ESC > DECPNM Set numeric keypad mode
-ESC = DECPAM Set application keypad mode
-ESC ] OSC T{
-Operating System Command prefix.
-T}
-ESC ] R Reset palette.
-ESC ] P T{
-Set palette, with parameter given in 7 hexadecimal digits \fInrrggbb\fP after
-the final P. Here \fIn\fP is the color (0\[en]15), and \fIrrggbb\fP indicates
-the red/green/blue values (0\[en]255).
-T}
-.TE
-.ad
-.PP
-.B "ECMA-48 CSI sequences"
-.PP
-CSI (or ESC [) is followed by a sequence of parameters,
-at most NPAR (16), that are decimal numbers separated by
-semicolons.
-An empty or absent parameter is taken to be 0.
-The sequence of parameters may be preceded by a single question mark.
-.PP
-However, after CSI [ (or ESC [ [) a single character is read
-and this entire sequence is ignored.
-(The idea is to ignore an echoed function key.)
-.PP
-The action of a CSI sequence is determined by its final character.
-.ad l
-.TS
-l l lx.
-@ ICH T{
-Insert the indicated # of blank characters.
-T}
-A CUU T{
-Move cursor up the indicated # of rows.
-T}
-B CUD T{
-Move cursor down the indicated # of rows.
-T}
-C CUF T{
-Move cursor right the indicated # of columns.
-T}
-D CUB T{
-Move cursor left the indicated # of columns.
-T}
-E CNL T{
-Move cursor down the indicated # of rows, to column 1.
-T}
-F CPL T{
-Move cursor up the indicated # of rows, to column 1.
-T}
-G CHA T{
-Move cursor to indicated column in current row.
-T}
-H CUP T{
-Move cursor to the indicated row, column (origin at 1,1).
-T}
-J ED T{
-Erase display (default: from cursor to end of display).
-T}
- T{
-ESC [ 1 J: erase from start to cursor.
-T}
- T{
-ESC [ 2 J: erase whole display.
-T}
- T{
-ESC [ 3 J: erase whole display including scroll-back
-buffer (since Linux 3.0).
-T}
-.\" ESC [ 3 J: commit f8df13e0a901fe55631fed66562369b4dba40f8b
-K EL T{
-Erase line (default: from cursor to end of line).
-T}
- T{
-ESC [ 1 K: erase from start of line to cursor.
-T}
- T{
-ESC [ 2 K: erase whole line.
-T}
-L IL T{
-Insert the indicated # of blank lines.
-T}
-M DL T{
-Delete the indicated # of lines.
-T}
-P DCH T{
-Delete the indicated # of characters on current line.
-T}
-X ECH T{
-Erase the indicated # of characters on current line.
-T}
-a HPR T{
-Move cursor right the indicated # of columns.
-T}
-c DA T{
-Answer ESC [ ? 6 c: "I am a VT102".
-T}
-d VPA T{
-Move cursor to the indicated row, current column.
-T}
-e VPR T{
-Move cursor down the indicated # of rows.
-T}
-f HVP T{
-Move cursor to the indicated row, column.
-T}
-g TBC T{
-Without parameter: clear tab stop at current position.
-T}
- T{
-ESC [ 3 g: delete all tab stops.
-T}
-h SM Set Mode (see below).
-l RM Reset Mode (see below).
-m SGR Set attributes (see below).
-n DSR Status report (see below).
-q DECLL Set keyboard LEDs.
- ESC [ 0 q: clear all LEDs
- ESC [ 1 q: set Scroll Lock LED
- ESC [ 2 q: set Num Lock LED
- ESC [ 3 q: set Caps Lock LED
-r DECSTBM T{
-Set scrolling region; parameters are top and bottom row.
-T}
-s ? Save cursor location.
-u ? Restore cursor location.
-\` HPA T{
-Move cursor to indicated column in current row.
-T}
-.TE
-.ad
-.PP
-.B ECMA-48 Select Graphic Rendition
-.PP
-The ECMA-48 SGR sequence ESC [ \fIparameters\fP m sets display
-attributes.
-Several attributes can be set in the same sequence, separated by
-semicolons.
-An empty parameter (between semicolons or string initiator or
-terminator) is interpreted as a zero.
-.ad l
-.TS
-l lx.
-param result
-0 T{
-reset all attributes to their defaults
-T}
-1 set bold
-2 T{
-set half-bright (simulated with color on a color display)
-T}
-3 set italic (since Linux 2.6.22; simulated with color on a color display)
-4 T{
-set underscore (simulated with color on a color display)
-(the colors used to simulate dim or underline are set
-using ESC ] ...)
-T}
-5 set blink
-7 set reverse video
-10 T{
-reset selected mapping, display control flag,
-and toggle meta flag (ECMA-48 says "primary font").
-T}
-11 T{
-select null mapping, set display control flag,
-reset toggle meta flag (ECMA-48 says "first alternate font").
-T}
-12 T{
-select null mapping, set display control flag,
-set toggle meta flag (ECMA-48 says "second alternate font").
-The toggle meta flag
-causes the high bit of a byte to be toggled
-before the mapping table translation is done.
-T}
-21 T{
-set underline; before Linux 4.17, this value
-set normal intensity (as is done in many other terminals)
-T}
-22 set normal intensity
-23 italic off (since Linux 2.6.22)
-24 underline off
-25 blink off
-27 reverse video off
-30 set black foreground
-31 set red foreground
-32 set green foreground
-33 set brown foreground
-34 set blue foreground
-35 set magenta foreground
-36 set cyan foreground
-37 set white foreground
-38 T{
-256/24-bit foreground color follows, shoehorned into 16 basic colors
-(before Linux 3.16: set underscore on, set default foreground color)
-T}
-39 T{
-set default foreground color
-(before Linux 3.16: set underscore off, set default foreground color)
-T}
-40 set black background
-41 set red background
-42 set green background
-43 set brown background
-44 set blue background
-45 set magenta background
-46 set cyan background
-47 set white background
-48 T{
-256/24-bit background color follows, shoehorned into 8 basic colors
-T}
-49 set default background color
-90..97 T{
-set foreground to bright versions of 30..37
-T}
-100..107 T{
-set background, same as 40..47 (bright not supported)
-T}
-.TE
-.ad
-.PP
-Commands 38 and 48 require further arguments:
-.TS
-l lx.
-;5;x T{
-256 color: values 0..15 are IBGR (black, red, green, ... white),
-16..231 a 6x6x6 color cube, 232..255 a grayscale ramp
-T}
-;2;r;g;b T{
-24-bit color, r/g/b components are in the range 0..255
-T}
-.TE
-.PP
-.B ECMA-48 Mode Switches
-.TP
-ESC [ 3 h
-DECCRM (default off): Display control chars.
-.TP
-ESC [ 4 h
-DECIM (default off): Set insert mode.
-.TP
-ESC [ 20 h
-LF/NL (default off): Automatically follow echo of LF, VT, or FF with CR.
-.\"
-.PP
-.B ECMA-48 Status Report Commands
-.\"
-.TP
-ESC [ 5 n
-Device status report (DSR): Answer is ESC [ 0 n (Terminal OK).
-.TP
-ESC [ 6 n
-Cursor position report (CPR): Answer is ESC [ \fIy\fP ; \fIx\fP R,
-where \fIx,y\fP is the cursor location.
-.\"
-.PP
-.B DEC Private Mode (DECSET/DECRST) sequences
-.PP
-.\"
-These are not described in ECMA-48.
-We list the Set Mode sequences;
-the Reset Mode sequences are obtained by replacing the final \[aq]h\[aq]
-by \[aq]l\[aq].
-.TP
-ESC [ ? 1 h
-DECCKM (default off): When set, the cursor keys send an ESC O prefix,
-rather than ESC [.
-.TP
-ESC [ ? 3 h
-DECCOLM (default off = 80 columns): 80/132 col mode switch.
-The driver sources note that this alone does not suffice; some user-mode
-utility such as
-.BR resizecons (8)
-has to change the hardware registers on the console video card.
-.TP
-ESC [ ? 5 h
-DECSCNM (default off): Set reverse-video mode.
-.TP
-ESC [ ? 6 h
-DECOM (default off): When set, cursor addressing is relative to
-the upper left corner of the scrolling region.
-.TP
-ESC [ ? 7 h
-DECAWM (default on): Set autowrap on.
-In this mode, a graphic
-character emitted after column 80 (or column 132 of DECCOLM is on)
-forces a wrap to the beginning of the following line first.
-.TP
-ESC [ ? 8 h
-DECARM (default on): Set keyboard autorepeat on.
-.TP
-ESC [ ? 9 h
-X10 Mouse Reporting (default off): Set reporting mode to 1 (or reset to
-0)\[em]see below.
-.TP
-ESC [ ? 25 h
-DECTECM (default on): Make cursor visible.
-.TP
-ESC [ ? 1000 h
-X11 Mouse Reporting (default off): Set reporting mode to 2 (or reset
-to 0)\[em]see below.
-.\"
-.PP
-.B Linux Console Private CSI Sequences
-.PP
-.\"
-The following sequences are neither ECMA-48 nor native VT102.
-They are native to the Linux console driver.
-Colors are in SGR parameters:
-0 = black, 1 = red, 2 = green, 3 = brown, 4 = blue, 5 = magenta, 6 =
-cyan, 7 = white; 8\[en]15 = bright versions of 0\[en]7.
-.TS
-l lx.
-ESC [ 1 ; \fIn\fP ] T{
-Set color \fIn\fP as the underline color.
-T}
-ESC [ 2 ; \fIn\fP ] T{
-Set color \fIn\fP as the dim color.
-T}
-ESC [ 8 ] T{
-Make the current color pair the default attributes.
-T}
-ESC [ 9 ; \fIn\fP ] T{
-Set screen blank timeout to \fIn\fP minutes.
-T}
-ESC [ 10 ; \fIn\fP ] T{
-Set bell frequency in Hz.
-T}
-ESC [ 11 ; \fIn\fP ] T{
-Set bell duration in msec.
-T}
-ESC [ 12 ; \fIn\fP ] T{
-Bring specified console to the front.
-T}
-ESC [ 13 ] T{
-Unblank the screen.
-T}
-ESC [ 14 ; \fIn\fP ] T{
-Set the VESA powerdown interval in minutes.
-T}
-ESC [ 15 ] T{
-Bring the previous console to the front
-(since Linux 2.6.0).
-T}
-ESC [ 16 ; \fIn\fP ] T{
-Set the cursor blink interval in milliseconds
-(since Linux 4.2).
-T}
-.\" commit bd63364caa8df38bad2b25b11b2a1b849475cce5
-.TE
-.SS Character sets
-The kernel knows about 4 translations of bytes into console-screen
-symbols.
-The four tables are: a) Latin1 \-> PC,
-b) VT100 graphics \-> PC, c) PC \-> PC, d) user-defined.
-.PP
-There are two character sets, called G0 and G1, and one of them
-is the current character set.
-(Initially G0.)
-Typing \fB\[ha]N\fP causes G1 to become current,
-\fB\[ha]O\fP causes G0 to become current.
-.PP
-These variables G0 and G1 point at a translation table, and can be
-changed by the user.
-Initially they point at tables a) and b), respectively.
-The sequences ESC ( B and ESC ( 0 and ESC ( U and ESC ( K cause G0 to
-point at translation table a), b), c), and d), respectively.
-The sequences ESC ) B and ESC ) 0 and ESC ) U and ESC ) K cause G1 to
-point at translation table a), b), c), and d), respectively.
-.PP
-The sequence ESC c causes a terminal reset, which is what you want if the
-screen is all garbled.
-The oft-advised "echo \[ha]V\[ha]O" will make only G0 current,
-but there is no guarantee that G0 points at table a).
-In some distributions there is a program
-.BR reset (1)
-that just does "echo \[ha][c".
-If your terminfo entry for the console is correct
-(and has an entry rs1=\eEc), then "tput reset" will also work.
-.PP
-The user-defined mapping table can be set using
-.BR mapscrn (8).
-The result of the mapping is that if a symbol c is printed, the symbol
-s = map[c] is sent to the video memory.
-The bitmap that corresponds to
-s is found in the character ROM, and can be changed using
-.BR setfont (8).
-.SS Mouse tracking
-The mouse tracking facility is intended to return
-.BR xterm (1)-compatible
-mouse status reports.
-Because the console driver has no way to know
-the device or type of the mouse, these reports are returned in the
-console input stream only when the virtual terminal driver receives
-a mouse update ioctl.
-These ioctls must be generated by a mouse-aware
-user-mode application such as the
-.BR gpm (8)
-daemon.
-.PP
-The mouse tracking escape sequences generated by
-\fBxterm\fP(1) encode numeric parameters in a single character as
-\fIvalue\fP+040.
-For example, \[aq]!\[aq] is 1.
-The screen coordinate system is 1-based.
-.PP
-The X10 compatibility mode sends an escape sequence on button press
-encoding the location and the mouse button pressed.
-It is enabled by sending ESC [ ? 9 h and disabled with ESC [ ? 9 l.
-On button press, \fBxterm\fP(1) sends
-ESC [ M \fIbxy\fP (6 characters).
-Here \fIb\fP is button\-1,
-and \fIx\fP and \fIy\fP are the x and y coordinates of the mouse
-when the button was pressed.
-This is the same code the kernel also produces.
-.PP
-Normal tracking mode (not implemented in Linux 2.0.24) sends an escape
-sequence on both button press and release.
-Modifier information is also sent.
-It is enabled by sending ESC [ ? 1000 h and disabled with
-ESC [ ? 1000 l.
-On button press or release, \fBxterm\fP(1) sends ESC [ M
-\fIbxy\fP.
-The low two bits of \fIb\fP encode button information:
-0=MB1 pressed, 1=MB2 pressed, 2=MB3 pressed, 3=release.
-The upper bits encode what modifiers were down when the button was
-pressed and are added together: 4=Shift, 8=Meta, 16=Control.
-Again \fIx\fP and
-\fIy\fP are the x and y coordinates of the mouse event.
-The upper left corner is (1,1).
-.SS Comparisons with other terminals
-Many different terminal types are described, like the Linux console,
-as being "VT100-compatible".
-Here we discuss differences between the
-Linux console and the two most important others, the DEC VT102 and
-.BR xterm (1).
-.\"
-.PP
-.B Control-character handling
-.PP
-The VT102 also recognized the following control characters:
-.TP
-NUL (0x00)
-was ignored;
-.TP
-ENQ (0x05)
-triggered an answerback message;
-.TP
-DC1 (0x11, \fB\[ha]Q\fP, XON)
-resumed transmission;
-.TP
-DC3 (0x13, \fB\[ha]S\fP, XOFF)
-caused VT100 to ignore (and stop transmitting)
-all codes except XOFF and XON.
-.PP
-VT100-like DC1/DC3 processing may be enabled by the terminal driver.
-.PP
-The
-.BR xterm (1)
-program (in VT100 mode) recognizes the control characters
-BEL, BS, HT, LF, VT, FF, CR, SO, SI, ESC.
-.\"
-.PP
-.B Escape sequences
-.PP
-VT100 console sequences not implemented on the Linux console:
-.TS
-l l l.
-ESC N SS2 T{
-Single shift 2. (Select G2 character set for the next character only.)
-T}
-ESC O SS3 T{
-Single shift 3. (Select G3 character set for the next character only.)
-T}
-ESC P DCS T{
-Device control string (ended by ESC \e)
-T}
-ESC X SOS Start of string.
-ESC \[ha] PM Privacy message (ended by ESC \e)
-ESC \e ST String terminator
-ESC * ... Designate G2 character set
-ESC + ... Designate G3 character set
-.TE
-.PP
-The program
-.BR xterm (1)
-(in VT100 mode) recognizes ESC c, ESC # 8, ESC >, ESC =,
-ESC D, ESC E, ESC H, ESC M, ESC N, ESC O, ESC P ... ESC \e,
-ESC Z (it answers ESC [ ? 1 ; 2 c, "I am a VT100 with
-advanced video option")
-and ESC \[ha] ... ESC \e with the same meanings as indicated above.
-It accepts ESC (, ESC ), ESC *, ESC + followed by 0, A, B for
-the DEC special character and line drawing set, UK, and US-ASCII,
-respectively.
-.PP
-The user can configure \fBxterm\fP(1) to respond to VT220-specific
-control sequences, and it will identify itself as a VT52, VT100, and
-up depending on the way it is configured and initialized.
-.PP
-It accepts ESC ] (OSC) for the setting of certain resources.
-In addition to the ECMA-48 string terminator (ST),
-\fBxterm\fP(1) accepts a BEL to terminate an OSC string.
-These are a few of the OSC control sequences recognized by \fBxterm\fP(1):
-.TS
-l l.
-ESC ] 0 ; \fItxt\fP ST T{
-Set icon name and window title to \fItxt\fP.
-T}
-ESC ] 1 ; \fItxt\fP ST Set icon name to \fItxt\fP.
-ESC ] 2 ; \fItxt\fP ST Set window title to \fItxt\fP.
-ESC ] 4 ; \fInum\fP; \fItxt\fP ST Set ANSI color \fInum\fP to \fItxt\fP.
-ESC ] 10 ; \fItxt\fP ST Set dynamic text color to \fItxt\fP.
-ESC ] 4 6 ; \fIname\fP ST T{
-Change log file to \fIname\fP (normally disabled by a compile-time option).
-T}
-ESC ] 5 0 ; \fIfn\fP ST Set font to \fIfn\fP.
-.TE
-.PP
-It recognizes the following with slightly modified meaning
-(saving more state, behaving closer to VT100/VT220):
-.TS
-l l l.
-ESC 7 DECSC Save cursor
-ESC 8 DECRC Restore cursor
-.TE
-.PP
-It also recognizes
-.TS
-l l lx.
-ESC F T{
-Cursor to lower left corner of screen (if enabled
-by \fBxterm\fP(1)'s \fBhpLowerleftBugCompat\fP resource).
-T}
-ESC l Memory lock (per HP terminals).
- Locks memory above the cursor.
-ESC m Memory unlock (per HP terminals).
-ESC n LS2 Invoke the G2 character set.
-ESC o LS3 Invoke the G3 character set.
-ESC | LS3R Invoke the G3 character set as GR.
-ESC } LS2R Invoke the G2 character set as GR.
-ESC \[ti] LS1R Invoke the G1 character set as GR.
-.TE
-.PP
-It also recognizes ESC % and provides a more complete UTF-8
-implementation than Linux console.
-.\"
-.PP
-.B CSI Sequences
-.PP
-Old versions of \fBxterm\fP(1), for example, from X11R5,
-interpret the blink SGR as a bold SGR.
-Later versions which implemented ANSI colors, for example,
-XFree86 3.1.2A in 1995, improved this by allowing
-the blink attribute to be displayed as a color.
-Modern versions of xterm implement blink SGR as blinking text
-and still allow colored text as an alternate rendering of SGRs.
-Stock X11R6 versions did not recognize the color-setting SGRs until
-the X11R6.8 release, which incorporated XFree86 xterm.
-All ECMA-48 CSI sequences recognized by Linux are also recognized by
-.IR xterm ,
-however \fBxterm\fP(1) implements several ECMA-48 and DEC control sequences
-not recognized by Linux.
-.PP
-The \fBxterm\fP(1)
-program recognizes all of the DEC Private Mode sequences listed
-above, but none of the Linux private-mode sequences.
-For discussion of \fBxterm\fP(1)'s
-own private-mode sequences, refer to the
-\fIXterm Control Sequences\fP
-document by
-Edward Moy,
-Stephen Gildea,
-and Thomas E.\& Dickey
-available with the X distribution.
-That document, though terse, is much longer than this manual page.
-For a chronological overview,
-.PP
-.RS
-.UR http://invisible\-island.net\:/xterm\:/xterm.log.html
-.UE
-.RE
-.PP
-details changes to xterm.
-.PP
-The \fIvttest\fP program
-.PP
-.RS
-.UR http://invisible\-island.net\:/vttest/
-.UE
-.RE
-.PP
-demonstrates many of these control sequences.
-The \fBxterm\fP(1) source distribution also contains sample
-scripts which exercise other features.
-.SH NOTES
-ESC 8 (DECRC) is not able to restore the character set changed with
-ESC %.
-.SH BUGS
-In Linux 2.0.23, CSI is broken, and NUL is not ignored inside
-escape sequences.
-.PP
-Some older kernel versions (after Linux 2.0) interpret 8-bit control
-sequences.
-These "C1 controls" use codes between 128 and 159 to replace
-ESC [, ESC ] and similar two-byte control sequence initiators.
-There are fragments of that in modern kernels (either overlooked or
-broken by changes to support UTF-8),
-but the implementation is incomplete and should be regarded
-as unreliable.
-.PP
-Linux "private mode" sequences do not follow the rules in ECMA-48
-for private mode control sequences.
-In particular, those ending with ] do not use a standard terminating
-character.
-The OSC (set palette) sequence is a greater problem,
-since \fBxterm\fP(1) may interpret this as a control sequence
-which requires a string terminator (ST).
-Unlike the \fBsetterm\fP(1) sequences which will be ignored (since
-they are invalid control sequences), the palette sequence will make
-\fBxterm\fP(1) appear to hang (though pressing the return-key
-will fix that).
-To accommodate applications which have been hardcoded to use Linux
-control sequences,
-set the \fBxterm\fP(1) resource \fBbrokenLinuxOSC\fP to true.
-.PP
-An older version of this document implied that Linux recognizes the
-ECMA-48 control sequence for invisible text.
-It is ignored.
-.SH SEE ALSO
-.BR ioctl_console (2),
-.BR charsets (7)
diff --git a/man4/console_ioctl.4 b/man4/console_ioctl.4
deleted file mode 100644
index 5dfc68d8d..000000000
--- a/man4/console_ioctl.4
+++ /dev/null
@@ -1,2 +0,0 @@
-.so man2/ioctl_console.2
-.\" Link for old name of this page
diff --git a/man4/cpuid.4 b/man4/cpuid.4
deleted file mode 100644
index c89d27062..000000000
--- a/man4/cpuid.4
+++ /dev/null
@@ -1,81 +0,0 @@
-.\" Copyright (c) 2009 Intel Corporation, Author Andi Kleen
-.\" Description based on comments in arch/x86/kernel/cpuid.c
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH cpuid 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cpuid \- x86 CPUID access device
-.SH DESCRIPTION
-CPUID provides an interface for querying information about the x86 CPU.
-.PP
-This device is accessed by
-.BR lseek (2)
-or
-.BR pread (2)
-to the appropriate CPUID level and reading in chunks of 16 bytes.
-A larger read size means multiple reads of consecutive levels.
-.PP
-The lower 32 bits of the file position is used as the incoming
-.IR %eax ,
-and the upper 32 bits of the file position as the incoming
-.IR %ecx ,
-the latter is intended for "counting"
-.I eax
-levels like
-.IR eax=4 .
-.PP
-This driver uses
-.IR /dev/cpu/CPUNUM/cpuid ,
-where
-.I CPUNUM
-is the minor number,
-and on an SMP box will direct the access to CPU
-.I CPUNUM
-as listed in
-.IR /proc/cpuinfo .
-.PP
-This file is protected so that it can be read only by the user
-.IR root ,
-or members of the group
-.IR root .
-.SH NOTES
-The CPUID instruction can be directly executed by a program
-using inline assembler.
-However this device allows convenient
-access to all CPUs without changing process affinity.
-.PP
-Most of the information in
-.I cpuid
-is reported by the kernel in cooked form either in
-.I /proc/cpuinfo
-or through subdirectories in
-.IR /sys/devices/system/cpu .
-Direct CPUID access through this device should only
-be used in exceptional cases.
-.PP
-The
-.I cpuid
-driver is not auto-loaded.
-On modular kernels you might need to use the following command
-to load it explicitly before use:
-.PP
-.in +4n
-.EX
-$ modprobe cpuid
-.EE
-.in
-.PP
-There is no support for CPUID functions that require additional
-input registers.
-.PP
-Very old x86 CPUs don't support CPUID.
-.SH SEE ALSO
-.BR cpuid (1)
-.PP
-Intel Corporation, Intel 64 and IA-32 Architectures
-Software Developer's Manual Volume 2A:
-Instruction Set Reference, A-M, 3-180 CPUID reference.
-.PP
-Intel Corporation, Intel Processor Identification and
-the CPUID Instruction, Application note 485.
diff --git a/man4/dsp56k.4 b/man4/dsp56k.4
deleted file mode 100644
index 6e2baeb4e..000000000
--- a/man4/dsp56k.4
+++ /dev/null
@@ -1,107 +0,0 @@
-.\" Copyright (c) 2000 lars brinkhoff <lars@nocrew.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified, Thu Jan 27 19:16:19 CET 2000, lars@nocrew.org
-.\"
-.TH dsp56k 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-dsp56k \- DSP56001 interface device
-.SH SYNOPSIS
-.nf
-.B #include <asm/dsp56k.h>
-.PP
-.BI "ssize_t read(int " fd ", void *" data ", size_t " length );
-.BI "ssize_t write(int " fd ", void *" data ", size_t " length );
-.PP
-.BI "int ioctl(int " fd ", DSP56K_UPLOAD, struct dsp56k_upload *" program );
-.BI "int ioctl(int " fd ", DSP56K_SET_TX_WSIZE, int " wsize );
-.BI "int ioctl(int " fd ", DSP56K_SET_RX_WSIZE, int " wsize );
-.BI "int ioctl(int " fd ", DSP56K_HOST_FLAGS, struct dsp56k_host_flags *" flags );
-.BI "int ioctl(int " fd ", DSP56K_HOST_CMD, int " cmd );
-.fi
-.SH CONFIGURATION
-The
-.I dsp56k
-device is a character device with major number 55 and minor
-number 0.
-.SH DESCRIPTION
-The Motorola DSP56001 is a fully programmable 24-bit digital signal
-processor found in Atari Falcon030-compatible computers.
-The \fIdsp56k\fP special file is used to control the DSP56001, and
-to send and receive data using the bidirectional handshaked host
-port.
-.PP
-To send a data stream to the signal processor, use
-.BR write (2)
-to the
-device, and
-.BR read (2)
-to receive processed data.
-The data can be sent or
-received in 8, 16, 24, or 32-bit quantities on the host side, but will
-always be seen as 24-bit quantities in the DSP56001.
-.PP
-The following
-.BR ioctl (2)
-calls are used to control the
-\fIdsp56k\fP device:
-.TP
-.B DSP56K_UPLOAD
-resets the DSP56001 and uploads a program.
-The third
-.BR ioctl (2)
-argument must be a pointer to a \fIstruct dsp56k_upload\fP with members
-\fIbin\fP pointing to a DSP56001 binary program, and \fIlen\fP set to
-the length of the program, counted in 24-bit words.
-.TP
-.B DSP56K_SET_TX_WSIZE
-sets the transmit word size.
-Allowed values are in the range 1 to 4,
-and is the number of bytes that will be sent at a time to the
-DSP56001.
-These data quantities will either be padded with bytes containing zero,
-or truncated to fit the native 24-bit data format of the
-DSP56001.
-.TP
-.B DSP56K_SET_RX_WSIZE
-sets the receive word size.
-Allowed values are in the range 1 to 4,
-and is the number of bytes that will be received at a time from the DSP56001.
-These data quantities will either truncated,
-or padded with a null byte (\[aq]\e0\[aq]),
-to fit the native 24-bit data format of the DSP56001.
-.TP
-.B DSP56K_HOST_FLAGS
-read and write the host flags.
-The host flags are four
-general-purpose bits that can be read by both the hosting computer and
-the DSP56001.
-Bits 0 and 1 can be written by the host, and bits 2 and
-3 can be written by the DSP56001.
-.IP
-To access the host flags, the third
-.BR ioctl (2)
-argument must be a pointer
-to a \fIstruct dsp56k_host_flags\fP.
-If bit 0 or 1 is set in the
-\fIdir\fP member, the corresponding bit in \fIout\fP will be written
-to the host flags.
-The state of all host flags will be returned in
-the lower four bits of the \fIstatus\fP member.
-.TP
-.B DSP56K_HOST_CMD
-sends a host command.
-Allowed values are in the range 0 to 31, and is a
-user-defined command handled by the program running in the DSP56001.
-.SH FILES
-.I /dev/dsp56k
-.\" .SH AUTHORS
-.\" Fredrik Noring <noring@nocrew.org>, lars brinkhoff <lars@nocrew.org>,
-.\" Tomas Berndtsson <tomas@nocrew.org>.
-.SH SEE ALSO
-.IR linux/include/asm\-m68k/dsp56k.h ,
-.IR linux/drivers/char/dsp56k.c ,
-.UR http://dsp56k.nocrew.org/
-.UE ,
-DSP56000/DSP56001 Digital Signal Processor User's Manual
diff --git a/man4/fd.4 b/man4/fd.4
deleted file mode 100644
index 2b18e4e14..000000000
--- a/man4/fd.4
+++ /dev/null
@@ -1,232 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 Michael Haardt (michael@cantor.informatik.rwth-aachen.de)
-.\" and 1994,1995 Alain Knaff (Alain.Knaff@imag.fr)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified, Sun Feb 26 15:00:02 1995, faith@cs.unc.edu
-.\"
-.TH fd 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fd \- floppy disk device
-.SH CONFIGURATION
-Floppy drives are block devices with major number 2.
-Typically they
-are owned by
-root:floppy
-(i.e., user root, group floppy) and have
-either mode 0660 (access checking via group membership) or mode 0666
-(everybody has access).
-The minor
-numbers encode the device type, drive number, and controller number.
-For each device type (that is, combination of density and track count)
-there is a base minor number.
-To this base number, add the drive's
-number on its controller and 128 if the drive is on the secondary
-controller.
-In the following device tables, \fIn\fP represents the
-drive number.
-.PP
-\fBWarning: if you use formats with more tracks
-than supported by your drive, you may cause it mechanical damage.\fP
-Trying once if more tracks than the usual 40/80 are supported should not
-damage it, but no warranty is given for that.
-If you are not sure, don't create device
-entries for those formats, so as to prevent their usage.
-.PP
-Drive-independent device files which automatically detect the media
-format and capacity:
-.TS
-l c
-l c.
-Name Base
- minor #
-_
-\fBfd\fP\fIn\fP 0
-.TE
-.PP
-5.25 inch double-density device files:
-.TS
-lw(1i) l l l l c
-lw(1i) c c c c c.
-Name Capacity Cyl. Sect. Heads Base
- KiB minor #
-_
-\fBfd\fP\fIn\fP\fBd360\fP 360 40 9 2 4
-.TE
-.PP
-5.25 inch high-density device files:
-.TS
-lw(1i) l l l l c
-lw(1i) c c c c c.
-Name Capacity Cyl. Sect. Heads Base
- KiB minor #
-_
-\fBfd\fP\fIn\fP\fBh360\fP 360 40 9 2 20
-\fBfd\fP\fIn\fP\fBh410\fP 410 41 10 2 48
-\fBfd\fP\fIn\fP\fBh420\fP 420 42 10 2 64
-\fBfd\fP\fIn\fP\fBh720\fP 720 80 9 2 24
-\fBfd\fP\fIn\fP\fBh880\fP 880 80 11 2 80
-\fBfd\fP\fIn\fP\fBh1200\fP 1200 80 15 2 8
-\fBfd\fP\fIn\fP\fBh1440\fP 1440 80 18 2 40
-\fBfd\fP\fIn\fP\fBh1476\fP 1476 82 18 2 56
-\fBfd\fP\fIn\fP\fBh1494\fP 1494 83 18 2 72
-\fBfd\fP\fIn\fP\fBh1600\fP 1600 80 20 2 92
-.TE
-.PP
-3.5 inch double-density device files:
-.TS
-lw(1i) l l l l c
-lw(1i) c c c c c.
-Name Capacity Cyl. Sect. Heads Base
- KiB minor #
-_
-\fBfd\fP\fIn\fP\fBu360\fP 360 80 9 1 12
-\fBfd\fP\fIn\fP\fBu720\fP 720 80 9 2 16
-\fBfd\fP\fIn\fP\fBu800\fP 800 80 10 2 120
-\fBfd\fP\fIn\fP\fBu1040\fP 1040 80 13 2 84
-\fBfd\fP\fIn\fP\fBu1120\fP 1120 80 14 2 88
-.TE
-.PP
-3.5 inch high-density device files:
-.TS
-lw(1i) l l l l c
-lw(1i) c c c c c.
-Name Capacity Cyl. Sect. Heads Base
- KiB minor #
-_
-\fBfd\fP\fIn\fP\fBu360\fP 360 40 9 2 12
-\fBfd\fP\fIn\fP\fBu720\fP 720 80 9 2 16
-\fBfd\fP\fIn\fP\fBu820\fP 820 82 10 2 52
-\fBfd\fP\fIn\fP\fBu830\fP 830 83 10 2 68
-\fBfd\fP\fIn\fP\fBu1440\fP 1440 80 18 2 28
-\fBfd\fP\fIn\fP\fBu1600\fP 1600 80 20 2 124
-\fBfd\fP\fIn\fP\fBu1680\fP 1680 80 21 2 44
-\fBfd\fP\fIn\fP\fBu1722\fP 1722 82 21 2 60
-\fBfd\fP\fIn\fP\fBu1743\fP 1743 83 21 2 76
-\fBfd\fP\fIn\fP\fBu1760\fP 1760 80 22 2 96
-\fBfd\fP\fIn\fP\fBu1840\fP 1840 80 23 2 116
-\fBfd\fP\fIn\fP\fBu1920\fP 1920 80 24 2 100
-.TE
-.PP
-3.5 inch extra-density device files:
-.TS
-lw(1i) l l l l c
-lw(1i) c c c c c.
-Name Capacity Cyl. Sect. Heads Base
- KiB minor #
-_
-\fBfd\fP\fIn\fP\fBu2880\fP 2880 80 36 2 32
-\fBfd\fP\fIn\fP\fBCompaQ\fP 2880 80 36 2 36
-\fBfd\fP\fIn\fP\fBu3200\fP 3200 80 40 2 104
-\fBfd\fP\fIn\fP\fBu3520\fP 3520 80 44 2 108
-\fBfd\fP\fIn\fP\fBu3840\fP 3840 80 48 2 112
-.TE
-.SH DESCRIPTION
-\fBfd\fP special files access the floppy disk drives in raw mode.
-The following
-.BR ioctl (2)
-calls are supported by \fBfd\fP devices:
-.TP
-.B FDCLRPRM
-clears the media information of a drive (geometry of disk in drive).
-.TP
-.B FDSETPRM
-sets the media information of a drive.
-The media information will be
-lost when the media is changed.
-.TP
-.B FDDEFPRM
-sets the media information of a drive (geometry of disk in drive).
-The media information will not be lost when the media is changed.
-This will disable autodetection.
-In order to reenable autodetection, you
-have to issue an \fBFDCLRPRM\fP.
-.TP
-.B FDGETDRVTYP
-returns the type of a drive (name parameter).
-For formats which work
-in several drive types, \fBFDGETDRVTYP\fP returns a name which is
-appropriate for the oldest drive type which supports this format.
-.TP
-.B FDFLUSH
-invalidates the buffer cache for the given drive.
-.TP
-.B FDSETMAXERRS
-sets the error thresholds for reporting errors, aborting the operation,
-recalibrating, resetting, and reading sector by sector.
-.TP
-.B FDSETMAXERRS
-gets the current error thresholds.
-.TP
-.B FDGETDRVTYP
-gets the internal name of the drive.
-.TP
-.B FDWERRORCLR
-clears the write error statistics.
-.TP
-.B FDWERRORGET
-reads the write error statistics.
-These include the total number of
-write errors, the location and disk of the first write error, and the
-location and disk of the last write error.
-Disks are identified by a
-generation number which is incremented at (almost) each disk change.
-.TP
-.B FDTWADDLE
-Switch the drive motor off for a few microseconds.
-This might be
-needed in order to access a disk whose sectors are too close together.
-.TP
-.B FDSETDRVPRM
-sets various drive parameters.
-.TP
-.B FDGETDRVPRM
-reads these parameters back.
-.TP
-.B FDGETDRVSTAT
-gets the cached drive state (disk changed, write protected et al.)
-.TP
-.B FDPOLLDRVSTAT
-polls the drive and return its state.
-.TP
-.B FDGETFDCSTAT
-gets the floppy controller state.
-.TP
-.B FDRESET
-resets the floppy controller under certain conditions.
-.TP
-.B FDRAWCMD
-sends a raw command to the floppy controller.
-.PP
-For more precise information, consult also the \fI<linux/fd.h>\fP and
-\fI<linux/fdreg.h>\fP include files, as well as the
-.BR floppycontrol (1)
-manual page.
-.SH FILES
-.I /dev/fd*
-.SH NOTES
-The various formats permit reading and writing many types of disks.
-However, if a floppy is formatted with an inter-sector gap that is too small,
-performance may drop,
-to the point of needing a few seconds to access an entire track.
-To prevent this, use interleaved formats.
-.PP
-It is not possible to
-read floppies which are formatted using GCR (group code recording),
-which is used by Apple II and Macintosh computers (800k disks).
-.PP
-Reading floppies which are hard sectored (one hole per sector, with
-the index hole being a little skewed) is not supported.
-This used to be common with older 8-inch floppies.
-.\" .SH AUTHORS
-.\" Alain Knaff (Alain.Knaff@imag.fr), David Niemi
-.\" (niemidc@clark.net), Bill Broadhurst (bbroad@netcom.com).
-.SH SEE ALSO
-.BR chown (1),
-.BR floppycontrol (1),
-.BR getfdprm (1),
-.BR mknod (1),
-.BR superformat (1),
-.BR mount (8),
-.BR setfdprm (8)
diff --git a/man4/full.4 b/man4/full.4
deleted file mode 100644
index e3c3de215..000000000
--- a/man4/full.4
+++ /dev/null
@@ -1,46 +0,0 @@
-.\" This man-page is Copyright (C) 1997 John S. Kallal
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" correction, aeb, 970825
-.TH full 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-full \- always full device
-.SH CONFIGURATION
-If your system does not have
-.I /dev/full
-created already, it
-can be created with the following commands:
-.PP
-.in +4n
-.EX
-mknod \-m 666 /dev/full c 1 7
-chown root:root /dev/full
-.EE
-.in
-.SH DESCRIPTION
-The file
-.I /dev/full
-has major device number 1
-and minor device number 7.
-.PP
-Writes to the
-.I /dev/full
-device fail with an
-.B ENOSPC
-error.
-This can be used to test how a program handles disk-full errors.
-.PP
-Reads from the
-.I /dev/full
-device will return \e0 characters.
-.PP
-Seeks on
-.I /dev/full
-will always succeed.
-.SH FILES
-.I /dev/full
-.SH SEE ALSO
-.BR mknod (1),
-.BR null (4),
-.BR zero (4)
diff --git a/man4/fuse.4 b/man4/fuse.4
deleted file mode 100644
index 612070787..000000000
--- a/man4/fuse.4
+++ /dev/null
@@ -1,535 +0,0 @@
-.\" Copyright (c) 2016 Julia Computing Inc, Keno Fischer
-.\" Description based on include/uapi/fuse.h and code in fs/fuse
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH fuse 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fuse \- Filesystem in Userspace (FUSE) device
-.SH SYNOPSIS
-.nf
-.B #include <linux/fuse.h>
-.fi
-.SH DESCRIPTION
-This device is the primary interface between the FUSE filesystem driver
-and a user-space process wishing to provide the filesystem (referred to
-in the rest of this manual page as the
-.IR "filesystem daemon" ).
-This manual page is intended for those
-interested in understanding the kernel interface itself.
-Those implementing a FUSE filesystem may wish to make use of
-a user-space library such as
-.I libfuse
-that abstracts away the low-level interface.
-.PP
-At its core, FUSE is a simple client-server protocol, in which the Linux
-kernel is the client and the daemon is the server.
-After obtaining a file descriptor for this device, the daemon may
-.BR read (2)
-requests from that file descriptor and is expected to
-.BR write (2)
-back its replies.
-It is important to note that a file descriptor is
-associated with a unique FUSE filesystem.
-In particular, opening a second copy of this device,
-will not allow access to resources created
-through the first file descriptor (and vice versa).
-.\"
-.SS The basic protocol
-Every message that is read by the daemon begins with a header described by
-the following structure:
-.PP
-.in +4n
-.EX
-struct fuse_in_header {
- uint32_t len; /* Total length of the data,
- including this header */
- uint32_t opcode; /* The kind of operation (see below) */
- uint64_t unique; /* A unique identifier for this request */
- uint64_t nodeid; /* ID of the filesystem object
- being operated on */
- uint32_t uid; /* UID of the requesting process */
- uint32_t gid; /* GID of the requesting process */
- uint32_t pid; /* PID of the requesting process */
- uint32_t padding;
-};
-.EE
-.in
-.PP
-The header is followed by a variable-length data portion
-(which may be empty) specific to the requested operation
-(the requested operation is indicated by
-.IR opcode ).
-.PP
-The daemon should then process the request and if applicable send
-a reply (almost all operations require a reply; if they do not,
-this is documented below), by performing a
-.BR write (2)
-to the file descriptor.
-All replies must start with the following header:
-.PP
-.in +4n
-.EX
-struct fuse_out_header {
- uint32_t len; /* Total length of data written to
- the file descriptor */
- int32_t error; /* Any error that occurred (0 if none) */
- uint64_t unique; /* The value from the
- corresponding request */
-};
-.EE
-.in
-.PP
-This header is also followed by (potentially empty) variable-sized
-data depending on the executed request.
-However, if the reply is an error reply (i.e.,
-.I error
-is set),
-then no further payload data should be sent, independent of the request.
-.\"
-.SS Exchanged messages
-This section should contain documentation for each of the messages
-in the protocol.
-This manual page is currently incomplete,
-so not all messages are documented.
-For each message, first the struct sent by the kernel is given,
-followed by a description of the semantics of the message.
-.TP
-.B FUSE_INIT
-.IP
-.in +4n
-.EX
-struct fuse_init_in {
- uint32_t major;
- uint32_t minor;
- uint32_t max_readahead; /* Since protocol v7.6 */
- uint32_t flags; /* Since protocol v7.6 */
-};
-.EE
-.in
-.IP
-This is the first request sent by the kernel to the daemon.
-It is used to negotiate the protocol version and other filesystem parameters.
-Note that the protocol version may affect the layout of any structure
-in the protocol (including this structure).
-The daemon must thus remember the negotiated version
-and flags for each session.
-As of the writing of this man page,
-the highest supported kernel protocol version is
-.IR 7.26 .
-.IP
-Users should be aware that the descriptions in this manual page
-may be incomplete or incorrect for older or more recent protocol versions.
-.IP
-The reply for this request has the following format:
-.IP
-.in +4n
-.EX
-struct fuse_init_out {
- uint32_t major;
- uint32_t minor;
- uint32_t max_readahead; /* Since v7.6 */
- uint32_t flags; /* Since v7.6; some flags bits
- were introduced later */
- uint16_t max_background; /* Since v7.13 */
- uint16_t congestion_threshold; /* Since v7.13 */
- uint32_t max_write; /* Since v7.5 */
- uint32_t time_gran; /* Since v7.6 */
- uint32_t unused[9];
-};
-.EE
-.in
-.IP
-If the major version supported by the kernel is larger than that supported
-by the daemon, the reply shall consist of only
-.I uint32_t major
-(following the usual header),
-indicating the largest major version supported by the daemon.
-The kernel will then issue a new
-.B FUSE_INIT
-request conforming to the older version.
-In the reverse case, the daemon should
-quietly fall back to the kernel's major version.
-.IP
-The negotiated minor version is considered to be the minimum
-of the minor versions provided by the daemon and the kernel and
-both parties should use the protocol corresponding to said minor version.
-.TP
-.B FUSE_GETATTR
-.IP
-.in +4n
-.EX
-struct fuse_getattr_in {
- uint32_t getattr_flags;
- uint32_t dummy;
- uint64_t fh; /* Set only if
- (getattr_flags & FUSE_GETATTR_FH)
-};
-.EE
-.in
-.IP
-The requested operation is to compute the attributes to be returned
-by
-.BR stat (2)
-and similar operations for the given filesystem object.
-The object for which the attributes should be computed is indicated
-either by
-.I header\->nodeid
-or, if the
-.B FUSE_GETATTR_FH
-flag is set, by the file handle
-.IR fh .
-The latter case of operation is analogous to
-.BR fstat (2).
-.IP
-For performance reasons, these attributes may be cached in the kernel for
-a specified duration of time.
-While the cache timeout has not been exceeded,
-the attributes will be served from the cache and will not cause additional
-.B FUSE_GETATTR
-requests.
-.IP
-The computed attributes and the requested
-cache timeout should then be returned in the following structure:
-.IP
-.in +4n
-.EX
-struct fuse_attr_out {
- /* Attribute cache duration (seconds + nanoseconds) */
- uint64_t attr_valid;
- uint32_t attr_valid_nsec;
- uint32_t dummy;
- struct fuse_attr {
- uint64_t ino;
- uint64_t size;
- uint64_t blocks;
- uint64_t atime;
- uint64_t mtime;
- uint64_t ctime;
- uint32_t atimensec;
- uint32_t mtimensec;
- uint32_t ctimensec;
- uint32_t mode;
- uint32_t nlink;
- uint32_t uid;
- uint32_t gid;
- uint32_t rdev;
- uint32_t blksize;
- uint32_t padding;
- } attr;
-};
-.EE
-.in
-.TP
-.B FUSE_ACCESS
-.IP
-.in +4n
-.EX
-struct fuse_access_in {
- uint32_t mask;
- uint32_t padding;
-};
-.EE
-.in
-.IP
-If the
-.I default_permissions
-mount options is not used, this request may be used for permissions checking.
-No reply data is expected, but errors may be indicated
-as usual by setting the
-.I error
-field in the reply header (in particular, access denied errors
-may be indicated by returning
-.BR \-EACCES ).
-.TP
-.BR FUSE_OPEN " and " FUSE_OPENDIR
-.in +4n
-.EX
-struct fuse_open_in {
- uint32_t flags; /* The flags that were passed
- to the open(2) */
- uint32_t unused;
-};
-.EE
-.in
-.IP
-The requested operation is to open the node indicated by
-.IR header\->nodeid .
-The exact semantics of what this means will depend on the
-filesystem being implemented.
-However, at the very least the
-filesystem should validate that the requested
-.I flags
-are valid for the indicated resource and then send a reply with the
-following format:
-.IP
-.in +4n
-.EX
-struct fuse_open_out {
- uint64_t fh;
- uint32_t open_flags;
- uint32_t padding;
-};
-.EE
-.in
-.IP
-The
-.I fh
-field is an opaque identifier that the kernel will use to refer
-to this resource
-The
-.I open_flags
-field is a bit mask of any number of the flags
-that indicate properties of this file handle to the kernel:
-.RS 7
-.TP 18
-.B FOPEN_DIRECT_IO
-Bypass page cache for this open file.
-.TP
-.B FOPEN_KEEP_CACHE
-Don't invalidate the data cache on open.
-.TP
-.B FOPEN_NONSEEKABLE
-The file is not seekable.
-.RE
-.TP
-.BR FUSE_READ " and " FUSE_READDIR
-.IP
-.in +4n
-.EX
-struct fuse_read_in {
- uint64_t fh;
- uint64_t offset;
- uint32_t size;
- uint32_t read_flags;
- uint64_t lock_owner;
- uint32_t flags;
- uint32_t padding;
-};
-.EE
-.in
-.IP
-The requested action is to read up to
-.I size
-bytes of the file or directory, starting at
-.IR offset .
-The bytes should be returned directly following the usual reply header.
-.TP
-.B FUSE_INTERRUPT
-.in +4n
-.EX
-struct fuse_interrupt_in {
- uint64_t unique;
-};
-.EE
-.in
-.IP
-The requested action is to cancel the pending operation indicated by
-.IR unique .
-This request requires no response.
-However, receipt of this message does
-not by itself cancel the indicated operation.
-The kernel will still expect a reply to said operation (e.g., an
-.I EINTR
-error or a short read).
-At most one
-.B FUSE_INTERRUPT
-request will be issued for a given operation.
-After issuing said operation,
-the kernel will wait uninterruptibly for completion of the indicated request.
-.TP
-.B FUSE_LOOKUP
-Directly following the header is a filename to be looked up in the directory
-indicated by
-.IR header\->nodeid .
-The expected reply is of the form:
-.IP
-.in +4n
-.EX
-struct fuse_entry_out {
- uint64_t nodeid; /* Inode ID */
- uint64_t generation; /* Inode generation */
- uint64_t entry_valid;
- uint64_t attr_valid;
- uint32_t entry_valid_nsec;
- uint32_t attr_valid_nsec;
- struct fuse_attr attr;
-};
-.EE
-.in
-.IP
-The combination of
-.I nodeid
-and
-.I generation
-must be unique for the filesystem's lifetime.
-.IP
-The interpretation of timeouts and
-.I attr
-is as for
-.BR FUSE_GETATTR .
-.TP
-.B FUSE_FLUSH
-.in +4n
-.EX
-struct fuse_flush_in {
- uint64_t fh;
- uint32_t unused;
- uint32_t padding;
- uint64_t lock_owner;
-};
-.EE
-.in
-.IP
-The requested action is to flush any pending changes to the indicated
-file handle.
-No reply data is expected.
-However, an empty reply message
-still needs to be issued once the flush operation is complete.
-.TP
-.BR FUSE_RELEASE " and " FUSE_RELEASEDIR
-.in +4n
-.EX
-struct fuse_release_in {
- uint64_t fh;
- uint32_t flags;
- uint32_t release_flags;
- uint64_t lock_owner;
-};
-.EE
-.in
-.IP
-These are the converse of
-.B FUSE_OPEN
-and
-.B FUSE_OPENDIR
-respectively.
-The daemon may now free any resources associated with the
-file handle
-.I fh
-as the kernel will no longer refer to it.
-There is no reply data associated with this request,
-but a reply still needs to be issued once the request has
-been completely processed.
-.TP
-.B FUSE_STATFS
-This operation implements
-.BR statfs (2)
-for this filesystem.
-There is no input data associated with this request.
-The expected reply data has the following structure:
-.IP
-.in +4n
-.EX
-struct fuse_kstatfs {
- uint64_t blocks;
- uint64_t bfree;
- uint64_t bavail;
- uint64_t files;
- uint64_t ffree;
- uint32_t bsize;
- uint32_t namelen;
- uint32_t frsize;
- uint32_t padding;
- uint32_t spare[6];
-};
-\&
-struct fuse_statfs_out {
- struct fuse_kstatfs st;
-};
-.EE
-.in
-.IP
-For the interpretation of these fields, see
-.BR statfs (2).
-.SH ERRORS
-.TP
-.B E2BIG
-Returned from
-.BR read (2)
-operations when the kernel's request is too large for the provided buffer
-and the request was
-.BR FUSE_SETXATTR .
-.TP
-.B EINVAL
-Returned from
-.BR write (2)
-if validation of the reply failed.
-Not all mistakes in replies will be caught by this validation.
-However, basic mistakes, such as short replies or an incorrect
-.I unique
-value, are detected.
-.TP
-.B EIO
-Returned from
-.BR read (2)
-operations when the kernel's request is too large for the provided buffer.
-.IP
-.IR Note :
-There are various ways in which incorrect use of these interfaces can cause
-operations on the provided filesystem's files and directories to fail with
-.BR EIO .
-Among the possible incorrect uses are:
-.RS
-.IP \[bu] 3
-changing
-.I mode & S_IFMT
-for an inode that has previously been reported to the kernel; or
-.IP \[bu]
-giving replies to the kernel that are shorter than what the kernel expected.
-.RE
-.TP
-.B ENODEV
-Returned from
-.BR read (2)
-and
-.BR write (2)
-if the FUSE filesystem was unmounted.
-.TP
-.B EPERM
-Returned from operations on a
-.I /dev/fuse
-file descriptor that has not been mounted.
-.SH STANDARDS
-Linux.
-.SH NOTES
-The following messages are not yet documented in this manual page:
-.PP
-.\" FIXME: Document the following.
-.in +4n
-.EX
-.B FUSE_BATCH_FORGET
-.B FUSE_BMAP
-.B FUSE_CREATE
-.B FUSE_DESTROY
-.B FUSE_FALLOCATE
-.B FUSE_FORGET
-.B FUSE_FSYNC
-.B FUSE_FSYNCDIR
-.B FUSE_GETLK
-.B FUSE_GETXATTR
-.B FUSE_IOCTL
-.B FUSE_LINK
-.B FUSE_LISTXATTR
-.B FUSE_LSEEK
-.B FUSE_MKDIR
-.B FUSE_MKNOD
-.B FUSE_NOTIFY_REPLY
-.B FUSE_POLL
-.B FUSE_READDIRPLUS
-.B FUSE_READLINK
-.B FUSE_REMOVEXATTR
-.B FUSE_RENAME
-.B FUSE_RENAME2
-.B FUSE_RMDIR
-.B FUSE_SETATTR
-.B FUSE_SETLK
-.B FUSE_SETLKW
-.B FUSE_SYMLINK
-.B FUSE_UNLINK
-.B FUSE_WRITE
-.EE
-.in
-.SH SEE ALSO
-.BR fusermount (1),
-.BR mount.fuse (8)
diff --git a/man4/hd.4 b/man4/hd.4
deleted file mode 100644
index 9b3761ee9..000000000
--- a/man4/hd.4
+++ /dev/null
@@ -1,82 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sat Jul 24 16:56:20 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Mon Oct 21 21:38:51 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" (and some more by aeb)
-.\"
-.TH hd 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-hd \- MFM/IDE hard disk devices
-.SH DESCRIPTION
-The
-.B hd*
-devices are block devices to access MFM/IDE hard disk drives
-in raw mode.
-The master drive on the primary IDE controller (major device
-number 3) is
-.BR hda ;
-the slave drive is
-.BR hdb .
-The master drive of the second controller (major device number 22)
-is
-.B hdc
-and the slave is
-.BR hdd .
-.PP
-General IDE block device names have the form
-.BI hd X\c
-, or
-.BI hd XP\c
-, where
-.I X
-is a letter denoting the physical drive, and
-.I P
-is a number denoting the partition on that physical drive.
-The first form,
-.BI hd X\c
-, is used to address the whole drive.
-Partition numbers are assigned in the order the partitions
-are discovered, and only nonempty, nonextended partitions
-get a number.
-However, partition numbers 1\[en]4 are given to the
-four partitions described in the MBR (the "primary" partitions),
-regardless of whether they are unused or extended.
-Thus, the first logical partition will be
-.BI hd X 5\c
-\&.
-Both DOS-type partitioning and BSD-disklabel partitioning are supported.
-You can have at most 63 partitions on an IDE disk.
-.PP
-For example,
-.I /dev/hda
-refers to all of the first IDE drive in the system; and
-.I /dev/hdb3
-refers to the third DOS "primary" partition on the second one.
-.PP
-They are typically created by:
-.PP
-.in +4n
-.EX
-mknod \-m 660 /dev/hda b 3 0
-mknod \-m 660 /dev/hda1 b 3 1
-mknod \-m 660 /dev/hda2 b 3 2
-\&...
-mknod \-m 660 /dev/hda8 b 3 8
-mknod \-m 660 /dev/hdb b 3 64
-mknod \-m 660 /dev/hdb1 b 3 65
-mknod \-m 660 /dev/hdb2 b 3 66
-\&...
-mknod \-m 660 /dev/hdb8 b 3 72
-chown root:disk /dev/hd*
-.EE
-.in
-.SH FILES
-.I /dev/hd*
-.SH SEE ALSO
-.BR chown (1),
-.BR mknod (1),
-.BR sd (4),
-.BR mount (8)
diff --git a/man4/hpsa.4 b/man4/hpsa.4
deleted file mode 100644
index 17a533c61..000000000
--- a/man4/hpsa.4
+++ /dev/null
@@ -1,234 +0,0 @@
-.\" Copyright (C) 2011, Hewlett-Packard Development Company, L.P.
-.\" Written by Stephen M. Cameron <scameron@beardog.cce.hp.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-only
-.\"
-.\" shorthand for double quote that works everywhere.
-.ds q \N'34'
-.TH hpsa 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-hpsa \- HP Smart Array SCSI driver
-.SH SYNOPSIS
-.nf
-modprobe hpsa [ hpsa_allow_any=1 ]
-.fi
-.SH DESCRIPTION
-.B hpsa
-is a SCSI driver for HP Smart Array RAID controllers.
-.SS Options
-.IR "hpsa_allow_any=1" :
-This option allows the driver to attempt to operate on
-any HP Smart Array hardware RAID controller,
-even if it is not explicitly known to the driver.
-This allows newer hardware to work with older drivers.
-Typically this is used to allow installation of
-operating systems from media that predates the
-RAID controller, though it may also be used to enable
-.B hpsa
-to drive older controllers that would normally be handled by the
-.BR cciss (4)
-driver.
-These older boards have not been tested and are
-not supported with
-.BR hpsa ,
-and
-.BR cciss (4)
-should still be used for these.
-.SS Supported hardware
-The
-.B hpsa
-driver supports the following Smart Array boards:
-.PP
-.nf
- Smart Array P700M
- Smart Array P212
- Smart Array P410
- Smart Array P410i
- Smart Array P411
- Smart Array P812
- Smart Array P712m
- Smart Array P711m
- StorageWorks P1210m
-.fi
-.PP
-.\" commit 135ae6edeb51979d0998daf1357f149a7d6ebb08
-Since Linux 4.14, the following Smart Array boards are also supported:
-.PP
-.nf
- Smart Array 5300
- Smart Array 5312
- Smart Array 532
- Smart Array 5i
- Smart Array 6400
- Smart Array 6400 EM
- Smart Array 641
- Smart Array 642
- Smart Array 6i
- Smart Array E200
- Smart Array E200i
- Smart Array E200i
- Smart Array E200i
- Smart Array E200i
- Smart Array E500
- Smart Array P400
- Smart Array P400i
- Smart Array P600
- Smart Array P700m
- Smart Array P800
-.fi
-.SS Configuration details
-To configure HP Smart Array controllers,
-use the HP Array Configuration Utility (either
-.BR hpacuxe (8)
-or
-.BR hpacucli (8))
-or the Offline ROM-based Configuration Utility (ORCA)
-run from the Smart Array's option ROM at boot time.
-.SH FILES
-.SS Device nodes
-Logical drives are accessed via the SCSI disk driver
-.RB ( sd (4)),
-tape drives via the SCSI tape driver
-.RB ( st (4)),
-and
-the RAID controller via the SCSI generic driver
-.RB ( sg (4)),
-with device nodes named
-.IR /dev/sd* ,
-.IR /dev/st* ,
-and
-.IR /dev/sg* ,
-respectively.
-.SS HPSA-specific host attribute files in /sys
-.TP
-.I /sys/class/scsi_host/host*/rescan
-This is a write-only attribute.
-Writing to this attribute will cause the driver to scan for
-new, changed, or removed devices (e.g., hot-plugged tape drives,
-or newly configured or deleted logical drives, etc.)
-and notify the SCSI midlayer of any changes detected.
-Normally a rescan is triggered automatically
-by HP's Array Configuration Utility (either the GUI or the
-command-line variety);
-thus, for logical drive changes, the user should not
-normally have to use this attribute.
-This attribute may be useful when hot plugging devices like tape drives,
-or entire storage boxes containing preconfigured logical drives.
-.TP
-.I /sys/class/scsi_host/host*/firmware_revision
-This attribute contains the firmware version of the Smart Array.
-.IP
-For example:
-.IP
-.in +4n
-.EX
-# \fBcd /sys/class/scsi_host/host4\fP
-# \fBcat firmware_revision\fP
-7.14
-.EE
-.in
-.\"
-.SS HPSA-specific disk attribute files in /sys
-.TP
-.I /sys/class/scsi_disk/c:b:t:l/device/unique_id
-This attribute contains a 32 hex-digit unique ID for each logical drive.
-.IP
-For example:
-.IP
-.in +4n
-.EX
-# \fBcd /sys/class/scsi_disk/4:0:0:0/device\fP
-# \fBcat unique_id\fP
-600508B1001044395355323037570F77
-.EE
-.in
-.TP
-.I /sys/class/scsi_disk/c:b:t:l/device/raid_level
-This attribute contains the RAID level of each logical drive.
-.IP
-For example:
-.IP
-.in +4n
-.EX
-# \fBcd /sys/class/scsi_disk/4:0:0:0/device\fP
-# \fBcat raid_level\fP
-RAID 0
-.EE
-.in
-.TP
-.I /sys/class/scsi_disk/c:b:t:l/device/lunid
-This attribute contains the 16 hex-digit (8 byte) LUN ID
-by which a logical drive or physical device can be addressed.
-.IR c : b : t : l
-are the controller, bus, target, and lun of the device.
-.PP
-For example:
-.IP
-.in +4n
-.EX
-# \fBcd /sys/class/scsi_disk/4:0:0:0/device\fP
-# \fBcat lunid\fP
-0x0000004000000000
-.EE
-.in
-.\"
-.SS Supported ioctl() operations
-For compatibility with applications written for the
-.BR cciss (4)
-driver, many, but
-not all of the ioctls supported by the
-.BR cciss (4)
-driver are also supported by the
-.B hpsa
-driver.
-The data structures used by these ioctls are described in
-the Linux kernel source file
-.IR include/linux/cciss_ioctl.h .
-.TP
-.BR CCISS_DEREGDISK ", " CCISS_REGNEWDISK ", " CCISS_REGNEWD
-These three ioctls all do exactly the same thing,
-which is to cause the driver to rescan for new devices.
-This does exactly the same thing as writing to the
-hpsa-specific host "rescan" attribute.
-.TP
-.B CCISS_GETPCIINFO
-Returns PCI domain, bus, device, and function and "board ID" (PCI subsystem ID).
-.TP
-.B CCISS_GETDRIVVER
-Returns driver version in three bytes encoded as:
-.IP
-.in +4n
-.EX
-(major_version << 16) | (minor_version << 8) |
- (subminor_version)
-.EE
-.in
-.TP
-.BR CCISS_PASSTHRU ", " CCISS_BIG_PASSTHRU
-Allows "BMIC" and "CISS" commands to be passed through to the Smart Array.
-These are used extensively by the HP Array Configuration Utility,
-SNMP storage agents, and so on.
-See
-.I cciss_vol_status
-at
-.UR http://cciss.sf.net
-.UE
-for some examples.
-.SH SEE ALSO
-.BR cciss (4),
-.BR sd (4),
-.BR st (4),
-.BR cciss_vol_status (8),
-.BR hpacucli (8),
-.BR hpacuxe (8)
-.PP
-.UR http://cciss.sf.net
-.UE ,
-and
-.I Documentation/scsi/hpsa.txt
-and
-.I Documentation/ABI/testing/sysfs\-bus\-pci\-devices\-cciss
-in the Linux kernel source tree
-.\" .SH AUTHORS
-.\" Don Brace, Steve Cameron, Tom Lawler, Mike Miller, Scott Teel
-.\" and probably some other people.
diff --git a/man4/initrd.4 b/man4/initrd.4
deleted file mode 100644
index 08df8e6a9..000000000
--- a/man4/initrd.4
+++ /dev/null
@@ -1,479 +0,0 @@
-.\" This man-page is Copyright (C) 1997 John S. Kallal
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" If the you wish to distribute versions of this work under other
-.\" conditions than the above, please contact the author(s) at the following
-.\" for permission:
-.\"
-.\" John S. Kallal -
-.\" email: <kallal@voicenet.com>
-.\" mail: 518 Kerfoot Farm RD, Wilmington, DE 19803-2444, USA
-.\" phone: (302)654-5478
-.\"
-.\" $Id: initrd.4,v 0.9 1997/11/07 05:05:32 kallal Exp kallal $
-.TH initrd 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-initrd \- boot loader initialized RAM disk
-.SH CONFIGURATION
-.I /dev/initrd
-is a read-only block device assigned
-major number 1 and minor number 250.
-Typically
-.I /dev/initrd
-is owned by
-root:disk
-with mode 0400 (read access by root only).
-If the Linux system does not have
-.I /dev/initrd
-already created, it can be created with the following commands:
-.PP
-.in +4n
-.EX
-mknod \-m 400 /dev/initrd b 1 250
-chown root:disk /dev/initrd
-.EE
-.in
-.PP
-Also, support for both "RAM disk" and "Initial RAM disk"
-(e.g.,
-.B CONFIG_BLK_DEV_RAM=y
-and
-.BR CONFIG_BLK_DEV_INITRD=y )
-must be compiled directly into the Linux kernel to use
-.IR /dev/initrd .
-When using
-.IR /dev/initrd ,
-the RAM disk driver cannot be loaded as a module.
-.\"
-.\"
-.\"
-.SH DESCRIPTION
-The special file
-.I /dev/initrd
-is a read-only block device.
-This device is a RAM disk that is initialized (e.g., loaded)
-by the boot loader before the kernel is started.
-The kernel then can use
-.IR /dev/initrd "'s"
-contents for a two-phase system boot-up.
-.PP
-In the first boot-up phase, the kernel starts up
-and mounts an initial root filesystem from the contents of
-.I /dev/initrd
-(e.g., RAM disk initialized by the boot loader).
-In the second phase, additional drivers or other modules
-are loaded from the initial root device's contents.
-After loading the additional modules, a new root filesystem
-(i.e., the normal root filesystem) is mounted from a
-different device.
-.\"
-.\"
-.\"
-.SS Boot-up operation
-When booting up with
-.BR initrd ,
-the system boots as follows:
-.IP (1) 5
-The boot loader loads the kernel program and
-.IR /dev/initrd 's
-contents into memory.
-.IP (2)
-On kernel startup,
-the kernel uncompresses and copies the contents of the device
-.I /dev/initrd
-onto device
-.I /dev/ram0
-and then frees the memory used by
-.IR /dev/initrd .
-.IP (3)
-The kernel then read-write mounts the device
-.I /dev/ram0
-as the initial root filesystem.
-.IP (4)
-If the indicated normal root filesystem is also the initial
-root filesystem (e.g.,
-.IR /dev/ram0 )
-then the kernel skips to the last step for the usual boot sequence.
-.IP (5)
-If the executable file
-.I /linuxrc
-is present in the initial root filesystem,
-.I /linuxrc
-is executed with UID 0.
-(The file
-.I /linuxrc
-must have executable permission.
-The file
-.I /linuxrc
-can be any valid executable, including a shell script.)
-.IP (6)
-If
-.I /linuxrc
-is not executed or when
-.I /linuxrc
-terminates, the normal root filesystem is mounted.
-(If
-.I /linuxrc
-exits with any filesystems mounted on the initial root
-filesystem, then the behavior of the kernel is
-.BR UNSPECIFIED .
-See the NOTES section for the current kernel behavior.)
-.IP (7)
-If the normal root filesystem has a directory
-.IR /initrd ,
-the device
-.I /dev/ram0
-is moved from
-.I /
-to
-.IR /initrd .
-Otherwise, if the directory
-.I /initrd
-does not exist, the device
-.I /dev/ram0
-is unmounted.
-(When moved from
-.I /
-to
-.IR /initrd ,
-.I /dev/ram0
-is not unmounted and therefore processes can remain running from
-.IR /dev/ram0 .
-If directory
-.I /initrd
-does not exist on the normal root filesystem
-and any processes remain running from
-.I /dev/ram0
-when
-.I /linuxrc
-exits, the behavior of the kernel is
-.BR UNSPECIFIED .
-See the NOTES section for the current kernel behavior.)
-.IP (8)
-The usual boot sequence (e.g., invocation of
-.IR /sbin/init )
-is performed on the normal root filesystem.
-.\"
-.\"
-.\"
-.SS Options
-The following boot loader options, when used with
-.BR initrd ,
-affect the kernel's boot-up operation:
-.TP
-.BI initrd= "filename"
-Specifies the file to load as the contents of
-.IR /dev/initrd .
-For
-.B LOADLIN
-this is a command-line option.
-For
-.B LILO
-you have to use this command in the
-.B LILO
-configuration file
-.IR /etc/lilo.config .
-The filename specified with this
-option will typically be a gzipped filesystem image.
-.TP
-.B noinitrd
-This boot option disables the two-phase boot-up operation.
-The kernel performs the usual boot sequence as if
-.I /dev/initrd
-was not initialized.
-With this option, any contents of
-.I /dev/initrd
-loaded into memory by the boot loader contents are preserved.
-This option permits the contents of
-.I /dev/initrd
-to be any data and need not be limited to a filesystem image.
-However, device
-.I /dev/initrd
-is read-only and can be read only one time after system startup.
-.TP
-.BI root= "device-name"
-Specifies the device to be used as the normal root filesystem.
-For
-.B LOADLIN
-this is a command-line option.
-For
-.B LILO
-this is a boot time option or
-can be used as an option line in the
-.B LILO
-configuration file
-.IR /etc/lilo.config .
-The device specified by this option must be a mountable
-device having a suitable root filesystem.
-.\"
-.\"
-.\"
-.SS Changing the normal root filesystem
-By default,
-the kernel's settings
-(e.g., set in the kernel file with
-.BR rdev (8)
-or compiled into the kernel file),
-or the boot loader option setting
-is used for the normal root filesystems.
-For an NFS-mounted normal root filesystem, one has to use the
-.B nfs_root_name
-and
-.B nfs_root_addrs
-boot options to give the NFS settings.
-For more information on NFS-mounted root see the kernel documentation file
-.I Documentation/filesystems/nfs/nfsroot.txt
-.\" commit dc7a08166f3a5f23e79e839a8a88849bd3397c32
-(or
-.I Documentation/filesystems/nfsroot.txt
-before Linux 2.6.33).
-For more information on setting the root filesystem see also the
-.B LILO
-and
-.B LOADLIN
-documentation.
-.PP
-It is also possible for the
-.I /linuxrc
-executable to change the normal root device.
-For
-.I /linuxrc
-to change the normal root device,
-.I /proc
-must be mounted.
-After mounting
-.IR /proc ,
-.I /linuxrc
-changes the normal root device by writing into the proc files
-.IR /proc/sys/kernel/real\-root\-dev ,
-.IR /proc/sys/kernel/nfs\-root\-name ,
-and
-.IR /proc/sys/kernel/nfs\-root\-addrs .
-For a physical root device, the root device is changed by having
-.I /linuxrc
-write the new root filesystem device number into
-.IR /proc/sys/kernel/real\-root\-dev .
-For an NFS root filesystem, the root device is changed by having
-.I /linuxrc
-write the NFS setting into files
-.I /proc/sys/kernel/nfs\-root\-name
-and
-.I /proc/sys/kernel/nfs\-root\-addrs
-and then writing 0xff (e.g., the pseudo-NFS-device number) into file
-.IR /proc/sys/kernel/real\-root\-dev .
-For example, the following shell command line would change
-the normal root device to
-.IR /dev/hdb1 :
-.PP
-.in +4n
-.EX
-echo 0x365 >/proc/sys/kernel/real\-root\-dev
-.EE
-.in
-.PP
-For an NFS example, the following shell command lines would change the
-normal root device to the NFS directory
-.I /var/nfsroot
-on a local networked NFS server with IP number 193.8.232.7 for a system with
-IP number 193.8.232.2 and named "idefix":
-.PP
-.in +4n
-.EX
-echo /var/nfsroot >/proc/sys/kernel/nfs\-root\-name
-echo 193.8.232.2:193.8.232.7::255.255.255.0:idefix \e
- >/proc/sys/kernel/nfs\-root\-addrs
-echo 255 >/proc/sys/kernel/real\-root\-dev
-.EE
-.in
-.PP
-.BR Note :
-The use of
-.I /proc/sys/kernel/real\-root\-dev
-to change the root filesystem is obsolete.
-See the Linux kernel source file
-.I Documentation/admin\-guide/initrd.rst
-.\" commit 9d85025b0418163fae079c9ba8f8445212de8568
-(or
-.I Documentation/initrd.txt
-before Linux 4.10)
-as well as
-.BR pivot_root (2)
-and
-.BR pivot_root (8)
-for information on the modern method of changing the root filesystem.
-.\" FIXME . Should this manual page describe the pivot_root mechanism?
-.\"
-.\"
-.\"
-.SS Usage
-The main motivation for implementing
-.B initrd
-was to allow for modular kernel configuration at system installation.
-.PP
-A possible system installation scenario is as follows:
-.IP (1) 5
-The loader program boots from floppy or other media with a minimal kernel
-(e.g., support for
-.IR /dev/ram ,
-.IR /dev/initrd ,
-and the ext2 filesystem) and loads
-.I /dev/initrd
-with a gzipped version of the initial filesystem.
-.IP (2)
-The executable
-.I /linuxrc
-determines what is needed to (1) mount the normal root filesystem
-(i.e., device type, device drivers, filesystem) and (2) the
-distribution media (e.g., CD-ROM, network, tape, ...).
-This can be done by asking the user, by auto-probing,
-or by using a hybrid approach.
-.IP (3)
-The executable
-.I /linuxrc
-loads the necessary modules from the initial root filesystem.
-.IP (4)
-The executable
-.I /linuxrc
-creates and populates the root filesystem.
-(At this stage the normal root filesystem does not have to be a
-completed system yet.)
-.IP (5)
-The executable
-.I /linuxrc
-sets
-.IR /proc/sys/kernel/real\-root\-dev ,
-unmounts
-.IR /proc ,
-the normal root filesystem and any other filesystems
-it has mounted, and then terminates.
-.IP (6)
-The kernel then mounts the normal root filesystem.
-.IP (7)
-Now that the filesystem is accessible and intact,
-the boot loader can be installed.
-.IP (8)
-The boot loader is configured to load into
-.I /dev/initrd
-a filesystem with the set of modules that was used to bring up the system.
-(e.g., device
-.I /dev/ram0
-can be modified, then unmounted, and finally, the image is written from
-.I /dev/ram0
-to a file.)
-.IP (9)
-The system is now bootable and additional installation tasks can be
-performed.
-.PP
-The key role of
-.I /dev/initrd
-in the above is to reuse the configuration data during normal system operation
-without requiring initial kernel selection, a large generic kernel or,
-recompiling the kernel.
-.PP
-A second scenario is for installations where Linux runs on systems with
-different hardware configurations in a single administrative network.
-In such cases, it may be desirable to use only a small set of kernels
-(ideally only one) and to keep the system-specific part of configuration
-information as small as possible.
-In this case, create a common file
-with all needed modules.
-Then, only the
-.I /linuxrc
-file or a file executed by
-.I /linuxrc
-would be different.
-.PP
-A third scenario is more convenient recovery disks.
-Because information like the location of the root filesystem
-partition is not needed at boot time, the system loaded from
-.I /dev/initrd
-can use a dialog and/or auto-detection followed by a
-possible sanity check.
-.PP
-Last but not least, Linux distributions on CD-ROM may use
-.B initrd
-for easy installation from the CD-ROM.
-The distribution can use
-.B LOADLIN
-to directly load
-.I /dev/initrd
-from CD-ROM without the need of any floppies.
-The distribution could also use a
-.B LILO
-boot floppy and then bootstrap a bigger RAM disk via
-.I /dev/initrd
-from the CD-ROM.
-.\"
-.\"
-.\"
-.SH FILES
-.I /dev/initrd
-.br
-.I /dev/ram0
-.br
-.I /linuxrc
-.br
-.I /initrd
-.\"
-.\"
-.\"
-.SH NOTES
-.IP \[bu] 3
-With the current kernel, any filesystems that remain mounted when
-.I /dev/ram0
-is moved from
-.I /
-to
-.I /initrd
-continue to be accessible.
-However, the
-.I /proc/mounts
-entries are not updated.
-.IP \[bu]
-With the current kernel, if directory
-.I /initrd
-does not exist, then
-.I /dev/ram0
-will
-.B not
-be fully unmounted if
-.I /dev/ram0
-is used by any process or has any filesystem mounted on it.
-If
-.I /dev/ram0
-is
-.B not
-fully unmounted, then
-.I /dev/ram0
-will remain in memory.
-.IP \[bu]
-Users of
-.I /dev/initrd
-should not depend on the behavior given in the above notes.
-The behavior may change in future versions of the Linux kernel.
-.\"
-.\"
-.\"
-.\" .SH AUTHORS
-.\" The kernel code for device
-.\" .BR initrd
-.\" was written by Werner Almesberger <almesber@lrc.epfl.ch> and
-.\" Hans Lermen <lermen@elserv.ffm.fgan.de>.
-.\" The code for
-.\" .BR initrd
-.\" was added to the baseline Linux kernel in development version 1.3.73.
-.SH SEE ALSO
-.BR chown (1),
-.BR mknod (1),
-.BR ram (4),
-.BR freeramdisk (8),
-.BR rdev (8)
-.PP
-.I Documentation/admin\-guide/initrd.rst
-.\" commit 9d85025b0418163fae079c9ba8f8445212de8568
-(or
-.I Documentation/initrd.txt
-before Linux 4.10)
-in the Linux kernel source tree, the LILO documentation,
-the LOADLIN documentation, the SYSLINUX documentation
diff --git a/man4/intro.4 b/man4/intro.4
deleted file mode 100644
index 1a3aadabb..000000000
--- a/man4/intro.4
+++ /dev/null
@@ -1,22 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sat Jul 24 16:57:14 1993 by Rik Faith (faith@cs.unc.edu)
-.TH intro 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-intro \- introduction to special files
-.SH DESCRIPTION
-Section 4 of the manual describes special files (devices).
-.SH FILES
-/dev/* \[em] device files
-.SH NOTES
-.SS Authors and copyright conditions
-Look at the header of the manual page source for the author(s) and copyright
-conditions.
-Note that these can be different from page to page!
-.SH SEE ALSO
-.BR mknod (1),
-.BR mknod (2),
-.BR standards (7)
diff --git a/man4/kmem.4 b/man4/kmem.4
deleted file mode 100644
index d4c1762c5..000000000
--- a/man4/kmem.4
+++ /dev/null
@@ -1 +0,0 @@
-.so man4/mem.4
diff --git a/man4/lirc.4 b/man4/lirc.4
deleted file mode 100644
index 4bd356d2e..000000000
--- a/man4/lirc.4
+++ /dev/null
@@ -1,422 +0,0 @@
-.\" Copyright (c) 2015-2016, Alec Leamas
-.\" Copyright (c) 2018, Sean Young <sean@mess.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.TH lirc 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-lirc \- lirc devices
-.SH DESCRIPTION
-The
-.I /dev/lirc*
-character devices provide a low-level
-bidirectional interface to infra-red (IR) remotes.
-Most of these devices can receive, and some can send.
-When receiving or sending data, the driver works in two different modes
-depending on the underlying hardware.
-.PP
-Some hardware (typically TV-cards) decodes the IR signal internally
-and provides decoded button presses as scancode values.
-Drivers for this kind of hardware work in
-.B LIRC_MODE_SCANCODE
-mode.
-Such hardware usually does not support sending IR signals.
-Furthermore, such hardware can only decode a limited set of IR protocols,
-usually only the protocol of the specific remote which is
-bundled with, for example, a TV-card.
-.PP
-Other hardware provides a stream of pulse/space durations.
-Such drivers work in
-.B LIRC_MODE_MODE2
-mode.
-Such hardware can be used with (almost) any kind of remote.
-This type of hardware can also be used in
-.B LIRC_MODE_SCANCODE
-mode, in which case the kernel IR decoders will decode the IR.
-These decoders can be written in extended BPF (see
-.BR bpf (2))
-and attached to the
-.B lirc
-device.
-Sometimes, this kind of hardware also supports
-sending IR data.
-.PP
-The \fBLIRC_GET_FEATURES\fR ioctl (see below) allows probing for whether
-receiving and sending is supported, and in which modes, amongst other
-features.
-.\"
-.SS Reading input with the LIRC_MODE_MODE2 mode
-In the \fBLIRC_MODE_MODE2 mode\fR, the data returned by
-.BR read (2)
-provides 32-bit values representing a space or a pulse duration.
-The time of the duration (microseconds) is encoded in the lower 24 bits.
-Pulse (also known as flash)
-indicates a duration of infrared light being detected,
-and space (also known as gap) indicates a duration with no infrared.
-If the duration of space exceeds the inactivity timeout,
-a special timeout package is delivered,
-which marks the end of a message.
-The upper 8 bits indicate the type of package:
-.TP 4
-.B LIRC_MODE2_SPACE
-Value reflects a space duration (microseconds).
-.TP 4
-.B LIRC_MODE2_PULSE
-Value reflects a pulse duration (microseconds).
-.TP 4
-.B LIRC_MODE2_FREQUENCY
-Value reflects a frequency (Hz); see the
-.B LIRC_SET_MEASURE_CARRIER_MODE
-ioctl.
-.TP 4
-.B LIRC_MODE2_TIMEOUT
-Value reflects a space duration (microseconds).
-The package reflects a timeout; see the
-.B LIRC_SET_REC_TIMEOUT_REPORTS
-ioctl.
-.\"
-.TP 4
-.B LIRC_MODE2_OVERFLOW
-The IR receiver encountered an overflow,
-and as a result data is missing
-(since Linux 5.18).
-.SS Reading input with the LIRC_MODE_SCANCODE mode
-In the \fBLIRC_MODE_SCANCODE\fR
-mode, the data returned by
-.BR read (2)
-reflects decoded button presses, in the struct \fIlirc_scancode\fR.
-The scancode is stored in the \fIscancode\fR field, and the IR protocol
-is stored in \fIrc_proto\fR.
-This field has one the values of the \fIenum rc_proto\fR.
-.\"
-.SS Writing output with the LIRC_MODE_PULSE mode
-The data written to the character device using
-.BR write (2)
-is a pulse/space sequence of integer values.
-Pulses and spaces are only marked implicitly by their position.
-The data must start and end with a pulse, thus it must always include
-an odd number of samples.
-The
-.BR write (2)
-function blocks until the data has been transmitted by the
-hardware.
-If more data is provided than the hardware can send, the
-.BR write (2)
-call fails with the error
-.BR EINVAL .
-.SS Writing output with the LIRC_MODE_SCANCODE mode
-The data written to the character devices must be a single struct
-\fIlirc_scancode\fR.
-The \fIscancode\fR and \fIrc_proto\fR fields must
-filled in, all other fields must be 0.
-The kernel IR encoders will
-convert the scancode to pulses and spaces.
-The protocol or scancode is invalid, or the
-.B lirc
-device cannot transmit.
-.SH IOCTL COMMANDS
-.nf
-#include <linux/lirc.h> /* But see BUGS */
-\&
-int ioctl(int fd, int cmd, int *val);
-.fi
-.PP
-The following
-.BR ioctl (2)
-operations are provided by the
-.B lirc
-character device to probe or change specific
-.B lirc
-hardware settings.
-.SS Always Supported Commands
-\fI/dev/lirc*\fR devices always support the following commands:
-.TP 4
-.BR LIRC_GET_FEATURES " (\fIvoid\fP)"
-Returns a bit mask of combined features bits; see FEATURES.
-.PP
-If a device returns an error code for
-.BR LIRC_GET_FEATURES ,
-it is safe to assume it is not a
-.B lirc
-device.
-.\"
-.SS Optional Commands
-Some
-.B lirc
-devices support the commands listed below.
-Unless otherwise stated, these fail with the error \fBENOTTY\fR if the
-operation isn't supported, or with the error \fBEINVAL\fR if the operation
-failed, or invalid arguments were provided.
-If a driver does not announce support of certain features, invoking
-the corresponding ioctls will fail with the error
-.BR ENOTTY .
-.TP
-.BR LIRC_GET_REC_MODE " (\fIvoid\fP)"
-If the
-.B lirc
-device has no receiver, this operation fails with the error
-.BR ENOTTY .
-Otherwise, it returns the receive mode, which will be one of:
-.RS
-.TP
-.B LIRC_MODE_MODE2
-The driver returns a sequence of pulse/space durations.
-.TP
-.B LIRC_MODE_SCANCODE
-The driver returns struct
-.I lirc_scancode
-values, each of which represents
-a decoded button press.
-.RE
-.TP
-.BR LIRC_SET_REC_MODE " (\fIint\fP)"
-Set the receive mode.
-.I val
-is either
-.B LIRC_MODE_SCANCODE
-or
-.BR LIRC_MODE_MODE2 .
-If the
-.B lirc
-device has no receiver, this operation fails with the error
-.B ENOTTY.
-.TP
-.BR LIRC_GET_SEND_MODE " (\fIvoid\fP)"
-Return the send mode.
-.B LIRC_MODE_PULSE
-or
-.B LIRC_MODE_SCANCODE
-is supported.
-If the
-.B lirc
-device cannot send, this operation fails with the error
-.B ENOTTY.
-.TP
-.BR LIRC_SET_SEND_MODE " (\fIint\fP)"
-Set the send mode.
-.I val
-is either
-.B LIRC_MODE_SCANCODE
-or
-.BR LIRC_MODE_PULSE .
-If the
-.B lirc
-device cannot send, this operation fails with the error
-.BR ENOTTY .
-.TP
-.BR LIRC_SET_SEND_CARRIER " (\fIint\fP)"
-Set the modulation frequency.
-The argument is the frequency (Hz).
-.TP
-.BR LIRC_SET_SEND_DUTY_CYCLE " (\fIint\fP)"
-Set the carrier duty cycle.
-.I val
-is a number in the range [0,100] which
-describes the pulse width as a percentage of the total cycle.
-Currently, no special meaning is defined for 0 or 100, but the values
-are reserved for future use.
-.TP
-.BR LIRC_GET_MIN_TIMEOUT " (\fIvoid\fP)", " "\
-LIRC_GET_MAX_TIMEOUT " (\fIvoid\fP)"
-Some devices have internal timers that can be used to detect when
-there has been no IR activity for a long time.
-This can help
-.BR lircd (8)
-in detecting that an IR signal is finished and can speed up the
-decoding process.
-These operations
-return integer values with the minimum/maximum timeout that can be
-set (microseconds).
-Some devices have a fixed timeout.
-For such drivers,
-.B LIRC_GET_MIN_TIMEOUT
-and
-.B LIRC_GET_MAX_TIMEOUT
-will fail with the error
-.BR ENOTTY .
-.TP
-.BR LIRC_SET_REC_TIMEOUT " (\fIint\fP)"
-Set the integer value for IR inactivity timeout (microseconds).
-To be accepted, the value must be within the limits defined by
-.B LIRC_GET_MIN_TIMEOUT
-and
-.BR LIRC_GET_MAX_TIMEOUT .
-A value of 0 (if supported by the hardware) disables all hardware
-timeouts and data should be reported as soon as possible.
-If the exact value cannot be set, then the next possible value
-.I greater
-than the given value should be set.
-.TP
-.BR LIRC_GET_REC_TIMEOUT " (\fIvoid\fP)"
-Return the current inactivity timeout (microseconds).
-Available since Linux 4.18.
-.TP
-.BR LIRC_SET_REC_TIMEOUT_REPORTS " (\fIint\fP)"
-Enable
-.RI ( val
-is 1) or disable
-.RI ( val
-is 0) timeout packages in
-.BR LIRC_MODE_MODE2 .
-The behavior of this operation has varied across kernel versions:
-.RS
-.IP \[bu] 3
-Since Linux 5.17:
-timeout packages are always enabled and this ioctl is a no-op.
-.IP \[bu]
-Since Linux 4.16:
-timeout packages are enabled by default.
-Each time the
-.B lirc
-device is opened, the
-.B LIRC_SET_REC_TIMEOUT
-operation can be used to disable (and, if desired, to later re-enable)
-the timeout on the file descriptor.
-.IP \[bu]
-In Linux 4.15 and earlier:
-timeout packages are disabled by default, and enabling them (via
-.BR LIRC_SET_REC_TIMEOUT )
-on any file descriptor associated with the
-.B lirc
-device has the effect of enabling timeouts for all file descriptors
-referring to that device (until timeouts are disabled again).
-.RE
-.TP
-.BR LIRC_SET_REC_CARRIER " (\fIint\fP)"
-Set the upper bound of the receive carrier frequency (Hz).
-See
-.BR LIRC_SET_REC_CARRIER_RANGE .
-.TP
-.BR LIRC_SET_REC_CARRIER_RANGE " (\fIint\fP)"
-Sets the lower bound of the receive carrier frequency (Hz).
-For this to take affect, first set the lower bound using the
-.B LIRC_SET_REC_CARRIER_RANGE
-ioctl, and then the upper bound using the
-.B LIRC_SET_REC_CARRIER
-ioctl.
-.TP
-.BR LIRC_SET_MEASURE_CARRIER_MODE " (\fIint\fP)"
-Enable
-.RI ( val
-is 1) or disable
-.RI ( val
-is 0) the measure mode.
-If enabled, from the next key press on, the driver will send
-.B LIRC_MODE2_FREQUENCY
-packets.
-By default, this should be turned off.
-.TP
-.BR LIRC_GET_REC_RESOLUTION " (\fIvoid\fP)"
-Return the driver resolution (microseconds).
-.TP
-.BR LIRC_SET_TRANSMITTER_MASK " (\fIint\fP)"
-Enable the set of transmitters specified in
-.IR val ,
-which contains a bit mask where each enabled transmitter is a 1.
-The first transmitter is encoded by the least significant bit, and so on.
-When an invalid bit mask is given, for example a bit is set even
-though the device does not have so many transmitters,
-this operation returns the
-number of available transmitters and does nothing otherwise.
-.TP
-.BR LIRC_SET_WIDEBAND_RECEIVER " (\fIint\fP)"
-Some devices are equipped with a special wide band receiver which is
-intended to be used to learn the output of an existing remote.
-This ioctl can be used to enable
-.RI ( val
-equals 1) or disable
-.RI ( val
-equals 0) this functionality.
-This might be useful for devices that otherwise have narrow band
-receivers that prevent them to be used with certain remotes.
-Wide band receivers may also be more precise.
-On the other hand, their disadvantage usually is reduced range of
-reception.
-.IP
-Note: wide band receiver may be implicitly enabled if you enable
-carrier reports.
-In that case, it will be disabled as soon as you disable carrier reports.
-Trying to disable a wide band receiver while carrier reports are active
-will do nothing.
-.\"
-.SH FEATURES
-the
-.B LIRC_GET_FEATURES
-ioctl returns a bit mask describing features of the driver.
-The following bits may be returned in the mask:
-.TP
-.B LIRC_CAN_REC_MODE2
-The driver is capable of receiving using
-.BR LIRC_MODE_MODE2 .
-.TP
-.B LIRC_CAN_REC_SCANCODE
-The driver is capable of receiving using
-.BR LIRC_MODE_SCANCODE .
-.TP
-.B LIRC_CAN_SET_SEND_CARRIER
-The driver supports changing the modulation frequency using
-.BR LIRC_SET_SEND_CARRIER .
-.TP
-.B LIRC_CAN_SET_SEND_DUTY_CYCLE
-The driver supports changing the duty cycle using
-.BR LIRC_SET_SEND_DUTY_CYCLE .
-.TP
-.B LIRC_CAN_SET_TRANSMITTER_MASK
-The driver supports changing the active transmitter(s) using
-.BR LIRC_SET_TRANSMITTER_MASK .
-.TP
-.B LIRC_CAN_SET_REC_CARRIER
-The driver supports setting the receive carrier frequency using
-.BR LIRC_SET_REC_CARRIER .
-Any
-.B lirc
-device since the drivers were merged in Linux 2.6.36
-must have
-.B LIRC_CAN_SET_REC_CARRIER_RANGE
-set if
-.B LIRC_CAN_SET_REC_CARRIER
-feature is set.
-.TP
-.B LIRC_CAN_SET_REC_CARRIER_RANGE
-The driver supports
-.BR LIRC_SET_REC_CARRIER_RANGE .
-The lower bound of the carrier must first be set using the
-.B LIRC_SET_REC_CARRIER_RANGE
-ioctl, before using the
-.B LIRC_SET_REC_CARRIER
-ioctl to set the upper bound.
-.TP
-.B LIRC_CAN_GET_REC_RESOLUTION
-The driver supports
-.BR LIRC_GET_REC_RESOLUTION .
-.TP
-.B LIRC_CAN_SET_REC_TIMEOUT
-The driver supports
-.BR LIRC_SET_REC_TIMEOUT .
-.TP
-.B LIRC_CAN_MEASURE_CARRIER
-The driver supports measuring of the modulation frequency using
-.BR LIRC_SET_MEASURE_CARRIER_MODE .
-.TP
-.B LIRC_CAN_USE_WIDEBAND_RECEIVER
-The driver supports learning mode using
-.BR LIRC_SET_WIDEBAND_RECEIVER .
-.TP
-.B LIRC_CAN_SEND_PULSE
-The driver supports sending using
-.B LIRC_MODE_PULSE
-or
-.B LIRC_MODE_SCANCODE
-.\"
-.SH BUGS
-Using these devices requires the kernel source header file
-.IR lirc.h .
-This file is not available before Linux 4.6.
-Users of older kernels could use the file bundled in
-.UR http://www.lirc.org
-.UE .
-.\"
-.SH SEE ALSO
-\fBir\-ctl\fP(1), \fBlircd\fP(8),\ \fBbpf\fP(2)
-.PP
-.UR https://www.kernel.org/\:doc/\:html/\:latest/\:userspace\-api/\:media/\:rc/\:lirc\-dev.html
-.UE
diff --git a/man4/loop-control.4 b/man4/loop-control.4
deleted file mode 100644
index 251e65203..000000000
--- a/man4/loop-control.4
+++ /dev/null
@@ -1 +0,0 @@
-.so man4/loop.4
diff --git a/man4/loop.4 b/man4/loop.4
deleted file mode 100644
index 72a243192..000000000
--- a/man4/loop.4
+++ /dev/null
@@ -1,359 +0,0 @@
-.\" Copyright 2002 Urs Thuermann (urs@isnogud.escape.de)
-.\" and Copyright 2015 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH loop 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-loop, loop-control \- loop devices
-.SH SYNOPSIS
-.nf
-#include <linux/loop.h>
-.fi
-.SH DESCRIPTION
-The loop device is a block device that maps its data blocks not to a
-physical device such as a hard disk or optical disk drive,
-but to the blocks of
-a regular file in a filesystem or to another block device.
-This can be useful for example to provide a block device for a filesystem
-image stored in a file, so that it can be mounted with the
-.BR mount (8)
-command.
-You could do
-.PP
-.in +4n
-.EX
-$ \fBdd if=/dev/zero of=file.img bs=1MiB count=10\fP
-$ \fBsudo losetup /dev/loop4 file.img\fP
-$ \fBsudo mkfs \-t ext4 /dev/loop4\fP
-$ \fBsudo mkdir /myloopdev\fP
-$ \fBsudo mount /dev/loop4 /myloopdev\fP
-.EE
-.in
-.PP
-See
-.BR losetup (8)
-for another example.
-.PP
-A transfer function can be specified for each loop device for
-encryption and decryption purposes.
-.PP
-The following
-.BR ioctl (2)
-operations are provided by the loop block device:
-.TP
-.B LOOP_SET_FD
-Associate the loop device with the open file whose file descriptor is
-passed as the (third)
-.BR ioctl (2)
-argument.
-.TP
-.B LOOP_CLR_FD
-Disassociate the loop device from any file descriptor.
-.TP
-.B LOOP_SET_STATUS
-Set the status of the loop device using the (third)
-.BR ioctl (2)
-argument.
-This argument is a pointer to a
-.I loop_info
-structure, defined in
-.I <linux/loop.h>
-as:
-.IP
-.in +4n
-.EX
-struct loop_info {
- int lo_number; /* ioctl r/o */
- dev_t lo_device; /* ioctl r/o */
- unsigned long lo_inode; /* ioctl r/o */
- dev_t lo_rdevice; /* ioctl r/o */
- int lo_offset;
- int lo_encrypt_type;
- int lo_encrypt_key_size; /* ioctl w/o */
- int lo_flags; /* ioctl r/w (r/o before
- Linux 2.6.25) */
- char lo_name[LO_NAME_SIZE];
- unsigned char lo_encrypt_key[LO_KEY_SIZE];
- /* ioctl w/o */
- unsigned long lo_init[2];
- char reserved[4];
-};
-.EE
-.in
-.IP
-The encryption type
-.RI ( lo_encrypt_type )
-should be one of
-.BR LO_CRYPT_NONE ,
-.BR LO_CRYPT_XOR ,
-.BR LO_CRYPT_DES ,
-.BR LO_CRYPT_FISH2 ,
-.BR LO_CRYPT_BLOW ,
-.BR LO_CRYPT_CAST128 ,
-.BR LO_CRYPT_IDEA ,
-.BR LO_CRYPT_DUMMY ,
-.BR LO_CRYPT_SKIPJACK ,
-or (since Linux 2.6.0)
-.BR LO_CRYPT_CRYPTOAPI .
-.IP
-The
-.I lo_flags
-field is a bit mask that can include zero or more of the following:
-.RS
-.TP
-.B LO_FLAGS_READ_ONLY
-The loopback device is read-only.
-.TP
-.BR LO_FLAGS_AUTOCLEAR " (since Linux 2.6.25)"
-.\" commit 96c5865559cee0f9cbc5173f3c949f6ce3525581
-The loopback device will autodestruct on last close.
-.TP
-.BR LO_FLAGS_PARTSCAN " (since Linux 3.2)"
-.\" commit e03c8dd14915fabc101aa495828d58598dc5af98
-Allow automatic partition scanning.
-.TP
-.BR LO_FLAGS_DIRECT_IO " (since Linux 4.10)"
-.\" commit 2e5ab5f379f96a6207c45be40c357ebb1beb8ef3
-Use direct I/O mode to access the backing file.
-.RE
-.IP
-The only
-.I lo_flags
-that can be modified by
-.B LOOP_SET_STATUS
-are
-.B LO_FLAGS_AUTOCLEAR
-and
-.BR LO_FLAGS_PARTSCAN .
-.TP
-.B LOOP_GET_STATUS
-Get the status of the loop device.
-The (third)
-.BR ioctl (2)
-argument must be a pointer to a
-.IR "struct loop_info" .
-.TP
-.BR LOOP_CHANGE_FD " (since Linux 2.6.5)"
-Switch the backing store of the loop device to the new file identified
-file descriptor specified in the (third)
-.BR ioctl (2)
-argument, which is an integer.
-This operation is possible only if the loop device is read-only and
-the new backing store is the same size and type as the old backing store.
-.TP
-.BR LOOP_SET_CAPACITY " (since Linux 2.6.30)"
-.\" commit 53d6660836f233df66490707365ab177e5fb2bb4
-Resize a live loop device.
-One can change the size of the underlying backing store and then use this
-operation so that the loop driver learns about the new size.
-This operation takes no argument.
-.TP
-.BR LOOP_SET_DIRECT_IO " (since Linux 4.10)"
-.\" commit ab1cb278bc7027663adbfb0b81404f8398437e11
-Set DIRECT I/O mode on the loop device, so that
-it can be used to open backing file.
-The (third)
-.BR ioctl (2)
-argument is an unsigned long value.
-A nonzero represents direct I/O mode.
-.TP
-.BR LOOP_SET_BLOCK_SIZE " (since Linux 4.14)"
-.\" commit 89e4fdecb51cf5535867026274bc97de9480ade5
-Set the block size of the loop device.
-The (third)
-.BR ioctl (2)
-argument is an unsigned long value.
-This value must be a power of two in the range
-[512,pagesize];
-otherwise, an
-.B EINVAL
-error results.
-.TP
-.BR LOOP_CONFIGURE " (since Linux 5.8)"
-.\" commit 3448914e8cc550ba792d4ccc74471d1ca4293aae
-Setup and configure all loop device parameters in a single step using
-the (third)
-.BR ioctl (2)
-argument.
-This argument is a pointer to a
-.I loop_config
-structure, defined in
-.I <linux/loop.h>
-as:
-.IP
-.in +4n
-.EX
-struct loop_config {
- __u32 fd;
- __u32 block_size;
- struct loop_info64 info;
- __u64 __reserved[8];
-};
-.EE
-.in
-.IP
-In addition to doing what
-.B LOOP_SET_STATUS
-can do,
-.B LOOP_CONFIGURE
-can also be used to do the following:
-.RS
-.IP \[bu] 3
-set the correct block size immediately by setting
-.IR loop_config.block_size ;
-.IP \[bu]
-explicitly request direct I/O mode by setting
-.B LO_FLAGS_DIRECT_IO
-in
-.IR loop_config.info.lo_flags ;
-and
-.IP \[bu]
-explicitly request read-only mode by setting
-.B LO_FLAGS_READ_ONLY
-in
-.IR loop_config.info.lo_flags .
-.RE
-.PP
-Since Linux 2.6, there are two new
-.BR ioctl (2)
-operations:
-.TP
-.BR LOOP_SET_STATUS64 ", " LOOP_GET_STATUS64
-These are similar to
-.BR LOOP_SET_STATUS " and " LOOP_GET_STATUS
-described above but use the
-.I loop_info64
-structure,
-which has some additional fields and a larger range for some other fields:
-.IP
-.in +4n
-.EX
-struct loop_info64 {
- uint64_t lo_device; /* ioctl r/o */
- uint64_t lo_inode; /* ioctl r/o */
- uint64_t lo_rdevice; /* ioctl r/o */
- uint64_t lo_offset;
- uint64_t lo_sizelimit; /* bytes, 0 == max available */
- uint32_t lo_number; /* ioctl r/o */
- uint32_t lo_encrypt_type;
- uint32_t lo_encrypt_key_size; /* ioctl w/o */
- uint32_t lo_flags; i /* ioctl r/w (r/o before
- Linux 2.6.25) */
- uint8_t lo_file_name[LO_NAME_SIZE];
- uint8_t lo_crypt_name[LO_NAME_SIZE];
- uint8_t lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
- uint64_t lo_init[2];
-};
-.EE
-.in
-.SS /dev/loop-control
-Since Linux 3.1,
-.\" commit 770fe30a46a12b6fb6b63fbe1737654d28e84844
-the kernel provides the
-.I /dev/loop\-control
-device, which permits an application to dynamically find a free device,
-and to add and remove loop devices from the system.
-To perform these operations, one first opens
-.I /dev/loop\-control
-and then employs one of the following
-.BR ioctl (2)
-operations:
-.TP
-.B LOOP_CTL_GET_FREE
-Allocate or find a free loop device for use.
-On success, the device number is returned as the result of the call.
-This operation takes no argument.
-.TP
-.B LOOP_CTL_ADD
-Add the new loop device whose device number is specified
-as a long integer in the third
-.BR ioctl (2)
-argument.
-On success, the device index is returned as the result of the call.
-If the device is already allocated, the call fails with the error
-.BR EEXIST .
-.TP
-.B LOOP_CTL_REMOVE
-Remove the loop device whose device number is specified
-as a long integer in the third
-.BR ioctl (2)
-argument.
-On success, the device number is returned as the result of the call.
-If the device is in use, the call fails with the error
-.BR EBUSY .
-.SH FILES
-.TP
-.I /dev/loop*
-The loop block special device files.
-.SH EXAMPLES
-The program below uses the
-.I /dev/loop\-control
-device to find a free loop device, opens the loop device,
-opens a file to be used as the underlying storage for the device,
-and then associates the loop device with the backing store.
-The following shell session demonstrates the use of the program:
-.PP
-.in +4n
-.EX
-$ \fBdd if=/dev/zero of=file.img bs=1MiB count=10\fP
-10+0 records in
-10+0 records out
-10485760 bytes (10 MB) copied, 0.00609385 s, 1.7 GB/s
-$ \fBsudo ./mnt_loop file.img\fP
-loopname = /dev/loop5
-.EE
-.in
-.SS Program source
-\&
-.EX
-#include <fcntl.h>
-#include <linux/loop.h>
-#include <sys/ioctl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \e
- } while (0)
-\&
-int
-main(int argc, char *argv[])
-{
- int loopctlfd, loopfd, backingfile;
- long devnr;
- char loopname[4096];
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s backing\-file\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- loopctlfd = open("/dev/loop\-control", O_RDWR);
- if (loopctlfd == \-1)
- errExit("open: /dev/loop\-control");
-\&
- devnr = ioctl(loopctlfd, LOOP_CTL_GET_FREE);
- if (devnr == \-1)
- errExit("ioctl\-LOOP_CTL_GET_FREE");
-\&
- sprintf(loopname, "/dev/loop%ld", devnr);
- printf("loopname = %s\en", loopname);
-\&
- loopfd = open(loopname, O_RDWR);
- if (loopfd == \-1)
- errExit("open: loopname");
-\&
- backingfile = open(argv[1], O_RDWR);
- if (backingfile == \-1)
- errExit("open: backing\-file");
-\&
- if (ioctl(loopfd, LOOP_SET_FD, backingfile) == \-1)
- errExit("ioctl\-LOOP_SET_FD");
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.SH SEE ALSO
-.BR losetup (8),
-.BR mount (8)
diff --git a/man4/lp.4 b/man4/lp.4
deleted file mode 100644
index d472b7cbd..000000000
--- a/man4/lp.4
+++ /dev/null
@@ -1,137 +0,0 @@
-'\" t
-.\" Copyright (c) Michael Haardt (michael@cantor.informatik.rwth-aachen.de),
-.\" Sun Jan 15 19:16:33 1995
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified, Sun Feb 26 15:02:58 1995, faith@cs.unc.edu
-.TH lp 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-lp \- line printer devices
-.SH SYNOPSIS
-.nf
-.B #include <linux/lp.h>
-.fi
-.SH CONFIGURATION
-\fBlp\fP[0\[en]2] are character devices for the parallel line printers;
-they have major number 6 and minor number 0\[en]2.
-The minor numbers
-correspond to the printer port base addresses 0x03bc, 0x0378, and 0x0278.
-Usually they have mode 220 and are owned by user
-.I root
-and group
-.IR lp .
-You can use printer ports either with polling or with interrupts.
-Interrupts are recommended when high traffic is expected, for example,
-for laser printers.
-For typical dot matrix printers, polling will usually be enough.
-The default is polling.
-.SH DESCRIPTION
-The following
-.BR ioctl (2)
-calls are supported:
-.TP
-.BR "int ioctl(int " fd ", LPTIME, int " arg )
-Sets the amount of time that the driver sleeps before rechecking the printer
-when the printer's buffer appears to be filled to
-.IR arg .
-If you have a fast printer, decrease this number;
-if you have a slow printer, then increase it.
-This is in hundredths of a second, the default 2
-being 0.02 seconds.
-It influences only the polling driver.
-.TP
-.BR "int ioctl(int " fd ", LPCHAR, int " arg )
-Sets the maximum number of busy-wait iterations which the polling driver does
-while waiting for the printer to get ready for receiving a character to
-.IR arg .
-If printing is too slow, increase this number; if the
-system gets too slow, decrease this number.
-The default is 1000.
-It influences only the polling driver.
-.TP
-.BR "int ioctl(int " fd ", LPABORT, int " arg )
-If
-.I arg
-is 0, the printer driver will retry on errors, otherwise
-it will abort.
-The default is 0.
-.TP
-.BR "int ioctl(int " fd ", LPABORTOPEN, int " arg )
-If
-.I arg
-is 0,
-.BR open (2)
-will be aborted on error, otherwise error will be ignored.
-The default is to ignore it.
-.TP
-.BR "int ioctl(int " fd ", LPCAREFUL, int " arg )
-If
-.I arg
-is 0, then the out-of-paper, offline, and error signals are
-required to be false on all writes, otherwise they are ignored.
-The default is to ignore them.
-.TP
-.BR "int ioctl(int " fd ", LPWAIT, int " arg )
-Sets the number of busy waiting iterations to wait before strobing the
-printer to accept a just-written character, and the number of iterations to
-wait before turning the strobe off again,
-to
-.IR arg .
-The specification says this time should be 0.5
-microseconds, but experience has shown the delay caused by the code is
-already enough.
-For that reason, the default value is 0.
-.\" FIXME . Actually, since Linux 2.2, the default is 1
-This is used for both the polling and the interrupt driver.
-.TP
-.BR "int ioctl(int " fd ", LPSETIRQ, int " arg )
-This
-.BR ioctl (2)
-requires superuser privileges.
-It takes an
-.I int
-containing the new IRQ as argument.
-As a side effect, the printer will be reset.
-When
-.I arg
-is 0, the polling driver will be used, which is also default.
-.TP
-.BR "int ioctl(int " fd ", LPGETIRQ, int *" arg )
-Stores the currently used IRQ in
-.IR arg .
-.TP
-.BR "int ioctl(int " fd ", LPGETSTATUS, int *" arg )
-Stores the value of the status port in
-.IR arg .
-The bits have the following meaning:
-.TS
-l l.
-LP_PBUSY inverted busy input, active high
-LP_PACK unchanged acknowledge input, active low
-LP_POUTPA unchanged out-of-paper input, active high
-LP_PSELECD unchanged selected input, active high
-LP_PERRORP unchanged error input, active low
-.TE
-.IP
-Refer to your printer manual for the meaning of the signals.
-Note that undocumented bits may also be set, depending on your printer.
-.TP
-.BR "int ioctl(int " fd ", LPRESET)"
-Resets the printer.
-No argument is used.
-.SH FILES
-.I /dev/lp*
-.\" .SH AUTHORS
-.\" The printer driver was originally written by Jim Weigand and Linus
-.\" Torvalds.
-.\" It was further improved by Michael K.\& Johnson.
-.\" The interrupt code was written by Nigel Gamble.
-.\" Alan Cox modularized it.
-.\" LPCAREFUL, LPABORT, LPGETSTATUS were added by Chris Metcalf.
-.SH SEE ALSO
-.BR chmod (1),
-.BR chown (1),
-.BR mknod (1),
-.BR lpcntl (8),
-.BR tunelp (8)
diff --git a/man4/mem.4 b/man4/mem.4
deleted file mode 100644
index 333cef800..000000000
--- a/man4/mem.4
+++ /dev/null
@@ -1,81 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sat Jul 24 16:59:10 1993 by Rik Faith (faith@cs.unc.edu)
-.TH mem 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mem, kmem, port \- system memory, kernel memory and system ports
-.SH DESCRIPTION
-.I /dev/mem
-is a character device file
-that is an image of the main memory of the computer.
-It may be used, for example, to examine (and even patch) the system.
-.PP
-Byte addresses in
-.I /dev/mem
-are interpreted as physical memory addresses.
-References to nonexistent locations cause errors to be returned.
-.PP
-Examining and patching is likely to lead to unexpected results
-when read-only or write-only bits are present.
-.PP
-Since Linux 2.6.26, and depending on the architecture, the
-.B CONFIG_STRICT_DEVMEM
-kernel configuration option limits the areas
-which can be accessed through this file.
-For example: on x86, RAM access is not allowed but accessing
-memory-mapped PCI regions is.
-.PP
-It is typically created by:
-.PP
-.in +4n
-.EX
-mknod \-m 660 /dev/mem c 1 1
-chown root:kmem /dev/mem
-.EE
-.in
-.PP
-The file
-.I /dev/kmem
-is the same as
-.IR /dev/mem ,
-except that the kernel virtual memory
-rather than physical memory is accessed.
-Since Linux 2.6.26, this file is available only if the
-.B CONFIG_DEVKMEM
-kernel configuration option is enabled.
-.PP
-It is typically created by:
-.PP
-.in +4n
-.EX
-mknod \-m 640 /dev/kmem c 1 2
-chown root:kmem /dev/kmem
-.EE
-.in
-.PP
-.I /dev/port
-is similar to
-.IR /dev/mem ,
-but the I/O ports are accessed.
-.PP
-It is typically created by:
-.PP
-.in +4n
-.EX
-mknod \-m 660 /dev/port c 1 4
-chown root:kmem /dev/port
-.EE
-.in
-.SH FILES
-.I /dev/mem
-.br
-.I /dev/kmem
-.br
-.I /dev/port
-.SH SEE ALSO
-.BR chown (1),
-.BR mknod (1),
-.BR ioperm (2)
diff --git a/man4/mouse.4 b/man4/mouse.4
deleted file mode 100644
index 309f6ad42..000000000
--- a/man4/mouse.4
+++ /dev/null
@@ -1,171 +0,0 @@
-'\" t
-.\" This manpage is Copyright (C) 1996 Michael Haardt.
-.\" Updates Nov 1998, Andries Brouwer
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.TH mouse 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mouse \- serial mouse interface
-.SH CONFIGURATION
-Serial mice are connected to a serial RS232/V24 dialout line, see
-.BR ttyS (4)
-for a description.
-.SH DESCRIPTION
-.SS Introduction
-The pinout of the usual 9 pin plug as used for serial mice is:
-.PP
-.TS
-center;
-r c l.
-pin name used for
-2 RX Data
-3 TX \-12 V, Imax = 10 mA
-4 DTR +12 V, Imax = 10 mA
-7 RTS +12 V, Imax = 10 mA
-5 GND Ground
-.TE
-.PP
-This is the specification, in fact 9 V suffices with most mice.
-.PP
-The mouse driver can recognize a mouse by dropping RTS to low and raising
-it again.
-About 14 ms later the mouse will send 0x4D (\[aq]M\[aq]) on the data line.
-After a further 63 ms, a Microsoft-compatible 3-button mouse will send
-0x33 (\[aq]3\[aq]).
-.PP
-The relative mouse movement is sent as
-.I dx
-(positive means right)
-and
-.I dy
-(positive means down).
-Various mice can operate at different speeds.
-To select speeds, cycle through the
-speeds 9600, 4800, 2400, and 1200 bit/s, each time writing the two characters
-from the table below and waiting 0.1 seconds.
-The following table shows available speeds and the strings that select them:
-.PP
-.TS
-center;
-l l.
-bit/s string
-9600 *q
-4800 *p
-2400 *o
-1200 *n
-.TE
-.PP
-The first byte of a data packet can be used for synchronization purposes.
-.SS Microsoft protocol
-The
-.B Microsoft
-protocol uses 1 start bit, 7 data bits, no parity
-and one stop bit at the speed of 1200 bits/sec.
-Data is sent to RxD in 3-byte packets.
-The
-.I dx
-and
-.I dy
-movements are sent as
-two's-complement,
-.I lb
-.RI ( rb )
-are set when the left (right)
-button is pressed:
-.PP
-.TS
-center;
-r c c c c c c c.
-byte d6 d5 d4 d3 d2 d1 d0
-1 1 lb rb dy7 dy6 dx7 dx6
-2 0 dx5 dx4 dx3 dx2 dx1 dx0
-3 0 dy5 dy4 dy3 dy2 dy1 dy0
-.TE
-.SS 3-button Microsoft protocol
-Original Microsoft mice only have two buttons.
-However, there are some
-three button mice which also use the Microsoft protocol.
-Pressing or
-releasing the middle button is reported by sending a packet with zero
-movement and no buttons pressed.
-(Thus, unlike for the other two buttons, the status of the middle
-button is not reported in each packet.)
-.SS Logitech protocol
-Logitech serial 3-button mice use a different extension of the
-Microsoft protocol: when the middle button is up, the above 3-byte
-packet is sent.
-When the middle button is down a 4-byte packet is
-sent, where the 4th byte has value 0x20 (or at least has the 0x20
-bit set).
-In particular, a press of the middle button is reported
-as 0,0,0,0x20 when no other buttons are down.
-.SS Mousesystems protocol
-The
-.B Mousesystems
-protocol uses 1 start bit, 8 data bits, no parity,
-and two stop bits at the speed of 1200 bits/sec.
-Data is sent to RxD in
-5-byte packets.
-.I dx
-is sent as the sum of the two two's-complement
-values,
-.I dy
-is send as negated sum of the two two's-complement
-values.
-.I lb
-.RI ( mb ,
-.IR rb )
-are cleared when the left (middle,
-right) button is pressed:
-.PP
-.TS
-center;
-r c c c c c c c c.
-byte d7 d6 d5 d4 d3 d2 d1 d0
-1 1 0 0 0 0 lb mb rb
-2 0 dxa6 dxa5 dxa4 dxa3 dxa2 dxa1 dxa0
-3 0 dya6 dya5 dya4 dya3 dya2 dya1 dya0
-4 0 dxb6 dxb5 dxb4 dxb3 dxb2 dxb1 dxb0
-5 0 dyb6 dyb5 dyb4 dyb3 dyb2 dyb1 dyb0
-.TE
-.PP
-Bytes 4 and 5 describe the change that occurred since bytes 2 and 3
-were transmitted.
-.SS Sun protocol
-The
-.B Sun
-protocol is the 3-byte version of the above 5-byte
-Mousesystems protocol: the last two bytes are not sent.
-.SS MM protocol
-The
-.B MM
-protocol uses 1 start bit, 8 data bits, odd parity, and one
-stop bit at the speed of 1200 bits/sec.
-Data is sent to RxD in 3-byte
-packets.
-.I dx
-and
-.I dy
-are sent as single signed values, the
-sign bit indicating a negative value.
-.I lb
-.RI ( mb ,
-.IR rb )
-are
-set when the left (middle, right) button is pressed:
-.PP
-.TS
-center;
-r c c c c c c c c.
-byte d7 d6 d5 d4 d3 d2 d1 d0
-1 1 0 0 dxs dys lb mb rb
-2 0 dx6 dx5 dx4 dx3 dx2 dx1 dx0
-3 0 dy6 dy5 dy4 dy3 dy2 dy1 dy0
-.TE
-.SH FILES
-.TP
-.I /dev/mouse
-A commonly used symbolic link pointing to a mouse device.
-.SH SEE ALSO
-.BR ttyS (4),
-.BR gpm (8)
diff --git a/man4/msr.4 b/man4/msr.4
deleted file mode 100644
index a11a71cd0..000000000
--- a/man4/msr.4
+++ /dev/null
@@ -1,42 +0,0 @@
-.\" Copyright (c) 2009 Intel Corporation, Author Andi Kleen
-.\" Some sentences copied from comments in arch/x86/kernel/msr.c
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH msr 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-msr \- x86 CPU MSR access device
-.SH DESCRIPTION
-.I /dev/cpu/CPUNUM/msr
-provides an interface to read and write the model-specific
-registers (MSRs) of an x86 CPU.
-.I CPUNUM
-is the number of the CPU to access as listed in
-.IR /proc/cpuinfo .
-.PP
-The register access is done by opening the file and seeking
-to the MSR number as offset in the file, and then
-reading or writing in chunks of 8 bytes.
-An I/O transfer of more than 8 bytes means multiple reads or writes
-of the same register.
-.PP
-This file is protected so that it can be read and written only by the user
-.IR root ,
-or members of the group
-.IR root .
-.SH NOTES
-The
-.I msr
-driver is not auto-loaded.
-On modular kernels you might need to use the following command
-to load it explicitly before use:
-.PP
-.in +4n
-.EX
-$ modprobe msr
-.EE
-.in
-.SH SEE ALSO
-Intel Corporation Intel 64 and IA-32 Architectures
-Software Developer's Manual Volume 3B Appendix B,
-for an overview of the Intel CPU MSRs.
diff --git a/man4/null.4 b/man4/null.4
deleted file mode 100644
index 409755997..000000000
--- a/man4/null.4
+++ /dev/null
@@ -1,52 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sat Jul 24 17:00:12 1993 by Rik Faith (faith@cs.unc.edu)
-.TH null 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-null, zero \- data sink
-.SH DESCRIPTION
-Data written to the
-.I /dev/null
-and
-.I /dev/zero
-special files is discarded.
-.PP
-Reads from
-.I /dev/null
-always return end of file (i.e.,
-.BR read (2)
-returns 0), whereas reads from
-.I /dev/zero
-always return bytes containing zero (\[aq]\e0\[aq] characters).
-.PP
-These devices are typically created by:
-.PP
-.in +4n
-.EX
-mknod \-m 666 /dev/null c 1 3
-mknod \-m 666 /dev/zero c 1 5
-chown root:root /dev/null /dev/zero
-.EE
-.in
-.SH FILES
-.I /dev/null
-.br
-.I /dev/zero
-.SH NOTES
-If these devices are not writable and readable for all users, many
-programs will act strangely.
-.PP
-Since Linux 2.6.31,
-.\" commit 2b83868723d090078ac0e2120e06a1cc94dbaef0
-reads from
-.I /dev/zero
-are interruptible by signals.
-(This change was made to help with bad latencies for large reads from
-.IR /dev/zero .)
-.SH SEE ALSO
-.BR chown (1),
-.BR mknod (1),
-.BR full (4)
diff --git a/man4/port.4 b/man4/port.4
deleted file mode 100644
index d4c1762c5..000000000
--- a/man4/port.4
+++ /dev/null
@@ -1 +0,0 @@
-.so man4/mem.4
diff --git a/man4/ptmx.4 b/man4/ptmx.4
deleted file mode 100644
index b50d4e710..000000000
--- a/man4/ptmx.4
+++ /dev/null
@@ -1 +0,0 @@
-.so man4/pts.4
diff --git a/man4/pts.4 b/man4/pts.4
deleted file mode 100644
index a021f039f..000000000
--- a/man4/pts.4
+++ /dev/null
@@ -1,75 +0,0 @@
-.\" This man page was written by Jeremy Phelps <jphelps@notreached.net>.
-.\" Notes added - aeb
-.\"
-.\" %%%LICENSE_START(FREELY_REDISTRIBUTABLE)
-.\" Redistribute and revise at will.
-.\" %%%LICENSE_END
-.\"
-.TH pts 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ptmx, pts \- pseudoterminal master and slave
-.SH DESCRIPTION
-The file
-.I /dev/ptmx
-(the pseudoterminal multiplexor device)
-is a character file with major number 5 and
-minor number 2, usually with mode 0666 and ownership root:root.
-It is used to create a pseudoterminal master and slave pair.
-.PP
-When a process opens
-.IR /dev/ptmx ,
-it gets a file
-descriptor for a pseudoterminal master
-and a pseudoterminal slave device is created in the
-.I /dev/pts
-directory.
-Each file descriptor obtained by opening
-.I /dev/ptmx
-is an independent pseudoterminal master with its own associated slave,
-whose path can
-be found by passing the file descriptor to
-.BR ptsname (3).
-.PP
-Before opening the pseudoterminal slave, you must pass the master's file
-descriptor to
-.BR grantpt (3)
-and
-.BR unlockpt (3).
-.PP
-Once both the pseudoterminal master and slave are open, the slave provides
-processes with an interface that is identical to that of a real terminal.
-.PP
-Data written to the slave is presented on the master file descriptor as input.
-Data written to the master is presented to the slave as input.
-.PP
-In practice, pseudoterminals are used for implementing terminal emulators
-such as
-.BR xterm (1),
-in which data read from the pseudoterminal master is interpreted by the
-application in the same way
-a real terminal would interpret the data, and for implementing remote-login
-programs such as
-.BR sshd (8),
-in which data read from the pseudoterminal master is sent across the network
-to a client program that is connected to a terminal or terminal emulator.
-.PP
-Pseudoterminals can also be used to send input to programs that normally
-refuse to read input from pipes (such as
-.BR su (1),
-and
-.BR passwd (1)).
-.SH FILES
-.IR /dev/ptmx ,
-.I /dev/pts/*
-.SH NOTES
-The Linux support for the above (known as UNIX 98 pseudoterminal naming)
-is done using the
-.I devpts
-filesystem, which should be mounted on
-.IR /dev/pts .
-.SH SEE ALSO
-.BR getpt (3),
-.BR grantpt (3),
-.BR ptsname (3),
-.BR unlockpt (3),
-.BR pty (7)
diff --git a/man4/ram.4 b/man4/ram.4
deleted file mode 100644
index 47161c505..000000000
--- a/man4/ram.4
+++ /dev/null
@@ -1,28 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sat Jul 24 17:01:11 1993 by Rik Faith (faith@cs.unc.edu)
-.TH ram 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ram \- ram disk device
-.SH DESCRIPTION
-The
-.I ram
-device is a block device to access the ram disk in raw mode.
-.PP
-It is typically created by:
-.PP
-.in +4n
-.EX
-mknod \-m 660 /dev/ram b 1 1
-chown root:disk /dev/ram
-.EE
-.in
-.SH FILES
-.I /dev/ram
-.SH SEE ALSO
-.BR chown (1),
-.BR mknod (1),
-.BR mount (8)
diff --git a/man4/random.4 b/man4/random.4
deleted file mode 100644
index edd047b77..000000000
--- a/man4/random.4
+++ /dev/null
@@ -1,347 +0,0 @@
-.\" Copyright (c) 1997 John S. Kallal (kallal@voicenet.com)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Some changes by tytso and aeb.
-.\"
-.\" 2004-12-16, John V. Belmonte/mtk, Updated init and quit scripts
-.\" 2004-04-08, AEB, Improved description of read from /dev/urandom
-.\" 2008-06-20, George Spelvin <linux@horizon.com>,
-.\" Matt Mackall <mpm@selenic.com>
-.\"
-.TH random 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-random, urandom \- kernel random number source devices
-.SH SYNOPSIS
-.nf
-#include <linux/random.h>
-.PP
-.BI "int ioctl(" fd ", RND" request ", " param ");"
-.fi
-.SH DESCRIPTION
-The character special files \fI/dev/random\fP and
-\fI/dev/urandom\fP (present since Linux 1.3.30)
-provide an interface to the kernel's random number generator.
-The file
-.I /dev/random
-has major device number 1 and minor device number 8.
-The file
-.I /dev/urandom
-has major device number 1 and minor device number 9.
-.PP
-The random number generator gathers environmental noise
-from device drivers and other sources into an entropy pool.
-The generator also keeps an estimate of the
-number of bits of noise in the entropy pool.
-From this entropy pool, random numbers are created.
-.PP
-Linux 3.17 and later provides the simpler and safer
-.BR getrandom (2)
-interface which requires no special files;
-see the
-.BR getrandom (2)
-manual page for details.
-.PP
-When read, the
-.I /dev/urandom
-device returns random bytes using a pseudorandom
-number generator seeded from the entropy pool.
-Reads from this device do not block (i.e., the CPU is not yielded),
-but can incur an appreciable delay when requesting large amounts of data.
-.PP
-When read during early boot time,
-.I /dev/urandom
-may return data prior to the entropy pool being initialized.
-.\" This is a real problem; see
-.\" commit 9b4d008787f864f17d008c9c15bbe8a0f7e2fc24
-If this is of concern in your application, use
-.BR getrandom (2)
-or \fI/dev/random\fP instead.
-.PP
-The \fI/dev/random\fP device is a legacy interface which dates back to
-a time where the cryptographic primitives used in the implementation
-of \fI/dev/urandom\fP were not widely trusted.
-It will return random bytes only within the estimated number of
-bits of fresh noise in the entropy pool, blocking if necessary.
-\fI/dev/random\fP is suitable for applications that need
-high quality randomness, and can afford indeterminate delays.
-.PP
-When the entropy pool is empty, reads from \fI/dev/random\fP will block
-until additional environmental noise is gathered.
-Since Linux 5.6, the
-.B O_NONBLOCK
-flag is ignored as
-.I /dev/random
-will no longer block except during early boot process.
-In earlier versions, if
-.BR open (2)
-is called for
-.I /dev/random
-with the
-.B O_NONBLOCK
-flag, a subsequent
-.BR read (2)
-will not block if the requested number of bytes is not available.
-Instead, the available bytes are returned.
-If no byte is available,
-.BR read (2)
-will return \-1 and
-.I errno
-will be set to
-.BR EAGAIN .
-.PP
-The
-.B O_NONBLOCK
-flag has no effect when opening
-.IR /dev/urandom .
-When calling
-.BR read (2)
-for the device
-.IR /dev/urandom ,
-reads of up to 256 bytes will return as many bytes as are requested
-and will not be interrupted by a signal handler.
-Reads with a buffer over this limit may return less than the
-requested number of bytes or fail with the error
-.BR EINTR ,
-if interrupted by a signal handler.
-.PP
-Since Linux 3.16,
-.\" commit 79a8468747c5f95ed3d5ce8376a3e82e0c5857fc
-a
-.BR read (2)
-from
-.I /dev/urandom
-will return at most 32\ MB.
-A
-.BR read (2)
-from
-.I /dev/random
-will return at most 512 bytes
-.\" SEC_XFER_SIZE in drivers/char/random.c
-(340 bytes before Linux 2.6.12).
-.PP
-Writing to \fI/dev/random\fP or \fI/dev/urandom\fP will update the
-entropy pool with the data written, but this will not result in a
-higher entropy count.
-This means that it will impact the contents
-read from both files, but it will not make reads from
-\fI/dev/random\fP faster.
-.SS Usage
-The
-.I /dev/random
-interface is considered a legacy interface, and
-.I /dev/urandom
-is preferred and sufficient in all use cases, with the exception of
-applications which require randomness during early boot time; for
-these applications,
-.BR getrandom (2)
-must be used instead,
-because it will block until the entropy pool is initialized.
-.PP
-If a seed file is saved across reboots as recommended below,
-the output is
-cryptographically secure against attackers without local root access as
-soon as it is reloaded in the boot sequence, and perfectly adequate for
-network encryption session keys.
-(All major Linux distributions have saved the seed file across reboots
-since 2000 at least.)
-Since reads from
-.I /dev/random
-may block, users will usually want to open it in nonblocking mode
-(or perform a read with timeout),
-and provide some sort of user notification if the desired
-entropy is not immediately available.
-.\"
-.SS Configuration
-If your system does not have
-\fI/dev/random\fP and \fI/dev/urandom\fP created already, they
-can be created with the following commands:
-.PP
-.in +4n
-.EX
-mknod \-m 666 /dev/random c 1 8
-mknod \-m 666 /dev/urandom c 1 9
-chown root:root /dev/random /dev/urandom
-.EE
-.in
-.PP
-When a Linux system starts up without much operator interaction,
-the entropy pool may be in a fairly predictable state.
-This reduces the actual amount of noise in the entropy pool
-below the estimate.
-In order to counteract this effect, it helps to carry
-entropy pool information across shut-downs and start-ups.
-To do this, add the lines to an appropriate script
-which is run during the Linux system start-up sequence:
-.PP
-.in +4n
-.EX
-echo "Initializing random number generator..."
-random_seed=/var/run/random\-seed
-# Carry a random seed from start\-up to start\-up
-# Load and then save the whole entropy pool
-if [ \-f $random_seed ]; then
- cat $random_seed >/dev/urandom
-else
- touch $random_seed
-fi
-chmod 600 $random_seed
-poolfile=/proc/sys/kernel/random/poolsize
-[ \-r $poolfile ] && bits=$(cat $poolfile) || bits=4096
-bytes=$(expr $bits / 8)
-dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
-.EE
-.in
-.PP
-Also, add the following lines in an appropriate script which is
-run during the Linux system shutdown:
-.PP
-.in +4n
-.EX
-# Carry a random seed from shut\-down to start\-up
-# Save the whole entropy pool
-echo "Saving random seed..."
-random_seed=/var/run/random\-seed
-touch $random_seed
-chmod 600 $random_seed
-poolfile=/proc/sys/kernel/random/poolsize
-[ \-r $poolfile ] && bits=$(cat $poolfile) || bits=4096
-bytes=$(expr $bits / 8)
-dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
-.EE
-.in
-.PP
-In the above examples, we assume Linux 2.6.0 or later, where
-.I /proc/sys/kernel/random/poolsize
-returns the size of the entropy pool in bits (see below).
-.\"
-.SS /proc interfaces
-The files in the directory
-.I /proc/sys/kernel/random
-(present since Linux 2.3.16) provide additional information about the
-.I /dev/random
-device:
-.TP
-.I entropy_avail
-This read-only file gives the available entropy, in bits.
-This will be a number in the range 0 to 4096.
-.TP
-.I poolsize
-This file
-gives the size of the entropy pool.
-The semantics of this file vary across kernel versions:
-.RS
-.TP
-Linux 2.4:
-This file gives the size of the entropy pool in
-.IR bytes .
-Normally, this file will have the value 512, but it is writable,
-and can be changed to any value for which an algorithm is available.
-The choices are 32, 64, 128, 256, 512, 1024, or 2048.
-.TP
-Linux 2.6 and later:
-This file is read-only, and gives the size of the entropy pool in
-.IR bits .
-It contains the value 4096.
-.RE
-.TP
-.I read_wakeup_threshold
-This file
-contains the number of bits of entropy required for waking up processes
-that sleep waiting for entropy from
-.IR /dev/random .
-The default is 64.
-.TP
-.I write_wakeup_threshold
-This file
-contains the number of bits of entropy below which we wake up
-processes that do a
-.BR select (2)
-or
-.BR poll (2)
-for write access to
-.IR /dev/random .
-These values can be changed by writing to the files.
-.TP
-.IR uuid " and " boot_id
-These read-only files
-contain random strings like 6fd5a44b\-35f4\-4ad4\-a9b9\-6b9be13e1fe9.
-The former is generated afresh for each read, the latter was
-generated once.
-.\"
-.SS ioctl(2) interface
-The following
-.BR ioctl (2)
-requests are defined on file descriptors connected to either \fI/dev/random\fP
-or \fI/dev/urandom\fP.
-All requests performed will interact with the input
-entropy pool impacting both \fI/dev/random\fP and \fI/dev/urandom\fP.
-The
-.B CAP_SYS_ADMIN
-capability is required for all requests except
-.BR RNDGETENTCNT .
-.TP
-.B RNDGETENTCNT
-Retrieve the entropy count of the input pool, the contents will be the same
-as the
-.I entropy_avail
-file under proc.
-The result will be stored in the int pointed to by the argument.
-.TP
-.B RNDADDTOENTCNT
-Increment or decrement the entropy count of the input pool
-by the value pointed to by the argument.
-.TP
-.B RNDGETPOOL
-Removed in Linux 2.6.9.
-.TP
-.B RNDADDENTROPY
-Add some additional entropy to the input pool,
-incrementing the entropy count.
-This differs from writing to \fI/dev/random\fP or \fI/dev/urandom\fP,
-which only adds some
-data but does not increment the entropy count.
-The following structure is used:
-.IP
-.in +4n
-.EX
-struct rand_pool_info {
- int entropy_count;
- int buf_size;
- __u32 buf[0];
-};
-.EE
-.in
-.IP
-Here
-.I entropy_count
-is the value added to (or subtracted from) the entropy count, and
-.I buf
-is the buffer of size
-.I buf_size
-which gets added to the entropy pool.
-.TP
-.BR RNDZAPENTCNT ", " RNDCLEARPOOL
-Zero the entropy count of all pools and add some system data (such as
-wall clock) to the pools.
-.SH FILES
-.I /dev/random
-.br
-.I /dev/urandom
-.SH NOTES
-For an overview and comparison of the various interfaces that
-can be used to obtain randomness, see
-.BR random (7).
-.SH BUGS
-During early boot time, reads from
-.I /dev/urandom
-may return data prior to the entropy pool being initialized.
-.\" .SH AUTHOR
-.\" The kernel's random number generator was written by
-.\" Theodore Ts'o (tytso@athena.mit.edu).
-.SH SEE ALSO
-.BR mknod (1),
-.BR getrandom (2),
-.BR random (7)
-.PP
-RFC\ 1750, "Randomness Recommendations for Security"
diff --git a/man4/rtc.4 b/man4/rtc.4
deleted file mode 100644
index 55dc1ff6b..000000000
--- a/man4/rtc.4
+++ /dev/null
@@ -1,327 +0,0 @@
-.\" rtc.4
-.\" Copyright 2002 Urs Thuermann (urs@isnogud.escape.de)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" $Id: rtc.4,v 1.4 2005/12/05 17:19:49 urs Exp $
-.\"
-.\" 2006-02-08 Various additions by mtk
-.\" 2006-11-26 cleanup, cover the generic rtc framework; David Brownell
-.\"
-.TH rtc 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-rtc \- real-time clock
-.SH SYNOPSIS
-.nf
-#include <linux/rtc.h>
-.PP
-.BI "int ioctl(" fd ", RTC_" request ", " param ");"
-.fi
-.SH DESCRIPTION
-This is the interface to drivers for real-time clocks (RTCs).
-.PP
-Most computers have one or more hardware clocks which record the
-current "wall clock" time.
-These are called "Real Time Clocks" (RTCs).
-One of these usually has battery backup power so that it tracks the time
-even while the computer is turned off.
-RTCs often provide alarms and other interrupts.
-.PP
-All i386 PCs, and ACPI-based systems, have an RTC that is compatible with
-the Motorola MC146818 chip on the original PC/AT.
-Today such an RTC is usually integrated into the mainboard's chipset
-(south bridge), and uses a replaceable coin-sized backup battery.
-.PP
-Non-PC systems, such as embedded systems built around system-on-chip
-processors, use other implementations.
-They usually won't offer the same functionality as the RTC from a PC/AT.
-.SS RTC vs system clock
-RTCs should not be confused with the system clock, which is
-a software clock maintained by the kernel and used to implement
-.BR gettimeofday (2)
-and
-.BR time (2),
-as well as setting timestamps on files, and so on.
-The system clock reports seconds and microseconds since a start point,
-defined to be the POSIX Epoch: 1970-01-01 00:00:00 +0000 (UTC).
-(One common implementation counts timer interrupts, once
-per "jiffy", at a frequency of 100, 250, or 1000 Hz.)
-That is, it is supposed to report wall clock time, which RTCs also do.
-.PP
-A key difference between an RTC and the system clock is that RTCs
-run even when the system is in a low power state (including "off"),
-and the system clock can't.
-Until it is initialized, the system clock can only report time since
-system boot ... not since the POSIX Epoch.
-So at boot time, and after resuming from a system low power state, the
-system clock will often be set to the current wall clock time using an RTC.
-Systems without an RTC need to set the system clock using another clock,
-maybe across the network or by entering that data manually.
-.SS RTC functionality
-RTCs can be read and written with
-.BR hwclock (8),
-or directly with the
-.BR ioctl (2)
-requests listed below.
-.PP
-Besides tracking the date and time, many RTCs can also generate
-interrupts
-.IP \[bu] 3
-on every clock update (i.e., once per second);
-.IP \[bu]
-at periodic intervals with a frequency that can be set to
-any power-of-2 multiple in the range 2 Hz to 8192 Hz;
-.IP \[bu]
-on reaching a previously specified alarm time.
-.PP
-Each of those interrupt sources can be enabled or disabled separately.
-On many systems, the alarm interrupt can be configured as a system wakeup
-event, which can resume the system from a low power state such as
-Suspend-to-RAM (STR, called S3 in ACPI systems),
-Hibernation (called S4 in ACPI systems),
-or even "off" (called S5 in ACPI systems).
-On some systems, the battery backed RTC can't issue
-interrupts, but another one can.
-.PP
-The
-.I /dev/rtc
-(or
-.IR /dev/rtc0 ,
-.IR /dev/rtc1 ,
-etc.)
-device can be opened only once (until it is closed) and it is read-only.
-On
-.BR read (2)
-and
-.BR select (2)
-the calling process is blocked until the next interrupt from that RTC
-is received.
-Following the interrupt, the process can read a long integer, of which
-the least significant byte contains a bit mask encoding
-the types of interrupt that occurred,
-while the remaining 3 bytes contain the number of interrupts since the
-last
-.BR read (2).
-.SS ioctl(2) interface
-The following
-.BR ioctl (2)
-requests are defined on file descriptors connected to RTC devices:
-.TP
-.B RTC_RD_TIME
-Returns this RTC's time in the following structure:
-.IP
-.in +4n
-.EX
-struct rtc_time {
- int tm_sec;
- int tm_min;
- int tm_hour;
- int tm_mday;
- int tm_mon;
- int tm_year;
- int tm_wday; /* unused */
- int tm_yday; /* unused */
- int tm_isdst; /* unused */
-};
-.EE
-.in
-.IP
-The fields in this structure have the same meaning and ranges as for the
-.I tm
-structure described in
-.BR gmtime (3).
-A pointer to this structure should be passed as the third
-.BR ioctl (2)
-argument.
-.TP
-.B RTC_SET_TIME
-Sets this RTC's time to the time specified by the
-.I rtc_time
-structure pointed to by the third
-.BR ioctl (2)
-argument.
-To set the
-RTC's time the process must be privileged (i.e., have the
-.B CAP_SYS_TIME
-capability).
-.TP
-.BR RTC_ALM_READ ", " RTC_ALM_SET
-Read and set the alarm time, for RTCs that support alarms.
-The alarm interrupt must be separately enabled or disabled using the
-.BR RTC_AIE_ON ", " RTC_AIE_OFF
-requests.
-The third
-.BR ioctl (2)
-argument is a pointer to an
-.I rtc_time
-structure.
-Only the
-.IR tm_sec ,
-.IR tm_min ,
-and
-.I tm_hour
-fields of this structure are used.
-.TP
-.BR RTC_IRQP_READ ", " RTC_IRQP_SET
-Read and set the frequency for periodic interrupts,
-for RTCs that support periodic interrupts.
-The periodic interrupt must be separately enabled or disabled using the
-.BR RTC_PIE_ON ", " RTC_PIE_OFF
-requests.
-The third
-.BR ioctl (2)
-argument is an
-.I "unsigned long\ *"
-or an
-.IR "unsigned long" ,
-respectively.
-The value is the frequency in interrupts per second.
-The set of allowable frequencies is the multiples of two
-in the range 2 to 8192.
-Only a privileged process (i.e., one having the
-.B CAP_SYS_RESOURCE
-capability) can set frequencies above the value specified in
-.IR /proc/sys/dev/rtc/max\-user\-freq .
-(This file contains the value 64 by default.)
-.TP
-.BR RTC_AIE_ON ", " RTC_AIE_OFF
-Enable or disable the alarm interrupt, for RTCs that support alarms.
-The third
-.BR ioctl (2)
-argument is ignored.
-.TP
-.BR RTC_UIE_ON ", " RTC_UIE_OFF
-Enable or disable the interrupt on every clock update,
-for RTCs that support this once-per-second interrupt.
-The third
-.BR ioctl (2)
-argument is ignored.
-.TP
-.BR RTC_PIE_ON ", " RTC_PIE_OFF
-Enable or disable the periodic interrupt,
-for RTCs that support these periodic interrupts.
-The third
-.BR ioctl (2)
-argument is ignored.
-Only a privileged process (i.e., one having the
-.B CAP_SYS_RESOURCE
-capability) can enable the periodic interrupt if the frequency is
-currently set above the value specified in
-.IR /proc/sys/dev/rtc/max\-user\-freq .
-.TP
-.BR RTC_EPOCH_READ ", " RTC_EPOCH_SET
-Many RTCs encode the year in an 8-bit register which is either
-interpreted as an 8-bit binary number or as a BCD number.
-In both cases,
-the number is interpreted relative to this RTC's Epoch.
-The RTC's Epoch is
-initialized to 1900 on most systems but on Alpha and MIPS it might
-also be initialized to 1952, 1980, or 2000, depending on the value of
-an RTC register for the year.
-With some RTCs,
-these operations can be used to read or to set the RTC's Epoch,
-respectively.
-The third
-.BR ioctl (2)
-argument is an
-.I "unsigned long\ *"
-or an
-.IR "unsigned long" ,
-respectively, and the value returned (or assigned) is the Epoch.
-To set the RTC's Epoch the process must be privileged (i.e., have the
-.B CAP_SYS_TIME
-capability).
-.TP
-.BR RTC_WKALM_RD ", " RTC_WKALM_SET
-Some RTCs support a more powerful alarm interface, using these ioctls
-to read or write the RTC's alarm time (respectively) with this structure:
-.PP
-.RS
-.in +4n
-.EX
-struct rtc_wkalrm {
- unsigned char enabled;
- unsigned char pending;
- struct rtc_time time;
-};
-.EE
-.in
-.RE
-.IP
-The
-.I enabled
-flag is used to enable or disable the alarm interrupt,
-or to read its current status; when using these calls,
-.BR RTC_AIE_ON " and " RTC_AIE_OFF
-are not used.
-The
-.I pending
-flag is used by
-.B RTC_WKALM_RD
-to report a pending interrupt
-(so it's mostly useless on Linux, except when talking
-to the RTC managed by EFI firmware).
-The
-.I time
-field is as used with
-.B RTC_ALM_READ
-and
-.B RTC_ALM_SET
-except that the
-.IR tm_mday ,
-.IR tm_mon ,
-and
-.I tm_year
-fields are also valid.
-A pointer to this structure should be passed as the third
-.BR ioctl (2)
-argument.
-.SH FILES
-.TP
-.IR /dev/rtc ", " /dev/rtc0 ", " /dev/rtc1 ", etc."
-RTC special character device files.
-.TP
-.I /proc/driver/rtc
-status of the (first) RTC.
-.SH NOTES
-When the kernel's system time is synchronized with an external
-reference using
-.BR adjtimex (2)
-it will update a designated RTC periodically every 11 minutes.
-To do so, the kernel has to briefly turn off periodic interrupts;
-this might affect programs using that RTC.
-.PP
-An RTC's Epoch has nothing to do with the POSIX Epoch which is
-used only for the system clock.
-.PP
-If the year according to the RTC's Epoch and the year register is
-less than 1970 it is assumed to be 100 years later, that is, between 2000
-and 2069.
-.PP
-Some RTCs support "wildcard" values in alarm fields, to support
-scenarios like periodic alarms at fifteen minutes after every hour,
-or on the first day of each month.
-Such usage is nonportable;
-portable user-space code expects only a single alarm interrupt, and
-will either disable or reinitialize the alarm after receiving it.
-.PP
-Some RTCs support periodic interrupts with periods that are multiples
-of a second rather than fractions of a second;
-multiple alarms;
-programmable output clock signals;
-nonvolatile memory;
-and other hardware
-capabilities that are not currently exposed by this API.
-.SH SEE ALSO
-.BR date (1),
-.BR adjtimex (2),
-.BR gettimeofday (2),
-.BR settimeofday (2),
-.BR stime (2),
-.BR time (2),
-.BR gmtime (3),
-.BR time (7),
-.BR hwclock (8)
-.PP
-.I Documentation/rtc.txt
-in the Linux kernel source tree
diff --git a/man4/sd.4 b/man4/sd.4
deleted file mode 100644
index e8de51a64..000000000
--- a/man4/sd.4
+++ /dev/null
@@ -1,117 +0,0 @@
-.\" sd.4
-.\" Copyright 1992 Rickard E. Faith (faith@cs.unc.edu)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sd 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sd \- driver for SCSI disk drives
-.SH SYNOPSIS
-.nf
-.BR "#include <linux/hdreg.h> " "/* for HDIO_GETGEO */"
-.BR "#include <linux/fs.h> " "/* for BLKGETSIZE and BLKRRPART */"
-.fi
-.SH CONFIGURATION
-The block device name has the following form:
-.BI sd lp,
-where
-.I l
-is a letter denoting the physical drive, and
-.I p
-is a number denoting the partition on that physical drive.
-Often, the partition number,
-.IR p ,
-will be left off when the device corresponds to the whole drive.
-.PP
-SCSI disks have a major device number of 8, and a minor device number of
-the form (16 *
-.IR drive_number ") + " partition_number ,
-where
-.I drive_number
-is the number of the physical drive in order of detection, and
-.I partition_number
-is as follows:
-.IP \[bu] 3
-partition 0 is the whole drive
-.IP \[bu]
-partitions 1\[en]4 are the DOS "primary" partitions
-.IP \[bu]
-partitions 5\[en]8 are the DOS "extended" (or "logical") partitions
-.PP
-For example,
-.I /dev/sda
-will have major 8, minor 0, and will refer to all of the first SCSI drive
-in the system; and
-.I /dev/sdb3
-will have major 8, minor 19, and will refer to the third DOS "primary"
-partition on the second SCSI drive in the system.
-.PP
-At this time, only block devices are provided.
-Raw devices have not yet been implemented.
-.SH DESCRIPTION
-The following
-.IR ioctl s
-are provided:
-.TP
-.B HDIO_GETGEO
-Returns the BIOS disk parameters in the following structure:
-.PP
-.in +4n
-.EX
-struct hd_geometry {
- unsigned char heads;
- unsigned char sectors;
- unsigned short cylinders;
- unsigned long start;
-};
-.EE
-.in
-.IP
-A pointer to this structure is passed as the
-.BR ioctl (2)
-parameter.
-.IP
-The information returned in the parameter is the disk geometry of the drive
-.I "as understood by DOS!"
-This geometry is
-.I not
-the physical geometry of the drive.
-It is used when constructing the
-drive's partition table, however, and is needed for convenient operation
-of
-.BR fdisk (1),
-.BR efdisk (1),
-and
-.BR lilo (1).
-If the geometry information is not available, zero will be returned for all
-of the parameters.
-.TP
-.B BLKGETSIZE
-Returns the device size in sectors.
-The
-.BR ioctl (2)
-parameter should be a pointer to a
-.IR long .
-.TP
-.B BLKRRPART
-Forces a reread of the SCSI disk partition tables.
-No parameter is needed.
-.IP
-The SCSI
-.BR ioctl (2)
-operations are also supported.
-If the
-.BR ioctl (2)
-parameter is required, and it is NULL, then
-.BR ioctl (2)
-fails with the error
-.BR EINVAL .
-.SH FILES
-.TP
-.I /dev/sd[a\-h]
-the whole device
-.TP
-.I /dev/sd[a\-h][0\-8]
-individual block partitions
-.\".SH SEE ALSO
-.\".BR scsi (4)
diff --git a/man4/sk98lin.4 b/man4/sk98lin.4
deleted file mode 100644
index 51c6ad2f4..000000000
--- a/man4/sk98lin.4
+++ /dev/null
@@ -1,582 +0,0 @@
-'\" t
-.\" (C)Copyright 1999-2003 Marvell(R) -- linux@syskonnect.de
-.\" sk98lin.4 1.1 2003/12/17 10:03:18
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" This manpage can be viewed using `groff -Tascii -man sk98lin.4 | less`
-.\"
-.TH sk98lin 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sk98lin \- Marvell/SysKonnect Gigabit Ethernet driver v6.21
-.SH SYNOPSIS
-.B insmod sk98lin.o
-.RB [ Speed_A=\c
-.IR i,j,... ]
-.RB [ Speed_B=\c
-.IR i,j,... ]
-.RB [ AutoNeg_A=\c
-.IR i,j,... ]
-.RB [ AutoNeg_B=\c
-.IR i,j,... ]
-.RB [ DupCap_A=\c
-.IR i,j,... ]
-.RB [ DupCap_B=\c
-.IR i,j,... ]
-.RB [ FlowCtrl_A=\c
-.IR i,j,... ]
-.RB [ FlowCtrl_B=\c
-.IR i,j,... ]
-.RB [ Role_A=\c
-.IR i,j,... ]
-.RB [ Role_B=\c
-.IR i,j,... ]
-.RB [ ConType=\c
-.IR i,j,... ]
-.RB [ Moderation=\c
-.IR i,j,... ]
-.RB [ IntsPerSec=\c
-.IR i,j,... ]
-.RB [ PrefPort=\c
-.IR i,j,... ]
-.RB [ RlmtMode=\c
-.IR i,j,... ]
-.SH DESCRIPTION
-.ad l
-.hy 0
-.BR Note :
-This obsolete driver was removed in Linux 2.6.26.
-.PP
-.B sk98lin
-is the Gigabit Ethernet driver for
-Marvell and SysKonnect network adapter cards.
-It supports SysKonnect SK-98xx/SK-95xx
-compliant Gigabit Ethernet Adapter and
-any Yukon compliant chipset.
-.PP
-When loading the driver using insmod,
-parameters for the network adapter cards
-might be stated as a sequence of comma separated commands.
-If for instance two network adapters are installed and AutoNegotiation on
-Port A of the first adapter should be ON,
-but on the Port A of the second adapter switched OFF, one must enter:
-.PP
-.in +4n
-.EX
-insmod sk98lin.o AutoNeg_A=On,Off
-.EE
-.in
-.PP
-After
-.B sk98lin
-is bound to one or more adapter cards and the
-.I /proc
-filesystem is mounted on your system, a dedicated statistics file
-will be created in the folder
-.I /proc/net/sk98lin
-for all ports of the installed network adapter cards.
-Those files are named
-.IR eth[x] ,
-where
-.I x
-is the number of the interface that has been assigned to a
-dedicated port by the system.
-.PP
-If loading is finished, any desired IP address can be
-assigned to the respective
-.I eth[x]
-interface using the
-.BR ifconfig (8)
-command.
-This causes the adapter to connect to the Ethernet and to display a status
-message on the console saying "ethx: network connection up using port y"
-followed by the configured or detected connection parameters.
-.PP
-The
-.B sk98lin
-also supports large frames (also called jumbo frames).
-Using jumbo frames can improve throughput tremendously when
-transferring large amounts of data.
-To enable large frames, the MTU (maximum transfer unit) size
-for an interface is to be set to a high value.
-The default MTU size is 1500 and can be changed up to 9000 (bytes).
-Setting the MTU size can be done when assigning the IP address
-to the interface or later by using the
-.BR ifconfig (8)
-command with the mtu parameter.
-If for instance eth0 needs an IP
-address and a large frame MTU size,
-the following two commands might be used:
-.PP
-.in +4n
-.EX
-ifconfig eth0 10.1.1.1
-ifconfig eth0 mtu 9000
-.EE
-.in
-.PP
-Those two commands might even be combined into one:
-.PP
-.in +4n
-.EX
-ifconfig eth0 10.1.1.1 mtu 9000
-.EE
-.in
-.PP
-Note that large frames can be used only if permitted by
-your network infrastructure.
-This means, that any switch being used in your Ethernet must
-also support large frames.
-Quite some switches support large frames,
-but need to be configured to do so.
-Most of the times, their default setting is to support only
-standard frames with an MTU size of 1500 (bytes).
-In addition to the switches inside the network,
-all network adapters that are to be used must also be
-enabled regarding jumbo frames.
-If an adapter is not set to receive large frames, it will simply drop them.
-.PP
-Switching back to the standard Ethernet frame size can be done by using the
-.BR ifconfig (8)
-command again:
-.PP
-.in +4n
-.EX
-ifconfig eth0 mtu 1500
-.EE
-.in
-.PP
-The Marvell/SysKonnect Gigabit Ethernet driver for Linux is able to
-support VLAN and Link Aggregation according to
-IEEE standards 802.1, 802.1q, and 802.3ad.
-Those features are available only after installation of open source modules
-which can be found on the Internet:
-.PP
-.IR VLAN \c
-:
-.UR http://www.candelatech.com\:/\[ti]greear\:/vlan.html
-.UE
-.br
-.I Link
-.IR Aggregation \c
-:
-.UR http://www.st.rim.or.jp\:/\[ti]yumo
-.UE
-.PP
-Note that Marvell/SysKonnect does not offer any support for these
-open source modules and does not take the responsibility for any
-kind of failures or problems arising when using these modules.
-.SS Parameters
-.TP
-.BI Speed_A= i,j,...
-This parameter is used to set the speed capabilities of port A of an
-adapter card.
-It is valid only for Yukon copper adapters.
-Possible values are:
-.IR 10 ,
-.IR 100 ,
-.IR 1000 ,
-or
-.IR Auto ;
-.I Auto
-is the default.
-Usually, the speed is negotiated between the two ports
-during link establishment.
-If this fails,
-a port can be forced to a specific setting with this parameter.
-.TP
-.BI Speed_B= i,j,...
-This parameter is used to set the speed capabilities of port B of
-an adapter card.
-It is valid only for Yukon copper adapters.
-Possible values are:
-.IR 10 ,
-.IR 100 ,
-.IR 1000 ,
-or
-.IR Auto ;
-.I Auto
-is the default.
-Usually, the speed is negotiated between the two ports during link
-establishment.
-If this fails,
-a port can be forced to a specific setting with this parameter.
-.TP
-.BI AutoNeg_A= i,j,...
-Enables or disables the use of autonegotiation of port A of an adapter card.
-Possible values are:
-.IR On ,
-.IR Off ,
-or
-.IR Sense ;
-.I On
-is the default.
-The
-.I Sense
-mode automatically detects whether the link partner supports
-auto-negotiation or not.
-.TP
-.BI AutoNeg_B= i,j,...
-Enables or disables the use of autonegotiation of port B of an adapter card.
-Possible values are:
-.IR On ,
-.IR Off ,
-or
-.IR Sense ;
-.I On
-is the default.
-The
-.I Sense
-mode automatically detects whether the link partner supports
-auto-negotiation or not.
-.TP
-.BI DupCap_A= i,j,...
-This parameter indicates the duplex mode to be used for port A
-of an adapter card.
-Possible values are:
-.IR Half ,
-.IR Full ,
-or
-.IR Both ;
-.I Both
-is the default.
-This parameter is relevant only if AutoNeg_A of port A is not set to
-.IR Sense .
-If AutoNeg_A is set to
-.IR On ,
-all three values of DupCap_A (
-.IR Half ,
-.IR Full ,
-or
-.IR Both )
-might be stated.
-If AutoNeg_A is set to
-.IR Off ,
-only DupCap_A values
-.I Full
-and
-.I Half
-are allowed.
-This DupCap_A parameter is useful if your link partner does not
-support all possible duplex combinations.
-.TP
-.BI DupCap_B= i,j,...
-This parameter indicates the duplex mode to be used for port B
-of an adapter card.
-Possible values are:
-.IR Half ,
-.IR Full ,
-or
-.IR Both ;
-.I Both
-is the default.
-This parameter is relevant only if AutoNeg_B of port B is not set to
-.IR Sense .
-If AutoNeg_B is set to
-.IR On ,
-all three values of DupCap_B (
-.IR Half ,
-.IR Full ,
-or
-.IR Both )
-might be stated.
-If AutoNeg_B is set to
-.IR Off ,
-only DupCap_B values
-.I Full
-and
-.I Half
-are allowed.
-This DupCap_B parameter is useful if your link partner does not
-support all possible duplex combinations.
-.TP
-.BI FlowCtrl_A= i,j,...
-This parameter can be used to set the flow control capabilities the
-port reports during auto-negotiation.
-Possible values are:
-.IR Sym ,
-.IR SymOrRem ,
-.IR LocSend ,
-or
-.IR None ;
-.I SymOrRem
-is the default.
-The different modes have the following meaning:
-.RS
-.TP
-.IR Sym " = Symmetric"
-Both link partners are allowed to send PAUSE frames.
-.TP
-.IR SymOrRem " = SymmetricOrRemote"
-Both or only remote partner are allowed to send PAUSE frames.
-.TP
-.IR LocSend " = LocalSend"
-Only local link partner is allowed to send PAUSE frames.
-.TP
-.IR None " = None"
-No link partner is allowed to send PAUSE frames.
-.RE
-.IP
-Note that this parameter is ignored if AutoNeg_A is set to
-.IR Off .
-.TP
-.BI FlowCtrl_B= i,j,...
-This parameter can be used to set the flow control capabilities the
-port reports during auto-negotiation.
-Possible values are:
-.IR Sym ,
-.IR SymOrRem ,
-.IR LocSend ,
-or
-.IR None ;
-.I SymOrRem
-is the default.
-The different modes have the following meaning:
-.RS
-.TP
-.IR Sym " = Symmetric"
-Both link partners are allowed to send PAUSE frames.
-.TP
-.IR SymOrRem " = SymmetricOrRemote"
-Both or only remote partner are allowed to send PAUSE frames.
-.TP
-.IR LocSend " = LocalSend"
-Only local link partner is allowed to send PAUSE frames.
-.TP
-.IR None " = None"
-No link partner is allowed to send PAUSE frames.
-.RE
-.IP
-Note that this parameter is ignored if AutoNeg_B is set to
-.IR Off .
-.TP
-.BI Role_A= i,j,...
-This parameter is valid only for 1000Base-T adapter cards.
-For two 1000Base-T ports to communicate,
-one must take the role of the master (providing timing information),
-while the other must be the slave.
-Possible values are:
-.IR Auto ,
-.IR Master ,
-or
-.IR Slave ;
-.I Auto
-is the default.
-Usually, the role of a port is negotiated between two ports during
-link establishment, but if that fails the port A of an adapter card
-can be forced to a specific setting with this parameter.
-.TP
-.BI Role_B= i,j,...
-This parameter is valid only for 1000Base-T adapter cards.
-For two 1000Base-T ports to communicate, one must take
-the role of the master (providing timing information),
-while the other must be the slave.
-Possible values are:
-.IR Auto ,
-.IR Master ,
-or
-.IR Slave ;
-.I Auto
-is the default.
-Usually, the role of a port is negotiated between
-two ports during link establishment, but if that fails
-the port B of an adapter card can be forced to a
-specific setting with this parameter.
-.TP
-.BI ConType= i,j,...
-This parameter is a combination of all five per-port parameters
-within one single parameter.
-This simplifies the configuration of both ports of an adapter card.
-The different values of this variable reflect the
-most meaningful combinations of port parameters.
-Possible values and their corresponding combination of per-port parameters:
-.IP
-.TS
-lb lb lb lb lb lb
-l l l l l l.
-ConType DupCap AutoNeg FlowCtrl Role Speed
-\fIAuto\fP Both On SymOrRem Auto Auto
-\fI100FD\fP Full Off None Auto 100
-\fI100HD\fP Half Off None Auto 100
-\fI10FD\fP Full Off None Auto 10
-\fI10HD\fP Half Off None Auto 10
-.TE
-.IP
-Stating any other port parameter together with this
-.I ConType
-parameter will result in a merged configuration of those settings.
-This is due to
-the fact, that the per-port parameters (e.g.,
-.IR Speed_A )
-have a higher priority than the combined variable
-.IR ConType .
-.TP
-.BI Moderation= i,j,...
-Interrupt moderation is employed to limit the maximum number of interrupts
-the driver has to serve.
-That is, one or more interrupts (which indicate any transmit or
-receive packet to be processed) are queued until the driver processes them.
-When queued interrupts are to be served, is determined by the
-.I IntsPerSec
-parameter, which is explained later below.
-Possible moderation modes are:
-.IR None ,
-.IR Static ,
-or
-.IR Dynamic ;
-.I None
-is the default.
-The different modes have the following meaning:
-.IP
-.I None
-No interrupt moderation is applied on the adapter card.
-Therefore, each transmit or receive interrupt is served immediately
-as soon as it appears on the interrupt line of the adapter card.
-.IP
-.I Static
-Interrupt moderation is applied on the adapter card.
-All transmit and receive interrupts are queued until
-a complete moderation interval ends.
-If such a moderation interval ends, all queued interrupts
-are processed in one big bunch without any delay.
-The term
-.I Static
-reflects the fact, that interrupt moderation is always enabled,
-regardless how much network load is currently passing via a
-particular interface.
-In addition, the duration of the moderation interval has a fixed
-length that never changes while the driver is operational.
-.IP
-.I Dynamic
-Interrupt moderation might be applied on the adapter card,
-depending on the load of the system.
-If the driver detects that the system load is too high,
-the driver tries to shield the system against too much network
-load by enabling interrupt moderation.
-If\[em]at a later time\[em]the CPU utilization decreases
-again (or if the network load is negligible), the interrupt
-moderation will automatically be disabled.
-.IP
-Interrupt moderation should be used when the driver has to
-handle one or more interfaces with a high network load,
-which\[em]as a consequence\[em]leads also to a high CPU utilization.
-When moderation is applied in such high network load situations,
-CPU load might be reduced by 20\[en]30% on slow computers.
-.IP
-Note that the drawback of using interrupt moderation is an increase of
-the round-trip-time (RTT), due to the queuing and serving of
-interrupts at dedicated moderation times.
-.TP
-.BI IntsPerSec= i,j,...
-This parameter determines the length of any interrupt moderation interval.
-Assuming that static interrupt moderation is to be used, an
-.I IntsPerSec
-parameter value of 2000 will lead to an interrupt moderation interval of
-500 microseconds.
-Possible values for this parameter are in the range of
-30...40000 (interrupts per second).
-The default value is 2000.
-.IP
-This parameter is used only if either static or dynamic interrupt moderation
-is enabled on a network adapter card.
-This parameter is ignored if no moderation is applied.
-.IP
-Note that the duration of the moderation interval is to be chosen with care.
-At first glance, selecting a very long duration (e.g., only 100 interrupts per
-second) seems to be meaningful, but the increase of packet-processing delay
-is tremendous.
-On the other hand, selecting a very short moderation time might
-compensate the use of any moderation being applied.
-.TP
-.BI PrefPort= i,j,...
-This parameter is used to force the preferred port to
-A or B (on dual-port network adapters).
-The preferred port is the one that is used if both ports A and B are
-detected as fully functional.
-Possible values are:
-.I A
-or
-.IR B ;
-.I A
-is the default.
-.TP
-.BI RlmtMode= i,j,...
-RLMT monitors the status of the port.
-If the link of the active port fails,
-RLMT switches immediately to the standby link.
-The virtual link is maintained as long as at least one "physical" link is up.
-This parameters states how RLMT should monitor both ports.
-Possible values are:
-.IR CheckLinkState ,
-.IR CheckLocalPort ,
-.IR CheckSeg ,
-or
-.IR DualNet ;
-.I CheckLinkState
-is the default.
-The different modes have the following meaning:
-.IP
-.I CheckLinkState
-Check link state only: RLMT uses the link state reported by the adapter
-hardware for each individual port to determine whether a port can be used
-for all network traffic or not.
-.IP
-.I CheckLocalPort
-In this mode, RLMT monitors the network path between the two
-ports of an adapter by regularly exchanging packets between them.
-This mode requires a network configuration in which the
-two ports are able to "see" each other (i.e., there
-must not be any router between the ports).
-.IP
-.I CheckSeg
-Check local port and segmentation:
-This mode supports the same functions as the CheckLocalPort
-mode and additionally checks network segmentation between the ports.
-Therefore, this mode is to be used only if Gigabit Ethernet
-switches are installed on the network that have been
-configured to use the Spanning Tree protocol.
-.IP
-.I DualNet
-In this mode, ports A and B are used as separate devices.
-If you have a dual port adapter, port A will be configured as
-.I eth[x]
-and port B as
-.IR eth[x+1] .
-Both ports can be used independently with distinct IP addresses.
-The preferred port setting is not used.
-RLMT is turned off.
-.IP
-Note that RLMT modes
-.I CheckLocalPort
-and
-.I CheckLinkState
-are designed to operate in configurations where a
-network path between the ports on one adapter exists.
-Moreover, they are not designed to work where adapters are
-connected back-to-back.
-.SH FILES
-.TP
-.I /proc/net/sk98lin/eth[x]
-The statistics file of a particular interface of an adapter card.
-It contains generic information about the adapter card plus a detailed
-summary of all transmit and receive counters.
-.TP
-.I /usr/src/linux/Documentation/networking/sk98lin.txt
-This is the
-.I README
-file of the
-.I sk98lin
-driver.
-It contains a detailed installation HOWTO and describes all parameters
-of the driver.
-It denotes also common problems and provides the solution to them.
-.SH BUGS
-Report any bugs to linux@syskonnect.de
-.\" .SH AUTHORS
-.\" Ralph Roesler \[em] rroesler@syskonnect.de
-.\" .br
-.\" Mirko Lindner \[em] mlindner@syskonnect.de
-.SH SEE ALSO
-.BR ifconfig (8),
-.BR insmod (8),
-.BR modprobe (8)
diff --git a/man4/smartpqi.4 b/man4/smartpqi.4
deleted file mode 100644
index 147d53fc2..000000000
--- a/man4/smartpqi.4
+++ /dev/null
@@ -1,326 +0,0 @@
-'\" t
-.\" Copyright (C) 2019, Microchip Technology Inc. and its subsidiaries
-.\" Copyright (C) 2016-2018, Microsemi Corporation
-.\" Copyright (C) 2016, PMC-Sierra, Inc.
-.\" Written by Kevin Barnett <kevin.barnett@microsemi.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-only
-.TH smartpqi 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-smartpqi \- Microsemi Smart Family SCSI driver
-.SH SYNOPSIS
-.SY "modprobe smartpqi"
-.RB [ disable_device_id_wildcards= { 0 | 1 }]
-.RB [ disable_heartbeat= { 0 | 1 }]
-.RB [ disable_ctrl_shutdown= { 0 | 1 }]
-.RB [ lockup_action= { none | reboot | panic }]
-.RB [ expose_ld_first= { 0 | 1 }]
-.RB [ hide_vsep= { 0 | 1 }]
-.YS
-.SH DESCRIPTION
-.B smartpqi
-is a SCSI driver for Microsemi Smart Family controllers.
-.SS Supported \f[BI]ioctl\fP\/() operations
-For compatibility with applications written for the
-.BR cciss (4)
-and
-.BR hpsa (4)
-drivers, many, but not all of the
-.BR ioctl (2)
-operations supported by the
-.B hpsa
-driver are also supported by the
-.B smartpqi
-driver.
-The data structures used by these operations
-are described in the Linux kernel source file
-.IR include/linux/cciss_ioctl.h .
-.TP
-.BR CCISS_DEREGDISK ", " CCISS_REGNEWDISK ", " CCISS_REGNEWD
-These operations
-all do exactly the same thing, which is to cause the driver to re-scan
-for new devices.
-This does exactly the same thing as writing to the
-.BR smartpqi -specific
-host
-.I rescan
-attribute.
-.TP
-.B CCISS_GETPCIINFO
-This operation returns the PCI domain, bus,
-device, and function and "board ID" (PCI subsystem ID).
-.TP
-.B CCISS_GETDRIVVER
-This operation returns the driver version in four bytes, encoded as:
-.IP
-.in +4n
-.EX
-(major_version << 28) | (minor_version << 24) |
- (release << 16) | revision
-.EE
-.in
-.TP
-.B CCISS_PASSTHRU
-Allows BMIC and CISS commands to be passed through to the controller.
-.SS Boot options
-.TP
-.BR disable_device_id_wildcards= { 0 | 1 }
-Disables support for device ID wildcards.
-The default value is 0.
-.TP
-.BR disable_heartbeat= { 0 | 1 }
-Disables support for the controller's heartbeat check.
-This parameter is used for debugging purposes.
-The default value is 0, leaving the controller's heartbeat check active.
-.TP
-.BR disable_ctrl_shutdown= { 0 | 1 }
-Disables support for shutting down the controller in the
-event of a controller lockup.
-The default value is 0.
-.TP
-.BR lockup_action= { none | reboot | panic }
-Specifies the action the driver takes when a controller
-lockup is detected.
-The default action is
-.BR none .
-.TS
-l l
----
-l l.
-parameter action
-\fBnone\fP take controller offline only
-\fBreboot\fP reboot the system
-\fBpanic\fP panic the system
-.TE
-.TP
-.BR expose_ld_first= { 0 | 1 }
-This option enables support for exposing logical devices to
-the operating system before physical devices.
-The default value is 0.
-.TP
-.BR hide_vsep= { 0 | 1 }
-This option enables disabling exposure of the virtual SEP to the host.
-This is usually associated with direct attached drives.
-The default value is 0.
-.SH FILES
-.SS Device nodes
-Logical drives are accessed via the SCSI disk driver
-.RI ( sd ),
-tape drives via the SCSI tape driver
-.RI ( st ),
-and the RAID controller via the SCSI generic driver
-.RI ( sg ),
-with device nodes named
-.IR /dev/sd *,
-.IR /dev/st *,
-and
-.IR /dev/sg *,
-respectively.
-.SS SmartPQI-specific host attribute files in \f[BI]/sys\fP
-.TP
-.IR /sys/class/scsi_host/host * /rescan
-The host
-.I rescan
-attribute is a write-only attribute.
-Writing to this attribute will cause the driver to scan for new,
-changed, or removed devices (e.g., hot-plugged tape drives, or newly
-configured or deleted logical drives) and notify the SCSI mid-layer of
-any changes detected.
-Usually this action is triggered automatically by configuration
-changes, so the user should not normally have to write to this file.
-Doing so may be useful when hot-plugging devices such as tape drives or
-entire storage boxes containing pre-configured logical drives.
-.TP
-.IR /sys/class/scsi_host/host * /version
-The host
-.I version
-attribute is a read-only attribute.
-This attribute contains the driver version and the controller firmware
-version.
-.IP
-For example:
-.IP
-.in +4n
-.EX
-$ \c
-.B cat /sys/class/scsi_host/host1/version
-driver: 1.1.2\-126
-firmware: 1.29\-112
-.EE
-.in
-.TP
-.IR /sys/class/scsi_host/host * /lockup_action
-The host
-.I lockup_action
-attribute is a read/write attribute.
-This attribute will cause the driver to perform a specific action in the
-unlikely event that a controller lockup has been detected.
-See
-.B OPTIONS
-above
-for an explanation of the
-.I lockup_action
-values.
-.TP
-.I /sys/class/scsi_host/host*/driver_version
-The
-.I driver_version
-attribute is read-only.
-This attribute contains the smartpqi driver version.
-.IP
-For example:
-.IP
-.in +4n
-.EX
-$ \c
-.B cat /sys/class/scsi_host/host1/driver_version
-1.1.2\-126
-.EE
-.in
-.TP
-.I /sys/class/scsi_host/host*/firmware_version
-The
-.I firmware_version
-attribute is read-only.
-This attribute contains the controller firmware version.
-.IP
-For example:
-.IP
-.in +4n
-.EX
-$ \c
-.B cat /sys/class/scsi_host/host1/firmware_version
-1.29\-112
-.EE
-.in
-.TP
-.I /sys/class/scsi_host/host*/model
-The
-.I model
-attribute is read-only.
-This attribute contains the product identification string of the controller.
-.IP
-For example:
-.IP
-.in +4n
-.EX
-$ \c
-.B cat /sys/class/scsi_host/host1/model
-1100\-16i
-.EE
-.in
-.TP
-.I /sys/class/scsi_host/host*/serial_number
-The
-.I serial_number
-attribute is read-only.
-This attribute contains the unique identification number of the controller.
-.IP
-For example:
-.IP
-.in +4n
-.EX
-$ \c
-.B cat /sys/class/scsi_host/host1/serial_number
-6A316373777
-.EE
-.in
-.TP
-.I /sys/class/scsi_host/host*/vendor
-The
-.I vendor
-attribute is read-only.
-This attribute contains the vendor identification string of the controller.
-.IP
-For example:
-.IP
-.in +4n
-.EX
-$ \c
-.B cat /sys/class/scsi_host/host1/vendor
-Adaptec
-.EE
-.in
-.SS SmartPQI-specific disk attribute files in \f[BI]/sys\fP
-In the file specifications below,
-.I c
-stands for the number of the appropriate SCSI controller,
-.I b
-is the bus number,
-.I t
-the target number, and
-.I l
-is the logical unit number (LUN).
-.TP
-.IR /sys/class/scsi_disk/ c : b : t : l /device/raid_level
-The
-.I raid_level
-attribute is read-only.
-This attribute contains the RAID level of each logical drive.
-.IP
-For example:
-.IP
-.in +4n
-.EX
-$ \c
-.B cat /sys/class/scsi_disk/4:0:0:0/device/raid_level
-RAID 0
-.EE
-.in
-.TP
-.IR /sys/class/scsi_disk/c : b : t : l/device/sas_address
-The
-.I sas_address
-attribute is read-only.
-This attribute contains the unique identifier of the disk.
-.IP
-For example:
-.IP
-.in +4n
-.EX
-$ \c
-.B cat /sys/class/scsi_disk/1:0:3:0/device/sas_address
-0x5001173d028543a2
-.EE
-.in
-.TP
-.IR /sys/class/scsi_disk/c : b : t : l/device/ssd_smart_path_enabled
-The
-.I ssd_smart_path_enabled
-attribute is read-only.
-This attribute is for ioaccel-enabled volumes.
-(Ioaccel is an alternative driver submission path that allows the
-driver to send I/O requests directly to backend SCSI devices,
-bypassing the controller firmware.
-This results in an increase in performance.
-This method is used for HBA disks and for logical volumes comprised of SSDs.)
-Contains 1 if ioaccel is enabled for the volume and 0 otherwise.
-.IP
-For example:
-.IP
-.in +4n
-.EX
-$ \c
-.B cat /sys/class/scsi_disk/1:0:3:0/device/ssd_smart_path_enabled
-0
-.EE
-.in
-.SH VERSIONS
-The
-.B smartpqi
-driver was added in Linux 4.9.
-.SH NOTES
-.SS Configuration
-To configure a Microsemi Smart Family controller,
-refer to the User Guide for the controller,
-which can be found by searching for the specific controller at
-.UR https://storage.microsemi.com/
-.UE .
-.SH SEE ALSO
-.BR cciss (4),
-.BR hpsa (4),
-.BR sd (4),
-.BR st (4)
-.PP
-.I Documentation/ABI/testing/sysfs\-bus\-pci\-devices\-cciss
-in the Linux kernel source tree.
diff --git a/man4/st.4 b/man4/st.4
deleted file mode 100644
index ebdbf0407..000000000
--- a/man4/st.4
+++ /dev/null
@@ -1,950 +0,0 @@
-.\" Copyright 1995 Robert K. Nichols (Robert.K.Nichols@att.com)
-.\" Copyright 1999-2005 Kai Mäkisara (Kai.Makisara@kolumbus.fi)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.TH st 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-st \- SCSI tape device
-.SH SYNOPSIS
-.nf
-.B #include <sys/mtio.h>
-.PP
-.BI "int ioctl(int " fd ", int " request " [, (void *)" arg3 "]);"
-.BI "int ioctl(int " fd ", MTIOCTOP, (struct mtop *)" mt_cmd );
-.BI "int ioctl(int " fd ", MTIOCGET, (struct mtget *)" mt_status );
-.BI "int ioctl(int " fd ", MTIOCPOS, (struct mtpos *)" mt_pos );
-.fi
-.SH DESCRIPTION
-The
-.B st
-driver provides the interface to a variety of SCSI tape devices.
-Currently, the driver takes control of all detected devices of type
-\[lq]sequential-access\[rq].
-The
-.B st
-driver uses major device number 9.
-.PP
-Each device uses eight minor device numbers.
-The lowermost five bits
-in the minor numbers are assigned sequentially in the order of
-detection.
-In the 2.6 kernel, the bits above the eight lowermost bits are
-concatenated to the five lowermost bits to form the tape number.
-The minor numbers can be grouped into
-two sets of four numbers: the principal (auto-rewind) minor device numbers,
-.IR n ,
-and the \[lq]no-rewind\[rq] device numbers,
-.RI ( n " + 128)."
-Devices opened using the principal device number will be sent a
-.B REWIND
-command when they are closed.
-Devices opened using the \[lq]no-rewind\[rq] device number will not.
-(Note that using an auto-rewind device for positioning the tape with,
-for instance, mt does not lead to the desired result: the tape is
-rewound after the mt command and the next command starts from the
-beginning of the tape).
-.PP
-Within each group, four minor numbers are available to define
-devices with different characteristics (block size, compression,
-density, etc.)
-When the system starts up, only the first device is available.
-The other three are activated when the default
-characteristics are defined (see below).
-(By changing compile-time
-constants, it is possible to change the balance between the maximum
-number of tape drives and the number of minor numbers for each
-drive.
-The default allocation allows control of 32 tape drives.
-For instance, it is possible to control up to 64 tape drives
-with two minor numbers for different options.)
-.PP
-Devices are typically created by:
-.PP
-.in +4n
-.EX
-mknod \-m 666 /dev/st0 c 9 0
-mknod \-m 666 /dev/st0l c 9 32
-mknod \-m 666 /dev/st0m c 9 64
-mknod \-m 666 /dev/st0a c 9 96
-mknod \-m 666 /dev/nst0 c 9 128
-mknod \-m 666 /dev/nst0l c 9 160
-mknod \-m 666 /dev/nst0m c 9 192
-mknod \-m 666 /dev/nst0a c 9 224
-.EE
-.in
-.PP
-There is no corresponding block device.
-.PP
-The driver uses an internal buffer that has to be large enough to hold
-at least one tape block.
-Before Linux 2.1.121, the buffer is
-allocated as one contiguous block.
-This limits the block size to the
-largest contiguous block of memory the kernel allocator can provide.
-The limit is currently 128\ kB for 32-bit architectures and
-256\ kB for 64-bit architectures.
-In newer kernels the driver
-allocates the buffer in several parts if necessary.
-By default, the
-maximum number of parts is 16.
-This means that the maximum block size
-is very large (2\ MB if allocation of 16 blocks of 128\ kB succeeds).
-.PP
-The driver's internal buffer size is determined by a compile-time
-constant which can be overridden with a kernel startup option.
-In addition to this, the driver tries to allocate a larger temporary
-buffer at run time if necessary.
-However, run-time allocation of large
-contiguous blocks of memory may fail and it is advisable not to rely
-too much on dynamic buffer allocation before Linux 2.1.121
-(this applies also to demand-loading the driver with kerneld or kmod).
-.PP
-The driver does not specifically support any tape drive brand or
-model.
-After system start-up the tape device options are defined by
-the drive firmware.
-For example, if the drive firmware selects fixed-block mode,
-the tape device uses fixed-block mode.
-The options can
-be changed with explicit
-.BR ioctl (2)
-calls and remain in effect when the device is closed and reopened.
-Setting the options affects both the auto-rewind and the nonrewind
-device.
-.PP
-Different options can be specified for the different devices within
-the subgroup of four.
-The options take effect when the device is
-opened.
-For example, the system administrator can define
-one device that writes in fixed-block mode with a certain block size,
-and one which writes in variable-block mode (if the drive supports
-both modes).
-.PP
-The driver supports
-.B tape partitions
-if they are supported by the drive.
-(Note that the tape partitions
-have nothing to do with disk partitions.
-A partitioned tape can be
-seen as several logical tapes within one medium.)
-Partition support has to be enabled with an
-.BR ioctl (2).
-The tape
-location is preserved within each partition across partition changes.
-The partition used for subsequent tape operations is
-selected with an
-.BR ioctl (2).
-The partition switch is executed together with
-the next tape operation in order to avoid unnecessary tape
-movement.
-The maximum number of partitions on a tape is defined by a
-compile-time constant (originally four).
-The driver contains an
-.BR ioctl (2)
-that can format a tape with either one or two partitions.
-.PP
-Device
-.I /dev/tape
-is usually created as a hard or soft link to the default tape device
-on the system.
-.PP
-Starting from Linux 2.6.2, the driver exports in the sysfs directory
-.I /sys/class/scsi_tape
-the attached devices and some parameters assigned to the devices.
-.SS Data transfer
-The driver supports operation in both fixed-block mode and
-variable-block mode (if supported by the drive).
-In fixed-block mode the drive
-writes blocks of the specified size and the block size is not
-dependent on the byte counts of the write system calls.
-In variable-block mode one tape block is written for each write call
-and the byte
-count determines the size of the corresponding tape block.
-Note that
-the blocks on the tape don't contain any information about the
-writing mode: when reading, the only important thing is to use
-commands that accept the block sizes on the tape.
-.PP
-In variable-block mode the read byte count does not have to match
-the tape block size exactly.
-If the byte count is larger than the
-next block on tape, the driver returns the data and the function
-returns the actual block size.
-If the block size is larger than the
-byte count, an error is returned.
-.PP
-In fixed-block mode the read byte counts can be arbitrary if
-buffering is enabled, or a multiple of the tape block size if
-buffering is disabled.
-Before Linux 2.1.121 allow writes with
-arbitrary byte count if buffering is enabled.
-In all other cases
-(before Linux 2.1.121 with buffering disabled or newer kernel) the
-write byte count must be a multiple of the tape block size.
-.PP
-In Linux 2.6, the driver tries to use direct transfers between the user
-buffer and the device.
-If this is not possible, the driver's internal buffer
-is used.
-The reasons for not using direct transfers include improper alignment
-of the user buffer (default is 512 bytes but this can be changed by the HBA
-driver), one or more pages of the user buffer not reachable by the
-SCSI adapter, and so on.
-.PP
-A filemark is automatically written to tape if the last tape operation
-before close was a write.
-.PP
-When a filemark is encountered while reading, the following
-happens.
-If there are data remaining in the buffer when the filemark
-is found, the buffered data is returned.
-The next read returns zero
-bytes.
-The following read returns data from the next file.
-The end of
-recorded data is signaled by returning zero bytes for two consecutive
-read calls.
-The third read returns an error.
-.SS Ioctls
-The driver supports three
-.BR ioctl (2)
-requests.
-Requests not recognized by the
-.B st
-driver are passed to the
-.B SCSI
-driver.
-The definitions below are from
-.IR /usr/include/linux/mtio.h :
-.SS MTIOCTOP \[em] perform a tape operation
-This request takes an argument of type
-.IR "(struct mtop\ *)" .
-Not all drives support all operations.
-The driver returns an
-.B EIO
-error if the drive rejects an operation.
-.PP
-.in +4n
-.EX
-/* Structure for MTIOCTOP \- mag tape op command: */
-struct mtop {
- short mt_op; /* operations defined below */
- int mt_count; /* how many of them */
-};
-.EE
-.in
-.PP
-Magnetic tape operations for normal tape use:
-.TP
-.B MTBSF
-Backward space over
-.I mt_count
-filemarks.
-.TP
-.B MTBSFM
-Backward space over
-.I mt_count
-filemarks.
-Reposition the tape to the EOT side of the last filemark.
-.TP
-.B MTBSR
-Backward space over
-.I mt_count
-records (tape blocks).
-.TP
-.B MTBSS
-Backward space over
-.I mt_count
-setmarks.
-.TP
-.B MTCOMPRESSION
-Enable compression of tape data within the drive if
-.I mt_count
-is nonzero and disable compression if
-.I mt_count
-is zero.
-This command uses the MODE page 15 supported by most DATs.
-.TP
-.B MTEOM
-Go to the end of the recorded media (for appending files).
-.TP
-.B MTERASE
-Erase tape.
-With Linux 2.6, short erase (mark tape empty) is performed if the
-argument is zero.
-Otherwise, long erase (erase all) is done.
-.TP
-.B MTFSF
-Forward space over
-.I mt_count
-filemarks.
-.TP
-.B MTFSFM
-Forward space over
-.I mt_count
-filemarks.
-Reposition the tape to the BOT side of the last filemark.
-.TP
-.B MTFSR
-Forward space over
-.I mt_count
-records (tape blocks).
-.TP
-.B MTFSS
-Forward space over
-.I mt_count
-setmarks.
-.TP
-.B MTLOAD
-Execute the SCSI load command.
-A special case is available for some HP
-autoloaders.
-If
-.I mt_count
-is the constant
-.B MT_ST_HPLOADER_OFFSET
-plus a number, the number is
-sent to the drive to control the autoloader.
-.TP
-.B MTLOCK
-Lock the tape drive door.
-.TP
-.B MTMKPART
-Format the tape into one or two partitions.
-If
-.I mt_count
-is positive, it gives the size of partition 1 and partition
-0 contains the rest of the tape.
-If
-.I mt_count
-is zero, the tape is formatted into one partition.
-From Linux 4.6,
-.\" commit 8038e6456a3e6f5c4759e0d73c4f9165b90c93e7
-a negative
-.I mt_count
-specifies the size of partition 0 and
-the rest of the tape contains partition 1.
-The physical ordering of partitions depends on the drive.
-This command is not allowed for a drive unless the partition support
-is enabled for the drive (see
-.B MT_ST_CAN_PARTITIONS
-below).
-.TP
-.B MTNOP
-No op\[em]flushes the driver's buffer as a side effect.
-Should be used before reading status with
-.BR MTIOCGET .
-.TP
-.B MTOFFL
-Rewind and put the drive off line.
-.TP
-.B MTRESET
-Reset drive.
-.TP
-.B MTRETEN
-Re-tension tape.
-.TP
-.B MTREW
-Rewind.
-.TP
-.B MTSEEK
-Seek to the tape block number specified in
-.IR mt_count .
-This operation requires either a SCSI-2 drive that supports the
-.B LOCATE
-command (device-specific address)
-or a Tandberg-compatible SCSI-1 drive (Tandberg, Archive
-Viper, Wangtek, ...).
-The block number should be one that was previously returned by
-.B MTIOCPOS
-if device-specific addresses are used.
-.TP
-.B MTSETBLK
-Set the drive's block length to the value specified in
-.IR mt_count .
-A block length of zero sets the drive to variable block size mode.
-.TP
-.B MTSETDENSITY
-Set the tape density to the code in
-.IR mt_count .
-The density codes supported by a drive can be found from the drive
-documentation.
-.TP
-.B MTSETPART
-The active partition is switched to
-.IR mt_count .
-The partitions are numbered from zero.
-This command is not allowed for
-a drive unless the partition support is enabled for the drive (see
-.B MT_ST_CAN_PARTITIONS
-below).
-.TP
-.B MTUNLOAD
-Execute the SCSI unload command (does not eject the tape).
-.TP
-.B MTUNLOCK
-Unlock the tape drive door.
-.TP
-.B MTWEOF
-Write
-.I mt_count
-filemarks.
-.TP
-.B MTWSM
-Write
-.I mt_count
-setmarks.
-.PP
-Magnetic tape operations for setting of device options (by the superuser):
-.TP
-.B MTSETDRVBUFFER
-Set various drive and driver options according to bits encoded in
-.IR mt_count .
-These consist of the drive's buffering mode, a set of Boolean driver
-options, the buffer write threshold, defaults for the block size and
-density, and timeouts (only since Linux 2.1).
-A single operation can affect only one item in the list below (the
-Booleans counted as one item.)
-.IP
-A value having zeros in the high-order 4 bits will be used to set the
-drive's buffering mode.
-The buffering modes are:
-.RS
-.TP
-.B 0
-The drive will not report
-.B GOOD
-status on write commands until the data
-blocks are actually written to the medium.
-.TP
-.B 1
-The drive may report
-.B GOOD
-status on write commands as soon as all the
-data has been transferred to the drive's internal buffer.
-.TP
-.B 2
-The drive may report
-.B GOOD
-status on write commands as soon as (a) all
-the data has been transferred to the drive's internal buffer, and
-(b) all buffered data from different initiators has been successfully
-written to the medium.
-.RE
-.IP
-To control the write threshold the value in
-.I mt_count
-must include the constant
-.B MT_ST_WRITE_THRESHOLD
-bitwise ORed with a block count in the low 28 bits.
-The block count refers to 1024-byte blocks, not the physical block
-size on the tape.
-The threshold cannot exceed the driver's internal buffer size (see
-DESCRIPTION, above).
-.IP
-To set and clear the Boolean options
-the value in
-.I mt_count
-must include one of the constants
-.BR MT_ST_BOOLEANS ,
-.BR MT_ST_SETBOOLEANS ,
-.BR MT_ST_CLEARBOOLEANS ,
-or
-.B MT_ST_DEFBOOLEANS
-bitwise ORed with
-whatever combination of the following options is desired.
-Using
-.B MT_ST_BOOLEANS
-the options can be set to the values
-defined in the corresponding bits.
-With
-.B MT_ST_SETBOOLEANS
-the options can be selectively set and with
-.B MT_ST_DEFBOOLEANS
-selectively cleared.
-.IP
-The default options for a tape device are set with
-.BR MT_ST_DEFBOOLEANS .
-A nonactive tape device (e.g., device with
-minor 32 or 160) is activated when the default options for it are
-defined the first time.
-An activated device inherits from the device
-activated at start-up the options not set explicitly.
-.IP
-The Boolean options are:
-.RS
-.TP
-.BR MT_ST_BUFFER_WRITES " (Default: true)"
-Buffer all write operations in fixed-block mode.
-If this option is false and the drive uses a fixed block size, then
-all write operations must be for a multiple of the block size.
-This option must be set false to write reliable multivolume archives.
-.TP
-.BR MT_ST_ASYNC_WRITES " (Default: true)"
-When this option is true, write operations return immediately without
-waiting for the data to be transferred to the drive if the data fits
-into the driver's buffer.
-The write threshold determines how full the buffer must be before a
-new SCSI write command is issued.
-Any errors reported by the drive will be held until the next
-operation.
-This option must be set false to write reliable multivolume archives.
-.TP
-.BR MT_ST_READ_AHEAD " (Default: true)"
-This option causes the driver to provide read buffering and
-read-ahead in fixed-block mode.
-If this option is false and the drive uses a fixed block size, then
-all read operations must be for a multiple of the block size.
-.TP
-.BR MT_ST_TWO_FM " (Default: false)"
-This option modifies the driver behavior when a file is closed.
-The normal action is to write a single filemark.
-If the option is true, the driver will write two filemarks and
-backspace over the second one.
-.IP
-Note:
-This option should not be set true for QIC tape drives since they are
-unable to overwrite a filemark.
-These drives detect the end of recorded data by testing for blank tape
-rather than two consecutive filemarks.
-Most other current drives also
-detect the end of recorded data and using two filemarks is usually
-necessary only when interchanging tapes with some other systems.
-.TP
-.BR MT_ST_DEBUGGING " (Default: false)"
-This option turns on various debugging messages from the driver
-(effective only if the driver was compiled with
-.B DEBUG
-defined nonzero).
-.TP
-.BR MT_ST_FAST_EOM " (Default: false)"
-This option causes the
-.B MTEOM
-operation to be sent directly to the
-drive, potentially speeding up the operation but causing the driver to
-lose track of the current file number normally returned by the
-.B MTIOCGET
-request.
-If
-.B MT_ST_FAST_EOM
-is false, the driver will respond to an
-.B MTEOM
-request by forward spacing over files.
-.TP
-.BR MT_ST_AUTO_LOCK " (Default: false)"
-When this option is true, the drive door is locked when the device file is
-opened and unlocked when it is closed.
-.TP
-.BR MT_ST_DEF_WRITES " (Default: false)"
-The tape options (block size, mode, compression, etc.) may change
-when changing from one device linked to a drive to another device
-linked to the same drive depending on how the devices are
-defined.
-This option defines when the changes are enforced by the
-driver using SCSI-commands and when the drives auto-detection
-capabilities are relied upon.
-If this option is false, the driver
-sends the SCSI-commands immediately when the device is changed.
-If the
-option is true, the SCSI-commands are not sent until a write is
-requested.
-In this case, the drive firmware is allowed to detect the
-tape structure when reading and the SCSI-commands are used only to
-make sure that a tape is written according to the correct specification.
-.TP
-.BR MT_ST_CAN_BSR " (Default: false)"
-When read-ahead is used, the tape must sometimes be spaced backward to the
-correct position when the device is closed and the SCSI command to
-space backward over records is used for this purpose.
-Some older
-drives can't process this command reliably and this option can be used
-to instruct the driver not to use the command.
-The end result is that,
-with read-ahead and fixed-block mode, the tape may not be correctly
-positioned within a file when the device is closed.
-With Linux 2.6, the
-default is true for drives supporting SCSI-3.
-.TP
-.BR MT_ST_NO_BLKLIMS " (Default: false)"
-Some drives don't accept the
-.B "READ BLOCK LIMITS"
-SCSI command.
-If this is used, the driver does not use the command.
-The drawback is
-that the driver can't check before sending commands if the selected
-block size is acceptable to the drive.
-.TP
-.BR MT_ST_CAN_PARTITIONS " (Default: false)"
-This option enables support for several partitions within a
-tape.
-The option applies to all devices linked to a drive.
-.TP
-.BR MT_ST_SCSI2LOGICAL " (Default: false)"
-This option instructs the driver to use the logical block addresses
-defined in the SCSI-2 standard when performing the seek and tell
-operations (both with
-.B MTSEEK
-and
-.B MTIOCPOS
-commands and when changing tape
-partition).
-Otherwise, the device-specific addresses are used.
-It is highly advisable to set this option if the drive supports the
-logical addresses because they count also filemarks.
-There are some
-drives that support only the logical block addresses.
-.TP
-.BR MT_ST_SYSV " (Default: false)"
-When this option is enabled, the tape devices use the System V
-semantics.
-Otherwise, the BSD semantics are used.
-The most important
-difference between the semantics is what happens when a device used
-for reading is closed: in System V semantics the tape is spaced forward
-past the next filemark if this has not happened while using the
-device.
-In BSD semantics the tape position is not changed.
-.TP
-.BR MT_NO_WAIT " (Default: false)"
-Enables immediate mode (i.e., don't wait for the command to finish) for some
-commands (e.g., rewind).
-.PP
-An example:
-.PP
-.in +4n
-.EX
-struct mtop mt_cmd;
-mt_cmd.mt_op = MTSETDRVBUFFER;
-mt_cmd.mt_count = MT_ST_BOOLEANS |
- MT_ST_BUFFER_WRITES | MT_ST_ASYNC_WRITES;
-ioctl(fd, MTIOCTOP, mt_cmd);
-.EE
-.in
-.PP
-The default block size for a device can be set with
-.B MT_ST_DEF_BLKSIZE
-and the default density code can be set with
-.BR MT_ST_DEFDENSITY .
-The values for the parameters are or'ed
-with the operation code.
-.PP
-With Linux 2.1.x and later, the timeout values can be set with the
-subcommand
-.B MT_ST_SET_TIMEOUT
-ORed with the timeout in seconds.
-The long timeout (used for rewinds and other commands
-that may take a long time) can be set with
-.BR MT_ST_SET_LONG_TIMEOUT .
-The kernel defaults are very long to
-make sure that a successful command is not timed out with any
-drive.
-Because of this, the driver may seem stuck even if it is only
-waiting for the timeout.
-These commands can be used to set more
-practical values for a specific drive.
-The timeouts set for one device
-apply for all devices linked to the same drive.
-.PP
-Starting from Linux 2.4.19 and Linux 2.5.43, the driver supports a status
-bit which indicates whether the drive requests cleaning.
-The method used by the
-drive to return cleaning information is set using the
-.B MT_ST_SEL_CLN
-subcommand.
-If the value is zero, the cleaning
-bit is always zero.
-If the value is one, the TapeAlert data defined
-in the SCSI-3 standard is used (not yet implemented).
-Values 2\[en]17 are
-reserved.
-If the lowest eight bits are >= 18, bits from the extended
-sense data are used.
-The bits 9\[en]16 specify a mask to select the bits
-to look at and the bits 17\[en]23 specify the bit pattern to look for.
-If the bit pattern is zero, one or more bits under the mask indicate
-the cleaning request.
-If the pattern is nonzero, the pattern must match
-the masked sense data byte.
-.RE
-.SS MTIOCGET \[em] get status
-This request takes an argument of type
-.IR "(struct mtget\ *)" .
-.PP
-.in +4n
-.EX
-/* structure for MTIOCGET \- mag tape get status command */
-struct mtget {
- long mt_type;
- long mt_resid;
- /* the following registers are device dependent */
- long mt_dsreg;
- long mt_gstat;
- long mt_erreg;
- /* The next two fields are not always used */
- daddr_t mt_fileno;
- daddr_t mt_blkno;
-};
-.EE
-.in
-.TP
-\fImt_type\fP
-The header file defines many values for
-.IR mt_type ,
-but the current driver reports only the generic types
-.B MT_ISSCSI1
-(Generic SCSI-1 tape)
-and
-.B MT_ISSCSI2
-(Generic SCSI-2 tape).
-.TP
-\fImt_resid\fP
-contains the current tape partition number.
-.TP
-\fImt_dsreg\fP
-reports the drive's current settings for block size (in the low 24
-bits) and density (in the high 8 bits).
-These fields are defined by
-.BR MT_ST_BLKSIZE_SHIFT ,
-.BR MT_ST_BLKSIZE_MASK ,
-.BR MT_ST_DENSITY_SHIFT ,
-and
-.BR MT_ST_DENSITY_MASK .
-.TP
-\fImt_gstat\fP
-reports generic (device independent) status information.
-The header file defines macros for testing these status bits:
-.RS
-.TP
-\fBGMT_EOF\fP(\fIx\fP)
-The tape is positioned just after a filemark
-(always false after an
-.B MTSEEK
-operation).
-.TP
-\fBGMT_BOT\fP(\fIx\fP)
-The tape is positioned at the beginning of the first file (always false
-after an
-.B MTSEEK
-operation).
-.TP
-\fBGMT_EOT\fP(\fIx\fP)
-A tape operation has reached the physical End Of Tape.
-.TP
-\fBGMT_SM\fP(\fIx\fP)
-The tape is currently positioned at a setmark
-(always false after an
-.B MTSEEK
-operation).
-.TP
-\fBGMT_EOD\fP(\fIx\fP)
-The tape is positioned at the end of recorded data.
-.TP
-\fBGMT_WR_PROT\fP(\fIx\fP)
-The drive is write-protected.
-For some drives this can also mean that the drive does not support
-writing on the current medium type.
-.TP
-\fBGMT_ONLINE\fP(\fIx\fP)
-The last
-.BR open (2)
-found the drive with a tape in place and ready for operation.
-.TP
-\fBGMT_D_6250\fP(\fIx\fP)
-.TQ
-\fBGMT_D_1600\fP(\fIx\fP)
-.TQ
-\fBGMT_D_800\fP(\fIx\fP)
-This \[lq]generic\[rq] status information reports the current
-density setting for 9-track \(12" tape drives only.
-.TP
-\fBGMT_DR_OPEN\fP(\fIx\fP)
-The drive does not have a tape in place.
-.TP
-\fBGMT_IM_REP_EN\fP(\fIx\fP)
-Immediate report mode.
-This bit is set if there are no guarantees that
-the data has been physically written to the tape when the write call
-returns.
-It is set zero only when the driver does not buffer data and
-the drive is set not to buffer data.
-.TP
-\fBGMT_CLN\fP(\fIx\fP)
-The drive has requested cleaning.
-Implemented since Linux 2.4.19 and Linux 2.5.43.
-.RE
-.TP
-\fImt_erreg\fP
-The only field defined in
-.I mt_erreg
-is the recovered error count in the low 16 bits (as defined by
-.B MT_ST_SOFTERR_SHIFT
-and
-.BR MT_ST_SOFTERR_MASK ).
-Due to inconsistencies in the way drives report recovered errors, this
-count is often not maintained (most drives do not by default report
-soft errors but this can be changed with a SCSI MODE SELECT command).
-.TP
-\fImt_fileno\fP
-reports the current file number (zero-based).
-This value is set to \-1 when the file number is unknown (e.g., after
-.B MTBSS
-or
-.BR MTSEEK ).
-.TP
-\fImt_blkno\fP
-reports the block number (zero-based) within the current file.
-This value is set to \-1 when the block number is unknown (e.g., after
-.BR MTBSF ,
-.BR MTBSS ,
-or
-.BR MTSEEK ).
-.SS MTIOCPOS \[em] get tape position
-This request takes an argument of type
-.I "(struct mtpos\ *)"
-and reports the drive's notion of the current tape block number,
-which is not the same as
-.I mt_blkno
-returned by
-.BR MTIOCGET .
-This drive must be a SCSI-2 drive that supports the
-.B "READ POSITION"
-command (device-specific address)
-or a Tandberg-compatible SCSI-1 drive (Tandberg, Archive
-Viper, Wangtek, ... ).
-.PP
-.in +4n
-.EX
-/* structure for MTIOCPOS \- mag tape get position command */
-struct mtpos {
- long mt_blkno; /* current block number */
-};
-.EE
-.in
-.SH RETURN VALUE
-.TP
-.B EACCES
-An attempt was made to write or erase a write-protected tape.
-(This error is not detected during
-.BR open (2).)
-.TP
-.B EBUSY
-The device is already in use or the driver was unable to allocate a
-buffer.
-.TP
-.B EFAULT
-The command parameters point to memory not belonging to the calling
-process.
-.TP
-.B EINVAL
-An
-.BR ioctl (2)
-had an invalid argument, or a requested block size was invalid.
-.TP
-.B EIO
-The requested operation could not be completed.
-.TP
-.B ENOMEM
-The byte count in
-.BR read (2)
-is smaller than the next physical block on the tape.
-(Before Linux 2.2.18 and Linux 2.4.0 the extra bytes have been
-.\" Precisely: Linux 2.6.0-test6
-silently ignored.)
-.TP
-.B ENOSPC
-A write operation could not be completed because the tape reached
-end-of-medium.
-.TP
-.B ENOSYS
-Unknown
-.BR ioctl (2).
-.TP
-.B ENXIO
-During opening, the tape device does not exist.
-.TP
-.B EOVERFLOW
-An attempt was made to read or write a variable-length block that is
-larger than the driver's internal buffer.
-.TP
-.B EROFS
-Open is attempted with
-.B O_WRONLY
-or
-.B O_RDWR
-when the tape in the drive is write-protected.
-.SH FILES
-.TP
-.I /dev/st*
-the auto-rewind SCSI tape devices
-.TP
-.I /dev/nst*
-the nonrewind SCSI tape devices
-.\" .SH AUTHOR
-.\" The driver has been written by Kai M\(:akisara (Kai.Makisara@metla.fi)
-.\" starting from a driver written by Dwayne Forsyth.
-.\" Several other
-.\" people have also contributed to the driver.
-.SH NOTES
-.IP \[bu] 3
-When exchanging data between systems, both systems have to agree on
-the physical tape block size.
-The parameters of a drive after startup
-are often not the ones most operating systems use with these
-devices.
-Most systems use drives in variable-block mode if the drive
-supports that mode.
-This applies to most modern drives, including
-DATs, 8mm helical scan drives, DLTs, etc.
-It may be advisable to use
-these drives in variable-block mode also in Linux (i.e., use
-.B MTSETBLK
-or
-.B MTSETDEFBLK
-at system startup to set the mode), at least when
-exchanging data with a foreign system.
-The drawback of
-this is that a fairly large tape block size has to be used to get
-acceptable data transfer rates on the SCSI bus.
-.IP \[bu]
-Many programs (e.g.,
-.BR tar (1))
-allow the user to specify the blocking
-factor on the command line.
-Note that this determines the physical block
-size on tape only in variable-block mode.
-.IP \[bu]
-In order to use SCSI tape drives, the basic SCSI driver,
-a SCSI-adapter driver and the SCSI tape driver must be either
-configured into the kernel or loaded as modules.
-If the SCSI-tape
-driver is not present, the drive is recognized but the tape support
-described in this page is not available.
-.IP \[bu]
-The driver writes error messages to the console/log.
-The SENSE
-codes written into some messages are automatically translated to text
-if verbose SCSI messages are enabled in kernel configuration.
-.IP \[bu]
-The driver's internal buffering allows good throughput in fixed-block
-mode also with small
-.BR read (2)
-and
-.BR write (2)
-byte counts.
-With direct transfers
-this is not possible and may cause a surprise when moving to the 2.6
-kernel.
-The solution is to tell the software to use larger transfers (often
-telling it to use larger blocks).
-If this is not possible, direct transfers can be disabled.
-.SH SEE ALSO
-.BR mt (1)
-.PP
-The file
-.I drivers/scsi/README.st
-or
-.I Documentation/scsi/st.txt
-(kernel >= 2.6) in the Linux kernel source tree contains
-the most recent information about the driver and its configuration
-possibilities
diff --git a/man4/tty.4 b/man4/tty.4
deleted file mode 100644
index 139886844..000000000
--- a/man4/tty.4
+++ /dev/null
@@ -1,67 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 2003-04-07 by Michael Kerrisk
-.\"
-.TH tty 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-tty \- controlling terminal
-.SH DESCRIPTION
-The file
-.I /dev/tty
-is a character file with major number 5 and
-minor number 0, usually with mode 0666 and ownership root:tty.
-It is a synonym for the controlling terminal of a process, if any.
-.PP
-In addition to the
-.BR ioctl (2)
-requests supported by the device that
-.B tty
-refers to, the
-.BR ioctl (2)
-request
-.B TIOCNOTTY
-is supported.
-.SS TIOCNOTTY
-Detach the calling process from its controlling terminal.
-.PP
-If the process is the session leader,
-then
-.B SIGHUP
-and
-.B SIGCONT
-signals are sent to the foreground process group
-and all processes in the current session lose their controlling tty.
-.PP
-This
-.BR ioctl (2)
-call works only on file descriptors connected
-to
-.IR /dev/tty .
-It is used by daemon processes when they are invoked
-by a user at a terminal.
-The process attempts to open
-.IR /dev/tty .
-If the open succeeds, it
-detaches itself from the terminal by using
-.BR TIOCNOTTY ,
-while if the
-open fails, it is obviously not attached to a terminal and does not need
-to detach itself.
-.SH FILES
-.I /dev/tty
-.SH SEE ALSO
-.BR chown (1),
-.BR mknod (1),
-.BR ioctl (2),
-.BR ioctl_console (2),
-.BR ioctl_tty (2),
-.BR termios (3),
-.BR ttyS (4),
-.BR vcs (4),
-.BR pty (7),
-.BR agetty (8),
-.BR mingetty (8)
diff --git a/man4/ttyS.4 b/man4/ttyS.4
deleted file mode 100644
index e5e47a66b..000000000
--- a/man4/ttyS.4
+++ /dev/null
@@ -1,33 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sat Jul 24 17:03:24 1993 by Rik Faith (faith@cs.unc.edu)
-.TH ttyS 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ttyS \- serial terminal lines
-.SH DESCRIPTION
-.B ttyS[0\-3]
-are character devices for the serial terminal lines.
-.PP
-They are typically created by:
-.PP
-.in +4n
-.EX
-mknod \-m 660 /dev/ttyS0 c 4 64 # base address 0x3f8
-mknod \-m 660 /dev/ttyS1 c 4 65 # base address 0x2f8
-mknod \-m 660 /dev/ttyS2 c 4 66 # base address 0x3e8
-mknod \-m 660 /dev/ttyS3 c 4 67 # base address 0x2e8
-chown root:tty /dev/ttyS[0\-3]
-.EE
-.in
-.SH FILES
-.I /dev/ttyS[0\-3]
-.SH SEE ALSO
-.BR chown (1),
-.BR mknod (1),
-.BR tty (4),
-.BR agetty (8),
-.BR mingetty (8),
-.BR setserial (8)
diff --git a/man4/tty_ioctl.4 b/man4/tty_ioctl.4
deleted file mode 100644
index fc4736ed0..000000000
--- a/man4/tty_ioctl.4
+++ /dev/null
@@ -1,2 +0,0 @@
-.so man2/ioctl_tty.2
-.\" Link for old name of this page
diff --git a/man4/urandom.4 b/man4/urandom.4
deleted file mode 100644
index b95979fa8..000000000
--- a/man4/urandom.4
+++ /dev/null
@@ -1 +0,0 @@
-.so man4/random.4
diff --git a/man4/vcs.4 b/man4/vcs.4
deleted file mode 100644
index 66f06ab11..000000000
--- a/man4/vcs.4
+++ /dev/null
@@ -1,172 +0,0 @@
-.\" Copyright (c) 1995 James R. Van Zandt <jrv@vanzandt.mv.com>
-.\" Sat Feb 18 09:11:07 EST 1995
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified, Sun Feb 26 15:08:05 1995, faith@cs.unc.edu
-.\" 2007-12-17, Samuel Thibault <samuel.thibault@ens-lyon.org>:
-.\" document the VT_GETHIFONTMASK ioctl
-.\" "
-.TH vcs 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-vcs, vcsa \- virtual console memory
-.SH DESCRIPTION
-.I /dev/vcs0
-is a character device with major number 7 and minor number
-0, usually with mode 0644 and ownership root:tty.
-It refers to the memory of the currently
-displayed virtual console terminal.
-.PP
-.I /dev/vcs[1\-63]
-are character devices for virtual console
-terminals, they have major number 7 and minor number 1 to 63, usually
-mode 0644 and ownership root:tty.
-.I /dev/vcsa[0\-63]
-are the same, but
-using
-.IR "unsigned short" s
-(in host byte order) that include attributes,
-and prefixed with four bytes giving the screen
-dimensions and cursor position:
-.IR lines ,
-.IR columns ,
-.IR x ,
-.IR y .
-.RI ( x
-=
-.I y
-= 0 at the top left corner of the screen.)
-.PP
-When a 512-character font is loaded,
-the 9th bit position can be fetched by applying the
-.BR ioctl (2)
-.B VT_GETHIFONTMASK
-operation
-(available since Linux 2.6.18)
-on
-.IR /dev/tty[1\-63] ;
-the value is returned in the
-.I "unsigned short"
-pointed to by the third
-.BR ioctl (2)
-argument.
-.PP
-These devices replace the screendump
-.BR ioctl (2)
-operations of
-.BR ioctl_console (2),
-so the system
-administrator can control access using filesystem permissions.
-.PP
-The devices for the first eight virtual consoles may be created by:
-.PP
-.in +4n
-.EX
-for x in 0 1 2 3 4 5 6 7 8; do
- mknod \-m 644 /dev/vcs$x c 7 $x;
- mknod \-m 644 /dev/vcsa$x c 7 $[$x+128];
-done
-chown root:tty /dev/vcs*
-.EE
-.in
-.PP
-No
-.BR ioctl (2)
-requests are supported.
-.SH FILES
-.I /dev/vcs[0\-63]
-.br
-.I /dev/vcsa[0\-63]
-.\" .SH AUTHOR
-.\" Andries Brouwer <aeb@cwi.nl>
-.SH VERSIONS
-Introduced with Linux 1.1.92.
-.SH EXAMPLES
-You may do a screendump on vt3 by switching to vt1 and typing
-.PP
-.in +4n
-.EX
-cat /dev/vcs3 >foo
-.EE
-.in
-.PP
-Note that the output does not contain
-newline characters, so some processing may be required, like
-in
-.PP
-.in +4n
-.EX
-fold \-w 81 /dev/vcs3 | lpr
-.EE
-.in
-.PP
-or (horrors)
-.PP
-.in +4n
-.EX
-setterm \-dump 3 \-file /proc/self/fd/1
-.EE
-.in
-.PP
-The
-.I /dev/vcsa0
-device is used for Braille support.
-.PP
-This program displays the character and screen attributes under the
-cursor of the second virtual console, then changes the background color
-there:
-.PP
-.EX
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <linux/vt.h>
-\&
-int
-main(void)
-{
- int fd;
- char *device = "/dev/vcsa2";
- char *console = "/dev/tty2";
- struct {unsigned char lines, cols, x, y;} scrn;
- unsigned short s;
- unsigned short mask;
- unsigned char attrib;
- int ch;
-\&
- fd = open(console, O_RDWR);
- if (fd < 0) {
- perror(console);
- exit(EXIT_FAILURE);
- }
- if (ioctl(fd, VT_GETHIFONTMASK, &mask) < 0) {
- perror("VT_GETHIFONTMASK");
- exit(EXIT_FAILURE);
- }
- (void) close(fd);
- fd = open(device, O_RDWR);
- if (fd < 0) {
- perror(device);
- exit(EXIT_FAILURE);
- }
- (void) read(fd, &scrn, 4);
- (void) lseek(fd, 4 + 2*(scrn.y*scrn.cols + scrn.x), SEEK_SET);
- (void) read(fd, &s, 2);
- ch = s & 0xff;
- if (s & mask)
- ch |= 0x100;
- attrib = ((s & \[ti]mask) >> 8);
- printf("ch=%#03x attrib=%#02x\en", ch, attrib);
- s \[ha]= 0x1000;
- (void) lseek(fd, \-2, SEEK_CUR);
- (void) write(fd, &s, 2);
- exit(EXIT_SUCCESS);
-}
-.EE
-.SH SEE ALSO
-.BR ioctl_console (2),
-.BR tty (4),
-.BR ttyS (4),
-.BR gpm (8)
diff --git a/man4/vcsa.4 b/man4/vcsa.4
deleted file mode 100644
index ffe8d9be5..000000000
--- a/man4/vcsa.4
+++ /dev/null
@@ -1 +0,0 @@
-.so man4/vcs.4
diff --git a/man4/veth.4 b/man4/veth.4
deleted file mode 100644
index 1d1c355a5..000000000
--- a/man4/veth.4
+++ /dev/null
@@ -1,86 +0,0 @@
-.\" Copyright (c) 2012 Tomáš Pospíšek (tpo_deb@sourcepole.ch),
-.\" Fri, 03 Nov 2012 22:35:33 +0100
-.\" and Copyright (c) 2012 Eric W. Biederman <ebiederm@xmission.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\"
-.TH veth 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-veth \- Virtual Ethernet Device
-.SH DESCRIPTION
-The
-.B veth
-devices are virtual Ethernet devices.
-They can act as tunnels between network namespaces to create
-a bridge to a physical network device in another namespace,
-but can also be used as standalone network devices.
-.PP
-.B veth
-devices are always created in interconnected pairs.
-A pair can be created using the command:
-.PP
-.in +4n
-.EX
-# ip link add <p1-name> type veth peer name <p2-name>
-.EE
-.in
-.PP
-In the above,
-.I p1-name
-and
-.I p2-name
-are the names assigned to the two connected end points.
-.PP
-Packets transmitted on one device in the pair are immediately received on
-the other device.
-When either device is down, the link state of the pair is down.
-.PP
-.B veth
-device pairs are useful for combining the network
-facilities of the kernel together in interesting ways.
-A particularly interesting use case is to place one end of a
-.B veth
-pair in one network namespace and the other end in another network namespace,
-thus allowing communication between network namespaces.
-To do this, one can provide the
-.B netns
-parameter when creating the interfaces:
-.PP
-.in +4n
-.EX
-# ip link add <p1\-name> netns <p1\-ns> type veth peer <p2\-name> netns <p2\-ns>
-.EE
-.in
-.PP
-or, for an existing
-.B veth
-pair, move one side to the other namespace:
-.PP
-.in +4n
-.EX
-# ip link set <p2\-name> netns <p2\-ns>
-.EE
-.in
-.PP
-.BR ethtool (8)
-can be used to find the peer of a
-.B veth
-network interface, using commands something like:
-.PP
-.in +4n
-.EX
-# \fBip link add ve_A type veth peer name ve_B\fP # Create veth pair
-# \fBethtool \-S ve_A\fP # Discover interface index of peer
-NIC statistics:
- peer_ifindex: 16
-# \fBip link | grep \[aq]\[ha]16:\[aq]\fP # Look up interface
-16: ve_B@ve_A: <BROADCAST,MULTICAST,M\-DOWN> mtu 1500 qdisc ...
-.EE
-.in
-.SH "SEE ALSO"
-.BR clone (2),
-.BR network_namespaces (7),
-.BR ip (8),
-.BR ip\-link (8),
-.BR ip\-netns (8)
diff --git a/man4/wavelan.4 b/man4/wavelan.4
deleted file mode 100644
index a54144034..000000000
--- a/man4/wavelan.4
+++ /dev/null
@@ -1,142 +0,0 @@
-.\" From jt@hplb.hpl.hp.com Thu Dec 19 18:31:49 1996
-.\" From: Jean Tourrilhes <jt@hplb.hpl.hp.com>
-.\" Address: HP Labs, Filton Road, Stoke Gifford, Bristol BS12 6QZ, U.K.
-.\" Jean II - HPLB - '96
-.\" wavelan.c.4
-.\"
-.\" Provenance of this page is unclear.
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH wavelan 4 (date) "Linux man-pages (unreleased)"
-.SH NAME
-wavelan \- AT&T GIS WaveLAN ISA device driver
-.SH SYNOPSIS
-.nf
-.BI "insmod wavelan_cs.o [io=" B,B.. "] [ irq=" I,I.. "] [name=" N,N.. ]
-.fi
-.SH DESCRIPTION
-.I This driver is obsolete:
-it was removed in Linux 2.6.35.
-.PP
-.B wavelan
-is the low-level device driver for the NCR / AT&T / Lucent
-.B WaveLAN ISA
-and Digital (DEC)
-.B RoamAbout DS
-wireless ethernet adapter.
-This driver is available as a module or
-might be compiled in the kernel.
-This driver supports multiple cards
-in both forms (up to 4) and allocates the next available ethernet
-device (eth0..eth#) for each card found, unless a device name is
-explicitly specified (see below).
-This device name will be reported
-in the kernel log file with the MAC address, NWID, and frequency used
-by the card.
-.SS Parameters
-This section applies to the module form (parameters passed on the
-.BR insmod (8)
-command line).
-If the driver is included in the kernel, use the
-.I ether=IRQ,IO,NAME
-syntax on the kernel command line.
-.TP
-.B io
-Specify the list of base addresses where to search for wavelan cards
-(setting by dip switch on the card).
-If you don't specify any io
-address, the driver will scan 0x390 and 0x3E0 addresses, which might
-conflict with other hardware...
-.TP
-.B irq
-Set the list of IRQs that each wavelan card should use (the value is
-saved in permanent storage for future use).
-.TP
-.B name
-Set the list of names to be used for each wavelan card device (name
-used by
-.BR ifconfig (8)).
-.SS Wireless extensions
-Use
-.BR iwconfig (8)
-to manipulate wireless extensions.
-.SS NWID (or domain)
-Set the network ID
-.RI [ 0
-to
-.IR FFFF ]
-or disable it
-.RI [ off ].
-As the NWID is stored in the card Permanent Storage Area, it will be
-reused at any further invocation of the driver.
-.SS Frequency & channels
-For the 2.4\ GHz 2.00 Hardware, you are able to set the frequency by
-specifying one of the 10 defined channels
-.RI ( 2.412,
-.I 2.422, 2.425, 2.4305, 2.432, 2.442, 2.452, 2.460, 2.462
-or
-.IR 2.484 )
-or directly as a numeric value.
-The frequency is changed immediately and
-permanently.
-Frequency availability depends on the regulations...
-.SS Statistics spy
-Set a list of MAC addresses in the driver (up to 8) and get the last
-quality of link for each of those (see
-.BR iwspy (8)).
-.SS /proc/net/wireless
-.I status
-is the status reported by the modem.
-.I Link quality
-reports the quality of the modulation on the air (direct sequence
-spread spectrum) [max = 16].
-.I Level
-and
-.I Noise
-refer to the signal level and noise level [max = 64].
-The
-.I crypt discarded packet
-and
-.I misc discarded packet
-counters are not implemented.
-.SS Private ioctl
-You may use
-.BR iwpriv (8)
-to manipulate private ioctls.
-.SS Quality and level threshold
-Enables you to define the quality and level threshold used by the
-modem (packet below that level are discarded).
-.SS Histogram
-This functionality makes it possible to set a number of
-signal level intervals and
-to count the number of packets received in each of those defined
-intervals.
-This distribution might be used to calculate the mean value
-and standard deviation of the signal level.
-.SS Specific notes
-This driver fails to detect some
-.B non-NCR/AT&T/Lucent
-Wavelan cards.
-If this happens for you, you must look in the source code on
-how to add your card to the detection routine.
-.PP
-Some of the mentioned features are optional.
-You may enable or disable
-them by changing flags in the driver header and recompile.
-.\" .SH AUTHOR
-.\" Bruce Janson \[em] bruce@cs.usyd.edu.au
-.\" .br
-.\" Jean Tourrilhes \[em] jt@hplb.hpl.hp.com
-.\" .br
-.\" (and others; see source code for details)
-.\"
-.\" SEE ALSO part
-.\"
-.SH SEE ALSO
-.BR wavelan_cs (4),
-.BR ifconfig (8),
-.BR insmod (8),
-.BR iwconfig (8),
-.BR iwpriv (8),
-.BR iwspy (8)
diff --git a/man4/zero.4 b/man4/zero.4
deleted file mode 100644
index 15a39be05..000000000
--- a/man4/zero.4
+++ /dev/null
@@ -1 +0,0 @@
-.so man4/null.4
diff --git a/man5/acct.5 b/man5/acct.5
deleted file mode 100644
index e7fd97ff2..000000000
--- a/man5/acct.5
+++ /dev/null
@@ -1,161 +0,0 @@
-.\" Copyright (C) 2008, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH acct 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-acct \- process accounting file
-.SH SYNOPSIS
-.nf
-.B #include <sys/acct.h>
-.fi
-.SH DESCRIPTION
-If the kernel is built with the process accounting option enabled
-.RB ( CONFIG_BSD_PROCESS_ACCT ),
-then calling
-.BR acct (2)
-starts process accounting, for example:
-.PP
-.in +4n
-acct("/var/log/pacct");
-.in
-.PP
-When process accounting is enabled, the kernel writes a record
-to the accounting file as each process on the system terminates.
-This record contains information about the terminated process,
-and is defined in
-.I <sys/acct.h>
-as follows:
-.PP
-.in +4n
-.EX
-#define ACCT_COMM 16
-\&
-typedef u_int16_t comp_t;
-\&
-struct acct {
- char ac_flag; /* Accounting flags */
- u_int16_t ac_uid; /* Accounting user ID */
- u_int16_t ac_gid; /* Accounting group ID */
- u_int16_t ac_tty; /* Controlling terminal */
- u_int32_t ac_btime; /* Process creation time
- (seconds since the Epoch) */
- comp_t ac_utime; /* User CPU time */
- comp_t ac_stime; /* System CPU time */
- comp_t ac_etime; /* Elapsed time */
- comp_t ac_mem; /* Average memory usage (kB) */
- comp_t ac_io; /* Characters transferred (unused) */
- comp_t ac_rw; /* Blocks read or written (unused) */
- comp_t ac_minflt; /* Minor page faults */
- comp_t ac_majflt; /* Major page faults */
- comp_t ac_swaps; /* Number of swaps (unused) */
- u_int32_t ac_exitcode; /* Process termination status
- (see wait(2)) */
- char ac_comm[ACCT_COMM+1];
- /* Command name (basename of last
- executed command; null\-terminated) */
- char ac_pad[\fIX\fP]; /* padding bytes */
-};
-\&
-enum { /* Bits that may be set in ac_flag field */
- AFORK = 0x01, /* Has executed fork, but no exec */
- ASU = 0x02, /* Used superuser privileges */
- ACORE = 0x08, /* Dumped core */
- AXSIG = 0x10 /* Killed by a signal */
-};
-.EE
-.in
-.PP
-The
-.I comp_t
-data type is a floating-point value consisting of a 3-bit, base-8 exponent,
-and a 13-bit mantissa.
-A value,
-.IR c ,
-of this type can be converted to a (long) integer as follows:
-.PP
-.nf
- v = (c & 0x1fff) << (((c >> 13) & 0x7) * 3);
-.fi
-.PP
-The
-.IR ac_utime ,
-.IR ac_stime ,
-and
-.I ac_etime
-fields measure time in "clock ticks"; divide these values by
-.I sysconf(_SC_CLK_TCK)
-to convert them to seconds.
-.SS Version 3 accounting file format
-Since Linux 2.6.8,
-an optional alternative version of the accounting file can be produced
-if the
-.B CONFIG_BSD_PROCESS_ACCT_V3
-option is set when building the kernel.
-With this option is set,
-the records written to the accounting file contain additional fields,
-and the width of
-.I c_uid
-and
-.I ac_gid
-fields is widened from 16 to 32 bits
-(in line with the increased size of UID and GIDs in Linux 2.4 and later).
-The records are defined as follows:
-.PP
-.in +4n
-.EX
-struct acct_v3 {
- char ac_flag; /* Flags */
- char ac_version; /* Always set to ACCT_VERSION (3) */
- u_int16_t ac_tty; /* Controlling terminal */
- u_int32_t ac_exitcode; /* Process termination status */
- u_int32_t ac_uid; /* Real user ID */
- u_int32_t ac_gid; /* Real group ID */
- u_int32_t ac_pid; /* Process ID */
- u_int32_t ac_ppid; /* Parent process ID */
- u_int32_t ac_btime; /* Process creation time */
- float ac_etime; /* Elapsed time */
- comp_t ac_utime; /* User CPU time */
- comp_t ac_stime; /* System time */
- comp_t ac_mem; /* Average memory usage (kB) */
- comp_t ac_io; /* Characters transferred (unused) */
- comp_t ac_rw; /* Blocks read or written
- (unused) */
- comp_t ac_minflt; /* Minor page faults */
- comp_t ac_majflt; /* Major page faults */
- comp_t ac_swaps; /* Number of swaps (unused) */
- char ac_comm[ACCT_COMM]; /* Command name */
-};
-.EE
-.in
-.SH VERSIONS
-Although it is present on most systems, it is not standardized,
-and the details vary somewhat between systems.
-.SH STANDARDS
-None.
-.SH HISTORY
-glibc 2.6.
-.PP
-Process accounting originated on BSD.
-.SH NOTES
-Records in the accounting file are ordered by termination time of
-the process.
-.PP
-Up to and including Linux 2.6.9,
-a separate accounting record is written for each thread created using
-the NPTL threading library;
-since Linux 2.6.10,
-a single accounting record is written for the entire process
-on termination of the last thread in the process.
-.PP
-The
-.I /proc/sys/kernel/acct
-file, described in
-.BR proc (5),
-defines settings that control the behavior of process accounting
-when disk space runs low.
-.SH SEE ALSO
-.BR lastcomm (1),
-.BR acct (2),
-.BR accton (8),
-.BR sa (8)
diff --git a/man5/charmap.5 b/man5/charmap.5
deleted file mode 100644
index c4e02aad7..000000000
--- a/man5/charmap.5
+++ /dev/null
@@ -1,105 +0,0 @@
-.\" Copyright (C) 1994 Jochen Hein (Hein@Student.TU-Clausthal.de)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH charmap 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-charmap \- character set description file
-.SH DESCRIPTION
-A character set description (charmap) defines all available characters
-and their encodings in a character set.
-.BR localedef (1)
-can use charmaps to create locale variants for different character sets.
-.SS Syntax
-The charmap file starts with a header that may consist of the
-following keywords:
-.TP
-.RI < code_set_name >
-is followed by the name of the character map.
-.TP
-.RI < comment_char >
-is followed by a character that will be used as the comment character
-for the rest of the file.
-It defaults to the number sign (#).
-.TP
-.RI < escape_char >
-is followed by a character that should be used as the escape character
-for the rest of the file to mark characters that should be interpreted
-in a special way.
-It defaults to the backslash (\e).
-.TP
-.RI < mb_cur_max >
-is followed by the maximum number of bytes for a character.
-The default value is 1.
-.TP
-.RI < mb_cur_min >
-is followed by the minimum number of bytes for a character.
-This value must be less than or equal than
-.RI < mb_cur_max >.
-If not specified, it defaults to
-.RI < mb_cur_max >.
-.PP
-The character set definition section starts with the keyword
-.I CHARMAP
-in the first column.
-.PP
-The following lines may have one of the two following forms to
-define the character set:
-.TP
-.RI < character >\ byte-sequence\ comment
-This form defines exactly one character and its byte sequence,
-.I comment
-being optional.
-.TP
-.RI < character >..< character >\ byte-sequence\ comment
-This form defines a character range and its byte sequence,
-.I comment
-being optional.
-.PP
-The character set definition section ends with the string
-.IR "END CHARMAP" .
-.PP
-The character set definition section may optionally be followed by a
-section to define widths of characters.
-.PP
-The
-.I WIDTH_DEFAULT
-keyword can be used to define the default width for all characters
-not explicitly listed.
-The default character width is 1.
-.PP
-The width section for individual characters starts with the keyword
-.I WIDTH
-in the first column.
-.PP
-The following lines may have one of the two following forms to
-define the widths of the characters:
-.TP
-.RI < character >\ width
-This form defines the width of exactly one character.
-.TP
-.RI < character >...< character >\ width
-This form defines the width for all the characters in the range.
-.PP
-The width definition section ends with the string
-.IR "END WIDTH" .
-.SH FILES
-.TP
-.I /usr/share/i18n/charmaps
-Usual default character map path.
-.SH STANDARDS
-POSIX.2.
-.SH EXAMPLES
-The Euro sign is defined as follows in the
-.I UTF\-8
-charmap:
-.PP
-.nf
-<U20AC> /xe2/x82/xac EURO SIGN
-.fi
-.SH SEE ALSO
-.BR iconv (1),
-.BR locale (1),
-.BR localedef (1),
-.BR locale (5),
-.BR charsets (7)
diff --git a/man5/core.5 b/man5/core.5
deleted file mode 100644
index 2b1c0f7ec..000000000
--- a/man5/core.5
+++ /dev/null
@@ -1,684 +0,0 @@
-.\" Copyright (c) 2006, 2008 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH core 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-core \- core dump file
-.SH DESCRIPTION
-The default action of certain signals is to cause a process to terminate
-and produce a
-.IR "core dump file" ,
-a file containing an image of the process's memory at
-the time of termination.
-This image can be used in a debugger (e.g.,
-.BR gdb (1))
-to inspect the state of the program at the time that it terminated.
-A list of the signals which cause a process to dump core can be found in
-.BR signal (7).
-.PP
-A process can set its soft
-.B RLIMIT_CORE
-resource limit to place an upper limit on the size of the core dump file
-that will be produced if it receives a "core dump" signal; see
-.BR getrlimit (2)
-for details.
-.PP
-There are various circumstances in which a core dump file is
-not produced:
-.IP \[bu] 3
-The process does not have permission to write the core file.
-(By default, the core file is called
-.I core
-or
-.IR core.pid ,
-where
-.I pid
-is the ID of the process that dumped core,
-and is created in the current working directory.
-See below for details on naming.)
-Writing the core file fails if the directory in which
-it is to be created is not writable,
-or if a file with the same name exists and
-is not writable
-or is not a regular file
-(e.g., it is a directory or a symbolic link).
-.IP \[bu]
-A (writable, regular) file with the same name as would be used for the
-core dump already exists, but there is more than one hard link to that
-file.
-.IP \[bu]
-The filesystem where the core dump file would be created is full;
-or has run out of inodes; or is mounted read-only;
-or the user has reached their quota for the filesystem.
-.IP \[bu]
-The directory in which the core dump file is to be created does
-not exist.
-.IP \[bu]
-The
-.B RLIMIT_CORE
-(core file size) or
-.B RLIMIT_FSIZE
-(file size) resource limits for the process are set to zero; see
-.BR getrlimit (2)
-and the documentation of the shell's
-.I ulimit
-command
-.RI ( limit
-in
-.BR csh (1)).
-However,
-.B RLIMIT_CORE
-will be ignored if the system is configured to pipe core dumps to a program.
-.IP \[bu]
-The binary being executed by the process does not have read
-permission enabled.
-(This is a security measure to
-ensure that an executable whose contents are not readable
-does not produce a\[em]possibly readable\[em]core dump containing
-an image of the executable.)
-.IP \[bu]
-The process is executing a set-user-ID (set-group-ID) program
-that is owned by a user (group) other than the real user (group)
-ID of the process,
-or the process is executing a program that has file capabilities (see
-.BR capabilities (7)).
-(However, see the description of the
-.BR prctl (2)
-.B PR_SET_DUMPABLE
-operation, and the description of the
-.I /proc/sys/fs/suid_dumpable
-.\" FIXME . Perhaps relocate discussion of /proc/sys/fs/suid_dumpable
-.\" and PR_SET_DUMPABLE to this page?
-file in
-.BR proc (5).)
-.IP \[bu]
-.I /proc/sys/kernel/core_pattern
-is empty and
-.I /proc/sys/kernel/core_uses_pid
-contains the value 0.
-(These files are described below.)
-Note that if
-.I /proc/sys/kernel/core_pattern
-is empty and
-.I /proc/sys/kernel/core_uses_pid
-contains the value 1,
-core dump files will have names of the form
-.IR .pid ,
-and such files are hidden unless one uses the
-.BR ls (1)
-.I \-a
-option.
-.IP \[bu]
-(Since Linux 3.7)
-.\" commit 046d662f481830e652ac34cd112249adde16452a
-The kernel was configured without the
-.B CONFIG_COREDUMP
-option.
-.PP
-In addition,
-a core dump may exclude part of the address space of the process if the
-.BR madvise (2)
-.B MADV_DONTDUMP
-flag was employed.
-.PP
-On systems that employ
-.BR systemd (1)
-as the
-.I init
-framework, core dumps may instead be placed in a location determined by
-.BR systemd (1).
-See below for further details.
-.\"
-.SS Naming of core dump files
-By default, a core dump file is named
-.IR core ,
-but the
-.I /proc/sys/kernel/core_pattern
-file (since Linux 2.6 and 2.4.21)
-can be set to define a template that is used to name core dump files.
-The template can contain % specifiers which are substituted
-by the following values when a core file is created:
-.PP
-.RS 4
-.PD 0
-.TP 4
-%%
-A single % character.
-.TP
-%c
-Core file size soft resource limit of crashing process (since Linux 2.6.24).
-.TP
-%d
-.\" Added in git commit 12a2b4b2241e318b4f6df31228e4272d2c2968a1
-Dump mode\[em]same as value returned by
-.BR prctl (2)
-.B PR_GET_DUMPABLE
-(since Linux 3.7).
-.TP
-%e
-The process or thread's
-.I comm
-value, which typically is the same as the executable filename
-(without path prefix, and truncated to a maximum of 15 characters),
-but may have been modified to be something different;
-see the discussion of
-.IR /proc/ pid /comm
-and
-.IR /proc/ pid /task/ tid /comm
-in
-.BR proc (5).
-.TP
-%E
-Pathname of executable,
-with slashes (\[aq]/\[aq]) replaced by exclamation marks (\[aq]!\[aq])
-(since Linux 3.0).
-.TP
-%g
-Numeric real GID of dumped process.
-.TP
-%h
-Hostname (same as \fInodename\fP returned by \fBuname\fP(2)).
-.TP
-%i
-TID of thread that triggered core dump,
-as seen in the PID namespace in which the thread resides
-.\" commit b03023ecbdb76c1dec86b41ed80b123c22783220
-(since Linux 3.18).
-.TP
-%I
-TID of thread that triggered core dump, as seen in the initial PID namespace
-.\" commit b03023ecbdb76c1dec86b41ed80b123c22783220
-(since Linux 3.18).
-.TP
-%p
-PID of dumped process,
-as seen in the PID namespace in which the process resides.
-.TP
-%P
-.\" Added in git commit 65aafb1e7484b7434a0c1d4c593191ebe5776a2f
-PID of dumped process, as seen in the initial PID namespace
-(since Linux 3.12).
-.TP
-%s
-Number of signal causing dump.
-.TP
-%t
-Time of dump, expressed as seconds since the
-Epoch, 1970-01-01 00:00:00 +0000 (UTC).
-.TP
-%u
-Numeric real UID of dumped process.
-.PD
-.RE
-.PP
-A single % at the end of the template is dropped from the
-core filename, as is the combination of a % followed by any
-character other than those listed above.
-All other characters in the template become a literal
-part of the core filename.
-The template may include \[aq]/\[aq] characters, which are interpreted
-as delimiters for directory names.
-The maximum size of the resulting core filename is 128 bytes (64 bytes
-before Linux 2.6.19).
-The default value in this file is "core".
-For backward compatibility, if
-.I /proc/sys/kernel/core_pattern
-does not include
-.I %p
-and
-.I /proc/sys/kernel/core_uses_pid
-(see below)
-is nonzero, then .PID will be appended to the core filename.
-.PP
-Paths are interpreted according to the settings that are active for the
-crashing process.
-That means the crashing process's mount namespace (see
-.BR mount_namespaces (7)),
-its current working directory (found via
-.BR getcwd (2)),
-and its root directory (see
-.BR chroot (2)).
-.PP
-Since Linux 2.4, Linux has also provided
-a more primitive method of controlling
-the name of the core dump file.
-If the
-.I /proc/sys/kernel/core_uses_pid
-file contains the value 0, then a core dump file is simply named
-.IR core .
-If this file contains a nonzero value, then the core dump file includes
-the process ID in a name of the form
-.IR core.PID .
-.PP
-Since Linux 3.6,
-.\" 9520628e8ceb69fa9a4aee6b57f22675d9e1b709
-if
-.I /proc/sys/fs/suid_dumpable
-is set to 2 ("suidsafe"), the pattern must be either an absolute pathname
-(starting with a leading \[aq]/\[aq] character) or a pipe, as defined below.
-.SS Piping core dumps to a program
-Since Linux 2.6.19, Linux supports an alternate syntax for the
-.I /proc/sys/kernel/core_pattern
-file.
-If the first character of this file is a pipe symbol (\fB|\fP),
-then the remainder of the line is interpreted as the command-line for
-a user-space program (or script) that is to be executed.
-.PP
-Since Linux 5.3.0,
-.\" commit 315c69261dd3fa12dbc830d4fa00d1fad98d3b03
-the pipe template is split on spaces into an argument list
-.I before
-the template parameters are expanded.
-In earlier kernels, the template parameters are expanded first and
-the resulting string is split on spaces into an argument list.
-This means that in earlier kernels executable names added by the
-.I %e
-and
-.I %E
-template parameters could get split into multiple arguments.
-So the core dump handler needs to put the executable names as the last
-argument and ensure it joins all parts of the executable name using spaces.
-Executable names with multiple spaces in them are not correctly represented
-in earlier kernels,
-meaning that the core dump handler needs to use mechanisms to find
-the executable name.
-.PP
-Instead of being written to a file, the core dump is given as
-standard input to the program.
-Note the following points:
-.IP \[bu] 3
-The program must be specified using an absolute pathname (or a
-pathname relative to the root directory, \fI/\fP),
-and must immediately follow the '|' character.
-.IP \[bu]
-The command-line arguments can include any of
-the % specifiers listed above.
-For example, to pass the PID of the process that is being dumped, specify
-.I %p
-in an argument.
-.IP \[bu]
-The process created to run the program runs as user and group
-.IR root .
-.IP \[bu]
-Running as
-.I root
-does not confer any exceptional security bypasses.
-Namely, LSMs (e.g., SELinux) are still active and may prevent the handler
-from accessing details about the crashed process via
-.IR /proc/ pid.
-.IP \[bu]
-The program pathname is interpreted with respect to the initial mount namespace
-as it is always executed there.
-It is not affected by the settings
-(e.g., root directory, mount namespace, current working directory)
-of the crashing process.
-.IP \[bu]
-The process runs in the initial namespaces
-(PID, mount, user, and so on)
-and not in the namespaces of the crashing process.
-One can utilize specifiers such as
-.I %P
-to find the right
-.IR /proc/ pid
-directory and probe/enter the crashing process's namespaces if needed.
-.IP \[bu]
-The process starts with its current working directory
-as the root directory.
-If desired, it is possible change to the working directory of
-the dumping process by employing the value provided by the
-.I %P
-specifier to change to the location of the dumping process via
-.IR /proc/ pid /cwd .
-.IP \[bu]
-Command-line arguments can be supplied to the
-program (since Linux 2.6.24),
-delimited by white space (up to a total line length of 128 bytes).
-.IP \[bu]
-The
-.B RLIMIT_CORE
-limit is not enforced for core dumps that are piped to a program
-via this mechanism.
-.\"
-.SS /proc/sys/kernel/core_pipe_limit
-When collecting core dumps via a pipe to a user-space program,
-it can be useful for the collecting program to gather data about
-the crashing process from that process's
-.IR /proc/ pid
-directory.
-In order to do this safely,
-the kernel must wait for the program collecting the core dump to exit,
-so as not to remove the crashing process's
-.IR /proc/ pid
-files prematurely.
-This in turn creates the
-possibility that a misbehaving collecting program can block
-the reaping of a crashed process by simply never exiting.
-.PP
-Since Linux 2.6.32,
-.\" commit a293980c2e261bd5b0d2a77340dd04f684caff58
-the
-.I /proc/sys/kernel/core_pipe_limit
-can be used to defend against this possibility.
-The value in this file defines how many concurrent crashing
-processes may be piped to user-space programs in parallel.
-If this value is exceeded, then those crashing processes above this value
-are noted in the kernel log and their core dumps are skipped.
-.PP
-A value of 0 in this file is special.
-It indicates that unlimited processes may be captured in parallel,
-but that no waiting will take place (i.e., the collecting
-program is not guaranteed access to
-.IR /proc/<crashing\-PID> ).
-The default value for this file is 0.
-.\"
-.SS Controlling which mappings are written to the core dump
-Since Linux 2.6.23, the Linux-specific
-.IR /proc/ pid /coredump_filter
-file can be used to control which memory segments are written to the
-core dump file in the event that a core dump is performed for the
-process with the corresponding process ID.
-.PP
-The value in the file is a bit mask of memory mapping types (see
-.BR mmap (2)).
-If a bit is set in the mask, then memory mappings of the
-corresponding type are dumped; otherwise they are not dumped.
-The bits in this file have the following meanings:
-.PP
-.PD 0
-.RS 4
-.TP
-bit 0
-Dump anonymous private mappings.
-.TP
-bit 1
-Dump anonymous shared mappings.
-.TP
-bit 2
-Dump file-backed private mappings.
-.TP
-bit 3
-Dump file-backed shared mappings.
-.\" file-backed shared mappings of course also update the underlying
-.\" mapped file.
-.TP
-bit 4 (since Linux 2.6.24)
-Dump ELF headers.
-.TP
-bit 5 (since Linux 2.6.28)
-Dump private huge pages.
-.TP
-bit 6 (since Linux 2.6.28)
-Dump shared huge pages.
-.TP
-bit 7 (since Linux 4.4)
-.\" commit ab27a8d04b32b6ee8c30c14c4afd1058e8addc82
-Dump private DAX pages.
-.TP
-bit 8 (since Linux 4.4)
-.\" commit ab27a8d04b32b6ee8c30c14c4afd1058e8addc82
-Dump shared DAX pages.
-.RE
-.PD
-.PP
-By default, the following bits are set: 0, 1, 4 (if the
-.B CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS
-kernel configuration option is enabled), and 5.
-This default can be modified at boot time using the
-.I coredump_filter
-boot option.
-.PP
-The value of this file is displayed in hexadecimal.
-(The default value is thus displayed as 33.)
-.PP
-Memory-mapped I/O pages such as frame buffer are never dumped, and
-virtual DSO
-.RB ( vdso (7))
-pages are always dumped, regardless of the
-.I coredump_filter
-value.
-.PP
-A child process created via
-.BR fork (2)
-inherits its parent's
-.I coredump_filter
-value;
-the
-.I coredump_filter
-value is preserved across an
-.BR execve (2).
-.PP
-It can be useful to set
-.I coredump_filter
-in the parent shell before running a program, for example:
-.PP
-.in +4n
-.EX
-.RB "$" " echo 0x7 > /proc/self/coredump_filter"
-.RB "$" " ./some_program"
-.EE
-.in
-.PP
-This file is provided only if the kernel was built with the
-.B CONFIG_ELF_CORE
-configuration option.
-.\"
-.SS Core dumps and systemd
-On systems using the
-.BR systemd (1)
-.I init
-framework, core dumps may be placed in a location determined by
-.BR systemd (1).
-To do this,
-.BR systemd (1)
-employs the
-.I core_pattern
-feature that allows piping core dumps to a program.
-One can verify this by checking whether core dumps are being piped to the
-.BR systemd\-coredump (8)
-program:
-.PP
-.in +4n
-.EX
-$ \fBcat /proc/sys/kernel/core_pattern\fP
-|/usr/lib/systemd/systemd\-coredump %P %u %g %s %t %c %e
-.EE
-.in
-.PP
-In this case, core dumps will be placed in the location configured for
-.BR systemd\-coredump (8),
-typically as
-.BR lz4 (1)
-compressed files in the directory
-.IR /var/lib/systemd/coredump/ .
-One can list the core dumps that have been recorded by
-.BR systemd\-coredump (8)
-using
-.BR coredumpctl (1):
-.PP
-.EX
-$ \fBcoredumpctl list | tail \-5\fP
-Wed 2017\-10\-11 22:25:30 CEST 2748 1000 1000 3 present /usr/bin/sleep
-Thu 2017\-10\-12 06:29:10 CEST 2716 1000 1000 3 present /usr/bin/sleep
-Thu 2017\-10\-12 06:30:50 CEST 2767 1000 1000 3 present /usr/bin/sleep
-Thu 2017\-10\-12 06:37:40 CEST 2918 1000 1000 3 present /usr/bin/cat
-Thu 2017\-10\-12 08:13:07 CEST 2955 1000 1000 3 present /usr/bin/cat
-.EE
-.PP
-The information shown for each core dump includes the date and time
-of the dump, the PID, UID, and GID of the dumping process,
-the signal number that caused the core dump,
-and the pathname of the executable that was being run by the dumped process.
-Various options to
-.BR coredumpctl (1)
-allow a specified coredump file to be pulled from the
-.BR systemd (1)
-location into a specified file.
-For example, to extract the core dump for PID 2955 shown above to a file named
-.I core
-in the current directory, one could use:
-.PP
-.in +4n
-.EX
-$ \fBcoredumpctl dump 2955 \-o core\fP
-.EE
-.in
-.PP
-For more extensive details, see the
-.BR coredumpctl (1)
-manual page.
-.PP
-To (persistently) disable the
-.BR systemd (1)
-mechanism that archives core dumps, restoring to something more like
-traditional Linux behavior, one can set an override for the
-.BR systemd (1)
-mechanism, using something like:
-.PP
-.in +4n
-.EX
-# \fBecho "kernel.core_pattern=core.%p" > \e\fP
-\fB /etc/sysctl.d/50\-coredump.conf\fP
-# \fB/lib/systemd/systemd\-sysctl\fP
-.EE
-.in
-.PP
-It is also possible to temporarily (i.e., until the next reboot) change the
-.I core_pattern
-setting using a command such as the following
-(which causes the names of core dump files to include the executable name
-as well as the number of the signal which triggered the core dump):
-.PP
-.in +4n
-.EX
-# \fBsysctl \-w kernel.core_pattern="%e\-%s.core"\fP
-.EE
-.in
-.\"
-.SH NOTES
-The
-.BR gdb (1)
-.I gcore
-command can be used to obtain a core dump of a running process.
-.PP
-In Linux versions up to and including 2.6.27,
-.\" Changed with commit 6409324b385f3f63a03645b4422e3be67348d922
-if a multithreaded process (or, more precisely, a process that
-shares its memory with another process by being created with the
-.B CLONE_VM
-flag of
-.BR clone (2))
-dumps core, then the process ID is always appended to the core filename,
-unless the process ID was already included elsewhere in the
-filename via a
-.I %p
-specification in
-.IR /proc/sys/kernel/core_pattern .
-(This is primarily useful when employing the obsolete
-LinuxThreads implementation,
-where each thread of a process has a different PID.)
-.\" Always including the PID in the name of the core file made
-.\" sense for LinuxThreads, where each thread had a unique PID,
-.\" but doesn't seem to serve any purpose with NPTL, where all the
-.\" threads in a process share the same PID (as POSIX.1 requires).
-.\" Probably the behavior is maintained so that applications using
-.\" LinuxThreads continue appending the PID (the kernel has no easy
-.\" way of telling which threading implementation the user-space
-.\" application is using). -- mtk, April 2006
-.SH EXAMPLES
-The program below can be used to demonstrate the use of the
-pipe syntax in the
-.I /proc/sys/kernel/core_pattern
-file.
-The following shell session demonstrates the use of this program
-(compiled to create an executable named
-.IR core_pattern_pipe_test ):
-.PP
-.in +4n
-.EX
-.RB "$" " cc \-o core_pattern_pipe_test core_pattern_pipe_test.c"
-.RB "$" " su"
-Password:
-.RB "#" " echo \[dq]|$PWD/core_pattern_pipe_test %p \
-UID=%u GID=%g sig=%s\[dq] > \e"
-.B " /proc/sys/kernel/core_pattern"
-.RB "#" " exit"
-.RB "$" " sleep 100"
-.BR "\[ha]\e" " # type control\-backslash"
-Quit (core dumped)
-.RB "$" " cat core.info"
-argc=5
-argc[0]=</home/mtk/core_pattern_pipe_test>
-argc[1]=<20575>
-argc[2]=<UID=1000>
-argc[3]=<GID=100>
-argc[4]=<sig=3>
-Total bytes in core dump: 282624
-.EE
-.in
-.SS Program source
-\&
-.EX
-/* core_pattern_pipe_test.c */
-\&
-#define _GNU_SOURCE
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-\&
-#define BUF_SIZE 1024
-\&
-int
-main(int argc, char *argv[])
-{
- ssize_t nread, tot;
- char buf[BUF_SIZE];
- FILE *fp;
- char cwd[PATH_MAX];
-\&
- /* Change our current working directory to that of the
- crashing process. */
-\&
- snprintf(cwd, PATH_MAX, "/proc/%s/cwd", argv[1]);
- chdir(cwd);
-\&
- /* Write output to file "core.info" in that directory. */
-\&
- fp = fopen("core.info", "w+");
- if (fp == NULL)
- exit(EXIT_FAILURE);
-\&
- /* Display command\-line arguments given to core_pattern
- pipe program. */
-\&
- fprintf(fp, "argc=%d\en", argc);
- for (size_t j = 0; j < argc; j++)
- fprintf(fp, "argc[%zu]=<%s>\en", j, argv[j]);
-\&
- /* Count bytes in standard input (the core dump). */
-\&
- tot = 0;
- while ((nread = read(STDIN_FILENO, buf, BUF_SIZE)) > 0)
- tot += nread;
- fprintf(fp, "Total bytes in core dump: %zd\en", tot);
-\&
- fclose(fp);
- exit(EXIT_SUCCESS);
-}
-.EE
-.SH SEE ALSO
-.BR bash (1),
-.BR coredumpctl (1),
-.BR gdb (1),
-.BR getrlimit (2),
-.BR mmap (2),
-.BR prctl (2),
-.BR sigaction (2),
-.BR elf (5),
-.BR proc (5),
-.BR pthreads (7),
-.BR signal (7),
-.BR systemd\-coredump (8)
diff --git a/man5/dir_colors.5 b/man5/dir_colors.5
deleted file mode 100644
index 4e288c257..000000000
--- a/man5/dir_colors.5
+++ /dev/null
@@ -1,413 +0,0 @@
-'\" t
-.\" manpage for /etc/dir_colors, config file for dircolors(1)
-.\" extracted from color-ls 3.12.0.3 dircolors(1) manpage
-.\"
-.\" %%%LICENSE_START(LDPv1)
-.\" This file may be copied under the conditions described
-.\" in the LDP GENERAL PUBLIC LICENSE, Version 1, September 1998
-.\" that should have been distributed together with this file.
-.\" %%%LICENSE_END
-.\"
-.\" Modified Sat Dec 22 22:25:33 2001 by Martin Schulze <joey@infodrom.org>
-.\"
-.TH dir_colors 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-dir_colors \- configuration file for dircolors(1)
-.SH DESCRIPTION
-The program
-.BR ls (1)
-uses the environment variable
-.B LS_COLORS
-to determine the colors in which the filenames are to be displayed.
-This environment variable is usually set by a command like
-.PP
-.RS
-eval \`dircolors some_path/dir_colors\`
-.RE
-.PP
-found in a system default shell initialization file, like
-.I /etc/profile
-or
-.IR /etc/csh.cshrc .
-(See also
-.BR dircolors (1).)
-Usually, the file used here is
-.I /etc/DIR_COLORS
-and can be overridden by a
-.I .dir_colors
-file in one's home directory.
-.PP
-This configuration file consists of several statements, one per line.
-Anything right of a hash mark (#) is treated as a comment, if the
-hash mark is at the beginning of a line or is preceded by at least one
-whitespace.
-Blank lines are ignored.
-.PP
-The
-.I global
-section of the file consists of any statement before the first
-.B TERM
-statement.
-Any statement in the global section of the file is
-considered valid for all terminal types.
-Following the global section
-is one or more
-.I terminal-specific
-sections, preceded by one or more
-.B TERM
-statements which specify the terminal types (as given by the
-.B TERM
-environment variable) the following declarations apply to.
-It is always possible to override a global declaration by a subsequent
-terminal-specific one.
-.PP
-The following statements are recognized; case is insignificant:
-.TP
-.B TERM \fIterminal-type\fR
-Starts a terminal-specific section and specifies which terminal it
-applies to.
-Multiple
-.B TERM
-statements can be used to create a section which applies for several
-terminal types.
-.TP
-.B COLOR yes|all|no|none|tty
-(Slackware only; ignored by GNU
-.BR dircolors (1).)
-Specifies that colorization should always be enabled (\fIyes\fR or
-\fIall\fR), never enabled (\fIno\fR or \fInone\fR), or enabled only if
-the output is a terminal (\fItty\fR).
-The default is \fIno\fR.
-.TP
-.B EIGHTBIT yes|no
-(Slackware only; ignored by GNU
-.BR dircolors (1).)
-Specifies that eight-bit ISO 8859 characters should be enabled by
-default.
-For compatibility reasons, this can also be specified as 1 for
-\fIyes\fR or 0 for \fIno\fR.
-The default is \fIno\fR.
-.TP
-.B OPTIONS \fIoptions\fR
-(Slackware only; ignored by GNU
-.BR dircolors (1).)
-Adds command-line options to the default
-.B ls
-command line.
-The options can be any valid
-.B ls
-command-line options, and should include the leading minus sign.
-Note that
-.B dircolors
-does not verify the validity of these options.
-.TP
-.B NORMAL \fIcolor-sequence\fR
-Specifies the color used for normal (nonfilename) text.
-.IP
-Synonym:
-.BR NORM .
-.TP
-.B FILE \fIcolor-sequence\fR
-Specifies the color used for a regular file.
-.TP
-.B DIR \fIcolor-sequence\fR
-Specifies the color used for directories.
-.TP
-.B LINK \fIcolor-sequence\fR
-Specifies the color used for a symbolic link.
-.IP
-Synonyms:
-.BR LNK ,
-.BR SYMLINK .
-.TP
-.B ORPHAN \fIcolor-sequence\fR
-Specifies the color used for an orphaned symbolic link (one which
-points to a nonexistent file).
-If this is unspecified,
-.B ls
-will use the
-.B LINK
-color instead.
-.TP
-.B MISSING \fIcolor-sequence\fR
-Specifies the color used for a missing file (a nonexistent file which
-nevertheless has a symbolic link pointing to it).
-If this is unspecified,
-.B ls
-will use the
-.B FILE
-color instead.
-.TP
-.B FIFO \fIcolor-sequence\fR
-Specifies the color used for a FIFO (named pipe).
-.IP
-Synonym:
-.BR PIPE .
-.TP
-.B SOCK \fIcolor-sequence\fR
-Specifies the color used for a socket.
-.TP
-.B DOOR \fIcolor-sequence\fR
-(Supported since fileutils 4.1)
-Specifies the color used for a door (Solaris 2.5 and later).
-.TP
-.B BLK \fIcolor-sequence\fR
-Specifies the color used for a block device special file.
-.IP
-Synonym:
-.BR BLOCK .
-.TP
-.B CHR \fIcolor-sequence\fR
-Specifies the color used for a character device special file.
-.IP
-Synonym:
-.BR CHAR .
-.TP
-.B EXEC \fIcolor-sequence\fR
-Specifies the color used for a file with the executable attribute set.
-.TP
-.B SUID \fIcolor-sequence\fR
-Specifies the color used for a file with the set-user-ID attribute set.
-.IP
-Synonym:
-.BR SETUID .
-.TP
-.B SGID \fIcolor-sequence\fR
-Specifies the color used for a file with the set-group-ID attribute set.
-.IP
-Synonym:
-.BR SETGID .
-.TP
-.B STICKY \fIcolor-sequence\fR
-Specifies the color used for a directory with the sticky attribute set.
-.TP
-.B STICKY_OTHER_WRITABLE \fIcolor-sequence\fR
-Specifies the color used for
-an other-writable directory with the executable attribute set.
-.IP
-Synonym:
-.BR OWT .
-.TP
-.B OTHER_WRITABLE \fIcolor-sequence\fR
-Specifies the color used for
-an other-writable directory without the executable attribute set.
-.IP
-Synonym:
-.BR OWR .
-.TP
-.B LEFTCODE \fIcolor-sequence\fR
-Specifies the
-.I "left code"
-for non-ISO\ 6429 terminals (see below).
-.IP
-Synonym:
-.BR LEFT .
-.TP
-.B RIGHTCODE \fIcolor-sequence\fR
-Specifies the
-.I "right code"
-for non-ISO\ 6429 terminals (see below).
-.IP
-Synonym:
-.BR RIGHT .
-.TP
-.B ENDCODE \fIcolor-sequence\fR
-Specifies the
-.I "end code"
-for non-ISO\ 6429 terminals (see below).
-.IP
-Synonym:
-.BR END .
-.TP
-.BI * "extension color-sequence"
-Specifies the color used for any file that ends in \fIextension\fR.
-.TP
-.BI . "extension color-sequence"
-Same as \fB*\fR.\fIextension\fR.
-Specifies the color used for any file that
-ends in .\fIextension\fR.
-Note that the period is included in the
-extension, which makes it impossible to specify an extension not
-starting with a period, such as
-.B \[ti]
-for
-.B emacs
-backup files.
-This form should be considered obsolete.
-.SS ISO 6429 (ANSI) color sequences
-Most color-capable ASCII terminals today use ISO 6429 (ANSI) color sequences,
-and many common terminals without color capability, including
-.B xterm
-and the widely used and cloned DEC VT100, will recognize ISO 6429 color
-codes and harmlessly eliminate them from the output or emulate them.
-.B ls
-uses ISO 6429 codes by default, assuming colorization is enabled.
-.PP
-ISO 6429 color sequences are composed of sequences of numbers
-separated by semicolons.
-The most common codes are:
-.RS
-.TS
-l l.
- 0 to restore default color
- 1 for brighter colors
- 4 for underlined text
- 5 for flashing text
-30 for black foreground
-31 for red foreground
-32 for green foreground
-33 for yellow (or brown) foreground
-34 for blue foreground
-35 for purple foreground
-36 for cyan foreground
-37 for white (or gray) foreground
-40 for black background
-41 for red background
-42 for green background
-43 for yellow (or brown) background
-44 for blue background
-45 for purple background
-46 for cyan background
-47 for white (or gray) background
-.TE
-.RE
-.PP
-Not all commands will work on all systems or display devices.
-.PP
-.B ls
-uses the following defaults:
-.TS
-lb l l.
-NORMAL 0 Normal (nonfilename) text
-FILE 0 Regular file
-DIR 32 Directory
-LINK 36 Symbolic link
-ORPHAN undefined Orphaned symbolic link
-MISSING undefined Missing file
-FIFO 31 Named pipe (FIFO)
-SOCK 33 Socket
-BLK 44;37 Block device
-CHR 44;37 Character device
-EXEC 35 Executable file
-.TE
-.PP
-A few terminal programs do not recognize the default
-properly.
-If all text gets colorized after you do a directory
-listing, change the
-.B NORMAL
-and
-.B FILE
-codes to the numerical codes for your normal foreground and background
-colors.
-.SS Other terminal types (advanced configuration)
-If you have a color-capable (or otherwise highlighting) terminal (or
-printer!) which uses a different set of codes, you can still generate
-a suitable setup.
-To do so, you will have to use the
-.BR LEFTCODE ,
-.BR RIGHTCODE ,
-and
-.B ENDCODE
-definitions.
-.PP
-When writing out a filename,
-.B ls
-generates the following output sequence:
-.B LEFTCODE
-.I typecode
-.B RIGHTCODE
-.I filename
-.BR ENDCODE ,
-where the
-.I typecode
-is the color sequence that depends on the type or name of file.
-If the
-.B ENDCODE
-is undefined, the sequence
-.B "LEFTCODE NORMAL RIGHTCODE"
-will be used instead.
-The purpose of the left- and rightcodes is
-merely to reduce the amount of typing necessary (and to hide ugly
-escape codes away from the user).
-If they are not appropriate for
-your terminal, you can eliminate them by specifying the respective
-keyword on a line by itself.
-.PP
-.B NOTE:
-If the
-.B ENDCODE
-is defined in the global section of the setup file, it
-.I cannot
-be undefined in a terminal-specific section of the file.
-This means any
-.B NORMAL
-definition will have no effect.
-A different
-.B ENDCODE
-can, however, be specified, which would have the same effect.
-.SS Escape sequences
-To specify control- or blank characters in the color sequences or
-filename extensions, either C-style \e-escaped notation or
-.BR stty \-style
-\[ha]-notation can be used.
-The C-style notation
-includes the following characters:
-.RS
-.TS
-lb l.
-\ea Bell (ASCII 7)
-\eb Backspace (ASCII 8)
-\ee Escape (ASCII 27)
-\ef Form feed (ASCII 12)
-\en Newline (ASCII 10)
-\er Carriage Return (ASCII 13)
-\et Tab (ASCII 9)
-\ev Vertical Tab (ASCII 11)
-\e? Delete (ASCII 127)
-\e\fInnn Any character (octal notation)
-\ex\fInnn Any character (hexadecimal notation)
-\e_ Space
-\e\e Backslash (\e)
-\e\[ha] Caret (\[ha])
-\e# Hash mark (#)
-.TE
-.RE
-.PP
-Note that escapes are necessary to enter a space, backslash,
-caret, or any control character anywhere in the string, as well as a
-hash mark as the first character.
-.SH FILES
-.TP
-.I /etc/DIR_COLORS
-System-wide configuration file.
-.TP
-.I \[ti]/.dir_colors
-Per-user configuration file.
-.PP
-This page describes the
-.B dir_colors
-file format as used in the fileutils-4.1 package;
-other versions may differ slightly.
-.SH NOTES
-The default
-.B LEFTCODE
-and
-.B RIGHTCODE
-definitions, which are used by ISO 6429 terminals are:
-.RS
-.TS
-lb l.
-LEFTCODE \ee[
-RIGHTCODE m
-.TE
-.RE
-.PP
-The default
-.B ENDCODE
-is undefined.
-.SH SEE ALSO
-.BR dircolors (1),
-.BR ls (1),
-.BR stty (1),
-.BR xterm (1)
diff --git a/man5/elf.5 b/man5/elf.5
deleted file mode 100644
index 1518a2ac8..000000000
--- a/man5/elf.5
+++ /dev/null
@@ -1,2196 +0,0 @@
-.\" $OpenBSD: elf.5,v 1.12 2003/10/27 20:23:58 jmc Exp $
-.\"Copyright (c) 1999 Jeroen Ruigrok van der Werven
-.\"All rights reserved.
-.\"
-.\" %%%LICENSE_START(PERMISSIVE_MISC)
-.\"Redistribution and use in source and binary forms, with or without
-.\"modification, are permitted provided that the following conditions
-.\"are met:
-.\"1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\"2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\"
-.\"THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\"ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\"IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\"ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\"FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\"DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\"OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\"HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\"LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\"OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\"SUCH DAMAGE.
-.\" %%%LICENSE_END
-.\"
-.\" $FreeBSD: src/share/man/man5/elf.5,v 1.21 2001/10/01 16:09:23 ru Exp $
-.\"
-.\" Slightly adapted - aeb, 2004-01-01
-.\" 2005-07-15, Mike Frysinger <vapier@gentoo.org>, various fixes
-.\" 2007-10-11, Mike Frysinger <vapier@gentoo.org>, various fixes
-.\" 2007-12-08, mtk, Converted from mdoc to man macros
-.\"
-.TH ELF 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-elf \- format of Executable and Linking Format (ELF) files
-.SH SYNOPSIS
-.nf
-.\" .B #include <elf_abi.h>
-.B #include <elf.h>
-.fi
-.SH DESCRIPTION
-The header file
-.I <elf.h>
-defines the format of ELF executable binary files.
-Amongst these files are
-normal executable files, relocatable object files, core files, and shared
-objects.
-.PP
-An executable file using the ELF file format consists of an ELF header,
-followed by a program header table or a section header table, or both.
-The ELF header is always at offset zero of the file.
-The program header
-table and the section header table's offset in the file are defined in the
-ELF header.
-The two tables describe the rest of the particularities of
-the file.
-.PP
-.\" Applications which wish to process ELF binary files for their native
-.\" architecture only should include
-.\" .I <elf_abi.h>
-.\" in their source code.
-.\" These applications should need to refer to
-.\" all the types and structures by their generic names
-.\" "Elf_xxx"
-.\" and to the macros by
-.\" ELF_xxx".
-.\" Applications written this way can be compiled on any architecture,
-.\" regardless of whether the host is 32-bit or 64-bit.
-.\" .PP
-.\" Should an application need to process ELF files of an unknown
-.\" architecture, then the application needs to explicitly use either
-.\" "Elf32_xxx"
-.\" or
-.\" "Elf64_xxx"
-.\" type and structure names.
-.\" Likewise, the macros need to be identified by
-.\" "ELF32_xxx"
-.\" or
-.\" "ELF64_xxx".
-.\" .PP
-This header file describes the above mentioned headers as C structures
-and also includes structures for dynamic sections, relocation sections and
-symbol tables.
-.\"
-.SS Basic types
-The following types are used for N-bit architectures (N=32,64,
-.I ElfN
-stands for
-.I Elf32
-or
-.IR Elf64 ,
-.I uintN_t
-stands for
-.I uint32_t
-or
-.IR uint64_t ):
-.PP
-.in +4n
-.EX
-ElfN_Addr Unsigned program address, uintN_t
-ElfN_Off Unsigned file offset, uintN_t
-ElfN_Section Unsigned section index, uint16_t
-ElfN_Versym Unsigned version symbol information, uint16_t
-Elf_Byte unsigned char
-ElfN_Half uint16_t
-ElfN_Sword int32_t
-ElfN_Word uint32_t
-ElfN_Sxword int64_t
-ElfN_Xword uint64_t
-.\" Elf32_Size Unsigned object size
-.EE
-.in
-.PP
-(Note: the *BSD terminology is a bit different.
-There,
-.I Elf64_Half
-is
-twice as large as
-.IR Elf32_Half ,
-and
-.I Elf64Quarter
-is used for
-.IR uint16_t .
-In order to avoid confusion these types are replaced by explicit ones
-in the below.)
-.PP
-All data structures that the file format defines follow the
-"natural"
-size and alignment guidelines for the relevant class.
-If necessary,
-data structures contain explicit padding to ensure 4-byte alignment
-for 4-byte objects, to force structure sizes to a multiple of 4, and so on.
-.\"
-.SS ELF header (Ehdr)
-The ELF header is described by the type
-.I Elf32_Ehdr
-or
-.IR Elf64_Ehdr :
-.PP
-.in +4n
-.EX
-#define EI_NIDENT 16
-\&
-typedef struct {
- unsigned char e_ident[EI_NIDENT];
- uint16_t e_type;
- uint16_t e_machine;
- uint32_t e_version;
- ElfN_Addr e_entry;
- ElfN_Off e_phoff;
- ElfN_Off e_shoff;
- uint32_t e_flags;
- uint16_t e_ehsize;
- uint16_t e_phentsize;
- uint16_t e_phnum;
- uint16_t e_shentsize;
- uint16_t e_shnum;
- uint16_t e_shstrndx;
-} ElfN_Ehdr;
-.EE
-.in
-.PP
-The fields have the following meanings:
-.\"
-.\"
-.TP
-.I e_ident
-This array of bytes specifies how to interpret the file,
-independent of the processor or the file's remaining contents.
-Within this array everything is named by macros, which start with
-the prefix
-.B EI_
-and may contain values which start with the prefix
-.BR ELF .
-The following macros are defined:
-.RS
-.TP
-.B EI_MAG0
-The first byte of the magic number.
-It must be filled with
-.BR ELFMAG0 .
-(0: 0x7f)
-.TP
-.B EI_MAG1
-The second byte of the magic number.
-It must be filled with
-.BR ELFMAG1 .
-(1: \[aq]E\[aq])
-.TP
-.B EI_MAG2
-The third byte of the magic number.
-It must be filled with
-.BR ELFMAG2 .
-(2: \[aq]L\[aq])
-.TP
-.B EI_MAG3
-The fourth byte of the magic number.
-It must be filled with
-.BR ELFMAG3 .
-(3: \[aq]F\[aq])
-.TP
-.B EI_CLASS
-The fifth byte identifies the architecture for this binary:
-.RS
-.TP 14
-.PD 0
-.B ELFCLASSNONE
-This class is invalid.
-.TP
-.B ELFCLASS32
-This defines the 32-bit architecture.
-It supports machines with files
-and virtual address spaces up to 4 Gigabytes.
-.TP
-.B ELFCLASS64
-This defines the 64-bit architecture.
-.PD
-.RE
-.TP
-.B EI_DATA
-The sixth byte specifies the data encoding of the processor-specific
-data in the file.
-Currently, these encodings are supported:
-.RS 9
-.TP 14
-.PD 0
-.B ELFDATANONE
-Unknown data format.
-.TP
-.B ELFDATA2LSB
-Two's complement, little-endian.
-.TP
-.B ELFDATA2MSB
-Two's complement, big-endian.
-.PD
-.RE
-.TP
-.B EI_VERSION
-The seventh byte is the version number of the ELF specification:
-.IP
-.PD 0
-.RS
-.TP 14
-.B EV_NONE
-Invalid version.
-.TP
-.B EV_CURRENT
-Current version.
-.PD
-.RE
-.\".El
-.TP
-.B EI_OSABI
-The eighth byte identifies the operating system
-and ABI to which the object is targeted.
-Some fields in other ELF structures have flags
-and values that have platform-specific meanings;
-the interpretation of those fields is determined by the value of this byte.
-For example:
-.RS
-.TP 21
-.PD 0
-.B ELFOSABI_NONE
-Same as ELFOSABI_SYSV
-.\" 0
-.TP
-.B ELFOSABI_SYSV
-UNIX System V ABI
-.\" 0
-.\" synonym: ELFOSABI_NONE
-.TP
-.B ELFOSABI_HPUX
-HP-UX ABI
-.\" 1
-.TP
-.B ELFOSABI_NETBSD
-NetBSD ABI
-.\" 2
-.TP
-.B ELFOSABI_LINUX
-Linux ABI
-.\" 3
-.\" .TP
-.\" .BR ELFOSABI_HURD
-.\" Hurd ABI
-.\" 4
-.\" .TP
-.\" .BR ELFOSABI_86OPEN
-.\" 86Open Common IA32 ABI
-.\" 5
-.TP
-.B ELFOSABI_SOLARIS
-Solaris ABI
-.\" 6
-.\" .TP
-.\" .BR ELFOSABI_MONTEREY
-.\" Monterey project ABI
-.\" Now replaced by
-.\" ELFOSABI_AIX
-.\" 7
-.TP
-.B ELFOSABI_IRIX
-IRIX ABI
-.\" 8
-.TP
-.B ELFOSABI_FREEBSD
-FreeBSD ABI
-.\" 9
-.TP
-.B ELFOSABI_TRU64
-TRU64 UNIX ABI
-.\" 10
-.\" ELFOSABI_MODESTO
-.\" 11
-.\" ELFOSABI_OPENBSD
-.\" 12
-.TP
-.B ELFOSABI_ARM
-ARM architecture ABI
-.\" 97
-.TP
-.B ELFOSABI_STANDALONE
-Stand-alone (embedded) ABI
-.\" 255
-.PD
-.RE
-.TP
-.B EI_ABIVERSION
-The ninth byte identifies the version of the ABI
-to which the object is targeted.
-This field is used to distinguish among incompatible versions of an ABI.
-The interpretation of this version number
-is dependent on the ABI identified by the
-.B EI_OSABI
-field.
-Applications conforming to this specification use the value 0.
-.TP
-.B EI_PAD
-Start of padding.
-These bytes are reserved and set to zero.
-Programs
-which read them should ignore them.
-The value for
-.B EI_PAD
-will change in
-the future if currently unused bytes are given meanings.
-.\" As reported by Yuri Kozlov and confirmed by Mike Frysinger, EI_BRAND is
-.\" not in GABI (http://www.sco.com/developers/gabi/latest/ch4.eheader.html)
-.\" It looks to be a BSDism
-.\" .TP
-.\" .BR EI_BRAND
-.\" Start of architecture identification.
-.TP
-.B EI_NIDENT
-The size of the
-.I e_ident
-array.
-.RE
-.TP
-.I e_type
-This member of the structure identifies the object file type:
-.RS
-.TP 16
-.PD 0
-.B ET_NONE
-An unknown type.
-.TP
-.B ET_REL
-A relocatable file.
-.TP
-.B ET_EXEC
-An executable file.
-.TP
-.B ET_DYN
-A shared object.
-.TP
-.B ET_CORE
-A core file.
-.PD
-.RE
-.TP
-.I e_machine
-This member specifies the required architecture for an individual file.
-For example:
-.RS
-.TP 16
-.PD 0
-.B EM_NONE
-An unknown machine
-.\" 0
-.TP
-.B EM_M32
-AT&T WE 32100
-.\" 1
-.TP
-.B EM_SPARC
-Sun Microsystems SPARC
-.\" 2
-.TP
-.B EM_386
-Intel 80386
-.\" 3
-.TP
-.B EM_68K
-Motorola 68000
-.\" 4
-.TP
-.B EM_88K
-Motorola 88000
-.\" 5
-.\" .TP
-.\" .BR EM_486
-.\" Intel 80486
-.\" 6
-.TP
-.B EM_860
-Intel 80860
-.\" 7
-.TP
-.B EM_MIPS
-MIPS RS3000 (big-endian only)
-.\" 8
-.\" EM_S370
-.\" 9
-.\" .TP
-.\" .BR EM_MIPS_RS4_BE
-.\" MIPS RS4000 (big-endian only). Deprecated
-.\" 10
-.\" EM_MIPS_RS3_LE (MIPS R3000 little-endian)
-.\" 10
-.TP
-.B EM_PARISC
-HP/PA
-.\" 15
-.TP
-.B EM_SPARC32PLUS
-SPARC with enhanced instruction set
-.\" 18
-.TP
-.B EM_PPC
-PowerPC
-.\" 20
-.TP
-.B EM_PPC64
-PowerPC 64-bit
-.\" 21
-.TP
-.B EM_S390
-IBM S/390
-.\" 22
-.TP
-.B EM_ARM
-Advanced RISC Machines
-.\" 40
-.TP
-.B EM_SH
-Renesas SuperH
-.\" 42
-.TP
-.B EM_SPARCV9
-SPARC v9 64-bit
-.\" 43
-.TP
-.B EM_IA_64
-Intel Itanium
-.\" 50
-.TP
-.B EM_X86_64
-AMD x86-64
-.\" 62
-.TP
-.B EM_VAX
-DEC Vax
-.\" 75
-.\" EM_CRIS
-.\" 76
-.\" .TP
-.\" .BR EM_ALPHA
-.\" Compaq [DEC] Alpha
-.\" .TP
-.\" .BR EM_ALPHA_EXP
-.\" Compaq [DEC] Alpha with enhanced instruction set
-.PD
-.RE
-.TP
-.I e_version
-This member identifies the file version:
-.RS
-.TP 16
-.PD 0
-.B EV_NONE
-Invalid version
-.TP
-.B EV_CURRENT
-Current version
-.PD
-.RE
-.TP
-.I e_entry
-This member gives the virtual address to which the system first transfers
-control, thus starting the process.
-If the file has no associated entry
-point, this member holds zero.
-.TP
-.I e_phoff
-This member holds the program header table's file offset in bytes.
-If
-the file has no program header table, this member holds zero.
-.TP
-.I e_shoff
-This member holds the section header table's file offset in bytes.
-If the
-file has no section header table, this member holds zero.
-.TP
-.I e_flags
-This member holds processor-specific flags associated with the file.
-Flag names take the form EF_`machine_flag'.
-Currently, no flags have been defined.
-.TP
-.I e_ehsize
-This member holds the ELF header's size in bytes.
-.TP
-.I e_phentsize
-This member holds the size in bytes of one entry in the file's
-program header table; all entries are the same size.
-.TP
-.I e_phnum
-This member holds the number of entries in the program header
-table.
-Thus the product of
-.I e_phentsize
-and
-.I e_phnum
-gives the table's size
-in bytes.
-If a file has no program header,
-.I e_phnum
-holds the value zero.
-.IP
-If the number of entries in the program header table is
-larger than or equal to
-.\" This is a Linux extension, added in Linux 2.6.34.
-.B PN_XNUM
-(0xffff), this member holds
-.B PN_XNUM
-(0xffff) and the real number of entries in the program header table is held
-in the
-.I sh_info
-member of the initial entry in section header table.
-Otherwise, the
-.I sh_info
-member of the initial entry contains the value zero.
-.RS
-.TP
-.B PN_XNUM
-This is defined as 0xffff, the largest number
-.I e_phnum
-can have, specifying where the actual number of program headers is assigned.
-.PD
-.RE
-.TP
-.I e_shentsize
-This member holds a sections header's size in bytes.
-A section header is one
-entry in the section header table; all entries are the same size.
-.TP
-.I e_shnum
-This member holds the number of entries in the section header table.
-Thus
-the product of
-.I e_shentsize
-and
-.I e_shnum
-gives the section header table's size in bytes.
-If a file has no section
-header table,
-.I e_shnum
-holds the value of zero.
-.IP
-If the number of entries in the section header table is
-larger than or equal to
-.B SHN_LORESERVE
-(0xff00),
-.I e_shnum
-holds the value zero and the real number of entries in the section header
-table is held in the
-.I sh_size
-member of the initial entry in section header table.
-Otherwise, the
-.I sh_size
-member of the initial entry in the section header table holds
-the value zero.
-.TP
-.I e_shstrndx
-This member holds the section header table index of the entry associated
-with the section name string table.
-If the file has no section name string
-table, this member holds the value
-.BR SHN_UNDEF .
-.IP
-If the index of section name string table section is
-larger than or equal to
-.B SHN_LORESERVE
-(0xff00), this member holds
-.B SHN_XINDEX
-(0xffff) and the real index of the section name string table section
-is held in the
-.I sh_link
-member of the initial entry in section header table.
-Otherwise, the
-.I sh_link
-member of the initial entry in section header table contains the value zero.
-.\"
-.SS Program header (Phdr)
-An executable or shared object file's program header table is an array of
-structures, each describing a segment or other information the system needs
-to prepare the program for execution.
-An object file
-.I segment
-contains one or more
-.IR sections .
-Program headers are meaningful only for executable and shared object files.
-A file specifies its own program header size with the ELF header's
-.I e_phentsize
-and
-.I e_phnum
-members.
-The ELF program header is described by the type
-.I Elf32_Phdr
-or
-.I Elf64_Phdr
-depending on the architecture:
-.PP
-.in +4n
-.EX
-typedef struct {
- uint32_t p_type;
- Elf32_Off p_offset;
- Elf32_Addr p_vaddr;
- Elf32_Addr p_paddr;
- uint32_t p_filesz;
- uint32_t p_memsz;
- uint32_t p_flags;
- uint32_t p_align;
-} Elf32_Phdr;
-.EE
-.in
-.PP
-.in +4n
-.EX
-typedef struct {
- uint32_t p_type;
- uint32_t p_flags;
- Elf64_Off p_offset;
- Elf64_Addr p_vaddr;
- Elf64_Addr p_paddr;
- uint64_t p_filesz;
- uint64_t p_memsz;
- uint64_t p_align;
-} Elf64_Phdr;
-.EE
-.in
-.PP
-The main difference between the 32-bit and the 64-bit program header lies
-in the location of the
-.I p_flags
-member in the total struct.
-.TP
-.I p_type
-This member of the structure indicates what kind of segment this array
-element describes or how to interpret the array element's information.
-.RS 10
-.TP
-.B PT_NULL
-The array element is unused and the other members' values are undefined.
-This lets the program header have ignored entries.
-.TP
-.B PT_LOAD
-The array element specifies a loadable segment, described by
-.I p_filesz
-and
-.IR p_memsz .
-The bytes from the file are mapped to the beginning of the memory
-segment.
-If the segment's memory size
-.I p_memsz
-is larger than the file size
-.IR p_filesz ,
-the
-"extra"
-bytes are defined to hold the value 0 and to follow the segment's
-initialized area.
-The file size may not be larger than the memory size.
-Loadable segment entries in the program header table appear in ascending
-order, sorted on the
-.I p_vaddr
-member.
-.TP
-.B PT_DYNAMIC
-The array element specifies dynamic linking information.
-.TP
-.B PT_INTERP
-The array element specifies the location and size of a null-terminated
-pathname to invoke as an interpreter.
-This segment type is meaningful
-only for executable files (though it may occur for shared objects).
-However it may not occur more than once in a file.
-If it is present, it must precede any loadable segment entry.
-.TP
-.B PT_NOTE
-The array element specifies the location of notes (ElfN_Nhdr).
-.TP
-.B PT_SHLIB
-This segment type is reserved but has unspecified semantics.
-Programs that
-contain an array element of this type do not conform to the ABI.
-.TP
-.B PT_PHDR
-The array element, if present,
-specifies the location and size of the program header table itself,
-both in the file and in the memory image of the program.
-This segment type may not occur more than once in a file.
-Moreover, it may
-occur only if the program header table is part of the memory image of the
-program.
-If it is present, it must precede any loadable segment entry.
-.TP
-.BR PT_LOPROC ", " PT_HIPROC
-Values in the inclusive range
-.RB [ PT_LOPROC ,
-.BR PT_HIPROC ]
-are reserved for processor-specific semantics.
-.TP
-.B PT_GNU_STACK
-GNU extension which is used by the Linux kernel to control the state of the
-stack via the flags set in the
-.I p_flags
-member.
-.RE
-.TP
-.I p_offset
-This member holds the offset from the beginning of the file at which
-the first byte of the segment resides.
-.TP
-.I p_vaddr
-This member holds the virtual address at which the first byte of the
-segment resides in memory.
-.TP
-.I p_paddr
-On systems for which physical addressing is relevant, this member is
-reserved for the segment's physical address.
-Under
-BSD
-this member is
-not used and must be zero.
-.TP
-.I p_filesz
-This member holds the number of bytes in the file image of the segment.
-It may be zero.
-.TP
-.I p_memsz
-This member holds the number of bytes in the memory image of the segment.
-It may be zero.
-.TP
-.I p_flags
-This member holds a bit mask of flags relevant to the segment:
-.RS
-.TP
-.PD 0
-.B PF_X
-An executable segment.
-.TP
-.B PF_W
-A writable segment.
-.TP
-.B PF_R
-A readable segment.
-.PD
-.RE
-.IP
-A text segment commonly has the flags
-.B PF_X
-and
-.B PF_R .
-A data segment commonly has
-.B PF_W
-and
-.BR PF_R .
-.TP
-.I p_align
-This member holds the value to which the segments are aligned in memory
-and in the file.
-Loadable process segments must have congruent values for
-.I p_vaddr
-and
-.IR p_offset ,
-modulo the page size.
-Values of zero and one mean no alignment is required.
-Otherwise,
-.I p_align
-should be a positive, integral power of two, and
-.I p_vaddr
-should equal
-.IR p_offset ,
-modulo
-.IR p_align .
-.\"
-.SS Section header (Shdr)
-A file's section header table lets one locate all the file's sections.
-The
-section header table is an array of
-.I Elf32_Shdr
-or
-.I Elf64_Shdr
-structures.
-The
-ELF header's
-.I e_shoff
-member gives the byte offset from the beginning of the file to the section
-header table.
-.I e_shnum
-holds the number of entries the section header table contains.
-.I e_shentsize
-holds the size in bytes of each entry.
-.PP
-A section header table index is a subscript into this array.
-Some section
-header table indices are reserved:
-the initial entry and the indices between
-.B SHN_LORESERVE
-and
-.BR SHN_HIRESERVE .
-The initial entry is used in ELF extensions for
-.IR e_phnum ,
-.IR e_shnum ,
-and
-.IR e_shstrndx ;
-in other cases, each field in the initial entry is set to zero.
-An object file does not have sections for
-these special indices:
-.TP
-.B SHN_UNDEF
-This value marks an undefined, missing, irrelevant,
-or otherwise meaningless section reference.
-.TP
-.B SHN_LORESERVE
-This value specifies the lower bound of the range of reserved indices.
-.TP
-.BR SHN_LOPROC ", " SHN_HIPROC
-Values greater in the inclusive range
-.RB [ SHN_LOPROC ,
-.BR SHN_HIPROC ]
-are reserved for processor-specific semantics.
-.TP
-.B SHN_ABS
-This value specifies the absolute value for the corresponding reference.
-For
-example, a symbol defined relative to section number
-.B SHN_ABS
-has an absolute value and is not affected by relocation.
-.TP
-.B SHN_COMMON
-Symbols defined relative to this section are common symbols,
-such as FORTRAN COMMON or unallocated C external variables.
-.TP
-.B SHN_HIRESERVE
-This value specifies the upper bound of the range of reserved indices.
-The
-system reserves indices between
-.B SHN_LORESERVE
-and
-.BR SHN_HIRESERVE ,
-inclusive.
-The section header table does not contain entries for the
-reserved indices.
-.PP
-The section header has the following structure:
-.PP
-.in +4n
-.EX
-typedef struct {
- uint32_t sh_name;
- uint32_t sh_type;
- uint32_t sh_flags;
- Elf32_Addr sh_addr;
- Elf32_Off sh_offset;
- uint32_t sh_size;
- uint32_t sh_link;
- uint32_t sh_info;
- uint32_t sh_addralign;
- uint32_t sh_entsize;
-} Elf32_Shdr;
-.EE
-.in
-.PP
-.in +4n
-.EX
-typedef struct {
- uint32_t sh_name;
- uint32_t sh_type;
- uint64_t sh_flags;
- Elf64_Addr sh_addr;
- Elf64_Off sh_offset;
- uint64_t sh_size;
- uint32_t sh_link;
- uint32_t sh_info;
- uint64_t sh_addralign;
- uint64_t sh_entsize;
-} Elf64_Shdr;
-.EE
-.in
-.PP
-No real differences exist between the 32-bit and 64-bit section headers.
-.TP
-.I sh_name
-This member specifies the name of the section.
-Its value is an index
-into the section header string table section, giving the location of
-a null-terminated string.
-.TP
-.I sh_type
-This member categorizes the section's contents and semantics.
-.RS
-.TP
-.B SHT_NULL
-This value marks the section header as inactive.
-It does not
-have an associated section.
-Other members of the section header
-have undefined values.
-.TP
-.B SHT_PROGBITS
-This section holds information defined by the program, whose
-format and meaning are determined solely by the program.
-.TP
-.B SHT_SYMTAB
-This section holds a symbol table.
-Typically,
-.B SHT_SYMTAB
-provides symbols for link editing, though it may also be used
-for dynamic linking.
-As a complete symbol table, it may contain
-many symbols unnecessary for dynamic linking.
-An object file can
-also contain a
-.B SHT_DYNSYM
-section.
-.TP
-.B SHT_STRTAB
-This section holds a string table.
-An object file may have multiple
-string table sections.
-.TP
-.B SHT_RELA
-This section holds relocation entries with explicit addends, such
-as type
-.I Elf32_Rela
-for the 32-bit class of object files.
-An object may have multiple
-relocation sections.
-.TP
-.B SHT_HASH
-This section holds a symbol hash table.
-An object participating in
-dynamic linking must contain a symbol hash table.
-An object file may
-have only one hash table.
-.TP
-.B SHT_DYNAMIC
-This section holds information for dynamic linking.
-An object file may
-have only one dynamic section.
-.TP
-.B SHT_NOTE
-This section holds notes (ElfN_Nhdr).
-.TP
-.B SHT_NOBITS
-A section of this type occupies no space in the file but otherwise
-resembles
-.BR SHT_PROGBITS .
-Although this section contains no bytes, the
-.I sh_offset
-member contains the conceptual file offset.
-.TP
-.B SHT_REL
-This section holds relocation offsets without explicit addends, such
-as type
-.I Elf32_Rel
-for the 32-bit class of object files.
-An object file may have multiple
-relocation sections.
-.TP
-.B SHT_SHLIB
-This section is reserved but has unspecified semantics.
-.TP
-.B SHT_DYNSYM
-This section holds a minimal set of dynamic linking symbols.
-An
-object file can also contain a
-.B SHT_SYMTAB
-section.
-.TP
-.BR SHT_LOPROC ", " SHT_HIPROC
-Values in the inclusive range
-.RB [ SHT_LOPROC ,
-.BR SHT_HIPROC ]
-are reserved for processor-specific semantics.
-.TP
-.B SHT_LOUSER
-This value specifies the lower bound of the range of indices reserved for
-application programs.
-.TP
-.B SHT_HIUSER
-This value specifies the upper bound of the range of indices reserved for
-application programs.
-Section types between
-.B SHT_LOUSER
-and
-.B SHT_HIUSER
-may be used by the application, without conflicting with current or future
-system-defined section types.
-.RE
-.TP
-.I sh_flags
-Sections support one-bit flags that describe miscellaneous attributes.
-If a flag bit is set in
-.IR sh_flags ,
-the attribute is
-"on"
-for the section.
-Otherwise, the attribute is
-"off"
-or does not apply.
-Undefined attributes are set to zero.
-.RS
-.TP
-.B SHF_WRITE
-This section contains data that should be writable during process
-execution.
-.TP
-.B SHF_ALLOC
-This section occupies memory during process execution.
-Some control
-sections do not reside in the memory image of an object file.
-This
-attribute is off for those sections.
-.TP
-.B SHF_EXECINSTR
-This section contains executable machine instructions.
-.TP
-.B SHF_MASKPROC
-All bits included in this mask are reserved for processor-specific
-semantics.
-.RE
-.TP
-.I sh_addr
-If this section appears in the memory image of a process, this member
-holds the address at which the section's first byte should reside.
-Otherwise, the member contains zero.
-.TP
-.I sh_offset
-This member's value holds the byte offset from the beginning of the file
-to the first byte in the section.
-One section type,
-.BR SHT_NOBITS ,
-occupies no space in the file, and its
-.I sh_offset
-member locates the conceptual placement in the file.
-.TP
-.I sh_size
-This member holds the section's size in bytes.
-Unless the section type
-is
-.BR SHT_NOBITS ,
-the section occupies
-.I sh_size
-bytes in the file.
-A section of type
-.B SHT_NOBITS
-may have a nonzero size, but it occupies no space in the file.
-.TP
-.I sh_link
-This member holds a section header table index link, whose interpretation
-depends on the section type.
-.TP
-.I sh_info
-This member holds extra information, whose interpretation depends on the
-section type.
-.TP
-.I sh_addralign
-Some sections have address alignment constraints.
-If a section holds a
-doubleword, the system must ensure doubleword alignment for the entire
-section.
-That is, the value of
-.I sh_addr
-must be congruent to zero, modulo the value of
-.IR sh_addralign .
-Only zero and positive integral powers of two are allowed.
-The value 0 or 1 means that the section has no alignment constraints.
-.TP
-.I sh_entsize
-Some sections hold a table of fixed-sized entries, such as a symbol table.
-For such a section, this member gives the size in bytes for each entry.
-This member contains zero if the section does not hold a table of
-fixed-size entries.
-.PP
-Various sections hold program and control information:
-.TP
-.I .bss
-This section holds uninitialized data that contributes to the program's
-memory image.
-By definition, the system initializes the data with zeros
-when the program begins to run.
-This section is of type
-.BR SHT_NOBITS .
-The attribute types are
-.B SHF_ALLOC
-and
-.BR SHF_WRITE .
-.TP
-.I .comment
-This section holds version control information.
-This section is of type
-.BR SHT_PROGBITS .
-No attribute types are used.
-.TP
-.I .ctors
-This section holds initialized pointers to the C++ constructor functions.
-This section is of type
-.BR SHT_PROGBITS .
-The attribute types are
-.B SHF_ALLOC
-and
-.BR SHF_WRITE .
-.TP
-.I .data
-This section holds initialized data that contribute to the program's
-memory image.
-This section is of type
-.BR SHT_PROGBITS .
-The attribute types are
-.B SHF_ALLOC
-and
-.BR SHF_WRITE .
-.TP
-.I .data1
-This section holds initialized data that contribute to the program's
-memory image.
-This section is of type
-.BR SHT_PROGBITS .
-The attribute types are
-.B SHF_ALLOC
-and
-.BR SHF_WRITE .
-.TP
-.I .debug
-This section holds information for symbolic debugging.
-The contents
-are unspecified.
-This section is of type
-.BR SHT_PROGBITS .
-No attribute types are used.
-.TP
-.I .dtors
-This section holds initialized pointers to the C++ destructor functions.
-This section is of type
-.BR SHT_PROGBITS .
-The attribute types are
-.B SHF_ALLOC
-and
-.BR SHF_WRITE .
-.TP
-.I .dynamic
-This section holds dynamic linking information.
-The section's attributes
-will include the
-.B SHF_ALLOC
-bit.
-Whether the
-.B SHF_WRITE
-bit is set is processor-specific.
-This section is of type
-.BR SHT_DYNAMIC .
-See the attributes above.
-.TP
-.I .dynstr
-This section holds strings needed for dynamic linking, most commonly
-the strings that represent the names associated with symbol table entries.
-This section is of type
-.BR SHT_STRTAB .
-The attribute type used is
-.BR SHF_ALLOC .
-.TP
-.I .dynsym
-This section holds the dynamic linking symbol table.
-This section is of type
-.BR SHT_DYNSYM .
-The attribute used is
-.BR SHF_ALLOC .
-.TP
-.I .fini
-This section holds executable instructions that contribute to the process
-termination code.
-When a program exits normally the system arranges to
-execute the code in this section.
-This section is of type
-.BR SHT_PROGBITS .
-The attributes used are
-.B SHF_ALLOC
-and
-.BR SHF_EXECINSTR .
-.TP
-.I .gnu.version
-This section holds the version symbol table, an array of
-.I ElfN_Half
-elements.
-This section is of type
-.BR SHT_GNU_versym .
-The attribute type used is
-.BR SHF_ALLOC .
-.TP
-.I .gnu.version_d
-This section holds the version symbol definitions, a table of
-.I ElfN_Verdef
-structures.
-This section is of type
-.BR SHT_GNU_verdef .
-The attribute type used is
-.BR SHF_ALLOC .
-.TP
-.I .gnu.version_r
-This section holds the version symbol needed elements, a table of
-.I ElfN_Verneed
-structures.
-This section is of
-type
-.BR SHT_GNU_versym .
-The attribute type used is
-.BR SHF_ALLOC .
-.TP
-.I .got
-This section holds the global offset table.
-This section is of type
-.BR SHT_PROGBITS .
-The attributes are processor-specific.
-.TP
-.I .hash
-This section holds a symbol hash table.
-This section is of type
-.BR SHT_HASH .
-The attribute used is
-.BR SHF_ALLOC .
-.TP
-.I .init
-This section holds executable instructions that contribute to the process
-initialization code.
-When a program starts to run the system arranges to execute
-the code in this section before calling the main program entry point.
-This section is of type
-.BR SHT_PROGBITS .
-The attributes used are
-.B SHF_ALLOC
-and
-.BR SHF_EXECINSTR .
-.TP
-.I .interp
-This section holds the pathname of a program interpreter.
-If the file has
-a loadable segment that includes the section, the section's attributes will
-include the
-.B SHF_ALLOC
-bit.
-Otherwise, that bit will be off.
-This section is of type
-.BR SHT_PROGBITS .
-.TP
-.I .line
-This section holds line number information for symbolic debugging,
-which describes the correspondence between the program source and
-the machine code.
-The contents are unspecified.
-This section is of type
-.BR SHT_PROGBITS .
-No attribute types are used.
-.TP
-.I .note
-This section holds various notes.
-This section is of type
-.BR SHT_NOTE .
-No attribute types are used.
-.TP
-.I .note.ABI\-tag
-This section is used to declare the expected run-time ABI of the ELF image.
-It may include the operating system name and its run-time versions.
-This section is of type
-.BR SHT_NOTE .
-The only attribute used is
-.BR SHF_ALLOC .
-.TP
-.I .note.gnu.build\-id
-This section is used to hold an ID that uniquely identifies
-the contents of the ELF image.
-Different files with the same build ID should contain the same executable
-content.
-See the
-.B \-\-build\-id
-option to the GNU linker (\fBld\fR (1)) for more details.
-This section is of type
-.BR SHT_NOTE .
-The only attribute used is
-.BR SHF_ALLOC .
-.TP
-.I .note.GNU\-stack
-This section is used in Linux object files for declaring stack attributes.
-This section is of type
-.BR SHT_PROGBITS .
-The only attribute used is
-.BR SHF_EXECINSTR .
-This indicates to the GNU linker that the object file requires an
-executable stack.
-.TP
-.I .note.openbsd.ident
-OpenBSD native executables usually contain this section
-to identify themselves so the kernel can bypass any compatibility
-ELF binary emulation tests when loading the file.
-.TP
-.I .plt
-This section holds the procedure linkage table.
-This section is of type
-.BR SHT_PROGBITS .
-The attributes are processor-specific.
-.TP
-.I .relNAME
-This section holds relocation information as described below.
-If the file
-has a loadable segment that includes relocation, the section's attributes
-will include the
-.B SHF_ALLOC
-bit.
-Otherwise, the bit will be off.
-By convention,
-"NAME"
-is supplied by the section to which the relocations apply.
-Thus a relocation
-section for
-.B .text
-normally would have the name
-.BR .rel.text .
-This section is of type
-.BR SHT_REL .
-.TP
-.I .relaNAME
-This section holds relocation information as described below.
-If the file
-has a loadable segment that includes relocation, the section's attributes
-will include the
-.B SHF_ALLOC
-bit.
-Otherwise, the bit will be off.
-By convention,
-"NAME"
-is supplied by the section to which the relocations apply.
-Thus a relocation
-section for
-.B .text
-normally would have the name
-.BR .rela.text .
-This section is of type
-.BR SHT_RELA .
-.TP
-.I .rodata
-This section holds read-only data that typically contributes to a
-nonwritable segment in the process image.
-This section is of type
-.BR SHT_PROGBITS .
-The attribute used is
-.BR SHF_ALLOC .
-.TP
-.I .rodata1
-This section holds read-only data that typically contributes to a
-nonwritable segment in the process image.
-This section is of type
-.BR SHT_PROGBITS .
-The attribute used is
-.BR SHF_ALLOC .
-.TP
-.I .shstrtab
-This section holds section names.
-This section is of type
-.BR SHT_STRTAB .
-No attribute types are used.
-.TP
-.I .strtab
-This section holds strings, most commonly the strings that represent the
-names associated with symbol table entries.
-If the file has a loadable
-segment that includes the symbol string table, the section's attributes
-will include the
-.B SHF_ALLOC
-bit.
-Otherwise, the bit will be off.
-This section is of type
-.BR SHT_STRTAB .
-.TP
-.I .symtab
-This section holds a symbol table.
-If the file has a loadable segment
-that includes the symbol table, the section's attributes will include
-the
-.B SHF_ALLOC
-bit.
-Otherwise, the bit will be off.
-This section is of type
-.BR SHT_SYMTAB .
-.TP
-.I .text
-This section holds the
-"text",
-or executable instructions, of a program.
-This section is of type
-.BR SHT_PROGBITS .
-The attributes used are
-.B SHF_ALLOC
-and
-.BR SHF_EXECINSTR .
-.\"
-.SS String and symbol tables
-String table sections hold null-terminated character sequences, commonly
-called strings.
-The object file uses these strings to represent symbol
-and section names.
-One references a string as an index into the string
-table section.
-The first byte, which is index zero, is defined to hold
-a null byte (\[aq]\e0\[aq]).
-Similarly, a string table's last byte is defined to
-hold a null byte, ensuring null termination for all strings.
-.PP
-An object file's symbol table holds information needed to locate and
-relocate a program's symbolic definitions and references.
-A symbol table
-index is a subscript into this array.
-.PP
-.in +4n
-.EX
-typedef struct {
- uint32_t st_name;
- Elf32_Addr st_value;
- uint32_t st_size;
- unsigned char st_info;
- unsigned char st_other;
- uint16_t st_shndx;
-} Elf32_Sym;
-.EE
-.in
-.PP
-.in +4n
-.EX
-typedef struct {
- uint32_t st_name;
- unsigned char st_info;
- unsigned char st_other;
- uint16_t st_shndx;
- Elf64_Addr st_value;
- uint64_t st_size;
-} Elf64_Sym;
-.EE
-.in
-.PP
-The 32-bit and 64-bit versions have the same members, just in a different
-order.
-.TP
-.I st_name
-This member holds an index into the object file's symbol string table,
-which holds character representations of the symbol names.
-If the value
-is nonzero, it represents a string table index that gives the symbol
-name.
-Otherwise, the symbol has no name.
-.TP
-.I st_value
-This member gives the value of the associated symbol.
-.TP
-.I st_size
-Many symbols have associated sizes.
-This member holds zero if the symbol
-has no size or an unknown size.
-.TP
-.I st_info
-This member specifies the symbol's type and binding attributes:
-.RS
-.TP
-.B STT_NOTYPE
-The symbol's type is not defined.
-.TP
-.B STT_OBJECT
-The symbol is associated with a data object.
-.TP
-.B STT_FUNC
-The symbol is associated with a function or other executable code.
-.TP
-.B STT_SECTION
-The symbol is associated with a section.
-Symbol table entries of
-this type exist primarily for relocation and normally have
-.B STB_LOCAL
-bindings.
-.TP
-.B STT_FILE
-By convention, the symbol's name gives the name of the source file
-associated with the object file.
-A file symbol has
-.B STB_LOCAL
-bindings, its section index is
-.BR SHN_ABS ,
-and it precedes the other
-.B STB_LOCAL
-symbols of the file, if it is present.
-.TP
-.BR STT_LOPROC ", " STT_HIPROC
-Values in the inclusive range
-.RB [ STT_LOPROC ,
-.BR STT_HIPROC ]
-are reserved for processor-specific semantics.
-.TP
-.B STB_LOCAL
-Local symbols are not visible outside the object file containing their
-definition.
-Local symbols of the same name may exist in multiple files
-without interfering with each other.
-.TP
-.B STB_GLOBAL
-Global symbols are visible to all object files being combined.
-One file's
-definition of a global symbol will satisfy another file's undefined
-reference to the same symbol.
-.TP
-.B STB_WEAK
-Weak symbols resemble global symbols, but their definitions have lower
-precedence.
-.TP
-.BR STB_LOPROC ", " STB_HIPROC
-Values in the inclusive range
-.RB [ STB_LOPROC ,
-.BR STB_HIPROC ]
-are reserved for processor-specific semantics.
-.RE
-.IP
-There are macros for packing and unpacking the binding and type fields:
-.RS
-.TP
-.BR ELF32_ST_BIND( \fIinfo\fP ) ", " ELF64_ST_BIND( \fIinfo\fP )
-Extract a binding from an
-.I st_info
-value.
-.TP
-.BR ELF32_ST_TYPE( \fIinfo ) ", " ELF64_ST_TYPE( \fIinfo\fP )
-Extract a type from an
-.I st_info
-value.
-.TP
-.BR ELF32_ST_INFO( \fIbind\fP ", " \fItype\fP ) ", " \
-ELF64_ST_INFO( \fIbind\fP ", " \fItype\fP )
-Convert a binding and a type into an
-.I st_info
-value.
-.RE
-.TP
-.I st_other
-This member defines the symbol visibility.
-.RS
-.TP
-.PD 0
-.B STV_DEFAULT
-Default symbol visibility rules.
-Global and weak symbols are available to other modules;
-references in the local module can be interposed
-by definitions in other modules.
-.TP
-.B STV_INTERNAL
-Processor-specific hidden class.
-.TP
-.B STV_HIDDEN
-Symbol is unavailable to other modules;
-references in the local module always resolve to the local symbol
-(i.e., the symbol can't be interposed by definitions in other modules).
-.TP
-.B STV_PROTECTED
-Symbol is available to other modules,
-but references in the local module always resolve to the local symbol.
-.PD
-.PP
-There are macros for extracting the visibility type:
-.PP
-.BR ELF32_ST_VISIBILITY (other)
-or
-.BR ELF64_ST_VISIBILITY (other)
-.RE
-.TP
-.I st_shndx
-Every symbol table entry is
-"defined"
-in relation to some section.
-This member holds the relevant section
-header table index.
-.\"
-.SS Relocation entries (Rel & Rela)
-Relocation is the process of connecting symbolic references with
-symbolic definitions.
-Relocatable files must have information that
-describes how to modify their section contents, thus allowing executable
-and shared object files to hold the right information for a process's
-program image.
-Relocation entries are these data.
-.PP
-Relocation structures that do not need an addend:
-.PP
-.in +4n
-.EX
-typedef struct {
- Elf32_Addr r_offset;
- uint32_t r_info;
-} Elf32_Rel;
-.EE
-.in
-.PP
-.in +4n
-.EX
-typedef struct {
- Elf64_Addr r_offset;
- uint64_t r_info;
-} Elf64_Rel;
-.EE
-.in
-.PP
-Relocation structures that need an addend:
-.PP
-.in +4n
-.EX
-typedef struct {
- Elf32_Addr r_offset;
- uint32_t r_info;
- int32_t r_addend;
-} Elf32_Rela;
-.EE
-.in
-.PP
-.in +4n
-.EX
-typedef struct {
- Elf64_Addr r_offset;
- uint64_t r_info;
- int64_t r_addend;
-} Elf64_Rela;
-.EE
-.in
-.TP
-.I r_offset
-This member gives the location at which to apply the relocation action.
-For a relocatable file, the value is the byte offset from the beginning
-of the section to the storage unit affected by the relocation.
-For an
-executable file or shared object, the value is the virtual address of
-the storage unit affected by the relocation.
-.TP
-.I r_info
-This member gives both the symbol table index with respect to which the
-relocation must be made and the type of relocation to apply.
-Relocation
-types are processor-specific.
-When the text refers to a relocation
-entry's relocation type or symbol table index, it means the result of
-applying
-.B ELF[32|64]_R_TYPE
-or
-.BR ELF[32|64]_R_SYM ,
-respectively, to the entry's
-.I r_info
-member.
-.TP
-.I r_addend
-This member specifies a constant addend used to compute the value to be
-stored into the relocatable field.
-.\"
-.SS Dynamic tags (Dyn)
-The
-.I .dynamic
-section contains a series of structures that hold relevant
-dynamic linking information.
-The
-.I d_tag
-member controls the interpretation
-of
-.IR d_un .
-.PP
-.in +4n
-.EX
-typedef struct {
- Elf32_Sword d_tag;
- union {
- Elf32_Word d_val;
- Elf32_Addr d_ptr;
- } d_un;
-} Elf32_Dyn;
-extern Elf32_Dyn _DYNAMIC[];
-.EE
-.in
-.PP
-.in +4n
-.EX
-typedef struct {
- Elf64_Sxword d_tag;
- union {
- Elf64_Xword d_val;
- Elf64_Addr d_ptr;
- } d_un;
-} Elf64_Dyn;
-extern Elf64_Dyn _DYNAMIC[];
-.EE
-.in
-.TP
-.I d_tag
-This member may have any of the following values:
-.RS
-.TP 12
-.B DT_NULL
-Marks end of dynamic section
-.TP
-.B DT_NEEDED
-String table offset to name of a needed library
-.TP
-.B DT_PLTRELSZ
-Size in bytes of PLT relocation entries
-.TP
-.B DT_PLTGOT
-Address of PLT and/or GOT
-.TP
-.B DT_HASH
-Address of symbol hash table
-.TP
-.B DT_STRTAB
-Address of string table
-.TP
-.B DT_SYMTAB
-Address of symbol table
-.TP
-.B DT_RELA
-Address of Rela relocation table
-.TP
-.B DT_RELASZ
-Size in bytes of the Rela relocation table
-.TP
-.B DT_RELAENT
-Size in bytes of a Rela relocation table entry
-.TP
-.B DT_STRSZ
-Size in bytes of string table
-.TP
-.B DT_SYMENT
-Size in bytes of a symbol table entry
-.TP
-.B DT_INIT
-Address of the initialization function
-.TP
-.B DT_FINI
-Address of the termination function
-.TP
-.B DT_SONAME
-String table offset to name of shared object
-.TP
-.B DT_RPATH
-String table offset to library search path (deprecated)
-.TP
-.B DT_SYMBOLIC
-Alert linker to search this shared object before the executable for symbols
-.TP
-.B DT_REL
-Address of Rel relocation table
-.TP
-.B DT_RELSZ
-Size in bytes of Rel relocation table
-.TP
-.B DT_RELENT
-Size in bytes of a Rel table entry
-.TP
-.B DT_PLTREL
-Type of relocation entry to which the PLT refers (Rela or Rel)
-.TP
-.B DT_DEBUG
-Undefined use for debugging
-.TP
-.B DT_TEXTREL
-Absence of this entry indicates that no relocation entries should
-apply to a nonwritable segment
-.TP
-.B DT_JMPREL
-Address of relocation entries associated solely with the PLT
-.TP
-.B DT_BIND_NOW
-Instruct dynamic linker to process all relocations before
-transferring control to the executable
-.TP
-.B DT_RUNPATH
-String table offset to library search path
-.TP
-.BR DT_LOPROC ", " DT_HIPROC
-Values in the inclusive range
-.RB [ DT_LOPROC ,
-.BR DT_HIPROC ]
-are reserved for processor-specific semantics
-.RE
-.TP
-.I d_val
-This member represents integer values with various interpretations.
-.TP
-.I d_ptr
-This member represents program virtual addresses.
-When interpreting
-these addresses, the actual address should be computed based on the
-original file value and memory base address.
-Files do not contain
-relocation entries to fixup these addresses.
-.TP
-.I _DYNAMIC
-Array containing all the dynamic structures in the
-.I .dynamic
-section.
-This is automatically populated by the linker.
-.\" GABI ELF Reference for Note Sections:
-.\" http://www.sco.com/developers/gabi/latest/ch5.pheader.html#note_section
-.\"
-.\" Note that it implies the sizes and alignments of notes depend on the ELF
-.\" size (e.g. 32-bit ELFs have three 4-byte words and use 4-byte alignment
-.\" while 64-bit ELFs use 8-byte words & alignment), but that is not the case
-.\" in the real world. Notes always have three 4-byte words as can be seen
-.\" in the source links below (remember that Elf64_Word is a 32-bit quantity).
-.\" glibc: https://sourceware.org/git/?p=glibc.git;a=blob;f=elf/elf.h;h=9e59b3275917549af0cebe1f2de9ded3b7b10bf2#l1173
-.\" binutils: https://sourceware.org/git/?p=binutils-gdb.git;a=blob;f=binutils/readelf.c;h=274ddd17266aef6e4ad1f67af8a13a21500ff2af#l15943
-.\" Linux: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/elf.h?h=v4.8#n422
-.\" Solaris: https://docs.oracle.com/cd/E23824_01/html/819-0690/chapter6-18048.html
-.\" FreeBSD: https://svnweb.freebsd.org/base/head/sys/sys/elf_common.h?revision=303677&view=markup#l33
-.\" NetBSD: https://www.netbsd.org/docs/kernel/elf-notes.html
-.\" OpenBSD: https://github.com/openbsd/src/blob/master/sys/sys/exec_elf.h#L533
-.\"
-.SS Notes (Nhdr)
-ELF notes allow for appending arbitrary information for the system to use.
-They are largely used by core files
-.RI ( e_type
-of
-.BR ET_CORE ),
-but many projects define their own set of extensions.
-For example,
-the GNU tool chain uses ELF notes to pass information from
-the linker to the C library.
-.PP
-Note sections contain a series of notes (see the
-.I struct
-definitions below).
-Each note is followed by the name field (whose length is defined in
-\fIn_namesz\fR) and then by the descriptor field (whose length is defined in
-\fIn_descsz\fR) and whose starting address has a 4 byte alignment.
-Neither field is defined in the note struct due to their arbitrary lengths.
-.PP
-An example for parsing out two consecutive notes should clarify their layout
-in memory:
-.PP
-.in +4n
-.EX
-void *memory, *name, *desc;
-Elf64_Nhdr *note, *next_note;
-\&
-/* The buffer is pointing to the start of the section/segment. */
-note = memory;
-\&
-/* If the name is defined, it follows the note. */
-name = note\->n_namesz == 0 ? NULL : memory + sizeof(*note);
-\&
-/* If the descriptor is defined, it follows the name
- (with alignment). */
-\&
-desc = note\->n_descsz == 0 ? NULL :
- memory + sizeof(*note) + ALIGN_UP(note\->n_namesz, 4);
-\&
-/* The next note follows both (with alignment). */
-next_note = memory + sizeof(*note) +
- ALIGN_UP(note\->n_namesz, 4) +
- ALIGN_UP(note\->n_descsz, 4);
-.EE
-.in
-.PP
-Keep in mind that the interpretation of
-.I n_type
-depends on the namespace defined by the
-.I n_namesz
-field.
-If the
-.I n_namesz
-field is not set (e.g., is 0), then there are two sets of notes:
-one for core files and one for all other ELF types.
-If the namespace is unknown, then tools will usually fallback to these sets
-of notes as well.
-.PP
-.in +4n
-.EX
-typedef struct {
- Elf32_Word n_namesz;
- Elf32_Word n_descsz;
- Elf32_Word n_type;
-} Elf32_Nhdr;
-.EE
-.in
-.PP
-.in +4n
-.EX
-typedef struct {
- Elf64_Word n_namesz;
- Elf64_Word n_descsz;
- Elf64_Word n_type;
-} Elf64_Nhdr;
-.EE
-.in
-.TP
-.I n_namesz
-The length of the name field in bytes.
-The contents will immediately follow this note in memory.
-The name is null terminated.
-For example, if the name is "GNU", then
-.I n_namesz
-will be set to 4.
-.TP
-.I n_descsz
-The length of the descriptor field in bytes.
-The contents will immediately follow the name field in memory.
-.TP
-.I n_type
-Depending on the value of the name field, this member may have any of the
-following values:
-.RS
-.TP 5
-.B Core files (e_type = ET_CORE)
-Notes used by all core files.
-These are highly operating system or architecture specific and often require
-close coordination with kernels, C libraries, and debuggers.
-These are used when the namespace is the default (i.e.,
-.I n_namesz
-will be set to 0), or a fallback when the namespace is unknown.
-.RS
-.TP 21
-.PD 0
-.B NT_PRSTATUS
-prstatus struct
-.TP
-.B NT_FPREGSET
-fpregset struct
-.TP
-.B NT_PRPSINFO
-prpsinfo struct
-.TP
-.B NT_PRXREG
-prxregset struct
-.TP
-.B NT_TASKSTRUCT
-task structure
-.TP
-.B NT_PLATFORM
-String from sysinfo(SI_PLATFORM)
-.TP
-.B NT_AUXV
-auxv array
-.TP
-.B NT_GWINDOWS
-gwindows struct
-.TP
-.B NT_ASRS
-asrset struct
-.TP
-.B NT_PSTATUS
-pstatus struct
-.TP
-.B NT_PSINFO
-psinfo struct
-.TP
-.B NT_PRCRED
-prcred struct
-.TP
-.B NT_UTSNAME
-utsname struct
-.TP
-.B NT_LWPSTATUS
-lwpstatus struct
-.TP
-.B NT_LWPSINFO
-lwpinfo struct
-.TP
-.B NT_PRFPXREG
-fprxregset struct
-.TP
-.B NT_SIGINFO
-siginfo_t (size might increase over time)
-.TP
-.B NT_FILE
-Contains information about mapped files
-.TP
-.B NT_PRXFPREG
-user_fxsr_struct
-.TP
-.B NT_PPC_VMX
-PowerPC Altivec/VMX registers
-.TP
-.B NT_PPC_SPE
-PowerPC SPE/EVR registers
-.TP
-.B NT_PPC_VSX
-PowerPC VSX registers
-.TP
-.B NT_386_TLS
-i386 TLS slots (struct user_desc)
-.TP
-.B NT_386_IOPERM
-x86 io permission bitmap (1=deny)
-.TP
-.B NT_X86_XSTATE
-x86 extended state using xsave
-.TP
-.B NT_S390_HIGH_GPRS
-s390 upper register halves
-.TP
-.B NT_S390_TIMER
-s390 timer register
-.TP
-.B NT_S390_TODCMP
-s390 time-of-day (TOD) clock comparator register
-.TP
-.B NT_S390_TODPREG
-s390 time-of-day (TOD) programmable register
-.TP
-.B NT_S390_CTRS
-s390 control registers
-.TP
-.B NT_S390_PREFIX
-s390 prefix register
-.TP
-.B NT_S390_LAST_BREAK
-s390 breaking event address
-.TP
-.B NT_S390_SYSTEM_CALL
-s390 system call restart data
-.TP
-.B NT_S390_TDB
-s390 transaction diagnostic block
-.TP
-.B NT_ARM_VFP
-ARM VFP/NEON registers
-.TP
-.B NT_ARM_TLS
-ARM TLS register
-.TP
-.B NT_ARM_HW_BREAK
-ARM hardware breakpoint registers
-.TP
-.B NT_ARM_HW_WATCH
-ARM hardware watchpoint registers
-.TP
-.B NT_ARM_SYSTEM_CALL
-ARM system call number
-.PD
-.RE
-.TP
-.B n_name = GNU
-Extensions used by the GNU tool chain.
-.RS
-.TP
-.B NT_GNU_ABI_TAG
-Operating system (OS) ABI information.
-The desc field will be 4 words:
-.IP
-.PD 0
-.RS
-.IP [0] 5
-OS descriptor
-(\fBELF_NOTE_OS_LINUX\fR, \fBELF_NOTE_OS_GNU\fR, and so on)`
-.IP [1]
-major version of the ABI
-.IP [2]
-minor version of the ABI
-.IP [3]
-subminor version of the ABI
-.RE
-.PD
-.TP
-.B NT_GNU_HWCAP
-Synthetic hwcap information.
-The desc field begins with two words:
-.IP
-.PD 0
-.RS
-.IP [0] 5
-number of entries
-.IP [1]
-bit mask of enabled entries
-.RE
-.PD
-.IP
-Then follow variable-length entries, one byte followed by a null-terminated
-hwcap name string.
-The byte gives the bit number to test if enabled, (1U << bit) & bit mask.
-.TP
-.B NT_GNU_BUILD_ID
-Unique build ID as generated by the GNU
-.BR ld (1)
-.B \-\-build\-id
-option.
-The desc consists of any nonzero number of bytes.
-.TP
-.B NT_GNU_GOLD_VERSION
-The desc contains the GNU Gold linker version used.
-.RE
-.TP
-.B Default/unknown namespace (e_type != ET_CORE)
-These are used when the namespace is the default (i.e.,
-.I n_namesz
-will be set to 0), or a fallback when the namespace is unknown.
-.RS
-.TP 12
-.PD 0
-.B NT_VERSION
-A version string of some sort.
-.TP
-.B NT_ARCH
-Architecture information.
-.PD
-.RE
-.RE
-.SH NOTES
-.\" OpenBSD
-.\" ELF support first appeared in
-.\" OpenBSD 1.2,
-.\" although not all supported platforms use it as the native
-.\" binary file format.
-ELF first appeared in
-System V.
-The ELF format is an adopted standard.
-.PP
-The extensions for
-.IR e_phnum ,
-.IR e_shnum ,
-and
-.I e_shstrndx
-respectively are
-Linux extensions.
-Sun, BSD, and AMD64 also support them; for further information,
-look under SEE ALSO.
-.\" .SH AUTHORS
-.\" The original version of this manual page was written by
-.\" .An Jeroen Ruigrok van der Werven
-.\" .Aq asmodai@FreeBSD.org
-.\" with inspiration from BSDi's
-.\" .Bsx
-.\" .Nm elf
-.\" man page.
-.SH SEE ALSO
-.BR as (1),
-.BR elfedit (1),
-.BR gdb (1),
-.BR ld (1),
-.BR nm (1),
-.BR objcopy (1),
-.BR objdump (1),
-.BR patchelf (1),
-.BR readelf (1),
-.BR size (1),
-.BR strings (1),
-.BR strip (1),
-.BR execve (2),
-.BR dl_iterate_phdr (3),
-.BR core (5),
-.BR ld.so (8)
-.PP
-Hewlett-Packard,
-.IR "Elf-64 Object File Format" .
-.PP
-Santa Cruz Operation,
-.IR "System V Application Binary Interface" .
-.PP
-UNIX System Laboratories,
-"Object Files",
-.IR "Executable and Linking Format (ELF)" .
-.PP
-Sun Microsystems,
-.IR "Linker and Libraries Guide" .
-.PP
-AMD64 ABI Draft,
-.IR "System V Application Binary Interface AMD64 Architecture Processor Supplement" .
diff --git a/man5/erofs.5 b/man5/erofs.5
deleted file mode 100644
index 6c607d66b..000000000
--- a/man5/erofs.5
+++ /dev/null
@@ -1,97 +0,0 @@
-.\" Copyright (c) 2016 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH erofs 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-erofs \- the Enhanced Read-Only File System
-.SH DESCRIPTION
-.B erofs
-is a create-once read-only filesystem,
-with support for compression and a multi-device backing store.
-.PP
-There are two inode formats:
-.IP \[bu] 3
-32-byte compact with 16-bit UID/GID,
-32-bit file size,
-and no file times
-.PD 0
-.IP \[bu]
-64-byte extended with 32-bit UID/GID,
-64-bit file size,
-and a modification time
-.RI ( st_mtim ).
-.PD
-.\" See fs/erofs/super.c:shmem_parse_options for options it supports.
-.SS Mount options
-.TP
-.B user_xattr
-.TQ
-.B nouser_xattr
-Controls whether
-.I user
-extended attributes are exposed.
-Defaults to yes.
-.TP
-.B acl
-.TQ
-.B noacl
-Controls whether POSIX
-.BR acl (5)s
-are exposed.
-Defaults to yes.
-.TP
-.BR cache_strategy = disabled | readahead | readaround
-Cache allocation for compressed files:
-never, if reading from start of file, regardless of position.
-Defaults to
-.BR readaround .
-.TP
-.B dax
-.TQ
-.BR dax = always | never
-Direct Access control.
-If
-.B always
-and the source device supports DAX, uncompressed non-inlined files
-will be read directly, without going through the page cache.
-.B dax
-is a synonym for
-.BR always .
-Defaults to unset, which is equivalent to
-.BR never .
-.TP
-.BR device = \fIblobdev\fP
-Add extra device holding some of the data.
-Must be given as many times and in the same order as
-.B \-\-blobdev
-was to
-.BR mkfs.erofs (1).
-.\" Nominally there's a device_table feature and it somehow scans(?) for them,
-.\" cf. super.c:erofs_scan_devices(), but I haven't gotten it to work
-.TP
-.BR domain_id = \fIdid\fP
-.TQ
-.BR fsid = \fIid\fP
-Control CacheFiles on-demand read support.
-To be documented.
-.SH VERSIONS
-.B erofs
-images are versioned through the use of feature flags;
-these are listed in the
-.B \-E
-section of
-.BR mkfs.erofs (1),
-.SH CONFIGURATION
-Linux must be configured with the
-.B CONFIG_EROFS_FS
-option to mount EROFS filesystems.
-There are sub-configuration items that restrict the availability
-of some of the parameters above.
-.SH SEE ALSO
-.BR mkfs.erofs (1),
-.BR fsck.erofs (1),
-.BR dump.erofs (1)
-.PP
-.I Documentation/filesystems/erofs.txt
-in the Linux source.
diff --git a/man5/filesystems.5 b/man5/filesystems.5
deleted file mode 100644
index ba795f956..000000000
--- a/man5/filesystems.5
+++ /dev/null
@@ -1,227 +0,0 @@
-.\" Copyright 1996 Daniel Quinlan (Daniel.Quinlan@linux.org)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 2007-12-14 mtk Added Reiserfs, XFS, JFS.
-.\"
-.TH filesystems 5 (date) "Linux man-pages (unreleased)"
-.nh
-.SH NAME
-filesystems \- Linux filesystem types: ext, ext2, ext3, ext4, hpfs, iso9660,
-JFS, minix, msdos, ncpfs nfs, ntfs, proc, Reiserfs, smb, sysv, umsdos, vfat,
-XFS, xiafs
-.SH DESCRIPTION
-When, as is customary, the
-.B proc
-filesystem is mounted on
-.IR /proc ,
-you can find in the file
-.I /proc/filesystems
-which filesystems your kernel currently supports;
-see
-.BR proc (5)
-for more details.
-There is also a legacy
-.BR sysfs (2)
-system call (whose availability is controlled by the
-.\" commit: 6af9f7bf3c399e0ab1eee048e13572c6d4e15fe9
-.B CONFIG_SYSFS_SYSCALL
-kernel build configuration option since Linux 3.15)
-that enables enumeration of the currently available filesystem types
-regardless of
-.I /proc
-availability and/or sanity.
-.PP
-If you need a currently unsupported filesystem, insert the corresponding
-kernel module or recompile the kernel.
-.PP
-In order to use a filesystem, you have to
-.I mount
-it; see
-.BR mount (2)
-and
-.BR mount (8).
-.PP
-The following list provides a
-short description of the available or historically available
-filesystems in the Linux kernel.
-See the kernel documentation for a comprehensive
-description of all options and limitations.
-.TP
-.B erofs
-is the Enhanced Read-Only File System, stable since Linux 5.4.
-.\" commit 47e4937a4a7ca4184fd282791dfee76c6799966a moves it out of staging
-See
-.BR erofs (5).
-.TP
-.B ext
-is an elaborate extension of the
-.B minix
-filesystem.
-It has been completely superseded by the second version
-of the extended filesystem
-.RB ( ext2 )
-and has been removed from the kernel (in Linux 2.1.21).
-.TP
-.B ext2
-is a disk filesystem that was used by Linux for fixed disks
-as well as removable media.
-The second extended filesystem was designed as an extension of the
-extended filesystem
-.RB ( ext ).
-See
-.BR ext2 (5).
-.TP
-.B ext3
-is a journaling version of the
-.B ext2
-filesystem.
-It is easy to
-switch back and forth between
-.B ext2
-and
-.BR ext3 .
-See
-.BR ext3 (5).
-.TP
-.B ext4
-is a set of upgrades to
-.B ext3
-including substantial performance and
-reliability enhancements,
-plus large increases in volume, file, and directory size limits.
-See
-.BR ext4 (5).
-.TP
-.B hpfs
-is the High Performance Filesystem, used in OS/2.
-This filesystem is
-read-only under Linux due to the lack of available documentation.
-.TP
-.B iso9660
-is a CD-ROM filesystem type conforming to the ISO 9660 standard.
-.RS
-.TP
-.B "High Sierra"
-Linux supports High Sierra, the precursor to the ISO 9660 standard for
-CD-ROM filesystems.
-It is automatically recognized within the
-.B iso9660
-filesystem support under Linux.
-.TP
-.B "Rock Ridge"
-Linux also supports the System Use Sharing Protocol records specified
-by the Rock Ridge Interchange Protocol.
-They are used to further describe the files in the
-.B iso9660
-filesystem to a UNIX host, and provide information such as long
-filenames, UID/GID, POSIX permissions, and devices.
-It is automatically recognized within the
-.B iso9660
-filesystem support under Linux.
-.RE
-.TP
-.B JFS
-is a journaling filesystem, developed by IBM,
-that was integrated into Linux 2.4.24.
-.TP
-.B minix
-is the filesystem used in the Minix operating system, the first to run
-under Linux.
-It has a number of shortcomings, including a 64\ MB partition size
-limit, short filenames, and a single timestamp.
-It remains useful for floppies and RAM disks.
-.TP
-.B msdos
-is the filesystem used by DOS, Windows, and some OS/2 computers.
-.B msdos
-filenames can be no longer than 8 characters, followed by an
-optional period and 3 character extension.
-.TP
-.B ncpfs
-is a network filesystem that supports the NCP protocol,
-used by Novell NetWare.
-It was removed from the kernel in Linux 4.17.
-.IP
-To use
-.BR ncpfs ,
-you need special programs, which can be found at
-.UR ftp://ftp.gwdg.de\:/pub\:/linux\:/misc\:/ncpfs
-.UE .
-.TP
-.B nfs
-is the network filesystem used to access disks located on remote computers.
-.TP
-.B ntfs
-is the filesystem native to Microsoft Windows NT,
-supporting features like ACLs, journaling, encryption, and so on.
-.TP
-.B proc
-is a pseudo filesystem which is used as an interface to kernel data
-structures rather than reading and interpreting
-.IR /dev/kmem .
-In particular, its files do not take disk space.
-See
-.BR proc (5).
-.TP
-.B Reiserfs
-is a journaling filesystem, designed by Hans Reiser,
-that was integrated into Linux 2.4.1.
-.TP
-.B smb
-is a network filesystem that supports the SMB protocol, used by
-Windows.
-See
-.UR https://www.samba.org\:/samba\:/smbfs/
-.UE .
-.TP
-.B sysv
-is an implementation of the System V/Coherent filesystem for Linux.
-It implements all of Xenix FS, System V/386 FS, and Coherent FS.
-.TP
-.B umsdos
-is an extended DOS filesystem used by Linux.
-It adds capability for
-long filenames, UID/GID, POSIX permissions, and special files
-(devices, named pipes, etc.) under the DOS filesystem, without
-sacrificing compatibility with DOS.
-.TP
-.B tmpfs
-is a filesystem whose contents reside in virtual memory.
-Since the files on such filesystems typically reside in RAM,
-file access is extremely fast.
-See
-.BR tmpfs (5).
-.TP
-.B vfat
-is an extended FAT filesystem used by Microsoft Windows95 and Windows NT.
-.B vfat
-adds the capability to use long filenames under the MSDOS filesystem.
-.TP
-.B XFS
-is a journaling filesystem, developed by SGI,
-that was integrated into Linux 2.4.20.
-.TP
-.B xiafs
-was designed and implemented to be a stable, safe filesystem by
-extending the Minix filesystem code.
-It provides the basic most
-requested features without undue complexity.
-The
-.B xiafs
-filesystem is no longer actively developed or maintained.
-It was removed from the kernel in Linux 2.1.21.
-.SH SEE ALSO
-.BR fuse (4),
-.BR btrfs (5),
-.BR ext2 (5),
-.BR ext3 (5),
-.BR ext4 (5),
-.BR nfs (5),
-.BR proc (5),
-.BR sysfs (5),
-.BR tmpfs (5),
-.BR xfs (5),
-.BR fsck (8),
-.BR mkfs (8),
-.BR mount (8)
diff --git a/man5/fs.5 b/man5/fs.5
deleted file mode 100644
index 3ec300ca2..000000000
--- a/man5/fs.5
+++ /dev/null
@@ -1 +0,0 @@
-.so man5/filesystems.5
diff --git a/man5/ftpusers.5 b/man5/ftpusers.5
deleted file mode 100644
index 214a5f99d..000000000
--- a/man5/ftpusers.5
+++ /dev/null
@@ -1,42 +0,0 @@
-.\" Copyright (c) 2000 Christoph J. Thompson <obituary@linuxbe.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH ftpusers 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ftpusers \- list of users that may not log in via the FTP daemon
-.SH DESCRIPTION
-The text file
-.B ftpusers
-contains a list of users that may not log in using the
-File Transfer Protocol (FTP) server daemon.
-This file is used not merely for
-system administration purposes but also for improving security within a TCP/IP
-networked environment.
-.PP
-The
-.B ftpusers
-file will typically contain a list of the users that
-either have no business using ftp or have too many privileges to be allowed
-to log in through the FTP server daemon.
-Such users usually include root, daemon, bin, uucp, and news.
-.PP
-If your FTP server daemon doesn't use
-.BR ftpusers ,
-then it is suggested that you read its documentation to find out how to
-block access for certain users.
-Washington University FTP server Daemon
-(wuftpd) and Professional FTP Daemon (proftpd) are known to make use of
-.BR ftpusers .
-.SS Format
-The format of
-.B ftpusers
-is very simple.
-There is one account name (or username) per line.
-Lines starting with a # are ignored.
-.SH FILES
-.I /etc/ftpusers
-.SH SEE ALSO
-.BR passwd (5),
-.BR proftpd (8),
-.BR wuftpd (8)
diff --git a/man5/gai.conf.5 b/man5/gai.conf.5
deleted file mode 100644
index 864f2a4a1..000000000
--- a/man5/gai.conf.5
+++ /dev/null
@@ -1,89 +0,0 @@
-.\" Copyright (C) 2006 Red Hat, Inc. All rights reserved.
-.\" Author: Ulrich Drepper <drepper@redhat.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-only
-.\"
-.TH gai.conf 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-gai.conf \- getaddrinfo(3) configuration file
-.SH DESCRIPTION
-A call to
-.BR getaddrinfo (3)
-might return multiple answers.
-According to RFC\ 3484 these answers must be sorted so that
-the answer with the highest success rate is first in the list.
-The RFC provides an algorithm for the sorting.
-The static rules are not always adequate, though.
-For this reason,
-the RFC also requires that system administrators should have the possibility
-to dynamically change the sorting.
-For the glibc implementation, this can be achieved with the
-.I /etc/gai.conf
-file.
-.PP
-Each line in the configuration file consists of a keyword and its parameters.
-White spaces in any place are ignored.
-Lines starting with \[aq]#\[aq] are comments and are ignored.
-.PP
-The keywords currently recognized are:
-.TP
-\fBlabel\fR \fInetmask\fR \fIprecedence\fR
-The value is added to the label table used in the RFC\ 3484 sorting.
-If any \fBlabel\fR definition is present in the configuration file,
-the default table is not used.
-All the label definitions
-of the default table which are to be maintained have to be duplicated.
-Following the keyword,
-the line has to contain a network mask and a precedence value.
-.TP
-\fBprecedence\fR \fInetmask\fR \fIprecedence\fR
-This keyword is similar to \fBlabel\fR, but instead the value is added
-to the precedence table as specified in RFC\ 3484.
-Once again, the
-presence of a single \fBprecedence\fR line in the configuration file
-causes the default table to not be used.
-.TP
-\fBreload\fR <\fByes\fR|\fBno\fR>
-This keyword controls whether a process checks whether the configuration
-file has been changed since the last time it was read.
-If the value is
-"\fByes\fR", the file is reread.
-This might cause problems in multithreaded
-applications and is generally a bad idea.
-The default is "\fBno\fR".
-.TP
-\fBscopev4\fR \fImask\fR \fIvalue\fR
-Add another rule to the RFC\ 3484 scope table for IPv4 address.
-By default, the scope IDs described in section 3.2 in RFC\ 3438 are used.
-Changing these defaults should hardly ever be necessary.
-.SH FILES
-\fI/etc/gai.conf\fR
-.SH VERSIONS
-The
-.I gai.conf
-.\" Added in 2006
-file is supported since glibc 2.5.
-.SH EXAMPLES
-The default table according to RFC\ 3484 would be specified with the
-following configuration file:
-.PP
-.in +4n
-.EX
-label ::1/128 0
-label ::/0 1
-label 2002::/16 2
-label ::/96 3
-label ::ffff:0:0/96 4
-precedence ::1/128 50
-precedence ::/0 40
-precedence 2002::/16 30
-precedence ::/96 20
-precedence ::ffff:0:0/96 10
-.EE
-.in
-.\" .SH AUTHOR
-.\" Ulrich Drepper <drepper@redhat.com>
-.\"
-.SH SEE ALSO
-.BR getaddrinfo (3),
-RFC\ 3484
diff --git a/man5/group.5 b/man5/group.5
deleted file mode 100644
index 3a8dcf131..000000000
--- a/man5/group.5
+++ /dev/null
@@ -1,55 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sat Jul 24 17:06:03 1993 by Rik Faith (faith@cs.unc.edu)
-.TH group 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-group \- user group file
-.SH DESCRIPTION
-The
-.I /etc/group
-file is a text file that defines the groups on the system.
-There is one entry per line, with the following format:
-.PP
-.in +4n
-.EX
-group_name:password:GID:user_list
-.EE
-.in
-.PP
-The fields are as follows:
-.TP
-.I group_name
-the name of the group.
-.TP
-.I password
-the (encrypted) group password.
-If this field is empty, no password is needed.
-.TP
-.I GID
-the numeric group ID.
-.TP
-.I user_list
-a list of the usernames that are members of this group, separated by commas.
-.SH FILES
-.I /etc/group
-.SH BUGS
-As the 4.2BSD
-.BR initgroups (3)
-man page says: no one seems to keep
-.I /etc/group
-up-to-date.
-.SH SEE ALSO
-.BR chgrp (1),
-.BR gpasswd (1),
-.BR groups (1),
-.BR login (1),
-.BR newgrp (1),
-.BR sg (1),
-.BR getgrent (3),
-.BR getgrnam (3),
-.BR gshadow (5),
-.BR passwd (5),
-.BR vigr (8)
diff --git a/man5/host.conf.5 b/man5/host.conf.5
deleted file mode 100644
index e0c134e60..000000000
--- a/man5/host.conf.5
+++ /dev/null
@@ -1,204 +0,0 @@
-.\" Copyright (c) 1997 Martin Schulze (joey@infodrom.north.de)
-.\" Much of the text is copied from the manpage of resolv+(8).
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 2003-08-23 Martin Schulze <joey@infodrom.org> Updated according to glibc 2.3.2
-.TH host.conf 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-host.conf \- resolver configuration file
-.SH DESCRIPTION
-The file
-.I /etc/host.conf
-contains configuration information specific to the resolver library.
-It should contain one configuration keyword per line, followed by
-appropriate configuration information.
-The following keywords are recognized:
-.TP
-.I trim
-This keyword may be listed more than once.
-Each time it should be
-followed by a list of domains, separated by colons (\[aq]:\[aq]), semicolons
-(\[aq];\[aq]) or commas (\[aq],\[aq]), with the leading dot.
-When set, the
-resolver library will automatically trim the given domain name from the
-end of any hostname resolved via DNS.
-This is intended for use with
-local hosts and domains.
-(Related note:
-.I trim
-will not affect hostnames gathered via NIS or the
-.BR hosts (5)
-file.
-Care should be taken to
-ensure that the first hostname for each entry in the hosts file is
-fully qualified or unqualified, as appropriate for the local
-installation.)
-.TP
-.I multi
-Valid values are
-.IR on " and " off .
-If set to
-.IR on ,
-the resolver library will return all valid addresses for a host that
-appears in the
-.I /etc/hosts
-file,
-instead of only the first.
-This is
-.I off
-by default, as it may cause a substantial performance loss at sites
-with large hosts files.
-.TP
-.I reorder
-Valid values are
-.IR on " and " off .
-If set to
-.IR on ,
-the resolver library
-will attempt to reorder host addresses so that local addresses
-(i.e., on the same subnet) are listed first when a
-.BR gethostbyname (3)
-is performed.
-Reordering is done for all lookup methods.
-The default value is
-.IR off .
-.SH ENVIRONMENT
-The following environment variables can be used to allow users to
-override the behavior which is configured in
-.IR /etc/host.conf :
-.TP
-.B RESOLV_HOST_CONF
-If set, this variable points to a file that should be read instead of
-.IR /etc/host.conf .
-.TP
-.B RESOLV_MULTI
-Overrides the
-.I multi
-command.
-.TP
-.B RESOLV_REORDER
-Overrides the
-.I reorder
-command.
-.TP
-.B RESOLV_ADD_TRIM_DOMAINS
-A list of domains,
-separated by
-colons (\[aq]:\[aq]), semicolons (\[aq];\[aq]), or commas (\[aq],\[aq]),
-with the leading dot,
-which will be added to the list of domains that should be trimmed.
-.TP
-.B RESOLV_OVERRIDE_TRIM_DOMAINS
-A list of domains,
-separated by
-colons (\[aq]:\[aq]), semicolons (\[aq];\[aq]), or commas (\[aq],\[aq]),
-with the leading dot,
-which will replace the list of domains that should be trimmed.
-Overrides the
-.I trim
-command.
-.SH FILES
-.TP
-.I /etc/host.conf
-Resolver configuration file
-.TP
-.I /etc/resolv.conf
-Resolver configuration file
-.TP
-.I /etc/hosts
-Local hosts database
-.SH NOTES
-The following differences exist compared to the original implementation.
-A new command
-.I spoof
-and a new environment variable
-.B RESOLV_SPOOF_CHECK
-can take arguments like
-.IR off ", " nowarn ", and " warn .
-Line comments can appear anywhere and not only at the beginning of a line.
-.SS Historical
-The
-.BR nsswitch.conf (5)
-file is the modern way of controlling the order of host lookups.
-.PP
-In glibc 2.4 and earlier, the following keyword is recognized:
-.TP
-.I order
-This keyword specifies how host lookups are to be performed.
-It should be followed by one or more lookup methods, separated by commas.
-Valid methods are
-.IR bind ", " hosts ", and " nis .
-.TP
-.B RESOLV_SERV_ORDER
-Overrides the
-.I order
-command.
-.PP
-.\" commit 7d68cdaa4f748e87ee921f587ee2d483db624b3d
-Since glibc 2.0.7, and up through glibc 2.24,
-the following keywords and environment variable
-have been recognized but never implemented:
-.TP
-.I nospoof
-Valid values are
-.IR on " and " off .
-If set to
-.IR on ,
-the resolver library will attempt to prevent hostname spoofing to
-enhance the security of
-.BR rlogin " and " rsh .
-It works as follows: after performing a host address lookup,
-the resolver library will perform a hostname lookup for that address.
-If the two hostnames
-do not match, the query fails.
-The default value is
-.IR off .
-.TP
-.I spoofalert
-Valid values are
-.IR on " and " off .
-If this option is set to
-.I on
-and the
-.I nospoof
-option is also set,
-the resolver library will log a warning of the error via the
-syslog facility.
-The default value is
-.IR off .
-.TP
-.I spoof
-Valid values are
-.IR off ", " nowarn ", and " warn .
-If this option is set to
-.IR off ,
-spoofed addresses are permitted and no warnings will be emitted
-via the syslog facility.
-If this option is set to
-.IR warn ,
-the resolver library will attempt to prevent hostname spoofing to
-enhance the security and log a warning of the error via the syslog
-facility.
-If this option is set to
-.IR nowarn ,
-the resolver library will attempt to prevent hostname spoofing to
-enhance the security but not emit warnings via the syslog facility.
-Setting this option to anything else is equal to setting it to
-.IR nowarn .
-.TP
-.B RESOLV_SPOOF_CHECK
-Overrides the
-.IR nospoof ", " spoofalert ", and " spoof
-commands in the same way as the
-.I spoof
-command is parsed.
-Valid values are
-.IR off ", " nowarn ", and " warn .
-.SH SEE ALSO
-.BR gethostbyname (3),
-.BR hosts (5),
-.BR nsswitch.conf (5),
-.BR resolv.conf (5),
-.BR hostname (7),
-.BR named (8)
diff --git a/man5/hosts.5 b/man5/hosts.5
deleted file mode 100644
index b89dd98e1..000000000
--- a/man5/hosts.5
+++ /dev/null
@@ -1,122 +0,0 @@
-.\" Copyright (c) 2000 Manoj Srivastava <srivasta@debian.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Minor polishing, aeb
-.\" Modified, 2002-06-16, Mike Coleman
-.\"
-.TH hosts 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-hosts \- static table lookup for hostnames
-.SH SYNOPSIS
-.nf
-.B /etc/hosts
-.fi
-.SH DESCRIPTION
-This manual page describes the format of the
-.I /etc/hosts
-file.
-This file is a simple text file that associates IP addresses
-with hostnames, one line per IP address.
-For each host a single
-line should be present with the following information:
-.RS
-.PP
-IP_address canonical_hostname [aliases...]
-.RE
-.PP
-The IP address can conform to either IPv4 or IPv6.
-Fields of the entry are separated by any number of blanks and/or
-tab characters.
-Text from a "#" character until the end of the line is
-a comment, and is ignored.
-Host names may contain only alphanumeric
-characters, minus signs ("\-"), and periods (".").
-They must begin with an
-alphabetic character and end with an alphanumeric character.
-Optional aliases provide for name changes, alternate spellings,
-shorter hostnames, or generic hostnames (for example,
-.IR localhost ).
-If required, a host may have two separate entries in this file;
-one for each version of the Internet Protocol (IPv4 and IPv6).
-.PP
-The Berkeley Internet Name Domain (BIND) Server implements the
-Internet name server for UNIX systems.
-It augments or replaces the
-.I /etc/hosts
-file or hostname lookup, and frees a host from relying on
-.I /etc/hosts
-being up to date and complete.
-.PP
-In modern systems, even though the host table has been superseded by
-DNS, it is still widely used for:
-.TP
-.B bootstrapping
-Most systems have a small host table containing the name and address
-information for important hosts on the local network.
-This is useful
-when DNS is not running, for example during system bootup.
-.TP
-.B NIS
-Sites that use NIS use the host table as input to the NIS host
-database.
-Even though NIS can be used with DNS, most NIS sites still
-use the host table with an entry for all local hosts as a backup.
-.TP
-.B isolated nodes
-Very small sites that are isolated from the network use the host table
-instead of DNS.
-If the local information rarely changes, and the
-network is not connected to the Internet, DNS offers little
-advantage.
-.SH FILES
-.I /etc/hosts
-.SH NOTES
-Modifications to this file normally take effect immediately,
-except in cases where the file is cached by applications.
-.SS Historical notes
-RFC\ 952 gave the original format for the host table, though it has
-since changed.
-.PP
-Before the advent of DNS, the host table was the only way of resolving
-hostnames on the fledgling Internet.
-Indeed, this file could be
-created from the official host data base maintained at the Network
-Information Control Center (NIC), though local changes were often
-required to bring it up to date regarding unofficial aliases and/or
-unknown hosts.
-The NIC no longer maintains the hosts.txt files,
-though looking around at the time of writing (circa 2000), there are
-historical hosts.txt files on the WWW.
-I just found three, from 92,
-94, and 95.
-.SH EXAMPLES
-.EX
-# The following lines are desirable for IPv4 capable hosts
-127.0.0.1 localhost
-\&
-# 127.0.1.1 is often used for the FQDN of the machine
-127.0.1.1 thishost.example.org thishost
-192.168.1.10 foo.example.org foo
-192.168.1.13 bar.example.org bar
-146.82.138.7 master.debian.org master
-209.237.226.90 www.opensource.org
-\&
-# The following lines are desirable for IPv6 capable hosts
-::1 localhost ip6\-localhost ip6\-loopback
-ff02::1 ip6\-allnodes
-ff02::2 ip6\-allrouters
-.EE
-.SH SEE ALSO
-.BR hostname (1),
-.BR resolver (3),
-.BR host.conf (5),
-.BR resolv.conf (5),
-.BR resolver (5),
-.BR hostname (7),
-.BR named (8)
-.PP
-Internet RFC\ 952
-.\" .SH AUTHOR
-.\" This manual page was written by Manoj Srivastava <srivasta@debian.org>,
-.\" for the Debian GNU/Linux system.
diff --git a/man5/hosts.equiv.5 b/man5/hosts.equiv.5
deleted file mode 100644
index 7b8e359c3..000000000
--- a/man5/hosts.equiv.5
+++ /dev/null
@@ -1,212 +0,0 @@
-.\" Copyright (c) 1995 Peter Tobias <tobias@et-inf.fho-emden.de>
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.TH hosts.equiv 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-hosts.equiv \- list of hosts and users that are granted "trusted"
-.B r
-command access to your system
-.SH DESCRIPTION
-The file
-.I /etc/hosts.equiv
-allows or denies hosts and users to use
-the \fBr\fP-commands (e.g.,
-.BR rlogin ,
-.BR rsh ,
-or
-.BR rcp )
-without
-supplying a password.
-.PP
-The file uses the following format:
-.TP
-\fI+|[\-]hostname|+@netgroup|\-@netgroup\fP \fI[+|[\-]username|+@netgroup|\-@netgroup]\fP
-.PP
-The
-.I hostname
-is the name of a host which is logically equivalent
-to the local host.
-Users logged into that host are allowed to access
-like-named user accounts on the local host without supplying a password.
-The
-.I hostname
-may be (optionally) preceded by a plus (+) sign.
-If the plus sign is used alone, it allows any host to access your system.
-You can explicitly deny access to a host by preceding the
-.I hostname
-by a minus (\-) sign.
-Users from that host must always supply additional credentials,
-including possibly a password.
-For security reasons you should always
-use the FQDN of the hostname and not the short hostname.
-.PP
-The
-.I username
-entry grants a specific user access to all user
-accounts (except root) without supplying a password.
-That means the
-user is NOT restricted to like-named accounts.
-The
-.I username
-may
-be (optionally) preceded by a plus (+) sign.
-You can also explicitly
-deny access to a specific user by preceding the
-.I username
-with
-a minus (\-) sign.
-This says that the user is not trusted no matter
-what other entries for that host exist.
-.PP
-Netgroups can be specified by preceding the netgroup by an @ sign.
-.PP
-Be extremely careful when using the plus (+) sign.
-A simple typographical
-error could result in a standalone plus sign.
-A standalone plus sign is
-a wildcard character that means "any host"!
-.SH FILES
-.I /etc/hosts.equiv
-.SH NOTES
-Some systems will honor the contents of this file only when it has owner
-root and no write permission for anybody else.
-Some exceptionally
-paranoid systems even require that there be no other hard links to the file.
-.PP
-Modern systems use the Pluggable Authentication Modules library (PAM).
-With PAM a standalone plus sign is considered a wildcard
-character which means "any host" only when the word
-.I promiscuous
-is added to the auth component line in your PAM file for
-the particular service
-.RB "(e.g., " rlogin ).
-.SH EXAMPLES
-Below are some example
-.I /etc/host.equiv
-or
-.I \[ti]/.rhosts
-files.
-.PP
-Allow any user to log in from any host:
-.PP
-.in +4n
-.EX
-+
-.EE
-.in
-.PP
-Allow any user from
-.I host
-with a matching local account to log in:
-.PP
-.in +4n
-.EX
-host
-.EE
-.in
-.PP
-Note: the use of
-.I +host
-is never a valid syntax,
-including attempting to specify that any user from the host is allowed.
-.PP
-Allow any user from
-.I host
-to log in:
-.PP
-.in +4n
-.EX
-host +
-.EE
-.in
-.PP
-Note: this is distinct from the previous example
-since it does not require a matching local account.
-.PP
-Allow
-.I user
-from
-.I host
-to log in as any non-root user:
-.PP
-.in +4n
-.EX
-host user
-.EE
-.in
-.PP
-Allow all users with matching local accounts from
-.I host
-to log in except for
-.IR baduser :
-.PP
-.in +4n
-.EX
-host \-baduser
-host
-.EE
-.in
-.PP
-Deny all users from
-.IR host :
-.PP
-.in +4n
-.EX
-\-host
-.EE
-.in
-.PP
-Note: the use of
-.I "\-host\ \-user"
-is never a valid syntax,
-including attempting to specify that a particular user from the host
-is not trusted.
-.PP
-Allow all users with matching local accounts on all hosts in a
-.IR netgroup :
-.PP
-.in +4n
-.EX
-+@netgroup
-.EE
-.in
-.PP
-Disallow all users on all hosts in a
-.IR netgroup :
-.PP
-.in +4n
-.EX
-\-@netgroup
-.EE
-.in
-.PP
-Allow all users in a
-.I netgroup
-to log in from
-.I host
-as any non-root user:
-.PP
-.in +4n
-.EX
-host +@netgroup
-.EE
-.in
-.PP
-Allow all users with matching local accounts on all hosts in a
-.I netgroup
-except
-.IR baduser :
-.PP
-.in +4n
-.EX
-+@netgroup \-baduser
-+@netgroup
-.EE
-.in
-.PP
-Note: the deny statements must always precede the allow statements because
-the file is processed sequentially until the first matching rule is found.
-.SH SEE ALSO
-.BR rhosts (5),
-.BR rlogind (8),
-.BR rshd (8)
diff --git a/man5/intro.5 b/man5/intro.5
deleted file mode 100644
index cc78ff8ad..000000000
--- a/man5/intro.5
+++ /dev/null
@@ -1,23 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sat Jul 24 17:06:52 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Sun Jan 14 00:34:09 1996 by Andries Brouwer (aeb@cwi.nl)
-.TH intro 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-intro \- introduction to file formats and filesystems
-.SH DESCRIPTION
-Section 5 of the manual describes various file formats,
-as well as the corresponding C structures, if any.
-.PP
-In addition,
-this section contains a number of pages that document various filesystems.
-.SH NOTES
-.SS Authors and copyright conditions
-Look at the header of the manual page source for the author(s) and copyright
-conditions.
-Note that these can be different from page to page!
-.SH SEE ALSO
-.BR standards (7)
diff --git a/man5/issue.5 b/man5/issue.5
deleted file mode 100644
index 13d2b83b3..000000000
--- a/man5/issue.5
+++ /dev/null
@@ -1,24 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sun Jul 25 11:06:22 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Mon Oct 21 17:47:19 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
-.TH issue 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-issue \- prelogin message and identification file
-.SH DESCRIPTION
-.I /etc/issue
-is a text file which contains a message or
-system identification to be printed before the login prompt.
-It may contain various \fB@\fP\fIchar\fP and \fB\e\fP\fIchar\fP
-sequences, if supported by the
-.BR getty -type
-program employed on the system.
-.SH FILES
-.I /etc/issue
-.SH SEE ALSO
-.BR motd (5),
-.BR agetty (8),
-.BR mingetty (8)
diff --git a/man5/locale.5 b/man5/locale.5
deleted file mode 100644
index b0a21560f..000000000
--- a/man5/locale.5
+++ /dev/null
@@ -1,1316 +0,0 @@
-.\" Copyright (C) 1994 Jochen Hein (Hein@Student.TU-Clausthal.de)
-.\" Copyright (C) 2008 Petr Baudis (pasky@suse.cz)
-.\" Copyright (C) 2014 Michael Kerrisk <mtk@manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 2008-06-17 Petr Baudis <pasky@suse.cz>
-.\" LC_TIME: Describe first_weekday and first_workday
-.\"
-.TH locale 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-locale \- describes a locale definition file
-.SH DESCRIPTION
-The
-.B locale
-definition file contains all the information that the
-.BR localedef (1)
-command needs to convert it into the binary locale database.
-.PP
-The definition files consist of sections which each describe a
-locale category in detail.
-See
-.BR locale (7)
-for additional details for these categories.
-.SS Syntax
-The locale definition file starts with a header that may consist
-of the following keywords:
-.TP
-.I escape_char
-is followed by a character that should be used as the
-escape-character for the rest of the file to mark characters that
-should be interpreted in a special way.
-It defaults to the backslash (\e).
-.TP
-.I comment_char
-is followed by a character that will be used as the
-comment-character for the rest of the file.
-It defaults to the number sign (#).
-.PP
-The locale definition has one part for each locale category.
-Each part can be copied from another existing locale or
-can be defined from scratch.
-If the category should be copied,
-the only valid keyword in the definition is
-.I copy
-followed by the name of the locale in double quotes which should be
-copied.
-The exceptions for this rule are
-.B LC_COLLATE
-and
-.B LC_CTYPE
-where a
-.I copy
-statement can be followed by locale-specific rules and selected overrides.
-.PP
-When defining a locale or a category from scratch, an existing system-
-provided locale definition file should be used as a reference to follow
-common glibc conventions.
-.SS Locale category sections
-The following category sections are defined by POSIX:
-.IP \[bu] 3
-.B LC_CTYPE
-.IP \[bu]
-.B LC_COLLATE
-.IP \[bu]
-.B LC_MESSAGES
-.IP \[bu]
-.B LC_MONETARY
-.IP \[bu]
-.B LC_NUMERIC
-.IP \[bu]
-.B LC_TIME
-.PP
-In addition, since glibc 2.2,
-the GNU C library supports the following nonstandard categories:
-.IP \[bu] 3
-.B LC_ADDRESS
-.IP \[bu]
-.B LC_IDENTIFICATION
-.IP \[bu]
-.B LC_MEASUREMENT
-.IP \[bu]
-.B LC_NAME
-.IP \[bu]
-.B LC_PAPER
-.IP \[bu]
-.B LC_TELEPHONE
-.PP
-See
-.BR locale (7)
-for a more detailed description of each category.
-.SS LC_ADDRESS
-The definition starts with the string
-.I LC_ADDRESS
-in the first column.
-.PP
-The following keywords are allowed:
-.TP
-.I postal_fmt
-followed by a string containing field descriptors that define
-the format used for postal addresses in the locale.
-The following field descriptors are recognized:
-.RS
-.TP
-%n
-Person's name, possibly constructed with the
-.B LC_NAME
-.I name_fmt
-keyword (since glibc 2.24).
-.TP 4
-%a
-Care of person, or organization.
-.TP
-%f
-Firm name.
-.TP
-%d
-Department name.
-.TP
-%b
-Building name.
-.TP
-%s
-Street or block (e.g., Japanese) name.
-.TP
-%h
-House number or designation.
-.TP
-%N
-Insert an end-of-line if the previous descriptor's value was not an empty
-string; otherwise ignore.
-.TP
-%t
-Insert a space if the previous descriptor's value was not an empty string;
-otherwise ignore.
-.TP
-%r
-Room number, door designation.
-.TP
-%e
-Floor number.
-.TP
-%C
-Country designation, from the
-.I country_post
-keyword.
-.TP
-%l
-Local township within town or city (since glibc 2.24).
-.TP
-%z
-Zip number, postal code.
-.TP
-%T
-Town, city.
-.TP
-%S
-State, province, or prefecture.
-.TP
-%c
-Country, as taken from data record.
-.PP
-Each field descriptor may have an \[aq]R\[aq] after
-the \[aq]%\[aq] to specify that the
-information is taken from a Romanized version string of the
-entity.
-.RE
-.TP
-.I country_name
-followed by the country name in the language of the current document
-(e.g., "Deutschland" for the
-.B de_DE
-locale).
-.TP
-.I country_post
-followed by the abbreviation of the country (see CERT_MAILCODES).
-.TP
-.I country_ab2
-followed by the two-letter abbreviation of the country (ISO 3166).
-.TP
-.I country_ab3
-followed by the three-letter abbreviation of the country (ISO 3166).
-.TP
-.I country_num
-followed by the numeric country code (ISO 3166).
-.TP
-.I country_car
-followed by the international license plate country code.
-.TP
-.I country_isbn
-followed by the ISBN code (for books).
-.TP
-.I lang_name
-followed by the language name in the language of the current document.
-.TP
-.I lang_ab
-followed by the two-letter abbreviation of the language (ISO 639).
-.TP
-.I lang_term
-followed by the three-letter abbreviation of the language (ISO 639-2/T).
-.TP
-.I lang_lib
-followed by the three-letter abbreviation of the language for library
-use (ISO 639-2/B).
-Applications should in general prefer
-.I lang_term
-over
-.IR lang_lib .
-.PP
-The
-.B LC_ADDRESS
-definition ends with the string
-.IR "END LC_ADDRESS" .
-.SS LC_CTYPE
-The definition starts with the string
-.I LC_CTYPE
-in the first column.
-.PP
-The following keywords are allowed:
-.TP
-.I upper
-followed by a list of uppercase letters.
-The letters
-.B A
-through
-.B Z
-are included automatically.
-Characters also specified as
-.BR cntrl ,
-.BR digit ,
-.BR punct ,
-or
-.B space
-are not allowed.
-.TP
-.I lower
-followed by a list of lowercase letters.
-The letters
-.B a
-through
-.B z
-are included automatically.
-Characters also specified as
-.BR cntrl ,
-.BR digit ,
-.BR punct ,
-or
-.B space
-are not allowed.
-.TP
-.I alpha
-followed by a list of letters.
-All character specified as either
-.B upper
-or
-.B lower
-are automatically included.
-Characters also specified as
-.BR cntrl ,
-.BR digit ,
-.BR punct ,
-or
-.B space
-are not allowed.
-.TP
-.I digit
-followed by the characters classified as numeric digits.
-Only the
-digits
-.B 0
-through
-.B 9
-are allowed.
-They are included by default in this class.
-.TP
-.I space
-followed by a list of characters defined as white-space
-characters.
-Characters also specified as
-.BR upper ,
-.BR lower ,
-.BR alpha ,
-.BR digit ,
-.BR graph ,
-or
-.B xdigit
-are not allowed.
-The characters
-.BR <space> ,
-.BR <form-feed> ,
-.BR <newline> ,
-.BR <carriage-return> ,
-.BR <tab> ,
-and
-.B <vertical-tab>
-are automatically included.
-.TP
-.I cntrl
-followed by a list of control characters.
-Characters also specified as
-.BR upper ,
-.BR lower ,
-.BR alpha ,
-.BR digit ,
-.BR punct ,
-.BR graph ,
-.BR print ,
-or
-.B xdigit
-are not allowed.
-.TP
-.I punct
-followed by a list of punctuation characters.
-Characters also
-specified as
-.BR upper ,
-.BR lower ,
-.BR alpha ,
-.BR digit ,
-.BR cntrl ,
-.BR xdigit ,
-or the
-.B <space>
-character are not allowed.
-.TP
-.I graph
-followed by a list of printable characters, not including the
-.B <space>
-character.
-The characters defined as
-.BR upper ,
-.BR lower ,
-.BR alpha ,
-.BR digit ,
-.BR xdigit ,
-and
-.B punct
-are automatically included.
-Characters also specified as
-.B cntrl
-are not allowed.
-.TP
-.I print
-followed by a list of printable characters, including the
-.B <space>
-character.
-The characters defined as
-.BR upper ,
-.BR lower ,
-.BR alpha ,
-.BR digit ,
-.BR xdigit ,
-.BR punct ,
-and the
-.B <space>
-character are automatically included.
-Characters also specified as
-.B cntrl
-are not allowed.
-.TP
-.I xdigit
-followed by a list of characters classified as hexadecimal
-digits.
-The decimal digits must be included followed by one or
-more set of six characters in ascending order.
-The following
-characters are included by default:
-.B 0
-through
-.BR 9 ,
-.B a
-through
-.BR f ,
-.B A
-through
-.BR F .
-.TP
-.I blank
-followed by a list of characters classified as
-.BR blank .
-The characters
-.B <space>
-and
-.B <tab>
-are automatically included.
-.TP
-.I charclass
-followed by a list of locale-specific character class names
-which are then to be defined in the locale.
-.TP
-.I toupper
-followed by a list of mappings from lowercase to uppercase
-letters.
-Each mapping is a pair of a lowercase and an uppercase letter
-separated with a
-.B ,
-and enclosed in parentheses.
-.TP
-.I tolower
-followed by a list of mappings from uppercase to lowercase
-letters.
-If the keyword tolower is not present, the reverse of the
-toupper list is used.
-.TP
-.I map totitle
-followed by a list of mapping pairs of
-characters and letters
-to be used in titles (headings).
-.TP
-.I class
-followed by a locale-specific character class definition,
-starting with the class name followed by the characters
-belonging to the class.
-.TP
-.I charconv
-followed by a list of locale-specific character mapping names
-which are then to be defined in the locale.
-.TP
-.I outdigit
-followed by a list of alternate output digits for the locale.
-.TP
-.I map to_inpunct
-followed by a list of mapping pairs of
-alternate digits and separators
-for input digits for the locale.
-.TP
-.I map to_outpunct
-followed by a list of mapping pairs of
-alternate separators
-for output for the locale.
-.TP
-.I translit_start
-marks the start of the transliteration rules section.
-The section can contain the
-.I include
-keyword in the beginning followed by
-locale-specific rules and overrides.
-Any rule specified in the locale file
-will override any rule
-copied or included from other files.
-In case of duplicate rule definitions in the locale file,
-only the first rule is used.
-.IP
-A transliteration rule consist of a character to be transliterated
-followed by a list of transliteration targets separated by semicolons.
-The first target which can be presented in the target character set
-is used, if none of them can be used the
-.I default_missing
-character will be used instead.
-.TP
-.I include
-in the transliteration rules section includes
-a transliteration rule file
-(and optionally a repertoire map file).
-.TP
-.I default_missing
-in the transliteration rules section
-defines the default character to be used for
-transliteration where none of the targets cannot be presented
-in the target character set.
-.TP
-.I translit_end
-marks the end of the transliteration rules.
-.PP
-The
-.B LC_CTYPE
-definition ends with the string
-.IR "END LC_CTYPE" .
-.SS LC_COLLATE
-Note that glibc does not support all POSIX-defined options,
-only the options described below are supported (as of glibc 2.23).
-.PP
-The definition starts with the string
-.I LC_COLLATE
-in the first column.
-.PP
-The following keywords are allowed:
-.TP
-.I coll_weight_max
-followed by the number representing used collation levels.
-This keyword is recognized but ignored by glibc.
-.TP
-.I collating\-element
-followed by the definition of a collating-element symbol
-representing a multicharacter collating element.
-.TP
-.I collating\-symbol
-followed by the definition of a collating symbol
-that can be used in collation order statements.
-.TP
-.I define
-followed by
-.B string
-to be evaluated in an
-.I ifdef
-.B string
-/
-.I else
-/
-.I endif
-construct.
-.TP
-.I reorder\-after
-followed by a redefinition of a collation rule.
-.TP
-.I reorder\-end
-marks the end of the redefinition of a collation rule.
-.TP
-.I reorde\r-sections\-after
-followed by a script name to reorder listed scripts after.
-.TP
-.I reorder\-sections\-end
-marks the end of the reordering of sections.
-.TP
-.I script
-followed by a declaration of a script.
-.TP
-.I symbol\-equivalence
-followed by a collating-symbol to be equivalent to another defined
-collating-symbol.
-.PP
-The collation rule definition starts with a line:
-.TP
-.I order_start
-followed by a list of keywords chosen from
-.BR forward ,
-.BR backward ,
-or
-.BR position .
-The order definition consists of lines that describe the collation
-order and is terminated with the keyword
-.IR order_end .
-.PP
-The
-.B LC_COLLATE
-definition ends with the string
-.IR "END LC_COLLATE" .
-.SS LC_IDENTIFICATION
-The definition starts with the string
-.I LC_IDENTIFICATION
-in the first column.
-.PP
-The following keywords are allowed:
-.TP
-.I title
-followed by the title of the locale document
-(e.g., "Maori language locale for New Zealand").
-.TP
-.I source
-followed by the name of the organization that maintains this document.
-.TP
-.I address
-followed by the address of the organization that maintains this document.
-.TP
-.I contact
-followed by the name of the contact person at
-the organization that maintains this document.
-.TP
-.I email
-followed by the email address of the person or
-organization that maintains this document.
-.TP
-.I tel
-followed by the telephone number (in international format)
-of the organization that maintains this document.
-As of glibc 2.24, this keyword is deprecated in favor of
-other contact methods.
-.TP
-.I fax
-followed by the fax number (in international format)
-of the organization that maintains this document.
-As of glibc 2.24, this keyword is deprecated in favor of
-other contact methods.
-.TP
-.I language
-followed by the name of the language to which this document applies.
-.TP
-.I territory
-followed by the name of the country/geographic extent
-to which this document applies.
-.TP
-.I audience
-followed by a description of the audience for which this document is
-intended.
-.TP
-.I application
-followed by a description of any special application
-for which this document is intended.
-.TP
-.I abbreviation
-followed by the short name for provider of the source of this document.
-.TP
-.I revision
-followed by the revision number of this document.
-.TP
-.I date
-followed by the revision date of this document.
-.PP
-In addition, for each of the categories defined by the document,
-there should be a line starting with the keyword
-.IR category ,
-followed by:
-.IP (1) 5
-a string that identifies this locale category definition,
-.IP (2)
-a semicolon, and
-.IP (3)
-one of the
-.B LC_*
-identifiers.
-.PP
-The
-.B LC_IDENTIFICATION
-definition ends with the string
-.IR "END LC_IDENTIFICATION" .
-.SS LC_MESSAGES
-The definition starts with the string
-.I LC_MESSAGES
-in the first column.
-.PP
-The following keywords are allowed:
-.TP
-.I yesexpr
-followed by a regular expression that describes possible
-yes-responses.
-.TP
-.I noexpr
-followed by a regular expression that describes possible
-no-responses.
-.TP
-.I yesstr
-followed by the output string corresponding to "yes".
-.TP
-.I nostr
-followed by the output string corresponding to "no".
-.PP
-The
-.B LC_MESSAGES
-definition ends with the string
-.IR "END LC_MESSAGES" .
-.SS LC_MEASUREMENT
-The definition starts with the string
-.I LC_MEASUREMENT
-in the first column.
-.PP
-The following keywords are allowed:
-.TP
-.I measurement
-followed by number identifying the standard used for measurement.
-The following values are recognized:
-.RS
-.TP 4
-.B 1
-Metric.
-.TP
-.B 2
-US customary measurements.
-.RE
-.PP
-The
-.B LC_MEASUREMENT
-definition ends with the string
-.IR "END LC_MEASUREMENT" .
-.SS LC_MONETARY
-The definition starts with the string
-.I LC_MONETARY
-in the first column.
-.PP
-The following keywords are allowed:
-.TP
-.I int_curr_symbol
-followed by the international currency symbol.
-This must be a
-4-character string containing the international currency symbol as
-defined by the ISO 4217 standard (three characters) followed by a
-separator.
-.TP
-.I currency_symbol
-followed by the local currency symbol.
-.TP
-.I mon_decimal_point
-followed by the single-character string that will be used as the
-decimal delimiter when formatting monetary quantities.
-.TP
-.I mon_thousands_sep
-followed by the single-character string that will be used as a group
-separator when formatting monetary quantities.
-.TP
-.I mon_grouping
-followed by a sequence of integers separated by semicolons that
-describe the formatting of monetary quantities.
-See
-.I grouping
-below for details.
-.TP
-.I positive_sign
-followed by a string that is used to indicate a positive sign for
-monetary quantities.
-.TP
-.I negative_sign
-followed by a string that is used to indicate a negative sign for
-monetary quantities.
-.TP
-.I int_frac_digits
-followed by the number of fractional digits that should be used when
-formatting with the
-.IR int_curr_symbol .
-.TP
-.I frac_digits
-followed by the number of fractional digits that should be used when
-formatting with the
-.IR currency_symbol .
-.TP
-.I p_cs_precedes
-followed by an integer that indicates the placement of
-.I currency_symbol
-for a nonnegative formatted monetary quantity:
-.RS
-.TP 4
-.B 0
-the symbol succeeds the value.
-.TP
-.B 1
-the symbol precedes the value.
-.RE
-.TP
-.I p_sep_by_space
-followed by an integer that indicates the separation of
-.IR currency_symbol ,
-the sign string, and the value for a nonnegative formatted monetary quantity.
-The following values are recognized:
-.RS
-.TP 4
-.B 0
-No space separates the currency symbol and the value.
-.TP
-.B 1
-If the currency symbol and the sign string are adjacent,
-a space separates them from the value;
-otherwise a space separates the currency symbol and the value.
-.TP
-.B 2
-If the currency symbol and the sign string are adjacent,
-a space separates them from the value;
-otherwise a space separates the sign string and the value.
-.RE
-.TP
-.I n_cs_precedes
-followed by an integer that indicates the placement of
-.I currency_symbol
-for a negative formatted monetary quantity.
-The same values are recognized as for
-.IR p_cs_precedes .
-.TP
-.I n_sep_by_space
-followed by an integer that indicates the separation of
-.IR currency_symbol ,
-the sign string, and the value for a negative formatted monetary quantity.
-The same values are recognized as for
-.IR p_sep_by_space .
-.TP
-.I p_sign_posn
-followed by an integer that indicates where the
-.I positive_sign
-should be placed for a nonnegative monetary quantity:
-.RS
-.TP 4
-.B 0
-Parentheses enclose the quantity and the
-.I currency_symbol
-or
-.IR int_curr_symbol .
-.TP
-.B 1
-The sign string precedes the quantity and the
-.I currency_symbol
-or the
-.IR int_curr_symbol .
-.TP
-.B 2
-The sign string succeeds the quantity and the
-.I currency_symbol
-or the
-.IR int_curr_symbol .
-.TP
-.B 3
-The sign string precedes the
-.I currency_symbol
-or the
-.IR int_curr_symbol .
-.TP
-.B 4
-The sign string succeeds the
-.I currency_symbol
-or the
-.IR int_curr_symbol .
-.RE
-.TP
-.I n_sign_posn
-followed by an integer that indicates where the
-.I negative_sign
-should be placed for a negative monetary quantity.
-The same values are recognized as for
-.IR p_sign_posn .
-.TP
-.I int_p_cs_precedes
-followed by an integer that indicates the placement of
-.I int_curr_symbol
-for a nonnegative internationally formatted monetary quantity.
-The same values are recognized as for
-.IR p_cs_precedes .
-.TP
-.I int_n_cs_precedes
-followed by an integer that indicates the placement of
-.I int_curr_symbol
-for a negative internationally formatted monetary quantity.
-The same values are recognized as for
-.IR p_cs_precedes .
-.TP
-.I int_p_sep_by_space
-followed by an integer that indicates the separation of
-.IR int_curr_symbol ,
-the sign string,
-and the value for a nonnegative internationally formatted monetary quantity.
-The same values are recognized as for
-.IR p_sep_by_space .
-.TP
-.I int_n_sep_by_space
-followed by an integer that indicates the separation of
-.IR int_curr_symbol ,
-the sign string,
-and the value for a negative internationally formatted monetary quantity.
-The same values are recognized as for
-.IR p_sep_by_space .
-.TP
-.I int_p_sign_posn
-followed by an integer that indicates where the
-.I positive_sign
-should be placed for a nonnegative
-internationally formatted monetary quantity.
-The same values are recognized as for
-.IR p_sign_posn .
-.TP
-.I int_n_sign_posn
-followed by an integer that indicates where the
-.I negative_sign
-should be placed for a negative
-internationally formatted monetary quantity.
-The same values are recognized as for
-.IR p_sign_posn .
-.PP
-The
-.B LC_MONETARY
-definition ends with the string
-.IR "END LC_MONETARY" .
-.SS LC_NAME
-The definition starts with the string
-.I LC_NAME
-in the first column.
-.PP
-Various keywords are allowed, but only
-.I name_fmt
-is mandatory.
-Other keywords are needed only if there is common convention to
-use the corresponding salutation in this locale.
-The allowed keywords are as follows:
-.TP
-.I name_fmt
-followed by a string containing field descriptors that define
-the format used for names in the locale.
-The following field descriptors are recognized:
-.RS
-.TP 4
-%f
-Family name(s).
-.TP
-%F
-Family names in uppercase.
-.TP
-%g
-First given name.
-.TP
-%G
-First given initial.
-.TP
-%l
-First given name with Latin letters.
-.TP
-%o
-Other shorter name.
-.TP
-%m
-Additional given name(s).
-.TP
-%M
-Initials for additional given name(s).
-.TP
-%p
-Profession.
-.TP
-%s
-Salutation, such as "Doctor".
-.TP
-%S
-Abbreviated salutation, such as "Mr." or "Dr.".
-.TP
-%d
-Salutation, using the FDCC-sets conventions.
-.\" 1 for the name_gen
-.\" In glibc 2.19, %d1 is used in only:
-.\" /home/mtk/ARCHIVE/GLIBC/glibc-2.19/localedata/locales/bem_ZM
-.\" /home/mtk/ARCHIVE/GLIBC/glibc-2.19/localedata/locales/zh_HK
-.\" In glibc 2.19, %d[2-5] appear to be not used at all
-.\" 2 for name_mr
-.\" 3 for name_mrs
-.\" 4 for name_miss
-.\" 5 for name_ms
-.TP
-%t
-If the preceding field descriptor resulted in an empty string,
-then the empty string, otherwise a space character.
-.RE
-.TP
-.I name_gen
-followed by the general salutation for any gender.
-.TP
-.I name_mr
-followed by the salutation for men.
-.TP
-.I name_mrs
-followed by the salutation for married women.
-.TP
-.I name_miss
-followed by the salutation for unmarried women.
-.TP
-.I name_ms
-followed by the salutation valid for all women.
-.PP
-The
-.B LC_NAME
-definition ends with the string
-.IR "END LC_NAME" .
-.SS LC_NUMERIC
-The definition starts with the string
-.I LC_NUMERIC
-in the first column.
-.PP
-The following keywords are allowed:
-.TP
-.I decimal_point
-followed by the single-character string that will be used as the
-decimal delimiter when formatting numeric quantities.
-.TP
-.I thousands_sep
-followed by the single-character string that will be used as a group
-separator when formatting numeric quantities.
-.TP
-.I grouping
-followed by a sequence of integers separated by semicolons
-that describe the formatting of numeric quantities.
-.IP
-Each integer specifies the number of digits in a group.
-The first integer defines the size of the group immediately
-to the left of the decimal delimiter.
-Subsequent integers define succeeding groups to the
-left of the previous group.
-If the last integer is not \-1, then the size of the previous group
-(if any) is repeatedly used for the remainder of the digits.
-If the last integer is \-1, then no further grouping is performed.
-.PP
-The
-.B LC_NUMERIC
-definition ends with the string
-.IR "END LC_NUMERIC" .
-.SS LC_PAPER
-The definition starts with the string
-.I LC_PAPER
-in the first column.
-.PP
-The following keywords are allowed:
-.TP
-.I height
-followed by the height, in millimeters, of the standard paper format.
-.TP
-.I width
-followed by the width, in millimeters, of the standard paper format.
-.PP
-The
-.B LC_PAPER
-definition ends with the string
-.IR "END LC_PAPER" .
-.SS LC_TELEPHONE
-The definition starts with the string
-.I LC_TELEPHONE
-in the first column.
-.PP
-The following keywords are allowed:
-.TP
-.I tel_int_fmt
-followed by a string that contains field descriptors that identify
-the format used to dial international numbers.
-The following field descriptors are recognized:
-.RS
-.TP 4
-%a
-Area code without nationwide prefix (the prefix is often "00").
-.TP
-%A
-Area code including nationwide prefix.
-.TP
-%l
-Local number (within area code).
-.TP
-%e
-Extension (to local number).
-.TP
-%c
-Country code.
-.TP
-%C
-Alternate carrier service code used for dialing abroad.
-.TP
-%t
-If the preceding field descriptor resulted in an empty string,
-then the empty string, otherwise a space character.
-.RE
-.TP
-.I tel_dom_fmt
-followed by a string that contains field descriptors that identify
-the format used to dial domestic numbers.
-The recognized field descriptors are the same as for
-.IR tel_int_fmt .
-.TP
-.I int_select
-followed by the prefix used to call international phone numbers.
-.TP
-.I int_prefix
-followed by the prefix used from other countries to dial this country.
-.PP
-The
-.B LC_TELEPHONE
-definition ends with the string
-.IR "END LC_TELEPHONE" .
-.SS LC_TIME
-The definition starts with the string
-.I LC_TIME
-in the first column.
-.PP
-The following keywords are allowed:
-.TP
-.I abday
-followed by a list of abbreviated names of the days of the week.
-The list starts with the first day of the week
-as specified by
-.I week
-(Sunday by default).
-See NOTES.
-.TP
-.I day
-followed by a list of names of the days of the week.
-The list starts with the first day of the week
-as specified by
-.I week
-(Sunday by default).
-See NOTES.
-.TP
-.I abmon
-followed by a list of abbreviated month names.
-.TP
-.I mon
-followed by a list of month names.
-.TP
-.I d_t_fmt
-followed by the appropriate date and time format
-(for syntax, see
-.BR strftime (3)).
-.TP
-.I d_fmt
-followed by the appropriate date format
-(for syntax, see
-.BR strftime (3)).
-.TP
-.I t_fmt
-followed by the appropriate time format
-(for syntax, see
-.BR strftime (3)).
-.TP
-.I am_pm
-followed by the appropriate representation of the
-.B am
-and
-.B pm
-strings.
-This should be left empty for locales not using AM/PM convention.
-.TP
-.I t_fmt_ampm
-followed by the appropriate time format
-(for syntax, see
-.BR strftime (3))
-when using 12h clock format.
-This should be left empty for locales not using AM/PM convention.
-.TP
-.I era
-followed by semicolon-separated strings that define how years are
-counted and displayed for each era in the locale.
-Each string has the following format:
-.RS
-.PP
-.IR direction ":" offset ":" start_date ":" end_date ":" era_name ":" era_format
-.PP
-The fields are to be defined as follows:
-.TP 4
-.I direction
-Either
-.B +
-or
-.BR \- .
-.B +
-means the years closer to
-.I start_date
-have lower numbers than years closer to
-.IR end_date .
-.B \-
-means the opposite.
-.TP
-.I offset
-The number of the year closest to
-.I start_date
-in the era, corresponding to the
-.I %Ey
-descriptor (see
-.BR strptime (3)).
-.TP
-.I start_date
-The start of the era in the form of
-.IR yyyy/mm/dd .
-Years prior AD 1 are represented as negative numbers.
-.TP
-.I end_date
-The end of the era in the form of
-.IR yyyy/mm/dd ,
-or one of the two special values of
-.B \-*
-or
-.BR +* .
-.B \-*
-means the ending date is the beginning of time.
-.B +*
-means the ending date is the end of time.
-.TP
-.I era_name
-The name of the era corresponding to the
-.I %EC
-descriptor (see
-.BR strptime (3)).
-.TP
-.I era_format
-The format of the year in the era corresponding to the
-.I %EY
-descriptor (see
-.BR strptime (3)).
-.RE
-.TP
-.I era_d_fmt
-followed by the format of the date in alternative era notation,
-corresponding to the
-.I %Ex
-descriptor (see
-.BR strptime (3)).
-.TP
-.I era_t_fmt
-followed by the format of the time in alternative era notation,
-corresponding to the
-.I %EX
-descriptor (see
-.BR strptime (3)).
-.TP
-.I era_d_t_fmt
-followed by the format of the date and time in alternative era notation,
-corresponding to the
-.I %Ec
-descriptor (see
-.BR strptime (3)).
-.TP
-.I alt_digits
-followed by the alternative digits used for date and time in the locale.
-.TP
-.I week
-followed by a list of three values separated by semicolons:
-The number of days in a week (by default 7),
-a date of beginning of the week (by default corresponds to Sunday),
-and the minimal length of the first week in year (by default 4).
-Regarding the start of the week,
-.B 19971130
-shall be used for Sunday and
-.B 19971201
-shall be used for Monday.
-See NOTES.
-.TP
-.IR first_weekday " (since glibc 2.2)"
-followed by the number of the day from the
-.I day
-list to be shown as the first day of the week in calendar applications.
-The default value of
-.B 1
-corresponds to either Sunday or Monday depending
-on the value of the second
-.I week
-list item.
-See NOTES.
-.TP
-.IR first_workday " (since glibc 2.2)"
-followed by the number of the first working day from the
-.I day
-list.
-The default value is
-.BR 2 .
-See NOTES.
-.TP
-.I cal_direction
-followed by a number value that indicates the direction for the
-display of calendar dates, as follows:
-.RS
-.TP 4
-.B 1
-Left-right from top.
-.TP
-.B 2
-Top-down from left.
-.TP
-.B 3
-Right-left from top.
-.RE
-.TP
-.I date_fmt
-followed by the appropriate date representation for
-.BR date (1)
-(for syntax, see
-.BR strftime (3)).
-.PP
-The
-.B LC_TIME
-definition ends with the string
-.IR "END LC_TIME" .
-.SH FILES
-.TP
-.I /usr/lib/locale/locale\-archive
-Usual default locale archive location.
-.TP
-.I /usr/share/i18n/locales
-Usual default path for locale definition files.
-.SH STANDARDS
-POSIX.2.
-.SH NOTES
-The collective GNU C library community wisdom regarding
-.IR abday ,
-.IR day ,
-.IR week ,
-.IR first_weekday ,
-and
-.I first_workday
-states at
-https://sourceware.org/glibc/wiki/Locales
-the following:
-.IP \[bu] 3
-The value of the second
-.I week
-list item specifies the base of the
-.I abday
-and
-.I day
-lists.
-.IP \[bu]
-.I first_weekday
-specifies the offset of the first day-of-week in the
-.I abday
-and
-.I day
-lists.
-.IP \[bu]
-For compatibility reasons, all glibc locales should set the value of the
-second
-.I week
-list item to
-.B 19971130
-(Sunday) and base the
-.I abday
-and
-.I day
-lists appropriately, and set
-.I first_weekday
-and
-.I first_workday
-to
-.B 1
-or
-.BR 2 ,
-depending on whether the week and work week actually starts on Sunday or
-Monday for the locale.
-.\" .SH AUTHOR
-.\" Jochen Hein (Hein@Student.TU-Clausthal.de)
-.SH SEE ALSO
-.BR iconv (1),
-.BR locale (1),
-.BR localedef (1),
-.BR localeconv (3),
-.BR newlocale (3),
-.BR setlocale (3),
-.BR strftime (3),
-.BR strptime (3),
-.BR uselocale (3),
-.BR charmap (5),
-.BR charsets (7),
-.BR locale (7),
-.BR unicode (7),
-.BR utf\-8 (7)
diff --git a/man5/motd.5 b/man5/motd.5
deleted file mode 100644
index fe1404731..000000000
--- a/man5/motd.5
+++ /dev/null
@@ -1,25 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sat Jul 24 17:08:16 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Mon Oct 21 17:47:19 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
-.TH motd 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-motd \- message of the day
-.SH DESCRIPTION
-The contents of
-.I /etc/motd
-are displayed by
-.BR login (1)
-after a successful login but just before it executes the login shell.
-.PP
-The abbreviation "motd" stands for "message of the day", and this file
-has been traditionally used for exactly that (it requires much less disk
-space than mail to all users).
-.SH FILES
-.I /etc/motd
-.SH SEE ALSO
-.BR login (1),
-.BR issue (5)
diff --git a/man5/networks.5 b/man5/networks.5
deleted file mode 100644
index 43d1cfdc3..000000000
--- a/man5/networks.5
+++ /dev/null
@@ -1,60 +0,0 @@
-.\" Copyright (c) 2001 Martin Schulze <joey@infodrom.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 2008-09-04, mtk, taken from Debian downstream, with a few light edits
-.\"
-.TH networks 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-networks \- network name information
-.SH DESCRIPTION
-The file
-.I /etc/networks
-is a plain ASCII file that describes known DARPA networks and symbolic
-names for these networks.
-Each line represents a network and has the following structure:
-.PP
-.RS
-.I name number aliases ...
-.RE
-.PP
-where the fields are delimited by spaces or tabs.
-Empty lines are ignored.
-The hash character (\fB#\fP) indicates the start of a comment:
-this character, and the remaining characters up to
-the end of the current line,
-are ignored by library functions that process the file.
-.PP
-The field descriptions are:
-.TP
-.I name
-The symbolic name for the network.
-Network names can contain any printable characters except
-white-space characters or the comment character.
-.TP
-.I number
-The official number for this network in numbers-and-dots notation (see
-.BR inet (3)).
-The trailing ".0" (for the host component of the network address)
-may be omitted.
-.TP
-.I aliases
-Optional aliases for the network.
-.PP
-This file is read by the
-.BR route (8)
-and
-.BR netstat (8)
-utilities.
-Only Class A, B, or C networks are supported, partitioned networks
-(i.e., network/26 or network/28) are not supported by this file.
-.SH FILES
-.TP
-.I /etc/networks
-The networks definition file.
-.SH SEE ALSO
-.BR getnetbyaddr (3),
-.BR getnetbyname (3),
-.BR getnetent (3),
-.BR netstat (8),
-.BR route (8)
diff --git a/man5/nologin.5 b/man5/nologin.5
deleted file mode 100644
index d740bf83d..000000000
--- a/man5/nologin.5
+++ /dev/null
@@ -1,22 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sun Jul 25 11:06:34 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Corrected Mon Oct 21 17:47:19 EDT 1996 by Eric S. Raymond (esr@thyrsus.com)
-.TH nologin 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-nologin \- prevent unprivileged users from logging into the system
-.SH DESCRIPTION
-If the file \fI/etc/nologin\fP exists and is readable,
-.BR login (1)
-will allow access only to root.
-Other users will
-be shown the contents of this file and their logins will be refused.
-This provides a simple way of temporarily disabling all unprivileged logins.
-.SH FILES
-.I /etc/nologin
-.SH SEE ALSO
-.BR login (1),
-.BR shutdown (8)
diff --git a/man5/nscd.conf.5 b/man5/nscd.conf.5
deleted file mode 100644
index 154a99b6c..000000000
--- a/man5/nscd.conf.5
+++ /dev/null
@@ -1,342 +0,0 @@
-.\" Copyright (c) 1999, 2000 SuSE GmbH Nuernberg, Germany
-.\" Author: Thorsten Kukuk <kukuk@suse.de>
-.\" Updates: Greg Banks <gbanks@linkedin.com> Copyright (c) 2021 Microsoft Corp.
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH nscd.conf 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-nscd.conf \- name service cache daemon configuration file
-.SH DESCRIPTION
-The file
-.I /etc/nscd.conf
-is read from
-.BR nscd (8)
-at startup.
-Each line specifies either an attribute and a value, or an
-attribute, service, and a value.
-Fields are separated either by SPACE
-or TAB characters.
-A \[aq]#\[aq] (number sign) indicates the beginning of a
-comment; following characters, up to the end of the line,
-are not interpreted by nscd.
-.PP
-Valid services are \fIpasswd\fP, \fIgroup\fP, \fIhosts\fP, \fIservices\fP,
-or \fInetgroup\fP.
-.PP
-.B logfile
-.I debug-file-name
-.RS
-Specifies name of the file to which debug info should be written.
-.RE
-.PP
-.B debug\-level
-.I value
-.RS
-Sets the desired debug level.
-0 hides debug info.
-1 shows general debug info.
-2 additionally shows data in cache dumps.
-3 (and above) shows all debug info.
-The default is 0.
-.RE
-.PP
-.B threads
-.I number
-.RS
-This is the initial number of threads that are started to wait for
-requests.
-At least five threads will always be created.
-The number of threads may increase dynamically up to
-.B max\-threads
-in response to demand from clients,
-but never decreases.
-.RE
-.PP
-.B max\-threads
-.I number
-.RS
-Specifies the maximum number of threads.
-The default is 32.
-.RE
-.PP
-.B server\-user
-.I user
-.RS
-If this option is set, nscd will run as this user and not as root.
-If a separate cache for every user is used (\-S parameter), this
-option is ignored.
-.RE
-.PP
-.B stat\-user
-.I user
-.RS
-Specifies the user who is allowed to request statistics.
-.RE
-.PP
-.B reload\-count
-unlimited |
-.I number
-.RS
-Sets a limit on the number of times a cached entry
-gets reloaded without being used
-before it gets removed.
-The limit can take values ranging from 0 to 254;
-values 255 or higher behave the same as
-.BR unlimited .
-Limit values can be specified in either decimal
-or hexadecimal with a "0x" prefix.
-The special value
-.B unlimited
-is case-insensitive.
-The default limit is 5.
-A limit of 0 turns off the reloading feature.
-See NOTES below for further discussion of reloading.
-.RE
-.PP
-.B paranoia
-.I <yes|no>
-.RS
-Enabling paranoia mode causes nscd to restart itself periodically.
-The default is no.
-.RE
-.PP
-.B restart\-interval
-.I time
-.RS
-Sets the restart interval to
-.I time
-seconds
-if periodic restart is enabled by enabling
-.B paranoia
-mode.
-The default is 3600.
-.RE
-.PP
-.B enable\-cache
-.I service
-.I <yes|no>
-.RS
-Enables or disables the specified
-.I service
-cache.
-The default is no.
-.RE
-.PP
-.B positive\-time\-to\-live
-.I service
-.I value
-.RS
-Sets the TTL (time-to-live) for positive entries (successful queries)
-in the specified cache for
-.IR service .
-.I Value
-is in seconds.
-Larger values increase cache hit rates and reduce mean
-response times, but increase problems with cache coherence.
-Note that for some name services (including specifically DNS)
-the TTL returned from the name service is used and
-this attribute is ignored.
-.RE
-.PP
-.B negative\-time\-to\-live
-.I service
-.I value
-.RS
-Sets the TTL (time-to-live) for negative entries (unsuccessful queries)
-in the specified cache for
-.IR service .
-.I Value
-is in seconds.
-Can result in significant performance improvements if there
-are several files owned by UIDs (user IDs) not in system databases (for
-example untarring the Linux kernel sources as root); should be kept small
-to reduce cache coherency problems.
-.RE
-.PP
-.B suggested\-size
-.I service
-.I value
-.RS
-This is the internal hash table size,
-.I value
-should remain a prime number for optimum efficiency.
-The default is 211.
-.RE
-.PP
-.B check\-files
-.I service
-.I <yes|no>
-.RS
-Enables or disables checking the file belonging to the specified
-.I service
-for changes.
-The files are
-.IR /etc/passwd ,
-.IR /etc/group ,
-.IR /etc/hosts ,
-.IR /etc/resolv.conf ,
-.IR /etc/services ,
-and
-.IR /etc/netgroup .
-The default is yes.
-.RE
-.PP
-.B persistent
-.I service
-.I <yes|no>
-.RS
-Keep the content of the cache for
-.I service
-over server restarts; useful when
-.B paranoia
-mode is set.
-The default is no.
-.RE
-.PP
-.B shared
-.I service
-.I <yes|no>
-.RS
-The memory mapping of the nscd databases for
-.I service
-is shared with the clients so
-that they can directly search in them instead of having to ask the
-daemon over the socket each time a lookup is performed.
-The default is no.
-Note that a cache miss will still result in
-asking the daemon over the socket.
-.RE
-.PP
-.B max\-db\-size
-.I service
-.I bytes
-.RS
-The maximum allowable size, in bytes, of the database files for the
-.IR service .
-The default is 33554432.
-.RE
-.PP
-.B auto\-propagate
-.I service
-.I <yes|no>
-.RS
-When set to
-.I no
-for
-.I passwd
-or
-.I group
-service, then the
-.I .byname
-requests are not added to
-.I passwd.byuid
-or
-.I group.bygid
-cache.
-This can help with tables containing multiple records for the same ID.
-The default is yes.
-This option is valid only for services
-.I passwd
-and
-.IR group .
-.RE
-.SH NOTES
-The default values stated in this manual page originate
-from the source code of
-.BR nscd (8)
-and are used if not overridden in the configuration file.
-The default values used in the configuration file of
-your distribution might differ.
-.SS Reloading
-.BR nscd (8)
-has a feature called reloading,
-whose behavior can be surprising.
-.PP
-Reloading is enabled when the
-.B reload-count
-attribute has a non-zero value.
-The default value in the source code enables reloading,
-although your distribution may differ.
-.PP
-When reloading is enabled,
-positive cached entries (the results of successful queries)
-do not simply expire when their TTL is up.
-Instead, at the expiry time,
-.B nscd
-will "reload",
-i.e.,
-re-issue to the name service the same query that created the cached entry,
-to get a new value to cache.
-Depending on
-.I /etc/nsswitch.conf
-this may mean that a DNS, LDAP, or NIS request is made.
-If the new query is successful,
-reloading will repeat when the new value would expire,
-until
-.B reload-count
-reloads have happened for the entry,
-and only then will it actually be removed from the cache.
-A request from a client which hits the entry will
-reset the reload counter on the entry.
-Purging the cache using
-.I nscd\~-i
-overrides the reload logic and removes the entry.
-.PP
-Reloading has the effect of extending cache entry TTLs
-without compromising on cache coherency,
-at the cost of additional load on the backing name service.
-Whether this is a good idea on your system depends on
-details of your applications' behavior,
-your name service,
-and the effective TTL values of your cache entries.
-Note that for some name services
-(for example, DNS),
-the effective TTL is the value returned from the name service and
-.I not
-the value of the
-.B positive\-time\-to\-live
-attribute.
-.PP
-Please consider the following advice carefully:
-.IP \[bu] 3
-If your application will make a second request for the same name,
-after more than 1 TTL but before
-.B reload\-count
-TTLs,
-and is sensitive to the latency of a cache miss,
-then reloading may be a good idea for you.
-.IP \[bu]
-If your name service is configured to return very short TTLs,
-and your applications only make requests rarely under normal circumstances,
-then reloading may result in additional load on your backing name service
-without any benefit to applications,
-which is probably a bad idea for you.
-.IP \[bu]
-If your name service capacity is limited,
-reloading may have the surprising effect of
-increasing load on your name service instead of reducing it,
-and may be a bad idea for you.
-.IP \[bu]
-Setting
-.B reload\-count
-to
-.B unlimited
-is almost never a good idea,
-as it will result in a cache that never expires entries
-and puts never-ending additional load on the backing name service.
-.PP
-Some distributions have an init script for
-.BR nscd (8)
-with a
-.I reload
-command which uses
-.I nscd\~-i
-to purge the cache.
-That use of the word "reload" is entirely different
-from the "reloading" described here.
-.SH SEE ALSO
-.BR nscd (8)
-.\" .SH AUTHOR
-.\" .B nscd
-.\" was written by Thorsten Kukuk and Ulrich Drepper.
diff --git a/man5/nss.5 b/man5/nss.5
deleted file mode 100644
index 240cf12f8..000000000
--- a/man5/nss.5
+++ /dev/null
@@ -1,101 +0,0 @@
-.\" Copyright (C) 2006 Red Hat, Inc. All rights reserved.
-.\" Author: Ulrich Drepper <drepper@redhat.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-only
-.\"
-.TH nss 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-nss \- Name Service Switch configuration file
-.SH DESCRIPTION
-Each call to a function which retrieves data from a system database
-like the password or group database is handled by the Name Service
-Switch implementation in the GNU C library.
-The various services
-provided are implemented by independent modules, each of which
-naturally varies widely from the other.
-.PP
-The default implementations coming with the GNU C library are by
-default conservative and do not use unsafe data.
-This might be very costly in some situations, especially when the databases
-are large.
-Some modules allow the system administrator to request
-taking shortcuts if these are known to be safe.
-It is then the system administrator's responsibility to ensure the assumption
-is correct.
-.PP
-There are other modules where the implementation changed over time.
-If an implementation used to sacrifice speed for memory consumption,
-it might create problems if the preference is switched.
-.PP
-The
-.I /etc/default/nss
-file contains a number of variable assignments.
-Each variable controls the behavior of one or more
-NSS modules.
-White spaces are ignored.
-Lines beginning with \[aq]#\[aq]
-are treated as comments.
-.PP
-The variables currently recognized are:
-.TP
-\fBNETID_AUTHORITATIVE =\fR \fITRUE\fR|\fIFALSE\fR
-If set to TRUE, the NIS backend for the
-.BR initgroups (3)
-function will accept the information
-from the
-.I netid.byname
-NIS map as authoritative.
-This can speed up the function significantly if the
-.I group.byname
-map is large.
-The content of the
-.I netid.byname
-map is used \fBas is\fR.
-The system administrator has to make sure it is correctly generated.
-.TP
-\fBSERVICES_AUTHORITATIVE =\fR \fITRUE\fR|\fIFALSE\fR
-If set to TRUE, the NIS backend for the
-.BR getservbyname (3)
-and
-.BR getservbyname_r (3)
-functions will assume that the
-.I services.byservicename
-NIS map exists and is authoritative, particularly
-that it contains both keys with /proto and without /proto for both
-primary service names and service aliases.
-The system administrator has to make sure it is correctly generated.
-.TP
-\fBSETENT_BATCH_READ =\fR \fITRUE\fR|\fIFALSE\fR
-If set to TRUE, the NIS backend for the
-.BR setpwent (3)
-and
-.BR setgrent (3)
-functions will read the entire database at once and then
-hand out the requests one by one from memory with every corresponding
-.BR getpwent (3)
-or
-.BR getgrent (3)
-call respectively.
-Otherwise, each
-.BR getpwent (3)
-or
-.BR getgrent (3)
-call might result in a network communication with the server to get
-the next entry.
-.SH FILES
-\fI/etc/default/nss\fR
-.SH EXAMPLES
-The default configuration corresponds to the following configuration file:
-.PP
-.in +4n
-.EX
-NETID_AUTHORITATIVE=FALSE
-SERVICES_AUTHORITATIVE=FALSE
-SETENT_BATCH_READ=FALSE
-.EE
-.in
-.\" .SH AUTHOR
-.\" Ulrich Drepper <drepper@redhat.com>
-.\"
-.SH SEE ALSO
-\fInsswitch.conf\fR
diff --git a/man5/nsswitch.conf.5 b/man5/nsswitch.conf.5
deleted file mode 100644
index 371a0dbae..000000000
--- a/man5/nsswitch.conf.5
+++ /dev/null
@@ -1,427 +0,0 @@
-.\" Copyright (c) 1998, 1999 Thorsten Kukuk (kukuk@vt.uni-paderborn.de)
-.\" Copyright (c) 2011, Mark R. Bannister <cambridge@users.sourceforge.net>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH nsswitch.conf 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-nsswitch.conf \- Name Service Switch configuration file
-.SH DESCRIPTION
-The Name Service Switch (NSS) configuration file,
-.IR /etc/nsswitch.conf ,
-is used by the GNU C Library and certain other applications to determine
-the sources from which to obtain name-service information in
-a range of categories,
-and in what order.
-Each category of information is identified by a database name.
-.PP
-The file is plain ASCII text, with columns separated by spaces or tab
-characters.
-The first column specifies the database name.
-The remaining columns describe the order of sources to query and a
-limited set of actions that can be performed by lookup result.
-.PP
-The following databases are understood by the GNU C Library:
-.TP 12
-.B aliases
-Mail aliases, used by
-.BR getaliasent (3)
-and related functions.
-.TP
-.B ethers
-Ethernet numbers.
-.TP
-.B group
-Groups of users, used by
-.BR getgrent (3)
-and related functions.
-.TP
-.B hosts
-Host names and numbers, used by
-.BR gethostbyname (3)
-and related functions.
-.TP
-.B initgroups
-Supplementary group access list, used by
-.BR getgrouplist (3)
-function.
-.TP
-.B netgroup
-Network-wide list of hosts and users, used for access rules.
-C libraries before glibc 2.1 supported netgroups only over NIS.
-.TP
-.B networks
-Network names and numbers, used by
-.BR getnetent (3)
-and related functions.
-.TP
-.B passwd
-User passwords, used by
-.BR getpwent (3)
-and related functions.
-.TP
-.B protocols
-Network protocols, used by
-.BR getprotoent (3)
-and related functions.
-.TP
-.B publickey
-Public and secret keys for Secure_RPC used by NFS and NIS+.
-.TP
-.B rpc
-Remote procedure call names and numbers, used by
-.BR getrpcbyname (3)
-and related functions.
-.TP
-.B services
-Network services, used by
-.BR getservent (3)
-and related functions.
-.TP
-.B shadow
-Shadow user passwords, used by
-.BR getspnam (3)
-and related functions.
-.PP
-The GNU C Library ignores databases with unknown names.
-Some applications use this to implement special handling for their own
-databases.
-For example,
-.BR sudo (8)
-consults the
-.B sudoers
-database.
-Delegation of subordinate user/group IDs
-can be configured using the
-.B subid
-database.
-Refer to
-.BR subuid (5)
-and
-.BR subgid (5)
-for more details.
-.PP
-Here is an example
-.I /etc/nsswitch.conf
-file:
-.PP
-.in +4n
-.EX
-passwd: compat
-group: compat
-shadow: compat
-\&
-hosts: dns [!UNAVAIL=return] files
-networks: nis [NOTFOUND=return] files
-ethers: nis [NOTFOUND=return] files
-protocols: nis [NOTFOUND=return] files
-rpc: nis [NOTFOUND=return] files
-services: nis [NOTFOUND=return] files
-.EE
-.in
-.PP
-The first column is the database name.
-The remaining columns specify:
-.IP \[bu] 3
-One or more service specifications, for example, "files", "db", or "nis".
-The order of the services on the line determines the order in which
-those services will be queried, in turn, until a result is found.
-.IP \[bu]
-Optional actions to perform if a particular result is obtained
-from the preceding service, for example, "[NOTFOUND=return]".
-.PP
-The service specifications supported on your system depend on the
-presence of shared libraries, and are therefore extensible.
-Libraries called
-.IB /lib/libnss_SERVICE.so. X
-will provide the named
-.IR SERVICE .
-On a standard installation, you can use
-"files", "db", "nis", and "nisplus".
-For the
-.B hosts
-database, you can additionally specify "dns".
-For the
-.BR passwd ,
-.BR group ,
-and
-.B shadow
-databases, you can additionally specify
-"compat" (see
-.B "Compatibility mode"
-below).
-The version number
-.B X
-may be 1 for glibc 2.0, or 2 for glibc 2.1 and later.
-On systems with additional libraries installed, you may have access to
-further services such as "hesiod", "ldap", "winbind", and "wins".
-.PP
-An action may also be specified following a service specification.
-The action modifies the behavior following a result obtained
-from the preceding data source.
-Action items take the general form:
-.PP
-.RS 4
-.RI [ STATUS = ACTION ]
-.br
-.RI [! STATUS = ACTION ]
-.RE
-.PP
-where
-.PP
-.RS 4
-.I STATUS
-=>
-.B success
-|
-.B notfound
-|
-.B unavail
-|
-.B tryagain
-.br
-.I ACTION
-=>
-.B return
-|
-.B continue
-|
-.B merge
-.RE
-.PP
-The ! negates the test, matching all possible results except the
-one specified.
-The case of the keywords is not significant.
-.PP
-The
-.I STATUS
-value is matched against the result of the lookup function called by
-the preceding service specification, and can be one of:
-.RS 4
-.TP 12
-.B success
-No error occurred and the requested entry is returned.
-The default action for this condition is "return".
-.TP
-.B notfound
-The lookup succeeded, but the requested entry was not found.
-The default action for this condition is "continue".
-.TP
-.B unavail
-The service is permanently unavailable.
-This can mean either that the
-required file cannot be read, or, for network services, that the server
-is not available or does not allow queries.
-The default action for this condition is "continue".
-.TP
-.B tryagain
-The service is temporarily unavailable.
-This could mean a file is
-locked or a server currently cannot accept more connections.
-The default action for this condition is "continue".
-.RE
-.PP
-The
-.I ACTION
-value can be one of:
-.RS 4
-.TP 12
-.B return
-Return a result now.
-Do not call any further lookup functions.
-However, for compatibility reasons, if this is the selected action for the
-.B group
-database and the
-.B notfound
-status, and the configuration file does not contain the
-.B initgroups
-line, the next lookup function is always called,
-without affecting the search result.
-.TP
-.B continue
-Call the next lookup function.
-.TP
-.B merge
-.I [SUCCESS=merge]
-is used between two database entries.
-When a group is located in the first of the two group entries,
-processing will continue on to the next one.
-If the group is also found in the next entry (and the group name and GID
-are an exact match), the member list of the second entry will be added
-to the group object to be returned.
-Available since glibc 2.24.
-Note that merging will not be done for
-.BR getgrent (3)
-nor will duplicate members be pruned when they occur in both entries
-being merged.
-.RE
-.SS Compatibility mode (compat)
-The NSS "compat" service is similar to "files" except that it
-additionally permits special entries in corresponding files
-for granting users or members of netgroups access to the system.
-The following entries are valid in this mode:
-.RS 4
-.PP
-For
-.B passwd
-and
-.B shadow
-databases:
-.RS 4
-.TP 12
-.BI + user
-Include the specified
-.I user
-from the NIS passwd/shadow map.
-.TP
-.BI +@ netgroup
-Include all users in the given
-.IR netgroup .
-.TP
-.BI \- user
-Exclude the specified
-.I user
-from the NIS passwd/shadow map.
-.TP
-.BI \-@ netgroup
-Exclude all users in the given
-.IR netgroup .
-.TP
-.B +
-Include every user, except previously excluded ones, from the
-NIS passwd/shadow map.
-.RE
-.PP
-For
-.B group
-database:
-.RS 4
-.TP 12
-.BI + group
-Include the specified
-.I group
-from the NIS group map.
-.TP
-.BI \- group
-Exclude the specified
-.I group
-from the NIS group map.
-.TP
-.B +
-Include every group, except previously excluded ones, from the
-NIS group map.
-.RE
-.RE
-.PP
-By default, the source is "nis", but this may be
-overridden by specifying any NSS service except "compat" itself
-as the source for the pseudo-databases
-.BR passwd_compat ,
-.BR group_compat ,
-and
-.BR shadow_compat .
-.SH FILES
-A service named
-.I SERVICE
-is implemented by a shared object library named
-.IB libnss_SERVICE.so. X
-that resides in
-.IR /lib .
-.RS 4
-.TP 25
-.PD 0
-.I /etc/nsswitch.conf
-NSS configuration file.
-.TP
-.IB /lib/libnss_compat.so. X
-implements "compat" source.
-.TP
-.IB /lib/libnss_db.so. X
-implements "db" source.
-.TP
-.IB /lib/libnss_dns.so. X
-implements "dns" source.
-.TP
-.IB /lib/libnss_files.so. X
-implements "files" source.
-.TP
-.IB /lib/libnss_hesiod.so. X
-implements "hesiod" source.
-.TP
-.IB /lib/libnss_nis.so. X
-implements "nis" source.
-.TP
-.IB /lib/libnss_nisplus.so. X
-implements "nisplus" source.
-.PD
-.RE
-.PP
-The following files are read when "files" source is specified
-for respective databases:
-.RS 4
-.TP 12
-.PD 0
-.B aliases
-.I /etc/aliases
-.TP
-.B ethers
-.I /etc/ethers
-.TP
-.B group
-.I /etc/group
-.TP
-.B hosts
-.I /etc/hosts
-.TP
-.B initgroups
-.I /etc/group
-.TP
-.B netgroup
-.I /etc/netgroup
-.TP
-.B networks
-.I /etc/networks
-.TP
-.B passwd
-.I /etc/passwd
-.TP
-.B protocols
-.I /etc/protocols
-.TP
-.B publickey
-.I /etc/publickey
-.TP
-.B rpc
-.I /etc/rpc
-.TP
-.B services
-.I /etc/services
-.TP
-.B shadow
-.I /etc/shadow
-.PD
-.RE
-.SH NOTES
-Starting with glibc 2.33,
-.\" https://sourceware.org/bugzilla/show_bug.cgi?id=12459
-.B nsswitch.conf
-is automatically reloaded if the file is changed.
-In earlier versions, the entire file was read only once within each process.
-If the file was later changed,
-the process would continue using the old configuration.
-.PP
-Traditionally, there was only a single source for service information,
-often in the form of a single configuration
-file (e.g., \fI/etc/passwd\fP).
-However, as other name services, such as the Network Information
-Service (NIS) and the Domain Name Service (DNS), became popular,
-a method was needed
-that would be more flexible than fixed search orders coded into
-the C library.
-The Name Service Switch mechanism,
-which was based on the mechanism used by
-Sun Microsystems in the Solaris 2 C library,
-introduced a cleaner solution to the problem.
-.SH SEE ALSO
-.BR getent (1),
-.BR nss (5)
diff --git a/man5/passwd.5 b/man5/passwd.5
deleted file mode 100644
index aa40f0e60..000000000
--- a/man5/passwd.5
+++ /dev/null
@@ -1,160 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sun Jul 25 10:46:28 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Sun Aug 21 18:12:27 1994 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Sun Jun 18 01:53:57 1995 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified Mon Jan 5 20:24:40 MET 1998 by Michael Haardt
-.\" (michael@cantor.informatik.rwth-aachen.de)
-.TH passwd 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-passwd \- password file
-.SH DESCRIPTION
-The
-.I /etc/passwd
-file is a text file that describes user login accounts for the system.
-It should have read permission allowed for all users (many utilities, like
-.BR ls (1)
-use it to map user IDs to usernames), but write access only for the
-superuser.
-.PP
-In the good old days there was no great problem with this general
-read permission.
-Everybody could read the encrypted passwords, but the
-hardware was too slow to crack a well-chosen password, and moreover the
-basic assumption used to be that of a friendly user-community.
-These days many people run some version of the shadow password suite, where
-.I /etc/passwd
-has an \[aq]x\[aq] character in the password field,
-and the encrypted passwords are in
-.IR /etc/shadow ,
-which is readable by the superuser only.
-.PP
-If the encrypted password, whether in
-.I /etc/passwd
-or in
-.IR /etc/shadow ,
-is an empty string, login is allowed without even asking for a password.
-Note that this functionality may be intentionally disabled in applications,
-or configurable (for example using the
-.RB \[dq] nullok \[dq]
-or
-.RB \[dq] nonull \[dq]
-arguments to
-.BR pam_unix (8)).
-.PP
-If the encrypted password in
-.I /etc/passwd
-is "\fI*NP*\fP" (without the quotes),
-the shadow record should be obtained from an NIS+ server.
-.PP
-Regardless of whether shadow passwords are used, many system administrators
-use an asterisk (*) in the encrypted password field to make sure
-that this user can not authenticate themself using a
-password.
-(But see NOTES below.)
-.PP
-If you create a new login, first put an asterisk (*) in the password field,
-then use
-.BR passwd (1)
-to set it.
-.PP
-Each line of the file describes a single user,
-and contains seven colon-separated fields:
-.PP
-.in +4n
-.EX
-name:password:UID:GID:GECOS:directory:shell
-.EE
-.in
-.PP
-The field are as follows:
-.TP 12
-.I name
-This is the user's login name.
-It should not contain capital letters.
-.TP
-.I password
-This is either the encrypted user password,
-an asterisk (*), or the letter \[aq]x\[aq].
-(See
-.BR pwconv (8)
-for an explanation of \[aq]x\[aq].)
-.TP
-.I UID
-The privileged
-.I root
-login account (superuser) has the user ID 0.
-.TP
-.I GID
-This is the numeric primary group ID for this user.
-(Additional groups for the user are defined in the system group file; see
-.BR group (5)).
-.TP
-.I GECOS
-This field (sometimes called the "comment field")
-is optional and used only for informational purposes.
-Usually, it contains the full username.
-Some programs (for example,
-.BR finger (1))
-display information from this field.
-.IP
-GECOS stands for "General Electric Comprehensive Operating System",
-which was renamed to GCOS when
-GE's large systems division was sold to Honeywell.
-Dennis Ritchie has reported: "Sometimes we sent printer output or
-batch jobs to the GCOS machine.
-The gcos field in the password file was a place to stash the
-information for the $IDENTcard.
-Not elegant."
-.TP
-.I directory
-This is the user's home directory:
-the initial directory where the user is placed after logging in.
-The value in this field is used to set the
-.B HOME
-environment variable.
-.TP
-.I shell
-This is the program to run at login (if empty, use
-.IR /bin/sh ).
-If set to a nonexistent executable, the user will be unable to login
-through
-.BR login (1).
-The value in this field is used to set the
-.B SHELL
-environment variable.
-.SH FILES
-.I /etc/passwd
-.SH NOTES
-If you want to create user groups, there must be an entry in
-.IR /etc/group ,
-or no group will exist.
-.PP
-If the encrypted password is set to an asterisk (*), the user will be unable
-to login using
-.BR login (1),
-but may still login using
-.BR rlogin (1),
-run existing processes and initiate new ones through
-.BR rsh (1),
-.BR cron (8),
-.BR at (1),
-or mail filters, etc.
-Trying to lock an account by simply changing the
-shell field yields the same result and additionally allows the use of
-.BR su (1).
-.SH SEE ALSO
-.BR chfn (1),
-.BR chsh (1),
-.BR login (1),
-.BR passwd (1),
-.BR su (1),
-.BR crypt (3),
-.BR getpwent (3),
-.BR getpwnam (3),
-.BR group (5),
-.BR shadow (5),
-.BR vipw (8)
diff --git a/man5/proc.5 b/man5/proc.5
deleted file mode 100644
index 723154edb..000000000
--- a/man5/proc.5
+++ /dev/null
@@ -1,6962 +0,0 @@
-'\" t
-.\" Copyright (C) 1994, 1995 by Daniel Quinlan (quinlan@yggdrasil.com)
-.\" and Copyright (C) 2002-2008,2017 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" with networking additions from Alan Cox (A.Cox@swansea.ac.uk)
-.\" and scsi additions from Michael Neuffer (neuffer@mail.uni-mainz.de)
-.\" and sysctl additions from Andries Brouwer (aeb@cwi.nl)
-.\" and System V IPC (as well as various other) additions from
-.\" Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified 1995-05-17 by faith@cs.unc.edu
-.\" Minor changes by aeb and Marty Leisner (leisner@sdsp.mc.xerox.com).
-.\" Modified 1996-04-13, 1996-07-22 by aeb@cwi.nl
-.\" Modified 2001-12-16 by rwhron@earthlink.net
-.\" Modified 2002-07-13 by jbelton@shaw.ca
-.\" Modified 2002-07-22, 2003-05-27, 2004-04-06, 2004-05-25
-.\" by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" 2004-11-17, mtk -- updated notes on /proc/loadavg
-.\" 2004-12-01, mtk, rtsig-max and rtsig-nr went away in Linux 2.6.8
-.\" 2004-12-14, mtk, updated 'statm', and fixed error in order of list
-.\" 2005-05-12, mtk, updated 'stat'
-.\" 2005-07-13, mtk, added /proc/sys/fs/mqueue/*
-.\" 2005-09-16, mtk, Added /proc/sys/fs/suid_dumpable
-.\" 2005-09-19, mtk, added /proc/zoneinfo
-.\" 2005-03-01, mtk, moved /proc/sys/fs/mqueue/* material to mq_overview.7.
-.\" 2008-06-05, mtk, Added /proc/[pid]/oom_score, /proc/[pid]/oom_adj,
-.\" /proc/[pid]/limits, /proc/[pid]/mountinfo, /proc/[pid]/mountstats,
-.\" and /proc/[pid]/fdinfo/*.
-.\" 2008-06-19, mtk, Documented /proc/[pid]/status.
-.\" 2008-07-15, mtk, added /proc/config.gz
-.\"
-.\" FIXME cross check against Documentation/filesystems/proc.txt
-.\" to see what information could be imported from that file
-.\" into this file.
-.\"
-.TH proc 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-proc \- process information, system information, and sysctl pseudo-filesystem
-.SH DESCRIPTION
-The
-.B proc
-filesystem is a pseudo-filesystem which provides an interface to
-kernel data structures.
-It is commonly mounted at
-.IR /proc .
-Typically, it is mounted automatically by the system,
-but it can also be mounted manually using a command such as:
-.PP
-.in +4n
-.EX
-mount \-t proc proc /proc
-.EE
-.in
-.PP
-Most of the files in the
-.B proc
-filesystem are read-only,
-but some files are writable, allowing kernel variables to be changed.
-.\"
-.SS Mount options
-The
-.B proc
-filesystem supports the following mount options:
-.TP
-.BR hidepid "=\fIn\fP (since Linux 3.3)"
-.\" commit 0499680a42141d86417a8fbaa8c8db806bea1201
-This option controls who can access the information in
-.IR /proc/ pid
-directories.
-The argument,
-.IR n ,
-is one of the following values:
-.RS
-.TP 4
-0
-Everybody may access all
-.IR /proc/ pid
-directories.
-This is the traditional behavior,
-and the default if this mount option is not specified.
-.TP
-1
-Users may not access files and subdirectories inside any
-.IR /proc/ pid
-directories but their own (the
-.IR /proc/ pid
-directories themselves remain visible).
-Sensitive files such as
-.IR /proc/ pid /cmdline
-and
-.IR /proc/ pid /status
-are now protected against other users.
-This makes it impossible to learn whether any user is running a
-specific program
-(so long as the program doesn't otherwise reveal itself by its behavior).
-.\" As an additional bonus, since
-.\" .IR /proc/[pid]/cmdline
-.\" is inaccessible for other users,
-.\" poorly written programs passing sensitive information via
-.\" program arguments are now protected against local eavesdroppers.
-.TP
-2
-As for mode 1, but in addition the
-.IR /proc/ pid
-directories belonging to other users become invisible.
-This means that
-.IR /proc/ pid
-entries can no longer be used to discover the PIDs on the system.
-This doesn't hide the fact that a process with a specific PID value exists
-(it can be learned by other means, for example, by "kill \-0 $PID"),
-but it hides a process's UID and GID,
-which could otherwise be learned by employing
-.BR stat (2)
-on a
-.IR /proc/ pid
-directory.
-This greatly complicates an attacker's task of gathering
-information about running processes (e.g., discovering whether
-some daemon is running with elevated privileges,
-whether another user is running some sensitive program,
-whether other users are running any program at all, and so on).
-.RE
-.TP
-.BR gid "=\fIgid\fP (since Linux 3.3)"
-.\" commit 0499680a42141d86417a8fbaa8c8db806bea1201
-Specifies the ID of a group whose members are authorized to
-learn process information otherwise prohibited by
-.B hidepid
-(i.e., users in this group behave as though
-.I /proc
-was mounted with
-.IR hidepid=0 ).
-This group should be used instead of approaches such as putting
-nonroot users into the
-.BR sudoers (5)
-file.
-.\"
-.SS Overview
-Underneath
-.IR /proc ,
-there are the following general groups of files and subdirectories:
-.TP
-.IR /proc/ "pid subdirectories"
-Each one of these subdirectories contains files and subdirectories
-exposing information about the process with the corresponding process ID.
-.IP
-Underneath each of the
-.IR /proc/ pid
-directories, a
-.I task
-subdirectory contains subdirectories of the form
-.IR task/ tid,
-which contain corresponding information about each of the threads
-in the process, where
-.I tid
-is the kernel thread ID of the thread.
-.IP
-The
-.IR /proc/ pid
-subdirectories are visible when iterating through
-.I /proc
-with
-.BR getdents (2)
-(and thus are visible when one uses
-.BR ls (1)
-to view the contents of
-.IR /proc ).
-.TP
-.IR /proc/ "tid subdirectories"
-Each one of these subdirectories contains files and subdirectories
-exposing information about the thread with the corresponding thread ID.
-The contents of these directories are the same as the corresponding
-.IR /proc/ pid /task/ tid
-directories.
-.IP
-The
-.IR /proc/ tid
-subdirectories are
-.I not
-visible when iterating through
-.I /proc
-with
-.BR getdents (2)
-(and thus are
-.I not
-visible when one uses
-.BR ls (1)
-to view the contents of
-.IR /proc ).
-.TP
-.I /proc/self
-When a process accesses this magic symbolic link,
-it resolves to the process's own
-.IR /proc/ pid
-directory.
-.TP
-.I /proc/thread\-self
-When a thread accesses this magic symbolic link,
-it resolves to the process's own
-.IR /proc/self/task/ tid
-directory.
-.TP
-.I /proc/[a\-z]*
-Various other files and subdirectories under
-.I /proc
-expose system-wide information.
-.PP
-All of the above are described in more detail below.
-.\"
-.SS Files and directories
-The following list provides details of many of the files and directories
-under the
-.I /proc
-hierarchy.
-.TP
-.IR /proc/ pid
-There is a numerical subdirectory for each running process; the
-subdirectory is named by the process ID.
-Each
-.IR /proc/ pid
-subdirectory contains the pseudo-files and directories described below.
-.IP
-The files inside each
-.IR /proc/ pid
-directory are normally owned by the effective user and
-effective group ID of the process.
-However, as a security measure, the ownership is made
-.I root:root
-if the process's "dumpable" attribute is set to a value other than 1.
-.IP
-Before Linux 4.11,
-.\" commit 68eb94f16227336a5773b83ecfa8290f1d6b78ce
-.I root:root
-meant the "global" root user ID and group ID
-(i.e., UID 0 and GID 0 in the initial user namespace).
-Since Linux 4.11,
-if the process is in a noninitial user namespace that has a
-valid mapping for user (group) ID 0 inside the namespace, then
-the user (group) ownership of the files under
-.IR /proc/ pid
-is instead made the same as the root user (group) ID of the namespace.
-This means that inside a container,
-things work as expected for the container "root" user.
-.IP
-The process's "dumpable" attribute may change for the following reasons:
-.RS
-.IP \[bu] 3
-The attribute was explicitly set via the
-.BR prctl (2)
-.B PR_SET_DUMPABLE
-operation.
-.IP \[bu]
-The attribute was reset to the value in the file
-.I /proc/sys/fs/suid_dumpable
-(described below), for the reasons described in
-.BR prctl (2).
-.RE
-.IP
-Resetting the "dumpable" attribute to 1 reverts the ownership of the
-.IR /proc/ pid /*
-files to the process's effective UID and GID.
-Note, however, that if the effective UID or GID is subsequently modified,
-then the "dumpable" attribute may be reset, as described in
-.BR prctl (2).
-Therefore, it may be desirable to reset the "dumpable" attribute
-.I after
-making any desired changes to the process's effective UID or GID.
-.TP
-.IR /proc/ pid /attr
-.\" https://lwn.net/Articles/28222/
-.\" From: Stephen Smalley <sds@epoch.ncsc.mil>
-.\" To: LKML and others
-.\" Subject: [RFC][PATCH] Process Attribute API for Security Modules
-.\" Date: 08 Apr 2003 16:17:52 -0400
-.\"
-.\" http://www.nsa.gov/research/_files/selinux/papers/module/x362.shtml
-.\"
-The files in this directory provide an API for security modules.
-The contents of this directory are files that can be read and written
-in order to set security-related attributes.
-This directory was added to support SELinux,
-but the intention was that the API be general enough to support
-other security modules.
-For the purpose of explanation,
-examples of how SELinux uses these files are provided below.
-.IP
-This directory is present only if the kernel was configured with
-.BR CONFIG_SECURITY .
-.TP
-.IR /proc/ pid /attr/current " (since Linux 2.6.0)"
-The contents of this file represent the current
-security attributes of the process.
-.IP
-In SELinux, this file is used to get the security context of a process.
-Prior to Linux 2.6.11, this file could not be used to set the security
-context (a write was always denied), since SELinux limited process security
-transitions to
-.BR execve (2)
-(see the description of
-.IR /proc/ pid /attr/exec ,
-below).
-Since Linux 2.6.11, SELinux lifted this restriction and began supporting
-"set" operations via writes to this node if authorized by policy,
-although use of this operation is only suitable for applications that are
-trusted to maintain any desired separation between the old and new security
-contexts.
-.IP
-Prior to Linux 2.6.28, SELinux did not allow threads within a
-multithreaded process to set their security context via this node
-as it would yield an inconsistency among the security contexts of the
-threads sharing the same memory space.
-Since Linux 2.6.28, SELinux lifted
-this restriction and began supporting "set" operations for threads within
-a multithreaded process if the new security context is bounded by the old
-security context, where the bounded relation is defined in policy and
-guarantees that the new security context has a subset of the permissions
-of the old security context.
-.IP
-Other security modules may choose to support "set" operations via
-writes to this node.
-.TP
-.IR /proc/ pid /attr/exec " (since Linux 2.6.0)"
-This file represents the attributes to assign to the
-process upon a subsequent
-.BR execve (2).
-.IP
-In SELinux,
-this is needed to support role/domain transitions, and
-.BR execve (2)
-is the preferred point to make such transitions because it offers better
-control over the initialization of the process in the new security label
-and the inheritance of state.
-In SELinux, this attribute is reset on
-.BR execve (2)
-so that the new program reverts to the default behavior for any
-.BR execve (2)
-calls that it may make.
-In SELinux, a process can set
-only its own
-.IR /proc/ pid /attr/exec
-attribute.
-.TP
-.IR /proc/ pid /attr/fscreate " (since Linux 2.6.0)"
-This file represents the attributes to assign to files
-created by subsequent calls to
-.BR open (2),
-.BR mkdir (2),
-.BR symlink (2),
-and
-.BR mknod (2)
-.IP
-SELinux employs this file to support creation of a file
-(using the aforementioned system calls)
-in a secure state,
-so that there is no risk of inappropriate access being obtained
-between the time of creation and the time that attributes are set.
-In SELinux, this attribute is reset on
-.BR execve (2),
-so that the new program reverts to the default behavior for
-any file creation calls it may make, but the attribute will persist
-across multiple file creation calls within a program unless it is
-explicitly reset.
-In SELinux, a process can set only its own
-.IR /proc/ pid /attr/fscreate
-attribute.
-.TP
-.IR /proc/ pid /attr/keycreate " (since Linux 2.6.18)"
-.\" commit 4eb582cf1fbd7b9e5f466e3718a59c957e75254e
-If a process writes a security context into this file,
-all subsequently created keys
-.RB ( add_key (2))
-will be labeled with this context.
-For further information, see the kernel source file
-.I Documentation/security/keys/core.rst
-(or file
-.\" commit b68101a1e8f0263dbc7b8375d2a7c57c6216fb76
-.I Documentation/security/keys.txt
-between Linux 3.0 and Linux 4.13, or
-.\" commit d410fa4ef99112386de5f218dd7df7b4fca910b4
-.I Documentation/keys.txt
-before Linux 3.0).
-.TP
-.IR /proc/ pid /attr/prev " (since Linux 2.6.0)"
-This file contains the security context of the process before the last
-.BR execve (2);
-that is, the previous value of
-.IR /proc/ pid /attr/current .
-.TP
-.IR /proc/ pid /attr/socketcreate " (since Linux 2.6.18)"
-.\" commit 42c3e03ef6b298813557cdb997bd6db619cd65a2
-If a process writes a security context into this file,
-all subsequently created sockets will be labeled with this context.
-.TP
-.IR /proc/ pid /autogroup " (since Linux 2.6.38)"
-.\" commit 5091faa449ee0b7d73bc296a93bca9540fc51d0a
-See
-.BR sched (7).
-.TP
-.IR /proc/ pid /auxv " (since Linux 2.6.0)"
-.\" Precisely: Linux 2.6.0-test7
-This contains the contents of the ELF interpreter information passed
-to the process at exec time.
-The format is one \fIunsigned long\fP ID
-plus one \fIunsigned long\fP value for each entry.
-The last entry contains two zeros.
-See also
-.BR getauxval (3).
-.IP
-Permission to access this file is governed by a ptrace access mode
-.B PTRACE_MODE_READ_FSCREDS
-check; see
-.BR ptrace (2).
-.TP
-.IR /proc/ pid /cgroup " (since Linux 2.6.24)"
-See
-.BR cgroups (7).
-.TP
-.IR /proc/ pid /clear_refs " (since Linux 2.6.22)"
-.\" commit b813e931b4c8235bb42e301096ea97dbdee3e8fe (2.6.22)
-.\" commit 398499d5f3613c47f2143b8c54a04efb5d7a6da9 (2.6.32)
-.\" commit 040fa02077de01c7e08fa75be6125e4ca5636011 (3.11)
-.\"
-.\" "Clears page referenced bits shown in smaps output"
-.\" write-only, writable only by the owner of the process
-.IP
-This is a write-only file, writable only by owner of the process.
-.IP
-The following values may be written to the file:
-.RS
-.TP
-1 (since Linux 2.6.22)
-.\" Internally: CLEAR_REFS_ALL
-Reset the PG_Referenced and ACCESSED/YOUNG
-bits for all the pages associated with the process.
-(Before Linux 2.6.32, writing any nonzero value to this file
-had this effect.)
-.TP
-2 (since Linux 2.6.32)
-.\" Internally: CLEAR_REFS_ANON
-Reset the PG_Referenced and ACCESSED/YOUNG
-bits for all anonymous pages associated with the process.
-.TP
-3 (since Linux 2.6.32)
-.\" Internally: CLEAR_REFS_MAPPED
-Reset the PG_Referenced and ACCESSED/YOUNG
-bits for all file-mapped pages associated with the process.
-.RE
-.IP
-Clearing the PG_Referenced and ACCESSED/YOUNG bits provides a method
-to measure approximately how much memory a process is using.
-One first inspects the values in the "Referenced" fields
-for the VMAs shown in
-.IR /proc/ pid /smaps
-to get an idea of the memory footprint of the
-process.
-One then clears the PG_Referenced and ACCESSED/YOUNG bits
-and, after some measured time interval,
-once again inspects the values in the "Referenced" fields
-to get an idea of the change in memory footprint of the
-process during the measured interval.
-If one is interested only in inspecting the selected mapping types,
-then the value 2 or 3 can be used instead of 1.
-.IP
-Further values can be written to affect different properties:
-.RS
-.TP
-4 (since Linux 3.11)
-Clear the soft-dirty bit for all the pages associated with the process.
-.\" Internally: CLEAR_REFS_SOFT_DIRTY
-This is used (in conjunction with
-.IR /proc/ pid /pagemap )
-by the check-point restore system to discover which pages of a process
-have been dirtied since the file
-.IR /proc/ pid /clear_refs
-was written to.
-.TP
-5 (since Linux 4.0)
-.\" Internally: CLEAR_REFS_MM_HIWATER_RSS
-Reset the peak resident set size ("high water mark") to the process's
-current resident set size value.
-.RE
-.IP
-Writing any value to
-.IR /proc/ pid /clear_refs
-other than those listed above has no effect.
-.IP
-The
-.IR /proc/ pid /clear_refs
-file is present only if the
-.B CONFIG_PROC_PAGE_MONITOR
-kernel configuration option is enabled.
-.TP
-.IR /proc/ pid /cmdline
-This read-only file holds the complete command line for the process,
-unless the process is a zombie.
-.\" In Linux 2.3.26, this also used to be true if the process was swapped out.
-In the latter case, there is nothing in this file:
-that is, a read on this file will return 0 characters.
-.IP
-For processes which are still running,
-the command-line arguments appear in this file
-in the same layout as they do in process memory:
-If the process is well-behaved,
-it is a set of strings separated by null bytes (\[aq]\e0\[aq]),
-with a further null byte after the last string.
-.IP
-This is the common case,
-but processes have the freedom to
-override the memory region and
-break assumptions about the contents or format of the
-.IR /proc/ pid /cmdline
-file.
-.IP
-If, after an
-.BR execve (2),
-the process modifies its
-.I argv
-strings, those changes will show up here.
-This is not the same thing as modifying the
-.I argv
-array.
-.IP
-Furthermore, a process may change the memory location that this file refers via
-.BR prctl (2)
-operations such as
-.BR PR_SET_MM_ARG_START .
-.IP
-Think of this file as the command line that the process wants you to see.
-.TP
-.IR /proc/ pid /comm " (since Linux 2.6.33)"
-.\" commit 4614a696bd1c3a9af3a08f0e5874830a85b889d4
-This file exposes the process's
-.I comm
-value\[em]that is, the command name associated with the process.
-Different threads in the same process may have different
-.I comm
-values, accessible via
-.IR /proc/ pid /task/ tid /comm .
-A thread may modify its
-.I comm
-value, or that of any of other thread in the same thread group (see
-the discussion of
-.B CLONE_THREAD
-in
-.BR clone (2)),
-by writing to the file
-.IR /proc/self/task/ tid /comm .
-Strings longer than
-.B TASK_COMM_LEN
-(16) characters (including the terminating null byte) are silently truncated.
-.IP
-This file provides a superset of the
-.BR prctl (2)
-.B PR_SET_NAME
-and
-.B PR_GET_NAME
-operations, and is employed by
-.BR pthread_setname_np (3)
-when used to rename threads other than the caller.
-The value in this file is used for the
-.I %e
-specifier in
-.IR /proc/sys/kernel/core_pattern ;
-see
-.BR core (5).
-.TP
-.IR /proc/ pid /coredump_filter " (since Linux 2.6.23)"
-See
-.BR core (5).
-.TP
-.IR /proc/ pid /cpuset " (since Linux 2.6.12)"
-.\" and/proc/[pid]/task/[tid]/cpuset
-See
-.BR cpuset (7).
-.TP
-.IR /proc/ pid /cwd
-This is a symbolic link to the current working directory of the process.
-To find out the current working directory of process 20,
-for instance, you can do this:
-.IP
-.in +4n
-.EX
-.RB "$" " cd /proc/20/cwd; pwd \-P"
-.EE
-.in
-.IP
-.\" The following was still true as at kernel 2.6.13
-In a multithreaded process, the contents of this symbolic link
-are not available if the main thread has already terminated
-(typically by calling
-.BR pthread_exit (3)).
-.IP
-Permission to dereference or read
-.RB ( readlink (2))
-this symbolic link is governed by a ptrace access mode
-.B PTRACE_MODE_READ_FSCREDS
-check; see
-.BR ptrace (2).
-.TP
-.IR /proc/ pid /environ
-This file contains the initial environment that was set
-when the currently executing program was started via
-.BR execve (2).
-The entries are separated by null bytes (\[aq]\e0\[aq]),
-and there may be a null byte at the end.
-Thus, to print out the environment of process 1, you would do:
-.IP
-.in +4n
-.EX
-.RB "$" " cat /proc/1/environ | tr \[aq]\e000\[aq] \[aq]\en\[aq]"
-.EE
-.in
-.IP
-If, after an
-.BR execve (2),
-the process modifies its environment
-(e.g., by calling functions such as
-.BR putenv (3)
-or modifying the
-.BR environ (7)
-variable directly),
-this file will
-.I not
-reflect those changes.
-.IP
-Furthermore, a process may change the memory location that this file refers via
-.BR prctl (2)
-operations such as
-.BR PR_SET_MM_ENV_START .
-.IP
-Permission to access this file is governed by a ptrace access mode
-.B PTRACE_MODE_READ_FSCREDS
-check; see
-.BR ptrace (2).
-.TP
-.IR /proc/ pid /exe
-Under Linux 2.2 and later, this file is a symbolic link
-containing the actual pathname of the executed command.
-This symbolic link can be dereferenced normally; attempting to open
-it will open the executable.
-You can even type
-.IR /proc/ pid /exe
-to run another copy of the same executable that is being run by
-process
-.IR pid .
-If the pathname has been unlinked, the symbolic link will contain the
-string \[aq]\ (deleted)\[aq] appended to the original pathname.
-.\" The following was still true as at kernel 2.6.13
-In a multithreaded process, the contents of this symbolic link
-are not available if the main thread has already terminated
-(typically by calling
-.BR pthread_exit (3)).
-.IP
-Permission to dereference or read
-.RB ( readlink (2))
-this symbolic link is governed by a ptrace access mode
-.B PTRACE_MODE_READ_FSCREDS
-check; see
-.BR ptrace (2).
-.IP
-Under Linux 2.0 and earlier,
-.IR /proc/ pid /exe
-is a pointer to the binary which was executed,
-and appears as a symbolic link.
-A
-.BR readlink (2)
-call on this file under Linux 2.0 returns a string in the format:
-.IP
-.in +4n
-.EX
-[device]:inode
-.EE
-.in
-.IP
-For example, [0301]:1502 would be inode 1502 on device major 03 (IDE,
-MFM, etc. drives) minor 01 (first partition on the first drive).
-.IP
-.BR find (1)
-with the
-.I \-inum
-option can be used to locate the file.
-.TP
-.IR /proc/ pid /fd/
-This is a subdirectory containing one entry for each file which the
-process has open, named by its file descriptor, and which is a
-symbolic link to the actual file.
-Thus, 0 is standard input, 1 standard output, 2 standard error, and so on.
-.IP
-For file descriptors for pipes and sockets,
-the entries will be symbolic links whose content is the
-file type with the inode.
-A
-.BR readlink (2)
-call on this file returns a string in the format:
-.IP
-.in +4n
-.EX
-type:[inode]
-.EE
-.in
-.IP
-For example,
-.I socket:[2248868]
-will be a socket and its inode is 2248868.
-For sockets, that inode can be used to find more information
-in one of the files under
-.IR /proc/net/ .
-.IP
-For file descriptors that have no corresponding inode
-(e.g., file descriptors produced by
-.BR bpf (2),
-.BR epoll_create (2),
-.BR eventfd (2),
-.BR inotify_init (2),
-.BR perf_event_open (2),
-.BR signalfd (2),
-.BR timerfd_create (2),
-and
-.BR userfaultfd (2)),
-the entry will be a symbolic link with contents of the form
-.IP
-.in +4n
-.EX
-.RI anon_inode: file-type
-.EE
-.in
-.IP
-In many cases (but not all), the
-.I file-type
-is surrounded by square brackets.
-.IP
-For example, an epoll file descriptor will have a symbolic link
-whose content is the string
-.IR "anon_inode:[eventpoll]" .
-.IP
-.\"The following was still true as at kernel 2.6.13
-In a multithreaded process, the contents of this directory
-are not available if the main thread has already terminated
-(typically by calling
-.BR pthread_exit (3)).
-.IP
-Programs that take a filename as a command-line argument,
-but don't take input from standard input if no argument is supplied,
-and programs that write to a file named as a command-line argument,
-but don't send their output to standard output
-if no argument is supplied, can nevertheless be made to use
-standard input or standard output by using
-.IR /proc/ pid /fd
-files as command-line arguments.
-For example, assuming that
-.I \-i
-is the flag designating an input file and
-.I \-o
-is the flag designating an output file:
-.IP
-.in +4n
-.EX
-.RB "$" " foobar \-i /proc/self/fd/0 \-o /proc/self/fd/1 ..."
-.EE
-.in
-.IP
-and you have a working filter.
-.\" The following is not true in my tests (MTK):
-.\" Note that this will not work for
-.\" programs that seek on their files, as the files in the fd directory
-.\" are not seekable.
-.IP
-.I /proc/self/fd/N
-is approximately the same as
-.I /dev/fd/N
-in some UNIX and UNIX-like systems.
-Most Linux MAKEDEV scripts symbolically link
-.I /dev/fd
-to
-.IR /proc/self/fd ,
-in fact.
-.IP
-Most systems provide symbolic links
-.IR /dev/stdin ,
-.IR /dev/stdout ,
-and
-.IR /dev/stderr ,
-which respectively link to the files
-.IR 0 ,
-.IR 1 ,
-and
-.I 2
-in
-.IR /proc/self/fd .
-Thus the example command above could be written as:
-.IP
-.in +4n
-.EX
-.RB "$" " foobar \-i /dev/stdin \-o /dev/stdout ..."
-.EE
-.in
-.IP
-Permission to dereference or read
-.RB ( readlink (2))
-the symbolic links in this directory is governed by a ptrace access mode
-.B PTRACE_MODE_READ_FSCREDS
-check; see
-.BR ptrace (2).
-.IP
-Note that for file descriptors referring to inodes
-(pipes and sockets, see above),
-those inodes still have permission bits and ownership information
-distinct from those of the
-.IR /proc/ pid /fd
-entry,
-and that the owner may differ from the user and group IDs of the process.
-An unprivileged process may lack permissions to open them, as in this example:
-.IP
-.in +4n
-.EX
-.RB "$" " echo test | sudo \-u nobody cat"
-test
-.RB "$" " echo test | sudo \-u nobody cat /proc/self/fd/0"
-cat: /proc/self/fd/0: Permission denied
-.EE
-.in
-.IP
-File descriptor 0 refers to the pipe created by the shell
-and owned by that shell's user, which is not
-.IR nobody ,
-so
-.B cat
-does not have permission
-to create a new file descriptor to read from that inode,
-even though it can still read from its existing file descriptor 0.
-.TP
-.IR /proc/ pid /fdinfo/ " (since Linux 2.6.22)"
-This is a subdirectory containing one entry for each file which the
-process has open, named by its file descriptor.
-The files in this directory are readable only by the owner of the process.
-The contents of each file can be read to obtain information
-about the corresponding file descriptor.
-The content depends on the type of file referred to by the
-corresponding file descriptor.
-.IP
-For regular files and directories, we see something like:
-.IP
-.in +4n
-.EX
-.RB "$" " cat /proc/12015/fdinfo/4"
-pos: 1000
-flags: 01002002
-mnt_id: 21
-.EE
-.in
-.IP
-The fields are as follows:
-.RS
-.TP
-.I pos
-This is a decimal number showing the file offset.
-.TP
-.I flags
-This is an octal number that displays the
-file access mode and file status flags (see
-.BR open (2)).
-If the close-on-exec file descriptor flag is set, then
-.I flags
-will also include the value
-.BR O_CLOEXEC .
-.IP
-Before Linux 3.1,
-.\" commit 1117f72ea0217ba0cc19f05adbbd8b9a397f5ab7
-this field incorrectly displayed the setting of
-.B O_CLOEXEC
-at the time the file was opened,
-rather than the current setting of the close-on-exec flag.
-.TP
-.I
-.I mnt_id
-This field, present since Linux 3.15,
-.\" commit 49d063cb353265c3af701bab215ac438ca7df36d
-is the ID of the mount containing this file.
-See the description of
-.IR /proc/ pid /mountinfo .
-.RE
-.IP
-For eventfd file descriptors (see
-.BR eventfd (2)),
-we see (since Linux 3.8)
-.\" commit cbac5542d48127b546a23d816380a7926eee1c25
-the following fields:
-.IP
-.in +4n
-.EX
-pos: 0
-flags: 02
-mnt_id: 10
-eventfd\-count: 40
-.EE
-.in
-.IP
-.I eventfd\-count
-is the current value of the eventfd counter, in hexadecimal.
-.IP
-For epoll file descriptors (see
-.BR epoll (7)),
-we see (since Linux 3.8)
-.\" commit 138d22b58696c506799f8de759804083ff9effae
-the following fields:
-.IP
-.in +4n
-.EX
-pos: 0
-flags: 02
-mnt_id: 10
-tfd: 9 events: 19 data: 74253d2500000009
-tfd: 7 events: 19 data: 74253d2500000007
-.EE
-.in
-.IP
-Each of the lines beginning
-.I tfd
-describes one of the file descriptors being monitored via
-the epoll file descriptor (see
-.BR epoll_ctl (2)
-for some details).
-The
-.I tfd
-field is the number of the file descriptor.
-The
-.I events
-field is a hexadecimal mask of the events being monitored for this file
-descriptor.
-The
-.I data
-field is the data value associated with this file descriptor.
-.IP
-For signalfd file descriptors (see
-.BR signalfd (2)),
-we see (since Linux 3.8)
-.\" commit 138d22b58696c506799f8de759804083ff9effae
-the following fields:
-.IP
-.in +4n
-.EX
-pos: 0
-flags: 02
-mnt_id: 10
-sigmask: 0000000000000006
-.EE
-.in
-.IP
-.I sigmask
-is the hexadecimal mask of signals that are accepted via this
-signalfd file descriptor.
-(In this example, bits 2 and 3 are set, corresponding to the signals
-.B SIGINT
-and
-.BR SIGQUIT ;
-see
-.BR signal (7).)
-.IP
-For inotify file descriptors (see
-.BR inotify (7)),
-we see (since Linux 3.8)
-the following fields:
-.IP
-.in +4n
-.EX
-pos: 0
-flags: 00
-mnt_id: 11
-inotify wd:2 ino:7ef82a sdev:800001 mask:800afff ignored_mask:0 fhandle\-bytes:8 fhandle\-type:1 f_handle:2af87e00220ffd73
-inotify wd:1 ino:192627 sdev:800001 mask:800afff ignored_mask:0 fhandle\-bytes:8 fhandle\-type:1 f_handle:27261900802dfd73
-.EE
-.in
-.IP
-Each of the lines beginning with "inotify" displays information about
-one file or directory that is being monitored.
-The fields in this line are as follows:
-.RS
-.TP
-.I wd
-A watch descriptor number (in decimal).
-.TP
-.I ino
-The inode number of the target file (in hexadecimal).
-.TP
-.I sdev
-The ID of the device where the target file resides (in hexadecimal).
-.TP
-.I mask
-The mask of events being monitored for the target file (in hexadecimal).
-.RE
-.IP
-If the kernel was built with exportfs support, the path to the target
-file is exposed as a file handle, via three hexadecimal fields:
-.IR fhandle\-bytes ,
-.IR fhandle\-type ,
-and
-.IR f_handle .
-.IP
-For fanotify file descriptors (see
-.BR fanotify (7)),
-we see (since Linux 3.8)
-the following fields:
-.IP
-.in +4n
-.EX
-pos: 0
-flags: 02
-mnt_id: 11
-fanotify flags:0 event\-flags:88002
-fanotify ino:19264f sdev:800001 mflags:0 mask:1 ignored_mask:0 fhandle\-bytes:8 fhandle\-type:1 f_handle:4f261900a82dfd73
-.EE
-.in
-.IP
-The fourth line displays information defined when the fanotify group
-was created via
-.BR fanotify_init (2):
-.RS
-.TP
-.I flags
-The
-.I flags
-argument given to
-.BR fanotify_init (2)
-(expressed in hexadecimal).
-.TP
-.I event\-flags
-The
-.I event_f_flags
-argument given to
-.BR fanotify_init (2)
-(expressed in hexadecimal).
-.RE
-.IP
-Each additional line shown in the file contains information
-about one of the marks in the fanotify group.
-Most of these fields are as for inotify, except:
-.RS
-.TP
-.I mflags
-The flags associated with the mark
-(expressed in hexadecimal).
-.TP
-.I mask
-The events mask for this mark
-(expressed in hexadecimal).
-.TP
-.I ignored_mask
-The mask of events that are ignored for this mark
-(expressed in hexadecimal).
-.RE
-.IP
-For details on these fields, see
-.BR fanotify_mark (2).
-.IP
-For timerfd file descriptors (see
-.BR timerfd (2)),
-we see (since Linux 3.17)
-.\" commit af9c4957cf212ad9cf0bee34c95cb11de5426e85
-the following fields:
-.IP
-.in +4n
-.EX
-pos: 0
-flags: 02004002
-mnt_id: 13
-clockid: 0
-ticks: 0
-settime flags: 03
-it_value: (7695568592, 640020877)
-it_interval: (0, 0)
-.EE
-.in
-.RS
-.TP
-.I clockid
-This is the numeric value of the clock ID
-(corresponding to one of the
-.B CLOCK_*
-constants defined via
-.IR <time.h> )
-that is used to mark the progress of the timer (in this example, 0 is
-.BR CLOCK_REALTIME ).
-.TP
-.I ticks
-This is the number of timer expirations that have occurred,
-(i.e., the value that
-.BR read (2)
-on it would return).
-.TP
-.I settime flags
-This field lists the flags with which the timerfd was last armed (see
-.BR timerfd_settime (2)),
-in octal
-(in this example, both
-.B TFD_TIMER_ABSTIME
-and
-.B TFD_TIMER_CANCEL_ON_SET
-are set).
-.TP
-.I it_value
-This field contains the amount of time until the timer will next expire,
-expressed in seconds and nanoseconds.
-This is always expressed as a relative value,
-regardless of whether the timer was created using the
-.B TFD_TIMER_ABSTIME
-flag.
-.TP
-.I it_interval
-This field contains the interval of the timer,
-in seconds and nanoseconds.
-(The
-.I it_value
-and
-.I it_interval
-fields contain the values that
-.BR timerfd_gettime (2)
-on this file descriptor would return.)
-.RE
-.TP
-.IR /proc/ pid /gid_map " (since Linux 3.5)"
-See
-.BR user_namespaces (7).
-.TP
-.IR /proc/ pid /io " (since Linux 2.6.20)"
-.\" commit 7c3ab7381e79dfc7db14a67c6f4f3285664e1ec2
-This file contains I/O statistics for the process, for example:
-.IP
-.in +4n
-.EX
-.RB "#" " cat /proc/3828/io"
-rchar: 323934931
-wchar: 323929600
-syscr: 632687
-syscw: 632675
-read_bytes: 0
-write_bytes: 323932160
-cancelled_write_bytes: 0
-.EE
-.in
-.IP
-The fields are as follows:
-.RS
-.TP
-.IR rchar ": characters read"
-The number of bytes which this task has caused to be read from storage.
-This is simply the sum of bytes which this process passed to
-.BR read (2)
-and similar system calls.
-It includes things such as terminal I/O and
-is unaffected by whether or not actual
-physical disk I/O was required (the read might have been satisfied from
-pagecache).
-.TP
-.IR wchar ": characters written"
-The number of bytes which this task has caused, or shall cause to be written
-to disk.
-Similar caveats apply here as with
-.IR rchar .
-.TP
-.IR syscr ": read syscalls"
-Attempt to count the number of read I/O operations\[em]that is,
-system calls such as
-.BR read (2)
-and
-.BR pread (2).
-.TP
-.IR syscw ": write syscalls"
-Attempt to count the number of write I/O operations\[em]that is,
-system calls such as
-.BR write (2)
-and
-.BR pwrite (2).
-.TP
-.IR read_bytes ": bytes read"
-Attempt to count the number of bytes which this process really did cause to
-be fetched from the storage layer.
-This is accurate for block-backed filesystems.
-.TP
-.IR write_bytes ": bytes written"
-Attempt to count the number of bytes which this process caused to be sent to
-the storage layer.
-.TP
-.IR cancelled_write_bytes :
-The big inaccuracy here is truncate.
-If a process writes 1 MB to a file and then deletes the file,
-it will in fact perform no writeout.
-But it will have been accounted as having caused 1 MB of write.
-In other words: this field represents the number of bytes which this process
-caused to not happen, by truncating pagecache.
-A task can cause "negative" I/O too.
-If this task truncates some dirty pagecache,
-some I/O which another task has been accounted for
-(in its
-.IR write_bytes )
-will not be happening.
-.RE
-.IP
-.IR Note :
-In the current implementation, things are a bit racy on 32-bit systems:
-if process A reads process B's
-.IR /proc/ pid /io
-while process B is updating one of these 64-bit counters,
-process A could see an intermediate result.
-.IP
-Permission to access this file is governed by a ptrace access mode
-.B PTRACE_MODE_READ_FSCREDS
-check; see
-.BR ptrace (2).
-.TP
-.IR /proc/ pid /limits " (since Linux 2.6.24)"
-This file displays the soft limit, hard limit, and units of measurement
-for each of the process's resource limits (see
-.BR getrlimit (2)).
-Up to and including Linux 2.6.35,
-this file is protected to allow reading only by the real UID of the process.
-Since Linux 2.6.36,
-.\" commit 3036e7b490bf7878c6dae952eec5fb87b1106589
-this file is readable by all users on the system.
-.\" FIXME Describe /proc/[pid]/loginuid
-.\" Added in Linux 2.6.11; updating requires CAP_AUDIT_CONTROL
-.\" CONFIG_AUDITSYSCALL
-.TP
-.IR /proc/ pid /map_files/ " (since Linux 3.3)"
-.\" commit 640708a2cff7f81e246243b0073c66e6ece7e53e
-This subdirectory contains entries corresponding to memory-mapped
-files (see
-.BR mmap (2)).
-Entries are named by memory region start and end
-address pair (expressed as hexadecimal numbers),
-and are symbolic links to the mapped files themselves.
-Here is an example,
-with the output wrapped and reformatted to fit on an 80-column display:
-.IP
-.in +4n
-.EX
-.RB "#" " ls \-l /proc/self/map_files/"
-lr\-\-\-\-\-\-\-\-. 1 root root 64 Apr 16 21:31
- 3252e00000\-3252e20000 \-> /usr/lib64/ld\-2.15.so
-\&...
-.EE
-.in
-.IP
-Although these entries are present for memory regions that were
-mapped with the
-.B MAP_FILE
-flag, the way anonymous shared memory (regions created with the
-.B MAP_ANON | MAP_SHARED
-flags)
-is implemented in Linux
-means that such regions also appear on this directory.
-Here is an example where the target file is the deleted
-.I /dev/zero
-one:
-.IP
-.in +4n
-.EX
-lrw\-\-\-\-\-\-\-. 1 root root 64 Apr 16 21:33
- 7fc075d2f000\-7fc075e6f000 \-> /dev/zero (deleted)
-.EE
-.in
-.IP
-Permission to access this file is governed by a ptrace access mode
-.B PTRACE_MODE_READ_FSCREDS
-check; see
-.BR ptrace (2).
-.IP
-Until Linux 4.3,
-.\" commit bdb4d100afe9818aebd1d98ced575c5ef143456c
-this directory appeared only if the
-.B CONFIG_CHECKPOINT_RESTORE
-kernel configuration option was enabled.
-.IP
-Capabilities are required to read the contents of the symbolic links in
-this directory: before Linux 5.9, the reading process requires
-.B CAP_SYS_ADMIN
-in the initial user namespace;
-since Linux 5.9, the reading process must have either
-.B CAP_SYS_ADMIN
-or
-.B CAP_CHECKPOINT_RESTORE
-in the initial (i.e. root) user namespace.
-.TP
-.IR /proc/ pid /maps
-A file containing the currently mapped memory regions and their access
-permissions.
-See
-.BR mmap (2)
-for some further information about memory mappings.
-.IP
-Permission to access this file is governed by a ptrace access mode
-.B PTRACE_MODE_READ_FSCREDS
-check; see
-.BR ptrace (2).
-.IP
-The format of the file is:
-.IP
-.in +4n
-.EX
-.I "address perms offset dev inode pathname"
-00400000\-00452000 r\-xp 00000000 08:02 173521 /usr/bin/dbus\-daemon
-00651000\-00652000 r\-\-p 00051000 08:02 173521 /usr/bin/dbus\-daemon
-00652000\-00655000 rw\-p 00052000 08:02 173521 /usr/bin/dbus\-daemon
-00e03000\-00e24000 rw\-p 00000000 00:00 0 [heap]
-00e24000\-011f7000 rw\-p 00000000 00:00 0 [heap]
-\&...
-35b1800000\-35b1820000 r\-xp 00000000 08:02 135522 /usr/lib64/ld\-2.15.so
-35b1a1f000\-35b1a20000 r\-\-p 0001f000 08:02 135522 /usr/lib64/ld\-2.15.so
-35b1a20000\-35b1a21000 rw\-p 00020000 08:02 135522 /usr/lib64/ld\-2.15.so
-35b1a21000\-35b1a22000 rw\-p 00000000 00:00 0
-35b1c00000\-35b1dac000 r\-xp 00000000 08:02 135870 /usr/lib64/libc\-2.15.so
-35b1dac000\-35b1fac000 \-\-\-p 001ac000 08:02 135870 /usr/lib64/libc\-2.15.so
-35b1fac000\-35b1fb0000 r\-\-p 001ac000 08:02 135870 /usr/lib64/libc\-2.15.so
-35b1fb0000\-35b1fb2000 rw\-p 001b0000 08:02 135870 /usr/lib64/libc\-2.15.so
-\&...
-f2c6ff8c000\-7f2c7078c000 rw\-p 00000000 00:00 0 [stack:986]
-\&...
-7fffb2c0d000\-7fffb2c2e000 rw\-p 00000000 00:00 0 [stack]
-7fffb2d48000\-7fffb2d49000 r\-xp 00000000 00:00 0 [vdso]
-.EE
-.in
-.IP
-The
-.I address
-field is the address space in the process that the mapping occupies.
-The
-.I perms
-field is a set of permissions:
-.IP
-.in +4n
-.EX
-r = read
-w = write
-x = execute
-s = shared
-p = private (copy on write)
-.EE
-.in
-.IP
-The
-.I offset
-field is the offset into the file/whatever;
-.I dev
-is the device
-(major:minor);
-.I inode
-is the inode on that device.
-0 indicates that no inode is associated with the memory region,
-as would be the case with BSS (uninitialized data).
-.IP
-The
-.I pathname
-field will usually be the file that is backing the mapping.
-For ELF files,
-you can easily coordinate with the
-.I offset
-field by looking at the
-Offset field in the ELF program headers
-.RI ( "readelf\ \-l" ).
-.IP
-There are additional helpful pseudo-paths:
-.RS
-.TP
-.I [stack]
-The initial process's (also known as the main thread's) stack.
-.TP
-.IR [stack: tid ] " (from Linux 3.4 to Linux 4.4)"
-.\" commit b76437579d1344b612cf1851ae610c636cec7db0 (added)
-.\" commit 65376df582174ffcec9e6471bf5b0dd79ba05e4a (removed)
-A thread's stack (where the
-.I tid
-is a thread ID).
-It corresponds to the
-.IR /proc/ pid /task/ tid /
-path.
-This field was removed in Linux 4.5, since providing this information
-for a process with large numbers of threads is expensive.
-.TP
-.I [vdso]
-The virtual dynamically linked shared object.
-See
-.BR vdso (7).
-.TP
-.I [heap]
-The process's heap.
-.TP
-.IR [anon: name ] " (since Linux 5.17)"
-.\" Commit 9a10064f5625d5572c3626c1516e0bebc6c9fe9b
-A named private anonymous mapping.
-Set with
-.BR prctl (2)
-.BR PR_SET_VMA_ANON_NAME .
-.TP
-.IR [anon_shmem: name ] " (since Linux 6.2)"
-.\" Commit d09e8ca6cb93bb4b97517a18fbbf7eccb0e9ff43
-A named shared anonymous mapping.
-Set with
-.BR prctl (2)
-.BR PR_SET_VMA_ANON_NAME .
-.in
-.RE
-.IP
-If the
-.I pathname
-field is blank,
-this is an anonymous mapping as obtained via
-.BR mmap (2).
-There is no easy way to coordinate this back to a process's source,
-short of running it through
-.BR gdb (1),
-.BR strace (1),
-or similar.
-.IP
-.I pathname
-is shown unescaped except for newline characters, which are replaced
-with an octal escape sequence.
-As a result, it is not possible to determine whether the original
-pathname contained a newline character or the literal
-.I \e012
-character sequence.
-.IP
-If the mapping is file-backed and the file has been deleted, the string
-" (deleted)" is appended to the pathname.
-Note that this is ambiguous too.
-.IP
-Under Linux 2.0, there is no field giving pathname.
-.TP
-.IR /proc/ pid /mem
-This file can be used to access the pages of a process's memory through
-.BR open (2),
-.BR read (2),
-and
-.BR lseek (2).
-.IP
-Permission to access this file is governed by a ptrace access mode
-.B PTRACE_MODE_ATTACH_FSCREDS
-check; see
-.BR ptrace (2).
-.TP
-.IR /proc/ pid /mountinfo " (since Linux 2.6.26)"
-.\" This info adapted from Documentation/filesystems/proc.txt
-.\" commit 2d4d4864ac08caff5c204a752bd004eed4f08760
-This file contains information about mounts
-in the process's mount namespace (see
-.BR mount_namespaces (7)).
-It supplies various information
-(e.g., propagation state, root of mount for bind mounts,
-identifier for each mount and its parent) that is missing from the (older)
-.IR /proc/ pid /mounts
-file, and fixes various other problems with that file
-(e.g., nonextensibility,
-failure to distinguish per-mount versus per-superblock options).
-.IP
-The file contains lines of the form:
-.IP
-.EX
-36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 \- ext3 /dev/root rw,errors=continue
-(1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11)
-.EE
-.IP
-The numbers in parentheses are labels for the descriptions below:
-.RS 7
-.TP 5
-(1)
-mount ID: a unique ID for the mount (may be reused after
-.BR umount (2)).
-.TP
-(2)
-parent ID: the ID of the parent mount
-(or of self for the root of this mount namespace's mount tree).
-.IP
-If a new mount is stacked on top of a previous existing mount
-(so that it hides the existing mount) at pathname P,
-then the parent of the new mount is the previous mount at that location.
-Thus, when looking at all the mounts stacked at a particular location,
-the top-most mount is the one that is not the parent
-of any other mount at the same location.
-(Note, however, that this top-most mount will be accessible only if
-the longest path subprefix of P that is a mount point
-is not itself hidden by a stacked mount.)
-.IP
-If the parent mount lies outside the process's root directory (see
-.BR chroot (2)),
-the ID shown here won't have a corresponding record in
-.I mountinfo
-whose mount ID (field 1) matches this parent mount ID
-(because mounts that lie outside the process's root directory
-are not shown in
-.IR mountinfo ).
-As a special case of this point,
-the process's root mount may have a parent mount
-(for the initramfs filesystem) that lies
-.\" Miklos Szeredi, Nov 2017: The hidden one is the initramfs, I believe
-.\" mtk: In the initial mount namespace, this hidden ID has the value 0
-outside the process's root directory,
-and an entry for that mount will not appear in
-.IR mountinfo .
-.TP
-(3)
-major:minor: the value of
-.I st_dev
-for files on this filesystem (see
-.BR stat (2)).
-.TP
-(4)
-root: the pathname of the directory in the filesystem
-which forms the root of this mount.
-.TP
-(5)
-mount point: the pathname of the mount point relative
-to the process's root directory.
-.TP
-(6)
-mount options: per-mount options (see
-.BR mount (2)).
-.TP
-(7)
-optional fields: zero or more fields of the form "tag[:value]"; see below.
-.TP
-(8)
-separator: the end of the optional fields is marked by a single hyphen.
-.TP
-(9)
-filesystem type: the filesystem type in the form "type[.subtype]".
-.TP
-(10)
-mount source: filesystem-specific information or "none".
-.TP
-(11)
-super options: per-superblock options (see
-.BR mount (2)).
-.RE
-.IP
-Currently, the possible optional fields are
-.IR shared ,
-.IR master ,
-.IR propagate_from ,
-and
-.IR unbindable .
-See
-.BR mount_namespaces (7)
-for a description of these fields.
-Parsers should ignore all unrecognized optional fields.
-.IP
-For more information on mount propagation see
-.I Documentation/filesystems/sharedsubtree.rst
-(or
-.I Documentation/filesystems/sharedsubtree.txt
-before Linux 5.8)
-in the Linux kernel source tree.
-.TP
-.IR /proc/ pid /mounts " (since Linux 2.4.19)"
-This file lists all the filesystems currently mounted in the
-process's mount namespace (see
-.BR mount_namespaces (7)).
-The format of this file is documented in
-.BR fstab (5).
-.IP
-Since Linux 2.6.15, this file is pollable:
-after opening the file for reading, a change in this file
-(i.e., a filesystem mount or unmount) causes
-.BR select (2)
-to mark the file descriptor as having an exceptional condition, and
-.BR poll (2)
-and
-.BR epoll_wait (2)
-mark the file as having a priority event
-.RB ( POLLPRI ).
-(Before Linux 2.6.30,
-a change in this file was indicated by the file descriptor
-being marked as readable for
-.BR select (2),
-and being marked as having an error condition for
-.BR poll (2)
-and
-.BR epoll_wait (2).)
-.TP
-.IR /proc/ pid /mountstats " (since Linux 2.6.17)"
-This file exports information (statistics, configuration information)
-about the mounts in the process's mount namespace (see
-.BR mount_namespaces (7)).
-Lines in this file have the form:
-.IP
-.in +4n
-.EX
-device /dev/sda7 mounted on /home with fstype ext3 [stats]
-( 1 ) ( 2 ) (3 ) ( 4 )
-.EE
-.in
-.IP
-The fields in each line are:
-.RS 7
-.TP 5
-(1)
-The name of the mounted device
-(or "nodevice" if there is no corresponding device).
-.TP
-(2)
-The mount point within the filesystem tree.
-.TP
-(3)
-The filesystem type.
-.TP
-(4)
-Optional statistics and configuration information.
-Currently (as at Linux 2.6.26), only NFS filesystems export
-information via this field.
-.RE
-.IP
-This file is readable only by the owner of the process.
-.TP
-.IR /proc/ pid /net " (since Linux 2.6.25)"
-See the description of
-.IR /proc/net .
-.TP
-.IR /proc/ pid /ns/ " (since Linux 3.0)"
-.\" See commit 6b4e306aa3dc94a0545eb9279475b1ab6209a31f
-This is a subdirectory containing one entry for each namespace that
-supports being manipulated by
-.BR setns (2).
-For more information, see
-.BR namespaces (7).
-.TP
-.IR /proc/ pid /numa_maps " (since Linux 2.6.14)"
-See
-.BR numa (7).
-.TP
-.IR /proc/ pid /oom_adj " (since Linux 2.6.11)"
-This file can be used to adjust the score used to select which process
-should be killed in an out-of-memory (OOM) situation.
-The kernel uses this value for a bit-shift operation of the process's
-.I oom_score
-value:
-valid values are in the range \-16 to +15,
-plus the special value \-17,
-which disables OOM-killing altogether for this process.
-A positive score increases the likelihood of this
-process being killed by the OOM-killer;
-a negative score decreases the likelihood.
-.IP
-The default value for this file is 0;
-a new process inherits its parent's
-.I oom_adj
-setting.
-A process must be privileged
-.RB ( CAP_SYS_RESOURCE )
-to update this file,
-although a process can always increase its own
-.I oom_adj
-setting (since Linux 2.6.20).
-.IP
-Since Linux 2.6.36, use of this file is deprecated in favor of
-.IR /proc/ pid /oom_score_adj ,
-and finally removed in Linux 3.7.
-.TP
-.IR /proc/ pid /oom_score " (since Linux 2.6.11)"
-.\" See mm/oom_kill.c::badness() before Linux 2.6.36 sources
-.\" See mm/oom_kill.c::oom_badness() after Linux 2.6.36
-.\" commit a63d83f427fbce97a6cea0db2e64b0eb8435cd10
-This file displays the current score that the kernel gives to
-this process for the purpose of selecting a process
-for the OOM-killer.
-A higher score means that the process is more likely to be
-selected by the OOM-killer.
-The basis for this score is the amount of memory used by the process,
-with increases (+) or decreases (\-) for factors including:
-.\" See mm/oom_kill.c::badness() before Linux 2.6.36 sources
-.\" See mm/oom_kill.c::oom_badness() after Linux 2.6.36
-.\" commit a63d83f427fbce97a6cea0db2e64b0eb8435cd10
-.RS
-.IP \[bu] 3
-whether the process is privileged (\-).
-.\" More precisely, if it has CAP_SYS_ADMIN or (pre 2.6.36) CAP_SYS_RESOURCE
-.RE
-.IP
-Before Linux 2.6.36
-the following factors were also used in the calculation of oom_score:
-.RS
-.IP \[bu] 3
-whether the process creates a lot of children using
-.BR fork (2)
-(+);
-.IP \[bu]
-whether the process has been running a long time,
-or has used a lot of CPU time (\-);
-.IP \[bu]
-whether the process has a low nice value (i.e., > 0) (+); and
-.IP \[bu]
-whether the process is making direct hardware access (\-).
-.\" More precisely, if it has CAP_SYS_RAWIO
-.RE
-.IP
-The
-.I oom_score
-also reflects the adjustment specified by the
-.I oom_score_adj
-or
-.I oom_adj
-setting for the process.
-.TP
-.IR /proc/ pid /oom_score_adj " (since Linux 2.6.36)"
-.\" Text taken from Linux 3.7 Documentation/filesystems/proc.txt
-This file can be used to adjust the badness heuristic used to select which
-process gets killed in out-of-memory conditions.
-.IP
-The badness heuristic assigns a value to each candidate task ranging from 0
-(never kill) to 1000 (always kill) to determine which process is targeted.
-The units are roughly a proportion along that range of
-allowed memory the process may allocate from,
-based on an estimation of its current memory and swap use.
-For example, if a task is using all allowed memory,
-its badness score will be 1000.
-If it is using half of its allowed memory, its score will be 500.
-.IP
-There is an additional factor included in the badness score: root
-processes are given 3% extra memory over other tasks.
-.IP
-The amount of "allowed" memory depends on the context
-in which the OOM-killer was called.
-If it is due to the memory assigned to the allocating task's cpuset
-being exhausted,
-the allowed memory represents the set of mems assigned to that
-cpuset (see
-.BR cpuset (7)).
-If it is due to a mempolicy's node(s) being exhausted,
-the allowed memory represents the set of mempolicy nodes.
-If it is due to a memory limit (or swap limit) being reached,
-the allowed memory is that configured limit.
-Finally, if it is due to the entire system being out of memory, the
-allowed memory represents all allocatable resources.
-.IP
-The value of
-.I oom_score_adj
-is added to the badness score before it
-is used to determine which task to kill.
-Acceptable values range from \-1000
-(OOM_SCORE_ADJ_MIN) to +1000 (OOM_SCORE_ADJ_MAX).
-This allows user space to control the preference for OOM-killing,
-ranging from always preferring a certain
-task or completely disabling it from OOM-killing.
-The lowest possible value, \-1000, is
-equivalent to disabling OOM-killing entirely for that task,
-since it will always report a badness score of 0.
-.IP
-Consequently, it is very simple for user space to define
-the amount of memory to consider for each task.
-Setting an
-.I oom_score_adj
-value of +500, for example,
-is roughly equivalent to allowing the remainder of tasks sharing the
-same system, cpuset, mempolicy, or memory controller resources
-to use at least 50% more memory.
-A value of \-500, on the other hand, would be roughly
-equivalent to discounting 50% of the task's
-allowed memory from being considered as scoring against the task.
-.IP
-For backward compatibility with previous kernels,
-.IR /proc/ pid /oom_adj
-can still be used to tune the badness score.
-Its value is
-scaled linearly with
-.IR oom_score_adj .
-.IP
-Writing to
-.IR /proc/ pid /oom_score_adj
-or
-.IR /proc/ pid /oom_adj
-will change the other with its scaled value.
-.IP
-The
-.BR choom (1)
-program provides a command-line interface for adjusting the
-.I oom_score_adj
-value of a running process or a newly executed command.
-.TP
-.IR /proc/ pid /pagemap " (since Linux 2.6.25)"
-This file shows the mapping of each of the process's virtual pages
-into physical page frames or swap area.
-It contains one 64-bit value for each virtual page,
-with the bits set as follows:
-.RS
-.TP
-63
-If set, the page is present in RAM.
-.TP
-62
-If set, the page is in swap space
-.TP
-61 (since Linux 3.5)
-The page is a file-mapped page or a shared anonymous page.
-.TP
-60\[en]58 (since Linux 3.11)
-Zero
-.\" Not quite true; see commit 541c237c0923f567c9c4cabb8a81635baadc713f
-.TP
-57 (since Linux 5.14)
-If set, the page is write-protected through
-.BR userfaultfd (2).
-.TP
-56 (since Linux 4.2)
-.\" commit 77bb499bb60f4b79cca7d139c8041662860fcf87
-.\" commit 83b4b0bb635eee2b8e075062e4e008d1bc110ed7
-The page is exclusively mapped.
-.TP
-55 (since Linux 3.11)
-PTE is soft-dirty
-(see the kernel source file
-.IR Documentation/admin\-guide/mm/soft\-dirty.rst ).
-.TP
-54\[en]0
-If the page is present in RAM (bit 63), then these bits
-provide the page frame number, which can be used to index
-.I /proc/kpageflags
-and
-.IR /proc/kpagecount .
-If the page is present in swap (bit 62),
-then bits 4\[en]0 give the swap type, and bits 54\[en]5 encode the swap offset.
-.RE
-.IP
-Before Linux 3.11, bits 60\[en]55 were
-used to encode the base-2 log of the page size.
-.IP
-To employ
-.IR /proc/ pid /pagemap
-efficiently, use
-.IR /proc/ pid /maps
-to determine which areas of memory are actually mapped and seek
-to skip over unmapped regions.
-.IP
-The
-.IR /proc/ pid /pagemap
-file is present only if the
-.B CONFIG_PROC_PAGE_MONITOR
-kernel configuration option is enabled.
-.IP
-Permission to access this file is governed by a ptrace access mode
-.B PTRACE_MODE_READ_FSCREDS
-check; see
-.BR ptrace (2).
-.TP
-.IR /proc/ pid /personality " (since Linux 2.6.28)"
-.\" commit 478307230810d7e2a753ed220db9066dfdf88718
-This read-only file exposes the process's execution domain, as set by
-.BR personality (2).
-The value is displayed in hexadecimal notation.
-.IP
-Permission to access this file is governed by a ptrace access mode
-.B PTRACE_MODE_ATTACH_FSCREDS
-check; see
-.BR ptrace (2).
-.TP
-.IR /proc/ pid /root
-UNIX and Linux support the idea of a per-process root of the
-filesystem, set by the
-.BR chroot (2)
-system call.
-This file is a symbolic link that points to the process's
-root directory, and behaves in the same way as
-.IR exe ,
-and
-.IR fd/* .
-.IP
-Note however that this file is not merely a symbolic link.
-It provides the same view of the filesystem (including namespaces and the
-set of per-process mounts) as the process itself.
-An example illustrates this point.
-In one terminal, we start a shell in new user and mount namespaces,
-and in that shell we create some new mounts:
-.IP
-.in +4n
-.EX
-$ \fBPS1=\[aq]sh1# \[aq] unshare \-Urnm\fP
-sh1# \fBmount \-t tmpfs tmpfs /etc\fP # Mount empty tmpfs at /etc
-sh1# \fBmount \-\-bind /usr /dev\fP # Mount /usr at /dev
-sh1# \fBecho $$\fP
-27123
-.EE
-.in
-.IP
-In a second terminal window, in the initial mount namespace,
-we look at the contents of the corresponding mounts in
-the initial and new namespaces:
-.IP
-.in +4n
-.EX
-$ \fBPS1=\[aq]sh2# \[aq] sudo sh\fP
-sh2# \fBls /etc | wc \-l\fP # In initial NS
-309
-sh2# \fBls /proc/27123/root/etc | wc \-l\fP # /etc in other NS
-0 # The empty tmpfs dir
-sh2# \fBls /dev | wc \-l\fP # In initial NS
-205
-sh2# \fBls /proc/27123/root/dev | wc \-l\fP # /dev in other NS
-11 # Actually bind
- # mounted to /usr
-sh2# \fBls /usr | wc \-l\fP # /usr in initial NS
-11
-.EE
-.in
-.IP
-.\" The following was still true as at kernel 2.6.13
-In a multithreaded process, the contents of the
-.IR /proc/ pid /root
-symbolic link are not available if the main thread has already terminated
-(typically by calling
-.BR pthread_exit (3)).
-.IP
-Permission to dereference or read
-.RB ( readlink (2))
-this symbolic link is governed by a ptrace access mode
-.B PTRACE_MODE_READ_FSCREDS
-check; see
-.BR ptrace (2).
-.TP
-.IR /proc/ pid /projid_map " (since Linux 3.7)"
-.\" commit f76d207a66c3a53defea67e7d36c3eb1b7d6d61d
-See
-.BR user_namespaces (7).
-.TP
-.IR /proc/ pid /seccomp " (Linux 2.6.12 to Linux 2.6.22)"
-This file can be used to read and change the process's
-secure computing (seccomp) mode setting.
-It contains the value 0 if the process is not in seccomp mode,
-and 1 if the process is in strict seccomp mode (see
-.BR seccomp (2)).
-Writing 1 to this file places the process irreversibly in strict seccomp mode.
-(Further attempts to write to the file fail with the
-.B EPERM
-error.)
-.IP
-In Linux 2.6.23,
-this file went away, to be replaced by the
-.BR prctl (2)
-.B PR_GET_SECCOMP
-and
-.B PR_SET_SECCOMP
-operations (and later by
-.BR seccomp (2)
-and the
-.I Seccomp
-field in
-.IR /proc/ pid /status ).
-.\" FIXME Describe /proc/[pid]/sessionid
-.\" commit 1e0bd7550ea9cf474b1ad4c6ff5729a507f75fdc
-.\" CONFIG_AUDITSYSCALL
-.\" Added in Linux 2.6.25; read-only; only readable by real UID
-.\"
-.\" FIXME Describe /proc/[pid]/sched
-.\" Added in Linux 2.6.23
-.\" CONFIG_SCHED_DEBUG, and additional fields if CONFIG_SCHEDSTATS
-.\" Displays various scheduling parameters
-.\" This file can be written, to reset stats
-.\" The set of fields exposed by this file have changed
-.\" significantly over time.
-.\" commit 43ae34cb4cd650d1eb4460a8253a8e747ba052ac
-.\"
-.\" FIXME Describe /proc/[pid]/schedstats and
-.\" /proc/[pid]/task/[tid]/schedstats
-.\" Added in Linux 2.6.9
-.\" CONFIG_SCHEDSTATS
-.TP
-.IR /proc/ pid /setgroups " (since Linux 3.19)"
-See
-.BR user_namespaces (7).
-.TP
-.IR /proc/ pid /smaps " (since Linux 2.6.14)"
-This file shows memory consumption for each of the process's mappings.
-(The
-.BR pmap (1)
-command displays similar information,
-in a form that may be easier for parsing.)
-For each mapping there is a series of lines such as the following:
-.IP
-.in +4n
-.EX
-00400000\-0048a000 r\-xp 00000000 fd:03 960637 /bin/bash
-Size: 552 kB
-Rss: 460 kB
-Pss: 100 kB
-Shared_Clean: 452 kB
-Shared_Dirty: 0 kB
-Private_Clean: 8 kB
-Private_Dirty: 0 kB
-Referenced: 460 kB
-Anonymous: 0 kB
-AnonHugePages: 0 kB
-ShmemHugePages: 0 kB
-ShmemPmdMapped: 0 kB
-Swap: 0 kB
-KernelPageSize: 4 kB
-MMUPageSize: 4 kB
-Locked: 0 kB
-ProtectionKey: 0
-VmFlags: rd ex mr mw me dw
-.EE
-.in
-.IP
-The first of these lines shows the same information as is displayed
-for the mapping in
-.IR /proc/ pid /maps .
-The following lines show the size of the mapping,
-the amount of the mapping that is currently resident in RAM ("Rss"),
-the process's proportional share of this mapping ("Pss"),
-the number of clean and dirty shared pages in the mapping,
-and the number of clean and dirty private pages in the mapping.
-"Referenced" indicates the amount of memory currently marked as
-referenced or accessed.
-"Anonymous" shows the amount of memory
-that does not belong to any file.
-"Swap" shows how much
-would-be-anonymous memory is also used, but out on swap.
-.IP
-The "KernelPageSize" line (available since Linux 2.6.29)
-is the page size used by the kernel to back the virtual memory area.
-This matches the size used by the MMU in the majority of cases.
-However, one counter-example occurs on PPC64 kernels
-whereby a kernel using 64 kB as a base page size may still use 4 kB
-pages for the MMU on older processors.
-To distinguish the two attributes, the "MMUPageSize" line
-(also available since Linux 2.6.29)
-reports the page size used by the MMU.
-.IP
-The "Locked" indicates whether the mapping is locked in memory
-or not.
-.IP
-The "ProtectionKey" line (available since Linux 4.9, on x86 only)
-contains the memory protection key (see
-.BR pkeys (7))
-associated with the virtual memory area.
-This entry is present only if the kernel was built with the
-.B CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
-configuration option (since Linux 4.6).
-.IP
-The "VmFlags" line (available since Linux 3.8)
-represents the kernel flags associated with the virtual memory area,
-encoded using the following two-letter codes:
-.RS
-.IP
-.TS
-l l l.
-rd - readable
-wr - writable
-ex - executable
-sh - shared
-mr - may read
-mw - may write
-me - may execute
-ms - may share
-gd - stack segment grows down
-pf - pure PFN range
-dw - disabled write to the mapped file
-lo - pages are locked in memory
-io - memory mapped I/O area
-sr - sequential read advise provided
-rr - random read advise provided
-dc - do not copy area on fork
-de - do not expand area on remapping
-ac - area is accountable
-nr - swap space is not reserved for the area
-ht - area uses huge tlb pages
-sf - perform synchronous page faults (since Linux 4.15)
-nl - non-linear mapping (removed in Linux 4.0)
-ar - architecture specific flag
-wf - wipe on fork (since Linux 4.14)
-dd - do not include area into core dump
-sd - soft-dirty flag (since Linux 3.13)
-mm - mixed map area
-hg - huge page advise flag
-nh - no-huge page advise flag
-mg - mergeable advise flag
-um - userfaultfd missing pages tracking (since Linux 4.3)
-uw - userfaultfd wprotect pages tracking (since Linux 4.3)
-.TE
-.RE
-.IP
-The
-.IR /proc/ pid /smaps
-file is present only if the
-.B CONFIG_PROC_PAGE_MONITOR
-kernel configuration option is enabled.
-.TP
-.IR /proc/ pid /stack " (since Linux 2.6.29)"
-.\" 2ec220e27f5040aec1e88901c1b6ea3d135787ad
-This file provides a symbolic trace of the function calls in this
-process's kernel stack.
-This file is provided only if the kernel was built with the
-.B CONFIG_STACKTRACE
-configuration option.
-.IP
-Permission to access this file is governed by a ptrace access mode
-.B PTRACE_MODE_ATTACH_FSCREDS
-check; see
-.BR ptrace (2).
-.TP
-.IR /proc/ pid /stat
-Status information about the process.
-This is used by
-.BR ps (1).
-It is defined in the kernel source file
-.IR fs/proc/array.c "."
-.IP
-The fields, in order, with their proper
-.BR scanf (3)
-format specifiers, are listed below.
-Whether or not certain of these fields display valid information is governed by
-a ptrace access mode
-.BR PTRACE_MODE_READ_FSCREDS " | " PTRACE_MODE_NOAUDIT
-check (refer to
-.BR ptrace (2)).
-If the check denies access, then the field value is displayed as 0.
-The affected fields are indicated with the marking [PT].
-.RS
-.TP
-(1) \fIpid\fP \ %d
-.br
-The process ID.
-.TP
-(2) \fIcomm\fP \ %s
-The filename of the executable, in parentheses.
-Strings longer than
-.B TASK_COMM_LEN
-(16) characters (including the terminating null byte) are silently truncated.
-This is visible whether or not the executable is swapped out.
-.TP
-(3) \fIstate\fP \ %c
-One of the following characters, indicating process state:
-.RS
-.TP
-R
-Running
-.TP
-S
-Sleeping in an interruptible wait
-.TP
-D
-Waiting in uninterruptible
-disk sleep
-.TP
-Z
-Zombie
-.TP
-T
-Stopped (on a signal) or (before Linux 2.6.33) trace stopped
-.TP
-t
-.\" commit 44d90df6b757c59651ddd55f1a84f28132b50d29
-Tracing stop (Linux 2.6.33 onward)
-.TP
-W
-Paging (only before Linux 2.6.0)
-.TP
-X
-Dead (from Linux 2.6.0 onward)
-.TP
-x
-.\" commit 44d90df6b757c59651ddd55f1a84f28132b50d29
-Dead (Linux 2.6.33 to
-.\" commit 74e37200de8e9c4e09b70c21c3f13c2071e77457
-3.13 only)
-.TP
-K
-.\" commit 44d90df6b757c59651ddd55f1a84f28132b50d29
-Wakekill (Linux 2.6.33 to
-.\" commit 74e37200de8e9c4e09b70c21c3f13c2071e77457
-3.13 only)
-.TP
-W
-.\" commit 44d90df6b757c59651ddd55f1a84f28132b50d29
-Waking (Linux 2.6.33 to
-.\" commit 74e37200de8e9c4e09b70c21c3f13c2071e77457
-3.13 only)
-.TP
-P
-.\" commit f2530dc71cf0822f90bb63ea4600caaef33a66bb
-Parked (Linux 3.9 to
-.\" commit 74e37200de8e9c4e09b70c21c3f13c2071e77457
-3.13 only)
-.TP
-I
-.\" commit 06eb61844d841d0032a9950ce7f8e783ee49c0d0
-Idle (Linux 4.14 onward)
-.RE
-.TP
-(4) \fIppid\fP \ %d
-The PID of the parent of this process.
-.TP
-(5) \fIpgrp\fP \ %d
-The process group ID of the process.
-.TP
-(6) \fIsession\fP \ %d
-The session ID of the process.
-.TP
-(7) \fItty_nr\fP \ %d
-The controlling terminal of the process.
-(The minor device number is contained in the combination of bits
-31 to 20 and 7 to 0;
-the major device number is in bits 15 to 8.)
-.TP
-(8) \fItpgid\fP \ %d
-.\" This field and following, up to and including wchan added 0.99.1
-The ID of the foreground process group of the controlling
-terminal of the process.
-.TP
-(9) \fIflags\fP \ %u
-The kernel flags word of the process.
-For bit meanings,
-see the PF_* defines in the Linux kernel source file
-.IR include/linux/sched.h .
-Details depend on the kernel version.
-.IP
-The format for this field was %lu before Linux 2.6.
-.TP
-(10) \fIminflt\fP \ %lu
-The number of minor faults the process has made which have not
-required loading a memory page from disk.
-.TP
-(11) \fIcminflt\fP \ %lu
-The number of minor faults that the process's
-waited-for children have made.
-.TP
-(12) \fImajflt\fP \ %lu
-The number of major faults the process has made which have
-required loading a memory page from disk.
-.TP
-(13) \fIcmajflt\fP \ %lu
-The number of major faults that the process's
-waited-for children have made.
-.TP
-(14) \fIutime\fP \ %lu
-Amount of time that this process has been scheduled in user mode,
-measured in clock ticks (divide by
-.IR sysconf(_SC_CLK_TCK) ).
-This includes guest time, \fIguest_time\fP
-(time spent running a virtual CPU, see below),
-so that applications that are not aware of the guest time field
-do not lose that time from their calculations.
-.TP
-(15) \fIstime\fP \ %lu
-Amount of time that this process has been scheduled in kernel mode,
-measured in clock ticks (divide by
-.IR sysconf(_SC_CLK_TCK) ).
-.TP
-(16) \fIcutime\fP \ %ld
-Amount of time that this process's
-waited-for children have been scheduled in user mode,
-measured in clock ticks (divide by
-.IR sysconf(_SC_CLK_TCK) ).
-(See also
-.BR times (2).)
-This includes guest time, \fIcguest_time\fP
-(time spent running a virtual CPU, see below).
-.TP
-(17) \fIcstime\fP \ %ld
-Amount of time that this process's
-waited-for children have been scheduled in kernel mode,
-measured in clock ticks (divide by
-.IR sysconf(_SC_CLK_TCK) ).
-.TP
-(18) \fIpriority\fP \ %ld
-(Explanation for Linux 2.6)
-For processes running a real-time scheduling policy
-.RI ( policy
-below; see
-.BR sched_setscheduler (2)),
-this is the negated scheduling priority, minus one;
-that is, a number in the range \-2 to \-100,
-corresponding to real-time priorities 1 to 99.
-For processes running under a non-real-time scheduling policy,
-this is the raw nice value
-.RB ( setpriority (2))
-as represented in the kernel.
-The kernel stores nice values as numbers
-in the range 0 (high) to 39 (low),
-corresponding to the user-visible nice range of \-20 to 19.
-.IP
-Before Linux 2.6, this was a scaled value based on
-the scheduler weighting given to this process.
-.\" And back in Linux 1.2 days things were different again.
-.TP
-(19) \fInice\fP \ %ld
-The nice value (see
-.BR setpriority (2)),
-a value in the range 19 (low priority) to \-20 (high priority).
-.\" Back in Linux 1.2 days things were different.
-.\" .TP
-.\" \fIcounter\fP %ld
-.\" The current maximum size in jiffies of the process's next timeslice,
-.\" or what is currently left of its current timeslice, if it is the
-.\" currently running process.
-.\" .TP
-.\" \fItimeout\fP %u
-.\" The time in jiffies of the process's next timeout.
-.\" timeout was removed sometime around 2.1/2.2
-.TP
-(20) \fInum_threads\fP \ %ld
-Number of threads in this process (since Linux 2.6).
-Before Linux 2.6, this field was hard coded to 0 as a placeholder
-for an earlier removed field.
-.TP
-(21) \fIitrealvalue\fP \ %ld
-The time in jiffies before the next
-.B SIGALRM
-is sent to the process due to an interval timer.
-Since Linux 2.6.17, this field is no longer maintained,
-and is hard coded as 0.
-.TP
-(22) \fIstarttime\fP \ %llu
-The time the process started after system boot.
-Before Linux 2.6, this value was expressed in jiffies.
-Since Linux 2.6, the value is expressed in clock ticks (divide by
-.IR sysconf(_SC_CLK_TCK) ).
-.IP
-The format for this field was %lu before Linux 2.6.
-.TP
-(23) \fIvsize\fP \ %lu
-Virtual memory size in bytes.
-.TP
-(24) \fIrss\fP \ %ld
-Resident Set Size: number of pages the process has in real memory.
-This is just the pages which
-count toward text, data, or stack space.
-This does not include pages
-which have not been demand-loaded in, or which are swapped out.
-This value is inaccurate; see
-.IR /proc/ pid /statm
-below.
-.TP
-(25) \fIrsslim\fP \ %lu
-Current soft limit in bytes on the rss of the process;
-see the description of
-.B RLIMIT_RSS
-in
-.BR getrlimit (2).
-.TP
-(26) \fIstartcode\fP \ %lu \ [PT]
-The address above which program text can run.
-.TP
-(27) \fIendcode\fP \ %lu \ [PT]
-The address below which program text can run.
-.TP
-(28) \fIstartstack\fP \ %lu \ [PT]
-The address of the start (i.e., bottom) of the stack.
-.TP
-(29) \fIkstkesp\fP \ %lu \ [PT]
-The current value of ESP (stack pointer), as found in the
-kernel stack page for the process.
-.TP
-(30) \fIkstkeip\fP \ %lu \ [PT]
-The current EIP (instruction pointer).
-.TP
-(31) \fIsignal\fP \ %lu
-The bitmap of pending signals, displayed as a decimal number.
-Obsolete, because it does not provide information on real-time signals; use
-.IR /proc/ pid /status
-instead.
-.TP
-(32) \fIblocked\fP \ %lu
-The bitmap of blocked signals, displayed as a decimal number.
-Obsolete, because it does not provide information on real-time signals; use
-.IR /proc/ pid /status
-instead.
-.TP
-(33) \fIsigignore\fP \ %lu
-The bitmap of ignored signals, displayed as a decimal number.
-Obsolete, because it does not provide information on real-time signals; use
-.IR /proc/ pid /status
-instead.
-.TP
-(34) \fIsigcatch\fP \ %lu
-The bitmap of caught signals, displayed as a decimal number.
-Obsolete, because it does not provide information on real-time signals; use
-.IR /proc/ pid /status
-instead.
-.TP
-(35) \fIwchan\fP \ %lu \ [PT]
-This is the "channel" in which the process is waiting.
-It is the address of a location in the kernel where the process is sleeping.
-The corresponding symbolic name can be found in
-.IR /proc/ pid /wchan .
-.TP
-(36) \fInswap\fP \ %lu
-.\" nswap was added in Linux 2.0
-Number of pages swapped (not maintained).
-.TP
-(37) \fIcnswap\fP \ %lu
-.\" cnswap was added in Linux 2.0
-Cumulative \fInswap\fP for child processes (not maintained).
-.TP
-(38) \fIexit_signal\fP \ %d \ (since Linux 2.1.22)
-Signal to be sent to parent when we die.
-.TP
-(39) \fIprocessor\fP \ %d \ (since Linux 2.2.8)
-CPU number last executed on.
-.TP
-(40) \fIrt_priority\fP \ %u \ (since Linux 2.5.19)
-Real-time scheduling priority, a number in the range 1 to 99 for
-processes scheduled under a real-time policy,
-or 0, for non-real-time processes (see
-.BR sched_setscheduler (2)).
-.TP
-(41) \fIpolicy\fP \ %u \ (since Linux 2.5.19)
-Scheduling policy (see
-.BR sched_setscheduler (2)).
-Decode using the SCHED_* constants in
-.IR linux/sched.h .
-.IP
-The format for this field was %lu before Linux 2.6.22.
-.TP
-(42) \fIdelayacct_blkio_ticks\fP \ %llu \ (since Linux 2.6.18)
-Aggregated block I/O delays, measured in clock ticks (centiseconds).
-.TP
-(43) \fIguest_time\fP \ %lu \ (since Linux 2.6.24)
-Guest time of the process (time spent running a virtual CPU
-for a guest operating system), measured in clock ticks (divide by
-.IR sysconf(_SC_CLK_TCK) ).
-.TP
-(44) \fIcguest_time\fP \ %ld \ (since Linux 2.6.24)
-Guest time of the process's children, measured in clock ticks (divide by
-.IR sysconf(_SC_CLK_TCK) ).
-.TP
-(45) \fIstart_data\fP \ %lu \ (since Linux 3.3) \ [PT]
-.\" commit b3f7f573a20081910e34e99cbc91831f4f02f1ff
-Address above which program initialized and
-uninitialized (BSS) data are placed.
-.TP
-(46) \fIend_data\fP \ %lu \ (since Linux 3.3) \ [PT]
-.\" commit b3f7f573a20081910e34e99cbc91831f4f02f1ff
-Address below which program initialized and
-uninitialized (BSS) data are placed.
-.TP
-(47) \fIstart_brk\fP \ %lu \ (since Linux 3.3) \ [PT]
-.\" commit b3f7f573a20081910e34e99cbc91831f4f02f1ff
-Address above which program heap can be expanded with
-.BR brk (2).
-.TP
-(48) \fIarg_start\fP \ %lu \ (since Linux 3.5) \ [PT]
-.\" commit 5b172087f99189416d5f47fd7ab5e6fb762a9ba3
-Address above which program command-line arguments
-.RI ( argv )
-are placed.
-.TP
-(49) \fIarg_end\fP \ %lu \ (since Linux 3.5) \ [PT]
-.\" commit 5b172087f99189416d5f47fd7ab5e6fb762a9ba3
-Address below program command-line arguments
-.RI ( argv )
-are placed.
-.TP
-(50) \fIenv_start\fP \ %lu \ (since Linux 3.5) \ [PT]
-.\" commit 5b172087f99189416d5f47fd7ab5e6fb762a9ba3
-Address above which program environment is placed.
-.TP
-(51) \fIenv_end\fP \ %lu \ (since Linux 3.5) \ [PT]
-.\" commit 5b172087f99189416d5f47fd7ab5e6fb762a9ba3
-Address below which program environment is placed.
-.TP
-(52) \fIexit_code\fP \ %d \ (since Linux 3.5) \ [PT]
-.\" commit 5b172087f99189416d5f47fd7ab5e6fb762a9ba3
-The thread's exit status in the form reported by
-.BR waitpid (2).
-.RE
-.TP
-.IR /proc/ pid /statm
-Provides information about memory usage, measured in pages.
-The columns are:
-.IP
-.in +4n
-.EX
-size (1) total program size
- (same as VmSize in \fI/proc/\fPpid\fI/status\fP)
-resident (2) resident set size
- (inaccurate; same as VmRSS in \fI/proc/\fPpid\fI/status\fP)
-shared (3) number of resident shared pages
- (i.e., backed by a file)
- (inaccurate; same as RssFile+RssShmem in
- \fI/proc/\fPpid\fI/status\fP)
-text (4) text (code)
-.\" (not including libs; broken, includes data segment)
-lib (5) library (unused since Linux 2.6; always 0)
-data (6) data + stack
-.\" (including libs; broken, includes library text)
-dt (7) dirty pages (unused since Linux 2.6; always 0)
-.EE
-.in
-.IP
-.\" See SPLIT_RSS_COUNTING in the kernel.
-.\" Inaccuracy is bounded by TASK_RSS_EVENTS_THRESH.
-Some of these values are inaccurate because
-of a kernel-internal scalability optimization.
-If accurate values are required, use
-.IR /proc/ pid /smaps
-or
-.IR /proc/ pid /smaps_rollup
-instead, which are much slower but provide accurate, detailed information.
-.TP
-.IR /proc/ pid /status
-Provides much of the information in
-.IR /proc/ pid /stat
-and
-.IR /proc/ pid /statm
-in a format that's easier for humans to parse.
-Here's an example:
-.IP
-.in +4n
-.EX
-.RB "$" " cat /proc/$$/status"
-Name: bash
-Umask: 0022
-State: S (sleeping)
-Tgid: 17248
-Ngid: 0
-Pid: 17248
-PPid: 17200
-TracerPid: 0
-Uid: 1000 1000 1000 1000
-Gid: 100 100 100 100
-FDSize: 256
-Groups: 16 33 100
-NStgid: 17248
-NSpid: 17248
-NSpgid: 17248
-NSsid: 17200
-VmPeak: 131168 kB
-VmSize: 131168 kB
-VmLck: 0 kB
-VmPin: 0 kB
-VmHWM: 13484 kB
-VmRSS: 13484 kB
-RssAnon: 10264 kB
-RssFile: 3220 kB
-RssShmem: 0 kB
-VmData: 10332 kB
-VmStk: 136 kB
-VmExe: 992 kB
-VmLib: 2104 kB
-VmPTE: 76 kB
-VmPMD: 12 kB
-VmSwap: 0 kB
-HugetlbPages: 0 kB # 4.4
-CoreDumping: 0 # 4.15
-Threads: 1
-SigQ: 0/3067
-SigPnd: 0000000000000000
-ShdPnd: 0000000000000000
-SigBlk: 0000000000010000
-SigIgn: 0000000000384004
-SigCgt: 000000004b813efb
-CapInh: 0000000000000000
-CapPrm: 0000000000000000
-CapEff: 0000000000000000
-CapBnd: ffffffffffffffff
-CapAmb: 0000000000000000
-NoNewPrivs: 0
-Seccomp: 0
-Speculation_Store_Bypass: vulnerable
-Cpus_allowed: 00000001
-Cpus_allowed_list: 0
-Mems_allowed: 1
-Mems_allowed_list: 0
-voluntary_ctxt_switches: 150
-nonvoluntary_ctxt_switches: 545
-.EE
-.in
-.IP
-The fields are as follows:
-.RS
-.TP
-.I Name
-Command run by this process.
-Strings longer than
-.B TASK_COMM_LEN
-(16) characters (including the terminating null byte) are silently truncated.
-.TP
-.I Umask
-Process umask, expressed in octal with a leading zero; see
-.BR umask (2).
-(Since Linux 4.7.)
-.TP
-.I State
-Current state of the process.
-One of
-"R (running)",
-"S (sleeping)",
-"D (disk sleep)",
-"T (stopped)",
-"t (tracing stop)",
-"Z (zombie)",
-or
-"X (dead)".
-.TP
-.I Tgid
-Thread group ID (i.e., Process ID).
-.TP
-.I Ngid
-NUMA group ID (0 if none; since Linux 3.13).
-.TP
-.I Pid
-Thread ID (see
-.BR gettid (2)).
-.TP
-.I PPid
-PID of parent process.
-.TP
-.I TracerPid
-PID of process tracing this process (0 if not being traced).
-.TP
-.IR Uid ", " Gid
-Real, effective, saved set, and filesystem UIDs (GIDs).
-.TP
-.I FDSize
-Number of file descriptor slots currently allocated.
-.TP
-.I Groups
-Supplementary group list.
-.TP
-.I NStgid
-Thread group ID (i.e., PID) in each of the PID namespaces of which
-.I pid
-is a member.
-The leftmost entry shows the value with respect to the PID namespace
-of the process that mounted this procfs (or the root namespace
-if mounted by the kernel),
-followed by the value in successively nested inner namespaces.
-.\" commit e4bc33245124db69b74a6d853ac76c2976f472d5
-(Since Linux 4.1.)
-.TP
-.I NSpid
-Thread ID in each of the PID namespaces of which
-.I pid
-is a member.
-The fields are ordered as for
-.IR NStgid .
-(Since Linux 4.1.)
-.TP
-.I NSpgid
-Process group ID in each of the PID namespaces of which
-.I pid
-is a member.
-The fields are ordered as for
-.IR NStgid .
-(Since Linux 4.1.)
-.TP
-.I NSsid
-descendant namespace session ID hierarchy
-Session ID in each of the PID namespaces of which
-.I pid
-is a member.
-The fields are ordered as for
-.IR NStgid .
-(Since Linux 4.1.)
-.TP
-.I VmPeak
-Peak virtual memory size.
-.TP
-.I VmSize
-Virtual memory size.
-.TP
-.I VmLck
-Locked memory size (see
-.BR mlock (2)).
-.TP
-.I VmPin
-Pinned memory size
-.\" commit bc3e53f682d93df677dbd5006a404722b3adfe18
-(since Linux 3.2).
-These are pages that can't be moved because something needs to
-directly access physical memory.
-.TP
-.I VmHWM
-Peak resident set size ("high water mark").
-This value is inaccurate; see
-.IR /proc/ pid /statm
-above.
-.TP
-.I VmRSS
-Resident set size.
-Note that the value here is the sum of
-.IR RssAnon ,
-.IR RssFile ,
-and
-.IR RssShmem .
-This value is inaccurate; see
-.IR /proc/ pid /statm
-above.
-.TP
-.I RssAnon
-Size of resident anonymous memory.
-.\" commit bf9683d6990589390b5178dafe8fd06808869293
-(since Linux 4.5).
-This value is inaccurate; see
-.IR /proc/ pid /statm
-above.
-.TP
-.I RssFile
-Size of resident file mappings.
-.\" commit bf9683d6990589390b5178dafe8fd06808869293
-(since Linux 4.5).
-This value is inaccurate; see
-.IR /proc/ pid /statm
-above.
-.TP
-.I RssShmem
-Size of resident shared memory (includes System V shared memory,
-mappings from
-.BR tmpfs (5),
-and shared anonymous mappings).
-.\" commit bf9683d6990589390b5178dafe8fd06808869293
-(since Linux 4.5).
-.TP
-.IR VmData ", " VmStk ", " VmExe
-Size of data, stack, and text segments.
-This value is inaccurate; see
-.IR /proc/ pid /statm
-above.
-.TP
-.I VmLib
-Shared library code size.
-.TP
-.I VmPTE
-Page table entries size (since Linux 2.6.10).
-.TP
-.I VmPMD
-.\" commit dc6c9a35b66b520cf67e05d8ca60ebecad3b0479
-Size of second-level page tables (added in Linux 4.0; removed in Linux 4.15).
-.TP
-.I VmSwap
-.\" commit b084d4353ff99d824d3bc5a5c2c22c70b1fba722
-Swapped-out virtual memory size by anonymous private pages;
-shmem swap usage is not included (since Linux 2.6.34).
-This value is inaccurate; see
-.IR /proc/ pid /statm
-above.
-.TP
-.I HugetlbPages
-Size of hugetlb memory portions
-.\" commit 5d317b2b6536592a9b51fe65faed43d65ca9158e
-(since Linux 4.4).
-.TP
-.I CoreDumping
-Contains the value 1 if the process is currently dumping core,
-and 0 if it is not
-.\" commit c643401218be0f4ab3522e0c0a63016596d6e9ca
-(since Linux 4.15).
-This information can be used by a monitoring process to avoid killing
-a process that is currently dumping core,
-which could result in a corrupted core dump file.
-.TP
-.I Threads
-Number of threads in process containing this thread.
-.TP
-.I SigQ
-This field contains two slash-separated numbers that relate to
-queued signals for the real user ID of this process.
-The first of these is the number of currently queued
-signals for this real user ID, and the second is the
-resource limit on the number of queued signals for this process
-(see the description of
-.B RLIMIT_SIGPENDING
-in
-.BR getrlimit (2)).
-.TP
-.IR SigPnd ", " ShdPnd
-Mask (expressed in hexadecimal)
-of signals pending for thread and for process as a whole (see
-.BR pthreads (7)
-and
-.BR signal (7)).
-.TP
-.IR SigBlk ", " SigIgn ", " SigCgt
-Masks (expressed in hexadecimal)
-indicating signals being blocked, ignored, and caught (see
-.BR signal (7)).
-.TP
-.IR CapInh ", " CapPrm ", " CapEff
-Masks (expressed in hexadecimal)
-of capabilities enabled in inheritable, permitted, and effective sets
-(see
-.BR capabilities (7)).
-.TP
-.I CapBnd
-Capability bounding set, expressed in hexadecimal
-(since Linux 2.6.26, see
-.BR capabilities (7)).
-.TP
-.I CapAmb
-Ambient capability set, expressed in hexadecimal
-(since Linux 4.3, see
-.BR capabilities (7)).
-.TP
-.I NoNewPrivs
-.\" commit af884cd4a5ae62fcf5e321fecf0ec1014730353d
-Value of the
-.I no_new_privs
-bit
-(since Linux 4.10, see
-.BR prctl (2)).
-.TP
-.I Seccomp
-.\" commit 2f4b3bf6b2318cfaa177ec5a802f4d8d6afbd816
-Seccomp mode of the process
-(since Linux 3.8, see
-.BR seccomp (2)).
-0 means
-.BR SECCOMP_MODE_DISABLED ;
-1 means
-.BR SECCOMP_MODE_STRICT ;
-2 means
-.BR SECCOMP_MODE_FILTER .
-This field is provided only if the kernel was built with the
-.B CONFIG_SECCOMP
-kernel configuration option enabled.
-.TP
-.I Speculation_Store_Bypass
-.\" commit fae1fa0fc6cca8beee3ab8ed71d54f9a78fa3f64
-Speculation flaw mitigation state
-(since Linux 4.17, see
-.BR prctl (2)).
-.TP
-.I Cpus_allowed
-Hexadecimal mask of CPUs on which this process may run
-(since Linux 2.6.24, see
-.BR cpuset (7)).
-.TP
-.I Cpus_allowed_list
-Same as previous, but in "list format"
-(since Linux 2.6.26, see
-.BR cpuset (7)).
-.TP
-.I Mems_allowed
-Mask of memory nodes allowed to this process
-(since Linux 2.6.24, see
-.BR cpuset (7)).
-.TP
-.I Mems_allowed_list
-Same as previous, but in "list format"
-(since Linux 2.6.26, see
-.BR cpuset (7)).
-.TP
-.IR voluntary_ctxt_switches ", " nonvoluntary_ctxt_switches
-Number of voluntary and involuntary context switches (since Linux 2.6.23).
-.RE
-.TP
-.IR /proc/ pid /syscall " (since Linux 2.6.27)"
-.\" commit ebcb67341fee34061430f3367f2e507e52ee051b
-This file exposes the system call number and argument registers for the
-system call currently being executed by the process,
-followed by the values of the stack pointer and program counter registers.
-The values of all six argument registers are exposed,
-although most system calls use fewer registers.
-.IP
-If the process is blocked, but not in a system call,
-then the file displays \-1 in place of the system call number,
-followed by just the values of the stack pointer and program counter.
-If process is not blocked, then the file contains just the string "running".
-.IP
-This file is present only if the kernel was configured with
-.BR CONFIG_HAVE_ARCH_TRACEHOOK .
-.IP
-Permission to access this file is governed by a ptrace access mode
-.B PTRACE_MODE_ATTACH_FSCREDS
-check; see
-.BR ptrace (2).
-.TP
-.IR /proc/ pid /task " (since Linux 2.6.0)"
-.\" Precisely: Linux 2.6.0-test6
-This is a directory that contains one subdirectory
-for each thread in the process.
-The name of each subdirectory is the numerical thread ID
-.RI ( tid )
-of the thread (see
-.BR gettid (2)).
-.IP
-Within each of these subdirectories, there is a set of
-files with the same names and contents as under the
-.IR /proc/ pid
-directories.
-For attributes that are shared by all threads, the contents for
-each of the files under the
-.IR task/ tid
-subdirectories will be the same as in the corresponding
-file in the parent
-.IR /proc/ pid
-directory
-(e.g., in a multithreaded process, all of the
-.IR task/ tid /cwd
-files will have the same value as the
-.IR /proc/ pid /cwd
-file in the parent directory, since all of the threads in a process
-share a working directory).
-For attributes that are distinct for each thread,
-the corresponding files under
-.IR task/ tid
-may have different values (e.g., various fields in each of the
-.IR task/ tid /status
-files may be different for each thread),
-.\" in particular: "children" :/
-or they might not exist in
-.IR /proc/ pid
-at all.
-.IP
-.\" The following was still true as at kernel 2.6.13
-In a multithreaded process, the contents of the
-.IR /proc/ pid /task
-directory are not available if the main thread has already terminated
-(typically by calling
-.BR pthread_exit (3)).
-.TP
-.IR /proc/ pid /task/ tid /children " (since Linux 3.5)"
-.\" commit 818411616baf46ceba0cff6f05af3a9b294734f7
-A space-separated list of child tasks of this task.
-Each child task is represented by its TID.
-.IP
-.\" see comments in get_children_pid() in fs/proc/array.c
-This option is intended for use by the checkpoint-restore (CRIU) system,
-and reliably provides a list of children only if all of the child processes
-are stopped or frozen.
-It does not work properly if children of the target task exit while
-the file is being read!
-Exiting children may cause non-exiting children to be omitted from the list.
-This makes this interface even more unreliable than classic PID-based
-approaches if the inspected task and its children aren't frozen,
-and most code should probably not use this interface.
-.IP
-Until Linux 4.2, the presence of this file was governed by the
-.B CONFIG_CHECKPOINT_RESTORE
-kernel configuration option.
-Since Linux 4.2,
-.\" commit 2e13ba54a2682eea24918b87ad3edf70c2cf085b
-it is governed by the
-.B CONFIG_PROC_CHILDREN
-option.
-.TP
-.IR /proc/ pid /timers " (since Linux 3.10)"
-.\" commit 5ed67f05f66c41e39880a6d61358438a25f9fee5
-.\" commit 48f6a7a511ef8823fdff39afee0320092d43a8a0
-A list of the POSIX timers for this process.
-Each timer is listed with a line that starts with the string "ID:".
-For example:
-.IP
-.in +4n
-.EX
-ID: 1
-signal: 60/00007fff86e452a8
-notify: signal/pid.2634
-ClockID: 0
-ID: 0
-signal: 60/00007fff86e452a8
-notify: signal/pid.2634
-ClockID: 1
-.EE
-.in
-.IP
-The lines shown for each timer have the following meanings:
-.RS
-.TP
-.I ID
-The ID for this timer.
-This is not the same as the timer ID returned by
-.BR timer_create (2);
-rather, it is the same kernel-internal ID that is available via the
-.I si_timerid
-field of the
-.I siginfo_t
-structure (see
-.BR sigaction (2)).
-.TP
-.I signal
-This is the signal number that this timer uses to deliver notifications
-followed by a slash, and then the
-.I sigev_value
-value supplied to the signal handler.
-Valid only for timers that notify via a signal.
-.TP
-.I notify
-The part before the slash specifies the mechanism
-that this timer uses to deliver notifications,
-and is one of "thread", "signal", or "none".
-Immediately following the slash is either the string "tid" for timers
-with
-.B SIGEV_THREAD_ID
-notification, or "pid" for timers that notify by other mechanisms.
-Following the "." is the PID of the process
-(or the kernel thread ID of the thread) that will be delivered
-a signal if the timer delivers notifications via a signal.
-.TP
-.I ClockID
-This field identifies the clock that the timer uses for measuring time.
-For most clocks, this is a number that matches one of the user-space
-.B CLOCK_*
-constants exposed via
-.IR <time.h> .
-.B CLOCK_PROCESS_CPUTIME_ID
-timers display with a value of \-6
-in this field.
-.B CLOCK_THREAD_CPUTIME_ID
-timers display with a value of \-2
-in this field.
-.RE
-.IP
-This file is available only when the kernel was configured with
-.BR CONFIG_CHECKPOINT_RESTORE .
-.TP
-.IR /proc/ pid /timerslack_ns " (since Linux 4.6)"
-.\" commit da8b44d5a9f8bf26da637b7336508ca534d6b319
-.\" commit 5de23d435e88996b1efe0e2cebe242074ce67c9e
-This file exposes the process's "current" timer slack value,
-expressed in nanoseconds.
-The file is writable,
-allowing the process's timer slack value to be changed.
-Writing 0 to this file resets the "current" timer slack to the
-"default" timer slack value.
-For further details, see the discussion of
-.B PR_SET_TIMERSLACK
-in
-.BR prctl (2).
-.IP
-Initially,
-permission to access this file was governed by a ptrace access mode
-.B PTRACE_MODE_ATTACH_FSCREDS
-check (see
-.BR ptrace (2)).
-However, this was subsequently deemed too strict a requirement
-(and had the side effect that requiring a process to have the
-.B CAP_SYS_PTRACE
-capability would also allow it to view and change any process's memory).
-Therefore, since Linux 4.9,
-.\" commit 7abbaf94049914f074306d960b0f968ffe52e59f
-only the (weaker)
-.B CAP_SYS_NICE
-capability is required to access this file.
-.TP
-.IR /proc/ pid /uid_map " (since Linux 3.5)"
-See
-.BR user_namespaces (7).
-.TP
-.IR /proc/ pid /wchan " (since Linux 2.6.0)"
-The symbolic name corresponding to the location
-in the kernel where the process is sleeping.
-.IP
-Permission to access this file is governed by a ptrace access mode
-.B PTRACE_MODE_READ_FSCREDS
-check; see
-.BR ptrace (2).
-.TP
-.IR /proc/ tid
-There is a numerical subdirectory for each running thread
-that is not a thread group leader
-(i.e., a thread whose thread ID is not the same as its process ID);
-the subdirectory is named by the thread ID.
-Each one of these subdirectories contains files and subdirectories
-exposing information about the thread with the thread ID
-.IR tid .
-The contents of these directories are the same as the corresponding
-.IR /proc/ pid /task/ tid
-directories.
-.IP
-The
-.IR /proc/ tid
-subdirectories are
-.I not
-visible when iterating through
-.I /proc
-with
-.BR getdents (2)
-(and thus are
-.I not
-visible when one uses
-.BR ls (1)
-to view the contents of
-.IR /proc ).
-However, the pathnames of these directories are visible to
-(i.e., usable as arguments in)
-system calls that operate on pathnames.
-.TP
-.I /proc/apm
-Advanced power management version and battery information when
-.B CONFIG_APM
-is defined at kernel compilation time.
-.TP
-.I /proc/buddyinfo
-This file contains information which is used for diagnosing memory
-fragmentation issues.
-Each line starts with the identification of the node and the name
-of the zone which together identify a memory region.
-This is then
-followed by the count of available chunks of a certain order in
-which these zones are split.
-The size in bytes of a certain order is given by the formula:
-.IP
-.in +4n
-.EX
-(2\[ha]order)\ *\ PAGE_SIZE
-.EE
-.in
-.IP
-The binary buddy allocator algorithm inside the kernel will split
-one chunk into two chunks of a smaller order (thus with half the
-size) or combine two contiguous chunks into one larger chunk of
-a higher order (thus with double the size) to satisfy allocation
-requests and to counter memory fragmentation.
-The order matches the column number, when starting to count at zero.
-.IP
-For example on an x86-64 system:
-.RS -12
-.EX
-Node 0, zone DMA 1 1 1 0 2 1 1 0 1 1 3
-Node 0, zone DMA32 65 47 4 81 52 28 13 10 5 1 404
-Node 0, zone Normal 216 55 189 101 84 38 37 27 5 3 587
-.EE
-.RE
-.IP
-In this example, there is one node containing three zones and there
-are 11 different chunk sizes.
-If the page size is 4 kilobytes, then the first zone called
-.I DMA
-(on x86 the first 16 megabyte of memory) has 1 chunk of 4 kilobytes
-(order 0) available and has 3 chunks of 4 megabytes (order 10) available.
-.IP
-If the memory is heavily fragmented, the counters for higher
-order chunks will be zero and allocation of large contiguous areas
-will fail.
-.IP
-Further information about the zones can be found in
-.IR /proc/zoneinfo .
-.TP
-.I /proc/bus
-Contains subdirectories for installed buses.
-.TP
-.I /proc/bus/pccard
-Subdirectory for PCMCIA devices when
-.B CONFIG_PCMCIA
-is set at kernel compilation time.
-.TP
-.I /proc/bus/pccard/drivers
-.TP
-.I /proc/bus/pci
-Contains various bus subdirectories and pseudo-files containing
-information about PCI buses, installed devices, and device
-drivers.
-Some of these files are not ASCII.
-.TP
-.I /proc/bus/pci/devices
-Information about PCI devices.
-They may be accessed through
-.BR lspci (8)
-and
-.BR setpci (8).
-.TP
-.IR /proc/cgroups " (since Linux 2.6.24)"
-See
-.BR cgroups (7).
-.TP
-.I /proc/cmdline
-Arguments passed to the Linux kernel at boot time.
-Often done via a boot manager such as
-.BR lilo (8)
-or
-.BR grub (8).
-.TP
-.IR /proc/config.gz " (since Linux 2.6)"
-This file exposes the configuration options that were used
-to build the currently running kernel,
-in the same format as they would be shown in the
-.I .config
-file that resulted when configuring the kernel (using
-.IR "make xconfig" ,
-.IR "make config" ,
-or similar).
-The file contents are compressed; view or search them using
-.BR zcat (1)
-and
-.BR zgrep (1).
-As long as no changes have been made to the following file,
-the contents of
-.I /proc/config.gz
-are the same as those provided by:
-.IP
-.in +4n
-.EX
-cat /lib/modules/$(uname \-r)/build/.config
-.EE
-.in
-.IP
-.I /proc/config.gz
-is provided only if the kernel is configured with
-.BR CONFIG_IKCONFIG_PROC .
-.TP
-.I /proc/crypto
-A list of the ciphers provided by the kernel crypto API.
-For details, see the kernel
-.I "Linux Kernel Crypto API"
-documentation available under the kernel source directory
-.I Documentation/crypto/
-.\" commit 3b72c814a8e8cd638e1ba0da4dfce501e9dff5af
-(or
-.I Documentation/DocBook
-before Linux 4.10;
-the documentation can be built using a command such as
-.I make htmldocs
-in the root directory of the kernel source tree).
-.TP
-.I /proc/cpuinfo
-This is a collection of CPU and system architecture dependent items,
-for each supported architecture a different list.
-Two common entries are \fIprocessor\fP which gives CPU number and
-\fIbogomips\fP; a system constant that is calculated
-during kernel initialization.
-SMP machines have information for
-each CPU.
-The
-.BR lscpu (1)
-command gathers its information from this file.
-.TP
-.I /proc/devices
-Text listing of major numbers and device groups.
-This can be used by MAKEDEV scripts for consistency with the kernel.
-.TP
-.IR /proc/diskstats " (since Linux 2.5.69)"
-This file contains disk I/O statistics for each disk device.
-See the Linux kernel source file
-.I Documentation/admin\-guide/iostats.rst
-(or
-.I Documentation/iostats.txt
-before Linux 5.3)
-for further information.
-.TP
-.I /proc/dma
-This is a list of the registered \fIISA\fP DMA (direct memory access)
-channels in use.
-.TP
-.I /proc/driver
-Empty subdirectory.
-.TP
-.I /proc/execdomains
-Used to list ABI personalities before Linux 4.1;
-now contains a constant string for userspace compatibility.
-.TP
-.I /proc/fb
-Frame buffer information when
-.B CONFIG_FB
-is defined during kernel compilation.
-.TP
-.I /proc/filesystems
-A text listing of the filesystems which are supported by the kernel,
-namely filesystems which were compiled into the kernel or whose kernel
-modules are currently loaded.
-(See also
-.BR filesystems (5).)
-If a filesystem is marked with "nodev",
-this means that it does not require a block device to be mounted
-(e.g., virtual filesystem, network filesystem).
-.IP
-Incidentally, this file may be used by
-.BR mount (8)
-when no filesystem is specified and it didn't manage to determine the
-filesystem type.
-Then filesystems contained in this file are tried
-(excepted those that are marked with "nodev").
-.TP
-.I /proc/fs
-.\" FIXME Much more needs to be said about /proc/fs
-.\"
-Contains subdirectories that in turn contain files
-with information about (certain) mounted filesystems.
-.TP
-.I /proc/ide
-This directory
-exists on systems with the IDE bus.
-There are directories for each IDE channel and attached device.
-Files include:
-.IP
-.in +4n
-.EX
-cache buffer size in KB
-capacity number of sectors
-driver driver version
-geometry physical and logical geometry
-identify in hexadecimal
-media media type
-model manufacturer\[aq]s model number
-settings drive settings
-smart_thresholds IDE disk management thresholds (in hex)
-smart_values IDE disk management values (in hex)
-.EE
-.in
-.IP
-The
-.BR hdparm (8)
-utility provides access to this information in a friendly format.
-.TP
-.I /proc/interrupts
-This is used to record the number of interrupts per CPU per IO device.
-Since Linux 2.6.24,
-for the i386 and x86-64 architectures, at least, this also includes
-interrupts internal to the system (that is, not associated with a device
-as such), such as NMI (nonmaskable interrupt), LOC (local timer interrupt),
-and for SMP systems, TLB (TLB flush interrupt), RES (rescheduling
-interrupt), CAL (remote function call interrupt), and possibly others.
-Very easy to read formatting, done in ASCII.
-.TP
-.I /proc/iomem
-I/O memory map in Linux 2.4.
-.TP
-.I /proc/ioports
-This is a list of currently registered Input-Output port regions that
-are in use.
-.TP
-.IR /proc/kallsyms " (since Linux 2.5.71)"
-This holds the kernel exported symbol definitions used by the
-.BR modules (X)
-tools to dynamically link and bind loadable modules.
-In Linux 2.5.47 and earlier, a similar file with slightly different syntax
-was named
-.IR ksyms .
-.TP
-.I /proc/kcore
-This file represents the physical memory of the system and is stored
-in the ELF core file format.
-With this pseudo-file, and an unstripped
-kernel
-.RI ( /usr/src/linux/vmlinux )
-binary, GDB can be used to
-examine the current state of any kernel data structures.
-.IP
-The total length of the file is the size of physical memory (RAM) plus
-4\ KiB.
-.TP
-.IR /proc/keys " (since Linux 2.6.10)"
-See
-.BR keyrings (7).
-.TP
-.IR /proc/key\-users " (since Linux 2.6.10)"
-See
-.BR keyrings (7).
-.TP
-.I /proc/kmsg
-This file can be used instead of the
-.BR syslog (2)
-system call to read kernel messages.
-A process must have superuser
-privileges to read this file, and only one process should read this
-file.
-This file should not be read if a syslog process is running
-which uses the
-.BR syslog (2)
-system call facility to log kernel messages.
-.IP
-Information in this file is retrieved with the
-.BR dmesg (1)
-program.
-.TP
-.IR /proc/kpagecgroup " (since Linux 4.3)"
-.\" commit 80ae2fdceba8313b0433f899bdd9c6c463291a17
-This file contains a 64-bit inode number of
-the memory cgroup each page is charged to,
-indexed by page frame number (see the discussion of
-.IR /proc/ pid /pagemap ).
-.IP
-The
-.I /proc/kpagecgroup
-file is present only if the
-.B CONFIG_MEMCG
-kernel configuration option is enabled.
-.TP
-.IR /proc/kpagecount " (since Linux 2.6.25)"
-This file contains a 64-bit count of the number of
-times each physical page frame is mapped,
-indexed by page frame number (see the discussion of
-.IR /proc/ pid /pagemap ).
-.IP
-The
-.I /proc/kpagecount
-file is present only if the
-.B CONFIG_PROC_PAGE_MONITOR
-kernel configuration option is enabled.
-.TP
-.IR /proc/kpageflags " (since Linux 2.6.25)"
-This file contains 64-bit masks corresponding to each physical page frame;
-it is indexed by page frame number (see the discussion of
-.IR /proc/ pid /pagemap ).
-The bits are as follows:
-.RS
-.IP
-.TS
-r l l l.
-0 - KPF_LOCKED
-1 - KPF_ERROR
-2 - KPF_REFERENCED
-3 - KPF_UPTODATE
-4 - KPF_DIRTY
-5 - KPF_LRU
-6 - KPF_ACTIVE
-7 - KPF_SLAB
-8 - KPF_WRITEBACK
-9 - KPF_RECLAIM
-10 - KPF_BUDDY
-11 - KPF_MMAP (since Linux 2.6.31)
-12 - KPF_ANON (since Linux 2.6.31)
-13 - KPF_SWAPCACHE (since Linux 2.6.31)
-14 - KPF_SWAPBACKED (since Linux 2.6.31)
-15 - KPF_COMPOUND_HEAD (since Linux 2.6.31)
-16 - KPF_COMPOUND_TAIL (since Linux 2.6.31)
-17 - KPF_HUGE (since Linux 2.6.31)
-18 - KPF_UNEVICTABLE (since Linux 2.6.31)
-19 - KPF_HWPOISON (since Linux 2.6.31)
-20 - KPF_NOPAGE (since Linux 2.6.31)
-21 - KPF_KSM (since Linux 2.6.32)
-22 - KPF_THP (since Linux 3.4)
-23 - KPF_BALLOON (since Linux 3.18)
-.\" KPF_BALLOON: commit 09316c09dde33aae14f34489d9e3d243ec0d5938
-24 - KPF_ZERO_PAGE (since Linux 4.0)
-.\" KPF_ZERO_PAGE: commit 56873f43abdcd574b25105867a990f067747b2f4
-25 - KPF_IDLE (since Linux 4.3)
-.\" KPF_IDLE: commit f074a8f49eb87cde95ac9d040ad5e7ea4f029738
-26 - KPF_PGTABLE (since Linux 4.18)
-.\" KPF_PGTABLE: commit 1d40a5ea01d53251c23c7be541d3f4a656cfc537
-.TE
-.RE
-.IP
-For further details on the meanings of these bits,
-see the kernel source file
-.IR Documentation/admin\-guide/mm/pagemap.rst .
-Before Linux 2.6.29,
-.\" commit ad3bdefe877afb47480418fdb05ecd42842de65e
-.\" commit e07a4b9217d1e97d2f3a62b6b070efdc61212110
-.BR KPF_WRITEBACK ,
-.BR KPF_RECLAIM ,
-.BR KPF_BUDDY ,
-and
-.B KPF_LOCKED
-did not report correctly.
-.IP
-The
-.I /proc/kpageflags
-file is present only if the
-.B CONFIG_PROC_PAGE_MONITOR
-kernel configuration option is enabled.
-.TP
-.IR /proc/ksyms " (Linux 1.1.23\[en]2.5.47)"
-See
-.IR /proc/kallsyms .
-.TP
-.I /proc/loadavg
-The first three fields in this file are load average figures
-giving the number of jobs in the run queue (state R)
-or waiting for disk I/O (state D) averaged over 1, 5, and 15 minutes.
-They are the same as the load average numbers given by
-.BR uptime (1)
-and other programs.
-The fourth field consists of two numbers separated by a slash (/).
-The first of these is the number of currently runnable kernel
-scheduling entities (processes, threads).
-The value after the slash is the number of kernel scheduling entities
-that currently exist on the system.
-The fifth field is the PID of the process that was most
-recently created on the system.
-.TP
-.I /proc/locks
-This file shows current file locks
-.RB ( flock "(2) and " fcntl (2))
-and leases
-.RB ( fcntl (2)).
-.IP
-An example of the content shown in this file is the following:
-.IP
-.in +4n
-.EX
-1: POSIX ADVISORY READ 5433 08:01:7864448 128 128
-2: FLOCK ADVISORY WRITE 2001 08:01:7864554 0 EOF
-3: FLOCK ADVISORY WRITE 1568 00:2f:32388 0 EOF
-4: POSIX ADVISORY WRITE 699 00:16:28457 0 EOF
-5: POSIX ADVISORY WRITE 764 00:16:21448 0 0
-6: POSIX ADVISORY READ 3548 08:01:7867240 1 1
-7: POSIX ADVISORY READ 3548 08:01:7865567 1826 2335
-8: OFDLCK ADVISORY WRITE \-1 08:01:8713209 128 191
-.EE
-.in
-.IP
-The fields shown in each line are as follows:
-.RS
-.IP [1] 5
-The ordinal position of the lock in the list.
-.IP [2]
-The lock type.
-Values that may appear here include:
-.RS
-.TP
-.B FLOCK
-This is a BSD file lock created using
-.BR flock (2).
-.TP
-.B OFDLCK
-This is an open file description (OFD) lock created using
-.BR fcntl (2).
-.TP
-.B POSIX
-This is a POSIX byte-range lock created using
-.BR fcntl (2).
-.RE
-.IP [3]
-Among the strings that can appear here are the following:
-.RS
-.TP
-.B ADVISORY
-This is an advisory lock.
-.TP
-.B MANDATORY
-This is a mandatory lock.
-.RE
-.IP [4]
-The type of lock.
-Values that can appear here are:
-.RS
-.TP
-.B READ
-This is a POSIX or OFD read lock, or a BSD shared lock.
-.TP
-.B WRITE
-This is a POSIX or OFD write lock, or a BSD exclusive lock.
-.RE
-.IP [5]
-The PID of the process that owns the lock.
-.IP
-Because OFD locks are not owned by a single process
-(since multiple processes may have file descriptors that
-refer to the same open file description),
-the value \-1 is displayed in this field for OFD locks.
-(Before Linux 4.14,
-.\" commit 9d5b86ac13c573795525ecac6ed2db39ab23e2a8
-a bug meant that the PID of the process that
-initially acquired the lock was displayed instead of the value \-1.)
-.IP [6]
-Three colon-separated subfields that identify the major and minor device
-ID of the device containing the filesystem where the locked file resides,
-followed by the inode number of the locked file.
-.IP [7]
-The byte offset of the first byte of the lock.
-For BSD locks, this value is always 0.
-.IP [8]
-The byte offset of the last byte of the lock.
-.B EOF
-in this field means that the lock extends to the end of the file.
-For BSD locks, the value shown is always
-.IR EOF .
-.RE
-.IP
-Since Linux 4.9,
-.\" commit d67fd44f697dff293d7cdc29af929241b669affe
-the list of locks shown in
-.I /proc/locks
-is filtered to show just the locks for the processes in the PID
-namespace (see
-.BR pid_namespaces (7))
-for which the
-.I /proc
-filesystem was mounted.
-(In the initial PID namespace,
-there is no filtering of the records shown in this file.)
-.IP
-The
-.BR lslocks (8)
-command provides a bit more information about each lock.
-.TP
-.IR /proc/malloc " (only up to and including Linux 2.2)"
-.\" It looks like this only ever did something back in 1.0 days
-This file is present only if
-.B CONFIG_DEBUG_MALLOC
-was defined during compilation.
-.TP
-.I /proc/meminfo
-This file reports statistics about memory usage on the system.
-It is used by
-.BR free (1)
-to report the amount of free and used memory (both physical and swap)
-on the system as well as the shared memory and buffers used by the
-kernel.
-Each line of the file consists of a parameter name, followed by a colon,
-the value of the parameter, and an option unit of measurement (e.g., "kB").
-The list below describes the parameter names and
-the format specifier required to read the field value.
-Except as noted below,
-all of the fields have been present since at least Linux 2.6.0.
-Some fields are displayed only if the kernel was configured
-with various options; those dependencies are noted in the list.
-.RS
-.TP
-.IR MemTotal " %lu"
-Total usable RAM (i.e., physical RAM minus a few reserved
-bits and the kernel binary code).
-.TP
-.IR MemFree " %lu"
-The sum of
-.IR LowFree + HighFree .
-.TP
-.IR MemAvailable " %lu (since Linux 3.14)"
-An estimate of how much memory is available for starting new
-applications, without swapping.
-.TP
-.IR Buffers " %lu"
-Relatively temporary storage for raw disk blocks that
-shouldn't get tremendously large (20 MB or so).
-.TP
-.IR Cached " %lu"
-In-memory cache for files read from the disk (the page cache).
-Doesn't include
-.IR SwapCached .
-.TP
-.IR SwapCached " %lu"
-Memory that once was swapped out, is swapped back in but
-still also is in the swap file.
-(If memory pressure is high, these pages
-don't need to be swapped out again because they are already
-in the swap file.
-This saves I/O.)
-.TP
-.IR Active " %lu"
-Memory that has been used more recently and usually not
-reclaimed unless absolutely necessary.
-.TP
-.IR Inactive " %lu"
-Memory which has been less recently used.
-It is more eligible to be reclaimed for other purposes.
-.TP
-.IR Active(anon) " %lu (since Linux 2.6.28)"
-[To be documented.]
-.TP
-.IR Inactive(anon) " %lu (since Linux 2.6.28)"
-[To be documented.]
-.TP
-.IR Active(file) " %lu (since Linux 2.6.28)"
-[To be documented.]
-.TP
-.IR Inactive(file) " %lu (since Linux 2.6.28)"
-[To be documented.]
-.TP
-.IR Unevictable " %lu (since Linux 2.6.28)"
-(From Linux 2.6.28 to Linux 2.6.30,
-\fBCONFIG_UNEVICTABLE_LRU\fP was required.)
-[To be documented.]
-.TP
-.IR Mlocked " %lu (since Linux 2.6.28)"
-(From Linux 2.6.28 to Linux 2.6.30,
-\fBCONFIG_UNEVICTABLE_LRU\fP was required.)
-[To be documented.]
-.TP
-.IR HighTotal " %lu"
-(Starting with Linux 2.6.19, \fBCONFIG_HIGHMEM\fP is required.)
-Total amount of highmem.
-Highmem is all memory above \[ti]860 MB of physical memory.
-Highmem areas are for use by user-space programs,
-or for the page cache.
-The kernel must use tricks to access
-this memory, making it slower to access than lowmem.
-.TP
-.IR HighFree " %lu"
-(Starting with Linux 2.6.19, \fBCONFIG_HIGHMEM\fP is required.)
-Amount of free highmem.
-.TP
-.IR LowTotal " %lu"
-(Starting with Linux 2.6.19, \fBCONFIG_HIGHMEM\fP is required.)
-Total amount of lowmem.
-Lowmem is memory which can be used for everything that
-highmem can be used for, but it is also available for the
-kernel's use for its own data structures.
-Among many other things,
-it is where everything from
-.I Slab
-is allocated.
-Bad things happen when you're out of lowmem.
-.TP
-.IR LowFree " %lu"
-(Starting with Linux 2.6.19, \fBCONFIG_HIGHMEM\fP is required.)
-Amount of free lowmem.
-.TP
-.IR MmapCopy " %lu (since Linux 2.6.29)"
-.RB ( CONFIG_MMU
-is required.)
-[To be documented.]
-.TP
-.IR SwapTotal " %lu"
-Total amount of swap space available.
-.TP
-.IR SwapFree " %lu"
-Amount of swap space that is currently unused.
-.TP
-.IR Dirty " %lu"
-Memory which is waiting to get written back to the disk.
-.TP
-.IR Writeback " %lu"
-Memory which is actively being written back to the disk.
-.TP
-.IR AnonPages " %lu (since Linux 2.6.18)"
-Non-file backed pages mapped into user-space page tables.
-.TP
-.IR Mapped " %lu"
-Files which have been mapped into memory (with
-.BR mmap (2)),
-such as libraries.
-.TP
-.IR Shmem " %lu (since Linux 2.6.32)"
-Amount of memory consumed in
-.BR tmpfs (5)
-filesystems.
-.TP
-.IR KReclaimable " %lu (since Linux 4.20)"
-Kernel allocations that the kernel will attempt to reclaim
-under memory pressure.
-Includes
-.I SReclaimable
-(below), and other direct allocations with a shrinker.
-.TP
-.IR Slab " %lu"
-In-kernel data structures cache.
-(See
-.BR slabinfo (5).)
-.TP
-.IR SReclaimable " %lu (since Linux 2.6.19)"
-Part of
-.IR Slab ,
-that might be reclaimed, such as caches.
-.TP
-.IR SUnreclaim " %lu (since Linux 2.6.19)"
-Part of
-.IR Slab ,
-that cannot be reclaimed on memory pressure.
-.TP
-.IR KernelStack " %lu (since Linux 2.6.32)"
-Amount of memory allocated to kernel stacks.
-.TP
-.IR PageTables " %lu (since Linux 2.6.18)"
-Amount of memory dedicated to the lowest level of page tables.
-.TP
-.IR Quicklists " %lu (since Linux 2.6.27)"
-(\fBCONFIG_QUICKLIST\fP is required.)
-[To be documented.]
-.TP
-.IR NFS_Unstable " %lu (since Linux 2.6.18)"
-NFS pages sent to the server, but not yet committed to stable storage.
-.TP
-.IR Bounce " %lu (since Linux 2.6.18)"
-Memory used for block device "bounce buffers".
-.TP
-.IR WritebackTmp " %lu (since Linux 2.6.26)"
-Memory used by FUSE for temporary writeback buffers.
-.TP
-.IR CommitLimit " %lu (since Linux 2.6.10)"
-This is the total amount of memory currently available to
-be allocated on the system, expressed in kilobytes.
-This limit is adhered to
-only if strict overcommit accounting is enabled (mode 2 in
-.IR /proc/sys/vm/overcommit_memory ).
-The limit is calculated according to the formula described under
-.IR /proc/sys/vm/overcommit_memory .
-For further details, see the kernel source file
-.IR Documentation/vm/overcommit\-accounting.rst .
-.TP
-.IR Committed_AS " %lu"
-The amount of memory presently allocated on the system.
-The committed memory is a sum of all of the memory which
-has been allocated by processes, even if it has not been
-"used" by them as of yet.
-A process which allocates 1 GB of memory (using
-.BR malloc (3)
-or similar), but touches only 300 MB of that memory will show up
-as using only 300 MB of memory even if it has the address space
-allocated for the entire 1 GB.
-.IP
-This 1 GB is memory which has been "committed" to by the VM
-and can be used at any time by the allocating application.
-With strict overcommit enabled on the system (mode 2 in
-.IR /proc/sys/vm/overcommit_memory ),
-allocations which would exceed the
-.I CommitLimit
-will not be permitted.
-This is useful if one needs to guarantee that processes will not
-fail due to lack of memory once that memory has been successfully allocated.
-.TP
-.IR VmallocTotal " %lu"
-Total size of vmalloc memory area.
-.TP
-.IR VmallocUsed " %lu"
-Amount of vmalloc area which is used.
-Since Linux 4.4,
-.\" commit a5ad88ce8c7fae7ddc72ee49a11a75aa837788e0
-this field is no longer calculated, and is hard coded as 0.
-See
-.IR /proc/vmallocinfo .
-.TP
-.IR VmallocChunk " %lu"
-Largest contiguous block of vmalloc area which is free.
-Since Linux 4.4,
-.\" commit a5ad88ce8c7fae7ddc72ee49a11a75aa837788e0
-this field is no longer calculated and is hard coded as 0.
-See
-.IR /proc/vmallocinfo .
-.TP
-.IR HardwareCorrupted " %lu (since Linux 2.6.32)"
-(\fBCONFIG_MEMORY_FAILURE\fP is required.)
-[To be documented.]
-.TP
-.IR LazyFree " %lu (since Linux 4.12)"
-Shows the amount of memory marked by
-.BR madvise (2)
-.BR MADV_FREE .
-.TP
-.IR AnonHugePages " %lu (since Linux 2.6.38)"
-(\fBCONFIG_TRANSPARENT_HUGEPAGE\fP is required.)
-Non-file backed huge pages mapped into user-space page tables.
-.TP
-.IR ShmemHugePages " %lu (since Linux 4.8)"
-(\fBCONFIG_TRANSPARENT_HUGEPAGE\fP is required.)
-Memory used by shared memory (shmem) and
-.BR tmpfs (5)
-allocated with huge pages.
-.TP
-.IR ShmemPmdMapped " %lu (since Linux 4.8)"
-(\fBCONFIG_TRANSPARENT_HUGEPAGE\fP is required.)
-Shared memory mapped into user space with huge pages.
-.TP
-.IR CmaTotal " %lu (since Linux 3.1)"
-Total CMA (Contiguous Memory Allocator) pages.
-(\fBCONFIG_CMA\fP is required.)
-.TP
-.IR CmaFree " %lu (since Linux 3.1)"
-Free CMA (Contiguous Memory Allocator) pages.
-(\fBCONFIG_CMA\fP is required.)
-.TP
-.IR HugePages_Total " %lu"
-(\fBCONFIG_HUGETLB_PAGE\fP is required.)
-The size of the pool of huge pages.
-.TP
-.IR HugePages_Free " %lu"
-(\fBCONFIG_HUGETLB_PAGE\fP is required.)
-The number of huge pages in the pool that are not yet allocated.
-.TP
-.IR HugePages_Rsvd " %lu (since Linux 2.6.17)"
-(\fBCONFIG_HUGETLB_PAGE\fP is required.)
-This is the number of huge pages for
-which a commitment to allocate from the pool has been made,
-but no allocation has yet been made.
-These reserved huge pages
-guarantee that an application will be able to allocate a
-huge page from the pool of huge pages at fault time.
-.TP
-.IR HugePages_Surp " %lu (since Linux 2.6.24)"
-(\fBCONFIG_HUGETLB_PAGE\fP is required.)
-This is the number of huge pages in
-the pool above the value in
-.IR /proc/sys/vm/nr_hugepages .
-The maximum number of surplus huge pages is controlled by
-.IR /proc/sys/vm/nr_overcommit_hugepages .
-.TP
-.IR Hugepagesize " %lu"
-(\fBCONFIG_HUGETLB_PAGE\fP is required.)
-The size of huge pages.
-.TP
-.IR DirectMap4k " %lu (since Linux 2.6.27)"
-Number of bytes of RAM linearly mapped by kernel in 4 kB pages.
-(x86.)
-.TP
-.IR DirectMap4M " %lu (since Linux 2.6.27)"
-Number of bytes of RAM linearly mapped by kernel in 4 MB pages.
-(x86 with
-.B CONFIG_X86_64
-or
-.B CONFIG_X86_PAE
-enabled.)
-.TP
-.IR DirectMap2M " %lu (since Linux 2.6.27)"
-Number of bytes of RAM linearly mapped by kernel in 2 MB pages.
-(x86 with neither
-.B CONFIG_X86_64
-nor
-.B CONFIG_X86_PAE
-enabled.)
-.TP
-.IR DirectMap1G " %lu (since Linux 2.6.27)"
-(x86 with
-.B CONFIG_X86_64
-and
-.B CONFIG_X86_DIRECT_GBPAGES
-enabled.)
-.RE
-.TP
-.I /proc/modules
-A text list of the modules that have been loaded by the system.
-See also
-.BR lsmod (8).
-.TP
-.I /proc/mounts
-Before Linux 2.4.19, this file was a list
-of all the filesystems currently mounted on the system.
-With the introduction of per-process mount namespaces in Linux 2.4.19 (see
-.BR mount_namespaces (7)),
-this file became a link to
-.IR /proc/self/mounts ,
-which lists the mounts of the process's own mount namespace.
-The format of this file is documented in
-.BR fstab (5).
-.TP
-.I /proc/mtrr
-Memory Type Range Registers.
-See the Linux kernel source file
-.I Documentation/x86/mtrr.rst
-(or
-.I Documentation/x86/mtrr.txt
-.\" commit 7225e75144b9718cbbe1820d9c011c809d5773fd
-before Linux 5.2, or
-.I Documentation/mtrr.txt
-before Linux 2.6.28)
-for details.
-.TP
-.I /proc/net
-This directory contains various files and subdirectories containing
-information about the networking layer.
-The files contain ASCII structures and are,
-therefore, readable with
-.BR cat (1).
-However, the standard
-.BR netstat (8)
-suite provides much cleaner access to these files.
-.IP
-With the advent of network namespaces,
-various information relating to the network stack is virtualized (see
-.BR network_namespaces (7)).
-Thus, since Linux 2.6.25,
-.\" commit e9720acd728a46cb40daa52c99a979f7c4ff195c
-.I /proc/net
-is a symbolic link to the directory
-.IR /proc/self/net ,
-which contains the same files and directories as listed below.
-However, these files and directories now expose information
-for the network namespace of which the process is a member.
-.TP
-.I /proc/net/arp
-This holds an ASCII readable dump of the kernel ARP table used for
-address resolutions.
-It will show both dynamically learned and preprogrammed ARP entries.
-The format is:
-.IP
-.in +4n
-.EX
-IP address HW type Flags HW address Mask Device
-192.168.0.50 0x1 0x2 00:50:BF:25:68:F3 * eth0
-192.168.0.250 0x1 0xc 00:00:00:00:00:00 * eth0
-.EE
-.in
-.IP
-Here "IP address" is the IPv4 address of the machine and the "HW type"
-is the hardware type of the address from RFC\ 826.
-The flags are the internal
-flags of the ARP structure (as defined in
-.IR /usr/include/linux/if_arp.h )
-and
-the "HW address" is the data link layer mapping for that IP address if
-it is known.
-.TP
-.I /proc/net/dev
-The dev pseudo-file contains network device status information.
-This gives
-the number of received and sent packets, the number of errors and
-collisions
-and other basic statistics.
-These are used by the
-.BR ifconfig (8)
-program to report device status.
-The format is:
-.IP
-.EX
-Inter\-| Receive | Transmit
- face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
- lo: 2776770 11307 0 0 0 0 0 0 2776770 11307 0 0 0 0 0 0
- eth0: 1215645 2751 0 0 0 0 0 0 1782404 4324 0 0 0 427 0 0
- ppp0: 1622270 5552 1 0 0 0 0 0 354130 5669 0 0 0 0 0 0
- tap0: 7714 81 0 0 0 0 0 0 7714 81 0 0 0 0 0 0
-.EE
-.\" .TP
-.\" .I /proc/net/ipx
-.\" No information.
-.\" .TP
-.\" .I /proc/net/ipx_route
-.\" No information.
-.TP
-.I /proc/net/dev_mcast
-Defined in
-.IR /usr/src/linux/net/core/dev_mcast.c :
-.IP
-.in +4n
-.EX
-indx interface_name dmi_u dmi_g dmi_address
-2 eth0 1 0 01005e000001
-3 eth1 1 0 01005e000001
-4 eth2 1 0 01005e000001
-.EE
-.in
-.TP
-.I /proc/net/igmp
-Internet Group Management Protocol.
-Defined in
-.IR /usr/src/linux/net/core/igmp.c .
-.TP
-.I /proc/net/rarp
-This file uses the same format as the
-.I arp
-file and contains the current reverse mapping database used to provide
-.BR rarp (8)
-reverse address lookup services.
-If RARP is not configured into the
-kernel,
-this file will not be present.
-.TP
-.I /proc/net/raw
-Holds a dump of the RAW socket table.
-Much of the information is not of
-use
-apart from debugging.
-The "sl" value is the kernel hash slot for the
-socket,
-the "local_address" is the local address and protocol number pair.
-\&"St" is
-the internal status of the socket.
-The "tx_queue" and "rx_queue" are the
-outgoing and incoming data queue in terms of kernel memory usage.
-The "tr", "tm\->when", and "rexmits" fields are not used by RAW.
-The "uid"
-field holds the effective UID of the creator of the socket.
-.\" .TP
-.\" .I /proc/net/route
-.\" No information, but looks similar to
-.\" .BR route (8).
-.TP
-.I /proc/net/snmp
-This file holds the ASCII data needed for the IP, ICMP, TCP, and UDP
-management
-information bases for an SNMP agent.
-.TP
-.I /proc/net/tcp
-Holds a dump of the TCP socket table.
-Much of the information is not
-of use apart from debugging.
-The "sl" value is the kernel hash slot
-for the socket, the "local_address" is the local address and port number pair.
-The "rem_address" is the remote address and port number pair
-(if connected).
-\&"St" is the internal status of the socket.
-The "tx_queue" and "rx_queue" are the
-outgoing and incoming data queue in terms of kernel memory usage.
-The "tr", "tm\->when", and "rexmits" fields hold internal information of
-the kernel socket state and are useful only for debugging.
-The "uid"
-field holds the effective UID of the creator of the socket.
-.TP
-.I /proc/net/udp
-Holds a dump of the UDP socket table.
-Much of the information is not of
-use apart from debugging.
-The "sl" value is the kernel hash slot for the
-socket, the "local_address" is the local address and port number pair.
-The "rem_address" is the remote address and port number pair
-(if connected).
-"St" is the internal status of the socket.
-The "tx_queue" and "rx_queue" are the outgoing and incoming data queue
-in terms of kernel memory usage.
-The "tr", "tm\->when", and "rexmits" fields
-are not used by UDP.
-The "uid"
-field holds the effective UID of the creator of the socket.
-The format is:
-.IP
-.EX
-sl local_address rem_address st tx_queue rx_queue tr rexmits tm\->when uid
- 1: 01642C89:0201 0C642C89:03FF 01 00000000:00000001 01:000071BA 00000000 0
- 1: 00000000:0801 00000000:0000 0A 00000000:00000000 00:00000000 6F000100 0
- 1: 00000000:0201 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0
-.EE
-.TP
-.I /proc/net/unix
-Lists the UNIX domain sockets present within the system and their
-status.
-The format is:
-.IP
-.EX
-Num RefCount Protocol Flags Type St Inode Path
- 0: 00000002 00000000 00000000 0001 03 42
- 1: 00000001 00000000 00010000 0001 01 1948 /dev/printer
-.EE
-.IP
-The fields are as follows:
-.RS
-.TP 10
-.IR Num :
-the kernel table slot number.
-.TP
-.IR RefCount :
-the number of users of the socket.
-.TP
-.IR Protocol :
-currently always 0.
-.TP
-.IR Flags :
-the internal kernel flags holding the status of the socket.
-.TP
-.IR Type :
-the socket type.
-For
-.B SOCK_STREAM
-sockets, this is 0001; for
-.B SOCK_DGRAM
-sockets, it is 0002; and for
-.B SOCK_SEQPACKET
-sockets, it is 0005.
-.TP
-.IR St :
-the internal state of the socket.
-.TP
-.IR Inode :
-the inode number of the socket.
-.TP
-.IR Path :
-the bound pathname (if any) of the socket.
-Sockets in the abstract namespace are included in the list,
-and are shown with a
-.I Path
-that commences with the character '@'.
-.RE
-.TP
-.I /proc/net/netfilter/nfnetlink_queue
-This file contains information about netfilter user-space queueing, if used.
-Each line represents a queue.
-Queues that have not been subscribed to
-by user space are not shown.
-.IP
-.in +4n
-.EX
- 1 4207 0 2 65535 0 0 0 1
- (1) (2) (3)(4) (5) (6) (7) (8)
-.EE
-.in
-.IP
-The fields in each line are:
-.RS 7
-.TP 5
-(1)
-The ID of the queue.
-This matches what is specified in the
-.B \-\-queue\-num
-or
-.B \-\-queue\-balance
-options to the
-.BR iptables (8)
-NFQUEUE target.
-See
-.BR iptables\-extensions (8)
-for more information.
-.TP
-(2)
-The netlink port ID subscribed to the queue.
-.TP
-(3)
-The number of packets currently queued and waiting to be processed by
-the application.
-.TP
-(4)
-The copy mode of the queue.
-It is either 1 (metadata only) or 2
-(also copy payload data to user space).
-.TP
-(5)
-Copy range; that is, how many bytes of packet payload should be copied to
-user space at most.
-.TP
-(6)
-queue dropped.
-Number of packets that had to be dropped by the kernel because
-too many packets are already waiting for user space to send back the mandatory
-accept/drop verdicts.
-.TP
-(7)
-queue user dropped.
-Number of packets that were dropped within the netlink
-subsystem.
-Such drops usually happen when the corresponding socket buffer is
-full; that is, user space is not able to read messages fast enough.
-.TP
-(8)
-sequence number.
-Every queued packet is associated with a (32-bit)
-monotonically increasing sequence number.
-This shows the ID of the most recent packet queued.
-.RE
-.IP
-The last number exists only for compatibility reasons and is always 1.
-.TP
-.I /proc/partitions
-Contains the major and minor numbers of each partition as well as the number
-of 1024-byte blocks and the partition name.
-.TP
-.I /proc/pci
-This is a listing of all PCI devices found during kernel initialization
-and their configuration.
-.IP
-This file has been deprecated in favor of a new
-.I /proc
-interface for PCI
-.RI ( /proc/bus/pci ).
-It became optional in Linux 2.2 (available with
-.B CONFIG_PCI_OLD_PROC
-set at kernel compilation).
-It became once more nonoptionally enabled in Linux 2.4.
-Next, it was deprecated in Linux 2.6 (still available with
-.B CONFIG_PCI_LEGACY_PROC
-set), and finally removed altogether since Linux 2.6.17.
-.\" FIXME Document /proc/sched_debug (since Linux 2.6.23)
-.\" See also /proc/[pid]/sched
-.TP
-.IR /proc/profile " (since Linux 2.4)"
-This file is present only if the kernel was booted with the
-.I profile=1
-command-line option.
-It exposes kernel profiling information in a binary format for use by
-.BR readprofile (1).
-Writing (e.g., an empty string) to this file resets the profiling counters;
-on some architectures,
-writing a binary integer "profiling multiplier" of size
-.I sizeof(int)
-sets the profiling interrupt frequency.
-.TP
-.I /proc/scsi
-A directory with the
-.I scsi
-mid-level pseudo-file and various SCSI low-level
-driver directories,
-which contain a file for each SCSI host in this system, all of
-which give the status of some part of the SCSI IO subsystem.
-These files contain ASCII structures and are, therefore, readable with
-.BR cat (1).
-.IP
-You can also write to some of the files to reconfigure the subsystem or
-switch certain features on or off.
-.TP
-.I /proc/scsi/scsi
-This is a listing of all SCSI devices known to the kernel.
-The listing is similar to the one seen during bootup.
-scsi currently supports only the \fIadd\-single\-device\fP command which
-allows root to add a hotplugged device to the list of known devices.
-.IP
-The command
-.IP
-.in +4n
-.EX
-echo \[aq]scsi add\-single\-device 1 0 5 0\[aq] > /proc/scsi/scsi
-.EE
-.in
-.IP
-will cause
-host scsi1 to scan on SCSI channel 0 for a device on ID 5 LUN 0.
-If there
-is already a device known on this address or the address is invalid, an
-error will be returned.
-.TP
-.IR /proc/scsi/ drivername
-\fIdrivername\fP can currently be NCR53c7xx, aha152x, aha1542, aha1740,
-aic7xxx, buslogic, eata_dma, eata_pio, fdomain, in2000, pas16, qlogic,
-scsi_debug, seagate, t128, u15\-24f, ultrastore, or wd7000.
-These directories show up for all drivers that registered at least one
-SCSI HBA.
-Every directory contains one file per registered host.
-Every host-file is named after the number the host was assigned during
-initialization.
-.IP
-Reading these files will usually show driver and host configuration,
-statistics, and so on.
-.IP
-Writing to these files allows different things on different hosts.
-For example, with the \fIlatency\fP and \fInolatency\fP commands,
-root can switch on and off command latency measurement code in the
-eata_dma driver.
-With the \fIlockup\fP and \fIunlock\fP commands,
-root can control bus lockups simulated by the scsi_debug driver.
-.TP
-.I /proc/self
-This directory refers to the process accessing the
-.I /proc
-filesystem,
-and is identical to the
-.I /proc
-directory named by the process ID of the same process.
-.TP
-.I /proc/slabinfo
-Information about kernel caches.
-See
-.BR slabinfo (5)
-for details.
-.TP
-.I /proc/stat
-kernel/system statistics.
-Varies with architecture.
-Common
-entries include:
-.RS
-.TP
-.I cpu 10132153 290696 3084719 46828483 16683 0 25195 0 175628 0
-.TQ
-.I cpu0 1393280 32966 572056 13343292 6130 0 17875 0 23933 0
-The amount of time, measured in units of
-USER_HZ (1/100ths of a second on most architectures, use
-.I sysconf(_SC_CLK_TCK)
-to obtain the right value),
-.\" 1024 on Alpha and ia64
-that the system ("cpu" line) or the specific CPU ("cpu\fIN\fR" line)
-spent in various states:
-.RS
-.TP
-.I user
-(1) Time spent in user mode.
-.TP
-.I nice
-(2) Time spent in user mode with low priority (nice).
-.TP
-.I system
-(3) Time spent in system mode.
-.TP
-.I idle
-(4) Time spent in the idle task.
-.\" FIXME . Actually, the following info about the /proc/stat 'cpu' field
-.\" does not seem to be quite right (at least in Linux 2.6.12 or Linux 3.6):
-.\" the idle time in /proc/uptime does not quite match this value
-This value should be USER_HZ times the
-second entry in the
-.I /proc/uptime
-pseudo-file.
-.TP
-.IR iowait " (since Linux 2.5.41)"
-(5) Time waiting for I/O to complete.
-This value is not reliable, for the following reasons:
-.\" See kernel commit 9c240d757658a3ae9968dd309e674c61f07c7f48
-.RS
-.IP \[bu] 3
-The CPU will not wait for I/O to complete;
-iowait is the time that a task is waiting for I/O to complete.
-When a CPU goes into idle state for outstanding task I/O,
-another task will be scheduled on this CPU.
-.IP \[bu]
-On a multi-core CPU,
-the task waiting for I/O to complete is not running on any CPU,
-so the iowait of each CPU is difficult to calculate.
-.IP \[bu]
-The value in this field may
-.I decrease
-in certain conditions.
-.RE
-.TP
-.IR irq " (since Linux 2.6.0)"
-.\" Precisely: Linux 2.6.0-test4
-(6) Time servicing interrupts.
-.TP
-.IR softirq " (since Linux 2.6.0)"
-.\" Precisely: Linux 2.6.0-test4
-(7) Time servicing softirqs.
-.TP
-.IR steal " (since Linux 2.6.11)"
-(8) Stolen time, which is the time spent in other operating systems when
-running in a virtualized environment
-.TP
-.IR guest " (since Linux 2.6.24)"
-(9) Time spent running a virtual CPU for guest
-operating systems under the control of the Linux kernel.
-.\" See Changelog entry for 5e84cfde51cf303d368fcb48f22059f37b3872de
-.TP
-.IR guest_nice " (since Linux 2.6.33)"
-.\" commit ce0e7b28fb75cb003cfc8d0238613aaf1c55e797
-(10) Time spent running a niced guest (virtual CPU for guest
-operating systems under the control of the Linux kernel).
-.RE
-.TP
-\fIpage 5741 1808\fP
-The number of pages the system paged in and the number that were paged
-out (from disk).
-.TP
-\fIswap 1 0\fP
-The number of swap pages that have been brought in and out.
-.TP
-.\" FIXME . The following is not the full picture for the 'intr' of
-.\" /proc/stat on 2.6:
-\fIintr 1462898\fP
-This line shows counts of interrupts serviced since boot time,
-for each of the possible system interrupts.
-The first column is the total of all interrupts serviced
-including unnumbered architecture specific interrupts;
-each subsequent column is the total for that particular numbered interrupt.
-Unnumbered interrupts are not shown, only summed into the total.
-.TP
-\fIdisk_io: (2,0):(31,30,5764,1,2) (3,0):\fP...
-(major,disk_idx):(noinfo, read_io_ops, blks_read, write_io_ops, blks_written)
-.br
-(Linux 2.4 only)
-.TP
-\fIctxt 115315\fP
-The number of context switches that the system underwent.
-.TP
-\fIbtime 769041601\fP
-boot time, in seconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC).
-.TP
-\fIprocesses 86031\fP
-Number of forks since boot.
-.TP
-\fIprocs_running 6\fP
-Number of processes in runnable state.
-(Linux 2.5.45 onward.)
-.TP
-\fIprocs_blocked 2\fP
-Number of processes blocked waiting for I/O to complete.
-(Linux 2.5.45 onward.)
-.TP
-.I softirq 229245889 94 60001584 13619 5175704 2471304 28 51212741 59130143 0 51240672
-.\" commit d3d64df21d3d0de675a0d3ffa7c10514f3644b30
-This line shows the number of softirq for all CPUs.
-The first column is the total of all softirqs and
-each subsequent column is the total for particular softirq.
-(Linux 2.6.31 onward.)
-.RE
-.TP
-.I /proc/swaps
-Swap areas in use.
-See also
-.BR swapon (8).
-.TP
-.I /proc/sys
-This directory (present since Linux 1.3.57) contains a number of files
-and subdirectories corresponding to kernel variables.
-These variables can be read and in some cases modified using
-the \fI/proc\fP filesystem, and the (deprecated)
-.BR sysctl (2)
-system call.
-.IP
-String values may be terminated by either \[aq]\e0\[aq] or \[aq]\en\[aq].
-.IP
-Integer and long values may be written either in decimal or in
-hexadecimal notation (e.g., 0x3FFF).
-When writing multiple integer or long values, these may be separated
-by any of the following whitespace characters:
-\[aq]\ \[aq], \[aq]\et\[aq], or \[aq]\en\[aq].
-Using other separators leads to the error
-.BR EINVAL .
-.TP
-.IR /proc/sys/abi " (since Linux 2.4.10)"
-This directory may contain files with application binary information.
-.\" On some systems, it is not present.
-See the Linux kernel source file
-.I Documentation/sysctl/abi.rst
-(or
-.I Documentation/sysctl/abi.txt
-before Linux 5.3)
-for more information.
-.TP
-.I /proc/sys/debug
-This directory may be empty.
-.TP
-.I /proc/sys/dev
-This directory contains device-specific information (e.g.,
-.IR dev/cdrom/info ).
-On
-some systems, it may be empty.
-.TP
-.I /proc/sys/fs
-This directory contains the files and subdirectories for kernel variables
-related to filesystems.
-.TP
-.IR /proc/sys/fs/aio\-max\-nr " and " /proc/sys/fs/aio\-nr " (since Linux 2.6.4)"
-.I aio\-nr
-is the running total of the number of events specified by
-.BR io_setup (2)
-calls for all currently active AIO contexts.
-If
-.I aio\-nr
-reaches
-.IR aio\-max\-nr ,
-then
-.BR io_setup (2)
-will fail with the error
-.BR EAGAIN .
-Raising
-.I aio\-max\-nr
-does not result in the preallocation or resizing
-of any kernel data structures.
-.TP
-.I /proc/sys/fs/binfmt_misc
-Documentation for files in this directory can be found
-in the Linux kernel source in the file
-.I Documentation/admin\-guide/binfmt\-misc.rst
-(or in
-.I Documentation/binfmt_misc.txt
-on older kernels).
-.TP
-.IR /proc/sys/fs/dentry\-state " (since Linux 2.2)"
-This file contains information about the status of the
-directory cache (dcache).
-The file contains six numbers,
-.IR nr_dentry ,
-.IR nr_unused ,
-.I age_limit
-(age in seconds),
-.I want_pages
-(pages requested by system) and two dummy values.
-.RS
-.IP \[bu] 3
-.I nr_dentry
-is the number of allocated dentries (dcache entries).
-This field is unused in Linux 2.2.
-.IP \[bu]
-.I nr_unused
-is the number of unused dentries.
-.IP \[bu]
-.I age_limit
-.\" looks like this is unused in Linux 2.2 to Linux 2.6
-is the age in seconds after which dcache entries
-can be reclaimed when memory is short.
-.IP \[bu]
-.I want_pages
-.\" looks like this is unused in Linux 2.2 to Linux 2.6
-is nonzero when the kernel has called shrink_dcache_pages() and the
-dcache isn't pruned yet.
-.RE
-.TP
-.I /proc/sys/fs/dir\-notify\-enable
-This file can be used to disable or enable the
-.I dnotify
-interface described in
-.BR fcntl (2)
-on a system-wide basis.
-A value of 0 in this file disables the interface,
-and a value of 1 enables it.
-.TP
-.I /proc/sys/fs/dquot\-max
-This file shows the maximum number of cached disk quota entries.
-On some (2.4) systems, it is not present.
-If the number of free cached disk quota entries is very low and
-you have some awesome number of simultaneous system users,
-you might want to raise the limit.
-.TP
-.I /proc/sys/fs/dquot\-nr
-This file shows the number of allocated disk quota
-entries and the number of free disk quota entries.
-.TP
-.IR /proc/sys/fs/epoll " (since Linux 2.6.28)"
-This directory contains the file
-.IR max_user_watches ,
-which can be used to limit the amount of kernel memory consumed by the
-.I epoll
-interface.
-For further details, see
-.BR epoll (7).
-.TP
-.I /proc/sys/fs/file\-max
-This file defines
-a system-wide limit on the number of open files for all processes.
-System calls that fail when encountering this limit fail with the error
-.BR ENFILE .
-(See also
-.BR setrlimit (2),
-which can be used by a process to set the per-process limit,
-.BR RLIMIT_NOFILE ,
-on the number of files it may open.)
-If you get lots
-of error messages in the kernel log about running out of file handles
-(open file descriptions)
-(look for "VFS: file\-max limit <number> reached"),
-try increasing this value:
-.IP
-.in +4n
-.EX
-echo 100000 > /proc/sys/fs/file\-max
-.EE
-.in
-.IP
-Privileged processes
-.RB ( CAP_SYS_ADMIN )
-can override the
-.I file\-max
-limit.
-.TP
-.I /proc/sys/fs/file\-nr
-This (read-only) file contains three numbers:
-the number of allocated file handles
-(i.e., the number of open file descriptions; see
-.BR open (2));
-the number of free file handles;
-and the maximum number of file handles (i.e., the same value as
-.IR /proc/sys/fs/file\-max ).
-If the number of allocated file handles is close to the
-maximum, you should consider increasing the maximum.
-Before Linux 2.6,
-the kernel allocated file handles dynamically,
-but it didn't free them again.
-Instead the free file handles were kept in a list for reallocation;
-the "free file handles" value indicates the size of that list.
-A large number of free file handles indicates that there was
-a past peak in the usage of open file handles.
-Since Linux 2.6, the kernel does deallocate freed file handles,
-and the "free file handles" value is always zero.
-.TP
-.IR /proc/sys/fs/inode\-max " (only present until Linux 2.2)"
-This file contains the maximum number of in-memory inodes.
-This value should be 3\[en]4 times larger
-than the value in
-.IR file\-max ,
-since \fIstdin\fP, \fIstdout\fP
-and network sockets also need an inode to handle them.
-When you regularly run out of inodes, you need to increase this value.
-.IP
-Starting with Linux 2.4,
-there is no longer a static limit on the number of inodes,
-and this file is removed.
-.TP
-.I /proc/sys/fs/inode\-nr
-This file contains the first two values from
-.IR inode\-state .
-.TP
-.I /proc/sys/fs/inode\-state
-This file
-contains seven numbers:
-.IR nr_inodes ,
-.IR nr_free_inodes ,
-.IR preshrink ,
-and four dummy values (always zero).
-.IP
-.I nr_inodes
-is the number of inodes the system has allocated.
-.\" This can be slightly more than
-.\" .I inode\-max
-.\" because Linux allocates them one page full at a time.
-.I nr_free_inodes
-represents the number of free inodes.
-.IP
-.I preshrink
-is nonzero when the
-.I nr_inodes
->
-.I inode\-max
-and the system needs to prune the inode list instead of allocating more;
-since Linux 2.4, this field is a dummy value (always zero).
-.TP
-.IR /proc/sys/fs/inotify " (since Linux 2.6.13)"
-This directory contains files
-.IR max_queued_events ", " max_user_instances ", and " max_user_watches ,
-that can be used to limit the amount of kernel memory consumed by the
-.I inotify
-interface.
-For further details, see
-.BR inotify (7).
-.TP
-.I /proc/sys/fs/lease\-break\-time
-This file specifies the grace period that the kernel grants to a process
-holding a file lease
-.RB ( fcntl (2))
-after it has sent a signal to that process notifying it
-that another process is waiting to open the file.
-If the lease holder does not remove or downgrade the lease within
-this grace period, the kernel forcibly breaks the lease.
-.TP
-.I /proc/sys/fs/leases\-enable
-This file can be used to enable or disable file leases
-.RB ( fcntl (2))
-on a system-wide basis.
-If this file contains the value 0, leases are disabled.
-A nonzero value enables leases.
-.TP
-.IR /proc/sys/fs/mount\-max " (since Linux 4.9)"
-.\" commit d29216842a85c7970c536108e093963f02714498
-The value in this file specifies the maximum number of mounts that may exist
-in a mount namespace.
-The default value in this file is 100,000.
-.TP
-.IR /proc/sys/fs/mqueue " (since Linux 2.6.6)"
-This directory contains files
-.IR msg_max ", " msgsize_max ", and " queues_max ,
-controlling the resources used by POSIX message queues.
-See
-.BR mq_overview (7)
-for details.
-.TP
-.IR /proc/sys/fs/nr_open " (since Linux 2.6.25)"
-.\" commit 9cfe015aa424b3c003baba3841a60dd9b5ad319b
-This file imposes a ceiling on the value to which the
-.B RLIMIT_NOFILE
-resource limit can be raised (see
-.BR getrlimit (2)).
-This ceiling is enforced for both unprivileged and privileged process.
-The default value in this file is 1048576.
-(Before Linux 2.6.25, the ceiling for
-.B RLIMIT_NOFILE
-was hard-coded to the same value.)
-.TP
-.IR /proc/sys/fs/overflowgid " and " /proc/sys/fs/overflowuid
-These files
-allow you to change the value of the fixed UID and GID.
-The default is 65534.
-Some filesystems support only 16-bit UIDs and GIDs, although in Linux
-UIDs and GIDs are 32 bits.
-When one of these filesystems is mounted
-with writes enabled, any UID or GID that would exceed 65535 is translated
-to the overflow value before being written to disk.
-.TP
-.IR /proc/sys/fs/pipe\-max\-size " (since Linux 2.6.35)"
-See
-.BR pipe (7).
-.TP
-.IR /proc/sys/fs/pipe\-user\-pages\-hard " (since Linux 4.5)"
-See
-.BR pipe (7).
-.TP
-.IR /proc/sys/fs/pipe\-user\-pages\-soft " (since Linux 4.5)"
-See
-.BR pipe (7).
-.TP
-.IR /proc/sys/fs/protected_fifos " (since Linux 4.19)"
-The value in this file is/can be set to one of the following:
-.RS
-.TP 4
-0
-Writing to FIFOs is unrestricted.
-.TP
-1
-Don't allow
-.B O_CREAT
-.BR open (2)
-on FIFOs that the caller doesn't own in world-writable sticky directories,
-unless the FIFO is owned by the owner of the directory.
-.TP
-2
-As for the value 1,
-but the restriction also applies to group-writable sticky directories.
-.RE
-.IP
-The intent of the above protections is to avoid unintentional writes to an
-attacker-controlled FIFO when a program expected to create a regular file.
-.TP
-.IR /proc/sys/fs/protected_hardlinks " (since Linux 3.6)"
-.\" commit 800179c9b8a1e796e441674776d11cd4c05d61d7
-When the value in this file is 0,
-no restrictions are placed on the creation of hard links
-(i.e., this is the historical behavior before Linux 3.6).
-When the value in this file is 1,
-a hard link can be created to a target file
-only if one of the following conditions is true:
-.RS
-.IP \[bu] 3
-The calling process has the
-.B CAP_FOWNER
-capability in its user namespace
-and the file UID has a mapping in the namespace.
-.IP \[bu]
-The filesystem UID of the process creating the link matches
-the owner (UID) of the target file
-(as described in
-.BR credentials (7),
-a process's filesystem UID is normally the same as its effective UID).
-.IP \[bu]
-All of the following conditions are true:
-.RS 4
-.IP \[bu] 3
-the target is a regular file;
-.IP \[bu]
-the target file does not have its set-user-ID mode bit enabled;
-.IP \[bu]
-the target file does not have both its set-group-ID and
-group-executable mode bits enabled; and
-.IP \[bu]
-the caller has permission to read and write the target file
-(either via the file's permissions mask or because it has
-suitable capabilities).
-.RE
-.RE
-.IP
-The default value in this file is 0.
-Setting the value to 1
-prevents a longstanding class of security issues caused by
-hard-link-based time-of-check, time-of-use races,
-most commonly seen in world-writable directories such as
-.IR /tmp .
-The common method of exploiting this flaw
-is to cross privilege boundaries when following a given hard link
-(i.e., a root process follows a hard link created by another user).
-Additionally, on systems without separated partitions,
-this stops unauthorized users from "pinning" vulnerable set-user-ID and
-set-group-ID files against being upgraded by
-the administrator, or linking to special files.
-.TP
-.IR /proc/sys/fs/protected_regular " (since Linux 4.19)"
-The value in this file is/can be set to one of the following:
-.RS
-.TP 4
-0
-Writing to regular files is unrestricted.
-.TP
-1
-Don't allow
-.B O_CREAT
-.BR open (2)
-on regular files that the caller doesn't own in
-world-writable sticky directories,
-unless the regular file is owned by the owner of the directory.
-.TP
-2
-As for the value 1,
-but the restriction also applies to group-writable sticky directories.
-.RE
-.IP
-The intent of the above protections is similar to
-.IR protected_fifos ,
-but allows an application to
-avoid writes to an attacker-controlled regular file,
-where the application expected to create one.
-.TP
-.IR /proc/sys/fs/protected_symlinks " (since Linux 3.6)"
-.\" commit 800179c9b8a1e796e441674776d11cd4c05d61d7
-When the value in this file is 0,
-no restrictions are placed on following symbolic links
-(i.e., this is the historical behavior before Linux 3.6).
-When the value in this file is 1, symbolic links are followed only
-in the following circumstances:
-.RS
-.IP \[bu] 3
-the filesystem UID of the process following the link matches
-the owner (UID) of the symbolic link
-(as described in
-.BR credentials (7),
-a process's filesystem UID is normally the same as its effective UID);
-.IP \[bu]
-the link is not in a sticky world-writable directory; or
-.IP \[bu]
-the symbolic link and its parent directory have the same owner (UID)
-.RE
-.IP
-A system call that fails to follow a symbolic link
-because of the above restrictions returns the error
-.B EACCES
-in
-.IR errno .
-.IP
-The default value in this file is 0.
-Setting the value to 1 avoids a longstanding class of security issues
-based on time-of-check, time-of-use races when accessing symbolic links.
-.TP
-.IR /proc/sys/fs/suid_dumpable " (since Linux 2.6.13)"
-.\" The following is based on text from Documentation/sysctl/kernel.txt
-The value in this file is assigned to a process's "dumpable" flag
-in the circumstances described in
-.BR prctl (2).
-In effect,
-the value in this file determines whether core dump files are
-produced for set-user-ID or otherwise protected/tainted binaries.
-The "dumpable" setting also affects the ownership of files in a process's
-.IR /proc/ pid
-directory, as described above.
-.IP
-Three different integer values can be specified:
-.RS
-.TP
-\fI0\ (default)\fP
-.\" In kernel source: SUID_DUMP_DISABLE
-This provides the traditional (pre-Linux 2.6.13) behavior.
-A core dump will not be produced for a process which has
-changed credentials (by calling
-.BR seteuid (2),
-.BR setgid (2),
-or similar, or by executing a set-user-ID or set-group-ID program)
-or whose binary does not have read permission enabled.
-.TP
-\fI1\ ("debug")\fP
-.\" In kernel source: SUID_DUMP_USER
-All processes dump core when possible.
-(Reasons why a process might nevertheless not dump core are described in
-.BR core (5).)
-The core dump is owned by the filesystem user ID of the dumping process
-and no security is applied.
-This is intended for system debugging situations only:
-this mode is insecure because it allows unprivileged users to
-examine the memory contents of privileged processes.
-.TP
-\fI2\ ("suidsafe")\fP
-.\" In kernel source: SUID_DUMP_ROOT
-Any binary which normally would not be dumped (see "0" above)
-is dumped readable by root only.
-This allows the user to remove the core dump file but not to read it.
-For security reasons core dumps in this mode will not overwrite one
-another or other files.
-This mode is appropriate when administrators are
-attempting to debug problems in a normal environment.
-.IP
-Additionally, since Linux 3.6,
-.\" 9520628e8ceb69fa9a4aee6b57f22675d9e1b709
-.I /proc/sys/kernel/core_pattern
-must either be an absolute pathname
-or a pipe command, as detailed in
-.BR core (5).
-Warnings will be written to the kernel log if
-.I core_pattern
-does not follow these rules, and no core dump will be produced.
-.\" 54b501992dd2a839e94e76aa392c392b55080ce8
-.RE
-.IP
-For details of the effect of a process's "dumpable" setting
-on ptrace access mode checking, see
-.BR ptrace (2).
-.TP
-.I /proc/sys/fs/super\-max
-This file
-controls the maximum number of superblocks, and
-thus the maximum number of mounted filesystems the kernel
-can have.
-You need increase only
-.I super\-max
-if you need to mount more filesystems than the current value in
-.I super\-max
-allows you to.
-.TP
-.I /proc/sys/fs/super\-nr
-This file
-contains the number of filesystems currently mounted.
-.TP
-.I /proc/sys/kernel
-This directory contains files controlling a range of kernel parameters,
-as described below.
-.TP
-.I /proc/sys/kernel/acct
-This file
-contains three numbers:
-.IR highwater ,
-.IR lowwater ,
-and
-.IR frequency .
-If BSD-style process accounting is enabled, these values control
-its behavior.
-If free space on filesystem where the log lives goes below
-.I lowwater
-percent, accounting suspends.
-If free space gets above
-.I highwater
-percent, accounting resumes.
-.I frequency
-determines
-how often the kernel checks the amount of free space (value is in
-seconds).
-Default values are 4, 2, and 30.
-That is, suspend accounting if 2% or less space is free; resume it
-if 4% or more space is free; consider information about amount of free space
-valid for 30 seconds.
-.TP
-.IR /proc/sys/kernel/auto_msgmni " (Linux 2.6.27 to Linux 3.18)"
-.\" commit 9eefe520c814f6f62c5d36a2ddcd3fb99dfdb30e (introduces feature)
-.\" commit 0050ee059f7fc86b1df2527aaa14ed5dc72f9973 (rendered redundant)
-From Linux 2.6.27 to Linux 3.18,
-this file was used to control recomputing of the value in
-.I /proc/sys/kernel/msgmni
-upon the addition or removal of memory or upon IPC namespace creation/removal.
-Echoing "1" into this file enabled
-.I msgmni
-automatic recomputing (and triggered a recomputation of
-.I msgmni
-based on the current amount of available memory and number of IPC namespaces).
-Echoing "0" disabled automatic recomputing.
-(Automatic recomputing was also disabled if a value was explicitly assigned to
-.IR /proc/sys/kernel/msgmni .)
-The default value in
-.I auto_msgmni
-was 1.
-.IP
-Since Linux 3.19, the content of this file has no effect (because
-.I msgmni
-.\" FIXME Must document the 3.19 'msgmni' changes.
-defaults to near the maximum value possible),
-and reads from this file always return the value "0".
-.TP
-.IR /proc/sys/kernel/cap_last_cap " (since Linux 3.2)"
-See
-.BR capabilities (7).
-.TP
-.IR /proc/sys/kernel/cap\-bound " (from Linux 2.2 to Linux 2.6.24)"
-This file holds the value of the kernel
-.I "capability bounding set"
-(expressed as a signed decimal number).
-This set is ANDed against the capabilities permitted to a process
-during
-.BR execve (2).
-Starting with Linux 2.6.25,
-the system-wide capability bounding set disappeared,
-and was replaced by a per-thread bounding set; see
-.BR capabilities (7).
-.TP
-.I /proc/sys/kernel/core_pattern
-See
-.BR core (5).
-.TP
-.I /proc/sys/kernel/core_pipe_limit
-See
-.BR core (5).
-.TP
-.I /proc/sys/kernel/core_uses_pid
-See
-.BR core (5).
-.TP
-.I /proc/sys/kernel/ctrl\-alt\-del
-This file
-controls the handling of Ctrl-Alt-Del from the keyboard.
-When the value in this file is 0, Ctrl-Alt-Del is trapped and
-sent to the
-.BR init (1)
-program to handle a graceful restart.
-When the value is greater than zero, Linux's reaction to a Vulcan
-Nerve Pinch (tm) will be an immediate reboot, without even
-syncing its dirty buffers.
-Note: when a program (like dosemu) has the keyboard in "raw"
-mode, the Ctrl-Alt-Del is intercepted by the program before it
-ever reaches the kernel tty layer, and it's up to the program
-to decide what to do with it.
-.TP
-.IR /proc/sys/kernel/dmesg_restrict " (since Linux 2.6.37)"
-The value in this file determines who can see kernel syslog contents.
-A value of 0 in this file imposes no restrictions.
-If the value is 1, only privileged users can read the kernel syslog.
-(See
-.BR syslog (2)
-for more details.)
-Since Linux 3.4,
-.\" commit 620f6e8e855d6d447688a5f67a4e176944a084e8
-only users with the
-.B CAP_SYS_ADMIN
-capability may change the value in this file.
-.TP
-.IR /proc/sys/kernel/domainname " and " /proc/sys/kernel/hostname
-can be used to set the NIS/YP domainname and the
-hostname of your box in exactly the same way as the commands
-.BR domainname (1)
-and
-.BR hostname (1),
-that is:
-.IP
-.in +4n
-.EX
-.RB "#" " echo \[aq]darkstar\[aq] > /proc/sys/kernel/hostname"
-.RB "#" " echo \[aq]mydomain\[aq] > /proc/sys/kernel/domainname"
-.EE
-.in
-.IP
-has the same effect as
-.IP
-.in +4n
-.EX
-.RB "#" " hostname \[aq]darkstar\[aq]"
-.RB "#" " domainname \[aq]mydomain\[aq]"
-.EE
-.in
-.IP
-Note, however, that the classic darkstar.frop.org has the
-hostname "darkstar" and DNS (Internet Domain Name Server)
-domainname "frop.org", not to be confused with the NIS (Network
-Information Service) or YP (Yellow Pages) domainname.
-These two
-domain names are in general different.
-For a detailed discussion
-see the
-.BR hostname (1)
-man page.
-.TP
-.I /proc/sys/kernel/hotplug
-This file
-contains the pathname for the hotplug policy agent.
-The default value in this file is
-.IR /sbin/hotplug .
-.TP
-.\" Removed in commit 87f504e5c78b910b0c1d6ffb89bc95e492322c84 (tglx/history.git)
-.IR /proc/sys/kernel/htab\-reclaim " (before Linux 2.4.9.2)"
-(PowerPC only) If this file is set to a nonzero value,
-the PowerPC htab
-.\" removed in commit 1b483a6a7b2998e9c98ad985d7494b9b725bd228, before Linux 2.6.28
-(see kernel file
-.IR Documentation/powerpc/ppc_htab.txt )
-is pruned
-each time the system hits the idle loop.
-.TP
-.I /proc/sys/kernel/keys/*
-This directory contains various files that define parameters and limits
-for the key-management facility.
-These files are described in
-.BR keyrings (7).
-.TP
-.IR /proc/sys/kernel/kptr_restrict " (since Linux 2.6.38)"
-.\" 455cd5ab305c90ffc422dd2e0fb634730942b257
-The value in this file determines whether kernel addresses are exposed via
-.I /proc
-files and other interfaces.
-A value of 0 in this file imposes no restrictions.
-If the value is 1, kernel pointers printed using the
-.I %pK
-format specifier will be replaced with zeros unless the user has the
-.B CAP_SYSLOG
-capability.
-If the value is 2, kernel pointers printed using the
-.I %pK
-format specifier will be replaced with zeros regardless
-of the user's capabilities.
-The initial default value for this file was 1,
-but the default was changed
-.\" commit 411f05f123cbd7f8aa1edcae86970755a6e2a9d9
-to 0 in Linux 2.6.39.
-Since Linux 3.4,
-.\" commit 620f6e8e855d6d447688a5f67a4e176944a084e8
-only users with the
-.B CAP_SYS_ADMIN
-capability can change the value in this file.
-.TP
-.I /proc/sys/kernel/l2cr
-(PowerPC only) This file
-contains a flag that controls the L2 cache of G3 processor
-boards.
-If 0, the cache is disabled.
-Enabled if nonzero.
-.TP
-.I /proc/sys/kernel/modprobe
-This file contains the pathname for the kernel module loader.
-The default value is
-.IR /sbin/modprobe .
-The file is present only if the kernel is built with the
-.B CONFIG_MODULES
-.RB ( CONFIG_KMOD
-in Linux 2.6.26 and earlier)
-option enabled.
-It is described by the Linux kernel source file
-.I Documentation/kmod.txt
-(present only in Linux 2.4 and earlier).
-.TP
-.IR /proc/sys/kernel/modules_disabled " (since Linux 2.6.31)"
-.\" 3d43321b7015387cfebbe26436d0e9d299162ea1
-.\" From Documentation/sysctl/kernel.txt
-A toggle value indicating if modules are allowed to be loaded
-in an otherwise modular kernel.
-This toggle defaults to off (0), but can be set true (1).
-Once true, modules can be neither loaded nor unloaded,
-and the toggle cannot be set back to false.
-The file is present only if the kernel is built with the
-.B CONFIG_MODULES
-option enabled.
-.TP
-.IR /proc/sys/kernel/msgmax " (since Linux 2.2)"
-This file defines
-a system-wide limit specifying the maximum number of bytes in
-a single message written on a System V message queue.
-.TP
-.IR /proc/sys/kernel/msgmni " (since Linux 2.4)"
-This file defines the system-wide limit on the number of
-message queue identifiers.
-See also
-.IR /proc/sys/kernel/auto_msgmni .
-.TP
-.IR /proc/sys/kernel/msgmnb " (since Linux 2.2)"
-This file defines a system-wide parameter used to initialize the
-.I msg_qbytes
-setting for subsequently created message queues.
-The
-.I msg_qbytes
-setting specifies the maximum number of bytes that may be written to the
-message queue.
-.TP
-.IR /proc/sys/kernel/ngroups_max " (since Linux 2.6.4)"
-This is a read-only file that displays the upper limit on the
-number of a process's group memberships.
-.TP
-.IR /proc/sys/kernel/ns_last_pid " (since Linux 3.3)"
-See
-.BR pid_namespaces (7).
-.TP
-.IR /proc/sys/kernel/ostype " and " /proc/sys/kernel/osrelease
-These files
-give substrings of
-.IR /proc/version .
-.TP
-.IR /proc/sys/kernel/overflowgid " and " /proc/sys/kernel/overflowuid
-These files duplicate the files
-.I /proc/sys/fs/overflowgid
-and
-.IR /proc/sys/fs/overflowuid .
-.TP
-.I /proc/sys/kernel/panic
-This file gives read/write access to the kernel variable
-.IR panic_timeout .
-If this is zero, the kernel will loop on a panic; if nonzero,
-it indicates that the kernel should autoreboot after this number
-of seconds.
-When you use the
-software watchdog device driver, the recommended setting is 60.
-.TP
-.IR /proc/sys/kernel/panic_on_oops " (since Linux 2.5.68)"
-This file controls the kernel's behavior when an oops
-or BUG is encountered.
-If this file contains 0, then the system
-tries to continue operation.
-If it contains 1, then the system
-delays a few seconds (to give klogd time to record the oops output)
-and then panics.
-If the
-.I /proc/sys/kernel/panic
-file is also nonzero, then the machine will be rebooted.
-.TP
-.IR /proc/sys/kernel/pid_max " (since Linux 2.5.34)"
-This file specifies the value at which PIDs wrap around
-(i.e., the value in this file is one greater than the maximum PID).
-PIDs greater than this value are not allocated;
-thus, the value in this file also acts as a system-wide limit
-on the total number of processes and threads.
-The default value for this file, 32768,
-results in the same range of PIDs as on earlier kernels.
-On 32-bit platforms, 32768 is the maximum value for
-.IR pid_max .
-On 64-bit systems,
-.I pid_max
-can be set to any value up to 2\[ha]22
-.RB ( PID_MAX_LIMIT ,
-approximately 4 million).
-.\" Prior to Linux 2.6.10, pid_max could also be raised above 32768 on 32-bit
-.\" platforms, but this broke /proc/[pid]
-.\" See http://marc.theaimsgroup.com/?l=linux-kernel&m=109513010926152&w=2
-.TP
-.IR /proc/sys/kernel/powersave\-nap " (PowerPC only)"
-This file contains a flag.
-If set, Linux-PPC will use the "nap" mode of
-powersaving,
-otherwise the "doze" mode will be used.
-.TP
-.I /proc/sys/kernel/printk
-See
-.BR syslog (2).
-.TP
-.IR /proc/sys/kernel/pty " (since Linux 2.6.4)"
-This directory contains two files relating to the number of UNIX 98
-pseudoterminals (see
-.BR pts (4))
-on the system.
-.TP
-.I /proc/sys/kernel/pty/max
-This file defines the maximum number of pseudoterminals.
-.\" FIXME Document /proc/sys/kernel/pty/reserve
-.\" New in Linux 3.3
-.\" commit e9aba5158a80098447ff207a452a3418ae7ee386
-.TP
-.I /proc/sys/kernel/pty/nr
-This read-only file
-indicates how many pseudoterminals are currently in use.
-.TP
-.I /proc/sys/kernel/random
-This directory
-contains various parameters controlling the operation of the file
-.IR /dev/random .
-See
-.BR random (4)
-for further information.
-.TP
-.IR /proc/sys/kernel/random/uuid " (since Linux 2.4)"
-Each read from this read-only file returns a randomly generated 128-bit UUID,
-as a string in the standard UUID format.
-.TP
-.IR /proc/sys/kernel/randomize_va_space " (since Linux 2.6.12)"
-.\" Some further details can be found in Documentation/sysctl/kernel.txt
-Select the address space layout randomization (ASLR) policy for the system
-(on architectures that support ASLR).
-Three values are supported for this file:
-.RS
-.TP
-.B 0
-Turn ASLR off.
-This is the default for architectures that don't support ASLR,
-and when the kernel is booted with the
-.I norandmaps
-parameter.
-.TP
-.B 1
-Make the addresses of
-.BR mmap (2)
-allocations, the stack, and the VDSO page randomized.
-Among other things, this means that shared libraries will be
-loaded at randomized addresses.
-The text segment of PIE-linked binaries will also be loaded
-at a randomized address.
-This value is the default if the kernel was configured with
-.BR CONFIG_COMPAT_BRK .
-.TP
-.B 2
-(Since Linux 2.6.25)
-.\" commit c1d171a002942ea2d93b4fbd0c9583c56fce0772
-Also support heap randomization.
-This value is the default if the kernel was not configured with
-.BR CONFIG_COMPAT_BRK .
-.RE
-.TP
-.I /proc/sys/kernel/real\-root\-dev
-This file is documented in the Linux kernel source file
-.I Documentation/admin\-guide/initrd.rst
-.\" commit 9d85025b0418163fae079c9ba8f8445212de8568
-(or
-.I Documentation/initrd.txt
-before Linux 4.10).
-.TP
-.IR /proc/sys/kernel/reboot\-cmd " (Sparc only)"
-This file seems to be a way to give an argument to the SPARC
-ROM/Flash boot loader.
-Maybe to tell it what to do after
-rebooting?
-.TP
-.I /proc/sys/kernel/rtsig\-max
-(Up to and including Linux 2.6.7; see
-.BR setrlimit (2))
-This file can be used to tune the maximum number
-of POSIX real-time (queued) signals that can be outstanding
-in the system.
-.TP
-.I /proc/sys/kernel/rtsig\-nr
-(Up to and including Linux 2.6.7.)
-This file shows the number of POSIX real-time signals currently queued.
-.TP
-.IR /proc/ pid /sched_autogroup_enabled " (since Linux 2.6.38)"
-.\" commit 5091faa449ee0b7d73bc296a93bca9540fc51d0a
-See
-.BR sched (7).
-.TP
-.IR /proc/sys/kernel/sched_child_runs_first " (since Linux 2.6.23)"
-If this file contains the value zero, then, after a
-.BR fork (2),
-the parent is first scheduled on the CPU.
-If the file contains a nonzero value,
-then the child is scheduled first on the CPU.
-(Of course, on a multiprocessor system,
-the parent and the child might both immediately be scheduled on a CPU.)
-.TP
-.IR /proc/sys/kernel/sched_rr_timeslice_ms " (since Linux 3.9)"
-See
-.BR sched_rr_get_interval (2).
-.TP
-.IR /proc/sys/kernel/sched_rt_period_us " (since Linux 2.6.25)"
-See
-.BR sched (7).
-.TP
-.IR /proc/sys/kernel/sched_rt_runtime_us " (since Linux 2.6.25)"
-See
-.BR sched (7).
-.TP
-.IR /proc/sys/kernel/seccomp " (since Linux 4.14)"
-.\" commit 8e5f1ad116df6b0de65eac458d5e7c318d1c05af
-This directory provides additional seccomp information and
-configuration.
-See
-.BR seccomp (2)
-for further details.
-.TP
-.IR /proc/sys/kernel/sem " (since Linux 2.4)"
-This file contains 4 numbers defining limits for System V IPC semaphores.
-These fields are, in order:
-.RS
-.TP
-SEMMSL
-The maximum semaphores per semaphore set.
-.TP
-SEMMNS
-A system-wide limit on the number of semaphores in all semaphore sets.
-.TP
-SEMOPM
-The maximum number of operations that may be specified in a
-.BR semop (2)
-call.
-.TP
-SEMMNI
-A system-wide limit on the maximum number of semaphore identifiers.
-.RE
-.TP
-.I /proc/sys/kernel/sg\-big\-buff
-This file
-shows the size of the generic SCSI device (sg) buffer.
-You can't tune it just yet, but you could change it at
-compile time by editing
-.I include/scsi/sg.h
-and changing
-the value of
-.BR SG_BIG_BUFF .
-However, there shouldn't be any reason to change this value.
-.TP
-.IR /proc/sys/kernel/shm_rmid_forced " (since Linux 3.1)"
-.\" commit b34a6b1da371ed8af1221459a18c67970f7e3d53
-.\" See also Documentation/sysctl/kernel.txt
-If this file is set to 1, all System V shared memory segments will
-be marked for destruction as soon as the number of attached processes
-falls to zero;
-in other words, it is no longer possible to create shared memory segments
-that exist independently of any attached process.
-.IP
-The effect is as though a
-.BR shmctl (2)
-.B IPC_RMID
-is performed on all existing segments as well as all segments
-created in the future (until this file is reset to 0).
-Note that existing segments that are attached to no process will be
-immediately destroyed when this file is set to 1.
-Setting this option will also destroy segments that were created,
-but never attached,
-upon termination of the process that created the segment with
-.BR shmget (2).
-.IP
-Setting this file to 1 provides a way of ensuring that
-all System V shared memory segments are counted against the
-resource usage and resource limits (see the description of
-.B RLIMIT_AS
-in
-.BR getrlimit (2))
-of at least one process.
-.IP
-Because setting this file to 1 produces behavior that is nonstandard
-and could also break existing applications,
-the default value in this file is 0.
-Set this file to 1 only if you have a good understanding
-of the semantics of the applications using
-System V shared memory on your system.
-.TP
-.IR /proc/sys/kernel/shmall " (since Linux 2.2)"
-This file
-contains the system-wide limit on the total number of pages of
-System V shared memory.
-.TP
-.IR /proc/sys/kernel/shmmax " (since Linux 2.2)"
-This file
-can be used to query and set the run-time limit
-on the maximum (System V IPC) shared memory segment size that can be
-created.
-Shared memory segments up to 1 GB are now supported in the
-kernel.
-This value defaults to
-.BR SHMMAX .
-.TP
-.IR /proc/sys/kernel/shmmni " (since Linux 2.4)"
-This file
-specifies the system-wide maximum number of System V shared memory
-segments that can be created.
-.TP
-.IR /proc/sys/kernel/sysctl_writes_strict " (since Linux 3.16)"
-.\" commit f88083005ab319abba5d0b2e4e997558245493c8
-.\" commit 2ca9bb456ada8bcbdc8f77f8fc78207653bbaa92
-.\" commit f4aacea2f5d1a5f7e3154e967d70cf3f711bcd61
-.\" commit 24fe831c17ab8149413874f2fd4e5c8a41fcd294
-The value in this file determines how the file offset affects
-the behavior of updating entries in files under
-.IR /proc/sys .
-The file has three possible values:
-.RS
-.TP 4
-\-1
-This provides legacy handling, with no printk warnings.
-Each
-.BR write (2)
-must fully contain the value to be written,
-and multiple writes on the same file descriptor
-will overwrite the entire value, regardless of the file position.
-.TP
-0
-(default) This provides the same behavior as for \-1,
-but printk warnings are written for processes that
-perform writes when the file offset is not 0.
-.TP
-1
-Respect the file offset when writing strings into
-.I /proc/sys
-files.
-Multiple writes will
-.I append
-to the value buffer.
-Anything written beyond the maximum length
-of the value buffer will be ignored.
-Writes to numeric
-.I /proc/sys
-entries must always be at file offset 0 and the value must be
-fully contained in the buffer provided to
-.BR write (2).
-.\" FIXME .
-.\" With /proc/sys/kernel/sysctl_writes_strict==1, writes at an
-.\" offset other than 0 do not generate an error. Instead, the
-.\" write() succeeds, but the file is left unmodified.
-.\" This is surprising. The behavior may change in the future.
-.\" See thread.gmane.org/gmane.linux.man/9197
-.\" From: Michael Kerrisk (man-pages <mtk.manpages@...>
-.\" Subject: sysctl_writes_strict documentation + an oddity?
-.\" Newsgroups: gmane.linux.man, gmane.linux.kernel
-.\" Date: 2015-05-09 08:54:11 GMT
-.RE
-.TP
-.I /proc/sys/kernel/sysrq
-This file controls the functions allowed to be invoked by the SysRq key.
-By default,
-the file contains 1 meaning that every possible SysRq request is allowed
-(in older kernel versions, SysRq was disabled by default,
-and you were required to specifically enable it at run-time,
-but this is not the case any more).
-Possible values in this file are:
-.RS
-.TP 5
-0
-Disable sysrq completely
-.TP
-1
-Enable all functions of sysrq
-.TP
-> 1
-Bit mask of allowed sysrq functions, as follows:
-.PD 0
-.RS
-.TP 5
-\ \ 2
-Enable control of console logging level
-.TP
-\ \ 4
-Enable control of keyboard (SAK, unraw)
-.TP
-\ \ 8
-Enable debugging dumps of processes etc.
-.TP
-\ 16
-Enable sync command
-.TP
-\ 32
-Enable remount read-only
-.TP
-\ 64
-Enable signaling of processes (term, kill, oom-kill)
-.TP
-128
-Allow reboot/poweroff
-.TP
-256
-Allow nicing of all real-time tasks
-.RE
-.PD
-.RE
-.IP
-This file is present only if the
-.B CONFIG_MAGIC_SYSRQ
-kernel configuration option is enabled.
-For further details see the Linux kernel source file
-.I Documentation/admin\-guide/sysrq.rst
-.\" commit 9d85025b0418163fae079c9ba8f8445212de8568
-(or
-.I Documentation/sysrq.txt
-before Linux 4.10).
-.TP
-.I /proc/sys/kernel/version
-This file contains a string such as:
-.IP
-.in +4n
-.EX
-#5 Wed Feb 25 21:49:24 MET 1998
-.EE
-.in
-.IP
-The "#5" means that
-this is the fifth kernel built from this source base and the
-date following it indicates the time the kernel was built.
-.TP
-.IR /proc/sys/kernel/threads\-max " (since Linux 2.3.11)"
-.\" The following is based on Documentation/sysctl/kernel.txt
-This file specifies the system-wide limit on the number of
-threads (tasks) that can be created on the system.
-.IP
-Since Linux 4.1,
-.\" commit 230633d109e35b0a24277498e773edeb79b4a331
-the value that can be written to
-.I threads\-max
-is bounded.
-The minimum value that can be written is 20.
-The maximum value that can be written is given by the
-constant
-.B FUTEX_TID_MASK
-(0x3fffffff).
-If a value outside of this range is written to
-.IR threads\-max ,
-the error
-.B EINVAL
-occurs.
-.IP
-The value written is checked against the available RAM pages.
-If the thread structures would occupy too much (more than 1/8th)
-of the available RAM pages,
-.I threads\-max
-is reduced accordingly.
-.TP
-.IR /proc/sys/kernel/yama/ptrace_scope " (since Linux 3.5)"
-See
-.BR ptrace (2).
-.TP
-.IR /proc/sys/kernel/zero\-paged " (PowerPC only)"
-This file
-contains a flag.
-When enabled (nonzero), Linux-PPC will pre-zero pages in
-the idle loop, possibly speeding up get_free_pages.
-.TP
-.I /proc/sys/net
-This directory contains networking stuff.
-Explanations for some of the files under this directory can be found in
-.BR tcp (7)
-and
-.BR ip (7).
-.TP
-.I /proc/sys/net/core/bpf_jit_enable
-See
-.BR bpf (2).
-.TP
-.I /proc/sys/net/core/somaxconn
-This file defines a ceiling value for the
-.I backlog
-argument of
-.BR listen (2);
-see the
-.BR listen (2)
-manual page for details.
-.TP
-.I /proc/sys/proc
-This directory may be empty.
-.TP
-.I /proc/sys/sunrpc
-This directory supports Sun remote procedure call for network filesystem
-(NFS).
-On some systems, it is not present.
-.TP
-.IR /proc/sys/user " (since Linux 4.9)"
-See
-.BR namespaces (7).
-.TP
-.I /proc/sys/vm
-This directory contains files for memory management tuning, buffer, and
-cache management.
-.TP
-.IR /proc/sys/vm/admin_reserve_kbytes " (since Linux 3.10)"
-.\" commit 4eeab4f5580d11bffedc697684b91b0bca0d5009
-This file defines the amount of free memory (in KiB) on the system that
-should be reserved for users with the capability
-.BR CAP_SYS_ADMIN .
-.IP
-The default value in this file is the minimum of [3% of free pages, 8MiB]
-expressed as KiB.
-The default is intended to provide enough for the superuser
-to log in and kill a process, if necessary,
-under the default overcommit 'guess' mode (i.e., 0 in
-.IR /proc/sys/vm/overcommit_memory ).
-.IP
-Systems running in "overcommit never" mode (i.e., 2 in
-.IR /proc/sys/vm/overcommit_memory )
-should increase the value in this file to account
-for the full virtual memory size of the programs used to recover (e.g.,
-.BR login (1)
-.BR ssh (1),
-and
-.BR top (1))
-Otherwise, the superuser may not be able to log in to recover the system.
-For example, on x86-64 a suitable value is 131072 (128MiB reserved).
-.IP
-Changing the value in this file takes effect whenever
-an application requests memory.
-.TP
-.IR /proc/sys/vm/compact_memory " (since Linux 2.6.35)"
-When 1 is written to this file, all zones are compacted such that free
-memory is available in contiguous blocks where possible.
-The effect of this action can be seen by examining
-.IR /proc/buddyinfo .
-.IP
-Present only if the kernel was configured with
-.BR CONFIG_COMPACTION .
-.TP
-.IR /proc/sys/vm/drop_caches " (since Linux 2.6.16)"
-Writing to this file causes the kernel to drop clean caches, dentries, and
-inodes from memory, causing that memory to become free.
-This can be useful for memory management testing and
-performing reproducible filesystem benchmarks.
-Because writing to this file causes the benefits of caching to be lost,
-it can degrade overall system performance.
-.IP
-To free pagecache, use:
-.IP
-.in +4n
-.EX
-echo 1 > /proc/sys/vm/drop_caches
-.EE
-.in
-.IP
-To free dentries and inodes, use:
-.IP
-.in +4n
-.EX
-echo 2 > /proc/sys/vm/drop_caches
-.EE
-.in
-.IP
-To free pagecache, dentries, and inodes, use:
-.IP
-.in +4n
-.EX
-echo 3 > /proc/sys/vm/drop_caches
-.EE
-.in
-.IP
-Because writing to this file is a nondestructive operation and dirty objects
-are not freeable, the
-user should run
-.BR sync (1)
-first.
-.TP
-.IR /proc/sys/vm/sysctl_hugetlb_shm_group " (since Linux 2.6.7)"
-This writable file contains a group ID that is allowed
-to allocate memory using huge pages.
-If a process has a filesystem group ID or any supplementary group ID that
-matches this group ID,
-then it can make huge-page allocations without holding the
-.B CAP_IPC_LOCK
-capability; see
-.BR memfd_create (2),
-.BR mmap (2),
-and
-.BR shmget (2).
-.TP
-.IR /proc/sys/vm/legacy_va_layout " (since Linux 2.6.9)"
-.\" The following is from Documentation/filesystems/proc.txt
-If nonzero, this disables the new 32-bit memory-mapping layout;
-the kernel will use the legacy (2.4) layout for all processes.
-.TP
-.IR /proc/sys/vm/memory_failure_early_kill " (since Linux 2.6.32)"
-.\" The following is based on the text in Documentation/sysctl/vm.txt
-Control how to kill processes when an uncorrected memory error
-(typically a 2-bit error in a memory module)
-that cannot be handled by the kernel
-is detected in the background by hardware.
-In some cases (like the page still having a valid copy on disk),
-the kernel will handle the failure
-transparently without affecting any applications.
-But if there is no other up-to-date copy of the data,
-it will kill processes to prevent any data corruptions from propagating.
-.IP
-The file has one of the following values:
-.RS
-.TP
-.B 1
-Kill all processes that have the corrupted-and-not-reloadable page mapped
-as soon as the corruption is detected.
-Note that this is not supported for a few types of pages,
-such as kernel internally
-allocated data or the swap cache, but works for the majority of user pages.
-.TP
-.B 0
-Unmap the corrupted page from all processes and kill a process
-only if it tries to access the page.
-.RE
-.IP
-The kill is performed using a
-.B SIGBUS
-signal with
-.I si_code
-set to
-.BR BUS_MCEERR_AO .
-Processes can handle this if they want to; see
-.BR sigaction (2)
-for more details.
-.IP
-This feature is active only on architectures/platforms with advanced machine
-check handling and depends on the hardware capabilities.
-.IP
-Applications can override the
-.I memory_failure_early_kill
-setting individually with the
-.BR prctl (2)
-.B PR_MCE_KILL
-operation.
-.IP
-Present only if the kernel was configured with
-.BR CONFIG_MEMORY_FAILURE .
-.TP
-.IR /proc/sys/vm/memory_failure_recovery " (since Linux 2.6.32)"
-.\" The following is based on the text in Documentation/sysctl/vm.txt
-Enable memory failure recovery (when supported by the platform).
-.RS
-.TP
-.B 1
-Attempt recovery.
-.TP
-.B 0
-Always panic on a memory failure.
-.RE
-.IP
-Present only if the kernel was configured with
-.BR CONFIG_MEMORY_FAILURE .
-.TP
-.IR /proc/sys/vm/oom_dump_tasks " (since Linux 2.6.25)"
-.\" The following is from Documentation/sysctl/vm.txt
-Enables a system-wide task dump (excluding kernel threads) to be
-produced when the kernel performs an OOM-killing.
-The dump includes the following information
-for each task (thread, process):
-thread ID, real user ID, thread group ID (process ID),
-virtual memory size, resident set size,
-the CPU that the task is scheduled on,
-oom_adj score (see the description of
-.IR /proc/ pid /oom_adj ),
-and command name.
-This is helpful to determine why the OOM-killer was invoked
-and to identify the rogue task that caused it.
-.IP
-If this contains the value zero, this information is suppressed.
-On very large systems with thousands of tasks,
-it may not be feasible to dump the memory state information for each one.
-Such systems should not be forced to incur a performance penalty in
-OOM situations when the information may not be desired.
-.IP
-If this is set to nonzero, this information is shown whenever the
-OOM-killer actually kills a memory-hogging task.
-.IP
-The default value is 0.
-.TP
-.IR /proc/sys/vm/oom_kill_allocating_task " (since Linux 2.6.24)"
-.\" The following is from Documentation/sysctl/vm.txt
-This enables or disables killing the OOM-triggering task in
-out-of-memory situations.
-.IP
-If this is set to zero, the OOM-killer will scan through the entire
-tasklist and select a task based on heuristics to kill.
-This normally selects a rogue memory-hogging task that
-frees up a large amount of memory when killed.
-.IP
-If this is set to nonzero, the OOM-killer simply kills the task that
-triggered the out-of-memory condition.
-This avoids a possibly expensive tasklist scan.
-.IP
-If
-.I /proc/sys/vm/panic_on_oom
-is nonzero, it takes precedence over whatever value is used in
-.IR /proc/sys/vm/oom_kill_allocating_task .
-.IP
-The default value is 0.
-.TP
-.IR /proc/sys/vm/overcommit_kbytes " (since Linux 3.14)"
-.\" commit 49f0ce5f92321cdcf741e35f385669a421013cb7
-This writable file provides an alternative to
-.I /proc/sys/vm/overcommit_ratio
-for controlling the
-.I CommitLimit
-when
-.I /proc/sys/vm/overcommit_memory
-has the value 2.
-It allows the amount of memory overcommitting to be specified as
-an absolute value (in kB),
-rather than as a percentage, as is done with
-.IR overcommit_ratio .
-This allows for finer-grained control of
-.I CommitLimit
-on systems with extremely large memory sizes.
-.IP
-Only one of
-.I overcommit_kbytes
-or
-.I overcommit_ratio
-can have an effect:
-if
-.I overcommit_kbytes
-has a nonzero value, then it is used to calculate
-.IR CommitLimit ,
-otherwise
-.I overcommit_ratio
-is used.
-Writing a value to either of these files causes the
-value in the other file to be set to zero.
-.TP
-.I /proc/sys/vm/overcommit_memory
-This file contains the kernel virtual memory accounting mode.
-Values are:
-.RS
-.IP
-0: heuristic overcommit (this is the default)
-.br
-1: always overcommit, never check
-.br
-2: always check, never overcommit
-.RE
-.IP
-In mode 0, calls of
-.BR mmap (2)
-with
-.B MAP_NORESERVE
-are not checked, and the default check is very weak,
-leading to the risk of getting a process "OOM-killed".
-.IP
-In mode 1, the kernel pretends there is always enough memory,
-until memory actually runs out.
-One use case for this mode is scientific computing applications
-that employ large sparse arrays.
-Before Linux 2.6.0, any nonzero value implies mode 1.
-.IP
-In mode 2 (available since Linux 2.6), the total virtual address space
-that can be allocated
-.RI ( CommitLimit
-in
-.IR /proc/meminfo )
-is calculated as
-.IP
-.in +4n
-.EX
-CommitLimit = (total_RAM \- total_huge_TLB) *
- overcommit_ratio / 100 + total_swap
-.EE
-.in
-.IP
-where:
-.RS
-.IP \[bu] 3
-.I total_RAM
-is the total amount of RAM on the system;
-.IP \[bu]
-.I total_huge_TLB
-is the amount of memory set aside for huge pages;
-.IP \[bu]
-.I overcommit_ratio
-is the value in
-.IR /proc/sys/vm/overcommit_ratio ;
-and
-.IP \[bu]
-.I total_swap
-is the amount of swap space.
-.RE
-.IP
-For example, on a system with 16 GB of physical RAM, 16 GB
-of swap, no space dedicated to huge pages, and an
-.I overcommit_ratio
-of 50, this formula yields a
-.I CommitLimit
-of 24 GB.
-.IP
-Since Linux 3.14, if the value in
-.I /proc/sys/vm/overcommit_kbytes
-is nonzero, then
-.I CommitLimit
-is instead calculated as:
-.IP
-.in +4n
-.EX
-CommitLimit = overcommit_kbytes + total_swap
-.EE
-.in
-.IP
-See also the description of
-.I /proc/sys/vm/admin_reserve_kbytes
-and
-.IR /proc/sys/vm/user_reserve_kbytes .
-.TP
-.IR /proc/sys/vm/overcommit_ratio " (since Linux 2.6.0)"
-This writable file defines a percentage by which memory
-can be overcommitted.
-The default value in the file is 50.
-See the description of
-.IR /proc/sys/vm/overcommit_memory .
-.TP
-.IR /proc/sys/vm/panic_on_oom " (since Linux 2.6.18)"
-.\" The following is adapted from Documentation/sysctl/vm.txt
-This enables or disables a kernel panic in
-an out-of-memory situation.
-.IP
-If this file is set to the value 0,
-the kernel's OOM-killer will kill some rogue process.
-Usually, the OOM-killer is able to kill a rogue process and the
-system will survive.
-.IP
-If this file is set to the value 1,
-then the kernel normally panics when out-of-memory happens.
-However, if a process limits allocations to certain nodes
-using memory policies
-.RB ( mbind (2)
-.BR MPOL_BIND )
-or cpusets
-.RB ( cpuset (7))
-and those nodes reach memory exhaustion status,
-one process may be killed by the OOM-killer.
-No panic occurs in this case:
-because other nodes' memory may be free,
-this means the system as a whole may not have reached
-an out-of-memory situation yet.
-.IP
-If this file is set to the value 2,
-the kernel always panics when an out-of-memory condition occurs.
-.IP
-The default value is 0.
-1 and 2 are for failover of clustering.
-Select either according to your policy of failover.
-.TP
-.I /proc/sys/vm/swappiness
-.\" The following is from Documentation/sysctl/vm.txt
-The value in this file controls how aggressively the kernel will swap
-memory pages.
-Higher values increase aggressiveness, lower values
-decrease aggressiveness.
-The default value is 60.
-.TP
-.IR /proc/sys/vm/user_reserve_kbytes " (since Linux 3.10)"
-.\" commit c9b1d0981fcce3d9976d7b7a56e4e0503bc610dd
-Specifies an amount of memory (in KiB) to reserve for user processes.
-This is intended to prevent a user from starting a single memory hogging
-process, such that they cannot recover (kill the hog).
-The value in this file has an effect only when
-.I /proc/sys/vm/overcommit_memory
-is set to 2 ("overcommit never" mode).
-In this case, the system reserves an amount of memory that is the minimum
-of [3% of current process size,
-.IR user_reserve_kbytes ].
-.IP
-The default value in this file is the minimum of [3% of free pages, 128MiB]
-expressed as KiB.
-.IP
-If the value in this file is set to zero,
-then a user will be allowed to allocate all free memory with a single process
-(minus the amount reserved by
-.IR /proc/sys/vm/admin_reserve_kbytes ).
-Any subsequent attempts to execute a command will result in
-"fork: Cannot allocate memory".
-.IP
-Changing the value in this file takes effect whenever
-an application requests memory.
-.TP
-.IR /proc/sys/vm/unprivileged_userfaultfd " (since Linux 5.2)"
-.\" cefdca0a86be517bc390fc4541e3674b8e7803b0
-This (writable) file exposes a flag that controls whether
-unprivileged processes are allowed to employ
-.BR userfaultfd (2).
-If this file has the value 1, then unprivileged processes may use
-.BR userfaultfd (2).
-If this file has the value 0, then only processes that have the
-.B CAP_SYS_PTRACE
-capability may employ
-.BR userfaultfd (2).
-The default value in this file is 1.
-.TP
-.IR /proc/sysrq\-trigger " (since Linux 2.4.21)"
-Writing a character to this file triggers the same SysRq function as
-typing ALT-SysRq-<character> (see the description of
-.IR /proc/sys/kernel/sysrq ).
-This file is normally writable only by
-.IR root .
-For further details see the Linux kernel source file
-.I Documentation/admin\-guide/sysrq.rst
-.\" commit 9d85025b0418163fae079c9ba8f8445212de8568
-(or
-.I Documentation/sysrq.txt
-before Linux 4.10).
-.TP
-.I /proc/sysvipc
-Subdirectory containing the pseudo-files
-.IR msg ", " sem " and " shm "."
-These files list the System V Interprocess Communication (IPC) objects
-(respectively: message queues, semaphores, and shared memory)
-that currently exist on the system,
-providing similar information to that available via
-.BR ipcs (1).
-These files have headers and are formatted (one IPC object per line)
-for easy understanding.
-.BR sysvipc (7)
-provides further background on the information shown by these files.
-.TP
-.IR /proc/thread\-self " (since Linux 3.17)"
-.\" commit 0097875bd41528922fb3bb5f348c53f17e00e2fd
-This directory refers to the thread accessing the
-.I /proc
-filesystem,
-and is identical to the
-.IR /proc/self/task/ tid
-directory named by the process thread ID
-.RI ( tid )
-of the same thread.
-.TP
-.IR /proc/timer_list " (since Linux 2.6.21)"
-.\" commit 289f480af87e45f7a6de6ba9b4c061c2e259fe98
-This read-only file exposes a list of all currently pending
-(high-resolution) timers,
-all clock-event sources, and their parameters in a human-readable form.
-.TP
-.IR /proc/timer_stats " (from Linux 2.6.21 until Linux 4.10)"
-.\" commit 82f67cd9fca8c8762c15ba7ed0d5747588c1e221
-.\" Date: Fri Feb 16 01:28:13 2007 -0800
-.\" Text largely derived from Documentation/timers/timer_stats.txt
-.\" removed in commit dfb4357da6ddbdf57d583ba64361c9d792b0e0b1
-.\" Date: Wed Feb 8 11:26:59 2017 -0800
-This is a debugging facility to make timer (ab)use in a Linux
-system visible to kernel and user-space developers.
-It can be used by kernel and user-space developers to verify that
-their code does not make undue use of timers.
-The goal is to avoid unnecessary wakeups,
-thereby optimizing power consumption.
-.IP
-If enabled in the kernel
-.RB ( CONFIG_TIMER_STATS ),
-but not used,
-it has almost zero run-time overhead and a relatively small
-data-structure overhead.
-Even if collection is enabled at run time, overhead is low:
-all the locking is per-CPU and lookup is hashed.
-.IP
-The
-.I /proc/timer_stats
-file is used both to control sampling facility and to read out the
-sampled information.
-.IP
-The
-.I timer_stats
-functionality is inactive on bootup.
-A sampling period can be started using the following command:
-.IP
-.in +4n
-.EX
-# echo 1 > /proc/timer_stats
-.EE
-.in
-.IP
-The following command stops a sampling period:
-.IP
-.in +4n
-.EX
-# echo 0 > /proc/timer_stats
-.EE
-.in
-.IP
-The statistics can be retrieved by:
-.IP
-.in +4n
-.EX
-$ cat /proc/timer_stats
-.EE
-.in
-.IP
-While sampling is enabled, each readout from
-.I /proc/timer_stats
-will see
-newly updated statistics.
-Once sampling is disabled, the sampled information
-is kept until a new sample period is started.
-This allows multiple readouts.
-.IP
-Sample output from
-.IR /proc/timer_stats :
-.IP
-.in +4n
-.EX
-.RB $ " cat /proc/timer_stats"
-Timer Stats Version: v0.3
-Sample period: 1.764 s
-Collection: active
- 255, 0 swapper/3 hrtimer_start_range_ns (tick_sched_timer)
- 71, 0 swapper/1 hrtimer_start_range_ns (tick_sched_timer)
- 58, 0 swapper/0 hrtimer_start_range_ns (tick_sched_timer)
- 4, 1694 gnome\-shell mod_delayed_work_on (delayed_work_timer_fn)
- 17, 7 rcu_sched rcu_gp_kthread (process_timeout)
-\&...
- 1, 4911 kworker/u16:0 mod_delayed_work_on (delayed_work_timer_fn)
- 1D, 2522 kworker/0:0 queue_delayed_work_on (delayed_work_timer_fn)
-1029 total events, 583.333 events/sec
-.EE
-.in
-.IP
-The output columns are:
-.RS
-.IP [1] 5
-a count of the number of events,
-optionally (since Linux 2.6.23) followed by the letter \[aq]D\[aq]
-.\" commit c5c061b8f9726bc2c25e19dec227933a13d1e6b7 deferrable timers
-if this is a deferrable timer;
-.IP [2]
-the PID of the process that initialized the timer;
-.IP [3]
-the name of the process that initialized the timer;
-.IP [4]
-the function where the timer was initialized; and
-(in parentheses)
-the callback function that is associated with the timer.
-.RE
-.IP
-During the Linux 4.11 development cycle,
-this file was removed because of security concerns,
-as it exposes information across namespaces.
-Furthermore, it is possible to obtain
-the same information via in-kernel tracing facilities such as ftrace.
-.TP
-.I /proc/tty
-Subdirectory containing the pseudo-files and subdirectories for
-tty drivers and line disciplines.
-.TP
-.I /proc/uptime
-This file contains two numbers (values in seconds): the uptime of the
-system (including time spent in suspend) and the amount of time spent
-in the idle process.
-.TP
-.I /proc/version
-This string identifies the kernel version that is currently running.
-It includes the contents of
-.IR /proc/sys/kernel/ostype ,
-.IR /proc/sys/kernel/osrelease ,
-and
-.IR /proc/sys/kernel/version .
-For example:
-.IP
-.in +4n
-.EX
-Linux version 1.0.9 (quinlan@phaze) #1 Sat May 14 01:51:54 EDT 1994
-.EE
-.in
-.\" FIXME 2.6.13 seems to have /proc/vmcore implemented; document this
-.\" See Documentation/kdump/kdump.txt
-.\" commit 666bfddbe8b8fd4fd44617d6c55193d5ac7edb29
-.\" Needs CONFIG_VMCORE
-.\"
-.TP
-.IR /proc/vmstat " (since Linux 2.6.0)"
-This file displays various virtual memory statistics.
-Each line of this file contains a single name-value pair,
-delimited by white space.
-Some lines are present only if the kernel was configured with
-suitable options.
-(In some cases, the options required for particular files have changed
-across kernel versions, so they are not listed here.
-Details can be found by consulting the kernel source code.)
-The following fields may be present:
-.\" FIXME We need explanations for each of the following fields...
-.RS
-.TP
-.IR nr_free_pages " (since Linux 2.6.31)"
-.\" commit d23ad42324cc4378132e51f2fc5c9ba6cbe75182
-.TP
-.IR nr_alloc_batch " (since Linux 3.12)"
-.\" commit 81c0a2bb515fd4daae8cab64352877480792b515
-.TP
-.IR nr_inactive_anon " (since Linux 2.6.28)"
-.\" commit 4f98a2fee8acdb4ac84545df98cccecfd130f8db
-.TP
-.IR nr_active_anon " (since Linux 2.6.28)"
-.\" commit 4f98a2fee8acdb4ac84545df98cccecfd130f8db
-.TP
-.IR nr_inactive_file " (since Linux 2.6.28)"
-.\" commit 4f98a2fee8acdb4ac84545df98cccecfd130f8db
-.TP
-.IR nr_active_file " (since Linux 2.6.28)"
-.\" commit 4f98a2fee8acdb4ac84545df98cccecfd130f8db
-.TP
-.IR nr_unevictable " (since Linux 2.6.28)"
-.\" commit 7b854121eb3e5ba0241882ff939e2c485228c9c5
-.TP
-.IR nr_mlock " (since Linux 2.6.28)"
-.\" commit 5344b7e648980cc2ca613ec03a56a8222ff48820
-.TP
-.IR nr_anon_pages " (since Linux 2.6.18)"
-.\" commit f3dbd34460ff54962d3e3244b6bcb7f5295356e6
-.TP
-.IR nr_mapped " (since Linux 2.6.0)"
-.TP
-.IR nr_file_pages " (since Linux 2.6.18)"
-.\" commit 347ce434d57da80fd5809c0c836f206a50999c26
-.TP
-.IR nr_dirty " (since Linux 2.6.0)"
-.TP
-.IR nr_writeback " (since Linux 2.6.0)"
-.TP
-.IR nr_slab_reclaimable " (since Linux 2.6.19)"
-.\" commit 972d1a7b140569084439a81265a0f15b74e924e0
-.\" Linux 2.6.0 had nr_slab
-.TP
-.IR nr_slab_unreclaimable " (since Linux 2.6.19)"
-.\" commit 972d1a7b140569084439a81265a0f15b74e924e0
-.TP
-.IR nr_page_table_pages " (since Linux 2.6.0)"
-.TP
-.IR nr_kernel_stack " (since Linux 2.6.32)"
-.\" commit c6a7f5728a1db45d30df55a01adc130b4ab0327c
-Amount of memory allocated to kernel stacks.
-.TP
-.IR nr_unstable " (since Linux 2.6.0)"
-.TP
-.IR nr_bounce " (since Linux 2.6.12)"
-.\" commit edfbe2b0038723e5699ab22695ccd62b5542a5c1
-.TP
-.IR nr_vmscan_write " (since Linux 2.6.19)"
-.\" commit e129b5c23c2b471d47f1c5d2b8b193fc2034af43
-.TP
-.IR nr_vmscan_immediate_reclaim " (since Linux 3.2)"
-.\" commit 49ea7eb65e7c5060807fb9312b1ad4c3eab82e2c
-.TP
-.IR nr_writeback_temp " (since Linux 2.6.26)"
-.\" commit fc3ba692a4d19019387c5acaea63131f9eab05dd
-.TP
-.IR nr_isolated_anon " (since Linux 2.6.32)"
-.\" commit a731286de62294b63d8ceb3c5914ac52cc17e690
-.TP
-.IR nr_isolated_file " (since Linux 2.6.32)"
-.\" commit a731286de62294b63d8ceb3c5914ac52cc17e690
-.TP
-.IR nr_shmem " (since Linux 2.6.32)"
-.\" commit 4b02108ac1b3354a22b0d83c684797692efdc395
-Pages used by shmem and
-.BR tmpfs (5).
-.TP
-.IR nr_dirtied " (since Linux 2.6.37)"
-.\" commit ea941f0e2a8c02ae876cd73deb4e1557248f258c
-.TP
-.IR nr_written " (since Linux 2.6.37)"
-.\" commit ea941f0e2a8c02ae876cd73deb4e1557248f258c
-.TP
-.IR nr_pages_scanned " (since Linux 3.17)"
-.\" commit 0d5d823ab4e608ec7b52ac4410de4cb74bbe0edd
-.TP
-.IR numa_hit " (since Linux 2.6.18)"
-.\" commit ca889e6c45e0b112cb2ca9d35afc66297519b5d5
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_NUMA .
-.TP
-.IR numa_miss " (since Linux 2.6.18)"
-.\" commit ca889e6c45e0b112cb2ca9d35afc66297519b5d5
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_NUMA .
-.TP
-.IR numa_foreign " (since Linux 2.6.18)"
-.\" commit ca889e6c45e0b112cb2ca9d35afc66297519b5d5
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_NUMA .
-.TP
-.IR numa_interleave " (since Linux 2.6.18)"
-.\" commit ca889e6c45e0b112cb2ca9d35afc66297519b5d5
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_NUMA .
-.TP
-.IR numa_local " (since Linux 2.6.18)"
-.\" commit ca889e6c45e0b112cb2ca9d35afc66297519b5d5
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_NUMA .
-.TP
-.IR numa_other " (since Linux 2.6.18)"
-.\" commit ca889e6c45e0b112cb2ca9d35afc66297519b5d5
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_NUMA .
-.TP
-.IR workingset_refault " (since Linux 3.15)"
-.\" commit a528910e12ec7ee203095eb1711468a66b9b60b0
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR workingset_activate " (since Linux 3.15)"
-.\" commit a528910e12ec7ee203095eb1711468a66b9b60b0
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR workingset_nodereclaim " (since Linux 3.15)"
-.\" commit 449dd6984d0e47643c04c807f609dd56d48d5bcc
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR nr_anon_transparent_hugepages " (since Linux 2.6.38)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR nr_free_cma " (since Linux 3.7)"
-.\" commit d1ce749a0db12202b711d1aba1d29e823034648d
-Number of free CMA (Contiguous Memory Allocator) pages.
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR nr_dirty_threshold " (since Linux 2.6.37)"
-.\" commit 79da826aee6a10902ef411bc65864bd02102fa83
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR nr_dirty_background_threshold " (since Linux 2.6.37)"
-.\" commit 79da826aee6a10902ef411bc65864bd02102fa83
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgpgin " (since Linux 2.6.0)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgpgout " (since Linux 2.6.0)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pswpin " (since Linux 2.6.0)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pswpout " (since Linux 2.6.0)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgalloc_dma " (since Linux 2.6.5)"
-.\" Linux 2.6.0 had pgalloc
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgalloc_dma32 " (since Linux 2.6.16)"
-.\" commit 9328b8faae922e52073785ed6c1eaa8565648a0e
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgalloc_normal " (since Linux 2.6.5)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgalloc_high " (since Linux 2.6.5)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_HIGHMEM .
-.TP
-.IR pgalloc_movable " (since Linux 2.6.23)"
-.\" commit 2a1e274acf0b1c192face19a4be7c12d4503eaaf
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgfree " (since Linux 2.6.0)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgactivate " (since Linux 2.6.0)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgdeactivate " (since Linux 2.6.0)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgfault " (since Linux 2.6.0)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgmajfault " (since Linux 2.6.0)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgrefill_dma " (since Linux 2.6.5)"
-.\" Linux 2.6.0 had pgrefill
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgrefill_dma32 " (since Linux 2.6.16)"
-.\" commit 9328b8faae922e52073785ed6c1eaa8565648a0e
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgrefill_normal " (since Linux 2.6.5)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgrefill_high " (since Linux 2.6.5)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_HIGHMEM .
-.TP
-.IR pgrefill_movable " (since Linux 2.6.23)"
-.\" commit 2a1e274acf0b1c192face19a4be7c12d4503eaaf
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.\" Formerly there were
-.\" pgsteal_high
-.\" pgsteal_normal
-.\" pgsteal_dma32
-.\" pgsteal_dma
-.\" These were split out into pgsteal_kswapd* and pgsteal_direct*
-.\" in commit 904249aa68010c8e223263c922fcbb840a3f42e4
-.TP
-.IR pgsteal_kswapd_dma " (since Linux 3.4)"
-.\" commit 904249aa68010c8e223263c922fcbb840a3f42e4
-.\" Linux 2.6.0 had pgsteal
-.\" Present only if the kernel was configured with
-.\" .\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgsteal_kswapd_dma32 " (since Linux 3.4)"
-.\" commit 904249aa68010c8e223263c922fcbb840a3f42e4
-.\" commit 9328b8faae922e52073785ed6c1eaa8565648a0e
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgsteal_kswapd_normal " (since Linux 3.4)"
-.\" commit 904249aa68010c8e223263c922fcbb840a3f42e4
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgsteal_kswapd_high " (since Linux 3.4)"
-.\" commit 904249aa68010c8e223263c922fcbb840a3f42e4
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_HIGHMEM .
-.TP
-.IR pgsteal_kswapd_movable " (since Linux 3.4)"
-.\" commit 904249aa68010c8e223263c922fcbb840a3f42e4
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.I pgsteal_direct_dma
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgsteal_direct_dma32 " (since Linux 3.4)"
-.\" commit 904249aa68010c8e223263c922fcbb840a3f42e4
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgsteal_direct_normal " (since Linux 3.4)"
-.\" commit 904249aa68010c8e223263c922fcbb840a3f42e4
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgsteal_direct_high " (since Linux 3.4)"
-.\" commit 904249aa68010c8e223263c922fcbb840a3f42e4
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_HIGHMEM .
-.TP
-.IR pgsteal_direct_movable " (since Linux 2.6.23)"
-.\" commit 2a1e274acf0b1c192face19a4be7c12d4503eaaf
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.I pgscan_kswapd_dma
-.\" Linux 2.6.0 had pgscan
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgscan_kswapd_dma32 " (since Linux 2.6.16)"
-.\" commit 9328b8faae922e52073785ed6c1eaa8565648a0e
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgscan_kswapd_normal " (since Linux 2.6.5)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.I pgscan_kswapd_high
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_HIGHMEM .
-.TP
-.IR pgscan_kswapd_movable " (since Linux 2.6.23)"
-.\" commit 2a1e274acf0b1c192face19a4be7c12d4503eaaf
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.I pgscan_direct_dma
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgscan_direct_dma32 " (since Linux 2.6.16)"
-.\" commit 9328b8faae922e52073785ed6c1eaa8565648a0e
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.I pgscan_direct_normal
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.I pgscan_direct_high
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_HIGHMEM .
-.TP
-.IR pgscan_direct_movable " (since Linux 2.6.23)"
-.\" commit 2a1e274acf0b1c192face19a4be7c12d4503eaaf
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgscan_direct_throttle " (since Linux 3.6)"
-.\" commit 68243e76ee343d63c6cf76978588a885951e2818
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR zone_reclaim_failed " (since linux 2.6.31)"
-.\" commit 24cf72518c79cdcda486ed26074ff8151291cf65
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_NUMA .
-.TP
-.IR pginodesteal " (since linux 2.6.0)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR slabs_scanned " (since linux 2.6.5)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR kswapd_inodesteal " (since linux 2.6.0)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR kswapd_low_wmark_hit_quickly " (since Linux 2.6.33)"
-.\" commit bb3ab596832b920c703d1aea1ce76d69c0f71fb7
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR kswapd_high_wmark_hit_quickly " (since Linux 2.6.33)"
-.\" commit bb3ab596832b920c703d1aea1ce76d69c0f71fb7
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pageoutrun " (since Linux 2.6.0)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR allocstall " (since Linux 2.6.0)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR pgrotated " (since Linux 2.6.0)"
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR drop_pagecache " (since Linux 3.15)"
-.\" commit 5509a5d27b971a90b940e148ca9ca53312e4fa7a
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR drop_slab " (since Linux 3.15)"
-.\" commit 5509a5d27b971a90b940e148ca9ca53312e4fa7a
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR numa_pte_updates " (since Linux 3.8)"
-.\" commit 03c5a6e16322c997bf8f264851bfa3f532ad515f
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_NUMA_BALANCING .
-.TP
-.IR numa_huge_pte_updates " (since Linux 3.13)"
-.\" commit 72403b4a0fbdf433c1fe0127e49864658f6f6468
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_NUMA_BALANCING .
-.TP
-.IR numa_hint_faults " (since Linux 3.8)"
-.\" commit 03c5a6e16322c997bf8f264851bfa3f532ad515f
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_NUMA_BALANCING .
-.TP
-.IR numa_hint_faults_local " (since Linux 3.8)"
-.\" commit 03c5a6e16322c997bf8f264851bfa3f532ad515f
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_NUMA_BALANCING .
-.TP
-.IR numa_pages_migrated " (since Linux 3.8)"
-.\" commit 03c5a6e16322c997bf8f264851bfa3f532ad515f
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_NUMA_BALANCING
-.\" and
-.\" .BR CONFIG_NUMA_BALANCING .
-.TP
-.IR pgmigrate_success " (since Linux 3.8)"
-.\" commit 5647bc293ab15f66a7b1cda850c5e9d162a6c7c2
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_MIGRATION .
-.TP
-.IR pgmigrate_fail " (since Linux 3.8)"
-.\" commit 5647bc293ab15f66a7b1cda850c5e9d162a6c7c2
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_MIGRATION .
-.TP
-.IR compact_migrate_scanned " (since Linux 3.8)"
-.\" commit 397487db696cae0b026a474a5cd66f4e372995e6
-.\" Linux 3.8 dropped compact_blocks_moved, compact_pages_moved, and
-.\" compact_pagemigrate_failed
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_COMPACTION .
-.TP
-.IR compact_free_scanned " (since Linux 3.8)"
-.\" commit 397487db696cae0b026a474a5cd66f4e372995e6
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_COMPACTION .
-.TP
-.IR compact_isolated " (since Linux 3.8)"
-.\" commit 397487db696cae0b026a474a5cd66f4e372995e6
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_COMPACTION .
-.TP
-.IR compact_stall " (since Linux 2.6.35)"
-.\" commit 56de7263fcf3eb10c8dcdf8d59a9cec831795f3f
-See the kernel source file
-.IR Documentation/admin\-guide/mm/transhuge.rst .
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_COMPACTION .
-.TP
-.IR compact_fail " (since Linux 2.6.35)"
-.\" commit 56de7263fcf3eb10c8dcdf8d59a9cec831795f3f
-See the kernel source file
-.IR Documentation/admin\-guide/mm/transhuge.rst .
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_COMPACTION .
-.TP
-.IR compact_success " (since Linux 2.6.35)"
-.\" commit 56de7263fcf3eb10c8dcdf8d59a9cec831795f3f
-See the kernel source file
-.IR Documentation/admin\-guide/mm/transhuge.rst .
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_COMPACTION .
-.TP
-.IR htlb_buddy_alloc_success " (since Linux 2.6.26)"
-.\" commit 3b1163006332302117b1b2acf226d4014ff46525
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_HUGETLB_PAGE .
-.TP
-.IR htlb_buddy_alloc_fail " (since Linux 2.6.26)"
-.\" commit 3b1163006332302117b1b2acf226d4014ff46525
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_HUGETLB_PAGE .
-.TP
-.IR unevictable_pgs_culled " (since Linux 2.6.28)"
-.\" commit bbfd28eee9fbd73e780b19beb3dc562befbb94fa
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR unevictable_pgs_scanned " (since Linux 2.6.28)"
-.\" commit bbfd28eee9fbd73e780b19beb3dc562befbb94fa
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR unevictable_pgs_rescued " (since Linux 2.6.28)"
-.\" commit bbfd28eee9fbd73e780b19beb3dc562befbb94fa
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR unevictable_pgs_mlocked " (since Linux 2.6.28)"
-.\" commit 5344b7e648980cc2ca613ec03a56a8222ff48820
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR unevictable_pgs_munlocked " (since Linux 2.6.28)"
-.\" commit 5344b7e648980cc2ca613ec03a56a8222ff48820
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR unevictable_pgs_cleared " (since Linux 2.6.28)"
-.\" commit 5344b7e648980cc2ca613ec03a56a8222ff48820
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.TP
-.IR unevictable_pgs_stranded " (since Linux 2.6.28)"
-.\" commit 5344b7e648980cc2ca613ec03a56a8222ff48820
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS .
-.\" Linux 3.7 removed unevictable_pgs_mlockfreed
-.TP
-.IR thp_fault_alloc " (since Linux 2.6.39)"
-.\" commit 81ab4201fb7d91d6b0cd9ad5b4b16776e4bed145
-See the kernel source file
-.IR Documentation/admin\-guide/mm/transhuge.rst .
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_TRANSPARENT_HUGEPAGE .
-.TP
-.IR thp_fault_fallback " (since Linux 2.6.39)"
-.\" commit 81ab4201fb7d91d6b0cd9ad5b4b16776e4bed145
-See the kernel source file
-.IR Documentation/admin\-guide/mm/transhuge.rst .
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_TRANSPARENT_HUGEPAGE .
-.TP
-.IR thp_collapse_alloc " (since Linux 2.6.39)"
-.\" commit 81ab4201fb7d91d6b0cd9ad5b4b16776e4bed145
-See the kernel source file
-.IR Documentation/admin\-guide/mm/transhuge.rst .
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_TRANSPARENT_HUGEPAGE .
-.TP
-.IR thp_collapse_alloc_failed " (since Linux 2.6.39)"
-.\" commit 81ab4201fb7d91d6b0cd9ad5b4b16776e4bed145
-See the kernel source file
-.IR Documentation/admin\-guide/mm/transhuge.rst .
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_TRANSPARENT_HUGEPAGE .
-.TP
-.IR thp_split " (since Linux 2.6.39)"
-.\" commit 81ab4201fb7d91d6b0cd9ad5b4b16776e4bed145
-See the kernel source file
-.IR Documentation/admin\-guide/mm/transhuge.rst .
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_TRANSPARENT_HUGEPAGE .
-.TP
-.IR thp_zero_page_alloc " (since Linux 3.8)"
-.\" commit d8a8e1f0da3d29d7268b3300c96a059d63901b76
-See the kernel source file
-.IR Documentation/admin\-guide/mm/transhuge.rst .
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_TRANSPARENT_HUGEPAGE .
-.TP
-.IR thp_zero_page_alloc_failed " (since Linux 3.8)"
-.\" commit d8a8e1f0da3d29d7268b3300c96a059d63901b76
-See the kernel source file
-.IR Documentation/admin\-guide/mm/transhuge.rst .
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_TRANSPARENT_HUGEPAGE .
-.TP
-.IR balloon_inflate " (since Linux 3.18)"
-.\" commit 09316c09dde33aae14f34489d9e3d243ec0d5938
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_MEMORY_BALLOON .
-.TP
-.IR balloon_deflate " (since Linux 3.18)"
-.\" commit 09316c09dde33aae14f34489d9e3d243ec0d5938
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS
-.\" and
-.\" .BR CONFIG_MEMORY_BALLOON .
-.TP
-.IR balloon_migrate " (since Linux 3.18)"
-.\" commit 09316c09dde33aae14f34489d9e3d243ec0d5938
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_VM_EVENT_COUNTERS ,
-.\" .BR CONFIG_MEMORY_BALLOON ,
-.\" and
-.\" .BR CONFIG_BALLOON_COMPACTION .
-.TP
-.IR nr_tlb_remote_flush " (since Linux 3.12)"
-.\" commit 9824cf9753ecbe8f5b47aa9b2f218207defea211
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_DEBUG_TLBFLUSH
-.\" and
-.\" .BR CONFIG_SMP .
-.TP
-.IR nr_tlb_remote_flush_received " (since Linux 3.12)"
-.\" commit 9824cf9753ecbe8f5b47aa9b2f218207defea211
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_DEBUG_TLBFLUSH
-.\" and
-.\" .BR CONFIG_SMP .
-.TP
-.IR nr_tlb_local_flush_all " (since Linux 3.12)"
-.\" commit 9824cf9753ecbe8f5b47aa9b2f218207defea211
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_DEBUG_TLBFLUSH .
-.TP
-.IR nr_tlb_local_flush_one " (since Linux 3.12)"
-.\" commit 9824cf9753ecbe8f5b47aa9b2f218207defea211
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_DEBUG_TLBFLUSH .
-.TP
-.IR vmacache_find_calls " (since Linux 3.16)"
-.\" commit 4f115147ff802267d0aa41e361c5aa5bd933d896
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_DEBUG_VM_VMACACHE .
-.TP
-.IR vmacache_find_hits " (since Linux 3.16)"
-.\" commit 4f115147ff802267d0aa41e361c5aa5bd933d896
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_DEBUG_VM_VMACACHE .
-.TP
-.IR vmacache_full_flushes " (since Linux 3.19)"
-.\" commit f5f302e21257ebb0c074bbafc37606c26d28cc3d
-.\" Present only if the kernel was configured with
-.\" .BR CONFIG_DEBUG_VM_VMACACHE .
-.RE
-.TP
-.IR /proc/zoneinfo " (since Linux 2.6.13)"
-This file displays information about memory zones.
-This is useful for analyzing virtual memory behavior.
-.\" FIXME more should be said about /proc/zoneinfo
-.SH NOTES
-Many files contain strings (e.g., the environment and command line)
-that are in the internal format,
-with subfields terminated by null bytes (\[aq]\e0\[aq]).
-When inspecting such files, you may find that the results are more readable
-if you use a command of the following form to display them:
-.PP
-.in +4n
-.EX
-.RB "$" " cat \fIfile\fP | tr \[aq]\e000\[aq] \[aq]\en\[aq]"
-.EE
-.in
-.PP
-This manual page is incomplete, possibly inaccurate, and is the kind
-of thing that needs to be updated very often.
-.\" .SH ACKNOWLEDGEMENTS
-.\" The material on /proc/sys/fs and /proc/sys/kernel is closely based on
-.\" kernel source documentation files written by Rik van Riel.
-.SH SEE ALSO
-.BR cat (1),
-.BR dmesg (1),
-.BR find (1),
-.BR free (1),
-.BR htop (1),
-.BR init (1),
-.BR ps (1),
-.BR pstree (1),
-.BR tr (1),
-.BR uptime (1),
-.BR chroot (2),
-.BR mmap (2),
-.BR readlink (2),
-.BR syslog (2),
-.BR slabinfo (5),
-.BR sysfs (5),
-.BR hier (7),
-.BR namespaces (7),
-.BR time (7),
-.BR arp (8),
-.BR hdparm (8),
-.BR ifconfig (8),
-.BR lsmod (8),
-.BR lspci (8),
-.BR mount (8),
-.BR netstat (8),
-.BR procinfo (8),
-.BR route (8),
-.BR sysctl (8)
-.PP
-The Linux kernel source files:
-.IR Documentation/filesystems/proc.rst ,
-.IR Documentation/admin\-guide/sysctl/fs.rst ,
-.IR Documentation/admin\-guide/sysctl/kernel.rst ,
-.IR Documentation/admin\-guide/sysctl/net.rst ,
-and
-.IR Documentation/admin\-guide/sysctl/vm.rst .
diff --git a/man5/procfs.5 b/man5/procfs.5
deleted file mode 100644
index d8be74ac8..000000000
--- a/man5/procfs.5
+++ /dev/null
@@ -1 +0,0 @@
-.so man5/proc.5
diff --git a/man5/protocols.5 b/man5/protocols.5
deleted file mode 100644
index 4033ae7dc..000000000
--- a/man5/protocols.5
+++ /dev/null
@@ -1,66 +0,0 @@
-.\" Copyright (c) 1995 Martin Schulze <joey@infodrom.north.de>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 1995-10-18 Martin Schulze <joey@infodrom.north.de>
-.\" * first released
-.\" 2002-09-22 Seth W. Klein <sk@sethwklein.net>
-.\" * protocol numbers are now assigned by the IANA
-.\"
-.TH protocols 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-protocols \- protocols definition file
-.SH DESCRIPTION
-This file is a plain ASCII file, describing the various DARPA internet
-protocols that are available from the TCP/IP subsystem.
-It should be
-consulted instead of using the numbers in the ARPA include files, or,
-even worse, just guessing them.
-These numbers will occur in the
-protocol field of any IP header.
-.PP
-Keep this file untouched since changes would result in incorrect IP
-packages.
-Protocol numbers and names are specified by the IANA
-(Internet Assigned Numbers Authority).
-.\" .. by the DDN Network Information Center.
-.PP
-Each line is of the following format:
-.PP
-.RS
-.I protocol number aliases ...
-.RE
-.PP
-where the fields are delimited by spaces or tabs.
-Empty lines are ignored.
-If a line contains a hash mark (#), the hash mark and the part
-of the line following it are ignored.
-.PP
-The field descriptions are:
-.TP
-.I protocol
-the native name for the protocol.
-For example
-.IR ip ,
-.IR tcp ,
-or
-.IR udp .
-.TP
-.I number
-the official number for this protocol as it will appear within the IP
-header.
-.TP
-.I aliases
-optional aliases for the protocol.
-.PP
-This file might be distributed over a network using a network-wide
-naming service like Yellow Pages/NIS or BIND/Hesiod.
-.SH FILES
-.TP
-.I /etc/protocols
-The protocols definition file.
-.SH SEE ALSO
-.BR getprotoent (3)
-.PP
-.UR http://www.iana.org\:/assignments\:/protocol\-numbers
-.UE
diff --git a/man5/repertoiremap.5 b/man5/repertoiremap.5
deleted file mode 100644
index 927cc1204..000000000
--- a/man5/repertoiremap.5
+++ /dev/null
@@ -1,58 +0,0 @@
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH repertoiremap 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-repertoiremap \- map symbolic character names to Unicode code points
-.SH DESCRIPTION
-A repertoire map defines mappings between symbolic character names
-(mnemonics) and Unicode code points when compiling a locale with
-.BR localedef (1).
-Using a repertoire map is optional, it is needed only when symbolic
-names are used instead of now preferred Unicode code points.
-.SS Syntax
-The repertoiremap file starts with a header that may consist of the
-following keywords:
-.TP
-.I comment_char
-is followed by a character that will be used as the
-comment character for the rest of the file.
-It defaults to the number sign (#).
-.TP
-.I escape_char
-is followed by a character that should be used as the escape character
-for the rest of the file to mark characters that should be interpreted
-in a special way.
-It defaults to the backslash (\e).
-.PP
-The mapping section starts with the keyword
-.I CHARIDS
-in the first column.
-.PP
-The mapping lines have the following form:
-.TP
-.I <symbolic-name> <code-point> comment
-This defines exactly one mapping,
-.I comment
-being optional.
-.PP
-The mapping section ends with the string
-.IR "END CHARIDS" .
-.SH FILES
-.TP
-.I /usr/share/i18n/repertoiremaps
-Usual default repertoire map path.
-.SH STANDARDS
-POSIX.2.
-.SH NOTES
-Repertoire maps are deprecated in favor of Unicode code points.
-.SH EXAMPLES
-A mnemonic for the Euro sign can be defined as follows:
-.PP
-.nf
-<Eu> <U20AC> EURO SIGN
-.fi
-.SH SEE ALSO
-.BR locale (1),
-.BR localedef (1),
-.BR charmap (5),
-.BR locale (5)
diff --git a/man5/resolv.conf.5 b/man5/resolv.conf.5
deleted file mode 100644
index 5687e4c08..000000000
--- a/man5/resolv.conf.5
+++ /dev/null
@@ -1,406 +0,0 @@
-.\" Copyright (c) 1986 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" %%%LICENSE_START(PERMISSIVE_MISC)
-.\" Redistribution and use in source and binary forms are permitted
-.\" provided that the above copyright notice and this paragraph are
-.\" duplicated in all such forms and that any documentation,
-.\" advertising materials, and other materials related to such
-.\" distribution and use acknowledge that the software was developed
-.\" by the University of California, Berkeley. The name of the
-.\" University may not be used to endorse or promote products derived
-.\" from this software without specific prior written permission.
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-.\" %%%LICENSE_END
-.\"
-.\" @(#)resolver.5 5.9 (Berkeley) 12/14/89
-.\" $Id: resolver.5,v 8.6 1999/05/21 00:01:02 vixie Exp $
-.\"
-.\" Added ndots remark by Bernhard R. Link - debian bug #182886
-.\"
-.TH resolv.conf 5 (date) "Linux man-pages (unreleased)"
-.UC 4
-.SH NAME
-resolv.conf \- resolver configuration file
-.SH SYNOPSIS
-.nf
-.B /etc/resolv.conf
-.fi
-.SH DESCRIPTION
-The
-.I resolver
-is a set of routines in the C library
-that provide access to the Internet Domain Name System (DNS).
-The resolver configuration file contains information that is read
-by the resolver routines the first time they are invoked by a process.
-The file is designed to be human readable and contains a list of
-keywords with values that provide various types of resolver information.
-The configuration file is considered a trusted source of DNS information;
-see the
-.B trust-ad
-option below for details.
-.PP
-If this file does not exist, only the name server on the local machine
-will be queried, and the search list contains the local domain name
-determined from the hostname.
-.PP
-The different configuration options are:
-.TP
-\fBnameserver\fP Name server IP address
-Internet address of a name server that the resolver should query,
-either an IPv4 address (in dot notation),
-or an IPv6 address in colon (and possibly dot) notation as per RFC 2373.
-Up to
-.B MAXNS
-(currently 3, see \fI<resolv.h>\fP) name servers may be listed,
-one per keyword.
-If there are multiple servers,
-the resolver library queries them in the order listed.
-If no \fBnameserver\fP entries are present,
-the default is to use the name server on the local machine.
-(The algorithm used is to try a name server, and if the query times out,
-try the next, until out of name servers,
-then repeat trying all the name servers
-until a maximum number of retries are made.)
-.TP
-\fBsearch\fP Search list for host-name lookup.
-By default, the search list contains one entry, the local domain name.
-It is determined from the local hostname returned by
-.BR gethostname (2);
-the local domain name is taken to be everything after the first
-\[aq].\[aq].
-Finally, if the hostname does not contain a \[aq].\[aq], the
-root domain is assumed as the local domain name.
-.IP
-This may be changed by listing the desired domain search path
-following the \fIsearch\fP keyword with spaces or tabs separating
-the names.
-Resolver queries having fewer than
-.I ndots
-dots (default is 1) in them will be attempted using each component
-of the search path in turn until a match is found.
-For environments with multiple subdomains please read
-.BI "options ndots:" n
-below to avoid man-in-the-middle attacks and unnecessary
-traffic for the root-dns-servers.
-.\" When having a resolv.conv with a line
-.\" search subdomain.domain.tld domain.tld
-.\" and doing a hostlookup, for example by
-.\" ping host.anothersubdomain
-.\" it sends dns-requests for
-.\" host.anothersubdomain.
-.\" host.anothersubdomain.subdomain.domain.tld.
-.\" host.anothersubdomain.domain.tld.
-.\" thus not only causing unnecessary traffic for the root-dns-servers
-.\" but broadcasting information to the outside and making man-in-the-middle
-.\" attacks possible.
-Note that this process may be slow and will generate a lot of network
-traffic if the servers for the listed domains are not local,
-and that queries will time out if no server is available
-for one of the domains.
-.IP
-If there are multiple
-.B search
-directives, only the search list from the last instance is used.
-.IP
-In glibc 2.25 and earlier, the search list is limited to six domains
-with a total of 256 characters.
-Since glibc 2.26,
-.\" glibc commit 3f853f22c87f0b671c0366eb290919719fa56c0e
-the search list is unlimited.
-.IP
-The
-.B domain
-directive is an obsolete name for the
-.B search
-directive that handles one search list entry only.
-.TP
-\fBsortlist\fP
-This option allows addresses returned by
-.BR gethostbyname (3)
-to be sorted.
-A sortlist is specified by IP-address-netmask pairs.
-The netmask is
-optional and defaults to the natural netmask of the net.
-The IP address
-and optional network pairs are separated by slashes.
-Up to 10 pairs may
-be specified.
-Here is an example:
-.IP
-.in +4n
-sortlist 130.155.160.0/255.255.240.0 130.155.0.0
-.in
-.TP
-\fBoptions\fP
-Options allows certain internal resolver variables to be modified.
-The syntax is
-.RS
-.IP
-\fBoptions\fP \fIoption\fP \fI...\fP
-.PP
-where \fIoption\fP is one of the following:
-.TP
-\fBdebug\fP
-.\" Since glibc 2.2?
-Sets
-.B RES_DEBUG
-in
-.I _res.options
-(effective only if glibc was built with debug support; see
-.BR resolver (3)).
-.TP
-.BI ndots: n
-.\" Since glibc 2.2
-Sets a threshold for the number of dots which
-must appear in a name given to
-.BR res_query (3)
-(see
-.BR resolver (3))
-before an \fIinitial absolute query\fP will be made.
-The default for
-\fIn\fP is 1, meaning that if there are any dots in a name, the name
-will be tried first as an absolute name before any \fIsearch list\fP
-elements are appended to it.
-The value for this option is silently capped to 15.
-.TP
-.BI timeout: n
-.\" Since glibc 2.2
-Sets the amount of time the resolver will wait for a
-response from a remote name server before retrying the
-query via a different name server.
-This may
-.B not
-be the total time taken by any resolver API call and there is no
-guarantee that a single resolver API call maps to a single timeout.
-Measured in seconds,
-the default is
-.B RES_TIMEOUT
-(currently 5, see \fI<resolv.h>\fP).
-The value for this option is silently capped to 30.
-.TP
-.BI attempts: n
-Sets the number of times the resolver will send a
-query to its name servers before giving up and returning
-an error to the calling application.
-The default is
-.B RES_DFLRETRY
-(currently 2, see \fI<resolv.h>\fP).
-The value for this option is silently capped to 5.
-.TP
-.B rotate
-.\" Since glibc 2.2
-Sets
-.B RES_ROTATE
-in
-.IR _res.options ,
-which causes round-robin selection of name servers from among those listed.
-This has the effect of spreading the query load among all listed servers,
-rather than having all clients try the first listed server first every time.
-.TP
-.B no\-aaaa (since glibc 2.36)
-.\" f282cdbe7f436c75864e5640a409a10485e9abb2
-Sets
-.B RES_NOAAAA
-in
-.IR _res.options ,
-which suppresses AAAA queries made by the stub resolver,
-including AAAA lookups triggered by NSS-based interfaces such as
-.BR getaddrinfo (3).
-Only DNS lookups are affected: IPv6 data in
-.BR hosts (5)
-is still used,
-.BR getaddrinfo (3)
-with
-.B AI_PASSIVE
-will still produce IPv6 addresses,
-and configured IPv6 name servers are still used.
-To produce correct Name Error (NXDOMAIN) results,
-AAAA queries are translated to A queries.
-This option is intended preliminary for diagnostic purposes,
-to rule out that AAAA DNS queries have adverse impact.
-It is incompatible with EDNS0 usage and DNSSEC validation by applications.
-.TP
-.B no\-check\-names
-.\" since glibc 2.2
-Sets
-.B RES_NOCHECKNAME
-in
-.IR _res.options ,
-which disables the modern BIND checking of incoming hostnames and
-mail names for invalid characters such as underscore (_), non-ASCII,
-or control characters.
-.TP
-.B inet6
-.\" Since glibc 2.2
-Sets
-.B RES_USE_INET6
-in
-.IR _res.options .
-This has the effect of trying an AAAA query before an A query inside the
-.BR gethostbyname (3)
-function, and of mapping IPv4 responses in IPv6 "tunneled form"
-if no AAAA records are found but an A record set exists.
-Since glibc 2.25,
-.\" b76e065991ec01299225d9da90a627ebe6c1ac97
-this option is deprecated; applications should use
-.BR getaddrinfo (3),
-rather than
-.BR gethostbyname (3).
-.TP
-.BR ip6\-bytestring " (since glibc 2.3.4 to glibc 2.24)"
-Sets
-.B RES_USEBSTRING
-in
-.IR _res.options .
-This causes reverse IPv6 lookups to be made using the bit-label format
-described in RFC\ 2673;
-if this option is not set (which is the default), then nibble format is used.
-This option was removed in glibc 2.25,
-since it relied on a backward-incompatible
-DNS extension that was never deployed on the Internet.
-.TP
-.BR ip6\-dotint / no\-ip6\-dotint " (glibc 2.3.4 to glibc 2.24)"
-Clear/set
-.B RES_NOIP6DOTINT
-in
-.IR _res.options .
-When this option is clear
-.RB ( ip6\-dotint ),
-reverse IPv6 lookups are made in the (deprecated)
-.I ip6.int
-zone;
-when this option is set
-.RB ( no\-ip6\-dotint ),
-reverse IPv6 lookups are made in the
-.I ip6.arpa
-zone by default.
-These options are available up to glibc 2.24, where
-.B no\-ip6\-dotint
-is the default.
-Since
-.B ip6\-dotint
-support long ago ceased to be available on the Internet,
-these options were removed in glibc 2.25.
-.TP
-.BR edns0 " (since glibc 2.6)"
-Sets
-.B RES_USE_EDNS0
-in
-.IR _res.options .
-This enables support for the DNS extensions described in RFC\ 2671.
-.TP
-.BR single\-request " (since glibc 2.10)"
-Sets
-.B RES_SNGLKUP
-in
-.IR _res.options .
-By default, glibc performs IPv4 and IPv6 lookups in parallel since
-glibc 2.9.
-Some appliance DNS servers
-cannot handle these queries properly and make the requests time out.
-This option disables the behavior and makes glibc perform the IPv6
-and IPv4 requests sequentially (at the cost of some slowdown of the
-resolving process).
-.TP
-.BR single\-request\-reopen " (since glibc 2.9)"
-Sets
-.B RES_SNGLKUPREOP
-in
-.IR _res.options .
-The resolver uses the same socket for the A and AAAA requests.
-Some hardware mistakenly sends back only one reply.
-When that happens the client system will sit and wait for the second reply.
-Turning this option on changes this behavior
-so that if two requests from the same port are not handled correctly it will
-close the socket and open a new one before sending the second request.
-.TP
-.BR no\-tld\-query " (since glibc 2.14)"
-Sets
-.B RES_NOTLDQUERY
-in
-.IR _res.options .
-This option causes
-.BR res_nsearch ()
-to not attempt to resolve an unqualified name
-as if it were a top level domain (TLD).
-This option can cause problems if the site has ``localhost'' as a TLD
-rather than having localhost on one or more elements of the search list.
-This option has no effect if neither RES_DEFNAMES or RES_DNSRCH is set.
-.TP
-.BR use\-vc " (since glibc 2.14)"
-Sets
-.B RES_USEVC
-in
-.IR _res.options .
-This option forces the use of TCP for DNS resolutions.
-.\" aef16cc8a4c670036d45590877d411a97f01e0cd
-.TP
-.BR no\-reload " (since glibc 2.26)"
-Sets
-.B RES_NORELOAD
-in
-.IR _res.options .
-This option disables automatic reloading of a changed configuration file.
-.TP
-.BR trust\-ad " (since glibc 2.31)"
-.\" 446997ff1433d33452b81dfa9e626b8dccf101a4
-Sets
-.B RES_TRUSTAD
-in
-.IR _res.options .
-This option controls the AD bit behavior of the stub resolver.
-If a validating resolver sets the AD bit in a response,
-it indicates that the data in the response was verified according
-to the DNSSEC protocol.
-In order to rely on the AD bit, the local system has to
-trust both the DNSSEC-validating resolver and the network path to it,
-which is why an explicit opt-in is required.
-If the
-.B trust\-ad
-option is active, the stub resolver sets the AD bit in outgoing DNS
-queries (to enable AD bit support), and preserves the AD bit in responses.
-Without this option, the AD bit is not set in queries,
-and it is always removed from responses before they are returned to the
-application.
-This means that applications can trust the AD bit in responses if the
-.B trust\-ad
-option has been set correctly.
-.IP
-In glibc 2.30 and earlier,
-the AD is not set automatically in queries,
-and is passed through unchanged to applications in responses.
-.RE
-.PP
-The \fIsearch\fP keyword of a system's \fIresolv.conf\fP file can be
-overridden on a per-process basis by setting the environment variable
-.B LOCALDOMAIN
-to a space-separated list of search domains.
-.PP
-The \fIoptions\fP keyword of a system's \fIresolv.conf\fP file can be
-amended on a per-process basis by setting the environment variable
-.B RES_OPTIONS
-to a space-separated list of resolver options
-as explained above under \fBoptions\fP.
-.PP
-The keyword and value must appear on a single line, and the keyword
-(e.g., \fBnameserver\fP) must start the line.
-The value follows the keyword, separated by white space.
-.PP
-Lines that contain a semicolon (;) or hash character (#)
-in the first column are treated as comments.
-.SH FILES
-.IR /etc/resolv.conf ,
-.I <resolv.h>
-.SH SEE ALSO
-.BR gethostbyname (3),
-.BR resolver (3),
-.BR host.conf (5),
-.BR hosts (5),
-.BR nsswitch.conf (5),
-.BR hostname (7),
-.BR named (8)
-.PP
-Name Server Operations Guide for BIND
diff --git a/man5/resolver.5 b/man5/resolver.5
deleted file mode 100644
index 86104b96c..000000000
--- a/man5/resolver.5
+++ /dev/null
@@ -1 +0,0 @@
-.so man5/resolv.conf.5
diff --git a/man5/rpc.5 b/man5/rpc.5
deleted file mode 100644
index cecc2f607..000000000
--- a/man5/rpc.5
+++ /dev/null
@@ -1,83 +0,0 @@
-.\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
-.\"
-.\" %%%LICENSE_START(BSD_ONELINE_CDROM)
-.\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
-.\" %%%LICENSE_END
-.\"
-.\" @(#)rpc.5 2.2 88/08/03 4.0 RPCSRC; from 1.4 87/11/27 SMI;
-.TH rpc 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-rpc \- RPC program number data base
-.SH SYNOPSIS
-.nf
-.B /etc/rpc
-.fi
-.SH DESCRIPTION
-The
-.I rpc
-file contains user readable names that
-can be used in place of RPC program numbers.
-Each line has the following information:
-.PP
-.PD 0
-.IP \[bu] 3
-name of server for the RPC program
-.IP \[bu]
-RPC program number
-.IP \[bu]
-aliases
-.PD
-.PP
-Items are separated by any number of blanks and/or
-tab characters.
-A \[aq]#\[aq] indicates the beginning of a comment; characters from
-the \[aq]#\[aq] to the end of the line are not interpreted by routines
-which search the file.
-.PP
-Here is an example of the
-.I /etc/rpc
-file from the Sun RPC Source distribution.
-.PP
-.in +4n
-.EX
-#
-# rpc 88/08/01 4.0 RPCSRC; from 1.12 88/02/07 SMI
-#
-portmapper 100000 portmap sunrpc
-rstatd 100001 rstat rstat_svc rup perfmeter
-rusersd 100002 rusers
-nfs 100003 nfsprog
-ypserv 100004 ypprog
-mountd 100005 mount showmount
-ypbind 100007
-walld 100008 rwall shutdown
-yppasswdd 100009 yppasswd
-etherstatd 100010 etherstat
-rquotad 100011 rquotaprog quota rquota
-sprayd 100012 spray
-3270_mapper 100013
-rje_mapper 100014
-selection_svc 100015 selnsvc
-database_svc 100016
-rexd 100017 rex
-alis 100018
-sched 100019
-llockmgr 100020
-nlockmgr 100021
-x25.inr 100022
-statmon 100023
-status 100024
-bootparam 100026
-ypupdated 100028 ypupdate
-keyserv 100029 keyserver
-tfsd 100037
-nsed 100038
-nsemntd 100039
-.EE
-.in
-.SH FILES
-.TP
-.I /etc/rpc
-RPC program number data base
-.SH SEE ALSO
-.BR getrpcent (3)
diff --git a/man5/securetty.5 b/man5/securetty.5
deleted file mode 100644
index a275fcde6..000000000
--- a/man5/securetty.5
+++ /dev/null
@@ -1,35 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sun Jul 25 11:06:27 1993 by Rik Faith (faith@cs.unc.edu)
-.TH securetty 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-securetty \- list of terminals on which root is allowed to login
-.SH DESCRIPTION
-The file
-.I /etc/securetty
-contains the names of terminals
-(one per line, without leading
-.IR /dev/ )
-which are considered secure for the transmission of certain authentication
-tokens.
-.PP
-It is used by (some versions of)
-.BR login (1)
-to restrict the terminals
-on which root is allowed to login.
-See
-.BR login.defs (5)
-if you use the shadow suite.
-.PP
-On PAM enabled systems, it is used for the same purpose by
-.BR pam_securetty (8)
-to restrict the terminals on which empty passwords are accepted.
-.SH FILES
-.I /etc/securetty
-.SH SEE ALSO
-.BR login (1),
-.BR login.defs (5),
-.BR pam_securetty (8)
diff --git a/man5/services.5 b/man5/services.5
deleted file mode 100644
index dd0bf3872..000000000
--- a/man5/services.5
+++ /dev/null
@@ -1,199 +0,0 @@
-.\" This manpage is Copyright (C) 1996 Austin Donnelly <and1000@cam.ac.uk>,
-.\" with additional material Copyright (c) 1995 Martin Schulze
-.\" <joey@infodrom.north.de>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" This manpage was made by merging two independently written manpages,
-.\" one written by Martin Schulze (18 Oct 95), the other written by
-.\" Austin Donnelly, (9 Jan 96).
-.\"
-.\" Thu Jan 11 12:14:41 1996 Austin Donnelly <and1000@cam.ac.uk>
-.\" * Merged two services(5) manpages
-.\"
-.TH services 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-services \- Internet network services list
-.SH DESCRIPTION
-.B services
-is a plain ASCII file providing a mapping between human-friendly textual
-names for internet services, and their underlying assigned port
-numbers and protocol types.
-Every networking program should look into
-this file to get the port number (and protocol) for its service.
-The C library routines
-.BR getservent (3),
-.BR getservbyname (3),
-.BR getservbyport (3),
-.BR setservent (3),
-and
-.BR endservent (3)
-support querying this file from programs.
-.PP
-Port numbers are assigned by the IANA (Internet Assigned Numbers
-Authority), and their current policy is to assign both TCP and UDP
-protocols when assigning a port number.
-Therefore, most entries will
-have two entries, even for TCP-only services.
-.PP
-Port numbers below 1024 (so-called "low numbered" ports) can be
-bound to only by root (see
-.BR bind (2),
-.BR tcp (7),
-and
-.BR udp (7)).
-This is so clients connecting to low numbered ports can trust
-that the service running on the port is the standard implementation,
-and not a rogue service run by a user of the machine.
-Well-known port numbers specified by the IANA are normally
-located in this root-only space.
-.PP
-The presence of an entry for a service in the
-.B services
-file does not necessarily mean that the service is currently running
-on the machine.
-See
-.BR inetd.conf (5)
-for the configuration of Internet services offered.
-Note that not all
-networking services are started by
-.BR inetd (8),
-and so won't appear in
-.BR inetd.conf (5).
-In particular, news (NNTP) and mail (SMTP) servers are often
-initialized from the system boot scripts.
-.PP
-The location of the
-.B services
-file is defined by
-.B _PATH_SERVICES
-in
-.IR <netdb.h> "."
-This is usually set to
-.IR /etc/services "."
-.PP
-Each line describes one service, and is of the form:
-.IP
-\f2service-name\ \ \ port\f3/\f2protocol\ \ \ \f1[\f2aliases ...\f1]
-.TP
-where:
-.TP
-.I service-name
-is the friendly name the service is known by and looked up under.
-It is case sensitive.
-Often, the client program is named after the
-.IR service-name "."
-.TP
-.I port
-is the port number (in decimal) to use for this service.
-.TP
-.I protocol
-is the type of protocol to be used.
-This field should match an entry
-in the
-.BR protocols (5)
-file.
-Typical values include
-.B tcp
-and
-.BR udp .
-.TP
-.I aliases
-is an optional space or tab separated list of other names for this
-service.
-Again, the names are case
-sensitive.
-.PP
-Either spaces or tabs may be used to separate the fields.
-.PP
-Comments are started by the hash sign (#) and continue until the end
-of the line.
-Blank lines are skipped.
-.PP
-The
-.I service-name
-should begin in the first column of the file, since leading spaces are
-not stripped.
-.I service-names
-can be any printable characters excluding space and tab.
-However, a conservative choice of characters should be used to minimize
-compatibility problems.
-For example, a\-z, 0\-9, and hyphen (\-) would seem a
-sensible choice.
-.PP
-Lines not matching this format should not be present in the
-file.
-(Currently, they are silently skipped by
-.BR getservent (3),
-.BR getservbyname (3),
-and
-.BR getservbyport (3).
-However, this behavior should not be relied on.)
-.PP
-.\" The following is not true as at glibc 2.8 (a line with a comma is
-.\" ignored by getservent()); it's not clear if/when it was ever true.
-.\" As a backward compatibility feature, the slash (/) between the
-.\" .I port
-.\" number and
-.\" .I protocol
-.\" name can in fact be either a slash or a comma (,).
-.\" Use of the comma in
-.\" modern installations is deprecated.
-.\"
-This file might be distributed over a network using a network-wide
-naming service like Yellow Pages/NIS or BIND/Hesiod.
-.PP
-A sample
-.B services
-file might look like this:
-.PP
-.in +4n
-.EX
-netstat 15/tcp
-qotd 17/tcp quote
-msp 18/tcp # message send protocol
-msp 18/udp # message send protocol
-chargen 19/tcp ttytst source
-chargen 19/udp ttytst source
-ftp 21/tcp
-# 22 \- unassigned
-telnet 23/tcp
-.EE
-.in
-.SH FILES
-.TP
-.I /etc/services
-The Internet network services list
-.TP
-.I <netdb.h>
-Definition of
-.B _PATH_SERVICES
-.\" .SH BUGS
-.\" It's not clear when/if the following was ever true;
-.\" it isn't true for glibc 2.8:
-.\" There is a maximum of 35 aliases, due to the way the
-.\" .BR getservent (3)
-.\" code is written.
-.\"
-.\" It's not clear when/if the following was ever true;
-.\" it isn't true for glibc 2.8:
-.\" Lines longer than
-.\" .B BUFSIZ
-.\" (currently 1024) characters will be ignored by
-.\" .BR getservent (3),
-.\" .BR getservbyname (3),
-.\" and
-.\" .BR getservbyport (3).
-.\" However, this will also cause the next line to be mis-parsed.
-.SH SEE ALSO
-.BR listen (2),
-.BR endservent (3),
-.BR getservbyname (3),
-.BR getservbyport (3),
-.BR getservent (3),
-.BR setservent (3),
-.BR inetd.conf (5),
-.BR protocols (5),
-.BR inetd (8)
-.PP
-Assigned Numbers RFC, most recently RFC\ 1700, (AKA STD0002).
diff --git a/man5/shells.5 b/man5/shells.5
deleted file mode 100644
index 17e35c7ed..000000000
--- a/man5/shells.5
+++ /dev/null
@@ -1,40 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Thu May 20 20:45:48 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sat Jul 24 17:11:07 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Sun Nov 21 10:49:38 1993 by Michael Haardt
-.\" Modified Sun Feb 26 15:09:15 1995 by Rik Faith (faith@cs.unc.edu)
-.TH shells 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-shells \- pathnames of valid login shells
-.SH DESCRIPTION
-.I /etc/shells
-is a text file which contains the full pathnames of valid login shells.
-This file is consulted by
-.BR chsh (1)
-and available to be queried by other programs.
-.PP
-Be aware that there are programs which consult this file to
-find out if a user is a normal user;
-for example,
-FTP daemons traditionally
-disallow access to users with shells not included in this file.
-.SH FILES
-.I /etc/shells
-.SH EXAMPLES
-.I /etc/shells
-may contain the following paths:
-.PP
-.in +4n
-.EX
-.I /bin/sh
-.I /bin/bash
-.I /bin/csh
-.EE
-.in
-.SH SEE ALSO
-.BR chsh (1),
-.BR getusershell (3),
-.BR pam_shells (8)
diff --git a/man5/slabinfo.5 b/man5/slabinfo.5
deleted file mode 100644
index 5ee659f8e..000000000
--- a/man5/slabinfo.5
+++ /dev/null
@@ -1,220 +0,0 @@
-.\" Copyright (c) 2001 Andreas Dilger (adilger@turbolinux.com)
-.\" and Copyright (c) 2017 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH slabinfo 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-slabinfo \- kernel slab allocator statistics
-.SH SYNOPSIS
-.nf
-.B cat /proc/slabinfo
-.fi
-.SH DESCRIPTION
-Frequently used objects in the Linux kernel
-(buffer heads, inodes, dentries, etc.)
-have their own cache.
-The file
-.I /proc/slabinfo
-gives statistics on these caches.
-The following (edited) output shows an example of the
-contents of this file:
-.PP
-.EX
-$ \fBsudo cat /proc/slabinfo\fP
-slabinfo \- version: 2.1
-# name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> ...
-sigqueue 100 100 160 25 1 : tunables 0 0 0 : slabdata 4 4 0
-sighand_cache 355 405 2112 15 8 : tunables 0 0 0 : slabdata 27 27 0
-kmalloc\-8192 96 96 8192 4 8 : tunables 0 0 0 : slabdata 24 24 0
-\&...
-.EE
-.PP
-The first line of output includes a version number,
-which allows an application that is reading the file to handle changes
-in the file format.
-(See VERSIONS, below.)
-The next line lists the names of the columns in the remaining lines.
-.PP
-Each of the remaining lines displays information about a specified cache.
-Following the cache name,
-the output shown in each line shows three components for each cache:
-.IP \[bu] 3
-statistics
-.IP \[bu]
-tunables
-.IP \[bu]
-slabdata
-.PP
-The statistics are as follows:
-.TP
-.I active_objs
-The number of objects that are currently active (i.e., in use).
-.TP
-.I num_objs
-The total number of allocated objects
-(i.e., objects that are both in use and not in use).
-.TP
-.I objsize
-The size of objects in this slab, in bytes.
-.TP
-.I objperslab
-The number of objects stored in each slab.
-.TP
-.I pagesperslab
-The number of pages allocated for each slab.
-.PP
-The
-.I tunables
-entries in each line show tunable parameters for the corresponding cache.
-When using the default SLUB allocator, there are no tunables, the
-.I /proc/slabinfo
-file is not writable, and the value 0 is shown in these fields.
-When using the older SLAB allocator,
-the tunables for a particular cache can be set by writing
-lines of the following form to
-.IR /proc/slabinfo :
-.PP
-.in +4n
-.EX
-# \fBecho \[aq]name limit batchcount sharedfactor\[aq] > /proc/slabinfo\fP
-.EE
-.in
-.PP
-Here,
-.I name
-is the cache name, and
-.IR limit ,
-.IR batchcount ,
-and
-.I sharedfactor
-are integers defining new values for the corresponding tunables.
-The
-.I limit
-value should be a positive value,
-.I batchcount
-should be a positive value that is less than or equal to
-.IR limit ,
-and
-.I sharedfactor
-should be nonnegative.
-If any of the specified values is invalid,
-the cache settings are left unchanged.
-.PP
-The
-.I tunables
-entries in each line contain the following fields:
-.TP
-.I limit
-The maximum number of objects that will be cached.
-.\" https://lwn.net/Articles/56360/
-.\" This is the limit on the number of free objects that can be stored
-.\" in the per-CPU free list for this slab cache.
-.TP
-.I batchcount
-On SMP systems, this specifies the number of objects to transfer at one time
-when refilling the available object list.
-.\" https://lwn.net/Articles/56360/
-.\" On SMP systems, when we refill the available object list, instead
-.\" of doing one object at a time, we do batch-count objects at a time.
-.TP
-.I sharedfactor
-[To be documented]
-.\"
-.PP
-The
-.I slabdata
-entries in each line contain the following fields:
-.TP
-.I active_slabs
-The number of active slabs.
-.TP
-.I nums_slabs
-The total number of slabs.
-.TP
-.I sharedavail
-[To be documented]
-.PP
-Note that because of object alignment and slab cache overhead,
-objects are not normally packed tightly into pages.
-Pages with even one in-use object are considered in-use and cannot be
-freed.
-.PP
-Kernels configured with
-.B CONFIG_DEBUG_SLAB
-will also have additional statistics fields in each line,
-and the first line of the file will contain the string "(statistics)".
-The statistics field include : the high water mark of active
-objects; the number of times objects have been allocated;
-the number of times the cache has grown (new pages added
-to this cache); the number of times the cache has been
-reaped (unused pages removed from this cache); and the
-number of times there was an error allocating new pages
-to this cache.
-.\"
-.\" SMP systems will also have "(SMP)" in the first line of
-.\" output, and will have two additional columns for each slab,
-.\" reporting the slab allocation policy for the CPU-local
-.\" cache (to reduce the need for inter-CPU synchronization
-.\" when allocating objects from the cache).
-.\" The first column is the per-CPU limit: the maximum number of objects that
-.\" will be cached for each CPU.
-.\" The second column is the
-.\" batchcount: the maximum number of free objects in the
-.\" global cache that will be transferred to the per-CPU cache
-.\" if it is empty, or the number of objects to be returned
-.\" to the global cache if the per-CPU cache is full.
-.\"
-.\" If both slab cache statistics and SMP are defined, there
-.\" will be four additional columns, reporting the per-CPU
-.\" cache statistics.
-.\" The first two are the per-CPU cache
-.\" allocation hit and miss counts: the number of times an
-.\" object was or was not available in the per-CPU cache
-.\" for allocation.
-.\" The next two are the per-CPU cache free
-.\" hit and miss counts: the number of times a freed object
-.\" could or could not fit within the per-CPU cache limit,
-.\" before flushing objects to the global cache.
-.SH VERSIONS
-The
-.I /proc/slabinfo
-file first appeared in Linux 2.1.23.
-The file is versioned,
-and over time there have been a number of versions with different layouts:
-.TP
-1.0
-Present throughout the Linux 2.2.x kernel series.
-.TP
-1.1
-Present in the Linux 2.4.x kernel series.
-.\" First appeared in Linux 2.4.0-test3
-.TP
-1.2
-A format that was briefly present in the Linux 2.5 development series.
-.\" from Linux 2.5.45 to Linux 2.5.70
-.TP
-2.0
-Present in Linux 2.6.x kernels up to and including Linux 2.6.9.
-.\" First appeared in Linux 2.5.71
-.TP
-2.1
-The current format, which first appeared in Linux 2.6.10.
-.SH NOTES
-Only root can read and (if the kernel was configured with
-.BR CONFIG_SLAB )
-write the
-.I /proc/slabinfo
-file.
-.PP
-The total amount of memory allocated to the SLAB/SLUB cache is shown in the
-.I Slab
-field of
-.IR /proc/meminfo .
-.SH SEE ALSO
-.BR slabtop (1)
-.PP
-The kernel source file
-.I Documentation/vm/slub.txt
-and
-.IR tools/vm/slabinfo.c .
diff --git a/man5/sysfs.5 b/man5/sysfs.5
deleted file mode 100644
index 26effac12..000000000
--- a/man5/sysfs.5
+++ /dev/null
@@ -1,275 +0,0 @@
-.\" Copyright (c) 2017 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sysfs 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sysfs \- a filesystem for exporting kernel objects
-.SH DESCRIPTION
-The
-.B sysfs
-filesystem is a pseudo-filesystem which provides an interface to
-kernel data structures.
-(More precisely, the files and directories in
-.B sysfs
-provide a view of the
-.I kobject
-structures defined internally within the kernel.)
-The files under
-.B sysfs
-provide information about devices, kernel modules, filesystems,
-and other kernel components.
-.PP
-The
-.B sysfs
-filesystem is commonly mounted at
-.IR /sys .
-Typically, it is mounted automatically by the system,
-but it can also be mounted manually using a command such as:
-.PP
-.in +4n
-.EX
-mount \-t sysfs sysfs /sys
-.EE
-.in
-.PP
-Many of the files in the
-.B sysfs
-filesystem are read-only,
-but some files are writable, allowing kernel variables to be changed.
-To avoid redundancy,
-symbolic links are heavily used to connect entries across the filesystem tree.
-.\"
-.SS Files and directories
-The following list describes some of the files and directories under the
-.I /sys
-hierarchy.
-.TP
-.I /sys/block
-This subdirectory contains one symbolic link for each block device
-that has been discovered on the system.
-The symbolic links point to corresponding directories under
-.IR /sys/devices .
-.TP
-.I /sys/bus
-This directory contains one subdirectory for each of the bus types
-in the kernel.
-Inside each of these directories are two subdirectories:
-.RS
-.TP
-.I devices
-This subdirectory contains symbolic links to entries in
-.I /sys/devices
-that correspond to the devices discovered on this bus.
-.TP
-.I drivers
-This subdirectory contains one subdirectory for each device driver
-that is loaded on this bus.
-.RE
-.TP
-.I /sys/class
-This subdirectory contains a single layer of further subdirectories
-for each of the device classes that have been registered on the system
-(e.g., terminals, network devices, block devices, graphics devices,
-sound devices, and so on).
-Inside each of these subdirectories are symbolic links for each of the
-devices in this class.
-These symbolic links refer to entries in the
-.I /sys/devices
-directory.
-.TP
-.I /sys/class/net
-Each of the entries in this directory is a symbolic link
-representing one of the real or virtual networking devices
-that are visible in the network namespace of the process
-that is accessing the directory.
-Each of these symbolic links refers to entries in the
-.I /sys/devices
-directory.
-.TP
-.I /sys/dev
-This directory contains two subdirectories
-.I block/
-and
-.IR char/ ,
-corresponding, respectively,
-to the block and character devices on the system.
-Inside each of these subdirectories are symbolic links with names of the form
-.IR major-ID : minor-ID ,
-where the ID values correspond to the major and minor ID of a specific device.
-Each symbolic link points to the
-.B sysfs
-directory for a device.
-The symbolic links inside
-.I /sys/dev
-thus provide an easy way to look up the
-.B sysfs
-interface using the device IDs returned by a call to
-.BR stat (2)
-(or similar).
-.IP
-The following shell session shows an example from
-.IR /sys/dev :
-.IP
-.in +4n
-.EX
-$ \fBstat \-c "%t %T" /dev/null\fP
-1 3
-$ \fBreadlink /sys/dev/char/1\e:3\fP
-\&../../devices/virtual/mem/null
-$ \fBls \-Fd /sys/devices/virtual/mem/null\fP
-/sys/devices/virtual/mem/null/
-$ \fBls \-d1 /sys/devices/virtual/mem/null/*\fP
-/sys/devices/virtual/mem/null/dev
-/sys/devices/virtual/mem/null/power/
-/sys/devices/virtual/mem/null/subsystem@
-/sys/devices/virtual/mem/null/uevent
-.EE
-.in
-.TP
-.I /sys/devices
-This is a directory that contains a filesystem representation of
-the kernel device tree,
-which is a hierarchy of
-.I device
-structures within the kernel.
-.TP
-.I /sys/firmware
-This subdirectory contains interfaces for viewing and manipulating
-firmware-specific objects and attributes.
-.TP
-.I /sys/fs
-This directory contains subdirectories for some filesystems.
-A filesystem will have a subdirectory here only if it chose
-to explicitly create the subdirectory.
-.TP
-.I /sys/fs/cgroup
-This directory conventionally is used as a mount point for a
-.BR tmpfs (5)
-filesystem containing mount points for
-.BR cgroups (7)
-filesystems.
-.TP
-.I /sys/fs/smackfs
-The directory contains configuration files for the SMACK LSM.
-See the kernel source file
-.IR Documentation/admin\-guide/LSM/Smack.rst .
-.TP
-.I /sys/hypervisor
-[To be documented]
-.TP
-.I /sys/kernel
-This subdirectory contains various files and subdirectories that provide
-information about the running kernel.
-.TP
-.I /sys/kernel/cgroup/
-For information about the files in this directory, see
-.BR cgroups (7).
-.TP
-.I /sys/kernel/debug/tracing
-Mount point for the
-.I tracefs
-filesystem used by the kernel's
-.I ftrace
-facility.
-(For information on
-.IR ftrace ,
-see the kernel source file
-.IR Documentation/trace/ftrace.txt .)
-.TP
-.I /sys/kernel/mm
-This subdirectory contains various files and subdirectories that provide
-information about the kernel's memory management subsystem.
-.TP
-.I /sys/kernel/mm/hugepages
-This subdirectory contains one subdirectory for each of the
-huge page sizes that the system supports.
-The subdirectory name indicates the huge page size (e.g.,
-.IR hugepages\-2048kB ).
-Within each of these subdirectories is a set of files
-that can be used to view and (in some cases) change settings
-associated with that huge page size.
-For further information, see the kernel source file
-.IR Documentation/admin\-guide/mm/hugetlbpage.rst .
-.TP
-.I /sys/module
-This subdirectory contains one subdirectory
-for each module that is loaded into the kernel.
-The name of each directory is the name of the module.
-In each of the subdirectories, there may be following files:
-.RS
-.TP
-.I coresize
-[to be documented]
-.TP
-.I initsize
-[to be documented]
-.TP
-.I initstate
-[to be documented]
-.TP
-.I refcnt
-[to be documented]
-.TP
-.I srcversion
-[to be documented]
-.TP
-.I taint
-[to be documented]
-.TP
-.I uevent
-[to be documented]
-.TP
-.I version
-[to be documented]
-.RE
-.IP
-In each of the subdirectories, there may be following subdirectories:
-.RS
-.TP
-.I drivers
-[To be documented]
-.TP
-.I holders
-[To be documented]
-.TP
-.I notes
-[To be documented]
-.TP
-.I parameters
-This directory contains one file for each module parameter,
-with each file containing the value of the corresponding parameter.
-Some of these files are writable, allowing the
-.TP
-.I sections
-This subdirectories contains files with information about module sections.
-This information is mainly used for debugging.
-.TP
-.I
-[To be documented]
-.RE
-.TP
-.I /sys/power
-[To be documented]
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.6.0.
-.SH NOTES
-This manual page is incomplete, possibly inaccurate, and is the kind
-of thing that needs to be updated very often.
-.SH SEE ALSO
-.BR proc (5),
-.BR udev (7)
-.PP
-P.\& Mochel. (2005).
-.IR "The sysfs filesystem" .
-Proceedings of the 2005 Ottawa Linux Symposium.
-.\" https://www.kernel.org/pub/linux/kernel/people/mochel/doc/papers/ols-2005/mochel.pdf
-.PP
-The kernel source file
-.I Documentation/filesystems/sysfs.txt
-and various other files in
-.I Documentation/ABI
-and
-.I Documentation/*/sysfs.txt
diff --git a/man5/termcap.5 b/man5/termcap.5
deleted file mode 100644
index f2ba89373..000000000
--- a/man5/termcap.5
+++ /dev/null
@@ -1,466 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified formatting Sat Jul 24 17:13:38 1993, Rik Faith (faith@cs.unc.edu)
-.\" Modified (extensions and corrections)
-.\" Sun May 1 14:21:25 MET DST 1994 Michael Haardt
-.\" If mistakes in the capabilities are found, please send a bug report to:
-.\" michael@moria.de
-.\" Modified Mon Oct 21 17:47:19 EDT 1996 by Eric S. Raymond (esr@thyrsus.com)
-.TH termcap 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-termcap \- terminal capability database
-.SH DESCRIPTION
-The termcap database is an obsolete facility for describing the
-capabilities of character-cell terminals and printers.
-It is retained only for compatibility with old programs;
-new programs should use the
-.BR terminfo (5)
-database and associated libraries.
-.PP
-.I /etc/termcap
-is an ASCII file (the database master) that lists the capabilities of
-many different types of terminals.
-Programs can read termcap to find
-the particular escape codes needed to control the visual attributes of
-the terminal actually in use.
-(Other aspects of the terminal are
-handled by
-.BR stty (1).)
-The termcap database is indexed on the
-.B TERM
-environment variable.
-.PP
-Termcap entries must be defined on a single logical line, with \[aq]\e\[aq]
-used to suppress the newline.
-Fields are separated by \[aq]:\[aq].
-The first field of each entry starts at the left-hand margin,
-and contains a list of names for the terminal, separated by \[aq]|\[aq].
-.PP
-The first subfield may (in BSD termcap entries from 4.3BSD and
-earlier) contain a short name consisting of two characters.
-This short name may consist of capital or small letters.
-In 4.4BSD, termcap entries this field is omitted.
-.PP
-The second subfield (first, in the newer 4.4BSD format) contains the
-name used by the environment variable
-.BR TERM .
-It should be spelled in lowercase letters.
-Selectable hardware capabilities should be marked
-by appending a hyphen and a suffix to this name.
-See below for an example.
-Usual suffixes are w (more than 80 characters wide), am
-(automatic margins), nam (no automatic margins), and rv (reverse video
-display).
-The third subfield contains a long and descriptive name for
-this termcap entry.
-.PP
-Subsequent fields contain the terminal capabilities; any continued
-capability lines must be indented one tab from the left margin.
-.PP
-Although there is no defined order, it is suggested to write first
-boolean, then numeric, and then string capabilities, each sorted
-alphabetically without looking at lower or upper spelling.
-Capabilities of similar functions can be written in one line.
-.PP
-Example for:
-.nf
-.PP
-Head line: vt|vt101|DEC VT 101 terminal in 80 character mode:\e
-Head line: Vt|vt101-w|DEC VT 101 terminal in (wide) 132 character mode:\e
-Boolean: :bs:\e
-Numeric: :co#80:\e
-String: :sr=\eE[H:\e
-.fi
-.SS Boolean capabilities
-.nf
-5i Printer will not echo on screen
-am Automatic margins which means automatic line wrap
-bs Control-H (8 dec.) performs a backspace
-bw Backspace on left margin wraps to previous line and right margin
-da Display retained above screen
-db Display retained below screen
-eo A space erases all characters at cursor position
-es Escape sequences and special characters work in status line
-gn Generic device
-hc This is a hardcopy terminal
-HC The cursor is hard to see when not on bottom line
-hs Has a status line
-hz Hazeltine bug, the terminal can not print tilde characters
-in Terminal inserts null bytes, not spaces, to fill whitespace
-km Terminal has a meta key
-mi Cursor movement works in insert mode
-ms Cursor movement works in standout/underline mode
-NP No pad character
-NR ti does not reverse te
-nx No padding, must use XON/XOFF
-os Terminal can overstrike
-ul Terminal underlines although it can not overstrike
-xb Beehive glitch, f1 sends ESCAPE, f2 sends \fB\[ha]C\fP
-xn Newline/wraparound glitch
-xo Terminal uses xon/xoff protocol
-xs Text typed over standout text will be displayed in standout
-xt Teleray glitch, destructive tabs and odd standout mode
-.fi
-.SS Numeric capabilities
-.nf
-co Number of columns
-dB Delay in milliseconds for backspace on hardcopy terminals
-dC Delay in milliseconds for carriage return on hardcopy terminals
-dF Delay in milliseconds for form feed on hardcopy terminals
-dN Delay in milliseconds for new line on hardcopy terminals
-dT Delay in milliseconds for tabulator stop on hardcopy terminals
-dV Delay in milliseconds for vertical tabulator stop on
- hardcopy terminals
-it Difference between tab positions
-lh Height of soft labels
-lm Lines of memory
-lw Width of soft labels
-li Number of lines
-Nl Number of soft labels
-pb Lowest baud rate which needs padding
-sg Standout glitch
-ug Underline glitch
-vt virtual terminal number
-ws Width of status line if different from screen width
-.fi
-.SS String capabilities
-.nf
-!1 shifted save key
-!2 shifted suspend key
-!3 shifted undo key
-#1 shifted help key
-#2 shifted home key
-#3 shifted input key
-#4 shifted cursor left key
-%0 redo key
-%1 help key
-%2 mark key
-%3 message key
-%4 move key
-%5 next-object key
-%6 open key
-%7 options key
-%8 previous-object key
-%9 print key
-%a shifted message key
-%b shifted move key
-%c shifted next key
-%d shifted options key
-%e shifted previous key
-%f shifted print key
-%g shifted redo key
-%h shifted replace key
-%i shifted cursor right key
-%j shifted resume key
-&0 shifted cancel key
-&1 reference key
-&2 refresh key
-&3 replace key
-&4 restart key
-&5 resume key
-&6 save key
-&7 suspend key
-&8 undo key
-&9 shifted begin key
-*0 shifted find key
-*1 shifted command key
-*2 shifted copy key
-*3 shifted create key
-*4 shifted delete character
-*5 shifted delete line
-*6 select key
-*7 shifted end key
-*8 shifted clear line key
-*9 shifted exit key
-@0 find key
-@1 begin key
-@2 cancel key
-@3 close key
-@4 command key
-@5 copy key
-@6 create key
-@7 end key
-@8 enter/send key
-@9 exit key
-al Insert one line
-AL Insert %1 lines
-ac Pairs of block graphic characters to map alternate character set
-ae End alternative character set
-as Start alternative character set for block graphic characters
-bc Backspace, if not \fB\[ha]H\fP
-bl Audio bell
-bt Move to previous tab stop
-cb Clear from beginning of line to cursor
-cc Dummy command character
-cd Clear to end of screen
-ce Clear to end of line
-ch Move cursor horizontally only to column %1
-cl Clear screen and cursor home
-cm Cursor move to row %1 and column %2 (on screen)
-CM Move cursor to row %1 and column %2 (in memory)
-cr Carriage return
-cs Scroll region from line %1 to %2
-ct Clear tabs
-cv Move cursor vertically only to line %1
-dc Delete one character
-DC Delete %1 characters
-dl Delete one line
-DL Delete %1 lines
-dm Begin delete mode
-do Cursor down one line
-DO Cursor down #1 lines
-ds Disable status line
-eA Enable alternate character set
-ec Erase %1 characters starting at cursor
-ed End delete mode
-ei End insert mode
-ff Formfeed character on hardcopy terminals
-fs Return character to its position before going to status line
-F1 The string sent by function key f11
-F2 The string sent by function key f12
-F3 The string sent by function key f13
-\&... \&...
-F9 The string sent by function key f19
-FA The string sent by function key f20
-FB The string sent by function key f21
-\&... \&...
-FZ The string sent by function key f45
-Fa The string sent by function key f46
-Fb The string sent by function key f47
-\&... \&...
-Fr The string sent by function key f63
-hd Move cursor a half line down
-ho Cursor home
-hu Move cursor a half line up
-i1 Initialization string 1 at login
-i3 Initialization string 3 at login
-is Initialization string 2 at login
-ic Insert one character
-IC Insert %1 characters
-if Initialization file
-im Begin insert mode
-ip Insert pad time and needed special characters after insert
-iP Initialization program
-K1 upper left key on keypad
-K2 center key on keypad
-K3 upper right key on keypad
-K4 bottom left key on keypad
-K5 bottom right key on keypad
-k0 Function key 0
-k1 Function key 1
-k2 Function key 2
-k3 Function key 3
-k4 Function key 4
-k5 Function key 5
-k6 Function key 6
-k7 Function key 7
-k8 Function key 8
-k9 Function key 9
-k; Function key 10
-ka Clear all tabs key
-kA Insert line key
-kb Backspace key
-kB Back tab stop
-kC Clear screen key
-kd Cursor down key
-kD Key for delete character under cursor
-ke turn keypad off
-kE Key for clear to end of line
-kF Key for scrolling forward/down
-kh Cursor home key
-kH Cursor hown down key
-kI Insert character/Insert mode key
-kl Cursor left key
-kL Key for delete line
-kM Key for exit insert mode
-kN Key for next page
-kP Key for previous page
-kr Cursor right key
-kR Key for scrolling backward/up
-ks Turn keypad on
-kS Clear to end of screen key
-kt Clear this tab key
-kT Set tab here key
-ku Cursor up key
-l0 Label of zeroth function key, if not f0
-l1 Label of first function key, if not f1
-l2 Label of first function key, if not f2
-\&... \&...
-la Label of tenth function key, if not f10
-le Cursor left one character
-ll Move cursor to lower left corner
-LE Cursor left %1 characters
-LF Turn soft labels off
-LO Turn soft labels on
-mb Start blinking
-MC Clear soft margins
-md Start bold mode
-me End all mode like so, us, mb, md, and mr
-mh Start half bright mode
-mk Dark mode (Characters invisible)
-ML Set left soft margin
-mm Put terminal in meta mode
-mo Put terminal out of meta mode
-mp Turn on protected attribute
-mr Start reverse mode
-MR Set right soft margin
-nd Cursor right one character
-nw Carriage return command
-pc Padding character
-pf Turn printer off
-pk Program key %1 to send string %2 as if typed by user
-pl Program key %1 to execute string %2 in local mode
-pn Program soft label %1 to show string %2
-po Turn the printer on
-pO Turn the printer on for %1 (<256) bytes
-ps Print screen contents on printer
-px Program key %1 to send string %2 to computer
-r1 Reset string 1 to set terminal to sane modes
-r2 Reset string 2 to set terminal to sane modes
-r3 Reset string 3 to set terminal to sane modes
-RA disable automatic margins
-rc Restore saved cursor position
-rf Reset string filename
-RF Request for input from terminal
-RI Cursor right %1 characters
-rp Repeat character %1 for %2 times
-rP Padding after character sent in replace mode
-rs Reset string
-RX Turn off XON/XOFF flow control
-sa Set %1 %2 %3 %4 %5 %6 %7 %8 %9 attributes
-SA enable automatic margins
-sc Save cursor position
-se End standout mode
-sf Normal scroll one line
-SF Normal scroll %1 lines
-so Start standout mode
-sr Reverse scroll
-SR scroll back %1 lines
-st Set tabulator stop in all rows at current column
-SX Turn on XON/XOFF flow control
-ta move to next hardware tab
-tc Read in terminal description from another entry
-te End program that uses cursor motion
-ti Begin program that uses cursor motion
-ts Move cursor to column %1 of status line
-uc Underline character under cursor and move cursor right
-ue End underlining
-up Cursor up one line
-UP Cursor up %1 lines
-us Start underlining
-vb Visible bell
-ve Normal cursor visible
-vi Cursor invisible
-vs Standout cursor
-wi Set window from line %1 to %2 and column %3 to %4
-XF XOFF character if not \fB\[ha]S\fP
-.fi
-.PP
-There are several ways of defining the control codes for string capabilities:
-.PP
-Every normal character represents itself,
-except \[aq]\[ha]\[aq], \[aq]\e\[aq], and \[aq]%\[aq].
-.PP
-A \fB\[ha]x\fP means Control-x.
-Control-A equals 1 decimal.
-.PP
-\ex means a special code.
-x can be one of the following characters:
-.RS
-E Escape (27)
-.br
-n Linefeed (10)
-.br
-r Carriage return (13)
-.br
-t Tabulation (9)
-.br
-b Backspace (8)
-.br
-f Form feed (12)
-.br
-0 Null character.
-A \exxx specifies the octal character xxx.
-.RE
-.TP
-i
-Increments parameters by one.
-.TP
-r
-Single parameter capability
-.TP
-+
-Add value of next character to this parameter and do binary output
-.TP
-2
-Do ASCII output of this parameter with a field with of 2
-.TP
-d
-Do ASCII output of this parameter with a field with of 3
-.TP
-%
-Print a \[aq]%\[aq]
-.PP
-If you use binary output,
-then you should avoid the null character (\[aq]\e0\[aq])
-because it terminates the string.
-You should reset tabulator expansion
-if a tabulator can be the binary output of a parameter.
-.TP
-Warning:
-The above metacharacters for parameters may be wrong: they document Minix
-termcap which may not be compatible with Linux termcap.
-.PP
-The block graphic characters can be specified by three string capabilities:
-.TP
-as
-start the alternative charset
-.TP
-ae
-end the alternative charset
-.TP
-ac
-pairs of characters.
-The first character is the name of the block graphic
-symbol and the second characters is its definition.
-.PP
-The following names are available:
-.PP
-.nf
-+ right arrow (>)
-, left arrow (<)
-\&. down arrow (v)
-0 full square (#)
-I lantern (#)
-- upper arrow (\[ha])
-\&' rhombus (+)
-a chess board (:)
-f degree (')
-g plus-minus (#)
-h square (#)
-j right bottom corner (+)
-k right upper corner (+)
-l left upper corner (+)
-m left bottom corner (+)
-n cross (+)
-o upper horizontal line (-)
-q middle horizontal line (-)
-s bottom horizontal line (_)
-t left tee (+)
-u right tee (+)
-v bottom tee (+)
-w normal tee (+)
-x vertical line (|)
-\[ti] paragraph (???)
-.fi
-.PP
-The values in parentheses are suggested defaults which are used by the
-.I curses
-library, if the capabilities are missing.
-.SH SEE ALSO
-.BR ncurses (3),
-.BR termcap (3),
-.BR terminfo (5)
diff --git a/man5/tmpfs.5 b/man5/tmpfs.5
deleted file mode 100644
index 09d955898..000000000
--- a/man5/tmpfs.5
+++ /dev/null
@@ -1,271 +0,0 @@
-.\" Copyright (c) 2016 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH tmpfs 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-tmpfs \- a virtual memory filesystem
-.SH DESCRIPTION
-The
-.B tmpfs
-facility allows the creation of filesystems whose contents reside
-in virtual memory.
-Since the files on such filesystems typically reside in RAM,
-file access is extremely fast.
-.PP
-The filesystem is automatically created when mounting
-a filesystem with the type
-.B tmpfs
-via a command such as the following:
-.PP
-.in +4n
-.EX
-$ sudo mount \-t tmpfs \-o size=10M tmpfs /mnt/mytmpfs
-.EE
-.in
-.PP
-A
-.B tmpfs
-filesystem has the following properties:
-.IP \[bu] 3
-The filesystem can employ swap space when physical memory pressure
-demands it.
-.IP \[bu]
-The filesystem consumes only as much physical memory and swap space
-as is required to store the current contents of the filesystem.
-.IP \[bu]
-During a remount operation
-.RI ( "mount\ \-o\ remount" ),
-the filesystem size can be changed
-(without losing the existing contents of the filesystem).
-.PP
-If a
-.B tmpfs
-filesystem is unmounted, its contents are discarded (lost).
-.\" See mm/shmem.c:shmem_parse_options for options it supports.
-.SS Mount options
-The
-.B tmpfs
-filesystem supports the following mount options:
-.TP
-.BR size "=\fIbytes\fP"
-Specify an upper limit on the size of the filesystem.
-The size is given in bytes, and rounded up to entire pages.
-.IP
-The size may have a
-.BR k ,
-.BR m ,
-or
-.B g
-suffix for Ki, Mi, Gi (binary kilo (kibi), binary mega (mebi), and binary giga
-(gibi)).
-.IP
-The size may also have a % suffix to limit this instance to a percentage of
-physical RAM.
-.IP
-The default, when neither
-.B size
-nor
-.B nr_blocks
-is specified, is
-.IR size=50% .
-.TP
-.BR nr_blocks "=\fIblocks\fP"
-The same as
-.BR size ,
-but in blocks of
-.BR PAGE_CACHE_SIZE .
-.IP
-Blocks may be specified with
-.BR k ,
-.BR m ,
-or
-.B g
-suffixes like
-.BR size ,
-but not a % suffix.
-.TP
-.BR nr_inodes "=\fIinodes\fP"
-The maximum number of inodes for this instance.
-The default is half of the number of your physical RAM pages, or (on a
-machine with highmem) the number of lowmem RAM pages, whichever is smaller.
-.IP
-Inodes may be specified with
-.BR k ,
-.BR m ,
-or
-.B g
-suffixes like
-.BR size ,
-but not a % suffix.
-.TP
-.BR mode "=\fImode\fP"
-Set initial permissions of the root directory.
-.TP
-.BR gid "=\fIgid\fP (since Linux 2.5.7)"
-.\" Technically this is also in some version of Linux 2.4.
-.\" commit 099445b489625b80b1d6687c9b6072dbeaca4096
-Set the initial group ID of the root directory.
-.TP
-.BR uid "=\fIuid\fP (since Linux 2.5.7)"
-.\" Technically this is also in some version of Linux 2.4.
-.\" commit 099445b489625b80b1d6687c9b6072dbeaca4096
-Set the initial user ID of the root directory.
-.TP
-.BR huge "=\fIhuge_option\fR (since Linux 4.7.0)"
-.\" commit 5a6e75f8110c97e2a5488894d4e922187e6cb343
-Set the huge table memory allocation policy for all files in this instance (if
-.B CONFIG_TRANSPARENT_HUGE_PAGECACHE
-is enabled).
-.IP
-The
-.I huge_option
-value is one of the following:
-.RS
-.TP
-.B never
-Do not allocate huge pages.
-This is the default.
-.TP
-.B always
-Attempt to allocate huge pages every time a new page is needed.
-.TP
-.B within_size
-Only allocate huge page if it will be fully within
-.IR i_size .
-Also respect
-.BR fadvise (2)
-and
-.BR madvise (2)
-hints
-.TP
-.B advise
-Only allocate huge pages if requested with
-.BR fadvise (2)
-or
-.BR madvise (2).
-.TP
-.B deny
-For use in emergencies, to force the huge option off from all mounts.
-.TP
-.B force
-Force the huge option on for all mounts; useful for testing.
-.RE
-.TP
-.BR mpol "=\fImpol_option\fR (since Linux 2.6.15)"
-.\" commit 7339ff8302fd70aabf5f1ae26e0c4905fa74a495
-Set the NUMA memory allocation policy for all files in this instance (if
-.B CONFIG_NUMA
-is enabled).
-.IP
-The
-.I mpol_option
-value is one of the following:
-.RS
-.TP
-.B default
-Use the process allocation policy (see
-.BR set_mempolicy (2)).
-.TP
-.BR prefer ":\fInode\fP"
-Preferably allocate memory from the given
-.IR node .
-.TP
-.BR bind ":\fInodelist\fP"
-Allocate memory only from nodes in
-.IR nodelist .
-.TP
-.B interleave
-Allocate from each node in turn.
-.TP
-.BR interleave ":\fInodelist\fP"
-Allocate from each node of
-.I in
-turn.
-.TP
-.B local
-Preferably allocate memory from the local node.
-.RE
-.IP
-In the above,
-.I nodelist
-is a comma-separated list of decimal numbers and ranges
-that specify NUMA nodes.
-A range is a pair of hyphen-separated decimal numbers,
-the smallest and largest node numbers in the range.
-For example,
-.IR mpol=bind:0\-3,5,7,9\-15 .
-.SH VERSIONS
-The
-.B tmpfs
-facility was added in Linux 2.4, as a successor to the older
-.B ramfs
-facility, which did not provide limit checking or
-allow for the use of swap space.
-.SH NOTES
-In order for user-space tools and applications to create
-.B tmpfs
-filesystems, the kernel must be configured with the
-.B CONFIG_TMPFS
-option.
-.PP
-The
-.B tmpfs
-filesystem supports extended attributes (see
-.BR xattr (7)),
-but
-.I user
-extended attributes are not permitted.
-.PP
-An internal shared memory filesystem is used for
-System V shared memory
-.RB ( shmget (2))
-and shared anonymous mappings
-.RB ( mmap (2)
-with the
-.B MAP_SHARED
-and
-.B MAP_ANONYMOUS
-flags).
-This filesystem is available regardless of whether
-the kernel was configured with the
-.B CONFIG_TMPFS
-option.
-.PP
-A
-.B tmpfs
-filesystem mounted at
-.I /dev/shm
-is used for the implementation of POSIX shared memory
-.RB ( shm_overview (7))
-and POSIX semaphores
-.RB ( sem_overview (7)).
-.PP
-The amount of memory consumed by all
-.B tmpfs
-filesystems is shown in the
-.I Shmem
-field of
-.I /proc/meminfo
-and in the
-.I shared
-field displayed by
-.BR free (1).
-.PP
-The
-.B tmpfs
-facility was formerly called
-.BR shmfs .
-.SH SEE ALSO
-.BR df (1),
-.BR du (1),
-.BR memfd_create (2),
-.BR mmap (2),
-.BR set_mempolicy (2),
-.BR shm_open (3),
-.BR mount (8)
-.PP
-The kernel source files
-.I Documentation/filesystems/tmpfs.txt
-and
-.IR Documentation/admin\-guide/mm/transhuge.rst .
diff --git a/man5/ttytype.5 b/man5/ttytype.5
deleted file mode 100644
index 598954c82..000000000
--- a/man5/ttytype.5
+++ /dev/null
@@ -1,56 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sat Jul 24 17:17:50 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Thu Oct 19 21:25:21 MET 1995 by Martin Schulze <joey@infodrom.north.de>
-.\" Modified Mon Oct 21 17:47:19 EDT 1996 by Eric S. Raymond
-.\" <esr@thyrsus.com>xk
-.TH ttytype 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ttytype \- terminal device to default terminal type mapping
-.SH DESCRIPTION
-The
-.I /etc/ttytype
-file associates
-.BR termcap (5)
-and
-.BR terminfo (5)
-terminal type names
-with tty lines.
-Each line consists of a terminal type, followed by
-whitespace, followed by a tty name (a device name without the
-.I /dev/
-prefix).
-.PP
-This association is used by the program
-.BR tset (1)
-to set the environment variable
-.B TERM
-to the default terminal name for
-the user's current tty.
-.PP
-This facility was designed for a traditional time-sharing environment
-featuring character-cell terminals hardwired to a UNIX minicomputer.
-It is little used on modern workstation and personal UNIX systems.
-.SH FILES
-.TP
-.I /etc/ttytype
-the tty definitions file.
-.SH EXAMPLES
-A typical
-.I /etc/ttytype
-is:
-.PP
-.in +4n
-.EX
-con80x25 tty1
-vt320 ttys0
-.EE
-.in
-.SH SEE ALSO
-.BR termcap (5),
-.BR terminfo (5),
-.BR agetty (8),
-.BR mingetty (8)
diff --git a/man5/tzfile.5 b/man5/tzfile.5
deleted file mode 100644
index 59d9f6ba9..000000000
--- a/man5/tzfile.5
+++ /dev/null
@@ -1,496 +0,0 @@
-.\" This file is in the public domain, so clarified as of
-.\" 1996-06-05 by Arthur David Olson.
-.TH tzfile 5 "" "Time Zone Database"
-.SH NAME
-tzfile \- timezone information
-.SH DESCRIPTION
-.ie '\(lq'' .ds lq \&"\"
-.el .ds lq \(lq\"
-.ie '\(rq'' .ds rq \&"\"
-.el .ds rq \(rq\"
-.de q
-\\$3\*(lq\\$1\*(rq\\$2
-..
-.ie \n(.g .ds - \f(CR-\fP
-.el .ds - \-
-The timezone information files used by
-.BR tzset (3)
-are typically found under a directory with a name like
-.IR /usr/share/zoneinfo .
-These files use the format described in Internet RFC 8536.
-Each file is a sequence of 8-bit bytes.
-In a file, a binary integer is represented by a sequence of one or
-more bytes in network order (bigendian, or high-order byte first),
-with all bits significant,
-a signed binary integer is represented using two's complement,
-and a boolean is represented by a one-byte binary integer that is
-either 0 (false) or 1 (true).
-The format begins with a 44-byte header containing the following fields:
-.IP * 2
-The magic four-byte ASCII sequence
-.q "TZif"
-identifies the file as a timezone information file.
-.IP *
-A byte identifying the version of the file's format
-(as of 2021, either an ASCII NUL,
-.q "2",
-.q "3",
-or
-.q "4" ).
-.IP *
-Fifteen bytes containing zeros reserved for future use.
-.IP *
-Six four-byte integer values, in the following order:
-.RS
-.TP
-.B tzh_ttisutcnt
-The number of UT/local indicators stored in the file.
-(UT is Universal Time.)
-.TP
-.B tzh_ttisstdcnt
-The number of standard/wall indicators stored in the file.
-.TP
-.B tzh_leapcnt
-The number of leap seconds for which data entries are stored in the file.
-.TP
-.B tzh_timecnt
-The number of transition times for which data entries are stored
-in the file.
-.TP
-.B tzh_typecnt
-The number of local time types for which data entries are stored
-in the file (must not be zero).
-.TP
-.B tzh_charcnt
-The number of bytes of time zone abbreviation strings
-stored in the file.
-.RE
-.PP
-The above header is followed by the following fields, whose lengths
-depend on the contents of the header:
-.IP * 2
-.B tzh_timecnt
-four-byte signed integer values sorted in ascending order.
-These values are written in network byte order.
-Each is used as a transition time (as returned by
-.BR time (2))
-at which the rules for computing local time change.
-.IP *
-.B tzh_timecnt
-one-byte unsigned integer values;
-each one but the last tells which of the different types of local time types
-described in the file is associated with the time period
-starting with the same-indexed transition time
-and continuing up to but not including the next transition time.
-(The last time type is present only for consistency checking with the
-POSIX-style TZ string described below.)
-These values serve as indices into the next field.
-.IP *
-.B tzh_typecnt
-.B ttinfo
-entries, each defined as follows:
-.in +.5i
-.sp
-.nf
-.ta .5i +\w'unsigned char\0\0'u
-struct ttinfo {
- int32_t tt_utoff;
- unsigned char tt_isdst;
- unsigned char tt_desigidx;
-};
-.in -.5i
-.fi
-.sp
-Each structure is written as a four-byte signed integer value for
-.BR tt_utoff ,
-in network byte order, followed by a one-byte boolean for
-.B tt_isdst
-and a one-byte value for
-.BR tt_desigidx .
-In each structure,
-.B tt_utoff
-gives the number of seconds to be added to UT,
-.B tt_isdst
-tells whether
-.B tm_isdst
-should be set by
-.BR localtime (3)
-and
-.B tt_desigidx
-serves as an index into the array of time zone abbreviation bytes
-that follow the
-.B ttinfo
-entries in the file; if the designated string is "\*-00", the
-.B ttinfo
-entry is a placeholder indicating that local time is unspecified.
-The
-.B tt_utoff
-value is never equal to \-2**31, to let 32-bit clients negate it without
-overflow.
-Also, in realistic applications
-.B tt_utoff
-is in the range [\-89999, 93599] (i.e., more than \-25 hours and less
-than 26 hours); this allows easy support by implementations that
-already support the POSIX-required range [\-24:59:59, 25:59:59].
-.IP *
-.B tzh_charcnt
-bytes that represent time zone designations,
-which are null-terminated byte strings, each indexed by the
-.B tt_desigidx
-values mentioned above.
-The byte strings can overlap if one is a suffix of the other.
-The encoding of these strings is not specified.
-.IP *
-.B tzh_leapcnt
-pairs of four-byte values, written in network byte order;
-the first value of each pair gives the nonnegative time
-(as returned by
-.BR time (2))
-at which a leap second occurs or at which the leap second table expires;
-the second is a signed integer specifying the correction, which is the
-.I total
-number of leap seconds to be applied during the time period
-starting at the given time.
-The pairs of values are sorted in strictly ascending order by time.
-Each pair denotes one leap second, either positive or negative,
-except that if the last pair has the same correction as the previous one,
-the last pair denotes the leap second table's expiration time.
-Each leap second is at the end of a UTC calendar month.
-The first leap second has a nonnegative occurrence time,
-and is a positive leap second if and only if its correction is positive;
-the correction for each leap second after the first differs
-from the previous leap second by either 1 for a positive leap second,
-or \-1 for a negative leap second.
-If the leap second table is empty, the leap-second correction is zero
-for all timestamps;
-otherwise, for timestamps before the first occurrence time,
-the leap-second correction is zero if the first pair's correction is 1 or \-1,
-and is unspecified otherwise (which can happen only in files
-truncated at the start).
-.IP *
-.B tzh_ttisstdcnt
-standard/wall indicators, each stored as a one-byte boolean;
-they tell whether the transition times associated with local time types
-were specified as standard time or local (wall clock) time.
-.IP *
-.B tzh_ttisutcnt
-UT/local indicators, each stored as a one-byte boolean;
-they tell whether the transition times associated with local time types
-were specified as UT or local time.
-If a UT/local indicator is set, the corresponding standard/wall indicator
-must also be set.
-.PP
-The standard/wall and UT/local indicators were designed for
-transforming a TZif file's transition times into transitions appropriate
-for another time zone specified via a POSIX-style TZ string that lacks rules.
-For example, when TZ="EET\*-2EEST" and there is no TZif file "EET\*-2EEST",
-the idea was to adapt the transition times from a TZif file with the
-well-known name "posixrules" that is present only for this purpose and
-is a copy of the file "Europe/Brussels", a file with a different UT offset.
-POSIX does not specify this obsolete transformational behavior,
-the default rules are installation-dependent, and no implementation
-is known to support this feature for timestamps past 2037,
-so users desiring (say) Greek time should instead specify
-TZ="Europe/Athens" for better historical coverage, falling back on
-TZ="EET\*-2EEST,M3.5.0/3,M10.5.0/4" if POSIX conformance is required
-and older timestamps need not be handled accurately.
-.PP
-The
-.BR localtime (3)
-function
-normally uses the first
-.B ttinfo
-structure in the file
-if either
-.B tzh_timecnt
-is zero or the time argument is less than the first transition time recorded
-in the file.
-.SS Version 2 format
-For version-2-format timezone files,
-the above header and data are followed by a second header and data,
-identical in format except that
-eight bytes are used for each transition time or leap second time.
-(Leap second counts remain four bytes.)
-After the second header and data comes a newline-enclosed,
-POSIX-TZ-environment-variable-style string for use in handling instants
-after the last transition time stored in the file
-or for all instants if the file has no transitions.
-The POSIX-style TZ string is empty (i.e., nothing between the newlines)
-if there is no POSIX-style representation for such instants.
-If nonempty, the POSIX-style TZ string must agree with the local time
-type after the last transition time if present in the eight-byte data;
-for example, given the string
-.q "WET0WEST,M3.5.0/1,M10.5.0"
-then if a last transition time is in July, the transition's local time
-type must specify a daylight-saving time abbreviated
-.q "WEST"
-that is one hour east of UT.
-Also, if there is at least one transition, time type 0 is associated
-with the time period from the indefinite past up to but not including
-the earliest transition time.
-.SS Version 3 format
-For version-3-format timezone files, the POSIX-TZ-style string may
-use two minor extensions to the POSIX TZ format, as described in
-.BR newtzset (3).
-First, the hours part of its transition times may be signed and range from
-\-167 through 167 instead of the POSIX-required unsigned values
-from 0 through 24.
-Second, DST is in effect all year if it starts
-January 1 at 00:00 and ends December 31 at 24:00 plus the difference
-between daylight saving and standard time.
-.SS Version 4 format
-For version-4-format TZif files,
-the first leap second record can have a correction that is neither
-+1 nor \-1, to represent truncation of the TZif file at the start.
-Also, if two or more leap second transitions are present and the last
-entry's correction equals the previous one, the last entry
-denotes the expiration of the leap second table instead of a leap second;
-timestamps after this expiration are unreliable in that future
-releases will likely add leap second entries after the expiration, and
-the added leap seconds will change how post-expiration timestamps are treated.
-.SS Interoperability considerations
-Future changes to the format may append more data.
-.PP
-Version 1 files are considered a legacy format and
-should not be generated, as they do not support transition
-times after the year 2038.
-Readers that understand only Version 1 must ignore
-any data that extends beyond the calculated end of the version
-1 data block.
-.PP
-Other than version 1, writers should generate
-the lowest version number needed by a file's data.
-For example, a writer should generate a version 4 file
-only if its leap second table either expires or is truncated at the start.
-Likewise, a writer not generating a version 4 file
-should generate a version 3 file only if
-TZ string extensions are necessary to accurately
-model transition times.
-.PP
-The sequence of time changes defined by the version 1
-header and data block should be a contiguous sub-sequence
-of the time changes defined by the version 2+ header and data
-block, and by the footer.
-This guideline helps obsolescent version 1 readers
-agree with current readers about timestamps within the
-contiguous sub-sequence. It also lets writers not
-supporting obsolescent readers use a
-.B tzh_timecnt
-of zero
-in the version 1 data block to save space.
-.PP
-When a TZif file contains a leap second table expiration
-time, TZif readers should either refuse to process
-post-expiration timestamps, or process them as if the expiration
-time did not exist (possibly with an error indication).
-.PP
-Time zone designations should consist of at least three (3)
-and no more than six (6) ASCII characters from the set of
-alphanumerics,
-.q "\*-",
-and
-.q "+".
-This is for compatibility with POSIX requirements for
-time zone abbreviations.
-.PP
-When reading a version 2 or higher file, readers
-should ignore the version 1 header and data block except for
-the purpose of skipping over them.
-.PP
-Readers should calculate the total lengths of the
-headers and data blocks and check that they all fit within
-the actual file size, as part of a validity check for the file.
-.PP
-When a positive leap second occurs, readers should append an extra
-second to the local minute containing the second just before the leap
-second. If this occurs when the UTC offset is not a multiple of 60
-seconds, the leap second occurs earlier than the last second of the
-local minute and the minute's remaining local seconds are numbered
-through 60 instead of the usual 59; the UTC offset is unaffected.
-.SS Common interoperability issues
-This section documents common problems in reading or writing TZif files.
-Most of these are problems in generating TZif files for use by
-older readers.
-The goals of this section are:
-.IP * 2
-to help TZif writers output files that avoid common
-pitfalls in older or buggy TZif readers,
-.IP *
-to help TZif readers avoid common pitfalls when reading
-files generated by future TZif writers, and
-.IP *
-to help any future specification authors see what sort of
-problems arise when the TZif format is changed.
-.PP
-When new versions of the TZif format have been defined, a
-design goal has been that a reader can successfully use a TZif
-file even if the file is of a later TZif version than what the
-reader was designed for.
-When complete compatibility was not achieved, an attempt was
-made to limit glitches to rarely used timestamps and allow
-simple partial workarounds in writers designed to generate
-new-version data useful even for older-version readers.
-This section attempts to document these compatibility issues and
-workarounds, as well as to document other common bugs in
-readers.
-.PP
-Interoperability problems with TZif include the following:
-.IP * 2
-Some readers examine only version 1 data.
-As a partial workaround, a writer can output as much version 1
-data as possible.
-However, a reader should ignore version 1 data, and should use
-version 2+ data even if the reader's native timestamps have only
-32 bits.
-.IP *
-Some readers designed for version 2 might mishandle
-timestamps after a version 3 or higher file's last transition, because
-they cannot parse extensions to POSIX in the TZ-like string.
-As a partial workaround, a writer can output more transitions
-than necessary, so that only far-future timestamps are
-mishandled by version 2 readers.
-.IP *
-Some readers designed for version 2 do not support
-permanent daylight saving time with transitions after 24:00
-\(en e.g., a TZ string
-.q "EST5EDT,0/0,J365/25"
-denoting permanent Eastern Daylight Time
-(\-04).
-As a workaround, a writer can substitute standard time
-for two time zones east, e.g.,
-.q "XXX3EDT4,0/0,J365/23"
-for a time zone with a never-used standard time (XXX, \-03)
-and negative daylight saving time (EDT, \-04) all year.
-Alternatively,
-as a partial workaround a writer can substitute standard time
-for the next time zone east \(en e.g.,
-.q "AST4"
-for permanent
-Atlantic Standard Time (\-04).
-.IP *
-Some readers designed for version 2 or 3, and that require strict
-conformance to RFC 8536, reject version 4 files whose leap second
-tables are truncated at the start or that end in expiration times.
-.IP *
-Some readers ignore the footer, and instead predict future
-timestamps from the time type of the last transition.
-As a partial workaround, a writer can output more transitions
-than necessary.
-.IP *
-Some readers do not use time type 0 for timestamps before
-the first transition, in that they infer a time type using a
-heuristic that does not always select time type 0.
-As a partial workaround, a writer can output a dummy (no-op)
-first transition at an early time.
-.IP *
-Some readers mishandle timestamps before the first
-transition that has a timestamp not less than \-2**31.
-Readers that support only 32-bit timestamps are likely to be
-more prone to this problem, for example, when they process
-64-bit transitions only some of which are representable in 32
-bits.
-As a partial workaround, a writer can output a dummy
-transition at timestamp \-2**31.
-.IP *
-Some readers mishandle a transition if its timestamp has
-the minimum possible signed 64-bit value.
-Timestamps less than \-2**59 are not recommended.
-.IP *
-Some readers mishandle POSIX-style TZ strings that
-contain
-.q "<"
-or
-.q ">".
-As a partial workaround, a writer can avoid using
-.q "<"
-or
-.q ">"
-for time zone abbreviations containing only alphabetic
-characters.
-.IP *
-Many readers mishandle time zone abbreviations that contain
-non-ASCII characters.
-These characters are not recommended.
-.IP *
-Some readers may mishandle time zone abbreviations that
-contain fewer than 3 or more than 6 characters, or that
-contain ASCII characters other than alphanumerics,
-.q "\*-",
-and
-.q "+".
-These abbreviations are not recommended.
-.IP *
-Some readers mishandle TZif files that specify
-daylight-saving time UT offsets that are less than the UT
-offsets for the corresponding standard time.
-These readers do not support locations like Ireland, which
-uses the equivalent of the POSIX TZ string
-.q "IST\*-1GMT0,M10.5.0,M3.5.0/1",
-observing standard time
-(IST, +01) in summer and daylight saving time (GMT, +00) in winter.
-As a partial workaround, a writer can output data for the
-equivalent of the POSIX TZ string
-.q "GMT0IST,M3.5.0/1,M10.5.0",
-thus swapping standard and daylight saving time.
-Although this workaround misidentifies which part of the year
-uses daylight saving time, it records UT offsets and time zone
-abbreviations correctly.
-.IP *
-Some readers generate ambiguous timestamps for positive leap seconds
-that occur when the UTC offset is not a multiple of 60 seconds.
-For example, in a timezone with UTC offset +01:23:45 and with
-a positive leap second 78796801 (1972-06-30 23:59:60 UTC), some readers will
-map both 78796800 and 78796801 to 01:23:45 local time the next day
-instead of mapping the latter to 01:23:46, and they will map 78796815 to
-01:23:59 instead of to 01:23:60.
-This has not yet been a practical problem, since no civil authority
-has observed such UTC offsets since leap seconds were
-introduced in 1972.
-.PP
-Some interoperability problems are reader bugs that
-are listed here mostly as warnings to developers of readers.
-.IP * 2
-Some readers do not support negative timestamps.
-Developers of distributed applications should keep this
-in mind if they need to deal with pre-1970 data.
-.IP *
-Some readers mishandle timestamps before the first
-transition that has a nonnegative timestamp.
-Readers that do not support negative timestamps are likely to
-be more prone to this problem.
-.IP *
-Some readers mishandle time zone abbreviations like
-.q "\*-08"
-that contain
-.q "+",
-.q "\*-",
-or digits.
-.IP *
-Some readers mishandle UT offsets that are out of the
-traditional range of \-12 through +12 hours, and so do not
-support locations like Kiritimati that are outside this
-range.
-.IP *
-Some readers mishandle UT offsets in the range [\-3599, \-1]
-seconds from UT, because they integer-divide the offset by
-3600 to get 0 and then display the hour part as
-.q "+00".
-.IP *
-Some readers mishandle UT offsets that are not a multiple
-of one hour, or of 15 minutes, or of 1 minute.
-.SH SEE ALSO
-.BR time (2),
-.BR localtime (3),
-.BR tzset (3),
-.BR tzselect (8),
-.BR zdump (8),
-.BR zic (8).
-.PP
-Olson A, Eggert P, Murchison K. The Time Zone Information Format (TZif).
-2019 Feb.
-.UR https://\:datatracker.ietf.org/\:doc/\:html/\:rfc8536
-Internet RFC 8536
-.UE
-.UR https://\:doi.org/\:10.17487/\:RFC8536
-doi:10.17487/RFC8536
-.UE .
diff --git a/man5/utmp.5 b/man5/utmp.5
deleted file mode 100644
index 0c3430abd..000000000
--- a/man5/utmp.5
+++ /dev/null
@@ -1,348 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@cantor.informatik.rwth-aachen.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified 1993-07-25 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 1995-02-26 by Michael Haardt
-.\" Modified 1996-07-20 by Michael Haardt
-.\" Modified 1997-07-02 by Nicolás Lichtmaier <nick@debian.org>
-.\" Modified 2004-10-31 by aeb, following Gwenole Beauchesne
-.TH utmp 5 (date) "Linux man-pages (unreleased)"
-.SH NAME
-utmp, wtmp \- login records
-.SH SYNOPSIS
-.nf
-.B #include <utmp.h>
-.fi
-.SH DESCRIPTION
-The
-.I utmp
-file allows one to discover information about who is currently using the
-system.
-There may be more users currently using the system, because not
-all programs use utmp logging.
-.PP
-.B Warning:
-.I utmp
-must not be writable by the user class "other",
-because many system programs (foolishly)
-depend on its integrity.
-You risk faked system logfiles and
-modifications of system files if you leave
-.I utmp
-writable to any user other than the owner and group owner of the file.
-.PP
-The file is a sequence of
-.I utmp
-structures,
-declared as follows in
-.I <utmp.h>
-(note that this is only one of several definitions
-around; details depend on the version of libc):
-.PP
-.in +4n
-.EX
-/* Values for ut_type field, below */
-\&
-#define EMPTY 0 /* Record does not contain valid info
- (formerly known as UT_UNKNOWN on Linux) */
-#define RUN_LVL 1 /* Change in system run\-level (see
- \fBinit\fP(1)) */
-#define BOOT_TIME 2 /* Time of system boot (in \fIut_tv\fP) */
-#define NEW_TIME 3 /* Time after system clock change
- (in \fIut_tv\fP) */
-#define OLD_TIME 4 /* Time before system clock change
- (in \fIut_tv\fP) */
-#define INIT_PROCESS 5 /* Process spawned by \fBinit\fP(1) */
-#define LOGIN_PROCESS 6 /* Session leader process for user login */
-#define USER_PROCESS 7 /* Normal process */
-#define DEAD_PROCESS 8 /* Terminated process */
-#define ACCOUNTING 9 /* Not implemented */
-\&
-#define UT_LINESIZE 32
-#define UT_NAMESIZE 32
-#define UT_HOSTSIZE 256
-\&
-struct exit_status { /* Type for ut_exit, below */
- short e_termination; /* Process termination status */
- short e_exit; /* Process exit status */
-};
-\&
-struct utmp {
- short ut_type; /* Type of record */
- pid_t ut_pid; /* PID of login process */
- char ut_line[UT_LINESIZE]; /* Device name of tty \- "/dev/" */
- char ut_id[4]; /* Terminal name suffix,
- or inittab(5) ID */
- char ut_user[UT_NAMESIZE]; /* Username */
- char ut_host[UT_HOSTSIZE]; /* Hostname for remote login, or
- kernel version for run\-level
- messages */
- struct exit_status ut_exit; /* Exit status of a process
- marked as DEAD_PROCESS; not
- used by Linux init(1) */
- /* The ut_session and ut_tv fields must be the same size when
- compiled 32\- and 64\-bit. This allows data files and shared
- memory to be shared between 32\- and 64\-bit applications. */
-#if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32
- int32_t ut_session; /* Session ID (\fBgetsid\fP(2)),
- used for windowing */
- struct {
- int32_t tv_sec; /* Seconds */
- int32_t tv_usec; /* Microseconds */
- } ut_tv; /* Time entry was made */
-#else
- long ut_session; /* Session ID */
- struct timeval ut_tv; /* Time entry was made */
-#endif
-\&
- int32_t ut_addr_v6[4]; /* Internet address of remote
- host; IPv4 address uses
- just ut_addr_v6[0] */
- char __unused[20]; /* Reserved for future use */
-};
-\&
-/* Backward compatibility hacks */
-#define ut_name ut_user
-#ifndef _NO_UT_TIME
-#define ut_time ut_tv.tv_sec
-#endif
-#define ut_xtime ut_tv.tv_sec
-#define ut_addr ut_addr_v6[0]
-.EE
-.in
-.PP
-This structure gives the name of the special file associated with the
-user's terminal, the user's login name, and the time of login in the form
-of
-.BR time (2).
-String fields are terminated by a null byte (\[aq]\e0\[aq])
-if they are shorter than the size
-of the field.
-.PP
-The first entries ever created result from
-.BR init (1)
-processing
-.BR inittab (5).
-Before an entry is processed, though,
-.BR init (1)
-cleans up utmp by setting \fIut_type\fP to \fBDEAD_PROCESS\fP, clearing
-\fIut_user\fP, \fIut_host\fP, and \fIut_time\fP with null bytes for each
-record which \fIut_type\fP is not \fBDEAD_PROCESS\fP or \fBRUN_LVL\fP
-and where no process with PID \fIut_pid\fP exists.
-If no empty record
-with the needed \fIut_id\fP can be found,
-.BR init (1)
-creates a new one.
-It sets \fIut_id\fP from the inittab, \fIut_pid\fP and \fIut_time\fP to the
-current values, and \fIut_type\fP to \fBINIT_PROCESS\fP.
-.PP
-.BR mingetty (8)
-(or
-.BR agetty (8))
-locates the entry by the PID, changes \fIut_type\fP to
-\fBLOGIN_PROCESS\fP, changes \fIut_time\fP, sets \fIut_line\fP, and waits
-for connection to be established.
-.BR login (1),
-after a user has been
-authenticated, changes \fIut_type\fP to \fBUSER_PROCESS\fP, changes
-\fIut_time\fP, and sets \fIut_host\fP and \fIut_addr\fP.
-Depending on
-.BR mingetty (8)
-(or
-.BR agetty (8))
-and
-.BR login (1),
-records may be located by
-\fIut_line\fP instead of the preferable \fIut_pid\fP.
-.PP
-When
-.BR init (1)
-finds that a process has exited, it locates its utmp entry by
-.IR ut_pid ,
-sets
-.I ut_type
-to
-.BR DEAD_PROCESS ,
-and clears
-.IR ut_user ,
-.IR ut_host ,
-and
-.I ut_time
-with null bytes.
-.PP
-.BR xterm (1)
-and other terminal emulators directly create a
-\fBUSER_PROCESS\fP record and generate the \fIut_id\fP by using the
-string that suffix part of the terminal name (the characters
-following
-.IR /dev/ [pt] ty ).
-If they find a \fBDEAD_PROCESS\fP for this ID,
-they recycle it, otherwise they create a new entry.
-If they can, they
-will mark it as \fBDEAD_PROCESS\fP on exiting and it is advised that
-they null \fIut_line\fP, \fIut_time\fP, \fIut_user\fP, and \fIut_host\fP
-as well.
-.PP
-.BR telnetd (8)
-sets up a \fBLOGIN_PROCESS\fP entry and leaves the rest to
-.BR login (1)
-as usual.
-After the telnet session ends,
-.BR telnetd (8)
-cleans up utmp in the described way.
-.PP
-The \fIwtmp\fP file records all logins and logouts.
-Its format is exactly like \fIutmp\fP except that a null username
-indicates a logout
-on the associated terminal.
-Furthermore, the terminal name \fB\[ti]\fP
-with username \fBshutdown\fP or \fBreboot\fP indicates a system
-shutdown or reboot and the pair of terminal names \fB|\fP/\fB}\fP
-logs the old/new system time when
-.BR date (1)
-changes it.
-\fIwtmp\fP is maintained by
-.BR login (1),
-.BR init (1),
-and some versions of
-.BR getty (8)
-(e.g.,
-.BR mingetty (8)
-or
-.BR agetty (8)).
-None of these programs creates the file, so if it is
-removed, record-keeping is turned off.
-.SH FILES
-.I /var/run/utmp
-.br
-.I /var/log/wtmp
-.SH VERSIONS
-POSIX.1 does not specify a
-.I utmp
-structure, but rather one named
-.I utmpx
-(as part of the XSI extension),
-with specifications for the fields
-.IR ut_type ,
-.IR ut_pid ,
-.IR ut_line ,
-.IR ut_id ,
-.IR ut_user ,
-and
-.IR ut_tv .
-POSIX.1 does not specify the lengths of the
-.I ut_line
-and
-.I ut_user
-fields.
-.PP
-Linux defines the
-.I utmpx
-structure to be the same as the
-.I utmp
-structure.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux utmp entries conform neither to v7/BSD nor to System V; they are a
-mix of the two.
-.PP
-v7/BSD has fewer fields; most importantly it lacks
-\fIut_type\fP, which causes native v7/BSD-like programs to display (for
-example) dead or login entries.
-Further, there is no configuration file
-which allocates slots to sessions.
-BSD does so because it lacks \fIut_id\fP fields.
-.PP
-In Linux (as in System V), the \fIut_id\fP field of a
-record will never change once it has been set, which reserves that slot
-without needing a configuration file.
-Clearing \fIut_id\fP may result
-in race conditions leading to corrupted utmp entries and potential
-security holes.
-Clearing the abovementioned fields by filling them
-with null bytes is not required by System V semantics,
-but makes it possible to run
-many programs which assume BSD semantics and which do not modify utmp.
-Linux uses the BSD conventions for line contents, as documented above.
-.PP
-.\" mtk: What is the referrent of "them" in the following sentence?
-.\" System V only uses the type field to mark them and logs
-.\" informative messages such as \fB"new time"\fP in the line field.
-System V has no \fIut_host\fP or \fIut_addr_v6\fP fields.
-.SH NOTES
-Unlike various other
-systems, where utmp logging can be disabled by removing the file, utmp
-must always exist on Linux.
-If you want to disable
-.BR who (1),
-then do not make utmp world readable.
-.PP
-The file format is machine-dependent, so it is recommended that it be
-processed only on the machine architecture where it was created.
-.PP
-Note that on \fIbiarch\fP platforms, that is, systems which can run both
-32-bit and 64-bit applications (x86-64, ppc64, s390x, etc.),
-\fIut_tv\fP is the same size in 32-bit mode as in 64-bit mode.
-The same goes for \fIut_session\fP and \fIut_time\fP if they are present.
-This allows data files and shared memory to be shared between
-32-bit and 64-bit applications.
-This is achieved by changing the type of
-.I ut_session
-to
-.IR int32_t ,
-and that of
-.I ut_tv
-to a struct with two
-.I int32_t
-fields
-.I tv_sec
-and
-.IR tv_usec .
-Since \fIut_tv\fP may not be the same as \fIstruct timeval\fP,
-then instead of the call:
-.PP
-.in +4n
-.EX
-gettimeofday((struct timeval *) &ut.ut_tv, NULL);
-.EE
-.in
-.PP
-the following method of setting this field is recommended:
-.PP
-.in +4n
-.EX
-struct utmp ut;
-struct timeval tv;
-\&
-gettimeofday(&tv, NULL);
-ut.ut_tv.tv_sec = tv.tv_sec;
-ut.ut_tv.tv_usec = tv.tv_usec;
-.EE
-.in
-.\" .PP
-.\" Note that the \fIutmp\fP struct from libc5 has changed in libc6.
-.\" Because of this,
-.\" binaries using the old libc5 struct will corrupt
-.\" .IR /var/run/utmp " and/or " /var/log/wtmp .
-.\" .SH BUGS
-.\" This man page is based on the libc5 one, things may work differently now.
-.SH SEE ALSO
-.BR ac (1),
-.BR date (1),
-.BR init (1),
-.BR last (1),
-.BR login (1),
-.BR logname (1),
-.BR lslogins (1),
-.BR users (1),
-.BR utmpdump (1),
-.BR who (1),
-.BR getutent (3),
-.BR getutmp (3),
-.BR login (3),
-.BR logout (3),
-.BR logwtmp (3),
-.BR updwtmp (3)
diff --git a/man5/utmpx.5 b/man5/utmpx.5
deleted file mode 100644
index 1fa9e5a5d..000000000
--- a/man5/utmpx.5
+++ /dev/null
@@ -1 +0,0 @@
-.so man5/utmp.5
diff --git a/man5/wtmp.5 b/man5/wtmp.5
deleted file mode 100644
index 1fa9e5a5d..000000000
--- a/man5/wtmp.5
+++ /dev/null
@@ -1 +0,0 @@
-.so man5/utmp.5
diff --git a/man6/intro.6 b/man6/intro.6
deleted file mode 100644
index 4a3dd1ed9..000000000
--- a/man6/intro.6
+++ /dev/null
@@ -1,17 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sat Jul 24 17:19:57 1993 by Rik Faith (faith@cs.unc.edu)
-.TH intro 6 (date) "Linux man-pages (unreleased)"
-.SH NAME
-intro \- introduction to games
-.SH DESCRIPTION
-Section 6 of the manual describes the games and funny little programs
-available on the system.
-.SH NOTES
-.SS Authors and copyright conditions
-Look at the header of the manual page source for the author(s) and copyright
-conditions.
-Note that these can be different from page to page!
diff --git a/man7/address_families.7 b/man7/address_families.7
deleted file mode 100644
index 0e00f113c..000000000
--- a/man7/address_families.7
+++ /dev/null
@@ -1,390 +0,0 @@
-.\" Copyright (c) 2018 by Eugene Syromyatnikov <evgsyr@gmail.com>,
-.\" and Copyright (c) 2018 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH address_families 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-address_families \- socket address families (domains)
-.SH SYNOPSIS
-.nf
-.BR "#include <sys/types.h>" " /* See NOTES */"
-.B #include <sys/socket.h>
-.PP
-.BI "int socket(int " domain ", int " type ", int " protocol );
-.fi
-.SH DESCRIPTION
-The
-.I domain
-argument of the
-.BR socket (2)
-specifies a communication domain; this selects the protocol
-family which will be used for communication.
-These families are defined in
-.IR <sys/socket.h> .
-The formats currently understood by the Linux kernel include:
-.TP
-.BR AF_UNIX ", " AF_LOCAL
-Local communication.
-For further information, see
-.BR unix (7).
-.TP
-.B AF_INET
-IPv4 Internet protocols.
-For further information, see
-.BR ip (7).
-.TP
-.B AF_AX25
-Amateur radio AX.25 protocol.
-For further information, see
-.BR ax25 (4).
-.\" Part of ax25-tools
-.TP
-.B AF_IPX
-IPX \- Novell protocols.
-.TP
-.B AF_APPLETALK
-AppleTalk
-For further information, see
-.BR ddp (7).
-.TP
-.B AF_NETROM
-AX.25 packet layer protocol.
-For further information, see
-.BR netrom (4),
-.\" Part of ax25-tools package
-.UR https://www.tldp.org/HOWTO/AX25-HOWTO/x61.html
-.I The Packet Radio Protocols and Linux
-.UE
-and the
-.IR AX.25 ", " NET/ROM ", and " "ROSE network programming"
-chapters of the
-.UR https://www.tldp.org/HOWTO/AX25-HOWTO/x2107.html
-.I Linux Amateur Radio AX.25 HOWTO
-.UE .
-.TP
-.B AF_BRIDGE
-Can't be used for creating sockets;
-mostly used for bridge links in
-.BR rtnetlink (7)
-protocol commands.
-.TP
-.B AF_ATMPVC
-Access to raw ATM Permanent Virtual Circuits (PVCs).
-For further information, see the
-.UR https://www.tldp.org/HOWTO/text/ATM-Linux-HOWTO
-.I ATM on Linux HOWTO
-.UE .
-.TP
-.B AF_X25
-ITU-T X.25 / ISO-8208 protocol.
-For further information, see
-.BR x25 (7).
-.TP
-.B AF_INET6
-IPv6 Internet protocols.
-For further information, see
-.BR ipv6 (7).
-.TP
-.B AF_ROSE
-RATS (Radio Amateur Telecommunications Society).
-Open Systems environment (ROSE) AX.25 packet layer protocol.
-For further information, see the resources listed for
-.BR AF_NETROM .
-.TP
-.B AF_DECnet
-DECet protocol sockets.
-See
-.I Documentation/networking/decnet.txt
-in the Linux kernel source tree for details.
-.TP
-.B AF_NETBEUI
-Reserved for "802.2LLC project"; never used.
-.TP
-.B AF_SECURITY
-This was a short-lived (between Linux 2.1.30 and 2.1.99pre2) protocol family
-for firewall upcalls.
-.TP
-.B AF_KEY
-Key management protocol, originally developed for usage with IPsec
-(since Linux 2.1.38).
-This has no relation to
-.BR keyctl (2)
-and the in-kernel key storage facility.
-See
-.UR https://tools.ietf.org/html/rfc2367
-RFC 2367
-.I PF_KEY Key Management API, Version 2
-.UE
-for details.
-.TP
-.B AF_NETLINK
-Kernel user interface device.
-For further information, see
-.BR netlink (7).
-.TP
-.B AF_PACKET
-Low-level packet interface.
-For further information, see
-.BR packet (7).
-.\" .TP
-.\" .B AF_ASH
-.\" Asynchronous Serial Host protocol (?)
-.\" Notes from Eugene Syromyatnikov:
-.\" I haven't found any concrete information about this one;
-.\" it never was implemented in Linux, at least, judging by historical
-.\" repos. There is also this file (and its variations):
-.\" https://github.com/ecki/net-tools/blob/master/lib/ash.c
-.\" ( https://github.com/ecki/net-tools/commits/master/lib/ash.c )
-.\" it mentions "NET-2 distribution" (BSD Net/2?), but, again, I failed
-.\" to find any mentions of "ash" protocol there.
-.\" (for the reference:
-.\" ftp://pdp11.org.ru/pub/unix-archive/Distributions/UCB/Net2/net2.tar.gz )
-.\" Another source that mentions it is
-.\" https://www.silabs.com/documents/public/user-guides/ug101-uart-gateway-protocol-reference.pdf
-.\" https://www.silabs.com/documents/public/user-guides/ug115-ashv3-protocol-reference.pdf
-.\" but I doubt that it's related, as former files use 64-byte addresses and
-.\" "Hamming-encode of hops", and that's barely combines with a protocol
-.\" that is mainly used over serial connection.
-.TP
-.B AF_ECONET
-.\" commit: 349f29d841dbae854bd7367be7c250401f974f47
-Acorn Econet protocol (removed in Linux 3.5).
-See the
-.UR http://www.8bs.com/othrdnld/manuals/econet.shtml
-Econet documentation
-.UE
-for details.
-.TP
-.B AF_ATMSVC
-Access to ATM Switched Virtual Circuits (SVCs)
-See the
-.UR https://www.tldp.org/HOWTO/text/ATM-Linux-HOWTO
-.I ATM on Linux HOWTO
-.UE
-for details.
-.TP
-.B AF_RDS
-.\" commit: 639b321b4d8f4e412bfbb2a4a19bfebc1e68ace4
-Reliable Datagram Sockets (RDS) protocol (since Linux 2.6.30).
-RDS over RDMA has no relation to
-.B AF_SMC
-or
-.BR AF_XDP .
-For further information, see
-.\" rds-tools: https://github.com/oracle/rds-tools/blob/master/rds.7
-.\" rds-tools: https://github.com/oracle/rds-tools/blob/master/rds-rdma.7
-.BR rds (7),
-.BR rds\-rdma (7),
-and
-.I Documentation/networking/rds.txt
-in the Linux kernel source tree.
-.TP
-.B AF_IRDA
-.\" commits: 1ca163afb6fd569b, d64c2a76123f0300
-Socket interface over IrDA
-(moved to staging in Linux 4.14, removed in Linux 4.17).
-.\" irda-utils: https://sourceforge.net/p/irda/code/HEAD/tree/tags/IRDAUTILS_0_9_18/irda-utils/man/irda.7.gz?format=raw
-For further information, see
-.BR irda (7).
-.TP
-.B AF_PPPOX
-Generic PPP transport layer, for setting up L2 tunnels
-(L2TP and PPPoE).
-See
-.I Documentation/networking/l2tp.txt
-in the Linux kernel source tree for details.
-.TP
-.B AF_WANPIPE
-.\" commits: ce0ecd594d78710422599918a608e96dd1ee6024
-Legacy protocol for wide area network (WAN) connectivity
-that was used by Sangoma WAN cards (called "WANPIPE");
-removed in Linux 2.6.21.
-.TP
-.B AF_LLC
-.\" linux-history commit: 34beb106cde7da233d4df35dd3d6cf4fee937caa
-Logical link control (IEEE 802.2 LLC) protocol, upper part
-of data link layer of ISO/OSI networking protocol stack
-(since Linux 2.4);
-has no relation to
-.BR AF_PACKET .
-See chapter
-.I 13.5.3. Logical Link Control
-in
-.I Understanding Linux Kernel Internals
-(O'Reilly Media, 2006)
-and
-.I IEEE Standards for Local Area Networks: Logical Link Control
-(The Institute of Electronics and Electronics Engineers, Inc.,
-New York, New York, 1985)
-for details.
-See also
-.UR https://wiki.linuxfoundation.org/networking/llc
-some historical notes
-.UE
-regarding its development.
-.TP
-.B AF_IB
-.\" commits: 8d36eb01da5d371f..ce117ffac2e93334
-InfiniBand native addressing (since Linux 3.11).
-.TP
-.B AF_MPLS
-.\" commits: 0189197f441602acdca3f97750d392a895b778fd
-Multiprotocol Label Switching (since Linux 4.1);
-mostly used for configuring MPLS routing via
-.BR netlink (7),
-as it doesn't expose ability to create sockets to user space.
-.TP
-.B AF_CAN
-.\" commits: 8dbde28d9711475a..5423dd67bd0108a1
-Controller Area Network automotive bus protocol (since Linux 2.6.25).
-See
-.I Documentation/networking/can.rst
-in the Linux kernel source tree for details.
-.TP
-.B AF_TIPC
-.\" commits: b97bf3fd8f6a16966d4f18983b2c40993ff937d4
-TIPC, "cluster domain sockets" protocol (since Linux 2.6.16).
-See
-.UR http://tipc.io/programming.html
-.I TIPC Programmer's Guide
-.UE
-and the
-.UR http://tipc.io/protocol.html
-protocol description
-.UE
-for details.
-.TP
-.B AF_BLUETOOTH
-.\" commits: 8d36eb01da5d371f..ce117ffac2e93334
-Bluetooth low-level socket protocol (since Linux 3.11).
-See
-.UR https://git.kernel.org\:/pub/scm\:/bluetooth/bluez.git\:/tree/doc/mgmt-api.txt
-.I Bluetooth Management API overview
-.UE
-and
-.UR https://people.csail.mit.edu/albert/bluez-intro/
-.I An Introduction to Bluetooth Programming
-by Albert Huang
-.UE
-for details.
-.TP
-.B AF_IUCV
-.\" commit: eac3731bd04c7131478722a3c148b78774553116
-IUCV (inter-user communication vehicle) z/VM protocol
-for hypervisor-guest interaction (since Linux 2.6.21);
-has no relation to
-.B AF_VSOCK
-and/or
-.B AF_SMC
-See
-.UR https://www.ibm.com\:/support\:/knowledgecenter\:/en/SSB27U_6.4.0\:/com.ibm.zvm.v640.hcpb4\:/iucv.htm
-.I IUCV protocol overview
-.UE
-for details.
-.TP
-.B AF_RXRPC
-.\" commit: 17926a79320afa9b95df6b977b40cca6d8713cea
-.\" http://people.redhat.com/~dhowells/rxrpc/
-.\" https://www.infradead.org/~dhowells/kafs/af_rxrpc_client.html
-.\" http://workshop.openafs.org/afsbpw09/talks/thu_2/kafs.pdf
-.\" http://pages.cs.wisc.edu/~remzi/OSTEP/dist-afs.pdf
-.\" http://web.mit.edu/kolya/afs/rx/rx-spec
-Rx, Andrew File System remote procedure call protocol
-(since Linux 2.6.22).
-See
-.I Documentation/networking/rxrpc.txt
-in the Linux kernel source tree for details.
-.TP
-.B AF_ISDN
-.\" commit: 1b2b03f8e514e4f68e293846ba511a948b80243c
-New "modular ISDN" driver interface protocol (since Linux 2.6.27).
-See the
-.UR http://www.misdn.eu/wiki/Main_Page/
-mISDN wiki
-.UE
-for details.
-.TP
-.B AF_PHONET
-.\" commit: 4b07b3f69a8471cdc142c51461a331226fef248a
-Nokia cellular modem IPC/RPC interface (since Linux 2.6.31).
-See
-.I Documentation/networking/phonet.txt
-in the Linux kernel source tree for details.
-.TP
-.B AF_IEEE802154
-.\" commit: 9ec7671603573ede31207eb5b0b3e1aa211b2854
-IEEE 802.15.4 WPAN (wireless personal area network) raw packet protocol
-(since Linux 2.6.31).
-See
-.I Documentation/networking/ieee802154.txt
-in the Linux kernel source tree for details.
-.TP
-.B AF_CAIF
-.\" commit: 529d6dad5bc69de14cdd24831e2a14264e93daa4
-.\" https://lwn.net/Articles/371017/
-.\" http://read.pudn.com/downloads157/doc/comm/698729/Misc/caif/Com%20CPU%20to%20Appl%20CPU%20Interface%20DESCRIPTION_LZN901%202002_revR1C.pdf
-.\" http://read.pudn.com/downloads157/doc/comm/698729/Misc/caif/Com%20CPU%20to%20Appl%20CPU%20Interface%20PROTOCOL%20SPECIFICATION_LZN901%201708_revR1A.pdf
-Ericsson's Communication CPU to Application CPU interface (CAIF) protocol
-(since Linux 2.6.36).
-See
-.I Documentation/networking/caif/Linux\-CAIF.txt
-in the Linux kernel source tree for details.
-.TP
-.B AF_ALG
-Interface to kernel crypto API (since Linux 2.6.38).
-See
-.I Documentation/crypto/userspace\-if.rst
-in the Linux kernel source tree for details.
-.TP
-.B AF_VSOCK
-.\" commit: d021c344051af91f42c5ba9fdedc176740cbd238
-VMWare VSockets protocol for hypervisor-guest interaction (since Linux 3.9);
-has no relation to
-.B AF_IUCV
-and
-.BR AF_SMC .
-For further information, see
-.BR vsock (7).
-.TP
-.B AF_KCM
-.\" commit: 03c8efc1ffeb6b82a22c1af8dd908af349563314
-KCM (kernel connection multiplexer) interface (since Linux 4.6).
-See
-.I Documentation/networking/kcm.txt
-in the Linux kernel source tree for details.
-.TP
-.B AF_QIPCRTR
-.\" commit: bdabad3e363d825ddf9679dd431cca0b2c30f881
-Qualcomm IPC router interface protocol (since Linux 4.7).
-.TP
-.B AF_SMC
-.\" commit: f3a3e248f3f7cd9a4bed334022704d7e7fc781bf
-SMC-R (shared memory communications over RDMA) protocol (since Linux 4.11),
-and SMC-D (shared memory communications, direct memory access) protocol
-for intra-node z/VM quest interaction (since Linux 4.19);
-has no relation to
-.BR AF_RDS ", " AF_IUCV
-or
-.BR AF_VSOCK .
-See
-.UR https://tools.ietf.org/html/rfc7609
-RFC 7609
-.I IBM's Shared Memory Communications over RDMA (SMC-R) Protocol
-.UE
-for details regarding SMC-R.
-See
-.UR https://www-01.ibm.com\:/software/network\:/commserver\:/SMC-D/index.html
-.I SMC-D Reference Information
-.UE
-for details regarding SMC-D.
-.TP
-.B AF_XDP
-.\" commit: c0c77d8fb787cfe0c3fca689c2a30d1dad4eaba7
-XDP (express data path) interface (since Linux 4.18).
-See
-.I Documentation/networking/af_xdp.rst
-in the Linux kernel source tree for details.
-.SH SEE ALSO
-.BR socket (2),
-.BR socket (7)
diff --git a/man7/aio.7 b/man7/aio.7
deleted file mode 100644
index 31edacf28..000000000
--- a/man7/aio.7
+++ /dev/null
@@ -1,446 +0,0 @@
-.\" Copyright (c) 2010 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH AIO 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-aio \- POSIX asynchronous I/O overview
-.SH DESCRIPTION
-The POSIX asynchronous I/O (AIO) interface allows applications
-to initiate one or more I/O operations that are performed
-asynchronously (i.e., in the background).
-The application can elect to be notified of completion of
-the I/O operation in a variety of ways:
-by delivery of a signal, by instantiation of a thread,
-or no notification at all.
-.PP
-The POSIX AIO interface consists of the following functions:
-.TP
-.BR aio_read (3)
-Enqueue a read request.
-This is the asynchronous analog of
-.BR read (2).
-.TP
-.BR aio_write (3)
-Enqueue a write request.
-This is the asynchronous analog of
-.BR write (2).
-.TP
-.BR aio_fsync (3)
-Enqueue a sync request for the I/O operations on a file descriptor.
-This is the asynchronous analog of
-.BR fsync (2)
-and
-.BR fdatasync (2).
-.TP
-.BR aio_error (3)
-Obtain the error status of an enqueued I/O request.
-.TP
-.BR aio_return (3)
-Obtain the return status of a completed I/O request.
-.TP
-.BR aio_suspend (3)
-Suspend the caller until one or more of a specified set of
-I/O requests completes.
-.TP
-.BR aio_cancel (3)
-Attempt to cancel outstanding I/O requests on a specified
-file descriptor.
-.TP
-.BR lio_listio (3)
-Enqueue multiple I/O requests using a single function call.
-.PP
-The
-.I aiocb
-("asynchronous I/O control block") structure defines
-parameters that control an I/O operation.
-An argument of this type is employed with all of the functions listed above.
-This structure has the following form:
-.PP
-.in +4n
-.EX
-#include <aiocb.h>
-\&
-struct aiocb {
- /* The order of these fields is implementation\-dependent */
-\&
- int aio_fildes; /* File descriptor */
- off_t aio_offset; /* File offset */
- volatile void *aio_buf; /* Location of buffer */
- size_t aio_nbytes; /* Length of transfer */
- int aio_reqprio; /* Request priority */
- struct sigevent aio_sigevent; /* Notification method */
- int aio_lio_opcode; /* Operation to be performed;
- lio_listio() only */
-\&
- /* Various implementation\-internal fields not shown */
-};
-\&
-/* Operation codes for \[aq]aio_lio_opcode\[aq]: */
-\&
-enum { LIO_READ, LIO_WRITE, LIO_NOP };
-.EE
-.in
-.PP
-The fields of this structure are as follows:
-.TP
-.I aio_fildes
-The file descriptor on which the I/O operation is to be performed.
-.TP
-.I aio_offset
-This is the file offset at which the I/O operation is to be performed.
-.TP
-.I aio_buf
-This is the buffer used to transfer data for a read or write operation.
-.TP
-.I aio_nbytes
-This is the size of the buffer pointed to by
-.IR aio_buf .
-.TP
-.I aio_reqprio
-This field specifies a value that is subtracted
-from the calling thread's real-time priority in order to
-determine the priority for execution of this I/O request (see
-.BR pthread_setschedparam (3)).
-The specified value must be between 0 and the value returned by
-.IR sysconf(_SC_AIO_PRIO_DELTA_MAX) .
-This field is ignored for file synchronization operations.
-.TP
-.I aio_sigevent
-This field is a structure that specifies how the caller is
-to be notified when the asynchronous I/O operation completes.
-Possible values for
-.I aio_sigevent.sigev_notify
-are
-.BR SIGEV_NONE ,
-.BR SIGEV_SIGNAL ,
-and
-.BR SIGEV_THREAD .
-See
-.BR sigevent (7)
-for further details.
-.TP
-.I aio_lio_opcode
-The type of operation to be performed; used only for
-.BR lio_listio (3).
-.PP
-In addition to the standard functions listed above,
-the GNU C library provides the following extension to the POSIX AIO API:
-.TP
-.BR aio_init (3)
-Set parameters for tuning the behavior of the glibc POSIX AIO implementation.
-.SH ERRORS
-.TP
-.B EINVAL
-The
-.I aio_reqprio
-field of the
-.I aiocb
-structure was less than 0,
-or was greater than the limit returned by the call
-.IR sysconf(_SC_AIO_PRIO_DELTA_MAX) .
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-glibc 2.1.
-.SH NOTES
-It is a good idea to zero out the control block buffer before use (see
-.BR memset (3)).
-The control block buffer and the buffer pointed to by
-.I aio_buf
-must not be changed while the I/O operation is in progress.
-These buffers must remain valid until the I/O operation completes.
-.PP
-Simultaneous asynchronous read or write operations using the same
-.I aiocb
-structure yield undefined results.
-.PP
-The current Linux POSIX AIO implementation is provided in user space by glibc.
-This has a number of limitations, most notably that maintaining multiple
-threads to perform I/O operations is expensive and scales poorly.
-Work has been in progress for some time on a kernel
-state-machine-based implementation of asynchronous I/O
-(see
-.BR io_submit (2),
-.BR io_setup (2),
-.BR io_cancel (2),
-.BR io_destroy (2),
-.BR io_getevents (2)),
-but this implementation hasn't yet matured to the point where
-the POSIX AIO implementation can be completely
-reimplemented using the kernel system calls.
-.\" http://lse.sourceforge.net/io/aio.html
-.\" http://lse.sourceforge.net/io/aionotes.txt
-.\" http://lwn.net/Articles/148755/
-.SH EXAMPLES
-The program below opens each of the files named in its command-line
-arguments and queues a request on the resulting file descriptor using
-.BR aio_read (3).
-The program then loops,
-periodically monitoring each of the I/O operations
-that is still in progress using
-.BR aio_error (3).
-Each of the I/O requests is set up to provide notification by delivery
-of a signal.
-After all I/O requests have completed,
-the program retrieves their status using
-.BR aio_return (3).
-.PP
-The
-.B SIGQUIT
-signal (generated by typing control-\e) causes the program to request
-cancelation of each of the outstanding requests using
-.BR aio_cancel (3).
-.PP
-Here is an example of what we might see when running this program.
-In this example, the program queues two requests to standard input,
-and these are satisfied by two lines of input containing
-"abc" and "x".
-.PP
-.in +4n
-.EX
-$ \fB./a.out /dev/stdin /dev/stdin\fP
-opened /dev/stdin on descriptor 3
-opened /dev/stdin on descriptor 4
-aio_error():
- for request 0 (descriptor 3): In progress
- for request 1 (descriptor 4): In progress
-\fBabc\fP
-I/O completion signal received
-aio_error():
- for request 0 (descriptor 3): I/O succeeded
- for request 1 (descriptor 4): In progress
-aio_error():
- for request 1 (descriptor 4): In progress
-\fBx\fP
-I/O completion signal received
-aio_error():
- for request 1 (descriptor 4): I/O succeeded
-All I/O requests completed
-aio_return():
- for request 0 (descriptor 3): 4
- for request 1 (descriptor 4): 2
-.EE
-.in
-.SS Program source
-\&
-.EX
-#include <fcntl.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <errno.h>
-#include <aio.h>
-#include <signal.h>
-\&
-#define BUF_SIZE 20 /* Size of buffers for read operations */
-\&
-#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); } while (0)
-\&
-struct ioRequest { /* Application\-defined structure for tracking
- I/O requests */
- int reqNum;
- int status;
- struct aiocb *aiocbp;
-};
-\&
-static volatile sig_atomic_t gotSIGQUIT = 0;
- /* On delivery of SIGQUIT, we attempt to
- cancel all outstanding I/O requests */
-\&
-static void /* Handler for SIGQUIT */
-quitHandler(int sig)
-{
- gotSIGQUIT = 1;
-}
-\&
-#define IO_SIGNAL SIGUSR1 /* Signal used to notify I/O completion */
-\&
-static void /* Handler for I/O completion signal */
-aioSigHandler(int sig, siginfo_t *si, void *ucontext)
-{
- if (si\->si_code == SI_ASYNCIO) {
- write(STDOUT_FILENO, "I/O completion signal received\en", 31);
-\&
- /* The corresponding ioRequest structure would be available as
- struct ioRequest *ioReq = si\->si_value.sival_ptr;
- and the file descriptor would then be available via
- ioReq\->aiocbp\->aio_fildes */
- }
-}
-\&
-int
-main(int argc, char *argv[])
-{
- struct sigaction sa;
- int s;
- int numReqs; /* Total number of queued I/O requests */
- int openReqs; /* Number of I/O requests still in progress */
-\&
- if (argc < 2) {
- fprintf(stderr, "Usage: %s <pathname> <pathname>...\en",
- argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- numReqs = argc \- 1;
-\&
- /* Allocate our arrays. */
-\&
- struct ioRequest *ioList = calloc(numReqs, sizeof(*ioList));
- if (ioList == NULL)
- errExit("calloc");
-\&
- struct aiocb *aiocbList = calloc(numReqs, sizeof(*aiocbList));
- if (aiocbList == NULL)
- errExit("calloc");
-\&
- /* Establish handlers for SIGQUIT and the I/O completion signal. */
-\&
- sa.sa_flags = SA_RESTART;
- sigemptyset(&sa.sa_mask);
-\&
- sa.sa_handler = quitHandler;
- if (sigaction(SIGQUIT, &sa, NULL) == \-1)
- errExit("sigaction");
-\&
- sa.sa_flags = SA_RESTART | SA_SIGINFO;
- sa.sa_sigaction = aioSigHandler;
- if (sigaction(IO_SIGNAL, &sa, NULL) == \-1)
- errExit("sigaction");
-\&
- /* Open each file specified on the command line, and queue
- a read request on the resulting file descriptor. */
-\&
- for (size_t j = 0; j < numReqs; j++) {
- ioList[j].reqNum = j;
- ioList[j].status = EINPROGRESS;
- ioList[j].aiocbp = &aiocbList[j];
-\&
- ioList[j].aiocbp\->aio_fildes = open(argv[j + 1], O_RDONLY);
- if (ioList[j].aiocbp\->aio_fildes == \-1)
- errExit("open");
- printf("opened %s on descriptor %d\en", argv[j + 1],
- ioList[j].aiocbp\->aio_fildes);
-\&
- ioList[j].aiocbp\->aio_buf = malloc(BUF_SIZE);
- if (ioList[j].aiocbp\->aio_buf == NULL)
- errExit("malloc");
-\&
- ioList[j].aiocbp\->aio_nbytes = BUF_SIZE;
- ioList[j].aiocbp\->aio_reqprio = 0;
- ioList[j].aiocbp\->aio_offset = 0;
- ioList[j].aiocbp\->aio_sigevent.sigev_notify = SIGEV_SIGNAL;
- ioList[j].aiocbp\->aio_sigevent.sigev_signo = IO_SIGNAL;
- ioList[j].aiocbp\->aio_sigevent.sigev_value.sival_ptr =
- &ioList[j];
-\&
- s = aio_read(ioList[j].aiocbp);
- if (s == \-1)
- errExit("aio_read");
- }
-\&
- openReqs = numReqs;
-\&
- /* Loop, monitoring status of I/O requests. */
-\&
- while (openReqs > 0) {
- sleep(3); /* Delay between each monitoring step */
-\&
- if (gotSIGQUIT) {
-\&
- /* On receipt of SIGQUIT, attempt to cancel each of the
- outstanding I/O requests, and display status returned
- from the cancelation requests. */
-\&
- printf("got SIGQUIT; canceling I/O requests: \en");
-\&
- for (size_t j = 0; j < numReqs; j++) {
- if (ioList[j].status == EINPROGRESS) {
- printf(" Request %zu on descriptor %d:", j,
- ioList[j].aiocbp\->aio_fildes);
- s = aio_cancel(ioList[j].aiocbp\->aio_fildes,
- ioList[j].aiocbp);
- if (s == AIO_CANCELED)
- printf("I/O canceled\en");
- else if (s == AIO_NOTCANCELED)
- printf("I/O not canceled\en");
- else if (s == AIO_ALLDONE)
- printf("I/O all done\en");
- else
- perror("aio_cancel");
- }
- }
-\&
- gotSIGQUIT = 0;
- }
-\&
- /* Check the status of each I/O request that is still
- in progress. */
-\&
- printf("aio_error():\en");
- for (size_t j = 0; j < numReqs; j++) {
- if (ioList[j].status == EINPROGRESS) {
- printf(" for request %zu (descriptor %d): ",
- j, ioList[j].aiocbp\->aio_fildes);
- ioList[j].status = aio_error(ioList[j].aiocbp);
-\&
- switch (ioList[j].status) {
- case 0:
- printf("I/O succeeded\en");
- break;
- case EINPROGRESS:
- printf("In progress\en");
- break;
- case ECANCELED:
- printf("Canceled\en");
- break;
- default:
- perror("aio_error");
- break;
- }
-\&
- if (ioList[j].status != EINPROGRESS)
- openReqs\-\-;
- }
- }
- }
-\&
- printf("All I/O requests completed\en");
-\&
- /* Check status return of all I/O requests. */
-\&
- printf("aio_return():\en");
- for (size_t j = 0; j < numReqs; j++) {
- ssize_t s;
-\&
- s = aio_return(ioList[j].aiocbp);
- printf(" for request %zu (descriptor %d): %zd\en",
- j, ioList[j].aiocbp\->aio_fildes, s);
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.SH SEE ALSO
-.ad l
-.nh
-.BR io_cancel (2),
-.BR io_destroy (2),
-.BR io_getevents (2),
-.BR io_setup (2),
-.BR io_submit (2),
-.BR aio_cancel (3),
-.BR aio_error (3),
-.BR aio_init (3),
-.BR aio_read (3),
-.BR aio_return (3),
-.BR aio_write (3),
-.BR lio_listio (3)
-.PP
-"Asynchronous I/O Support in Linux 2.5",
-Bhattacharya, Pratt, Pulavarty, and Morgan,
-Proceedings of the Linux Symposium, 2003,
-.UR https://www.kernel.org/doc/ols/2003/ols2003\-pages\-351\-366.pdf
-.UE
diff --git a/man7/armscii-8.7 b/man7/armscii-8.7
deleted file mode 100644
index 0f86c2914..000000000
--- a/man7/armscii-8.7
+++ /dev/null
@@ -1,120 +0,0 @@
-'\" t
-.\" Copyright 2009 Lefteris Dimitroulakis <edimitro at tee.gr>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH ARMSCII-8 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-armscii-8 \- Armenian character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The Armenian Standard Code for Information Interchange,
-8-bit coded character set.
-.SS ArmSCII-8 characters
-The following table displays the characters in ArmSCII-8 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-240 160 A0   NO-BREAK SPACE
-242 162 A2 և ARMENIAN SMALL LIGATURE ECH YIWN
-243 163 A3 ։ ARMENIAN FULL STOP
-244 164 A4 ) RIGHT PARENTHESIS
-245 165 A5 ( LEFT PARENTHESIS
-246 166 A6 » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-247 167 A7 « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-250 168 A8 — EM DASH
-251 169 A9 . FULL STOP
-252 170 AA ՝ ARMENIAN COMMA
-253 171 AB , COMMA
-254 172 AC - HYPHEN-MINUS
-255 173 AD ֊ ARMENIAN HYPHEN
-256 174 AE … HORIZONTAL ELLIPSIS
-257 175 AF ՜ ARMENIAN EXCLAMATION MARK
-260 176 B0 ՛ ARMENIAN EMPHASIS MARK
-261 177 B1 ՞ ARMENIAN QUESTION MARK
-262 178 B2 Ա ARMENIAN CAPITAL LETTER AYB
-263 179 B3 ա ARMENIAN SMALL LETTER AYB
-264 180 B4 Բ ARMENIAN CAPITAL LETTER BEN
-265 181 B5 բ ARMENIAN SMALL LETTER BEN
-266 182 B6 Գ ARMENIAN CAPITAL LETTER GIM
-267 183 B7 գ ARMENIAN SMALL LETTER GIM
-270 184 B8 Դ ARMENIAN CAPITAL LETTER DA
-271 185 B9 դ ARMENIAN SMALL LETTER DA
-272 186 BA Ե ARMENIAN CAPITAL LETTER ECH
-273 187 BB ե ARMENIAN SMALL LETTER ECH
-274 188 BC Զ ARMENIAN CAPITAL LETTER ZA
-275 189 BD զ ARMENIAN SMALL LETTER ZA
-276 190 BE Է ARMENIAN CAPITAL LETTER EH
-277 191 BF է ARMENIAN SMALL LETTER EH
-300 192 C0 Ը ARMENIAN CAPITAL LETTER ET
-301 193 C1 ը ARMENIAN SMALL LETTER ET
-302 194 C2 Թ ARMENIAN CAPITAL LETTER TO
-303 195 C3 թ ARMENIAN SMALL LETTER TO
-304 196 C4 Ժ ARMENIAN CAPITAL LETTER ZHE
-305 197 C5 ժ ARMENIAN SMALL LETTER ZHE
-306 198 C6 Ի ARMENIAN CAPITAL LETTER INI
-307 199 C7 ի ARMENIAN SMALL LETTER INI
-310 200 C8 Լ ARMENIAN CAPITAL LETTER LIWN
-311 201 C9 լ ARMENIAN SMALL LETTER LIWN
-312 202 CA Խ ARMENIAN CAPITAL LETTER XEH
-313 203 CB խ ARMENIAN SMALL LETTER XEH
-314 204 CC Ծ ARMENIAN CAPITAL LETTER CA
-315 205 CD ծ ARMENIAN SMALL LETTER CA
-316 206 CE Կ ARMENIAN CAPITAL LETTER KEN
-317 207 CF կ ARMENIAN SMALL LETTER KEN
-320 208 D0 Հ ARMENIAN CAPITAL LETTER HO
-321 209 D1 հ ARMENIAN SMALL LETTER HO
-322 210 D2 Ձ ARMENIAN CAPITAL LETTER JA
-323 211 D3 ձ ARMENIAN SMALL LETTER JA
-324 212 D4 Ղ ARMENIAN CAPITAL LETTER GHAD
-325 213 D5 ղ ARMENIAN SMALL LETTER GHAD
-326 214 D6 Ճ ARMENIAN CAPITAL LETTER CHEH
-327 215 D7 ճ ARMENIAN SMALL LETTER CHEH
-330 216 D8 Մ ARMENIAN CAPITAL LETTER MEN
-331 217 D9 մ ARMENIAN SMALL LETTER MEN
-332 218 DA Յ ARMENIAN CAPITAL LETTER YI
-333 219 DB յ ARMENIAN SMALL LETTER YI
-334 220 DC Ն ARMENIAN CAPITAL LETTER NOW
-335 221 DD ն ARMENIAN SMALL LETTER NOW
-336 222 DE Շ ARMENIAN CAPITAL LETTER SHA
-337 223 DF շ ARMENIAN SMALL LETTER SHA
-340 224 E0 Ո ARMENIAN CAPITAL LETTER VO
-341 225 E1 ո ARMENIAN SMALL LETTER VO
-342 226 E2 Չ ARMENIAN CAPITAL LETTER CHA
-343 227 E3 չ ARMENIAN SMALL LETTER CHA
-344 228 E4 Պ ARMENIAN CAPITAL LETTER PEH
-345 229 E5 պ ARMENIAN SMALL LETTER PEH
-346 230 E6 Ջ ARMENIAN CAPITAL LETTER JHEH
-347 231 E7 ջ ARMENIAN SMALL LETTER JHEH
-350 232 E8 Ռ ARMENIAN CAPITAL LETTER RA
-351 233 E9 ռ ARMENIAN SMALL LETTER RA
-352 234 EA Ս ARMENIAN CAPITAL LETTER SEH
-353 235 EB ս ARMENIAN SMALL LETTER SEH
-354 236 EC Վ ARMENIAN CAPITAL LETTER VEW
-355 237 ED վ ARMENIAN SMALL LETTER VEW
-356 238 EE Տ ARMENIAN CAPITAL LETTER TIWN
-357 239 EF տ ARMENIAN SMALL LETTER TIWN
-360 240 F0 Ր ARMENIAN CAPITAL LETTER REH
-361 241 F1 ր ARMENIAN SMALL LETTER REH
-362 242 F2 Ց ARMENIAN CAPITAL LETTER CO
-363 243 F3 ց ARMENIAN SMALL LETTER CO
-364 244 F4 Ւ ARMENIAN CAPITAL LETTER YIWN
-365 245 F5 ւ ARMENIAN SMALL LETTER YIWN
-366 246 F6 Փ ARMENIAN CAPITAL LETTER PIWR
-367 247 F7 փ ARMENIAN SMALL LETTER PIWR
-370 248 F8 Ք ARMENIAN CAPITAL LETTER KEH
-371 249 F9 ք ARMENIAN SMALL LETTER KEH
-372 250 FA Օ ARMENIAN CAPITAL LETTER OH
-373 251 FB օ ARMENIAN SMALL LETTER OH
-374 252 FC Ֆ ARMENIAN CAPITAL LETTER FEH
-375 253 FD ֆ ARMENIAN SMALL LETTER FEH
-376 254 FE ՚ ARMENIAN APOSTROPHE
-.TE
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR utf\-8 (7)
diff --git a/man7/arp.7 b/man7/arp.7
deleted file mode 100644
index 10e4efb50..000000000
--- a/man7/arp.7
+++ /dev/null
@@ -1,310 +0,0 @@
-'\" t
-.\" This man page is Copyright (C) 1999 Matthew Wilcox <willy@bofh.ai>.
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" Modified June 1999 Andi Kleen
-.\" $Id: arp.7,v 1.10 2000/04/27 19:31:38 ak Exp $
-.\"
-.TH arp 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-arp \- Linux ARP kernel module.
-.SH DESCRIPTION
-This kernel protocol module implements the Address Resolution
-Protocol defined in RFC\ 826.
-It is used to convert between Layer2 hardware addresses
-and IPv4 protocol addresses on directly connected networks.
-The user normally doesn't interact directly with this module except to
-configure it;
-instead it provides a service for other protocols in the kernel.
-.PP
-A user process can receive ARP packets by using
-.BR packet (7)
-sockets.
-There is also a mechanism for managing the ARP cache
-in user-space by using
-.BR netlink (7)
-sockets.
-The ARP table can also be controlled via
-.BR ioctl (2)
-on any
-.B AF_INET
-socket.
-.PP
-The ARP module maintains a cache of mappings between hardware addresses
-and protocol addresses.
-The cache has a limited size so old and less
-frequently used entries are garbage-collected.
-Entries which are marked
-as permanent are never deleted by the garbage-collector.
-The cache can
-be directly manipulated by the use of ioctls and its behavior can be
-tuned by the
-.I /proc
-interfaces described below.
-.PP
-When there is no positive feedback for an existing mapping after some
-time (see the
-.I /proc
-interfaces below), a neighbor cache entry is considered stale.
-Positive feedback can be gotten from a higher layer; for example from
-a successful TCP ACK.
-Other protocols can signal forward progress
-using the
-.B MSG_CONFIRM
-flag to
-.BR sendmsg (2).
-When there is no forward progress, ARP tries to reprobe.
-It first tries to ask a local arp daemon
-.B app_solicit
-times for an updated MAC address.
-If that fails and an old MAC address is known, a unicast probe is sent
-.B ucast_solicit
-times.
-If that fails too, it will broadcast a new ARP
-request to the network.
-Requests are sent only when there is data queued
-for sending.
-.PP
-Linux will automatically add a nonpermanent proxy arp entry when it
-receives a request for an address it forwards to and proxy arp is
-enabled on the receiving interface.
-When there is a reject route for the target, no proxy arp entry is added.
-.SS Ioctls
-Three ioctls are available on all
-.B AF_INET
-sockets.
-They take a pointer to a
-.I struct arpreq
-as their argument.
-.PP
-.in +4n
-.EX
-struct arpreq {
- struct sockaddr arp_pa; /* protocol address */
- struct sockaddr arp_ha; /* hardware address */
- int arp_flags; /* flags */
- struct sockaddr arp_netmask; /* netmask of protocol address */
- char arp_dev[16];
-};
-.EE
-.in
-.PP
-.BR SIOCSARP ", " SIOCDARP " and " SIOCGARP
-respectively set, delete, and get an ARP mapping.
-Setting and deleting ARP maps are privileged operations and may
-be performed only by a process with the
-.B CAP_NET_ADMIN
-capability or an effective UID of 0.
-.PP
-.I arp_pa
-must be an
-.B AF_INET
-address and
-.I arp_ha
-must have the same type as the device which is specified in
-.IR arp_dev .
-.I arp_dev
-is a zero-terminated string which names a device.
-.RS
-.TS
-tab(:) allbox;
-c s
-l l.
-\fIarp_flags\fR
-flag:meaning
-ATF_COM:Lookup complete
-ATF_PERM:Permanent entry
-ATF_PUBL:Publish entry
-ATF_USETRAILERS:Trailers requested
-ATF_NETMASK:Use a netmask
-ATF_DONTPUB:Don't answer
-.TE
-.RE
-.PP
-If the
-.B ATF_NETMASK
-flag is set, then
-.I arp_netmask
-should be valid.
-Linux 2.2 does not support proxy network ARP entries, so this
-should be set to 0xffffffff, or 0 to remove an existing proxy arp entry.
-.B ATF_USETRAILERS
-is obsolete and should not be used.
-.SS /proc interfaces
-ARP supports a range of
-.I /proc
-interfaces to configure parameters on a global or per-interface basis.
-The interfaces can be accessed by reading or writing the
-.I /proc/sys/net/ipv4/neigh/*/*
-files.
-Each interface in the system has its own directory in
-.IR /proc/sys/net/ipv4/neigh/ .
-The setting in the "default" directory is used for all newly created
-devices.
-Unless otherwise specified, time-related interfaces are specified
-in seconds.
-.TP
-.IR anycast_delay " (since Linux 2.2)"
-.\" Precisely: 2.1.79
-The maximum number of jiffies to delay before replying to a
-IPv6 neighbor solicitation message.
-Anycast support is not yet implemented.
-Defaults to 1 second.
-.TP
-.IR app_solicit " (since Linux 2.2)"
-.\" Precisely: 2.1.79
-The maximum number of probes to send to the user space ARP daemon via
-netlink before dropping back to multicast probes (see
-.IR mcast_solicit ).
-Defaults to 0.
-.TP
-.IR base_reachable_time " (since Linux 2.2)"
-.\" Precisely: 2.1.79
-Once a neighbor has been found, the entry is considered to be valid
-for at least a random value between
-.IR base_reachable_time "/2 and 3*" base_reachable_time /2.
-An entry's validity will be extended if it receives positive feedback
-from higher level protocols.
-Defaults to 30 seconds.
-This file is now obsolete in favor of
-.IR base_reachable_time_ms .
-.TP
-.IR base_reachable_time_ms " (since Linux 2.6.12)"
-As for
-.IR base_reachable_time ,
-but measures time in milliseconds.
-Defaults to 30000 milliseconds.
-.TP
-.IR delay_first_probe_time " (since Linux 2.2)"
-.\" Precisely: 2.1.79
-Delay before first probe after it has been decided that a neighbor
-is stale.
-Defaults to 5 seconds.
-.TP
-.IR gc_interval " (since Linux 2.2)"
-.\" Precisely: 2.1.79
-How frequently the garbage collector for neighbor entries
-should attempt to run.
-Defaults to 30 seconds.
-.TP
-.IR gc_stale_time " (since Linux 2.2)"
-.\" Precisely: 2.1.79
-Determines how often to check for stale neighbor entries.
-When a neighbor entry is considered stale, it is resolved again before
-sending data to it.
-Defaults to 60 seconds.
-.TP
-.IR gc_thresh1 " (since Linux 2.2)"
-.\" Precisely: 2.1.79
-The minimum number of entries to keep in the ARP cache.
-The garbage collector will not run if there are fewer than
-this number of entries in the cache.
-Defaults to 128.
-.TP
-.IR gc_thresh2 " (since Linux 2.2)"
-.\" Precisely: 2.1.79
-The soft maximum number of entries to keep in the ARP cache.
-The garbage collector will allow the number of entries to exceed
-this for 5 seconds before collection will be performed.
-Defaults to 512.
-.TP
-.IR gc_thresh3 " (since Linux 2.2)"
-.\" Precisely: 2.1.79
-The hard maximum number of entries to keep in the ARP cache.
-The garbage collector will always run if there are more than
-this number of entries in the cache.
-Defaults to 1024.
-.TP
-.IR locktime " (since Linux 2.2)"
-.\" Precisely: 2.1.79
-The minimum number of jiffies to keep an ARP entry in the cache.
-This prevents ARP cache thrashing if there is more than one potential
-mapping (generally due to network misconfiguration).
-Defaults to 1 second.
-.TP
-.IR mcast_solicit " (since Linux 2.2)"
-.\" Precisely: 2.1.79
-The maximum number of attempts to resolve an address by
-multicast/broadcast before marking the entry as unreachable.
-Defaults to 3.
-.TP
-.IR proxy_delay " (since Linux 2.2)"
-.\" Precisely: 2.1.79
-When an ARP request for a known proxy-ARP address is received, delay up to
-.I proxy_delay
-jiffies before replying.
-This is used to prevent network flooding in some cases.
-Defaults to 0.8 seconds.
-.TP
-.IR proxy_qlen " (since Linux 2.2)"
-.\" Precisely: 2.1.79
-The maximum number of packets which may be queued to proxy-ARP addresses.
-Defaults to 64.
-.TP
-.IR retrans_time " (since Linux 2.2)"
-.\" Precisely: 2.1.79
-The number of jiffies to delay before retransmitting a request.
-Defaults to 1 second.
-This file is now obsolete in favor of
-.IR retrans_time_ms .
-.TP
-.IR retrans_time_ms " (since Linux 2.6.12)"
-The number of milliseconds to delay before retransmitting a request.
-Defaults to 1000 milliseconds.
-.TP
-.IR ucast_solicit " (since Linux 2.2)"
-.\" Precisely: 2.1.79
-The maximum number of attempts to send unicast probes before asking
-the ARP daemon (see
-.IR app_solicit ).
-Defaults to 3.
-.TP
-.IR unres_qlen " (since Linux 2.2)"
-.\" Precisely: 2.1.79
-The maximum number of packets which may be queued for each unresolved
-address by other network layers.
-Defaults to 3.
-.SH VERSIONS
-The
-.I struct arpreq
-changed in Linux 2.0 to include the
-.I arp_dev
-member and the ioctl numbers changed at the same time.
-Support for the old ioctls was dropped in Linux 2.2.
-.PP
-Support for proxy arp entries for networks (netmask not equal 0xffffffff)
-was dropped in Linux 2.2.
-It is replaced by automatic proxy arp setup by
-the kernel for all reachable hosts on other interfaces (when
-forwarding and proxy arp is enabled for the interface).
-.PP
-The
-.I neigh/*
-interfaces did not exist before Linux 2.2.
-.SH BUGS
-Some timer settings are specified in jiffies, which is architecture-
-and kernel version-dependent; see
-.BR time (7).
-.PP
-There is no way to signal positive feedback from user space.
-This means connection-oriented protocols implemented in user space
-will generate excessive ARP traffic, because ndisc will regularly
-reprobe the MAC address.
-The same problem applies for some kernel protocols (e.g., NFS over UDP).
-.PP
-This man page mashes together functionality that is IPv4-specific
-with functionality that is shared between IPv4 and IPv6.
-.SH SEE ALSO
-.BR capabilities (7),
-.BR ip (7),
-.BR arpd (8)
-.PP
-RFC\ 826 for a description of ARP.
-RFC\ 2461 for a description of IPv6 neighbor discovery and the base
-algorithms used.
-Linux 2.2+ IPv4 ARP uses the IPv6 algorithms when applicable.
diff --git a/man7/ascii.7 b/man7/ascii.7
deleted file mode 100644
index 4f0c4f902..000000000
--- a/man7/ascii.7
+++ /dev/null
@@ -1,169 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Created 1993-04-02 by Michael Haardt (michael@moria.de)
-.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
-.\" Modified 1994-05-15 by Daniel Quinlan (quinlan@yggdrasil.com)
-.\" Modified 1994-11-22 by Daniel Quinlan (quinlan@yggdrasil.com)
-.\" Modified 1995-07-11 by Daniel Quinlan (quinlan@yggdrasil.com)
-.\" Modified 1996-12-18 by Michael Haardt and aeb
-.\" Modified 1999-05-31 by Dimitri Papadopoulos (dpo@club-internet.fr)
-.\" Modified 1999-08-08 by Michael Haardt (michael@moria.de)
-.\" Modified 2004-04-01 by aeb
-.\"
-.TH ascii 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ascii \- ASCII character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-ASCII is the American Standard Code for Information Interchange.
-It is a 7-bit code.
-Many 8-bit codes (e.g., ISO 8859-1) contain ASCII as their lower half.
-The international counterpart of ASCII is known as ISO 646-IRV.
-.PP
-The following table contains the 128 ASCII characters.
-.PP
-C program \f(CW\[aq]\eX\[aq]\fP escapes are noted.
-.PP
-.EX
-.TS
-l l l l | l l l l.
-Oct Dec Hex Char Oct Dec Hex Char
-_
-000 0 00 NUL \[aq]\e0\[aq] (null character) 100 64 40 @
-001 1 01 SOH (start of heading) 101 65 41 A
-002 2 02 STX (start of text) 102 66 42 B
-003 3 03 ETX (end of text) 103 67 43 C
-004 4 04 EOT (end of transmission) 104 68 44 D
-005 5 05 ENQ (enquiry) 105 69 45 E
-006 6 06 ACK (acknowledge) 106 70 46 F
-007 7 07 BEL \[aq]\ea\[aq] (bell) 107 71 47 G
-010 8 08 BS \[aq]\eb\[aq] (backspace) 110 72 48 H
-011 9 09 HT \[aq]\et\[aq] (horizontal tab) 111 73 49 I
-012 10 0A LF \[aq]\en\[aq] (new line) 112 74 4A J
-013 11 0B VT \[aq]\ev\[aq] (vertical tab) 113 75 4B K
-014 12 0C FF \[aq]\ef\[aq] (form feed) 114 76 4C L
-015 13 0D CR \[aq]\er\[aq] (carriage ret) 115 77 4D M
-016 14 0E SO (shift out) 116 78 4E N
-017 15 0F SI (shift in) 117 79 4F O
-020 16 10 DLE (data link escape) 120 80 50 P
-021 17 11 DC1 (device control 1) 121 81 51 Q
-022 18 12 DC2 (device control 2) 122 82 52 R
-023 19 13 DC3 (device control 3) 123 83 53 S
-024 20 14 DC4 (device control 4) 124 84 54 T
-025 21 15 NAK (negative ack.) 125 85 55 U
-026 22 16 SYN (synchronous idle) 126 86 56 V
-027 23 17 ETB (end of trans. blk) 127 87 57 W
-030 24 18 CAN (cancel) 130 88 58 X
-031 25 19 EM (end of medium) 131 89 59 Y
-032 26 1A SUB (substitute) 132 90 5A Z
-033 27 1B ESC (escape) 133 91 5B [
-034 28 1C FS (file separator) 134 92 5C \e \[aq]\e\e\[aq]
-035 29 1D GS (group separator) 135 93 5D ]
-036 30 1E RS (record separator) 136 94 5E \[ha]
-037 31 1F US (unit separator) 137 95 5F \&_
-040 32 20 SPACE 140 96 60 \`
-041 33 21 ! 141 97 61 a
-042 34 22 " 142 98 62 b
-043 35 23 # 143 99 63 c
-044 36 24 $ 144 100 64 d
-045 37 25 % 145 101 65 e
-046 38 26 & 146 102 66 f
-047 39 27 \[aq] 147 103 67 g
-050 40 28 ( 150 104 68 h
-051 41 29 ) 151 105 69 i
-052 42 2A * 152 106 6A j
-053 43 2B + 153 107 6B k
-054 44 2C , 154 108 6C l
-055 45 2D \- 155 109 6D m
-056 46 2E . 156 110 6E n
-057 47 2F / 157 111 6F o
-060 48 30 0 160 112 70 p
-061 49 31 1 161 113 71 q
-062 50 32 2 162 114 72 r
-063 51 33 3 163 115 73 s
-064 52 34 4 164 116 74 t
-065 53 35 5 165 117 75 u
-066 54 36 6 166 118 76 v
-067 55 37 7 167 119 77 w
-070 56 38 8 170 120 78 x
-071 57 39 9 171 121 79 y
-072 58 3A : 172 122 7A z
-073 59 3B ; 173 123 7B {
-074 60 3C < 174 124 7C |
-075 61 3D = 175 125 7D }
-076 62 3E > 176 126 7E \[ti]
-077 63 3F ? 177 127 7F DEL
-.TE
-.EE
-.SS Tables
-For convenience, below are more compact tables in hex and decimal.
-.PP
-.EX
- 2 3 4 5 6 7 30 40 50 60 70 80 90 100 110 120
- ------------- ---------------------------------
-0: 0 @ P \` p 0: ( 2 < F P Z d n x
-1: ! 1 A Q a q 1: ) 3 = G Q [ e o y
-2: " 2 B R b r 2: * 4 > H R \e f p z
-3: # 3 C S c s 3: ! + 5 ? I S ] g q {
-4: $ 4 D T d t 4: " , 6 @ J T \[ha] h r |
-5: % 5 E U e u 5: # \- 7 A K U _ i s }
-6: & 6 F V f v 6: $ . 8 B L V \` j t \[ti]
-7: \[aq] 7 G W g w 7: % / 9 C M W a k u DEL
-8: ( 8 H X h x 8: & 0 : D N X b l v
-9: ) 9 I Y i y 9: \[aq] 1 ; E O Y c m w
-A: * : J Z j z
-B: + ; K [ k {
-C: , < L \e l |
-D: \- = M ] m }
-E: . > N \[ha] n \[ti]
-F: / ? O _ o DEL
-.EE
-.SH NOTES
-.SS History
-/etc/ascii (VII) appears in the UNIX Programmer's Manual.
-.PP
-On older terminals, the underscore code is displayed as a left arrow,
-called backarrow, the caret is displayed as an up-arrow and the vertical
-bar has a hole in the middle.
-.PP
-Uppercase and lowercase characters differ by just one bit and the
-ASCII character 2 differs from the double quote by just one bit, too.
-That made it much easier to encode characters mechanically or with a
-non-microcontroller-based electronic keyboard and that pairing was found
-on old teletypes.
-.PP
-The ASCII standard was published by the United States of America
-Standards Institute (USASI) in 1968.
-.\"
-.\" ASA was the American Standards Association and X3 was an ASA sectional
-.\" committee on computers and data processing. Its name changed to
-.\" American National Standards Committee X3 (ANSC-X3) and now it is known
-.\" as Accredited Standards Committee X3 (ASC X3). It is accredited by ANSI
-.\" and administered by ITI. The subcommittee X3.2 worked on coded
-.\" character sets; the task group working on ASCII appears to have been
-.\" designated X3.2.4. In 1966, ASA became the United States of America
-.\" Standards Institute (USASI) and published ASCII in 1968. It became the
-.\" American National Standards Institute (ANSI) in 1969 and is the
-.\" U.S. member body of ISO; private and nonprofit.
-.\"
-.SH SEE ALSO
-.BR charsets (7),
-.BR iso_8859\-1 (7),
-.BR iso_8859\-2 (7),
-.BR iso_8859\-3 (7),
-.BR iso_8859\-4 (7),
-.BR iso_8859\-5 (7),
-.BR iso_8859\-6 (7),
-.BR iso_8859\-7 (7),
-.BR iso_8859\-8 (7),
-.BR iso_8859\-9 (7),
-.BR iso_8859\-10 (7),
-.BR iso_8859\-11 (7),
-.BR iso_8859\-13 (7),
-.BR iso_8859\-14 (7),
-.BR iso_8859\-15 (7),
-.BR iso_8859\-16 (7),
-.BR utf\-8 (7)
diff --git a/man7/attributes.7 b/man7/attributes.7
deleted file mode 100644
index e8d028ee8..000000000
--- a/man7/attributes.7
+++ /dev/null
@@ -1,865 +0,0 @@
-.\" Copyright (c) 2014, Red Hat, Inc
-.\" Written by Alexandre Oliva <aoliva@redhat.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.TH attributes 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-attributes \- POSIX safety concepts
-.SH DESCRIPTION
-.\"
-.\"
-.IR Note :
-the text of this man page is based on the material taken from
-the "POSIX Safety Concepts" section of the GNU C Library manual.
-Further details on the topics described here can be found in that
-manual.
-.PP
-Various function manual pages include a section ATTRIBUTES
-that describes the safety of calling the function in various contexts.
-This section annotates functions with the following safety markings:
-.TP
-.I MT-Safe
-.I MT-Safe
-or
-Thread-Safe functions are safe to call in the presence
-of other threads.
-MT, in MT-Safe, stands for Multi Thread.
-.IP
-Being MT-Safe does not imply a function is atomic, nor that it uses any
-of the memory synchronization mechanisms POSIX exposes to users.
-It is even possible that calling MT-Safe functions in sequence
-does not yield an MT-Safe combination.
-For example, having a thread call two MT-Safe
-functions one right after the other does not guarantee behavior
-equivalent to atomic execution of a combination of both functions,
-since concurrent calls in other threads may interfere in a destructive way.
-.IP
-Whole-program optimizations that could inline functions across library
-interfaces may expose unsafe reordering, and so performing inlining
-across the GNU C Library interface is not recommended.
-The documented
-MT-Safety status is not guaranteed under whole-program optimization.
-However, functions defined in user-visible headers are designed to be
-safe for inlining.
-.\" .TP
-.\" .I AS-Safe
-.\" .I AS-Safe
-.\" or Async-Signal-Safe functions are safe to call from
-.\" asynchronous signal handlers.
-.\" AS, in AS-Safe, stands for Asynchronous Signal.
-.\"
-.\" Many functions that are AS-Safe may set
-.\" .IR errno ,
-.\" or modify the floating-point environment,
-.\" because their doing so does not make them
-.\" unsuitable for use in signal handlers.
-.\" However, programs could misbehave should asynchronous signal handlers
-.\" modify this thread-local state,
-.\" and the signal handling machinery cannot be counted on to
-.\" preserve it.
-.\" Therefore, signal handlers that call functions that may set
-.\" .I errno
-.\" or modify the floating-point environment
-.\" .I must
-.\" save their original values, and restore them before returning.
-.\" .TP
-.\" .I AC-Safe
-.\" .I AC-Safe
-.\" or Async-Cancel-Safe functions are safe to call when
-.\" asynchronous cancelation is enabled.
-.\" AC in AC-Safe stands for Asynchronous Cancelation.
-.\"
-.\" The POSIX standard defines only three functions to be AC-Safe, namely
-.\" .BR pthread_cancel (3),
-.\" .BR pthread_setcancelstate (3),
-.\" and
-.\" .BR pthread_setcanceltype (3).
-.\" At present the GNU C Library provides no
-.\" guarantees beyond these three functions,
-.\" but does document which functions are presently AC-Safe.
-.\" This documentation is provided for use
-.\" by the GNU C Library developers.
-.\"
-.\" Just like signal handlers, cancelation cleanup routines must configure
-.\" the floating point environment they require.
-.\" The routines cannot assume a floating point environment,
-.\" particularly when asynchronous cancelation is enabled.
-.\" If the configuration of the floating point
-.\" environment cannot be performed atomically then it is also possible that
-.\" the environment encountered is internally inconsistent.
-.TP
-.I MT-Unsafe \" ", " AS-Unsafe ", " AC-Unsafe
-.I MT-Unsafe \" ", " AS-Unsafe ", " AC-Unsafe
-functions are not safe to call in a multithreaded programs.
-.\" functions are not
-.\" safe to call within the safety contexts described above.
-.\" Calling them
-.\" within such contexts invokes undefined behavior.
-.\"
-.\" Functions not explicitly documented as safe in a safety context should
-.\" be regarded as Unsafe.
-.\" .TP
-.\" .I Preliminary
-.\" .I Preliminary
-.\" safety properties are documented, indicating these
-.\" properties may
-.\" .I not
-.\" be counted on in future releases of
-.\" the GNU C Library.
-.\"
-.\" Such preliminary properties are the result of an assessment of the
-.\" properties of our current implementation,
-.\" rather than of what is mandated and permitted
-.\" by current and future standards.
-.\"
-.\" Although we strive to abide by the standards, in some cases our
-.\" implementation is safe even when the standard does not demand safety,
-.\" and in other cases our implementation does not meet the standard safety
-.\" requirements.
-.\" The latter are most likely bugs; the former, when marked
-.\" as
-.\" .IR Preliminary ,
-.\" should not be counted on: future standards may
-.\" require changes that are not compatible with the additional safety
-.\" properties afforded by the current implementation.
-.\"
-.\" Furthermore,
-.\" the POSIX standard does not offer a detailed definition of safety.
-.\" We assume that, by "safe to call", POSIX means that,
-.\" as long as the program does not invoke undefined behavior,
-.\" the "safe to call" function behaves as specified,
-.\" and does not cause other functions to deviate from their specified behavior.
-.\" We have chosen to use its loose
-.\" definitions of safety, not because they are the best definitions to use,
-.\" but because choosing them harmonizes this manual with POSIX.
-.\"
-.\" Please keep in mind that these are preliminary definitions and annotations,
-.\" and certain aspects of the definitions are still under
-.\" discussion and might be subject to clarification or change.
-.\"
-.\" Over time,
-.\" we envision evolving the preliminary safety notes into stable commitments,
-.\" as stable as those of our interfaces.
-.\" As we do, we will remove the
-.\" .I Preliminary
-.\" keyword from safety notes.
-.\" As long as the keyword remains, however,
-.\" they are not to be regarded as a promise of future behavior.
-.PP
-Other keywords that appear in safety notes are defined in subsequent sections.
-.\"
-.\"
-.\" .SS Unsafe features
-.\" Functions that are unsafe to call in certain contexts are annotated with
-.\" keywords that document their features that make them unsafe to call.
-.\" AS-Unsafe features in this section indicate the functions are never safe
-.\" to call when asynchronous signals are enabled.
-.\" AC-Unsafe features
-.\" indicate they are never safe to call when asynchronous cancelation is
-.\" .\" enabled.
-.\" There are no MT-Unsafe marks in this section.
-.\" .TP
-.\" .\" .I code
-.\" Functions marked with
-.\" .I lock
-.\" as an AS-Unsafe feature may be
-.\" .\" interrupted by a signal while holding a non-recursive lock.
-.\" If the signal handler calls another such function that takes the same lock,
-.\" the result is a deadlock.
-.\"
-.\" Functions annotated with
-.\" .I lock
-.\" as an AC-Unsafe feature may, if canceled asynchronously,
-.\" fail to release a lock that would have been released if their execution
-.\" had not been interrupted by asynchronous thread cancelation.
-.\" Once a lock is left taken,
-.\" attempts to take that lock will block indefinitely.
-.\" .TP
-.\" .I corrupt
-.\" Functions marked with
-.\" .\" .I corrupt
-.\" as an AS-Unsafe feature may corrupt
-.\" data structures and misbehave when they interrupt,
-.\" or are interrupted by, another such function.
-.\" Unlike functions marked with
-.\" .IR lock ,
-.\" these take recursive locks to avoid MT-Safety problems,
-.\" but this is not enough to stop a signal handler from observing
-.\" a partially-updated data structure.
-.\" Further corruption may arise from the interrupted function's
-.\" failure to notice updates made by signal handlers.
-.\"
-.\" Functions marked with
-.\" .I corrupt
-.\" as an AC-Unsafe feature may leave
-.\" data structures in a corrupt, partially updated state.
-.\" Subsequent uses of the data structure may misbehave.
-.\"
-.\" .\" A special case, probably not worth documenting separately, involves
-.\" .\" reallocing, or even freeing pointers. Any case involving free could
-.\" .\" be easily turned into an ac-safe leak by resetting the pointer before
-.\" .\" releasing it; I don't think we have any case that calls for this sort
-.\" .\" of fixing. Fixing the realloc cases would require a new interface:
-.\" .\" instead of @code{ptr=realloc(ptr,size)} we'd have to introduce
-.\" .\" @code{acsafe_realloc(&ptr,size)} that would modify ptr before
-.\" .\" releasing the old memory. The ac-unsafe realloc could be implemented
-.\" .\" in terms of an internal interface with this semantics (say
-.\" .\" __acsafe_realloc), but since realloc can be overridden, the function
-.\" .\" we call to implement realloc should not be this internal interface,
-.\" .\" but another internal interface that calls __acsafe_realloc if realloc
-.\" .\" was not overridden, and calls the overridden realloc with async
-.\" .\" cancel disabled. --lxoliva
-.\" .TP
-.\" .I heap
-.\" Functions marked with
-.\" .I heap
-.\" may call heap memory management functions from the
-.\" .BR malloc (3)/ free (3)
-.\" family of functions and are only as safe as those functions.
-.\" This note is thus equivalent to:
-.\"
-.\" | AS-Unsafe lock | AC-Unsafe lock fd mem |
-.\" .\" @sampsafety{@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
-.\" .\"
-.\" .\" Check for cases that should have used plugin instead of or in
-.\" .\" addition to this. Then, after rechecking gettext, adjust i18n if
-.\" .\" needed.
-.\" .TP
-.\" .I dlopen
-.\" Functions marked with
-.\" .I dlopen
-.\" use the dynamic loader to load
-.\" shared libraries into the current execution image.
-.\" This involves opening files, mapping them into memory,
-.\" allocating additional memory, resolving symbols,
-.\" applying relocations and more,
-.\" all of this while holding internal dynamic loader locks.
-.\"
-.\" The locks are enough for these functions to be AS-Unsafe and AC-Unsafe,
-.\" but other issues may arise.
-.\" At present this is a placeholder for all
-.\" potential safety issues raised by
-.\" .BR dlopen (3).
-.\"
-.\" .\" dlopen runs init and fini sections of the module; does this mean
-.\" .\" dlopen always implies plugin?
-.\" .TP
-.\" .I plugin
-.\" Functions annotated with
-.\" .I plugin
-.\" may run code from plugins that
-.\" may be external to the GNU C Library.
-.\" Such plugin functions are assumed to be
-.\" MT-Safe, AS-Unsafe and AC-Unsafe.
-.\" Examples of such plugins are stack unwinding libraries,
-.\" name service switch (NSS) and character set conversion (iconv) back-ends.
-.\"
-.\" Although the plugins mentioned as examples are all brought in by means
-.\" of dlopen, the
-.\" .I plugin
-.\" keyword does not imply any direct
-.\" involvement of the dynamic loader or the
-.\" .I libdl
-.\" interfaces,
-.\" those are covered by
-.\" .IR dlopen .
-.\" For example, if one function loads a module and finds the addresses
-.\" of some of its functions,
-.\" while another just calls those already-resolved functions,
-.\" the former will be marked with
-.\" .IR dlopen ,
-.\" whereas the latter will get the
-.\" .IR plugin .
-.\" When a single function takes all of these actions, then it gets both marks.
-.\" .TP
-.\" .I i18n
-.\" Functions marked with
-.\" .I i18n
-.\" may call internationalization
-.\" functions of the
-.\" .BR gettext (3)
-.\" family and will be only as safe as those
-.\" functions.
-.\" This note is thus equivalent to:
-.\"
-.\" | MT-Safe env | AS-Unsafe corrupt heap dlopen | AC-Unsafe corrupt |
-.\"
-.\" .\" @sampsafety{@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascudlopen{}}@acunsafe{@acucorrupt{}}}
-.\" .TP
-.\" .I timer
-.\" Functions marked with
-.\" .I timer
-.\" use the
-.\" .BR alarm (3)
-.\" function or
-.\" similar to set a time-out for a system call or a long-running operation.
-.\" In a multi-threaded program, there is a risk that the time-out signal
-.\" will be delivered to a different thread,
-.\" thus failing to interrupt the intended thread.
-.\" Besides being MT-Unsafe, such functions are always
-.\" AS-Unsafe, because calling them in signal handlers may interfere with
-.\" timers set in the interrupted code, and AC-Unsafe,
-.\" because there is no safe way to guarantee an earlier timer
-.\" will be reset in case of asynchronous cancelation.
-.\"
-.\"
-.SS Conditionally safe features
-For some features that make functions unsafe to call in certain contexts,
-there are known ways to avoid the safety problem other than
-refraining from calling the function altogether.
-The keywords that follow refer to such features,
-and each of their definitions indicates
-how the whole program needs to be constrained in order to remove the
-safety problem indicated by the keyword.
-Only when all the reasons that
-make a function unsafe are observed and addressed,
-by applying the documented constraints,
-does the function become safe to call in a context.
-.TP
-.I init
-Functions marked with
-.I init
-as an MT-Unsafe feature perform
-MT-Unsafe initialization when they are first called.
-.IP
-Calling such a function at least once in single-threaded mode removes
-this specific cause for the function to be regarded as MT-Unsafe.
-If no other cause for that remains,
-the function can then be safely called after other threads are started.
-.\"
-.\" Functions marked with
-.\" .I init
-.\" as an AS-Unsafe or AC-Unsafe feature use the GNU C Library internal
-.\" .I libc_once
-.\" machinery or similar to initialize internal data structures.
-.\"
-.\" If a signal handler interrupts such an initializer,
-.\" and calls any function that also performs
-.\" .I libc_once
-.\" initialization, it will deadlock if the thread library has been loaded.
-.\"
-.\" Furthermore, if an initializer is partially complete before it is canceled
-.\" or interrupted by a signal whose handler requires the same initialization,
-.\" some or all of the initialization may be performed more than once,
-.\" leaking resources or even resulting in corrupt internal data.
-.\"
-.\" Applications that need to call functions marked with
-.\" .I init
-.\" as an AS-Safety or AC-Unsafe feature should ensure
-.\" the initialization is performed
-.\" before configuring signal handlers or enabling cancelation,
-.\" so that the AS-Safety and AC-Safety issues related with
-.\" .I libc_once
-.\" do not arise.
-.\"
-.\" .\" We may have to extend the annotations to cover conditions in which
-.\" .\" initialization may or may not occur, since an initial call in a safe
-.\" .\" context is no use if the initialization doesn't take place at that
-.\" .\" time: it doesn't remove the risk for later calls.
-.TP
-.I race
-Functions annotated with
-.I race
-as an MT-Safety issue operate on
-objects in ways that may cause data races or similar forms of
-destructive interference out of concurrent execution.
-In some cases,
-the objects are passed to the functions by users;
-in others, they are used by the functions to return values to users;
-in others, they are not even exposed to users.
-.\"
-.\" We consider access to objects passed as (indirect) arguments to
-.\" functions to be data race free.
-.\" The assurance of data race free objects
-.\" is the caller's responsibility.
-.\" We will not mark a function as MT-Unsafe or AS-Unsafe
-.\" if it misbehaves when users fail to take the measures required by
-.\" POSIX to avoid data races when dealing with such objects.
-.\" As a general rule, if a function is documented as reading from
-.\" an object passed (by reference) to it, or modifying it,
-.\" users ought to use memory synchronization primitives
-.\" to avoid data races just as they would should they perform
-.\" the accesses themselves rather than by calling the library function.
-.\" Standard I/O
-.\" .RI ( "FILE *" )
-.\" streams are the exception to the general rule,
-.\" in that POSIX mandates the library to guard against data races
-.\" in many functions that manipulate objects of this specific opaque type.
-.\" We regard this as a convenience provided to users,
-.\" rather than as a general requirement whose expectations
-.\" should extend to other types.
-.\"
-.\" In order to remind users that guarding certain arguments is their
-.\" responsibility, we will annotate functions that take objects of certain
-.\" types as arguments.
-.\" We draw the line for objects passed by users as follows:
-.\" objects whose types are exposed to users,
-.\" and that users are expected to access directly,
-.\" such as memory buffers, strings,
-.\" and various user-visible structured types, do
-.\" .I not
-.\" give reason for functions to be annotated with
-.\" .IR race .
-.\" It would be noisy and redundant with the general requirement,
-.\" and not many would be surprised by the library's lack of internal
-.\" guards when accessing objects that can be accessed directly by users.
-.\"
-.\" As for objects that are opaque or opaque-like,
-.\" in that they are to be manipulated only by passing them
-.\" to library functions (e.g.,
-.\" .IR FILE ,
-.\" .IR DIR ,
-.\" .IR obstack ,
-.\" .IR iconv_t ),
-.\" there might be additional expectations as to internal coordination
-.\" of access by the library.
-.\" We will annotate, with
-.\" .I race
-.\" followed by a colon and the argument name,
-.\" functions that take such objects but that do not take
-.\" care of synchronizing access to them by default.
-.\" For example,
-.\" .I FILE
-.\" stream
-.\" .I unlocked
-.\" functions
-.\" .RB ( unlocked_stdio (3))
-.\" will be annotated,
-.\" but those that perform implicit locking on
-.\" .I FILE
-.\" streams by default will not,
-.\" even though the implicit locking may be disabled on a per-stream basis.
-.\"
-.\" In either case, we will not regard as MT-Unsafe functions that may
-.\" access user-supplied objects in unsafe ways should users fail to ensure
-.\" the accesses are well defined.
-.\" The notion prevails that users are expected to safeguard against
-.\" data races any user-supplied objects that the library accesses
-.\" on their behalf.
-.\"
-.\" .\" The above describes @mtsrace; @mtasurace is described below.
-.\"
-.\" This user responsibility does not apply, however,
-.\" to objects controlled by the library itself,
-.\" such as internal objects and static buffers used
-.\" to return values from certain calls.
-.\" When the library doesn't guard them against concurrent uses,
-.\" these cases are regarded as MT-Unsafe and AS-Unsafe (although the
-.\" .I race
-.\" mark under AS-Unsafe will be omitted
-.\" as redundant with the one under MT-Unsafe).
-.\" As in the case of user-exposed objects,
-.\" the mark may be followed by a colon and an identifier.
-.\" The identifier groups all functions that operate on a
-.\" certain unguarded object; users may avoid the MT-Safety issues related
-.\" with unguarded concurrent access to such internal objects by creating a
-.\" non-recursive mutex related with the identifier,
-.\" and always holding the mutex when calling any function marked
-.\" as racy on that identifier,
-.\" as they would have to should the identifier be
-.\" an object under user control.
-.\" The non-recursive mutex avoids the MT-Safety issue,
-.\" but it trades one AS-Safety issue for another,
-.\" so use in asynchronous signals remains undefined.
-.\"
-.\" When the identifier relates to a static buffer used to hold return values,
-.\" the mutex must be held for as long as the buffer remains in use
-.\" by the caller.
-.\" Many functions that return pointers to static buffers offer reentrant
-.\" variants that store return values in caller-supplied buffers instead.
-.\" In some cases, such as
-.\" .BR tmpname (3),
-.\" the variant is chosen not by calling an alternate entry point,
-.\" but by passing a non-NULL pointer to the buffer in which the
-.\" returned values are to be stored.
-.\" These variants are generally preferable in multi-threaded programs,
-.\" although some of them are not MT-Safe because of other internal buffers,
-.\" also documented with
-.\" .I race
-.\" notes.
-.TP
-.I const
-Functions marked with
-.I const
-as an MT-Safety issue non-atomically
-modify internal objects that are better regarded as constant,
-because a substantial portion of the GNU C Library accesses them without
-synchronization.
-Unlike
-.IR race ,
-which causes both readers and
-writers of internal objects to be regarded as MT-Unsafe,\" and AS-Unsafe,
-this mark is applied to writers only.
-Writers remain\" equally
-MT-Unsafe\" and AS-Unsafe
-to call,
-but the then-mandatory constness of objects they
-modify enables readers to be regarded as MT-Safe\" and AS-Safe
-(as long as no other reasons for them to be unsafe remain),
-since the lack of synchronization is not a problem when the
-objects are effectively constant.
-.IP
-The identifier that follows the
-.I const
-mark will appear by itself as a safety note in readers.
-Programs that wish to work around this safety issue,
-so as to call writers, may use a non-recursive
-read-write lock
-associated with the identifier, and guard
-.I all
-calls to functions marked with
-.I const
-followed by the identifier with a write lock, and
-.I all
-calls to functions marked with the identifier
-by itself with a read lock.
-.\" The non-recursive locking removes the MT-Safety problem,
-.\" but it trades one AS-Safety problem for another,
-.\" so use in asynchronous signals remains undefined.
-.\"
-.\" .\" But what if, instead of marking modifiers with const:id and readers
-.\" .\" with just id, we marked writers with race:id and readers with ro:id?
-.\" .\" Instead of having to define each instance of 'id', we'd have a
-.\" .\" general pattern governing all such 'id's, wherein race:id would
-.\" .\" suggest the need for an exclusive/write lock to make the function
-.\" .\" safe, whereas ro:id would indicate 'id' is expected to be read-only,
-.\" .\" but if any modifiers are called (while holding an exclusive lock),
-.\" .\" then ro:id-marked functions ought to be guarded with a read lock for
-.\" .\" safe operation. ro:env or ro:locale, for example, seems to convey
-.\" .\" more clearly the expectations and the meaning, than just env or
-.\" .\" locale.
-.TP
-.I sig
-Functions marked with
-.I sig
-as a MT-Safety issue
-.\" (that implies an identical AS-Safety issue, omitted for brevity)
-may temporarily install a signal handler for internal purposes,
-which may interfere with other uses of the signal,
-identified after a colon.
-.IP
-This safety problem can be worked around by ensuring that no other uses
-of the signal will take place for the duration of the call.
-Holding a non-recursive mutex while calling all functions that use the same
-temporary signal;
-blocking that signal before the call and resetting its
-handler afterwards is recommended.
-.\"
-.\" There is no safe way to guarantee the original signal handler is
-.\" restored in case of asynchronous cancelation,
-.\" therefore so-marked functions are also AC-Unsafe.
-.\"
-.\" .\" fixme: at least deferred cancelation should get it right, and would
-.\" .\" obviate the restoring bit below, and the qualifier above.
-.\"
-.\" Besides the measures recommended to work around the
-.\" MT-Safety and AS-Safety problem,
-.\" in order to avert the cancelation problem,
-.\" disabling asynchronous cancelation
-.\" .I and
-.\" installing a cleanup handler to restore the signal to the desired state
-.\" and to release the mutex are recommended.
-.TP
-.I term
-Functions marked with
-.I term
-as an MT-Safety issue may change the
-terminal settings in the recommended way, namely: call
-.BR tcgetattr (3),
-modify some flags, and then call
-.BR tcsetattr (3),
-this creates a window in which changes made by other threads are lost.
-Thus, functions marked with
-.I term
-are MT-Unsafe.
-.\" The same window enables changes made by asynchronous signals to be lost.
-.\" These functions are also AS-Unsafe,
-.\" but the corresponding mark is omitted as redundant.
-.IP
-It is thus advisable for applications using the terminal to avoid
-concurrent and reentrant interactions with it,
-by not using it in signal handlers or blocking signals that might use it,
-and holding a lock while calling these functions and interacting
-with the terminal.
-This lock should also be used for mutual exclusion with
-functions marked with
-.IR race:tcattr(fd) ,
-where
-.I fd
-is a file descriptor for the controlling terminal.
-The caller may use a single mutex for simplicity,
-or use one mutex per terminal,
-even if referenced by different file descriptors.
-.\"
-.\" Functions marked with
-.\" .I term
-.\" as an AC-Safety issue are supposed to
-.\" restore terminal settings to their original state,
-.\" after temporarily changing them, but they may fail to do so if canceled.
-.\"
-.\" .\" fixme: at least deferred cancelation should get it right, and would
-.\" .\" obviate the restoring bit below, and the qualifier above.
-.\"
-.\" Besides the measures recommended to work around the
-.\" MT-Safety and AS-Safety problem,
-.\" in order to avert the cancelation problem,
-.\" disabling asynchronous cancelation
-.\" .I and
-.\" installing a cleanup handler to
-.\" restore the terminal settings to the original state and to release the
-.\" mutex are recommended.
-.\"
-.\"
-.SS Other safety remarks
-Additional keywords may be attached to functions,
-indicating features that do not make a function unsafe to call,
-but that may need to be taken into account in certain classes of programs:
-.TP
-.I locale
-Functions annotated with
-.I locale
-as an MT-Safety issue read from
-the locale object without any form of synchronization.
-Functions
-annotated with
-.I locale
-called concurrently with locale changes may
-behave in ways that do not correspond to any of the locales active
-during their execution, but an unpredictable mix thereof.
-.IP
-We do not mark these functions as MT-Unsafe,\" or AS-Unsafe,
-however,
-because functions that modify the locale object are marked with
-.I const:locale
-and regarded as unsafe.
-Being unsafe, the latter are not to be called when multiple threads
-are running or asynchronous signals are enabled,
-and so the locale can be considered effectively constant
-in these contexts,
-which makes the former safe.
-.\" Should the locking strategy suggested under @code{const} be used,
-.\" failure to guard locale uses is not as fatal as data races in
-.\" general: unguarded uses will @emph{not} follow dangling pointers or
-.\" access uninitialized, unmapped or recycled memory. Each access will
-.\" read from a consistent locale object that is or was active at some
-.\" point during its execution. Without synchronization, however, it
-.\" cannot even be assumed that, after a change in locale, earlier
-.\" locales will no longer be used, even after the newly-chosen one is
-.\" used in the thread. Nevertheless, even though unguarded reads from
-.\" the locale will not violate type safety, functions that access the
-.\" locale multiple times may invoke all sorts of undefined behavior
-.\" because of the unexpected locale changes.
-.TP
-.I env
-Functions marked with
-.I env
-as an MT-Safety issue access the
-environment with
-.BR getenv (3)
-or similar, without any guards to ensure
-safety in the presence of concurrent modifications.
-.IP
-We do not mark these functions as MT-Unsafe,\" or AS-Unsafe,
-however,
-because functions that modify the environment are all marked with
-.I const:env
-and regarded as unsafe.
-Being unsafe, the latter are not to be called when multiple threads
-are running or asynchronous signals are enabled,
-and so the environment can be considered
-effectively constant in these contexts,
-which makes the former safe.
-.TP
-.I hostid
-The function marked with
-.I hostid
-as an MT-Safety issue reads from the system-wide data structures that
-hold the "host ID" of the machine.
-These data structures cannot generally be modified atomically.
-Since it is expected that the "host ID" will not normally change,
-the function that reads from it
-.RB ( gethostid (3))
-is regarded as safe,
-whereas the function that modifies it
-.RB ( sethostid (3))
-is marked with
-.IR const:hostid ,
-indicating it may require special care if it is to be called.
-In this specific case,
-the special care amounts to system-wide
-(not merely intra-process) coordination.
-.TP
-.I sigintr
-Functions marked with
-.I sigintr
-as an MT-Safety issue access the
-GNU C Library
-.I _sigintr
-internal data structure without any guards to ensure
-safety in the presence of concurrent modifications.
-.IP
-We do not mark these functions as MT-Unsafe,\" or AS-Unsafe,
-however,
-because functions that modify this data structure are all marked with
-.I const:sigintr
-and regarded as unsafe.
-Being unsafe,
-the latter are not to be called when multiple threads are
-running or asynchronous signals are enabled,
-and so the data structure can be considered
-effectively constant in these contexts,
-which makes the former safe.
-.\" .TP
-.\" .I fd
-.\" Functions annotated with
-.\" .I fd
-.\" as an AC-Safety issue may leak file
-.\" descriptors if asynchronous thread cancelation interrupts their
-.\" execution.
-.\"
-.\" Functions that allocate or deallocate file descriptors will generally be
-.\" marked as such.
-.\" Even if they attempted to protect the file descriptor
-.\" allocation and deallocation with cleanup regions,
-.\" allocating a new descriptor and storing its number where the cleanup region
-.\" could release it cannot be performed as a single atomic operation.
-.\" Similarly,
-.\" releasing the descriptor and taking it out of the data structure
-.\" normally responsible for releasing it cannot be performed atomically.
-.\" There will always be a window in which the descriptor cannot be released
-.\" because it was not stored in the cleanup handler argument yet,
-.\" or it was already taken out before releasing it.
-.\" .\" It cannot be taken out after release:
-.\" an open descriptor could mean either that the descriptor still
-.\" has to be closed,
-.\" or that it already did so but the descriptor was
-.\" reallocated by another thread or signal handler.
-.\"
-.\" Such leaks could be internally avoided, with some performance penalty,
-.\" by temporarily disabling asynchronous thread cancelation.
-.\" However,
-.\" since callers of allocation or deallocation functions would have to do
-.\" this themselves, to avoid the same sort of leak in their own layer,
-.\" it makes more sense for the library to assume they are taking care of it
-.\" than to impose a performance penalty that is redundant when the problem
-.\" is solved in upper layers, and insufficient when it is not.
-.\"
-.\" This remark by itself does not cause a function to be regarded as
-.\" AC-Unsafe.
-.\" However, cumulative effects of such leaks may pose a
-.\" problem for some programs.
-.\" If this is the case,
-.\" suspending asynchronous cancelation for the duration of calls
-.\" to such functions is recommended.
-.\" .TP
-.\" .I mem
-.\" Functions annotated with
-.\" .I mem
-.\" as an AC-Safety issue may leak
-.\" memory if asynchronous thread cancelation interrupts their execution.
-.\"
-.\" The problem is similar to that of file descriptors: there is no atomic
-.\" interface to allocate memory and store its address in the argument to a
-.\" cleanup handler,
-.\" or to release it and remove its address from that argument,
-.\" without at least temporarily disabling asynchronous cancelation,
-.\" which these functions do not do.
-.\"
-.\" This remark does not by itself cause a function to be regarded as
-.\" generally AC-Unsafe.
-.\" However, cumulative effects of such leaks may be
-.\" severe enough for some programs that disabling asynchronous cancelation
-.\" for the duration of calls to such functions may be required.
-.TP
-.I cwd
-Functions marked with
-.I cwd
-as an MT-Safety issue may temporarily
-change the current working directory during their execution,
-which may cause relative pathnames to be resolved in unexpected ways in
-other threads or within asynchronous signal or cancelation handlers.
-.IP
-This is not enough of a reason to mark so-marked functions as MT-Unsafe,
-.\" or AS-Unsafe,
-but when this behavior is optional (e.g.,
-.BR nftw (3)
-with
-.BR FTW_CHDIR ),
-avoiding the option may be a good alternative to
-using full pathnames or file descriptor-relative (e.g.,
-.BR openat (2))
-system calls.
-.\" .TP
-.\" .I !posix
-.\" This remark, as an MT-Safety, AS-Safety or AC-Safety
-.\" note to a function,
-.\" indicates the safety status of the function is known to differ
-.\" from the specified status in the POSIX standard.
-.\" For example, POSIX does not require a function to be Safe,
-.\" but our implementation is, or vice-versa.
-.\"
-.\" For the time being, the absence of this remark does not imply the safety
-.\" properties we documented are identical to those mandated by POSIX for
-.\" the corresponding functions.
-.TP
-.I :identifier
-Annotations may sometimes be followed by identifiers,
-intended to group several functions that, for example,
-access the data structures in an unsafe way, as in
-.I race
-and
-.IR const ,
-or to provide more specific information,
-such as naming a signal in a function marked with
-.IR sig .
-It is envisioned that it may be applied to
-.I lock
-and
-.I corrupt
-as well in the future.
-.IP
-In most cases, the identifier will name a set of functions,
-but it may name global objects or function arguments,
-or identifiable properties or logical components associated with them,
-with a notation such as, for example,
-.I :buf(arg)
-to denote a buffer associated with the argument
-.IR arg ,
-or
-.I :tcattr(fd)
-to denote the terminal attributes of a file descriptor
-.IR fd .
-.IP
-The most common use for identifiers is to provide logical groups of
-functions and arguments that need to be protected by the same
-synchronization primitive in order to ensure safe operation in a given
-context.
-.TP
-.I /condition
-Some safety annotations may be conditional,
-in that they only apply if a boolean expression involving arguments,
-global variables or even the underlying kernel evaluates to true.
-.\" Such conditions as
-.\" .I /hurd
-.\" or
-.\" .I /!linux!bsd
-.\" indicate the preceding marker only
-.\" applies when the underlying kernel is the HURD,
-.\" or when it is neither Linux nor a BSD kernel, respectively.
-For example,
-.I /!ps
-and
-.I /one_per_line
-indicate the preceding marker only applies when argument
-.I ps
-is NULL, or global variable
-.I one_per_line
-is nonzero.
-.IP
-When all marks that render a function unsafe are
-adorned with such conditions,
-and none of the named conditions hold,
-then the function can be regarded as safe.
-.SH SEE ALSO
-.BR pthreads (7),
-.BR signal\-safety (7)
diff --git a/man7/boot.7 b/man7/boot.7
deleted file mode 100644
index dab4a1aac..000000000
--- a/man7/boot.7
+++ /dev/null
@@ -1,230 +0,0 @@
-.\" Written by Oron Peled <oron@actcom.co.il>.
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" I tried to be as much generic in the description as possible:
-.\" - General boot sequence is applicable to almost any
-.\" OS/Machine (DOS/PC, Linux/PC, Solaris/SPARC, CMS/S390)
-.\" - kernel and init(1) is applicable to almost any UNIX/Linux
-.\" - boot scripts are applicable to SYSV-R4 based UNIX/Linux
-.\"
-.\" Modified 2004-11-03 patch from Martin Schulze <joey@infodrom.org>
-.\"
-.TH boot 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-boot \- System bootup process based on UNIX System V Release 4
-.SH DESCRIPTION
-The \fBbootup process\fR (or "\fBboot sequence\fR") varies in details
-among systems, but can be roughly divided into phases controlled by
-the following components:
-.IP (1) 5
-hardware
-.IP (2)
-operating system (OS) loader
-.IP (3)
-kernel
-.IP (4)
-root user-space process (\fIinit\fR and \fIinittab\fR)
-.IP (5)
-boot scripts
-.PP
-Each of these is described below in more detail.
-.SS Hardware
-After power-on or hard reset, control is given
-to a program stored in read-only memory (normally
-PROM); for historical reasons involving the personal
-computer, this program is often called "the \fBBIOS\fR".
-.PP
-This program normally performs a basic self-test of the
-machine and accesses nonvolatile memory to read
-further parameters.
-This memory in the PC is
-battery-backed CMOS memory, so most people
-refer to it as "the \fBCMOS\fR"; outside
-of the PC world, it is usually called "the \fBNVRAM\fR"
-(nonvolatile RAM).
-.PP
-The parameters stored in the NVRAM vary among
-systems, but as a minimum, they should specify
-which device can supply an OS loader, or at least which
-devices may be probed for one; such a device is known as "the
-\fBboot device\fR".
-The hardware boot stage loads the OS loader from a fixed position on
-the boot device, and then transfers control to it.
-.TP
-Note:
-The device from which the OS loader is read may be attached via a network,
-in which case the details of booting are further specified by protocols such as
-DHCP, TFTP, PXE, Etherboot, etc.
-.SS OS loader
-The main job of the OS loader is to locate the kernel
-on some device, load it, and run it.
-Most OS loaders allow
-interactive use, in order to enable specification of an alternative
-kernel (maybe a backup in case the one last compiled
-isn't functioning) and to pass optional parameters
-to the kernel.
-.PP
-In a traditional PC, the OS loader is located in the initial 512-byte block
-of the boot device; this block is known as "the \fBMBR\fR"
-(Master Boot Record).
-.PP
-In most systems, the OS loader is very
-limited due to various constraints.
-Even on non-PC systems,
-there are some limitations on the size and complexity
-of this loader, but the size limitation of the PC MBR
-(512 bytes, including the partition table) makes it
-almost impossible to squeeze much functionality into it.
-.PP
-Therefore, most systems split the role of loading the OS between
-a primary OS loader and a secondary OS loader; this secondary
-OS loader may be located within a larger portion of persistent
-storage, such as a disk partition.
-.PP
-In Linux, the OS loader is often either
-.BR lilo (8)
-or
-.BR grub (8).
-.SS Kernel
-When the kernel is loaded, it initializes various components of
-the computer and operating system; each portion of software
-responsible for such a task is usually consider "a \fBdriver\fR" for
-the applicable component.
-The kernel starts the virtual memory
-swapper (it is a kernel process, called "kswapd" in a modern Linux
-kernel), and mounts some filesystem at the root path,
-.IR / .
-.PP
-Some of the parameters that may be passed to the kernel
-relate to these activities (for example, the default root filesystem
-can be overridden); for further information
-on Linux kernel parameters, read
-.BR bootparam (7).
-.PP
-Only then does the kernel create the initial userland
-process, which is given the number 1 as its
-.B PID
-(process ID).
-Traditionally, this process executes the
-program
-.IR /sbin/init ,
-to which are passed the parameters that haven't already been
-handled by the kernel.
-.SS Root user-space process
-.TP
-Note:
-The following description applies to an OS based on UNIX System V Release 4.
-However, a number of widely used systems have adopted a related but
-fundamentally different approach known as
-.BR systemd (1),
-for which the bootup process is detailed in its associated
-.BR bootup (7).
-.PP
-When
-.I /sbin/init
-starts, it reads
-.I /etc/inittab
-for further instructions.
-This file defines what should be run when the
-.I /sbin/init
-program is instructed to enter a particular run level, giving
-the administrator an easy way to establish an environment
-for some usage; each run level is associated with a set of services
-(for example, run level
-.B S
-is single-user mode,
-and run level
-.B 2
-entails running most network services).
-.PP
-The administrator may change the current run level via
-.BR init (1),
-and query the current run level via
-.BR runlevel (8).
-.PP
-However, since it is not convenient to manage individual services
-by editing this file,
-.I /etc/inittab
-only bootstraps a set of scripts
-that actually start/stop the individual services.
-.SS Boot scripts
-.TP
-Note:
-The following description applies to an OS based on UNIX System V Release 4.
-However, a number of widely used systems (Slackware Linux, FreeBSD, OpenBSD)
-have a somewhat different scheme for boot scripts.
-.PP
-For each managed service (mail, nfs server, cron, etc.), there is
-a single startup script located in a specific directory
-.RI ( /etc/init.d
-in most versions of Linux).
-Each of these scripts accepts as a single argument
-the word "start" (causing it to start the service) or the word
-\&"stop" (causing it to stop the service).
-The script may optionally
-accept other "convenience" parameters (e.g., "restart" to stop and then
-start, "status" to display the service status, etc.).
-Running the script
-without parameters displays the possible arguments.
-.SS Sequencing directories
-To make specific scripts start/stop at specific run levels and in a
-specific order, there are \fIsequencing directories\fR, normally
-of the form \fI/etc/rc[0\-6S].d\fR.
-In each of these directories,
-there are links (usually symbolic) to the scripts in the \fI/etc/init.d\fR
-directory.
-.PP
-A primary script (usually \fI/etc/rc\fR) is called from
-.BR inittab (5);
-this primary script calls each service's script via a link in the
-relevant sequencing directory.
-Each link whose name begins with \[aq]S\[aq] is called with
-the argument "start" (thereby starting the service).
-Each link whose name begins with \[aq]K\[aq] is called with
-the argument "stop" (thereby stopping the service).
-.PP
-To define the starting or stopping order within the same run level,
-the name of a link contains an \fBorder-number\fR.
-Also, for clarity, the name of a link usually
-ends with the name of the service to which it refers.
-For example,
-the link \fI/etc/rc2.d/S80sendmail\fR starts the
-.BR sendmail (8)
-service on
-run level 2.
-This happens after \fI/etc/rc2.d/S12syslog\fR is run
-but before \fI/etc/rc2.d/S90xfs\fR is run.
-.PP
-To manage these links is to manage the boot order and run levels;
-under many systems, there are tools to help with this task
-(e.g.,
-.BR chkconfig (8)).
-.SS Boot configuration
-A program that provides a service is often called a "\fBdaemon\fR".
-Usually, a daemon may receive various command-line options
-and parameters.
-To allow a system administrator to change these
-inputs without editing an entire boot script,
-some separate configuration file is used, and is located in a specific
-directory where an associated boot script may find it
-(\fI/etc/sysconfig\fR on older Red Hat systems).
-.PP
-In older UNIX systems, such a file contained the actual command line
-options for a daemon, but in modern Linux systems (and also
-in HP-UX), it just contains shell variables.
-A boot script in \fI/etc/init.d\fR reads and includes its configuration
-file (that is, it "\fBsources\fR" its configuration file) and then uses
-the variable values.
-.SH FILES
-.IR /etc/init.d/ ,
-.IR /etc/rc[S0\-6].d/ ,
-.I /etc/sysconfig/
-.SH SEE ALSO
-.BR init (1),
-.BR systemd (1),
-.BR inittab (5),
-.BR bootparam (7),
-.BR bootup (7),
-.BR runlevel (8),
-.BR shutdown (8)
diff --git a/man7/bootparam.7 b/man7/bootparam.7
deleted file mode 100644
index b9ca2ac26..000000000
--- a/man7/bootparam.7
+++ /dev/null
@@ -1,664 +0,0 @@
-.\" Copyright (c) 1995,1997 Paul Gortmaker and Andries Brouwer
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" This man page written 950814 by aeb, based on Paul Gortmaker's HOWTO
-.\" (dated v1.0.1, 15/08/95).
-.\" Major update, aeb, 970114.
-.\"
-.TH bootparam 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-bootparam \- introduction to boot time parameters of the Linux kernel
-.SH DESCRIPTION
-The Linux kernel accepts certain 'command-line options' or 'boot time
-parameters' at the moment it is started.
-In general, this is used to
-supply the kernel with information about hardware parameters that
-the kernel would not be able to determine on its own, or to avoid/override
-the values that the kernel would otherwise detect.
-.PP
-When the kernel is booted directly by the BIOS,
-you have no opportunity to specify any parameters.
-So, in order to take advantage of this possibility you have to
-use a boot loader that is able to pass parameters, such as GRUB.
-.SS The argument list
-The kernel command line is parsed into a list of strings
-(boot arguments) separated by spaces.
-Most of the boot arguments have the form:
-.PP
-.in +4n
-.EX
-name[=value_1][,value_2]...[,value_10]
-.EE
-.in
-.PP
-where 'name' is a unique keyword that is used to identify what part of
-the kernel the associated values (if any) are to be given to.
-Note the limit of 10 is real, as the present code handles only 10 comma
-separated parameters per keyword.
-(However, you can reuse the same
-keyword with up to an additional 10 parameters in unusually
-complicated situations, assuming the setup function supports it.)
-.PP
-Most of the sorting is coded in the kernel source file
-.IR init/main.c .
-First, the kernel
-checks to see if the argument is any of the special arguments 'root=',
-\&'nfsroot=', 'nfsaddrs=', 'ro', 'rw', 'debug', or 'init'.
-The meaning of these special arguments is described below.
-.PP
-Then it walks a list of setup functions
-to see if the specified argument string (such as 'foo') has
-been associated with a setup function ('foo_setup()') for a particular
-device or part of the kernel.
-If you passed the kernel the line
-foo=3,4,5,6 then the kernel would search the bootsetups array to see
-if 'foo' was registered.
-If it was, then it would call the setup
-function associated with 'foo' (foo_setup()) and hand it the arguments
-3, 4, 5, and 6 as given on the kernel command line.
-.PP
-Anything of the form 'foo=bar' that is not accepted as a setup function
-as described above is then interpreted as an environment variable to
-be set.
-A (useless?) example would be to use 'TERM=vt100' as a boot
-argument.
-.PP
-Any remaining arguments that were not picked up by the kernel and were
-not interpreted as environment variables are then passed onto PID 1,
-which is usually the
-.BR init (1)
-program.
-The most common argument that
-is passed to the
-.I init
-process is the word 'single' which instructs it
-to boot the computer in single user mode, and not launch all the usual
-daemons.
-Check the manual page for the version of
-.BR init (1)
-installed on
-your system to see what arguments it accepts.
-.SS General non-device-specific boot arguments
-.TP
-.B "'init=...'"
-This sets the initial command to be executed by the kernel.
-If this is not set, or cannot be found, the kernel will try
-.IR /sbin/init ,
-then
-.IR /etc/init ,
-then
-.IR /bin/init ,
-then
-.I /bin/sh
-and panic if all of this fails.
-.TP
-.B "'nfsaddrs=...'"
-This sets the NFS boot address to the given string.
-This boot address is used in case of a net boot.
-.TP
-.B "'nfsroot=...'"
-This sets the NFS root name to the given string.
-If this string
-does not begin with '/' or ',' or a digit, then it is prefixed by
-\&'/tftpboot/'.
-This root name is used in case of a net boot.
-.TP
-.B "'root=...'"
-This argument tells the kernel what device is to be used as the root
-filesystem while booting.
-The default of this setting is determined
-at compile time, and usually is the value of the root device of the
-system that the kernel was built on.
-To override this value, and
-select the second floppy drive as the root device, one would
-use 'root=/dev/fd1'.
-.IP
-The root device can be specified symbolically or numerically.
-A symbolic specification has the form
-.IR /dev/XXYN ,
-where XX designates
-the device type (e.g., 'hd' for ST-506 compatible hard disk, with Y in
-\&'a'\[en]'d'; 'sd' for SCSI compatible disk, with Y in 'a'\[en]'e'),
-Y the driver letter or
-number, and N the number (in decimal) of the partition on this device.
-.IP
-Note that this has nothing to do with the designation of these
-devices on your filesystem.
-The '/dev/' part is purely conventional.
-.IP
-The more awkward and less portable numeric specification of the above
-possible root devices in major/minor format is also accepted.
-(For example,
-.I /dev/sda3
-is major 8, minor 3, so you could use 'root=0x803' as an
-alternative.)
-.TP
-.B 'rootdelay='
-This parameter sets the delay (in seconds) to pause before attempting
-to mount the root filesystem.
-.TP
-.B 'rootflags=...'
-This parameter sets the mount option string for the root filesystem
-(see also
-.BR fstab (5)).
-.TP
-.B 'rootfstype=...'
-The 'rootfstype' option tells the kernel to mount the root filesystem as
-if it where of the type specified.
-This can be useful (for example) to
-mount an ext3 filesystem as ext2 and then remove the journal in the root
-filesystem, in fact reverting its format from ext3 to ext2 without the
-need to boot the box from alternate media.
-.TP
-.BR 'ro' " and " 'rw'
-The 'ro' option tells the kernel to mount the root filesystem
-as 'read-only' so that filesystem consistency check programs (fsck)
-can do their work on a quiescent filesystem.
-No processes can
-write to files on the filesystem in question until it is 'remounted'
-as read/write capable, for example, by 'mount \-w \-n \-o remount /'.
-(See also
-.BR mount (8).)
-.IP
-The 'rw' option tells the kernel to mount the root filesystem read/write.
-This is the default.
-.TP
-.B "'resume=...'"
-This tells the kernel the location of
-the suspend-to-disk data that you want the machine to resume from
-after hibernation.
-Usually, it is the same as your swap partition or file.
-Example:
-.IP
-.in +4n
-.EX
-resume=/dev/hda2
-.EE
-.in
-.TP
-.B "'reserve=...'"
-This is used to protect I/O port regions from probes.
-The form of the command is:
-.IP
-.in +4n
-.EX
-.BI reserve= iobase,extent[,iobase,extent]...
-.EE
-.in
-.IP
-In some machines it may be necessary to prevent device drivers from
-checking for devices (auto-probing) in a specific region.
-This may be
-because of hardware that reacts badly to the probing, or hardware
-that would be mistakenly identified, or merely
-hardware you don't want the kernel to initialize.
-.IP
-The reserve boot-time argument specifies an I/O port region that
-shouldn't be probed.
-A device driver will not probe a reserved region,
-unless another boot argument explicitly specifies that it do so.
-.IP
-For example, the boot line
-.IP
-.in +4n
-.EX
-reserve=0x300,32 blah=0x300
-.EE
-.in
-.IP
-keeps all device drivers except the driver for 'blah' from probing
-0x300\-0x31f.
-.TP
-.B "'panic=N'"
-By default, the kernel will not reboot after a panic, but this option
-will cause a kernel reboot after N seconds (if N is greater than zero).
-This panic timeout can also be set by
-.IP
-.in +4n
-.EX
-echo N > /proc/sys/kernel/panic
-.EE
-.in
-.TP
-.B "'reboot=[warm|cold][,[bios|hard]]'"
-Since Linux 2.0.22, a reboot is by default a cold reboot.
-One asks for the old default with 'reboot=warm'.
-(A cold reboot may be required to reset certain hardware,
-but might destroy not yet written data in a disk cache.
-A warm reboot may be faster.)
-By default, a reboot is hard, by asking the keyboard controller
-to pulse the reset line low, but there is at least one type
-of motherboard where that doesn't work.
-The option 'reboot=bios' will
-instead jump through the BIOS.
-.TP
-.BR 'nosmp' " and " 'maxcpus=N'
-(Only when __SMP__ is defined.)
-A command-line option of 'nosmp' or 'maxcpus=0' will disable SMP
-activation entirely; an option 'maxcpus=N' limits the maximum number
-of CPUs activated in SMP mode to N.
-.SS Boot arguments for use by kernel developers
-.TP
-.B "'debug'"
-Kernel messages are handed off to a daemon (e.g.,
-.BR klogd (8)
-or similar) so that they may be logged to disk.
-Messages with a priority above
-.I console_loglevel
-are also printed on the console.
-(For a discussion of log levels, see
-.BR syslog (2).)
-By default,
-.I console_loglevel
-is set to log messages at levels higher than
-.BR KERN_DEBUG .
-This boot argument will cause the kernel to also
-print messages logged at level
-.BR KERN_DEBUG .
-The console loglevel can also be set on a booted system via the
-.I /proc/sys/kernel/printk
-file (described in
-.BR syslog (2)),
-the
-.BR syslog (2)
-.B SYSLOG_ACTION_CONSOLE_LEVEL
-operation, or
-.BR dmesg (8).
-.TP
-.B "'profile=N'"
-It is possible to enable a kernel profiling function,
-if one wishes to find out where the kernel is spending its CPU cycles.
-Profiling is enabled by setting the variable
-.I prof_shift
-to a nonzero value.
-This is done either by specifying
-.B CONFIG_PROFILE
-at compile time, or by giving the 'profile=' option.
-Now the value that
-.I prof_shift
-gets will be N, when given, or
-.BR CONFIG_PROFILE_SHIFT ,
-when that is given, or 2, the default.
-The significance of this variable is that it
-gives the granularity of the profiling: each clock tick, if the
-system was executing kernel code, a counter is incremented:
-.IP
-.in +4n
-.EX
-profile[address >> prof_shift]++;
-.EE
-.in
-.IP
-The raw profiling information can be read from
-.IR /proc/profile .
-Probably you'll want to use a tool such as readprofile.c to digest it.
-Writing to
-.I /proc/profile
-will clear the counters.
-.SS Boot arguments for ramdisk use
-(Only if the kernel was compiled with
-.BR CONFIG_BLK_DEV_RAM .)
-In general it is a bad idea to use a ramdisk under Linux\[em]the
-system will use available memory more efficiently itself.
-But while booting,
-it is often useful to load the floppy contents into a
-ramdisk.
-One might also have a system in which first
-some modules (for filesystem or hardware) must be loaded
-before the main disk can be accessed.
-.IP
-In Linux 1.3.48, ramdisk handling was changed drastically.
-Earlier, the memory was allocated statically, and there was
-a 'ramdisk=N' parameter to tell its size.
-(This could also be set in the kernel image at compile time.)
-These days ram disks use the buffer cache, and grow dynamically.
-For a lot of information on the current ramdisk
-setup, see the kernel source file
-.I Documentation/blockdev/ramdisk.txt
-.RI ( Documentation/ramdisk.txt
-in older kernels).
-.IP
-There are four parameters, two boolean and two integral.
-.TP
-.B "'load_ramdisk=N'"
-If N=1, do load a ramdisk.
-If N=0, do not load a ramdisk.
-(This is the default.)
-.TP
-.B "'prompt_ramdisk=N'"
-If N=1, do prompt for insertion of the floppy.
-(This is the default.)
-If N=0, do not prompt.
-(Thus, this parameter is never needed.)
-.TP
-.BR 'ramdisk_size=N' " or (obsolete) " 'ramdisk=N'
-Set the maximal size of the ramdisk(s) to N kB.
-The default is 4096 (4\ MB).
-.TP
-.B "'ramdisk_start=N'"
-Sets the starting block number (the offset on the floppy where
-the ramdisk starts) to N.
-This is needed in case the ramdisk follows a kernel image.
-.TP
-.B "'noinitrd'"
-(Only if the kernel was compiled with
-.B CONFIG_BLK_DEV_RAM
-and
-.BR CONFIG_BLK_DEV_INITRD .)
-These days it is possible to compile the kernel to use initrd.
-When this feature is enabled, the boot process will load the kernel
-and an initial ramdisk; then the kernel converts initrd into
-a "normal" ramdisk, which is mounted read-write as root device;
-then
-.I /linuxrc
-is executed; afterward the "real" root filesystem is mounted,
-and the initrd filesystem is moved over to
-.IR /initrd ;
-finally
-the usual boot sequence (e.g., invocation of
-.IR /sbin/init )
-is performed.
-.IP
-For a detailed description of the initrd feature, see the kernel source file
-.I Documentation/admin\-guide/initrd.rst
-.\" commit 9d85025b0418163fae079c9ba8f8445212de8568
-(or
-.I Documentation/initrd.txt
-before Linux 4.10).
-.IP
-The 'noinitrd' option tells the kernel that although it was compiled for
-operation with initrd, it should not go through the above steps, but
-leave the initrd data under
-.IR /dev/initrd .
-(This device can be used only once: the data is freed as soon as
-the last process that used it has closed
-.IR /dev/initrd .)
-.SS Boot arguments for SCSI devices
-General notation for this section:
-.PP
-.I iobase
--- the first I/O port that the SCSI host occupies.
-These are specified in hexadecimal notation,
-and usually lie in the range from 0x200 to 0x3ff.
-.PP
-.I irq
--- the hardware interrupt that the card is configured to use.
-Valid values will be dependent on the card in question, but will
-usually be 5, 7, 9, 10, 11, 12, and 15.
-The other values are usually
-used for common peripherals like IDE hard disks, floppies, serial
-ports, and so on.
-.PP
-.I scsi\-id
--- the ID that the host adapter uses to identify itself on the
-SCSI bus.
-Only some host adapters allow you to change this value, as
-most have it permanently specified internally.
-The usual default value
-is 7, but the Seagate and Future Domain TMC-950 boards use 6.
-.PP
-.I parity
--- whether the SCSI host adapter expects the attached devices
-to supply a parity value with all information exchanges.
-Specifying a one indicates parity checking is enabled,
-and a zero disables parity checking.
-Again, not all adapters will support selection of parity
-behavior as a boot argument.
-.TP
-.B "'max_scsi_luns=...'"
-A SCSI device can have a number of 'subdevices' contained within
-itself.
-The most common example is one of the new SCSI CD-ROMs that
-handle more than one disk at a time.
-Each CD is addressed as a
-\&'Logical Unit Number' (LUN) of that particular device.
-But most
-devices, such as hard disks, tape drives, and such are only one device,
-and will be assigned to LUN zero.
-.IP
-Some poorly designed SCSI devices cannot handle being probed for
-LUNs not equal to zero.
-Therefore, if the compile-time flag
-.B CONFIG_SCSI_MULTI_LUN
-is not set, newer kernels will by default probe only LUN zero.
-.IP
-To specify the number of probed LUNs at boot, one enters
-\&'max_scsi_luns=n' as a boot arg, where n is a number between one and
-eight.
-To avoid problems as described above, one would use n=1 to
-avoid upsetting such broken devices.
-.TP
-.B "SCSI tape configuration"
-Some boot time configuration of the SCSI tape driver can be achieved
-by using the following:
-.IP
-.in +4n
-.EX
-.BI st= buf_size[,write_threshold[,max_bufs]]
-.EE
-.in
-.IP
-The first two numbers are specified in units of kB.
-The default
-.I buf_size
-is 32k\ B, and the maximum size that can be specified is a
-ridiculous 16384\ kB.
-The
-.I write_threshold
-is the value at which the buffer is committed to tape, with a
-default value of 30\ kB.
-The maximum number of buffers varies
-with the number of drives detected, and has a default of two.
-An example usage would be:
-.IP
-.in +4n
-.EX
-st=32,30,2
-.EE
-.in
-.IP
-Full details can be found in the file
-.I Documentation/scsi/st.txt
-(or
-.I drivers/scsi/README.st
-for older kernels) in the Linux kernel source.
-.SS Hard disks
-.TP
-.B "IDE Disk/CD-ROM Driver Parameters"
-The IDE driver accepts a number of parameters, which range from disk
-geometry specifications, to support for broken controller chips.
-Drive-specific options are specified by using 'hdX=' with X in 'a'\[en]'h'.
-.IP
-Non-drive-specific options are specified with the prefix 'hd='.
-Note that using a drive-specific prefix for a non-drive-specific option
-will still work, and the option will just be applied as expected.
-.IP
-Also note that 'hd=' can be used to refer to the next unspecified
-drive in the (a, ..., h) sequence.
-For the following discussions,
-the 'hd=' option will be cited for brevity.
-See the file
-.I Documentation/ide/ide.txt
-(or
-.I Documentation/ide.txt
-.\" Linux 2.0, 2.2, 2.4
-in older kernels, or
-.I drivers/block/README.ide
-in ancient kernels) in the Linux kernel source for more details.
-.TP
-.B "The 'hd=cyls,heads,sects[,wpcom[,irq]]' options"
-These options are used to specify the physical geometry of the disk.
-Only the first three values are required.
-The cylinder/head/sectors
-values will be those used by fdisk.
-The write precompensation value
-is ignored for IDE disks.
-The IRQ value specified will be the IRQ
-used for the interface that the drive resides on, and is not really a
-drive-specific parameter.
-.TP
-.B "The 'hd=serialize' option"
-The dual IDE interface CMD-640 chip is broken as designed such that
-when drives on the secondary interface are used at the same time as
-drives on the primary interface, it will corrupt your data.
-Using this
-option tells the driver to make sure that both interfaces are never
-used at the same time.
-.TP
-.B "The 'hd=noprobe' option"
-Do not probe for this drive.
-For example,
-.IP
-.in +4n
-.EX
-hdb=noprobe hdb=1166,7,17
-.EE
-.in
-.IP
-would disable the probe, but still specify the drive geometry so
-that it would be registered as a valid block device, and hence
-usable.
-.TP
-.B "The 'hd=nowerr' option"
-Some drives apparently have the
-.B WRERR_STAT
-bit stuck on permanently.
-This enables a work-around for these broken devices.
-.TP
-.B "The 'hd=cdrom' option"
-This tells the IDE driver that there is an ATAPI compatible CD-ROM
-attached in place of a normal IDE hard disk.
-In most cases the CD-ROM
-is identified automatically, but if it isn't then this may help.
-.TP
-.B "Standard ST-506 Disk Driver Options ('hd=')"
-The standard disk driver can accept geometry arguments for the disks
-similar to the IDE driver.
-Note however that it expects only three
-values (C/H/S); any more or any less and it will silently ignore you.
-Also, it accepts only 'hd=' as an argument, that is, 'hda='
-and so on are not valid here.
-The format is as follows:
-.IP
-.in +4n
-.EX
-hd=cyls,heads,sects
-.EE
-.in
-.IP
-If there are two disks installed, the above is repeated with the
-geometry parameters of the second disk.
-.SS Ethernet devices
-Different drivers make use of different parameters, but they all at
-least share having an IRQ, an I/O port base value, and a name.
-In its most generic form, it looks something like this:
-.PP
-.in +4n
-.EX
-ether=irq,iobase[,param_1[,...param_8]],name
-.EE
-.in
-.PP
-The first nonnumeric argument is taken as the name.
-The param_n values (if applicable) usually have different meanings for each
-different card/driver.
-Typical param_n values are used to specify
-things like shared memory address, interface selection, DMA channel
-and the like.
-.PP
-The most common use of this parameter is to force probing for a second
-ethercard, as the default is to probe only for one.
-This can be accomplished with a simple:
-.PP
-.in +4n
-.EX
-ether=0,0,eth1
-.EE
-.in
-.PP
-Note that the values of zero for the IRQ and I/O base in the above
-example tell the driver(s) to autoprobe.
-.PP
-The Ethernet-HowTo has extensive documentation on using multiple
-cards and on the card/driver-specific implementation
-of the param_n values where used.
-Interested readers should refer to
-the section in that document on their particular card.
-.SS The floppy disk driver
-There are many floppy driver options, and they are all listed in
-.I Documentation/blockdev/floppy.txt
-(or
-.I Documentation/floppy.txt
-in older kernels, or
-.I drivers/block/README.fd
-for ancient kernels) in the Linux kernel source.
-See that file for the details.
-.SS The sound driver
-The sound driver can also accept boot arguments to override the compiled-in
-values.
-This is not recommended, as it is rather complex.
-It is described in the Linux kernel source file
-.I Documentation/sound/oss/README.OSS
-.RI ( drivers/sound/Readme.linux
-in older kernel versions).
-It accepts
-a boot argument of the form:
-.PP
-.in +4n
-.EX
-sound=device1[,device2[,device3...[,device10]]]
-.EE
-.in
-.PP
-where each deviceN value is of the following format 0xTaaaId and the
-bytes are used as follows:
-.PP
-T \- device type: 1=FM, 2=SB, 3=PAS, 4=GUS, 5=MPU401, 6=SB16,
-7=SB16-MPU401
-.PP
-aaa \- I/O address in hex.
-.PP
-I \- interrupt line in hex (i.e., 10=a, 11=b, ...)
-.PP
-d \- DMA channel.
-.PP
-As you can see, it gets pretty messy, and you are better off to compile
-in your own personal values as recommended.
-Using a boot argument of
-\&'sound=0' will disable the sound driver entirely.
-.SS The line printer driver
-.TP
-.B "'lp='"
-.br
-Syntax:
-.IP
-.in +4n
-.EX
-lp=0
-lp=auto
-lp=reset
-lp=port[,port...]
-.EE
-.in
-.IP
-You can tell the printer driver what ports to use and what ports not
-to use.
-The latter comes in handy if you don't want the printer driver
-to claim all available parallel ports, so that other drivers
-(e.g., PLIP, PPA) can use them instead.
-.IP
-The format of the argument is multiple port names.
-For example,
-lp=none,parport0 would use the first parallel port for lp1, and
-disable lp0.
-To disable the printer driver entirely, one can use
-lp=0.
-.\" .SH AUTHORS
-.\" Linus Torvalds (and many others)
-.SH SEE ALSO
-.BR klogd (8),
-.BR mount (8)
-.PP
-For up-to-date information, see the kernel source file
-.IR Documentation/admin\-guide/kernel\-parameters.txt .
diff --git a/man7/bpf-helpers.7 b/man7/bpf-helpers.7
deleted file mode 100644
index 26ddf8369..000000000
--- a/man7/bpf-helpers.7
+++ /dev/null
@@ -1,5128 +0,0 @@
-.\" Man page generated from reStructuredText.
-.
-.
-.nr rst2man-indent-level 0
-.
-.de1 rstReportMargin
-\\$1 \\n[an-margin]
-level \\n[rst2man-indent-level]
-level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
--
-\\n[rst2man-indent0]
-\\n[rst2man-indent1]
-\\n[rst2man-indent2]
-..
-.de1 INDENT
-.\" .rstReportMargin pre:
-. RS \\$1
-. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
-. nr rst2man-indent-level +1
-.\" .rstReportMargin post:
-..
-.de UNINDENT
-. RE
-.\" indent \\n[an-margin]
-.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
-.nr rst2man-indent-level -1
-.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
-.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
-..
-.TH "BPF-HELPERS" 7 "2023-04-11" "Linux v6.2"
-.SH NAME
-BPF-HELPERS \- list of eBPF helper functions
-.\" Copyright (C) All BPF authors and contributors from 2014 to present.
-.
-.\" See git log include/uapi/linux/bpf.h in kernel tree for details.
-.
-.\"
-.
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.
-.\"
-.
-.\" Please do not edit this file. It was generated from the documentation
-.
-.\" located in file include/uapi/linux/bpf.h of the Linux kernel sources
-.
-.\" (helpers description), and from scripts/bpf_doc.py in the same
-.
-.\" repository (header and footer).
-.
-.SH DESCRIPTION
-.sp
-The extended Berkeley Packet Filter (eBPF) subsystem consists in programs
-written in a pseudo\-assembly language, then attached to one of the several
-kernel hooks and run in reaction of specific events. This framework differs
-from the older, \(dqclassic\(dq BPF (or \(dqcBPF\(dq) in several aspects, one of them being
-the ability to call special functions (or \(dqhelpers\(dq) from within a program.
-These functions are restricted to a white\-list of helpers defined in the
-kernel.
-.sp
-These helpers are used by eBPF programs to interact with the system, or with
-the context in which they work. For instance, they can be used to print
-debugging messages, to get the time since the system was booted, to interact
-with eBPF maps, or to manipulate network packets. Since there are several eBPF
-program types, and that they do not run in the same context, each program type
-can only call a subset of those helpers.
-.sp
-Due to eBPF conventions, a helper can not have more than five arguments.
-.sp
-Internally, eBPF programs call directly into the compiled helper functions
-without requiring any foreign\-function interface. As a result, calling helpers
-introduces no overhead, thus offering excellent performance.
-.sp
-This document is an attempt to list and document the helpers available to eBPF
-developers. They are sorted by chronological order (the oldest helpers in the
-kernel at the top).
-.SH HELPERS
-.INDENT 0.0
-.TP
-.B \fBvoid *bpf_map_lookup_elem(struct bpf_map *\fP\fImap\fP\fB, const void *\fP\fIkey\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Perform a lookup in \fImap\fP for an entry associated to \fIkey\fP\&.
-.TP
-.B Return
-Map value associated to \fIkey\fP, or \fBNULL\fP if no entry was
-found.
-.UNINDENT
-.TP
-.B \fBlong bpf_map_update_elem(struct bpf_map *\fP\fImap\fP\fB, const void *\fP\fIkey\fP\fB, const void *\fP\fIvalue\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Add or update the value of the entry associated to \fIkey\fP in
-\fImap\fP with \fIvalue\fP\&. \fIflags\fP is one of:
-.INDENT 7.0
-.TP
-.B \fBBPF_NOEXIST\fP
-The entry for \fIkey\fP must not exist in the map.
-.TP
-.B \fBBPF_EXIST\fP
-The entry for \fIkey\fP must already exist in the map.
-.TP
-.B \fBBPF_ANY\fP
-No condition on the existence of the entry for \fIkey\fP\&.
-.UNINDENT
-.sp
-Flag value \fBBPF_NOEXIST\fP cannot be used for maps of types
-\fBBPF_MAP_TYPE_ARRAY\fP or \fBBPF_MAP_TYPE_PERCPU_ARRAY\fP (all
-elements always exist), the helper would return an error.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_map_delete_elem(struct bpf_map *\fP\fImap\fP\fB, const void *\fP\fIkey\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Delete entry with \fIkey\fP from \fImap\fP\&.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_probe_read(void *\fP\fIdst\fP\fB, u32\fP \fIsize\fP\fB, const void *\fP\fIunsafe_ptr\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-For tracing programs, safely attempt to read \fIsize\fP bytes from
-kernel space address \fIunsafe_ptr\fP and store the data in \fIdst\fP\&.
-.sp
-Generally, use \fBbpf_probe_read_user\fP() or
-\fBbpf_probe_read_kernel\fP() instead.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBu64 bpf_ktime_get_ns(void)\fP
-.INDENT 7.0
-.TP
-.B Description
-Return the time elapsed since system boot, in nanoseconds.
-Does not include time the system was suspended.
-See: \fBclock_gettime\fP(\fBCLOCK_MONOTONIC\fP)
-.TP
-.B Return
-Current \fIktime\fP\&.
-.UNINDENT
-.TP
-.B \fBlong bpf_trace_printk(const char *\fP\fIfmt\fP\fB, u32\fP \fIfmt_size\fP\fB, ...)\fP
-.INDENT 7.0
-.TP
-.B Description
-This helper is a \(dqprintk()\-like\(dq facility for debugging. It
-prints a message defined by format \fIfmt\fP (of size \fIfmt_size\fP)
-to file \fI/sys/kernel/debug/tracing/trace\fP from DebugFS, if
-available. It can take up to three additional \fBu64\fP
-arguments (as an eBPF helpers, the total number of arguments is
-limited to five).
-.sp
-Each time the helper is called, it appends a line to the trace.
-Lines are discarded while \fI/sys/kernel/debug/tracing/trace\fP is
-open, use \fI/sys/kernel/debug/tracing/trace_pipe\fP to avoid this.
-The format of the trace is customizable, and the exact output
-one will get depends on the options set in
-\fI/sys/kernel/debug/tracing/trace_options\fP (see also the
-\fIREADME\fP file under the same directory). However, it usually
-defaults to something like:
-.INDENT 7.0
-.INDENT 3.5
-.sp
-.nf
-.ft C
-telnet\-470 [001] .N.. 419421.045894: 0x00000001: <fmt>
-.ft P
-.fi
-.UNINDENT
-.UNINDENT
-.sp
-In the above:
-.INDENT 7.0
-.INDENT 3.5
-.INDENT 0.0
-.IP \(bu 2
-\fBtelnet\fP is the name of the current task.
-.IP \(bu 2
-\fB470\fP is the PID of the current task.
-.IP \(bu 2
-\fB001\fP is the CPU number on which the task is
-running.
-.IP \(bu 2
-In \fB\&.N..\fP, each character refers to a set of
-options (whether irqs are enabled, scheduling
-options, whether hard/softirqs are running, level of
-preempt_disabled respectively). \fBN\fP means that
-\fBTIF_NEED_RESCHED\fP and \fBPREEMPT_NEED_RESCHED\fP
-are set.
-.IP \(bu 2
-\fB419421.045894\fP is a timestamp.
-.IP \(bu 2
-\fB0x00000001\fP is a fake value used by BPF for the
-instruction pointer register.
-.IP \(bu 2
-\fB<fmt>\fP is the message formatted with \fIfmt\fP\&.
-.UNINDENT
-.UNINDENT
-.UNINDENT
-.sp
-The conversion specifiers supported by \fIfmt\fP are similar, but
-more limited than for printk(). They are \fB%d\fP, \fB%i\fP,
-\fB%u\fP, \fB%x\fP, \fB%ld\fP, \fB%li\fP, \fB%lu\fP, \fB%lx\fP, \fB%lld\fP,
-\fB%lli\fP, \fB%llu\fP, \fB%llx\fP, \fB%p\fP, \fB%s\fP\&. No modifier (size
-of field, padding with zeroes, etc.) is available, and the
-helper will return \fB\-EINVAL\fP (but print nothing) if it
-encounters an unknown specifier.
-.sp
-Also, note that \fBbpf_trace_printk\fP() is slow, and should
-only be used for debugging purposes. For this reason, a notice
-block (spanning several lines) is printed to kernel logs and
-states that the helper should not be used \(dqfor production use\(dq
-the first time this helper is used (or more precisely, when
-\fBtrace_printk\fP() buffers are allocated). For passing values
-to user space, perf events should be preferred.
-.TP
-.B Return
-The number of bytes written to the buffer, or a negative error
-in case of failure.
-.UNINDENT
-.TP
-.B \fBu32 bpf_get_prandom_u32(void)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get a pseudo\-random number.
-.sp
-From a security point of view, this helper uses its own
-pseudo\-random internal state, and cannot be used to infer the
-seed of other random functions in the kernel. However, it is
-essential to note that the generator used by the helper is not
-cryptographically secure.
-.TP
-.B Return
-A random 32\-bit unsigned value.
-.UNINDENT
-.TP
-.B \fBu32 bpf_get_smp_processor_id(void)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get the SMP (symmetric multiprocessing) processor id. Note that
-all programs run with migration disabled, which means that the
-SMP processor id is stable during all the execution of the
-program.
-.TP
-.B Return
-The SMP id of the processor running the program.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_store_bytes(struct sk_buff *\fP\fIskb\fP\fB, u32\fP \fIoffset\fP\fB, const void *\fP\fIfrom\fP\fB, u32\fP \fIlen\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Store \fIlen\fP bytes from address \fIfrom\fP into the packet
-associated to \fIskb\fP, at \fIoffset\fP\&. \fIflags\fP are a combination of
-\fBBPF_F_RECOMPUTE_CSUM\fP (automatically recompute the
-checksum for the packet after storing the bytes) and
-\fBBPF_F_INVALIDATE_HASH\fP (set \fIskb\fP\fB\->hash\fP, \fIskb\fP\fB\->swhash\fP and \fIskb\fP\fB\->l4hash\fP to 0).
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_l3_csum_replace(struct sk_buff *\fP\fIskb\fP\fB, u32\fP \fIoffset\fP\fB, u64\fP \fIfrom\fP\fB, u64\fP \fIto\fP\fB, u64\fP \fIsize\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Recompute the layer 3 (e.g. IP) checksum for the packet
-associated to \fIskb\fP\&. Computation is incremental, so the helper
-must know the former value of the header field that was
-modified (\fIfrom\fP), the new value of this field (\fIto\fP), and the
-number of bytes (2 or 4) for this field, stored in \fIsize\fP\&.
-Alternatively, it is possible to store the difference between
-the previous and the new values of the header field in \fIto\fP, by
-setting \fIfrom\fP and \fIsize\fP to 0. For both methods, \fIoffset\fP
-indicates the location of the IP checksum within the packet.
-.sp
-This helper works in combination with \fBbpf_csum_diff\fP(),
-which does not update the checksum in\-place, but offers more
-flexibility and can handle sizes larger than 2 or 4 for the
-checksum to update.
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_l4_csum_replace(struct sk_buff *\fP\fIskb\fP\fB, u32\fP \fIoffset\fP\fB, u64\fP \fIfrom\fP\fB, u64\fP \fIto\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Recompute the layer 4 (e.g. TCP, UDP or ICMP) checksum for the
-packet associated to \fIskb\fP\&. Computation is incremental, so the
-helper must know the former value of the header field that was
-modified (\fIfrom\fP), the new value of this field (\fIto\fP), and the
-number of bytes (2 or 4) for this field, stored on the lowest
-four bits of \fIflags\fP\&. Alternatively, it is possible to store
-the difference between the previous and the new values of the
-header field in \fIto\fP, by setting \fIfrom\fP and the four lowest
-bits of \fIflags\fP to 0. For both methods, \fIoffset\fP indicates the
-location of the IP checksum within the packet. In addition to
-the size of the field, \fIflags\fP can be added (bitwise OR) actual
-flags. With \fBBPF_F_MARK_MANGLED_0\fP, a null checksum is left
-untouched (unless \fBBPF_F_MARK_ENFORCE\fP is added as well), and
-for updates resulting in a null checksum the value is set to
-\fBCSUM_MANGLED_0\fP instead. Flag \fBBPF_F_PSEUDO_HDR\fP indicates
-the checksum is to be computed against a pseudo\-header.
-.sp
-This helper works in combination with \fBbpf_csum_diff\fP(),
-which does not update the checksum in\-place, but offers more
-flexibility and can handle sizes larger than 2 or 4 for the
-checksum to update.
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_tail_call(void *\fP\fIctx\fP\fB, struct bpf_map *\fP\fIprog_array_map\fP\fB, u32\fP \fIindex\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-This special helper is used to trigger a \(dqtail call\(dq, or in
-other words, to jump into another eBPF program. The same stack
-frame is used (but values on stack and in registers for the
-caller are not accessible to the callee). This mechanism allows
-for program chaining, either for raising the maximum number of
-available eBPF instructions, or to execute given programs in
-conditional blocks. For security reasons, there is an upper
-limit to the number of successive tail calls that can be
-performed.
-.sp
-Upon call of this helper, the program attempts to jump into a
-program referenced at index \fIindex\fP in \fIprog_array_map\fP, a
-special map of type \fBBPF_MAP_TYPE_PROG_ARRAY\fP, and passes
-\fIctx\fP, a pointer to the context.
-.sp
-If the call succeeds, the kernel immediately runs the first
-instruction of the new program. This is not a function call,
-and it never returns to the previous program. If the call
-fails, then the helper has no effect, and the caller continues
-to run its subsequent instructions. A call can fail if the
-destination program for the jump does not exist (i.e. \fIindex\fP
-is superior to the number of entries in \fIprog_array_map\fP), or
-if the maximum number of tail calls has been reached for this
-chain of programs. This limit is defined in the kernel by the
-macro \fBMAX_TAIL_CALL_CNT\fP (not accessible to user space),
-which is currently set to 33.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_clone_redirect(struct sk_buff *\fP\fIskb\fP\fB, u32\fP \fIifindex\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Clone and redirect the packet associated to \fIskb\fP to another
-net device of index \fIifindex\fP\&. Both ingress and egress
-interfaces can be used for redirection. The \fBBPF_F_INGRESS\fP
-value in \fIflags\fP is used to make the distinction (ingress path
-is selected if the flag is present, egress path otherwise).
-This is the only flag supported for now.
-.sp
-In comparison with \fBbpf_redirect\fP() helper,
-\fBbpf_clone_redirect\fP() has the associated cost of
-duplicating the packet buffer, but this can be executed out of
-the eBPF program. Conversely, \fBbpf_redirect\fP() is more
-efficient, but it is handled through an action code where the
-redirection happens only after the eBPF program has returned.
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBu64 bpf_get_current_pid_tgid(void)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get the current pid and tgid.
-.TP
-.B Return
-A 64\-bit integer containing the current tgid and pid, and
-created as such:
-\fIcurrent_task\fP\fB\->tgid << 32 |\fP
-\fIcurrent_task\fP\fB\->pid\fP\&.
-.UNINDENT
-.TP
-.B \fBu64 bpf_get_current_uid_gid(void)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get the current uid and gid.
-.TP
-.B Return
-A 64\-bit integer containing the current GID and UID, and
-created as such: \fIcurrent_gid\fP \fB<< 32 |\fP \fIcurrent_uid\fP\&.
-.UNINDENT
-.TP
-.B \fBlong bpf_get_current_comm(void *\fP\fIbuf\fP\fB, u32\fP \fIsize_of_buf\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Copy the \fBcomm\fP attribute of the current task into \fIbuf\fP of
-\fIsize_of_buf\fP\&. The \fBcomm\fP attribute contains the name of
-the executable (excluding the path) for the current task. The
-\fIsize_of_buf\fP must be strictly positive. On success, the
-helper makes sure that the \fIbuf\fP is NUL\-terminated. On failure,
-it is filled with zeroes.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBu32 bpf_get_cgroup_classid(struct sk_buff *\fP\fIskb\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Retrieve the classid for the current task, i.e. for the net_cls
-cgroup to which \fIskb\fP belongs.
-.sp
-This helper can be used on TC egress path, but not on ingress.
-.sp
-The net_cls cgroup provides an interface to tag network packets
-based on a user\-provided identifier for all traffic coming from
-the tasks belonging to the related cgroup. See also the related
-kernel documentation, available from the Linux sources in file
-\fIDocumentation/admin\-guide/cgroup\-v1/net_cls.rst\fP\&.
-.sp
-The Linux kernel has two versions for cgroups: there are
-cgroups v1 and cgroups v2. Both are available to users, who can
-use a mixture of them, but note that the net_cls cgroup is for
-cgroup v1 only. This makes it incompatible with BPF programs
-run on cgroups, which is a cgroup\-v2\-only feature (a socket can
-only hold data for one version of cgroups at a time).
-.sp
-This helper is only available is the kernel was compiled with
-the \fBCONFIG_CGROUP_NET_CLASSID\fP configuration option set to
-\(dq\fBy\fP\(dq or to \(dq\fBm\fP\(dq.
-.TP
-.B Return
-The classid, or 0 for the default unconfigured classid.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_vlan_push(struct sk_buff *\fP\fIskb\fP\fB, __be16\fP \fIvlan_proto\fP\fB, u16\fP \fIvlan_tci\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Push a \fIvlan_tci\fP (VLAN tag control information) of protocol
-\fIvlan_proto\fP to the packet associated to \fIskb\fP, then update
-the checksum. Note that if \fIvlan_proto\fP is different from
-\fBETH_P_8021Q\fP and \fBETH_P_8021AD\fP, it is considered to
-be \fBETH_P_8021Q\fP\&.
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_vlan_pop(struct sk_buff *\fP\fIskb\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Pop a VLAN header from the packet associated to \fIskb\fP\&.
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_get_tunnel_key(struct sk_buff *\fP\fIskb\fP\fB, struct bpf_tunnel_key *\fP\fIkey\fP\fB, u32\fP \fIsize\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get tunnel metadata. This helper takes a pointer \fIkey\fP to an
-empty \fBstruct bpf_tunnel_key\fP of \fBsize\fP, that will be
-filled with tunnel metadata for the packet associated to \fIskb\fP\&.
-The \fIflags\fP can be set to \fBBPF_F_TUNINFO_IPV6\fP, which
-indicates that the tunnel is based on IPv6 protocol instead of
-IPv4.
-.sp
-The \fBstruct bpf_tunnel_key\fP is an object that generalizes the
-principal parameters used by various tunneling protocols into a
-single struct. This way, it can be used to easily make a
-decision based on the contents of the encapsulation header,
-\(dqsummarized\(dq in this struct. In particular, it holds the IP
-address of the remote end (IPv4 or IPv6, depending on the case)
-in \fIkey\fP\fB\->remote_ipv4\fP or \fIkey\fP\fB\->remote_ipv6\fP\&. Also,
-this struct exposes the \fIkey\fP\fB\->tunnel_id\fP, which is
-generally mapped to a VNI (Virtual Network Identifier), making
-it programmable together with the \fBbpf_skb_set_tunnel_key\fP() helper.
-.sp
-Let\(aqs imagine that the following code is part of a program
-attached to the TC ingress interface, on one end of a GRE
-tunnel, and is supposed to filter out all messages coming from
-remote ends with IPv4 address other than 10.0.0.1:
-.INDENT 7.0
-.INDENT 3.5
-.sp
-.nf
-.ft C
-int ret;
-struct bpf_tunnel_key key = {};
-
-ret = bpf_skb_get_tunnel_key(skb, &key, sizeof(key), 0);
-if (ret < 0)
- return TC_ACT_SHOT; // drop packet
-
-if (key.remote_ipv4 != 0x0a000001)
- return TC_ACT_SHOT; // drop packet
-
-return TC_ACT_OK; // accept packet
-.ft P
-.fi
-.UNINDENT
-.UNINDENT
-.sp
-This interface can also be used with all encapsulation devices
-that can operate in \(dqcollect metadata\(dq mode: instead of having
-one network device per specific configuration, the \(dqcollect
-metadata\(dq mode only requires a single device where the
-configuration can be extracted from this helper.
-.sp
-This can be used together with various tunnels such as VXLan,
-Geneve, GRE or IP in IP (IPIP).
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_set_tunnel_key(struct sk_buff *\fP\fIskb\fP\fB, struct bpf_tunnel_key *\fP\fIkey\fP\fB, u32\fP \fIsize\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Populate tunnel metadata for packet associated to \fIskb.\fP The
-tunnel metadata is set to the contents of \fIkey\fP, of \fIsize\fP\&. The
-\fIflags\fP can be set to a combination of the following values:
-.INDENT 7.0
-.TP
-.B \fBBPF_F_TUNINFO_IPV6\fP
-Indicate that the tunnel is based on IPv6 protocol
-instead of IPv4.
-.TP
-.B \fBBPF_F_ZERO_CSUM_TX\fP
-For IPv4 packets, add a flag to tunnel metadata
-indicating that checksum computation should be skipped
-and checksum set to zeroes.
-.TP
-.B \fBBPF_F_DONT_FRAGMENT\fP
-Add a flag to tunnel metadata indicating that the
-packet should not be fragmented.
-.TP
-.B \fBBPF_F_SEQ_NUMBER\fP
-Add a flag to tunnel metadata indicating that a
-sequence number should be added to tunnel header before
-sending the packet. This flag was added for GRE
-encapsulation, but might be used with other protocols
-as well in the future.
-.UNINDENT
-.sp
-Here is a typical usage on the transmit path:
-.INDENT 7.0
-.INDENT 3.5
-.sp
-.nf
-.ft C
-struct bpf_tunnel_key key;
- populate key ...
-bpf_skb_set_tunnel_key(skb, &key, sizeof(key), 0);
-bpf_clone_redirect(skb, vxlan_dev_ifindex, 0);
-.ft P
-.fi
-.UNINDENT
-.UNINDENT
-.sp
-See also the description of the \fBbpf_skb_get_tunnel_key\fP()
-helper for additional information.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBu64 bpf_perf_event_read(struct bpf_map *\fP\fImap\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Read the value of a perf event counter. This helper relies on a
-\fImap\fP of type \fBBPF_MAP_TYPE_PERF_EVENT_ARRAY\fP\&. The nature of
-the perf event counter is selected when \fImap\fP is updated with
-perf event file descriptors. The \fImap\fP is an array whose size
-is the number of available CPUs, and each cell contains a value
-relative to one CPU. The value to retrieve is indicated by
-\fIflags\fP, that contains the index of the CPU to look up, masked
-with \fBBPF_F_INDEX_MASK\fP\&. Alternatively, \fIflags\fP can be set to
-\fBBPF_F_CURRENT_CPU\fP to indicate that the value for the
-current CPU should be retrieved.
-.sp
-Note that before Linux 4.13, only hardware perf event can be
-retrieved.
-.sp
-Also, be aware that the newer helper
-\fBbpf_perf_event_read_value\fP() is recommended over
-\fBbpf_perf_event_read\fP() in general. The latter has some ABI
-quirks where error and counter value are used as a return code
-(which is wrong to do since ranges may overlap). This issue is
-fixed with \fBbpf_perf_event_read_value\fP(), which at the same
-time provides more features over the \fBbpf_perf_event_read\fP() interface. Please refer to the description of
-\fBbpf_perf_event_read_value\fP() for details.
-.TP
-.B Return
-The value of the perf event counter read from the map, or a
-negative error code in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_redirect(u32\fP \fIifindex\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Redirect the packet to another net device of index \fIifindex\fP\&.
-This helper is somewhat similar to \fBbpf_clone_redirect\fP(), except that the packet is not cloned, which provides
-increased performance.
-.sp
-Except for XDP, both ingress and egress interfaces can be used
-for redirection. The \fBBPF_F_INGRESS\fP value in \fIflags\fP is used
-to make the distinction (ingress path is selected if the flag
-is present, egress path otherwise). Currently, XDP only
-supports redirection to the egress interface, and accepts no
-flag at all.
-.sp
-The same effect can also be attained with the more generic
-\fBbpf_redirect_map\fP(), which uses a BPF map to store the
-redirect target instead of providing it directly to the helper.
-.TP
-.B Return
-For XDP, the helper returns \fBXDP_REDIRECT\fP on success or
-\fBXDP_ABORTED\fP on error. For other program types, the values
-are \fBTC_ACT_REDIRECT\fP on success or \fBTC_ACT_SHOT\fP on
-error.
-.UNINDENT
-.TP
-.B \fBu32 bpf_get_route_realm(struct sk_buff *\fP\fIskb\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Retrieve the realm or the route, that is to say the
-\fBtclassid\fP field of the destination for the \fIskb\fP\&. The
-identifier retrieved is a user\-provided tag, similar to the
-one used with the net_cls cgroup (see description for
-\fBbpf_get_cgroup_classid\fP() helper), but here this tag is
-held by a route (a destination entry), not by a task.
-.sp
-Retrieving this identifier works with the clsact TC egress hook
-(see also \fBtc\-bpf(8)\fP), or alternatively on conventional
-classful egress qdiscs, but not on TC ingress path. In case of
-clsact TC egress hook, this has the advantage that, internally,
-the destination entry has not been dropped yet in the transmit
-path. Therefore, the destination entry does not need to be
-artificially held via \fBnetif_keep_dst\fP() for a classful
-qdisc until the \fIskb\fP is freed.
-.sp
-This helper is available only if the kernel was compiled with
-\fBCONFIG_IP_ROUTE_CLASSID\fP configuration option.
-.TP
-.B Return
-The realm of the route for the packet associated to \fIskb\fP, or 0
-if none was found.
-.UNINDENT
-.TP
-.B \fBlong bpf_perf_event_output(void *\fP\fIctx\fP\fB, struct bpf_map *\fP\fImap\fP\fB, u64\fP \fIflags\fP\fB, void *\fP\fIdata\fP\fB, u64\fP \fIsize\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Write raw \fIdata\fP blob into a special BPF perf event held by
-\fImap\fP of type \fBBPF_MAP_TYPE_PERF_EVENT_ARRAY\fP\&. This perf
-event must have the following attributes: \fBPERF_SAMPLE_RAW\fP
-as \fBsample_type\fP, \fBPERF_TYPE_SOFTWARE\fP as \fBtype\fP, and
-\fBPERF_COUNT_SW_BPF_OUTPUT\fP as \fBconfig\fP\&.
-.sp
-The \fIflags\fP are used to indicate the index in \fImap\fP for which
-the value must be put, masked with \fBBPF_F_INDEX_MASK\fP\&.
-Alternatively, \fIflags\fP can be set to \fBBPF_F_CURRENT_CPU\fP
-to indicate that the index of the current CPU core should be
-used.
-.sp
-The value to write, of \fIsize\fP, is passed through eBPF stack and
-pointed by \fIdata\fP\&.
-.sp
-The context of the program \fIctx\fP needs also be passed to the
-helper.
-.sp
-On user space, a program willing to read the values needs to
-call \fBperf_event_open\fP() on the perf event (either for
-one or for all CPUs) and to store the file descriptor into the
-\fImap\fP\&. This must be done before the eBPF program can send data
-into it. An example is available in file
-\fIsamples/bpf/trace_output_user.c\fP in the Linux kernel source
-tree (the eBPF program counterpart is in
-\fIsamples/bpf/trace_output_kern.c\fP).
-.sp
-\fBbpf_perf_event_output\fP() achieves better performance
-than \fBbpf_trace_printk\fP() for sharing data with user
-space, and is much better suitable for streaming data from eBPF
-programs.
-.sp
-Note that this helper is not restricted to tracing use cases
-and can be used with programs attached to TC or XDP as well,
-where it allows for passing data to user space listeners. Data
-can be:
-.INDENT 7.0
-.IP \(bu 2
-Only custom structs,
-.IP \(bu 2
-Only the packet payload, or
-.IP \(bu 2
-A combination of both.
-.UNINDENT
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_load_bytes(const void *\fP\fIskb\fP\fB, u32\fP \fIoffset\fP\fB, void *\fP\fIto\fP\fB, u32\fP \fIlen\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-This helper was provided as an easy way to load data from a
-packet. It can be used to load \fIlen\fP bytes from \fIoffset\fP from
-the packet associated to \fIskb\fP, into the buffer pointed by
-\fIto\fP\&.
-.sp
-Since Linux 4.7, usage of this helper has mostly been replaced
-by \(dqdirect packet access\(dq, enabling packet data to be
-manipulated with \fIskb\fP\fB\->data\fP and \fIskb\fP\fB\->data_end\fP
-pointing respectively to the first byte of packet data and to
-the byte after the last byte of packet data. However, it
-remains useful if one wishes to read large quantities of data
-at once from a packet into the eBPF stack.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_get_stackid(void *\fP\fIctx\fP\fB, struct bpf_map *\fP\fImap\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Walk a user or a kernel stack and return its id. To achieve
-this, the helper needs \fIctx\fP, which is a pointer to the context
-on which the tracing program is executed, and a pointer to a
-\fImap\fP of type \fBBPF_MAP_TYPE_STACK_TRACE\fP\&.
-.sp
-The last argument, \fIflags\fP, holds the number of stack frames to
-skip (from 0 to 255), masked with
-\fBBPF_F_SKIP_FIELD_MASK\fP\&. The next bits can be used to set
-a combination of the following flags:
-.INDENT 7.0
-.TP
-.B \fBBPF_F_USER_STACK\fP
-Collect a user space stack instead of a kernel stack.
-.TP
-.B \fBBPF_F_FAST_STACK_CMP\fP
-Compare stacks by hash only.
-.TP
-.B \fBBPF_F_REUSE_STACKID\fP
-If two different stacks hash into the same \fIstackid\fP,
-discard the old one.
-.UNINDENT
-.sp
-The stack id retrieved is a 32 bit long integer handle which
-can be further combined with other data (including other stack
-ids) and used as a key into maps. This can be useful for
-generating a variety of graphs (such as flame graphs or off\-cpu
-graphs).
-.sp
-For walking a stack, this helper is an improvement over
-\fBbpf_probe_read\fP(), which can be used with unrolled loops
-but is not efficient and consumes a lot of eBPF instructions.
-Instead, \fBbpf_get_stackid\fP() can collect up to
-\fBPERF_MAX_STACK_DEPTH\fP both kernel and user frames. Note that
-this limit can be controlled with the \fBsysctl\fP program, and
-that it should be manually increased in order to profile long
-user stacks (such as stacks for Java programs). To do so, use:
-.INDENT 7.0
-.INDENT 3.5
-.sp
-.nf
-.ft C
-# sysctl kernel.perf_event_max_stack=<new value>
-.ft P
-.fi
-.UNINDENT
-.UNINDENT
-.TP
-.B Return
-The positive or null stack id on success, or a negative error
-in case of failure.
-.UNINDENT
-.TP
-.B \fBs64 bpf_csum_diff(__be32 *\fP\fIfrom\fP\fB, u32\fP \fIfrom_size\fP\fB, __be32 *\fP\fIto\fP\fB, u32\fP \fIto_size\fP\fB, __wsum\fP \fIseed\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Compute a checksum difference, from the raw buffer pointed by
-\fIfrom\fP, of length \fIfrom_size\fP (that must be a multiple of 4),
-towards the raw buffer pointed by \fIto\fP, of size \fIto_size\fP
-(same remark). An optional \fIseed\fP can be added to the value
-(this can be cascaded, the seed may come from a previous call
-to the helper).
-.sp
-This is flexible enough to be used in several ways:
-.INDENT 7.0
-.IP \(bu 2
-With \fIfrom_size\fP == 0, \fIto_size\fP > 0 and \fIseed\fP set to
-checksum, it can be used when pushing new data.
-.IP \(bu 2
-With \fIfrom_size\fP > 0, \fIto_size\fP == 0 and \fIseed\fP set to
-checksum, it can be used when removing data from a packet.
-.IP \(bu 2
-With \fIfrom_size\fP > 0, \fIto_size\fP > 0 and \fIseed\fP set to 0, it
-can be used to compute a diff. Note that \fIfrom_size\fP and
-\fIto_size\fP do not need to be equal.
-.UNINDENT
-.sp
-This helper can be used in combination with
-\fBbpf_l3_csum_replace\fP() and \fBbpf_l4_csum_replace\fP(), to
-which one can feed in the difference computed with
-\fBbpf_csum_diff\fP().
-.TP
-.B Return
-The checksum result, or a negative error code in case of
-failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_get_tunnel_opt(struct sk_buff *\fP\fIskb\fP\fB, void *\fP\fIopt\fP\fB, u32\fP \fIsize\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Retrieve tunnel options metadata for the packet associated to
-\fIskb\fP, and store the raw tunnel option data to the buffer \fIopt\fP
-of \fIsize\fP\&.
-.sp
-This helper can be used with encapsulation devices that can
-operate in \(dqcollect metadata\(dq mode (please refer to the related
-note in the description of \fBbpf_skb_get_tunnel_key\fP() for
-more details). A particular example where this can be used is
-in combination with the Geneve encapsulation protocol, where it
-allows for pushing (with \fBbpf_skb_get_tunnel_opt\fP() helper)
-and retrieving arbitrary TLVs (Type\-Length\-Value headers) from
-the eBPF program. This allows for full customization of these
-headers.
-.TP
-.B Return
-The size of the option data retrieved.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_set_tunnel_opt(struct sk_buff *\fP\fIskb\fP\fB, void *\fP\fIopt\fP\fB, u32\fP \fIsize\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Set tunnel options metadata for the packet associated to \fIskb\fP
-to the option data contained in the raw buffer \fIopt\fP of \fIsize\fP\&.
-.sp
-See also the description of the \fBbpf_skb_get_tunnel_opt\fP()
-helper for additional information.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_change_proto(struct sk_buff *\fP\fIskb\fP\fB, __be16\fP \fIproto\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Change the protocol of the \fIskb\fP to \fIproto\fP\&. Currently
-supported are transition from IPv4 to IPv6, and from IPv6 to
-IPv4. The helper takes care of the groundwork for the
-transition, including resizing the socket buffer. The eBPF
-program is expected to fill the new headers, if any, via
-\fBskb_store_bytes\fP() and to recompute the checksums with
-\fBbpf_l3_csum_replace\fP() and \fBbpf_l4_csum_replace\fP(). The main case for this helper is to perform NAT64
-operations out of an eBPF program.
-.sp
-Internally, the GSO type is marked as dodgy so that headers are
-checked and segments are recalculated by the GSO/GRO engine.
-The size for GSO target is adapted as well.
-.sp
-All values for \fIflags\fP are reserved for future usage, and must
-be left at zero.
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_change_type(struct sk_buff *\fP\fIskb\fP\fB, u32\fP \fItype\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Change the packet type for the packet associated to \fIskb\fP\&. This
-comes down to setting \fIskb\fP\fB\->pkt_type\fP to \fItype\fP, except
-the eBPF program does not have a write access to \fIskb\fP\fB\->pkt_type\fP beside this helper. Using a helper here allows
-for graceful handling of errors.
-.sp
-The major use case is to change incoming \fIskb*s to
-**PACKET_HOST*\fP in a programmatic way instead of having to
-recirculate via \fBredirect\fP(..., \fBBPF_F_INGRESS\fP), for
-example.
-.sp
-Note that \fItype\fP only allows certain values. At this time, they
-are:
-.INDENT 7.0
-.TP
-.B \fBPACKET_HOST\fP
-Packet is for us.
-.TP
-.B \fBPACKET_BROADCAST\fP
-Send packet to all.
-.TP
-.B \fBPACKET_MULTICAST\fP
-Send packet to group.
-.TP
-.B \fBPACKET_OTHERHOST\fP
-Send packet to someone else.
-.UNINDENT
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_under_cgroup(struct sk_buff *\fP\fIskb\fP\fB, struct bpf_map *\fP\fImap\fP\fB, u32\fP \fIindex\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Check whether \fIskb\fP is a descendant of the cgroup2 held by
-\fImap\fP of type \fBBPF_MAP_TYPE_CGROUP_ARRAY\fP, at \fIindex\fP\&.
-.TP
-.B Return
-The return value depends on the result of the test, and can be:
-.INDENT 7.0
-.IP \(bu 2
-0, if the \fIskb\fP failed the cgroup2 descendant test.
-.IP \(bu 2
-1, if the \fIskb\fP succeeded the cgroup2 descendant test.
-.IP \(bu 2
-A negative error code, if an error occurred.
-.UNINDENT
-.UNINDENT
-.TP
-.B \fBu32 bpf_get_hash_recalc(struct sk_buff *\fP\fIskb\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Retrieve the hash of the packet, \fIskb\fP\fB\->hash\fP\&. If it is
-not set, in particular if the hash was cleared due to mangling,
-recompute this hash. Later accesses to the hash can be done
-directly with \fIskb\fP\fB\->hash\fP\&.
-.sp
-Calling \fBbpf_set_hash_invalid\fP(), changing a packet
-prototype with \fBbpf_skb_change_proto\fP(), or calling
-\fBbpf_skb_store_bytes\fP() with the
-\fBBPF_F_INVALIDATE_HASH\fP are actions susceptible to clear
-the hash and to trigger a new computation for the next call to
-\fBbpf_get_hash_recalc\fP().
-.TP
-.B Return
-The 32\-bit hash.
-.UNINDENT
-.TP
-.B \fBu64 bpf_get_current_task(void)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get the current task.
-.TP
-.B Return
-A pointer to the current task struct.
-.UNINDENT
-.TP
-.B \fBlong bpf_probe_write_user(void *\fP\fIdst\fP\fB, const void *\fP\fIsrc\fP\fB, u32\fP \fIlen\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Attempt in a safe way to write \fIlen\fP bytes from the buffer
-\fIsrc\fP to \fIdst\fP in memory. It only works for threads that are in
-user context, and \fIdst\fP must be a valid user space address.
-.sp
-This helper should not be used to implement any kind of
-security mechanism because of TOC\-TOU attacks, but rather to
-debug, divert, and manipulate execution of semi\-cooperative
-processes.
-.sp
-Keep in mind that this feature is meant for experiments, and it
-has a risk of crashing the system and running programs.
-Therefore, when an eBPF program using this helper is attached,
-a warning including PID and process name is printed to kernel
-logs.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_current_task_under_cgroup(struct bpf_map *\fP\fImap\fP\fB, u32\fP \fIindex\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Check whether the probe is being run is the context of a given
-subset of the cgroup2 hierarchy. The cgroup2 to test is held by
-\fImap\fP of type \fBBPF_MAP_TYPE_CGROUP_ARRAY\fP, at \fIindex\fP\&.
-.TP
-.B Return
-The return value depends on the result of the test, and can be:
-.INDENT 7.0
-.IP \(bu 2
-1, if current task belongs to the cgroup2.
-.IP \(bu 2
-0, if current task does not belong to the cgroup2.
-.IP \(bu 2
-A negative error code, if an error occurred.
-.UNINDENT
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_change_tail(struct sk_buff *\fP\fIskb\fP\fB, u32\fP \fIlen\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Resize (trim or grow) the packet associated to \fIskb\fP to the
-new \fIlen\fP\&. The \fIflags\fP are reserved for future usage, and must
-be left at zero.
-.sp
-The basic idea is that the helper performs the needed work to
-change the size of the packet, then the eBPF program rewrites
-the rest via helpers like \fBbpf_skb_store_bytes\fP(),
-\fBbpf_l3_csum_replace\fP(), \fBbpf_l3_csum_replace\fP()
-and others. This helper is a slow path utility intended for
-replies with control messages. And because it is targeted for
-slow path, the helper itself can afford to be slow: it
-implicitly linearizes, unclones and drops offloads from the
-\fIskb\fP\&.
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_pull_data(struct sk_buff *\fP\fIskb\fP\fB, u32\fP \fIlen\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Pull in non\-linear data in case the \fIskb\fP is non\-linear and not
-all of \fIlen\fP are part of the linear section. Make \fIlen\fP bytes
-from \fIskb\fP readable and writable. If a zero value is passed for
-\fIlen\fP, then all bytes in the linear part of \fIskb\fP will be made
-readable and writable.
-.sp
-This helper is only needed for reading and writing with direct
-packet access.
-.sp
-For direct packet access, testing that offsets to access
-are within packet boundaries (test on \fIskb\fP\fB\->data_end\fP) is
-susceptible to fail if offsets are invalid, or if the requested
-data is in non\-linear parts of the \fIskb\fP\&. On failure the
-program can just bail out, or in the case of a non\-linear
-buffer, use a helper to make the data available. The
-\fBbpf_skb_load_bytes\fP() helper is a first solution to access
-the data. Another one consists in using \fBbpf_skb_pull_data\fP
-to pull in once the non\-linear parts, then retesting and
-eventually access the data.
-.sp
-At the same time, this also makes sure the \fIskb\fP is uncloned,
-which is a necessary condition for direct write. As this needs
-to be an invariant for the write part only, the verifier
-detects writes and adds a prologue that is calling
-\fBbpf_skb_pull_data()\fP to effectively unclone the \fIskb\fP from
-the very beginning in case it is indeed cloned.
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBs64 bpf_csum_update(struct sk_buff *\fP\fIskb\fP\fB, __wsum\fP \fIcsum\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Add the checksum \fIcsum\fP into \fIskb\fP\fB\->csum\fP in case the
-driver has supplied a checksum for the entire packet into that
-field. Return an error otherwise. This helper is intended to be
-used in combination with \fBbpf_csum_diff\fP(), in particular
-when the checksum needs to be updated after data has been
-written into the packet through direct packet access.
-.TP
-.B Return
-The checksum on success, or a negative error code in case of
-failure.
-.UNINDENT
-.TP
-.B \fBvoid bpf_set_hash_invalid(struct sk_buff *\fP\fIskb\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Invalidate the current \fIskb\fP\fB\->hash\fP\&. It can be used after
-mangling on headers through direct packet access, in order to
-indicate that the hash is outdated and to trigger a
-recalculation the next time the kernel tries to access this
-hash or when the \fBbpf_get_hash_recalc\fP() helper is called.
-.TP
-.B Return
-void.
-.UNINDENT
-.TP
-.B \fBlong bpf_get_numa_node_id(void)\fP
-.INDENT 7.0
-.TP
-.B Description
-Return the id of the current NUMA node. The primary use case
-for this helper is the selection of sockets for the local NUMA
-node, when the program is attached to sockets using the
-\fBSO_ATTACH_REUSEPORT_EBPF\fP option (see also \fBsocket(7)\fP),
-but the helper is also available to other eBPF program types,
-similarly to \fBbpf_get_smp_processor_id\fP().
-.TP
-.B Return
-The id of current NUMA node.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_change_head(struct sk_buff *\fP\fIskb\fP\fB, u32\fP \fIlen\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Grows headroom of packet associated to \fIskb\fP and adjusts the
-offset of the MAC header accordingly, adding \fIlen\fP bytes of
-space. It automatically extends and reallocates memory as
-required.
-.sp
-This helper can be used on a layer 3 \fIskb\fP to push a MAC header
-for redirection into a layer 2 device.
-.sp
-All values for \fIflags\fP are reserved for future usage, and must
-be left at zero.
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_xdp_adjust_head(struct xdp_buff *\fP\fIxdp_md\fP\fB, int\fP \fIdelta\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Adjust (move) \fIxdp_md\fP\fB\->data\fP by \fIdelta\fP bytes. Note that
-it is possible to use a negative value for \fIdelta\fP\&. This helper
-can be used to prepare the packet for pushing or popping
-headers.
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_probe_read_str(void *\fP\fIdst\fP\fB, u32\fP \fIsize\fP\fB, const void *\fP\fIunsafe_ptr\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Copy a NUL terminated string from an unsafe kernel address
-\fIunsafe_ptr\fP to \fIdst\fP\&. See \fBbpf_probe_read_kernel_str\fP() for
-more details.
-.sp
-Generally, use \fBbpf_probe_read_user_str\fP() or
-\fBbpf_probe_read_kernel_str\fP() instead.
-.TP
-.B Return
-On success, the strictly positive length of the string,
-including the trailing NUL character. On error, a negative
-value.
-.UNINDENT
-.TP
-.B \fBu64 bpf_get_socket_cookie(struct sk_buff *\fP\fIskb\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-If the \fBstruct sk_buff\fP pointed by \fIskb\fP has a known socket,
-retrieve the cookie (generated by the kernel) of this socket.
-If no cookie has been set yet, generate a new cookie. Once
-generated, the socket cookie remains stable for the life of the
-socket. This helper can be useful for monitoring per socket
-networking traffic statistics as it provides a global socket
-identifier that can be assumed unique.
-.TP
-.B Return
-A 8\-byte long unique number on success, or 0 if the socket
-field is missing inside \fIskb\fP\&.
-.UNINDENT
-.TP
-.B \fBu64 bpf_get_socket_cookie(struct bpf_sock_addr *\fP\fIctx\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Equivalent to bpf_get_socket_cookie() helper that accepts
-\fIskb\fP, but gets socket from \fBstruct bpf_sock_addr\fP context.
-.TP
-.B Return
-A 8\-byte long unique number.
-.UNINDENT
-.TP
-.B \fBu64 bpf_get_socket_cookie(struct bpf_sock_ops *\fP\fIctx\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Equivalent to \fBbpf_get_socket_cookie\fP() helper that accepts
-\fIskb\fP, but gets socket from \fBstruct bpf_sock_ops\fP context.
-.TP
-.B Return
-A 8\-byte long unique number.
-.UNINDENT
-.TP
-.B \fBu64 bpf_get_socket_cookie(struct sock *\fP\fIsk\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Equivalent to \fBbpf_get_socket_cookie\fP() helper that accepts
-\fIsk\fP, but gets socket from a BTF \fBstruct sock\fP\&. This helper
-also works for sleepable programs.
-.TP
-.B Return
-A 8\-byte long unique number or 0 if \fIsk\fP is NULL.
-.UNINDENT
-.TP
-.B \fBu32 bpf_get_socket_uid(struct sk_buff *\fP\fIskb\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get the owner UID of the socked associated to \fIskb\fP\&.
-.TP
-.B Return
-The owner UID of the socket associated to \fIskb\fP\&. If the socket
-is \fBNULL\fP, or if it is not a full socket (i.e. if it is a
-time\-wait or a request socket instead), \fBoverflowuid\fP value
-is returned (note that \fBoverflowuid\fP might also be the actual
-UID value for the socket).
-.UNINDENT
-.TP
-.B \fBlong bpf_set_hash(struct sk_buff *\fP\fIskb\fP\fB, u32\fP \fIhash\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Set the full hash for \fIskb\fP (set the field \fIskb\fP\fB\->hash\fP)
-to value \fIhash\fP\&.
-.TP
-.B Return
-0
-.UNINDENT
-.TP
-.B \fBlong bpf_setsockopt(void *\fP\fIbpf_socket\fP\fB, int\fP \fIlevel\fP\fB, int\fP \fIoptname\fP\fB, void *\fP\fIoptval\fP\fB, int\fP \fIoptlen\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Emulate a call to \fBsetsockopt()\fP on the socket associated to
-\fIbpf_socket\fP, which must be a full socket. The \fIlevel\fP at
-which the option resides and the name \fIoptname\fP of the option
-must be specified, see \fBsetsockopt(2)\fP for more information.
-The option value of length \fIoptlen\fP is pointed by \fIoptval\fP\&.
-.sp
-\fIbpf_socket\fP should be one of the following:
-.INDENT 7.0
-.IP \(bu 2
-\fBstruct bpf_sock_ops\fP for \fBBPF_PROG_TYPE_SOCK_OPS\fP\&.
-.IP \(bu 2
-\fBstruct bpf_sock_addr\fP for \fBBPF_CGROUP_INET4_CONNECT\fP
-and \fBBPF_CGROUP_INET6_CONNECT\fP\&.
-.UNINDENT
-.sp
-This helper actually implements a subset of \fBsetsockopt()\fP\&.
-It supports the following \fIlevel\fPs:
-.INDENT 7.0
-.IP \(bu 2
-\fBSOL_SOCKET\fP, which supports the following \fIoptname\fPs:
-\fBSO_RCVBUF\fP, \fBSO_SNDBUF\fP, \fBSO_MAX_PACING_RATE\fP,
-\fBSO_PRIORITY\fP, \fBSO_RCVLOWAT\fP, \fBSO_MARK\fP,
-\fBSO_BINDTODEVICE\fP, \fBSO_KEEPALIVE\fP, \fBSO_REUSEADDR\fP,
-\fBSO_REUSEPORT\fP, \fBSO_BINDTOIFINDEX\fP, \fBSO_TXREHASH\fP\&.
-.IP \(bu 2
-\fBIPPROTO_TCP\fP, which supports the following \fIoptname\fPs:
-\fBTCP_CONGESTION\fP, \fBTCP_BPF_IW\fP,
-\fBTCP_BPF_SNDCWND_CLAMP\fP, \fBTCP_SAVE_SYN\fP,
-\fBTCP_KEEPIDLE\fP, \fBTCP_KEEPINTVL\fP, \fBTCP_KEEPCNT\fP,
-\fBTCP_SYNCNT\fP, \fBTCP_USER_TIMEOUT\fP, \fBTCP_NOTSENT_LOWAT\fP,
-\fBTCP_NODELAY\fP, \fBTCP_MAXSEG\fP, \fBTCP_WINDOW_CLAMP\fP,
-\fBTCP_THIN_LINEAR_TIMEOUTS\fP, \fBTCP_BPF_DELACK_MAX\fP,
-\fBTCP_BPF_RTO_MIN\fP\&.
-.IP \(bu 2
-\fBIPPROTO_IP\fP, which supports \fIoptname\fP \fBIP_TOS\fP\&.
-.IP \(bu 2
-\fBIPPROTO_IPV6\fP, which supports the following \fIoptname\fPs:
-\fBIPV6_TCLASS\fP, \fBIPV6_AUTOFLOWLABEL\fP\&.
-.UNINDENT
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_adjust_room(struct sk_buff *\fP\fIskb\fP\fB, s32\fP \fIlen_diff\fP\fB, u32\fP \fImode\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Grow or shrink the room for data in the packet associated to
-\fIskb\fP by \fIlen_diff\fP, and according to the selected \fImode\fP\&.
-.sp
-By default, the helper will reset any offloaded checksum
-indicator of the skb to CHECKSUM_NONE. This can be avoided
-by the following flag:
-.INDENT 7.0
-.IP \(bu 2
-\fBBPF_F_ADJ_ROOM_NO_CSUM_RESET\fP: Do not reset offloaded
-checksum data of the skb to CHECKSUM_NONE.
-.UNINDENT
-.sp
-There are two supported modes at this time:
-.INDENT 7.0
-.IP \(bu 2
-\fBBPF_ADJ_ROOM_MAC\fP: Adjust room at the mac layer
-(room space is added or removed between the layer 2 and
-layer 3 headers).
-.IP \(bu 2
-\fBBPF_ADJ_ROOM_NET\fP: Adjust room at the network layer
-(room space is added or removed between the layer 3 and
-layer 4 headers).
-.UNINDENT
-.sp
-The following flags are supported at this time:
-.INDENT 7.0
-.IP \(bu 2
-\fBBPF_F_ADJ_ROOM_FIXED_GSO\fP: Do not adjust gso_size.
-Adjusting mss in this way is not allowed for datagrams.
-.IP \(bu 2
-\fBBPF_F_ADJ_ROOM_ENCAP_L3_IPV4\fP,
-\fBBPF_F_ADJ_ROOM_ENCAP_L3_IPV6\fP:
-Any new space is reserved to hold a tunnel header.
-Configure skb offsets and other fields accordingly.
-.IP \(bu 2
-\fBBPF_F_ADJ_ROOM_ENCAP_L4_GRE\fP,
-\fBBPF_F_ADJ_ROOM_ENCAP_L4_UDP\fP:
-Use with ENCAP_L3 flags to further specify the tunnel type.
-.IP \(bu 2
-\fBBPF_F_ADJ_ROOM_ENCAP_L2\fP(\fIlen\fP):
-Use with ENCAP_L3/L4 flags to further specify the tunnel
-type; \fIlen\fP is the length of the inner MAC header.
-.IP \(bu 2
-\fBBPF_F_ADJ_ROOM_ENCAP_L2_ETH\fP:
-Use with BPF_F_ADJ_ROOM_ENCAP_L2 flag to further specify the
-L2 type as Ethernet.
-.UNINDENT
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_redirect_map(struct bpf_map *\fP\fImap\fP\fB, u64\fP \fIkey\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Redirect the packet to the endpoint referenced by \fImap\fP at
-index \fIkey\fP\&. Depending on its type, this \fImap\fP can contain
-references to net devices (for forwarding packets through other
-ports), or to CPUs (for redirecting XDP frames to another CPU;
-but this is only implemented for native XDP (with driver
-support) as of this writing).
-.sp
-The lower two bits of \fIflags\fP are used as the return code if
-the map lookup fails. This is so that the return value can be
-one of the XDP program return codes up to \fBXDP_TX\fP, as chosen
-by the caller. The higher bits of \fIflags\fP can be set to
-BPF_F_BROADCAST or BPF_F_EXCLUDE_INGRESS as defined below.
-.sp
-With BPF_F_BROADCAST the packet will be broadcasted to all the
-interfaces in the map, with BPF_F_EXCLUDE_INGRESS the ingress
-interface will be excluded when do broadcasting.
-.sp
-See also \fBbpf_redirect\fP(), which only supports redirecting
-to an ifindex, but doesn\(aqt require a map to do so.
-.TP
-.B Return
-\fBXDP_REDIRECT\fP on success, or the value of the two lower bits
-of the \fIflags\fP argument on error.
-.UNINDENT
-.TP
-.B \fBlong bpf_sk_redirect_map(struct sk_buff *\fP\fIskb\fP\fB, struct bpf_map *\fP\fImap\fP\fB, u32\fP \fIkey\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Redirect the packet to the socket referenced by \fImap\fP (of type
-\fBBPF_MAP_TYPE_SOCKMAP\fP) at index \fIkey\fP\&. Both ingress and
-egress interfaces can be used for redirection. The
-\fBBPF_F_INGRESS\fP value in \fIflags\fP is used to make the
-distinction (ingress path is selected if the flag is present,
-egress path otherwise). This is the only flag supported for now.
-.TP
-.B Return
-\fBSK_PASS\fP on success, or \fBSK_DROP\fP on error.
-.UNINDENT
-.TP
-.B \fBlong bpf_sock_map_update(struct bpf_sock_ops *\fP\fIskops\fP\fB, struct bpf_map *\fP\fImap\fP\fB, void *\fP\fIkey\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Add an entry to, or update a \fImap\fP referencing sockets. The
-\fIskops\fP is used as a new value for the entry associated to
-\fIkey\fP\&. \fIflags\fP is one of:
-.INDENT 7.0
-.TP
-.B \fBBPF_NOEXIST\fP
-The entry for \fIkey\fP must not exist in the map.
-.TP
-.B \fBBPF_EXIST\fP
-The entry for \fIkey\fP must already exist in the map.
-.TP
-.B \fBBPF_ANY\fP
-No condition on the existence of the entry for \fIkey\fP\&.
-.UNINDENT
-.sp
-If the \fImap\fP has eBPF programs (parser and verdict), those will
-be inherited by the socket being added. If the socket is
-already attached to eBPF programs, this results in an error.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_xdp_adjust_meta(struct xdp_buff *\fP\fIxdp_md\fP\fB, int\fP \fIdelta\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Adjust the address pointed by \fIxdp_md\fP\fB\->data_meta\fP by
-\fIdelta\fP (which can be positive or negative). Note that this
-operation modifies the address stored in \fIxdp_md\fP\fB\->data\fP,
-so the latter must be loaded only after the helper has been
-called.
-.sp
-The use of \fIxdp_md\fP\fB\->data_meta\fP is optional and programs
-are not required to use it. The rationale is that when the
-packet is processed with XDP (e.g. as DoS filter), it is
-possible to push further meta data along with it before passing
-to the stack, and to give the guarantee that an ingress eBPF
-program attached as a TC classifier on the same device can pick
-this up for further post\-processing. Since TC works with socket
-buffers, it remains possible to set from XDP the \fBmark\fP or
-\fBpriority\fP pointers, or other pointers for the socket buffer.
-Having this scratch space generic and programmable allows for
-more flexibility as the user is free to store whatever meta
-data they need.
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_perf_event_read_value(struct bpf_map *\fP\fImap\fP\fB, u64\fP \fIflags\fP\fB, struct bpf_perf_event_value *\fP\fIbuf\fP\fB, u32\fP \fIbuf_size\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Read the value of a perf event counter, and store it into \fIbuf\fP
-of size \fIbuf_size\fP\&. This helper relies on a \fImap\fP of type
-\fBBPF_MAP_TYPE_PERF_EVENT_ARRAY\fP\&. The nature of the perf event
-counter is selected when \fImap\fP is updated with perf event file
-descriptors. The \fImap\fP is an array whose size is the number of
-available CPUs, and each cell contains a value relative to one
-CPU. The value to retrieve is indicated by \fIflags\fP, that
-contains the index of the CPU to look up, masked with
-\fBBPF_F_INDEX_MASK\fP\&. Alternatively, \fIflags\fP can be set to
-\fBBPF_F_CURRENT_CPU\fP to indicate that the value for the
-current CPU should be retrieved.
-.sp
-This helper behaves in a way close to
-\fBbpf_perf_event_read\fP() helper, save that instead of
-just returning the value observed, it fills the \fIbuf\fP
-structure. This allows for additional data to be retrieved: in
-particular, the enabled and running times (in \fIbuf\fP\fB\->enabled\fP and \fIbuf\fP\fB\->running\fP, respectively) are
-copied. In general, \fBbpf_perf_event_read_value\fP() is
-recommended over \fBbpf_perf_event_read\fP(), which has some
-ABI issues and provides fewer functionalities.
-.sp
-These values are interesting, because hardware PMU (Performance
-Monitoring Unit) counters are limited resources. When there are
-more PMU based perf events opened than available counters,
-kernel will multiplex these events so each event gets certain
-percentage (but not all) of the PMU time. In case that
-multiplexing happens, the number of samples or counter value
-will not reflect the case compared to when no multiplexing
-occurs. This makes comparison between different runs difficult.
-Typically, the counter value should be normalized before
-comparing to other experiments. The usual normalization is done
-as follows.
-.INDENT 7.0
-.INDENT 3.5
-.sp
-.nf
-.ft C
-normalized_counter = counter * t_enabled / t_running
-.ft P
-.fi
-.UNINDENT
-.UNINDENT
-.sp
-Where t_enabled is the time enabled for event and t_running is
-the time running for event since last normalization. The
-enabled and running times are accumulated since the perf event
-open. To achieve scaling factor between two invocations of an
-eBPF program, users can use CPU id as the key (which is
-typical for perf array usage model) to remember the previous
-value and do the calculation inside the eBPF program.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_perf_prog_read_value(struct bpf_perf_event_data *\fP\fIctx\fP\fB, struct bpf_perf_event_value *\fP\fIbuf\fP\fB, u32\fP \fIbuf_size\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-For en eBPF program attached to a perf event, retrieve the
-value of the event counter associated to \fIctx\fP and store it in
-the structure pointed by \fIbuf\fP and of size \fIbuf_size\fP\&. Enabled
-and running times are also stored in the structure (see
-description of helper \fBbpf_perf_event_read_value\fP() for
-more details).
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_getsockopt(void *\fP\fIbpf_socket\fP\fB, int\fP \fIlevel\fP\fB, int\fP \fIoptname\fP\fB, void *\fP\fIoptval\fP\fB, int\fP \fIoptlen\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Emulate a call to \fBgetsockopt()\fP on the socket associated to
-\fIbpf_socket\fP, which must be a full socket. The \fIlevel\fP at
-which the option resides and the name \fIoptname\fP of the option
-must be specified, see \fBgetsockopt(2)\fP for more information.
-The retrieved value is stored in the structure pointed by
-\fIopval\fP and of length \fIoptlen\fP\&.
-.sp
-\fIbpf_socket\fP should be one of the following:
-.INDENT 7.0
-.IP \(bu 2
-\fBstruct bpf_sock_ops\fP for \fBBPF_PROG_TYPE_SOCK_OPS\fP\&.
-.IP \(bu 2
-\fBstruct bpf_sock_addr\fP for \fBBPF_CGROUP_INET4_CONNECT\fP
-and \fBBPF_CGROUP_INET6_CONNECT\fP\&.
-.UNINDENT
-.sp
-This helper actually implements a subset of \fBgetsockopt()\fP\&.
-It supports the same set of \fIoptname\fPs that is supported by
-the \fBbpf_setsockopt\fP() helper. The exceptions are
-\fBTCP_BPF_*\fP is \fBbpf_setsockopt\fP() only and
-\fBTCP_SAVED_SYN\fP is \fBbpf_getsockopt\fP() only.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_override_return(struct pt_regs *\fP\fIregs\fP\fB, u64\fP \fIrc\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Used for error injection, this helper uses kprobes to override
-the return value of the probed function, and to set it to \fIrc\fP\&.
-The first argument is the context \fIregs\fP on which the kprobe
-works.
-.sp
-This helper works by setting the PC (program counter)
-to an override function which is run in place of the original
-probed function. This means the probed function is not run at
-all. The replacement function just returns with the required
-value.
-.sp
-This helper has security implications, and thus is subject to
-restrictions. It is only available if the kernel was compiled
-with the \fBCONFIG_BPF_KPROBE_OVERRIDE\fP configuration
-option, and in this case it only works on functions tagged with
-\fBALLOW_ERROR_INJECTION\fP in the kernel code.
-.sp
-Also, the helper is only available for the architectures having
-the CONFIG_FUNCTION_ERROR_INJECTION option. As of this writing,
-x86 architecture is the only one to support this feature.
-.TP
-.B Return
-0
-.UNINDENT
-.TP
-.B \fBlong bpf_sock_ops_cb_flags_set(struct bpf_sock_ops *\fP\fIbpf_sock\fP\fB, int\fP \fIargval\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Attempt to set the value of the \fBbpf_sock_ops_cb_flags\fP field
-for the full TCP socket associated to \fIbpf_sock_ops\fP to
-\fIargval\fP\&.
-.sp
-The primary use of this field is to determine if there should
-be calls to eBPF programs of type
-\fBBPF_PROG_TYPE_SOCK_OPS\fP at various points in the TCP
-code. A program of the same type can change its value, per
-connection and as necessary, when the connection is
-established. This field is directly accessible for reading, but
-this helper must be used for updates in order to return an
-error if an eBPF program tries to set a callback that is not
-supported in the current kernel.
-.sp
-\fIargval\fP is a flag array which can combine these flags:
-.INDENT 7.0
-.IP \(bu 2
-\fBBPF_SOCK_OPS_RTO_CB_FLAG\fP (retransmission time out)
-.IP \(bu 2
-\fBBPF_SOCK_OPS_RETRANS_CB_FLAG\fP (retransmission)
-.IP \(bu 2
-\fBBPF_SOCK_OPS_STATE_CB_FLAG\fP (TCP state change)
-.IP \(bu 2
-\fBBPF_SOCK_OPS_RTT_CB_FLAG\fP (every RTT)
-.UNINDENT
-.sp
-Therefore, this function can be used to clear a callback flag by
-setting the appropriate bit to zero. e.g. to disable the RTO
-callback:
-.INDENT 7.0
-.TP
-.B \fBbpf_sock_ops_cb_flags_set(bpf_sock,\fP
-\fBbpf_sock\->bpf_sock_ops_cb_flags & ~BPF_SOCK_OPS_RTO_CB_FLAG)\fP
-.UNINDENT
-.sp
-Here are some examples of where one could call such eBPF
-program:
-.INDENT 7.0
-.IP \(bu 2
-When RTO fires.
-.IP \(bu 2
-When a packet is retransmitted.
-.IP \(bu 2
-When the connection terminates.
-.IP \(bu 2
-When a packet is sent.
-.IP \(bu 2
-When a packet is received.
-.UNINDENT
-.TP
-.B Return
-Code \fB\-EINVAL\fP if the socket is not a full TCP socket;
-otherwise, a positive number containing the bits that could not
-be set is returned (which comes down to 0 if all bits were set
-as required).
-.UNINDENT
-.TP
-.B \fBlong bpf_msg_redirect_map(struct sk_msg_buff *\fP\fImsg\fP\fB, struct bpf_map *\fP\fImap\fP\fB, u32\fP \fIkey\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-This helper is used in programs implementing policies at the
-socket level. If the message \fImsg\fP is allowed to pass (i.e. if
-the verdict eBPF program returns \fBSK_PASS\fP), redirect it to
-the socket referenced by \fImap\fP (of type
-\fBBPF_MAP_TYPE_SOCKMAP\fP) at index \fIkey\fP\&. Both ingress and
-egress interfaces can be used for redirection. The
-\fBBPF_F_INGRESS\fP value in \fIflags\fP is used to make the
-distinction (ingress path is selected if the flag is present,
-egress path otherwise). This is the only flag supported for now.
-.TP
-.B Return
-\fBSK_PASS\fP on success, or \fBSK_DROP\fP on error.
-.UNINDENT
-.TP
-.B \fBlong bpf_msg_apply_bytes(struct sk_msg_buff *\fP\fImsg\fP\fB, u32\fP \fIbytes\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-For socket policies, apply the verdict of the eBPF program to
-the next \fIbytes\fP (number of bytes) of message \fImsg\fP\&.
-.sp
-For example, this helper can be used in the following cases:
-.INDENT 7.0
-.IP \(bu 2
-A single \fBsendmsg\fP() or \fBsendfile\fP() system call
-contains multiple logical messages that the eBPF program is
-supposed to read and for which it should apply a verdict.
-.IP \(bu 2
-An eBPF program only cares to read the first \fIbytes\fP of a
-\fImsg\fP\&. If the message has a large payload, then setting up
-and calling the eBPF program repeatedly for all bytes, even
-though the verdict is already known, would create unnecessary
-overhead.
-.UNINDENT
-.sp
-When called from within an eBPF program, the helper sets a
-counter internal to the BPF infrastructure, that is used to
-apply the last verdict to the next \fIbytes\fP\&. If \fIbytes\fP is
-smaller than the current data being processed from a
-\fBsendmsg\fP() or \fBsendfile\fP() system call, the first
-\fIbytes\fP will be sent and the eBPF program will be re\-run with
-the pointer for start of data pointing to byte number \fIbytes\fP
-\fB+ 1\fP\&. If \fIbytes\fP is larger than the current data being
-processed, then the eBPF verdict will be applied to multiple
-\fBsendmsg\fP() or \fBsendfile\fP() calls until \fIbytes\fP are
-consumed.
-.sp
-Note that if a socket closes with the internal counter holding
-a non\-zero value, this is not a problem because data is not
-being buffered for \fIbytes\fP and is sent as it is received.
-.TP
-.B Return
-0
-.UNINDENT
-.TP
-.B \fBlong bpf_msg_cork_bytes(struct sk_msg_buff *\fP\fImsg\fP\fB, u32\fP \fIbytes\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-For socket policies, prevent the execution of the verdict eBPF
-program for message \fImsg\fP until \fIbytes\fP (byte number) have been
-accumulated.
-.sp
-This can be used when one needs a specific number of bytes
-before a verdict can be assigned, even if the data spans
-multiple \fBsendmsg\fP() or \fBsendfile\fP() calls. The extreme
-case would be a user calling \fBsendmsg\fP() repeatedly with
-1\-byte long message segments. Obviously, this is bad for
-performance, but it is still valid. If the eBPF program needs
-\fIbytes\fP bytes to validate a header, this helper can be used to
-prevent the eBPF program to be called again until \fIbytes\fP have
-been accumulated.
-.TP
-.B Return
-0
-.UNINDENT
-.TP
-.B \fBlong bpf_msg_pull_data(struct sk_msg_buff *\fP\fImsg\fP\fB, u32\fP \fIstart\fP\fB, u32\fP \fIend\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-For socket policies, pull in non\-linear data from user space
-for \fImsg\fP and set pointers \fImsg\fP\fB\->data\fP and \fImsg\fP\fB\->data_end\fP to \fIstart\fP and \fIend\fP bytes offsets into \fImsg\fP,
-respectively.
-.sp
-If a program of type \fBBPF_PROG_TYPE_SK_MSG\fP is run on a
-\fImsg\fP it can only parse data that the (\fBdata\fP, \fBdata_end\fP)
-pointers have already consumed. For \fBsendmsg\fP() hooks this
-is likely the first scatterlist element. But for calls relying
-on the \fBsendpage\fP handler (e.g. \fBsendfile\fP()) this will
-be the range (\fB0\fP, \fB0\fP) because the data is shared with
-user space and by default the objective is to avoid allowing
-user space to modify data while (or after) eBPF verdict is
-being decided. This helper can be used to pull in data and to
-set the start and end pointer to given values. Data will be
-copied if necessary (i.e. if data was not linear and if start
-and end pointers do not point to the same chunk).
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.sp
-All values for \fIflags\fP are reserved for future usage, and must
-be left at zero.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_bind(struct bpf_sock_addr *\fP\fIctx\fP\fB, struct sockaddr *\fP\fIaddr\fP\fB, int\fP \fIaddr_len\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Bind the socket associated to \fIctx\fP to the address pointed by
-\fIaddr\fP, of length \fIaddr_len\fP\&. This allows for making outgoing
-connection from the desired IP address, which can be useful for
-example when all processes inside a cgroup should use one
-single IP address on a host that has multiple IP configured.
-.sp
-This helper works for IPv4 and IPv6, TCP and UDP sockets. The
-domain (\fIaddr\fP\fB\->sa_family\fP) must be \fBAF_INET\fP (or
-\fBAF_INET6\fP). It\(aqs advised to pass zero port (\fBsin_port\fP
-or \fBsin6_port\fP) which triggers IP_BIND_ADDRESS_NO_PORT\-like
-behavior and lets the kernel efficiently pick up an unused
-port as long as 4\-tuple is unique. Passing non\-zero port might
-lead to degraded performance.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_xdp_adjust_tail(struct xdp_buff *\fP\fIxdp_md\fP\fB, int\fP \fIdelta\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Adjust (move) \fIxdp_md\fP\fB\->data_end\fP by \fIdelta\fP bytes. It is
-possible to both shrink and grow the packet tail.
-Shrink done via \fIdelta\fP being a negative integer.
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_get_xfrm_state(struct sk_buff *\fP\fIskb\fP\fB, u32\fP \fIindex\fP\fB, struct bpf_xfrm_state *\fP\fIxfrm_state\fP\fB, u32\fP \fIsize\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Retrieve the XFRM state (IP transform framework, see also
-\fBip\-xfrm(8)\fP) at \fIindex\fP in XFRM \(dqsecurity path\(dq for \fIskb\fP\&.
-.sp
-The retrieved value is stored in the \fBstruct bpf_xfrm_state\fP
-pointed by \fIxfrm_state\fP and of length \fIsize\fP\&.
-.sp
-All values for \fIflags\fP are reserved for future usage, and must
-be left at zero.
-.sp
-This helper is available only if the kernel was compiled with
-\fBCONFIG_XFRM\fP configuration option.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_get_stack(void *\fP\fIctx\fP\fB, void *\fP\fIbuf\fP\fB, u32\fP \fIsize\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Return a user or a kernel stack in bpf program provided buffer.
-To achieve this, the helper needs \fIctx\fP, which is a pointer
-to the context on which the tracing program is executed.
-To store the stacktrace, the bpf program provides \fIbuf\fP with
-a nonnegative \fIsize\fP\&.
-.sp
-The last argument, \fIflags\fP, holds the number of stack frames to
-skip (from 0 to 255), masked with
-\fBBPF_F_SKIP_FIELD_MASK\fP\&. The next bits can be used to set
-the following flags:
-.INDENT 7.0
-.TP
-.B \fBBPF_F_USER_STACK\fP
-Collect a user space stack instead of a kernel stack.
-.TP
-.B \fBBPF_F_USER_BUILD_ID\fP
-Collect (build_id, file_offset) instead of ips for user
-stack, only valid if \fBBPF_F_USER_STACK\fP is also
-specified.
-.sp
-\fIfile_offset\fP is an offset relative to the beginning
-of the executable or shared object file backing the vma
-which the \fIip\fP falls in. It is \fInot\fP an offset relative
-to that object\(aqs base address. Accordingly, it must be
-adjusted by adding (sh_addr \- sh_offset), where
-sh_{addr,offset} correspond to the executable section
-containing \fIfile_offset\fP in the object, for comparisons
-to symbols\(aq st_value to be valid.
-.UNINDENT
-.sp
-\fBbpf_get_stack\fP() can collect up to
-\fBPERF_MAX_STACK_DEPTH\fP both kernel and user frames, subject
-to sufficient large buffer size. Note that
-this limit can be controlled with the \fBsysctl\fP program, and
-that it should be manually increased in order to profile long
-user stacks (such as stacks for Java programs). To do so, use:
-.INDENT 7.0
-.INDENT 3.5
-.sp
-.nf
-.ft C
-# sysctl kernel.perf_event_max_stack=<new value>
-.ft P
-.fi
-.UNINDENT
-.UNINDENT
-.TP
-.B Return
-The non\-negative copied \fIbuf\fP length equal to or less than
-\fIsize\fP on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_load_bytes_relative(const void *\fP\fIskb\fP\fB, u32\fP \fIoffset\fP\fB, void *\fP\fIto\fP\fB, u32\fP \fIlen\fP\fB, u32\fP \fIstart_header\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-This helper is similar to \fBbpf_skb_load_bytes\fP() in that
-it provides an easy way to load \fIlen\fP bytes from \fIoffset\fP
-from the packet associated to \fIskb\fP, into the buffer pointed
-by \fIto\fP\&. The difference to \fBbpf_skb_load_bytes\fP() is that
-a fifth argument \fIstart_header\fP exists in order to select a
-base offset to start from. \fIstart_header\fP can be one of:
-.INDENT 7.0
-.TP
-.B \fBBPF_HDR_START_MAC\fP
-Base offset to load data from is \fIskb\fP\(aqs mac header.
-.TP
-.B \fBBPF_HDR_START_NET\fP
-Base offset to load data from is \fIskb\fP\(aqs network header.
-.UNINDENT
-.sp
-In general, \(dqdirect packet access\(dq is the preferred method to
-access packet data, however, this helper is in particular useful
-in socket filters where \fIskb\fP\fB\->data\fP does not always point
-to the start of the mac header and where \(dqdirect packet access\(dq
-is not available.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_fib_lookup(void *\fP\fIctx\fP\fB, struct bpf_fib_lookup *\fP\fIparams\fP\fB, int\fP \fIplen\fP\fB, u32\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Do FIB lookup in kernel tables using parameters in \fIparams\fP\&.
-If lookup is successful and result shows packet is to be
-forwarded, the neighbor tables are searched for the nexthop.
-If successful (ie., FIB lookup shows forwarding and nexthop
-is resolved), the nexthop address is returned in ipv4_dst
-or ipv6_dst based on family, smac is set to mac address of
-egress device, dmac is set to nexthop mac address, rt_metric
-is set to metric from route (IPv4/IPv6 only), and ifindex
-is set to the device index of the nexthop from the FIB lookup.
-.sp
-\fIplen\fP argument is the size of the passed in struct.
-\fIflags\fP argument can be a combination of one or more of the
-following values:
-.INDENT 7.0
-.TP
-.B \fBBPF_FIB_LOOKUP_DIRECT\fP
-Do a direct table lookup vs full lookup using FIB
-rules.
-.TP
-.B \fBBPF_FIB_LOOKUP_OUTPUT\fP
-Perform lookup from an egress perspective (default is
-ingress).
-.UNINDENT
-.sp
-\fIctx\fP is either \fBstruct xdp_md\fP for XDP programs or
-\fBstruct sk_buff\fP tc cls_act programs.
-.TP
-.B Return
-.INDENT 7.0
-.IP \(bu 2
-< 0 if any input argument is invalid
-.IP \(bu 2
-0 on success (packet is forwarded, nexthop neighbor exists)
-.IP \(bu 2
-> 0 one of \fBBPF_FIB_LKUP_RET_\fP codes explaining why the
-packet is not forwarded or needs assist from full stack
-.UNINDENT
-.sp
-If lookup fails with BPF_FIB_LKUP_RET_FRAG_NEEDED, then the MTU
-was exceeded and output params\->mtu_result contains the MTU.
-.UNINDENT
-.TP
-.B \fBlong bpf_sock_hash_update(struct bpf_sock_ops *\fP\fIskops\fP\fB, struct bpf_map *\fP\fImap\fP\fB, void *\fP\fIkey\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Add an entry to, or update a sockhash \fImap\fP referencing sockets.
-The \fIskops\fP is used as a new value for the entry associated to
-\fIkey\fP\&. \fIflags\fP is one of:
-.INDENT 7.0
-.TP
-.B \fBBPF_NOEXIST\fP
-The entry for \fIkey\fP must not exist in the map.
-.TP
-.B \fBBPF_EXIST\fP
-The entry for \fIkey\fP must already exist in the map.
-.TP
-.B \fBBPF_ANY\fP
-No condition on the existence of the entry for \fIkey\fP\&.
-.UNINDENT
-.sp
-If the \fImap\fP has eBPF programs (parser and verdict), those will
-be inherited by the socket being added. If the socket is
-already attached to eBPF programs, this results in an error.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_msg_redirect_hash(struct sk_msg_buff *\fP\fImsg\fP\fB, struct bpf_map *\fP\fImap\fP\fB, void *\fP\fIkey\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-This helper is used in programs implementing policies at the
-socket level. If the message \fImsg\fP is allowed to pass (i.e. if
-the verdict eBPF program returns \fBSK_PASS\fP), redirect it to
-the socket referenced by \fImap\fP (of type
-\fBBPF_MAP_TYPE_SOCKHASH\fP) using hash \fIkey\fP\&. Both ingress and
-egress interfaces can be used for redirection. The
-\fBBPF_F_INGRESS\fP value in \fIflags\fP is used to make the
-distinction (ingress path is selected if the flag is present,
-egress path otherwise). This is the only flag supported for now.
-.TP
-.B Return
-\fBSK_PASS\fP on success, or \fBSK_DROP\fP on error.
-.UNINDENT
-.TP
-.B \fBlong bpf_sk_redirect_hash(struct sk_buff *\fP\fIskb\fP\fB, struct bpf_map *\fP\fImap\fP\fB, void *\fP\fIkey\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-This helper is used in programs implementing policies at the
-skb socket level. If the sk_buff \fIskb\fP is allowed to pass (i.e.
-if the verdict eBPF program returns \fBSK_PASS\fP), redirect it
-to the socket referenced by \fImap\fP (of type
-\fBBPF_MAP_TYPE_SOCKHASH\fP) using hash \fIkey\fP\&. Both ingress and
-egress interfaces can be used for redirection. The
-\fBBPF_F_INGRESS\fP value in \fIflags\fP is used to make the
-distinction (ingress path is selected if the flag is present,
-egress otherwise). This is the only flag supported for now.
-.TP
-.B Return
-\fBSK_PASS\fP on success, or \fBSK_DROP\fP on error.
-.UNINDENT
-.TP
-.B \fBlong bpf_lwt_push_encap(struct sk_buff *\fP\fIskb\fP\fB, u32\fP \fItype\fP\fB, void *\fP\fIhdr\fP\fB, u32\fP \fIlen\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Encapsulate the packet associated to \fIskb\fP within a Layer 3
-protocol header. This header is provided in the buffer at
-address \fIhdr\fP, with \fIlen\fP its size in bytes. \fItype\fP indicates
-the protocol of the header and can be one of:
-.INDENT 7.0
-.TP
-.B \fBBPF_LWT_ENCAP_SEG6\fP
-IPv6 encapsulation with Segment Routing Header
-(\fBstruct ipv6_sr_hdr\fP). \fIhdr\fP only contains the SRH,
-the IPv6 header is computed by the kernel.
-.TP
-.B \fBBPF_LWT_ENCAP_SEG6_INLINE\fP
-Only works if \fIskb\fP contains an IPv6 packet. Insert a
-Segment Routing Header (\fBstruct ipv6_sr_hdr\fP) inside
-the IPv6 header.
-.TP
-.B \fBBPF_LWT_ENCAP_IP\fP
-IP encapsulation (GRE/GUE/IPIP/etc). The outer header
-must be IPv4 or IPv6, followed by zero or more
-additional headers, up to \fBLWT_BPF_MAX_HEADROOM\fP
-total bytes in all prepended headers. Please note that
-if \fBskb_is_gso\fP(\fIskb\fP) is true, no more than two
-headers can be prepended, and the inner header, if
-present, should be either GRE or UDP/GUE.
-.UNINDENT
-.sp
-\fBBPF_LWT_ENCAP_SEG6\fP* types can be called by BPF programs
-of type \fBBPF_PROG_TYPE_LWT_IN\fP; \fBBPF_LWT_ENCAP_IP\fP type can
-be called by bpf programs of types \fBBPF_PROG_TYPE_LWT_IN\fP and
-\fBBPF_PROG_TYPE_LWT_XMIT\fP\&.
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_lwt_seg6_store_bytes(struct sk_buff *\fP\fIskb\fP\fB, u32\fP \fIoffset\fP\fB, const void *\fP\fIfrom\fP\fB, u32\fP \fIlen\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Store \fIlen\fP bytes from address \fIfrom\fP into the packet
-associated to \fIskb\fP, at \fIoffset\fP\&. Only the flags, tag and TLVs
-inside the outermost IPv6 Segment Routing Header can be
-modified through this helper.
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_lwt_seg6_adjust_srh(struct sk_buff *\fP\fIskb\fP\fB, u32\fP \fIoffset\fP\fB, s32\fP \fIdelta\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Adjust the size allocated to TLVs in the outermost IPv6
-Segment Routing Header contained in the packet associated to
-\fIskb\fP, at position \fIoffset\fP by \fIdelta\fP bytes. Only offsets
-after the segments are accepted. \fIdelta\fP can be as well
-positive (growing) as negative (shrinking).
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_lwt_seg6_action(struct sk_buff *\fP\fIskb\fP\fB, u32\fP \fIaction\fP\fB, void *\fP\fIparam\fP\fB, u32\fP \fIparam_len\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Apply an IPv6 Segment Routing action of type \fIaction\fP to the
-packet associated to \fIskb\fP\&. Each action takes a parameter
-contained at address \fIparam\fP, and of length \fIparam_len\fP bytes.
-\fIaction\fP can be one of:
-.INDENT 7.0
-.TP
-.B \fBSEG6_LOCAL_ACTION_END_X\fP
-End.X action: Endpoint with Layer\-3 cross\-connect.
-Type of \fIparam\fP: \fBstruct in6_addr\fP\&.
-.TP
-.B \fBSEG6_LOCAL_ACTION_END_T\fP
-End.T action: Endpoint with specific IPv6 table lookup.
-Type of \fIparam\fP: \fBint\fP\&.
-.TP
-.B \fBSEG6_LOCAL_ACTION_END_B6\fP
-End.B6 action: Endpoint bound to an SRv6 policy.
-Type of \fIparam\fP: \fBstruct ipv6_sr_hdr\fP\&.
-.TP
-.B \fBSEG6_LOCAL_ACTION_END_B6_ENCAP\fP
-End.B6.Encap action: Endpoint bound to an SRv6
-encapsulation policy.
-Type of \fIparam\fP: \fBstruct ipv6_sr_hdr\fP\&.
-.UNINDENT
-.sp
-A call to this helper is susceptible to change the underlying
-packet buffer. Therefore, at load time, all checks on pointers
-previously done by the verifier are invalidated and must be
-performed again, if the helper is used in combination with
-direct packet access.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_rc_repeat(void *\fP\fIctx\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-This helper is used in programs implementing IR decoding, to
-report a successfully decoded repeat key message. This delays
-the generation of a key up event for previously generated
-key down event.
-.sp
-Some IR protocols like NEC have a special IR message for
-repeating last button, for when a button is held down.
-.sp
-The \fIctx\fP should point to the lirc sample as passed into
-the program.
-.sp
-This helper is only available is the kernel was compiled with
-the \fBCONFIG_BPF_LIRC_MODE2\fP configuration option set to
-\(dq\fBy\fP\(dq.
-.TP
-.B Return
-0
-.UNINDENT
-.TP
-.B \fBlong bpf_rc_keydown(void *\fP\fIctx\fP\fB, u32\fP \fIprotocol\fP\fB, u64\fP \fIscancode\fP\fB, u32\fP \fItoggle\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-This helper is used in programs implementing IR decoding, to
-report a successfully decoded key press with \fIscancode\fP,
-\fItoggle\fP value in the given \fIprotocol\fP\&. The scancode will be
-translated to a keycode using the rc keymap, and reported as
-an input key down event. After a period a key up event is
-generated. This period can be extended by calling either
-\fBbpf_rc_keydown\fP() again with the same values, or calling
-\fBbpf_rc_repeat\fP().
-.sp
-Some protocols include a toggle bit, in case the button was
-released and pressed again between consecutive scancodes.
-.sp
-The \fIctx\fP should point to the lirc sample as passed into
-the program.
-.sp
-The \fIprotocol\fP is the decoded protocol number (see
-\fBenum rc_proto\fP for some predefined values).
-.sp
-This helper is only available is the kernel was compiled with
-the \fBCONFIG_BPF_LIRC_MODE2\fP configuration option set to
-\(dq\fBy\fP\(dq.
-.TP
-.B Return
-0
-.UNINDENT
-.TP
-.B \fBu64 bpf_skb_cgroup_id(struct sk_buff *\fP\fIskb\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Return the cgroup v2 id of the socket associated with the \fIskb\fP\&.
-This is roughly similar to the \fBbpf_get_cgroup_classid\fP()
-helper for cgroup v1 by providing a tag resp. identifier that
-can be matched on or used for map lookups e.g. to implement
-policy. The cgroup v2 id of a given path in the hierarchy is
-exposed in user space through the f_handle API in order to get
-to the same 64\-bit id.
-.sp
-This helper can be used on TC egress path, but not on ingress,
-and is available only if the kernel was compiled with the
-\fBCONFIG_SOCK_CGROUP_DATA\fP configuration option.
-.TP
-.B Return
-The id is returned or 0 in case the id could not be retrieved.
-.UNINDENT
-.TP
-.B \fBu64 bpf_get_current_cgroup_id(void)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get the current cgroup id based on the cgroup within which
-the current task is running.
-.TP
-.B Return
-A 64\-bit integer containing the current cgroup id based
-on the cgroup within which the current task is running.
-.UNINDENT
-.TP
-.B \fBvoid *bpf_get_local_storage(void *\fP\fImap\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get the pointer to the local storage area.
-The type and the size of the local storage is defined
-by the \fImap\fP argument.
-The \fIflags\fP meaning is specific for each map type,
-and has to be 0 for cgroup local storage.
-.sp
-Depending on the BPF program type, a local storage area
-can be shared between multiple instances of the BPF program,
-running simultaneously.
-.sp
-A user should care about the synchronization by himself.
-For example, by using the \fBBPF_ATOMIC\fP instructions to alter
-the shared data.
-.TP
-.B Return
-A pointer to the local storage area.
-.UNINDENT
-.TP
-.B \fBlong bpf_sk_select_reuseport(struct sk_reuseport_md *\fP\fIreuse\fP\fB, struct bpf_map *\fP\fImap\fP\fB, void *\fP\fIkey\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Select a \fBSO_REUSEPORT\fP socket from a
-\fBBPF_MAP_TYPE_REUSEPORT_SOCKARRAY\fP \fImap\fP\&.
-It checks the selected socket is matching the incoming
-request in the socket buffer.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBu64 bpf_skb_ancestor_cgroup_id(struct sk_buff *\fP\fIskb\fP\fB, int\fP \fIancestor_level\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Return id of cgroup v2 that is ancestor of cgroup associated
-with the \fIskb\fP at the \fIancestor_level\fP\&. The root cgroup is at
-\fIancestor_level\fP zero and each step down the hierarchy
-increments the level. If \fIancestor_level\fP == level of cgroup
-associated with \fIskb\fP, then return value will be same as that
-of \fBbpf_skb_cgroup_id\fP().
-.sp
-The helper is useful to implement policies based on cgroups
-that are upper in hierarchy than immediate cgroup associated
-with \fIskb\fP\&.
-.sp
-The format of returned id and helper limitations are same as in
-\fBbpf_skb_cgroup_id\fP().
-.TP
-.B Return
-The id is returned or 0 in case the id could not be retrieved.
-.UNINDENT
-.TP
-.B \fBstruct bpf_sock *bpf_sk_lookup_tcp(void *\fP\fIctx\fP\fB, struct bpf_sock_tuple *\fP\fItuple\fP\fB, u32\fP \fItuple_size\fP\fB, u64\fP \fInetns\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Look for TCP socket matching \fItuple\fP, optionally in a child
-network namespace \fInetns\fP\&. The return value must be checked,
-and if non\-\fBNULL\fP, released via \fBbpf_sk_release\fP().
-.sp
-The \fIctx\fP should point to the context of the program, such as
-the skb or socket (depending on the hook in use). This is used
-to determine the base network namespace for the lookup.
-.sp
-\fItuple_size\fP must be one of:
-.INDENT 7.0
-.TP
-.B \fBsizeof\fP(\fItuple\fP\fB\->ipv4\fP)
-Look for an IPv4 socket.
-.TP
-.B \fBsizeof\fP(\fItuple\fP\fB\->ipv6\fP)
-Look for an IPv6 socket.
-.UNINDENT
-.sp
-If the \fInetns\fP is a negative signed 32\-bit integer, then the
-socket lookup table in the netns associated with the \fIctx\fP
-will be used. For the TC hooks, this is the netns of the device
-in the skb. For socket hooks, this is the netns of the socket.
-If \fInetns\fP is any other signed 32\-bit value greater than or
-equal to zero then it specifies the ID of the netns relative to
-the netns associated with the \fIctx\fP\&. \fInetns\fP values beyond the
-range of 32\-bit integers are reserved for future use.
-.sp
-All values for \fIflags\fP are reserved for future usage, and must
-be left at zero.
-.sp
-This helper is available only if the kernel was compiled with
-\fBCONFIG_NET\fP configuration option.
-.TP
-.B Return
-Pointer to \fBstruct bpf_sock\fP, or \fBNULL\fP in case of failure.
-For sockets with reuseport option, the \fBstruct bpf_sock\fP
-result is from \fIreuse\fP\fB\->socks\fP[] using the hash of the
-tuple.
-.UNINDENT
-.TP
-.B \fBstruct bpf_sock *bpf_sk_lookup_udp(void *\fP\fIctx\fP\fB, struct bpf_sock_tuple *\fP\fItuple\fP\fB, u32\fP \fItuple_size\fP\fB, u64\fP \fInetns\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Look for UDP socket matching \fItuple\fP, optionally in a child
-network namespace \fInetns\fP\&. The return value must be checked,
-and if non\-\fBNULL\fP, released via \fBbpf_sk_release\fP().
-.sp
-The \fIctx\fP should point to the context of the program, such as
-the skb or socket (depending on the hook in use). This is used
-to determine the base network namespace for the lookup.
-.sp
-\fItuple_size\fP must be one of:
-.INDENT 7.0
-.TP
-.B \fBsizeof\fP(\fItuple\fP\fB\->ipv4\fP)
-Look for an IPv4 socket.
-.TP
-.B \fBsizeof\fP(\fItuple\fP\fB\->ipv6\fP)
-Look for an IPv6 socket.
-.UNINDENT
-.sp
-If the \fInetns\fP is a negative signed 32\-bit integer, then the
-socket lookup table in the netns associated with the \fIctx\fP
-will be used. For the TC hooks, this is the netns of the device
-in the skb. For socket hooks, this is the netns of the socket.
-If \fInetns\fP is any other signed 32\-bit value greater than or
-equal to zero then it specifies the ID of the netns relative to
-the netns associated with the \fIctx\fP\&. \fInetns\fP values beyond the
-range of 32\-bit integers are reserved for future use.
-.sp
-All values for \fIflags\fP are reserved for future usage, and must
-be left at zero.
-.sp
-This helper is available only if the kernel was compiled with
-\fBCONFIG_NET\fP configuration option.
-.TP
-.B Return
-Pointer to \fBstruct bpf_sock\fP, or \fBNULL\fP in case of failure.
-For sockets with reuseport option, the \fBstruct bpf_sock\fP
-result is from \fIreuse\fP\fB\->socks\fP[] using the hash of the
-tuple.
-.UNINDENT
-.TP
-.B \fBlong bpf_sk_release(void *\fP\fIsock\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Release the reference held by \fIsock\fP\&. \fIsock\fP must be a
-non\-\fBNULL\fP pointer that was returned from
-\fBbpf_sk_lookup_xxx\fP().
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_map_push_elem(struct bpf_map *\fP\fImap\fP\fB, const void *\fP\fIvalue\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Push an element \fIvalue\fP in \fImap\fP\&. \fIflags\fP is one of:
-.INDENT 7.0
-.TP
-.B \fBBPF_EXIST\fP
-If the queue/stack is full, the oldest element is
-removed to make room for this.
-.UNINDENT
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_map_pop_elem(struct bpf_map *\fP\fImap\fP\fB, void *\fP\fIvalue\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Pop an element from \fImap\fP\&.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_map_peek_elem(struct bpf_map *\fP\fImap\fP\fB, void *\fP\fIvalue\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get an element from \fImap\fP without removing it.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_msg_push_data(struct sk_msg_buff *\fP\fImsg\fP\fB, u32\fP \fIstart\fP\fB, u32\fP \fIlen\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-For socket policies, insert \fIlen\fP bytes into \fImsg\fP at offset
-\fIstart\fP\&.
-.sp
-If a program of type \fBBPF_PROG_TYPE_SK_MSG\fP is run on a
-\fImsg\fP it may want to insert metadata or options into the \fImsg\fP\&.
-This can later be read and used by any of the lower layer BPF
-hooks.
-.sp
-This helper may fail if under memory pressure (a malloc
-fails) in these cases BPF programs will get an appropriate
-error and BPF programs will need to handle them.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_msg_pop_data(struct sk_msg_buff *\fP\fImsg\fP\fB, u32\fP \fIstart\fP\fB, u32\fP \fIlen\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Will remove \fIlen\fP bytes from a \fImsg\fP starting at byte \fIstart\fP\&.
-This may result in \fBENOMEM\fP errors under certain situations if
-an allocation and copy are required due to a full ring buffer.
-However, the helper will try to avoid doing the allocation
-if possible. Other errors can occur if input parameters are
-invalid either due to \fIstart\fP byte not being valid part of \fImsg\fP
-payload and/or \fIpop\fP value being to large.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_rc_pointer_rel(void *\fP\fIctx\fP\fB, s32\fP \fIrel_x\fP\fB, s32\fP \fIrel_y\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-This helper is used in programs implementing IR decoding, to
-report a successfully decoded pointer movement.
-.sp
-The \fIctx\fP should point to the lirc sample as passed into
-the program.
-.sp
-This helper is only available is the kernel was compiled with
-the \fBCONFIG_BPF_LIRC_MODE2\fP configuration option set to
-\(dq\fBy\fP\(dq.
-.TP
-.B Return
-0
-.UNINDENT
-.TP
-.B \fBlong bpf_spin_lock(struct bpf_spin_lock *\fP\fIlock\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Acquire a spinlock represented by the pointer \fIlock\fP, which is
-stored as part of a value of a map. Taking the lock allows to
-safely update the rest of the fields in that value. The
-spinlock can (and must) later be released with a call to
-\fBbpf_spin_unlock\fP(\fIlock\fP).
-.sp
-Spinlocks in BPF programs come with a number of restrictions
-and constraints:
-.INDENT 7.0
-.IP \(bu 2
-\fBbpf_spin_lock\fP objects are only allowed inside maps of
-types \fBBPF_MAP_TYPE_HASH\fP and \fBBPF_MAP_TYPE_ARRAY\fP (this
-list could be extended in the future).
-.IP \(bu 2
-BTF description of the map is mandatory.
-.IP \(bu 2
-The BPF program can take ONE lock at a time, since taking two
-or more could cause dead locks.
-.IP \(bu 2
-Only one \fBstruct bpf_spin_lock\fP is allowed per map element.
-.IP \(bu 2
-When the lock is taken, calls (either BPF to BPF or helpers)
-are not allowed.
-.IP \(bu 2
-The \fBBPF_LD_ABS\fP and \fBBPF_LD_IND\fP instructions are not
-allowed inside a spinlock\-ed region.
-.IP \(bu 2
-The BPF program MUST call \fBbpf_spin_unlock\fP() to release
-the lock, on all execution paths, before it returns.
-.IP \(bu 2
-The BPF program can access \fBstruct bpf_spin_lock\fP only via
-the \fBbpf_spin_lock\fP() and \fBbpf_spin_unlock\fP()
-helpers. Loading or storing data into the \fBstruct
-bpf_spin_lock\fP \fIlock\fP\fB;\fP field of a map is not allowed.
-.IP \(bu 2
-To use the \fBbpf_spin_lock\fP() helper, the BTF description
-of the map value must be a struct and have \fBstruct
-bpf_spin_lock\fP \fIanyname\fP\fB;\fP field at the top level.
-Nested lock inside another struct is not allowed.
-.IP \(bu 2
-The \fBstruct bpf_spin_lock\fP \fIlock\fP field in a map value must
-be aligned on a multiple of 4 bytes in that value.
-.IP \(bu 2
-Syscall with command \fBBPF_MAP_LOOKUP_ELEM\fP does not copy
-the \fBbpf_spin_lock\fP field to user space.
-.IP \(bu 2
-Syscall with command \fBBPF_MAP_UPDATE_ELEM\fP, or update from
-a BPF program, do not update the \fBbpf_spin_lock\fP field.
-.IP \(bu 2
-\fBbpf_spin_lock\fP cannot be on the stack or inside a
-networking packet (it can only be inside of a map values).
-.IP \(bu 2
-\fBbpf_spin_lock\fP is available to root only.
-.IP \(bu 2
-Tracing programs and socket filter programs cannot use
-\fBbpf_spin_lock\fP() due to insufficient preemption checks
-(but this may change in the future).
-.IP \(bu 2
-\fBbpf_spin_lock\fP is not allowed in inner maps of map\-in\-map.
-.UNINDENT
-.TP
-.B Return
-0
-.UNINDENT
-.TP
-.B \fBlong bpf_spin_unlock(struct bpf_spin_lock *\fP\fIlock\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Release the \fIlock\fP previously locked by a call to
-\fBbpf_spin_lock\fP(\fIlock\fP).
-.TP
-.B Return
-0
-.UNINDENT
-.TP
-.B \fBstruct bpf_sock *bpf_sk_fullsock(struct bpf_sock *\fP\fIsk\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-This helper gets a \fBstruct bpf_sock\fP pointer such
-that all the fields in this \fBbpf_sock\fP can be accessed.
-.TP
-.B Return
-A \fBstruct bpf_sock\fP pointer on success, or \fBNULL\fP in
-case of failure.
-.UNINDENT
-.TP
-.B \fBstruct bpf_tcp_sock *bpf_tcp_sock(struct bpf_sock *\fP\fIsk\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-This helper gets a \fBstruct bpf_tcp_sock\fP pointer from a
-\fBstruct bpf_sock\fP pointer.
-.TP
-.B Return
-A \fBstruct bpf_tcp_sock\fP pointer on success, or \fBNULL\fP in
-case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_ecn_set_ce(struct sk_buff *\fP\fIskb\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Set ECN (Explicit Congestion Notification) field of IP header
-to \fBCE\fP (Congestion Encountered) if current value is \fBECT\fP
-(ECN Capable Transport). Otherwise, do nothing. Works with IPv6
-and IPv4.
-.TP
-.B Return
-1 if the \fBCE\fP flag is set (either by the current helper call
-or because it was already present), 0 if it is not set.
-.UNINDENT
-.TP
-.B \fBstruct bpf_sock *bpf_get_listener_sock(struct bpf_sock *\fP\fIsk\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Return a \fBstruct bpf_sock\fP pointer in \fBTCP_LISTEN\fP state.
-\fBbpf_sk_release\fP() is unnecessary and not allowed.
-.TP
-.B Return
-A \fBstruct bpf_sock\fP pointer on success, or \fBNULL\fP in
-case of failure.
-.UNINDENT
-.TP
-.B \fBstruct bpf_sock *bpf_skc_lookup_tcp(void *\fP\fIctx\fP\fB, struct bpf_sock_tuple *\fP\fItuple\fP\fB, u32\fP \fItuple_size\fP\fB, u64\fP \fInetns\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Look for TCP socket matching \fItuple\fP, optionally in a child
-network namespace \fInetns\fP\&. The return value must be checked,
-and if non\-\fBNULL\fP, released via \fBbpf_sk_release\fP().
-.sp
-This function is identical to \fBbpf_sk_lookup_tcp\fP(), except
-that it also returns timewait or request sockets. Use
-\fBbpf_sk_fullsock\fP() or \fBbpf_tcp_sock\fP() to access the
-full structure.
-.sp
-This helper is available only if the kernel was compiled with
-\fBCONFIG_NET\fP configuration option.
-.TP
-.B Return
-Pointer to \fBstruct bpf_sock\fP, or \fBNULL\fP in case of failure.
-For sockets with reuseport option, the \fBstruct bpf_sock\fP
-result is from \fIreuse\fP\fB\->socks\fP[] using the hash of the
-tuple.
-.UNINDENT
-.TP
-.B \fBlong bpf_tcp_check_syncookie(void *\fP\fIsk\fP\fB, void *\fP\fIiph\fP\fB, u32\fP \fIiph_len\fP\fB, struct tcphdr *\fP\fIth\fP\fB, u32\fP \fIth_len\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Check whether \fIiph\fP and \fIth\fP contain a valid SYN cookie ACK for
-the listening socket in \fIsk\fP\&.
-.sp
-\fIiph\fP points to the start of the IPv4 or IPv6 header, while
-\fIiph_len\fP contains \fBsizeof\fP(\fBstruct iphdr\fP) or
-\fBsizeof\fP(\fBstruct ipv6hdr\fP).
-.sp
-\fIth\fP points to the start of the TCP header, while \fIth_len\fP
-contains the length of the TCP header (at least
-\fBsizeof\fP(\fBstruct tcphdr\fP)).
-.TP
-.B Return
-0 if \fIiph\fP and \fIth\fP are a valid SYN cookie ACK, or a negative
-error otherwise.
-.UNINDENT
-.TP
-.B \fBlong bpf_sysctl_get_name(struct bpf_sysctl *\fP\fIctx\fP\fB, char *\fP\fIbuf\fP\fB, size_t\fP \fIbuf_len\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get name of sysctl in /proc/sys/ and copy it into provided by
-program buffer \fIbuf\fP of size \fIbuf_len\fP\&.
-.sp
-The buffer is always NUL terminated, unless it\(aqs zero\-sized.
-.sp
-If \fIflags\fP is zero, full name (e.g. \(dqnet/ipv4/tcp_mem\(dq) is
-copied. Use \fBBPF_F_SYSCTL_BASE_NAME\fP flag to copy base name
-only (e.g. \(dqtcp_mem\(dq).
-.TP
-.B Return
-Number of character copied (not including the trailing NUL).
-.sp
-\fB\-E2BIG\fP if the buffer wasn\(aqt big enough (\fIbuf\fP will contain
-truncated name in this case).
-.UNINDENT
-.TP
-.B \fBlong bpf_sysctl_get_current_value(struct bpf_sysctl *\fP\fIctx\fP\fB, char *\fP\fIbuf\fP\fB, size_t\fP \fIbuf_len\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get current value of sysctl as it is presented in /proc/sys
-(incl. newline, etc), and copy it as a string into provided
-by program buffer \fIbuf\fP of size \fIbuf_len\fP\&.
-.sp
-The whole value is copied, no matter what file position user
-space issued e.g. sys_read at.
-.sp
-The buffer is always NUL terminated, unless it\(aqs zero\-sized.
-.TP
-.B Return
-Number of character copied (not including the trailing NUL).
-.sp
-\fB\-E2BIG\fP if the buffer wasn\(aqt big enough (\fIbuf\fP will contain
-truncated name in this case).
-.sp
-\fB\-EINVAL\fP if current value was unavailable, e.g. because
-sysctl is uninitialized and read returns \-EIO for it.
-.UNINDENT
-.TP
-.B \fBlong bpf_sysctl_get_new_value(struct bpf_sysctl *\fP\fIctx\fP\fB, char *\fP\fIbuf\fP\fB, size_t\fP \fIbuf_len\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get new value being written by user space to sysctl (before
-the actual write happens) and copy it as a string into
-provided by program buffer \fIbuf\fP of size \fIbuf_len\fP\&.
-.sp
-User space may write new value at file position > 0.
-.sp
-The buffer is always NUL terminated, unless it\(aqs zero\-sized.
-.TP
-.B Return
-Number of character copied (not including the trailing NUL).
-.sp
-\fB\-E2BIG\fP if the buffer wasn\(aqt big enough (\fIbuf\fP will contain
-truncated name in this case).
-.sp
-\fB\-EINVAL\fP if sysctl is being read.
-.UNINDENT
-.TP
-.B \fBlong bpf_sysctl_set_new_value(struct bpf_sysctl *\fP\fIctx\fP\fB, const char *\fP\fIbuf\fP\fB, size_t\fP \fIbuf_len\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Override new value being written by user space to sysctl with
-value provided by program in buffer \fIbuf\fP of size \fIbuf_len\fP\&.
-.sp
-\fIbuf\fP should contain a string in same form as provided by user
-space on sysctl write.
-.sp
-User space may write new value at file position > 0. To override
-the whole sysctl value file position should be set to zero.
-.TP
-.B Return
-0 on success.
-.sp
-\fB\-E2BIG\fP if the \fIbuf_len\fP is too big.
-.sp
-\fB\-EINVAL\fP if sysctl is being read.
-.UNINDENT
-.TP
-.B \fBlong bpf_strtol(const char *\fP\fIbuf\fP\fB, size_t\fP \fIbuf_len\fP\fB, u64\fP \fIflags\fP\fB, long *\fP\fIres\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Convert the initial part of the string from buffer \fIbuf\fP of
-size \fIbuf_len\fP to a long integer according to the given base
-and save the result in \fIres\fP\&.
-.sp
-The string may begin with an arbitrary amount of white space
-(as determined by \fBisspace\fP(3)) followed by a single
-optional \(aq\fB\-\fP\(aq sign.
-.sp
-Five least significant bits of \fIflags\fP encode base, other bits
-are currently unused.
-.sp
-Base must be either 8, 10, 16 or 0 to detect it automatically
-similar to user space \fBstrtol\fP(3).
-.TP
-.B Return
-Number of characters consumed on success. Must be positive but
-no more than \fIbuf_len\fP\&.
-.sp
-\fB\-EINVAL\fP if no valid digits were found or unsupported base
-was provided.
-.sp
-\fB\-ERANGE\fP if resulting value was out of range.
-.UNINDENT
-.TP
-.B \fBlong bpf_strtoul(const char *\fP\fIbuf\fP\fB, size_t\fP \fIbuf_len\fP\fB, u64\fP \fIflags\fP\fB, unsigned long *\fP\fIres\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Convert the initial part of the string from buffer \fIbuf\fP of
-size \fIbuf_len\fP to an unsigned long integer according to the
-given base and save the result in \fIres\fP\&.
-.sp
-The string may begin with an arbitrary amount of white space
-(as determined by \fBisspace\fP(3)).
-.sp
-Five least significant bits of \fIflags\fP encode base, other bits
-are currently unused.
-.sp
-Base must be either 8, 10, 16 or 0 to detect it automatically
-similar to user space \fBstrtoul\fP(3).
-.TP
-.B Return
-Number of characters consumed on success. Must be positive but
-no more than \fIbuf_len\fP\&.
-.sp
-\fB\-EINVAL\fP if no valid digits were found or unsupported base
-was provided.
-.sp
-\fB\-ERANGE\fP if resulting value was out of range.
-.UNINDENT
-.TP
-.B \fBvoid *bpf_sk_storage_get(struct bpf_map *\fP\fImap\fP\fB, void *\fP\fIsk\fP\fB, void *\fP\fIvalue\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get a bpf\-local\-storage from a \fIsk\fP\&.
-.sp
-Logically, it could be thought of getting the value from
-a \fImap\fP with \fIsk\fP as the \fBkey\fP\&. From this
-perspective, the usage is not much different from
-\fBbpf_map_lookup_elem\fP(\fImap\fP, \fB&\fP\fIsk\fP) except this
-helper enforces the key must be a full socket and the map must
-be a \fBBPF_MAP_TYPE_SK_STORAGE\fP also.
-.sp
-Underneath, the value is stored locally at \fIsk\fP instead of
-the \fImap\fP\&. The \fImap\fP is used as the bpf\-local\-storage
-\(dqtype\(dq. The bpf\-local\-storage \(dqtype\(dq (i.e. the \fImap\fP) is
-searched against all bpf\-local\-storages residing at \fIsk\fP\&.
-.sp
-\fIsk\fP is a kernel \fBstruct sock\fP pointer for LSM program.
-\fIsk\fP is a \fBstruct bpf_sock\fP pointer for other program types.
-.sp
-An optional \fIflags\fP (\fBBPF_SK_STORAGE_GET_F_CREATE\fP) can be
-used such that a new bpf\-local\-storage will be
-created if one does not exist. \fIvalue\fP can be used
-together with \fBBPF_SK_STORAGE_GET_F_CREATE\fP to specify
-the initial value of a bpf\-local\-storage. If \fIvalue\fP is
-\fBNULL\fP, the new bpf\-local\-storage will be zero initialized.
-.TP
-.B Return
-A bpf\-local\-storage pointer is returned on success.
-.sp
-\fBNULL\fP if not found or there was an error in adding
-a new bpf\-local\-storage.
-.UNINDENT
-.TP
-.B \fBlong bpf_sk_storage_delete(struct bpf_map *\fP\fImap\fP\fB, void *\fP\fIsk\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Delete a bpf\-local\-storage from a \fIsk\fP\&.
-.TP
-.B Return
-0 on success.
-.sp
-\fB\-ENOENT\fP if the bpf\-local\-storage cannot be found.
-\fB\-EINVAL\fP if sk is not a fullsock (e.g. a request_sock).
-.UNINDENT
-.TP
-.B \fBlong bpf_send_signal(u32\fP \fIsig\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Send signal \fIsig\fP to the process of the current task.
-The signal may be delivered to any of this process\(aqs threads.
-.TP
-.B Return
-0 on success or successfully queued.
-.sp
-\fB\-EBUSY\fP if work queue under nmi is full.
-.sp
-\fB\-EINVAL\fP if \fIsig\fP is invalid.
-.sp
-\fB\-EPERM\fP if no permission to send the \fIsig\fP\&.
-.sp
-\fB\-EAGAIN\fP if bpf program can try again.
-.UNINDENT
-.TP
-.B \fBs64 bpf_tcp_gen_syncookie(void *\fP\fIsk\fP\fB, void *\fP\fIiph\fP\fB, u32\fP \fIiph_len\fP\fB, struct tcphdr *\fP\fIth\fP\fB, u32\fP \fIth_len\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Try to issue a SYN cookie for the packet with corresponding
-IP/TCP headers, \fIiph\fP and \fIth\fP, on the listening socket in \fIsk\fP\&.
-.sp
-\fIiph\fP points to the start of the IPv4 or IPv6 header, while
-\fIiph_len\fP contains \fBsizeof\fP(\fBstruct iphdr\fP) or
-\fBsizeof\fP(\fBstruct ipv6hdr\fP).
-.sp
-\fIth\fP points to the start of the TCP header, while \fIth_len\fP
-contains the length of the TCP header with options (at least
-\fBsizeof\fP(\fBstruct tcphdr\fP)).
-.TP
-.B Return
-On success, lower 32 bits hold the generated SYN cookie in
-followed by 16 bits which hold the MSS value for that cookie,
-and the top 16 bits are unused.
-.sp
-On failure, the returned value is one of the following:
-.sp
-\fB\-EINVAL\fP SYN cookie cannot be issued due to error
-.sp
-\fB\-ENOENT\fP SYN cookie should not be issued (no SYN flood)
-.sp
-\fB\-EOPNOTSUPP\fP kernel configuration does not enable SYN cookies
-.sp
-\fB\-EPROTONOSUPPORT\fP IP packet version is not 4 or 6
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_output(void *\fP\fIctx\fP\fB, struct bpf_map *\fP\fImap\fP\fB, u64\fP \fIflags\fP\fB, void *\fP\fIdata\fP\fB, u64\fP \fIsize\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Write raw \fIdata\fP blob into a special BPF perf event held by
-\fImap\fP of type \fBBPF_MAP_TYPE_PERF_EVENT_ARRAY\fP\&. This perf
-event must have the following attributes: \fBPERF_SAMPLE_RAW\fP
-as \fBsample_type\fP, \fBPERF_TYPE_SOFTWARE\fP as \fBtype\fP, and
-\fBPERF_COUNT_SW_BPF_OUTPUT\fP as \fBconfig\fP\&.
-.sp
-The \fIflags\fP are used to indicate the index in \fImap\fP for which
-the value must be put, masked with \fBBPF_F_INDEX_MASK\fP\&.
-Alternatively, \fIflags\fP can be set to \fBBPF_F_CURRENT_CPU\fP
-to indicate that the index of the current CPU core should be
-used.
-.sp
-The value to write, of \fIsize\fP, is passed through eBPF stack and
-pointed by \fIdata\fP\&.
-.sp
-\fIctx\fP is a pointer to in\-kernel struct sk_buff.
-.sp
-This helper is similar to \fBbpf_perf_event_output\fP() but
-restricted to raw_tracepoint bpf programs.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_probe_read_user(void *\fP\fIdst\fP\fB, u32\fP \fIsize\fP\fB, const void *\fP\fIunsafe_ptr\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Safely attempt to read \fIsize\fP bytes from user space address
-\fIunsafe_ptr\fP and store the data in \fIdst\fP\&.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_probe_read_kernel(void *\fP\fIdst\fP\fB, u32\fP \fIsize\fP\fB, const void *\fP\fIunsafe_ptr\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Safely attempt to read \fIsize\fP bytes from kernel space address
-\fIunsafe_ptr\fP and store the data in \fIdst\fP\&.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_probe_read_user_str(void *\fP\fIdst\fP\fB, u32\fP \fIsize\fP\fB, const void *\fP\fIunsafe_ptr\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Copy a NUL terminated string from an unsafe user address
-\fIunsafe_ptr\fP to \fIdst\fP\&. The \fIsize\fP should include the
-terminating NUL byte. In case the string length is smaller than
-\fIsize\fP, the target is not padded with further NUL bytes. If the
-string length is larger than \fIsize\fP, just \fIsize\fP\-1 bytes are
-copied and the last byte is set to NUL.
-.sp
-On success, returns the number of bytes that were written,
-including the terminal NUL. This makes this helper useful in
-tracing programs for reading strings, and more importantly to
-get its length at runtime. See the following snippet:
-.INDENT 7.0
-.INDENT 3.5
-.sp
-.nf
-.ft C
-SEC(\(dqkprobe/sys_open\(dq)
-void bpf_sys_open(struct pt_regs *ctx)
-{
- char buf[PATHLEN]; // PATHLEN is defined to 256
- int res;
-
- res = bpf_probe_read_user_str(buf, sizeof(buf),
- ctx\->di);
-
- // Consume buf, for example push it to
- // userspace via bpf_perf_event_output(); we
- // can use res (the string length) as event
- // size, after checking its boundaries.
-}
-.ft P
-.fi
-.UNINDENT
-.UNINDENT
-.sp
-In comparison, using \fBbpf_probe_read_user\fP() helper here
-instead to read the string would require to estimate the length
-at compile time, and would often result in copying more memory
-than necessary.
-.sp
-Another useful use case is when parsing individual process
-arguments or individual environment variables navigating
-\fIcurrent\fP\fB\->mm\->arg_start\fP and \fIcurrent\fP\fB\->mm\->env_start\fP: using this helper and the return value,
-one can quickly iterate at the right offset of the memory area.
-.TP
-.B Return
-On success, the strictly positive length of the output string,
-including the trailing NUL character. On error, a negative
-value.
-.UNINDENT
-.TP
-.B \fBlong bpf_probe_read_kernel_str(void *\fP\fIdst\fP\fB, u32\fP \fIsize\fP\fB, const void *\fP\fIunsafe_ptr\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Copy a NUL terminated string from an unsafe kernel address \fIunsafe_ptr\fP
-to \fIdst\fP\&. Same semantics as with \fBbpf_probe_read_user_str\fP() apply.
-.TP
-.B Return
-On success, the strictly positive length of the string, including
-the trailing NUL character. On error, a negative value.
-.UNINDENT
-.TP
-.B \fBlong bpf_tcp_send_ack(void *\fP\fItp\fP\fB, u32\fP \fIrcv_nxt\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Send out a tcp\-ack. \fItp\fP is the in\-kernel struct \fBtcp_sock\fP\&.
-\fIrcv_nxt\fP is the ack_seq to be sent out.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_send_signal_thread(u32\fP \fIsig\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Send signal \fIsig\fP to the thread corresponding to the current task.
-.TP
-.B Return
-0 on success or successfully queued.
-.sp
-\fB\-EBUSY\fP if work queue under nmi is full.
-.sp
-\fB\-EINVAL\fP if \fIsig\fP is invalid.
-.sp
-\fB\-EPERM\fP if no permission to send the \fIsig\fP\&.
-.sp
-\fB\-EAGAIN\fP if bpf program can try again.
-.UNINDENT
-.TP
-.B \fBu64 bpf_jiffies64(void)\fP
-.INDENT 7.0
-.TP
-.B Description
-Obtain the 64bit jiffies
-.TP
-.B Return
-The 64 bit jiffies
-.UNINDENT
-.TP
-.B \fBlong bpf_read_branch_records(struct bpf_perf_event_data *\fP\fIctx\fP\fB, void *\fP\fIbuf\fP\fB, u32\fP \fIsize\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-For an eBPF program attached to a perf event, retrieve the
-branch records (\fBstruct perf_branch_entry\fP) associated to \fIctx\fP
-and store it in the buffer pointed by \fIbuf\fP up to size
-\fIsize\fP bytes.
-.TP
-.B Return
-On success, number of bytes written to \fIbuf\fP\&. On error, a
-negative value.
-.sp
-The \fIflags\fP can be set to \fBBPF_F_GET_BRANCH_RECORDS_SIZE\fP to
-instead return the number of bytes required to store all the
-branch entries. If this flag is set, \fIbuf\fP may be NULL.
-.sp
-\fB\-EINVAL\fP if arguments invalid or \fBsize\fP not a multiple
-of \fBsizeof\fP(\fBstruct perf_branch_entry\fP).
-.sp
-\fB\-ENOENT\fP if architecture does not support branch records.
-.UNINDENT
-.TP
-.B \fBlong bpf_get_ns_current_pid_tgid(u64\fP \fIdev\fP\fB, u64\fP \fIino\fP\fB, struct bpf_pidns_info *\fP\fInsdata\fP\fB, u32\fP \fIsize\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Returns 0 on success, values for \fIpid\fP and \fItgid\fP as seen from the current
-\fInamespace\fP will be returned in \fInsdata\fP\&.
-.TP
-.B Return
-0 on success, or one of the following in case of failure:
-.sp
-\fB\-EINVAL\fP if dev and inum supplied don\(aqt match dev_t and inode number
-with nsfs of current task, or if dev conversion to dev_t lost high bits.
-.sp
-\fB\-ENOENT\fP if pidns does not exists for the current task.
-.UNINDENT
-.TP
-.B \fBlong bpf_xdp_output(void *\fP\fIctx\fP\fB, struct bpf_map *\fP\fImap\fP\fB, u64\fP \fIflags\fP\fB, void *\fP\fIdata\fP\fB, u64\fP \fIsize\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Write raw \fIdata\fP blob into a special BPF perf event held by
-\fImap\fP of type \fBBPF_MAP_TYPE_PERF_EVENT_ARRAY\fP\&. This perf
-event must have the following attributes: \fBPERF_SAMPLE_RAW\fP
-as \fBsample_type\fP, \fBPERF_TYPE_SOFTWARE\fP as \fBtype\fP, and
-\fBPERF_COUNT_SW_BPF_OUTPUT\fP as \fBconfig\fP\&.
-.sp
-The \fIflags\fP are used to indicate the index in \fImap\fP for which
-the value must be put, masked with \fBBPF_F_INDEX_MASK\fP\&.
-Alternatively, \fIflags\fP can be set to \fBBPF_F_CURRENT_CPU\fP
-to indicate that the index of the current CPU core should be
-used.
-.sp
-The value to write, of \fIsize\fP, is passed through eBPF stack and
-pointed by \fIdata\fP\&.
-.sp
-\fIctx\fP is a pointer to in\-kernel struct xdp_buff.
-.sp
-This helper is similar to \fBbpf_perf_eventoutput\fP() but
-restricted to raw_tracepoint bpf programs.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBu64 bpf_get_netns_cookie(void *\fP\fIctx\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Retrieve the cookie (generated by the kernel) of the network
-namespace the input \fIctx\fP is associated with. The network
-namespace cookie remains stable for its lifetime and provides
-a global identifier that can be assumed unique. If \fIctx\fP is
-NULL, then the helper returns the cookie for the initial
-network namespace. The cookie itself is very similar to that
-of \fBbpf_get_socket_cookie\fP() helper, but for network
-namespaces instead of sockets.
-.TP
-.B Return
-A 8\-byte long opaque number.
-.UNINDENT
-.TP
-.B \fBu64 bpf_get_current_ancestor_cgroup_id(int\fP \fIancestor_level\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Return id of cgroup v2 that is ancestor of the cgroup associated
-with the current task at the \fIancestor_level\fP\&. The root cgroup
-is at \fIancestor_level\fP zero and each step down the hierarchy
-increments the level. If \fIancestor_level\fP == level of cgroup
-associated with the current task, then return value will be the
-same as that of \fBbpf_get_current_cgroup_id\fP().
-.sp
-The helper is useful to implement policies based on cgroups
-that are upper in hierarchy than immediate cgroup associated
-with the current task.
-.sp
-The format of returned id and helper limitations are same as in
-\fBbpf_get_current_cgroup_id\fP().
-.TP
-.B Return
-The id is returned or 0 in case the id could not be retrieved.
-.UNINDENT
-.TP
-.B \fBlong bpf_sk_assign(struct sk_buff *\fP\fIskb\fP\fB, void *\fP\fIsk\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Helper is overloaded depending on BPF program type. This
-description applies to \fBBPF_PROG_TYPE_SCHED_CLS\fP and
-\fBBPF_PROG_TYPE_SCHED_ACT\fP programs.
-.sp
-Assign the \fIsk\fP to the \fIskb\fP\&. When combined with appropriate
-routing configuration to receive the packet towards the socket,
-will cause \fIskb\fP to be delivered to the specified socket.
-Subsequent redirection of \fIskb\fP via \fBbpf_redirect\fP(),
-\fBbpf_clone_redirect\fP() or other methods outside of BPF may
-interfere with successful delivery to the socket.
-.sp
-This operation is only valid from TC ingress path.
-.sp
-The \fIflags\fP argument must be zero.
-.TP
-.B Return
-0 on success, or a negative error in case of failure:
-.sp
-\fB\-EINVAL\fP if specified \fIflags\fP are not supported.
-.sp
-\fB\-ENOENT\fP if the socket is unavailable for assignment.
-.sp
-\fB\-ENETUNREACH\fP if the socket is unreachable (wrong netns).
-.sp
-\fB\-EOPNOTSUPP\fP if the operation is not supported, for example
-a call from outside of TC ingress.
-.sp
-\fB\-ESOCKTNOSUPPORT\fP if the socket type is not supported
-(reuseport).
-.UNINDENT
-.TP
-.B \fBlong bpf_sk_assign(struct bpf_sk_lookup *\fP\fIctx\fP\fB, struct bpf_sock *\fP\fIsk\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Helper is overloaded depending on BPF program type. This
-description applies to \fBBPF_PROG_TYPE_SK_LOOKUP\fP programs.
-.sp
-Select the \fIsk\fP as a result of a socket lookup.
-.sp
-For the operation to succeed passed socket must be compatible
-with the packet description provided by the \fIctx\fP object.
-.sp
-L4 protocol (\fBIPPROTO_TCP\fP or \fBIPPROTO_UDP\fP) must
-be an exact match. While IP family (\fBAF_INET\fP or
-\fBAF_INET6\fP) must be compatible, that is IPv6 sockets
-that are not v6\-only can be selected for IPv4 packets.
-.sp
-Only TCP listeners and UDP unconnected sockets can be
-selected. \fIsk\fP can also be NULL to reset any previous
-selection.
-.sp
-\fIflags\fP argument can combination of following values:
-.INDENT 7.0
-.IP \(bu 2
-\fBBPF_SK_LOOKUP_F_REPLACE\fP to override the previous
-socket selection, potentially done by a BPF program
-that ran before us.
-.IP \(bu 2
-\fBBPF_SK_LOOKUP_F_NO_REUSEPORT\fP to skip
-load\-balancing within reuseport group for the socket
-being selected.
-.UNINDENT
-.sp
-On success \fIctx\->sk\fP will point to the selected socket.
-.TP
-.B Return
-0 on success, or a negative errno in case of failure.
-.INDENT 7.0
-.IP \(bu 2
-\fB\-EAFNOSUPPORT\fP if socket family (\fIsk\->family\fP) is
-not compatible with packet family (\fIctx\->family\fP).
-.IP \(bu 2
-\fB\-EEXIST\fP if socket has been already selected,
-potentially by another program, and
-\fBBPF_SK_LOOKUP_F_REPLACE\fP flag was not specified.
-.IP \(bu 2
-\fB\-EINVAL\fP if unsupported flags were specified.
-.IP \(bu 2
-\fB\-EPROTOTYPE\fP if socket L4 protocol
-(\fIsk\->protocol\fP) doesn\(aqt match packet protocol
-(\fIctx\->protocol\fP).
-.IP \(bu 2
-\fB\-ESOCKTNOSUPPORT\fP if socket is not in allowed
-state (TCP listening or UDP unconnected).
-.UNINDENT
-.UNINDENT
-.TP
-.B \fBu64 bpf_ktime_get_boot_ns(void)\fP
-.INDENT 7.0
-.TP
-.B Description
-Return the time elapsed since system boot, in nanoseconds.
-Does include the time the system was suspended.
-See: \fBclock_gettime\fP(\fBCLOCK_BOOTTIME\fP)
-.TP
-.B Return
-Current \fIktime\fP\&.
-.UNINDENT
-.TP
-.B \fBlong bpf_seq_printf(struct seq_file *\fP\fIm\fP\fB, const char *\fP\fIfmt\fP\fB, u32\fP \fIfmt_size\fP\fB, const void *\fP\fIdata\fP\fB, u32\fP \fIdata_len\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-\fBbpf_seq_printf\fP() uses seq_file \fBseq_printf\fP() to print
-out the format string.
-The \fIm\fP represents the seq_file. The \fIfmt\fP and \fIfmt_size\fP are for
-the format string itself. The \fIdata\fP and \fIdata_len\fP are format string
-arguments. The \fIdata\fP are a \fBu64\fP array and corresponding format string
-values are stored in the array. For strings and pointers where pointees
-are accessed, only the pointer values are stored in the \fIdata\fP array.
-The \fIdata_len\fP is the size of \fIdata\fP in bytes \- must be a multiple of 8.
-.sp
-Formats \fB%s\fP, \fB%p{i,I}{4,6}\fP requires to read kernel memory.
-Reading kernel memory may fail due to either invalid address or
-valid address but requiring a major memory fault. If reading kernel memory
-fails, the string for \fB%s\fP will be an empty string, and the ip
-address for \fB%p{i,I}{4,6}\fP will be 0. Not returning error to
-bpf program is consistent with what \fBbpf_trace_printk\fP() does for now.
-.TP
-.B Return
-0 on success, or a negative error in case of failure:
-.sp
-\fB\-EBUSY\fP if per\-CPU memory copy buffer is busy, can try again
-by returning 1 from bpf program.
-.sp
-\fB\-EINVAL\fP if arguments are invalid, or if \fIfmt\fP is invalid/unsupported.
-.sp
-\fB\-E2BIG\fP if \fIfmt\fP contains too many format specifiers.
-.sp
-\fB\-EOVERFLOW\fP if an overflow happened: The same object will be tried again.
-.UNINDENT
-.TP
-.B \fBlong bpf_seq_write(struct seq_file *\fP\fIm\fP\fB, const void *\fP\fIdata\fP\fB, u32\fP \fIlen\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-\fBbpf_seq_write\fP() uses seq_file \fBseq_write\fP() to write the data.
-The \fIm\fP represents the seq_file. The \fIdata\fP and \fIlen\fP represent the
-data to write in bytes.
-.TP
-.B Return
-0 on success, or a negative error in case of failure:
-.sp
-\fB\-EOVERFLOW\fP if an overflow happened: The same object will be tried again.
-.UNINDENT
-.TP
-.B \fBu64 bpf_sk_cgroup_id(void *\fP\fIsk\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Return the cgroup v2 id of the socket \fIsk\fP\&.
-.sp
-\fIsk\fP must be a non\-\fBNULL\fP pointer to a socket, e.g. one
-returned from \fBbpf_sk_lookup_xxx\fP(),
-\fBbpf_sk_fullsock\fP(), etc. The format of returned id is
-same as in \fBbpf_skb_cgroup_id\fP().
-.sp
-This helper is available only if the kernel was compiled with
-the \fBCONFIG_SOCK_CGROUP_DATA\fP configuration option.
-.TP
-.B Return
-The id is returned or 0 in case the id could not be retrieved.
-.UNINDENT
-.TP
-.B \fBu64 bpf_sk_ancestor_cgroup_id(void *\fP\fIsk\fP\fB, int\fP \fIancestor_level\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Return id of cgroup v2 that is ancestor of cgroup associated
-with the \fIsk\fP at the \fIancestor_level\fP\&. The root cgroup is at
-\fIancestor_level\fP zero and each step down the hierarchy
-increments the level. If \fIancestor_level\fP == level of cgroup
-associated with \fIsk\fP, then return value will be same as that
-of \fBbpf_sk_cgroup_id\fP().
-.sp
-The helper is useful to implement policies based on cgroups
-that are upper in hierarchy than immediate cgroup associated
-with \fIsk\fP\&.
-.sp
-The format of returned id and helper limitations are same as in
-\fBbpf_sk_cgroup_id\fP().
-.TP
-.B Return
-The id is returned or 0 in case the id could not be retrieved.
-.UNINDENT
-.TP
-.B \fBlong bpf_ringbuf_output(void *\fP\fIringbuf\fP\fB, void *\fP\fIdata\fP\fB, u64\fP \fIsize\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Copy \fIsize\fP bytes from \fIdata\fP into a ring buffer \fIringbuf\fP\&.
-If \fBBPF_RB_NO_WAKEUP\fP is specified in \fIflags\fP, no notification
-of new data availability is sent.
-If \fBBPF_RB_FORCE_WAKEUP\fP is specified in \fIflags\fP, notification
-of new data availability is sent unconditionally.
-If \fB0\fP is specified in \fIflags\fP, an adaptive notification
-of new data availability is sent.
-.sp
-An adaptive notification is a notification sent whenever the user\-space
-process has caught up and consumed all available payloads. In case the user\-space
-process is still processing a previous payload, then no notification is needed
-as it will process the newly added payload automatically.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBvoid *bpf_ringbuf_reserve(void *\fP\fIringbuf\fP\fB, u64\fP \fIsize\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Reserve \fIsize\fP bytes of payload in a ring buffer \fIringbuf\fP\&.
-\fIflags\fP must be 0.
-.TP
-.B Return
-Valid pointer with \fIsize\fP bytes of memory available; NULL,
-otherwise.
-.UNINDENT
-.TP
-.B \fBvoid bpf_ringbuf_submit(void *\fP\fIdata\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Submit reserved ring buffer sample, pointed to by \fIdata\fP\&.
-If \fBBPF_RB_NO_WAKEUP\fP is specified in \fIflags\fP, no notification
-of new data availability is sent.
-If \fBBPF_RB_FORCE_WAKEUP\fP is specified in \fIflags\fP, notification
-of new data availability is sent unconditionally.
-If \fB0\fP is specified in \fIflags\fP, an adaptive notification
-of new data availability is sent.
-.sp
-See \(aqbpf_ringbuf_output()\(aq for the definition of adaptive notification.
-.TP
-.B Return
-Nothing. Always succeeds.
-.UNINDENT
-.TP
-.B \fBvoid bpf_ringbuf_discard(void *\fP\fIdata\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Discard reserved ring buffer sample, pointed to by \fIdata\fP\&.
-If \fBBPF_RB_NO_WAKEUP\fP is specified in \fIflags\fP, no notification
-of new data availability is sent.
-If \fBBPF_RB_FORCE_WAKEUP\fP is specified in \fIflags\fP, notification
-of new data availability is sent unconditionally.
-If \fB0\fP is specified in \fIflags\fP, an adaptive notification
-of new data availability is sent.
-.sp
-See \(aqbpf_ringbuf_output()\(aq for the definition of adaptive notification.
-.TP
-.B Return
-Nothing. Always succeeds.
-.UNINDENT
-.TP
-.B \fBu64 bpf_ringbuf_query(void *\fP\fIringbuf\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Query various characteristics of provided ring buffer. What
-exactly is queries is determined by \fIflags\fP:
-.INDENT 7.0
-.IP \(bu 2
-\fBBPF_RB_AVAIL_DATA\fP: Amount of data not yet consumed.
-.IP \(bu 2
-\fBBPF_RB_RING_SIZE\fP: The size of ring buffer.
-.IP \(bu 2
-\fBBPF_RB_CONS_POS\fP: Consumer position (can wrap around).
-.IP \(bu 2
-\fBBPF_RB_PROD_POS\fP: Producer(s) position (can wrap around).
-.UNINDENT
-.sp
-Data returned is just a momentary snapshot of actual values
-and could be inaccurate, so this facility should be used to
-power heuristics and for reporting, not to make 100% correct
-calculation.
-.TP
-.B Return
-Requested value, or 0, if \fIflags\fP are not recognized.
-.UNINDENT
-.TP
-.B \fBlong bpf_csum_level(struct sk_buff *\fP\fIskb\fP\fB, u64\fP \fIlevel\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Change the skbs checksum level by one layer up or down, or
-reset it entirely to none in order to have the stack perform
-checksum validation. The level is applicable to the following
-protocols: TCP, UDP, GRE, SCTP, FCOE. For example, a decap of
-| ETH | IP | UDP | GUE | IP | TCP | into | ETH | IP | TCP |
-through \fBbpf_skb_adjust_room\fP() helper with passing in
-\fBBPF_F_ADJ_ROOM_NO_CSUM_RESET\fP flag would require one call
-to \fBbpf_csum_level\fP() with \fBBPF_CSUM_LEVEL_DEC\fP since
-the UDP header is removed. Similarly, an encap of the latter
-into the former could be accompanied by a helper call to
-\fBbpf_csum_level\fP() with \fBBPF_CSUM_LEVEL_INC\fP if the
-skb is still intended to be processed in higher layers of the
-stack instead of just egressing at tc.
-.sp
-There are three supported level settings at this time:
-.INDENT 7.0
-.IP \(bu 2
-\fBBPF_CSUM_LEVEL_INC\fP: Increases skb\->csum_level for skbs
-with CHECKSUM_UNNECESSARY.
-.IP \(bu 2
-\fBBPF_CSUM_LEVEL_DEC\fP: Decreases skb\->csum_level for skbs
-with CHECKSUM_UNNECESSARY.
-.IP \(bu 2
-\fBBPF_CSUM_LEVEL_RESET\fP: Resets skb\->csum_level to 0 and
-sets CHECKSUM_NONE to force checksum validation by the stack.
-.IP \(bu 2
-\fBBPF_CSUM_LEVEL_QUERY\fP: No\-op, returns the current
-skb\->csum_level.
-.UNINDENT
-.TP
-.B Return
-0 on success, or a negative error in case of failure. In the
-case of \fBBPF_CSUM_LEVEL_QUERY\fP, the current skb\->csum_level
-is returned or the error code \-EACCES in case the skb is not
-subject to CHECKSUM_UNNECESSARY.
-.UNINDENT
-.TP
-.B \fBstruct tcp6_sock *bpf_skc_to_tcp6_sock(void *\fP\fIsk\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Dynamically cast a \fIsk\fP pointer to a \fItcp6_sock\fP pointer.
-.TP
-.B Return
-\fIsk\fP if casting is valid, or \fBNULL\fP otherwise.
-.UNINDENT
-.TP
-.B \fBstruct tcp_sock *bpf_skc_to_tcp_sock(void *\fP\fIsk\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Dynamically cast a \fIsk\fP pointer to a \fItcp_sock\fP pointer.
-.TP
-.B Return
-\fIsk\fP if casting is valid, or \fBNULL\fP otherwise.
-.UNINDENT
-.TP
-.B \fBstruct tcp_timewait_sock *bpf_skc_to_tcp_timewait_sock(void *\fP\fIsk\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Dynamically cast a \fIsk\fP pointer to a \fItcp_timewait_sock\fP pointer.
-.TP
-.B Return
-\fIsk\fP if casting is valid, or \fBNULL\fP otherwise.
-.UNINDENT
-.TP
-.B \fBstruct tcp_request_sock *bpf_skc_to_tcp_request_sock(void *\fP\fIsk\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Dynamically cast a \fIsk\fP pointer to a \fItcp_request_sock\fP pointer.
-.TP
-.B Return
-\fIsk\fP if casting is valid, or \fBNULL\fP otherwise.
-.UNINDENT
-.TP
-.B \fBstruct udp6_sock *bpf_skc_to_udp6_sock(void *\fP\fIsk\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Dynamically cast a \fIsk\fP pointer to a \fIudp6_sock\fP pointer.
-.TP
-.B Return
-\fIsk\fP if casting is valid, or \fBNULL\fP otherwise.
-.UNINDENT
-.TP
-.B \fBlong bpf_get_task_stack(struct task_struct *\fP\fItask\fP\fB, void *\fP\fIbuf\fP\fB, u32\fP \fIsize\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Return a user or a kernel stack in bpf program provided buffer.
-To achieve this, the helper needs \fItask\fP, which is a valid
-pointer to \fBstruct task_struct\fP\&. To store the stacktrace, the
-bpf program provides \fIbuf\fP with a nonnegative \fIsize\fP\&.
-.sp
-The last argument, \fIflags\fP, holds the number of stack frames to
-skip (from 0 to 255), masked with
-\fBBPF_F_SKIP_FIELD_MASK\fP\&. The next bits can be used to set
-the following flags:
-.INDENT 7.0
-.TP
-.B \fBBPF_F_USER_STACK\fP
-Collect a user space stack instead of a kernel stack.
-.TP
-.B \fBBPF_F_USER_BUILD_ID\fP
-Collect buildid+offset instead of ips for user stack,
-only valid if \fBBPF_F_USER_STACK\fP is also specified.
-.UNINDENT
-.sp
-\fBbpf_get_task_stack\fP() can collect up to
-\fBPERF_MAX_STACK_DEPTH\fP both kernel and user frames, subject
-to sufficient large buffer size. Note that
-this limit can be controlled with the \fBsysctl\fP program, and
-that it should be manually increased in order to profile long
-user stacks (such as stacks for Java programs). To do so, use:
-.INDENT 7.0
-.INDENT 3.5
-.sp
-.nf
-.ft C
-# sysctl kernel.perf_event_max_stack=<new value>
-.ft P
-.fi
-.UNINDENT
-.UNINDENT
-.TP
-.B Return
-The non\-negative copied \fIbuf\fP length equal to or less than
-\fIsize\fP on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_load_hdr_opt(struct bpf_sock_ops *\fP\fIskops\fP\fB, void *\fP\fIsearchby_res\fP\fB, u32\fP \fIlen\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Load header option. Support reading a particular TCP header
-option for bpf program (\fBBPF_PROG_TYPE_SOCK_OPS\fP).
-.sp
-If \fIflags\fP is 0, it will search the option from the
-\fIskops\fP\fB\->skb_data\fP\&. The comment in \fBstruct bpf_sock_ops\fP
-has details on what skb_data contains under different
-\fIskops\fP\fB\->op\fP\&.
-.sp
-The first byte of the \fIsearchby_res\fP specifies the
-kind that it wants to search.
-.sp
-If the searching kind is an experimental kind
-(i.e. 253 or 254 according to RFC6994). It also
-needs to specify the \(dqmagic\(dq which is either
-2 bytes or 4 bytes. It then also needs to
-specify the size of the magic by using
-the 2nd byte which is \(dqkind\-length\(dq of a TCP
-header option and the \(dqkind\-length\(dq also
-includes the first 2 bytes \(dqkind\(dq and \(dqkind\-length\(dq
-itself as a normal TCP header option also does.
-.sp
-For example, to search experimental kind 254 with
-2 byte magic 0xeB9F, the searchby_res should be
-[ 254, 4, 0xeB, 0x9F, 0, 0, .... 0 ].
-.sp
-To search for the standard window scale option (3),
-the \fIsearchby_res\fP should be [ 3, 0, 0, .... 0 ].
-Note, kind\-length must be 0 for regular option.
-.sp
-Searching for No\-Op (0) and End\-of\-Option\-List (1) are
-not supported.
-.sp
-\fIlen\fP must be at least 2 bytes which is the minimal size
-of a header option.
-.sp
-Supported flags:
-.INDENT 7.0
-.IP \(bu 2
-\fBBPF_LOAD_HDR_OPT_TCP_SYN\fP to search from the
-saved_syn packet or the just\-received syn packet.
-.UNINDENT
-.TP
-.B Return
-> 0 when found, the header option is copied to \fIsearchby_res\fP\&.
-The return value is the total length copied. On failure, a
-negative error code is returned:
-.sp
-\fB\-EINVAL\fP if a parameter is invalid.
-.sp
-\fB\-ENOMSG\fP if the option is not found.
-.sp
-\fB\-ENOENT\fP if no syn packet is available when
-\fBBPF_LOAD_HDR_OPT_TCP_SYN\fP is used.
-.sp
-\fB\-ENOSPC\fP if there is not enough space. Only \fIlen\fP number of
-bytes are copied.
-.sp
-\fB\-EFAULT\fP on failure to parse the header options in the
-packet.
-.sp
-\fB\-EPERM\fP if the helper cannot be used under the current
-\fIskops\fP\fB\->op\fP\&.
-.UNINDENT
-.TP
-.B \fBlong bpf_store_hdr_opt(struct bpf_sock_ops *\fP\fIskops\fP\fB, const void *\fP\fIfrom\fP\fB, u32\fP \fIlen\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Store header option. The data will be copied
-from buffer \fIfrom\fP with length \fIlen\fP to the TCP header.
-.sp
-The buffer \fIfrom\fP should have the whole option that
-includes the kind, kind\-length, and the actual
-option data. The \fIlen\fP must be at least kind\-length
-long. The kind\-length does not have to be 4 byte
-aligned. The kernel will take care of the padding
-and setting the 4 bytes aligned value to th\->doff.
-.sp
-This helper will check for duplicated option
-by searching the same option in the outgoing skb.
-.sp
-This helper can only be called during
-\fBBPF_SOCK_OPS_WRITE_HDR_OPT_CB\fP\&.
-.TP
-.B Return
-0 on success, or negative error in case of failure:
-.sp
-\fB\-EINVAL\fP If param is invalid.
-.sp
-\fB\-ENOSPC\fP if there is not enough space in the header.
-Nothing has been written
-.sp
-\fB\-EEXIST\fP if the option already exists.
-.sp
-\fB\-EFAULT\fP on failure to parse the existing header options.
-.sp
-\fB\-EPERM\fP if the helper cannot be used under the current
-\fIskops\fP\fB\->op\fP\&.
-.UNINDENT
-.TP
-.B \fBlong bpf_reserve_hdr_opt(struct bpf_sock_ops *\fP\fIskops\fP\fB, u32\fP \fIlen\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Reserve \fIlen\fP bytes for the bpf header option. The
-space will be used by \fBbpf_store_hdr_opt\fP() later in
-\fBBPF_SOCK_OPS_WRITE_HDR_OPT_CB\fP\&.
-.sp
-If \fBbpf_reserve_hdr_opt\fP() is called multiple times,
-the total number of bytes will be reserved.
-.sp
-This helper can only be called during
-\fBBPF_SOCK_OPS_HDR_OPT_LEN_CB\fP\&.
-.TP
-.B Return
-0 on success, or negative error in case of failure:
-.sp
-\fB\-EINVAL\fP if a parameter is invalid.
-.sp
-\fB\-ENOSPC\fP if there is not enough space in the header.
-.sp
-\fB\-EPERM\fP if the helper cannot be used under the current
-\fIskops\fP\fB\->op\fP\&.
-.UNINDENT
-.TP
-.B \fBvoid *bpf_inode_storage_get(struct bpf_map *\fP\fImap\fP\fB, void *\fP\fIinode\fP\fB, void *\fP\fIvalue\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get a bpf_local_storage from an \fIinode\fP\&.
-.sp
-Logically, it could be thought of as getting the value from
-a \fImap\fP with \fIinode\fP as the \fBkey\fP\&. From this
-perspective, the usage is not much different from
-\fBbpf_map_lookup_elem\fP(\fImap\fP, \fB&\fP\fIinode\fP) except this
-helper enforces the key must be an inode and the map must also
-be a \fBBPF_MAP_TYPE_INODE_STORAGE\fP\&.
-.sp
-Underneath, the value is stored locally at \fIinode\fP instead of
-the \fImap\fP\&. The \fImap\fP is used as the bpf\-local\-storage
-\(dqtype\(dq. The bpf\-local\-storage \(dqtype\(dq (i.e. the \fImap\fP) is
-searched against all bpf_local_storage residing at \fIinode\fP\&.
-.sp
-An optional \fIflags\fP (\fBBPF_LOCAL_STORAGE_GET_F_CREATE\fP) can be
-used such that a new bpf_local_storage will be
-created if one does not exist. \fIvalue\fP can be used
-together with \fBBPF_LOCAL_STORAGE_GET_F_CREATE\fP to specify
-the initial value of a bpf_local_storage. If \fIvalue\fP is
-\fBNULL\fP, the new bpf_local_storage will be zero initialized.
-.TP
-.B Return
-A bpf_local_storage pointer is returned on success.
-.sp
-\fBNULL\fP if not found or there was an error in adding
-a new bpf_local_storage.
-.UNINDENT
-.TP
-.B \fBint bpf_inode_storage_delete(struct bpf_map *\fP\fImap\fP\fB, void *\fP\fIinode\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Delete a bpf_local_storage from an \fIinode\fP\&.
-.TP
-.B Return
-0 on success.
-.sp
-\fB\-ENOENT\fP if the bpf_local_storage cannot be found.
-.UNINDENT
-.TP
-.B \fBlong bpf_d_path(struct path *\fP\fIpath\fP\fB, char *\fP\fIbuf\fP\fB, u32\fP \fIsz\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Return full path for given \fBstruct path\fP object, which
-needs to be the kernel BTF \fIpath\fP object. The path is
-returned in the provided buffer \fIbuf\fP of size \fIsz\fP and
-is zero terminated.
-.TP
-.B Return
-On success, the strictly positive length of the string,
-including the trailing NUL character. On error, a negative
-value.
-.UNINDENT
-.TP
-.B \fBlong bpf_copy_from_user(void *\fP\fIdst\fP\fB, u32\fP \fIsize\fP\fB, const void *\fP\fIuser_ptr\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Read \fIsize\fP bytes from user space address \fIuser_ptr\fP and store
-the data in \fIdst\fP\&. This is a wrapper of \fBcopy_from_user\fP().
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_snprintf_btf(char *\fP\fIstr\fP\fB, u32\fP \fIstr_size\fP\fB, struct btf_ptr *\fP\fIptr\fP\fB, u32\fP \fIbtf_ptr_size\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Use BTF to store a string representation of \fIptr\fP\->ptr in \fIstr\fP,
-using \fIptr\fP\->type_id. This value should specify the type
-that \fIptr\fP\->ptr points to. LLVM __builtin_btf_type_id(type, 1)
-can be used to look up vmlinux BTF type ids. Traversing the
-data structure using BTF, the type information and values are
-stored in the first \fIstr_size\fP \- 1 bytes of \fIstr\fP\&. Safe copy of
-the pointer data is carried out to avoid kernel crashes during
-operation. Smaller types can use string space on the stack;
-larger programs can use map data to store the string
-representation.
-.sp
-The string can be subsequently shared with userspace via
-bpf_perf_event_output() or ring buffer interfaces.
-bpf_trace_printk() is to be avoided as it places too small
-a limit on string size to be useful.
-.sp
-\fIflags\fP is a combination of
-.INDENT 7.0
-.TP
-.B \fBBTF_F_COMPACT\fP
-no formatting around type information
-.TP
-.B \fBBTF_F_NONAME\fP
-no struct/union member names/types
-.TP
-.B \fBBTF_F_PTR_RAW\fP
-show raw (unobfuscated) pointer values;
-equivalent to printk specifier %px.
-.TP
-.B \fBBTF_F_ZERO\fP
-show zero\-valued struct/union members; they
-are not displayed by default
-.UNINDENT
-.TP
-.B Return
-The number of bytes that were written (or would have been
-written if output had to be truncated due to string size),
-or a negative error in cases of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_seq_printf_btf(struct seq_file *\fP\fIm\fP\fB, struct btf_ptr *\fP\fIptr\fP\fB, u32\fP \fIptr_size\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Use BTF to write to seq_write a string representation of
-\fIptr\fP\->ptr, using \fIptr\fP\->type_id as per bpf_snprintf_btf().
-\fIflags\fP are identical to those used for bpf_snprintf_btf.
-.TP
-.B Return
-0 on success or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBu64 bpf_skb_cgroup_classid(struct sk_buff *\fP\fIskb\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-See \fBbpf_get_cgroup_classid\fP() for the main description.
-This helper differs from \fBbpf_get_cgroup_classid\fP() in that
-the cgroup v1 net_cls class is retrieved only from the \fIskb\fP\(aqs
-associated socket instead of the current process.
-.TP
-.B Return
-The id is returned or 0 in case the id could not be retrieved.
-.UNINDENT
-.TP
-.B \fBlong bpf_redirect_neigh(u32\fP \fIifindex\fP\fB, struct bpf_redir_neigh *\fP\fIparams\fP\fB, int\fP \fIplen\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Redirect the packet to another net device of index \fIifindex\fP
-and fill in L2 addresses from neighboring subsystem. This helper
-is somewhat similar to \fBbpf_redirect\fP(), except that it
-populates L2 addresses as well, meaning, internally, the helper
-relies on the neighbor lookup for the L2 address of the nexthop.
-.sp
-The helper will perform a FIB lookup based on the skb\(aqs
-networking header to get the address of the next hop, unless
-this is supplied by the caller in the \fIparams\fP argument. The
-\fIplen\fP argument indicates the len of \fIparams\fP and should be set
-to 0 if \fIparams\fP is NULL.
-.sp
-The \fIflags\fP argument is reserved and must be 0. The helper is
-currently only supported for tc BPF program types, and enabled
-for IPv4 and IPv6 protocols.
-.TP
-.B Return
-The helper returns \fBTC_ACT_REDIRECT\fP on success or
-\fBTC_ACT_SHOT\fP on error.
-.UNINDENT
-.TP
-.B \fBvoid *bpf_per_cpu_ptr(const void *\fP\fIpercpu_ptr\fP\fB, u32\fP \fIcpu\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Take a pointer to a percpu ksym, \fIpercpu_ptr\fP, and return a
-pointer to the percpu kernel variable on \fIcpu\fP\&. A ksym is an
-extern variable decorated with \(aq__ksym\(aq. For ksym, there is a
-global var (either static or global) defined of the same name
-in the kernel. The ksym is percpu if the global var is percpu.
-The returned pointer points to the global percpu var on \fIcpu\fP\&.
-.sp
-bpf_per_cpu_ptr() has the same semantic as per_cpu_ptr() in the
-kernel, except that bpf_per_cpu_ptr() may return NULL. This
-happens if \fIcpu\fP is larger than nr_cpu_ids. The caller of
-bpf_per_cpu_ptr() must check the returned value.
-.TP
-.B Return
-A pointer pointing to the kernel percpu variable on \fIcpu\fP, or
-NULL, if \fIcpu\fP is invalid.
-.UNINDENT
-.TP
-.B \fBvoid *bpf_this_cpu_ptr(const void *\fP\fIpercpu_ptr\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Take a pointer to a percpu ksym, \fIpercpu_ptr\fP, and return a
-pointer to the percpu kernel variable on this cpu. See the
-description of \(aqksym\(aq in \fBbpf_per_cpu_ptr\fP().
-.sp
-bpf_this_cpu_ptr() has the same semantic as this_cpu_ptr() in
-the kernel. Different from \fBbpf_per_cpu_ptr\fP(), it would
-never return NULL.
-.TP
-.B Return
-A pointer pointing to the kernel percpu variable on this cpu.
-.UNINDENT
-.TP
-.B \fBlong bpf_redirect_peer(u32\fP \fIifindex\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Redirect the packet to another net device of index \fIifindex\fP\&.
-This helper is somewhat similar to \fBbpf_redirect\fP(), except
-that the redirection happens to the \fIifindex\fP\(aq peer device and
-the netns switch takes place from ingress to ingress without
-going through the CPU\(aqs backlog queue.
-.sp
-The \fIflags\fP argument is reserved and must be 0. The helper is
-currently only supported for tc BPF program types at the ingress
-hook and for veth device types. The peer device must reside in a
-different network namespace.
-.TP
-.B Return
-The helper returns \fBTC_ACT_REDIRECT\fP on success or
-\fBTC_ACT_SHOT\fP on error.
-.UNINDENT
-.TP
-.B \fBvoid *bpf_task_storage_get(struct bpf_map *\fP\fImap\fP\fB, struct task_struct *\fP\fItask\fP\fB, void *\fP\fIvalue\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get a bpf_local_storage from the \fItask\fP\&.
-.sp
-Logically, it could be thought of as getting the value from
-a \fImap\fP with \fItask\fP as the \fBkey\fP\&. From this
-perspective, the usage is not much different from
-\fBbpf_map_lookup_elem\fP(\fImap\fP, \fB&\fP\fItask\fP) except this
-helper enforces the key must be a task_struct and the map must also
-be a \fBBPF_MAP_TYPE_TASK_STORAGE\fP\&.
-.sp
-Underneath, the value is stored locally at \fItask\fP instead of
-the \fImap\fP\&. The \fImap\fP is used as the bpf\-local\-storage
-\(dqtype\(dq. The bpf\-local\-storage \(dqtype\(dq (i.e. the \fImap\fP) is
-searched against all bpf_local_storage residing at \fItask\fP\&.
-.sp
-An optional \fIflags\fP (\fBBPF_LOCAL_STORAGE_GET_F_CREATE\fP) can be
-used such that a new bpf_local_storage will be
-created if one does not exist. \fIvalue\fP can be used
-together with \fBBPF_LOCAL_STORAGE_GET_F_CREATE\fP to specify
-the initial value of a bpf_local_storage. If \fIvalue\fP is
-\fBNULL\fP, the new bpf_local_storage will be zero initialized.
-.TP
-.B Return
-A bpf_local_storage pointer is returned on success.
-.sp
-\fBNULL\fP if not found or there was an error in adding
-a new bpf_local_storage.
-.UNINDENT
-.TP
-.B \fBlong bpf_task_storage_delete(struct bpf_map *\fP\fImap\fP\fB, struct task_struct *\fP\fItask\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Delete a bpf_local_storage from a \fItask\fP\&.
-.TP
-.B Return
-0 on success.
-.sp
-\fB\-ENOENT\fP if the bpf_local_storage cannot be found.
-.UNINDENT
-.TP
-.B \fBstruct task_struct *bpf_get_current_task_btf(void)\fP
-.INDENT 7.0
-.TP
-.B Description
-Return a BTF pointer to the \(dqcurrent\(dq task.
-This pointer can also be used in helpers that accept an
-\fIARG_PTR_TO_BTF_ID\fP of type \fItask_struct\fP\&.
-.TP
-.B Return
-Pointer to the current task.
-.UNINDENT
-.TP
-.B \fBlong bpf_bprm_opts_set(struct linux_binprm *\fP\fIbprm\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Set or clear certain options on \fIbprm\fP:
-.sp
-\fBBPF_F_BPRM_SECUREEXEC\fP Set the secureexec bit
-which sets the \fBAT_SECURE\fP auxv for glibc. The bit
-is cleared if the flag is not specified.
-.TP
-.B Return
-\fB\-EINVAL\fP if invalid \fIflags\fP are passed, zero otherwise.
-.UNINDENT
-.TP
-.B \fBu64 bpf_ktime_get_coarse_ns(void)\fP
-.INDENT 7.0
-.TP
-.B Description
-Return a coarse\-grained version of the time elapsed since
-system boot, in nanoseconds. Does not include time the system
-was suspended.
-.sp
-See: \fBclock_gettime\fP(\fBCLOCK_MONOTONIC_COARSE\fP)
-.TP
-.B Return
-Current \fIktime\fP\&.
-.UNINDENT
-.TP
-.B \fBlong bpf_ima_inode_hash(struct inode *\fP\fIinode\fP\fB, void *\fP\fIdst\fP\fB, u32\fP \fIsize\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Returns the stored IMA hash of the \fIinode\fP (if it\(aqs available).
-If the hash is larger than \fIsize\fP, then only \fIsize\fP
-bytes will be copied to \fIdst\fP
-.TP
-.B Return
-The \fBhash_algo\fP is returned on success,
-\fB\-EOPNOTSUP\fP if IMA is disabled or \fB\-EINVAL\fP if
-invalid arguments are passed.
-.UNINDENT
-.TP
-.B \fBstruct socket *bpf_sock_from_file(struct file *\fP\fIfile\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-If the given file represents a socket, returns the associated
-socket.
-.TP
-.B Return
-A pointer to a struct socket on success or NULL if the file is
-not a socket.
-.UNINDENT
-.TP
-.B \fBlong bpf_check_mtu(void *\fP\fIctx\fP\fB, u32\fP \fIifindex\fP\fB, u32 *\fP\fImtu_len\fP\fB, s32\fP \fIlen_diff\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Check packet size against exceeding MTU of net device (based
-on \fIifindex\fP). This helper will likely be used in combination
-with helpers that adjust/change the packet size.
-.sp
-The argument \fIlen_diff\fP can be used for querying with a planned
-size change. This allows to check MTU prior to changing packet
-ctx. Providing a \fIlen_diff\fP adjustment that is larger than the
-actual packet size (resulting in negative packet size) will in
-principle not exceed the MTU, which is why it is not considered
-a failure. Other BPF helpers are needed for performing the
-planned size change; therefore the responsibility for catching
-a negative packet size belongs in those helpers.
-.sp
-Specifying \fIifindex\fP zero means the MTU check is performed
-against the current net device. This is practical if this isn\(aqt
-used prior to redirect.
-.sp
-On input \fImtu_len\fP must be a valid pointer, else verifier will
-reject BPF program. If the value \fImtu_len\fP is initialized to
-zero then the ctx packet size is use. When value \fImtu_len\fP is
-provided as input this specify the L3 length that the MTU check
-is done against. Remember XDP and TC length operate at L2, but
-this value is L3 as this correlate to MTU and IP\-header tot_len
-values which are L3 (similar behavior as bpf_fib_lookup).
-.sp
-The Linux kernel route table can configure MTUs on a more
-specific per route level, which is not provided by this helper.
-For route level MTU checks use the \fBbpf_fib_lookup\fP()
-helper.
-.sp
-\fIctx\fP is either \fBstruct xdp_md\fP for XDP programs or
-\fBstruct sk_buff\fP for tc cls_act programs.
-.sp
-The \fIflags\fP argument can be a combination of one or more of the
-following values:
-.INDENT 7.0
-.TP
-.B \fBBPF_MTU_CHK_SEGS\fP
-This flag will only works for \fIctx\fP \fBstruct sk_buff\fP\&.
-If packet context contains extra packet segment buffers
-(often knows as GSO skb), then MTU check is harder to
-check at this point, because in transmit path it is
-possible for the skb packet to get re\-segmented
-(depending on net device features). This could still be
-a MTU violation, so this flag enables performing MTU
-check against segments, with a different violation
-return code to tell it apart. Check cannot use len_diff.
-.UNINDENT
-.sp
-On return \fImtu_len\fP pointer contains the MTU value of the net
-device. Remember the net device configured MTU is the L3 size,
-which is returned here and XDP and TC length operate at L2.
-Helper take this into account for you, but remember when using
-MTU value in your BPF\-code.
-.TP
-.B Return
-.INDENT 7.0
-.IP \(bu 2
-0 on success, and populate MTU value in \fImtu_len\fP pointer.
-.IP \(bu 2
-< 0 if any input argument is invalid (\fImtu_len\fP not updated)
-.UNINDENT
-.sp
-MTU violations return positive values, but also populate MTU
-value in \fImtu_len\fP pointer, as this can be needed for
-implementing PMTU handing:
-.INDENT 7.0
-.IP \(bu 2
-\fBBPF_MTU_CHK_RET_FRAG_NEEDED\fP
-.IP \(bu 2
-\fBBPF_MTU_CHK_RET_SEGS_TOOBIG\fP
-.UNINDENT
-.UNINDENT
-.TP
-.B \fBlong bpf_for_each_map_elem(struct bpf_map *\fP\fImap\fP\fB, void *\fP\fIcallback_fn\fP\fB, void *\fP\fIcallback_ctx\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-For each element in \fBmap\fP, call \fBcallback_fn\fP function with
-\fBmap\fP, \fBcallback_ctx\fP and other map\-specific parameters.
-The \fBcallback_fn\fP should be a static function and
-the \fBcallback_ctx\fP should be a pointer to the stack.
-The \fBflags\fP is used to control certain aspects of the helper.
-Currently, the \fBflags\fP must be 0.
-.sp
-The following are a list of supported map types and their
-respective expected callback signatures:
-.sp
-BPF_MAP_TYPE_HASH, BPF_MAP_TYPE_PERCPU_HASH,
-BPF_MAP_TYPE_LRU_HASH, BPF_MAP_TYPE_LRU_PERCPU_HASH,
-BPF_MAP_TYPE_ARRAY, BPF_MAP_TYPE_PERCPU_ARRAY
-.sp
-long (*callback_fn)(struct bpf_map *map, const void *key, void *value, void *ctx);
-.sp
-For per_cpu maps, the map_value is the value on the cpu where the
-bpf_prog is running.
-.sp
-If \fBcallback_fn\fP return 0, the helper will continue to the next
-element. If return value is 1, the helper will skip the rest of
-elements and return. Other return values are not used now.
-.TP
-.B Return
-The number of traversed map elements for success, \fB\-EINVAL\fP for
-invalid \fBflags\fP\&.
-.UNINDENT
-.TP
-.B \fBlong bpf_snprintf(char *\fP\fIstr\fP\fB, u32\fP \fIstr_size\fP\fB, const char *\fP\fIfmt\fP\fB, u64 *\fP\fIdata\fP\fB, u32\fP \fIdata_len\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Outputs a string into the \fBstr\fP buffer of size \fBstr_size\fP
-based on a format string stored in a read\-only map pointed by
-\fBfmt\fP\&.
-.sp
-Each format specifier in \fBfmt\fP corresponds to one u64 element
-in the \fBdata\fP array. For strings and pointers where pointees
-are accessed, only the pointer values are stored in the \fIdata\fP
-array. The \fIdata_len\fP is the size of \fIdata\fP in bytes \- must be
-a multiple of 8.
-.sp
-Formats \fB%s\fP and \fB%p{i,I}{4,6}\fP require to read kernel
-memory. Reading kernel memory may fail due to either invalid
-address or valid address but requiring a major memory fault. If
-reading kernel memory fails, the string for \fB%s\fP will be an
-empty string, and the ip address for \fB%p{i,I}{4,6}\fP will be 0.
-Not returning error to bpf program is consistent with what
-\fBbpf_trace_printk\fP() does for now.
-.TP
-.B Return
-The strictly positive length of the formatted string, including
-the trailing zero character. If the return value is greater than
-\fBstr_size\fP, \fBstr\fP contains a truncated string, guaranteed to
-be zero\-terminated except when \fBstr_size\fP is 0.
-.sp
-Or \fB\-EBUSY\fP if the per\-CPU memory copy buffer is busy.
-.UNINDENT
-.TP
-.B \fBlong bpf_sys_bpf(u32\fP \fIcmd\fP\fB, void *\fP\fIattr\fP\fB, u32\fP \fIattr_size\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Execute bpf syscall with given arguments.
-.TP
-.B Return
-A syscall result.
-.UNINDENT
-.TP
-.B \fBlong bpf_btf_find_by_name_kind(char *\fP\fIname\fP\fB, int\fP \fIname_sz\fP\fB, u32\fP \fIkind\fP\fB, int\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Find BTF type with given name and kind in vmlinux BTF or in module\(aqs BTFs.
-.TP
-.B Return
-Returns btf_id and btf_obj_fd in lower and upper 32 bits.
-.UNINDENT
-.TP
-.B \fBlong bpf_sys_close(u32\fP \fIfd\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Execute close syscall for given FD.
-.TP
-.B Return
-A syscall result.
-.UNINDENT
-.TP
-.B \fBlong bpf_timer_init(struct bpf_timer *\fP\fItimer\fP\fB, struct bpf_map *\fP\fImap\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Initialize the timer.
-First 4 bits of \fIflags\fP specify clockid.
-Only CLOCK_MONOTONIC, CLOCK_REALTIME, CLOCK_BOOTTIME are allowed.
-All other bits of \fIflags\fP are reserved.
-The verifier will reject the program if \fItimer\fP is not from
-the same \fImap\fP\&.
-.TP
-.B Return
-0 on success.
-\fB\-EBUSY\fP if \fItimer\fP is already initialized.
-\fB\-EINVAL\fP if invalid \fIflags\fP are passed.
-\fB\-EPERM\fP if \fItimer\fP is in a map that doesn\(aqt have any user references.
-The user space should either hold a file descriptor to a map with timers
-or pin such map in bpffs. When map is unpinned or file descriptor is
-closed all timers in the map will be cancelled and freed.
-.UNINDENT
-.TP
-.B \fBlong bpf_timer_set_callback(struct bpf_timer *\fP\fItimer\fP\fB, void *\fP\fIcallback_fn\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Configure the timer to call \fIcallback_fn\fP static function.
-.TP
-.B Return
-0 on success.
-\fB\-EINVAL\fP if \fItimer\fP was not initialized with bpf_timer_init() earlier.
-\fB\-EPERM\fP if \fItimer\fP is in a map that doesn\(aqt have any user references.
-The user space should either hold a file descriptor to a map with timers
-or pin such map in bpffs. When map is unpinned or file descriptor is
-closed all timers in the map will be cancelled and freed.
-.UNINDENT
-.TP
-.B \fBlong bpf_timer_start(struct bpf_timer *\fP\fItimer\fP\fB, u64\fP \fInsecs\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Set timer expiration N nanoseconds from the current time. The
-configured callback will be invoked in soft irq context on some cpu
-and will not repeat unless another bpf_timer_start() is made.
-In such case the next invocation can migrate to a different cpu.
-Since struct bpf_timer is a field inside map element the map
-owns the timer. The bpf_timer_set_callback() will increment refcnt
-of BPF program to make sure that callback_fn code stays valid.
-When user space reference to a map reaches zero all timers
-in a map are cancelled and corresponding program\(aqs refcnts are
-decremented. This is done to make sure that Ctrl\-C of a user
-process doesn\(aqt leave any timers running. If map is pinned in
-bpffs the callback_fn can re\-arm itself indefinitely.
-bpf_map_update/delete_elem() helpers and user space sys_bpf commands
-cancel and free the timer in the given map element.
-The map can contain timers that invoke callback_fn\-s from different
-programs. The same callback_fn can serve different timers from
-different maps if key/value layout matches across maps.
-Every bpf_timer_set_callback() can have different callback_fn.
-.TP
-.B Return
-0 on success.
-\fB\-EINVAL\fP if \fItimer\fP was not initialized with bpf_timer_init() earlier
-or invalid \fIflags\fP are passed.
-.UNINDENT
-.TP
-.B \fBlong bpf_timer_cancel(struct bpf_timer *\fP\fItimer\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Cancel the timer and wait for callback_fn to finish if it was running.
-.TP
-.B Return
-0 if the timer was not active.
-1 if the timer was active.
-\fB\-EINVAL\fP if \fItimer\fP was not initialized with bpf_timer_init() earlier.
-\fB\-EDEADLK\fP if callback_fn tried to call bpf_timer_cancel() on its
-own timer which would have led to a deadlock otherwise.
-.UNINDENT
-.TP
-.B \fBu64 bpf_get_func_ip(void *\fP\fIctx\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get address of the traced function (for tracing and kprobe programs).
-.TP
-.B Return
-Address of the traced function.
-0 for kprobes placed within the function (not at the entry).
-.UNINDENT
-.TP
-.B \fBu64 bpf_get_attach_cookie(void *\fP\fIctx\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get bpf_cookie value provided (optionally) during the program
-attachment. It might be different for each individual
-attachment, even if BPF program itself is the same.
-Expects BPF program context \fIctx\fP as a first argument.
-.INDENT 7.0
-.TP
-.B Supported for the following program types:
-.INDENT 7.0
-.IP \(bu 2
-kprobe/uprobe;
-.IP \(bu 2
-tracepoint;
-.IP \(bu 2
-perf_event.
-.UNINDENT
-.UNINDENT
-.TP
-.B Return
-Value specified by user at BPF link creation/attachment time
-or 0, if it was not specified.
-.UNINDENT
-.TP
-.B \fBlong bpf_task_pt_regs(struct task_struct *\fP\fItask\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get the struct pt_regs associated with \fBtask\fP\&.
-.TP
-.B Return
-A pointer to struct pt_regs.
-.UNINDENT
-.TP
-.B \fBlong bpf_get_branch_snapshot(void *\fP\fIentries\fP\fB, u32\fP \fIsize\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get branch trace from hardware engines like Intel LBR. The
-hardware engine is stopped shortly after the helper is
-called. Therefore, the user need to filter branch entries
-based on the actual use case. To capture branch trace
-before the trigger point of the BPF program, the helper
-should be called at the beginning of the BPF program.
-.sp
-The data is stored as struct perf_branch_entry into output
-buffer \fIentries\fP\&. \fIsize\fP is the size of \fIentries\fP in bytes.
-\fIflags\fP is reserved for now and must be zero.
-.TP
-.B Return
-On success, number of bytes written to \fIbuf\fP\&. On error, a
-negative value.
-.sp
-\fB\-EINVAL\fP if \fIflags\fP is not zero.
-.sp
-\fB\-ENOENT\fP if architecture does not support branch records.
-.UNINDENT
-.TP
-.B \fBlong bpf_trace_vprintk(const char *\fP\fIfmt\fP\fB, u32\fP \fIfmt_size\fP\fB, const void *\fP\fIdata\fP\fB, u32\fP \fIdata_len\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Behaves like \fBbpf_trace_printk\fP() helper, but takes an array of u64
-to format and can handle more format args as a result.
-.sp
-Arguments are to be used as in \fBbpf_seq_printf\fP() helper.
-.TP
-.B Return
-The number of bytes written to the buffer, or a negative error
-in case of failure.
-.UNINDENT
-.TP
-.B \fBstruct unix_sock *bpf_skc_to_unix_sock(void *\fP\fIsk\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Dynamically cast a \fIsk\fP pointer to a \fIunix_sock\fP pointer.
-.TP
-.B Return
-\fIsk\fP if casting is valid, or \fBNULL\fP otherwise.
-.UNINDENT
-.TP
-.B \fBlong bpf_kallsyms_lookup_name(const char *\fP\fIname\fP\fB, int\fP \fIname_sz\fP\fB, int\fP \fIflags\fP\fB, u64 *\fP\fIres\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get the address of a kernel symbol, returned in \fIres\fP\&. \fIres\fP is
-set to 0 if the symbol is not found.
-.TP
-.B Return
-On success, zero. On error, a negative value.
-.sp
-\fB\-EINVAL\fP if \fIflags\fP is not zero.
-.sp
-\fB\-EINVAL\fP if string \fIname\fP is not the same size as \fIname_sz\fP\&.
-.sp
-\fB\-ENOENT\fP if symbol is not found.
-.sp
-\fB\-EPERM\fP if caller does not have permission to obtain kernel address.
-.UNINDENT
-.TP
-.B \fBlong bpf_find_vma(struct task_struct *\fP\fItask\fP\fB, u64\fP \fIaddr\fP\fB, void *\fP\fIcallback_fn\fP\fB, void *\fP\fIcallback_ctx\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Find vma of \fItask\fP that contains \fIaddr\fP, call \fIcallback_fn\fP
-function with \fItask\fP, \fIvma\fP, and \fIcallback_ctx\fP\&.
-The \fIcallback_fn\fP should be a static function and
-the \fIcallback_ctx\fP should be a pointer to the stack.
-The \fIflags\fP is used to control certain aspects of the helper.
-Currently, the \fIflags\fP must be 0.
-.sp
-The expected callback signature is
-.sp
-long (*callback_fn)(struct task_struct *task, struct vm_area_struct *vma, void *callback_ctx);
-.TP
-.B Return
-0 on success.
-\fB\-ENOENT\fP if \fItask\->mm\fP is NULL, or no vma contains \fIaddr\fP\&.
-\fB\-EBUSY\fP if failed to try lock mmap_lock.
-\fB\-EINVAL\fP for invalid \fBflags\fP\&.
-.UNINDENT
-.TP
-.B \fBlong bpf_loop(u32\fP \fInr_loops\fP\fB, void *\fP\fIcallback_fn\fP\fB, void *\fP\fIcallback_ctx\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-For \fBnr_loops\fP, call \fBcallback_fn\fP function
-with \fBcallback_ctx\fP as the context parameter.
-The \fBcallback_fn\fP should be a static function and
-the \fBcallback_ctx\fP should be a pointer to the stack.
-The \fBflags\fP is used to control certain aspects of the helper.
-Currently, the \fBflags\fP must be 0. Currently, nr_loops is
-limited to 1 << 23 (~8 million) loops.
-.sp
-long (*callback_fn)(u32 index, void *ctx);
-.sp
-where \fBindex\fP is the current index in the loop. The index
-is zero\-indexed.
-.sp
-If \fBcallback_fn\fP returns 0, the helper will continue to the next
-loop. If return value is 1, the helper will skip the rest of
-the loops and return. Other return values are not used now,
-and will be rejected by the verifier.
-.TP
-.B Return
-The number of loops performed, \fB\-EINVAL\fP for invalid \fBflags\fP,
-\fB\-E2BIG\fP if \fBnr_loops\fP exceeds the maximum number of loops.
-.UNINDENT
-.TP
-.B \fBlong bpf_strncmp(const char *\fP\fIs1\fP\fB, u32\fP \fIs1_sz\fP\fB, const char *\fP\fIs2\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Do strncmp() between \fBs1\fP and \fBs2\fP\&. \fBs1\fP doesn\(aqt need
-to be null\-terminated and \fBs1_sz\fP is the maximum storage
-size of \fBs1\fP\&. \fBs2\fP must be a read\-only string.
-.TP
-.B Return
-An integer less than, equal to, or greater than zero
-if the first \fBs1_sz\fP bytes of \fBs1\fP is found to be
-less than, to match, or be greater than \fBs2\fP\&.
-.UNINDENT
-.TP
-.B \fBlong bpf_get_func_arg(void *\fP\fIctx\fP\fB, u32\fP \fIn\fP\fB, u64 *\fP\fIvalue\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get \fBn\fP\-th argument register (zero based) of the traced function (for tracing programs)
-returned in \fBvalue\fP\&.
-.TP
-.B Return
-0 on success.
-\fB\-EINVAL\fP if n >= argument register count of traced function.
-.UNINDENT
-.TP
-.B \fBlong bpf_get_func_ret(void *\fP\fIctx\fP\fB, u64 *\fP\fIvalue\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get return value of the traced function (for tracing programs)
-in \fBvalue\fP\&.
-.TP
-.B Return
-0 on success.
-\fB\-EOPNOTSUPP\fP for tracing programs other than BPF_TRACE_FEXIT or BPF_MODIFY_RETURN.
-.UNINDENT
-.TP
-.B \fBlong bpf_get_func_arg_cnt(void *\fP\fIctx\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get number of registers of the traced function (for tracing programs) where
-function arguments are stored in these registers.
-.TP
-.B Return
-The number of argument registers of the traced function.
-.UNINDENT
-.TP
-.B \fBint bpf_get_retval(void)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get the BPF program\(aqs return value that will be returned to the upper layers.
-.sp
-This helper is currently supported by cgroup programs and only by the hooks
-where BPF program\(aqs return value is returned to the userspace via errno.
-.TP
-.B Return
-The BPF program\(aqs return value.
-.UNINDENT
-.TP
-.B \fBint bpf_set_retval(int\fP \fIretval\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Set the BPF program\(aqs return value that will be returned to the upper layers.
-.sp
-This helper is currently supported by cgroup programs and only by the hooks
-where BPF program\(aqs return value is returned to the userspace via errno.
-.sp
-Note that there is the following corner case where the program exports an error
-via bpf_set_retval but signals success via \(aqreturn 1\(aq:
-.INDENT 7.0
-.INDENT 3.5
-bpf_set_retval(\-EPERM);
-return 1;
-.UNINDENT
-.UNINDENT
-.sp
-In this case, the BPF program\(aqs return value will use helper\(aqs \-EPERM. This
-still holds true for cgroup/bind{4,6} which supports extra \(aqreturn 3\(aq success case.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBu64 bpf_xdp_get_buff_len(struct xdp_buff *\fP\fIxdp_md\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get the total size of a given xdp buff (linear and paged area)
-.TP
-.B Return
-The total size of a given xdp buffer.
-.UNINDENT
-.TP
-.B \fBlong bpf_xdp_load_bytes(struct xdp_buff *\fP\fIxdp_md\fP\fB, u32\fP \fIoffset\fP\fB, void *\fP\fIbuf\fP\fB, u32\fP \fIlen\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-This helper is provided as an easy way to load data from a
-xdp buffer. It can be used to load \fIlen\fP bytes from \fIoffset\fP from
-the frame associated to \fIxdp_md\fP, into the buffer pointed by
-\fIbuf\fP\&.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_xdp_store_bytes(struct xdp_buff *\fP\fIxdp_md\fP\fB, u32\fP \fIoffset\fP\fB, void *\fP\fIbuf\fP\fB, u32\fP \fIlen\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Store \fIlen\fP bytes from buffer \fIbuf\fP into the frame
-associated to \fIxdp_md\fP, at \fIoffset\fP\&.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBlong bpf_copy_from_user_task(void *\fP\fIdst\fP\fB, u32\fP \fIsize\fP\fB, const void *\fP\fIuser_ptr\fP\fB, struct task_struct *\fP\fItsk\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Read \fIsize\fP bytes from user space address \fIuser_ptr\fP in \fItsk\fP\(aqs
-address space, and stores the data in \fIdst\fP\&. \fIflags\fP is not
-used yet and is provided for future extensibility. This helper
-can only be used by sleepable programs.
-.TP
-.B Return
-0 on success, or a negative error in case of failure. On error
-\fIdst\fP buffer is zeroed out.
-.UNINDENT
-.TP
-.B \fBlong bpf_skb_set_tstamp(struct sk_buff *\fP\fIskb\fP\fB, u64\fP \fItstamp\fP\fB, u32\fP \fItstamp_type\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Change the __sk_buff\->tstamp_type to \fItstamp_type\fP
-and set \fItstamp\fP to the __sk_buff\->tstamp together.
-.sp
-If there is no need to change the __sk_buff\->tstamp_type,
-the tstamp value can be directly written to __sk_buff\->tstamp
-instead.
-.sp
-BPF_SKB_TSTAMP_DELIVERY_MONO is the only tstamp that
-will be kept during bpf_redirect_*(). A non zero
-\fItstamp\fP must be used with the BPF_SKB_TSTAMP_DELIVERY_MONO
-\fItstamp_type\fP\&.
-.sp
-A BPF_SKB_TSTAMP_UNSPEC \fItstamp_type\fP can only be used
-with a zero \fItstamp\fP\&.
-.sp
-Only IPv4 and IPv6 skb\->protocol are supported.
-.sp
-This function is most useful when it needs to set a
-mono delivery time to __sk_buff\->tstamp and then
-bpf_redirect_*() to the egress of an iface. For example,
-changing the (rcv) timestamp in __sk_buff\->tstamp at
-ingress to a mono delivery time and then bpf_redirect_*()
-to \fI\%sch_fq@phy\-dev\fP\&.
-.TP
-.B Return
-0 on success.
-\fB\-EINVAL\fP for invalid input
-\fB\-EOPNOTSUPP\fP for unsupported protocol
-.UNINDENT
-.TP
-.B \fBlong bpf_ima_file_hash(struct file *\fP\fIfile\fP\fB, void *\fP\fIdst\fP\fB, u32\fP \fIsize\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Returns a calculated IMA hash of the \fIfile\fP\&.
-If the hash is larger than \fIsize\fP, then only \fIsize\fP
-bytes will be copied to \fIdst\fP
-.TP
-.B Return
-The \fBhash_algo\fP is returned on success,
-\fB\-EOPNOTSUP\fP if the hash calculation failed or \fB\-EINVAL\fP if
-invalid arguments are passed.
-.UNINDENT
-.TP
-.B \fBvoid *bpf_kptr_xchg(void *\fP\fImap_value\fP\fB, void *\fP\fIptr\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Exchange kptr at pointer \fImap_value\fP with \fIptr\fP, and return the
-old value. \fIptr\fP can be NULL, otherwise it must be a referenced
-pointer which will be released when this helper is called.
-.TP
-.B Return
-The old value of kptr (which can be NULL). The returned pointer
-if not NULL, is a reference which must be released using its
-corresponding release function, or moved into a BPF map before
-program exit.
-.UNINDENT
-.TP
-.B \fBvoid *bpf_map_lookup_percpu_elem(struct bpf_map *\fP\fImap\fP\fB, const void *\fP\fIkey\fP\fB, u32\fP \fIcpu\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Perform a lookup in \fIpercpu map\fP for an entry associated to
-\fIkey\fP on \fIcpu\fP\&.
-.TP
-.B Return
-Map value associated to \fIkey\fP on \fIcpu\fP, or \fBNULL\fP if no entry
-was found or \fIcpu\fP is invalid.
-.UNINDENT
-.TP
-.B \fBstruct mptcp_sock *bpf_skc_to_mptcp_sock(void *\fP\fIsk\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Dynamically cast a \fIsk\fP pointer to a \fImptcp_sock\fP pointer.
-.TP
-.B Return
-\fIsk\fP if casting is valid, or \fBNULL\fP otherwise.
-.UNINDENT
-.TP
-.B \fBlong bpf_dynptr_from_mem(void *\fP\fIdata\fP\fB, u32\fP \fIsize\fP\fB, u64\fP \fIflags\fP\fB, struct bpf_dynptr *\fP\fIptr\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get a dynptr to local memory \fIdata\fP\&.
-.sp
-\fIdata\fP must be a ptr to a map value.
-The maximum \fIsize\fP supported is DYNPTR_MAX_SIZE.
-\fIflags\fP is currently unused.
-.TP
-.B Return
-0 on success, \-E2BIG if the size exceeds DYNPTR_MAX_SIZE,
-\-EINVAL if flags is not 0.
-.UNINDENT
-.TP
-.B \fBlong bpf_ringbuf_reserve_dynptr(void *\fP\fIringbuf\fP\fB, u32\fP \fIsize\fP\fB, u64\fP \fIflags\fP\fB, struct bpf_dynptr *\fP\fIptr\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Reserve \fIsize\fP bytes of payload in a ring buffer \fIringbuf\fP
-through the dynptr interface. \fIflags\fP must be 0.
-.sp
-Please note that a corresponding bpf_ringbuf_submit_dynptr or
-bpf_ringbuf_discard_dynptr must be called on \fIptr\fP, even if the
-reservation fails. This is enforced by the verifier.
-.TP
-.B Return
-0 on success, or a negative error in case of failure.
-.UNINDENT
-.TP
-.B \fBvoid bpf_ringbuf_submit_dynptr(struct bpf_dynptr *\fP\fIptr\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Submit reserved ring buffer sample, pointed to by \fIdata\fP,
-through the dynptr interface. This is a no\-op if the dynptr is
-invalid/null.
-.sp
-For more information on \fIflags\fP, please see
-\(aqbpf_ringbuf_submit\(aq.
-.TP
-.B Return
-Nothing. Always succeeds.
-.UNINDENT
-.TP
-.B \fBvoid bpf_ringbuf_discard_dynptr(struct bpf_dynptr *\fP\fIptr\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Discard reserved ring buffer sample through the dynptr
-interface. This is a no\-op if the dynptr is invalid/null.
-.sp
-For more information on \fIflags\fP, please see
-\(aqbpf_ringbuf_discard\(aq.
-.TP
-.B Return
-Nothing. Always succeeds.
-.UNINDENT
-.TP
-.B \fBlong bpf_dynptr_read(void *\fP\fIdst\fP\fB, u32\fP \fIlen\fP\fB, const struct bpf_dynptr *\fP\fIsrc\fP\fB, u32\fP \fIoffset\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Read \fIlen\fP bytes from \fIsrc\fP into \fIdst\fP, starting from \fIoffset\fP
-into \fIsrc\fP\&.
-\fIflags\fP is currently unused.
-.TP
-.B Return
-0 on success, \-E2BIG if \fIoffset\fP + \fIlen\fP exceeds the length
-of \fIsrc\fP\(aqs data, \-EINVAL if \fIsrc\fP is an invalid dynptr or if
-\fIflags\fP is not 0.
-.UNINDENT
-.TP
-.B \fBlong bpf_dynptr_write(const struct bpf_dynptr *\fP\fIdst\fP\fB, u32\fP \fIoffset\fP\fB, void *\fP\fIsrc\fP\fB, u32\fP \fIlen\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Write \fIlen\fP bytes from \fIsrc\fP into \fIdst\fP, starting from \fIoffset\fP
-into \fIdst\fP\&.
-\fIflags\fP is currently unused.
-.TP
-.B Return
-0 on success, \-E2BIG if \fIoffset\fP + \fIlen\fP exceeds the length
-of \fIdst\fP\(aqs data, \-EINVAL if \fIdst\fP is an invalid dynptr or if \fIdst\fP
-is a read\-only dynptr or if \fIflags\fP is not 0.
-.UNINDENT
-.TP
-.B \fBvoid *bpf_dynptr_data(const struct bpf_dynptr *\fP\fIptr\fP\fB, u32\fP \fIoffset\fP\fB, u32\fP \fIlen\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get a pointer to the underlying dynptr data.
-.sp
-\fIlen\fP must be a statically known value. The returned data slice
-is invalidated whenever the dynptr is invalidated.
-.TP
-.B Return
-Pointer to the underlying dynptr data, NULL if the dynptr is
-read\-only, if the dynptr is invalid, or if the offset and length
-is out of bounds.
-.UNINDENT
-.TP
-.B \fBs64 bpf_tcp_raw_gen_syncookie_ipv4(struct iphdr *\fP\fIiph\fP\fB, struct tcphdr *\fP\fIth\fP\fB, u32\fP \fIth_len\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Try to issue a SYN cookie for the packet with corresponding
-IPv4/TCP headers, \fIiph\fP and \fIth\fP, without depending on a
-listening socket.
-.sp
-\fIiph\fP points to the IPv4 header.
-.sp
-\fIth\fP points to the start of the TCP header, while \fIth_len\fP
-contains the length of the TCP header (at least
-\fBsizeof\fP(\fBstruct tcphdr\fP)).
-.TP
-.B Return
-On success, lower 32 bits hold the generated SYN cookie in
-followed by 16 bits which hold the MSS value for that cookie,
-and the top 16 bits are unused.
-.sp
-On failure, the returned value is one of the following:
-.sp
-\fB\-EINVAL\fP if \fIth_len\fP is invalid.
-.UNINDENT
-.TP
-.B \fBs64 bpf_tcp_raw_gen_syncookie_ipv6(struct ipv6hdr *\fP\fIiph\fP\fB, struct tcphdr *\fP\fIth\fP\fB, u32\fP \fIth_len\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Try to issue a SYN cookie for the packet with corresponding
-IPv6/TCP headers, \fIiph\fP and \fIth\fP, without depending on a
-listening socket.
-.sp
-\fIiph\fP points to the IPv6 header.
-.sp
-\fIth\fP points to the start of the TCP header, while \fIth_len\fP
-contains the length of the TCP header (at least
-\fBsizeof\fP(\fBstruct tcphdr\fP)).
-.TP
-.B Return
-On success, lower 32 bits hold the generated SYN cookie in
-followed by 16 bits which hold the MSS value for that cookie,
-and the top 16 bits are unused.
-.sp
-On failure, the returned value is one of the following:
-.sp
-\fB\-EINVAL\fP if \fIth_len\fP is invalid.
-.sp
-\fB\-EPROTONOSUPPORT\fP if CONFIG_IPV6 is not builtin.
-.UNINDENT
-.TP
-.B \fBlong bpf_tcp_raw_check_syncookie_ipv4(struct iphdr *\fP\fIiph\fP\fB, struct tcphdr *\fP\fIth\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Check whether \fIiph\fP and \fIth\fP contain a valid SYN cookie ACK
-without depending on a listening socket.
-.sp
-\fIiph\fP points to the IPv4 header.
-.sp
-\fIth\fP points to the TCP header.
-.TP
-.B Return
-0 if \fIiph\fP and \fIth\fP are a valid SYN cookie ACK.
-.sp
-On failure, the returned value is one of the following:
-.sp
-\fB\-EACCES\fP if the SYN cookie is not valid.
-.UNINDENT
-.TP
-.B \fBlong bpf_tcp_raw_check_syncookie_ipv6(struct ipv6hdr *\fP\fIiph\fP\fB, struct tcphdr *\fP\fIth\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Check whether \fIiph\fP and \fIth\fP contain a valid SYN cookie ACK
-without depending on a listening socket.
-.sp
-\fIiph\fP points to the IPv6 header.
-.sp
-\fIth\fP points to the TCP header.
-.TP
-.B Return
-0 if \fIiph\fP and \fIth\fP are a valid SYN cookie ACK.
-.sp
-On failure, the returned value is one of the following:
-.sp
-\fB\-EACCES\fP if the SYN cookie is not valid.
-.sp
-\fB\-EPROTONOSUPPORT\fP if CONFIG_IPV6 is not builtin.
-.UNINDENT
-.TP
-.B \fBu64 bpf_ktime_get_tai_ns(void)\fP
-.INDENT 7.0
-.TP
-.B Description
-A nonsettable system\-wide clock derived from wall\-clock time but
-ignoring leap seconds. This clock does not experience
-discontinuities and backwards jumps caused by NTP inserting leap
-seconds as CLOCK_REALTIME does.
-.sp
-See: \fBclock_gettime\fP(\fBCLOCK_TAI\fP)
-.TP
-.B Return
-Current \fIktime\fP\&.
-.UNINDENT
-.TP
-.B \fBlong bpf_user_ringbuf_drain(struct bpf_map *\fP\fImap\fP\fB, void *\fP\fIcallback_fn\fP\fB, void *\fP\fIctx\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Drain samples from the specified user ring buffer, and invoke
-the provided callback for each such sample:
-.sp
-long (*callback_fn)(const struct bpf_dynptr *dynptr, void *ctx);
-.sp
-If \fBcallback_fn\fP returns 0, the helper will continue to try
-and drain the next sample, up to a maximum of
-BPF_MAX_USER_RINGBUF_SAMPLES samples. If the return value is 1,
-the helper will skip the rest of the samples and return. Other
-return values are not used now, and will be rejected by the
-verifier.
-.TP
-.B Return
-The number of drained samples if no error was encountered while
-draining samples, or 0 if no samples were present in the ring
-buffer. If a user\-space producer was epoll\-waiting on this map,
-and at least one sample was drained, they will receive an event
-notification notifying them of available space in the ring
-buffer. If the BPF_RB_NO_WAKEUP flag is passed to this
-function, no wakeup notification will be sent. If the
-BPF_RB_FORCE_WAKEUP flag is passed, a wakeup notification will
-be sent even if no sample was drained.
-.sp
-On failure, the returned value is one of the following:
-.sp
-\fB\-EBUSY\fP if the ring buffer is contended, and another calling
-context was concurrently draining the ring buffer.
-.sp
-\fB\-EINVAL\fP if user\-space is not properly tracking the ring
-buffer due to the producer position not being aligned to 8
-bytes, a sample not being aligned to 8 bytes, or the producer
-position not matching the advertised length of a sample.
-.sp
-\fB\-E2BIG\fP if user\-space has tried to publish a sample which is
-larger than the size of the ring buffer, or which cannot fit
-within a struct bpf_dynptr.
-.UNINDENT
-.TP
-.B \fBvoid *bpf_cgrp_storage_get(struct bpf_map *\fP\fImap\fP\fB, struct cgroup *\fP\fIcgroup\fP\fB, void *\fP\fIvalue\fP\fB, u64\fP \fIflags\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Get a bpf_local_storage from the \fIcgroup\fP\&.
-.sp
-Logically, it could be thought of as getting the value from
-a \fImap\fP with \fIcgroup\fP as the \fBkey\fP\&. From this
-perspective, the usage is not much different from
-\fBbpf_map_lookup_elem\fP(\fImap\fP, \fB&\fP\fIcgroup\fP) except this
-helper enforces the key must be a cgroup struct and the map must also
-be a \fBBPF_MAP_TYPE_CGRP_STORAGE\fP\&.
-.sp
-In reality, the local\-storage value is embedded directly inside of the
-\fIcgroup\fP object itself, rather than being located in the
-\fBBPF_MAP_TYPE_CGRP_STORAGE\fP map. When the local\-storage value is
-queried for some \fImap\fP on a \fIcgroup\fP object, the kernel will perform an
-O(n) iteration over all of the live local\-storage values for that
-\fIcgroup\fP object until the local\-storage value for the \fImap\fP is found.
-.sp
-An optional \fIflags\fP (\fBBPF_LOCAL_STORAGE_GET_F_CREATE\fP) can be
-used such that a new bpf_local_storage will be
-created if one does not exist. \fIvalue\fP can be used
-together with \fBBPF_LOCAL_STORAGE_GET_F_CREATE\fP to specify
-the initial value of a bpf_local_storage. If \fIvalue\fP is
-\fBNULL\fP, the new bpf_local_storage will be zero initialized.
-.TP
-.B Return
-A bpf_local_storage pointer is returned on success.
-.sp
-\fBNULL\fP if not found or there was an error in adding
-a new bpf_local_storage.
-.UNINDENT
-.TP
-.B \fBlong bpf_cgrp_storage_delete(struct bpf_map *\fP\fImap\fP\fB, struct cgroup *\fP\fIcgroup\fP\fB)\fP
-.INDENT 7.0
-.TP
-.B Description
-Delete a bpf_local_storage from a \fIcgroup\fP\&.
-.TP
-.B Return
-0 on success.
-.sp
-\fB\-ENOENT\fP if the bpf_local_storage cannot be found.
-.UNINDENT
-.UNINDENT
-.SH EXAMPLES
-.sp
-Example usage for most of the eBPF helpers listed in this manual page are
-available within the Linux kernel sources, at the following locations:
-.INDENT 0.0
-.IP \(bu 2
-\fIsamples/bpf/\fP
-.IP \(bu 2
-\fItools/testing/selftests/bpf/\fP
-.UNINDENT
-.SH LICENSE
-.sp
-eBPF programs can have an associated license, passed along with the bytecode
-instructions to the kernel when the programs are loaded. The format for that
-string is identical to the one in use for kernel modules (Dual licenses, such
-as \(dqDual BSD/GPL\(dq, may be used). Some helper functions are only accessible to
-programs that are compatible with the GNU Privacy License (GPL).
-.sp
-In order to use such helpers, the eBPF program must be loaded with the correct
-license string passed (via \fBattr\fP) to the \fBbpf\fP() system call, and this
-generally translates into the C source code of the program containing a line
-similar to the following:
-.INDENT 0.0
-.INDENT 3.5
-.sp
-.nf
-.ft C
-char ____license[] __attribute__((section(\(dqlicense\(dq), used)) = \(dqGPL\(dq;
-.ft P
-.fi
-.UNINDENT
-.UNINDENT
-.SH IMPLEMENTATION
-.sp
-This manual page is an effort to document the existing eBPF helper functions.
-But as of this writing, the BPF sub\-system is under heavy development. New eBPF
-program or map types are added, along with new helper functions. Some helpers
-are occasionally made available for additional program types. So in spite of
-the efforts of the community, this page might not be up\-to\-date. If you want to
-check by yourself what helper functions exist in your kernel, or what types of
-programs they can support, here are some files among the kernel tree that you
-may be interested in:
-.INDENT 0.0
-.IP \(bu 2
-\fIinclude/uapi/linux/bpf.h\fP is the main BPF header. It contains the full list
-of all helper functions, as well as many other BPF definitions including most
-of the flags, structs or constants used by the helpers.
-.IP \(bu 2
-\fInet/core/filter.c\fP contains the definition of most network\-related helper
-functions, and the list of program types from which they can be used.
-.IP \(bu 2
-\fIkernel/trace/bpf_trace.c\fP is the equivalent for most tracing program\-related
-helpers.
-.IP \(bu 2
-\fIkernel/bpf/verifier.c\fP contains the functions used to check that valid types
-of eBPF maps are used with a given helper function.
-.IP \(bu 2
-\fIkernel/bpf/\fP directory contains other files in which additional helpers are
-defined (for cgroups, sockmaps, etc.).
-.IP \(bu 2
-The bpftool utility can be used to probe the availability of helper functions
-on the system (as well as supported program and map types, and a number of
-other parameters). To do so, run \fBbpftool feature probe\fP (see
-\fBbpftool\-feature\fP(8) for details). Add the \fBunprivileged\fP keyword to
-list features available to unprivileged users.
-.UNINDENT
-.sp
-Compatibility between helper functions and program types can generally be found
-in the files where helper functions are defined. Look for the \fBstruct
-bpf_func_proto\fP objects and for functions returning them: these functions
-contain a list of helpers that a given program type can call. Note that the
-\fBdefault:\fP label of the \fBswitch ... case\fP used to filter helpers can call
-other functions, themselves allowing access to additional helpers. The
-requirement for GPL license is also in those \fBstruct bpf_func_proto\fP\&.
-.sp
-Compatibility between helper functions and map types can be found in the
-\fBcheck_map_func_compatibility\fP() function in file \fIkernel/bpf/verifier.c\fP\&.
-.sp
-Helper functions that invalidate the checks on \fBdata\fP and \fBdata_end\fP
-pointers for network processing are listed in function
-\fBbpf_helper_changes_pkt_data\fP() in file \fInet/core/filter.c\fP\&.
-.SH SEE ALSO
-.sp
-\fBbpf\fP(2),
-\fBbpftool\fP(8),
-\fBcgroups\fP(7),
-\fBip\fP(8),
-\fBperf_event_open\fP(2),
-\fBsendmsg\fP(2),
-\fBsocket\fP(7),
-\fBtc\-bpf\fP(8)
-.\" Generated by docutils manpage writer.
-.
diff --git a/man7/capabilities.7 b/man7/capabilities.7
deleted file mode 100644
index dca8b01cf..000000000
--- a/man7/capabilities.7
+++ /dev/null
@@ -1,1872 +0,0 @@
-.\" Copyright (c) 2002 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 6 Aug 2002 - Initial Creation
-.\" Modified 2003-05-23, Michael Kerrisk, <mtk.manpages@gmail.com>
-.\" Modified 2004-05-27, Michael Kerrisk, <mtk.manpages@gmail.com>
-.\" 2004-12-08, mtk Added O_NOATIME for CAP_FOWNER
-.\" 2005-08-16, mtk, Added CAP_AUDIT_CONTROL and CAP_AUDIT_WRITE
-.\" 2008-07-15, Serge Hallyn <serue@us.bbm.com>
-.\" Document file capabilities, per-process capability
-.\" bounding set, changed semantics for CAP_SETPCAP,
-.\" and other changes in Linux 2.6.2[45].
-.\" Add CAP_MAC_ADMIN, CAP_MAC_OVERRIDE, CAP_SETFCAP.
-.\" 2008-07-15, mtk
-.\" Add text describing circumstances in which CAP_SETPCAP
-.\" (theoretically) permits a thread to change the
-.\" capability sets of another thread.
-.\" Add section describing rules for programmatically
-.\" adjusting thread capability sets.
-.\" Describe rationale for capability bounding set.
-.\" Document "securebits" flags.
-.\" Add text noting that if we set the effective flag for one file
-.\" capability, then we must also set the effective flag for all
-.\" other capabilities where the permitted or inheritable bit is set.
-.\" 2011-09-07, mtk/Serge hallyn: Add CAP_SYSLOG
-.\"
-.TH Capabilities 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-capabilities \- overview of Linux capabilities
-.SH DESCRIPTION
-For the purpose of performing permission checks,
-traditional UNIX implementations distinguish two categories of processes:
-.I privileged
-processes (whose effective user ID is 0, referred to as superuser or root),
-and
-.I unprivileged
-processes (whose effective UID is nonzero).
-Privileged processes bypass all kernel permission checks,
-while unprivileged processes are subject to full permission
-checking based on the process's credentials
-(usually: effective UID, effective GID, and supplementary group list).
-.PP
-Starting with Linux 2.2, Linux divides the privileges traditionally
-associated with superuser into distinct units, known as
-.IR capabilities ,
-which can be independently enabled and disabled.
-Capabilities are a per-thread attribute.
-.\"
-.SS Capabilities list
-The following list shows the capabilities implemented on Linux,
-and the operations or behaviors that each capability permits:
-.TP
-.BR CAP_AUDIT_CONTROL " (since Linux 2.6.11)"
-Enable and disable kernel auditing; change auditing filter rules;
-retrieve auditing status and filtering rules.
-.TP
-.BR CAP_AUDIT_READ " (since Linux 3.16)"
-.\" commit a29b694aa1739f9d76538e34ae25524f9c549d59
-.\" commit 3a101b8de0d39403b2c7e5c23fd0b005668acf48
-Allow reading the audit log via a multicast netlink socket.
-.TP
-.BR CAP_AUDIT_WRITE " (since Linux 2.6.11)"
-Write records to kernel auditing log.
-.\" FIXME Add FAN_ENABLE_AUDIT
-.TP
-.BR CAP_BLOCK_SUSPEND " (since Linux 3.5)"
-Employ features that can block system suspend
-.RB ( epoll (7)
-.BR EPOLLWAKEUP ,
-.IR /proc/sys/wake_lock ).
-.TP
-.BR CAP_BPF " (since Linux 5.8)"
-Employ privileged BPF operations; see
-.BR bpf (2)
-and
-.BR bpf\-helpers (7).
-.IP
-This capability was added in Linux 5.8 to separate out
-BPF functionality from the overloaded
-.B CAP_SYS_ADMIN
-capability.
-.TP
-.BR CAP_CHECKPOINT_RESTORE " (since Linux 5.9)"
-.\" commit 124ea650d3072b005457faed69909221c2905a1f
-.PD 0
-.RS
-.IP \[bu] 3
-Update
-.I /proc/sys/kernel/ns_last_pid
-(see
-.BR pid_namespaces (7));
-.IP \[bu]
-employ the
-.I set_tid
-feature of
-.BR clone3 (2);
-.\" FIXME There is also some use case relating to
-.\" prctl_set_mm_exe_file(); in the 5.9 sources, see
-.\" prctl_set_mm_map().
-.IP \[bu]
-read the contents of the symbolic links in
-.IR /proc/ pid /map_files
-for other processes.
-.RE
-.PD
-.IP
-This capability was added in Linux 5.9 to separate out
-checkpoint/restore functionality from the overloaded
-.B CAP_SYS_ADMIN
-capability.
-.TP
-.B CAP_CHOWN
-Make arbitrary changes to file UIDs and GIDs (see
-.BR chown (2)).
-.TP
-.B CAP_DAC_OVERRIDE
-Bypass file read, write, and execute permission checks.
-(DAC is an abbreviation of "discretionary access control".)
-.TP
-.B CAP_DAC_READ_SEARCH
-.PD 0
-.RS
-.IP \[bu] 3
-Bypass file read permission checks and
-directory read and execute permission checks;
-.IP \[bu]
-invoke
-.BR open_by_handle_at (2);
-.IP \[bu]
-use the
-.BR linkat (2)
-.B AT_EMPTY_PATH
-flag to create a link to a file referred to by a file descriptor.
-.RE
-.PD
-.TP
-.B CAP_FOWNER
-.PD 0
-.RS
-.IP \[bu] 3
-Bypass permission checks on operations that normally
-require the filesystem UID of the process to match the UID of
-the file (e.g.,
-.BR chmod (2),
-.BR utime (2)),
-excluding those operations covered by
-.B CAP_DAC_OVERRIDE
-and
-.BR CAP_DAC_READ_SEARCH ;
-.IP \[bu]
-set inode flags (see
-.BR ioctl_iflags (2))
-on arbitrary files;
-.IP \[bu]
-set Access Control Lists (ACLs) on arbitrary files;
-.IP \[bu]
-ignore directory sticky bit on file deletion;
-.IP \[bu]
-modify
-.I user
-extended attributes on sticky directory owned by any user;
-.IP \[bu]
-specify
-.B O_NOATIME
-for arbitrary files in
-.BR open (2)
-and
-.BR fcntl (2).
-.RE
-.PD
-.TP
-.B CAP_FSETID
-.PD 0
-.RS
-.IP \[bu] 3
-Don't clear set-user-ID and set-group-ID mode
-bits when a file is modified;
-.IP \[bu]
-set the set-group-ID bit for a file whose GID does not match
-the filesystem or any of the supplementary GIDs of the calling process.
-.RE
-.PD
-.TP
-.B CAP_IPC_LOCK
-.\" FIXME . As at Linux 3.2, there are some strange uses of this capability
-.\" in other places; they probably should be replaced with something else.
-.PD 0
-.RS
-.IP \[bu] 3
-Lock memory
-.RB ( mlock (2),
-.BR mlockall (2),
-.BR mmap (2),
-.BR shmctl (2));
-.IP \[bu]
-Allocate memory using huge pages
-.RB ( memfd_create (2),
-.BR mmap (2),
-.BR shmctl (2)).
-.RE
-.PD
-.TP
-.B CAP_IPC_OWNER
-Bypass permission checks for operations on System V IPC objects.
-.TP
-.B CAP_KILL
-Bypass permission checks for sending signals (see
-.BR kill (2)).
-This includes use of the
-.BR ioctl (2)
-.B KDSIGACCEPT
-operation.
-.\" FIXME . CAP_KILL also has an effect for threads + setting child
-.\" termination signal to other than SIGCHLD: without this
-.\" capability, the termination signal reverts to SIGCHLD
-.\" if the child does an exec(). What is the rationale
-.\" for this?
-.TP
-.BR CAP_LEASE " (since Linux 2.4)"
-Establish leases on arbitrary files (see
-.BR fcntl (2)).
-.TP
-.B CAP_LINUX_IMMUTABLE
-Set the
-.B FS_APPEND_FL
-and
-.B FS_IMMUTABLE_FL
-inode flags (see
-.BR ioctl_iflags (2)).
-.TP
-.BR CAP_MAC_ADMIN " (since Linux 2.6.25)"
-Allow MAC configuration or state changes.
-Implemented for the Smack Linux Security Module (LSM).
-.TP
-.BR CAP_MAC_OVERRIDE " (since Linux 2.6.25)"
-Override Mandatory Access Control (MAC).
-Implemented for the Smack LSM.
-.TP
-.BR CAP_MKNOD " (since Linux 2.4)"
-Create special files using
-.BR mknod (2).
-.TP
-.B CAP_NET_ADMIN
-Perform various network-related operations:
-.PD 0
-.RS
-.IP \[bu] 3
-interface configuration;
-.IP \[bu]
-administration of IP firewall, masquerading, and accounting;
-.IP \[bu]
-modify routing tables;
-.IP \[bu]
-bind to any address for transparent proxying;
-.IP \[bu]
-set type-of-service (TOS);
-.IP \[bu]
-clear driver statistics;
-.IP \[bu]
-set promiscuous mode;
-.IP \[bu]
-enabling multicasting;
-.IP \[bu]
-use
-.BR setsockopt (2)
-to set the following socket options:
-.BR SO_DEBUG ,
-.BR SO_MARK ,
-.B SO_PRIORITY
-(for a priority outside the range 0 to 6),
-.BR SO_RCVBUFFORCE ,
-and
-.BR SO_SNDBUFFORCE .
-.RE
-.PD
-.TP
-.B CAP_NET_BIND_SERVICE
-Bind a socket to Internet domain privileged ports
-(port numbers less than 1024).
-.TP
-.B CAP_NET_BROADCAST
-(Unused) Make socket broadcasts, and listen to multicasts.
-.\" FIXME Since Linux 4.2, there are use cases for netlink sockets
-.\" commit 59324cf35aba5336b611074028777838a963d03b
-.TP
-.B CAP_NET_RAW
-.PD 0
-.RS
-.IP \[bu] 3
-Use RAW and PACKET sockets;
-.IP \[bu]
-bind to any address for transparent proxying.
-.RE
-.PD
-.\" Also various IP options and setsockopt(SO_BINDTODEVICE)
-.TP
-.BR CAP_PERFMON " (since Linux 5.8)"
-Employ various performance-monitoring mechanisms, including:
-.RS
-.IP \[bu] 3
-.PD 0
-call
-.BR perf_event_open (2);
-.IP \[bu]
-employ various BPF operations that have performance implications.
-.RE
-.PD
-.IP
-This capability was added in Linux 5.8 to separate out
-performance monitoring functionality from the overloaded
-.B CAP_SYS_ADMIN
-capability.
-See also the kernel source file
-.IR Documentation/admin\-guide/perf\-security.rst .
-.TP
-.B CAP_SETGID
-.RS
-.PD 0
-.IP \[bu] 3
-Make arbitrary manipulations of process GIDs and supplementary GID list;
-.IP \[bu]
-forge GID when passing socket credentials via UNIX domain sockets;
-.IP \[bu]
-write a group ID mapping in a user namespace (see
-.BR user_namespaces (7)).
-.PD
-.RE
-.TP
-.BR CAP_SETFCAP " (since Linux 2.6.24)"
-Set arbitrary capabilities on a file.
-.IP
-.\" commit db2e718a47984b9d71ed890eb2ea36ecf150de18
-Since Linux 5.12, this capability is
-also needed to map user ID 0 in a new user namespace; see
-.BR user_namespaces (7)
-for details.
-.TP
-.B CAP_SETPCAP
-If file capabilities are supported (i.e., since Linux 2.6.24):
-add any capability from the calling thread's bounding set
-to its inheritable set;
-drop capabilities from the bounding set (via
-.BR prctl (2)
-.BR PR_CAPBSET_DROP );
-make changes to the
-.I securebits
-flags.
-.IP
-If file capabilities are not supported (i.e., before Linux 2.6.24):
-grant or remove any capability in the
-caller's permitted capability set to or from any other process.
-(This property of
-.B CAP_SETPCAP
-is not available when the kernel is configured to support
-file capabilities, since
-.B CAP_SETPCAP
-has entirely different semantics for such kernels.)
-.TP
-.B CAP_SETUID
-.RS
-.PD 0
-.IP \[bu] 3
-Make arbitrary manipulations of process UIDs
-.RB ( setuid (2),
-.BR setreuid (2),
-.BR setresuid (2),
-.BR setfsuid (2));
-.IP \[bu]
-forge UID when passing socket credentials via UNIX domain sockets;
-.IP \[bu]
-write a user ID mapping in a user namespace (see
-.BR user_namespaces (7)).
-.PD
-.RE
-.\" FIXME CAP_SETUID also an effect in exec(); document this.
-.TP
-.B CAP_SYS_ADMIN
-.IR Note :
-this capability is overloaded; see
-.I Notes to kernel developers
-below.
-.IP
-.PD 0
-.RS
-.IP \[bu] 3
-Perform a range of system administration operations including:
-.BR quotactl (2),
-.BR mount (2),
-.BR umount (2),
-.BR pivot_root (2),
-.BR swapon (2),
-.BR swapoff (2),
-.BR sethostname (2),
-and
-.BR setdomainname (2);
-.IP \[bu]
-perform privileged
-.BR syslog (2)
-operations (since Linux 2.6.37,
-.B CAP_SYSLOG
-should be used to permit such operations);
-.IP \[bu]
-perform
-.B VM86_REQUEST_IRQ
-.BR vm86 (2)
-command;
-.IP \[bu]
-access the same checkpoint/restore functionality that is governed by
-.B CAP_CHECKPOINT_RESTORE
-(but the latter, weaker capability is preferred for accessing
-that functionality).
-.IP \[bu]
-perform the same BPF operations as are governed by
-.B CAP_BPF
-(but the latter, weaker capability is preferred for accessing
-that functionality).
-.IP \[bu]
-employ the same performance monitoring mechanisms as are governed by
-.B CAP_PERFMON
-(but the latter, weaker capability is preferred for accessing
-that functionality).
-.IP \[bu]
-perform
-.B IPC_SET
-and
-.B IPC_RMID
-operations on arbitrary System V IPC objects;
-.IP \[bu]
-override
-.B RLIMIT_NPROC
-resource limit;
-.IP \[bu]
-perform operations on
-.I trusted
-and
-.I security
-extended attributes (see
-.BR xattr (7));
-.IP \[bu]
-use
-.BR lookup_dcookie (2);
-.IP \[bu]
-use
-.BR ioprio_set (2)
-to assign
-.B IOPRIO_CLASS_RT
-and (before Linux 2.6.25)
-.B IOPRIO_CLASS_IDLE
-I/O scheduling classes;
-.IP \[bu]
-forge PID when passing socket credentials via UNIX domain sockets;
-.IP \[bu]
-exceed
-.IR /proc/sys/fs/file\-max ,
-the system-wide limit on the number of open files,
-in system calls that open files (e.g.,
-.BR accept (2),
-.BR execve (2),
-.BR open (2),
-.BR pipe (2));
-.IP \[bu]
-employ
-.B CLONE_*
-flags that create new namespaces with
-.BR clone (2)
-and
-.BR unshare (2)
-(but, since Linux 3.8,
-creating user namespaces does not require any capability);
-.IP \[bu]
-access privileged
-.I perf
-event information;
-.IP \[bu]
-call
-.BR setns (2)
-(requires
-.B CAP_SYS_ADMIN
-in the
-.I target
-namespace);
-.IP \[bu]
-call
-.BR fanotify_init (2);
-.IP \[bu]
-perform privileged
-.B KEYCTL_CHOWN
-and
-.B KEYCTL_SETPERM
-.BR keyctl (2)
-operations;
-.IP \[bu]
-perform
-.BR madvise (2)
-.B MADV_HWPOISON
-operation;
-.IP \[bu]
-employ the
-.B TIOCSTI
-.BR ioctl (2)
-to insert characters into the input queue of a terminal other than
-the caller's controlling terminal;
-.IP \[bu]
-employ the obsolete
-.BR nfsservctl (2)
-system call;
-.IP \[bu]
-employ the obsolete
-.BR bdflush (2)
-system call;
-.IP \[bu]
-perform various privileged block-device
-.BR ioctl (2)
-operations;
-.IP \[bu]
-perform various privileged filesystem
-.BR ioctl (2)
-operations;
-.IP \[bu]
-perform privileged
-.BR ioctl (2)
-operations on the
-.I /dev/random
-device (see
-.BR random (4));
-.IP \[bu]
-install a
-.BR seccomp (2)
-filter without first having to set the
-.I no_new_privs
-thread attribute;
-.IP \[bu]
-modify allow/deny rules for device control groups;
-.IP \[bu]
-employ the
-.BR ptrace (2)
-.B PTRACE_SECCOMP_GET_FILTER
-operation to dump tracee's seccomp filters;
-.IP \[bu]
-employ the
-.BR ptrace (2)
-.B PTRACE_SETOPTIONS
-operation to suspend the tracee's seccomp protections (i.e., the
-.B PTRACE_O_SUSPEND_SECCOMP
-flag);
-.IP \[bu]
-perform administrative operations on many device drivers;
-.IP \[bu]
-modify autogroup nice values by writing to
-.IR /proc/ pid /autogroup
-(see
-.BR sched (7)).
-.RE
-.PD
-.TP
-.B CAP_SYS_BOOT
-Use
-.BR reboot (2)
-and
-.BR kexec_load (2).
-.TP
-.B CAP_SYS_CHROOT
-.RS
-.PD 0
-.IP \[bu] 3
-Use
-.BR chroot (2);
-.IP \[bu]
-change mount namespaces using
-.BR setns (2).
-.PD
-.RE
-.TP
-.B CAP_SYS_MODULE
-.RS
-.PD 0
-.IP \[bu] 3
-Load and unload kernel modules
-(see
-.BR init_module (2)
-and
-.BR delete_module (2));
-.IP \[bu]
-before Linux 2.6.25:
-drop capabilities from the system-wide capability bounding set.
-.PD
-.RE
-.TP
-.B CAP_SYS_NICE
-.PD 0
-.RS
-.IP \[bu] 3
-Lower the process nice value
-.RB ( nice (2),
-.BR setpriority (2))
-and change the nice value for arbitrary processes;
-.IP \[bu]
-set real-time scheduling policies for calling process,
-and set scheduling policies and priorities for arbitrary processes
-.RB ( sched_setscheduler (2),
-.BR sched_setparam (2),
-.BR sched_setattr (2));
-.IP \[bu]
-set CPU affinity for arbitrary processes
-.RB ( sched_setaffinity (2));
-.IP \[bu]
-set I/O scheduling class and priority for arbitrary processes
-.RB ( ioprio_set (2));
-.IP \[bu]
-apply
-.BR migrate_pages (2)
-to arbitrary processes and allow processes
-to be migrated to arbitrary nodes;
-.\" FIXME CAP_SYS_NICE also has the following effect for
-.\" migrate_pages(2):
-.\" do_migrate_pages(mm, &old, &new,
-.\" capable(CAP_SYS_NICE) ? MPOL_MF_MOVE_ALL : MPOL_MF_MOVE);
-.\"
-.\" Document this.
-.IP \[bu]
-apply
-.BR move_pages (2)
-to arbitrary processes;
-.IP \[bu]
-use the
-.B MPOL_MF_MOVE_ALL
-flag with
-.BR mbind (2)
-and
-.BR move_pages (2).
-.RE
-.PD
-.TP
-.B CAP_SYS_PACCT
-Use
-.BR acct (2).
-.TP
-.B CAP_SYS_PTRACE
-.PD 0
-.RS
-.IP \[bu] 3
-Trace arbitrary processes using
-.BR ptrace (2);
-.IP \[bu]
-apply
-.BR get_robust_list (2)
-to arbitrary processes;
-.IP \[bu]
-transfer data to or from the memory of arbitrary processes using
-.BR process_vm_readv (2)
-and
-.BR process_vm_writev (2);
-.IP \[bu]
-inspect processes using
-.BR kcmp (2).
-.RE
-.PD
-.TP
-.B CAP_SYS_RAWIO
-.PD 0
-.RS
-.IP \[bu] 3
-Perform I/O port operations
-.RB ( iopl (2)
-and
-.BR ioperm (2));
-.IP \[bu]
-access
-.IR /proc/kcore ;
-.IP \[bu]
-employ the
-.B FIBMAP
-.BR ioctl (2)
-operation;
-.IP \[bu]
-open devices for accessing x86 model-specific registers (MSRs, see
-.BR msr (4));
-.IP \[bu]
-update
-.IR /proc/sys/vm/mmap_min_addr ;
-.IP \[bu]
-create memory mappings at addresses below the value specified by
-.IR /proc/sys/vm/mmap_min_addr ;
-.IP \[bu]
-map files in
-.IR /proc/bus/pci ;
-.IP \[bu]
-open
-.I /dev/mem
-and
-.IR /dev/kmem ;
-.IP \[bu]
-perform various SCSI device commands;
-.IP \[bu]
-perform certain operations on
-.BR hpsa (4)
-and
-.BR cciss (4)
-devices;
-.IP \[bu]
-perform a range of device-specific operations on other devices.
-.RE
-.PD
-.TP
-.B CAP_SYS_RESOURCE
-.PD 0
-.RS
-.IP \[bu] 3
-Use reserved space on ext2 filesystems;
-.IP \[bu]
-make
-.BR ioctl (2)
-calls controlling ext3 journaling;
-.IP \[bu]
-override disk quota limits;
-.IP \[bu]
-increase resource limits (see
-.BR setrlimit (2));
-.IP \[bu]
-override
-.B RLIMIT_NPROC
-resource limit;
-.IP \[bu]
-override maximum number of consoles on console allocation;
-.IP \[bu]
-override maximum number of keymaps;
-.IP \[bu]
-allow more than 64hz interrupts from the real-time clock;
-.IP \[bu]
-raise
-.I msg_qbytes
-limit for a System V message queue above the limit in
-.I /proc/sys/kernel/msgmnb
-(see
-.BR msgop (2)
-and
-.BR msgctl (2));
-.IP \[bu]
-allow the
-.B RLIMIT_NOFILE
-resource limit on the number of "in-flight" file descriptors
-to be bypassed when passing file descriptors to another process
-via a UNIX domain socket (see
-.BR unix (7));
-.IP \[bu]
-override the
-.I /proc/sys/fs/pipe\-size\-max
-limit when setting the capacity of a pipe using the
-.B F_SETPIPE_SZ
-.BR fcntl (2)
-command;
-.IP \[bu]
-use
-.B F_SETPIPE_SZ
-to increase the capacity of a pipe above the limit specified by
-.IR /proc/sys/fs/pipe\-max\-size ;
-.IP \[bu]
-override
-.IR /proc/sys/fs/mqueue/queues_max ,
-.IR /proc/sys/fs/mqueue/msg_max ,
-and
-.I /proc/sys/fs/mqueue/msgsize_max
-limits when creating POSIX message queues (see
-.BR mq_overview (7));
-.IP \[bu]
-employ the
-.BR prctl (2)
-.B PR_SET_MM
-operation;
-.IP \[bu]
-set
-.IR /proc/ pid /oom_score_adj
-to a value lower than the value last set by a process with
-.BR CAP_SYS_RESOURCE .
-.RE
-.PD
-.TP
-.B CAP_SYS_TIME
-Set system clock
-.RB ( settimeofday (2),
-.BR stime (2),
-.BR adjtimex (2));
-set real-time (hardware) clock.
-.TP
-.B CAP_SYS_TTY_CONFIG
-Use
-.BR vhangup (2);
-employ various privileged
-.BR ioctl (2)
-operations on virtual terminals.
-.TP
-.BR CAP_SYSLOG " (since Linux 2.6.37)"
-.RS
-.PD 0
-.IP \[bu] 3
-Perform privileged
-.BR syslog (2)
-operations.
-See
-.BR syslog (2)
-for information on which operations require privilege.
-.IP \[bu]
-View kernel addresses exposed via
-.I /proc
-and other interfaces when
-.I /proc/sys/kernel/kptr_restrict
-has the value 1.
-(See the discussion of the
-.I kptr_restrict
-in
-.BR proc (5).)
-.PD
-.RE
-.TP
-.BR CAP_WAKE_ALARM " (since Linux 3.0)"
-Trigger something that will wake up the system (set
-.B CLOCK_REALTIME_ALARM
-and
-.B CLOCK_BOOTTIME_ALARM
-timers).
-.\"
-.SS Past and current implementation
-A full implementation of capabilities requires that:
-.IP \[bu] 3
-For all privileged operations,
-the kernel must check whether the thread has the required
-capability in its effective set.
-.IP \[bu]
-The kernel must provide system calls allowing a thread's capability sets to
-be changed and retrieved.
-.IP \[bu]
-The filesystem must support attaching capabilities to an executable file,
-so that a process gains those capabilities when the file is executed.
-.PP
-Before Linux 2.6.24, only the first two of these requirements are met;
-since Linux 2.6.24, all three requirements are met.
-.\"
-.SS Notes to kernel developers
-When adding a new kernel feature that should be governed by a capability,
-consider the following points.
-.IP \[bu] 3
-The goal of capabilities is divide the power of superuser into pieces,
-such that if a program that has one or more capabilities is compromised,
-its power to do damage to the system would be less than the same program
-running with root privilege.
-.IP \[bu]
-You have the choice of either creating a new capability for your new feature,
-or associating the feature with one of the existing capabilities.
-In order to keep the set of capabilities to a manageable size,
-the latter option is preferable,
-unless there are compelling reasons to take the former option.
-(There is also a technical limit:
-the size of capability sets is currently limited to 64 bits.)
-.IP \[bu]
-To determine which existing capability might best be associated
-with your new feature, review the list of capabilities above in order
-to find a "silo" into which your new feature best fits.
-One approach to take is to determine if there are other features
-requiring capabilities that will always be used along with the new feature.
-If the new feature is useless without these other features,
-you should use the same capability as the other features.
-.IP \[bu]
-.I Don't
-choose
-.B CAP_SYS_ADMIN
-if you can possibly avoid it!
-A vast proportion of existing capability checks are associated
-with this capability (see the partial list above).
-It can plausibly be called "the new root",
-since on the one hand, it confers a wide range of powers,
-and on the other hand,
-its broad scope means that this is the capability
-that is required by many privileged programs.
-Don't make the problem worse.
-The only new features that should be associated with
-.B CAP_SYS_ADMIN
-are ones that
-.I closely
-match existing uses in that silo.
-.IP \[bu]
-If you have determined that it really is necessary to create
-a new capability for your feature,
-don't make or name it as a "single-use" capability.
-Thus, for example, the addition of the highly specific
-.B CAP_SYS_PACCT
-was probably a mistake.
-Instead, try to identify and name your new capability as a broader
-silo into which other related future use cases might fit.
-.\"
-.SS Thread capability sets
-Each thread has the following capability sets containing zero or more
-of the above capabilities:
-.TP
-.I Permitted
-This is a limiting superset for the effective
-capabilities that the thread may assume.
-It is also a limiting superset for the capabilities that
-may be added to the inheritable set by a thread that does not have the
-.B CAP_SETPCAP
-capability in its effective set.
-.IP
-If a thread drops a capability from its permitted set,
-it can never reacquire that capability (unless it
-.BR execve (2)s
-either a set-user-ID-root program, or
-a program whose associated file capabilities grant that capability).
-.TP
-.I Inheritable
-This is a set of capabilities preserved across an
-.BR execve (2).
-Inheritable capabilities remain inheritable when executing any program,
-and inheritable capabilities are added to the permitted set when executing
-a program that has the corresponding bits set in the file inheritable set.
-.IP
-Because inheritable capabilities are not generally preserved across
-.BR execve (2)
-when running as a non-root user, applications that wish to run helper
-programs with elevated capabilities should consider using
-ambient capabilities, described below.
-.TP
-.I Effective
-This is the set of capabilities used by the kernel to
-perform permission checks for the thread.
-.TP
-.IR Bounding " (per-thread since Linux 2.6.25)"
-The capability bounding set is a mechanism that can be used
-to limit the capabilities that are gained during
-.BR execve (2).
-.IP
-Since Linux 2.6.25, this is a per-thread capability set.
-In older kernels, the capability bounding set was a system wide attribute
-shared by all threads on the system.
-.IP
-For more details, see
-.I Capability bounding set
-below.
-.TP
-.IR Ambient " (since Linux 4.3)"
-.\" commit 58319057b7847667f0c9585b9de0e8932b0fdb08
-This is a set of capabilities that are preserved across an
-.BR execve (2)
-of a program that is not privileged.
-The ambient capability set obeys the invariant that no capability
-can ever be ambient if it is not both permitted and inheritable.
-.IP
-The ambient capability set can be directly modified using
-.BR prctl (2).
-Ambient capabilities are automatically lowered if either of
-the corresponding permitted or inheritable capabilities is lowered.
-.IP
-Executing a program that changes UID or GID due to the
-set-user-ID or set-group-ID bits or executing a program that has
-any file capabilities set will clear the ambient set.
-Ambient capabilities are added to the permitted set and
-assigned to the effective set when
-.BR execve (2)
-is called.
-If ambient capabilities cause a process's permitted and effective
-capabilities to increase during an
-.BR execve (2),
-this does not trigger the secure-execution mode described in
-.BR ld.so (8).
-.PP
-A child created via
-.BR fork (2)
-inherits copies of its parent's capability sets.
-For details on how
-.BR execve (2)
-affects capabilities, see
-.I Transformation of capabilities during execve()
-below.
-.PP
-Using
-.BR capset (2),
-a thread may manipulate its own capability sets; see
-.I Programmatically adjusting capability sets
-below.
-.PP
-Since Linux 3.2, the file
-.I /proc/sys/kernel/cap_last_cap
-.\" commit 73efc0394e148d0e15583e13712637831f926720
-exposes the numerical value of the highest capability
-supported by the running kernel;
-this can be used to determine the highest bit
-that may be set in a capability set.
-.\"
-.SS File capabilities
-Since Linux 2.6.24, the kernel supports
-associating capability sets with an executable file using
-.BR setcap (8).
-The file capability sets are stored in an extended attribute (see
-.BR setxattr (2)
-and
-.BR xattr (7))
-named
-.IR "security.capability" .
-Writing to this extended attribute requires the
-.B CAP_SETFCAP
-capability.
-The file capability sets,
-in conjunction with the capability sets of the thread,
-determine the capabilities of a thread after an
-.BR execve (2).
-.PP
-The three file capability sets are:
-.TP
-.IR Permitted " (formerly known as " forced ):
-These capabilities are automatically permitted to the thread,
-regardless of the thread's inheritable capabilities.
-.TP
-.IR Inheritable " (formerly known as " allowed ):
-This set is ANDed with the thread's inheritable set to determine which
-inheritable capabilities are enabled in the permitted set of
-the thread after the
-.BR execve (2).
-.TP
-.IR Effective :
-This is not a set, but rather just a single bit.
-If this bit is set, then during an
-.BR execve (2)
-all of the new permitted capabilities for the thread are
-also raised in the effective set.
-If this bit is not set, then after an
-.BR execve (2),
-none of the new permitted capabilities is in the new effective set.
-.IP
-Enabling the file effective capability bit implies
-that any file permitted or inheritable capability that causes a
-thread to acquire the corresponding permitted capability during an
-.BR execve (2)
-(see
-.I Transformation of capabilities during execve()
-below) will also acquire that
-capability in its effective set.
-Therefore, when assigning capabilities to a file
-.RB ( setcap (8),
-.BR cap_set_file (3),
-.BR cap_set_fd (3)),
-if we specify the effective flag as being enabled for any capability,
-then the effective flag must also be specified as enabled
-for all other capabilities for which the corresponding permitted or
-inheritable flag is enabled.
-.\"
-.SS File capability extended attribute versioning
-To allow extensibility,
-the kernel supports a scheme to encode a version number inside the
-.I security.capability
-extended attribute that is used to implement file capabilities.
-These version numbers are internal to the implementation,
-and not directly visible to user-space applications.
-To date, the following versions are supported:
-.TP
-.B VFS_CAP_REVISION_1
-This was the original file capability implementation,
-which supported 32-bit masks for file capabilities.
-.TP
-.BR VFS_CAP_REVISION_2 " (since Linux 2.6.25)"
-.\" commit e338d263a76af78fe8f38a72131188b58fceb591
-This version allows for file capability masks that are 64 bits in size,
-and was necessary as the number of supported capabilities grew beyond 32.
-The kernel transparently continues to support the execution of files
-that have 32-bit version 1 capability masks,
-but when adding capabilities to files that did not previously
-have capabilities, or modifying the capabilities of existing files,
-it automatically uses the version 2 scheme
-(or possibly the version 3 scheme, as described below).
-.TP
-.BR VFS_CAP_REVISION_3 " (since Linux 4.14)"
-.\" commit 8db6c34f1dbc8e06aa016a9b829b06902c3e1340
-Version 3 file capabilities are provided
-to support namespaced file capabilities (described below).
-.IP
-As with version 2 file capabilities,
-version 3 capability masks are 64 bits in size.
-But in addition, the root user ID of namespace is encoded in the
-.I security.capability
-extended attribute.
-(A namespace's root user ID is the value that user ID 0
-inside that namespace maps to in the initial user namespace.)
-.IP
-Version 3 file capabilities are designed to coexist
-with version 2 capabilities;
-that is, on a modern Linux system,
-there may be some files with version 2 capabilities
-while others have version 3 capabilities.
-.PP
-Before Linux 4.14,
-the only kind of file capability extended attribute
-that could be attached to a file was a
-.B VFS_CAP_REVISION_2
-attribute.
-Since Linux 4.14,
-the version of the
-.I security.capability
-extended attribute that is attached to a file
-depends on the circumstances in which the attribute was created.
-.PP
-Starting with Linux 4.14, a
-.I security.capability
-extended attribute is automatically created as (or converted to)
-a version 3
-.RB ( VFS_CAP_REVISION_3 )
-attribute if both of the following are true:
-.IP \[bu] 3
-The thread writing the attribute resides in a noninitial user namespace.
-(More precisely: the thread resides in a user namespace other
-than the one from which the underlying filesystem was mounted.)
-.IP \[bu]
-The thread has the
-.B CAP_SETFCAP
-capability over the file inode,
-meaning that (a) the thread has the
-.B CAP_SETFCAP
-capability in its own user namespace;
-and (b) the UID and GID of the file inode have mappings in
-the writer's user namespace.
-.PP
-When a
-.B VFS_CAP_REVISION_3
-.I security.capability
-extended attribute is created, the root user ID of the creating thread's
-user namespace is saved in the extended attribute.
-.PP
-By contrast, creating or modifying a
-.I security.capability
-extended attribute from a privileged
-.RB ( CAP_SETFCAP )
-thread that resides in the
-namespace where the underlying filesystem was mounted
-(this normally means the initial user namespace)
-automatically results in the creation of a version 2
-.RB ( VFS_CAP_REVISION_2 )
-attribute.
-.PP
-Note that the creation of a version 3
-.I security.capability
-extended attribute is automatic.
-That is to say, when a user-space application writes
-.RB ( setxattr (2))
-a
-.I security.capability
-attribute in the version 2 format,
-the kernel will automatically create a version 3 attribute
-if the attribute is created in the circumstances described above.
-Correspondingly, when a version 3
-.I security.capability
-attribute is retrieved
-.RB ( getxattr (2))
-by a process that resides inside a user namespace that was created by the
-root user ID (or a descendant of that user namespace),
-the returned attribute is (automatically)
-simplified to appear as a version 2 attribute
-(i.e., the returned value is the size of a version 2 attribute and does
-not include the root user ID).
-These automatic translations mean that no changes are required to
-user-space tools (e.g.,
-.BR setcap (1)
-and
-.BR getcap (1))
-in order for those tools to be used to create and retrieve version 3
-.I security.capability
-attributes.
-.PP
-Note that a file can have either a version 2 or a version 3
-.I security.capability
-extended attribute associated with it, but not both:
-creation or modification of the
-.I security.capability
-extended attribute will automatically modify the version
-according to the circumstances in which the extended attribute is
-created or modified.
-.\"
-.SS Transformation of capabilities during execve()
-During an
-.BR execve (2),
-the kernel calculates the new capabilities of
-the process using the following algorithm:
-.PP
-.in +4n
-.EX
-P'(ambient) = (file is privileged) ? 0 : P(ambient)
-\&
-P'(permitted) = (P(inheritable) & F(inheritable)) |
- (F(permitted) & P(bounding)) | P'(ambient)
-\&
-P'(effective) = F(effective) ? P'(permitted) : P'(ambient)
-\&
-P'(inheritable) = P(inheritable) [i.e., unchanged]
-\&
-P'(bounding) = P(bounding) [i.e., unchanged]
-.EE
-.in
-.PP
-where:
-.RS 4
-.TP
-P()
-denotes the value of a thread capability set before the
-.BR execve (2)
-.TP
-P'()
-denotes the value of a thread capability set after the
-.BR execve (2)
-.TP
-F()
-denotes a file capability set
-.RE
-.PP
-Note the following details relating to the above capability
-transformation rules:
-.IP \[bu] 3
-The ambient capability set is present only since Linux 4.3.
-When determining the transformation of the ambient set during
-.BR execve (2),
-a privileged file is one that has capabilities or
-has the set-user-ID or set-group-ID bit set.
-.IP \[bu]
-Prior to Linux 2.6.25,
-the bounding set was a system-wide attribute shared by all threads.
-That system-wide value was employed to calculate the new permitted set during
-.BR execve (2)
-in the same manner as shown above for
-.IR P(bounding) .
-.PP
-.IR Note :
-during the capability transitions described above,
-file capabilities may be ignored (treated as empty) for the same reasons
-that the set-user-ID and set-group-ID bits are ignored; see
-.BR execve (2).
-File capabilities are similarly ignored if the kernel was booted with the
-.I no_file_caps
-option.
-.PP
-.IR Note :
-according to the rules above,
-if a process with nonzero user IDs performs an
-.BR execve (2)
-then any capabilities that are present in
-its permitted and effective sets will be cleared.
-For the treatment of capabilities when a process with a
-user ID of zero performs an
-.BR execve (2),
-see
-.I Capabilities and execution of programs by root
-below.
-.\"
-.SS Safety checking for capability-dumb binaries
-A capability-dumb binary is an application that has been
-marked to have file capabilities, but has not been converted to use the
-.BR libcap (3)
-API to manipulate its capabilities.
-(In other words, this is a traditional set-user-ID-root program
-that has been switched to use file capabilities,
-but whose code has not been modified to understand capabilities.)
-For such applications,
-the effective capability bit is set on the file,
-so that the file permitted capabilities are automatically
-enabled in the process effective set when executing the file.
-The kernel recognizes a file which has the effective capability bit set
-as capability-dumb for the purpose of the check described here.
-.PP
-When executing a capability-dumb binary,
-the kernel checks if the process obtained all permitted capabilities
-that were specified in the file permitted set,
-after the capability transformations described above have been performed.
-(The typical reason why this might
-.I not
-occur is that the capability bounding set masked out some
-of the capabilities in the file permitted set.)
-If the process did not obtain the full set of
-file permitted capabilities, then
-.BR execve (2)
-fails with the error
-.BR EPERM .
-This prevents possible security risks that could arise when
-a capability-dumb application is executed with less privilege than it needs.
-Note that, by definition,
-the application could not itself recognize this problem,
-since it does not employ the
-.BR libcap (3)
-API.
-.\"
-.SS Capabilities and execution of programs by root
-.\" See cap_bprm_set_creds(), bprm_caps_from_vfs_cap() and
-.\" handle_privileged_root() in security/commoncap.c (Linux 5.0 source)
-In order to mirror traditional UNIX semantics,
-the kernel performs special treatment of file capabilities when
-a process with UID 0 (root) executes a program and
-when a set-user-ID-root program is executed.
-.PP
-After having performed any changes to the process effective ID that
-were triggered by the set-user-ID mode bit of the binary\[em]e.g.,
-switching the effective user ID to 0 (root) because
-a set-user-ID-root program was executed\[em]the
-kernel calculates the file capability sets as follows:
-.IP (1) 5
-If the real or effective user ID of the process is 0 (root),
-then the file inheritable and permitted sets are ignored;
-instead they are notionally considered to be all ones
-(i.e., all capabilities enabled).
-(There is one exception to this behavior, described in
-.I Set-user-ID-root programs that have file capabilities
-below.)
-.IP (2)
-If the effective user ID of the process is 0 (root) or
-the file effective bit is in fact enabled,
-then the file effective bit is notionally defined to be one (enabled).
-.PP
-These notional values for the file's capability sets are then used
-as described above to calculate the transformation of the process's
-capabilities during
-.BR execve (2).
-.PP
-Thus, when a process with nonzero UIDs
-.BR execve (2)s
-a set-user-ID-root program that does not have capabilities attached,
-or when a process whose real and effective UIDs are zero
-.BR execve (2)s
-a program, the calculation of the process's new
-permitted capabilities simplifies to:
-.PP
-.in +4n
-.EX
-P'(permitted) = P(inheritable) | P(bounding)
-\&
-P'(effective) = P'(permitted)
-.EE
-.in
-.PP
-Consequently, the process gains all capabilities in its permitted and
-effective capability sets,
-except those masked out by the capability bounding set.
-(In the calculation of P'(permitted),
-the P'(ambient) term can be simplified away because it is by
-definition a proper subset of P(inheritable).)
-.PP
-The special treatments of user ID 0 (root) described in this subsection
-can be disabled using the securebits mechanism described below.
-.\"
-.\"
-.SS Set-user-ID-root programs that have file capabilities
-There is one exception to the behavior described in
-.I Capabilities and execution of programs by root
-above.
-If (a) the binary that is being executed has capabilities attached and
-(b) the real user ID of the process is
-.I not
-0 (root) and
-(c) the effective user ID of the process
-.I is
-0 (root), then the file capability bits are honored
-(i.e., they are not notionally considered to be all ones).
-The usual way in which this situation can arise is when executing
-a set-UID-root program that also has file capabilities.
-When such a program is executed,
-the process gains just the capabilities granted by the program
-(i.e., not all capabilities,
-as would occur when executing a set-user-ID-root program
-that does not have any associated file capabilities).
-.PP
-Note that one can assign empty capability sets to a program file,
-and thus it is possible to create a set-user-ID-root program that
-changes the effective and saved set-user-ID of the process
-that executes the program to 0,
-but confers no capabilities to that process.
-.\"
-.SS Capability bounding set
-The capability bounding set is a security mechanism that can be used
-to limit the capabilities that can be gained during an
-.BR execve (2).
-The bounding set is used in the following ways:
-.IP \[bu] 3
-During an
-.BR execve (2),
-the capability bounding set is ANDed with the file permitted
-capability set, and the result of this operation is assigned to the
-thread's permitted capability set.
-The capability bounding set thus places a limit on the permitted
-capabilities that may be granted by an executable file.
-.IP \[bu]
-(Since Linux 2.6.25)
-The capability bounding set acts as a limiting superset for
-the capabilities that a thread can add to its inheritable set using
-.BR capset (2).
-This means that if a capability is not in the bounding set,
-then a thread can't add this capability to its
-inheritable set, even if it was in its permitted capabilities,
-and thereby cannot have this capability preserved in its
-permitted set when it
-.BR execve (2)s
-a file that has the capability in its inheritable set.
-.PP
-Note that the bounding set masks the file permitted capabilities,
-but not the inheritable capabilities.
-If a thread maintains a capability in its inheritable set
-that is not in its bounding set,
-then it can still gain that capability in its permitted set
-by executing a file that has the capability in its inheritable set.
-.PP
-Depending on the kernel version, the capability bounding set is either
-a system-wide attribute, or a per-process attribute.
-.PP
-.B "Capability bounding set from Linux 2.6.25 onward"
-.PP
-From Linux 2.6.25, the
-.I "capability bounding set"
-is a per-thread attribute.
-(The system-wide capability bounding set described below no longer exists.)
-.PP
-The bounding set is inherited at
-.BR fork (2)
-from the thread's parent, and is preserved across an
-.BR execve (2).
-.PP
-A thread may remove capabilities from its capability bounding set using the
-.BR prctl (2)
-.B PR_CAPBSET_DROP
-operation, provided it has the
-.B CAP_SETPCAP
-capability.
-Once a capability has been dropped from the bounding set,
-it cannot be restored to that set.
-A thread can determine if a capability is in its bounding set using the
-.BR prctl (2)
-.B PR_CAPBSET_READ
-operation.
-.PP
-Removing capabilities from the bounding set is supported only if file
-capabilities are compiled into the kernel.
-Before Linux 2.6.33,
-file capabilities were an optional feature configurable via the
-.B CONFIG_SECURITY_FILE_CAPABILITIES
-option.
-Since Linux 2.6.33,
-.\" commit b3a222e52e4d4be77cc4520a57af1a4a0d8222d1
-the configuration option has been removed
-and file capabilities are always part of the kernel.
-When file capabilities are compiled into the kernel, the
-.B init
-process (the ancestor of all processes) begins with a full bounding set.
-If file capabilities are not compiled into the kernel, then
-.B init
-begins with a full bounding set minus
-.BR CAP_SETPCAP ,
-because this capability has a different meaning when there are
-no file capabilities.
-.PP
-Removing a capability from the bounding set does not remove it
-from the thread's inheritable set.
-However it does prevent the capability from being added
-back into the thread's inheritable set in the future.
-.PP
-.B "Capability bounding set prior to Linux 2.6.25"
-.PP
-Before Linux 2.6.25, the capability bounding set is a system-wide
-attribute that affects all threads on the system.
-The bounding set is accessible via the file
-.IR /proc/sys/kernel/cap\-bound .
-(Confusingly, this bit mask parameter is expressed as a
-signed decimal number in
-.IR /proc/sys/kernel/cap\-bound .)
-.PP
-Only the
-.B init
-process may set capabilities in the capability bounding set;
-other than that, the superuser (more precisely: a process with the
-.B CAP_SYS_MODULE
-capability) may only clear capabilities from this set.
-.PP
-On a standard system the capability bounding set always masks out the
-.B CAP_SETPCAP
-capability.
-To remove this restriction (dangerous!), modify the definition of
-.B CAP_INIT_EFF_SET
-in
-.I include/linux/capability.h
-and rebuild the kernel.
-.PP
-The system-wide capability bounding set feature was added
-to Linux 2.2.11.
-.\"
-.\"
-.\"
-.SS Effect of user ID changes on capabilities
-To preserve the traditional semantics for transitions between
-0 and nonzero user IDs,
-the kernel makes the following changes to a thread's capability
-sets on changes to the thread's real, effective, saved set,
-and filesystem user IDs (using
-.BR setuid (2),
-.BR setresuid (2),
-or similar):
-.IP \[bu] 3
-If one or more of the real, effective, or saved set user IDs
-was previously 0, and as a result of the UID changes all of these IDs
-have a nonzero value,
-then all capabilities are cleared from the permitted, effective, and ambient
-capability sets.
-.IP \[bu]
-If the effective user ID is changed from 0 to nonzero,
-then all capabilities are cleared from the effective set.
-.IP \[bu]
-If the effective user ID is changed from nonzero to 0,
-then the permitted set is copied to the effective set.
-.IP \[bu]
-If the filesystem user ID is changed from 0 to nonzero (see
-.BR setfsuid (2)),
-then the following capabilities are cleared from the effective set:
-.BR CAP_CHOWN ,
-.BR CAP_DAC_OVERRIDE ,
-.BR CAP_DAC_READ_SEARCH ,
-.BR CAP_FOWNER ,
-.BR CAP_FSETID ,
-.B CAP_LINUX_IMMUTABLE
-(since Linux 2.6.30),
-.BR CAP_MAC_OVERRIDE ,
-and
-.B CAP_MKNOD
-(since Linux 2.6.30).
-If the filesystem UID is changed from nonzero to 0,
-then any of these capabilities that are enabled in the permitted set
-are enabled in the effective set.
-.PP
-If a thread that has a 0 value for one or more of its user IDs wants
-to prevent its permitted capability set being cleared when it resets
-all of its user IDs to nonzero values, it can do so using the
-.B SECBIT_KEEP_CAPS
-securebits flag described below.
-.\"
-.SS Programmatically adjusting capability sets
-A thread can retrieve and change its permitted, effective, and inheritable
-capability sets using the
-.BR capget (2)
-and
-.BR capset (2)
-system calls.
-However, the use of
-.BR cap_get_proc (3)
-and
-.BR cap_set_proc (3),
-both provided in the
-.I libcap
-package,
-is preferred for this purpose.
-The following rules govern changes to the thread capability sets:
-.IP \[bu] 3
-If the caller does not have the
-.B CAP_SETPCAP
-capability,
-the new inheritable set must be a subset of the combination
-of the existing inheritable and permitted sets.
-.IP \[bu]
-(Since Linux 2.6.25)
-The new inheritable set must be a subset of the combination of the
-existing inheritable set and the capability bounding set.
-.IP \[bu]
-The new permitted set must be a subset of the existing permitted set
-(i.e., it is not possible to acquire permitted capabilities
-that the thread does not currently have).
-.IP \[bu]
-The new effective set must be a subset of the new permitted set.
-.SS The securebits flags: establishing a capabilities-only environment
-.\" For some background:
-.\" see http://lwn.net/Articles/280279/ and
-.\" http://article.gmane.org/gmane.linux.kernel.lsm/5476/
-Starting with Linux 2.6.26,
-and with a kernel in which file capabilities are enabled,
-Linux implements a set of per-thread
-.I securebits
-flags that can be used to disable special handling of capabilities for UID 0
-.RI ( root ).
-These flags are as follows:
-.TP
-.B SECBIT_KEEP_CAPS
-Setting this flag allows a thread that has one or more 0 UIDs to retain
-capabilities in its permitted set
-when it switches all of its UIDs to nonzero values.
-If this flag is not set,
-then such a UID switch causes the thread to lose all permitted capabilities.
-This flag is always cleared on an
-.BR execve (2).
-.IP
-Note that even with the
-.B SECBIT_KEEP_CAPS
-flag set, the effective capabilities of a thread are cleared when it
-switches its effective UID to a nonzero value.
-However,
-if the thread has set this flag and its effective UID is already nonzero,
-and the thread subsequently switches all other UIDs to nonzero values,
-then the effective capabilities will not be cleared.
-.IP
-The setting of the
-.B SECBIT_KEEP_CAPS
-flag is ignored if the
-.B SECBIT_NO_SETUID_FIXUP
-flag is set.
-(The latter flag provides a superset of the effect of the former flag.)
-.IP
-This flag provides the same functionality as the older
-.BR prctl (2)
-.B PR_SET_KEEPCAPS
-operation.
-.TP
-.B SECBIT_NO_SETUID_FIXUP
-Setting this flag stops the kernel from adjusting the process's
-permitted, effective, and ambient capability sets when
-the thread's effective and filesystem UIDs are switched between
-zero and nonzero values.
-See
-.I Effect of user ID changes on capabilities
-above.
-.TP
-.B SECBIT_NOROOT
-If this bit is set, then the kernel does not grant capabilities
-when a set-user-ID-root program is executed, or when a process with
-an effective or real UID of 0 calls
-.BR execve (2).
-(See
-.I Capabilities and execution of programs by root
-above.)
-.TP
-.B SECBIT_NO_CAP_AMBIENT_RAISE
-Setting this flag disallows raising ambient capabilities via the
-.BR prctl (2)
-.B PR_CAP_AMBIENT_RAISE
-operation.
-.PP
-Each of the above "base" flags has a companion "locked" flag.
-Setting any of the "locked" flags is irreversible,
-and has the effect of preventing further changes to the
-corresponding "base" flag.
-The locked flags are:
-.BR SECBIT_KEEP_CAPS_LOCKED ,
-.BR SECBIT_NO_SETUID_FIXUP_LOCKED ,
-.BR SECBIT_NOROOT_LOCKED ,
-and
-.BR SECBIT_NO_CAP_AMBIENT_RAISE_LOCKED .
-.PP
-The
-.I securebits
-flags can be modified and retrieved using the
-.BR prctl (2)
-.B PR_SET_SECUREBITS
-and
-.B PR_GET_SECUREBITS
-operations.
-The
-.B CAP_SETPCAP
-capability is required to modify the flags.
-Note that the
-.B SECBIT_*
-constants are available only after including the
-.I <linux/securebits.h>
-header file.
-.PP
-The
-.I securebits
-flags are inherited by child processes.
-During an
-.BR execve (2),
-all of the flags are preserved, except
-.B SECBIT_KEEP_CAPS
-which is always cleared.
-.PP
-An application can use the following call to lock itself,
-and all of its descendants,
-into an environment where the only way of gaining capabilities
-is by executing a program with associated file capabilities:
-.PP
-.in +4n
-.EX
-prctl(PR_SET_SECUREBITS,
- /* SECBIT_KEEP_CAPS off */
- SECBIT_KEEP_CAPS_LOCKED |
- SECBIT_NO_SETUID_FIXUP |
- SECBIT_NO_SETUID_FIXUP_LOCKED |
- SECBIT_NOROOT |
- SECBIT_NOROOT_LOCKED);
- /* Setting/locking SECBIT_NO_CAP_AMBIENT_RAISE
- is not required */
-.EE
-.in
-.\"
-.\"
-.SS Per-user-namespace """set-user-ID-root""" programs
-A set-user-ID program whose UID matches the UID that
-created a user namespace will confer capabilities
-in the process's permitted and effective sets
-when executed by any process inside that namespace
-or any descendant user namespace.
-.PP
-The rules about the transformation of the process's capabilities during the
-.BR execve (2)
-are exactly as described in
-.I Transformation of capabilities during execve()
-and
-.I Capabilities and execution of programs by root
-above,
-with the difference that, in the latter subsection, "root"
-is the UID of the creator of the user namespace.
-.\"
-.\"
-.SS Namespaced file capabilities
-.\" commit 8db6c34f1dbc8e06aa016a9b829b06902c3e1340
-Traditional (i.e., version 2) file capabilities associate
-only a set of capability masks with a binary executable file.
-When a process executes a binary with such capabilities,
-it gains the associated capabilities (within its user namespace)
-as per the rules described in
-.I Transformation of capabilities during execve()
-above.
-.PP
-Because version 2 file capabilities confer capabilities to
-the executing process regardless of which user namespace it resides in,
-only privileged processes are permitted to associate capabilities with a file.
-Here, "privileged" means a process that has the
-.B CAP_SETFCAP
-capability in the user namespace where the filesystem was mounted
-(normally the initial user namespace).
-This limitation renders file capabilities useless for certain use cases.
-For example, in user-namespaced containers,
-it can be desirable to be able to create a binary that
-confers capabilities only to processes executed inside that container,
-but not to processes that are executed outside the container.
-.PP
-Linux 4.14 added so-called namespaced file capabilities
-to support such use cases.
-Namespaced file capabilities are recorded as version 3 (i.e.,
-.BR VFS_CAP_REVISION_3 )
-.I security.capability
-extended attributes.
-Such an attribute is automatically created in the circumstances described
-in
-.I File capability extended attribute versioning
-above.
-When a version 3
-.I security.capability
-extended attribute is created,
-the kernel records not just the capability masks in the extended attribute,
-but also the namespace root user ID.
-.PP
-As with a binary that has
-.B VFS_CAP_REVISION_2
-file capabilities, a binary with
-.B VFS_CAP_REVISION_3
-file capabilities confers capabilities to a process during
-.BR execve ().
-However, capabilities are conferred only if the binary is executed by
-a process that resides in a user namespace whose
-UID 0 maps to the root user ID that is saved in the extended attribute,
-or when executed by a process that resides in a descendant of such a namespace.
-.\"
-.\"
-.SS Interaction with user namespaces
-For further information on the interaction of
-capabilities and user namespaces, see
-.BR user_namespaces (7).
-.SH STANDARDS
-No standards govern capabilities, but the Linux capability implementation
-is based on the withdrawn
-.UR https://archive.org\:/details\:/posix_1003.1e\-990310
-POSIX.1e draft standard
-.UE .
-.SH NOTES
-When attempting to
-.BR strace (1)
-binaries that have capabilities (or set-user-ID-root binaries),
-you may find the
-.I \-u <username>
-option useful.
-Something like:
-.PP
-.in +4n
-.EX
-$ \fBsudo strace \-o trace.log \-u ceci ./myprivprog\fP
-.EE
-.in
-.PP
-From Linux 2.5.27 to Linux 2.6.26,
-.\" commit 5915eb53861c5776cfec33ca4fcc1fd20d66dd27 removed
-.\" CONFIG_SECURITY_CAPABILITIES
-capabilities were an optional kernel component,
-and could be enabled/disabled via the
-.B CONFIG_SECURITY_CAPABILITIES
-kernel configuration option.
-.PP
-The
-.IR /proc/ pid /task/TID/status
-file can be used to view the capability sets of a thread.
-The
-.IR /proc/ pid /status
-file shows the capability sets of a process's main thread.
-Before Linux 3.8, nonexistent capabilities were shown as being
-enabled (1) in these sets.
-Since Linux 3.8,
-.\" 7b9a7ec565505699f503b4fcf61500dceb36e744
-all nonexistent capabilities (above
-.BR CAP_LAST_CAP )
-are shown as disabled (0).
-.PP
-The
-.I libcap
-package provides a suite of routines for setting and
-getting capabilities that is more comfortable and less likely
-to change than the interface provided by
-.BR capset (2)
-and
-.BR capget (2).
-This package also provides the
-.BR setcap (8)
-and
-.BR getcap (8)
-programs.
-It can be found at
-.br
-.UR https://git.kernel.org\:/pub\:/scm\:/libs\:/libcap\:/libcap.git\:/refs/
-.UE .
-.PP
-Before Linux 2.6.24, and from Linux 2.6.24 to Linux 2.6.32 if
-file capabilities are not enabled, a thread with the
-.B CAP_SETPCAP
-capability can manipulate the capabilities of threads other than itself.
-However, this is only theoretically possible,
-since no thread ever has
-.B CAP_SETPCAP
-in either of these cases:
-.IP \[bu] 3
-In the pre-2.6.25 implementation the system-wide capability bounding set,
-.IR /proc/sys/kernel/cap\-bound ,
-always masks out the
-.B CAP_SETPCAP
-capability, and this can not be changed
-without modifying the kernel source and rebuilding the kernel.
-.IP \[bu]
-If file capabilities are disabled (i.e., the kernel
-.B CONFIG_SECURITY_FILE_CAPABILITIES
-option is disabled), then
-.B init
-starts out with the
-.B CAP_SETPCAP
-capability removed from its per-process bounding
-set, and that bounding set is inherited by all other processes
-created on the system.
-.SH SEE ALSO
-.BR capsh (1),
-.BR setpriv (1),
-.BR prctl (2),
-.BR setfsuid (2),
-.BR cap_clear (3),
-.BR cap_copy_ext (3),
-.BR cap_from_text (3),
-.BR cap_get_file (3),
-.BR cap_get_proc (3),
-.BR cap_init (3),
-.BR capgetp (3),
-.BR capsetp (3),
-.BR libcap (3),
-.BR proc (5),
-.BR credentials (7),
-.BR pthreads (7),
-.BR user_namespaces (7),
-.BR captest (8), \" from libcap-ng
-.BR filecap (8), \" from libcap-ng
-.BR getcap (8),
-.BR getpcaps (8),
-.BR netcap (8), \" from libcap-ng
-.BR pscap (8), \" from libcap-ng
-.BR setcap (8)
-.PP
-.I include/linux/capability.h
-in the Linux kernel source tree
diff --git a/man7/cgroup_namespaces.7 b/man7/cgroup_namespaces.7
deleted file mode 100644
index cb7778695..000000000
--- a/man7/cgroup_namespaces.7
+++ /dev/null
@@ -1,248 +0,0 @@
-.\" Copyright (c) 2016 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH cgroup_namespaces 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cgroup_namespaces \- overview of Linux cgroup namespaces
-.SH DESCRIPTION
-For an overview of namespaces, see
-.BR namespaces (7).
-.PP
-Cgroup namespaces virtualize the view of a process's cgroups (see
-.BR cgroups (7))
-as seen via
-.IR /proc/ pid /cgroup
-and
-.IR /proc/ pid /mountinfo .
-.PP
-Each cgroup namespace has its own set of cgroup root directories.
-These root directories are the base points for the relative
-locations displayed in the corresponding records in the
-.IR /proc/ pid /cgroup
-file.
-When a process creates a new cgroup namespace using
-.BR clone (2)
-or
-.BR unshare (2)
-with the
-.B CLONE_NEWCGROUP
-flag, its current
-cgroups directories become the cgroup root directories
-of the new namespace.
-(This applies both for the cgroups version 1 hierarchies
-and the cgroups version 2 unified hierarchy.)
-.PP
-When reading the cgroup memberships of a "target" process from
-.IR /proc/ pid /cgroup ,
-the pathname shown in the third field of each record will be
-relative to the reading process's root directory
-for the corresponding cgroup hierarchy.
-If the cgroup directory of the target process lies outside
-the root directory of the reading process's cgroup namespace,
-then the pathname will show
-.I ../
-entries for each ancestor level in the cgroup hierarchy.
-.PP
-The following shell session demonstrates the effect of creating
-a new cgroup namespace.
-.PP
-First, (as superuser) in a shell in the initial cgroup namespace,
-we create a child cgroup in the
-.I freezer
-hierarchy, and place a process in that cgroup that we will
-use as part of the demonstration below:
-.PP
-.in +4n
-.EX
-# \fBmkdir \-p /sys/fs/cgroup/freezer/sub2\fP
-# \fBsleep 10000 &\fP # Create a process that lives for a while
-[1] 20124
-# \fBecho 20124 > /sys/fs/cgroup/freezer/sub2/cgroup.procs\fP
-.EE
-.in
-.PP
-We then create another child cgroup in the
-.I freezer
-hierarchy and put the shell into that cgroup:
-.PP
-.in +4n
-.EX
-# \fBmkdir \-p /sys/fs/cgroup/freezer/sub\fP
-# \fBecho $$\fP # Show PID of this shell
-30655
-# \fBecho 30655 > /sys/fs/cgroup/freezer/sub/cgroup.procs\fP
-# \fBcat /proc/self/cgroup | grep freezer\fP
-7:freezer:/sub
-.EE
-.in
-.PP
-Next, we use
-.BR unshare (1)
-to create a process running a new shell in new cgroup and mount namespaces:
-.PP
-.in +4n
-.EX
-# \fBPS1="sh2# " unshare \-Cm bash\fP
-.EE
-.in
-.PP
-From the new shell started by
-.BR unshare (1),
-we then inspect the
-.IR /proc/ pid /cgroup
-files of, respectively, the new shell,
-a process that is in the initial cgroup namespace
-.RI ( init ,
-with PID 1), and the process in the sibling cgroup
-.RI ( sub2 ):
-.PP
-.in +4n
-.EX
-sh2# \fBcat /proc/self/cgroup | grep freezer\fP
-7:freezer:/
-sh2# \fBcat /proc/1/cgroup | grep freezer\fP
-7:freezer:/..
-sh2# \fBcat /proc/20124/cgroup | grep freezer\fP
-7:freezer:/../sub2
-.EE
-.in
-.PP
-From the output of the first command,
-we see that the freezer cgroup membership of the new shell
-(which is in the same cgroup as the initial shell)
-is shown defined relative to the freezer cgroup root directory
-that was established when the new cgroup namespace was created.
-(In absolute terms,
-the new shell is in the
-.I /sub
-freezer cgroup,
-and the root directory of the freezer cgroup hierarchy
-in the new cgroup namespace is also
-.IR /sub .
-Thus, the new shell's cgroup membership is displayed as \[aq]/\[aq].)
-.PP
-However, when we look in
-.I /proc/self/mountinfo
-we see the following anomaly:
-.PP
-.in +4n
-.EX
-sh2# \fBcat /proc/self/mountinfo | grep freezer\fP
-155 145 0:32 /.. /sys/fs/cgroup/freezer ...
-.EE
-.in
-.PP
-The fourth field of this line
-.RI ( /.. )
-should show the
-directory in the cgroup filesystem which forms the root of this mount.
-Since by the definition of cgroup namespaces, the process's current
-freezer cgroup directory became its root freezer cgroup directory,
-we should see \[aq]/\[aq] in this field.
-The problem here is that we are seeing a mount entry for the cgroup
-filesystem corresponding to the initial cgroup namespace
-(whose cgroup filesystem is indeed rooted at the parent directory of
-.IR sub ).
-To fix this problem, we must remount the freezer cgroup filesystem
-from the new shell (i.e., perform the mount from a process that is in the
-new cgroup namespace), after which we see the expected results:
-.PP
-.in +4n
-.EX
-sh2# \fBmount \-\-make\-rslave /\fP # Don\[aq]t propagate mount events
- # to other namespaces
-sh2# \fBumount /sys/fs/cgroup/freezer\fP
-sh2# \fBmount \-t cgroup \-o freezer freezer /sys/fs/cgroup/freezer\fP
-sh2# \fBcat /proc/self/mountinfo | grep freezer\fP
-155 145 0:32 / /sys/fs/cgroup/freezer rw,relatime ...
-.EE
-.in
-.\"
-.SH STANDARDS
-Linux.
-.SH NOTES
-Use of cgroup namespaces requires a kernel that is configured with the
-.B CONFIG_CGROUPS
-option.
-.PP
-The virtualization provided by cgroup namespaces serves a number of purposes:
-.IP \[bu] 3
-It prevents information leaks whereby cgroup directory paths outside of
-a container would otherwise be visible to processes in the container.
-Such leakages could, for example,
-reveal information about the container framework
-to containerized applications.
-.IP \[bu]
-It eases tasks such as container migration.
-The virtualization provided by cgroup namespaces
-allows containers to be isolated from knowledge of
-the pathnames of ancestor cgroups.
-Without such isolation, the full cgroup pathnames (displayed in
-.IR /proc/self/cgroups )
-would need to be replicated on the target system when migrating a container;
-those pathnames would also need to be unique,
-so that they don't conflict with other pathnames on the target system.
-.IP \[bu]
-It allows better confinement of containerized processes,
-because it is possible to mount the container's cgroup filesystems such that
-the container processes can't gain access to ancestor cgroup directories.
-Consider, for example, the following scenario:
-.RS
-.IP \[bu] 3
-We have a cgroup directory,
-.IR /cg/1 ,
-that is owned by user ID 9000.
-.IP \[bu]
-We have a process,
-.IR X ,
-also owned by user ID 9000,
-that is namespaced under the cgroup
-.I /cg/1/2
-(i.e.,
-.I X
-was placed in a new cgroup namespace via
-.BR clone (2)
-or
-.BR unshare (2)
-with the
-.B CLONE_NEWCGROUP
-flag).
-.RE
-.IP
-In the absence of cgroup namespacing, because the cgroup directory
-.I /cg/1
-is owned (and writable) by UID 9000 and process
-.I X
-is also owned by user ID 9000, process
-.I X
-would be able to modify the contents of cgroups files
-(i.e., change cgroup settings) not only in
-.I /cg/1/2
-but also in the ancestor cgroup directory
-.IR /cg/1 .
-Namespacing process
-.I X
-under the cgroup directory
-.IR /cg/1/2 ,
-in combination with suitable mount operations
-for the cgroup filesystem (as shown above),
-prevents it modifying files in
-.IR /cg/1 ,
-since it cannot even see the contents of that directory
-(or of further removed cgroup ancestor directories).
-Combined with correct enforcement of hierarchical limits,
-this prevents process
-.I X
-from escaping the limits imposed by ancestor cgroups.
-.SH SEE ALSO
-.BR unshare (1),
-.BR clone (2),
-.BR setns (2),
-.BR unshare (2),
-.BR proc (5),
-.BR cgroups (7),
-.BR credentials (7),
-.BR namespaces (7),
-.BR user_namespaces (7)
diff --git a/man7/cgroups.7 b/man7/cgroups.7
deleted file mode 100644
index 6ac3f59e1..000000000
--- a/man7/cgroups.7
+++ /dev/null
@@ -1,1914 +0,0 @@
-.\" Copyright (C) 2015 Serge Hallyn <serge@hallyn.com>
-.\" and Copyright (C) 2016, 2017 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH cgroups 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cgroups \- Linux control groups
-.SH DESCRIPTION
-Control groups, usually referred to as cgroups,
-are a Linux kernel feature which allow processes to
-be organized into hierarchical groups whose usage of
-various types of resources can then be limited and monitored.
-The kernel's cgroup interface is provided through
-a pseudo-filesystem called cgroupfs.
-Grouping is implemented in the core cgroup kernel code,
-while resource tracking and limits are implemented in
-a set of per-resource-type subsystems (memory, CPU, and so on).
-.\"
-.SS Terminology
-A
-.I cgroup
-is a collection of processes that are bound to a set of
-limits or parameters defined via the cgroup filesystem.
-.PP
-A
-.I subsystem
-is a kernel component that modifies the behavior of
-the processes in a cgroup.
-Various subsystems have been implemented, making it possible to do things
-such as limiting the amount of CPU time and memory available to a cgroup,
-accounting for the CPU time used by a cgroup,
-and freezing and resuming execution of the processes in a cgroup.
-Subsystems are sometimes also known as
-.I resource controllers
-(or simply, controllers).
-.PP
-The cgroups for a controller are arranged in a
-.IR hierarchy .
-This hierarchy is defined by creating, removing, and
-renaming subdirectories within the cgroup filesystem.
-At each level of the hierarchy, attributes (e.g., limits) can be defined.
-The limits, control, and accounting provided by cgroups generally have
-effect throughout the subhierarchy underneath the cgroup where the
-attributes are defined.
-Thus, for example, the limits placed on
-a cgroup at a higher level in the hierarchy cannot be exceeded
-by descendant cgroups.
-.\"
-.SS Cgroups version 1 and version 2
-The initial release of the cgroups implementation was in Linux 2.6.24.
-Over time, various cgroup controllers have been added
-to allow the management of various types of resources.
-However, the development of these controllers was largely uncoordinated,
-with the result that many inconsistencies arose between controllers
-and management of the cgroup hierarchies became rather complex.
-A longer description of these problems can be found in the kernel
-source file
-.I Documentation/admin\-guide/cgroup\-v2.rst
-(or
-.I Documentation/cgroup\-v2.txt
-in Linux 4.17 and earlier).
-.PP
-Because of the problems with the initial cgroups implementation
-(cgroups version 1),
-starting in Linux 3.10, work began on a new,
-orthogonal implementation to remedy these problems.
-Initially marked experimental, and hidden behind the
-.I "\-o\ __DEVEL__sane_behavior"
-mount option, the new version (cgroups version 2)
-was eventually made official with the release of Linux 4.5.
-Differences between the two versions are described in the text below.
-The file
-.IR cgroup.sane_behavior ,
-present in cgroups v1, is a relic of this mount option.
-The file always reports "0" and is only retained for backward compatibility.
-.PP
-Although cgroups v2 is intended as a replacement for cgroups v1,
-the older system continues to exist
-(and for compatibility reasons is unlikely to be removed).
-Currently, cgroups v2 implements only a subset of the controllers
-available in cgroups v1.
-The two systems are implemented so that both v1 controllers and
-v2 controllers can be mounted on the same system.
-Thus, for example, it is possible to use those controllers
-that are supported under version 2,
-while also using version 1 controllers
-where version 2 does not yet support those controllers.
-The only restriction here is that a controller can't be simultaneously
-employed in both a cgroups v1 hierarchy and in the cgroups v2 hierarchy.
-.\"
-.SH CGROUPS VERSION 1
-Under cgroups v1, each controller may be mounted against a separate
-cgroup filesystem that provides its own hierarchical organization of the
-processes on the system.
-It is also possible to comount multiple (or even all) cgroups v1 controllers
-against the same cgroup filesystem, meaning that the comounted controllers
-manage the same hierarchical organization of processes.
-.PP
-For each mounted hierarchy,
-the directory tree mirrors the control group hierarchy.
-Each control group is represented by a directory, with each of its child
-control cgroups represented as a child directory.
-For instance,
-.I /user/joe/1.session
-represents control group
-.IR 1.session ,
-which is a child of cgroup
-.IR joe ,
-which is a child of
-.IR /user .
-Under each cgroup directory is a set of files which can be read or
-written to, reflecting resource limits and a few general cgroup
-properties.
-.\"
-.SS Tasks (threads) versus processes
-In cgroups v1, a distinction is drawn between
-.I processes
-and
-.IR tasks .
-In this view, a process can consist of multiple tasks
-(more commonly called threads, from a user-space perspective,
-and called such in the remainder of this man page).
-In cgroups v1, it is possible to independently manipulate
-the cgroup memberships of the threads in a process.
-.PP
-The cgroups v1 ability to split threads across different cgroups
-caused problems in some cases.
-For example, it made no sense for the
-.I memory
-controller,
-since all of the threads of a process share a single address space.
-Because of these problems,
-the ability to independently manipulate the cgroup memberships
-of the threads in a process was removed in the initial cgroups v2
-implementation, and subsequently restored in a more limited form
-(see the discussion of "thread mode" below).
-.\"
-.SS Mounting v1 controllers
-The use of cgroups requires a kernel built with the
-.B CONFIG_CGROUP
-option.
-In addition, each of the v1 controllers has an associated
-configuration option that must be set in order to employ that controller.
-.PP
-In order to use a v1 controller,
-it must be mounted against a cgroup filesystem.
-The usual place for such mounts is under a
-.BR tmpfs (5)
-filesystem mounted at
-.IR /sys/fs/cgroup .
-Thus, one might mount the
-.I cpu
-controller as follows:
-.PP
-.in +4n
-.EX
-mount \-t cgroup \-o cpu none /sys/fs/cgroup/cpu
-.EE
-.in
-.PP
-It is possible to comount multiple controllers against the same hierarchy.
-For example, here the
-.I cpu
-and
-.I cpuacct
-controllers are comounted against a single hierarchy:
-.PP
-.in +4n
-.EX
-mount \-t cgroup \-o cpu,cpuacct none /sys/fs/cgroup/cpu,cpuacct
-.EE
-.in
-.PP
-Comounting controllers has the effect that a process is in the same cgroup for
-all of the comounted controllers.
-Separately mounting controllers allows a process to
-be in cgroup
-.I /foo1
-for one controller while being in
-.I /foo2/foo3
-for another.
-.PP
-It is possible to comount all v1 controllers against the same hierarchy:
-.PP
-.in +4n
-.EX
-mount \-t cgroup \-o all cgroup /sys/fs/cgroup
-.EE
-.in
-.PP
-(One can achieve the same result by omitting
-.IR "\-o all" ,
-since it is the default if no controllers are explicitly specified.)
-.PP
-It is not possible to mount the same controller
-against multiple cgroup hierarchies.
-For example, it is not possible to mount both the
-.I cpu
-and
-.I cpuacct
-controllers against one hierarchy, and to mount the
-.I cpu
-controller alone against another hierarchy.
-It is possible to create multiple mount with exactly
-the same set of comounted controllers.
-However, in this case all that results is multiple mount points
-providing a view of the same hierarchy.
-.PP
-Note that on many systems, the v1 controllers are automatically mounted under
-.IR /sys/fs/cgroup ;
-in particular,
-.BR systemd (1)
-automatically creates such mounts.
-.\"
-.SS Unmounting v1 controllers
-A mounted cgroup filesystem can be unmounted using the
-.BR umount (8)
-command, as in the following example:
-.PP
-.in +4n
-.EX
-umount /sys/fs/cgroup/pids
-.EE
-.in
-.PP
-.IR "But note well" :
-a cgroup filesystem is unmounted only if it is not busy,
-that is, it has no child cgroups.
-If this is not the case, then the only effect of the
-.BR umount (8)
-is to make the mount invisible.
-Thus, to ensure that the mount is really removed,
-one must first remove all child cgroups,
-which in turn can be done only after all member processes
-have been moved from those cgroups to the root cgroup.
-.\"
-.SS Cgroups version 1 controllers
-Each of the cgroups version 1 controllers is governed
-by a kernel configuration option (listed below).
-Additionally, the availability of the cgroups feature is governed by the
-.B CONFIG_CGROUPS
-kernel configuration option.
-.TP
-.IR cpu " (since Linux 2.6.24; " \fBCONFIG_CGROUP_SCHED\fP )
-Cgroups can be guaranteed a minimum number of "CPU shares"
-when a system is busy.
-This does not limit a cgroup's CPU usage if the CPUs are not busy.
-For further information, see
-.I Documentation/scheduler/sched\-design\-CFS.rst
-(or
-.I Documentation/scheduler/sched\-design\-CFS.txt
-in Linux 5.2 and earlier).
-.IP
-In Linux 3.2,
-this controller was extended to provide CPU "bandwidth" control.
-If the kernel is configured with
-.BR CONFIG_CFS_BANDWIDTH ,
-then within each scheduling period
-(defined via a file in the cgroup directory), it is possible to define
-an upper limit on the CPU time allocated to the processes in a cgroup.
-This upper limit applies even if there is no other competition for the CPU.
-Further information can be found in the kernel source file
-.I Documentation/scheduler/sched\-bwc.rst
-(or
-.I Documentation/scheduler/sched\-bwc.txt
-in Linux 5.2 and earlier).
-.TP
-.IR cpuacct " (since Linux 2.6.24; " \fBCONFIG_CGROUP_CPUACCT\fP )
-This provides accounting for CPU usage by groups of processes.
-.IP
-Further information can be found in the kernel source file
-.I Documentation/admin\-guide/cgroup\-v1/cpuacct.rst
-(or
-.I Documentation/cgroup\-v1/cpuacct.txt
-in Linux 5.2 and earlier).
-.TP
-.IR cpuset " (since Linux 2.6.24; " \fBCONFIG_CPUSETS\fP )
-This cgroup can be used to bind the processes in a cgroup to
-a specified set of CPUs and NUMA nodes.
-.IP
-Further information can be found in the kernel source file
-.I Documentation/admin\-guide/cgroup\-v1/cpusets.rst
-(or
-.I Documentation/cgroup\-v1/cpusets.txt
-in Linux 5.2 and earlier).
-.
-.TP
-.IR memory " (since Linux 2.6.25; " \fBCONFIG_MEMCG\fP )
-The memory controller supports reporting and limiting of process memory, kernel
-memory, and swap used by cgroups.
-.IP
-Further information can be found in the kernel source file
-.I Documentation/admin\-guide/cgroup\-v1/memory.rst
-(or
-.I Documentation/cgroup\-v1/memory.txt
-in Linux 5.2 and earlier).
-.TP
-.IR devices " (since Linux 2.6.26; " \fBCONFIG_CGROUP_DEVICE\fP )
-This supports controlling which processes may create (mknod) devices as
-well as open them for reading or writing.
-The policies may be specified as allow-lists and deny-lists.
-Hierarchy is enforced, so new rules must not
-violate existing rules for the target or ancestor cgroups.
-.IP
-Further information can be found in the kernel source file
-.I Documentation/admin\-guide/cgroup\-v1/devices.rst
-(or
-.I Documentation/cgroup\-v1/devices.txt
-in Linux 5.2 and earlier).
-.TP
-.IR freezer " (since Linux 2.6.28; " \fBCONFIG_CGROUP_FREEZER\fP )
-The
-.I freezer
-cgroup can suspend and restore (resume) all processes in a cgroup.
-Freezing a cgroup
-.I /A
-also causes its children, for example, processes in
-.IR /A/B ,
-to be frozen.
-.IP
-Further information can be found in the kernel source file
-.I Documentation/admin\-guide/cgroup\-v1/freezer\-subsystem.rst
-(or
-.I Documentation/cgroup\-v1/freezer\-subsystem.txt
-in Linux 5.2 and earlier).
-.TP
-.IR net_cls " (since Linux 2.6.29; " \fBCONFIG_CGROUP_NET_CLASSID\fP )
-This places a classid, specified for the cgroup, on network packets
-created by a cgroup.
-These classids can then be used in firewall rules,
-as well as used to shape traffic using
-.BR tc (8).
-This applies only to packets
-leaving the cgroup, not to traffic arriving at the cgroup.
-.IP
-Further information can be found in the kernel source file
-.I Documentation/admin\-guide/cgroup\-v1/net_cls.rst
-(or
-.I Documentation/cgroup\-v1/net_cls.txt
-in Linux 5.2 and earlier).
-.TP
-.IR blkio " (since Linux 2.6.33; " \fBCONFIG_BLK_CGROUP\fP )
-The
-.I blkio
-cgroup controls and limits access to specified block devices by
-applying IO control in the form of throttling and upper limits against leaf
-nodes and intermediate nodes in the storage hierarchy.
-.IP
-Two policies are available.
-The first is a proportional-weight time-based division
-of disk implemented with CFQ.
-This is in effect for leaf nodes using CFQ.
-The second is a throttling policy which specifies
-upper I/O rate limits on a device.
-.IP
-Further information can be found in the kernel source file
-.I Documentation/admin\-guide/cgroup\-v1/blkio\-controller.rst
-(or
-.I Documentation/cgroup\-v1/blkio\-controller.txt
-in Linux 5.2 and earlier).
-.TP
-.IR perf_event " (since Linux 2.6.39; " \fBCONFIG_CGROUP_PERF\fP )
-This controller allows
-.I perf
-monitoring of the set of processes grouped in a cgroup.
-.IP
-Further information can be found in the kernel source files
-.TP
-.IR net_prio " (since Linux 3.3; " \fBCONFIG_CGROUP_NET_PRIO\fP )
-This allows priorities to be specified, per network interface, for cgroups.
-.IP
-Further information can be found in the kernel source file
-.I Documentation/admin\-guide/cgroup\-v1/net_prio.rst
-(or
-.I Documentation/cgroup\-v1/net_prio.txt
-in Linux 5.2 and earlier).
-.TP
-.IR hugetlb " (since Linux 3.5; " \fBCONFIG_CGROUP_HUGETLB\fP )
-This supports limiting the use of huge pages by cgroups.
-.IP
-Further information can be found in the kernel source file
-.I Documentation/admin\-guide/cgroup\-v1/hugetlb.rst
-(or
-.I Documentation/cgroup\-v1/hugetlb.txt
-in Linux 5.2 and earlier).
-.TP
-.IR pids " (since Linux 4.3; " \fBCONFIG_CGROUP_PIDS\fP )
-This controller permits limiting the number of process that may be created
-in a cgroup (and its descendants).
-.IP
-Further information can be found in the kernel source file
-.I Documentation/admin\-guide/cgroup\-v1/pids.rst
-(or
-.I Documentation/cgroup\-v1/pids.txt
-in Linux 5.2 and earlier).
-.TP
-.IR rdma " (since Linux 4.11; " \fBCONFIG_CGROUP_RDMA\fP )
-The RDMA controller permits limiting the use of
-RDMA/IB-specific resources per cgroup.
-.IP
-Further information can be found in the kernel source file
-.I Documentation/admin\-guide/cgroup\-v1/rdma.rst
-(or
-.I Documentation/cgroup\-v1/rdma.txt
-in Linux 5.2 and earlier).
-.\"
-.SS Creating cgroups and moving processes
-A cgroup filesystem initially contains a single root cgroup, '/',
-which all processes belong to.
-A new cgroup is created by creating a directory in the cgroup filesystem:
-.PP
-.in +4n
-.EX
-mkdir /sys/fs/cgroup/cpu/cg1
-.EE
-.in
-.PP
-This creates a new empty cgroup.
-.PP
-A process may be moved to this cgroup by writing its PID into the cgroup's
-.I cgroup.procs
-file:
-.PP
-.in +4n
-.EX
-echo $$ > /sys/fs/cgroup/cpu/cg1/cgroup.procs
-.EE
-.in
-.PP
-Only one PID at a time should be written to this file.
-.PP
-Writing the value 0 to a
-.I cgroup.procs
-file causes the writing process to be moved to the corresponding cgroup.
-.PP
-When writing a PID into the
-.IR cgroup.procs ,
-all threads in the process are moved into the new cgroup at once.
-.PP
-Within a hierarchy, a process can be a member of exactly one cgroup.
-Writing a process's PID to a
-.I cgroup.procs
-file automatically removes it from the cgroup of
-which it was previously a member.
-.PP
-The
-.I cgroup.procs
-file can be read to obtain a list of the processes that are
-members of a cgroup.
-The returned list of PIDs is not guaranteed to be in order.
-Nor is it guaranteed to be free of duplicates.
-(For example, a PID may be recycled while reading from the list.)
-.PP
-In cgroups v1, an individual thread can be moved to
-another cgroup by writing its thread ID
-(i.e., the kernel thread ID returned by
-.BR clone (2)
-and
-.BR gettid (2))
-to the
-.I tasks
-file in a cgroup directory.
-This file can be read to discover the set of threads
-that are members of the cgroup.
-.\"
-.SS Removing cgroups
-To remove a cgroup,
-it must first have no child cgroups and contain no (nonzombie) processes.
-So long as that is the case, one can simply
-remove the corresponding directory pathname.
-Note that files in a cgroup directory cannot and need not be
-removed.
-.\"
-.SS Cgroups v1 release notification
-Two files can be used to determine whether the kernel provides
-notifications when a cgroup becomes empty.
-A cgroup is considered to be empty when it contains no child
-cgroups and no member processes.
-.PP
-A special file in the root directory of each cgroup hierarchy,
-.IR release_agent ,
-can be used to register the pathname of a program that may be invoked when
-a cgroup in the hierarchy becomes empty.
-The pathname of the newly empty cgroup (relative to the cgroup mount point)
-is provided as the sole command-line argument when the
-.I release_agent
-program is invoked.
-The
-.I release_agent
-program might remove the cgroup directory,
-or perhaps repopulate it with a process.
-.PP
-The default value of the
-.I release_agent
-file is empty, meaning that no release agent is invoked.
-.PP
-The content of the
-.I release_agent
-file can also be specified via a mount option when the
-cgroup filesystem is mounted:
-.PP
-.in +4n
-.EX
-mount \-o release_agent=pathname ...
-.EE
-.in
-.PP
-Whether or not the
-.I release_agent
-program is invoked when a particular cgroup becomes empty is determined
-by the value in the
-.I notify_on_release
-file in the corresponding cgroup directory.
-If this file contains the value 0, then the
-.I release_agent
-program is not invoked.
-If it contains the value 1, the
-.I release_agent
-program is invoked.
-The default value for this file in the root cgroup is 0.
-At the time when a new cgroup is created,
-the value in this file is inherited from the corresponding file
-in the parent cgroup.
-.\"
-.SS Cgroup v1 named hierarchies
-In cgroups v1,
-it is possible to mount a cgroup hierarchy that has no attached controllers:
-.PP
-.in +4n
-.EX
-mount \-t cgroup \-o none,name=somename none /some/mount/point
-.EE
-.in
-.PP
-Multiple instances of such hierarchies can be mounted;
-each hierarchy must have a unique name.
-The only purpose of such hierarchies is to track processes.
-(See the discussion of release notification below.)
-An example of this is the
-.I name=systemd
-cgroup hierarchy that is used by
-.BR systemd (1)
-to track services and user sessions.
-.PP
-Since Linux 5.0, the
-.I cgroup_no_v1
-kernel boot option (described below) can be used to disable cgroup v1
-named hierarchies, by specifying
-.IR cgroup_no_v1=named .
-.\"
-.SH CGROUPS VERSION 2
-In cgroups v2,
-all mounted controllers reside in a single unified hierarchy.
-While (different) controllers may be simultaneously
-mounted under the v1 and v2 hierarchies,
-it is not possible to mount the same controller simultaneously
-under both the v1 and the v2 hierarchies.
-.PP
-The new behaviors in cgroups v2 are summarized here,
-and in some cases elaborated in the following subsections.
-.IP \[bu] 3
-Cgroups v2 provides a unified hierarchy against
-which all controllers are mounted.
-.IP \[bu]
-"Internal" processes are not permitted.
-With the exception of the root cgroup, processes may reside
-only in leaf nodes (cgroups that do not themselves contain child cgroups).
-The details are somewhat more subtle than this, and are described below.
-.IP \[bu]
-Active cgroups must be specified via the files
-.I cgroup.controllers
-and
-.IR cgroup.subtree_control .
-.IP \[bu]
-The
-.I tasks
-file has been removed.
-In addition, the
-.I cgroup.clone_children
-file that is employed by the
-.I cpuset
-controller has been removed.
-.IP \[bu]
-An improved mechanism for notification of empty cgroups is provided by the
-.I cgroup.events
-file.
-.PP
-For more changes, see the
-.I Documentation/admin\-guide/cgroup\-v2.rst
-file in the kernel source
-(or
-.I Documentation/cgroup\-v2.txt
-in Linux 4.17 and earlier).
-.
-.PP
-Some of the new behaviors listed above saw subsequent modification with
-the addition in Linux 4.14 of "thread mode" (described below).
-.\"
-.SS Cgroups v2 unified hierarchy
-In cgroups v1, the ability to mount different controllers
-against different hierarchies was intended to allow great flexibility
-for application design.
-In practice, though,
-the flexibility turned out to be less useful than expected,
-and in many cases added complexity.
-Therefore, in cgroups v2,
-all available controllers are mounted against a single hierarchy.
-The available controllers are automatically mounted,
-meaning that it is not necessary (or possible) to specify the controllers
-when mounting the cgroup v2 filesystem using a command such as the following:
-.PP
-.in +4n
-.EX
-mount \-t cgroup2 none /mnt/cgroup2
-.EE
-.in
-.PP
-A cgroup v2 controller is available only if it is not currently in use
-via a mount against a cgroup v1 hierarchy.
-Or, to put things another way, it is not possible to employ
-the same controller against both a v1 hierarchy and the unified v2 hierarchy.
-This means that it may be necessary first to unmount a v1 controller
-(as described above) before that controller is available in v2.
-Since
-.BR systemd (1)
-makes heavy use of some v1 controllers by default,
-it can in some cases be simpler to boot the system with
-selected v1 controllers disabled.
-To do this, specify the
-.I cgroup_no_v1=list
-option on the kernel boot command line;
-.I list
-is a comma-separated list of the names of the controllers to disable,
-or the word
-.I all
-to disable all v1 controllers.
-(This situation is correctly handled by
-.BR systemd (1),
-which falls back to operating without the specified controllers.)
-.PP
-Note that on many modern systems,
-.BR systemd (1)
-automatically mounts the
-.I cgroup2
-filesystem at
-.I /sys/fs/cgroup/unified
-during the boot process.
-.\"
-.SS Cgroups v2 mount options
-The following options
-.RI ( mount\~\-o )
-can be specified when mounting the group v2 filesystem:
-.TP
-.IR nsdelegate " (since Linux 4.15)"
-Treat cgroup namespaces as delegation boundaries.
-For details, see below.
-.TP
-.IR memory_localevents " (since Linux 5.2)"
-.\" commit 9852ae3fe5293264f01c49f2571ef7688f7823ce
-The
-.I memory.events
-should show statistics only for the cgroup itself,
-and not for any descendant cgroups.
-This was the behavior before Linux 5.2.
-Starting in Linux 5.2,
-the default behavior is to include statistics for descendant cgroups in
-.IR memory.events ,
-and this mount option can be used to revert to the legacy behavior.
-This option is system wide and can be set on mount or
-modified through remount only from the initial mount namespace;
-it is silently ignored in noninitial namespaces.
-.\"
-.SS Cgroups v2 controllers
-The following controllers, documented in the kernel source file
-.I Documentation/admin\-guide/cgroup\-v2.rst
-(or
-.I Documentation/cgroup\-v2.txt
-in Linux 4.17 and earlier),
-are supported in cgroups version 2:
-.TP
-.IR cpu " (since Linux 4.15)"
-This is the successor to the version 1
-.I cpu
-and
-.I cpuacct
-controllers.
-.TP
-.IR cpuset " (since Linux 5.0)"
-This is the successor of the version 1
-.I cpuset
-controller.
-.TP
-.IR freezer " (since Linux 5.2)"
-.\" commit 76f969e8948d82e78e1bc4beb6b9465908e74873
-This is the successor of the version 1
-.I freezer
-controller.
-.TP
-.IR hugetlb " (since Linux 5.6)"
-This is the successor of the version 1
-.I hugetlb
-controller.
-.TP
-.IR io " (since Linux 4.5)"
-This is the successor of the version 1
-.I blkio
-controller.
-.TP
-.IR memory " (since Linux 4.5)"
-This is the successor of the version 1
-.I memory
-controller.
-.TP
-.IR perf_event " (since Linux 4.11)"
-This is the same as the version 1
-.I perf_event
-controller.
-.TP
-.IR pids " (since Linux 4.5)"
-This is the same as the version 1
-.I pids
-controller.
-.TP
-.IR rdma " (since Linux 4.11)"
-This is the same as the version 1
-.I rdma
-controller.
-.PP
-There is no direct equivalent of the
-.I net_cls
-and
-.I net_prio
-controllers from cgroups version 1.
-Instead, support has been added to
-.BR iptables (8)
-to allow eBPF filters that hook on cgroup v2 pathnames to make decisions
-about network traffic on a per-cgroup basis.
-.PP
-The v2
-.I devices
-controller provides no interface files;
-instead, device control is gated by attaching an eBPF
-.RB ( BPF_CGROUP_DEVICE )
-program to a v2 cgroup.
-.\"
-.SS Cgroups v2 subtree control
-Each cgroup in the v2 hierarchy contains the following two files:
-.TP
-.I cgroup.controllers
-This read-only file exposes a list of the controllers that are
-.I available
-in this cgroup.
-The contents of this file match the contents of the
-.I cgroup.subtree_control
-file in the parent cgroup.
-.TP
-.I cgroup.subtree_control
-This is a list of controllers that are
-.I active
-.RI ( enabled )
-in the cgroup.
-The set of controllers in this file is a subset of the set in the
-.I cgroup.controllers
-of this cgroup.
-The set of active controllers is modified by writing strings to this file
-containing space-delimited controller names,
-each preceded by '+' (to enable a controller)
-or '\-' (to disable a controller), as in the following example:
-.IP
-.in +4n
-.EX
-echo \[aq]+pids \-memory\[aq] > x/y/cgroup.subtree_control
-.EE
-.in
-.IP
-An attempt to enable a controller
-that is not present in
-.I cgroup.controllers
-leads to an
-.B ENOENT
-error when writing to the
-.I cgroup.subtree_control
-file.
-.PP
-Because the list of controllers in
-.I cgroup.subtree_control
-is a subset of those
-.IR cgroup.controllers ,
-a controller that has been disabled in one cgroup in the hierarchy
-can never be re-enabled in the subtree below that cgroup.
-.PP
-A cgroup's
-.I cgroup.subtree_control
-file determines the set of controllers that are exercised in the
-.I child
-cgroups.
-When a controller (e.g.,
-.IR pids )
-is present in the
-.I cgroup.subtree_control
-file of a parent cgroup,
-then the corresponding controller-interface files (e.g.,
-.IR pids.max )
-are automatically created in the children of that cgroup
-and can be used to exert resource control in the child cgroups.
-.\"
-.SS Cgroups v2 """no internal processes""" rule
-Cgroups v2 enforces a so-called "no internal processes" rule.
-Roughly speaking, this rule means that,
-with the exception of the root cgroup, processes may reside
-only in leaf nodes (cgroups that do not themselves contain child cgroups).
-This avoids the need to decide how to partition resources between
-processes which are members of cgroup A and processes in child cgroups of A.
-.PP
-For instance, if cgroup
-.I /cg1/cg2
-exists, then a process may reside in
-.IR /cg1/cg2 ,
-but not in
-.IR /cg1 .
-This is to avoid an ambiguity in cgroups v1
-with respect to the delegation of resources between processes in
-.I /cg1
-and its child cgroups.
-The recommended approach in cgroups v2 is to create a subdirectory called
-.I leaf
-for any nonleaf cgroup which should contain processes, but no child cgroups.
-Thus, processes which previously would have gone into
-.I /cg1
-would now go into
-.IR /cg1/leaf .
-This has the advantage of making explicit
-the relationship between processes in
-.I /cg1/leaf
-and
-.IR /cg1 's
-other children.
-.PP
-The "no internal processes" rule is in fact more subtle than stated above.
-More precisely, the rule is that a (nonroot) cgroup can't both
-(1) have member processes, and
-(2) distribute resources into child cgroups\[em]that is, have a nonempty
-.I cgroup.subtree_control
-file.
-Thus, it
-.I is
-possible for a cgroup to have both member processes and child cgroups,
-but before controllers can be enabled for that cgroup,
-the member processes must be moved out of the cgroup
-(e.g., perhaps into the child cgroups).
-.PP
-With the Linux 4.14 addition of "thread mode" (described below),
-the "no internal processes" rule has been relaxed in some cases.
-.\"
-.SS Cgroups v2 cgroup.events file
-Each nonroot cgroup in the v2 hierarchy contains a read-only file,
-.IR cgroup.events ,
-whose contents are key-value pairs
-(delimited by newline characters, with the key and value separated by spaces)
-providing state information about the cgroup:
-.PP
-.in +4n
-.EX
-$ \fBcat mygrp/cgroup.events\fP
-populated 1
-frozen 0
-.EE
-.in
-.PP
-The following keys may appear in this file:
-.TP
-.I populated
-The value of this key is either 1,
-if this cgroup or any of its descendants has member processes,
-or otherwise 0.
-.TP
-.IR frozen " (since Linux 5.2)"
-.\" commit 76f969e8948d82e78e1bc4beb6b9465908e7487
-The value of this key is 1 if this cgroup is currently frozen,
-or 0 if it is not.
-.PP
-The
-.I cgroup.events
-file can be monitored, in order to receive notification when the value of
-one of its keys changes.
-Such monitoring can be done using
-.BR inotify (7),
-which notifies changes as
-.B IN_MODIFY
-events, or
-.BR poll (2),
-which notifies changes by returning the
-.B POLLPRI
-and
-.B POLLERR
-bits in the
-.I revents
-field.
-.\"
-.SS Cgroup v2 release notification
-Cgroups v2 provides a new mechanism for obtaining notification
-when a cgroup becomes empty.
-The cgroups v1
-.I release_agent
-and
-.I notify_on_release
-files are removed, and replaced by the
-.I populated
-key in the
-.I cgroup.events
-file.
-This key either has the value 0,
-meaning that the cgroup (and its descendants)
-contain no (nonzombie) member processes,
-or 1, meaning that the cgroup (or one of its descendants)
-contains member processes.
-.PP
-The cgroups v2 release-notification mechanism
-offers the following advantages over the cgroups v1
-.I release_agent
-mechanism:
-.IP \[bu] 3
-It allows for cheaper notification,
-since a single process can monitor multiple
-.I cgroup.events
-files (using the techniques described earlier).
-By contrast, the cgroups v1 mechanism requires the expense of creating
-a process for each notification.
-.IP \[bu]
-Notification for different cgroup subhierarchies can be delegated
-to different processes.
-By contrast, the cgroups v1 mechanism allows only one release agent
-for an entire hierarchy.
-.\"
-.SS Cgroups v2 cgroup.stat file
-.\" commit ec39225cca42c05ac36853d11d28f877fde5c42e
-Each cgroup in the v2 hierarchy contains a read-only
-.I cgroup.stat
-file (first introduced in Linux 4.14)
-that consists of lines containing key-value pairs.
-The following keys currently appear in this file:
-.TP
-.I nr_descendants
-This is the total number of visible (i.e., living) descendant cgroups
-underneath this cgroup.
-.TP
-.I nr_dying_descendants
-This is the total number of dying descendant cgroups
-underneath this cgroup.
-A cgroup enters the dying state after being deleted.
-It remains in that state for an undefined period
-(which will depend on system load)
-while resources are freed before the cgroup is destroyed.
-Note that the presence of some cgroups in the dying state is normal,
-and is not indicative of any problem.
-.IP
-A process can't be made a member of a dying cgroup,
-and a dying cgroup can't be brought back to life.
-.\"
-.SS Limiting the number of descendant cgroups
-Each cgroup in the v2 hierarchy contains the following files,
-which can be used to view and set limits on the number
-of descendant cgroups under that cgroup:
-.TP
-.IR cgroup.max.depth " (since Linux 4.14)"
-.\" commit 1a926e0bbab83bae8207d05a533173425e0496d1
-This file defines a limit on the depth of nesting of descendant cgroups.
-A value of 0 in this file means that no descendant cgroups can be created.
-An attempt to create a descendant whose nesting level exceeds
-the limit fails
-.RI ( mkdir (2)
-fails with the error
-.BR EAGAIN ).
-.IP
-Writing the string
-.I """max"""
-to this file means that no limit is imposed.
-The default value in this file is
-.I """max""" .
-.TP
-.IR cgroup.max.descendants " (since Linux 4.14)"
-.\" commit 1a926e0bbab83bae8207d05a533173425e0496d1
-This file defines a limit on the number of live descendant cgroups that
-this cgroup may have.
-An attempt to create more descendants than allowed by the limit fails
-.RI ( mkdir (2)
-fails with the error
-.BR EAGAIN ).
-.IP
-Writing the string
-.I """max"""
-to this file means that no limit is imposed.
-The default value in this file is
-.IR """max""" .
-.\"
-.SH CGROUPS DELEGATION: DELEGATING A HIERARCHY TO A LESS PRIVILEGED USER
-In the context of cgroups,
-delegation means passing management of some subtree
-of the cgroup hierarchy to a nonprivileged user.
-Cgroups v1 provides support for delegation based on file permissions
-in the cgroup hierarchy but with less strict containment rules than v2
-(as noted below).
-Cgroups v2 supports delegation with containment by explicit design.
-The focus of the discussion in this section is on delegation in cgroups v2,
-with some differences for cgroups v1 noted along the way.
-.PP
-Some terminology is required in order to describe delegation.
-A
-.I delegater
-is a privileged user (i.e., root) who owns a parent cgroup.
-A
-.I delegatee
-is a nonprivileged user who will be granted the permissions needed
-to manage some subhierarchy under that parent cgroup,
-known as the
-.IR "delegated subtree" .
-.PP
-To perform delegation,
-the delegater makes certain directories and files writable by the delegatee,
-typically by changing the ownership of the objects to be the user ID
-of the delegatee.
-Assuming that we want to delegate the hierarchy rooted at (say)
-.I /dlgt_grp
-and that there are not yet any child cgroups under that cgroup,
-the ownership of the following is changed to the user ID of the delegatee:
-.TP
-.I /dlgt_grp
-Changing the ownership of the root of the subtree means that any new
-cgroups created under the subtree (and the files they contain)
-will also be owned by the delegatee.
-.TP
-.I /dlgt_grp/cgroup.procs
-Changing the ownership of this file means that the delegatee
-can move processes into the root of the delegated subtree.
-.TP
-.IR /dlgt_grp/cgroup.subtree_control " (cgroups v2 only)"
-Changing the ownership of this file means that the delegatee
-can enable controllers (that are present in
-.IR /dlgt_grp/cgroup.controllers )
-in order to further redistribute resources at lower levels in the subtree.
-(As an alternative to changing the ownership of this file,
-the delegater might instead add selected controllers to this file.)
-.TP
-.IR /dlgt_grp/cgroup.threads " (cgroups v2 only)"
-Changing the ownership of this file is necessary if a threaded subtree
-is being delegated (see the description of "thread mode", below).
-This permits the delegatee to write thread IDs to the file.
-(The ownership of this file can also be changed when delegating
-a domain subtree, but currently this serves no purpose,
-since, as described below, it is not possible to move a thread between
-domain cgroups by writing its thread ID to the
-.I cgroup.threads
-file.)
-.IP
-In cgroups v1, the corresponding file that should instead be delegated is the
-.I tasks
-file.
-.PP
-The delegater should
-.I not
-change the ownership of any of the controller interfaces files (e.g.,
-.IR pids.max ,
-.IR memory.high )
-in
-.IR dlgt_grp .
-Those files are used from the next level above the delegated subtree
-in order to distribute resources into the subtree,
-and the delegatee should not have permission to change
-the resources that are distributed into the delegated subtree.
-.PP
-See also the discussion of the
-.I /sys/kernel/cgroup/delegate
-file in NOTES for information about further delegatable files in cgroups v2.
-.PP
-After the aforementioned steps have been performed,
-the delegatee can create child cgroups within the delegated subtree
-(the cgroup subdirectories and the files they contain
-will be owned by the delegatee)
-and move processes between cgroups in the subtree.
-If some controllers are present in
-.IR dlgt_grp/cgroup.subtree_control ,
-or the ownership of that file was passed to the delegatee,
-the delegatee can also control the further redistribution
-of the corresponding resources into the delegated subtree.
-.\"
-.SS Cgroups v2 delegation: nsdelegate and cgroup namespaces
-Starting with Linux 4.13,
-.\" commit 5136f6365ce3eace5a926e10f16ed2a233db5ba9
-there is a second way to perform cgroup delegation in the cgroups v2 hierarchy.
-This is done by mounting or remounting the cgroup v2 filesystem with the
-.I nsdelegate
-mount option.
-For example, if the cgroup v2 filesystem has already been mounted,
-we can remount it with the
-.I nsdelegate
-option as follows:
-.PP
-.in +4n
-.EX
-mount \-t cgroup2 \-o remount,nsdelegate \e
- none /sys/fs/cgroup/unified
-.EE
-.in
-.\"
-.\" Alternatively, we could boot the kernel with the options:
-.\"
-.\" cgroup_no_v1=all systemd.legacy_systemd_cgroup_controller
-.\"
-.\" The effect of the latter option is to prevent systemd from employing
-.\" its "hybrid" cgroup mode, where it tries to make use of cgroups v2.
-.PP
-The effect of this mount option is to cause cgroup namespaces
-to automatically become delegation boundaries.
-More specifically,
-the following restrictions apply for processes inside the cgroup namespace:
-.IP \[bu] 3
-Writes to controller interface files in the root directory of the namespace
-will fail with the error
-.BR EPERM .
-Processes inside the cgroup namespace can still write to delegatable
-files in the root directory of the cgroup namespace such as
-.I cgroup.procs
-and
-.IR cgroup.subtree_control ,
-and can create subhierarchy underneath the root directory.
-.IP \[bu]
-Attempts to migrate processes across the namespace boundary are denied
-(with the error
-.BR ENOENT ).
-Processes inside the cgroup namespace can still
-(subject to the containment rules described below)
-move processes between cgroups
-.I within
-the subhierarchy under the namespace root.
-.PP
-The ability to define cgroup namespaces as delegation boundaries
-makes cgroup namespaces more useful.
-To understand why, suppose that we already have one cgroup hierarchy
-that has been delegated to a nonprivileged user,
-.IR cecilia ,
-using the older delegation technique described above.
-Suppose further that
-.I cecilia
-wanted to further delegate a subhierarchy
-under the existing delegated hierarchy.
-(For example, the delegated hierarchy might be associated with
-an unprivileged container run by
-.IR cecilia .)
-Even if a cgroup namespace was employed,
-because both hierarchies are owned by the unprivileged user
-.IR cecilia ,
-the following illegitimate actions could be performed:
-.IP \[bu] 3
-A process in the inferior hierarchy could change the
-resource controller settings in the root directory of that hierarchy.
-(These resource controller settings are intended to allow control to
-be exercised from the
-.I parent
-cgroup;
-a process inside the child cgroup should not be allowed to modify them.)
-.IP \[bu]
-A process inside the inferior hierarchy could move processes
-into and out of the inferior hierarchy if the cgroups in the
-superior hierarchy were somehow visible.
-.PP
-Employing the
-.I nsdelegate
-mount option prevents both of these possibilities.
-.PP
-The
-.I nsdelegate
-mount option only has an effect when performed in
-the initial mount namespace;
-in other mount namespaces, the option is silently ignored.
-.PP
-.IR Note :
-On some systems,
-.BR systemd (1)
-automatically mounts the cgroup v2 filesystem.
-In order to experiment with the
-.I nsdelegate
-operation, it may be useful to boot the kernel with
-the following command-line options:
-.PP
-.in +4n
-.EX
-cgroup_no_v1=all systemd.legacy_systemd_cgroup_controller
-.EE
-.in
-.PP
-These options cause the kernel to boot with the cgroups v1 controllers
-disabled (meaning that the controllers are available in the v2 hierarchy),
-and tells
-.BR systemd (1)
-not to mount and use the cgroup v2 hierarchy,
-so that the v2 hierarchy can be manually mounted
-with the desired options after boot-up.
-.\"
-.SS Cgroup delegation containment rules
-Some delegation
-.I containment rules
-ensure that the delegatee can move processes between cgroups within the
-delegated subtree,
-but can't move processes from outside the delegated subtree into
-the subtree or vice versa.
-A nonprivileged process (i.e., the delegatee) can write the PID of
-a "target" process into a
-.I cgroup.procs
-file only if all of the following are true:
-.IP \[bu] 3
-The writer has write permission on the
-.I cgroup.procs
-file in the destination cgroup.
-.IP \[bu]
-The writer has write permission on the
-.I cgroup.procs
-file in the nearest common ancestor of the source and destination cgroups.
-Note that in some cases,
-the nearest common ancestor may be the source or destination cgroup itself.
-This requirement is not enforced for cgroups v1 hierarchies,
-with the consequence that containment in v1 is less strict than in v2.
-(For example, in cgroups v1 the user that owns two distinct
-delegated subhierarchies can move a process between the hierarchies.)
-.IP \[bu]
-If the cgroup v2 filesystem was mounted with the
-.I nsdelegate
-option, the writer must be able to see the source and destination cgroups
-from its cgroup namespace.
-.IP \[bu]
-In cgroups v1:
-the effective UID of the writer (i.e., the delegatee) matches the
-real user ID or the saved set-user-ID of the target process.
-Before Linux 4.11,
-.\" commit 576dd464505fc53d501bb94569db76f220104d28
-this requirement also applied in cgroups v2
-(This was a historical requirement inherited from cgroups v1
-that was later deemed unnecessary,
-since the other rules suffice for containment in cgroups v2.)
-.PP
-.IR Note :
-one consequence of these delegation containment rules is that the
-unprivileged delegatee can't place the first process into
-the delegated subtree;
-instead, the delegater must place the first process
-(a process owned by the delegatee) into the delegated subtree.
-.\"
-.SH CGROUPS VERSION 2 THREAD MODE
-Among the restrictions imposed by cgroups v2 that were not present
-in cgroups v1 are the following:
-.IP \[bu] 3
-.IR "No thread-granularity control" :
-all of the threads of a process must be in the same cgroup.
-.IP \[bu]
-.IR "No internal processes" :
-a cgroup can't both have member processes and
-exercise controllers on child cgroups.
-.PP
-Both of these restrictions were added because
-the lack of these restrictions had caused problems
-in cgroups v1.
-In particular, the cgroups v1 ability to allow thread-level granularity
-for cgroup membership made no sense for some controllers.
-(A notable example was the
-.I memory
-controller: since threads share an address space,
-it made no sense to split threads across different
-.I memory
-cgroups.)
-.PP
-Notwithstanding the initial design decision in cgroups v2,
-there were use cases for certain controllers, notably the
-.I cpu
-controller,
-for which thread-level granularity of control was meaningful and useful.
-To accommodate such use cases, Linux 4.14 added
-.I "thread mode"
-for cgroups v2.
-.PP
-Thread mode allows the following:
-.IP \[bu] 3
-The creation of
-.I threaded subtrees
-in which the threads of a process may
-be spread across cgroups inside the tree.
-(A threaded subtree may contain multiple multithreaded processes.)
-.IP \[bu]
-The concept of
-.IR "threaded controllers" ,
-which can distribute resources across the cgroups in a threaded subtree.
-.IP \[bu]
-A relaxation of the "no internal processes rule",
-so that, within a threaded subtree,
-a cgroup can both contain member threads and
-exercise resource control over child cgroups.
-.PP
-With the addition of thread mode,
-each nonroot cgroup now contains a new file,
-.IR cgroup.type ,
-that exposes, and in some circumstances can be used to change,
-the "type" of a cgroup.
-This file contains one of the following type values:
-.TP
-.I domain
-This is a normal v2 cgroup that provides process-granularity control.
-If a process is a member of this cgroup,
-then all threads of the process are (by definition) in the same cgroup.
-This is the default cgroup type,
-and provides the same behavior that was provided for
-cgroups in the initial cgroups v2 implementation.
-.TP
-.I threaded
-This cgroup is a member of a threaded subtree.
-Threads can be added to this cgroup,
-and controllers can be enabled for the cgroup.
-.TP
-.I domain threaded
-This is a domain cgroup that serves as the root of a threaded subtree.
-This cgroup type is also known as "threaded root".
-.TP
-.I domain invalid
-This is a cgroup inside a threaded subtree
-that is in an "invalid" state.
-Processes can't be added to the cgroup,
-and controllers can't be enabled for the cgroup.
-The only thing that can be done with this cgroup (other than deleting it)
-is to convert it to a
-.I threaded
-cgroup by writing the string
-.I """threaded"""
-to the
-.I cgroup.type
-file.
-.IP
-The rationale for the existence of this "interim" type
-during the creation of a threaded subtree
-(rather than the kernel simply immediately converting all cgroups
-under the threaded root to the type
-.IR threaded )
-is to allow for
-possible future extensions to the thread mode model
-.\"
-.SS Threaded versus domain controllers
-With the addition of threads mode,
-cgroups v2 now distinguishes two types of resource controllers:
-.IP \[bu] 3
-.I Threaded
-.\" In the kernel source, look for ".threaded[ \t]*= true" in
-.\" initializations of struct cgroup_subsys
-controllers: these controllers support thread-granularity for
-resource control and can be enabled inside threaded subtrees,
-with the result that the corresponding controller-interface files
-appear inside the cgroups in the threaded subtree.
-As at Linux 4.19, the following controllers are threaded:
-.IR cpu ,
-.IR perf_event ,
-and
-.IR pids .
-.IP \[bu]
-.I Domain
-controllers: these controllers support only process granularity
-for resource control.
-From the perspective of a domain controller,
-all threads of a process are always in the same cgroup.
-Domain controllers can't be enabled inside a threaded subtree.
-.\"
-.SS Creating a threaded subtree
-There are two pathways that lead to the creation of a threaded subtree.
-The first pathway proceeds as follows:
-.IP (1) 5
-We write the string
-.I """threaded"""
-to the
-.I cgroup.type
-file of a cgroup
-.I y/z
-that currently has the type
-.IR domain .
-This has the following effects:
-.RS
-.IP \[bu] 3
-The type of the cgroup
-.I y/z
-becomes
-.IR threaded .
-.IP \[bu]
-The type of the parent cgroup,
-.IR y ,
-becomes
-.IR "domain threaded" .
-The parent cgroup is the root of a threaded subtree
-(also known as the "threaded root").
-.IP \[bu]
-All other cgroups under
-.I y
-that were not already of type
-.I threaded
-(because they were inside already existing threaded subtrees
-under the new threaded root)
-are converted to type
-.IR "domain invalid" .
-Any subsequently created cgroups under
-.I y
-will also have the type
-.IR "domain invalid" .
-.RE
-.IP (2)
-We write the string
-.I """threaded"""
-to each of the
-.I domain invalid
-cgroups under
-.IR y ,
-in order to convert them to the type
-.IR threaded .
-As a consequence of this step, all threads under the threaded root
-now have the type
-.I threaded
-and the threaded subtree is now fully usable.
-The requirement to write
-.I """threaded"""
-to each of these cgroups is somewhat cumbersome,
-but allows for possible future extensions to the thread-mode model.
-.PP
-The second way of creating a threaded subtree is as follows:
-.IP (1) 5
-In an existing cgroup,
-.IR z ,
-that currently has the type
-.IR domain ,
-we (1.1) enable one or more threaded controllers and
-(1.2) make a process a member of
-.IR z .
-(These two steps can be done in either order.)
-This has the following consequences:
-.RS
-.IP \[bu] 3
-The type of
-.I z
-becomes
-.IR "domain threaded" .
-.IP \[bu]
-All of the descendant cgroups of
-.I x
-that were not already of type
-.I threaded
-are converted to type
-.IR "domain invalid" .
-.RE
-.IP (2)
-As before, we make the threaded subtree usable by writing the string
-.I """threaded"""
-to each of the
-.I domain invalid
-cgroups under
-.IR y ,
-in order to convert them to the type
-.IR threaded .
-.PP
-One of the consequences of the above pathways to creating a threaded subtree
-is that the threaded root cgroup can be a parent only to
-.I threaded
-(and
-.IR "domain invalid" )
-cgroups.
-The threaded root cgroup can't be a parent of a
-.I domain
-cgroups, and a
-.I threaded
-cgroup
-can't have a sibling that is a
-.I domain
-cgroup.
-.\"
-.SS Using a threaded subtree
-Within a threaded subtree, threaded controllers can be enabled
-in each subgroup whose type has been changed to
-.IR threaded ;
-upon doing so, the corresponding controller interface files
-appear in the children of that cgroup.
-.PP
-A process can be moved into a threaded subtree by writing its PID to the
-.I cgroup.procs
-file in one of the cgroups inside the tree.
-This has the effect of making all of the threads
-in the process members of the corresponding cgroup
-and makes the process a member of the threaded subtree.
-The threads of the process can then be spread across
-the threaded subtree by writing their thread IDs (see
-.BR gettid (2))
-to the
-.I cgroup.threads
-files in different cgroups inside the subtree.
-The threads of a process must all reside in the same threaded subtree.
-.PP
-As with writing to
-.IR cgroup.procs ,
-some containment rules apply when writing to the
-.I cgroup.threads
-file:
-.IP \[bu] 3
-The writer must have write permission on the
-cgroup.threads
-file in the destination cgroup.
-.IP \[bu]
-The writer must have write permission on the
-.I cgroup.procs
-file in the common ancestor of the source and destination cgroups.
-(In some cases,
-the common ancestor may be the source or destination cgroup itself.)
-.IP \[bu]
-The source and destination cgroups must be in the same threaded subtree.
-(Outside a threaded subtree, an attempt to move a thread by writing
-its thread ID to the
-.I cgroup.threads
-file in a different
-.I domain
-cgroup fails with the error
-.BR EOPNOTSUPP .)
-.PP
-The
-.I cgroup.threads
-file is present in each cgroup (including
-.I domain
-cgroups) and can be read in order to discover the set of threads
-that is present in the cgroup.
-The set of thread IDs obtained when reading this file
-is not guaranteed to be ordered or free of duplicates.
-.PP
-The
-.I cgroup.procs
-file in the threaded root shows the PIDs of all processes
-that are members of the threaded subtree.
-The
-.I cgroup.procs
-files in the other cgroups in the subtree are not readable.
-.PP
-Domain controllers can't be enabled in a threaded subtree;
-no controller-interface files appear inside the cgroups underneath the
-threaded root.
-From the point of view of a domain controller,
-threaded subtrees are invisible:
-a multithreaded process inside a threaded subtree appears to a domain
-controller as a process that resides in the threaded root cgroup.
-.PP
-Within a threaded subtree, the "no internal processes" rule does not apply:
-a cgroup can both contain member processes (or thread)
-and exercise controllers on child cgroups.
-.\"
-.SS Rules for writing to cgroup.type and creating threaded subtrees
-A number of rules apply when writing to the
-.I cgroup.type
-file:
-.IP \[bu] 3
-Only the string
-.I """threaded"""
-may be written.
-In other words, the only explicit transition that is possible is to convert a
-.I domain
-cgroup to type
-.IR threaded .
-.IP \[bu]
-The effect of writing
-.I """threaded"""
-depends on the current value in
-.IR cgroup.type ,
-as follows:
-.RS
-.IP \[bu] 3
-.I domain
-or
-.IR "domain threaded" :
-start the creation of a threaded subtree
-(whose root is the parent of this cgroup) via
-the first of the pathways described above;
-.IP \[bu]
-.IR "domain\ invalid" :
-convert this cgroup (which is inside a threaded subtree) to a usable (i.e.,
-.IR threaded )
-state;
-.IP \[bu]
-.IR threaded :
-no effect (a "no-op").
-.RE
-.IP \[bu]
-We can't write to a
-.I cgroup.type
-file if the parent's type is
-.IR "domain invalid" .
-In other words, the cgroups of a threaded subtree must be converted to the
-.I threaded
-state in a top-down manner.
-.PP
-There are also some constraints that must be satisfied
-in order to create a threaded subtree rooted at the cgroup
-.IR x :
-.IP \[bu] 3
-There can be no member processes in the descendant cgroups of
-.IR x .
-(The cgroup
-.I x
-can itself have member processes.)
-.IP \[bu]
-No domain controllers may be enabled in
-.IR x 's
-.I cgroup.subtree_control
-file.
-.PP
-If any of the above constraints is violated, then an attempt to write
-.I """threaded"""
-to a
-.I cgroup.type
-file fails with the error
-.BR ENOTSUP .
-.\"
-.SS The """domain threaded""" cgroup type
-According to the pathways described above,
-the type of a cgroup can change to
-.I domain threaded
-in either of the following cases:
-.IP \[bu] 3
-The string
-.I """threaded"""
-is written to a child cgroup.
-.IP \[bu]
-A threaded controller is enabled inside the cgroup and
-a process is made a member of the cgroup.
-.PP
-A
-.I domain threaded
-cgroup,
-.IR x ,
-can revert to the type
-.I domain
-if the above conditions no longer hold true\[em]that is, if all
-.I threaded
-child cgroups of
-.I x
-are removed and either
-.I x
-no longer has threaded controllers enabled or
-no longer has member processes.
-.PP
-When a
-.I domain threaded
-cgroup
-.I x
-reverts to the type
-.IR domain :
-.IP \[bu] 3
-All
-.I domain invalid
-descendants of
-.I x
-that are not in lower-level threaded subtrees revert to the type
-.IR domain .
-.IP \[bu]
-The root cgroups in any lower-level threaded subtrees revert to the type
-.IR "domain threaded" .
-.\"
-.SS Exceptions for the root cgroup
-The root cgroup of the v2 hierarchy is treated exceptionally:
-it can be the parent of both
-.I domain
-and
-.I threaded
-cgroups.
-If the string
-.I """threaded"""
-is written to the
-.I cgroup.type
-file of one of the children of the root cgroup, then
-.IP \[bu] 3
-The type of that cgroup becomes
-.IR threaded .
-.IP \[bu]
-The type of any descendants of that cgroup that
-are not part of lower-level threaded subtrees changes to
-.IR "domain invalid" .
-.PP
-Note that in this case, there is no cgroup whose type becomes
-.IR "domain threaded" .
-(Notionally, the root cgroup can be considered as the threaded root
-for the cgroup whose type was changed to
-.IR threaded .)
-.PP
-The aim of this exceptional treatment for the root cgroup is to
-allow a threaded cgroup that employs the
-.I cpu
-controller to be placed as high as possible in the hierarchy,
-so as to minimize the (small) cost of traversing the cgroup hierarchy.
-.\"
-.SS The cgroups v2 """cpu""" controller and realtime threads
-As at Linux 4.19, the cgroups v2
-.I cpu
-controller does not support control of realtime threads
-(specifically threads scheduled under any of the policies
-.BR SCHED_FIFO ,
-.BR SCHED_RR ,
-described
-.BR SCHED_DEADLINE ;
-see
-.BR sched (7)).
-Therefore, the
-.I cpu
-controller can be enabled in the root cgroup only
-if all realtime threads are in the root cgroup.
-(If there are realtime threads in nonroot cgroups, then a
-.BR write (2)
-of the string
-.I """+cpu"""
-to the
-.I cgroup.subtree_control
-file fails with the error
-.BR EINVAL .)
-.PP
-On some systems,
-.BR systemd (1)
-places certain realtime threads in nonroot cgroups in the v2 hierarchy.
-On such systems,
-these threads must first be moved to the root cgroup before the
-.I cpu
-controller can be enabled.
-.\"
-.SH ERRORS
-The following errors can occur for
-.BR mount (2):
-.TP
-.B EBUSY
-An attempt to mount a cgroup version 1 filesystem specified neither the
-.I name=
-option (to mount a named hierarchy) nor a controller name (or
-.IR all ).
-.SH NOTES
-A child process created via
-.BR fork (2)
-inherits its parent's cgroup memberships.
-A process's cgroup memberships are preserved across
-.BR execve (2).
-.PP
-The
-.BR clone3 (2)
-.B CLONE_INTO_CGROUP
-flag can be used to create a child process that begins its life in
-a different version 2 cgroup from the parent process.
-.\"
-.SS /proc files
-.TP
-.IR /proc/cgroups " (since Linux 2.6.24)"
-This file contains information about the controllers
-that are compiled into the kernel.
-An example of the contents of this file (reformatted for readability)
-is the following:
-.IP
-.in +4n
-.EX
-#subsys_name hierarchy num_cgroups enabled
-cpuset 4 1 1
-cpu 8 1 1
-cpuacct 8 1 1
-blkio 6 1 1
-memory 3 1 1
-devices 10 84 1
-freezer 7 1 1
-net_cls 9 1 1
-perf_event 5 1 1
-net_prio 9 1 1
-hugetlb 0 1 0
-pids 2 1 1
-.EE
-.in
-.IP
-The fields in this file are, from left to right:
-.RS
-.IP [1] 5
-The name of the controller.
-.IP [2]
-The unique ID of the cgroup hierarchy on which this controller is mounted.
-If multiple cgroups v1 controllers are bound to the same hierarchy,
-then each will show the same hierarchy ID in this field.
-The value in this field will be 0 if:
-.RS
-.IP \[bu] 3
-the controller is not mounted on a cgroups v1 hierarchy;
-.IP \[bu]
-the controller is bound to the cgroups v2 single unified hierarchy; or
-.IP \[bu]
-the controller is disabled (see below).
-.RE
-.IP [3]
-The number of control groups in this hierarchy using this controller.
-.IP [4]
-This field contains the value 1 if this controller is enabled,
-or 0 if it has been disabled (via the
-.I cgroup_disable
-kernel command-line boot parameter).
-.RE
-.TP
-.IR /proc/ pid /cgroup " (since Linux 2.6.24)"
-This file describes control groups to which the process
-with the corresponding PID belongs.
-The displayed information differs for
-cgroups version 1 and version 2 hierarchies.
-.IP
-For each cgroup hierarchy of which the process is a member,
-there is one entry containing three colon-separated fields:
-.IP
-.in +4n
-.EX
-hierarchy\-ID:controller\-list:cgroup\-path
-.EE
-.in
-.IP
-For example:
-.IP
-.in +4n
-.EX
-5:cpuacct,cpu,cpuset:/daemons
-.EE
-.in
-.IP
-The colon-separated fields are, from left to right:
-.RS
-.IP [1] 5
-For cgroups version 1 hierarchies,
-this field contains a unique hierarchy ID number
-that can be matched to a hierarchy ID in
-.IR /proc/cgroups .
-For the cgroups version 2 hierarchy, this field contains the value 0.
-.IP [2]
-For cgroups version 1 hierarchies,
-this field contains a comma-separated list of the controllers
-bound to the hierarchy.
-For the cgroups version 2 hierarchy, this field is empty.
-.IP [3]
-This field contains the pathname of the control group in the hierarchy
-to which the process belongs.
-This pathname is relative to the mount point of the hierarchy.
-.RE
-.\"
-.SS /sys/kernel/cgroup files
-.TP
-.IR /sys/kernel/cgroup/delegate " (since Linux 4.15)"
-.\" commit 01ee6cfb1483fe57c9cbd8e73817dfbf9bacffd3
-This file exports a list of the cgroups v2 files
-(one per line) that are delegatable
-(i.e., whose ownership should be changed to the user ID of the delegatee).
-In the future, the set of delegatable files may change or grow,
-and this file provides a way for the kernel to inform
-user-space applications of which files must be delegated.
-As at Linux 4.15, one sees the following when inspecting this file:
-.IP
-.in +4n
-.EX
-$ \fBcat /sys/kernel/cgroup/delegate\fP
-cgroup.procs
-cgroup.subtree_control
-cgroup.threads
-.EE
-.in
-.TP
-.IR /sys/kernel/cgroup/features " (since Linux 4.15)"
-.\" commit 5f2e673405b742be64e7c3604ed4ed3ac14f35ce
-Over time, the set of cgroups v2 features that are provided by the
-kernel may change or grow,
-or some features may not be enabled by default.
-This file provides a way for user-space applications to discover what
-features the running kernel supports and has enabled.
-Features are listed one per line:
-.IP
-.in +4n
-.EX
-$ \fBcat /sys/kernel/cgroup/features\fP
-nsdelegate
-memory_localevents
-.EE
-.in
-.IP
-The entries that can appear in this file are:
-.RS
-.TP
-.IR memory_localevents " (since Linux 5.2)"
-The kernel supports the
-.I memory_localevents
-mount option.
-.TP
-.IR nsdelegate " (since Linux 4.15)"
-The kernel supports the
-.I nsdelegate
-mount option.
-.TP
-.IR memory_recursiveprot " (since Linux 5.7)"
-.\" commit 8a931f801340c2be10552c7b5622d5f4852f3a36
-The kernel supports the
-.I memory_recursiveprot
-mount option.
-.RE
-.SH SEE ALSO
-.BR prlimit (1),
-.BR systemd (1),
-.BR systemd\-cgls (1),
-.BR systemd\-cgtop (1),
-.BR clone (2),
-.BR ioprio_set (2),
-.BR perf_event_open (2),
-.BR setrlimit (2),
-.BR cgroup_namespaces (7),
-.BR cpuset (7),
-.BR namespaces (7),
-.BR sched (7),
-.BR user_namespaces (7)
-.PP
-The kernel source file
-.IR Documentation/admin\-guide/cgroup\-v2.rst .
diff --git a/man7/charsets.7 b/man7/charsets.7
deleted file mode 100644
index 4251a247e..000000000
--- a/man7/charsets.7
+++ /dev/null
@@ -1,335 +0,0 @@
-.\" Copyright (c) 1996 Eric S. Raymond <esr@thyrsus.com>
-.\" and Copyright (c) Andries Brouwer <aeb@cwi.nl>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" This is combined from many sources, including notes by aeb and
-.\" research by esr. Portions derive from a writeup by Roman Czyborra.
-.\"
-.\" Changes also by David Starner <dstarner98@aasaa.ofe.org>.
-.\"
-.TH charsets 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-charsets \- character set standards and internationalization
-.SH DESCRIPTION
-This manual page gives an overview on different character set standards
-and how they were used on Linux before Unicode became ubiquitous.
-Some of this information is still helpful for people working with legacy
-systems and documents.
-.PP
-Standards discussed include such as
-ASCII, GB 2312, ISO 8859, JIS, KOI8-R, KS, and Unicode.
-.PP
-The primary emphasis is on character sets that were actually used by
-locale character sets, not the myriad others that could be found in data
-from other systems.
-.SS ASCII
-ASCII (American Standard Code For Information Interchange) is the original
-7-bit character set, originally designed for American English.
-Also known as US-ASCII.
-It is currently described by the ISO 646:1991 IRV
-(International Reference Version) standard.
-.PP
-Various ASCII variants replacing the dollar sign with other currency
-symbols and replacing punctuation with non-English alphabetic
-characters to cover German, French, Spanish, and others in 7 bits
-emerged.
-All are deprecated;
-glibc does not support locales whose character sets are not true
-supersets of ASCII.
-.PP
-As Unicode, when using UTF-8, is ASCII-compatible, plain ASCII text
-still renders properly on modern UTF-8 using systems.
-.SS ISO 8859
-ISO 8859 is a series of 15 8-bit character sets, all of which have ASCII
-in their low (7-bit) half, invisible control characters in positions
-128 to 159, and 96 fixed-width graphics in positions 160\[en]255.
-.PP
-Of these, the most important is ISO 8859-1
-("Latin Alphabet No. 1" / Latin-1).
-It was widely adopted and supported by different systems,
-and is gradually being replaced with Unicode.
-The ISO 8859-1 characters are also the first 256 characters of Unicode.
-.PP
-Console support for the other 8859 character sets is available under
-Linux through user-mode utilities (such as
-.BR setfont (8))
-that modify keyboard bindings and the EGA graphics
-table and employ the "user mapping" font table in the console
-driver.
-.PP
-Here are brief descriptions of each character set:
-.TP
-8859-1 (Latin-1)
-Latin-1 covers many European languages such as Albanian, Basque,
-Danish, English, Faroese, Galician, Icelandic, Irish, Italian,
-Norwegian, Portuguese, Spanish, and Swedish.
-The lack of the ligatures
-Dutch IJ/ij,
-French œ,
-and „German“ quotation marks
-was considered tolerable.
-.TP
-8859-2 (Latin-2)
-Latin-2 supports many Latin-written Central and East European
-languages such as Bosnian, Croatian, Czech, German, Hungarian, Polish,
-Slovak, and Slovene.
-Replacing Romanian ș/ț with ş/ţ
-was considered tolerable.
-.TP
-8859-3 (Latin-3)
-Latin-3 was designed to cover of Esperanto, Maltese, and Turkish, but
-8859-9 later superseded it for Turkish.
-.TP
-8859-4 (Latin-4)
-Latin-4 introduced letters for North European languages such as
-Estonian, Latvian, and Lithuanian, but was superseded by 8859-10 and
-8859-13.
-.TP
-8859-5
-Cyrillic letters supporting Bulgarian, Byelorussian, Macedonian,
-Russian, Serbian, and (almost completely) Ukrainian.
-It was never widely used, see the discussion of KOI8-R/KOI8-U below.
-.TP
-8859-6
-Was created for Arabic.
-The 8859-6 glyph table is a fixed font of separate
-letter forms, but a proper display engine should combine these
-using the proper initial, medial, and final forms.
-.TP
-8859-7
-Was created for Modern Greek in 1987, updated in 2003.
-.TP
-8859-8
-Supports Modern Hebrew without niqud (punctuation signs).
-Niqud and full-fledged Biblical Hebrew were outside the scope of this
-character set.
-.TP
-8859-9 (Latin-5)
-This is a variant of Latin-1 that replaces Icelandic letters with
-Turkish ones.
-.TP
-8859-10 (Latin-6)
-Latin-6 added the Inuit (Greenlandic) and Sami (Lappish) letters that were
-missing in Latin-4 to cover the entire Nordic area.
-.TP
-8859-11
-Supports the Thai alphabet and is nearly identical to the TIS-620
-standard.
-.TP
-8859-12
-This character set does not exist.
-.TP
-8859-13 (Latin-7)
-Supports the Baltic Rim languages; in particular, it includes Latvian
-characters not found in Latin-4.
-.TP
-8859-14 (Latin-8)
-This is the Celtic character set, covering Old Irish, Manx, Gaelic,
-Welsh, Cornish, and Breton.
-.TP
-8859-15 (Latin-9)
-Latin-9 is similar to the widely used Latin-1 but replaces some less
-common symbols with the Euro sign and French and Finnish letters that
-were missing in Latin-1.
-.TP
-8859-16 (Latin-10)
-This character set covers many Southeast European languages,
-and most importantly supports Romanian more completely than Latin-2.
-.SS KOI8-R / KOI8-U
-KOI8-R is a non-ISO character set popular in Russia before Unicode.
-The lower half is ASCII;
-the upper is a Cyrillic character set somewhat better designed than
-ISO 8859-5.
-KOI8-U, based on KOI8-R, has better support for Ukrainian.
-Neither of these sets are ISO-2022 compatible,
-unlike the ISO 8859 series.
-.PP
-Console support for KOI8-R is available under Linux through user-mode
-utilities that modify keyboard bindings and the EGA graphics table,
-and employ the "user mapping" font table in the console driver.
-.SS GB 2312
-GB 2312 is a mainland Chinese national standard character set used
-to express simplified Chinese.
-Just like JIS X 0208, characters are
-mapped into a 94x94 two-byte matrix used to construct EUC-CN.
-EUC-CN
-is the most important encoding for Linux and includes ASCII and
-GB 2312.
-Note that EUC-CN is often called as GB, GB 2312, or CN-GB.
-.SS Big5
-Big5 was a popular character set in Taiwan to express traditional
-Chinese.
-(Big5 is both a character set and an encoding.)
-It is a superset of ASCII.
-Non-ASCII characters are expressed in two bytes.
-Bytes 0xa1\[en]0xfe are used as leading bytes for two-byte characters.
-Big5 and its extension were widely used in Taiwan and Hong Kong.
-It is not ISO 2022 compliant.
-.\" Thanks to Tomohiro KUBOTA for the following sections about
-.\" national standards.
-.SS JIS X 0208
-JIS X 0208 is a Japanese national standard character set.
-Though there are some more Japanese national standard character sets (like
-JIS X 0201, JIS X 0212, and JIS X 0213), this is the most important one.
-Characters are mapped into a 94x94 two-byte matrix,
-whose each byte is in the range 0x21\[en]0x7e.
-Note that JIS X 0208 is a character set, not an encoding.
-This means that JIS X 0208
-itself is not used for expressing text data.
-JIS X 0208 is used
-as a component to construct encodings such as EUC-JP, Shift_JIS,
-and ISO-2022-JP.
-EUC-JP is the most important encoding for Linux
-and includes ASCII and JIS X 0208.
-In EUC-JP, JIS X 0208
-characters are expressed in two bytes, each of which is the
-JIS X 0208 code plus 0x80.
-.SS KS X 1001
-KS X 1001 is a Korean national standard character set.
-Just as
-JIS X 0208, characters are mapped into a 94x94 two-byte matrix.
-KS X 1001 is used like JIS X 0208, as a component
-to construct encodings such as EUC-KR, Johab, and ISO-2022-KR.
-EUC-KR is the most important encoding for Linux and includes
-ASCII and KS X 1001.
-KS C 5601 is an older name for KS X 1001.
-.SS ISO 2022 and ISO 4873
-The ISO 2022 and 4873 standards describe a font-control model
-based on VT100 practice.
-This model is (partially) supported
-by the Linux kernel and by
-.BR xterm (1).
-Several ISO 2022-based character encodings have been defined,
-especially for Japanese.
-.PP
-There are 4 graphic character sets, called G0, G1, G2, and G3,
-and one of them is the current character set for codes with
-high bit zero (initially G0), and one of them is the current
-character set for codes with high bit one (initially G1).
-Each graphic character set has 94 or 96 characters, and is
-essentially a 7-bit character set.
-It uses codes either
-040\[en]0177 (041\[en]0176) or 0240\[en]0377 (0241\[en]0376).
-G0 always has size 94 and uses codes 041\[en]0176.
-.PP
-Switching between character sets is done using the shift functions
-\fB\[ha]N\fP (SO or LS1), \fB\[ha]O\fP (SI or LS0), ESC n (LS2), ESC o (LS3),
-ESC N (SS2), ESC O (SS3), ESC \[ti] (LS1R), ESC } (LS2R), ESC | (LS3R).
-The function LS\fIn\fP makes character set G\fIn\fP the current one
-for codes with high bit zero.
-The function LS\fIn\fPR makes character set G\fIn\fP the current one
-for codes with high bit one.
-The function SS\fIn\fP makes character set G\fIn\fP (\fIn\fP=2 or 3)
-the current one for the next character only (regardless of the value
-of its high order bit).
-.PP
-A 94-character set is designated as G\fIn\fP character set
-by an escape sequence ESC ( xx (for G0), ESC ) xx (for G1),
-ESC * xx (for G2), ESC + xx (for G3), where xx is a symbol
-or a pair of symbols found in the ISO 2375 International
-Register of Coded Character Sets.
-For example, ESC ( @ selects the ISO 646 character set as G0,
-ESC ( A selects the UK standard character set (with pound
-instead of number sign), ESC ( B selects ASCII (with dollar
-instead of currency sign), ESC ( M selects a character set
-for African languages, ESC ( ! A selects the Cuban character
-set, and so on.
-.PP
-A 96-character set is designated as G\fIn\fP character set
-by an escape sequence ESC \- xx (for G1), ESC . xx (for G2)
-or ESC / xx (for G3).
-For example, ESC \- G selects the Hebrew alphabet as G1.
-.PP
-A multibyte character set is designated as G\fIn\fP character set
-by an escape sequence ESC $ xx or ESC $ ( xx (for G0),
-ESC $ ) xx (for G1), ESC $ * xx (for G2), ESC $ + xx (for G3).
-For example, ESC $ ( C selects the Korean character set for G0.
-The Japanese character set selected by ESC $ B has a more
-recent version selected by ESC & @ ESC $ B.
-.PP
-ISO 4873 stipulates a narrower use of character sets, where G0
-is fixed (always ASCII), so that G1, G2, and G3
-can be invoked only for codes with the high order bit set.
-In particular, \fB\[ha]N\fP and \fB\[ha]O\fP are not used anymore, ESC ( xx
-can be used only with xx=B, and ESC ) xx, ESC * xx, ESC + xx
-are equivalent to ESC \- xx, ESC . xx, ESC / xx, respectively.
-.SS TIS-620
-TIS-620 is a Thai national standard character set and a superset
-of ASCII.
-In the same fashion as the ISO 8859 series, Thai characters are mapped into
-0xa1\[en]0xfe.
-.SS Unicode
-Unicode (ISO/IEC 10646) is a standard which aims to unambiguously represent
-every character in every human language.
-Unicode's structure permits 20.1 bits to encode every character.
-Since most computers don't include 20.1-bit integers, Unicode is
-usually encoded as 32-bit integers internally and either a series of
-16-bit integers (UTF-16) (needing two 16-bit integers only when
-encoding certain rare characters) or a series of 8-bit bytes (UTF-8).
-.PP
-Linux represents Unicode using the 8-bit Unicode Transformation Format
-(UTF-8).
-UTF-8 is a variable length encoding of Unicode.
-It uses 1
-byte to code 7 bits, 2 bytes for 11 bits, 3 bytes for 16 bits, 4 bytes
-for 21 bits, 5 bytes for 26 bits, 6 bytes for 31 bits.
-.PP
-Let 0,1,x stand for a zero, one, or arbitrary bit.
-A byte 0xxxxxxx
-stands for the Unicode 00000000 0xxxxxxx which codes the same symbol
-as the ASCII 0xxxxxxx.
-Thus, ASCII goes unchanged into UTF-8, and
-people using only ASCII do not notice any change: not in code, and not
-in file size.
-.PP
-A byte 110xxxxx is the start of a 2-byte code, and 110xxxxx 10yyyyyy
-is assembled into 00000xxx xxyyyyyy.
-A byte 1110xxxx is the start
-of a 3-byte code, and 1110xxxx 10yyyyyy 10zzzzzz is assembled
-into xxxxyyyy yyzzzzzz.
-(When UTF-8 is used to code the 31-bit ISO/IEC 10646
-then this progression continues up to 6-byte codes.)
-.PP
-For most texts in ISO 8859 character sets, this means that the
-characters outside of ASCII are now coded with two bytes.
-This tends
-to expand ordinary text files by only one or two percent.
-For Russian
-or Greek texts, this expands ordinary text files by 100%, since text in
-those languages is mostly outside of ASCII.
-For Japanese users this means
-that the 16-bit codes now in common use will take three bytes.
-While there are algorithmic conversions from some character sets
-(especially ISO 8859-1) to Unicode, general conversion requires
-carrying around conversion tables, which can be quite large for 16-bit
-codes.
-.PP
-Note that UTF-8 is self-synchronizing:
-10xxxxxx is a tail,
-any other byte is the head of a code.
-Note that the only way ASCII bytes occur in a UTF-8 stream,
-is as themselves.
-In particular,
-there are no embedded NULs (\[aq]\e0\[aq]) or \[aq]/\[aq]s
-that form part of some larger code.
-.PP
-Since ASCII, and, in particular, NUL and \[aq]/\[aq], are unchanged, the
-kernel does not notice that UTF-8 is being used.
-It does not care at
-all what the bytes it is handling stand for.
-.PP
-Rendering of Unicode data streams is typically handled through
-"subfont" tables which map a subset of Unicode to glyphs.
-Internally
-the kernel uses Unicode to describe the subfont loaded in video RAM.
-This means that in the Linux console in UTF-8 mode, one can use a character
-set with 512 different symbols.
-This is not enough for Japanese, Chinese, and
-Korean, but it is enough for most other purposes.
-.SH SEE ALSO
-.BR iconv (1),
-.BR ascii (7),
-.BR iso_8859\-1 (7),
-.BR unicode (7),
-.BR utf\-8 (7)
diff --git a/man7/complex.7 b/man7/complex.7
deleted file mode 100644
index 51690c8b1..000000000
--- a/man7/complex.7
+++ /dev/null
@@ -1,81 +0,0 @@
-.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.TH complex 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-complex \- basics of complex mathematics
-.SH SYNOPSIS
-.nf
-.B #include <complex.h>
-.fi
-.SH DESCRIPTION
-Complex numbers are numbers of the form z = a+b*i, where a and b are
-real numbers and i = sqrt(\-1), so that i*i = \-1.
-.PP
-There are other ways to represent that number.
-The pair (a,b) of real
-numbers may be viewed as a point in the plane, given by X- and
-Y-coordinates.
-This same point may also be described by giving
-the pair of real numbers (r,phi), where r is the distance to the origin O,
-and phi the angle between the X-axis and the line Oz.
-Now
-z = r*exp(i*phi) = r*(cos(phi)+i*sin(phi)).
-.PP
-The basic operations are defined on z = a+b*i and w = c+d*i as:
-.TP
-.B addition: z+w = (a+c) + (b+d)*i
-.TP
-.B multiplication: z*w = (a*c \- b*d) + (a*d + b*c)*i
-.TP
-.B division: z/w = ((a*c + b*d)/(c*c + d*d)) + ((b*c \- a*d)/(c*c + d*d))*i
-.PP
-Nearly all math function have a complex counterpart but there are
-some complex-only functions.
-.SH EXAMPLES
-Your C-compiler can work with complex numbers if it supports the C99 standard.
-Link with \fI\-lm\fP.
-The imaginary unit is represented by I.
-.PP
-.EX
-/* check that exp(i * pi) == \-1 */
-#include <math.h> /* for atan */
-#include <stdio.h>
-#include <complex.h>
-\&
-int
-main(void)
-{
- double pi = 4 * atan(1.0);
- double complex z = cexp(I * pi);
- printf("%f + %f * i\en", creal(z), cimag(z));
-}
-.EE
-.SH SEE ALSO
-.BR cabs (3),
-.BR cacos (3),
-.BR cacosh (3),
-.BR carg (3),
-.BR casin (3),
-.BR casinh (3),
-.BR catan (3),
-.BR catanh (3),
-.BR ccos (3),
-.BR ccosh (3),
-.BR cerf (3),
-.BR cexp (3),
-.BR cexp2 (3),
-.BR cimag (3),
-.BR clog (3),
-.BR clog10 (3),
-.BR clog2 (3),
-.BR conj (3),
-.BR cpow (3),
-.BR cproj (3),
-.BR creal (3),
-.BR csin (3),
-.BR csinh (3),
-.BR csqrt (3),
-.BR ctan (3),
-.BR ctanh (3)
diff --git a/man7/cp1251.7 b/man7/cp1251.7
deleted file mode 100644
index 4535674a9..000000000
--- a/man7/cp1251.7
+++ /dev/null
@@ -1,166 +0,0 @@
-'\" t
-.\" Copyright 2009 Lefteris Dimitroulakis (edimitro@tee.gr)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH cp1251 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cp1251 \- CP\ 1251 character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The Windows Code Pages include several 8-bit extensions to the ASCII
-character set (also known as ISO 646-IRV).
-CP\ 1251 encodes the
-characters used in Cyrillic scripts.
-.SS CP\ 1251 characters
-The following table displays the characters in CP\ 1251 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-200 128 80 Ђ CYRILLIC CAPITAL LETTER DJE
-201 129 81 Ѓ CYRILLIC CAPITAL LETTER GJE
-202 130 82 ‚ SINGLE LOW-9 QUOTATION MARK
-203 131 83 ѓ CYRILLIC SMALL LETTER GJE
-204 132 84 „ DOUBLE LOW-9 QUOTATION MARK
-205 133 85 … HORIZONTAL ELLIPSIS
-206 134 86 † DAGGER
-207 135 87 ‡ DOUBLE DAGGER
-210 136 88 € EURO SIGN
-211 137 89 ‰ PER MILLE SIGN
-212 138 8A Љ CYRILLIC CAPITAL LETTER LJE
-213 139 8B ‹ SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-214 140 8C Њ CYRILLIC CAPITAL LETTER NJE
-215 141 8D Ќ CYRILLIC CAPITAL LETTER KJE
-216 142 8E Ћ CYRILLIC CAPITAL LETTER TSHE
-217 143 8F Џ CYRILLIC CAPITAL LETTER DZHE
-220 144 90 ђ CYRILLIC SMALL LETTER DJE
-221 145 91 ‘ LEFT SINGLE QUOTATION MARK
-222 146 92 ’ RIGHT SINGLE QUOTATION MARK
-223 147 93 “ LEFT DOUBLE QUOTATION MARK
-224 148 94 ” RIGHT DOUBLE QUOTATION MARK
-225 149 95 • BULLET
-226 150 96 – EN DASH
-227 151 97 — EM DASH
-230 152 98 UNDEFINED
-231 153 99 ™ TRADE MARK SIGN
-232 154 9A љ CYRILLIC SMALL LETTER LJE
-233 155 9B › SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-234 156 9C њ CYRILLIC SMALL LETTER NJE
-235 157 9D ќ CYRILLIC SMALL LETTER KJE
-236 158 9E ћ CYRILLIC SMALL LETTER TSHE
-237 159 9F џ CYRILLIC SMALL LETTER DZHE
-240 160 A0   NO-BREAK SPACE
-241 161 A1 Ў CYRILLIC CAPITAL LETTER SHORT U
-242 162 A2 ў CYRILLIC SMALL LETTER SHORT U
-243 163 A3 Ј CYRILLIC CAPITAL LETTER JE
-244 164 A4 ¤ CURRENCY SIGN
-245 165 A5 Ґ CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-246 166 A6 ¦ BROKEN BAR
-247 167 A7 § SECTION SIGN
-250 168 A8 Ё CYRILLIC CAPITAL LETTER IO
-251 169 A9 © COPYRIGHT SIGN
-252 170 AA Є CYRILLIC CAPITAL LETTER UKRAINIAN IE
-253 171 AB « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-254 172 AC ¬ NOT SIGN
-255 173 AD ­ SOFT HYPHEN
-256 174 AE ® REGISTERED SIGN
-257 175 AF Ї CYRILLIC CAPITAL LETTER YI
-260 176 B0 ° DEGREE SIGN
-261 177 B1 ± PLUS-MINUS SIGN
-262 178 B2 І T{
-CYRILLIC CAPITAL LETTER
-.br
-BYELORUSSIAN-UKRAINIAN I
-T}
-263 179 B3 і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-264 180 B4 ґ CYRILLIC SMALL LETTER GHE WITH UPTURN
-265 181 B5 µ MICRO SIGN
-266 182 B6 ¶ PILCROW SIGN
-267 183 B7 · MIDDLE DOT
-270 184 B8 ё CYRILLIC SMALL LETTER IO
-271 185 B9 № NUMERO SIGN
-272 186 BA є CYRILLIC SMALL LETTER UKRAINIAN IE
-273 187 BB » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-274 188 BC ј CYRILLIC SMALL LETTER JE
-275 189 BD Ѕ CYRILLIC CAPITAL LETTER DZE
-276 190 BE ѕ CYRILLIC SMALL LETTER DZE
-277 191 BF ї CYRILLIC SMALL LETTER YI
-300 192 C0 А CYRILLIC CAPITAL LETTER A
-301 193 C1 Б CYRILLIC CAPITAL LETTER BE
-302 194 C2 В CYRILLIC CAPITAL LETTER VE
-303 195 C3 Г CYRILLIC CAPITAL LETTER GHE
-304 196 C4 Д CYRILLIC CAPITAL LETTER DE
-305 197 C5 Е CYRILLIC CAPITAL LETTER IE
-306 198 C6 Ж CYRILLIC CAPITAL LETTER ZHE
-307 199 C7 З CYRILLIC CAPITAL LETTER ZE
-310 200 C8 И CYRILLIC CAPITAL LETTER I
-311 201 C9 Й CYRILLIC CAPITAL LETTER SHORT I
-312 202 CA К CYRILLIC CAPITAL LETTER KA
-313 203 CB Л CYRILLIC CAPITAL LETTER EL
-314 204 CC М CYRILLIC CAPITAL LETTER EM
-315 205 CD Н CYRILLIC CAPITAL LETTER EN
-316 206 CE О CYRILLIC CAPITAL LETTER O
-317 207 CF П CYRILLIC CAPITAL LETTER PE
-320 208 D0 Р CYRILLIC CAPITAL LETTER ER
-321 209 D1 С CYRILLIC CAPITAL LETTER ES
-322 210 D2 Т CYRILLIC CAPITAL LETTER TE
-323 211 D3 У CYRILLIC CAPITAL LETTER U
-324 212 D4 Ф CYRILLIC CAPITAL LETTER EF
-325 213 D5 Х CYRILLIC CAPITAL LETTER HA
-326 214 D6 Ц CYRILLIC CAPITAL LETTER TSE
-327 215 D7 Ч CYRILLIC CAPITAL LETTER CHE
-330 216 D8 Ш CYRILLIC CAPITAL LETTER SHA
-331 217 D9 Щ CYRILLIC CAPITAL LETTER SHCHA
-332 218 DA Ъ CYRILLIC CAPITAL LETTER HARD SIGN
-333 219 DB Ы CYRILLIC CAPITAL LETTER YERU
-334 220 DC Ь CYRILLIC CAPITAL LETTER SOFT SIGN
-335 221 DD Э CYRILLIC CAPITAL LETTER E
-336 222 DE Ю CYRILLIC CAPITAL LETTER YU
-337 223 DF Я CYRILLIC CAPITAL LETTER YA
-340 224 E0 а CYRILLIC SMALL LETTER A
-341 225 E1 б CYRILLIC SMALL LETTER BE
-342 226 E2 в CYRILLIC SMALL LETTER VE
-343 227 E3 г CYRILLIC SMALL LETTER GHE
-344 228 E4 д CYRILLIC SMALL LETTER DE
-345 229 E5 е CYRILLIC SMALL LETTER IE
-346 230 E6 ж CYRILLIC SMALL LETTER ZHE
-347 231 E7 з CYRILLIC SMALL LETTER ZE
-350 232 E8 и CYRILLIC SMALL LETTER I
-351 233 E9 й CYRILLIC SMALL LETTER SHORT I
-352 234 EA к CYRILLIC SMALL LETTER KA
-353 235 EB л CYRILLIC SMALL LETTER EL
-354 236 EC м CYRILLIC SMALL LETTER EM
-355 237 ED н CYRILLIC SMALL LETTER EN
-356 238 EE о CYRILLIC SMALL LETTER O
-357 239 EF п CYRILLIC SMALL LETTER PE
-360 240 F0 р CYRILLIC SMALL LETTER ER
-361 241 F1 с CYRILLIC SMALL LETTER ES
-362 242 F2 т CYRILLIC SMALL LETTER TE
-363 243 F3 у CYRILLIC SMALL LETTER U
-364 244 F4 ф CYRILLIC SMALL LETTER EF
-365 245 F5 х CYRILLIC SMALL LETTER HA
-366 246 F6 ц CYRILLIC SMALL LETTER TSE
-367 247 F7 ч CYRILLIC SMALL LETTER CHE
-370 248 F8 ш CYRILLIC SMALL LETTER SHA
-371 249 F9 щ CYRILLIC SMALL LETTER SHCHA
-372 250 FA ъ CYRILLIC SMALL LETTER HARD SIGN
-373 251 FB ы CYRILLIC SMALL LETTER YERU
-374 252 FC ь CYRILLIC SMALL LETTER SOFT SIGN
-375 253 FD э CYRILLIC SMALL LETTER E
-376 254 FE ю CYRILLIC SMALL LETTER YU
-377 255 FF я CYRILLIC SMALL LETTER YA
-.TE
-.SH NOTES
-CP\ 1251 is also known as Windows Cyrillic.
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR cp1252 (7),
-.BR iso_8859\-5 (7),
-.BR koi8\-r (7),
-.BR koi8\-u (7),
-.BR utf\-8 (7)
diff --git a/man7/cp1252.7 b/man7/cp1252.7
deleted file mode 100644
index cb1b2df5b..000000000
--- a/man7/cp1252.7
+++ /dev/null
@@ -1,156 +0,0 @@
-'\" t
-.\" Copyright 2014 (C) Marko Myllynen <myllynen@redhat.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH cp1252 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cp1252 \- CP\ 1252 character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The Windows Code Pages include several 8-bit extensions to the ASCII
-character set (also known as ISO 646-IRV).
-CP\ 1252 encodes the
-characters used in many West European languages.
-.SS CP\ 1252 characters
-The following table displays the characters in CP\ 1252 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-200 128 80 € EURO SIGN
-202 130 82 ‚ SINGLE LOW-9 QUOTATION MARK
-203 131 83 ƒ LATIN SMALL LETTER F WITH HOOK
-204 132 84 „ DOUBLE LOW-9 QUOTATION MARK
-205 133 85 … HORIZONTAL ELLIPSIS
-206 134 86 † DAGGER
-207 135 87 ‡ DOUBLE DAGGER
-210 136 88 ˆ MODIFIER LETTER CIRCUMFLEX ACCENT
-211 137 89 ‰ PER MILLE SIGN
-212 138 8A Š LATIN CAPITAL LETTER S WITH CARON
-213 139 8B ‹ SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-214 140 8C ΠLATIN CAPITAL LIGATURE OE
-216 142 8E Ž LATIN CAPITAL LETTER Z WITH CARON
-221 145 91 ‘ LEFT SINGLE QUOTATION MARK
-222 146 92 ’ RIGHT SINGLE QUOTATION MARK
-223 147 93 “ LEFT DOUBLE QUOTATION MARK
-224 148 94 ” RIGHT DOUBLE QUOTATION MARK
-225 149 95 • BULLET
-226 150 96 – EN DASH
-227 151 97 — EM DASH
-230 152 98 ˜ SMALL TILDE
-231 153 99 ™ TRADE MARK SIGN
-232 154 9A š LATIN SMALL LETTER S WITH CARON
-233 155 9B › SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-234 156 9C œ LATIN SMALL LIGATURE OE
-236 158 9E ž LATIN SMALL LETTER Z WITH CARON
-237 159 9F Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS
-240 160 A0   NO-BREAK SPACE
-241 161 A1 ¡ INVERTED EXCLAMATION MARK
-242 162 A2 ¢ CENT SIGN
-243 163 A3 £ POUND SIGN
-244 164 A4 ¤ CURRENCY SIGN
-245 165 A5 ¥ YEN SIGN
-246 166 A6 ¦ BROKEN BAR
-247 167 A7 § SECTION SIGN
-250 168 A8 ¨ DIAERESIS
-251 169 A9 © COPYRIGHT SIGN
-252 170 AA ª FEMININE ORDINAL INDICATOR
-253 171 AB « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-254 172 AC ¬ NOT SIGN
-255 173 AD ­ SOFT HYPHEN
-256 174 AE ® REGISTERED SIGN
-257 175 AF ¯ MACRON
-260 176 B0 ° DEGREE SIGN
-261 177 B1 ± PLUS-MINUS SIGN
-262 178 B2 ² SUPERSCRIPT TWO
-263 179 B3 ³ SUPERSCRIPT THREE
-264 180 B4 ´ ACUTE ACCENT
-265 181 B5 µ MICRO SIGN
-266 182 B6 ¶ PILCROW SIGN
-267 183 B7 · MIDDLE DOT
-270 184 B8 ¸ CEDILLA
-271 185 B9 ¹ SUPERSCRIPT ONE
-272 186 BA º MASCULINE ORDINAL INDICATOR
-273 187 BB » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-274 188 BC ¼ VULGAR FRACTION ONE QUARTER
-275 189 BD ½ VULGAR FRACTION ONE HALF
-276 190 BE ¾ VULGAR FRACTION THREE QUARTERS
-277 191 BF ¿ INVERTED QUESTION MARK
-300 192 C0 À LATIN CAPITAL LETTER A WITH GRAVE
-301 193 C1 Á LATIN CAPITAL LETTER A WITH ACUTE
-302 194 C2 Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-303 195 C3 Ã LATIN CAPITAL LETTER A WITH TILDE
-304 196 C4 Ä LATIN CAPITAL LETTER A WITH DIAERESIS
-305 197 C5 Å LATIN CAPITAL LETTER A WITH RING ABOVE
-306 198 C6 Æ LATIN CAPITAL LETTER AE
-307 199 C7 Ç LATIN CAPITAL LETTER C WITH CEDILLA
-310 200 C8 È LATIN CAPITAL LETTER E WITH GRAVE
-311 201 C9 É LATIN CAPITAL LETTER E WITH ACUTE
-312 202 CA Ê LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-313 203 CB Ë LATIN CAPITAL LETTER E WITH DIAERESIS
-314 204 CC Ì LATIN CAPITAL LETTER I WITH GRAVE
-315 205 CD Í LATIN CAPITAL LETTER I WITH ACUTE
-316 206 CE Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-317 207 CF Ï LATIN CAPITAL LETTER I WITH DIAERESIS
-320 208 D0 Ð LATIN CAPITAL LETTER ETH
-321 209 D1 Ñ LATIN CAPITAL LETTER N WITH TILDE
-322 210 D2 Ò LATIN CAPITAL LETTER O WITH GRAVE
-323 211 D3 Ó LATIN CAPITAL LETTER O WITH ACUTE
-324 212 D4 Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-325 213 D5 Õ LATIN CAPITAL LETTER O WITH TILDE
-326 214 D6 Ö LATIN CAPITAL LETTER O WITH DIAERESIS
-327 215 D7 × MULTIPLICATION SIGN
-330 216 D8 Ø LATIN CAPITAL LETTER O WITH STROKE
-331 217 D9 Ù LATIN CAPITAL LETTER U WITH GRAVE
-332 218 DA Ú LATIN CAPITAL LETTER U WITH ACUTE
-333 219 DB Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-334 220 DC Ü LATIN CAPITAL LETTER U WITH DIAERESIS
-335 221 DD Ý LATIN CAPITAL LETTER Y WITH ACUTE
-336 222 DE Þ LATIN CAPITAL LETTER THORN
-337 223 DF ß LATIN SMALL LETTER SHARP S
-340 224 E0 à LATIN SMALL LETTER A WITH GRAVE
-341 225 E1 á LATIN SMALL LETTER A WITH ACUTE
-342 226 E2 â LATIN SMALL LETTER A WITH CIRCUMFLEX
-343 227 E3 ã LATIN SMALL LETTER A WITH TILDE
-344 228 E4 ä LATIN SMALL LETTER A WITH DIAERESIS
-345 229 E5 å LATIN SMALL LETTER A WITH RING ABOVE
-346 230 E6 æ LATIN SMALL LETTER AE
-347 231 E7 ç LATIN SMALL LETTER C WITH CEDILLA
-350 232 E8 è LATIN SMALL LETTER E WITH GRAVE
-351 233 E9 é LATIN SMALL LETTER E WITH ACUTE
-352 234 EA ê LATIN SMALL LETTER E WITH CIRCUMFLEX
-353 235 EB ë LATIN SMALL LETTER E WITH DIAERESIS
-354 236 EC ì LATIN SMALL LETTER I WITH GRAVE
-355 237 ED í LATIN SMALL LETTER I WITH ACUTE
-356 238 EE î LATIN SMALL LETTER I WITH CIRCUMFLEX
-357 239 EF ï LATIN SMALL LETTER I WITH DIAERESIS
-360 240 F0 ð LATIN SMALL LETTER ETH
-361 241 F1 ñ LATIN SMALL LETTER N WITH TILDE
-362 242 F2 ò LATIN SMALL LETTER O WITH GRAVE
-363 243 F3 ó LATIN SMALL LETTER O WITH ACUTE
-364 244 F4 ô LATIN SMALL LETTER O WITH CIRCUMFLEX
-365 245 F5 õ LATIN SMALL LETTER O WITH TILDE
-366 246 F6 ö LATIN SMALL LETTER O WITH DIAERESIS
-367 247 F7 ÷ DIVISION SIGN
-370 248 F8 ø LATIN SMALL LETTER O WITH STROKE
-371 249 F9 ù LATIN SMALL LETTER U WITH GRAVE
-372 250 FA ú LATIN SMALL LETTER U WITH ACUTE
-373 251 FB û LATIN SMALL LETTER U WITH CIRCUMFLEX
-374 252 FC ü LATIN SMALL LETTER U WITH DIAERESIS
-375 253 FD ý LATIN SMALL LETTER Y WITH ACUTE
-376 254 FE þ LATIN SMALL LETTER THORN
-377 255 FF ÿ LATIN SMALL LETTER Y WITH DIAERESIS
-.TE
-.SH NOTES
-CP\ 1252 is also known as Windows-1252.
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR cp1251 (7),
-.BR iso_8859\-1 (7),
-.BR iso_8859\-15 (7),
-.BR utf\-8 (7)
diff --git a/man7/cpuset.7 b/man7/cpuset.7
deleted file mode 100644
index 3bda1dc79..000000000
--- a/man7/cpuset.7
+++ /dev/null
@@ -1,1500 +0,0 @@
-.\" Copyright (c) 2008 Silicon Graphics, Inc.
-.\"
-.\" Author: Paul Jackson (http://oss.sgi.com/projects/cpusets)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-only
-.\"
-.TH cpuset 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-cpuset \- confine processes to processor and memory node subsets
-.SH DESCRIPTION
-The cpuset filesystem is a pseudo-filesystem interface
-to the kernel cpuset mechanism,
-which is used to control the processor placement
-and memory placement of processes.
-It is commonly mounted at
-.IR /dev/cpuset .
-.PP
-On systems with kernels compiled with built in support for cpusets,
-all processes are attached to a cpuset, and cpusets are always present.
-If a system supports cpusets, then it will have the entry
-.B nodev cpuset
-in the file
-.IR /proc/filesystems .
-By mounting the cpuset filesystem (see the
-.B EXAMPLES
-section below),
-the administrator can configure the cpusets on a system
-to control the processor and memory placement of processes
-on that system.
-By default, if the cpuset configuration
-on a system is not modified or if the cpuset filesystem
-is not even mounted, then the cpuset mechanism,
-though present, has no effect on the system's behavior.
-.PP
-A cpuset defines a list of CPUs and memory nodes.
-.PP
-The CPUs of a system include all the logical processing
-units on which a process can execute, including, if present,
-multiple processor cores within a package and Hyper-Threads
-within a processor core.
-Memory nodes include all distinct
-banks of main memory; small and SMP systems typically have
-just one memory node that contains all the system's main memory,
-while NUMA (non-uniform memory access) systems have multiple memory nodes.
-.PP
-Cpusets are represented as directories in a hierarchical
-pseudo-filesystem, where the top directory in the hierarchy
-.RI ( /dev/cpuset )
-represents the entire system (all online CPUs and memory nodes)
-and any cpuset that is the child (descendant) of
-another parent cpuset contains a subset of that parent's
-CPUs and memory nodes.
-The directories and files representing cpusets have normal
-filesystem permissions.
-.PP
-Every process in the system belongs to exactly one cpuset.
-A process is confined to run only on the CPUs in
-the cpuset it belongs to, and to allocate memory only
-on the memory nodes in that cpuset.
-When a process
-.BR fork (2)s,
-the child process is placed in the same cpuset as its parent.
-With sufficient privilege, a process may be moved from one
-cpuset to another and the allowed CPUs and memory nodes
-of an existing cpuset may be changed.
-.PP
-When the system begins booting, a single cpuset is
-defined that includes all CPUs and memory nodes on the
-system, and all processes are in that cpuset.
-During the boot process, or later during normal system operation,
-other cpusets may be created, as subdirectories of this top cpuset,
-under the control of the system administrator,
-and processes may be placed in these other cpusets.
-.PP
-Cpusets are integrated with the
-.BR sched_setaffinity (2)
-scheduling affinity mechanism and the
-.BR mbind (2)
-and
-.BR set_mempolicy (2)
-memory-placement mechanisms in the kernel.
-Neither of these mechanisms let a process make use
-of a CPU or memory node that is not allowed by that process's cpuset.
-If changes to a process's cpuset placement conflict with these
-other mechanisms, then cpuset placement is enforced
-even if it means overriding these other mechanisms.
-The kernel accomplishes this overriding by silently
-restricting the CPUs and memory nodes requested by
-these other mechanisms to those allowed by the
-invoking process's cpuset.
-This can result in these
-other calls returning an error, if for example, such
-a call ends up requesting an empty set of CPUs or
-memory nodes, after that request is restricted to
-the invoking process's cpuset.
-.PP
-Typically, a cpuset is used to manage
-the CPU and memory-node confinement for a set of
-cooperating processes such as a batch scheduler job, and these
-other mechanisms are used to manage the placement of
-individual processes or memory regions within that set or job.
-.SH FILES
-Each directory below
-.I /dev/cpuset
-represents a cpuset and contains a fixed set of pseudo-files
-describing the state of that cpuset.
-.PP
-New cpusets are created using the
-.BR mkdir (2)
-system call or the
-.BR mkdir (1)
-command.
-The properties of a cpuset, such as its flags, allowed
-CPUs and memory nodes, and attached processes, are queried and modified
-by reading or writing to the appropriate file in that cpuset's directory,
-as listed below.
-.PP
-The pseudo-files in each cpuset directory are automatically created when
-the cpuset is created, as a result of the
-.BR mkdir (2)
-invocation.
-It is not possible to directly add or remove these pseudo-files.
-.PP
-A cpuset directory that contains no child cpuset directories,
-and has no attached processes, can be removed using
-.BR rmdir (2)
-or
-.BR rmdir (1).
-It is not necessary, or possible,
-to remove the pseudo-files inside the directory before removing it.
-.PP
-The pseudo-files in each cpuset directory are
-small text files that may be read and
-written using traditional shell utilities such as
-.BR cat (1),
-and
-.BR echo (1),
-or from a program by using file I/O library functions or system calls,
-such as
-.BR open (2),
-.BR read (2),
-.BR write (2),
-and
-.BR close (2).
-.PP
-The pseudo-files in a cpuset directory represent internal kernel
-state and do not have any persistent image on disk.
-Each of these per-cpuset files is listed and described below.
-.\" ====================== tasks ======================
-.TP
-.I tasks
-List of the process IDs (PIDs) of the processes in that cpuset.
-The list is formatted as a series of ASCII
-decimal numbers, each followed by a newline.
-A process may be added to a cpuset (automatically removing
-it from the cpuset that previously contained it) by writing its
-PID to that cpuset's
-.I tasks
-file (with or without a trailing newline).
-.IP
-.B Warning:
-only one PID may be written to the
-.I tasks
-file at a time.
-If a string is written that contains more
-than one PID, only the first one will be used.
-.\" =================== notify_on_release ===================
-.TP
-.I notify_on_release
-Flag (0 or 1).
-If set (1), that cpuset will receive special handling
-after it is released, that is, after all processes cease using
-it (i.e., terminate or are moved to a different cpuset)
-and all child cpuset directories have been removed.
-See the \fBNotify On Release\fR section, below.
-.\" ====================== cpus ======================
-.TP
-.I cpuset.cpus
-List of the physical numbers of the CPUs on which processes
-in that cpuset are allowed to execute.
-See \fBList Format\fR below for a description of the
-format of
-.IR cpus .
-.IP
-The CPUs allowed to a cpuset may be changed by
-writing a new list to its
-.I cpus
-file.
-.\" ==================== cpu_exclusive ====================
-.TP
-.I cpuset.cpu_exclusive
-Flag (0 or 1).
-If set (1), the cpuset has exclusive use of
-its CPUs (no sibling or cousin cpuset may overlap CPUs).
-By default, this is off (0).
-Newly created cpusets also initially default this to off (0).
-.IP
-Two cpusets are
-.I sibling
-cpusets if they share the same parent cpuset in the
-.I /dev/cpuset
-hierarchy.
-Two cpusets are
-.I cousin
-cpusets if neither is the ancestor of the other.
-Regardless of the
-.I cpu_exclusive
-setting, if one cpuset is the ancestor of another,
-and if both of these cpusets have nonempty
-.IR cpus ,
-then their
-.I cpus
-must overlap, because the
-.I cpus
-of any cpuset are always a subset of the
-.I cpus
-of its parent cpuset.
-.\" ====================== mems ======================
-.TP
-.I cpuset.mems
-List of memory nodes on which processes in this cpuset are
-allowed to allocate memory.
-See \fBList Format\fR below for a description of the
-format of
-.IR mems .
-.\" ==================== mem_exclusive ====================
-.TP
-.I cpuset.mem_exclusive
-Flag (0 or 1).
-If set (1), the cpuset has exclusive use of
-its memory nodes (no sibling or cousin may overlap).
-Also if set (1), the cpuset is a \fBHardwall\fR cpuset (see below).
-By default, this is off (0).
-Newly created cpusets also initially default this to off (0).
-.IP
-Regardless of the
-.I mem_exclusive
-setting, if one cpuset is the ancestor of another,
-then their memory nodes must overlap, because the memory
-nodes of any cpuset are always a subset of the memory nodes
-of that cpuset's parent cpuset.
-.\" ==================== mem_hardwall ====================
-.TP
-.IR cpuset.mem_hardwall " (since Linux 2.6.26)"
-Flag (0 or 1).
-If set (1), the cpuset is a \fBHardwall\fR cpuset (see below).
-Unlike \fBmem_exclusive\fR,
-there is no constraint on whether cpusets
-marked \fBmem_hardwall\fR may have overlapping
-memory nodes with sibling or cousin cpusets.
-By default, this is off (0).
-Newly created cpusets also initially default this to off (0).
-.\" ==================== memory_migrate ====================
-.TP
-.IR cpuset.memory_migrate " (since Linux 2.6.16)"
-Flag (0 or 1).
-If set (1), then memory migration is enabled.
-By default, this is off (0).
-See the \fBMemory Migration\fR section, below.
-.\" ==================== memory_pressure ====================
-.TP
-.IR cpuset.memory_pressure " (since Linux 2.6.16)"
-A measure of how much memory pressure the processes in this
-cpuset are causing.
-See the \fBMemory Pressure\fR section, below.
-Unless
-.I memory_pressure_enabled
-is enabled, always has value zero (0).
-This file is read-only.
-See the
-.B WARNINGS
-section, below.
-.\" ================= memory_pressure_enabled =================
-.TP
-.IR cpuset.memory_pressure_enabled " (since Linux 2.6.16)"
-Flag (0 or 1).
-This file is present only in the root cpuset, normally
-.IR /dev/cpuset .
-If set (1), the
-.I memory_pressure
-calculations are enabled for all cpusets in the system.
-By default, this is off (0).
-See the
-\fBMemory Pressure\fR section, below.
-.\" ================== memory_spread_page ==================
-.TP
-.IR cpuset.memory_spread_page " (since Linux 2.6.17)"
-Flag (0 or 1).
-If set (1), pages in the kernel page cache
-(filesystem buffers) are uniformly spread across the cpuset.
-By default, this is off (0) in the top cpuset,
-and inherited from the parent cpuset in
-newly created cpusets.
-See the \fBMemory Spread\fR section, below.
-.\" ================== memory_spread_slab ==================
-.TP
-.IR cpuset.memory_spread_slab " (since Linux 2.6.17)"
-Flag (0 or 1).
-If set (1), the kernel slab caches
-for file I/O (directory and inode structures) are
-uniformly spread across the cpuset.
-By default, is off (0) in the top cpuset,
-and inherited from the parent cpuset in
-newly created cpusets.
-See the \fBMemory Spread\fR section, below.
-.\" ================== sched_load_balance ==================
-.TP
-.IR cpuset.sched_load_balance " (since Linux 2.6.24)"
-Flag (0 or 1).
-If set (1, the default) the kernel will
-automatically load balance processes in that cpuset over
-the allowed CPUs in that cpuset.
-If cleared (0) the
-kernel will avoid load balancing processes in this cpuset,
-.I unless
-some other cpuset with overlapping CPUs has its
-.I sched_load_balance
-flag set.
-See \fBScheduler Load Balancing\fR, below, for further details.
-.\" ================== sched_relax_domain_level ==================
-.TP
-.IR cpuset.sched_relax_domain_level " (since Linux 2.6.26)"
-Integer, between \-1 and a small positive value.
-The
-.I sched_relax_domain_level
-controls the width of the range of CPUs over which the kernel scheduler
-performs immediate rebalancing of runnable tasks across CPUs.
-If
-.I sched_load_balance
-is disabled, then the setting of
-.I sched_relax_domain_level
-does not matter, as no such load balancing is done.
-If
-.I sched_load_balance
-is enabled, then the higher the value of the
-.IR sched_relax_domain_level ,
-the wider
-the range of CPUs over which immediate load balancing is attempted.
-See \fBScheduler Relax Domain Level\fR, below, for further details.
-.\" ================== proc cpuset ==================
-.PP
-In addition to the above pseudo-files in each directory below
-.IR /dev/cpuset ,
-each process has a pseudo-file,
-.IR /proc/ pid /cpuset ,
-that displays the path of the process's cpuset directory
-relative to the root of the cpuset filesystem.
-.\" ================== proc status ==================
-.PP
-Also the
-.IR /proc/ pid /status
-file for each process has four added lines,
-displaying the process's
-.I Cpus_allowed
-(on which CPUs it may be scheduled) and
-.I Mems_allowed
-(on which memory nodes it may obtain memory),
-in the two formats \fBMask Format\fR and \fBList Format\fR (see below)
-as shown in the following example:
-.PP
-.in +4n
-.EX
-Cpus_allowed: ffffffff,ffffffff,ffffffff,ffffffff
-Cpus_allowed_list: 0\-127
-Mems_allowed: ffffffff,ffffffff
-Mems_allowed_list: 0\-63
-.EE
-.in
-.PP
-The "allowed" fields were added in Linux 2.6.24;
-the "allowed_list" fields were added in Linux 2.6.26.
-.\" ================== EXTENDED CAPABILITIES ==================
-.SH EXTENDED CAPABILITIES
-In addition to controlling which
-.I cpus
-and
-.I mems
-a process is allowed to use, cpusets provide the following
-extended capabilities.
-.\" ================== Exclusive Cpusets ==================
-.SS Exclusive cpusets
-If a cpuset is marked
-.I cpu_exclusive
-or
-.IR mem_exclusive ,
-no other cpuset, other than a direct ancestor or descendant,
-may share any of the same CPUs or memory nodes.
-.PP
-A cpuset that is
-.I mem_exclusive
-restricts kernel allocations for
-buffer cache pages and other internal kernel data pages
-commonly shared by the kernel across
-multiple users.
-All cpusets, whether
-.I mem_exclusive
-or not, restrict allocations of memory for user space.
-This enables configuring a
-system so that several independent jobs can share common kernel data,
-while isolating each job's user allocation in
-its own cpuset.
-To do this, construct a large
-.I mem_exclusive
-cpuset to hold all the jobs, and construct child,
-.RI non- mem_exclusive
-cpusets for each individual job.
-Only a small amount of kernel memory,
-such as requests from interrupt handlers, is allowed to be
-placed on memory nodes
-outside even a
-.I mem_exclusive
-cpuset.
-.\" ================== Hardwall ==================
-.SS Hardwall
-A cpuset that has
-.I mem_exclusive
-or
-.I mem_hardwall
-set is a
-.I hardwall
-cpuset.
-A
-.I hardwall
-cpuset restricts kernel allocations for page, buffer,
-and other data commonly shared by the kernel across multiple users.
-All cpusets, whether
-.I hardwall
-or not, restrict allocations of memory for user space.
-.PP
-This enables configuring a system so that several independent
-jobs can share common kernel data, such as filesystem pages,
-while isolating each job's user allocation in its own cpuset.
-To do this, construct a large
-.I hardwall
-cpuset to hold
-all the jobs, and construct child cpusets for each individual
-job which are not
-.I hardwall
-cpusets.
-.PP
-Only a small amount of kernel memory, such as requests from
-interrupt handlers, is allowed to be taken outside even a
-.I hardwall
-cpuset.
-.\" ================== Notify On Release ==================
-.SS Notify on release
-If the
-.I notify_on_release
-flag is enabled (1) in a cpuset,
-then whenever the last process in the cpuset leaves
-(exits or attaches to some other cpuset)
-and the last child cpuset of that cpuset is removed,
-the kernel will run the command
-.IR /sbin/cpuset_release_agent ,
-supplying the pathname (relative to the mount point of the
-cpuset filesystem) of the abandoned cpuset.
-This enables automatic removal of abandoned cpusets.
-.PP
-The default value of
-.I notify_on_release
-in the root cpuset at system boot is disabled (0).
-The default value of other cpusets at creation
-is the current value of their parent's
-.I notify_on_release
-setting.
-.PP
-The command
-.I /sbin/cpuset_release_agent
-is invoked, with the name
-.RI ( /dev/cpuset
-relative path)
-of the to-be-released cpuset in
-.IR argv[1] .
-.PP
-The usual contents of the command
-.I /sbin/cpuset_release_agent
-is simply the shell script:
-.PP
-.in +4n
-.EX
-#!/bin/sh
-rmdir /dev/cpuset/$1
-.EE
-.in
-.PP
-As with other flag values below, this flag can
-be changed by writing an ASCII
-number 0 or 1 (with optional trailing newline)
-into the file, to clear or set the flag, respectively.
-.\" ================== Memory Pressure ==================
-.SS Memory pressure
-The
-.I memory_pressure
-of a cpuset provides a simple per-cpuset running average of
-the rate that the processes in a cpuset are attempting to free up in-use
-memory on the nodes of the cpuset to satisfy additional memory requests.
-.PP
-This enables batch managers that are monitoring jobs running in dedicated
-cpusets to efficiently detect what level of memory pressure that job
-is causing.
-.PP
-This is useful both on tightly managed systems running a wide mix of
-submitted jobs, which may choose to terminate or reprioritize jobs that
-are trying to use more memory than allowed on the nodes assigned them,
-and with tightly coupled, long-running, massively parallel scientific
-computing jobs that will dramatically fail to meet required performance
-goals if they start to use more memory than allowed to them.
-.PP
-This mechanism provides a very economical way for the batch manager
-to monitor a cpuset for signs of memory pressure.
-It's up to the batch manager or other user code to decide
-what action to take if it detects signs of memory pressure.
-.PP
-Unless memory pressure calculation is enabled by setting the pseudo-file
-.IR /dev/cpuset/cpuset.memory_pressure_enabled ,
-it is not computed for any cpuset, and reads from any
-.I memory_pressure
-always return zero, as represented by the ASCII string "0\en".
-See the \fBWARNINGS\fR section, below.
-.PP
-A per-cpuset, running average is employed for the following reasons:
-.IP \[bu] 3
-Because this meter is per-cpuset rather than per-process or per virtual
-memory region, the system load imposed by a batch scheduler monitoring
-this metric is sharply reduced on large systems, because a scan of
-the tasklist can be avoided on each set of queries.
-.IP \[bu]
-Because this meter is a running average rather than an accumulating
-counter, a batch scheduler can detect memory pressure with a
-single read, instead of having to read and accumulate results
-for a period of time.
-.IP \[bu]
-Because this meter is per-cpuset rather than per-process,
-the batch scheduler can obtain the key information\[em]memory
-pressure in a cpuset\[em]with a single read, rather than having to
-query and accumulate results over all the (dynamically changing)
-set of processes in the cpuset.
-.PP
-The
-.I memory_pressure
-of a cpuset is calculated using a per-cpuset simple digital filter
-that is kept within the kernel.
-For each cpuset, this filter tracks
-the recent rate at which processes attached to that cpuset enter the
-kernel direct reclaim code.
-.PP
-The kernel direct reclaim code is entered whenever a process has to
-satisfy a memory page request by first finding some other page to
-repurpose, due to lack of any readily available already free pages.
-Dirty filesystem pages are repurposed by first writing them
-to disk.
-Unmodified filesystem buffer pages are repurposed
-by simply dropping them, though if that page is needed again, it
-will have to be reread from disk.
-.PP
-The
-.I cpuset.memory_pressure
-file provides an integer number representing the recent (half-life of
-10 seconds) rate of entries to the direct reclaim code caused by any
-process in the cpuset, in units of reclaims attempted per second,
-times 1000.
-.\" ================== Memory Spread ==================
-.SS Memory spread
-There are two Boolean flag files per cpuset that control where the
-kernel allocates pages for the filesystem buffers and related
-in-kernel data structures.
-They are called
-.I cpuset.memory_spread_page
-and
-.IR cpuset.memory_spread_slab .
-.PP
-If the per-cpuset Boolean flag file
-.I cpuset.memory_spread_page
-is set, then
-the kernel will spread the filesystem buffers (page cache) evenly
-over all the nodes that the faulting process is allowed to use, instead
-of preferring to put those pages on the node where the process is running.
-.PP
-If the per-cpuset Boolean flag file
-.I cpuset.memory_spread_slab
-is set,
-then the kernel will spread some filesystem-related slab caches,
-such as those for inodes and directory entries, evenly over all the nodes
-that the faulting process is allowed to use, instead of preferring to
-put those pages on the node where the process is running.
-.PP
-The setting of these flags does not affect the data segment
-(see
-.BR brk (2))
-or stack segment pages of a process.
-.PP
-By default, both kinds of memory spreading are off and the kernel
-prefers to allocate memory pages on the node local to where the
-requesting process is running.
-If that node is not allowed by the
-process's NUMA memory policy or cpuset configuration or if there are
-insufficient free memory pages on that node, then the kernel looks
-for the nearest node that is allowed and has sufficient free memory.
-.PP
-When new cpusets are created, they inherit the memory spread settings
-of their parent.
-.PP
-Setting memory spreading causes allocations for the affected page or
-slab caches to ignore the process's NUMA memory policy and be spread
-instead.
-However, the effect of these changes in memory placement
-caused by cpuset-specified memory spreading is hidden from the
-.BR mbind (2)
-or
-.BR set_mempolicy (2)
-calls.
-These two NUMA memory policy calls always appear to behave as if
-no cpuset-specified memory spreading is in effect, even if it is.
-If cpuset memory spreading is subsequently turned off, the NUMA
-memory policy most recently specified by these calls is automatically
-reapplied.
-.PP
-Both
-.I cpuset.memory_spread_page
-and
-.I cpuset.memory_spread_slab
-are Boolean flag files.
-By default, they contain "0", meaning that the feature is off
-for that cpuset.
-If a "1" is written to that file, that turns the named feature on.
-.PP
-Cpuset-specified memory spreading behaves similarly to what is known
-(in other contexts) as round-robin or interleave memory placement.
-.PP
-Cpuset-specified memory spreading can provide substantial performance
-improvements for jobs that:
-.IP \[bu] 3
-need to place thread-local data on
-memory nodes close to the CPUs which are running the threads that most
-frequently access that data; but also
-.IP \[bu]
-need to access large filesystem data sets that must to be spread
-across the several nodes in the job's cpuset in order to fit.
-.PP
-Without this policy,
-the memory allocation across the nodes in the job's cpuset
-can become very uneven,
-especially for jobs that might have just a single
-thread initializing or reading in the data set.
-.\" ================== Memory Migration ==================
-.SS Memory migration
-Normally, under the default setting (disabled) of
-.IR cpuset.memory_migrate ,
-once a page is allocated (given a physical page
-of main memory), then that page stays on whatever node it
-was allocated, so long as it remains allocated, even if the
-cpuset's memory-placement policy
-.I mems
-subsequently changes.
-.PP
-When memory migration is enabled in a cpuset, if the
-.I mems
-setting of the cpuset is changed, then any memory page in use by any
-process in the cpuset that is on a memory node that is no longer
-allowed will be migrated to a memory node that is allowed.
-.PP
-Furthermore, if a process is moved into a cpuset with
-.I memory_migrate
-enabled, any memory pages it uses that were on memory nodes allowed
-in its previous cpuset, but which are not allowed in its new cpuset,
-will be migrated to a memory node allowed in the new cpuset.
-.PP
-The relative placement of a migrated page within
-the cpuset is preserved during these migration operations if possible.
-For example,
-if the page was on the second valid node of the prior cpuset,
-then the page will be placed on the second valid node of the new cpuset,
-if possible.
-.\" ================== Scheduler Load Balancing ==================
-.SS Scheduler load balancing
-The kernel scheduler automatically load balances processes.
-If one CPU is underutilized,
-the kernel will look for processes on other more
-overloaded CPUs and move those processes to the underutilized CPU,
-within the constraints of such placement mechanisms as cpusets and
-.BR sched_setaffinity (2).
-.PP
-The algorithmic cost of load balancing and its impact on key shared
-kernel data structures such as the process list increases more than
-linearly with the number of CPUs being balanced.
-For example, it
-costs more to load balance across one large set of CPUs than it does
-to balance across two smaller sets of CPUs, each of half the size
-of the larger set.
-(The precise relationship between the number of CPUs being balanced
-and the cost of load balancing depends
-on implementation details of the kernel process scheduler, which is
-subject to change over time, as improved kernel scheduler algorithms
-are implemented.)
-.PP
-The per-cpuset flag
-.I sched_load_balance
-provides a mechanism to suppress this automatic scheduler load
-balancing in cases where it is not needed and suppressing it would have
-worthwhile performance benefits.
-.PP
-By default, load balancing is done across all CPUs, except those
-marked isolated using the kernel boot time "isolcpus=" argument.
-(See \fBScheduler Relax Domain Level\fR, below, to change this default.)
-.PP
-This default load balancing across all CPUs is not well suited to
-the following two situations:
-.IP \[bu] 3
-On large systems, load balancing across many CPUs is expensive.
-If the system is managed using cpusets to place independent jobs
-on separate sets of CPUs, full load balancing is unnecessary.
-.IP \[bu]
-Systems supporting real-time on some CPUs need to minimize
-system overhead on those CPUs, including avoiding process load
-balancing if that is not needed.
-.PP
-When the per-cpuset flag
-.I sched_load_balance
-is enabled (the default setting),
-it requests load balancing across
-all the CPUs in that cpuset's allowed CPUs,
-ensuring that load balancing can move a process (not otherwise pinned,
-as by
-.BR sched_setaffinity (2))
-from any CPU in that cpuset to any other.
-.PP
-When the per-cpuset flag
-.I sched_load_balance
-is disabled, then the
-scheduler will avoid load balancing across the CPUs in that cpuset,
-\fIexcept\fR in so far as is necessary because some overlapping cpuset
-has
-.I sched_load_balance
-enabled.
-.PP
-So, for example, if the top cpuset has the flag
-.I sched_load_balance
-enabled, then the scheduler will load balance across all
-CPUs, and the setting of the
-.I sched_load_balance
-flag in other cpusets has no effect,
-as we're already fully load balancing.
-.PP
-Therefore in the above two situations, the flag
-.I sched_load_balance
-should be disabled in the top cpuset, and only some of the smaller,
-child cpusets would have this flag enabled.
-.PP
-When doing this, you don't usually want to leave any unpinned processes in
-the top cpuset that might use nontrivial amounts of CPU, as such processes
-may be artificially constrained to some subset of CPUs, depending on
-the particulars of this flag setting in descendant cpusets.
-Even if such a process could use spare CPU cycles in some other CPUs,
-the kernel scheduler might not consider the possibility of
-load balancing that process to the underused CPU.
-.PP
-Of course, processes pinned to a particular CPU can be left in a cpuset
-that disables
-.I sched_load_balance
-as those processes aren't going anywhere else anyway.
-.\" ================== Scheduler Relax Domain Level ==================
-.SS Scheduler relax domain level
-The kernel scheduler performs immediate load balancing whenever
-a CPU becomes free or another task becomes runnable.
-This load
-balancing works to ensure that as many CPUs as possible are usefully
-employed running tasks.
-The kernel also performs periodic load
-balancing off the software clock described in
-.BR time (7).
-The setting of
-.I sched_relax_domain_level
-applies only to immediate load balancing.
-Regardless of the
-.I sched_relax_domain_level
-setting, periodic load balancing is attempted over all CPUs
-(unless disabled by turning off
-.IR sched_load_balance .)
-In any case, of course, tasks will be scheduled to run only on
-CPUs allowed by their cpuset, as modified by
-.BR sched_setaffinity (2)
-system calls.
-.PP
-On small systems, such as those with just a few CPUs, immediate load
-balancing is useful to improve system interactivity and to minimize
-wasteful idle CPU cycles.
-But on large systems, attempting immediate
-load balancing across a large number of CPUs can be more costly than
-it is worth, depending on the particular performance characteristics
-of the job mix and the hardware.
-.PP
-The exact meaning of the small integer values of
-.I sched_relax_domain_level
-will depend on internal
-implementation details of the kernel scheduler code and on the
-non-uniform architecture of the hardware.
-Both of these will evolve
-over time and vary by system architecture and kernel version.
-.PP
-As of this writing, when this capability was introduced in Linux
-2.6.26, on certain popular architectures, the positive values of
-.I sched_relax_domain_level
-have the following meanings.
-.PP
-.PD 0
-.TP
-.B 1
-Perform immediate load balancing across Hyper-Thread
-siblings on the same core.
-.TP
-.B 2
-Perform immediate load balancing across other cores in the same package.
-.TP
-.B 3
-Perform immediate load balancing across other CPUs
-on the same node or blade.
-.TP
-.B 4
-Perform immediate load balancing across over several
-(implementation detail) nodes [On NUMA systems].
-.TP
-.B 5
-Perform immediate load balancing across over all CPUs
-in system [On NUMA systems].
-.PD
-.PP
-The
-.I sched_relax_domain_level
-value of zero (0) always means
-don't perform immediate load balancing,
-hence that load balancing is done only periodically,
-not immediately when a CPU becomes available or another task becomes
-runnable.
-.PP
-The
-.I sched_relax_domain_level
-value of minus one (\-1)
-always means use the system default value.
-The system default value can vary by architecture and kernel version.
-This system default value can be changed by kernel
-boot-time "relax_domain_level=" argument.
-.PP
-In the case of multiple overlapping cpusets which have conflicting
-.I sched_relax_domain_level
-values, then the highest such value
-applies to all CPUs in any of the overlapping cpusets.
-In such cases,
-the value \fBminus one (\-1)\fR is the lowest value, overridden by any
-other value, and the value \fBzero (0)\fR is the next lowest value.
-.SH FORMATS
-The following formats are used to represent sets of
-CPUs and memory nodes.
-.\" ================== Mask Format ==================
-.SS Mask format
-The \fBMask Format\fR is used to represent CPU and memory-node bit masks
-in the
-.IR /proc/ pid /status
-file.
-.PP
-This format displays each 32-bit
-word in hexadecimal (using ASCII characters "0" - "9" and "a" - "f");
-words are filled with leading zeros, if required.
-For masks longer than one word, a comma separator is used between words.
-Words are displayed in big-endian
-order, which has the most significant bit first.
-The hex digits within a word are also in big-endian order.
-.PP
-The number of 32-bit words displayed is the minimum number needed to
-display all bits of the bit mask, based on the size of the bit mask.
-.PP
-Examples of the \fBMask Format\fR:
-.PP
-.in +4n
-.EX
-00000001 # just bit 0 set
-40000000,00000000,00000000 # just bit 94 set
-00000001,00000000,00000000 # just bit 64 set
-000000ff,00000000 # bits 32\-39 set
-00000000,000e3862 # 1,5,6,11\-13,17\-19 set
-.EE
-.in
-.PP
-A mask with bits 0, 1, 2, 4, 8, 16, 32, and 64 set displays as:
-.PP
-.in +4n
-.EX
-00000001,00000001,00010117
-.EE
-.in
-.PP
-The first "1" is for bit 64, the
-second for bit 32, the third for bit 16, the fourth for bit 8, the
-fifth for bit 4, and the "7" is for bits 2, 1, and 0.
-.\" ================== List Format ==================
-.SS List format
-The \fBList Format\fR for
-.I cpus
-and
-.I mems
-is a comma-separated list of CPU or memory-node
-numbers and ranges of numbers, in ASCII decimal.
-.PP
-Examples of the \fBList Format\fR:
-.PP
-.in +4n
-.EX
-0\-4,9 # bits 0, 1, 2, 3, 4, and 9 set
-0\-2,7,12\-14 # bits 0, 1, 2, 7, 12, 13, and 14 set
-.EE
-.in
-.\" ================== RULES ==================
-.SH RULES
-The following rules apply to each cpuset:
-.IP \[bu] 3
-Its CPUs and memory nodes must be a (possibly equal)
-subset of its parent's.
-.IP \[bu]
-It can be marked
-.I cpu_exclusive
-only if its parent is.
-.IP \[bu]
-It can be marked
-.I mem_exclusive
-only if its parent is.
-.IP \[bu]
-If it is
-.IR cpu_exclusive ,
-its CPUs may not overlap any sibling.
-.IP \[bu]
-If it is
-.IR mem_exclusive ,
-its memory nodes may not overlap any sibling.
-.\" ================== PERMISSIONS ==================
-.SH PERMISSIONS
-The permissions of a cpuset are determined by the permissions
-of the directories and pseudo-files in the cpuset filesystem,
-normally mounted at
-.IR /dev/cpuset .
-.PP
-For instance, a process can put itself in some other cpuset (than
-its current one) if it can write the
-.I tasks
-file for that cpuset.
-This requires execute permission on the encompassing directories
-and write permission on the
-.I tasks
-file.
-.PP
-An additional constraint is applied to requests to place some
-other process in a cpuset.
-One process may not attach another to
-a cpuset unless it would have permission to send that process
-a signal (see
-.BR kill (2)).
-.PP
-A process may create a child cpuset if it can access and write the
-parent cpuset directory.
-It can modify the CPUs or memory nodes
-in a cpuset if it can access that cpuset's directory (execute
-permissions on the each of the parent directories) and write the
-corresponding
-.I cpus
-or
-.I mems
-file.
-.PP
-There is one minor difference between the manner in which these
-permissions are evaluated and the manner in which normal filesystem
-operation permissions are evaluated.
-The kernel interprets
-relative pathnames starting at a process's current working directory.
-Even if one is operating on a cpuset file, relative pathnames
-are interpreted relative to the process's current working directory,
-not relative to the process's current cpuset.
-The only ways that
-cpuset paths relative to a process's current cpuset can be used are
-if either the process's current working directory is its cpuset
-(it first did a
-.B cd
-or
-.BR chdir (2)
-to its cpuset directory beneath
-.IR /dev/cpuset ,
-which is a bit unusual)
-or if some user code converts the relative cpuset path to a
-full filesystem path.
-.PP
-In theory, this means that user code should specify cpusets
-using absolute pathnames, which requires knowing the mount point of
-the cpuset filesystem (usually, but not necessarily,
-.IR /dev/cpuset ).
-In practice, all user level code that this author is aware of
-simply assumes that if the cpuset filesystem is mounted, then
-it is mounted at
-.IR /dev/cpuset .
-Furthermore, it is common practice for carefully written
-user code to verify the presence of the pseudo-file
-.I /dev/cpuset/tasks
-in order to verify that the cpuset pseudo-filesystem
-is currently mounted.
-.\" ================== WARNINGS ==================
-.SH WARNINGS
-.SS Enabling memory_pressure
-By default, the per-cpuset file
-.I cpuset.memory_pressure
-always contains zero (0).
-Unless this feature is enabled by writing "1" to the pseudo-file
-.IR /dev/cpuset/cpuset.memory_pressure_enabled ,
-the kernel does
-not compute per-cpuset
-.IR memory_pressure .
-.SS Using the echo command
-When using the
-.B echo
-command at the shell prompt to change the values of cpuset files,
-beware that the built-in
-.B echo
-command in some shells does not display an error message if the
-.BR write (2)
-system call fails.
-.\" Gack! csh(1)'s echo does this
-For example, if the command:
-.PP
-.in +4n
-.EX
-echo 19 > cpuset.mems
-.EE
-.in
-.PP
-failed because memory node 19 was not allowed (perhaps
-the current system does not have a memory node 19), then the
-.B echo
-command might not display any error.
-It is better to use the
-.B /bin/echo
-external command to change cpuset file settings, as this
-command will display
-.BR write (2)
-errors, as in the example:
-.PP
-.in +4n
-.EX
-/bin/echo 19 > cpuset.mems
-/bin/echo: write error: Invalid argument
-.EE
-.in
-.\" ================== EXCEPTIONS ==================
-.SH EXCEPTIONS
-.SS Memory placement
-Not all allocations of system memory are constrained by cpusets,
-for the following reasons.
-.PP
-If hot-plug functionality is used to remove all the CPUs that are
-currently assigned to a cpuset, then the kernel will automatically
-update the
-.I cpus_allowed
-of all processes attached to CPUs in that cpuset
-to allow all CPUs.
-When memory hot-plug functionality for removing
-memory nodes is available, a similar exception is expected to apply
-there as well.
-In general, the kernel prefers to violate cpuset placement,
-rather than starving a process that has had all its allowed CPUs or
-memory nodes taken offline.
-User code should reconfigure cpusets to refer only to online CPUs
-and memory nodes when using hot-plug to add or remove such resources.
-.PP
-A few kernel-critical, internal memory-allocation requests, marked
-GFP_ATOMIC, must be satisfied immediately.
-The kernel may drop some
-request or malfunction if one of these allocations fail.
-If such a request cannot be satisfied within the current process's cpuset,
-then we relax the cpuset, and look for memory anywhere we can find it.
-It's better to violate the cpuset than stress the kernel.
-.PP
-Allocations of memory requested by kernel drivers while processing
-an interrupt lack any relevant process context, and are not confined
-by cpusets.
-.SS Renaming cpusets
-You can use the
-.BR rename (2)
-system call to rename cpusets.
-Only simple renaming is supported; that is, changing the name of a cpuset
-directory is permitted, but moving a directory into
-a different directory is not permitted.
-.\" ================== ERRORS ==================
-.SH ERRORS
-The Linux kernel implementation of cpusets sets
-.I errno
-to specify the reason for a failed system call affecting cpusets.
-.PP
-The possible
-.I errno
-settings and their meaning when set on
-a failed cpuset call are as listed below.
-.TP
-.B E2BIG
-Attempted a
-.BR write (2)
-on a special cpuset file
-with a length larger than some kernel-determined upper
-limit on the length of such writes.
-.TP
-.B EACCES
-Attempted to
-.BR write (2)
-the process ID (PID) of a process to a cpuset
-.I tasks
-file when one lacks permission to move that process.
-.TP
-.B EACCES
-Attempted to add, using
-.BR write (2),
-a CPU or memory node to a cpuset, when that CPU or memory node was
-not already in its parent.
-.TP
-.B EACCES
-Attempted to set, using
-.BR write (2),
-.I cpuset.cpu_exclusive
-or
-.I cpuset.mem_exclusive
-on a cpuset whose parent lacks the same setting.
-.TP
-.B EACCES
-Attempted to
-.BR write (2)
-a
-.I cpuset.memory_pressure
-file.
-.TP
-.B EACCES
-Attempted to create a file in a cpuset directory.
-.TP
-.B EBUSY
-Attempted to remove, using
-.BR rmdir (2),
-a cpuset with attached processes.
-.TP
-.B EBUSY
-Attempted to remove, using
-.BR rmdir (2),
-a cpuset with child cpusets.
-.TP
-.B EBUSY
-Attempted to remove
-a CPU or memory node from a cpuset
-that is also in a child of that cpuset.
-.TP
-.B EEXIST
-Attempted to create, using
-.BR mkdir (2),
-a cpuset that already exists.
-.TP
-.B EEXIST
-Attempted to
-.BR rename (2)
-a cpuset to a name that already exists.
-.TP
-.B EFAULT
-Attempted to
-.BR read (2)
-or
-.BR write (2)
-a cpuset file using
-a buffer that is outside the writing processes accessible address space.
-.TP
-.B EINVAL
-Attempted to change a cpuset, using
-.BR write (2),
-in a way that would violate a
-.I cpu_exclusive
-or
-.I mem_exclusive
-attribute of that cpuset or any of its siblings.
-.TP
-.B EINVAL
-Attempted to
-.BR write (2)
-an empty
-.I cpuset.cpus
-or
-.I cpuset.mems
-list to a cpuset which has attached processes or child cpusets.
-.TP
-.B EINVAL
-Attempted to
-.BR write (2)
-a
-.I cpuset.cpus
-or
-.I cpuset.mems
-list which included a range with the second number smaller than
-the first number.
-.TP
-.B EINVAL
-Attempted to
-.BR write (2)
-a
-.I cpuset.cpus
-or
-.I cpuset.mems
-list which included an invalid character in the string.
-.TP
-.B EINVAL
-Attempted to
-.BR write (2)
-a list to a
-.I cpuset.cpus
-file that did not include any online CPUs.
-.TP
-.B EINVAL
-Attempted to
-.BR write (2)
-a list to a
-.I cpuset.mems
-file that did not include any online memory nodes.
-.TP
-.B EINVAL
-Attempted to
-.BR write (2)
-a list to a
-.I cpuset.mems
-file that included a node that held no memory.
-.TP
-.B EIO
-Attempted to
-.BR write (2)
-a string to a cpuset
-.I tasks
-file that
-does not begin with an ASCII decimal integer.
-.TP
-.B EIO
-Attempted to
-.BR rename (2)
-a cpuset into a different directory.
-.TP
-.B ENAMETOOLONG
-Attempted to
-.BR read (2)
-a
-.IR /proc/ pid /cpuset
-file for a cpuset path that is longer than the kernel page size.
-.TP
-.B ENAMETOOLONG
-Attempted to create, using
-.BR mkdir (2),
-a cpuset whose base directory name is longer than 255 characters.
-.TP
-.B ENAMETOOLONG
-Attempted to create, using
-.BR mkdir (2),
-a cpuset whose full pathname,
-including the mount point (typically "/dev/cpuset/") prefix,
-is longer than 4095 characters.
-.TP
-.B ENODEV
-The cpuset was removed by another process at the same time as a
-.BR write (2)
-was attempted on one of the pseudo-files in the cpuset directory.
-.TP
-.B ENOENT
-Attempted to create, using
-.BR mkdir (2),
-a cpuset in a parent cpuset that doesn't exist.
-.TP
-.B ENOENT
-Attempted to
-.BR access (2)
-or
-.BR open (2)
-a nonexistent file in a cpuset directory.
-.TP
-.B ENOMEM
-Insufficient memory is available within the kernel; can occur
-on a variety of system calls affecting cpusets, but only if the
-system is extremely short of memory.
-.TP
-.B ENOSPC
-Attempted to
-.BR write (2)
-the process ID (PID)
-of a process to a cpuset
-.I tasks
-file when the cpuset had an empty
-.I cpuset.cpus
-or empty
-.I cpuset.mems
-setting.
-.TP
-.B ENOSPC
-Attempted to
-.BR write (2)
-an empty
-.I cpuset.cpus
-or
-.I cpuset.mems
-setting to a cpuset that
-has tasks attached.
-.TP
-.B ENOTDIR
-Attempted to
-.BR rename (2)
-a nonexistent cpuset.
-.TP
-.B EPERM
-Attempted to remove a file from a cpuset directory.
-.TP
-.B ERANGE
-Specified a
-.I cpuset.cpus
-or
-.I cpuset.mems
-list to the kernel which included a number too large for the kernel
-to set in its bit masks.
-.TP
-.B ESRCH
-Attempted to
-.BR write (2)
-the process ID (PID) of a nonexistent process to a cpuset
-.I tasks
-file.
-.\" ================== VERSIONS ==================
-.SH VERSIONS
-Cpusets appeared in Linux 2.6.12.
-.\" ================== NOTES ==================
-.SH NOTES
-Despite its name, the
-.I pid
-parameter is actually a thread ID,
-and each thread in a threaded group can be attached to a different
-cpuset.
-The value returned from a call to
-.BR gettid (2)
-can be passed in the argument
-.IR pid .
-.\" ================== BUGS ==================
-.SH BUGS
-.I cpuset.memory_pressure
-cpuset files can be opened
-for writing, creation, or truncation, but then the
-.BR write (2)
-fails with
-.I errno
-set to
-.BR EACCES ,
-and the creation and truncation options on
-.BR open (2)
-have no effect.
-.\" ================== EXAMPLES ==================
-.SH EXAMPLES
-The following examples demonstrate querying and setting cpuset
-options using shell commands.
-.SS Creating and attaching to a cpuset.
-To create a new cpuset and attach the current command shell to it,
-the steps are:
-.PP
-.PD 0
-.IP (1) 5
-mkdir /dev/cpuset (if not already done)
-.IP (2)
-mount \-t cpuset none /dev/cpuset (if not already done)
-.IP (3)
-Create the new cpuset using
-.BR mkdir (1).
-.IP (4)
-Assign CPUs and memory nodes to the new cpuset.
-.IP (5)
-Attach the shell to the new cpuset.
-.PD
-.PP
-For example, the following sequence of commands will set up a cpuset
-named "Charlie", containing just CPUs 2 and 3, and memory node 1,
-and then attach the current shell to that cpuset.
-.PP
-.in +4n
-.EX
-.RB "$" " mkdir /dev/cpuset"
-.RB "$" " mount \-t cpuset cpuset /dev/cpuset"
-.RB "$" " cd /dev/cpuset"
-.RB "$" " mkdir Charlie"
-.RB "$" " cd Charlie"
-.RB "$" " /bin/echo 2\-3 > cpuset.cpus"
-.RB "$" " /bin/echo 1 > cpuset.mems"
-.RB "$" " /bin/echo $$ > tasks"
-# The current shell is now running in cpuset Charlie
-# The next line should display \[aq]/Charlie\[aq]
-.RB "$" " cat /proc/self/cpuset"
-.EE
-.in
-.\"
-.SS Migrating a job to different memory nodes.
-To migrate a job (the set of processes attached to a cpuset)
-to different CPUs and memory nodes in the system, including moving
-the memory pages currently allocated to that job,
-perform the following steps.
-.PP
-.PD 0
-.IP (1) 5
-Let's say we want to move the job in cpuset
-.I alpha
-(CPUs 4\[en]7 and memory nodes 2\[en]3) to a new cpuset
-.I beta
-(CPUs 16\[en]19 and memory nodes 8\[en]9).
-.IP (2)
-First create the new cpuset
-.IR beta .
-.IP (3)
-Then allow CPUs 16\[en]19 and memory nodes 8\[en]9 in
-.IR beta .
-.IP (4)
-Then enable
-.I memory_migration
-in
-.IR beta .
-.IP (5)
-Then move each process from
-.I alpha
-to
-.IR beta .
-.PD
-.PP
-The following sequence of commands accomplishes this.
-.PP
-.in +4n
-.EX
-.RB "$" " cd /dev/cpuset"
-.RB "$" " mkdir beta"
-.RB "$" " cd beta"
-.RB "$" " /bin/echo 16\-19 > cpuset.cpus"
-.RB "$" " /bin/echo 8\-9 > cpuset.mems"
-.RB "$" " /bin/echo 1 > cpuset.memory_migrate"
-.RB "$" " while read i; do /bin/echo $i; done < ../alpha/tasks > tasks"
-.EE
-.in
-.PP
-The above should move any processes in
-.I alpha
-to
-.IR beta ,
-and any memory held by these processes on memory nodes 2\[en]3 to memory
-nodes 8\[en]9, respectively.
-.PP
-Notice that the last step of the above sequence did not do:
-.PP
-.in +4n
-.EX
-.RB "$" " cp ../alpha/tasks tasks"
-.EE
-.in
-.PP
-The
-.I while
-loop, rather than the seemingly easier use of the
-.BR cp (1)
-command, was necessary because
-only one process PID at a time may be written to the
-.I tasks
-file.
-.PP
-The same effect (writing one PID at a time) as the
-.I while
-loop can be accomplished more efficiently, in fewer keystrokes and in
-syntax that works on any shell, but alas more obscurely, by using the
-.B \-u
-(unbuffered) option of
-.BR sed (1):
-.PP
-.in +4n
-.EX
-.RB "$" " sed \-un p < ../alpha/tasks > tasks"
-.EE
-.in
-.\" ================== SEE ALSO ==================
-.SH SEE ALSO
-.BR taskset (1),
-.BR get_mempolicy (2),
-.BR getcpu (2),
-.BR mbind (2),
-.BR sched_getaffinity (2),
-.BR sched_setaffinity (2),
-.BR sched_setscheduler (2),
-.BR set_mempolicy (2),
-.BR CPU_SET (3),
-.BR proc (5),
-.BR cgroups (7),
-.BR numa (7),
-.BR sched (7),
-.BR migratepages (8),
-.BR numactl (8)
-.PP
-.I Documentation/admin\-guide/cgroup\-v1/cpusets.rst
-in the Linux kernel source tree
-.\" commit 45ce80fb6b6f9594d1396d44dd7e7c02d596fef8
-(or
-.I Documentation/cgroup\-v1/cpusets.txt
-before Linux 4.18, and
-.I Documentation/cpusets.txt
-before Linux 2.6.29)
diff --git a/man7/credentials.7 b/man7/credentials.7
deleted file mode 100644
index 77cb5e0ef..000000000
--- a/man7/credentials.7
+++ /dev/null
@@ -1,379 +0,0 @@
-.\" Copyright (c) 2007 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2007-06-13 Creation
-.\"
-.TH credentials 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-credentials \- process identifiers
-.SH DESCRIPTION
-.SS Process ID (PID)
-Each process has a unique nonnegative integer identifier
-that is assigned when the process is created using
-.BR fork (2).
-A process can obtain its PID using
-.BR getpid (2).
-A PID is represented using the type
-.I pid_t
-(defined in
-.IR <sys/types.h> ).
-.PP
-PIDs are used in a range of system calls to identify the process
-affected by the call, for example:
-.BR kill (2),
-.BR ptrace (2),
-.BR setpriority (2),
-.\" .BR sched_rr_get_interval (2),
-.\" .BR sched_getaffinity (2),
-.\" .BR sched_setaffinity (2),
-.\" .BR sched_getparam (2),
-.\" .BR sched_setparam (2),
-.\" .BR sched_setscheduler (2),
-.\" .BR sched_getscheduler (2),
-.BR setpgid (2),
-.\" .BR getsid (2),
-.BR setsid (2),
-.BR sigqueue (3),
-and
-.BR waitpid (2).
-.\" .BR waitid (2),
-.\" .BR wait4 (2),
-.PP
-A process's PID is preserved across an
-.BR execve (2).
-.SS Parent process ID (PPID)
-A process's parent process ID identifies the process that created
-this process using
-.BR fork (2).
-A process can obtain its PPID using
-.BR getppid (2).
-A PPID is represented using the type
-.IR pid_t .
-.PP
-A process's PPID is preserved across an
-.BR execve (2).
-.SS Process group ID and session ID
-Each process has a session ID and a process group ID,
-both represented using the type
-.IR pid_t .
-A process can obtain its session ID using
-.BR getsid (2),
-and its process group ID using
-.BR getpgrp (2).
-.PP
-A child created by
-.BR fork (2)
-inherits its parent's session ID and process group ID.
-A process's session ID and process group ID are preserved across an
-.BR execve (2).
-.PP
-Sessions and process groups are abstractions devised to support shell
-job control.
-A process group (sometimes called a "job") is a collection of
-processes that share the same process group ID;
-the shell creates a new process group for the process(es) used
-to execute single command or pipeline (e.g., the two processes
-created to execute the command "ls\ |\ wc" are placed in the
-same process group).
-A process's group membership can be set using
-.BR setpgid (2).
-The process whose process ID is the same as its process group ID is the
-\fIprocess group leader\fP for that group.
-.PP
-A session is a collection of processes that share the same session ID.
-All of the members of a process group also have the same session ID
-(i.e., all of the members of a process group always belong to the
-same session, so that sessions and process groups form a strict
-two-level hierarchy of processes.)
-A new session is created when a process calls
-.BR setsid (2),
-which creates a new session whose session ID is the same
-as the PID of the process that called
-.BR setsid (2).
-The creator of the session is called the \fIsession leader\fP.
-.PP
-All of the processes in a session share a
-.IR "controlling terminal" .
-The controlling terminal is established when the session leader
-first opens a terminal (unless the
-.B O_NOCTTY
-flag is specified when calling
-.BR open (2)).
-A terminal may be the controlling terminal of at most one session.
-.PP
-At most one of the jobs in a session may be the
-.IR "foreground job" ;
-other jobs in the session are
-.IR "background jobs" .
-Only the foreground job may read from the terminal;
-when a process in the background attempts to read from the terminal,
-its process group is sent a
-.B SIGTTIN
-signal, which suspends the job.
-If the
-.B TOSTOP
-flag has been set for the terminal (see
-.BR termios (3)),
-then only the foreground job may write to the terminal;
-writes from background jobs cause a
-.B SIGTTOU
-signal to be generated, which suspends the job.
-When terminal keys that generate a signal (such as the
-.I interrupt
-key, normally control-C)
-are pressed, the signal is sent to the processes in the foreground job.
-.PP
-Various system calls and library functions
-may operate on all members of a process group,
-including
-.BR kill (2),
-.BR killpg (3),
-.BR getpriority (2),
-.BR setpriority (2),
-.BR ioprio_get (2),
-.BR ioprio_set (2),
-.BR waitid (2),
-and
-.BR waitpid (2).
-See also the discussion of the
-.BR F_GETOWN ,
-.BR F_GETOWN_EX ,
-.BR F_SETOWN ,
-and
-.B F_SETOWN_EX
-operations in
-.BR fcntl (2).
-.SS User and group identifiers
-Each process has various associated user and group IDs.
-These IDs are integers, respectively represented using the types
-.I uid_t
-and
-.I gid_t
-(defined in
-.IR <sys/types.h> ).
-.PP
-On Linux, each process has the following user and group identifiers:
-.IP \[bu] 3
-Real user ID and real group ID.
-These IDs determine who owns the process.
-A process can obtain its real user (group) ID using
-.BR getuid (2)
-.RB ( getgid (2)).
-.IP \[bu]
-Effective user ID and effective group ID.
-These IDs are used by the kernel to determine the permissions
-that the process will have when accessing shared resources such
-as message queues, shared memory, and semaphores.
-On most UNIX systems, these IDs also determine the
-permissions when accessing files.
-However, Linux uses the filesystem IDs described below
-for this task.
-A process can obtain its effective user (group) ID using
-.BR geteuid (2)
-.RB ( getegid (2)).
-.IP \[bu]
-Saved set-user-ID and saved set-group-ID.
-These IDs are used in set-user-ID and set-group-ID programs to save
-a copy of the corresponding effective IDs that were set when
-the program was executed (see
-.BR execve (2)).
-A set-user-ID program can assume and drop privileges by
-switching its effective user ID back and forth between the values
-in its real user ID and saved set-user-ID.
-This switching is done via calls to
-.BR seteuid (2),
-.BR setreuid (2),
-or
-.BR setresuid (2).
-A set-group-ID program performs the analogous tasks using
-.BR setegid (2),
-.BR setregid (2),
-or
-.BR setresgid (2).
-A process can obtain its saved set-user-ID (set-group-ID) using
-.BR getresuid (2)
-.RB ( getresgid (2)).
-.IP \[bu]
-Filesystem user ID and filesystem group ID (Linux-specific).
-These IDs, in conjunction with the supplementary group IDs described
-below, are used to determine permissions for accessing files; see
-.BR path_resolution (7)
-for details.
-Whenever a process's effective user (group) ID is changed,
-the kernel also automatically changes the filesystem user (group) ID
-to the same value.
-Consequently, the filesystem IDs normally have the same values
-as the corresponding effective ID, and the semantics for file-permission
-checks are thus the same on Linux as on other UNIX systems.
-The filesystem IDs can be made to differ from the effective IDs
-by calling
-.BR setfsuid (2)
-and
-.BR setfsgid (2).
-.IP \[bu]
-Supplementary group IDs.
-This is a set of additional group IDs that are used for permission
-checks when accessing files and other shared resources.
-Before Linux 2.6.4,
-a process can be a member of up to 32 supplementary groups;
-since Linux 2.6.4,
-a process can be a member of up to 65536 supplementary groups.
-The call
-.I sysconf(_SC_NGROUPS_MAX)
-can be used to determine the number of supplementary groups
-of which a process may be a member.
-.\" Since Linux 2.6.4, the limit is visible via the read-only file
-.\" /proc/sys/kernel/ngroups_max.
-.\" As at 2.6.22-rc2, this file is still read-only.
-A process can obtain its set of supplementary group IDs using
-.BR getgroups (2).
-.PP
-A child process created by
-.BR fork (2)
-inherits copies of its parent's user and groups IDs.
-During an
-.BR execve (2),
-a process's real user and group ID and supplementary
-group IDs are preserved;
-the effective and saved set IDs may be changed, as described in
-.BR execve (2).
-.PP
-Aside from the purposes noted above,
-a process's user IDs are also employed in a number of other contexts:
-.IP \[bu] 3
-when determining the permissions for sending signals (see
-.BR kill (2));
-.IP \[bu]
-when determining the permissions for setting
-process-scheduling parameters (nice value, real time
-scheduling policy and priority, CPU affinity, I/O priority) using
-.BR setpriority (2),
-.BR sched_setaffinity (2),
-.BR sched_setscheduler (2),
-.BR sched_setparam (2),
-.BR sched_setattr (2),
-and
-.BR ioprio_set (2);
-.IP \[bu]
-when checking resource limits (see
-.BR getrlimit (2));
-.IP \[bu]
-when checking the limit on the number of inotify instances
-that the process may create (see
-.BR inotify (7)).
-.\"
-.SS Modifying process user and group IDs
-Subject to rules described in the relevant manual pages,
-a process can use the following APIs to modify its user and group IDs:
-.TP
-.BR setuid "(2) (" setgid (2))
-Modify the process's real (and possibly effective and saved-set)
-user (group) IDs.
-.TP
-.BR seteuid "(2) (" setegid (2))
-Modify the process's effective user (group) ID.
-.TP
-.BR setfsuid "(2) (" setfsgid (2))
-Modify the process's filesystem user (group) ID.
-.TP
-.BR setreuid "(2) (" setregid (2))
-Modify the process's real and effective (and possibly saved-set)
-user (group) IDs.
-.TP
-.BR setresuid "(2) (" setresgid (2))
-Modify the process's real, effective, and saved-set user (group) IDs.
-.TP
-.BR setgroups (2)
-Modify the process's supplementary group list.
-.PP
-Any changes to a process's effective user (group) ID
-are automatically carried over to the process's
-filesystem user (group) ID.
-Changes to a process's effective user or group ID can also affect the
-process "dumpable" attribute, as described in
-.BR prctl (2).
-.PP
-Changes to process user and group IDs can affect the capabilities
-of the process, as described in
-.BR capabilities (7).
-.SH STANDARDS
-Process IDs, parent process IDs, process group IDs, and session IDs
-are specified in POSIX.1.
-The real, effective, and saved set user and groups IDs,
-and the supplementary group IDs, are specified in POSIX.1.
-.PP
-The filesystem user and group IDs are a Linux extension.
-.SH NOTES
-Various fields in the
-.IR /proc/ pid /status
-file show the process credentials described above.
-See
-.BR proc (5)
-for further information.
-.PP
-The POSIX threads specification requires that
-credentials are shared by all of the threads in a process.
-However, at the kernel level, Linux maintains separate user and group
-credentials for each thread.
-The NPTL threading implementation does some work to ensure
-that any change to user or group credentials
-(e.g., calls to
-.BR setuid (2),
-.BR setresuid (2))
-is carried through to all of the POSIX threads in a process.
-See
-.BR nptl (7)
-for further details.
-.SH SEE ALSO
-.BR bash (1),
-.BR csh (1),
-.BR groups (1),
-.BR id (1),
-.BR newgrp (1),
-.BR ps (1),
-.BR runuser (1),
-.BR setpriv (1),
-.BR sg (1),
-.BR su (1),
-.BR access (2),
-.BR execve (2),
-.BR faccessat (2),
-.BR fork (2),
-.BR getgroups (2),
-.BR getpgrp (2),
-.BR getpid (2),
-.BR getppid (2),
-.BR getsid (2),
-.BR kill (2),
-.BR setegid (2),
-.BR seteuid (2),
-.BR setfsgid (2),
-.BR setfsuid (2),
-.BR setgid (2),
-.BR setgroups (2),
-.BR setpgid (2),
-.BR setresgid (2),
-.BR setresuid (2),
-.BR setsid (2),
-.BR setuid (2),
-.BR waitpid (2),
-.BR euidaccess (3),
-.BR initgroups (3),
-.BR killpg (3),
-.BR tcgetpgrp (3),
-.BR tcgetsid (3),
-.BR tcsetpgrp (3),
-.BR group (5),
-.BR passwd (5),
-.BR shadow (5),
-.BR capabilities (7),
-.BR namespaces (7),
-.BR path_resolution (7),
-.BR pid_namespaces (7),
-.BR pthreads (7),
-.BR signal (7),
-.BR system_data_types (7),
-.BR unix (7),
-.BR user_namespaces (7),
-.BR sudo (8)
diff --git a/man7/ddp.7 b/man7/ddp.7
deleted file mode 100644
index 2e8a36f73..000000000
--- a/man7/ddp.7
+++ /dev/null
@@ -1,245 +0,0 @@
-.\" This man page is Copyright (C) 1998 Alan Cox.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" $Id: ddp.7,v 1.3 1999/05/13 11:33:22 freitag Exp $
-.\"
-.TH ddp 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ddp \- Linux AppleTalk protocol implementation
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.B #include <netatalk/at.h>
-.PP
-.IB ddp_socket " = socket(AF_APPLETALK, SOCK_DGRAM, 0);"
-.IB raw_socket " = socket(AF_APPLETALK, SOCK_RAW, " protocol ");"
-.fi
-.SH DESCRIPTION
-Linux implements the AppleTalk protocols described in
-.IR "Inside AppleTalk" .
-Only the DDP layer and AARP are present in
-the kernel.
-They are designed to be used via the
-.B netatalk
-protocol
-libraries.
-This page documents the interface for those who wish or need to
-use the DDP layer directly.
-.PP
-The communication between AppleTalk and the user program works using a
-BSD-compatible socket interface.
-For more information on sockets, see
-.BR socket (7).
-.PP
-An AppleTalk socket is created by calling the
-.BR socket (2)
-function with a
-.B AF_APPLETALK
-socket family argument.
-Valid socket types are
-.B SOCK_DGRAM
-to open a
-.B ddp
-socket or
-.B SOCK_RAW
-to open a
-.B raw
-socket.
-.I protocol
-is the AppleTalk protocol to be received or sent.
-For
-.B SOCK_RAW
-you must specify
-.BR ATPROTO_DDP .
-.PP
-Raw sockets may be opened only by a process with effective user ID 0
-or when the process has the
-.B CAP_NET_RAW
-capability.
-.SS Address format
-An AppleTalk socket address is defined as a combination of a network number,
-a node number, and a port number.
-.PP
-.in +4n
-.EX
-struct at_addr {
- unsigned short s_net;
- unsigned char s_node;
-};
-\&
-struct sockaddr_atalk {
- sa_family_t sat_family; /* address family */
- unsigned char sat_port; /* port */
- struct at_addr sat_addr; /* net/node */
-};
-.EE
-.in
-.PP
-.I sat_family
-is always set to
-.BR AF_APPLETALK .
-.I sat_port
-contains the port.
-The port numbers below 129 are known as
-.IR "reserved ports" .
-Only processes with the effective user ID 0 or the
-.B CAP_NET_BIND_SERVICE
-capability may
-.BR bind (2)
-to these sockets.
-.I sat_addr
-is the host address.
-The
-.I net
-member of
-.I struct at_addr
-contains the host network in network byte order.
-The value of
-.B AT_ANYNET
-is a
-wildcard and also implies \[lq]this network.\[rq]
-The
-.I node
-member of
-.I struct at_addr
-contains the host node number.
-The value of
-.B AT_ANYNODE
-is a
-wildcard and also implies \[lq]this node.\[rq] The value of
-.B ATADDR_BCAST
-is a link
-local broadcast address.
-.\" FIXME . this doesn't make sense [johnl]
-.SS Socket options
-No protocol-specific socket options are supported.
-.SS /proc interfaces
-IP supports a set of
-.I /proc
-interfaces to configure some global AppleTalk parameters.
-The parameters can be accessed by reading or writing files in the directory
-.IR /proc/sys/net/atalk/ .
-.TP
-.I aarp\-expiry\-time
-The time interval (in seconds) before an AARP cache entry expires.
-.TP
-.I aarp\-resolve\-time
-The time interval (in seconds) before an AARP cache entry is resolved.
-.TP
-.I aarp\-retransmit\-limit
-The number of retransmissions of an AARP query before the node is declared
-dead.
-.TP
-.I aarp\-tick\-time
-The timer rate (in seconds) for the timer driving AARP.
-.PP
-The default values match the specification and should never need to be
-changed.
-.SS Ioctls
-All ioctls described in
-.BR socket (7)
-apply to DDP.
-.\" FIXME . Add a section about multicasting
-.SH ERRORS
-.TP
-.B EACCES
-The user tried to execute an operation without the necessary permissions.
-These include sending to a broadcast address without
-having the broadcast flag set,
-and trying to bind to a reserved port without effective user ID 0 or
-.BR CAP_NET_BIND_SERVICE .
-.TP
-.B EADDRINUSE
-Tried to bind to an address already in use.
-.TP
-.B EADDRNOTAVAIL
-A nonexistent interface was requested or the requested source address was
-not local.
-.TP
-.B EAGAIN
-Operation on a nonblocking socket would block.
-.TP
-.B EALREADY
-A connection operation on a nonblocking socket is already in progress.
-.TP
-.B ECONNABORTED
-A connection was closed during an
-.BR accept (2).
-.TP
-.B EHOSTUNREACH
-No routing table entry matches the destination address.
-.TP
-.B EINVAL
-Invalid argument passed.
-.TP
-.B EISCONN
-.BR connect (2)
-was called on an already connected socket.
-.TP
-.B EMSGSIZE
-Datagram is bigger than the DDP MTU.
-.TP
-.B ENODEV
-Network device not available or not capable of sending IP.
-.TP
-.B ENOENT
-.B SIOCGSTAMP
-was called on a socket where no packet arrived.
-.TP
-.BR ENOMEM " and " ENOBUFS
-Not enough memory available.
-.TP
-.B ENOPKG
-A kernel subsystem was not configured.
-.TP
-.BR ENOPROTOOPT " and " EOPNOTSUPP
-Invalid socket option passed.
-.TP
-.B ENOTCONN
-The operation is defined only on a connected socket, but the socket wasn't
-connected.
-.TP
-.B EPERM
-User doesn't have permission to set high priority,
-make a configuration change,
-or send signals to the requested process or group.
-.TP
-.B EPIPE
-The connection was unexpectedly closed or shut down by the other end.
-.TP
-.B ESOCKTNOSUPPORT
-The socket was unconfigured, or an unknown socket type was requested.
-.SH VERSIONS
-AppleTalk is supported by Linux 2.0 or higher.
-The
-.I /proc
-interfaces exist since Linux 2.2.
-.SH NOTES
-Be very careful with the
-.B SO_BROADCAST
-option; it is not privileged in Linux.
-It is easy to overload the network
-with careless sending to broadcast addresses.
-.SS Compatibility
-The basic AppleTalk socket interface is compatible with
-.B netatalk
-on BSD-derived systems.
-Many BSD systems fail to check
-.B SO_BROADCAST
-when sending broadcast frames; this can lead to compatibility problems.
-.PP
-The
-raw
-socket mode is unique to Linux and exists to support the alternative CAP
-package and AppleTalk monitoring tools more easily.
-.SH BUGS
-There are too many inconsistent error values.
-.PP
-The ioctls used to configure routing tables, devices,
-AARP tables, and other devices are not yet described.
-.SH SEE ALSO
-.BR recvmsg (2),
-.BR sendmsg (2),
-.BR capabilities (7),
-.BR socket (7)
diff --git a/man7/environ.7 b/man7/environ.7
deleted file mode 100644
index 3d4f707d6..000000000
--- a/man7/environ.7
+++ /dev/null
@@ -1,354 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\" and Andries Brouwer (aeb@cwi.nl), Fri Feb 14 21:47:50 1997.
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sun Jul 25 10:45:30 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Sun Jul 21 21:25:26 1996 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified Mon Oct 21 17:47:19 1996 by Eric S. Raymond (esr@thyrsus.com)
-.\" Modified Wed Aug 27 20:28:58 1997 by Nicolás Lichtmaier (nick@debian.org)
-.\" Modified Mon Sep 21 00:00:26 1998 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified Wed Jan 24 06:37:24 2001 by Eric S. Raymond (esr@thyrsus.com)
-.\" Modified Thu Dec 13 23:53:27 2001 by Martin Schulze <joey@infodrom.org>
-.\"
-.TH environ 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-environ \- user environment
-.SH SYNOPSIS
-.nf
-.BI "extern char **" environ ;
-.fi
-.SH DESCRIPTION
-The variable
-.I environ
-points to an array of pointers to strings called the "environment".
-The last pointer in this array has the value NULL.
-This array of strings is made available to the process by the
-.BR execve (2)
-call when a new program is started.
-When a child process is created via
-.BR fork (2),
-it inherits a
-.I copy
-of its parent's environment.
-.PP
-By convention, the strings in
-.I environ
-have the form "\fIname\fP\fB=\fP\fIvalue\fP".
-The name is case-sensitive and may not contain
-the character "\fB=\fP".
-The value can be anything that can be represented as a string.
-The name and the value may not contain an embedded null byte (\[aq]\e0\[aq]),
-since this is assumed to terminate the string.
-.PP
-Environment variables may be placed in the shell's environment by the
-.I export
-command in
-.BR sh (1),
-or by the
-.I setenv
-command if you use
-.BR csh (1).
-.PP
-The initial environment of the shell is populated in various ways,
-such as definitions from
-.I /etc/environment
-that are processed by
-.BR pam_env (8)
-for all users at login time (on systems that employ
-.BR pam (8)).
-In addition, various shell initialization scripts, such as the system-wide
-.I /etc/profile
-script and per-user initializations script may include commands
-that add variables to the shell's environment;
-see the manual page of your preferred shell for details.
-.PP
-Bourne-style shells support the syntax
-.PP
-.in +4n
-.EX
-NAME=value command
-.EE
-.in
-.PP
-to create an environment variable definition only in the scope
-of the process that executes
-.IR command .
-Multiple variable definitions, separated by white space, may precede
-.IR command .
-.PP
-Arguments may also be placed in the
-environment at the point of an
-.BR exec (3).
-A C program can manipulate its environment using the functions
-.BR getenv (3),
-.BR putenv (3),
-.BR setenv (3),
-and
-.BR unsetenv (3).
-.PP
-What follows is a list of environment variables typically seen on a
-system.
-This list is incomplete and includes only common variables seen
-by average users in their day-to-day routine.
-Environment variables specific to a particular program or library function
-are documented in the ENVIRONMENT section of the appropriate manual page.
-.TP
-.B USER
-The name of the logged-in user (used by some BSD-derived programs).
-Set at login time, see section NOTES below.
-.TP
-.B LOGNAME
-The name of the logged-in user (used by some System-V derived programs).
-Set at login time, see section NOTES below.
-.TP
-.B HOME
-A user's login directory.
-Set at login time, see section NOTES below.
-.TP
-.B LANG
-The name of a locale to use for locale categories when not overridden
-by
-.B LC_ALL
-or more specific environment variables such as
-.BR LC_COLLATE ,
-.BR LC_CTYPE ,
-.BR LC_MESSAGES ,
-.BR LC_MONETARY ,
-.BR LC_NUMERIC ,
-and
-.B LC_TIME
-(see
-.BR locale (7)
-for further details of the
-.B LC_*
-environment variables).
-.TP
-.B PATH
-The sequence of directory prefixes that
-.BR sh (1)
-and many other
-programs employ when searching for an executable file that is specified
-as a simple filename (i.a., a pathname that contains no slashes).
-The prefixes are separated by colons (\fB:\fP).
-The list of prefixes is searched from beginning to end,
-by checking the pathname formed by concatenating
-a prefix, a slash, and the filename,
-until a file with execute permission is found.
-.IP
-As a legacy feature, a zero-length prefix
-(specified as two adjacent colons, or an initial or terminating colon)
-is interpreted to mean the current working directory.
-However, use of this feature is deprecated,
-and POSIX notes that a conforming application shall use
-an explicit pathname (e.g.,
-.IR . )
-to specify the current working directory.
-.IP
-Analogously to
-.BR PATH ,
-one has
-.B CDPATH
-used by some shells to find the target
-of a change directory command,
-.B MANPATH
-used by
-.BR man (1)
-to find manual pages, and so on.
-.TP
-.B PWD
-Absolute path to the current working directory;
-required to be partially canonical (no
-.I .\&
-or
-.I ..\&
-components).
-.TP
-.B SHELL
-The absolute pathname of the user's login shell.
-Set at login time, see section NOTES below.
-.TP
-.B TERM
-The terminal type for which output is to be prepared.
-.TP
-.B PAGER
-The user's preferred utility to display text files.
-Any string acceptable as a command-string operand to the
-.I sh\ \-c
-command shall be valid.
-If
-.B PAGER
-is null or is not set,
-then applications that launch a pager will default to a program such as
-.BR less (1)
-or
-.BR more (1).
-.TP
-.BR EDITOR / VISUAL
-The user's preferred utility to edit text files.
-Any string acceptable as a command_string operand to the
-.I sh\ \-c
-command shall be valid.
-.\" .TP
-.\" .B BROWSER
-.\" The user's preferred utility to browse URLs. Sequence of colon-separated
-.\" browser commands. See http://www.catb.org/\[ti]esr/BROWSER/ .
-.PP
-Note that the behavior of many programs and library routines is
-influenced by the presence or value of certain environment variables.
-Examples include the following:
-.IP \[bu] 3
-The variables
-.BR LANG ", " LANGUAGE ", " NLSPATH ", " LOCPATH ,
-.BR LC_ALL ", " LC_MESSAGES ,
-and so on influence locale handling; see
-.BR catopen (3),
-.BR gettext (3),
-and
-.BR locale (7).
-.IP \[bu]
-.B TMPDIR
-influences the path prefix of names created by
-.BR tempnam (3)
-and other routines, and the temporary directory used by
-.BR sort (1)
-and other programs.
-.IP \[bu]
-.BR LD_LIBRARY_PATH ", " LD_PRELOAD ,
-and other
-.B LD_*
-variables influence the behavior of the dynamic loader/linker.
-See also
-.BR ld.so (8).
-.IP \[bu]
-.B POSIXLY_CORRECT
-makes certain programs and library routines follow
-the prescriptions of POSIX.
-.IP \[bu]
-The behavior of
-.BR malloc (3)
-is influenced by
-.B MALLOC_*
-variables.
-.IP \[bu]
-The variable
-.B HOSTALIASES
-gives the name of a file containing aliases
-to be used with
-.BR gethostbyname (3).
-.IP \[bu]
-.BR TZ " and " TZDIR
-give timezone information used by
-.BR tzset (3)
-and through that by functions like
-.BR ctime (3),
-.BR localtime (3),
-.BR mktime (3),
-.BR strftime (3).
-See also
-.BR tzselect (8).
-.IP \[bu]
-.B TERMCAP
-gives information on how to address a given terminal
-(or gives the name of a file containing such information).
-.IP \[bu]
-.BR COLUMNS " and " LINES
-tell applications about the window size, possibly overriding the actual size.
-.IP \[bu]
-.BR PRINTER " or " LPDEST
-may specify the desired printer to use.
-See
-.BR lpr (1).
-.SH NOTES
-Historically and by standard,
-.I environ
-must be declared in the user program.
-However, as a (nonstandard) programmer convenience,
-.I environ
-is declared in the header file
-.I <unistd.h>
-if the
-.B _GNU_SOURCE
-feature test macro is defined (see
-.BR feature_test_macros (7)).
-.PP
-The
-.BR prctl (2)
-.B PR_SET_MM_ENV_START
-and
-.B PR_SET_MM_ENV_END
-operations can be used to control the location of the process's environment.
-.PP
-The
-.BR HOME ,
-.BR LOGNAME ,
-.BR SHELL ,
-and
-.B USER
-variables are set when the user is changed via a
-session management interface, typically by a program such as
-.BR login (1)
-from a user database (such as
-.BR passwd (5)).
-(Switching to the root user using
-.BR su (1)
-may result in a mixed environment where
-.B LOGNAME
-and
-.B USER
-are retained from old user; see the
-.BR su (1)
-manual page.)
-.SH BUGS
-Clearly there is a security risk here.
-Many a system command has been
-tricked into mischief by a user who specified unusual values for
-.BR IFS " or " LD_LIBRARY_PATH .
-.PP
-There is also the risk of name space pollution.
-Programs like
-.I make
-and
-.I autoconf
-allow overriding of default utility names from the
-environment with similarly named variables in all caps.
-Thus one uses
-.B CC
-to select the desired C compiler (and similarly
-.BR MAKE ,
-.BR AR ,
-.BR AS ,
-.BR FC ,
-.BR LD ,
-.BR LEX ,
-.BR RM ,
-.BR YACC ,
-etc.).
-However, in some traditional uses such an environment variable
-gives options for the program instead of a pathname.
-Thus, one has
-.B MORE
-and
-.BR LESS .
-Such usage is considered mistaken, and to be avoided in new
-programs.
-.SH SEE ALSO
-.BR bash (1),
-.BR csh (1),
-.BR env (1),
-.BR login (1),
-.BR printenv (1),
-.BR sh (1),
-.BR su (1),
-.BR tcsh (1),
-.BR execve (2),
-.BR clearenv (3),
-.BR exec (3),
-.BR getenv (3),
-.BR putenv (3),
-.BR setenv (3),
-.BR unsetenv (3),
-.BR locale (7),
-.BR ld.so (8),
-.BR pam_env (8)
diff --git a/man7/epoll.7 b/man7/epoll.7
deleted file mode 100644
index 1559f2f7b..000000000
--- a/man7/epoll.7
+++ /dev/null
@@ -1,610 +0,0 @@
-.\" Copyright (C) 2003 Davide Libenzi
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Davide Libenzi <davidel@xmailserver.org>
-.\"
-.TH epoll 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-epoll \- I/O event notification facility
-.SH SYNOPSIS
-.nf
-.B #include <sys/epoll.h>
-.fi
-.SH DESCRIPTION
-The
-.B epoll
-API performs a similar task to
-.BR poll (2):
-monitoring multiple file descriptors to see if I/O is possible on any of them.
-The
-.B epoll
-API can be used either as an edge-triggered or a level-triggered
-interface and scales well to large numbers of watched file descriptors.
-.PP
-The central concept of the
-.B epoll
-API is the
-.B epoll
-.IR instance ,
-an in-kernel data structure which, from a user-space perspective,
-can be considered as a container for two lists:
-.IP \[bu] 3
-The
-.I interest
-list (sometimes also called the
-.B epoll
-set): the set of file descriptors that the process has registered
-an interest in monitoring.
-.IP \[bu]
-The
-.I ready
-list: the set of file descriptors that are "ready" for I/O.
-The ready list is a subset of
-(or, more precisely, a set of references to)
-the file descriptors in the interest list.
-The ready list is dynamically populated
-by the kernel as a result of I/O activity on those file descriptors.
-.PP
-The following system calls are provided to
-create and manage an
-.B epoll
-instance:
-.IP \[bu] 3
-.BR epoll_create (2)
-creates a new
-.B epoll
-instance and returns a file descriptor referring to that instance.
-(The more recent
-.BR epoll_create1 (2)
-extends the functionality of
-.BR epoll_create (2).)
-.IP \[bu]
-Interest in particular file descriptors is then registered via
-.BR epoll_ctl (2),
-which adds items to the interest list of the
-.B epoll
-instance.
-.IP \[bu]
-.BR epoll_wait (2)
-waits for I/O events,
-blocking the calling thread if no events are currently available.
-(This system call can be thought of as fetching items from
-the ready list of the
-.B epoll
-instance.)
-.\"
-.SS Level-triggered and edge-triggered
-The
-.B epoll
-event distribution interface is able to behave both as edge-triggered
-(ET) and as level-triggered (LT).
-The difference between the two mechanisms
-can be described as follows.
-Suppose that
-this scenario happens:
-.IP (1) 5
-The file descriptor that represents the read side of a pipe
-.RI ( rfd )
-is registered on the
-.B epoll
-instance.
-.IP (2)
-A pipe writer writes 2\ kB of data on the write side of the pipe.
-.IP (3)
-A call to
-.BR epoll_wait (2)
-is done that will return
-.I rfd
-as a ready file descriptor.
-.IP (4)
-The pipe reader reads 1\ kB of data from
-.IR rfd .
-.IP (5)
-A call to
-.BR epoll_wait (2)
-is done.
-.PP
-If the
-.I rfd
-file descriptor has been added to the
-.B epoll
-interface using the
-.B EPOLLET
-(edge-triggered)
-flag, the call to
-.BR epoll_wait (2)
-done in step
-.B 5
-will probably hang despite the available data still present in the file
-input buffer;
-meanwhile the remote peer might be expecting a response based on the
-data it already sent.
-The reason for this is that edge-triggered mode
-delivers events only when changes occur on the monitored file descriptor.
-So, in step
-.B 5
-the caller might end up waiting for some data that is already present inside
-the input buffer.
-In the above example, an event on
-.I rfd
-will be generated because of the write done in
-.B 2
-and the event is consumed in
-.BR 3 .
-Since the read operation done in
-.B 4
-does not consume the whole buffer data, the call to
-.BR epoll_wait (2)
-done in step
-.B 5
-might block indefinitely.
-.PP
-An application that employs the
-.B EPOLLET
-flag should use nonblocking file descriptors to avoid having a blocking
-read or write starve a task that is handling multiple file descriptors.
-The suggested way to use
-.B epoll
-as an edge-triggered
-.RB ( EPOLLET )
-interface is as follows:
-.IP (1) 5
-with nonblocking file descriptors; and
-.IP (2)
-by waiting for an event only after
-.BR read (2)
-or
-.BR write (2)
-return
-.BR EAGAIN .
-.PP
-By contrast, when used as a level-triggered interface
-(the default, when
-.B EPOLLET
-is not specified),
-.B epoll
-is simply a faster
-.BR poll (2),
-and can be used wherever the latter is used since it shares the
-same semantics.
-.PP
-Since even with edge-triggered
-.BR epoll ,
-multiple events can be generated upon receipt of multiple chunks of data,
-the caller has the option to specify the
-.B EPOLLONESHOT
-flag, to tell
-.B epoll
-to disable the associated file descriptor after the receipt of an event with
-.BR epoll_wait (2).
-When the
-.B EPOLLONESHOT
-flag is specified,
-it is the caller's responsibility to rearm the file descriptor using
-.BR epoll_ctl (2)
-with
-.BR EPOLL_CTL_MOD .
-.PP
-If multiple threads
-(or processes, if child processes have inherited the
-.B epoll
-file descriptor across
-.BR fork (2))
-are blocked in
-.BR epoll_wait (2)
-waiting on the same epoll file descriptor and a file descriptor
-in the interest list that is marked for edge-triggered
-.RB ( EPOLLET )
-notification becomes ready,
-just one of the threads (or processes) is awoken from
-.BR epoll_wait (2).
-This provides a useful optimization for avoiding "thundering herd" wake-ups
-in some scenarios.
-.\"
-.SS Interaction with autosleep
-If the system is in
-.B autosleep
-mode via
-.I /sys/power/autosleep
-and an event happens which wakes the device from sleep, the device
-driver will keep the device awake only until that event is queued.
-To keep the device awake until the event has been processed,
-it is necessary to use the
-.BR epoll_ctl (2)
-.B EPOLLWAKEUP
-flag.
-.PP
-When the
-.B EPOLLWAKEUP
-flag is set in the
-.B events
-field for a
-.IR "struct epoll_event" ,
-the system will be kept awake from the moment the event is queued,
-through the
-.BR epoll_wait (2)
-call which returns the event until the subsequent
-.BR epoll_wait (2)
-call.
-If the event should keep the system awake beyond that time,
-then a separate
-.I wake_lock
-should be taken before the second
-.BR epoll_wait (2)
-call.
-.SS /proc interfaces
-The following interfaces can be used to limit the amount of
-kernel memory consumed by epoll:
-.\" Following was added in Linux 2.6.28, but them removed in Linux 2.6.29
-.\" .TP
-.\" .IR /proc/sys/fs/epoll/max_user_instances " (since Linux 2.6.28)"
-.\" This specifies an upper limit on the number of epoll instances
-.\" that can be created per real user ID.
-.TP
-.IR /proc/sys/fs/epoll/max_user_watches " (since Linux 2.6.28)"
-This specifies a limit on the total number of
-file descriptors that a user can register across
-all epoll instances on the system.
-The limit is per real user ID.
-Each registered file descriptor costs roughly 90 bytes on a 32-bit kernel,
-and roughly 160 bytes on a 64-bit kernel.
-Currently,
-.\" Linux 2.6.29 (in Linux 2.6.28, the default was 1/32 of lowmem)
-the default value for
-.I max_user_watches
-is 1/25 (4%) of the available low memory,
-divided by the registration cost in bytes.
-.SS Example for suggested usage
-While the usage of
-.B epoll
-when employed as a level-triggered interface does have the same
-semantics as
-.BR poll (2),
-the edge-triggered usage requires more clarification to avoid stalls
-in the application event loop.
-In this example, listener is a
-nonblocking socket on which
-.BR listen (2)
-has been called.
-The function
-.I do_use_fd()
-uses the new ready file descriptor until
-.B EAGAIN
-is returned by either
-.BR read (2)
-or
-.BR write (2).
-An event-driven state machine application should, after having received
-.BR EAGAIN ,
-record its current state so that at the next call to
-.I do_use_fd()
-it will continue to
-.BR read (2)
-or
-.BR write (2)
-from where it stopped before.
-.PP
-.in +4n
-.EX
-#define MAX_EVENTS 10
-struct epoll_event ev, events[MAX_EVENTS];
-int listen_sock, conn_sock, nfds, epollfd;
-\&
-/* Code to set up listening socket, \[aq]listen_sock\[aq],
- (socket(), bind(), listen()) omitted. */
-\&
-epollfd = epoll_create1(0);
-if (epollfd == \-1) {
- perror("epoll_create1");
- exit(EXIT_FAILURE);
-}
-\&
-ev.events = EPOLLIN;
-ev.data.fd = listen_sock;
-if (epoll_ctl(epollfd, EPOLL_CTL_ADD, listen_sock, &ev) == \-1) {
- perror("epoll_ctl: listen_sock");
- exit(EXIT_FAILURE);
-}
-\&
-for (;;) {
- nfds = epoll_wait(epollfd, events, MAX_EVENTS, \-1);
- if (nfds == \-1) {
- perror("epoll_wait");
- exit(EXIT_FAILURE);
- }
-\&
- for (n = 0; n < nfds; ++n) {
- if (events[n].data.fd == listen_sock) {
- conn_sock = accept(listen_sock,
- (struct sockaddr *) &addr, &addrlen);
- if (conn_sock == \-1) {
- perror("accept");
- exit(EXIT_FAILURE);
- }
- setnonblocking(conn_sock);
- ev.events = EPOLLIN | EPOLLET;
- ev.data.fd = conn_sock;
- if (epoll_ctl(epollfd, EPOLL_CTL_ADD, conn_sock,
- &ev) == \-1) {
- perror("epoll_ctl: conn_sock");
- exit(EXIT_FAILURE);
- }
- } else {
- do_use_fd(events[n].data.fd);
- }
- }
-}
-.EE
-.in
-.PP
-When used as an edge-triggered interface, for performance reasons, it is
-possible to add the file descriptor inside the
-.B epoll
-interface
-.RB ( EPOLL_CTL_ADD )
-once by specifying
-.RB ( EPOLLIN | EPOLLOUT ).
-This allows you to avoid
-continuously switching between
-.B EPOLLIN
-and
-.B EPOLLOUT
-calling
-.BR epoll_ctl (2)
-with
-.BR EPOLL_CTL_MOD .
-.SS Questions and answers
-.IP \[bu] 3
-What is the key used to distinguish the file descriptors registered in an
-interest list?
-.IP
-The key is the combination of the file descriptor number and
-the open file description
-(also known as an "open file handle",
-the kernel's internal representation of an open file).
-.IP \[bu]
-What happens if you register the same file descriptor on an
-.B epoll
-instance twice?
-.IP
-You will probably get
-.BR EEXIST .
-However, it is possible to add a duplicate
-.RB ( dup (2),
-.BR dup2 (2),
-.BR fcntl (2)
-.BR F_DUPFD )
-file descriptor to the same
-.B epoll
-instance.
-.\" But a file descriptor duplicated by fork(2) can't be added to the
-.\" set, because the [file *, fd] pair is already in the epoll set.
-.\" That is a somewhat ugly inconsistency. On the one hand, a child process
-.\" cannot add the duplicate file descriptor to the epoll set. (In every
-.\" other case that I can think of, file descriptors duplicated by fork have
-.\" similar semantics to file descriptors duplicated by dup() and friends.) On
-.\" the other hand, the very fact that the child has a duplicate of the
-.\" file descriptor means that even if the parent closes its file descriptor,
-.\" then epoll_wait() in the parent will continue to receive notifications for
-.\" that file descriptor because of the duplicated file descriptor in the child.
-.\"
-.\" See http://thread.gmane.org/gmane.linux.kernel/596462/
-.\" "epoll design problems with common fork/exec patterns"
-.\"
-.\" mtk, Feb 2008
-This can be a useful technique for filtering events,
-if the duplicate file descriptors are registered with different
-.I events
-masks.
-.IP \[bu]
-Can two
-.B epoll
-instances wait for the same file descriptor?
-If so, are events reported to both
-.B epoll
-file descriptors?
-.IP
-Yes, and events would be reported to both.
-However, careful programming may be needed to do this correctly.
-.IP \[bu]
-Is the
-.B epoll
-file descriptor itself poll/epoll/selectable?
-.IP
-Yes.
-If an
-.B epoll
-file descriptor has events waiting, then it will
-indicate as being readable.
-.IP \[bu]
-What happens if one attempts to put an
-.B epoll
-file descriptor into its own file descriptor set?
-.IP
-The
-.BR epoll_ctl (2)
-call fails
-.RB ( EINVAL ).
-However, you can add an
-.B epoll
-file descriptor inside another
-.B epoll
-file descriptor set.
-.IP \[bu]
-Can I send an
-.B epoll
-file descriptor over a UNIX domain socket to another process?
-.IP
-Yes, but it does not make sense to do this, since the receiving process
-would not have copies of the file descriptors in the interest list.
-.IP \[bu]
-Will closing a file descriptor cause it to be removed from all
-.B epoll
-interest lists?
-.IP
-Yes, but be aware of the following point.
-A file descriptor is a reference to an open file description (see
-.BR open (2)).
-Whenever a file descriptor is duplicated via
-.BR dup (2),
-.BR dup2 (2),
-.BR fcntl (2)
-.BR F_DUPFD ,
-or
-.BR fork (2),
-a new file descriptor referring to the same open file description is
-created.
-An open file description continues to exist until all
-file descriptors referring to it have been closed.
-.IP
-A file descriptor is removed from an
-interest list only after all the file descriptors referring to the underlying
-open file description have been closed.
-This means that even after a file descriptor that is part of an
-interest list has been closed,
-events may be reported for that file descriptor if other file
-descriptors referring to the same underlying file description remain open.
-To prevent this happening,
-the file descriptor must be explicitly removed from the interest list (using
-.BR epoll_ctl (2)
-.BR EPOLL_CTL_DEL )
-before it is duplicated.
-Alternatively,
-the application must ensure that all file descriptors are closed
-(which may be difficult if file descriptors were duplicated
-behind the scenes by library functions that used
-.BR dup (2)
-or
-.BR fork (2)).
-.IP \[bu]
-If more than one event occurs between
-.BR epoll_wait (2)
-calls, are they combined or reported separately?
-.IP
-They will be combined.
-.IP \[bu]
-Does an operation on a file descriptor affect the
-already collected but not yet reported events?
-.IP
-You can do two operations on an existing file descriptor.
-Remove would be meaningless for
-this case.
-Modify will reread available I/O.
-.IP \[bu]
-Do I need to continuously read/write a file descriptor
-until
-.B EAGAIN
-when using the
-.B EPOLLET
-flag (edge-triggered behavior)?
-.IP
-Receiving an event from
-.BR epoll_wait (2)
-should suggest to you that such
-file descriptor is ready for the requested I/O operation.
-You must consider it ready until the next (nonblocking)
-read/write yields
-.BR EAGAIN .
-When and how you will use the file descriptor is entirely up to you.
-.IP
-For packet/token-oriented files (e.g., datagram socket,
-terminal in canonical mode),
-the only way to detect the end of the read/write I/O space
-is to continue to read/write until
-.BR EAGAIN .
-.IP
-For stream-oriented files (e.g., pipe, FIFO, stream socket), the
-condition that the read/write I/O space is exhausted can also be detected by
-checking the amount of data read from / written to the target file
-descriptor.
-For example, if you call
-.BR read (2)
-by asking to read a certain amount of data and
-.BR read (2)
-returns a lower number of bytes, you
-can be sure of having exhausted the read I/O space for the file
-descriptor.
-The same is true when writing using
-.BR write (2).
-(Avoid this latter technique if you cannot guarantee that
-the monitored file descriptor always refers to a stream-oriented file.)
-.SS Possible pitfalls and ways to avoid them
-.IP \[bu] 3
-.B Starvation (edge-triggered)
-.IP
-If there is a large amount of I/O space,
-it is possible that by trying to drain
-it the other files will not get processed causing starvation.
-(This problem is not specific to
-.BR epoll .)
-.IP
-The solution is to maintain a ready list
-and mark the file descriptor as ready
-in its associated data structure, thereby allowing the application to
-remember which files need to be processed but still round robin amongst
-all the ready files.
-This also supports ignoring subsequent events you
-receive for file descriptors that are already ready.
-.IP \[bu]
-.B If using an event cache...
-.IP
-If you use an event cache or store all the file descriptors returned from
-.BR epoll_wait (2),
-then make sure to provide a way to mark
-its closure dynamically (i.e., caused by
-a previous event's processing).
-Suppose you receive 100 events from
-.BR epoll_wait (2),
-and in event #47 a condition causes event #13 to be closed.
-If you remove the structure and
-.BR close (2)
-the file descriptor for event #13, then your
-event cache might still say there are events waiting for that
-file descriptor causing confusion.
-.IP
-One solution for this is to call, during the processing of event 47,
-.BR epoll_ctl ( EPOLL_CTL_DEL )
-to delete file descriptor 13 and
-.BR close (2),
-then mark its associated
-data structure as removed and link it to a cleanup list.
-If you find another
-event for file descriptor 13 in your batch processing,
-you will discover the file descriptor had been
-previously removed and there will be no confusion.
-.SH VERSIONS
-Some other systems provide similar mechanisms;
-for example,
-FreeBSD has
-.IR kqueue ,
-and Solaris has
-.IR /dev/poll .
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.5.44.
-.\" Its interface should be finalized in Linux 2.5.66.
-glibc 2.3.2.
-.SH NOTES
-The set of file descriptors that is being monitored via
-an epoll file descriptor can be viewed via the entry for
-the epoll file descriptor in the process's
-.IR /proc/ pid /fdinfo
-directory.
-See
-.BR proc (5)
-for further details.
-.PP
-The
-.BR kcmp (2)
-.B KCMP_EPOLL_TFD
-operation can be used to test whether a file descriptor
-is present in an epoll instance.
-.SH SEE ALSO
-.BR epoll_create (2),
-.BR epoll_create1 (2),
-.BR epoll_ctl (2),
-.BR epoll_wait (2),
-.BR poll (2),
-.BR select (2)
diff --git a/man7/fanotify.7 b/man7/fanotify.7
deleted file mode 100644
index 7c72a2996..000000000
--- a/man7/fanotify.7
+++ /dev/null
@@ -1,1455 +0,0 @@
-.\" Copyright (C) 2013, Heinrich Schuchardt <xypron.glpk@gmx.de>
-.\" and Copyright (C) 2014, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.TH fanotify 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fanotify \- monitoring filesystem events
-.SH DESCRIPTION
-The fanotify API provides notification and interception of
-filesystem events.
-Use cases include virus scanning and hierarchical storage management.
-In the original fanotify API, only a limited set of events was supported.
-In particular, there was no support for create, delete, and move events.
-The support for those events was added in Linux 5.1.
-(See
-.BR inotify (7)
-for details of an API that did notify those events pre Linux 5.1.)
-.PP
-Additional capabilities compared to the
-.BR inotify (7)
-API include the ability to monitor all of the objects
-in a mounted filesystem,
-the ability to make access permission decisions, and the
-possibility to read or modify files before access by other applications.
-.PP
-The following system calls are used with this API:
-.BR fanotify_init (2),
-.BR fanotify_mark (2),
-.BR read (2),
-.BR write (2),
-and
-.BR close (2).
-.SS fanotify_init(), fanotify_mark(), and notification groups
-The
-.BR fanotify_init (2)
-system call creates and initializes an fanotify notification group
-and returns a file descriptor referring to it.
-.PP
-An fanotify notification group is a kernel-internal object that holds
-a list of files, directories, filesystems, and mounts for which
-events shall be created.
-.PP
-For each entry in an fanotify notification group, two bit masks exist: the
-.I mark
-mask and the
-.I ignore
-mask.
-The mark mask defines file activities for which an event shall be created.
-The ignore mask defines activities for which no event shall be generated.
-Having these two types of masks permits a filesystem, mount, or
-directory to be marked for receiving events, while at the same time
-ignoring events for specific objects under a mount or directory.
-.PP
-The
-.BR fanotify_mark (2)
-system call adds a file, directory, filesystem, or mount to a
-notification group and specifies which events
-shall be reported (or ignored), or removes or modifies such an entry.
-.PP
-A possible usage of the ignore mask is for a file cache.
-Events of interest for a file cache are modification of a file and closing
-of the same.
-Hence, the cached directory or mount is to be marked to receive these
-events.
-After receiving the first event informing that a file has been modified,
-the corresponding cache entry will be invalidated.
-No further modification events for this file are of interest until the file
-is closed.
-Hence, the modify event can be added to the ignore mask.
-Upon receiving the close event, the modify event can be removed from the
-ignore mask and the file cache entry can be updated.
-.PP
-The entries in the fanotify notification groups refer to files and
-directories via their inode number and to mounts via their mount ID.
-If files or directories are renamed or moved within the same mount,
-the respective entries survive.
-If files or directories are deleted or moved to another mount or if
-filesystems or mounts are unmounted, the corresponding entries are deleted.
-.SS The event queue
-As events occur on the filesystem objects monitored by a notification group,
-the fanotify system generates events that are collected in a queue.
-These events can then be read (using
-.BR read (2)
-or similar)
-from the fanotify file descriptor
-returned by
-.BR fanotify_init (2).
-.PP
-Two types of events are generated:
-.I notification
-events and
-.I permission
-events.
-Notification events are merely informative and require no action to be taken
-by the receiving application with one exception: if a valid file descriptor
-is provided within a generic event, the file descriptor must be closed.
-Permission events are requests to the receiving application to decide
-whether permission for a file access shall be granted.
-For these events, the recipient must write a response which decides whether
-access is granted or not.
-.PP
-An event is removed from the event queue of the fanotify group
-when it has been read.
-Permission events that have been read are kept in an internal list of the
-fanotify group until either a permission decision has been taken by
-writing to the fanotify file descriptor or the fanotify file descriptor
-is closed.
-.SS Reading fanotify events
-Calling
-.BR read (2)
-for the file descriptor returned by
-.BR fanotify_init (2)
-blocks (if the flag
-.B FAN_NONBLOCK
-is not specified in the call to
-.BR fanotify_init (2))
-until either a file event occurs or the call is interrupted by a signal
-(see
-.BR signal (7)).
-.PP
-After a successful
-.BR read (2),
-the read buffer contains one or more of the following structures:
-.PP
-.in +4n
-.EX
-struct fanotify_event_metadata {
- __u32 event_len;
- __u8 vers;
- __u8 reserved;
- __u16 metadata_len;
- __aligned_u64 mask;
- __s32 fd;
- __s32 pid;
-};
-.EE
-.in
-.PP
-Information records are
-supplemental pieces of information that
-may be provided alongside the generic
-.I fanotify_event_metadata
-structure.
-The
-.I flags
-passed to
-.BR fanotify_init (2)
-have influence over the type of information records that
-may be returned for an event.
-For example,
-if a notification group is initialized with
-.B FAN_REPORT_FID
-or
-.BR FAN_REPORT_DIR_FID ,
-then event listeners should also expect to receive a
-.I fanotify_event_info_fid
-structure alongside the
-.I fanotify_event_metadata
-structure,
-whereby file handles are used to
-identify filesystem objects
-rather than file descriptors.
-Information records may also be stacked,
-meaning that using the various
-.B FAN_REPORT_*
-flags in conjunction with one another is supported.
-In such cases,
-multiple information records can be returned for an event
-alongside the generic
-.I fanotify_event_metadata
-structure.
-For example,
-if a notification group is initialized with
-.B FAN_REPORT_TARGET_FID
-and
-.BR FAN_REPORT_PIDFD ,
-then an event listener should expect to receive up to two
-.I fanotify_event_info_fid
-information records and one
-.I fanotify_event_info_pidfd
-information record alongside the generic
-.I fanotify_event_metadata
-structure.
-Importantly,
-fanotify provides no guarantee around
-the ordering of information records
-when a notification group is initialized with a
-stacked based configuration.
-Each information record has a nested structure of type
-.IR fanotify_event_info_header .
-It is imperative for event listeners to inspect the
-.I info_type
-field of this structure in order to
-determine the type of information record that
-had been received for a given event.
-.PP
-In cases where an fanotify group
-identifies filesystem objects by file handles,
-event listeners should also expect to
-receive one or more of the below
-information record objects alongside the generic
-.I fanotify_event_metadata
-structure within the read buffer:
-.PP
-.in +4n
-.EX
-struct fanotify_event_info_fid {
- struct fanotify_event_info_header hdr;
- __kernel_fsid_t fsid;
- unsigned char file_handle[0];
-};
-.EE
-.in
-.PP
-In cases where an fanotify group is initialized with
-.BR FAN_REPORT_PIDFD ,
-event listeners should expect to receive the below
-information record object alongside the generic
-.I fanotify_event_metadata
-structure within the read buffer:
-.PP
-.in +4n
-.EX
-struct fanotify_event_info_pidfd {
- struct fanotify_event_info_header hdr;
- __s32 pidfd;
-};
-.EE
-.in
-.PP
-In case of a
-.B FAN_FS_ERROR
-event,
-an additional information record describing the error that occurred
-is returned alongside the generic
-.I fanotify_event_metadata
-structure within the read buffer.
-This structure is defined as follows:
-.PP
-.in +4n
-.EX
-struct fanotify_event_info_error {
- struct fanotify_event_info_header hdr;
- __s32 error;
- __u32 error_count;
-};
-.EE
-.in
-.PP
-All information records contain a nested structure of type
-.IR fanotify_event_info_header .
-This structure holds meta-information about the information record
-that may have been returned alongside the generic
-.I fanotify_event_metadata
-structure.
-This structure is defined as follows:
-.PP
-.in +4n
-.EX
-struct fanotify_event_info_header {
- __u8 info_type;
- __u8 pad;
- __u16 len;
-};
-.EE
-.in
-.PP
-For performance reasons, it is recommended to use a large
-buffer size (for example, 4096 bytes),
-so that multiple events can be retrieved by a single
-.BR read (2).
-.PP
-The return value of
-.BR read (2)
-is the number of bytes placed in the buffer,
-or \-1 in case of an error (but see BUGS).
-.PP
-The fields of the
-.I fanotify_event_metadata
-structure are as follows:
-.TP
-.I event_len
-This is the length of the data for the current event and the offset
-to the next event in the buffer.
-Unless the group identifies filesystem objects by file handles, the value of
-.I event_len
-is always
-.BR FAN_EVENT_METADATA_LEN .
-For a group that identifies filesystem objects by file handles,
-.I event_len
-also includes the variable length file identifier records.
-.TP
-.I vers
-This field holds a version number for the structure.
-It must be compared to
-.B FANOTIFY_METADATA_VERSION
-to verify that the structures returned at run time match
-the structures defined at compile time.
-In case of a mismatch, the application should abandon trying to use the
-fanotify file descriptor.
-.TP
-.I reserved
-This field is not used.
-.TP
-.I metadata_len
-This is the length of the structure.
-The field was introduced to facilitate the implementation of
-optional headers per event type.
-No such optional headers exist in the current implementation.
-.TP
-.I mask
-This is a bit mask describing the event (see below).
-.TP
-.I fd
-This is an open file descriptor for the object being accessed, or
-.B FAN_NOFD
-if a queue overflow occurred.
-With an fanotify group that identifies filesystem objects by file handles,
-applications should expect this value to be set to
-.B FAN_NOFD
-for each event that is received.
-The file descriptor can be used to access the contents
-of the monitored file or directory.
-The reading application is responsible for closing this file descriptor.
-.IP
-When calling
-.BR fanotify_init (2),
-the caller may specify (via the
-.I event_f_flags
-argument) various file status flags that are to be set
-on the open file description that corresponds to this file descriptor.
-In addition, the (kernel-internal)
-.B FMODE_NONOTIFY
-file status flag is set on the open file description.
-This flag suppresses fanotify event generation.
-Hence, when the receiver of the fanotify event accesses the notified file or
-directory using this file descriptor, no additional events will be created.
-.TP
-.I pid
-If flag
-.B FAN_REPORT_TID
-was set in
-.BR fanotify_init (2),
-this is the TID of the thread that caused the event.
-Otherwise, this the PID of the process that caused the event.
-.PP
-A program listening to fanotify events can compare this PID
-to the PID returned by
-.BR getpid (2),
-to determine whether the event is caused by the listener itself,
-or is due to a file access by another process.
-.PP
-The bit mask in
-.I mask
-indicates which events have occurred for a single filesystem object.
-Multiple bits may be set in this mask,
-if more than one event occurred for the monitored filesystem object.
-In particular,
-consecutive events for the same filesystem object and originating from the
-same process may be merged into a single event, with the exception that two
-permission events are never merged into one queue entry.
-.PP
-The bits that may appear in
-.I mask
-are as follows:
-.TP
-.B FAN_ACCESS
-A file or a directory (but see BUGS) was accessed (read).
-.TP
-.B FAN_OPEN
-A file or a directory was opened.
-.TP
-.B FAN_OPEN_EXEC
-A file was opened with the intent to be executed.
-See NOTES in
-.BR fanotify_mark (2)
-for additional details.
-.TP
-.B FAN_ATTRIB
-A file or directory metadata was changed.
-.TP
-.B FAN_CREATE
-A child file or directory was created in a watched parent.
-.TP
-.B FAN_DELETE
-A child file or directory was deleted in a watched parent.
-.TP
-.B FAN_DELETE_SELF
-A watched file or directory was deleted.
-.TP
-.B FAN_FS_ERROR
-A filesystem error was detected.
-.TP
-.B FAN_RENAME
-A file or directory has been moved to or from a watched parent directory.
-.TP
-.B FAN_MOVED_FROM
-A file or directory has been moved from a watched parent directory.
-.TP
-.B FAN_MOVED_TO
-A file or directory has been moved to a watched parent directory.
-.TP
-.B FAN_MOVE_SELF
-A watched file or directory was moved.
-.TP
-.B FAN_MODIFY
-A file was modified.
-.TP
-.B FAN_CLOSE_WRITE
-A file that was opened for writing
-.RB ( O_WRONLY
-or
-.BR O_RDWR )
-was closed.
-.TP
-.B FAN_CLOSE_NOWRITE
-A file or directory that was opened read-only
-.RB ( O_RDONLY )
-was closed.
-.TP
-.B FAN_Q_OVERFLOW
-The event queue exceeded the limit on number of events.
-This limit can be overridden by specifying the
-.B FAN_UNLIMITED_QUEUE
-flag when calling
-.BR fanotify_init (2).
-.TP
-.B FAN_ACCESS_PERM
-An application wants to read a file or directory, for example using
-.BR read (2)
-or
-.BR readdir (2).
-The reader must write a response (as described below)
-that determines whether the permission to
-access the filesystem object shall be granted.
-.TP
-.B FAN_OPEN_PERM
-An application wants to open a file or directory.
-The reader must write a response that determines whether the permission to
-open the filesystem object shall be granted.
-.TP
-.B FAN_OPEN_EXEC_PERM
-An application wants to open a file for execution.
-The reader must write a response that determines whether the permission to
-open the filesystem object for execution shall be granted.
-See NOTES in
-.BR fanotify_mark (2)
-for additional details.
-.PP
-To check for any close event, the following bit mask may be used:
-.TP
-.B FAN_CLOSE
-A file was closed.
-This is a synonym for:
-.IP
-.in +4n
-.EX
-FAN_CLOSE_WRITE | FAN_CLOSE_NOWRITE
-.EE
-.in
-.PP
-To check for any move event, the following bit mask may be used:
-.TP
-.B FAN_MOVE
-A file or directory was moved.
-This is a synonym for:
-.IP
-.in +4n
-.EX
-FAN_MOVED_FROM | FAN_MOVED_TO
-.EE
-.in
-.PP
-The following bits may appear in
-.I mask
-only in conjunction with other event type bits:
-.TP
-.B FAN_ONDIR
-The events described in the
-.I mask
-have occurred on a directory object.
-Reporting events on directories requires setting this flag in the mark mask.
-See
-.BR fanotify_mark (2)
-for additional details.
-The
-.B FAN_ONDIR
-flag is reported in an event mask only if the fanotify group identifies
-filesystem objects by file handles.
-.PP
-Information records that are supplied alongside the generic
-.I fanotify_event_metadata
-structure will always contain a nested structure of type
-.IR fanotify_event_info_header .
-The fields of the
-.I fanotify_event_info_header
-are as follows:
-.TP
-.I info_type
-A unique integer value representing
-the type of information record object received for an event.
-The value of this field can be set to one of the following:
-.BR FAN_EVENT_INFO_TYPE_FID ,
-.BR FAN_EVENT_INFO_TYPE_DFID ,
-.BR FAN_EVENT_INFO_TYPE_DFID_NAME ,
-or
-.BR FAN_EVENT_INFO_TYPE_PIDFD .
-The value set for this field
-is dependent on the flags that have been supplied to
-.BR fanotify_init (2).
-Refer to the field details of each information record object type below
-to understand the different cases in which the
-.I info_type
-values can be set.
-.TP
-.I pad
-This field is currently not used by any information record object type
-and therefore is set to zero.
-.TP
-.I len
-The value of
-.I len
-is set to the size of the information record object,
-including the
-.IR fanotify_event_info_header .
-The total size of all additional information records
-is not expected to be larger than
-.RI ( event_len
-\-
-.IR metadata_len ).
-.PP
-The fields of the
-.I fanotify_event_info_fid
-structure are as follows:
-.TP
-.I hdr
-This is a structure of type
-.IR fanotify_event_info_header .
-For example, when an fanotify file descriptor is created using
-.BR FAN_REPORT_FID ,
-a single information record is expected to be attached to the event with
-.I info_type
-field value of
-.BR FAN_EVENT_INFO_TYPE_FID .
-When an fanotify file descriptor is created using the combination of
-.B FAN_REPORT_FID
-and
-.BR FAN_REPORT_DIR_FID ,
-there may be two information records attached to the event:
-one with
-.I info_type
-field value of
-.BR FAN_EVENT_INFO_TYPE_DFID ,
-identifying a parent directory object, and one with
-.I info_type
-field value of
-.BR FAN_EVENT_INFO_TYPE_FID ,
-identifying a child object.
-Note that for the directory entry modification events
-.BR FAN_CREATE ,
-.BR FAN_DELETE ,
-.BR FAN_MOVE ,
-and
-.BR FAN_RENAME ,
-an information record identifying the created/deleted/moved child object
-is reported only if an fanotify group was initialized with the flag
-.BR FAN_REPORT_TARGET_FID .
-.TP
-.I fsid
-This is a unique identifier of the filesystem containing the object
-associated with the event.
-It is a structure of type
-.I __kernel_fsid_t
-and contains the same value as
-.I f_fsid
-when calling
-.BR statfs (2).
-.TP
-.I file_handle
-This is a variable length structure of type struct file_handle.
-It is an opaque handle that corresponds to a specified object on a
-filesystem as returned by
-.BR name_to_handle_at (2).
-It can be used to uniquely identify a file on a filesystem and can be
-passed as an argument to
-.BR open_by_handle_at (2).
-If the value of
-.I info_type
-field is
-.BR FAN_EVENT_INFO_TYPE_DFID_NAME ,
-the file handle is followed by a null terminated string that identifies the
-created/deleted/moved directory entry name.
-For other events such as
-.BR FAN_OPEN ,
-.BR FAN_ATTRIB ,
-.BR FAN_DELETE_SELF ,
-and
-.BR FAN_MOVE_SELF ,
-if the value of
-.I info_type
-field is
-.BR FAN_EVENT_INFO_TYPE_FID ,
-the
-.I file_handle
-identifies the object correlated to the event.
-If the value of
-.I info_type
-field is
-.BR FAN_EVENT_INFO_TYPE_DFID ,
-the
-.I file_handle
-identifies the directory object correlated to the event or the parent directory
-of a non-directory object correlated to the event.
-If the value of
-.I info_type
-field is
-.BR FAN_EVENT_INFO_TYPE_DFID_NAME ,
-the
-.I file_handle
-identifies the same directory object that would be reported with
-.B FAN_EVENT_INFO_TYPE_DFID
-and the file handle is followed by a null terminated string that identifies the
-name of a directory entry in that directory, or '.' to identify the directory
-object itself.
-.PP
-The fields of the
-.I fanotify_event_info_pidfd
-structure are as follows:
-.TP
-.I hdr
-This is a structure of type
-.IR fanotify_event_info_header .
-When an fanotify group is initialized using
-.BR FAN_REPORT_PIDFD ,
-the
-.I info_type
-field value of the
-.I fanotify_event_info_header
-is set to
-.BR FAN_EVENT_INFO_TYPE_PIDFD .
-.TP
-.I pidfd
-This is a process file descriptor that refers to
-the process responsible for generating the event.
-The returned process file descriptor is no different from
-one which could be obtained manually if
-.BR pidfd_open (2)
-were to be called on
-.IR fanotify_event_metadata.pid .
-In the instance that an error is encountered during pidfd creation,
-one of two possible error types represented by
-a negative integer value may be returned in this
-.I pidfd
-field.
-In cases where
-the process responsible for generating the event
-has terminated prior to
-the event listener being able to
-read events from the notification queue,
-.B FAN_NOPIDFD
-is returned.
-The pidfd creation for an event is only performed at the time the
-events are read from the notification queue.
-All other possible pidfd creation failures are represented by
-.BR FAN_EPIDFD .
-Once the event listener has dealt with an event
-and the pidfd is no longer required,
-the pidfd should be closed via
-.BR close (2).
-.PP
-The fields of the
-.I fanotify_event_info_error
-structure are as follows:
-.TP
-.I hdr
-This is a structure of type
-.IR fanotify_event_info_header .
-The
-.I info_type
-field is set to
-.BR FAN_EVENT_INFO_TYPE_ERROR .
-.TP
-.I error
-Identifies the type of error that occurred.
-.TP
-.I error_count
-This is a counter of the number of errors suppressed
-since the last error was read.
-.PP
-The following macros are provided to iterate over a buffer containing
-fanotify event metadata returned by a
-.BR read (2)
-from an fanotify file descriptor:
-.TP
-.B FAN_EVENT_OK(meta, len)
-This macro checks the remaining length
-.I len
-of the buffer
-.I meta
-against the length of the metadata structure and the
-.I event_len
-field of the first metadata structure in the buffer.
-.TP
-.B FAN_EVENT_NEXT(meta, len)
-This macro uses the length indicated in the
-.I event_len
-field of the metadata structure pointed to by
-.I meta
-to calculate the address of the next metadata structure that follows
-.IR meta .
-.I len
-is the number of bytes of metadata that currently remain in the buffer.
-The macro returns a pointer to the next metadata structure that follows
-.IR meta ,
-and reduces
-.I len
-by the number of bytes in the metadata structure that
-has been skipped over (i.e., it subtracts
-.I meta\->event_len
-from
-.IR len ).
-.PP
-In addition, there is:
-.TP
-.B FAN_EVENT_METADATA_LEN
-This macro returns the size (in bytes) of the structure
-.IR fanotify_event_metadata .
-This is the minimum size (and currently the only size) of any event metadata.
-.\"
-.SS Monitoring an fanotify file descriptor for events
-When an fanotify event occurs, the fanotify file descriptor indicates as
-readable when passed to
-.BR epoll (7),
-.BR poll (2),
-or
-.BR select (2).
-.SS Dealing with permission events
-For permission events, the application must
-.BR write (2)
-a structure of the following form to the
-fanotify file descriptor:
-.PP
-.in +4n
-.EX
-struct fanotify_response {
- __s32 fd;
- __u32 response;
-};
-.EE
-.in
-.PP
-The fields of this structure are as follows:
-.TP
-.I fd
-This is the file descriptor from the structure
-.IR fanotify_event_metadata .
-.TP
-.I response
-This field indicates whether or not the permission is to be granted.
-Its value must be either
-.B FAN_ALLOW
-to allow the file operation or
-.B FAN_DENY
-to deny the file operation.
-.PP
-If access is denied, the requesting application call will receive an
-.B EPERM
-error.
-Additionally, if the notification group has been created with the
-.B FAN_ENABLE_AUDIT
-flag, then the
-.B FAN_AUDIT
-flag can be set in the
-.I response
-field.
-In that case, the audit subsystem will log information about the access
-decision to the audit logs.
-.\"
-.SS Monitoring filesystems for errors
-A single
-.B FAN_FS_ERROR
-event is stored per filesystem at once.
-Extra error messages are suppressed and accounted for in the
-.I error_count
-field of the existing
-.B FAN_FS_ERROR
-event record,
-but details about the errors are lost.
-.PP
-Errors reported by
-.B FAN_FS_ERROR
-are generic
-.I errno
-values,
-but not all kinds of error types are reported by all filesystems.
-.PP
-Errors not directly related to a file (i.e. super block corruption)
-are reported with an invalid
-.IR file_handle .
-For these errors, the
-.I file_handle
-will have the field
-.I handle_type
-set to
-.BR FILEID_INVALID ,
-and the handle buffer size set to
-.BR 0 .
-.\"
-.SS Closing the fanotify file descriptor
-When all file descriptors referring to the fanotify notification group are
-closed, the fanotify group is released and its resources
-are freed for reuse by the kernel.
-Upon
-.BR close (2),
-outstanding permission events will be set to allowed.
-.SS /proc interfaces
-The file
-.IR /proc/ pid /fdinfo/ fd
-contains information about fanotify marks for file descriptor
-.I fd
-of process
-.IR pid .
-See
-.BR proc (5)
-for details.
-.PP
-Since Linux 5.13,
-.\" commit 5b8fea65d197f408bb00b251c70d842826d6b70b
-the following interfaces can be used to control the amount of
-kernel resources consumed by fanotify:
-.TP
-.I /proc/sys/fs/fanotify/max_queued_events
-The value in this file is used when an application calls
-.BR fanotify_init (2)
-to set an upper limit on the number of events that can be
-queued to the corresponding fanotify group.
-Events in excess of this limit are dropped, but an
-.B FAN_Q_OVERFLOW
-event is always generated.
-Prior to Linux kernel 5.13,
-.\" commit 5b8fea65d197f408bb00b251c70d842826d6b70b
-the hardcoded limit was 16384 events.
-.TP
-.I /proc/sys/fs/fanotify/max_user_group
-This specifies an upper limit on the number of fanotify groups
-that can be created per real user ID.
-Prior to Linux kernel 5.13,
-.\" commit 5b8fea65d197f408bb00b251c70d842826d6b70b
-the hardcoded limit was 128 groups per user.
-.TP
-.I /proc/sys/fs/fanotify/max_user_marks
-This specifies an upper limit on the number of fanotify marks
-that can be created per real user ID.
-Prior to Linux kernel 5.13,
-.\" commit 5b8fea65d197f408bb00b251c70d842826d6b70b
-the hardcoded limit was 8192 marks per group (not per user).
-.SH ERRORS
-In addition to the usual errors for
-.BR read (2),
-the following errors can occur when reading from the
-fanotify file descriptor:
-.TP
-.B EINVAL
-The buffer is too small to hold the event.
-.TP
-.B EMFILE
-The per-process limit on the number of open files has been reached.
-See the description of
-.B RLIMIT_NOFILE
-in
-.BR getrlimit (2).
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-See
-.I /proc/sys/fs/file\-max
-in
-.BR proc (5).
-.TP
-.B ETXTBSY
-This error is returned by
-.BR read (2)
-if
-.B O_RDWR
-or
-.B O_WRONLY
-was specified in the
-.I event_f_flags
-argument when calling
-.BR fanotify_init (2)
-and an event occurred for a monitored file that is currently being executed.
-.PP
-In addition to the usual errors for
-.BR write (2),
-the following errors can occur when writing to the fanotify file descriptor:
-.TP
-.B EINVAL
-Fanotify access permissions are not enabled in the kernel configuration
-or the value of
-.I response
-in the response structure is not valid.
-.TP
-.B ENOENT
-The file descriptor
-.I fd
-in the response structure is not valid.
-This may occur when a response for the permission event has already been
-written.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-The fanotify API was introduced in Linux 2.6.36 and
-enabled in Linux 2.6.37.
-fdinfo support was added in Linux 3.8.
-.SH NOTES
-The fanotify API is available only if the kernel was built with the
-.B CONFIG_FANOTIFY
-configuration option enabled.
-In addition, fanotify permission handling is available only if the
-.B CONFIG_FANOTIFY_ACCESS_PERMISSIONS
-configuration option is enabled.
-.SS Limitations and caveats
-Fanotify reports only events that a user-space program triggers through the
-filesystem API.
-As a result,
-it does not catch remote events that occur on network filesystems.
-.PP
-The fanotify API does not report file accesses and modifications that
-may occur because of
-.BR mmap (2),
-.BR msync (2),
-and
-.BR munmap (2).
-.PP
-Events for directories are created only if the directory itself is opened,
-read, and closed.
-Adding, removing, or changing children of a marked directory does not create
-events for the monitored directory itself.
-.PP
-Fanotify monitoring of directories is not recursive:
-to monitor subdirectories under a directory,
-additional marks must be created.
-The
-.B FAN_CREATE
-event can be used for detecting when a subdirectory has been created under
-a marked directory.
-An additional mark must then be set on the newly created subdirectory.
-This approach is racy, because it can lose events that occurred inside the
-newly created subdirectory, before a mark is added on that subdirectory.
-Monitoring mounts offers the capability to monitor a whole directory tree
-in a race-free manner.
-Monitoring filesystems offers the capability to monitor changes made from
-any mount of a filesystem instance in a race-free manner.
-.PP
-The event queue can overflow.
-In this case, events are lost.
-.SH BUGS
-Before Linux 3.19,
-.BR fallocate (2)
-did not generate fanotify events.
-Since Linux 3.19,
-.\" commit 820c12d5d6c0890bc93dd63893924a13041fdc35
-calls to
-.BR fallocate (2)
-generate
-.B FAN_MODIFY
-events.
-.PP
-As of Linux 3.17,
-the following bugs exist:
-.IP \[bu] 3
-On Linux, a filesystem object may be accessible through multiple paths,
-for example, a part of a filesystem may be remounted using the
-.I \-\-bind
-option of
-.BR mount (8).
-A listener that marked a mount will be notified only of events that were
-triggered for a filesystem object using the same mount.
-Any other event will pass unnoticed.
-.IP \[bu]
-.\" FIXME . A patch was proposed.
-When an event is generated,
-no check is made to see whether the user ID of the
-receiving process has authorization to read or write the file
-before passing a file descriptor for that file.
-This poses a security risk, when the
-.B CAP_SYS_ADMIN
-capability is set for programs executed by unprivileged users.
-.IP \[bu]
-If a call to
-.BR read (2)
-processes multiple events from the fanotify queue and an error occurs,
-the return value will be the total length of the events successfully
-copied to the user-space buffer before the error occurred.
-The return value will not be \-1, and
-.I errno
-will not be set.
-Thus, the reading application has no way to detect the error.
-.SH EXAMPLES
-The two example programs below demonstrate the usage of the fanotify API.
-.SS Example program: fanotify_example.c
-The first program is an example of fanotify being
-used with its event object information passed in the form of a file
-descriptor.
-The program marks the mount passed as a command-line argument and
-waits for events of type
-.B FAN_OPEN_PERM
-and
-.BR FAN_CLOSE_WRITE .
-When a permission event occurs, a
-.B FAN_ALLOW
-response is given.
-.PP
-The following shell session shows an example of
-running this program.
-This session involved editing the file
-.IR /home/user/temp/notes .
-Before the file was opened, a
-.B FAN_OPEN_PERM
-event occurred.
-After the file was closed, a
-.B FAN_CLOSE_WRITE
-event occurred.
-Execution of the program ends when the user presses the ENTER key.
-.PP
-.in +4n
-.EX
-# \fB./fanotify_example /home\fP
-Press enter key to terminate.
-Listening for events.
-FAN_OPEN_PERM: File /home/user/temp/notes
-FAN_CLOSE_WRITE: File /home/user/temp/notes
-\&
-Listening for events stopped.
-.EE
-.in
-.SS Program source: fanotify_example.c
-\&
-.EX
-#define _GNU_SOURCE /* Needed to get O_LARGEFILE definition */
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <poll.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/fanotify.h>
-#include <unistd.h>
-\&
-/* Read all available fanotify events from the file descriptor \[aq]fd\[aq]. */
-\&
-static void
-handle_events(int fd)
-{
- const struct fanotify_event_metadata *metadata;
- struct fanotify_event_metadata buf[200];
- ssize_t len;
- char path[PATH_MAX];
- ssize_t path_len;
- char procfd_path[PATH_MAX];
- struct fanotify_response response;
-\&
- /* Loop while events can be read from fanotify file descriptor. */
-\&
- for (;;) {
-\&
- /* Read some events. */
-\&
- len = read(fd, buf, sizeof(buf));
- if (len == \-1 && errno != EAGAIN) {
- perror("read");
- exit(EXIT_FAILURE);
- }
-\&
- /* Check if end of available data reached. */
-\&
- if (len <= 0)
- break;
-\&
- /* Point to the first event in the buffer. */
-\&
- metadata = buf;
-\&
- /* Loop over all events in the buffer. */
-\&
- while (FAN_EVENT_OK(metadata, len)) {
-\&
- /* Check that run\-time and compile\-time structures match. */
-\&
- if (metadata\->vers != FANOTIFY_METADATA_VERSION) {
- fprintf(stderr,
- "Mismatch of fanotify metadata version.\en");
- exit(EXIT_FAILURE);
- }
-\&
- /* metadata\->fd contains either FAN_NOFD, indicating a
- queue overflow, or a file descriptor (a nonnegative
- integer). Here, we simply ignore queue overflow. */
-\&
- if (metadata\->fd >= 0) {
-\&
- /* Handle open permission event. */
-\&
- if (metadata\->mask & FAN_OPEN_PERM) {
- printf("FAN_OPEN_PERM: ");
-\&
- /* Allow file to be opened. */
-\&
- response.fd = metadata\->fd;
- response.response = FAN_ALLOW;
- write(fd, &response, sizeof(response));
- }
-\&
- /* Handle closing of writable file event. */
-\&
- if (metadata\->mask & FAN_CLOSE_WRITE)
- printf("FAN_CLOSE_WRITE: ");
-\&
- /* Retrieve and print pathname of the accessed file. */
-\&
- snprintf(procfd_path, sizeof(procfd_path),
- "/proc/self/fd/%d", metadata\->fd);
- path_len = readlink(procfd_path, path,
- sizeof(path) \- 1);
- if (path_len == \-1) {
- perror("readlink");
- exit(EXIT_FAILURE);
- }
-\&
- path[path_len] = \[aq]\e0\[aq];
- printf("File %s\en", path);
-\&
- /* Close the file descriptor of the event. */
-\&
- close(metadata\->fd);
- }
-\&
- /* Advance to next event. */
-\&
- metadata = FAN_EVENT_NEXT(metadata, len);
- }
- }
-}
-\&
-int
-main(int argc, char *argv[])
-{
- char buf;
- int fd, poll_num;
- nfds_t nfds;
- struct pollfd fds[2];
-\&
- /* Check mount point is supplied. */
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s MOUNT\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- printf("Press enter key to terminate.\en");
-\&
- /* Create the file descriptor for accessing the fanotify API. */
-\&
- fd = fanotify_init(FAN_CLOEXEC | FAN_CLASS_CONTENT | FAN_NONBLOCK,
- O_RDONLY | O_LARGEFILE);
- if (fd == \-1) {
- perror("fanotify_init");
- exit(EXIT_FAILURE);
- }
-\&
- /* Mark the mount for:
- \- permission events before opening files
- \- notification events after closing a write\-enabled
- file descriptor. */
-\&
- if (fanotify_mark(fd, FAN_MARK_ADD | FAN_MARK_MOUNT,
- FAN_OPEN_PERM | FAN_CLOSE_WRITE, AT_FDCWD,
- argv[1]) == \-1) {
- perror("fanotify_mark");
- exit(EXIT_FAILURE);
- }
-\&
- /* Prepare for polling. */
-\&
- nfds = 2;
-\&
- fds[0].fd = STDIN_FILENO; /* Console input */
- fds[0].events = POLLIN;
-\&
- fds[1].fd = fd; /* Fanotify input */
- fds[1].events = POLLIN;
-\&
- /* This is the loop to wait for incoming events. */
-\&
- printf("Listening for events.\en");
-\&
- while (1) {
- poll_num = poll(fds, nfds, \-1);
- if (poll_num == \-1) {
- if (errno == EINTR) /* Interrupted by a signal */
- continue; /* Restart poll() */
-\&
- perror("poll"); /* Unexpected error */
- exit(EXIT_FAILURE);
- }
-\&
- if (poll_num > 0) {
- if (fds[0].revents & POLLIN) {
-\&
- /* Console input is available: empty stdin and quit. */
-\&
- while (read(STDIN_FILENO, &buf, 1) > 0 && buf != \[aq]\en\[aq])
- continue;
- break;
- }
-\&
- if (fds[1].revents & POLLIN) {
-\&
- /* Fanotify events are available. */
-\&
- handle_events(fd);
- }
- }
- }
-\&
- printf("Listening for events stopped.\en");
- exit(EXIT_SUCCESS);
-}
-.EE
-.\"
-.SS Example program: fanotify_fid.c
-The second program is an example of fanotify being used with a group that
-identifies objects by file handles.
-The program marks the filesystem object that is passed as
-a command-line argument
-and waits until an event of type
-.B FAN_CREATE
-has occurred.
-The event mask indicates which type of filesystem object\[em]either
-a file or a directory\[em]was created.
-Once all events have been read from the buffer and processed accordingly,
-the program simply terminates.
-.PP
-The following shell sessions show two different invocations of
-this program, with different actions performed on a watched object.
-.PP
-The first session shows a mark being placed on
-.IR /home/user .
-This is followed by the creation of a regular file,
-.IR /home/user/testfile.txt .
-This results in a
-.B FAN_CREATE
-event being generated and reported against the file's parent watched
-directory object and with the created file name.
-Program execution ends once all events captured within the buffer have
-been processed.
-.PP
-.in +4n
-.EX
-# \fB./fanotify_fid /home/user\fP
-Listening for events.
-FAN_CREATE (file created):
- Directory /home/user has been modified.
- Entry \[aq]testfile.txt\[aq] is not a subdirectory.
-All events processed successfully. Program exiting.
-\&
-$ \fBtouch /home/user/testfile.txt\fP # In another terminal
-.EE
-.in
-.PP
-The second session shows a mark being placed on
-.IR /home/user .
-This is followed by the creation of a directory,
-.IR /home/user/testdir .
-This specific action results in a
-.B FAN_CREATE
-event being generated and is reported with the
-.B FAN_ONDIR
-flag set and with the created directory name.
-.PP
-.in +4n
-.EX
-# \fB./fanotify_fid /home/user\fP
-Listening for events.
-FAN_CREATE | FAN_ONDIR (subdirectory created):
- Directory /home/user has been modified.
- Entry \[aq]testdir\[aq] is a subdirectory.
-All events processed successfully. Program exiting.
-\&
-$ \fBmkdir \-p /home/user/testdir\fP # In another terminal
-.EE
-.in
-.SS Program source: fanotify_fid.c
-\&
-.EX
-#define _GNU_SOURCE
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/fanotify.h>
-#include <unistd.h>
-\&
-#define BUF_SIZE 256
-\&
-int
-main(int argc, char *argv[])
-{
- int fd, ret, event_fd, mount_fd;
- ssize_t len, path_len;
- char path[PATH_MAX];
- char procfd_path[PATH_MAX];
- char events_buf[BUF_SIZE];
- struct file_handle *file_handle;
- struct fanotify_event_metadata *metadata;
- struct fanotify_event_info_fid *fid;
- const char *file_name;
- struct stat sb;
-\&
- if (argc != 2) {
- fprintf(stderr, "Invalid number of command line arguments.\en");
- exit(EXIT_FAILURE);
- }
-\&
- mount_fd = open(argv[1], O_DIRECTORY | O_RDONLY);
- if (mount_fd == \-1) {
- perror(argv[1]);
- exit(EXIT_FAILURE);
- }
-\&
- /* Create an fanotify file descriptor with FAN_REPORT_DFID_NAME as
- a flag so that program can receive fid events with directory
- entry name. */
-\&
- fd = fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_DFID_NAME, 0);
- if (fd == \-1) {
- perror("fanotify_init");
- exit(EXIT_FAILURE);
- }
-\&
- /* Place a mark on the filesystem object supplied in argv[1]. */
-\&
- ret = fanotify_mark(fd, FAN_MARK_ADD | FAN_MARK_ONLYDIR,
- FAN_CREATE | FAN_ONDIR,
- AT_FDCWD, argv[1]);
- if (ret == \-1) {
- perror("fanotify_mark");
- exit(EXIT_FAILURE);
- }
-\&
- printf("Listening for events.\en");
-\&
- /* Read events from the event queue into a buffer. */
-\&
- len = read(fd, events_buf, sizeof(events_buf));
- if (len == \-1 && errno != EAGAIN) {
- perror("read");
- exit(EXIT_FAILURE);
- }
-\&
- /* Process all events within the buffer. */
-\&
- for (metadata = (struct fanotify_event_metadata *) events_buf;
- FAN_EVENT_OK(metadata, len);
- metadata = FAN_EVENT_NEXT(metadata, len)) {
- fid = (struct fanotify_event_info_fid *) (metadata + 1);
- file_handle = (struct file_handle *) fid\->handle;
-\&
- /* Ensure that the event info is of the correct type. */
-\&
- if (fid\->hdr.info_type == FAN_EVENT_INFO_TYPE_FID ||
- fid\->hdr.info_type == FAN_EVENT_INFO_TYPE_DFID) {
- file_name = NULL;
- } else if (fid\->hdr.info_type == FAN_EVENT_INFO_TYPE_DFID_NAME) {
- file_name = file_handle\->f_handle +
- file_handle\->handle_bytes;
- } else {
- fprintf(stderr, "Received unexpected event info type.\en");
- exit(EXIT_FAILURE);
- }
-\&
- if (metadata\->mask == FAN_CREATE)
- printf("FAN_CREATE (file created):\en");
-\&
- if (metadata\->mask == (FAN_CREATE | FAN_ONDIR))
- printf("FAN_CREATE | FAN_ONDIR (subdirectory created):\en");
-\&
- /* metadata\->fd is set to FAN_NOFD when the group identifies
- objects by file handles. To obtain a file descriptor for
- the file object corresponding to an event you can use the
- struct file_handle that\[aq]s provided within the
- fanotify_event_info_fid in conjunction with the
- open_by_handle_at(2) system call. A check for ESTALE is
- done to accommodate for the situation where the file handle
- for the object was deleted prior to this system call. */
-\&
- event_fd = open_by_handle_at(mount_fd, file_handle, O_RDONLY);
- if (event_fd == \-1) {
- if (errno == ESTALE) {
- printf("File handle is no longer valid. "
- "File has been deleted\en");
- continue;
- } else {
- perror("open_by_handle_at");
- exit(EXIT_FAILURE);
- }
- }
-\&
- snprintf(procfd_path, sizeof(procfd_path), "/proc/self/fd/%d",
- event_fd);
-\&
- /* Retrieve and print the path of the modified dentry. */
-\&
- path_len = readlink(procfd_path, path, sizeof(path) \- 1);
- if (path_len == \-1) {
- perror("readlink");
- exit(EXIT_FAILURE);
- }
-\&
- path[path_len] = \[aq]\e0\[aq];
- printf("\etDirectory \[aq]%s\[aq] has been modified.\en", path);
-\&
- if (file_name) {
- ret = fstatat(event_fd, file_name, &sb, 0);
- if (ret == \-1) {
- if (errno != ENOENT) {
- perror("fstatat");
- exit(EXIT_FAILURE);
- }
- printf("\etEntry \[aq]%s\[aq] does not exist.\en", file_name);
- } else if ((sb.st_mode & S_IFMT) == S_IFDIR) {
- printf("\etEntry \[aq]%s\[aq] is a subdirectory.\en", file_name);
- } else {
- printf("\etEntry \[aq]%s\[aq] is not a subdirectory.\en",
- file_name);
- }
- }
-\&
- /* Close associated file descriptor for this event. */
-\&
- close(event_fd);
- }
-\&
- printf("All events processed successfully. Program exiting.\en");
- exit(EXIT_SUCCESS);
-}
-.EE
-.SH SEE ALSO
-.ad l
-.BR fanotify_init (2),
-.BR fanotify_mark (2),
-.BR inotify (7)
diff --git a/man7/feature_test_macros.7 b/man7/feature_test_macros.7
deleted file mode 100644
index f1620611c..000000000
--- a/man7/feature_test_macros.7
+++ /dev/null
@@ -1,933 +0,0 @@
-.\" This manpage is Copyright (C) 2006, Michael Kerrisk
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH feature_test_macros 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-feature_test_macros \- feature test macros
-.SH DESCRIPTION
-Feature test macros allow the programmer to control the definitions that
-are exposed by system header files when a program is compiled.
-.PP
-.B NOTE:
-In order to be effective, a feature test macro
-.IR "must be defined before including any header files" .
-This can be done either in the compilation command
-.RI ( "cc \-DMACRO=value" )
-or by defining the macro within the source code before
-including any headers.
-The requirement that the macro must be defined before including any
-header file exists because header files may freely include one another.
-Thus, for example, in the following lines, defining the
-.B _GNU_SOURCE
-macro may have no effect because the header
-.I <abc.h>
-itself includes
-.I <xyz.h>
-(POSIX explicitly allows this):
-.PP
-.in +4n
-.EX
-#include <abc.h>
-#define _GNU_SOURCE
-#include <xyz.h>
-.EE
-.in
-.PP
-Some feature test macros are useful for creating portable applications,
-by preventing nonstandard definitions from being exposed.
-Other macros can be used to expose nonstandard definitions that
-are not exposed by default.
-.PP
-The precise effects of each of the feature test macros described below
-can be ascertained by inspecting the
-.I <features.h>
-header file.
-.BR Note :
-applications do
-.I not
-need to directly include
-.IR <features.h> ;
-indeed, doing so is actively discouraged.
-See NOTES.
-.SS Specification of feature test macro requirements in manual pages
-When a function requires that a feature test macro is defined,
-the manual page SYNOPSIS typically includes a note of the following form
-(this example from the
-.BR acct (2)
-manual page):
-.PP
-.RS
-.B #include <unistd.h>
-.PP
-.BI "int acct(const char *" filename );
-.PP
-.RS -4
-.EX
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.EE
-.RE
-.PP
-.BR acct ():
-_BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
-.RE
-.PP
-The
-.B ||
-means that in order to obtain the declaration of
-.BR acct (2)
-from
-.IR <unistd.h> ,
-.I either
-of the following macro
-definitions must be made before including any header files:
-.PP
-.in +4n
-.EX
-#define _BSD_SOURCE
-#define _XOPEN_SOURCE /* or any value < 500 */
-.EE
-.in
-.PP
-Alternatively, equivalent definitions can be included in the
-compilation command:
-.PP
-.in +4n
-.EX
-cc \-D_BSD_SOURCE
-cc \-D_XOPEN_SOURCE # Or any value < 500
-.EE
-.in
-.PP
-Note that, as described below,
-.BR "some feature test macros are defined by default" ,
-so that it may not always be necessary to
-explicitly specify the feature test macro(s) shown in the
-SYNOPSIS.
-.PP
-In a few cases, manual pages use a shorthand for expressing the
-feature test macro requirements (this example from
-.BR readahead (2)):
-.PP
-.RS +4
-.EX
-.B #define _GNU_SOURCE
-.B #include <fcntl.h>
-.PP
-.BI "ssize_t readahead(int " fd ", off64_t *" offset ", size_t " count );
-.EE
-.RE
-.PP
-This format is employed in cases where only a single
-feature test macro can be used to expose the function
-declaration, and that macro is not defined by default.
-.SS Feature test macros understood by glibc
-The paragraphs below explain how feature test macros are handled
-in glibc 2.\fIx\fP,
-.I x
-> 0.
-.PP
-First, though, a summary of a few details for the impatient:
-.IP \[bu] 3
-The macros that you most likely need to use in modern source code are
-.B _POSIX_C_SOURCE
-(for definitions from various versions of POSIX.1),
-.B _XOPEN_SOURCE
-(for definitions from various versions of SUS),
-.B _GNU_SOURCE
-(for GNU and/or Linux specific stuff), and
-.B _DEFAULT_SOURCE
-(to get definitions that would normally be provided by default).
-.IP \[bu]
-Certain macros are defined with default values.
-Thus, although one or more macros may be indicated as being
-required in the SYNOPSIS of a man page,
-it may not be necessary to define them explicitly.
-Full details of the defaults are given later in this man page.
-.IP \[bu]
-Defining
-.B _XOPEN_SOURCE
-with a value of 600 or greater produces the same effects as defining
-.B _POSIX_C_SOURCE
-with a value of 200112L or greater.
-Where one sees
-.IP
-.in +4n
-.EX
-_POSIX_C_SOURCE >= 200112L
-.EE
-.in
-.IP
-in the feature test macro requirements in the SYNOPSIS of a man page,
-it is implicit that the following has the same effect:
-.IP
-.in +4n
-.EX
-_XOPEN_SOURCE >= 600
-.EE
-.in
-.IP \[bu]
-Defining
-.B _XOPEN_SOURCE
-with a value of 700 or greater produces the same effects as defining
-.B _POSIX_C_SOURCE
-with a value of 200809L or greater.
-Where one sees
-.IP
-.in +4n
-.EX
-_POSIX_C_SOURCE >= 200809L
-.EE
-.in
-.IP
-in the feature test macro requirements in the SYNOPSIS of a man page,
-it is implicit that the following has the same effect:
-.IP
-.in +4n
-.EX
-_XOPEN_SOURCE >= 700
-.EE
-.in
-.\" The details in glibc 2.0 are simpler, but combining a
-.\" a description of them with the details in later glibc versions
-.\" would make for a complicated description.
-.PP
-glibc understands the following feature test macros:
-.TP
-.B __STRICT_ANSI__
-ISO Standard C.
-This macro is implicitly defined by
-.BR gcc (1)
-when invoked with, for example, the
-.I \-std=c99
-or
-.I \-ansi
-flag.
-.TP
-.B _POSIX_C_SOURCE
-Defining this macro causes header files to expose definitions as follows:
-.RS
-.IP \[bu] 3
-The value 1 exposes definitions conforming to POSIX.1-1990 and
-ISO C (1990).
-.IP \[bu]
-The value 2 or greater additionally exposes
-definitions for POSIX.2-1992.
-.IP \[bu]
-The value 199309L or greater additionally exposes
-definitions for POSIX.1b (real-time extensions).
-.\" 199506L functionality is available only since glibc 2.1
-.IP \[bu]
-The value 199506L or greater additionally exposes
-definitions for POSIX.1c (threads).
-.IP \[bu]
-(Since glibc 2.3.3)
-The value 200112L or greater additionally exposes definitions corresponding
-to the POSIX.1-2001 base specification (excluding the XSI extension).
-This value also causes C95 (since glibc 2.12) and
-C99 (since glibc 2.10) features to be exposed
-(in other words, the equivalent of defining
-.BR _ISOC99_SOURCE ).
-.IP \[bu]
-(Since glibc 2.10)
-The value 200809L or greater additionally exposes definitions corresponding
-to the POSIX.1-2008 base specification (excluding the XSI extension).
-.RE
-.TP
-.B _POSIX_SOURCE
-Defining this obsolete macro with any value is equivalent to defining
-.B _POSIX_C_SOURCE
-with the value 1.
-.IP
-Since this macro is obsolete,
-its usage is generally not documented when discussing
-feature test macro requirements in the man pages.
-.TP
-.B _XOPEN_SOURCE
-Defining this macro causes header files to expose definitions as follows:
-.RS
-.IP \[bu] 3
-Defining with any value exposes
-definitions conforming to POSIX.1, POSIX.2, and XPG4.
-.IP \[bu]
-The value 500 or greater additionally exposes
-definitions for SUSv2 (UNIX 98).
-.IP \[bu]
-(Since glibc 2.2) The value 600 or greater additionally exposes
-definitions for SUSv3 (UNIX 03; i.e., the POSIX.1-2001 base specification
-plus the XSI extension) and C99 definitions.
-.IP \[bu]
-(Since glibc 2.10) The value 700 or greater additionally exposes
-definitions for SUSv4 (i.e., the POSIX.1-2008 base specification
-plus the XSI extension).
-.RE
-.IP
-If
-.B __STRICT_ANSI__
-is not defined, or
-.B _XOPEN_SOURCE
-is defined with a value greater than or equal to 500
-.I and
-neither
-.B _POSIX_SOURCE
-nor
-.B _POSIX_C_SOURCE
-is explicitly defined, then
-the following macros are implicitly defined:
-.RS
-.IP \[bu] 3
-.B _POSIX_SOURCE
-is defined with the value 1.
-.IP \[bu]
-.B _POSIX_C_SOURCE
-is defined, according to the value of
-.BR _XOPEN_SOURCE :
-.RS
-.TP
-.BR _XOPEN_SOURCE " < 500"
-.B _POSIX_C_SOURCE
-is defined with the value 2.
-.TP
-.RB "500 <= " _XOPEN_SOURCE " < 600"
-.B _POSIX_C_SOURCE
-is defined with the value 199506L.
-.TP
-.RB "600 <= " _XOPEN_SOURCE " < 700"
-.B _POSIX_C_SOURCE
-is defined with the value 200112L.
-.TP
-.RB "700 <= " _XOPEN_SOURCE " (since glibc 2.10)"
-.B _POSIX_C_SOURCE
-is defined with the value 200809L.
-.RE
-.RE
-.IP
-In addition, defining
-.B _XOPEN_SOURCE
-with a value of 500 or greater produces the same effects as defining
-.BR _XOPEN_SOURCE_EXTENDED .
-.TP
-.B _XOPEN_SOURCE_EXTENDED
-If this macro is defined,
-.I and
-.B _XOPEN_SOURCE
-is defined, then expose definitions corresponding to the XPG4v2
-(SUSv1) UNIX extensions (UNIX 95).
-Defining
-.B _XOPEN_SOURCE
-with a value of 500 or more also produces the same effect as defining
-.BR _XOPEN_SOURCE_EXTENDED .
-Use of
-.B _XOPEN_SOURCE_EXTENDED
-in new source code should be avoided.
-.IP
-Since defining
-.B _XOPEN_SOURCE
-with a value of 500 or more has the same effect as defining
-.BR _XOPEN_SOURCE_EXTENDED ,
-the latter (obsolete) feature test macro is generally not described in the
-SYNOPSIS in man pages.
-.TP
-.BR _ISOC99_SOURCE " (since glibc 2.1.3)"
-Exposes declarations consistent with the ISO C99 standard.
-.IP
-Earlier glibc 2.1.x versions recognized an equivalent macro named
-.B _ISOC9X_SOURCE
-(because the C99 standard had not then been finalized).
-Although the use of this macro is obsolete, glibc continues
-to recognize it for backward compatibility.
-.IP
-Defining
-.B _ISOC99_SOURCE
-also exposes ISO C (1990) Amendment 1 ("C95") definitions.
-(The primary change in C95 was support for international character sets.)
-.IP
-Invoking the C compiler with the option
-.I \-std=c99
-produces the same effects as defining this macro.
-.TP
-.BR _ISOC11_SOURCE " (since glibc 2.16)"
-Exposes declarations consistent with the ISO C11 standard.
-Defining this macro also enables C99 and C95 features (like
-.BR _ISOC99_SOURCE ).
-.IP
-Invoking the C compiler with the option
-.I \-std=c11
-produces the same effects as defining this macro.
-.TP
-.B _LARGEFILE64_SOURCE
-Expose definitions for the alternative API specified by the
-LFS (Large File Summit) as a "transitional extension" to the
-Single UNIX Specification.
-(See
-.UR http:\:/\:/opengroup.org\:/platform\:/lfs.html
-.UE .)
-The alternative API consists of a set of new objects
-(i.e., functions and types) whose names are suffixed with "64"
-(e.g.,
-.I off64_t
-versus
-.IR off_t ,
-.BR lseek64 ()
-versus
-.BR lseek (),
-etc.).
-New programs should not employ this macro; instead
-.I _FILE_OFFSET_BITS=64
-should be employed.
-.TP
-.B _LARGEFILE_SOURCE
-This macro was historically used to expose certain functions (specifically
-.BR fseeko (3)
-and
-.BR ftello (3))
-that address limitations of earlier APIs
-.RB ( fseek (3)
-and
-.BR ftell (3))
-that use
-.I long
-for file offsets.
-This macro is implicitly defined if
-.B _XOPEN_SOURCE
-is defined with a value greater than or equal to 500.
-New programs should not employ this macro;
-defining
-.B _XOPEN_SOURCE
-as just described or defining
-.B _FILE_OFFSET_BITS
-with the value 64 is the preferred mechanism to achieve the same result.
-.TP
-.B _FILE_OFFSET_BITS
-Defining this macro with the value 64
-automatically converts references to 32-bit functions and data types
-related to file I/O and filesystem operations into references to
-their 64-bit counterparts.
-This is useful for performing I/O on large files (> 2 Gigabytes)
-on 32-bit systems.
-(Defining this macro permits correctly written programs to use
-large files with only a recompilation being required.)
-.IP
-64-bit systems naturally permit file sizes greater than 2 Gigabytes,
-and on those systems this macro has no effect.
-.TP
-.B _TIME_BITS
-Defining this macro with the value 64
-changes the width of
-.BR time_t (3type)
-to 64-bit which allows handling of timestamps beyond
-2038.
-It is closely related to
-.B _FILE_OFFSET_BITS
-and depending on implementation, may require it set.
-This macro is available as of glibc 2.34.
-.TP
-.BR _BSD_SOURCE " (deprecated since glibc 2.20)"
-Defining this macro with any value causes header files to expose
-BSD-derived definitions.
-.IP
-In glibc versions up to and including 2.18,
-defining this macro also causes BSD definitions to be preferred in
-some situations where standards conflict, unless one or more of
-.BR _SVID_SOURCE ,
-.BR _POSIX_SOURCE ,
-.BR _POSIX_C_SOURCE ,
-.BR _XOPEN_SOURCE ,
-.BR _XOPEN_SOURCE_EXTENDED ,
-or
-.B _GNU_SOURCE
-is defined, in which case BSD definitions are disfavored.
-Since glibc 2.19,
-.B _BSD_SOURCE
-no longer causes BSD definitions to be preferred in case of conflicts.
-.IP
-Since glibc 2.20, this macro is deprecated.
-.\" commit c941736c92fa3a319221f65f6755659b2a5e0a20
-.\" commit 498afc54dfee41d33ba519f496e96480badace8e
-.\" commit acd7f096d79c181866d56d4aaf3b043e741f1e2c
-It now has the same effect as defining
-.BR _DEFAULT_SOURCE ,
-but generates a compile-time warning (unless
-.B _DEFAULT_SOURCE
-.\" commit ade40b10ff5fa59a318cf55b9d8414b758e8df78
-is also defined).
-Use
-.B _DEFAULT_SOURCE
-instead.
-To allow code that requires
-.B _BSD_SOURCE
-in glibc 2.19 and earlier and
-.B _DEFAULT_SOURCE
-in glibc 2.20 and later to compile without warnings, define
-.I both
-.B _BSD_SOURCE
-and
-.BR _DEFAULT_SOURCE .
-.TP
-.BR _SVID_SOURCE " (deprecated since glibc 2.20)"
-Defining this macro with any value causes header files to expose
-System V-derived definitions.
-(SVID == System V Interface Definition; see
-.BR standards (7).)
-.IP
-Since glibc 2.20, this macro is deprecated in the same fashion as
-.BR _BSD_SOURCE .
-.TP
-.BR _DEFAULT_SOURCE " (since glibc 2.19)"
-This macro can be defined to ensure that the "default"
-definitions are provided even when the defaults would otherwise
-be disabled,
-as happens when individual macros are explicitly defined,
-or the compiler is invoked in one of its "standard" modes (e.g.,
-.IR cc\~\-std=c99 ).
-Defining
-.B _DEFAULT_SOURCE
-without defining other individual macros
-or invoking the compiler in one of its "standard" modes has no effect.
-.IP
-The "default" definitions comprise those required by POSIX.1-2008 and ISO C99,
-as well as various definitions originally derived from BSD and System V.
-On glibc 2.19 and earlier, these defaults were approximately equivalent
-to explicitly defining the following:
-.IP
-.in +4n
-.EX
-cc \-D_BSD_SOURCE \-D_SVID_SOURCE \-D_POSIX_C_SOURCE=200809
-.EE
-.in
-.TP
-.BR _ATFILE_SOURCE " (since glibc 2.4)"
-Defining this macro with any value causes header files to expose
-declarations of a range of functions with the suffix "at";
-see
-.BR openat (2).
-Since glibc 2.10, this macro is also implicitly defined if
-.B _POSIX_C_SOURCE
-is defined with a value greater than or equal to 200809L.
-.TP
-.B _GNU_SOURCE
-Defining this macro (with any value) implicitly defines
-.BR _ATFILE_SOURCE ,
-.BR _LARGEFILE64_SOURCE ,
-.BR _ISOC99_SOURCE ,
-.BR _XOPEN_SOURCE_EXTENDED ,
-.BR _POSIX_SOURCE ,
-.B _POSIX_C_SOURCE
-with the value 200809L
-(200112L before glibc 2.10;
-199506L before glibc 2.5;
-199309L before glibc 2.1)
-and
-.B _XOPEN_SOURCE
-with the value 700
-(600 before glibc 2.10;
-500 before glibc 2.2).
-In addition, various GNU-specific extensions are also exposed.
-.IP
-Since glibc 2.19, defining
-.B _GNU_SOURCE
-also has the effect of implicitly defining
-.BR _DEFAULT_SOURCE .
-Before glibc 2.20, defining
-.B _GNU_SOURCE
-also had the effect of implicitly defining
-.B _BSD_SOURCE
-and
-.BR _SVID_SOURCE .
-.TP
-.B _REENTRANT
-Historically, on various C libraries
-it was necessary to define this macro in all
-multithreaded code.
-.\" Zack Weinberg
-.\" There did once exist C libraries where it was necessary. The ones
-.\" I remember were proprietary Unix vendor libcs from the mid-1990s
-.\" You would get completely unlocked stdio without _REENTRANT.
-(Some C libraries may still require this.)
-In glibc,
-this macro also exposed definitions of certain reentrant functions.
-.IP
-However, glibc has been thread-safe by default for many years;
-since glibc 2.3, the only effect of defining
-.B _REENTRANT
-has been to enable one or two of the same declarations that
-are also enabled by defining
-.B _POSIX_C_SOURCE
-with a value of 199606L or greater.
-.IP
-.B _REENTRANT
-is now obsolete.
-In glibc 2.25 and later, defining
-.B _REENTRANT
-is equivalent to defining
-.B _POSIX_C_SOURCE
-with the value 199606L.
-If a higher POSIX conformance level is
-selected by any other means (such as
-.B _POSIX_C_SOURCE
-itself,
-.BR _XOPEN_SOURCE ,
-.BR _DEFAULT_SOURCE ,
-or
-.BR _GNU_SOURCE ),
-then defining
-.B _REENTRANT
-has no effect.
-.IP
-This macro is automatically defined if one compiles with
-.IR cc\~\-pthread .
-.TP
-.B _THREAD_SAFE
-Synonym for the (deprecated)
-.BR _REENTRANT ,
-provided for compatibility with some other implementations.
-.TP
-.BR _FORTIFY_SOURCE " (since glibc 2.3.4)"
-.\" For more detail, see:
-.\" http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html
-.\" [PATCH] Object size checking to prevent (some) buffer overflows
-.\" * From: Jakub Jelinek <jakub at redhat dot com>
-.\" * To: gcc-patches at gcc dot gnu dot org
-.\" * Date: Tue, 21 Sep 2004 04:16:40 -0400
-Defining this macro causes some lightweight checks to be performed
-to detect some buffer overflow errors when employing
-various string and memory manipulation functions (for example,
-.BR memcpy (3),
-.BR memset (3),
-.BR stpcpy (3),
-.BR strcpy (3),
-.BR strncpy (3),
-.BR strcat (3),
-.BR strncat (3),
-.BR sprintf (3),
-.BR snprintf (3),
-.BR vsprintf (3),
-.BR vsnprintf (3),
-.BR gets (3),
-and wide character variants thereof).
-For some functions, argument consistency is checked;
-for example, a check is made that
-.BR open (2)
-has been supplied with a
-.I mode
-argument when the specified flags include
-.BR O_CREAT .
-Not all problems are detected, just some common cases.
-.\" Look for __USE_FORTIFY_LEVEL in the header files
-.IP
-If
-.B _FORTIFY_SOURCE
-is set to 1, with compiler optimization level 1
-.RI ( "gcc\ \-O1" )
-and above, checks that shouldn't change the behavior of
-conforming programs are performed.
-With
-.B _FORTIFY_SOURCE
-set to 2, some more checking is added, but
-some conforming programs might fail.
-.\" For example, given the following code
-.\" int d;
-.\" char buf[1000], buf[1000];
-.\" strcpy(fmt, "Hello world\n%n");
-.\" snprintf(buf, sizeof(buf), fmt, &d);
-.\"
-.\" Compiling with "gcc -D_FORTIFY_SOURCE=2 -O1" and then running will
-.\" cause the following diagnostic at run time at the snprintf() call
-.\"
-.\" *** %n in writable segment detected ***
-.\" Aborted (core dumped)
-.\"
-.IP
-Some of the checks can be performed at compile time
-(via macros logic implemented in header files),
-and result in compiler warnings;
-other checks take place at run time,
-and result in a run-time error if the check fails.
-.IP
-With
-.B _FORTIFY_SOURCE
-set to 3, additional checking is added to intercept
-some function calls used with an argument of variable size
-where the compiler can deduce an upper bound for its value.
-For example, a program where
-.BR malloc (3)'s
-size argument is variable
-can now be fortified.
-.IP
-Use of this macro requires compiler support, available since
-gcc 4.0 and clang 2.6.
-Use of
-.B _FORTIFY_SOURCE
-set to 3 requires gcc 12.0 or later, or clang 9.0 or later,
-in conjunction with glibc 2.33 or later.
-.\" glibc is not an absolute requirement (gcc has libssp; NetBSD/newlib
-.\" and Darwin each have their own implementation), but let's keep it
-.\" simple.
-.SS Default definitions, implicit definitions, and combining definitions
-If no feature test macros are explicitly defined,
-then the following feature test macros are defined by default:
-.B _BSD_SOURCE
-(in glibc 2.19 and earlier),
-.B _SVID_SOURCE
-(in glibc 2.19 and earlier),
-.B _DEFAULT_SOURCE
-(since glibc 2.19),
-.BR _POSIX_SOURCE ,
-and
-.BR _POSIX_C_SOURCE =200809L
-(200112L before glibc 2.10;
-199506L before glibc 2.4;
-199309L before glibc 2.1).
-.PP
-If any of
-.BR __STRICT_ANSI__ ,
-.BR _ISOC99_SOURCE ,
-.B _ISOC11_SOURCE
-(since glibc 2.18),
-.BR _POSIX_SOURCE ,
-.BR _POSIX_C_SOURCE ,
-.BR _XOPEN_SOURCE ,
-.B _XOPEN_SOURCE_EXTENDED
-(in glibc 2.11 and earlier),
-.B _BSD_SOURCE
-(in glibc 2.19 and earlier),
-or
-.B _SVID_SOURCE
-(in glibc 2.19 and earlier)
-is explicitly defined, then
-.BR _BSD_SOURCE ,
-.BR _SVID_SOURCE ,
-and
-.B _DEFAULT_SOURCE
-are not defined by default.
-.PP
-If
-.B _POSIX_SOURCE
-and
-.B _POSIX_C_SOURCE
-are not explicitly defined,
-and either
-.B __STRICT_ANSI__
-is not defined or
-.B _XOPEN_SOURCE
-is defined with a value of 500 or more, then
-.IP \[bu] 3
-.B _POSIX_SOURCE
-is defined with the value 1; and
-.IP \[bu]
-.B _POSIX_C_SOURCE
-is defined with one of the following values:
-.RS 3
-.IP \[bu] 3
-2,
-if
-.B _XOPEN_SOURCE
-is defined with a value less than 500;
-.IP \[bu]
-199506L,
-if
-.B _XOPEN_SOURCE
-is defined with a value greater than or equal to 500 and less than 600;
-or
-.IP \[bu]
-(since glibc 2.4) 200112L,
-if
-.B _XOPEN_SOURCE
-is defined with a value greater than or equal to 600 and less than 700.
-.IP \[bu]
-(Since glibc 2.10)
-200809L,
-if
-.B _XOPEN_SOURCE
-is defined with a value greater than or equal to 700.
-.IP \[bu]
-Older versions of glibc do not know about the values
-200112L and 200809L for
-.BR _POSIX_C_SOURCE ,
-and the setting of this macro will depend on the glibc version.
-.IP \[bu]
-If
-.B _XOPEN_SOURCE
-is undefined, then the setting of
-.B _POSIX_C_SOURCE
-depends on the glibc version:
-199506L, before glibc 2.4;
-200112L, since glibc 2.4 to glibc 2.9; and
-200809L, since glibc 2.10.
-.RE
-.PP
-Multiple macros can be defined; the results are additive.
-.SH STANDARDS
-POSIX.1 specifies
-.BR _POSIX_C_SOURCE ,
-.BR _POSIX_SOURCE ,
-and
-.BR _XOPEN_SOURCE .
-.PP
-.B _FILE_OFFSET_BITS
-is not specified by any standard,
-but is employed on some other implementations.
-.PP
-.BR _BSD_SOURCE ,
-.BR _SVID_SOURCE ,
-.BR _DEFAULT_SOURCE ,
-.BR _ATFILE_SOURCE ,
-.BR _GNU_SOURCE ,
-.BR _FORTIFY_SOURCE ,
-.BR _REENTRANT ,
-and
-.B _THREAD_SAFE
-are specific to glibc.
-.SH HISTORY
-.B _XOPEN_SOURCE_EXTENDED
-was specified by XPG4v2 (aka SUSv1), but is not present in SUSv2 and later.
-.SH NOTES
-.I <features.h>
-is a Linux/glibc-specific header file.
-Other systems have an analogous file, but typically with a different name.
-This header file is automatically included by other header files as
-required: it is not necessary to explicitly include it in order to
-employ feature test macros.
-.PP
-According to which of the above feature test macros are defined,
-.I <features.h>
-internally defines various other macros that are checked by
-other glibc header files.
-These macros have names prefixed by two underscores (e.g.,
-.BR __USE_MISC ).
-Programs should
-.I never
-define these macros directly:
-instead, the appropriate feature test macro(s) from the
-list above should be employed.
-.SH EXAMPLES
-The program below can be used to explore how the various
-feature test macros are set depending on the glibc version
-and what feature test macros are explicitly set.
-The following shell session, on a system with glibc 2.10,
-shows some examples of what we would see:
-.PP
-.in +4n
-.EX
-$ \fBcc ftm.c\fP
-$ \fB./a.out\fP
-_POSIX_SOURCE defined
-_POSIX_C_SOURCE defined: 200809L
-_BSD_SOURCE defined
-_SVID_SOURCE defined
-_ATFILE_SOURCE defined
-$ \fBcc \-D_XOPEN_SOURCE=500 ftm.c\fP
-$ \fB./a.out\fP
-_POSIX_SOURCE defined
-_POSIX_C_SOURCE defined: 199506L
-_XOPEN_SOURCE defined: 500
-$ \fBcc \-D_GNU_SOURCE ftm.c\fP
-$ \fB./a.out\fP
-_POSIX_SOURCE defined
-_POSIX_C_SOURCE defined: 200809L
-_ISOC99_SOURCE defined
-_XOPEN_SOURCE defined: 700
-_XOPEN_SOURCE_EXTENDED defined
-_LARGEFILE64_SOURCE defined
-_BSD_SOURCE defined
-_SVID_SOURCE defined
-_ATFILE_SOURCE defined
-_GNU_SOURCE defined
-.EE
-.in
-.SS Program source
-\&
-.EX
-/* ftm.c */
-\&
-#include <stdint.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-\&
-int
-main(int argc, char *argv[])
-{
-#ifdef _POSIX_SOURCE
- printf("_POSIX_SOURCE defined\en");
-#endif
-\&
-#ifdef _POSIX_C_SOURCE
- printf("_POSIX_C_SOURCE defined: %jdL\en",
- (intmax_t) _POSIX_C_SOURCE);
-#endif
-\&
-#ifdef _ISOC99_SOURCE
- printf("_ISOC99_SOURCE defined\en");
-#endif
-\&
-#ifdef _ISOC11_SOURCE
- printf("_ISOC11_SOURCE defined\en");
-#endif
-\&
-#ifdef _XOPEN_SOURCE
- printf("_XOPEN_SOURCE defined: %d\en", _XOPEN_SOURCE);
-#endif
-\&
-#ifdef _XOPEN_SOURCE_EXTENDED
- printf("_XOPEN_SOURCE_EXTENDED defined\en");
-#endif
-\&
-#ifdef _LARGEFILE64_SOURCE
- printf("_LARGEFILE64_SOURCE defined\en");
-#endif
-\&
-#ifdef _FILE_OFFSET_BITS
- printf("_FILE_OFFSET_BITS defined: %d\en", _FILE_OFFSET_BITS);
-#endif
-\&
-#ifdef _TIME_BITS
- printf("_TIME_BITS defined: %d\en", _TIME_BITS);
-#endif
-\&
-#ifdef _BSD_SOURCE
- printf("_BSD_SOURCE defined\en");
-#endif
-\&
-#ifdef _SVID_SOURCE
- printf("_SVID_SOURCE defined\en");
-#endif
-\&
-#ifdef _DEFAULT_SOURCE
- printf("_DEFAULT_SOURCE defined\en");
-#endif
-\&
-#ifdef _ATFILE_SOURCE
- printf("_ATFILE_SOURCE defined\en");
-#endif
-\&
-#ifdef _GNU_SOURCE
- printf("_GNU_SOURCE defined\en");
-#endif
-\&
-#ifdef _REENTRANT
- printf("_REENTRANT defined\en");
-#endif
-\&
-#ifdef _THREAD_SAFE
- printf("_THREAD_SAFE defined\en");
-#endif
-\&
-#ifdef _FORTIFY_SOURCE
- printf("_FORTIFY_SOURCE defined\en");
-#endif
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.SH SEE ALSO
-.BR libc (7),
-.BR standards (7),
-.BR system_data_types (7)
-.PP
-The section "Feature Test Macros" under
-.IR "info libc" .
-.\" But beware: the info libc document is out of date (Jul 07, mtk)
-.PP
-.I /usr/include/features.h
diff --git a/man7/fifo.7 b/man7/fifo.7
deleted file mode 100644
index 0a26c8ad1..000000000
--- a/man7/fifo.7
+++ /dev/null
@@ -1,75 +0,0 @@
-.\" This man page is Copyright (C) 1999 Claus Fischer.
-.\"
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" 990620 - page created - aeb@cwi.nl
-.\"
-.TH fifo 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-fifo \- first-in first-out special file, named pipe
-.SH DESCRIPTION
-A FIFO special file (a named pipe) is similar to a pipe,
-except that it is accessed as part of the filesystem.
-It can be opened by multiple processes for reading or
-writing.
-When processes are exchanging data via the FIFO,
-the kernel passes all data internally without writing it
-to the filesystem.
-Thus, the FIFO special file has no
-contents on the filesystem; the filesystem entry merely
-serves as a reference point so that processes can access
-the pipe using a name in the filesystem.
-.PP
-The kernel maintains exactly one pipe object for each
-FIFO special file that is opened by at least one process.
-The FIFO must be opened on both ends (reading and writing)
-before data can be passed.
-Normally, opening the FIFO blocks
-until the other end is opened also.
-.PP
-A process can open a FIFO in nonblocking mode.
-In this
-case, opening for read-only succeeds even if no one has
-opened on the write side yet and opening for write-only
-fails with
-.B ENXIO
-(no such device or address) unless the other
-end has already been opened.
-.PP
-Under Linux, opening a FIFO for read and write will succeed
-both in blocking and nonblocking mode.
-POSIX leaves this
-behavior undefined.
-This can be used to open a FIFO for
-writing while there are no readers available.
-A process
-that uses both ends of the connection in order to communicate
-with itself should be very careful to avoid deadlocks.
-.SH NOTES
-For details of the semantics of I/O on FIFOs, see
-.BR pipe (7).
-.PP
-When a process tries to write to a FIFO that is not opened
-for read on the other side, the process is sent a
-.B SIGPIPE
-signal.
-.PP
-FIFO special files can be created by
-.BR mkfifo (3),
-and are indicated by
-.I ls\~\-l
-with the file type \[aq]p\[aq].
-.SH SEE ALSO
-.BR mkfifo (1),
-.BR open (2),
-.BR pipe (2),
-.BR sigaction (2),
-.BR signal (2),
-.BR socketpair (2),
-.BR mkfifo (3),
-.BR pipe (7)
diff --git a/man7/futex.7 b/man7/futex.7
deleted file mode 100644
index 541162c10..000000000
--- a/man7/futex.7
+++ /dev/null
@@ -1,121 +0,0 @@
-.\" This manpage has been automatically generated by docbook2man
-.\" from a DocBook document. This tool can be found at:
-.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
-.\" Please send any bug reports, improvements, comments, patches,
-.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.\"
-.\" SPDX-License-Identifier: MIT
-.\"
-.TH futex 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-futex \- fast user-space locking
-.SH SYNOPSIS
-.nf
-.B #include <linux/futex.h>
-.fi
-.SH DESCRIPTION
-The Linux kernel provides futexes ("Fast user-space mutexes")
-as a building block for fast user-space
-locking and semaphores.
-Futexes are very basic and lend themselves well for building higher-level
-locking abstractions such as
-mutexes, condition variables, read-write locks, barriers, and semaphores.
-.PP
-Most programmers will in fact not be using futexes directly but will
-instead rely on system libraries built on them,
-such as the Native POSIX Thread Library (NPTL) (see
-.BR pthreads (7)).
-.PP
-A futex is identified by a piece of memory which can be
-shared between processes or threads.
-In these different processes, the futex need not have identical addresses.
-In its bare form, a futex has semaphore semantics;
-it is a counter that can be incremented and decremented atomically;
-processes can wait for the value to become positive.
-.PP
-Futex operation occurs entirely in user space for the noncontended case.
-The kernel is involved only to arbitrate the contended case.
-As any sane design will strive for noncontention,
-futexes are also optimized for this situation.
-.PP
-In its bare form, a futex is an aligned integer which is
-touched only by atomic assembler instructions.
-This integer is four bytes long on all platforms.
-Processes can share this integer using
-.BR mmap (2),
-via shared memory segments, or because they share memory space,
-in which case the application is commonly called multithreaded.
-.SS Semantics
-Any futex operation starts in user space,
-but it may be necessary to communicate with the kernel using the
-.BR futex (2)
-system call.
-.PP
-To "up" a futex, execute the proper assembler instructions that
-will cause the host CPU to atomically increment the integer.
-Afterward, check if it has in fact changed from 0 to 1, in which case
-there were no waiters and the operation is done.
-This is the noncontended case which is fast and should be common.
-.PP
-In the contended case, the atomic increment changed the counter
-from \-1 (or some other negative number).
-If this is detected, there are waiters.
-User space should now set the counter to 1 and instruct the
-kernel to wake up any waiters using the
-.B FUTEX_WAKE
-operation.
-.PP
-Waiting on a futex, to "down" it, is the reverse operation.
-Atomically decrement the counter and check if it changed to 0,
-in which case the operation is done and the futex was uncontended.
-In all other circumstances, the process should set the counter to \-1
-and request that the kernel wait for another process to up the futex.
-This is done using the
-.B FUTEX_WAIT
-operation.
-.PP
-The
-.BR futex (2)
-system call can optionally be passed a timeout specifying how long
-the kernel should
-wait for the futex to be upped.
-In this case, semantics are more complex and the programmer is referred
-to
-.BR futex (2)
-for
-more details.
-The same holds for asynchronous futex waiting.
-.SH VERSIONS
-Initial futex support was merged in Linux 2.5.7
-but with different semantics from those described above.
-Current semantics are available from Linux 2.5.40 onward.
-.SH NOTES
-To reiterate, bare futexes are not intended as an easy-to-use
-abstraction for end users.
-Implementors are expected to be assembly literate and to have read
-the sources of the futex user-space library referenced
-below.
-.PP
-This man page illustrates the most common use of the
-.BR futex (2)
-primitives; it is by no means the only one.
-.\" .SH AUTHORS
-.\" .PP
-.\" Futexes were designed and worked on by Hubertus Franke
-.\" (IBM Thomas J. Watson Research Center),
-.\" Matthew Kirkwood, Ingo Molnar (Red Hat) and
-.\" Rusty Russell (IBM Linux Technology Center).
-.\" This page written by bert hubert.
-.SH SEE ALSO
-.BR clone (2),
-.BR futex (2),
-.BR get_robust_list (2),
-.BR set_robust_list (2),
-.BR set_tid_address (2),
-.BR pthreads (7)
-.PP
-.I Fuss, Futexes and Furwocks: Fast Userlevel Locking in Linux
-(proceedings of the Ottawa Linux Symposium 2002),
-futex example library, futex-*.tar.bz2
-.UR https://mirrors.kernel.org\:/pub\:/linux\:/kernel\:/people\:/rusty/
-.UE .
diff --git a/man7/glibc.7 b/man7/glibc.7
deleted file mode 100644
index 0d1ed269c..000000000
--- a/man7/glibc.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/libc.7
diff --git a/man7/glob.7 b/man7/glob.7
deleted file mode 100644
index f3aa1c6a8..000000000
--- a/man7/glob.7
+++ /dev/null
@@ -1,205 +0,0 @@
-.\" Copyright (c) 1998 Andries Brouwer
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 2003-08-24 fix for / by John Kristoff + joey
-.\"
-.TH glob 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-glob \- globbing pathnames
-.SH DESCRIPTION
-Long ago, in UNIX\ V6, there was a program
-.I /etc/glob
-that would expand wildcard patterns.
-Soon afterward this became a shell built-in.
-.PP
-These days there is also a library routine
-.BR glob (3)
-that will perform this function for a user program.
-.PP
-The rules are as follows (POSIX.2, 3.13).
-.SS Wildcard matching
-A string is a wildcard pattern if it contains one of the
-characters \[aq]?\[aq], \[aq]*\[aq], or \[aq][\[aq].
-Globbing is the operation
-that expands a wildcard pattern into the list of pathnames
-matching the pattern.
-Matching is defined by:
-.PP
-A \[aq]?\[aq] (not between brackets) matches any single character.
-.PP
-A \[aq]*\[aq] (not between brackets) matches any string,
-including the empty string.
-.PP
-.B "Character classes"
-.PP
-An expression "\fI[...]\fP" where the first character after the
-leading \[aq][\[aq] is not an \[aq]!\[aq] matches a single character,
-namely any of the characters enclosed by the brackets.
-The string enclosed by the brackets cannot be empty;
-therefore \[aq]]\[aq] can be allowed between the brackets, provided
-that it is the first character.
-(Thus, "\fI[][!]\fP" matches the
-three characters \[aq][\[aq], \[aq]]\[aq], and \[aq]!\[aq].)
-.PP
-.B Ranges
-.PP
-There is one special convention:
-two characters separated by \[aq]\-\[aq] denote a range.
-(Thus,
-"\fI[A\-Fa\-f0\-9]\fP" is equivalent to "\fI[ABCDEFabcdef0123456789]\fP".)
-One may include \[aq]\-\[aq] in its literal meaning
-by making it the first or last character between the brackets.
-(Thus,
-"\fI[]\-]\fP" matches just the two characters \[aq]]\[aq] and \[aq]\-\[aq],
-and "\fI[\-\-0]\fP" matches the
-three characters \[aq]\-\[aq], \[aq].\[aq], and \[aq]0\[aq],
-since \[aq]/\[aq] cannot be matched.)
-.PP
-.B Complementation
-.PP
-An expression "\fI[!...]\fP" matches a single character, namely
-any character that is not matched by the expression obtained
-by removing the first \[aq]!\[aq] from it.
-(Thus, "\fI[!]a\-]\fP" matches any
-single character except \[aq]]\[aq], \[aq]a\[aq], and \[aq]\-\[aq].)
-.PP
-One can remove the special meaning of \[aq]?\[aq], \[aq]*\[aq], and \[aq][\[aq]
-by preceding them by a backslash,
-or,
-in case this is part of a shell command line,
-enclosing them in quotes.
-Between brackets these characters stand for themselves.
-Thus, "\fI[[?*\e]\fP" matches the
-four characters \[aq][\[aq], \[aq]?\[aq], \[aq]*\[aq], and \[aq]\e\[aq].
-.SS Pathnames
-Globbing is applied on each of the components of a pathname
-separately.
-A \[aq]/\[aq] in a pathname cannot be matched by a \[aq]?\[aq] or \[aq]*\[aq]
-wildcard, or by a range like "\fI[.\-0]\fP".
-A range containing an explicit \[aq]/\[aq] character is syntactically incorrect.
-(POSIX requires that syntactically incorrect patterns are left unchanged.)
-.PP
-If a filename starts with a \[aq].\[aq],
-this character must be matched explicitly.
-(Thus, \fIrm\ *\fP will not remove .profile, and \fItar\ c\ *\fP will not
-archive all your files; \fItar\ c\ .\fP is better.)
-.SS Empty lists
-The nice and simple rule given above: "expand a wildcard pattern
-into the list of matching pathnames" was the original UNIX
-definition.
-It allowed one to have patterns that expand into
-an empty list, as in
-.PP
-.nf
- xv \-wait 0 *.gif *.jpg
-.fi
-.PP
-where perhaps no *.gif files are present (and this is not
-an error).
-However, POSIX requires that a wildcard pattern is left
-unchanged when it is syntactically incorrect, or the list of
-matching pathnames is empty.
-With
-.I bash
-one can force the classical behavior using this command:
-.PP
-.in +4n
-.EX
-shopt \-s nullglob
-.EE
-.in
-.\" In Bash v1, by setting allow_null_glob_expansion=true
-.PP
-(Similar problems occur elsewhere.
-For example, where old scripts have
-.PP
-.in +4n
-.EX
-rm \`find . \-name "*\[ti]"\`
-.EE
-.in
-.PP
-new scripts require
-.PP
-.in +4n
-.EX
-rm \-f nosuchfile \`find . \-name "*\[ti]"\`
-.EE
-.in
-.PP
-to avoid error messages from
-.I rm
-called with an empty argument list.)
-.SH NOTES
-.SS Regular expressions
-Note that wildcard patterns are not regular expressions,
-although they are a bit similar.
-First of all, they match
-filenames, rather than text, and secondly, the conventions
-are not the same: for example, in a regular expression \[aq]*\[aq] means zero or
-more copies of the preceding thing.
-.PP
-Now that regular expressions have bracket expressions where
-the negation is indicated by a \[aq]\[ha]\[aq], POSIX has declared the
-effect of a wildcard pattern "\fI[\[ha]...]\fP" to be undefined.
-.SS Character classes and internationalization
-Of course ranges were originally meant to be ASCII ranges,
-so that "\fI[\ \-%]\fP" stands for "\fI[\ !"#$%]\fP" and "\fI[a\-z]\fP" stands
-for "any lowercase letter".
-Some UNIX implementations generalized this so that a range X\-Y
-stands for the set of characters with code between the codes for
-X and for Y.
-However, this requires the user to know the
-character coding in use on the local system, and moreover, is
-not convenient if the collating sequence for the local alphabet
-differs from the ordering of the character codes.
-Therefore, POSIX extended the bracket notation greatly,
-both for wildcard patterns and for regular expressions.
-In the above we saw three types of items that can occur in a bracket
-expression: namely (i) the negation, (ii) explicit single characters,
-and (iii) ranges.
-POSIX specifies ranges in an internationally
-more useful way and adds three more types:
-.PP
-(iii) Ranges X\-Y comprise all characters that fall between X
-and Y (inclusive) in the current collating sequence as defined
-by the
-.B LC_COLLATE
-category in the current locale.
-.PP
-(iv) Named character classes, like
-.PP
-.nf
-[:alnum:] [:alpha:] [:blank:] [:cntrl:]
-[:digit:] [:graph:] [:lower:] [:print:]
-[:punct:] [:space:] [:upper:] [:xdigit:]
-.fi
-.PP
-so that one can say "\fI[[:lower:]]\fP" instead of "\fI[a\-z]\fP", and have
-things work in Denmark, too, where there are three letters past \[aq]z\[aq]
-in the alphabet.
-These character classes are defined by the
-.B LC_CTYPE
-category
-in the current locale.
-.PP
-(v) Collating symbols, like "\fI[.ch.]\fP" or "\fI[.a-acute.]\fP",
-where the string between "\fI[.\fP" and "\fI.]\fP" is a collating
-element defined for the current locale.
-Note that this may
-be a multicharacter element.
-.PP
-(vi) Equivalence class expressions, like "\fI[=a=]\fP",
-where the string between "\fI[=\fP" and "\fI=]\fP" is any collating
-element from its equivalence class, as defined for the
-current locale.
-For example, "\fI[[=a=]]\fP" might be equivalent
-to "\fI[a\('a\(`a\(:a\(^a]\fP", that is,
-to "\fI[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]\fP".
-.SH SEE ALSO
-.BR sh (1),
-.BR fnmatch (3),
-.BR glob (3),
-.BR locale (7),
-.BR regex (7)
diff --git a/man7/hier.7 b/man7/hier.7
deleted file mode 100644
index 20a8a103b..000000000
--- a/man7/hier.7
+++ /dev/null
@@ -1,654 +0,0 @@
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sun Jul 25 11:05:58 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Sat Feb 10 16:18:03 1996 by Urs Thuermann (urs@isnogud.escape.de)
-.\" Modified Mon Jun 16 20:02:00 1997 by Nicolás Lichtmaier <nick@debian.org>
-.\" Modified Mon Feb 6 16:41:00 1999 by Nicolás Lichtmaier <nick@debian.org>
-.\" Modified Tue Feb 8 16:46:45 2000 by Chris Pepper <pepper@tgg.com>
-.\" Modified Fri Sep 7 20:32:45 2001 by Tammy Fox <tfox@redhat.com>
-.TH hier 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-hier \- description of the filesystem hierarchy
-.SH DESCRIPTION
-A typical Linux system has, among others, the following directories:
-.TP
-.I /
-This is the root directory.
-This is where the whole tree starts.
-.TP
-.I /bin
-This directory contains executable programs which are needed in
-single user mode and to bring the system up or repair it.
-.TP
-.I /boot
-Contains static files for the boot loader.
-This directory holds only
-the files which are needed during the boot process.
-The map installer
-and configuration files should go to
-.I /sbin
-and
-.IR /etc .
-The operating system kernel (initrd for example) must be located in either
-.I /
-or
-.IR /boot .
-.TP
-.I /dev
-Special or device files, which refer to physical devices.
-See
-.BR mknod (1).
-.TP
-.I /etc
-Contains configuration files which are local to the machine.
-Some
-larger software packages, like X11, can have their own subdirectories
-below
-.IR /etc .
-Site-wide configuration files may be placed here or in
-.IR /usr/etc .
-Nevertheless, programs should always look for these files in
-.I /etc
-and you may have links for these files to
-.IR /usr/etc .
-.TP
-.I /etc/opt
-Host-specific configuration files for add-on applications installed
-in
-.IR /opt .
-.TP
-.I /etc/sgml
-This directory contains the configuration files for SGML (optional).
-.TP
-.I /etc/skel
-When a new user account is created, files from this directory are
-usually copied into the user's home directory.
-.TP
-.I /etc/X11
-Configuration files for the X11 window system (optional).
-.TP
-.I /etc/xml
-This directory contains the configuration files for XML (optional).
-.TP
-.I /home
-On machines with home directories for users, these are usually beneath
-this directory, directly or not.
-The structure of this directory
-depends on local administration decisions (optional).
-.TP
-.I /lib
-This directory should hold those shared libraries that are necessary
-to boot the system and to run the commands in the root filesystem.
-.TP
-.I /lib<qual>
-These directories are variants of
-.I /lib
-on system which support more than one binary format requiring separate
-libraries (optional).
-.TP
-.I /lib/modules
-Loadable kernel modules (optional).
-.TP
-.I /lost+found
-This directory contains items lost in the filesystem.
-These items are usually chunks of files mangled as a consequence of
-a faulty disk or a system crash.
-.TP
-.I /media
-This directory contains mount points for removable media such as CD
-and DVD disks or USB sticks.
-On systems where more than one device exists
-for mounting a certain type of media,
-mount directories can be created by appending a digit
-to the name of those available above starting with '0',
-but the unqualified name must also exist.
-.TP
-.I /media/floppy[1\-9]
-Floppy drive (optional).
-.TP
-.I /media/cdrom[1\-9]
-CD-ROM drive (optional).
-.TP
-.I /media/cdrecorder[1\-9]
-CD writer (optional).
-.TP
-.I /media/zip[1\-9]
-Zip drive (optional).
-.TP
-.I /media/usb[1\-9]
-USB drive (optional).
-.TP
-.I /mnt
-This directory is a mount point for a temporarily mounted filesystem.
-In some distributions,
-.I /mnt
-contains subdirectories intended to be used as mount points for several
-temporary filesystems.
-.TP
-.I /opt
-This directory should contain add-on packages that contain static files.
-.TP
-.I /proc
-This is a mount point for the
-.I proc
-filesystem, which provides information about running processes and
-the kernel.
-This pseudo-filesystem is described in more detail in
-.BR proc (5).
-.TP
-.I /root
-This directory is usually the home directory for the root user (optional).
-.TP
-.I /run
-This directory contains information which
-describes the system since it was booted.
-Once this purpose was served by
-.I /var/run
-and programs may continue to use it.
-.TP
-.I /sbin
-Like
-.IR /bin ,
-this directory holds commands needed to boot the system, but which are
-usually not executed by normal users.
-.TP
-.I /srv
-This directory contains site-specific data that is served by this system.
-.TP
-.I /sys
-This is a mount point for the sysfs filesystem, which provides information
-about the kernel like
-.IR /proc ,
-but better structured, following the formalism of kobject infrastructure.
-.TP
-.I /tmp
-This directory contains temporary files which may be deleted with no
-notice, such as by a regular job or at system boot up.
-.TP
-.I /usr
-This directory is usually mounted from a separate partition.
-It should hold only shareable, read-only data, so that it can be mounted
-by various machines running Linux.
-.TP
-.I /usr/X11R6
-The X\-Window system, version 11 release 6 (present in FHS 2.3, removed
-in FHS 3.0).
-.TP
-.I /usr/X11R6/bin
-Binaries which belong to the X\-Window system; often, there is a
-symbolic link from the more traditional
-.I /usr/bin/X11
-to here.
-.TP
-.I /usr/X11R6/lib
-Data files associated with the X\-Window system.
-.TP
-.I /usr/X11R6/lib/X11
-These contain miscellaneous files needed to run X; Often, there is a
-symbolic link from
-.I /usr/lib/X11
-to this directory.
-.TP
-.I /usr/X11R6/include/X11
-Contains include files needed for compiling programs using the X11
-window system.
-Often, there is a symbolic link from
-.I /usr/include/X11
-to this directory.
-.TP
-.I /usr/bin
-This is the primary directory for executable programs.
-Most programs
-executed by normal users which are not needed for booting or for
-repairing the system and which are not installed locally should be
-placed in this directory.
-.TP
-.I /usr/bin/mh
-Commands for the MH mail handling system (optional).
-.TP
-.I /usr/bin/X11
-This is the traditional place to look for X11 executables; on Linux, it
-usually is a symbolic link to
-.IR /usr/X11R6/bin .
-.TP
-.I /usr/dict
-Replaced by
-.IR /usr/share/dict .
-.TP
-.I /usr/doc
-Replaced by
-.IR /usr/share/doc .
-.TP
-.I /usr/etc
-Site-wide configuration files to be shared between several machines
-may be stored in this directory.
-However, commands should always
-reference those files using the
-.I /etc
-directory.
-Links from files in
-.I /etc
-should point to the appropriate files in
-.IR /usr/etc .
-.TP
-.I /usr/games
-Binaries for games and educational programs (optional).
-.TP
-.I /usr/include
-Include files for the C compiler.
-.TP
-.I /usr/include/bsd
-BSD compatibility include files (optional).
-.TP
-.I /usr/include/X11
-Include files for the C compiler and the X\-Window system.
-This is
-usually a symbolic link to
-.IR /usr/X11R6/include/X11 .
-.TP
-.I /usr/include/asm
-Include files which declare some assembler functions.
-This used to be a
-symbolic link to
-.IR /usr/src/linux/include/asm .
-.TP
-.I /usr/include/linux
-This contains information which may change from system release to
-system release and used to be a symbolic link to
-.I /usr/src/linux/include/linux
-to get at operating-system-specific information.
-.IP
-(Note that one should have include files there that work correctly with
-the current libc and in user space.
-However, Linux kernel source is not
-designed to be used with user programs and does not know anything
-about the libc you are using.
-It is very likely that things will break
-if you let
-.I /usr/include/asm
-and
-.I /usr/include/linux
-point at a random kernel tree.
-Debian systems don't do this
-and use headers from a known good kernel
-version, provided in the libc*\-dev package.)
-.TP
-.I /usr/include/g++
-Include files to use with the GNU C++ compiler.
-.TP
-.I /usr/lib
-Object libraries, including dynamic libraries, plus some executables
-which usually are not invoked directly.
-More complicated programs may
-have whole subdirectories there.
-.TP
-.I /usr/libexec
-Directory contains binaries for internal use only and they are not meant
-to be executed directly by users shell or scripts.
-.TP
-.I /usr/lib<qual>
-These directories are variants of
-.I /usr/lib
-on system which support more than one binary format requiring separate
-libraries, except that the symbolic link
-.IR /usr/lib qual /X11
-is not required (optional).
-.TP
-.I /usr/lib/X11
-The usual place for data files associated with X programs, and
-configuration files for the X system itself.
-On Linux, it usually is
-a symbolic link to
-.IR /usr/X11R6/lib/X11 .
-.TP
-.I /usr/lib/gcc\-lib
-contains executables and include files for the GNU C compiler,
-.BR gcc (1).
-.TP
-.I /usr/lib/groff
-Files for the GNU groff document formatting system.
-.TP
-.I /usr/lib/uucp
-Files for
-.BR uucp (1).
-.TP
-.I /usr/local
-This is where programs which are local to the site typically go.
-.TP
-.I /usr/local/bin
-Binaries for programs local to the site.
-.TP
-.I /usr/local/doc
-Local documentation.
-.TP
-.I /usr/local/etc
-Configuration files associated with locally installed programs.
-.TP
-.I /usr/local/games
-Binaries for locally installed games.
-.TP
-.I /usr/local/lib
-Files associated with locally installed programs.
-.TP
-.I /usr/local/lib<qual>
-These directories are variants of
-.I /usr/local/lib
-on system which support more than one binary format requiring separate
-libraries (optional).
-.TP
-.I /usr/local/include
-Header files for the local C compiler.
-.TP
-.I /usr/local/info
-Info pages associated with locally installed programs.
-.TP
-.I /usr/local/man
-Man pages associated with locally installed programs.
-.TP
-.I /usr/local/sbin
-Locally installed programs for system administration.
-.TP
-.I /usr/local/share
-Local application data that can be shared among different architectures
-of the same OS.
-.TP
-.I /usr/local/src
-Source code for locally installed software.
-.TP
-.I /usr/man
-Replaced by
-.IR /usr/share/man .
-.TP
-.I /usr/sbin
-This directory contains program binaries for system administration
-which are not essential for the boot process, for mounting
-.IR /usr ,
-or for system repair.
-.TP
-.I /usr/share
-This directory contains subdirectories with specific application data, that
-can be shared among different architectures of the same OS.
-Often one finds stuff here that used to live in
-.I /usr/doc
-or
-.I /usr/lib
-or
-.IR /usr/man .
-.TP
-.I /usr/share/color
-Contains color management information, like International Color Consortium (ICC)
-Color profiles (optional).
-.TP
-.I /usr/share/dict
-Contains the word lists used by spell checkers (optional).
-.TP
-.I /usr/share/dict/words
-List of English words (optional).
-.TP
-.I /usr/share/doc
-Documentation about installed programs (optional).
-.TP
-.I /usr/share/games
-Static data files for games in
-.I /usr/games
-(optional).
-.TP
-.I /usr/share/info
-Info pages go here (optional).
-.TP
-.I /usr/share/locale
-Locale information goes here (optional).
-.TP
-.I /usr/share/man
-Manual pages go here in subdirectories according to the man page sections.
-.TP
-.IR /usr/share/man/ locale /man[1\-9]
-These directories contain manual pages for the
-specific locale in source code form.
-Systems which use a unique language and code set for all manual pages
-may omit the <locale> substring.
-.TP
-.I /usr/share/misc
-Miscellaneous data that can be shared among different architectures of the
-same OS.
-.TP
-.I /usr/share/nls
-The message catalogs for native language support go here (optional).
-.TP
-.I /usr/share/ppd
-Postscript Printer Definition (PPD) files (optional).
-.TP
-.I /usr/share/sgml
-Files for SGML (optional).
-.TP
-.I /usr/share/sgml/docbook
-DocBook DTD (optional).
-.TP
-.I /usr/share/sgml/tei
-TEI DTD (optional).
-.TP
-.I /usr/share/sgml/html
-HTML DTD (optional).
-.TP
-.I /usr/share/sgml/mathml
-MathML DTD (optional).
-.TP
-.I /usr/share/terminfo
-The database for terminfo (optional).
-.TP
-.I /usr/share/tmac
-Troff macros that are not distributed with groff (optional).
-.TP
-.I /usr/share/xml
-Files for XML (optional).
-.TP
-.I /usr/share/xml/docbook
-DocBook DTD (optional).
-.TP
-.I /usr/share/xml/xhtml
-XHTML DTD (optional).
-.TP
-.I /usr/share/xml/mathml
-MathML DTD (optional).
-.TP
-.I /usr/share/zoneinfo
-Files for timezone information (optional).
-.TP
-.I /usr/src
-Source files for different parts of the system, included with some packages
-for reference purposes.
-Don't work here with your own projects, as files
-below /usr should be read-only except when installing software (optional).
-.TP
-.I /usr/src/linux
-This was the traditional place for the kernel source.
-Some distributions put here the source for the default kernel they ship.
-You should probably use another directory when building your own kernel.
-.TP
-.I /usr/tmp
-Obsolete.
-This should be a link
-to
-.IR /var/tmp .
-This link is present only for compatibility reasons and shouldn't be used.
-.TP
-.I /var
-This directory contains files which may change in size, such as spool
-and log files.
-.TP
-.I /var/account
-Process accounting logs (optional).
-.TP
-.I /var/adm
-This directory is superseded by
-.I /var/log
-and should be a symbolic link to
-.IR /var/log .
-.TP
-.I /var/backups
-Reserved for historical reasons.
-.TP
-.I /var/cache
-Data cached for programs.
-.TP
-.I /var/cache/fonts
-Locally generated fonts (optional).
-.TP
-.I /var/cache/man
-Locally formatted man pages (optional).
-.TP
-.I /var/cache/www
-WWW proxy or cache data (optional).
-.TP
-.I /var/cache/<package>
-Package specific cache data (optional).
-.TP
-.IR /var/catman/cat[1\-9] " or " /var/cache/man/cat[1\-9]
-These directories contain preformatted manual pages according to their
-man page section.
-(The use of preformatted manual pages is deprecated.)
-.TP
-.I /var/crash
-System crash dumps (optional).
-.TP
-.I /var/cron
-Reserved for historical reasons.
-.TP
-.I /var/games
-Variable game data (optional).
-.TP
-.I /var/lib
-Variable state information for programs.
-.TP
-.I /var/lib/color
-Variable files containing color management information (optional).
-.TP
-.I /var/lib/hwclock
-State directory for hwclock (optional).
-.TP
-.I /var/lib/misc
-Miscellaneous state data.
-.TP
-.I /var/lib/xdm
-X display manager variable data (optional).
-.TP
-.I /var/lib/<editor>
-Editor backup files and state (optional).
-.TP
-.I /var/lib/<name>
-These directories must be used for all distribution packaging support.
-.TP
-.I /var/lib/<package>
-State data for packages and subsystems (optional).
-.TP
-.I /var/lib/<pkgtool>
-Packaging support files (optional).
-.TP
-.I /var/local
-Variable data for
-.IR /usr/local .
-.TP
-.I /var/lock
-Lock files are placed in this directory.
-The naming convention for
-device lock files is
-.I LCK..<device>
-where
-.I <device>
-is the device's name in the filesystem.
-The format used is that of HDU UUCP lock files, that is, lock files
-contain a PID as a 10-byte ASCII decimal number, followed by a newline
-character.
-.TP
-.I /var/log
-Miscellaneous log files.
-.TP
-.I /var/opt
-Variable data for
-.IR /opt .
-.TP
-.I /var/mail
-Users' mailboxes.
-Replaces
-.IR /var/spool/mail .
-.TP
-.I /var/msgs
-Reserved for historical reasons.
-.TP
-.I /var/preserve
-Reserved for historical reasons.
-.TP
-.I /var/run
-Run-time variable files, like files holding process identifiers (PIDs)
-and logged user information
-.IR (utmp) .
-Files in this directory are usually cleared when the system boots.
-.TP
-.I /var/spool
-Spooled (or queued) files for various programs.
-.TP
-.I /var/spool/at
-Spooled jobs for
-.BR at (1).
-.TP
-.I /var/spool/cron
-Spooled jobs for
-.BR cron (8).
-.TP
-.I /var/spool/lpd
-Spooled files for printing (optional).
-.TP
-.I /var/spool/lpd/printer
-Spools for a specific printer (optional).
-.TP
-.I /var/spool/mail
-Replaced by
-.IR /var/mail .
-.TP
-.I /var/spool/mqueue
-Queued outgoing mail (optional).
-.TP
-.I /var/spool/news
-Spool directory for news (optional).
-.TP
-.I /var/spool/rwho
-Spooled files for
-.BR rwhod (8)
-(optional).
-.TP
-.I /var/spool/smail
-Spooled files for the
-.BR smail (1)
-mail delivery program.
-.TP
-.I /var/spool/uucp
-Spooled files for
-.BR uucp (1)
-(optional).
-.TP
-.I /var/tmp
-Like
-.IR /tmp ,
-this directory holds temporary files stored for an unspecified duration.
-.TP
-.I /var/yp
-Database files for NIS,
-formerly known as the Sun Yellow Pages (YP).
-.SH STANDARDS
-.UR https://refspecs.linuxfoundation.org/fhs.shtml
-The Filesystem Hierarchy Standard (FHS), Version 3.0
-.UE ,
-published March 19, 2015
-.SH BUGS
-This list is not exhaustive;
-different distributions and systems may be configured differently.
-.SH SEE ALSO
-.BR find (1),
-.BR ln (1),
-.BR proc (5),
-.BR file\-hierarchy (7),
-.BR mount (8)
-.PP
-The Filesystem Hierarchy Standard
diff --git a/man7/hostname.7 b/man7/hostname.7
deleted file mode 100644
index f1b5a7de9..000000000
--- a/man7/hostname.7
+++ /dev/null
@@ -1,97 +0,0 @@
-.\" Copyright (c) 1987, 1990, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" @(#)hostname.7 8.2 (Berkeley) 12/30/93
-.\" $FreeBSD: src/share/man/man7/hostname.7,v 1.7 2004/07/03 18:29:23 ru Exp $
-.\"
-.\" 2008-06-11, mtk, Taken from FreeBSD 6.2 and modified for Linux.
-.\"
-.TH hostname 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-hostname \- hostname resolution description
-.SH DESCRIPTION
-Hostnames are domains, where a domain is a hierarchical, dot-separated
-list of subdomains; for example, the machine "monet", in the "example"
-subdomain of the "com" domain would be represented as "monet.example.com".
-.PP
-Each element of the hostname must be from 1 to 63 characters long and the
-entire hostname, including the dots, can be at most 253 characters long.
-Valid characters for hostnames are
-.BR ASCII (7)
-letters from
-.I a
-to
-.IR z ,
-the digits from
-.I 0
-to
-.IR 9 ,
-and the hyphen (\-).
-A hostname may not start with a hyphen.
-.PP
-Hostnames are often used with network client and server programs,
-which must generally translate the name to an address for use.
-(This task is generally performed by either
-.BR getaddrinfo (3)
-or the obsolete
-.BR gethostbyname (3).)
-.PP
-Hostnames are resolved by the NSS framework in glibc according
-to the
-.B hosts
-configuration in
-.BR nsswitch.conf .
-The DNS-based name resolver
-(in the
-.B dns
-NSS service module) resolves them in the following fashion.
-.PP
-If the name consists of a single component, that is, contains no dot,
-and if the environment variable
-.B HOSTALIASES
-is set to the name of a file,
-that file is searched for any string matching the input hostname.
-The file should consist of lines made up of two white-space separated strings,
-the first of which is the hostname alias,
-and the second of which is the complete hostname
-to be substituted for that alias.
-If a case-insensitive match is found between the hostname to be resolved
-and the first field of a line in the file, the substituted name is looked
-up with no further processing.
-.PP
-If the input name ends with a trailing dot,
-the trailing dot is removed,
-and the remaining name is looked up with no further processing.
-.PP
-If the input name does not end with a trailing dot, it is looked up
-by searching through a list of domains until a match is found.
-The default search list includes first the local domain,
-then its parent domains with at least 2 name components (longest first).
-For example,
-in the domain cs.example.com, the name lithium.cchem will be checked first
-as lithium.cchem.cs.example and then as lithium.cchem.example.com.
-lithium.cchem.com will not be tried, as there is only one component
-remaining from the local domain.
-The search path can be changed from the default
-by a system-wide configuration file (see
-.BR resolver (5)).
-.SH SEE ALSO
-.BR getaddrinfo (3),
-.BR gethostbyname (3),
-.BR nsswitch.conf (5),
-.BR resolver (5),
-.BR mailaddr (7),
-.BR named (8)
-.PP
-.UR http://www.ietf.org\:/rfc\:/rfc1123.txt
-IETF RFC\ 1123
-.UE
-.PP
-.UR http://www.ietf.org\:/rfc\:/rfc1178.txt
-IETF RFC\ 1178
-.UE
-.\" .SH HISTORY
-.\" Hostname appeared in
-.\" 4.2BSD.
diff --git a/man7/icmp.7 b/man7/icmp.7
deleted file mode 100644
index a6bf3543b..000000000
--- a/man7/icmp.7
+++ /dev/null
@@ -1,201 +0,0 @@
-'\" t
-.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
-.\"
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" $Id: icmp.7,v 1.6 2000/08/14 08:03:45 ak Exp $
-.\"
-.TH icmp 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-icmp \- Linux IPv4 ICMP kernel module.
-.SH DESCRIPTION
-This kernel protocol module implements the Internet Control
-Message Protocol defined in RFC\ 792.
-It is used to signal error conditions and for diagnosis.
-The user doesn't interact directly with this module;
-instead it communicates with the other protocols in the kernel
-and these pass the ICMP errors to the application layers.
-The kernel ICMP module also answers ICMP requests.
-.PP
-A user protocol may receive ICMP packets for all local sockets by opening
-a raw socket with the protocol
-.BR IPPROTO_ICMP .
-See
-.BR raw (7)
-for more information.
-The types of ICMP packets passed to the socket can be filtered using the
-.B ICMP_FILTER
-socket option.
-ICMP packets are always processed by the kernel too, even
-when passed to a user socket.
-.PP
-Linux limits the rate of ICMP error packets to each destination.
-.B ICMP_REDIRECT
-and
-.B ICMP_DEST_UNREACH
-are also limited by the destination route of the incoming packets.
-.SS /proc interfaces
-ICMP supports a set of
-.I /proc
-interfaces to configure some global IP parameters.
-The parameters can be accessed by reading or writing files in the directory
-.IR /proc/sys/net/ipv4/ .
-Most of these parameters are rate limitations for specific ICMP types.
-Linux 2.2 uses a token bucket filter to limit ICMPs.
-.\" FIXME . better description needed
-The value is the timeout in jiffies until the token bucket filter is
-cleared after a burst.
-A jiffy is a system dependent unit, usually 10ms on i386 and
-about 1ms on alpha and ia64.
-.TP
-.IR icmp_destunreach_rate " (Linux 2.2 to Linux 2.4.9)"
-.\" Precisely: from Linux 2.1.102
-Maximum rate to send ICMP Destination Unreachable packets.
-This limits the rate at which packets are sent to any individual
-route or destination.
-The limit does not affect sending of
-.B ICMP_FRAG_NEEDED
-packets needed for path MTU discovery.
-.TP
-.IR icmp_echo_ignore_all " (since Linux 2.2)"
-.\" Precisely: 2.1.68
-If this value is nonzero, Linux will ignore all
-.B ICMP_ECHO
-requests.
-.TP
-.IR icmp_echo_ignore_broadcasts " (since Linux 2.2)"
-.\" Precisely: from Linux 2.1.68
-If this value is nonzero, Linux will ignore all
-.B ICMP_ECHO
-packets sent to broadcast addresses.
-.TP
-.IR icmp_echoreply_rate " (Linux 2.2 to Linux 2.4.9)"
-.\" Precisely: from Linux 2.1.102
-Maximum rate for sending
-.B ICMP_ECHOREPLY
-packets in response to
-.B ICMP_ECHOREQUEST
-packets.
-.TP
-.IR icmp_errors_use_inbound_ifaddr " (Boolean; default: disabled; since Linux 2.6.12)"
-.\" The following taken from Linux 2.6.28-rc4 Documentation/networking/ip-sysctl.txt
-If disabled, ICMP error messages are sent with the primary address of
-the exiting interface.
-.IP
-If enabled, the message will be sent with the primary address of
-the interface that received the packet that caused the ICMP error.
-This is the behavior that many network administrators will expect from
-a router.
-And it can make debugging complicated network layouts much easier.
-.IP
-Note that if no primary address exists for the interface selected,
-then the primary address of the first non-loopback interface that
-has one will be used regardless of this setting.
-.TP
-.IR icmp_ignore_bogus_error_responses " (Boolean; default: disabled; since Linux 2.2)"
-.\" precisely: since Linux 2.1.32
-.\" The following taken from Linux 2.6.28-rc4 Documentation/networking/ip-sysctl.txt
-Some routers violate RFC1122 by sending bogus responses to broadcast frames.
-Such violations are normally logged via a kernel warning.
-If this parameter is enabled, the kernel will not give such warnings,
-which will avoid log file clutter.
-.TP
-.IR icmp_paramprob_rate " (Linux 2.2 to Linux 2.4.9)"
-.\" Precisely: from Linux 2.1.102
-Maximum rate for sending
-.B ICMP_PARAMETERPROB
-packets.
-These packets are sent when a packet arrives with an invalid IP header.
-.TP
-.IR icmp_ratelimit " (integer; default: 1000; since Linux 2.4.10)"
-.\" The following taken from Linux 2.6.28-rc4 Documentation/networking/ip-sysctl.txt
-Limit the maximum rates for sending ICMP packets whose type matches
-.I icmp_ratemask
-(see below) to specific targets.
-0 to disable any limiting,
-otherwise the minimum space between responses in milliseconds.
-.TP
-.IR icmp_ratemask " (integer; default: see below; since Linux 2.4.10)"
-.\" The following taken from Linux 2.6.28-rc4 Documentation/networking/ip-sysctl.txt
-Mask made of ICMP types for which rates are being limited.
-.IP
-Significant bits: IHGFEDCBA9876543210
-.br
-Default mask: 0000001100000011000 (0x1818)
-.IP
-Bit definitions (see the Linux kernel source file
-.IR include/linux/icmp.h ):
-.RS 12
-.TS
-l l.
-0 Echo Reply
-3 Destination Unreachable *
-4 Source Quench *
-5 Redirect
-8 Echo Request
-B Time Exceeded *
-C Parameter Problem *
-D Timestamp Request
-E Timestamp Reply
-F Info Request
-G Info Reply
-H Address Mask Request
-I Address Mask Reply
-.TE
-.RE
-.PP
-The bits marked with an asterisk are rate limited by default
-(see the default mask above).
-.TP
-.IR icmp_timeexceed_rate " (Linux 2.2 to Linux 2.4.9)"
-Maximum rate for sending
-.B ICMP_TIME_EXCEEDED
-packets.
-These packets are
-sent to prevent loops when a packet has crossed too many hops.
-.TP
-.IR ping_group_range " (two integers; default: see below; since Linux 2.6.39)"
-Range of the group IDs (minimum and maximum group IDs, inclusive)
-that are allowed to create ICMP Echo sockets.
-The default is "1 0", which
-means no group is allowed to create ICMP Echo sockets.
-.SH VERSIONS
-Support for the
-.B ICMP_ADDRESS
-request was removed in Linux 2.2.
-.PP
-Support for
-.B ICMP_SOURCE_QUENCH
-was removed in Linux 2.2.
-.SH NOTES
-As many other implementations don't support
-.B IPPROTO_ICMP
-raw sockets, this feature
-should not be relied on in portable programs.
-.\" not really true ATM
-.\" .PP
-.\" Linux ICMP should be compliant to RFC 1122.
-.PP
-.B ICMP_REDIRECT
-packets are not sent when Linux is not acting as a router.
-They are also accepted only from the old gateway defined in the
-routing table and the redirect routes are expired after some time.
-.PP
-The 64-bit timestamp returned by
-.B ICMP_TIMESTAMP
-is in milliseconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC).
-.PP
-Linux ICMP internally uses a raw socket to send ICMPs.
-This raw socket may appear in
-.BR netstat (8)
-output with a zero inode.
-.SH SEE ALSO
-.BR ip (7),
-.BR rdisc (8)
-.PP
-RFC\ 792 for a description of the ICMP protocol.
diff --git a/man7/inode.7 b/man7/inode.7
deleted file mode 100644
index dc2c38d1d..000000000
--- a/man7/inode.7
+++ /dev/null
@@ -1,485 +0,0 @@
-'\" t
-.\" Copyright (c) 2017 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH inode 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-inode \- file inode information
-.SH DESCRIPTION
-Each file has an inode containing metadata about the file.
-An application can retrieve this metadata using
-.BR stat (2)
-(or related calls), which returns a
-.I stat
-structure, or
-.BR statx (2),
-which returns a
-.I statx
-structure.
-.PP
-The following is a list of the information typically found in,
-or associated with, the file inode,
-with the names of the corresponding structure fields returned by
-.BR stat (2)
-and
-.BR statx (2):
-.TP
-Device where inode resides
-\fIstat.st_dev\fP; \fIstatx.stx_dev_minor\fP and \fIstatx.stx_dev_major\fP
-.IP
-Each inode (as well as the associated file) resides in a filesystem
-that is hosted on a device.
-That device is identified by the combination of its major ID
-(which identifies the general class of device)
-and minor ID (which identifies a specific instance in the general class).
-.TP
-Inode number
-\fIstat.st_ino\fP; \fIstatx.stx_ino\fP
-.IP
-Each file in a filesystem has a unique inode number.
-Inode numbers are guaranteed to be unique only within a filesystem
-(i.e., the same inode numbers may be used by different filesystems,
-which is the reason that hard links may not cross filesystem boundaries).
-This field contains the file's inode number.
-.TP
-File type and mode
-\fIstat.st_mode\fP; \fIstatx.stx_mode\fP
-.IP
-See the discussion of file type and mode, below.
-.TP
-Link count
-\fIstat.st_nlink\fP; \fIstatx.stx_nlink\fP
-.IP
-This field contains the number of hard links to the file.
-Additional links to an existing file are created using
-.BR link (2).
-.TP
-User ID
-.I st_uid
-\fIstat.st_uid\fP; \fIstatx.stx_uid\fP
-.IP
-This field records the user ID of the owner of the file.
-For newly created files,
-the file user ID is the effective user ID of the creating process.
-The user ID of a file can be changed using
-.BR chown (2).
-.TP
-Group ID
-\fIstat.st_gid\fP; \fIstatx.stx_gid\fP
-.IP
-The inode records the ID of the group owner of the file.
-For newly created files,
-the file group ID is either the group ID of the parent directory or
-the effective group ID of the creating process,
-depending on whether or not the set-group-ID bit
-is set on the parent directory (see below).
-The group ID of a file can be changed using
-.BR chown (2).
-.TP
-Device represented by this inode
-\fIstat.st_rdev\fP; \fIstatx.stx_rdev_minor\fP and \fIstatx.stx_rdev_major\fP
-.IP
-If this file (inode) represents a device,
-then the inode records the major and minor ID of that device.
-.TP
-File size
-\fIstat.st_size\fP; \fIstatx.stx_size\fP
-.IP
-This field gives the size of the file (if it is a regular
-file or a symbolic link) in bytes.
-The size of a symbolic link is the length of the pathname
-it contains, without a terminating null byte.
-.TP
-Preferred block size for I/O
-\fIstat.st_blksize\fP; \fIstatx.stx_blksize\fP
-.IP
-This field gives the "preferred" blocksize for efficient filesystem I/O.
-(Writing to a file in smaller chunks may cause
-an inefficient read-modify-rewrite.)
-.TP
-Number of blocks allocated to the file
-\fIstat.st_blocks\fP; \fIstatx.stx_size\fP
-.IP
-This field indicates the number of blocks allocated to the file,
-512-byte units,
-(This may be smaller than
-.IR st_size /512
-when the file has holes.)
-.IP
-The POSIX.1 standard notes
-.\" Rationale for sys/stat.h in POSIX.1-2008
-that the unit for the
-.I st_blocks
-member of the
-.I stat
-structure is not defined by the standard.
-On many implementations it is 512 bytes;
-on a few systems, a different unit is used, such as 1024.
-Furthermore, the unit may differ on a per-filesystem basis.
-.TP
-Last access timestamp (atime)
-\fIstat.st_atime\fP; \fIstatx.stx_atime\fP
-.IP
-This is the file's last access timestamp.
-It is changed by file accesses, for example, by
-.BR execve (2),
-.BR mknod (2),
-.BR pipe (2),
-.BR utime (2),
-and
-.BR read (2)
-(of more than zero bytes).
-Other interfaces, such as
-.BR mmap (2),
-may or may not update the atime timestamp
-.IP
-Some filesystem types allow mounting in such a way that file
-and/or directory accesses do not cause an update of the atime timestamp.
-(See
-.IR noatime ,
-.IR nodiratime ,
-and
-.I relatime
-in
-.BR mount (8),
-and related information in
-.BR mount (2).)
-In addition, the atime timestamp
-is not updated if a file is opened with the
-.B O_NOATIME
-flag; see
-.BR open (2).
-.TP
-File creation (birth) timestamp (btime)
-(not returned in the \fIstat\fP structure); \fIstatx.stx_btime\fP
-.IP
-The file's creation timestamp.
-This is set on file creation and not changed subsequently.
-.IP
-The btime timestamp was not historically present on UNIX systems
-and is not currently supported by most Linux filesystems.
-.\" FIXME Is it supported on ext4 and XFS?
-.TP
-Last modification timestamp (mtime)
-\fIstat.st_mtime\fP; \fIstatx.stx_mtime\fP
-.IP
-This is the file's last modification timestamp.
-It is changed by file modifications, for example, by
-.BR mknod (2),
-.BR truncate (2),
-.BR utime (2),
-and
-.BR write (2)
-(of more than zero bytes).
-Moreover, the mtime timestamp
-of a directory is changed by the creation or deletion of files
-in that directory.
-The mtime timestamp is
-.I not
-changed for changes in owner, group, hard link count, or mode.
-.TP
-Last status change timestamp (ctime)
-\fIstat.st_ctime\fP; \fIstatx.stx_ctime\fP
-.IP
-This is the file's last status change timestamp.
-It is changed by writing or by setting inode information
-(i.e., owner, group, link count, mode, etc.).
-.PP
-The timestamp fields report time measured with a zero point at the
-.IR Epoch ,
-1970-01-01 00:00:00 +0000, UTC (see
-.BR time (7)).
-.PP
-Nanosecond timestamps are supported on XFS, JFS, Btrfs, and
-ext4 (since Linux 2.6.23).
-.\" commit ef7f38359ea8b3e9c7f2cae9a4d4935f55ca9e80
-Nanosecond timestamps are not supported in ext2, ext3, and Reiserfs.
-In order to return timestamps with nanosecond precision,
-the timestamp fields in the
-.I stat
-and
-.I statx
-structures are defined as structures that include a nanosecond component.
-See
-.BR stat (2)
-and
-.BR statx (2)
-for details.
-On filesystems that do not support subsecond timestamps,
-the nanosecond fields in the
-.I stat
-and
-.I statx
-structures are returned with the value 0.
-.\"
-.SS The file type and mode
-The
-.I stat.st_mode
-field (for
-.BR statx (2),
-the
-.I statx.stx_mode
-field) contains the file type and mode.
-.PP
-POSIX refers to the
-.I stat.st_mode
-bits corresponding to the mask
-.B S_IFMT
-(see below) as the
-.IR "file type" ,
-the 12 bits corresponding to the mask 07777 as the
-.I file mode bits
-and the least significant 9 bits (0777) as the
-.IR "file permission bits" .
-.PP
-The following mask values are defined for the file type:
-.in +4n
-.TS
-lB l l.
-S_IFMT 0170000 bit mask for the file type bit field
-
-S_IFSOCK 0140000 socket
-S_IFLNK 0120000 symbolic link
-S_IFREG 0100000 regular file
-S_IFBLK 0060000 block device
-S_IFDIR 0040000 directory
-S_IFCHR 0020000 character device
-S_IFIFO 0010000 FIFO
-.TE
-.in
-.PP
-Thus, to test for a regular file (for example), one could write:
-.PP
-.in +4n
-.EX
-stat(pathname, &sb);
-if ((sb.st_mode & S_IFMT) == S_IFREG) {
- /* Handle regular file */
-}
-.EE
-.in
-.PP
-Because tests of the above form are common, additional
-macros are defined by POSIX to allow the test of the file type in
-.I st_mode
-to be written more concisely:
-.RS 4
-.TP 1.2i
-.BR S_ISREG (m)
-is it a regular file?
-.TP
-.BR S_ISDIR (m)
-directory?
-.TP
-.BR S_ISCHR (m)
-character device?
-.TP
-.BR S_ISBLK (m)
-block device?
-.TP
-.BR S_ISFIFO (m)
-FIFO (named pipe)?
-.TP
-.BR S_ISLNK (m)
-symbolic link? (Not in POSIX.1-1996.)
-.TP
-.BR S_ISSOCK (m)
-socket? (Not in POSIX.1-1996.)
-.RE
-.PP
-The preceding code snippet could thus be rewritten as:
-.PP
-.in +4n
-.EX
-stat(pathname, &sb);
-if (S_ISREG(sb.st_mode)) {
- /* Handle regular file */
-}
-.EE
-.in
-.PP
-The definitions of most of the above file type test macros
-are provided if any of the following feature test macros is defined:
-.B _BSD_SOURCE
-(in glibc 2.19 and earlier),
-.B _SVID_SOURCE
-(in glibc 2.19 and earlier),
-or
-.B _DEFAULT_SOURCE
-(in glibc 2.20 and later).
-In addition, definitions of all of the above macros except
-.B S_IFSOCK
-and
-.BR S_ISSOCK ()
-are provided if
-.B _XOPEN_SOURCE
-is defined.
-.PP
-The definition of
-.B S_IFSOCK
-can also be exposed either by defining
-.B _XOPEN_SOURCE
-with a value of 500 or greater or (since glibc 2.24) by defining both
-.B _XOPEN_SOURCE
-and
-.BR _XOPEN_SOURCE_EXTENDED .
-.PP
-The definition of
-.BR S_ISSOCK ()
-is exposed if any of the following feature test macros is defined:
-.B _BSD_SOURCE
-(in glibc 2.19 and earlier),
-.B _DEFAULT_SOURCE
-(in glibc 2.20 and later),
-.B _XOPEN_SOURCE
-with a value of 500 or greater,
-.B _POSIX_C_SOURCE
-with a value of 200112L or greater, or (since glibc 2.24) by defining both
-.B _XOPEN_SOURCE
-and
-.BR _XOPEN_SOURCE_EXTENDED .
-.PP
-The following mask values are defined for
-the file mode component of the
-.I st_mode
-field:
-.in +4n
-.nh
-.ad l
-.TS
-lB l lx.
-S_ISUID 04000 T{
-set-user-ID bit (see \fBexecve\fP(2))
-T}
-S_ISGID 02000 T{
-set-group-ID bit (see below)
-T}
-S_ISVTX 01000 T{
-sticky bit (see below)
-T}
-
-S_IRWXU 00700 T{
-owner has read, write, and execute permission
-T}
-S_IRUSR 00400 T{
-owner has read permission
-T}
-S_IWUSR 00200 T{
-owner has write permission
-T}
-S_IXUSR 00100 T{
-owner has execute permission
-T}
-
-S_IRWXG 00070 T{
-group has read, write, and execute permission
-T}
-S_IRGRP 00040 T{
-group has read permission
-T}
-S_IWGRP 00020 T{
-group has write permission
-T}
-S_IXGRP 00010 T{
-group has execute permission
-T}
-
-S_IRWXO 00007 T{
-others (not in group) have read, write, and execute permission
-T}
-S_IROTH 00004 T{
-others have read permission
-T}
-S_IWOTH 00002 T{
-others have write permission
-T}
-S_IXOTH 00001 T{
-others have execute permission
-T}
-.TE
-.ad
-.hy
-.in
-.PP
-The set-group-ID bit
-.RB ( S_ISGID )
-has several special uses.
-For a directory, it indicates that BSD semantics are to be used
-for that directory: files created there inherit their group ID from
-the directory, not from the effective group ID of the creating process,
-and directories created there will also get the
-.B S_ISGID
-bit set.
-For an executable file, the set-group-ID bit causes the effective group ID
-of a process that executes the file to change as described in
-.BR execve (2).
-For a file that does not have the group execution bit
-.RB ( S_IXGRP )
-set,
-the set-group-ID bit indicates mandatory file/record locking.
-.PP
-The sticky bit
-.RB ( S_ISVTX )
-on a directory means that a file
-in that directory can be renamed or deleted only by the owner
-of the file, by the owner of the directory, and by a privileged
-process.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001.
-.PP
-POSIX.1-1990 did not describe the
-.BR S_IFMT ,
-.BR S_IFSOCK ,
-.BR S_IFLNK ,
-.BR S_IFREG ,
-.BR S_IFBLK ,
-.BR S_IFDIR ,
-.BR S_IFCHR ,
-.BR S_IFIFO ,
-and
-.B S_ISVTX
-constants, but instead specified the use of
-the macros
-.BR S_ISDIR ()
-and so on.
-.PP
-The
-.BR S_ISLNK ()
-and
-.BR S_ISSOCK ()
-macros were not in
-POSIX.1-1996;
-the former is from SVID 4, the latter from SUSv2.
-.PP
-UNIX\ V7 (and later systems) had
-.BR S_IREAD ,
-.BR S_IWRITE ,
-.BR S_IEXEC ,
-and
-where POSIX
-prescribes the synonyms
-.BR S_IRUSR ,
-.BR S_IWUSR ,
-and
-.BR S_IXUSR .
-.SH NOTES
-For pseudofiles that are autogenerated by the kernel, the file size
-(\fIstat.st_size\fP; \fIstatx.stx_size\fP)
-reported by the kernel is not accurate.
-For example, the value 0 is returned for many files under the
-.I /proc
-directory,
-while various files under
-.I /sys
-report a size of 4096 bytes, even though the file content is smaller.
-For such files, one should simply try to read as many bytes as possible
-(and append \[aq]\e0\[aq] to the returned buffer
-if it is to be interpreted as a string).
-.SH SEE ALSO
-.BR stat (1),
-.BR stat (2),
-.BR statx (2),
-.BR symlink (7)
diff --git a/man7/inotify.7 b/man7/inotify.7
deleted file mode 100644
index 4fe83902a..000000000
--- a/man7/inotify.7
+++ /dev/null
@@ -1,1100 +0,0 @@
-.\" Copyright (C) 2006, 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Copyright (C) 2014 Heinrich Schuchardt <xypron.glpk@gmx.de>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH inotify 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-inotify \- monitoring filesystem events
-.SH DESCRIPTION
-The
-.I inotify
-API provides a mechanism for monitoring filesystem events.
-Inotify can be used to monitor individual files,
-or to monitor directories.
-When a directory is monitored, inotify will return events
-for the directory itself, and for files inside the directory.
-.PP
-The following system calls are used with this API:
-.IP \[bu] 3
-.BR inotify_init (2)
-creates an inotify instance and returns a file descriptor
-referring to the inotify instance.
-The more recent
-.BR inotify_init1 (2)
-is like
-.BR inotify_init (2),
-but has a
-.I flags
-argument that provides access to some extra functionality.
-.IP \[bu]
-.BR inotify_add_watch (2)
-manipulates the "watch list" associated with an inotify instance.
-Each item ("watch") in the watch list specifies the pathname of
-a file or directory,
-along with some set of events that the kernel should monitor for the
-file referred to by that pathname.
-.BR inotify_add_watch (2)
-either creates a new watch item, or modifies an existing watch.
-Each watch has a unique "watch descriptor", an integer
-returned by
-.BR inotify_add_watch (2)
-when the watch is created.
-.IP \[bu]
-When events occur for monitored files and directories,
-those events are made available to the application as structured data that
-can be read from the inotify file descriptor using
-.BR read (2)
-(see below).
-.IP \[bu]
-.BR inotify_rm_watch (2)
-removes an item from an inotify watch list.
-.IP \[bu]
-When all file descriptors referring to an inotify
-instance have been closed (using
-.BR close (2)),
-the underlying object and its resources are
-freed for reuse by the kernel;
-all associated watches are automatically freed.
-.PP
-With careful programming,
-an application can use inotify to efficiently monitor and cache
-the state of a set of filesystem objects.
-However, robust applications should allow for the fact that bugs
-in the monitoring logic or races of the kind described below
-may leave the cache inconsistent with the filesystem state.
-It is probably wise to do some consistency checking,
-and rebuild the cache when inconsistencies are detected.
-.SS Reading events from an inotify file descriptor
-To determine what events have occurred, an application
-.BR read (2)s
-from the inotify file descriptor.
-If no events have so far occurred, then,
-assuming a blocking file descriptor,
-.BR read (2)
-will block until at least one event occurs
-(unless interrupted by a signal,
-in which case the call fails with the error
-.BR EINTR ;
-see
-.BR signal (7)).
-.PP
-Each successful
-.BR read (2)
-returns a buffer containing one or more of the following structures:
-.PP
-.in +4n
-.EX
-struct inotify_event {
- int wd; /* Watch descriptor */
-.\" FIXME . The type of the 'wd' field should probably be "int32_t".
-.\" I submitted a patch to fix this. See the LKML thread
-.\" "[patch] Fix type errors in inotify interfaces", 18 Nov 2008
-.\" glibc bug filed: https://www.sourceware.org/bugzilla/show_bug.cgi?id=7040
- uint32_t mask; /* Mask describing event */
- uint32_t cookie; /* Unique cookie associating related
- events (for rename(2)) */
- uint32_t len; /* Size of \fIname\fP field */
- char name[]; /* Optional null\-terminated name */
-};
-.EE
-.in
-.PP
-.I wd
-identifies the watch for which this event occurs.
-It is one of the watch descriptors returned by a previous call to
-.BR inotify_add_watch (2).
-.PP
-.I mask
-contains bits that describe the event that occurred (see below).
-.PP
-.I cookie
-is a unique integer that connects related events.
-Currently, this is used only for rename events, and
-allows the resulting pair of
-.B IN_MOVED_FROM
-and
-.B IN_MOVED_TO
-events to be connected by the application.
-For all other event types,
-.I cookie
-is set to 0.
-.PP
-The
-.I name
-field is present only when an event is returned
-for a file inside a watched directory;
-it identifies the filename within the watched directory.
-This filename is null-terminated,
-and may include further null bytes (\[aq]\e0\[aq])
-to align subsequent reads to a suitable address boundary.
-.PP
-The
-.I len
-field counts all of the bytes in
-.IR name ,
-including the null bytes;
-the length of each
-.I inotify_event
-structure is thus
-.IR "sizeof(struct inotify_event)+len" .
-.PP
-The behavior when the buffer given to
-.BR read (2)
-is too small to return information about the next event depends
-on the kernel version: before Linux 2.6.21,
-.BR read (2)
-returns 0; since Linux 2.6.21,
-.BR read (2)
-fails with the error
-.BR EINVAL .
-Specifying a buffer of size
-.PP
-.in +4n
-.EX
-sizeof(struct inotify_event) + NAME_MAX + 1
-.EE
-.in
-.PP
-will be sufficient to read at least one event.
-.SS inotify events
-The
-.BR inotify_add_watch (2)
-.I mask
-argument and the
-.I mask
-field of the
-.I inotify_event
-structure returned when
-.BR read (2)ing
-an inotify file descriptor are both bit masks identifying
-inotify events.
-The following bits can be specified in
-.I mask
-when calling
-.BR inotify_add_watch (2)
-and may be returned in the
-.I mask
-field returned by
-.BR read (2):
-.RS 4
-.TP
-.BR IN_ACCESS " (+)"
-File was accessed (e.g.,
-.BR read (2),
-.BR execve (2)).
-.TP
-.BR IN_ATTRIB " (*)"
-Metadata changed\[em]for example, permissions (e.g.,
-.BR chmod (2)),
-timestamps (e.g.,
-.BR utimensat (2)),
-extended attributes
-.RB ( setxattr (2)),
-link count (since Linux 2.6.25; e.g.,
-.\" FIXME .
-.\" Events do not occur for link count changes on a file inside a monitored
-.\" directory. This differs from other metadata changes for files inside
-.\" a monitored directory.
-for the target of
-.BR link (2)
-and for
-.BR unlink (2)),
-and user/group ID (e.g.,
-.BR chown (2)).
-.TP
-.BR IN_CLOSE_WRITE " (+)"
-File opened for writing was closed.
-.TP
-.BR IN_CLOSE_NOWRITE " (*)"
-File or directory not opened for writing was closed.
-.TP
-.BR IN_CREATE " (+)"
-File/directory created in watched directory (e.g.,
-.BR open (2)
-.BR O_CREAT ,
-.BR mkdir (2),
-.BR link (2),
-.BR symlink (2),
-.BR bind (2)
-on a UNIX domain socket).
-.TP
-.BR IN_DELETE " (+)"
-File/directory deleted from watched directory.
-.TP
-.B IN_DELETE_SELF
-Watched file/directory was itself deleted.
-(This event also occurs if an object is moved to another filesystem,
-since
-.BR mv (1)
-in effect copies the file to the other filesystem and
-then deletes it from the original filesystem.)
-In addition, an
-.B IN_IGNORED
-event will subsequently be generated for the watch descriptor.
-.TP
-.BR IN_MODIFY " (+)"
-File was modified (e.g.,
-.BR write (2),
-.BR truncate (2)).
-.TP
-.B IN_MOVE_SELF
-Watched file/directory was itself moved.
-.TP
-.BR IN_MOVED_FROM " (+)"
-Generated for the directory containing the old filename
-when a file is renamed.
-.TP
-.BR IN_MOVED_TO " (+)"
-Generated for the directory containing the new filename
-when a file is renamed.
-.TP
-.BR IN_OPEN " (*)"
-File or directory was opened.
-.RE
-.PP
-Inotify monitoring is inode-based: when monitoring a file
-(but not when monitoring the directory containing a file),
-an event can be generated for activity on any link to the file
-(in the same or a different directory).
-.PP
-When monitoring a directory:
-.IP \[bu] 3
-the events marked above with an asterisk (*) can occur both
-for the directory itself and for objects inside the directory; and
-.IP \[bu]
-the events marked with a plus sign (+) occur only for objects
-inside the directory (not for the directory itself).
-.PP
-.IR Note :
-when monitoring a directory,
-events are not generated for the files inside the directory
-when the events are performed via a pathname (i.e., a link)
-that lies outside the monitored directory.
-.PP
-When events are generated for objects inside a watched directory, the
-.I name
-field in the returned
-.I inotify_event
-structure identifies the name of the file within the directory.
-.PP
-The
-.B IN_ALL_EVENTS
-macro is defined as a bit mask of all of the above events.
-This macro can be used as the
-.I mask
-argument when calling
-.BR inotify_add_watch (2).
-.PP
-Two additional convenience macros are defined:
-.RS 4
-.TP
-.B IN_MOVE
-Equates to
-.BR "IN_MOVED_FROM | IN_MOVED_TO" .
-.TP
-.B IN_CLOSE
-Equates to
-.BR "IN_CLOSE_WRITE | IN_CLOSE_NOWRITE" .
-.RE
-.PP
-The following further bits can be specified in
-.I mask
-when calling
-.BR inotify_add_watch (2):
-.RS 4
-.TP
-.BR IN_DONT_FOLLOW " (since Linux 2.6.15)"
-Don't dereference
-.I pathname
-if it is a symbolic link.
-.TP
-.BR IN_EXCL_UNLINK " (since Linux 2.6.36)"
-.\" commit 8c1934c8d70b22ca8333b216aec6c7d09fdbd6a6
-By default, when watching events on the children of a directory,
-events are generated for children even after they have been unlinked
-from the directory.
-This can result in large numbers of uninteresting events for
-some applications (e.g., if watching
-.IR /tmp ,
-in which many applications create temporary files whose
-names are immediately unlinked).
-Specifying
-.B IN_EXCL_UNLINK
-changes the default behavior,
-so that events are not generated for children after
-they have been unlinked from the watched directory.
-.TP
-.B IN_MASK_ADD
-If a watch instance already exists for the filesystem object corresponding to
-.IR pathname ,
-add (OR) the events in
-.I mask
-to the watch mask (instead of replacing the mask);
-the error
-.B EINVAL
-results if
-.B IN_MASK_CREATE
-is also specified.
-.TP
-.B IN_ONESHOT
-Monitor the filesystem object corresponding to
-.I pathname
-for one event, then remove from
-watch list.
-.TP
-.BR IN_ONLYDIR " (since Linux 2.6.15)"
-Watch
-.I pathname
-only if it is a directory;
-the error
-.B ENOTDIR
-results if
-.I pathname
-is not a directory.
-Using this flag provides an application with a race-free way of
-ensuring that the monitored object is a directory.
-.TP
-.BR IN_MASK_CREATE " (since Linux 4.18)"
-Watch
-.I pathname
-only if it does not already have a watch associated with it;
-the error
-.B EEXIST
-results if
-.I pathname
-is already being watched.
-.IP
-Using this flag provides an application with a way of ensuring
-that new watches do not modify existing ones.
-This is useful because multiple paths may refer to the same inode,
-and multiple calls to
-.BR inotify_add_watch (2)
-without this flag may clobber existing watch masks.
-.RE
-.PP
-The following bits may be set in the
-.I mask
-field returned by
-.BR read (2):
-.RS 4
-.TP
-.B IN_IGNORED
-Watch was removed explicitly
-.RB ( inotify_rm_watch (2))
-or automatically (file was deleted, or filesystem was unmounted).
-See also BUGS.
-.TP
-.B IN_ISDIR
-Subject of this event is a directory.
-.TP
-.B IN_Q_OVERFLOW
-Event queue overflowed
-.RI ( wd
-is \-1 for this event).
-.TP
-.B IN_UNMOUNT
-Filesystem containing watched object was unmounted.
-In addition, an
-.B IN_IGNORED
-event will subsequently be generated for the watch descriptor.
-.RE
-.SS Examples
-Suppose an application is watching the directory
-.I dir
-and the file
-.I dir/myfile
-for all events.
-The examples below show some events that will be generated
-for these two objects.
-.RS 4
-.TP
-fd = open("dir/myfile", O_RDWR);
-Generates
-.B IN_OPEN
-events for both
-.I dir
-and
-.IR dir/myfile .
-.TP
-read(fd, buf, count);
-Generates
-.B IN_ACCESS
-events for both
-.I dir
-and
-.IR dir/myfile .
-.TP
-write(fd, buf, count);
-Generates
-.B IN_MODIFY
-events for both
-.I dir
-and
-.IR dir/myfile .
-.TP
-fchmod(fd, mode);
-Generates
-.B IN_ATTRIB
-events for both
-.I dir
-and
-.IR dir/myfile .
-.TP
-close(fd);
-Generates
-.B IN_CLOSE_WRITE
-events for both
-.I dir
-and
-.IR dir/myfile .
-.RE
-.PP
-Suppose an application is watching the directories
-.I dir1
-and
-.IR dir2 ,
-and the file
-.IR dir1/myfile .
-The following examples show some events that may be generated.
-.RS 4
-.TP
-link("dir1/myfile", "dir2/new");
-Generates an
-.B IN_ATTRIB
-event for
-.I myfile
-and an
-.B IN_CREATE
-event for
-.IR dir2 .
-.TP
-rename("dir1/myfile", "dir2/myfile");
-Generates an
-.B IN_MOVED_FROM
-event for
-.IR dir1 ,
-an
-.B IN_MOVED_TO
-event for
-.IR dir2 ,
-and an
-.B IN_MOVE_SELF
-event for
-.IR myfile .
-The
-.B IN_MOVED_FROM
-and
-.B IN_MOVED_TO
-events will have the same
-.I cookie
-value.
-.RE
-.PP
-Suppose that
-.I dir1/xx
-and
-.I dir2/yy
-are (the only) links to the same file, and an application is watching
-.IR dir1 ,
-.IR dir2 ,
-.IR dir1/xx ,
-and
-.IR dir2/yy .
-Executing the following calls in the order given below will generate
-the following events:
-.RS 4
-.TP
-unlink("dir2/yy");
-Generates an
-.B IN_ATTRIB
-event for
-.I xx
-(because its link count changes)
-and an
-.B IN_DELETE
-event for
-.IR dir2 .
-.TP
-unlink("dir1/xx");
-Generates
-.BR IN_ATTRIB ,
-.BR IN_DELETE_SELF ,
-and
-.B IN_IGNORED
-events for
-.IR xx ,
-and an
-.B IN_DELETE
-event for
-.IR dir1 .
-.RE
-.PP
-Suppose an application is watching the directory
-.I dir
-and (the empty) directory
-.IR dir/subdir .
-The following examples show some events that may be generated.
-.RS 4
-.TP
-mkdir("dir/new", mode);
-Generates an
-.B "IN_CREATE | IN_ISDIR"
-event for
-.IR dir .
-.TP
-rmdir("dir/subdir");
-Generates
-.B IN_DELETE_SELF
-and
-.B IN_IGNORED
-events for
-.IR subdir ,
-and an
-.B "IN_DELETE | IN_ISDIR"
-event for
-.IR dir .
-.RE
-.SS /proc interfaces
-The following interfaces can be used to limit the amount of
-kernel memory consumed by inotify:
-.TP
-.I /proc/sys/fs/inotify/max_queued_events
-The value in this file is used when an application calls
-.BR inotify_init (2)
-to set an upper limit on the number of events that can be
-queued to the corresponding inotify instance.
-Events in excess of this limit are dropped, but an
-.B IN_Q_OVERFLOW
-event is always generated.
-.TP
-.I /proc/sys/fs/inotify/max_user_instances
-This specifies an upper limit on the number of inotify instances
-that can be created per real user ID.
-.TP
-.I /proc/sys/fs/inotify/max_user_watches
-This specifies an upper limit on the number of watches
-that can be created per real user ID.
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Inotify was merged into Linux 2.6.13.
-The required library interfaces were added in glibc 2.4.
-.RB ( IN_DONT_FOLLOW ,
-.BR IN_MASK_ADD ,
-and
-.B IN_ONLYDIR
-were added in glibc 2.5.)
-.SH NOTES
-Inotify file descriptors can be monitored using
-.BR select (2),
-.BR poll (2),
-and
-.BR epoll (7).
-When an event is available, the file descriptor indicates as readable.
-.PP
-Since Linux 2.6.25,
-signal-driven I/O notification is available for inotify file descriptors;
-see the discussion of
-.B F_SETFL
-(for setting the
-.B O_ASYNC
-flag),
-.BR F_SETOWN ,
-and
-.B F_SETSIG
-in
-.BR fcntl (2).
-The
-.I siginfo_t
-structure (described in
-.BR sigaction (2))
-that is passed to the signal handler has the following fields set:
-.I si_fd
-is set to the inotify file descriptor number;
-.I si_signo
-is set to the signal number;
-.I si_code
-is set to
-.BR POLL_IN ;
-and
-.B POLLIN
-is set in
-.IR si_band .
-.PP
-If successive output inotify events produced on the
-inotify file descriptor are identical (same
-.IR wd ,
-.IR mask ,
-.IR cookie ,
-and
-.IR name ),
-then they are coalesced into a single event if the
-older event has not yet been read (but see BUGS).
-This reduces the amount of kernel memory required for the event queue,
-but also means that an application can't use inotify to reliably count
-file events.
-.PP
-The events returned by reading from an inotify file descriptor
-form an ordered queue.
-Thus, for example, it is guaranteed that when renaming from
-one directory to another, events will be produced in the
-correct order on the inotify file descriptor.
-.PP
-The set of watch descriptors that is being monitored via
-an inotify file descriptor can be viewed via the entry for
-the inotify file descriptor in the process's
-.IR /proc/ pid /fdinfo
-directory.
-See
-.BR proc (5)
-for further details.
-The
-.B FIONREAD
-.BR ioctl (2)
-returns the number of bytes available to read from an
-inotify file descriptor.
-.SS Limitations and caveats
-The inotify API provides no information about the user or process that
-triggered the inotify event.
-In particular, there is no easy
-way for a process that is monitoring events via inotify
-to distinguish events that it triggers
-itself from those that are triggered by other processes.
-.PP
-Inotify reports only events that a user-space program triggers through
-the filesystem API.
-As a result, it does not catch remote events that occur
-on network filesystems.
-(Applications must fall back to polling the filesystem
-to catch such events.)
-Furthermore, various pseudo-filesystems such as
-.IR /proc ,
-.IR /sys ,
-and
-.I /dev/pts
-are not monitorable with inotify.
-.PP
-The inotify API does not report file accesses and modifications that
-may occur because of
-.BR mmap (2),
-.BR msync (2),
-and
-.BR munmap (2).
-.PP
-The inotify API identifies affected files by filename.
-However, by the time an application processes an inotify event,
-the filename may already have been deleted or renamed.
-.PP
-The inotify API identifies events via watch descriptors.
-It is the application's responsibility to cache a mapping
-(if one is needed) between watch descriptors and pathnames.
-Be aware that directory renamings may affect multiple cached pathnames.
-.PP
-Inotify monitoring of directories is not recursive:
-to monitor subdirectories under a directory,
-additional watches must be created.
-This can take a significant amount time for large directory trees.
-.PP
-If monitoring an entire directory subtree,
-and a new subdirectory is created in that tree or an existing directory
-is renamed into that tree,
-be aware that by the time you create a watch for the new subdirectory,
-new files (and subdirectories) may already exist inside the subdirectory.
-Therefore, you may want to scan the contents of the subdirectory
-immediately after adding the watch (and, if desired,
-recursively add watches for any subdirectories that it contains).
-.PP
-Note that the event queue can overflow.
-In this case, events are lost.
-Robust applications should handle the possibility of
-lost events gracefully.
-For example, it may be necessary to rebuild part or all of
-the application cache.
-(One simple, but possibly expensive,
-approach is to close the inotify file descriptor, empty the cache,
-create a new inotify file descriptor,
-and then re-create watches and cache entries
-for the objects to be monitored.)
-.PP
-If a filesystem is mounted on top of a monitored directory,
-no event is generated, and no events are generated
-for objects immediately under the new mount point.
-If the filesystem is subsequently unmounted,
-events will subsequently be generated for the directory and
-the objects it contains.
-.\"
-.SS Dealing with rename() events
-As noted above, the
-.B IN_MOVED_FROM
-and
-.B IN_MOVED_TO
-event pair that is generated by
-.BR rename (2)
-can be matched up via their shared cookie value.
-However, the task of matching has some challenges.
-.PP
-These two events are usually consecutive in the event stream available
-when reading from the inotify file descriptor.
-However, this is not guaranteed.
-If multiple processes are triggering events for monitored objects,
-then (on rare occasions) an arbitrary number of
-other events may appear between the
-.B IN_MOVED_FROM
-and
-.B IN_MOVED_TO
-events.
-Furthermore, it is not guaranteed that the event pair is atomically
-inserted into the queue: there may be a brief interval where the
-.B IN_MOVED_FROM
-has appeared, but the
-.B IN_MOVED_TO
-has not.
-.PP
-Matching up the
-.B IN_MOVED_FROM
-and
-.B IN_MOVED_TO
-event pair generated by
-.BR rename (2)
-is thus inherently racy.
-(Don't forget that if an object is renamed outside of a monitored directory,
-there may not even be an
-.B IN_MOVED_TO
-event.)
-Heuristic approaches (e.g., assume the events are always consecutive)
-can be used to ensure a match in most cases,
-but will inevitably miss some cases,
-causing the application to perceive the
-.B IN_MOVED_FROM
-and
-.B IN_MOVED_TO
-events as being unrelated.
-If watch descriptors are destroyed and re-created as a result,
-then those watch descriptors will be inconsistent with
-the watch descriptors in any pending events.
-(Re-creating the inotify file descriptor and rebuilding the cache may
-be useful to deal with this scenario.)
-.PP
-Applications should also allow for the possibility that the
-.B IN_MOVED_FROM
-event was the last event that could fit in the buffer
-returned by the current call to
-.BR read (2),
-and the accompanying
-.B IN_MOVED_TO
-event might be fetched only on the next
-.BR read (2),
-which should be done with a (small) timeout to allow for the fact that
-insertion of the
-.BR IN_MOVED_FROM + IN_MOVED_TO
-event pair is not atomic,
-and also the possibility that there may not be any
-.B IN_MOVED_TO
-event.
-.SH BUGS
-Before Linux 3.19,
-.BR fallocate (2)
-did not create any inotify events.
-Since Linux 3.19,
-.\" commit 820c12d5d6c0890bc93dd63893924a13041fdc35
-calls to
-.BR fallocate (2)
-generate
-.B IN_MODIFY
-events.
-.PP
-.\" FIXME . kernel commit 611da04f7a31b2208e838be55a42c7a1310ae321
-.\" implies that unmount events were buggy since Linux 2.6.11 to Linux 2.6.36
-.\"
-Before Linux 2.6.16, the
-.B IN_ONESHOT
-.I mask
-flag does not work.
-.PP
-As originally designed and implemented, the
-.B IN_ONESHOT
-flag did not cause an
-.B IN_IGNORED
-event to be generated when the watch was dropped after one event.
-However, as an unintended effect of other changes,
-since Linux 2.6.36, an
-.B IN_IGNORED
-event is generated in this case.
-.PP
-Before Linux 2.6.25,
-.\" commit 1c17d18e3775485bf1e0ce79575eb637a94494a2
-the kernel code that was intended to coalesce successive identical events
-(i.e., the two most recent events could potentially be coalesced
-if the older had not yet been read)
-instead checked if the most recent event could be coalesced with the
-.I oldest
-unread event.
-.PP
-When a watch descriptor is removed by calling
-.BR inotify_rm_watch (2)
-(or because a watch file is deleted or the filesystem
-that contains it is unmounted),
-any pending unread events for that watch descriptor remain available to read.
-As watch descriptors are subsequently allocated with
-.BR inotify_add_watch (2),
-the kernel cycles through the range of possible watch descriptors (0 to
-.BR INT_MAX )
-incrementally.
-When allocating a free watch descriptor, no check is made to see whether that
-watch descriptor number has any pending unread events in the inotify queue.
-Thus, it can happen that a watch descriptor is reallocated even
-when pending unread events exist for a previous incarnation of
-that watch descriptor number, with the result that the application
-might then read those events and interpret them as belonging to
-the file associated with the newly recycled watch descriptor.
-In practice, the likelihood of hitting this bug may be extremely low,
-since it requires that an application cycle through
-.B INT_MAX
-watch descriptors,
-release a watch descriptor while leaving unread events for that
-watch descriptor in the queue,
-and then recycle that watch descriptor.
-For this reason, and because there have been no reports
-of the bug occurring in real-world applications,
-as of Linux 3.15,
-.\" FIXME . https://bugzilla.kernel.org/show_bug.cgi?id=77111
-no kernel changes have yet been made to eliminate this possible bug.
-.SH EXAMPLES
-The following program demonstrates the usage of the inotify API.
-It marks the directories passed as a command-line arguments
-and waits for events of type
-.BR IN_OPEN ,
-.BR IN_CLOSE_NOWRITE ,
-and
-.BR IN_CLOSE_WRITE .
-.PP
-The following output was recorded while editing the file
-.I /home/user/temp/foo
-and listing directory
-.IR /tmp .
-Before the file and the directory were opened,
-.B IN_OPEN
-events occurred.
-After the file was closed, an
-.B IN_CLOSE_WRITE
-event occurred.
-After the directory was closed, an
-.B IN_CLOSE_NOWRITE
-event occurred.
-Execution of the program ended when the user pressed the ENTER key.
-.SS Example output
-.in +4n
-.EX
-$ \fB./a.out /tmp /home/user/temp\fP
-Press enter key to terminate.
-Listening for events.
-IN_OPEN: /home/user/temp/foo [file]
-IN_CLOSE_WRITE: /home/user/temp/foo [file]
-IN_OPEN: /tmp/ [directory]
-IN_CLOSE_NOWRITE: /tmp/ [directory]
-\&
-Listening for events stopped.
-.EE
-.in
-.SS Program source
-\&
-.EX
-#include <errno.h>
-#include <poll.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/inotify.h>
-#include <unistd.h>
-#include <string.h>
-\&
-/* Read all available inotify events from the file descriptor \[aq]fd\[aq].
- wd is the table of watch descriptors for the directories in argv.
- argc is the length of wd and argv.
- argv is the list of watched directories.
- Entry 0 of wd and argv is unused. */
-\&
-static void
-handle_events(int fd, int *wd, int argc, char* argv[])
-{
- /* Some systems cannot read integer variables if they are not
- properly aligned. On other systems, incorrect alignment may
- decrease performance. Hence, the buffer used for reading from
- the inotify file descriptor should have the same alignment as
- struct inotify_event. */
-\&
- char buf[4096]
- __attribute__ ((aligned(__alignof__(struct inotify_event))));
- const struct inotify_event *event;
- ssize_t len;
-\&
- /* Loop while events can be read from inotify file descriptor. */
-\&
- for (;;) {
-\&
- /* Read some events. */
-\&
- len = read(fd, buf, sizeof(buf));
- if (len == \-1 && errno != EAGAIN) {
- perror("read");
- exit(EXIT_FAILURE);
- }
-\&
- /* If the nonblocking read() found no events to read, then
- it returns \-1 with errno set to EAGAIN. In that case,
- we exit the loop. */
-\&
- if (len <= 0)
- break;
-\&
- /* Loop over all events in the buffer. */
-\&
- for (char *ptr = buf; ptr < buf + len;
- ptr += sizeof(struct inotify_event) + event\->len) {
-\&
- event = (const struct inotify_event *) ptr;
-\&
- /* Print event type. */
-\&
- if (event\->mask & IN_OPEN)
- printf("IN_OPEN: ");
- if (event\->mask & IN_CLOSE_NOWRITE)
- printf("IN_CLOSE_NOWRITE: ");
- if (event\->mask & IN_CLOSE_WRITE)
- printf("IN_CLOSE_WRITE: ");
-\&
- /* Print the name of the watched directory. */
-\&
- for (size_t i = 1; i < argc; ++i) {
- if (wd[i] == event\->wd) {
- printf("%s/", argv[i]);
- break;
- }
- }
-\&
- /* Print the name of the file. */
-\&
- if (event\->len)
- printf("%s", event\->name);
-\&
- /* Print type of filesystem object. */
-\&
- if (event\->mask & IN_ISDIR)
- printf(" [directory]\en");
- else
- printf(" [file]\en");
- }
- }
-}
-\&
-int
-main(int argc, char* argv[])
-{
- char buf;
- int fd, i, poll_num;
- int *wd;
- nfds_t nfds;
- struct pollfd fds[2];
-\&
- if (argc < 2) {
- printf("Usage: %s PATH [PATH ...]\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- printf("Press ENTER key to terminate.\en");
-\&
- /* Create the file descriptor for accessing the inotify API. */
-\&
- fd = inotify_init1(IN_NONBLOCK);
- if (fd == \-1) {
- perror("inotify_init1");
- exit(EXIT_FAILURE);
- }
-\&
- /* Allocate memory for watch descriptors. */
-\&
- wd = calloc(argc, sizeof(int));
- if (wd == NULL) {
- perror("calloc");
- exit(EXIT_FAILURE);
- }
-\&
- /* Mark directories for events
- \- file was opened
- \- file was closed */
-\&
- for (i = 1; i < argc; i++) {
- wd[i] = inotify_add_watch(fd, argv[i],
- IN_OPEN | IN_CLOSE);
- if (wd[i] == \-1) {
- fprintf(stderr, "Cannot watch \[aq]%s\[aq]: %s\en",
- argv[i], strerror(errno));
- exit(EXIT_FAILURE);
- }
- }
-\&
- /* Prepare for polling. */
-\&
- nfds = 2;
-\&
- fds[0].fd = STDIN_FILENO; /* Console input */
- fds[0].events = POLLIN;
-\&
- fds[1].fd = fd; /* Inotify input */
- fds[1].events = POLLIN;
-\&
- /* Wait for events and/or terminal input. */
-\&
- printf("Listening for events.\en");
- while (1) {
- poll_num = poll(fds, nfds, \-1);
- if (poll_num == \-1) {
- if (errno == EINTR)
- continue;
- perror("poll");
- exit(EXIT_FAILURE);
- }
-\&
- if (poll_num > 0) {
-\&
- if (fds[0].revents & POLLIN) {
-\&
- /* Console input is available. Empty stdin and quit. */
-\&
- while (read(STDIN_FILENO, &buf, 1) > 0 && buf != \[aq]\en\[aq])
- continue;
- break;
- }
-\&
- if (fds[1].revents & POLLIN) {
-\&
- /* Inotify events are available. */
-\&
- handle_events(fd, wd, argc, argv);
- }
- }
- }
-\&
- printf("Listening for events stopped.\en");
-\&
- /* Close inotify file descriptor. */
-\&
- close(fd);
-\&
- free(wd);
- exit(EXIT_SUCCESS);
-}
-.EE
-.SH SEE ALSO
-.BR inotifywait (1),
-.BR inotifywatch (1),
-.BR inotify_add_watch (2),
-.BR inotify_init (2),
-.BR inotify_init1 (2),
-.BR inotify_rm_watch (2),
-.BR read (2),
-.BR stat (2),
-.BR fanotify (7)
-.PP
-.I Documentation/filesystems/inotify.txt
-in the Linux kernel source tree
diff --git a/man7/intro.7 b/man7/intro.7
deleted file mode 100644
index 0ed9f73ce..000000000
--- a/man7/intro.7
+++ /dev/null
@@ -1,23 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt
-.\" (michael@moria.de), Fri Apr 2 11:32:09 MET DST
-.\" 1993
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified by Thomas Koenig (ig25@rz.uni-karlsruhe.de) 24 Apr 1993
-.\" Modified Sat Jul 24 17:28:08 1993 by Rik Faith (faith@cs.unc.edu)
-.TH intro 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-intro \- introduction to overview and miscellany section
-.SH DESCRIPTION
-Section 7 of the manual provides overviews on various topics, and
-describes conventions and protocols,
-character set standards, the standard filesystem layout,
-and miscellaneous other things.
-.SH NOTES
-.SS Authors and copyright conditions
-Look at the header of the manual page source for the author(s) and copyright
-conditions.
-Note that these can be different from page to page!
-.SH SEE ALSO
-.BR standards (7)
diff --git a/man7/ip.7 b/man7/ip.7
deleted file mode 100644
index 92ecf4b3e..000000000
--- a/man7/ip.7
+++ /dev/null
@@ -1,1503 +0,0 @@
-'\" t
-.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
-.\"
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" $Id: ip.7,v 1.19 2000/12/20 18:10:31 ak Exp $
-.\"
-.\" FIXME The following socket options are yet to be documented
-.\"
-.\" IP_XFRM_POLICY (2.5.48)
-.\" Needs CAP_NET_ADMIN
-.\"
-.\" IP_IPSEC_POLICY (2.5.47)
-.\" Needs CAP_NET_ADMIN
-.\"
-.\" IP_MINTTL (2.6.34)
-.\" commit d218d11133d888f9745802146a50255a4781d37a
-.\" Author: Stephen Hemminger <shemminger@vyatta.com>
-.\"
-.\" MCAST_JOIN_GROUP (2.4.22 / 2.6)
-.\"
-.\" MCAST_BLOCK_SOURCE (2.4.22 / 2.6)
-.\"
-.\" MCAST_UNBLOCK_SOURCE (2.4.22 / 2.6)
-.\"
-.\" MCAST_LEAVE_GROUP (2.4.22 / 2.6)
-.\"
-.\" MCAST_JOIN_SOURCE_GROUP (2.4.22 / 2.6)
-.\"
-.\" MCAST_LEAVE_SOURCE_GROUP (2.4.22 / 2.6)
-.\"
-.\" MCAST_MSFILTER (2.4.22 / 2.6)
-.\"
-.\" IP_UNICAST_IF (3.4)
-.\" commit 76e21053b5bf33a07c76f99d27a74238310e3c71
-.\" Author: Erich E. Hoover <ehoover@mines.edu>
-.\"
-.TH ip 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ip \- Linux IPv4 protocol implementation
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.\" .B #include <net/netinet.h> -- does not exist anymore
-.\" .B #include <linux/errqueue.h> -- never include <linux/foo.h>
-.B #include <netinet/in.h>
-.B #include <netinet/ip.h> \fR/* superset of previous */
-.PP
-.IB tcp_socket " = socket(AF_INET, SOCK_STREAM, 0);"
-.IB udp_socket " = socket(AF_INET, SOCK_DGRAM, 0);"
-.IB raw_socket " = socket(AF_INET, SOCK_RAW, " protocol ");"
-.fi
-.SH DESCRIPTION
-Linux implements the Internet Protocol, version 4,
-described in RFC\ 791 and RFC\ 1122.
-.B ip
-contains a level 2 multicasting implementation conforming to RFC\ 1112.
-It also contains an IP router including a packet filter.
-.PP
-The programming interface is BSD-sockets compatible.
-For more information on sockets, see
-.BR socket (7).
-.PP
-An IP socket is created using
-.BR socket (2):
-.PP
-.in +4n
-.EX
-socket(AF_INET, socket_type, protocol);
-.EE
-.in
-.PP
-Valid socket types include
-.B SOCK_STREAM
-to open a stream socket,
-.B SOCK_DGRAM
-to open a datagram socket, and
-.B SOCK_RAW
-to open a
-.BR raw (7)
-socket to access the IP protocol directly.
-.PP
-.I protocol
-is the IP protocol in the IP header to be received or sent.
-Valid values for
-.I protocol
-include:
-.IP \[bu] 3
-0 and
-.B IPPROTO_TCP
-for
-.BR tcp (7)
-stream sockets;
-.IP \[bu]
-0 and
-.B IPPROTO_UDP
-for
-.BR udp (7)
-datagram sockets;
-.IP \[bu]
-.B IPPROTO_SCTP
-for
-.BR sctp (7)
-stream sockets; and
-.IP \[bu]
-.B IPPROTO_UDPLITE
-for
-.BR udplite (7)
-datagram sockets.
-.PP
-For
-.B SOCK_RAW
-you may specify a valid IANA IP protocol defined in
-RFC\ 1700 assigned numbers.
-.PP
-When a process wants to receive new incoming packets or connections, it
-should bind a socket to a local interface address using
-.BR bind (2).
-In this case, only one IP socket may be bound to any given local
-(address, port) pair.
-When
-.B INADDR_ANY
-is specified in the bind call, the socket will be bound to
-.I all
-local interfaces.
-When
-.BR listen (2)
-is called on an unbound socket, the socket is automatically bound
-to a random free port with the local address set to
-.BR INADDR_ANY .
-When
-.BR connect (2)
-is called on an unbound socket, the socket is automatically bound
-to a random free port or to a usable shared port with the local address
-set to
-.BR INADDR_ANY .
-.PP
-A TCP local socket address that has been bound is unavailable for
-some time after closing, unless the
-.B SO_REUSEADDR
-flag has been set.
-Care should be taken when using this flag as it makes TCP less reliable.
-.SS Address format
-An IP socket address is defined as a combination of an IP interface
-address and a 16-bit port number.
-The basic IP protocol does not supply port numbers, they
-are implemented by higher level protocols like
-.BR udp (7)
-and
-.BR tcp (7).
-On raw sockets
-.I sin_port
-is set to the IP protocol.
-.PP
-.in +4n
-.EX
-struct sockaddr_in {
- sa_family_t sin_family; /* address family: AF_INET */
- in_port_t sin_port; /* port in network byte order */
- struct in_addr sin_addr; /* internet address */
-};
-\&
-/* Internet address */
-struct in_addr {
- uint32_t s_addr; /* address in network byte order */
-};
-.EE
-.in
-.PP
-.I sin_family
-is always set to
-.BR AF_INET .
-This is required; in Linux 2.2 most networking functions return
-.B EINVAL
-when this setting is missing.
-.I sin_port
-contains the port in network byte order.
-The port numbers below 1024 are called
-.I privileged ports
-(or sometimes:
-.IR "reserved ports" ).
-Only a privileged process
-(on Linux: a process that has the
-.B CAP_NET_BIND_SERVICE
-capability in the user namespace governing its network namespace) may
-.BR bind (2)
-to these sockets.
-Note that the raw IPv4 protocol as such has no concept of a
-port, they are implemented only by higher protocols like
-.BR tcp (7)
-and
-.BR udp (7).
-.PP
-.I sin_addr
-is the IP host address.
-The
-.I s_addr
-member of
-.I struct in_addr
-contains the host interface address in network byte order.
-.I in_addr
-should be assigned one of the
-.B INADDR_*
-values
-(e.g.,
-.BR INADDR_LOOPBACK )
-using
-.BR htonl (3)
-or set using the
-.BR inet_aton (3),
-.BR inet_addr (3),
-.BR inet_makeaddr (3)
-library functions or directly with the name resolver (see
-.BR gethostbyname (3)).
-.PP
-IPv4 addresses are divided into unicast, broadcast,
-and multicast addresses.
-Unicast addresses specify a single interface of a host,
-broadcast addresses specify all hosts on a network, and multicast
-addresses address all hosts in a multicast group.
-Datagrams to broadcast addresses can be sent or received only when the
-.B SO_BROADCAST
-socket flag is set.
-In the current implementation, connection-oriented sockets are allowed
-to use only unicast addresses.
-.\" Leave a loophole for XTP @)
-.PP
-Note that the address and the port are always stored in
-network byte order.
-In particular, this means that you need to call
-.BR htons (3)
-on the number that is assigned to a port.
-All address/port manipulation
-functions in the standard library work in network byte order.
-.SS Special and reserved addresses
-There are several special addresses:
-.TP
-.BR INADDR_LOOPBACK " (127.0.0.1)"
-always refers to the local host via the loopback device;
-.TP
-.BR INADDR_ANY " (0.0.0.0)"
-means any address for socket binding;
-.TP
-.BR INADDR_BROADCAST " (255.255.255.255)"
-has the same effect on
-.BR bind (2)
-as
-.B INADDR_ANY
-for historical reasons.
-A packet addressed to
-.B INADDR_BROADCAST
-through a socket which has
-.B SO_BROADCAST
-set will be broadcast to all hosts on the local network segment,
-as long as the link is broadcast-capable.
-.TP
-Highest-numbered address
-.TQ
-Lowest-numbered address
-On any locally-attached non-point-to-point IP subnet
-with a link type that supports broadcasts,
-the highest-numbered address
-(e.g., the .255 address on a subnet with netmask 255.255.255.0)
-is designated as a broadcast address.
-It cannot usefully be assigned to an individual interface,
-and can only be addressed with a socket on which the
-.B SO_BROADCAST
-option has been set.
-Internet standards have historically
-also reserved the lowest-numbered address
-(e.g., the .0 address on a subnet with netmask 255.255.255.0)
-for broadcast, though they call it "obsolete" for this purpose.
-(Some sources also refer to this as the "network address.")
-Since Linux 5.14,
-.\" commit 58fee5fc83658aaacf60246aeab738946a9ba516
-it is treated as an ordinary unicast address
-and can be assigned to an interface.
-.PP
-Internet standards have traditionally also reserved various addresses
-for particular uses, though Linux no longer treats
-some of these specially.
-.TP
-[0.0.0.1, 0.255.255.255]
-.TQ
-[240.0.0.0, 255.255.255.254]
-Addresses in these ranges (0/8 and 240/4) are reserved globally.
-Since Linux 5.3
-.\" commit 96125bf9985a75db00496dd2bc9249b777d2b19b
-and Linux 2.6.25,
-.\" commit 1e637c74b0f84eaca02b914c0b8c6f67276e9697
-respectively,
-the 0/8 and 240/4 addresses, other than
-.B INADDR_ANY
-and
-.BR INADDR_BROADCAST ,
-are treated as ordinary unicast addresses.
-Systems that follow the traditional behaviors may not
-interoperate with these historically reserved addresses.
-.TP
-[127.0.0.1, 127.255.255.254]
-Addresses in this range (127/8) are treated as loopback addresses
-akin to the standardized local loopback address
-.B INADDR_LOOPBACK
-(127.0.0.1);
-.TP
-[224.0.0.0, 239.255.255.255]
-Addresses in this range (224/4) are dedicated to multicast use.
-.SS Socket options
-IP supports some protocol-specific socket options that can be set with
-.BR setsockopt (2)
-and read with
-.BR getsockopt (2).
-The socket option level for IP is
-.BR IPPROTO_IP .
-.\" or SOL_IP on Linux
-A boolean integer flag is zero when it is false, otherwise true.
-.PP
-When an invalid socket option is specified,
-.BR getsockopt (2)
-and
-.BR setsockopt (2)
-fail with the error
-.BR ENOPROTOOPT .
-.TP
-.BR IP_ADD_MEMBERSHIP " (since Linux 1.2)"
-Join a multicast group.
-Argument is an
-.I ip_mreqn
-structure.
-.IP
-.in +4n
-.EX
-struct ip_mreqn {
- struct in_addr imr_multiaddr; /* IP multicast group
- address */
- struct in_addr imr_address; /* IP address of local
- interface */
- int imr_ifindex; /* interface index */
-};
-.EE
-.in
-.IP
-.I imr_multiaddr
-contains the address of the multicast group the application
-wants to join or leave.
-It must be a valid multicast address
-.\" (i.e., within the 224.0.0.0-239.255.255.255 range)
-(or
-.BR setsockopt (2)
-fails with the error
-.BR EINVAL ).
-.I imr_address
-is the address of the local interface with which the system
-should join the multicast group; if it is equal to
-.BR INADDR_ANY ,
-an appropriate interface is chosen by the system.
-.I imr_ifindex
-is the interface index of the interface that should join/leave the
-.I imr_multiaddr
-group, or 0 to indicate any interface.
-.IP
-The
-.I ip_mreqn
-structure is available only since Linux 2.2.
-For compatibility, the old
-.I ip_mreq
-structure (present since Linux 1.2) is still supported;
-it differs from
-.I ip_mreqn
-only by not including the
-.I imr_ifindex
-field.
-(The kernel determines which structure is being passed based
-on the size passed in
-.IR optlen .)
-.IP
-.B IP_ADD_MEMBERSHIP
-is valid only for
-.BR setsockopt (2).
-.\"
-.TP
-.BR IP_ADD_SOURCE_MEMBERSHIP " (since Linux 2.4.22 / Linux 2.5.68)"
-Join a multicast group and allow receiving data only
-from a specified source.
-Argument is an
-.I ip_mreq_source
-structure.
-.IP
-.in +4n
-.EX
-struct ip_mreq_source {
- struct in_addr imr_multiaddr; /* IP multicast group
- address */
- struct in_addr imr_interface; /* IP address of local
- interface */
- struct in_addr imr_sourceaddr; /* IP address of
- multicast source */
-};
-.EE
-.in
-.IP
-The
-.I ip_mreq_source
-structure is similar to
-.I ip_mreqn
-described under
-.BR IP_ADD_MEMBERSHIP .
-The
-.I imr_multiaddr
-field contains the address of the multicast group the application
-wants to join or leave.
-The
-.I imr_interface
-field is the address of the local interface with which
-the system should join the multicast group.
-Finally, the
-.I imr_sourceaddr
-field contains the address of the source the
-application wants to receive data from.
-.IP
-This option can be used multiple times to allow
-receiving data from more than one source.
-.TP
-.BR IP_BIND_ADDRESS_NO_PORT " (since Linux 4.2)"
-.\" commit 90c337da1524863838658078ec34241f45d8394d
-Inform the kernel to not reserve an ephemeral port when using
-.BR bind (2)
-with a port number of 0.
-The port will later be automatically chosen at
-.BR connect (2)
-time,
-in a way that allows sharing a source port as long as the 4-tuple is unique.
-.TP
-.BR IP_BLOCK_SOURCE " (since Linux 2.4.22 / 2.5.68)"
-Stop receiving multicast data from a specific source in a given group.
-This is valid only after the application has subscribed
-to the multicast group using either
-.B IP_ADD_MEMBERSHIP
-or
-.BR IP_ADD_SOURCE_MEMBERSHIP .
-.IP
-Argument is an
-.I ip_mreq_source
-structure as described under
-.BR IP_ADD_SOURCE_MEMBERSHIP .
-.TP
-.BR IP_DROP_MEMBERSHIP " (since Linux 1.2)"
-Leave a multicast group.
-Argument is an
-.I ip_mreqn
-or
-.I ip_mreq
-structure similar to
-.BR IP_ADD_MEMBERSHIP .
-.TP
-.BR IP_DROP_SOURCE_MEMBERSHIP " (since Linux 2.4.22 / 2.5.68)"
-Leave a source-specific group\[em]that is, stop receiving data from
-a given multicast group that come from a given source.
-If the application has subscribed to multiple sources within
-the same group, data from the remaining sources will still be delivered.
-To stop receiving data from all sources at once, use
-.BR IP_DROP_MEMBERSHIP .
-.IP
-Argument is an
-.I ip_mreq_source
-structure as described under
-.BR IP_ADD_SOURCE_MEMBERSHIP .
-.TP
-.BR IP_FREEBIND " (since Linux 2.4)"
-.\" Precisely: since Linux 2.4.0-test10
-If enabled, this boolean option allows binding to an IP address
-that is nonlocal or does not (yet) exist.
-This permits listening on a socket,
-without requiring the underlying network interface or the
-specified dynamic IP address to be up at the time that
-the application is trying to bind to it.
-This option is the per-socket equivalent of the
-.I ip_nonlocal_bind
-.I /proc
-interface described below.
-.TP
-.BR IP_HDRINCL " (since Linux 2.0)"
-If enabled,
-the user supplies an IP header in front of the user data.
-Valid only for
-.B SOCK_RAW
-sockets; see
-.BR raw (7)
-for more information.
-When this flag is enabled, the values set by
-.BR IP_OPTIONS ,
-.BR IP_TTL ,
-and
-.B IP_TOS
-are ignored.
-.TP
-.BR IP_MSFILTER " (since Linux 2.4.22 / 2.5.68)"
-This option provides access to the advanced full-state filtering API.
-Argument is an
-.I ip_msfilter
-structure.
-.IP
-.in +4n
-.EX
-struct ip_msfilter {
- struct in_addr imsf_multiaddr; /* IP multicast group
- address */
- struct in_addr imsf_interface; /* IP address of local
- interface */
- uint32_t imsf_fmode; /* Filter\-mode */
-\&
- uint32_t imsf_numsrc; /* Number of sources in
- the following array */
- struct in_addr imsf_slist[1]; /* Array of source
- addresses */
-};
-.EE
-.in
-.IP
-There are two macros,
-.B MCAST_INCLUDE
-and
-.BR MCAST_EXCLUDE ,
-which can be used to specify the filtering mode.
-Additionally, the
-.BR IP_MSFILTER_SIZE (n)
-macro exists to determine how much memory is needed to store
-.I ip_msfilter
-structure with
-.I n
-sources in the source list.
-.IP
-For the full description of multicast source filtering
-refer to RFC 3376.
-.TP
-.BR IP_MTU " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.124
-Retrieve the current known path MTU of the current socket.
-Returns an integer.
-.IP
-.B IP_MTU
-is valid only for
-.BR getsockopt (2)
-and can be employed only when the socket has been connected.
-.TP
-.BR IP_MTU_DISCOVER " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.124
-Set or receive the Path MTU Discovery setting for a socket.
-When enabled, Linux will perform Path MTU Discovery
-as defined in RFC\ 1191 on
-.B SOCK_STREAM
-sockets.
-For
-.RB non- SOCK_STREAM
-sockets,
-.B IP_PMTUDISC_DO
-forces the don't-fragment flag to be set on all outgoing packets.
-It is the user's responsibility to packetize the data
-in MTU-sized chunks and to do the retransmits if necessary.
-The kernel will reject (with
-.BR EMSGSIZE )
-datagrams that are bigger than the known path MTU.
-.B IP_PMTUDISC_WANT
-will fragment a datagram if needed according to the path MTU,
-or will set the don't-fragment flag otherwise.
-.IP
-The system-wide default can be toggled between
-.B IP_PMTUDISC_WANT
-and
-.B IP_PMTUDISC_DONT
-by writing (respectively, zero and nonzero values) to the
-.I /proc/sys/net/ipv4/ip_no_pmtu_disc
-file.
-.TS
-tab(:);
-c l
-l l.
-Path MTU discovery value:Meaning
-IP_PMTUDISC_WANT:Use per-route settings.
-IP_PMTUDISC_DONT:Never do Path MTU Discovery.
-IP_PMTUDISC_DO:Always do Path MTU Discovery.
-IP_PMTUDISC_PROBE:Set DF but ignore Path MTU.
-.TE
-.sp 1
-When PMTU discovery is enabled, the kernel automatically keeps track of
-the path MTU per destination host.
-When it is connected to a specific peer with
-.BR connect (2),
-the currently known path MTU can be retrieved conveniently using the
-.B IP_MTU
-socket option (e.g., after an
-.B EMSGSIZE
-error occurred).
-The path MTU may change over time.
-For connectionless sockets with many destinations,
-the new MTU for a given destination can also be accessed using the
-error queue (see
-.BR IP_RECVERR ).
-A new error will be queued for every incoming MTU update.
-.IP
-While MTU discovery is in progress, initial packets from datagram sockets
-may be dropped.
-Applications using UDP should be aware of this and not
-take it into account for their packet retransmit strategy.
-.IP
-To bootstrap the path MTU discovery process on unconnected sockets, it
-is possible to start with a big datagram size
-(headers up to 64 kilobytes long) and let it shrink by updates of the path MTU.
-.IP
-To get an initial estimate of the
-path MTU, connect a datagram socket to the destination address using
-.BR connect (2)
-and retrieve the MTU by calling
-.BR getsockopt (2)
-with the
-.B IP_MTU
-option.
-.IP
-It is possible to implement RFC 4821 MTU probing with
-.B SOCK_DGRAM
-or
-.B SOCK_RAW
-sockets by setting a value of
-.B IP_PMTUDISC_PROBE
-(available since Linux 2.6.22).
-This is also particularly useful for diagnostic tools such as
-.BR tracepath (8)
-that wish to deliberately send probe packets larger than
-the observed Path MTU.
-.TP
-.BR IP_MULTICAST_ALL " (since Linux 2.6.31)"
-This option can be used to modify the delivery policy of multicast messages.
-The argument is a boolean integer (defaults to 1).
-If set to 1,
-the socket will receive messages from all the groups that have been joined
-globally on the whole system.
-Otherwise, it will deliver messages only from
-the groups that have been explicitly joined (for example via the
-.B IP_ADD_MEMBERSHIP
-option) on this particular socket.
-.TP
-.BR IP_MULTICAST_IF " (since Linux 1.2)"
-Set the local device for a multicast socket.
-The argument for
-.BR setsockopt (2)
-is an
-.I ip_mreqn
-or
-.\" net: IP_MULTICAST_IF setsockopt now recognizes struct mreq
-.\" Commit: 3a084ddb4bf299a6e898a9a07c89f3917f0713f7
-(since Linux 3.5)
-.I ip_mreq
-structure similar to
-.BR IP_ADD_MEMBERSHIP ,
-or an
-.I in_addr
-structure.
-(The kernel determines which structure is being passed based
-on the size passed in
-.IR optlen .)
-For
-.BR getsockopt (2),
-the argument is an
-.I in_addr
-structure.
-.TP
-.BR IP_MULTICAST_LOOP " (since Linux 1.2)"
-Set or read a boolean integer argument that determines whether
-sent multicast packets should be looped back to the local sockets.
-.TP
-.BR IP_MULTICAST_TTL " (since Linux 1.2)"
-Set or read the time-to-live value of outgoing multicast packets for this
-socket.
-It is very important for multicast packets to set the smallest TTL possible.
-The default is 1 which means that multicast packets don't leave the local
-network unless the user program explicitly requests it.
-Argument is an integer.
-.TP
-.BR IP_NODEFRAG " (since Linux 2.6.36)"
-If enabled (argument is nonzero),
-the reassembly of outgoing packets is disabled in the netfilter layer.
-The argument is an integer.
-.IP
-This option is valid only for
-.B SOCK_RAW
-sockets.
-.TP
-.BR IP_OPTIONS " (since Linux 2.0)"
-.\" Precisely: since Linux 1.3.30
-Set or get the IP options to be sent with every packet from this socket.
-The arguments are a pointer to a memory buffer containing the options
-and the option length.
-The
-.BR setsockopt (2)
-call sets the IP options associated with a socket.
-The maximum option size for IPv4 is 40 bytes.
-See RFC\ 791 for the allowed options.
-When the initial connection request packet for a
-.B SOCK_STREAM
-socket contains IP options, the IP options will be set automatically
-to the options from the initial packet with routing headers reversed.
-Incoming packets are not allowed to change options after the connection
-is established.
-The processing of all incoming source routing options
-is disabled by default and can be enabled by using the
-.I accept_source_route
-.I /proc
-interface.
-Other options like timestamps are still handled.
-For datagram sockets, IP options can be set only by the local user.
-Calling
-.BR getsockopt (2)
-with
-.B IP_OPTIONS
-puts the current IP options used for sending into the supplied buffer.
-.TP
-.BR IP_PASSSEC " (since Linux 2.6.17)"
-.\" commit 2c7946a7bf45ae86736ab3b43d0085e43947945c
-If labeled IPSEC or NetLabel is configured on the sending and receiving
-hosts, this option enables receiving of the security context of the peer
-socket in an ancillary message of type
-.B SCM_SECURITY
-retrieved using
-.BR recvmsg (2).
-This option is supported only for UDP sockets; for TCP or SCTP sockets,
-see the description of the
-.B SO_PEERSEC
-option below.
-.IP
-The value given as an argument to
-.BR setsockopt (2)
-and returned as the result of
-.BR getsockopt (2)
-is an integer boolean flag.
-.IP
-The security context returned in the
-.B SCM_SECURITY
-ancillary message
-is of the same format as the one described under the
-.B SO_PEERSEC
-option below.
-.IP
-Note: the reuse of the
-.B SCM_SECURITY
-message type for the
-.B IP_PASSSEC
-socket option was likely a mistake, since other IP control messages use
-their own numbering scheme in the IP namespace and often use the
-socket option value as the message type.
-There is no conflict currently since the IP option with the same value as
-.B SCM_SECURITY
-is
-.B IP_HDRINCL
-and this is never used for a control message type.
-.TP
-.BR IP_PKTINFO " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.68
-Pass an
-.B IP_PKTINFO
-ancillary message that contains a
-.I pktinfo
-structure that supplies some information about the incoming packet.
-This works only for datagram oriented sockets.
-The argument is a flag that tells the socket whether the
-.B IP_PKTINFO
-message should be passed or not.
-The message itself can be sent/retrieved
-only as a control message with a packet using
-.BR recvmsg (2)
-or
-.BR sendmsg (2).
-.IP
-.in +4n
-.EX
-struct in_pktinfo {
- unsigned int ipi_ifindex; /* Interface index */
- struct in_addr ipi_spec_dst; /* Local address */
- struct in_addr ipi_addr; /* Header Destination
- address */
-};
-.EE
-.in
-.IP
-.I ipi_ifindex
-is the unique index of the interface the packet was received on.
-.I ipi_spec_dst
-is the local address of the packet and
-.I ipi_addr
-is the destination address in the packet header.
-If
-.B IP_PKTINFO
-is passed to
-.BR sendmsg (2)
-and
-.\" This field is grossly misnamed
-.I ipi_spec_dst
-is not zero, then it is used as the local source address for the routing
-table lookup and for setting up IP source route options.
-When
-.I ipi_ifindex
-is not zero, the primary local address of the interface specified by the
-index overwrites
-.I ipi_spec_dst
-for the routing table lookup.
-.TP
-.BR IP_RECVERR " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.15
-Enable extended reliable error message passing.
-When enabled on a datagram socket, all
-generated errors will be queued in a per-socket error queue.
-When the user receives an error from a socket operation,
-the errors can be received by calling
-.BR recvmsg (2)
-with the
-.B MSG_ERRQUEUE
-flag set.
-The
-.I sock_extended_err
-structure describing the error will be passed in an ancillary message with
-the type
-.B IP_RECVERR
-and the level
-.BR IPPROTO_IP .
-.\" or SOL_IP on Linux
-This is useful for reliable error handling on unconnected sockets.
-The received data portion of the error queue contains the error packet.
-.IP
-The
-.B IP_RECVERR
-control message contains a
-.I sock_extended_err
-structure:
-.IP
-.in +4n
-.EX
-#define SO_EE_ORIGIN_NONE 0
-#define SO_EE_ORIGIN_LOCAL 1
-#define SO_EE_ORIGIN_ICMP 2
-#define SO_EE_ORIGIN_ICMP6 3
-\&
-struct sock_extended_err {
- uint32_t ee_errno; /* error number */
- uint8_t ee_origin; /* where the error originated */
- uint8_t ee_type; /* type */
- uint8_t ee_code; /* code */
- uint8_t ee_pad;
- uint32_t ee_info; /* additional information */
- uint32_t ee_data; /* other data */
- /* More data may follow */
-};
-\&
-struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);
-.EE
-.in
-.IP
-.I ee_errno
-contains the
-.I errno
-number of the queued error.
-.I ee_origin
-is the origin code of where the error originated.
-The other fields are protocol-specific.
-The macro
-.B SO_EE_OFFENDER
-returns a pointer to the address of the network object
-where the error originated from given a pointer to the ancillary message.
-If this address is not known, the
-.I sa_family
-member of the
-.I sockaddr
-contains
-.B AF_UNSPEC
-and the other fields of the
-.I sockaddr
-are undefined.
-.IP
-IP uses the
-.I sock_extended_err
-structure as follows:
-.I ee_origin
-is set to
-.B SO_EE_ORIGIN_ICMP
-for errors received as an ICMP packet, or
-.B SO_EE_ORIGIN_LOCAL
-for locally generated errors.
-Unknown values should be ignored.
-.I ee_type
-and
-.I ee_code
-are set from the type and code fields of the ICMP header.
-.I ee_info
-contains the discovered MTU for
-.B EMSGSIZE
-errors.
-The message also contains the
-.I sockaddr_in of the node
-caused the error, which can be accessed with the
-.B SO_EE_OFFENDER
-macro.
-The
-.I sin_family
-field of the
-.B SO_EE_OFFENDER
-address is
-.B AF_UNSPEC
-when the source was unknown.
-When the error originated from the network, all IP options
-.RB ( IP_OPTIONS ", " IP_TTL ,
-etc.) enabled on the socket and contained in the
-error packet are passed as control messages.
-The payload of the packet causing the error is returned as normal payload.
-.\" FIXME . Is it a good idea to document that? It is a dubious feature.
-.\" On
-.\" .B SOCK_STREAM
-.\" sockets,
-.\" .B IP_RECVERR
-.\" has slightly different semantics. Instead of
-.\" saving the errors for the next timeout, it passes all incoming
-.\" errors immediately to the user.
-.\" This might be useful for very short-lived TCP connections which
-.\" need fast error handling. Use this option with care:
-.\" it makes TCP unreliable
-.\" by not allowing it to recover properly from routing
-.\" shifts and other normal
-.\" conditions and breaks the protocol specification.
-Note that TCP has no error queue;
-.B MSG_ERRQUEUE
-is not permitted on
-.B SOCK_STREAM
-sockets.
-.B IP_RECVERR
-is valid for TCP, but all errors are returned by socket function return or
-.B SO_ERROR
-only.
-.IP
-For raw sockets,
-.B IP_RECVERR
-enables passing of all received ICMP errors to the
-application, otherwise errors are reported only on connected sockets
-.IP
-It sets or retrieves an integer boolean flag.
-.B IP_RECVERR
-defaults to off.
-.TP
-.BR IP_RECVOPTS " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.15
-Pass all incoming IP options to the user in a
-.B IP_OPTIONS
-control message.
-The routing header and other options are already filled in
-for the local host.
-Not supported for
-.B SOCK_STREAM
-sockets.
-.TP
-.BR IP_RECVORIGDSTADDR " (since Linux 2.6.29)"
-.\" commit e8b2dfe9b4501ed0047459b2756ba26e5a940a69
-This boolean option enables the
-.B IP_ORIGDSTADDR
-ancillary message in
-.BR recvmsg (2),
-in which the kernel returns the original destination address
-of the datagram being received.
-The ancillary message contains a
-.IR "struct sockaddr_in" .
-.TP
-.BR IP_RECVTOS " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.68
-If enabled, the
-.B IP_TOS
-ancillary message is passed with incoming packets.
-It contains a byte which specifies the Type of Service/Precedence
-field of the packet header.
-Expects a boolean integer flag.
-.TP
-.BR IP_RECVTTL " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.68
-When this flag is set, pass a
-.B IP_TTL
-control message with the time-to-live
-field of the received packet as a 32 bit integer.
-Not supported for
-.B SOCK_STREAM
-sockets.
-.TP
-.BR IP_RETOPTS " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.15
-Identical to
-.BR IP_RECVOPTS ,
-but returns raw unprocessed options with timestamp and route record
-options not filled in for this hop.
-.TP
-.BR IP_ROUTER_ALERT " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.68
-Pass all to-be forwarded packets with the
-IP Router Alert option set to this socket.
-Valid only for raw sockets.
-This is useful, for instance, for user-space RSVP daemons.
-The tapped packets are not forwarded by the kernel; it is
-the user's responsibility to send them out again.
-Socket binding is ignored,
-such packets are filtered only by protocol.
-Expects an integer flag.
-.TP
-.BR IP_TOS " (since Linux 1.0)"
-Set or receive the Type-Of-Service (TOS) field that is sent
-with every IP packet originating from this socket.
-It is used to prioritize packets on the network.
-TOS is a byte.
-There are some standard TOS flags defined:
-.B IPTOS_LOWDELAY
-to minimize delays for interactive traffic,
-.B IPTOS_THROUGHPUT
-to optimize throughput,
-.B IPTOS_RELIABILITY
-to optimize for reliability,
-.B IPTOS_MINCOST
-should be used for "filler data" where slow transmission doesn't matter.
-At most one of these TOS values can be specified.
-Other bits are invalid and shall be cleared.
-Linux sends
-.B IPTOS_LOWDELAY
-datagrams first by default,
-but the exact behavior depends on the configured queueing discipline.
-.\" FIXME elaborate on this
-Some high-priority levels may require superuser privileges (the
-.B CAP_NET_ADMIN
-capability).
-.\" The priority can also be set in a protocol-independent way by the
-.\" .RB ( SOL_SOCKET ", " SO_PRIORITY )
-.\" socket option (see
-.\" .BR socket (7)).
-.TP
-.BR IP_TRANSPARENT " (since Linux 2.6.24)"
-.\" commit f5715aea4564f233767ea1d944b2637a5fd7cd2e
-.\" This patch introduces the IP_TRANSPARENT socket option: enabling that
-.\" will make the IPv4 routing omit the non-local source address check on
-.\" output. Setting IP_TRANSPARENT requires NET_ADMIN capability.
-.\" http://lwn.net/Articles/252545/
-Setting this boolean option enables transparent proxying on this socket.
-This socket option allows
-the calling application to bind to a nonlocal IP address and operate
-both as a client and a server with the foreign address as the local endpoint.
-NOTE: this requires that routing be set up in a way that
-packets going to the foreign address are routed through the TProxy box
-(i.e., the system hosting the application that employs the
-.B IP_TRANSPARENT
-socket option).
-Enabling this socket option requires superuser privileges
-(the
-.B CAP_NET_ADMIN
-capability).
-.IP
-TProxy redirection with the iptables TPROXY target also requires that
-this option be set on the redirected socket.
-.TP
-.BR IP_TTL " (since Linux 1.0)"
-Set or retrieve the current time-to-live field that is used in every packet
-sent from this socket.
-.TP
-.BR IP_UNBLOCK_SOURCE " (since Linux 2.4.22 / 2.5.68)"
-Unblock previously blocked multicast source.
-Returns
-.B EADDRNOTAVAIL
-when given source is not being blocked.
-.IP
-Argument is an
-.I ip_mreq_source
-structure as described under
-.BR IP_ADD_SOURCE_MEMBERSHIP .
-.TP
-.BR SO_PEERSEC " (since Linux 2.6.17)"
-If labeled IPSEC or NetLabel is configured on both the sending and
-receiving hosts, this read-only socket option returns the security
-context of the peer socket connected to this socket.
-By default,
-this will be the same as the security context of the process that created
-the peer socket unless overridden by the policy or by a process with
-the required permissions.
-.IP
-The argument to
-.BR getsockopt (2)
-is a pointer to a buffer of the specified length in bytes
-into which the security context string will be copied.
-If the buffer length is less than the length of the security
-context string, then
-.BR getsockopt (2)
-returns \-1, sets
-.I errno
-to
-.BR ERANGE ,
-and returns the required length via
-.IR optlen .
-The caller should allocate at least
-.B NAME_MAX
-bytes for the buffer initially, although this is not guaranteed
-to be sufficient.
-Resizing the buffer to the returned length
-and retrying may be necessary.
-.IP
-The security context string may include a terminating null character
-in the returned length, but is not guaranteed to do so: a security
-context "foo" might be represented as either {'f','o','o'} of length 3
-or {'f','o','o','\\0'} of length 4, which are considered to be
-interchangeable.
-The string is printable, does not contain non-terminating null characters,
-and is in an unspecified encoding (in particular, it
-is not guaranteed to be ASCII or UTF-8).
-.IP
-The use of this option for sockets in the
-.B AF_INET
-address family is supported since Linux 2.6.17
-.\" commit 2c7946a7bf45ae86736ab3b43d0085e43947945c
-for TCP sockets, and since Linux 4.17
-.\" commit d452930fd3b9031e59abfeddb2fa383f1403d61a
-for SCTP sockets.
-.IP
-For SELinux, NetLabel conveys only the MLS portion of the security
-context of the peer across the wire, defaulting the rest of the
-security context to the values defined in the policy for the
-netmsg initial security identifier (SID).
-However, NetLabel can
-be configured to pass full security contexts over loopback.
-Labeled IPSEC always passes full security contexts as part of establishing
-the security association (SA) and looks them up based on the association
-for each packet.
-.\"
-.SS /proc interfaces
-The IP protocol
-supports a set of
-.I /proc
-interfaces to configure some global parameters.
-The parameters can be accessed by reading or writing files in the directory
-.IR /proc/sys/net/ipv4/ .
-.\" FIXME As at 2.6.12, 14 Jun 2005, the following are undocumented:
-.\" ip_queue_maxlen
-.\" ip_conntrack_max
-Interfaces described as
-.I Boolean
-take an integer value, with a nonzero value ("true") meaning that
-the corresponding option is enabled, and a zero value ("false")
-meaning that the option is disabled.
-.\"
-.TP
-.IR ip_always_defrag " (Boolean; since Linux 2.2.13)"
-[New with Linux 2.2.13; in earlier kernel versions this feature
-was controlled at compile time by the
-.B CONFIG_IP_ALWAYS_DEFRAG
-option; this option is not present in Linux 2.4.x and later]
-.IP
-When this boolean flag is enabled (not equal 0), incoming fragments
-(parts of IP packets
-that arose when some host between origin and destination decided
-that the packets were too large and cut them into pieces) will be
-reassembled (defragmented) before being processed, even if they are
-about to be forwarded.
-.IP
-Enable only if running either a firewall that is the sole link
-to your network or a transparent proxy; never ever use it for a
-normal router or host.
-Otherwise, fragmented communication can be disturbed
-if the fragments travel over different links.
-Defragmentation also has a large memory and CPU time cost.
-.IP
-This is automagically turned on when masquerading or transparent
-proxying are configured.
-.\"
-.TP
-.IR ip_autoconfig " (since Linux 2.2 to Linux 2.6.17)"
-.\" Precisely: since Linux 2.1.68
-.\" FIXME document ip_autoconfig
-Not documented.
-.\"
-.TP
-.IR ip_default_ttl " (integer; default: 64; since Linux 2.2)"
-.\" Precisely: since Linux 2.1.15
-Set the default time-to-live value of outgoing packets.
-This can be changed per socket with the
-.B IP_TTL
-option.
-.\"
-.TP
-.IR ip_dynaddr " (Boolean; default: disabled; since Linux 2.0.31)"
-Enable dynamic socket address and masquerading entry rewriting on interface
-address change.
-This is useful for dialup interface with changing IP addresses.
-0 means no rewriting, 1 turns it on and 2 enables verbose mode.
-.\"
-.TP
-.IR ip_forward " (Boolean; default: disabled; since Linux 1.2)"
-Enable IP forwarding with a boolean flag.
-IP forwarding can be also set on a per-interface basis.
-.\"
-.TP
-.IR ip_local_port_range " (since Linux 2.2)"
-.\" Precisely: since Linux 2.1.68
-This file contains two integers that define the default local port range
-allocated to sockets that are not explicitly bound to a port number\[em]that
-is, the range used for
-.IR "ephemeral ports" .
-An ephemeral port is allocated to a socket in the following circumstances:
-.RS
-.IP \[bu] 3
-the port number in a socket address is specified as 0 when calling
-.BR bind (2);
-.IP \[bu]
-.BR listen (2)
-is called on a stream socket that was not previously bound;
-.IP \[bu]
-.BR connect (2)
-was called on a socket that was not previously bound;
-.IP \[bu]
-.BR sendto (2)
-is called on a datagram socket that was not previously bound.
-.RE
-.IP
-Allocation of ephemeral ports starts with the first number in
-.I ip_local_port_range
-and ends with the second number.
-If the range of ephemeral ports is exhausted,
-then the relevant system call returns an error (but see BUGS).
-.IP
-Note that the port range in
-.I ip_local_port_range
-should not conflict with the ports used by masquerading
-(although the case is handled).
-Also, arbitrary choices may cause problems with some firewall packet
-filters that make assumptions about the local ports in use.
-The first number should be at least greater than 1024,
-or better, greater than 4096, to avoid clashes
-with well known ports and to minimize firewall problems.
-.\"
-.TP
-.IR ip_no_pmtu_disc " (Boolean; default: disabled; since Linux 2.2)"
-.\" Precisely: 2.1.15
-If enabled, don't do Path MTU Discovery for TCP sockets by default.
-Path MTU discovery may fail if misconfigured firewalls (that drop
-all ICMP packets) or misconfigured interfaces (e.g., a point-to-point
-link where the both ends don't agree on the MTU) are on the path.
-It is better to fix the broken routers on the path than to turn off
-Path MTU Discovery globally, because not doing it incurs a high cost
-to the network.
-.\"
-.\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt
-.TP
-.IR ip_nonlocal_bind " (Boolean; default: disabled; since Linux 2.4)"
-.\" Precisely: patch-2.4.0-test10
-If set, allows processes to
-.BR bind (2)
-to nonlocal IP addresses,
-which can be quite useful, but may break some applications.
-.\"
-.\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt
-.TP
-.IR ip6frag_time " (integer; default: 30)"
-Time in seconds to keep an IPv6 fragment in memory.
-.\"
-.\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt
-.TP
-.IR ip6frag_secret_interval " (integer; default: 600)"
-Regeneration interval (in seconds) of the hash secret (or lifetime
-for the hash secret) for IPv6 fragments.
-.TP
-.IR ipfrag_high_thresh " (integer), " ipfrag_low_thresh " (integer)"
-If the amount of queued IP fragments reaches
-.IR ipfrag_high_thresh ,
-the queue is pruned down to
-.IR ipfrag_low_thresh .
-Contains an integer with the number of bytes.
-.TP
-.I neigh/*
-See
-.BR arp (7).
-.\" FIXME Document the conf/*/* interfaces
-.\"
-.\" FIXME Document the route/* interfaces
-.SS Ioctls
-All ioctls described in
-.BR socket (7)
-apply to
-.BR ip .
-.PP
-Ioctls to configure generic device parameters are described in
-.BR netdevice (7).
-.\" FIXME Add a discussion of multicasting
-.SH ERRORS
-.\" FIXME document all errors.
-.\" We should really fix the kernels to give more uniform
-.\" error returns (ENOMEM vs ENOBUFS, EPERM vs EACCES etc.)
-.TP
-.B EACCES
-The user tried to execute an operation without the necessary permissions.
-These include:
-sending a packet to a broadcast address without having the
-.B SO_BROADCAST
-flag set;
-sending a packet via a
-.I prohibit
-route;
-modifying firewall settings without superuser privileges (the
-.B CAP_NET_ADMIN
-capability);
-binding to a privileged port without superuser privileges (the
-.B CAP_NET_BIND_SERVICE
-capability).
-.TP
-.B EADDRINUSE
-Tried to bind to an address already in use.
-.TP
-.B EADDRNOTAVAIL
-A nonexistent interface was requested or the requested source
-address was not local.
-.TP
-.B EAGAIN
-Operation on a nonblocking socket would block.
-.TP
-.B EALREADY
-A connection operation on a nonblocking socket is already in progress.
-.TP
-.B ECONNABORTED
-A connection was closed during an
-.BR accept (2).
-.TP
-.B EHOSTUNREACH
-No valid routing table entry matches the destination address.
-This error can be caused by an ICMP message from a remote router or
-for the local routing table.
-.TP
-.B EINVAL
-Invalid argument passed.
-For send operations this can be caused by sending to a
-.I blackhole
-route.
-.TP
-.B EISCONN
-.BR connect (2)
-was called on an already connected socket.
-.TP
-.B EMSGSIZE
-Datagram is bigger than an MTU on the path and it cannot be fragmented.
-.TP
-.BR ENOBUFS ", " ENOMEM
-Not enough free memory.
-This often means that the memory allocation is limited by the socket
-buffer limits, not by the system memory, but this is not 100% consistent.
-.TP
-.B ENOENT
-.B SIOCGSTAMP
-was called on a socket where no packet arrived.
-.TP
-.B ENOPKG
-A kernel subsystem was not configured.
-.TP
-.BR ENOPROTOOPT " and " EOPNOTSUPP
-Invalid socket option passed.
-.TP
-.B ENOTCONN
-The operation is defined only on a connected socket, but the socket wasn't
-connected.
-.TP
-.B EPERM
-User doesn't have permission to set high priority, change configuration,
-or send signals to the requested process or group.
-.TP
-.B EPIPE
-The connection was unexpectedly closed or shut down by the other end.
-.TP
-.B ESOCKTNOSUPPORT
-The socket is not configured or an unknown socket type was requested.
-.PP
-Other errors may be generated by the overlaying protocols; see
-.BR tcp (7),
-.BR raw (7),
-.BR udp (7),
-and
-.BR socket (7).
-.SH NOTES
-.BR IP_FREEBIND ,
-.BR IP_MSFILTER ,
-.BR IP_MTU ,
-.BR IP_MTU_DISCOVER ,
-.BR IP_RECVORIGDSTADDR ,
-.BR IP_PASSSEC ,
-.BR IP_PKTINFO ,
-.BR IP_RECVERR ,
-.BR IP_ROUTER_ALERT ,
-and
-.B IP_TRANSPARENT
-are Linux-specific.
-.\" IP_XFRM_POLICY is Linux-specific
-.\" IP_IPSEC_POLICY is a nonstandard extension, also present on some BSDs
-.PP
-Be very careful with the
-.B SO_BROADCAST
-option \- it is not privileged in Linux.
-It is easy to overload the network
-with careless broadcasts.
-For new application protocols
-it is better to use a multicast group instead of broadcasting.
-Broadcasting is discouraged.
-See RFC 6762 for an example of a protocol (mDNS)
-using the more modern multicast approach
-to communicating with an open-ended
-group of hosts on the local network.
-.PP
-Some other BSD sockets implementations provide
-.B IP_RCVDSTADDR
-and
-.B IP_RECVIF
-socket options to get the destination address and the interface of
-received datagrams.
-Linux has the more general
-.B IP_PKTINFO
-for the same task.
-.PP
-Some BSD sockets implementations also provide an
-.B IP_RECVTTL
-option, but an ancillary message with type
-.B IP_RECVTTL
-is passed with the incoming packet.
-This is different from the
-.B IP_TTL
-option used in Linux.
-.PP
-Using the
-.B SOL_IP
-socket options level isn't portable; BSD-based stacks use the
-.B IPPROTO_IP
-level.
-.PP
-.B INADDR_ANY
-(0.0.0.0) and
-.B INADDR_BROADCAST
-(255.255.255.255) are byte-order-neutral.
-This means
-.BR htonl (3)
-has no effect on them.
-.SS Compatibility
-For compatibility with Linux 2.0, the obsolete
-.BI "socket(AF_INET, SOCK_PACKET, " protocol )
-syntax is still supported to open a
-.BR packet (7)
-socket.
-This is deprecated and should be replaced by
-.BI "socket(AF_PACKET, SOCK_RAW, " protocol )
-instead.
-The main difference is the new
-.I sockaddr_ll
-address structure for generic link layer information instead of the old
-.BR sockaddr_pkt .
-.SH BUGS
-There are too many inconsistent error values.
-.PP
-The error used to diagnose exhaustion of the ephemeral port range differs
-across the various system calls
-.RB ( connect (2),
-.BR bind (2),
-.BR listen (2),
-.BR sendto (2))
-that can assign ephemeral ports.
-.PP
-The ioctls to configure IP-specific interface options and ARP tables are
-not described.
-.\" .PP
-.\" Some versions of glibc forget to declare
-.\" .IR in_pktinfo .
-.\" Workaround currently is to copy it into your program from this man page.
-.PP
-Receiving the original destination address with
-.B MSG_ERRQUEUE
-in
-.I msg_name
-by
-.BR recvmsg (2)
-does not work in some Linux 2.2 kernels.
-.\" .SH AUTHORS
-.\" This man page was written by Andi Kleen.
-.SH SEE ALSO
-.BR recvmsg (2),
-.BR sendmsg (2),
-.BR byteorder (3),
-.BR capabilities (7),
-.BR icmp (7),
-.BR ipv6 (7),
-.BR netdevice (7),
-.BR netlink (7),
-.BR raw (7),
-.BR socket (7),
-.BR tcp (7),
-.BR udp (7),
-.BR ip (8)
-.PP
-The kernel source file
-.IR Documentation/networking/ip\-sysctl.txt .
-.PP
-RFC\ 791 for the original IP specification.
-RFC\ 1122 for the IPv4 host requirements.
-RFC\ 1812 for the IPv4 router requirements.
diff --git a/man7/ipc_namespaces.7 b/man7/ipc_namespaces.7
deleted file mode 100644
index ec670697b..000000000
--- a/man7/ipc_namespaces.7
+++ /dev/null
@@ -1,66 +0,0 @@
-.\" Copyright (c) 2019 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH ipc_namespaces 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ipc_namespaces \- overview of Linux IPC namespaces
-.SH DESCRIPTION
-IPC namespaces isolate certain IPC resources,
-namely, System V IPC objects (see
-.BR sysvipc (7))
-and (since Linux 2.6.30)
-.\" commit 7eafd7c74c3f2e67c27621b987b28397110d643f
-.\" https://lwn.net/Articles/312232/
-POSIX message queues (see
-.BR mq_overview (7)).
-The common characteristic of these IPC mechanisms is that IPC
-objects are identified by mechanisms other than filesystem
-pathnames.
-.PP
-Each IPC namespace has its own set of System V IPC identifiers and
-its own POSIX message queue filesystem.
-Objects created in an IPC namespace are visible to all other processes
-that are members of that namespace,
-but are not visible to processes in other IPC namespaces.
-.PP
-The following
-.I /proc
-interfaces are distinct in each IPC namespace:
-.IP \[bu] 3
-The POSIX message queue interfaces in
-.IR /proc/sys/fs/mqueue .
-.IP \[bu]
-The System V IPC interfaces in
-.IR /proc/sys/kernel ,
-namely:
-.IR msgmax ,
-.IR msgmnb ,
-.IR msgmni ,
-.IR sem ,
-.IR shmall ,
-.IR shmmax ,
-.IR shmmni ,
-and
-.IR shm_rmid_forced .
-.IP \[bu]
-The System V IPC interfaces in
-.IR /proc/sysvipc .
-.PP
-When an IPC namespace is destroyed
-(i.e., when the last process that is a member of the namespace terminates),
-all IPC objects in the namespace are automatically destroyed.
-.PP
-Use of IPC namespaces requires a kernel that is configured with the
-.B CONFIG_IPC_NS
-option.
-.SH SEE ALSO
-.BR nsenter (1),
-.BR unshare (1),
-.BR clone (2),
-.BR setns (2),
-.BR unshare (2),
-.BR mq_overview (7),
-.BR namespaces (7),
-.BR sysvipc (7)
diff --git a/man7/ipv6.7 b/man7/ipv6.7
deleted file mode 100644
index 223bf30ce..000000000
--- a/man7/ipv6.7
+++ /dev/null
@@ -1,422 +0,0 @@
-.\" This man page is Copyright (C) 2000 Andi Kleen <ak@muc.de>.
-.\"
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" $Id: ipv6.7,v 1.3 2000/12/20 18:10:31 ak Exp $
-.\"
-.\" The following socket options are undocumented
-.\" All of the following are from:
-.\" commit 333fad5364d6b457c8d837f7d05802d2aaf8a961
-.\" Author: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
-.\" Support several new sockopt / ancillary data in Advanced API (RFC3542).
-.\" IPV6_2292PKTINFO (2.6.14)
-.\" Formerly IPV6_PKTINFO
-.\" IPV6_2292HOPOPTS (2.6.14)
-.\" Formerly IPV6_HOPOPTS, which is documented
-.\" IPV6_2292DSTOPTS (2.6.14)
-.\" Formerly IPV6_DSTOPTS, which is documented
-.\" IPV6_2292RTHDR (2.6.14)
-.\" Formerly IPV6_RTHDR, which is documented
-.\" IPV6_2292PKTOPTIONS (2.6.14)
-.\" Formerly IPV6_PKTOPTIONS
-.\" IPV6_2292HOPLIMIT (2.6.14)
-.\" Formerly IPV6_HOPLIMIT, which is documented
-.\"
-.\" IPV6_RECVHOPLIMIT (2.6.14)
-.\" IPV6_RECVHOPOPTS (2.6.14)
-.\" IPV6_RTHDRDSTOPTS (2.6.14)
-.\" IPV6_RECVRTHDR (2.6.14)
-.\" IPV6_RECVDSTOPTS (2.6.14)
-.\"
-.\" IPV6_RECVPATHMTU (Linux 2.6.35, flag value added in Linux 2.6.14)
-.\" commit 793b14731686595a741d9f47726ad8b9a235385a
-.\" Author: Brian Haley <brian.haley@hp.com>
-.\" IPV6_PATHMTU (Linux 2.6.35, flag value added in Linux 2.6.14)
-.\" commit 793b14731686595a741d9f47726ad8b9a235385a
-.\" Author: Brian Haley <brian.haley@hp.com>
-.\" IPV6_DONTFRAG (Linux 2.6.35, flag value added in Linux 2.6.14)
-.\" commit 793b14731686595a741d9f47726ad8b9a235385a
-.\" Author: Brian Haley <brian.haley@hp.com>
-.\" commit 4b340ae20d0e2366792abe70f46629e576adaf5e
-.\" Author: Brian Haley <brian.haley@hp.com>
-.\"
-.\" IPV6_RECVTCLASS (Linux 2.6.14)
-.\" commit 41a1f8ea4fbfcdc4232f023732584aae2220de31
-.\" Author: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
-.\" Based on patch from David L Stevens <dlstevens@us.ibm.com>
-.\"
-.\" IPV6_CHECKSUM (Linux 2.2)
-.\" IPV6_NEXTHOP (Linux 2.2)
-.\" IPV6_JOIN_ANYCAST (Linux 2.4.21 / Linux 2.6)
-.\" IPV6_LEAVE_ANYCAST (Linux 2.4.21 / Linux 2.6)
-.\" IPV6_FLOWLABEL_MGR (Linux 2.2.7 / Linux 2.4)
-.\" IPV6_FLOWINFO_SEND (Linux 2.2.7 / Linux 2.4)
-.\" IPV6_IPSEC_POLICY (Linux 2.6)
-.\" IPV6_XFRM_POLICY (Linux 2.6)
-.\" IPV6_TCLASS (Linux 2.6)
-.\"
-.\" IPV6_ADDR_PREFERENCES (Linux 2.6.26)
-.\" commit 7cbca67c073263c179f605bdbbdc565ab29d801d
-.\" Author: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
-.\" IPV6_MINHOPCOUNT (Linux 2.6.35)
-.\" commit e802af9cabb011f09b9c19a82faef3dd315f27eb
-.\" Author: Stephen Hemminger <shemminger@vyatta.com>
-.\" IPV6_ORIGDSTADDR (Linux 2.6.37)
-.\" Actually a CMSG rather than a sockopt?
-.\" In header file, we have IPV6_RECVORIGDSTADDR == IPV6_ORIGDSTADDR
-.\" commit 6c46862280c5f55eda7750391bc65cd7e08c7535
-.\" Author: Balazs Scheidler <bazsi@balabit.hu>
-.\" IPV6_RECVORIGDSTADDR (Linux 2.6.37)
-.\" commit 6c46862280c5f55eda7750391bc65cd7e08c7535
-.\" Author: Balazs Scheidler <bazsi@balabit.hu>
-.\" Support for IPV6_RECVORIGDSTADDR sockopt for UDP sockets
-.\" were contributed by Harry Mason.
-.\" IPV6_TRANSPARENT (Linux 2.6.37)
-.\" commit 6c46862280c5f55eda7750391bc65cd7e08c7535
-.\" Author: Balazs Scheidler <bazsi@balabit.hu>
-.\" IPV6_UNICAST_IF (Linux 3.4)
-.\" commit c4062dfc425e94290ac427a98d6b4721dd2bc91f
-.\" Author: Erich E. Hoover <ehoover@mines.edu>
-.\"
-.TH ipv6 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ipv6 \- Linux IPv6 protocol implementation
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.B #include <netinet/in.h>
-.PP
-.IB tcp6_socket " = socket(AF_INET6, SOCK_STREAM, 0);"
-.IB raw6_socket " = socket(AF_INET6, SOCK_RAW, " protocol ");"
-.IB udp6_socket " = socket(AF_INET6, SOCK_DGRAM, " protocol ");"
-.fi
-.SH DESCRIPTION
-Linux 2.2 optionally implements the Internet Protocol, version 6.
-This man page contains a description of the IPv6 basic API as
-implemented by the Linux kernel and glibc 2.1.
-The interface
-is based on the BSD sockets interface; see
-.BR socket (7).
-.PP
-The IPv6 API aims to be mostly compatible with the
-IPv4 API (see
-.BR ip (7)).
-Only differences are described in this man page.
-.PP
-To bind an
-.B AF_INET6
-socket to any process, the local address should be copied from the
-.I in6addr_any
-variable which has
-.I in6_addr
-type.
-In static initializations,
-.B IN6ADDR_ANY_INIT
-may also be used, which expands to a constant expression.
-Both of them are in network byte order.
-.PP
-The IPv6 loopback address (::1) is available in the global
-.I in6addr_loopback
-variable.
-For initializations,
-.B IN6ADDR_LOOPBACK_INIT
-should be used.
-.PP
-IPv4 connections can be handled with the v6 API by using the
-v4-mapped-on-v6 address type;
-thus a program needs to support only this API type to
-support both protocols.
-This is handled transparently by the address
-handling functions in the C library.
-.PP
-IPv4 and IPv6 share the local port space.
-When you get an IPv4 connection
-or packet to an IPv6 socket,
-its source address will be mapped to v6.
-.SS Address format
-.in +4n
-.EX
-struct sockaddr_in6 {
- sa_family_t sin6_family; /* AF_INET6 */
- in_port_t sin6_port; /* port number */
- uint32_t sin6_flowinfo; /* IPv6 flow information */
- struct in6_addr sin6_addr; /* IPv6 address */
- uint32_t sin6_scope_id; /* Scope ID (new in Linux 2.4) */
-};
-\&
-struct in6_addr {
- unsigned char s6_addr[16]; /* IPv6 address */
-};
-.EE
-.in
-.PP
-.I sin6_family
-is always set to
-.BR AF_INET6 ;
-.I sin6_port
-is the protocol port (see
-.I sin_port
-in
-.BR ip (7));
-.I sin6_flowinfo
-is the IPv6 flow identifier;
-.I sin6_addr
-is the 128-bit IPv6 address.
-.I sin6_scope_id
-is an ID depending on the scope of the address.
-It is new in Linux 2.4.
-Linux supports it only for link-local addresses, in that case
-.I sin6_scope_id
-contains the interface index (see
-.BR netdevice (7))
-.PP
-IPv6 supports several address types: unicast to address a single
-host, multicast to address a group of hosts,
-anycast to address the nearest member of a group of hosts
-(not implemented in Linux), IPv4-on-IPv6 to
-address an IPv4 host, and other reserved address types.
-.PP
-The address notation for IPv6 is a group of 8 4-digit hexadecimal
-numbers, separated with a \[aq]:\[aq].
-\&"::" stands for a string of 0 bits.
-Special addresses are ::1 for loopback and ::FFFF:<IPv4 address>
-for IPv4-mapped-on-IPv6.
-.PP
-The port space of IPv6 is shared with IPv4.
-.SS Socket options
-IPv6 supports some protocol-specific socket options that can be set with
-.BR setsockopt (2)
-and read with
-.BR getsockopt (2).
-The socket option level for IPv6 is
-.BR IPPROTO_IPV6 .
-A boolean integer flag is zero when it is false, otherwise true.
-.TP
-.B IPV6_ADDRFORM
-Turn an
-.B AF_INET6
-socket into a socket of a different address family.
-Only
-.B AF_INET
-is currently supported for that.
-It is allowed only for IPv6 sockets
-that are connected and bound to a v4-mapped-on-v6 address.
-The argument is a pointer to an integer containing
-.BR AF_INET .
-This is useful to pass v4-mapped sockets as file descriptors to
-programs that don't know how to deal with the IPv6 API.
-.TP
-.B IPV6_ADD_MEMBERSHIP, IPV6_DROP_MEMBERSHIP
-Control membership in multicast groups.
-Argument is a pointer to a
-.IR "struct ipv6_mreq" .
-.TP
-.B IPV6_MTU
-.BR getsockopt ():
-Retrieve the current known path MTU of the current socket.
-Valid only when the socket has been connected.
-Returns an integer.
-.IP
-.BR setsockopt ():
-Set the MTU to be used for the socket.
-The MTU is limited by the device
-MTU or the path MTU when path MTU discovery is enabled.
-Argument is a pointer to integer.
-.TP
-.B IPV6_MTU_DISCOVER
-Control path-MTU discovery on the socket.
-See
-.B IP_MTU_DISCOVER
-in
-.BR ip (7)
-for details.
-.TP
-.B IPV6_MULTICAST_HOPS
-Set the multicast hop limit for the socket.
-Argument is a pointer to an
-integer.
-\-1 in the value means use the route default, otherwise it should be
-between 0 and 255.
-.TP
-.B IPV6_MULTICAST_IF
-Set the device for outgoing multicast packets on the socket.
-This is allowed only for
-.B SOCK_DGRAM
-and
-.B SOCK_RAW
-socket.
-The argument is a pointer to an interface index (see
-.BR netdevice (7))
-in an integer.
-.TP
-.B IPV6_MULTICAST_LOOP
-Control whether the socket sees multicast packets that it has send itself.
-Argument is a pointer to boolean.
-.TP
-.BR IPV6_RECVPKTINFO " (since Linux 2.6.14)"
-Set delivery of the
-.B IPV6_PKTINFO
-control message on incoming datagrams.
-Such control messages contain a
-.IR "struct in6_pktinfo" ,
-as per RFC 3542.
-Allowed only for
-.B SOCK_DGRAM
-or
-.B SOCK_RAW
-sockets.
-Argument is a pointer to a boolean value in an integer.
-.TP
-.nh
-.B IPV6_RTHDR, IPV6_AUTHHDR, IPV6_DSTOPTS, IPV6_HOPOPTS, IPV6_FLOWINFO, IPV6_HOPLIMIT
-.hy
-Set delivery of control messages for incoming datagrams containing
-extension headers from the received packet.
-.B IPV6_RTHDR
-delivers the routing header,
-.B IPV6_AUTHHDR
-delivers the authentication header,
-.B IPV6_DSTOPTS
-delivers the destination options,
-.B IPV6_HOPOPTS
-delivers the hop options,
-.B IPV6_FLOWINFO
-delivers an integer containing the flow ID,
-.B IPV6_HOPLIMIT
-delivers an integer containing the hop count of the packet.
-The control messages have the same type as the socket option.
-All these header options can also be set for outgoing packets
-by putting the appropriate control message into the control buffer of
-.BR sendmsg (2).
-Allowed only for
-.B SOCK_DGRAM
-or
-.B SOCK_RAW
-sockets.
-Argument is a pointer to a boolean value.
-.TP
-.B IPV6_RECVERR
-Control receiving of asynchronous error options.
-See
-.B IP_RECVERR
-in
-.BR ip (7)
-for details.
-Argument is a pointer to boolean.
-.TP
-.B IPV6_ROUTER_ALERT
-Pass forwarded packets containing a router alert hop-by-hop option to
-this socket.
-Allowed only for
-.B SOCK_RAW
-sockets.
-The tapped packets are not forwarded by the kernel, it is the
-user's responsibility to send them out again.
-Argument is a pointer to an integer.
-A positive integer indicates a router alert option value to intercept.
-Packets carrying a router alert option with a value field containing
-this integer will be delivered to the socket.
-A negative integer disables delivery of packets with router alert options
-to this socket.
-.TP
-.B IPV6_UNICAST_HOPS
-Set the unicast hop limit for the socket.
-Argument is a pointer to an integer.
-\-1 in the value means use the route default,
-otherwise it should be between 0 and 255.
-.TP
-.BR IPV6_V6ONLY " (since Linux 2.4.21 and 2.6)"
-.\" See RFC 3493
-If this flag is set to true (nonzero), then the socket is restricted
-to sending and receiving IPv6 packets only.
-In this case, an IPv4 and an IPv6 application can bind
-to a single port at the same time.
-.IP
-If this flag is set to false (zero),
-then the socket can be used to send and receive packets
-to and from an IPv6 address or an IPv4-mapped IPv6 address.
-.IP
-The argument is a pointer to a boolean value in an integer.
-.IP
-The default value for this flag is defined by the contents of the file
-.IR /proc/sys/net/ipv6/bindv6only .
-The default value for that file is 0 (false).
-.\" FLOWLABEL_MGR, FLOWINFO_SEND
-.SH ERRORS
-.TP
-.B ENODEV
-The user tried to
-.BR bind (2)
-to a link-local IPv6 address, but the
-.I sin6_scope_id
-in the supplied
-.I sockaddr_in6
-structure is not a valid
-interface index.
-.SH VERSIONS
-Linux 2.4 will break binary compatibility for the
-.I sockaddr_in6
-for 64-bit
-hosts by changing the alignment of
-.I in6_addr
-and adding an additional
-.I sin6_scope_id
-field.
-The kernel interfaces stay compatible, but a program including
-.I sockaddr_in6
-or
-.I in6_addr
-into other structures may not be.
-This is not
-a problem for 32-bit hosts like i386.
-.PP
-The
-.I sin6_flowinfo
-field is new in Linux 2.4.
-It is transparently passed/read by the kernel
-when the passed address length contains it.
-Some programs that pass a longer address buffer and then
-check the outgoing address length may break.
-.SH NOTES
-The
-.I sockaddr_in6
-structure is bigger than the generic
-.IR sockaddr .
-Programs that assume that all address types can be stored safely in a
-.I struct sockaddr
-need to be changed to use
-.I struct sockaddr_storage
-for that instead.
-.PP
-.BR SOL_IP ,
-.BR SOL_IPV6 ,
-.BR SOL_ICMPV6 ,
-and other
-.B SOL_*
-socket options are nonportable variants of
-.BR IPPROTO_* .
-See also
-.BR ip (7).
-.SH BUGS
-The IPv6 extended API as in RFC\ 2292 is currently only partly
-implemented;
-although the 2.2 kernel has near complete support for receiving options,
-the macros for generating IPv6 options are missing in glibc 2.1.
-.PP
-IPSec support for EH and AH headers is missing.
-.PP
-Flow label management is not complete and not documented here.
-.PP
-This man page is not complete.
-.SH SEE ALSO
-.BR cmsg (3),
-.BR ip (7)
-.PP
-RFC\ 2553: IPv6 BASIC API;
-Linux tries to be compliant to this.
-RFC\ 2460: IPv6 specification.
diff --git a/man7/iso-8859-1.7 b/man7/iso-8859-1.7
deleted file mode 100644
index 1969dfb2f..000000000
--- a/man7/iso-8859-1.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-1.7
diff --git a/man7/iso-8859-10.7 b/man7/iso-8859-10.7
deleted file mode 100644
index 9b4658f25..000000000
--- a/man7/iso-8859-10.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-10.7
diff --git a/man7/iso-8859-11.7 b/man7/iso-8859-11.7
deleted file mode 100644
index cbd4cfe7c..000000000
--- a/man7/iso-8859-11.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-11.7
diff --git a/man7/iso-8859-13.7 b/man7/iso-8859-13.7
deleted file mode 100644
index 8ad23352e..000000000
--- a/man7/iso-8859-13.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-13.7
diff --git a/man7/iso-8859-14.7 b/man7/iso-8859-14.7
deleted file mode 100644
index 4aa555db9..000000000
--- a/man7/iso-8859-14.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-14.7
diff --git a/man7/iso-8859-15.7 b/man7/iso-8859-15.7
deleted file mode 100644
index a4095d754..000000000
--- a/man7/iso-8859-15.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-15.7
diff --git a/man7/iso-8859-16.7 b/man7/iso-8859-16.7
deleted file mode 100644
index b9c8e9182..000000000
--- a/man7/iso-8859-16.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-16.7
diff --git a/man7/iso-8859-2.7 b/man7/iso-8859-2.7
deleted file mode 100644
index da36668dd..000000000
--- a/man7/iso-8859-2.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-2.7
diff --git a/man7/iso-8859-3.7 b/man7/iso-8859-3.7
deleted file mode 100644
index 75e42ce3d..000000000
--- a/man7/iso-8859-3.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-3.7
diff --git a/man7/iso-8859-4.7 b/man7/iso-8859-4.7
deleted file mode 100644
index 15a829eb3..000000000
--- a/man7/iso-8859-4.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-4.7
diff --git a/man7/iso-8859-5.7 b/man7/iso-8859-5.7
deleted file mode 100644
index 1f20320e7..000000000
--- a/man7/iso-8859-5.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-5.7
diff --git a/man7/iso-8859-6.7 b/man7/iso-8859-6.7
deleted file mode 100644
index edcafdf6e..000000000
--- a/man7/iso-8859-6.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-6.7
diff --git a/man7/iso-8859-7.7 b/man7/iso-8859-7.7
deleted file mode 100644
index 951384c99..000000000
--- a/man7/iso-8859-7.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-7.7
diff --git a/man7/iso-8859-8.7 b/man7/iso-8859-8.7
deleted file mode 100644
index 07cf21627..000000000
--- a/man7/iso-8859-8.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-8.7
diff --git a/man7/iso-8859-9.7 b/man7/iso-8859-9.7
deleted file mode 100644
index 0fcc7d463..000000000
--- a/man7/iso-8859-9.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-9.7
diff --git a/man7/iso_8859-1.7 b/man7/iso_8859-1.7
deleted file mode 100644
index 4bc40b595..000000000
--- a/man7/iso_8859-1.7
+++ /dev/null
@@ -1,150 +0,0 @@
-'\" t
-.\" Copyright 1993-1995 Daniel Quinlan (quinlan@yggdrasil.com)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Slightly rearranged, aeb, 950713
-.\" Updated, dpo, 990531
-.TH ISO_8859-1 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iso_8859-1 \- ISO 8859-1 character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The ISO 8859 standard includes several 8-bit extensions to the ASCII
-character set (also known as ISO 646-IRV).
-ISO 8859-1 encodes the
-characters used in many West European languages.
-.SS ISO 8859 alphabets
-The full set of ISO 8859 alphabets includes:
-.TS
-l l.
-ISO 8859-1 West European languages (Latin-1)
-ISO 8859-2 Central and East European languages (Latin-2)
-ISO 8859-3 Southeast European and miscellaneous languages (Latin-3)
-ISO 8859-4 Scandinavian/Baltic languages (Latin-4)
-ISO 8859-5 Latin/Cyrillic
-ISO 8859-6 Latin/Arabic
-ISO 8859-7 Latin/Greek
-ISO 8859-8 Latin/Hebrew
-ISO 8859-9 Latin-1 modification for Turkish (Latin-5)
-ISO 8859-10 Lappish/Nordic/Eskimo languages (Latin-6)
-ISO 8859-11 Latin/Thai
-ISO 8859-13 Baltic Rim languages (Latin-7)
-ISO 8859-14 Celtic (Latin-8)
-ISO 8859-15 West European languages (Latin-9)
-ISO 8859-16 Romanian (Latin-10)
-.TE
-.SS ISO 8859-1 characters
-The following table displays the characters in ISO 8859-1 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-240 160 A0   NO-BREAK SPACE
-241 161 A1 ¡ INVERTED EXCLAMATION MARK
-242 162 A2 ¢ CENT SIGN
-243 163 A3 £ POUND SIGN
-244 164 A4 ¤ CURRENCY SIGN
-245 165 A5 ¥ YEN SIGN
-246 166 A6 ¦ BROKEN BAR
-247 167 A7 § SECTION SIGN
-250 168 A8 ¨ DIAERESIS
-251 169 A9 © COPYRIGHT SIGN
-252 170 AA ª FEMININE ORDINAL INDICATOR
-253 171 AB « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-254 172 AC ¬ NOT SIGN
-255 173 AD ­ SOFT HYPHEN
-256 174 AE ® REGISTERED SIGN
-257 175 AF ¯ MACRON
-260 176 B0 ° DEGREE SIGN
-261 177 B1 ± PLUS-MINUS SIGN
-262 178 B2 ² SUPERSCRIPT TWO
-263 179 B3 ³ SUPERSCRIPT THREE
-264 180 B4 ´ ACUTE ACCENT
-265 181 B5 µ MICRO SIGN
-266 182 B6 ¶ PILCROW SIGN
-267 183 B7 · MIDDLE DOT
-270 184 B8 ¸ CEDILLA
-271 185 B9 ¹ SUPERSCRIPT ONE
-272 186 BA º MASCULINE ORDINAL INDICATOR
-273 187 BB » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-274 188 BC ¼ VULGAR FRACTION ONE QUARTER
-275 189 BD ½ VULGAR FRACTION ONE HALF
-276 190 BE ¾ VULGAR FRACTION THREE QUARTERS
-277 191 BF ¿ INVERTED QUESTION MARK
-300 192 C0 À LATIN CAPITAL LETTER A WITH GRAVE
-301 193 C1 Á LATIN CAPITAL LETTER A WITH ACUTE
-302 194 C2 Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-303 195 C3 Ã LATIN CAPITAL LETTER A WITH TILDE
-304 196 C4 Ä LATIN CAPITAL LETTER A WITH DIAERESIS
-305 197 C5 Å LATIN CAPITAL LETTER A WITH RING ABOVE
-306 198 C6 Æ LATIN CAPITAL LETTER AE
-307 199 C7 Ç LATIN CAPITAL LETTER C WITH CEDILLA
-310 200 C8 È LATIN CAPITAL LETTER E WITH GRAVE
-311 201 C9 É LATIN CAPITAL LETTER E WITH ACUTE
-312 202 CA Ê LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-313 203 CB Ë LATIN CAPITAL LETTER E WITH DIAERESIS
-314 204 CC Ì LATIN CAPITAL LETTER I WITH GRAVE
-315 205 CD Í LATIN CAPITAL LETTER I WITH ACUTE
-316 206 CE Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-317 207 CF Ï LATIN CAPITAL LETTER I WITH DIAERESIS
-320 208 D0 Ð LATIN CAPITAL LETTER ETH
-321 209 D1 Ñ LATIN CAPITAL LETTER N WITH TILDE
-322 210 D2 Ò LATIN CAPITAL LETTER O WITH GRAVE
-323 211 D3 Ó LATIN CAPITAL LETTER O WITH ACUTE
-324 212 D4 Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-325 213 D5 Õ LATIN CAPITAL LETTER O WITH TILDE
-326 214 D6 Ö LATIN CAPITAL LETTER O WITH DIAERESIS
-327 215 D7 × MULTIPLICATION SIGN
-330 216 D8 Ø LATIN CAPITAL LETTER O WITH STROKE
-331 217 D9 Ù LATIN CAPITAL LETTER U WITH GRAVE
-332 218 DA Ú LATIN CAPITAL LETTER U WITH ACUTE
-333 219 DB Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-334 220 DC Ü LATIN CAPITAL LETTER U WITH DIAERESIS
-335 221 DD Ý LATIN CAPITAL LETTER Y WITH ACUTE
-336 222 DE Þ LATIN CAPITAL LETTER THORN
-337 223 DF ß LATIN SMALL LETTER SHARP S
-340 224 E0 à LATIN SMALL LETTER A WITH GRAVE
-341 225 E1 á LATIN SMALL LETTER A WITH ACUTE
-342 226 E2 â LATIN SMALL LETTER A WITH CIRCUMFLEX
-343 227 E3 ã LATIN SMALL LETTER A WITH TILDE
-344 228 E4 ä LATIN SMALL LETTER A WITH DIAERESIS
-345 229 E5 å LATIN SMALL LETTER A WITH RING ABOVE
-346 230 E6 æ LATIN SMALL LETTER AE
-347 231 E7 ç LATIN SMALL LETTER C WITH CEDILLA
-350 232 E8 è LATIN SMALL LETTER E WITH GRAVE
-351 233 E9 é LATIN SMALL LETTER E WITH ACUTE
-352 234 EA ê LATIN SMALL LETTER E WITH CIRCUMFLEX
-353 235 EB ë LATIN SMALL LETTER E WITH DIAERESIS
-354 236 EC ì LATIN SMALL LETTER I WITH GRAVE
-355 237 ED í LATIN SMALL LETTER I WITH ACUTE
-356 238 EE î LATIN SMALL LETTER I WITH CIRCUMFLEX
-357 239 EF ï LATIN SMALL LETTER I WITH DIAERESIS
-360 240 F0 ð LATIN SMALL LETTER ETH
-361 241 F1 ñ LATIN SMALL LETTER N WITH TILDE
-362 242 F2 ò LATIN SMALL LETTER O WITH GRAVE
-363 243 F3 ó LATIN SMALL LETTER O WITH ACUTE
-364 244 F4 ô LATIN SMALL LETTER O WITH CIRCUMFLEX
-365 245 F5 õ LATIN SMALL LETTER O WITH TILDE
-366 246 F6 ö LATIN SMALL LETTER O WITH DIAERESIS
-367 247 F7 ÷ DIVISION SIGN
-370 248 F8 ø LATIN SMALL LETTER O WITH STROKE
-371 249 F9 ù LATIN SMALL LETTER U WITH GRAVE
-372 250 FA ú LATIN SMALL LETTER U WITH ACUTE
-373 251 FB û LATIN SMALL LETTER U WITH CIRCUMFLEX
-374 252 FC ü LATIN SMALL LETTER U WITH DIAERESIS
-375 253 FD ý LATIN SMALL LETTER Y WITH ACUTE
-376 254 FE þ LATIN SMALL LETTER THORN
-377 255 FF ÿ LATIN SMALL LETTER Y WITH DIAERESIS
-.TE
-.SH NOTES
-ISO 8859-1 is also known as Latin-1.
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR cp1252 (7),
-.BR iso_8859\-15 (7),
-.BR utf\-8 (7)
diff --git a/man7/iso_8859-10.7 b/man7/iso_8859-10.7
deleted file mode 100644
index 121733ee1..000000000
--- a/man7/iso_8859-10.7
+++ /dev/null
@@ -1,146 +0,0 @@
-'\" t
-.\" Copyright 2009 Lefteris Dimitroulakis (edimitro@tee.gr)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH ISO_8859-10 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iso_8859-10 \- ISO 8859-10 character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The ISO 8859 standard includes several 8-bit extensions to the ASCII
-character set (also known as ISO 646-IRV).
-ISO 8859-10 encodes the
-characters used in Nordic languages.
-.SS ISO 8859 alphabets
-The full set of ISO 8859 alphabets includes:
-.TS
-l l.
-ISO 8859-1 West European languages (Latin-1)
-ISO 8859-2 Central and East European languages (Latin-2)
-ISO 8859-3 Southeast European and miscellaneous languages (Latin-3)
-ISO 8859-4 Scandinavian/Baltic languages (Latin-4)
-ISO 8859-5 Latin/Cyrillic
-ISO 8859-6 Latin/Arabic
-ISO 8859-7 Latin/Greek
-ISO 8859-8 Latin/Hebrew
-ISO 8859-9 Latin-1 modification for Turkish (Latin-5)
-ISO 8859-10 Lappish/Nordic/Eskimo languages (Latin-6)
-ISO 8859-11 Latin/Thai
-ISO 8859-13 Baltic Rim languages (Latin-7)
-ISO 8859-14 Celtic (Latin-8)
-ISO 8859-15 West European languages (Latin-9)
-ISO 8859-16 Romanian (Latin-10)
-.TE
-.SS ISO 8859-10 characters
-The following table displays the characters in ISO 8859-10 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-240 160 A0   NO-BREAK SPACE
-241 161 A1 Ą LATIN CAPITAL LETTER A WITH OGONEK
-242 162 A2 Ē LATIN CAPITAL LETTER E WITH MACRON
-243 163 A3 Ģ LATIN CAPITAL LETTER G WITH CEDILLA
-244 164 A4 Ī LATIN CAPITAL LETTER I WITH MACRON
-245 165 A5 Ĩ LATIN CAPITAL LETTER I WITH TILDE
-246 166 A6 Ķ LATIN CAPITAL LETTER K WITH CEDILLA
-247 167 A7 § SECTION SIGN
-250 168 A8 Ļ LATIN CAPITAL LETTER L WITH CEDILLA
-251 169 A9 Đ LATIN CAPITAL LETTER D WITH STROKE
-252 170 AA Š LATIN CAPITAL LETTER S WITH CARON
-253 171 AB Ŧ LATIN CAPITAL LETTER T WITH STROKE
-254 172 AC Ž LATIN CAPITAL LETTER Z WITH CARON
-255 173 AD ­ SOFT HYPHEN
-256 174 AE Ū LATIN CAPITAL LETTER U WITH MACRON
-257 175 AF Ŋ LATIN CAPITAL LETTER ENG
-260 176 B0 ° DEGREE SIGN
-261 177 B1 ą LATIN SMALL LETTER A WITH OGONEK
-262 178 B2 ē LATIN SMALL LETTER E WITH MACRON
-263 179 B3 ģ LATIN SMALL LETTER G WITH CEDILLA
-264 180 B4 ī LATIN SMALL LETTER I WITH MACRON
-265 181 B5 ĩ LATIN SMALL LETTER I WITH TILDE
-266 182 B6 ķ LATIN SMALL LETTER K WITH CEDILLA
-267 183 B7 · MIDDLE DOT
-270 184 B8 ļ LATIN SMALL LETTER L WITH CEDILLA
-271 185 B9 đ LATIN SMALL LETTER D WITH STROKE
-272 186 BA š LATIN SMALL LETTER S WITH CARON
-273 187 BB ŧ LATIN SMALL LETTER T WITH STROKE
-274 188 BC ž LATIN SMALL LETTER Z WITH CARON
-275 189 BD ― HORIZONTAL BAR
-276 190 BE ū LATIN SMALL LETTER U WITH MACRON
-277 191 BF ŋ LATIN SMALL LETTER ENG
-300 192 C0 Ā LATIN CAPITAL LETTER A WITH MACRON
-301 193 C1 Á LATIN CAPITAL LETTER A WITH ACUTE
-302 194 C2 Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-303 195 C3 Ã LATIN CAPITAL LETTER A WITH TILDE
-304 196 C4 Ä LATIN CAPITAL LETTER A WITH DIAERESIS
-305 197 C5 Å LATIN CAPITAL LETTER A WITH RING ABOVE
-306 198 C6 Æ LATIN CAPITAL LETTER AE
-307 199 C7 Į LATIN CAPITAL LETTER I WITH OGONEK
-310 200 C8 Č LATIN CAPITAL LETTER C WITH CARON
-311 201 C9 É LATIN CAPITAL LETTER E WITH ACUTE
-312 202 CA Ę LATIN CAPITAL LETTER E WITH OGONEK
-312 202 CB Ë LATIN CAPITAL LETTER E WITH DIAERESIS
-314 204 CC Ė LATIN CAPITAL LETTER E WITH DOT ABOVE
-315 205 CD Í LATIN CAPITAL LETTER I WITH ACUTE
-316 206 CE Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-317 207 CF Ï LATIN CAPITAL LETTER I WITH DIAERESIS
-320 208 D0 Ð LATIN CAPITAL LETTER ETH
-321 209 D1 Ņ LATIN CAPITAL LETTER N WITH CEDILLA
-322 210 D2 Ō LATIN CAPITAL LETTER O WITH MACRON
-323 211 D3 Ó LATIN CAPITAL LETTER O WITH ACUTE
-324 212 D4 Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-325 213 D5 Õ LATIN CAPITAL LETTER O WITH TILDE
-326 214 D6 Ö LATIN CAPITAL LETTER O WITH DIAERESIS
-327 215 D7 Ũ LATIN CAPITAL LETTER U WITH TILDE
-330 216 D8 Ø LATIN CAPITAL LETTER O WITH STROKE
-331 217 D9 Ų LATIN CAPITAL LETTER U WITH OGONEK
-332 218 DA Ú LATIN CAPITAL LETTER U WITH ACUTE
-333 219 DB Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-334 220 DC Ü LATIN CAPITAL LETTER U WITH DIAERESIS
-335 221 DD Ý LATIN CAPITAL LETTER Y WITH ACUTE
-336 222 DE Þ LATIN CAPITAL LETTER THORN
-337 223 DF ß LATIN SMALL LETTER SHARP S
-340 224 E0 ā LATIN SMALL LETTER A WITH MACRON
-341 225 E1 á LATIN SMALL LETTER A WITH ACUTE
-342 226 E2 â LATIN SMALL LETTER A WITH CIRCUMFLEX
-343 227 E3 ã LATIN SMALL LETTER A WITH TILDE
-344 228 E4 ä LATIN SMALL LETTER A WITH DIAERESIS
-345 229 E5 å LATIN SMALL LETTER A WITH RING ABOVE
-346 230 E6 æ LATIN SMALL LETTER AE
-347 231 E7 į LATIN SMALL LETTER I WITH OGONEK
-350 232 E8 č LATIN SMALL LETTER C WITH CARON
-351 233 E9 é LATIN SMALL LETTER E WITH ACUTE
-352 234 EA ę LATIN SMALL LETTER E WITH OGONEK
-353 235 EB ë LATIN SMALL LETTER E WITH DIAERESIS
-354 236 EC ė LATIN SMALL LETTER E WITH DOT ABOVE
-355 237 ED í LATIN SMALL LETTER I WITH ACUTE
-356 238 EE î LATIN SMALL LETTER I WITH CIRCUMFLEX
-357 239 EF ï LATIN SMALL LETTER I WITH DIAERESIS
-360 240 F0 ð LATIN SMALL LETTER ETH
-361 241 F1 ņ LATIN SMALL LETTER N WITH CEDILLA
-362 242 F2 ō LATIN SMALL LETTER O WITH MACRON
-363 243 F3 ó LATIN SMALL LETTER O WITH ACUTE
-364 244 F4 ô LATIN SMALL LETTER O WITH CIRCUMFLEX
-365 245 F5 õ LATIN SMALL LETTER O WITH TILDE
-366 246 F6 ö LATIN SMALL LETTER O WITH DIAERESIS
-367 247 F7 ũ LATIN SMALL LETTER U WITH TILDE
-370 248 F8 ø LATIN SMALL LETTER O WITH STROKE
-371 249 F9 ų LATIN SMALL LETTER U WITH OGONEK
-372 250 FA ú LATIN SMALL LETTER U WITH ACUTE
-373 251 FB û LATIN SMALL LETTER U WITH CIRCUMFLEX
-374 252 FC ü LATIN SMALL LETTER U WITH DIAERESIS
-375 253 FD ý LATIN SMALL LETTER Y WITH ACUTE
-376 254 FE þ LATIN SMALL LETTER THORN
-377 255 FF ĸ LATIN SMALL LETTER KRA
-.TE
-.SH NOTES
-ISO 8859-10 is also known as Latin-6.
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR utf\-8 (7)
diff --git a/man7/iso_8859-11.7 b/man7/iso_8859-11.7
deleted file mode 100644
index 04ea19066..000000000
--- a/man7/iso_8859-11.7
+++ /dev/null
@@ -1,143 +0,0 @@
-'\" t
-.\" Copyright 2009 Lefteris Dimitroulakis <edimitro at tee.gr>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\"Thanomsub Noppaburana <donga.nb@gmail.com> made valuable suggestions.
-.\"
-.TH ISO_8859-11 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iso_8859-11 \- ISO 8859-11 character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The ISO 8859 standard includes several 8-bit extensions to the ASCII
-character set (also known as ISO 646-IRV).
-ISO 8859-11 encodes the
-characters used in the Thai language.
-.SS ISO 8859 alphabets
-The full set of ISO 8859 alphabets includes:
-.TS
-l l.
-ISO 8859-1 West European languages (Latin-1)
-ISO 8859-2 Central and East European languages (Latin-2)
-ISO 8859-3 Southeast European and miscellaneous languages (Latin-3)
-ISO 8859-4 Scandinavian/Baltic languages (Latin-4)
-ISO 8859-5 Latin/Cyrillic
-ISO 8859-6 Latin/Arabic
-ISO 8859-7 Latin/Greek
-ISO 8859-8 Latin/Hebrew
-ISO 8859-9 Latin-1 modification for Turkish (Latin-5)
-ISO 8859-10 Lappish/Nordic/Eskimo languages (Latin-6)
-ISO 8859-11 Latin/Thai
-ISO 8859-13 Baltic Rim languages (Latin-7)
-ISO 8859-14 Celtic (Latin-8)
-ISO 8859-15 West European languages (Latin-9)
-ISO 8859-16 Romanian (Latin-10)
-.TE
-.SS ISO 8859-11 characters
-The following table displays the characters in ISO 8859-11 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-240 160 A0   NO-BREAK SPACE
-241 161 A1 ก THAI CHARACTER KO KAI
-242 162 A2 ข THAI CHARACTER KHO KHAI
-243 163 A3 ฃ THAI CHARACTER KHO KHUAT
-244 164 A4 ค THAI CHARACTER KHO KHWAI
-245 165 A5 ฅ THAI CHARACTER KHO KHON
-246 166 A6 ฆ THAI CHARACTER KHO RAKHANG
-247 167 A7 ง THAI CHARACTER NGO NGU
-250 168 A8 จ THAI CHARACTER CHO CHAN
-251 169 A9 ฉ THAI CHARACTER CHO CHING
-252 170 AA ช THAI CHARACTER CHO CHANG
-253 171 AB ซ THAI CHARACTER SO SO
-254 172 AC ฌ THAI CHARACTER CHO CHOE
-255 173 AD ญ THAI CHARACTER YO YING
-256 174 AE ฎ THAI CHARACTER DO CHADA
-257 175 AF ฏ THAI CHARACTER TO PATAK
-260 176 B0 ฐ THAI CHARACTER THO THAN
-261 177 B1 ฑ THAI CHARACTER THO NANGMONTHO
-262 178 B2 ฒ THAI CHARACTER THO PHUTHAO
-263 179 B3 ณ THAI CHARACTER NO NEN
-264 180 B4 ด THAI CHARACTER DO DEK
-265 181 B5 ต THAI CHARACTER TO TAO
-266 182 B6 ถ THAI CHARACTER THO THUNG
-267 183 B7 ท THAI CHARACTER THO THAHAN
-270 184 B8 ธ THAI CHARACTER THO THONG
-271 185 B9 น THAI CHARACTER NO NU
-272 186 BA บ THAI CHARACTER BO BAIMAI
-273 187 BB ป THAI CHARACTER PO PLA
-274 188 BC ผ THAI CHARACTER PHO PHUNG
-275 189 BD ฝ THAI CHARACTER FO FA
-276 190 BE พ THAI CHARACTER PHO PHAN
-277 191 BF ฟ THAI CHARACTER FO FAN
-300 192 C0 ภ THAI CHARACTER PHO SAMPHAO
-301 193 C1 ม THAI CHARACTER MO MA
-302 194 C2 ย THAI CHARACTER YO YAK
-303 195 C3 ร THAI CHARACTER RO RUA
-304 196 C4 ฤ THAI CHARACTER RU
-305 197 C5 ล THAI CHARACTER LO LING
-306 198 C6 ฦ THAI CHARACTER LU
-307 199 C7 ว THAI CHARACTER WO WAEN
-310 200 C8 ศ THAI CHARACTER SO SALA
-311 201 C9 ษ THAI CHARACTER SO RUSI
-312 202 CA ส THAI CHARACTER SO SUA
-313 203 CB ห THAI CHARACTER HO HIP
-314 204 CC ฬ THAI CHARACTER LO CHULA
-315 205 CD อ THAI CHARACTER O ANG
-316 206 CE ฮ THAI CHARACTER HO NOKHUK
-317 207 CF ฯ THAI CHARACTER PAIYANNOI
-320 208 D0 ะ THAI CHARACTER SARA A
-321 209 D1 ั THAI CHARACTER MAI HAN-AKAT
-322 210 D2 า THAI CHARACTER SARA AA
-323 211 D3 ำ THAI CHARACTER SARA AM
-324 212 D4 ิ THAI CHARACTER SARA I
-325 213 D5 ี THAI CHARACTER SARA II
-326 214 D6 ึ THAI CHARACTER SARA UE
-327 215 D7 ื THAI CHARACTER SARA UEE
-330 216 D8 ุ THAI CHARACTER SARA U
-331 217 D9 ู THAI CHARACTER SARA UU
-332 218 DA ฺ THAI CHARACTER PHINTHU
-337 223 DF ฿ THAI CURRENCY SYMBOL BAHT
-340 224 E0 เ THAI CHARACTER SARA E
-341 225 E1 แ THAI CHARACTER SARA AE
-342 226 E2 โ THAI CHARACTER SARA O
-343 227 E3 ใ THAI CHARACTER SARA AI MAIMUAN
-344 228 E4 ไ THAI CHARACTER SARA AI MAIMALAI
-345 229 E5 ๅ THAI CHARACTER LAKKHANGYAO
-346 230 E6 ๆ THAI CHARACTER MAIYAMOK
-347 231 E7 ็ THAI CHARACTER MAITAIKHU
-350 232 E8 ่ THAI CHARACTER MAI EK
-351 233 E9 ้ THAI CHARACTER MAI THO
-352 234 EA ๊ THAI CHARACTER MAI TRI
-353 235 EB ๋ THAI CHARACTER MAI CHATTAWA
-354 236 EC ์ THAI CHARACTER THANTHAKHAT
-355 237 ED ํ THAI CHARACTER NIKHAHIT
-356 238 EE ๎ THAI CHARACTER YAMAKKAN
-357 239 EF ๏ THAI CHARACTER FONGMAN
-360 240 F0 ๐ THAI DIGIT ZERO
-361 241 F1 ๑ THAI DIGIT ONE
-362 242 F2 ๒ THAI DIGIT TWO
-363 243 F3 ๓ THAI DIGIT THREE
-364 244 F4 ๔ THAI DIGIT FOUR
-365 245 F5 ๕ THAI DIGIT FIVE
-366 246 F6 ๖ THAI DIGIT SIX
-367 247 F7 ๗ THAI DIGIT SEVEN
-370 248 F8 ๘ THAI DIGIT EIGHT
-371 249 F9 ๙ THAI DIGIT NINE
-372 250 FA ๚ THAI CHARACTER ANGKHANKHU
-373 251 FB ๛ THAI CHARACTER KHOMUT
-.TE
-.SH NOTES
-ISO 8859-11 is the same as TIS (Thai Industrial Standard) 620-2253,
-commonly known as TIS-620, except for the character in position A0:
-ISO 8859-11 defines this as NO-BREAK SPACE,
-while TIS-620 leaves it undefined.
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR utf\-8 (7)
diff --git a/man7/iso_8859-13.7 b/man7/iso_8859-13.7
deleted file mode 100644
index 8d567db09..000000000
--- a/man7/iso_8859-13.7
+++ /dev/null
@@ -1,146 +0,0 @@
-'\" t
-.\" Copyright 2009 Lefteris Dimitroulakis (edimitro@tee.gr)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH ISO_8859-13 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iso_8859-13 \- ISO 8859-13 character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The ISO 8859 standard includes several 8-bit extensions to the ASCII
-character set (also known as ISO 646-IRV).
-ISO 8859-13 encodes the
-characters used in Baltic Rim languages.
-.SS ISO 8859 alphabets
-The full set of ISO 8859 alphabets includes:
-.TS
-l l.
-ISO 8859-1 West European languages (Latin-1)
-ISO 8859-2 Central and East European languages (Latin-2)
-ISO 8859-3 Southeast European and miscellaneous languages (Latin-3)
-ISO 8859-4 Scandinavian/Baltic languages (Latin-4)
-ISO 8859-5 Latin/Cyrillic
-ISO 8859-6 Latin/Arabic
-ISO 8859-7 Latin/Greek
-ISO 8859-8 Latin/Hebrew
-ISO 8859-9 Latin-1 modification for Turkish (Latin-5)
-ISO 8859-10 Lappish/Nordic/Eskimo languages (Latin-6)
-ISO 8859-11 Latin/Thai
-ISO 8859-13 Baltic Rim languages (Latin-7)
-ISO 8859-14 Celtic (Latin-8)
-ISO 8859-15 West European languages (Latin-9)
-ISO 8859-16 Romanian (Latin-10)
-.TE
-.SS ISO 8859-13 characters
-The following table displays the characters in ISO 8859-13 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-240 160 A0   NO-BREAK SPACE
-241 161 A1 ” RIGHT DOUBLE QUOTATION MARK
-242 162 A2 ¢ CENT SIGN
-243 163 A3 £ POUND SIGN
-244 164 A4 ¤ CURRENCY SIGN
-245 165 A5 „ DOUBLE LOW-9 QUOTATION MARK
-246 166 A6 ¦ BROKEN BAR
-247 167 A7 § SECTION SIGN
-250 168 A8 Ø LATIN CAPITAL LETTER O WITH STROKE
-251 169 A9 © COPYRIGHT SIGN
-252 170 AA Ŗ LATIN CAPITAL LETTER R WITH CEDILLA
-253 171 AB « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-254 172 AC ¬ NOT SIGN
-255 173 AD ­ SOFT HYPHEN
-256 174 AE ® REGISTERED SIGN
-257 175 AF Æ LATIN CAPITAL LETTER AE
-260 176 B0 ° DEGREE SIGN
-261 177 B1 ± PLUS-MINUS SIGN
-262 178 B2 ² SUPERSCRIPT TWO
-263 179 B3 ³ SUPERSCRIPT THREE
-264 180 B4 “ LEFT DOUBLE QUOTATION MARK
-265 181 B5 µ MICRO SIGN
-266 182 B6 ¶ PILCROW SIGN
-267 183 B7 · MIDDLE DOT
-270 184 B8 ø LATIN SMALL LETTER O WITH STROKE
-271 185 B9 ¹ SUPERSCRIPT ONE
-272 186 BA ŗ LATIN SMALL LETTER R WITH CEDILLA
-273 187 BB » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-274 188 BC ¼ VULGAR FRACTION ONE QUARTER
-275 189 BD ½ VULGAR FRACTION ONE HALF
-276 190 BE ¾ VULGAR FRACTION THREE QUARTERS
-277 191 BF æ LATIN SMALL LETTER AE
-300 192 C0 Ą LATIN CAPITAL LETTER A WITH OGONEK
-301 193 C1 Į LATIN CAPITAL LETTER I WITH OGONEK
-302 194 C2 Ā LATIN CAPITAL LETTER A WITH MACRON
-303 195 C3 Ć LATIN CAPITAL LETTER C WITH ACUTE
-304 196 C4 Ä LATIN CAPITAL LETTER A WITH DIAERESIS
-305 197 C5 Å LATIN CAPITAL LETTER A WITH RING ABOVE
-306 198 C6 Ę LATIN CAPITAL LETTER E WITH OGONEK
-307 199 C7 Ē LATIN CAPITAL LETTER E WITH MACRON
-310 200 C8 Č LATIN CAPITAL LETTER C WITH CARON
-311 201 C9 É LATIN CAPITAL LETTER E WITH ACUTE
-312 202 CA Ź LATIN CAPITAL LETTER Z WITH ACUTE
-313 203 CB Ė LATIN CAPITAL LETTER E WITH DOT ABOVE
-314 204 CC Ģ LATIN CAPITAL LETTER G WITH CEDILLA
-315 205 CD Ķ LATIN CAPITAL LETTER K WITH CEDILLA
-316 206 CE Ī LATIN CAPITAL LETTER I WITH MACRON
-317 207 CF Ļ LATIN CAPITAL LETTER L WITH CEDILLA
-320 208 D0 Š LATIN CAPITAL LETTER S WITH CARON
-321 209 D1 Ń LATIN CAPITAL LETTER N WITH ACUTE
-322 210 D2 Ņ LATIN CAPITAL LETTER N WITH CEDILLA
-323 211 D3 Ó LATIN CAPITAL LETTER O WITH ACUTE
-324 212 D4 Ō LATIN CAPITAL LETTER O WITH MACRON
-325 213 D5 Õ LATIN CAPITAL LETTER O WITH TILDE
-326 214 D6 Ö LATIN CAPITAL LETTER O WITH DIAERESIS
-327 215 D7 × MULTIPLICATION SIGN
-330 216 D8 Ų LATIN CAPITAL LETTER U WITH OGONEK
-331 217 D9 Ł LATIN CAPITAL LETTER L WITH STROKE
-332 218 DA Ś LATIN CAPITAL LETTER S WITH ACUTE
-333 219 DB Ū LATIN CAPITAL LETTER U WITH MACRON
-334 220 DC Ü LATIN CAPITAL LETTER U WITH DIAERESIS
-335 221 DD Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE
-336 222 DE Ž LATIN CAPITAL LETTER Z WITH CARON
-337 223 DF ß LATIN SMALL LETTER SHARP S
-340 224 E0 ą LATIN SMALL LETTER A WITH OGONEK
-341 225 E1 į LATIN SMALL LETTER I WITH OGONEK
-342 226 E2 ā LATIN SMALL LETTER A WITH MACRON
-343 227 E3 ć LATIN SMALL LETTER C WITH ACUTE
-344 228 E4 ä LATIN SMALL LETTER A WITH DIAERESIS
-345 229 E5 å LATIN SMALL LETTER A WITH RING ABOVE
-346 230 E6 ę LATIN SMALL LETTER E WITH OGONEK
-347 231 E7 ē LATIN SMALL LETTER E WITH MACRON
-350 232 E8 č LATIN SMALL LETTER C WITH CARON
-351 233 E9 é LATIN SMALL LETTER E WITH ACUTE
-352 234 EA ź LATIN SMALL LETTER Z WITH ACUTE
-353 235 EB ė LATIN SMALL LETTER E WITH DOT ABOVE
-354 236 EC ģ LATIN SMALL LETTER G WITH CEDILLA
-355 237 ED ķ LATIN SMALL LETTER K WITH CEDILLA
-356 238 EE ī LATIN SMALL LETTER I WITH MACRON
-357 239 EF ļ LATIN SMALL LETTER L WITH CEDILLA
-360 240 F0 š LATIN SMALL LETTER S WITH CARON
-361 241 F1 ń LATIN SMALL LETTER N WITH ACUTE
-362 242 F2 ņ LATIN SMALL LETTER N WITH CEDILLA
-363 243 F3 ó LATIN SMALL LETTER O WITH ACUTE
-364 244 F4 ō LATIN SMALL LETTER O WITH MACRON
-365 245 F5 õ LATIN SMALL LETTER O WITH TILDE
-366 246 F6 ö LATIN SMALL LETTER O WITH DIAERESIS
-367 247 F7 ÷ DIVISION SIGN
-370 248 F8 ų LATIN SMALL LETTER U WITH OGONEK
-371 249 F9 ł LATIN SMALL LETTER L WITH STROKE
-372 250 FA ś LATIN SMALL LETTER S WITH ACUTE
-373 251 FB ū LATIN SMALL LETTER U WITH MACRON
-374 252 FC ü LATIN SMALL LETTER U WITH DIAERESIS
-375 253 FD ż LATIN SMALL LETTER Z WITH DOT ABOVE
-376 254 FE ž LATIN SMALL LETTER Z WITH CARON
-377 255 FF ’ RIGHT SINGLE QUOTATION MARK
-.TE
-.SH NOTES
-ISO 8859-13 is also known as Latin-7.
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR utf\-8 (7)
diff --git a/man7/iso_8859-14.7 b/man7/iso_8859-14.7
deleted file mode 100644
index e10d1a4bf..000000000
--- a/man7/iso_8859-14.7
+++ /dev/null
@@ -1,146 +0,0 @@
-'\" t
-.\" Copyright 2009 Lefteris Dimitroulakis (edimitro@tee.gr)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH ISO_8859-14 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iso_8859-14 \- ISO 8859-14 character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The ISO 8859 standard includes several 8-bit extensions to the ASCII
-character set (also known as ISO 646-IRV).
-ISO 8859-14 encodes the
-characters used in Celtic languages.
-.SS ISO 8859 alphabets
-The full set of ISO 8859 alphabets includes:
-.TS
-l l.
-ISO 8859-1 West European languages (Latin-1)
-ISO 8859-2 Central and East European languages (Latin-2)
-ISO 8859-3 Southeast European and miscellaneous languages (Latin-3)
-ISO 8859-4 Scandinavian/Baltic languages (Latin-4)
-ISO 8859-5 Latin/Cyrillic
-ISO 8859-6 Latin/Arabic
-ISO 8859-7 Latin/Greek
-ISO 8859-8 Latin/Hebrew
-ISO 8859-9 Latin-1 modification for Turkish (Latin-5)
-ISO 8859-10 Lappish/Nordic/Eskimo languages (Latin-6)
-ISO 8859-11 Latin/Thai
-ISO 8859-13 Baltic Rim languages (Latin-7)
-ISO 8859-14 Celtic (Latin-8)
-ISO 8859-15 West European languages (Latin-9)
-ISO 8859-16 Romanian (Latin-10)
-.TE
-.SS ISO 8859-14 characters
-The following table displays the characters in ISO 8859-14 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-240 160 A0   NO-BREAK SPACE
-241 161 A1 Ḃ LATIN CAPITAL LETTER B WITH DOT ABOVE
-242 162 A2 ḃ LATIN SMALL LETTER B WITH DOT ABOVE
-243 163 A3 £ POUND SIGN
-244 164 A4 Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE
-245 165 A5 ċ LATIN SMALL LETTER C WITH DOT ABOVE
-246 166 A6 Ḋ LATIN CAPITAL LETTER D WITH DOT ABOVE
-247 167 A7 § SECTION SIGN
-250 168 A8 Ẁ LATIN CAPITAL LETTER W WITH GRAVE
-251 169 A9 © COPYRIGHT SIGN
-252 170 AA Ẃ LATIN CAPITAL LETTER W WITH ACUTE
-253 171 AB ḋ LATIN SMALL LETTER D WITH DOT ABOVE
-254 172 AC Ỳ LATIN CAPITAL LETTER Y WITH GRAVE
-255 173 AD ­ SOFT HYPHEN
-256 174 AE ® REGISTERED SIGN
-257 175 AF Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS
-260 176 B0 Ḟ LATIN CAPITAL LETTER F WITH DOT ABOVE
-261 177 B1 ḟ LATIN SMALL LETTER F WITH DOT ABOVE
-262 178 B2 Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE
-263 179 B3 ġ LATIN SMALL LETTER G WITH DOT ABOVE
-264 180 B4 Ṁ LATIN CAPITAL LETTER M WITH DOT ABOVE
-265 181 B5 ṁ LATIN SMALL LETTER M WITH DOT ABOVE
-266 182 B6 ¶ PILCROW SIGN
-267 183 B7 Ṗ LATIN CAPITAL LETTER P WITH DOT ABOVE
-270 184 B8 ẁ LATIN SMALL LETTER W WITH GRAVE
-271 185 B9 ṗ LATIN SMALL LETTER P WITH DOT ABOVE
-272 186 BA ẃ LATIN SMALL LETTER W WITH ACUTE
-273 187 BB Ṡ LATIN CAPITAL LETTER S WITH DOT ABOVE
-274 188 BC ỳ LATIN SMALL LETTER Y WITH GRAVE
-275 189 BD Ẅ LATIN CAPITAL LETTER W WITH DIAERESIS
-276 190 BE ẅ LATIN SMALL LETTER W WITH DIAERESIS
-277 191 BF ṡ LATIN SMALL LETTER S WITH DOT ABOVE
-300 192 C0 À LATIN CAPITAL LETTER A WITH GRAVE
-301 193 C1 Á LATIN CAPITAL LETTER A WITH ACUTE
-302 194 C2 Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-303 195 C3 Ã LATIN CAPITAL LETTER A WITH TILDE
-304 196 C4 Ä LATIN CAPITAL LETTER A WITH DIAERESIS
-305 197 C5 Å LATIN CAPITAL LETTER A WITH RING ABOVE
-306 198 C6 Æ LATIN CAPITAL LETTER AE
-307 199 C7 Ç LATIN CAPITAL LETTER C WITH CEDILLA
-310 200 C8 È LATIN CAPITAL LETTER E WITH GRAVE
-311 201 C9 É LATIN CAPITAL LETTER E WITH ACUTE
-312 202 CA Ê LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-313 203 CB Ë LATIN CAPITAL LETTER E WITH DIAERESIS
-314 204 CC Ì LATIN CAPITAL LETTER I WITH GRAVE
-315 205 CD Í LATIN CAPITAL LETTER I WITH ACUTE
-316 206 CE Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-317 207 CF Ï LATIN CAPITAL LETTER I WITH DIAERESIS
-320 208 D0 Ŵ LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-321 209 D1 Ñ LATIN CAPITAL LETTER N WITH TILDE
-322 210 D2 Ò LATIN CAPITAL LETTER O WITH GRAVE
-323 211 D3 Ó LATIN CAPITAL LETTER O WITH ACUTE
-324 212 D4 Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-325 213 D5 Õ LATIN CAPITAL LETTER O WITH TILDE
-326 214 D6 Ö LATIN CAPITAL LETTER O WITH DIAERESIS
-327 215 D7 Ṫ LATIN CAPITAL LETTER T WITH DOT ABOVE
-330 216 D8 Ø LATIN CAPITAL LETTER O WITH STROKE
-331 217 D9 Ù LATIN CAPITAL LETTER U WITH GRAVE
-332 218 DA Ú LATIN CAPITAL LETTER U WITH ACUTE
-333 219 DB Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-334 220 DC Ü LATIN CAPITAL LETTER U WITH DIAERESIS
-335 221 DD Ý LATIN CAPITAL LETTER Y WITH ACUTE
-336 222 DE Ŷ LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
-337 223 DF ß LATIN SMALL LETTER SHARP S
-340 224 E0 à LATIN SMALL LETTER A WITH GRAVE
-341 225 E1 á LATIN SMALL LETTER A WITH ACUTE
-342 226 E2 â LATIN SMALL LETTER A WITH CIRCUMFLEX
-343 227 E3 ã LATIN SMALL LETTER A WITH TILDE
-344 228 E4 ä LATIN SMALL LETTER A WITH DIAERESIS
-345 229 E5 å LATIN SMALL LETTER A WITH RING ABOVE
-346 230 E6 æ LATIN SMALL LETTER AE
-347 231 E7 ç LATIN SMALL LETTER C WITH CEDILLA
-350 232 E8 è LATIN SMALL LETTER E WITH GRAVE
-351 233 E9 é LATIN SMALL LETTER E WITH ACUTE
-352 234 EA ê LATIN SMALL LETTER E WITH CIRCUMFLEX
-353 235 EB ë LATIN SMALL LETTER E WITH DIAERESIS
-354 236 EC ì LATIN SMALL LETTER I WITH GRAVE
-355 237 ED í LATIN SMALL LETTER I WITH ACUTE
-356 238 EE î LATIN SMALL LETTER I WITH CIRCUMFLEX
-357 239 EF ï LATIN SMALL LETTER I WITH DIAERESIS
-360 240 F0 ŵ LATIN SMALL LETTER W WITH CIRCUMFLEX
-361 241 F1 ñ LATIN SMALL LETTER N WITH TILDE
-362 242 F2 ò LATIN SMALL LETTER O WITH GRAVE
-363 243 F3 ó LATIN SMALL LETTER O WITH ACUTE
-364 244 F4 ô LATIN SMALL LETTER O WITH CIRCUMFLEX
-365 245 F5 õ LATIN SMALL LETTER O WITH TILDE
-366 246 F6 ö LATIN SMALL LETTER O WITH DIAERESIS
-367 247 F7 ṫ LATIN SMALL LETTER T WITH DOT ABOVE
-370 248 F8 ø LATIN SMALL LETTER O WITH STROKE
-371 249 F9 ù LATIN SMALL LETTER U WITH GRAVE
-372 250 FA ú LATIN SMALL LETTER U WITH ACUTE
-373 251 FB û LATIN SMALL LETTER U WITH CIRCUMFLEX
-374 252 FC ü LATIN SMALL LETTER U WITH DIAERESIS
-375 253 FD ý LATIN SMALL LETTER Y WITH ACUTE
-376 254 FE ŷ LATIN SMALL LETTER Y WITH CIRCUMFLEX
-377 255 FF ÿ LATIN SMALL LETTER Y WITH DIAERESIS
-.TE
-.SH NOTES
-ISO 8859-14 is also known as Latin-8.
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR utf\-8 (7)
diff --git a/man7/iso_8859-15.7 b/man7/iso_8859-15.7
deleted file mode 100644
index 56e9b4ff6..000000000
--- a/man7/iso_8859-15.7
+++ /dev/null
@@ -1,149 +0,0 @@
-'\" t
-.\" Copyright 1993-1995 Daniel Quinlan (quinlan@yggdrasil.com)
-.\" Copyright 1999 Dimitri Papadopoulos (dpo@club-internet.fr)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH ISO_8859-15 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iso_8859-15 \- ISO 8859-15 character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The ISO 8859 standard includes several 8-bit extensions to the ASCII
-character set (also known as ISO 646-IRV).
-ISO 8859-15 encodes the
-characters used in many West European languages and adds the Euro sign.
-.SS ISO 8859 alphabets
-The full set of ISO 8859 alphabets includes:
-.TS
-l l.
-ISO 8859-1 West European languages (Latin-1)
-ISO 8859-2 Central and East European languages (Latin-2)
-ISO 8859-3 Southeast European and miscellaneous languages (Latin-3)
-ISO 8859-4 Scandinavian/Baltic languages (Latin-4)
-ISO 8859-5 Latin/Cyrillic
-ISO 8859-6 Latin/Arabic
-ISO 8859-7 Latin/Greek
-ISO 8859-8 Latin/Hebrew
-ISO 8859-9 Latin-1 modification for Turkish (Latin-5)
-ISO 8859-10 Lappish/Nordic/Eskimo languages (Latin-6)
-ISO 8859-11 Latin/Thai
-ISO 8859-13 Baltic Rim languages (Latin-7)
-ISO 8859-14 Celtic (Latin-8)
-ISO 8859-15 West European languages (Latin-9)
-ISO 8859-16 Romanian (Latin-10)
-.TE
-.SS ISO 8859-15 characters
-The following table displays the characters in ISO 8859-15 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-240 160 A0   NO-BREAK SPACE
-241 161 A1 ¡ INVERTED EXCLAMATION MARK
-242 162 A2 ¢ CENT SIGN
-243 163 A3 £ POUND SIGN
-244 164 A4 € EURO SIGN
-245 165 A5 ¥ YEN SIGN
-246 166 A6 Š LATIN CAPITAL LETTER S WITH CARON
-247 167 A7 § SECTION SIGN
-250 168 A8 š LATIN SMALL LETTER S WITH CARON
-251 169 A9 © COPYRIGHT SIGN
-252 170 AA ª FEMININE ORDINAL INDICATOR
-253 171 AB « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-254 172 AC ¬ NOT SIGN
-255 173 AD ­ SOFT HYPHEN
-256 174 AE ® REGISTERED SIGN
-257 175 AF ¯ MACRON
-260 176 B0 ° DEGREE SIGN
-261 177 B1 ± PLUS-MINUS SIGN
-262 178 B2 ² SUPERSCRIPT TWO
-263 179 B3 ³ SUPERSCRIPT THREE
-264 180 B4 Ž LATIN CAPITAL LETTER Z WITH CARON
-265 181 B5 µ MICRO SIGN
-266 182 B6 ¶ PILCROW SIGN
-267 183 B7 · MIDDLE DOT
-270 184 B8 ž LATIN SMALL LETTER Z WITH CARON
-271 185 B9 ¹ SUPERSCRIPT ONE
-272 186 BA º MASCULINE ORDINAL INDICATOR
-273 187 BB » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-274 188 BC ΠLATIN CAPITAL LIGATURE OE
-275 189 BD œ LATIN SMALL LIGATURE OE
-276 190 BE Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS
-277 191 BF ¿ INVERTED QUESTION MARK
-300 192 C0 À LATIN CAPITAL LETTER A WITH GRAVE
-301 193 C1 Á LATIN CAPITAL LETTER A WITH ACUTE
-302 194 C2 Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-303 195 C3 Ã LATIN CAPITAL LETTER A WITH TILDE
-304 196 C4 Ä LATIN CAPITAL LETTER A WITH DIAERESIS
-305 197 C5 Å LATIN CAPITAL LETTER A WITH RING ABOVE
-306 198 C6 Æ LATIN CAPITAL LETTER AE
-307 199 C7 Ç LATIN CAPITAL LETTER C WITH CEDILLA
-310 200 C8 È LATIN CAPITAL LETTER E WITH GRAVE
-311 201 C9 É LATIN CAPITAL LETTER E WITH ACUTE
-312 202 CA Ê LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-313 203 CB Ë LATIN CAPITAL LETTER E WITH DIAERESIS
-314 204 CC Ì LATIN CAPITAL LETTER I WITH GRAVE
-315 205 CD Í LATIN CAPITAL LETTER I WITH ACUTE
-316 206 CE Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-317 207 CF Ï LATIN CAPITAL LETTER I WITH DIAERESIS
-320 208 D0 Ð LATIN CAPITAL LETTER ETH
-321 209 D1 Ñ LATIN CAPITAL LETTER N WITH TILDE
-322 210 D2 Ò LATIN CAPITAL LETTER O WITH GRAVE
-323 211 D3 Ó LATIN CAPITAL LETTER O WITH ACUTE
-324 212 D4 Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-325 213 D5 Õ LATIN CAPITAL LETTER O WITH TILDE
-326 214 D6 Ö LATIN CAPITAL LETTER O WITH DIAERESIS
-327 215 D7 × MULTIPLICATION SIGN
-330 216 D8 Ø LATIN CAPITAL LETTER O WITH STROKE
-331 217 D9 Ù LATIN CAPITAL LETTER U WITH GRAVE
-332 218 DA Ú LATIN CAPITAL LETTER U WITH ACUTE
-333 219 DB Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-334 220 DC Ü LATIN CAPITAL LETTER U WITH DIAERESIS
-335 221 DD Ý LATIN CAPITAL LETTER Y WITH ACUTE
-336 222 DE Þ LATIN CAPITAL LETTER THORN
-337 223 DF ß LATIN SMALL LETTER SHARP S
-340 224 E0 à LATIN SMALL LETTER A WITH GRAVE
-341 225 E1 á LATIN SMALL LETTER A WITH ACUTE
-342 226 E2 â LATIN SMALL LETTER A WITH CIRCUMFLEX
-343 227 E3 ã LATIN SMALL LETTER A WITH TILDE
-344 228 E4 ä LATIN SMALL LETTER A WITH DIAERESIS
-345 229 E5 å LATIN SMALL LETTER A WITH RING ABOVE
-346 230 E6 æ LATIN SMALL LETTER AE
-347 231 E7 ç LATIN SMALL LETTER C WITH CEDILLA
-350 232 E8 è LATIN SMALL LETTER E WITH GRAVE
-351 233 E9 é LATIN SMALL LETTER E WITH ACUTE
-352 234 EA ê LATIN SMALL LETTER E WITH CIRCUMFLEX
-353 235 EB ë LATIN SMALL LETTER E WITH DIAERESIS
-354 236 EC ì LATIN SMALL LETTER I WITH GRAVE
-355 237 ED í LATIN SMALL LETTER I WITH ACUTE
-356 238 EE î LATIN SMALL LETTER I WITH CIRCUMFLEX
-357 239 EF ï LATIN SMALL LETTER I WITH DIAERESIS
-360 240 F0 ð LATIN SMALL LETTER ETH
-361 241 F1 ñ LATIN SMALL LETTER N WITH TILDE
-362 242 F2 ò LATIN SMALL LETTER O WITH GRAVE
-363 243 F3 ó LATIN SMALL LETTER O WITH ACUTE
-364 244 F4 ô LATIN SMALL LETTER O WITH CIRCUMFLEX
-365 245 F5 õ LATIN SMALL LETTER O WITH TILDE
-366 246 F6 ö LATIN SMALL LETTER O WITH DIAERESIS
-367 247 F7 ÷ DIVISION SIGN
-370 248 F8 ø LATIN SMALL LETTER O WITH STROKE
-371 249 F9 ù LATIN SMALL LETTER U WITH GRAVE
-372 250 FA ú LATIN SMALL LETTER U WITH ACUTE
-373 251 FB û LATIN SMALL LETTER U WITH CIRCUMFLEX
-374 252 FC ü LATIN SMALL LETTER U WITH DIAERESIS
-375 253 FD ý LATIN SMALL LETTER Y WITH ACUTE
-376 254 FE þ LATIN SMALL LETTER THORN
-377 255 FF ÿ LATIN SMALL LETTER Y WITH DIAERESIS
-.TE
-.SH NOTES
-ISO 8859-15 is also known as Latin-9 (or sometimes as Latin-0).
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR cp1252 (7),
-.BR iso_8859\-1 (7),
-.BR utf\-8 (7)
diff --git a/man7/iso_8859-16.7 b/man7/iso_8859-16.7
deleted file mode 100644
index 3c82f9553..000000000
--- a/man7/iso_8859-16.7
+++ /dev/null
@@ -1,147 +0,0 @@
-'\" t
-.\" Copyright 2002 Ionel Mugurel Ciobîcă (IMCiobica@netscape.net)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH ISO_8859-16 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iso_8859-16 \- ISO 8859-16 character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The ISO 8859 standard includes several 8-bit extensions to the ASCII
-character set (also known as ISO 646-IRV).
-ISO 8859-16 encodes the
-Latin characters used in Southeast European languages.
-.SS ISO 8859 alphabets
-The full set of ISO 8859 alphabets includes:
-.TS
-l l.
-ISO 8859-1 West European languages (Latin-1)
-ISO 8859-2 Central and East European languages (Latin-2)
-ISO 8859-3 Southeast European and miscellaneous languages (Latin-3)
-ISO 8859-4 Scandinavian/Baltic languages (Latin-4)
-ISO 8859-5 Latin/Cyrillic
-ISO 8859-6 Latin/Arabic
-ISO 8859-7 Latin/Greek
-ISO 8859-8 Latin/Hebrew
-ISO 8859-9 Latin-1 modification for Turkish (Latin-5)
-ISO 8859-10 Lappish/Nordic/Eskimo languages (Latin-6)
-ISO 8859-11 Latin/Thai
-ISO 8859-13 Baltic Rim languages (Latin-7)
-ISO 8859-14 Celtic (Latin-8)
-ISO 8859-15 West European languages (Latin-9)
-ISO 8859-16 Romanian (Latin-10)
-.TE
-.SS ISO 8859-16 characters
-The following table displays the characters in ISO 8859-16 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-240 160 A0   NO-BREAK SPACE
-241 161 A1 Ą LATIN CAPITAL LETTER A WITH OGONEK
-242 162 A2 ą LATIN SMALL LETTER A WITH OGONEK
-243 163 A3 Ł LATIN CAPITAL LETTER L WITH STROKE
-244 164 A4 € EURO SIGN
-245 165 A5 „ DOUBLE LOW-9 QUOTATION MARK
-246 166 A6 Š LATIN CAPITAL LETTER S WITH CARON
-247 167 A7 § SECTION SIGN
-250 168 A8 š LATIN SMALL LETTER S WITH CARON
-251 169 A9 © COPYRIGHT SIGN
-252 170 AA Ș LATIN CAPITAL LETTER S WITH COMMA BELOW
-253 171 AB « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-254 172 AC Ź LATIN CAPITAL LETTER Z WITH ACUTE
-255 173 AD ­ SOFT HYPHEN
-256 174 AE ź LATIN SMALL LETTER Z WITH ACUTE
-257 175 AF Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE
-260 176 B0 ° DEGREE SIGN
-261 177 B1 ± PLUS-MINUS SIGN
-262 178 B2 Č LATIN CAPITAL LETTER C WITH CARON
-263 179 B3 ł LATIN SMALL LETTER L WITH STROKE
-264 180 B4 Ž LATIN CAPITAL LETTER Z WITH CARON
-265 181 B5 ” LEFT DOUBLE QUOTATION MARK
-266 182 B6 ¶ PILCROW SIGN
-267 183 B7 · MIDDLE DOT
-270 184 B8 ž LATIN SMALL LETTER Z WITH CARON
-271 185 B9 č LATIN SMALL LETTER C WITH CARON
-272 186 BA ș LATIN SMALL LETTER S WITH COMMA BELOW
-273 187 BB » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-274 188 BC ΠLATIN CAPITAL LIGATURE OE
-275 189 BD œ LATIN SMALL LIGATURE OE
-276 190 BE Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS
-277 191 BF ż LATIN SMALL LETTER Z WITH DOT ABOVE
-300 192 C0 À LATIN CAPITAL LETTER A WITH GRAVE
-301 193 C1 Á LATIN CAPITAL LETTER A WITH ACUTE
-302 194 C2 Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-303 195 C3 Ă LATIN CAPITAL LETTER A WITH BREVE
-304 196 C4 Ä LATIN CAPITAL LETTER A WITH DIAERESIS
-305 197 C5 Ć LATIN CAPITAL LETTER C WITH ACUTE
-306 198 C6 Æ LATIN CAPITAL LETTER AE
-307 199 C7 Ç LATIN CAPITAL LETTER C WITH CEDILLA
-310 200 C8 È LATIN CAPITAL LETTER E WITH GRAVE
-311 201 C9 É LATIN CAPITAL LETTER E WITH ACUTE
-312 202 CA Ê LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-313 203 CB Ë LATIN CAPITAL LETTER E WITH DIAERESIS
-314 204 CC Ì LATIN CAPITAL LETTER I WITH GRAVE
-315 205 CD Í LATIN CAPITAL LETTER I WITH ACUTE
-316 206 CE Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-317 207 CF Ï LATIN CAPITAL LETTER I WITH DIAERESIS
-320 208 D0 Đ LATIN CAPITAL LETTER D WITH STROKE
-321 209 D1 Ń LATIN CAPITAL LETTER N WITH ACUTE
-322 210 D2 Ò LATIN CAPITAL LETTER O WITH GRAVE
-323 211 D3 Ó LATIN CAPITAL LETTER O WITH ACUTE
-324 212 D4 Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-325 213 D5 Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-326 214 D6 Ö LATIN CAPITAL LETTER O WITH DIAERESIS
-327 215 D7 Ś LATIN CAPITAL LETTER S WITH ACUTE
-330 216 D8 Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-331 217 D9 Ù LATIN CAPITAL LETTER U WITH GRAVE
-332 218 DA Ú LATIN CAPITAL LETTER U WITH ACUTE
-333 219 DB Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-334 220 DC Ü LATIN CAPITAL LETTER U WITH DIAERESIS
-335 221 DD Ę LATIN CAPITAL LETTER E WITH OGONEK
-336 222 DE Ț LATIN CAPITAL LETTER T WITH COMMA BELOW
-337 223 DF ß LATIN SMALL LETTER SHARP S
-340 224 E0 à LATIN SMALL LETTER A WITH GRAVE
-341 225 E1 á LATIN SMALL LETTER A WITH ACUTE
-342 226 E2 â LATIN SMALL LETTER A WITH CIRCUMFLEX
-343 227 E3 ă LATIN SMALL LETTER A WITH BREVE
-344 228 E4 ä LATIN SMALL LETTER A WITH DIAERESIS
-345 229 E5 ć LATIN SMALL LETTER C WITH ACUTE
-346 230 E6 æ LATIN SMALL LETTER AE
-347 231 E7 ç LATIN SMALL LETTER C WITH CEDILLA
-350 232 E8 è LATIN SMALL LETTER E WITH GRAVE
-351 233 E9 é LATIN SMALL LETTER E WITH ACUTE
-352 234 EA ê LATIN SMALL LETTER E WITH CIRCUMFLEX
-353 235 EB ë LATIN SMALL LETTER E WITH DIAERESIS
-354 236 EC ì LATIN SMALL LETTER I WITH GRAVE
-355 237 ED í LATIN SMALL LETTER I WITH ACUTE
-356 238 EE î LATIN SMALL LETTER I WITH CIRCUMFLEX
-357 239 EF ï LATIN SMALL LETTER I WITH DIAERESIS
-360 240 F0 đ LATIN SMALL LETTER D WITH STROKE
-361 241 F1 ń LATIN SMALL LETTER N WITH ACUTE
-362 242 F2 ò LATIN SMALL LETTER O WITH GRAVE
-363 243 F3 ó LATIN SMALL LETTER O WITH ACUTE
-364 244 F4 ô LATIN SMALL LETTER O WITH CIRCUMFLEX
-365 245 F5 ő LATIN SMALL LETTER O WITH DOUBLE ACUTE
-366 246 F6 ö LATIN SMALL LETTER O WITH DIAERESIS
-367 247 F7 ś LATIN SMALL LETTER S WITH ACUTE
-370 248 F8 ű LATIN SMALL LETTER U WITH DOUBLE ACUTE
-371 249 F9 ù LATIN SMALL LETTER U WITH GRAVE
-372 250 FA ú LATIN SMALL LETTER U WITH ACUTE
-373 251 FB û LATIN SMALL LETTER U WITH CIRCUMFLEX
-374 252 FC ü LATIN SMALL LETTER U WITH DIAERESIS
-375 253 FD ę LATIN SMALL LETTER E WITH OGONEK
-376 254 FE ț LATIN SMALL LETTER T WITH COMMA BELOW
-377 255 FF ÿ LATIN SMALL LETTER Y WITH DIAERESIS
-.TE
-.SH NOTES
-ISO 8859-16 is also known as Latin-10.
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR iso_8859\-3 (7),
-.BR utf\-8 (7)
diff --git a/man7/iso_8859-2.7 b/man7/iso_8859-2.7
deleted file mode 100644
index 64a9792c6..000000000
--- a/man7/iso_8859-2.7
+++ /dev/null
@@ -1,151 +0,0 @@
-'\" t
-.\" Copyright 1999 Roman Maurer (roman.maurer@hermes.si)
-.\" Copyright 1993-1995 Daniel Quinlan (quinlan@yggdrasil.com)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Slightly rearranged, aeb, 950713
-.\" Updated, dpo, 990531
-.TH ISO_8859-2 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iso_8859-2 \- ISO 8859-2 character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The ISO 8859 standard includes several 8-bit extensions to the ASCII
-character set (also known as ISO 646-IRV).
-ISO 8859-2 encodes the
-Latin characters used in many Central and East European languages.
-.SS ISO 8859 alphabets
-The full set of ISO 8859 alphabets includes:
-.TS
-l l.
-ISO 8859-1 West European languages (Latin-1)
-ISO 8859-2 Central and East European languages (Latin-2)
-ISO 8859-3 Southeast European and miscellaneous languages (Latin-3)
-ISO 8859-4 Scandinavian/Baltic languages (Latin-4)
-ISO 8859-5 Latin/Cyrillic
-ISO 8859-6 Latin/Arabic
-ISO 8859-7 Latin/Greek
-ISO 8859-8 Latin/Hebrew
-ISO 8859-9 Latin-1 modification for Turkish (Latin-5)
-ISO 8859-10 Lappish/Nordic/Eskimo languages (Latin-6)
-ISO 8859-11 Latin/Thai
-ISO 8859-13 Baltic Rim languages (Latin-7)
-ISO 8859-14 Celtic (Latin-8)
-ISO 8859-15 West European languages (Latin-9)
-ISO 8859-16 Romanian (Latin-10)
-.TE
-.SS ISO 8859-2 characters
-The following table displays the characters in ISO 8859-2 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-240 160 A0   NO-BREAK SPACE
-241 161 A1 Ą LATIN CAPITAL LETTER A WITH OGONEK
-242 162 A2 ˘ BREVE
-243 163 A3 Ł LATIN CAPITAL LETTER L WITH STROKE
-244 164 A4 ¤ CURRENCY SIGN
-245 165 A5 Ľ LATIN CAPITAL LETTER L WITH CARON
-246 166 A6 Ś LATIN CAPITAL LETTER S WITH ACUTE
-247 167 A7 § SECTION SIGN
-250 168 A8 ¨ DIAERESIS
-251 169 A9 Š LATIN CAPITAL LETTER S WITH CARON
-252 170 AA Ş LATIN CAPITAL LETTER S WITH CEDILLA
-253 171 AB Ť LATIN CAPITAL LETTER T WITH CARON
-254 172 AC Ź LATIN CAPITAL LETTER Z WITH ACUTE
-255 173 AD ­ SOFT HYPHEN
-256 174 AE Ž LATIN CAPITAL LETTER Z WITH CARON
-257 175 AF Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE
-260 176 B0 ° DEGREE SIGN
-261 177 B1 ą LATIN SMALL LETTER A WITH OGONEK
-262 178 B2 ˛ OGONEK
-263 179 B3 ł LATIN SMALL LETTER L WITH STROKE
-264 180 B4 ´ ACUTE ACCENT
-265 181 B5 ľ LATIN SMALL LETTER L WITH CARON
-266 182 B6 ś LATIN SMALL LETTER S WITH ACUTE
-267 183 B7 ˇ CARON
-270 184 B8 ¸ CEDILLA
-271 185 B9 š LATIN SMALL LETTER S WITH CARON
-272 186 BA ş LATIN SMALL LETTER S WITH CEDILLA
-273 187 BB ť LATIN SMALL LETTER T WITH CARON
-274 188 BC ź LATIN SMALL LETTER Z WITH ACUTE
-275 189 BD ˝ DOUBLE ACUTE ACCENT
-276 190 BE ž LATIN SMALL LETTER Z WITH CARON
-277 191 BF ż LATIN SMALL LETTER Z WITH DOT ABOVE
-300 192 C0 Ŕ LATIN CAPITAL LETTER R WITH ACUTE
-301 193 C1 Á LATIN CAPITAL LETTER A WITH ACUTE
-302 194 C2 Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-303 195 C3 Ă LATIN CAPITAL LETTER A WITH BREVE
-304 196 C4 Ä LATIN CAPITAL LETTER A WITH DIAERESIS
-305 197 C5 Ĺ LATIN CAPITAL LETTER L WITH ACUTE
-306 198 C6 Ć LATIN CAPITAL LETTER C WITH ACUTE
-307 199 C7 Ç LATIN CAPITAL LETTER C WITH CEDILLA
-310 200 C8 Č LATIN CAPITAL LETTER C WITH CARON
-311 201 C9 É LATIN CAPITAL LETTER E WITH ACUTE
-312 202 CA Ę LATIN CAPITAL LETTER E WITH OGONEK
-313 203 CB Ë LATIN CAPITAL LETTER E WITH DIAERESIS
-314 204 CC Ě LATIN CAPITAL LETTER E WITH CARON
-315 205 CD Í LATIN CAPITAL LETTER I WITH ACUTE
-316 206 CE Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-317 207 CF Ď LATIN CAPITAL LETTER D WITH CARON
-320 208 D0 Đ LATIN CAPITAL LETTER D WITH STROKE
-321 209 D1 Ń LATIN CAPITAL LETTER N WITH ACUTE
-322 210 D2 Ň LATIN CAPITAL LETTER N WITH CARON
-323 211 D3 Ó LATIN CAPITAL LETTER O WITH ACUTE
-324 212 D4 Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-325 213 D5 Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-326 214 D6 Ö LATIN CAPITAL LETTER O WITH DIAERESIS
-327 215 D7 × MULTIPLICATION SIGN
-330 216 D8 Ř LATIN CAPITAL LETTER R WITH CARON
-331 217 D9 Ů LATIN CAPITAL LETTER U WITH RING ABOVE
-332 218 DA Ú LATIN CAPITAL LETTER U WITH ACUTE
-333 219 DB Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-334 220 DC Ü LATIN CAPITAL LETTER U WITH DIAERESIS
-335 221 DD Ý LATIN CAPITAL LETTER Y WITH ACUTE
-336 222 DE Ţ LATIN CAPITAL LETTER T WITH CEDILLA
-337 223 DF ß LATIN SMALL LETTER SHARP S
-340 224 E0 ŕ LATIN SMALL LETTER R WITH ACUTE
-341 225 E1 á LATIN SMALL LETTER A WITH ACUTE
-342 226 E2 â LATIN SMALL LETTER A WITH CIRCUMFLEX
-343 227 E3 ă LATIN SMALL LETTER A WITH BREVE
-344 228 E4 ä LATIN SMALL LETTER A WITH DIAERESIS
-345 229 E5 ĺ LATIN SMALL LETTER L WITH ACUTE
-346 230 E6 ć LATIN SMALL LETTER C WITH ACUTE
-347 231 E7 ç LATIN SMALL LETTER C WITH CEDILLA
-350 232 E8 č LATIN SMALL LETTER C WITH CARON
-351 233 E9 é LATIN SMALL LETTER E WITH ACUTE
-352 234 EA ę LATIN SMALL LETTER E WITH OGONEK
-353 235 EB ë LATIN SMALL LETTER E WITH DIAERESIS
-354 236 EC ě LATIN SMALL LETTER E WITH CARON
-355 237 ED í LATIN SMALL LETTER I WITH ACUTE
-356 238 EE î LATIN SMALL LETTER I WITH CIRCUMFLEX
-357 239 EF ď LATIN SMALL LETTER D WITH CARON
-360 240 F0 đ LATIN SMALL LETTER D WITH STROKE
-361 241 F1 ń LATIN SMALL LETTER N WITH ACUTE
-362 242 F2 ň LATIN SMALL LETTER N WITH CARON
-363 243 F3 ó LATIN SMALL LETTER O WITH ACUTE
-364 244 F4 ô LATIN SMALL LETTER O WITH CIRCUMFLEX
-365 245 F5 ő LATIN SMALL LETTER O WITH DOUBLE ACUTE
-366 246 F6 ö LATIN SMALL LETTER O WITH DIAERESIS
-367 247 F7 ÷ DIVISION SIGN
-370 248 F8 ř LATIN SMALL LETTER R WITH CARON
-371 249 F9 ů LATIN SMALL LETTER U WITH RING ABOVE
-372 250 FA ú LATIN SMALL LETTER U WITH ACUTE
-373 251 FB ű LATIN SMALL LETTER U WITH DOUBLE ACUTE
-374 252 FC ü LATIN SMALL LETTER U WITH DIAERESIS
-375 253 FD ý LATIN SMALL LETTER Y WITH ACUTE
-376 254 FE ţ LATIN SMALL LETTER T WITH CEDILLA
-377 255 FF ˙ DOT ABOVE
-.TE
-.SH NOTES
-ISO 8859-2 is also known as Latin-2.
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR iso_8859\-1 (7),
-.BR iso_8859\-16 (7),
-.BR utf\-8 (7)
diff --git a/man7/iso_8859-3.7 b/man7/iso_8859-3.7
deleted file mode 100644
index 3fbd18eff..000000000
--- a/man7/iso_8859-3.7
+++ /dev/null
@@ -1,139 +0,0 @@
-'\" t
-.\" Copyright 2009 Lefteris Dimitroulakis (edimitro@tee.gr)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH ISO_8859-3 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iso_8859-3 \- ISO 8859-3 character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The ISO 8859 standard includes several 8-bit extensions to the ASCII
-character set (also known as ISO 646-IRV).
-ISO 8859-3 encodes the
-characters used in certain Southeast European languages.
-.SS ISO 8859 alphabets
-The full set of ISO 8859 alphabets includes:
-.TS
-l l.
-ISO 8859-1 West European languages (Latin-1)
-ISO 8859-2 Central and East European languages (Latin-2)
-ISO 8859-3 Southeast European and miscellaneous languages (Latin-3)
-ISO 8859-4 Scandinavian/Baltic languages (Latin-4)
-ISO 8859-5 Latin/Cyrillic
-ISO 8859-6 Latin/Arabic
-ISO 8859-7 Latin/Greek
-ISO 8859-8 Latin/Hebrew
-ISO 8859-9 Latin-1 modification for Turkish (Latin-5)
-ISO 8859-10 Lappish/Nordic/Eskimo languages (Latin-6)
-ISO 8859-11 Latin/Thai
-ISO 8859-13 Baltic Rim languages (Latin-7)
-ISO 8859-14 Celtic (Latin-8)
-ISO 8859-15 West European languages (Latin-9)
-ISO 8859-16 Romanian (Latin-10)
-.TE
-.SS ISO 8859-3 characters
-The following table displays the characters in ISO 8859-3 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-240 160 A0   NO-BREAK SPACE
-241 161 A1 Ħ LATIN CAPITAL LETTER H WITH STROKE
-242 162 A2 ˘ BREVE
-243 163 A3 £ POUND SIGN
-244 164 A4 ¤ CURRENCY SIGN
-246 166 A6 Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX
-247 167 A7 § SECTION SIGN
-250 168 A8 ¨ DIAERESIS
-251 169 A9 İ LATIN CAPITAL LETTER I WITH DOT ABOVE
-252 170 AA Ş LATIN CAPITAL LETTER S WITH CEDILLA
-253 171 AB Ğ LATIN CAPITAL LETTER G WITH BREVE
-254 172 AC Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX
-255 173 AD ­ SOFT HYPHEN
-257 175 AF Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE
-260 176 B0 ° DEGREE SIGN
-261 177 B1 ħ LATIN SMALL LETTER H WITH STROKE
-262 178 B2 ² SUPERSCRIPT TWO
-263 179 B3 ³ SUPERSCRIPT THREE
-264 180 B4 ´ ACUTE ACCENT
-265 181 B5 µ MICRO SIGN
-266 182 B6 ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX
-267 183 B7 · MIDDLE DOT
-270 184 B8 ¸ CEDILLA
-271 185 B9 ı LATIN SMALL LETTER DOTLESS I
-272 186 BA ş LATIN SMALL LETTER S WITH CEDILLA
-273 187 BB ğ LATIN SMALL LETTER G WITH BREVE
-274 188 BC ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX
-275 189 BD ½ VULGAR FRACTION ONE HALF
-277 191 BF ż LATIN SMALL LETTER Z WITH DOT ABOVE
-300 192 C0 À LATIN CAPITAL LETTER A WITH GRAVE
-301 193 C1 Á LATIN CAPITAL LETTER A WITH ACUTE
-302 194 C2 Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-304 196 C4 Ä LATIN CAPITAL LETTER A WITH DIAERESIS
-305 197 C5 Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE
-306 198 C6 Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX
-307 199 C7 Ç LATIN CAPITAL LETTER C WITH CEDILLA
-310 200 C8 È LATIN CAPITAL LETTER E WITH GRAVE
-311 201 C9 É LATIN CAPITAL LETTER E WITH ACUTE
-312 202 CA Ê LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-313 203 CB Ë LATIN CAPITAL LETTER E WITH DIAERESIS
-314 204 CC Ì LATIN CAPITAL LETTER I WITH GRAVE
-315 205 CD Í LATIN CAPITAL LETTER I WITH ACUTE
-316 206 CE Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-317 207 CF Ï LATIN CAPITAL LETTER I WITH DIAERESIS
-321 209 D1 Ñ LATIN CAPITAL LETTER N WITH TILDE
-322 210 D2 Ò LATIN CAPITAL LETTER O WITH GRAVE
-323 211 D3 Ó LATIN CAPITAL LETTER O WITH ACUTE
-324 212 D4 Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-325 213 D5 Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE
-326 214 D6 Ö LATIN CAPITAL LETTER O WITH DIAERESIS
-327 215 D7 × MULTIPLICATION SIGN
-330 216 D8 Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX
-331 217 D9 Ù LATIN CAPITAL LETTER U WITH GRAVE
-332 218 DA Ú LATIN CAPITAL LETTER U WITH ACUTE
-333 219 DB Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-334 220 DC Ü LATIN CAPITAL LETTER U WITH DIAERESIS
-335 221 DD Ŭ LATIN CAPITAL LETTER U WITH BREVE
-336 222 DE Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX
-337 223 DF ß LATIN SMALL LETTER SHARP S
-340 224 E0 à LATIN SMALL LETTER A WITH GRAVE
-341 225 E1 á LATIN SMALL LETTER A WITH ACUTE
-342 226 E2 â LATIN SMALL LETTER A WITH CIRCUMFLEX
-344 228 E4 ä LATIN SMALL LETTER A WITH DIAERESIS
-345 229 E5 ċ LATIN SMALL LETTER C WITH DOT ABOVE
-346 230 E6 ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX
-347 231 E7 ç LATIN SMALL LETTER C WITH CEDILLA
-350 232 E8 è LATIN SMALL LETTER E WITH GRAVE
-351 233 E9 é LATIN SMALL LETTER E WITH ACUTE
-352 234 EA ê LATIN SMALL LETTER E WITH CIRCUMFLEX
-353 235 EB ë LATIN SMALL LETTER E WITH DIAERESIS
-354 236 EC ì LATIN SMALL LETTER I WITH GRAVE
-355 237 ED í LATIN SMALL LETTER I WITH ACUTE
-356 238 EE î LATIN SMALL LETTER I WITH CIRCUMFLEX
-357 239 EF ï LATIN SMALL LETTER I WITH DIAERESIS
-361 241 F1 ñ LATIN SMALL LETTER N WITH TILDE
-362 242 F2 ò LATIN SMALL LETTER O WITH GRAVE
-363 243 F3 ó LATIN SMALL LETTER O WITH ACUTE
-364 244 F4 ô LATIN SMALL LETTER O WITH CIRCUMFLEX
-365 245 F5 ġ LATIN SMALL LETTER G WITH DOT ABOVE
-366 246 F6 ö LATIN SMALL LETTER O WITH DIAERESIS
-367 247 F7 ÷ DIVISION SIGN
-370 248 F8 ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX
-371 249 F9 ù LATIN SMALL LETTER U WITH GRAVE
-372 250 FA ú LATIN SMALL LETTER U WITH ACUTE
-373 251 FB û LATIN SMALL LETTER U WITH CIRCUMFLEX
-374 252 FC ü LATIN SMALL LETTER U WITH DIAERESIS
-375 253 FD ŭ LATIN SMALL LETTER U WITH BREVE
-376 254 FE ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX
-377 255 FF ˙ DOT ABOVE
-.TE
-.SH NOTES
-ISO 8859-3 is also known as Latin-3.
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR utf\-8 (7)
diff --git a/man7/iso_8859-4.7 b/man7/iso_8859-4.7
deleted file mode 100644
index 0221508b6..000000000
--- a/man7/iso_8859-4.7
+++ /dev/null
@@ -1,146 +0,0 @@
-'\" t
-.\" Copyright 2009 Lefteris Dimitroulakis (edimitro@tee.gr)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH ISO_8859-4 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iso_8859-4 \- ISO 8859-4 character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The ISO 8859 standard includes several 8-bit extensions to the ASCII
-character set (also known as ISO 646-IRV).
-ISO 8859-4 encodes the
-characters used in Scandinavian and Baltic languages.
-.SS ISO 8859 alphabets
-The full set of ISO 8859 alphabets includes:
-.TS
-l l.
-ISO 8859-1 West European languages (Latin-1)
-ISO 8859-2 Central and East European languages (Latin-2)
-ISO 8859-3 Southeast European and miscellaneous languages (Latin-3)
-ISO 8859-4 Scandinavian/Baltic languages (Latin-4)
-ISO 8859-5 Latin/Cyrillic
-ISO 8859-6 Latin/Arabic
-ISO 8859-7 Latin/Greek
-ISO 8859-8 Latin/Hebrew
-ISO 8859-9 Latin-1 modification for Turkish (Latin-5)
-ISO 8859-10 Lappish/Nordic/Eskimo languages (Latin-6)
-ISO 8859-11 Latin/Thai
-ISO 8859-13 Baltic Rim languages (Latin-7)
-ISO 8859-14 Celtic (Latin-8)
-ISO 8859-15 West European languages (Latin-9)
-ISO 8859-16 Romanian (Latin-10)
-.TE
-.SS ISO 8859-4 characters
-The following table displays the characters in ISO 8859-4 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-240 160 A0   NO-BREAK SPACE
-241 161 A1 Ą LATIN CAPITAL LETTER A WITH OGONEK
-242 162 A2 ĸ LATIN SMALL LETTER KRA (Greenlandic)
-243 163 A3 Ŗ LATIN CAPITAL LETTER R WITH CEDILLA
-244 164 A4 ¤ CURRENCY SIGN
-245 165 A5 Ĩ LATIN CAPITAL LETTER I WITH TILDE
-246 166 A6 Ļ LATIN CAPITAL LETTER L WITH CEDILLA
-247 167 A7 § SECTION SIGN
-250 168 A8 ¨ DIAERESIS
-251 169 A9 Š LATIN CAPITAL LETTER S WITH CARON
-252 170 AA Ē LATIN CAPITAL LETTER E WITH MACRON
-253 171 AB Ģ LATIN CAPITAL LETTER G WITH CEDILLA
-254 172 AC Ŧ LATIN CAPITAL LETTER T WITH STROKE
-255 173 AD ­ SOFT HYPHEN
-256 174 AE Ž LATIN CAPITAL LETTER Z WITH CARON
-257 175 AF ¯ MACRON
-260 176 B0 ° DEGREE SIGN
-261 177 B1 ą LATIN SMALL LETTER A WITH OGONEK
-262 178 B2 ˛ OGONEK
-263 179 B3 ŗ LATIN SMALL LETTER R WITH CEDILLA
-264 180 B4 ´ ACUTE ACCENT
-265 181 B5 ĩ LATIN SMALL LETTER I WITH TILDE
-266 182 B6 ļ LATIN SMALL LETTER L WITH CEDILLA
-267 183 B7 ˇ CARON
-270 184 B8 ¸ CEDILLA
-271 185 B9 š LATIN SMALL LETTER S WITH CARON
-272 186 BA ē LATIN SMALL LETTER E WITH MACRON
-273 187 BB ģ LATIN SMALL LETTER G WITH CEDILLA
-274 188 BC ŧ LATIN SMALL LETTER T WITH STROKE
-275 189 BD Ŋ LATIN CAPITAL LETTER ENG
-276 190 BE ž LATIN SMALL LETTER Z WITH CARON
-277 191 BF ŋ LATIN SMALL LETTER ENG
-300 192 C0 Ā LATIN CAPITAL LETTER A WITH MACRON
-301 193 C1 Á LATIN CAPITAL LETTER A WITH ACUTE
-302 194 C2 Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-303 195 C3 Ã LATIN CAPITAL LETTER A WITH TILDE
-304 196 C4 Ä LATIN CAPITAL LETTER A WITH DIAERESIS
-305 197 C5 Å LATIN CAPITAL LETTER A WITH RING ABOVE
-306 198 C6 Æ LATIN CAPITAL LETTER AE
-307 199 C7 Į LATIN CAPITAL LETTER I WITH OGONEK
-310 200 C8 Č LATIN CAPITAL LETTER C WITH CARON
-311 201 C9 É LATIN CAPITAL LETTER E WITH ACUTE
-312 202 CA Ę LATIN CAPITAL LETTER E WITH OGONEK
-313 203 CB Ë LATIN CAPITAL LETTER E WITH DIAERESIS
-314 204 CC Ė LATIN CAPITAL LETTER E WITH DOT ABOVE
-315 205 CD Í LATIN CAPITAL LETTER I WITH ACUTE
-316 206 CE Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-317 207 CF Ī LATIN CAPITAL LETTER I WITH MACRON
-320 208 D0 Đ LATIN CAPITAL LETTER D WITH STROKE
-321 209 D1 Ņ LATIN CAPITAL LETTER N WITH CEDILLA
-322 210 D2 Ō LATIN CAPITAL LETTER O WITH MACRON
-323 211 D3 Ķ LATIN CAPITAL LETTER K WITH CEDILLA
-324 212 D4 Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-325 213 D5 Õ LATIN CAPITAL LETTER O WITH TILDE
-326 214 D6 Ö LATIN CAPITAL LETTER O WITH DIAERESIS
-327 215 D7 × MULTIPLICATION SIGN
-330 216 D8 Ø LATIN CAPITAL LETTER O WITH STROKE
-331 217 D9 Ų LATIN CAPITAL LETTER U WITH OGONEK
-332 218 DA Ú LATIN CAPITAL LETTER U WITH ACUTE
-333 219 DB Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-334 220 DC Ü LATIN CAPITAL LETTER U WITH DIAERESIS
-335 221 DD Ũ LATIN CAPITAL LETTER U WITH TILDE
-336 222 DE Ū LATIN CAPITAL LETTER U WITH MACRON
-337 223 DF ß LATIN SMALL LETTER SHARP S
-340 224 E0 ā LATIN SMALL LETTER A WITH MACRON
-341 225 E1 á LATIN SMALL LETTER A WITH ACUTE
-342 226 E2 â LATIN SMALL LETTER A WITH CIRCUMFLEX
-343 227 E3 ã LATIN SMALL LETTER A WITH TILDE
-344 228 E4 ä LATIN SMALL LETTER A WITH DIAERESIS
-345 229 E5 å LATIN SMALL LETTER A WITH RING ABOVE
-346 230 E6 æ LATIN SMALL LETTER AE
-347 231 E7 į LATIN SMALL LETTER I WITH OGONEK
-350 232 E8 č LATIN SMALL LETTER C WITH CARON
-351 233 E9 é LATIN SMALL LETTER E WITH ACUTE
-352 234 EA ę LATIN SMALL LETTER E WITH OGONEK
-353 235 EB ë LATIN SMALL LETTER E WITH DIAERESIS
-354 236 EC ė LATIN SMALL LETTER E WITH DOT ABOVE
-355 237 ED í LATIN SMALL LETTER I WITH ACUTE
-356 238 EE î LATIN SMALL LETTER I WITH CIRCUMFLEX
-357 239 EF ī LATIN SMALL LETTER I WITH MACRON
-360 240 F0 đ LATIN SMALL LETTER D WITH STROKE
-361 241 F1 ņ LATIN SMALL LETTER N WITH CEDILLA
-362 242 F2 ō LATIN SMALL LETTER O WITH MACRON
-363 243 F3 ķ LATIN SMALL LETTER K WITH CEDILLA
-364 244 F4 ô LATIN SMALL LETTER O WITH CIRCUMFLEX
-365 245 F5 õ LATIN SMALL LETTER O WITH TILDE
-366 246 F6 ö LATIN SMALL LETTER O WITH DIAERESIS
-367 247 F7 ÷ DIVISION SIGN
-370 248 F8 ø LATIN SMALL LETTER O WITH STROKE
-371 249 F9 ų LATIN SMALL LETTER U WITH OGONEK
-372 250 FA ú LATIN SMALL LETTER U WITH ACUTE
-373 251 FB û LATIN SMALL LETTER U WITH CIRCUMFLEX
-374 252 FC ü LATIN SMALL LETTER U WITH DIAERESIS
-375 253 FD ũ LATIN SMALL LETTER U WITH TILDE
-376 254 FE ū LATIN SMALL LETTER U WITH MACRON
-377 255 FF ˙ DOT ABOVE
-.TE
-.SH NOTES
-ISO 8859-4 is also known as Latin-4.
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR utf\-8 (7)
diff --git a/man7/iso_8859-5.7 b/man7/iso_8859-5.7
deleted file mode 100644
index 0baeb19f0..000000000
--- a/man7/iso_8859-5.7
+++ /dev/null
@@ -1,151 +0,0 @@
-'\" t
-.\" Copyright 2009 Lefteris Dimitroulakis (edimitro@tee.gr)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH ISO_8859-5 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iso_8859-5 \- ISO 8859-5 character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The ISO 8859 standard includes several 8-bit extensions to the ASCII
-character set (also known as ISO 646-IRV).
-ISO 8859-5 encodes the
-Cyrillic characters used in many East European languages.
-.SS ISO 8859 alphabets
-The full set of ISO 8859 alphabets includes:
-.TS
-l l.
-ISO 8859-1 West European languages (Latin-1)
-ISO 8859-2 Central and East European languages (Latin-2)
-ISO 8859-3 Southeast European and miscellaneous languages (Latin-3)
-ISO 8859-4 Scandinavian/Baltic languages (Latin-4)
-ISO 8859-5 Latin/Cyrillic
-ISO 8859-6 Latin/Arabic
-ISO 8859-7 Latin/Greek
-ISO 8859-8 Latin/Hebrew
-ISO 8859-9 Latin-1 modification for Turkish (Latin-5)
-ISO 8859-10 Lappish/Nordic/Eskimo languages (Latin-6)
-ISO 8859-11 Latin/Thai
-ISO 8859-13 Baltic Rim languages (Latin-7)
-ISO 8859-14 Celtic (Latin-8)
-ISO 8859-15 West European languages (Latin-9)
-ISO 8859-16 Romanian (Latin-10)
-.TE
-.SS ISO 8859-5 characters
-The following table displays the characters in ISO 8859-5 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-240 160 A0   NO-BREAK SPACE
-241 161 A1 Ё CYRILLIC CAPITAL LETTER IO
-242 162 A2 Ђ CYRILLIC CAPITAL LETTER DJE
-243 163 A3 Ѓ CYRILLIC CAPITAL LETTER GJE
-244 164 A4 Є CYRILLIC CAPITAL LETTER UKRAINIAN IE
-245 165 A5 Ѕ CYRILLIC CAPITAL LETTER DZE
-246 166 A6 І T{
-CYRILLIC CAPITAL LETTER
-.br
-BYELORUSSIAN-UKRAINIAN I
-T}
-247 167 A7 Ї CYRILLIC CAPITAL LETTER YI
-250 168 A8 Ј CYRILLIC CAPITAL LETTER JE
-251 169 A9 Љ CYRILLIC CAPITAL LETTER LJE
-252 170 AA Њ CYRILLIC CAPITAL LETTER NJE
-253 171 AB Ћ CYRILLIC CAPITAL LETTER TSHE
-254 172 AC Ќ CYRILLIC CAPITAL LETTER KJE
-255 173 AD ­ SOFT HYPHEN
-256 174 AE Ў CYRILLIC CAPITAL LETTER SHORT U
-257 175 AF Џ CYRILLIC CAPITAL LETTER DZHE
-260 176 B0 А CYRILLIC CAPITAL LETTER A
-261 177 B1 Б CYRILLIC CAPITAL LETTER BE
-262 178 B2 В CYRILLIC CAPITAL LETTER VE
-263 179 B3 Г CYRILLIC CAPITAL LETTER GHE
-264 180 B4 Д CYRILLIC CAPITAL LETTER DE
-265 181 B5 Е CYRILLIC CAPITAL LETTER IE
-266 182 B6 Ж CYRILLIC CAPITAL LETTER ZHE
-267 183 B7 З CYRILLIC CAPITAL LETTER ZE
-270 184 B8 И CYRILLIC CAPITAL LETTER I
-271 185 B9 Й CYRILLIC CAPITAL LETTER SHORT I
-272 186 BA К CYRILLIC CAPITAL LETTER KA
-273 187 BB Л CYRILLIC CAPITAL LETTER EL
-274 188 BC М CYRILLIC CAPITAL LETTER EM
-275 189 BD Н CYRILLIC CAPITAL LETTER EN
-276 190 BE О CYRILLIC CAPITAL LETTER O
-277 191 BF П CYRILLIC CAPITAL LETTER PE
-300 192 C0 Р CYRILLIC CAPITAL LETTER ER
-301 193 C1 С CYRILLIC CAPITAL LETTER ES
-302 194 C2 Т CYRILLIC CAPITAL LETTER TE
-303 195 C3 У CYRILLIC CAPITAL LETTER U
-304 196 C4 Ф CYRILLIC CAPITAL LETTER EF
-305 197 C5 Х CYRILLIC CAPITAL LETTER HA
-306 198 C6 Ц CYRILLIC CAPITAL LETTER TSE
-307 199 C7 Ч CYRILLIC CAPITAL LETTER CHE
-310 200 C8 Ш CYRILLIC CAPITAL LETTER SHA
-311 201 C9 Щ CYRILLIC CAPITAL LETTER SHCHA
-312 202 CA Ъ CYRILLIC CAPITAL LETTER HARD SIGN
-313 203 CB Ы CYRILLIC CAPITAL LETTER YERU
-314 204 CC Ь CYRILLIC CAPITAL LETTER SOFT SIGN
-315 205 CD Э CYRILLIC CAPITAL LETTER E
-316 206 CE Ю CYRILLIC CAPITAL LETTER YU
-317 207 CF Я CYRILLIC CAPITAL LETTER YA
-320 208 D0 а CYRILLIC SMALL LETTER A
-321 209 D1 б CYRILLIC SMALL LETTER BE
-322 210 D2 в CYRILLIC SMALL LETTER VE
-323 211 D3 г CYRILLIC SMALL LETTER GHE
-324 212 D4 д CYRILLIC SMALL LETTER DE
-325 213 D5 е CYRILLIC SMALL LETTER IE
-326 214 D6 ж CYRILLIC SMALL LETTER ZHE
-327 215 D7 з CYRILLIC SMALL LETTER ZE
-330 216 D8 и CYRILLIC SMALL LETTER I
-331 217 D9 й CYRILLIC SMALL LETTER SHORT I
-332 218 DA к CYRILLIC SMALL LETTER KA
-333 219 DB л CYRILLIC SMALL LETTER EL
-334 220 DC м CYRILLIC SMALL LETTER EM
-335 221 DD н CYRILLIC SMALL LETTER EN
-336 222 DE о CYRILLIC SMALL LETTER O
-337 223 DF п CYRILLIC SMALL LETTER PE
-340 224 E0 р CYRILLIC SMALL LETTER ER
-341 225 E1 с CYRILLIC SMALL LETTER ES
-342 226 E2 т CYRILLIC SMALL LETTER TE
-343 227 E3 у CYRILLIC SMALL LETTER U
-344 228 E4 ф CYRILLIC SMALL LETTER EF
-345 229 E5 х CYRILLIC SMALL LETTER HA
-346 230 E6 ц CYRILLIC SMALL LETTER TSE
-347 231 E7 ч CYRILLIC SMALL LETTER CHE
-350 232 E8 ш CYRILLIC SMALL LETTER SHA
-351 233 E9 щ CYRILLIC SMALL LETTER SHCHA
-352 234 EA ъ CYRILLIC SMALL LETTER HARD SIGN
-353 235 EB ы CYRILLIC SMALL LETTER YERU
-354 236 EC ь CYRILLIC SMALL LETTER SOFT SIGN
-355 237 ED э CYRILLIC SMALL LETTER E
-356 238 EE ю CYRILLIC SMALL LETTER YU
-357 239 EF я CYRILLIC SMALL LETTER YA
-360 240 F0 № NUMERO SIGN
-361 241 F1 ё CYRILLIC SMALL LETTER IO
-362 242 F2 ђ CYRILLIC SMALL LETTER DJE
-363 243 F3 ѓ CYRILLIC SMALL LETTER GJE
-364 244 F4 є CYRILLIC SMALL LETTER UKRAINIAN IE
-365 245 F5 ѕ CYRILLIC SMALL LETTER DZE
-366 246 F6 і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-367 247 F7 ї CYRILLIC SMALL LETTER YI
-370 248 F8 ј CYRILLIC SMALL LETTER JE
-371 249 F9 љ CYRILLIC SMALL LETTER LJE
-372 250 FA њ CYRILLIC SMALL LETTER NJE
-373 251 FB ј CYRILLIC SMALL LETTER TSHE
-374 252 FC ќ CYRILLIC SMALL LETTER KJE
-375 253 FD § SECTION SIGN
-376 254 FE ў CYRILLIC SMALL LETTER SHORT U
-377 255 FF џ CYRILLIC SMALL LETTER DZHE
-.TE
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR cp1251 (7),
-.BR koi8\-r (7),
-.BR koi8\-u (7),
-.BR utf\-8 (7)
diff --git a/man7/iso_8859-6.7 b/man7/iso_8859-6.7
deleted file mode 100644
index e68da55e3..000000000
--- a/man7/iso_8859-6.7
+++ /dev/null
@@ -1,102 +0,0 @@
-'\" t
-.\" Copyright 2009 Lefteris Dimitroulakis (edimitro@tee.gr)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH ISO_8859-6 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iso_8859-6 \- ISO 8859-6 character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The ISO 8859 standard includes several 8-bit extensions to the ASCII
-character set (also known as ISO 646-IRV).
-ISO 8859-6 encodes the
-characters used in the Arabic language.
-.SS ISO 8859 alphabets
-The full set of ISO 8859 alphabets includes:
-.TS
-l l.
-ISO 8859-1 West European languages (Latin-1)
-ISO 8859-2 Central and East European languages (Latin-2)
-ISO 8859-3 Southeast European and miscellaneous languages (Latin-3)
-ISO 8859-4 Scandinavian/Baltic languages (Latin-4)
-ISO 8859-5 Latin/Cyrillic
-ISO 8859-6 Latin/Arabic
-ISO 8859-7 Latin/Greek
-ISO 8859-8 Latin/Hebrew
-ISO 8859-9 Latin-1 modification for Turkish (Latin-5)
-ISO 8859-10 Lappish/Nordic/Eskimo languages (Latin-6)
-ISO 8859-11 Latin/Thai
-ISO 8859-13 Baltic Rim languages (Latin-7)
-ISO 8859-14 Celtic (Latin-8)
-ISO 8859-15 West European languages (Latin-9)
-ISO 8859-16 Romanian (Latin-10)
-.TE
-.SS ISO 8859-6 characters
-The following table displays the characters in ISO 8859-6 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-240 160 A0   NO-BREAK SPACE
-244 164 A4 ¤ CURRENCY SIGN
-254 172 AC ، ARABIC COMMA
-255 173 AD ­ SOFT HYPHEN
-273 187 BB ؛ ARABIC SEMICOLON
-277 191 BF ؟ ARABIC QUESTION MARK
-301 193 C1 ء ARABIC LETTER HAMZA
-302 194 C2 آ ARABIC LETTER ALEF WITH MADDA ABOVE
-303 195 C3 أ ARABIC LETTER ALEF WITH HAMZA ABOVE
-304 196 C4 ؤ ARABIC LETTER WAW WITH HAMZA ABOVE
-305 197 C5 إ ARABIC LETTER ALEF WITH HAMZA BELOW
-306 198 C6 ئ ARABIC LETTER YEH WITH HAMZA ABOVE
-307 199 C7 ا ARABIC LETTER ALEF
-310 200 C8 ب ARABIC LETTER BEH
-311 201 C9 ة ARABIC LETTER TEH MARBUTA
-312 202 CA ت ARABIC LETTER TEH
-313 203 CB ث ARABIC LETTER THEH
-314 204 CC ج ARABIC LETTER JEEM
-315 205 CD ح ARABIC LETTER HAH
-316 206 CE خ ARABIC LETTER KHAH
-317 207 CF د ARABIC LETTER DAL
-320 208 D0 ذ ARABIC LETTER THAL
-321 209 D1 ر ARABIC LETTER REH
-322 210 D2 ز ARABIC LETTER ZAIN
-323 211 D3 س ARABIC LETTER SEEN
-324 212 D4 ش ARABIC LETTER SHEEN
-325 213 D5 ص ARABIC LETTER SAD
-326 214 D6 ض ARABIC LETTER DAD
-327 215 D7 ط ARABIC LETTER TAH
-330 216 D8 ظ ARABIC LETTER ZAH
-331 217 D9 ع ARABIC LETTER AIN
-332 218 DA غ ARABIC LETTER GHAIN
-340 224 E0 ـ ARABIC TATWEEL
-341 225 E1 ف ARABIC LETTER FEH
-342 226 E2 ق ARABIC LETTER QAF
-343 227 E3 ك ARABIC LETTER KAF
-344 228 E4 ل ARABIC LETTER LAM
-345 229 E5 م ARABIC LETTER MEEM
-346 230 E6 ن ARABIC LETTER NOON
-347 231 E7 ه ARABIC LETTER HEH
-350 232 E8 و ARABIC LETTER WAW
-351 233 E9 ى ARABIC LETTER ALEF MAKSURA
-352 234 EA ي ARABIC LETTER YEH
-353 235 EB ً ARABIC FATHATAN
-354 236 EC ٌ ARABIC DAMMATAN
-355 237 ED ٍ ARABIC KASRATAN
-356 238 EE َ ARABIC FATHA
-357 239 EF ُ ARABIC DAMMA
-360 240 F0 ِ ARABIC KASRA
-361 241 F1 ّ ARABIC SHADDA
-362 242 F2 ْ ARABIC SUKUN
-.TE
-.SH NOTES
-ISO 8859-6 lacks the glyphs required for many related languages,
-such as Urdu and Persian (Farsi).
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR utf\-8 (7)
diff --git a/man7/iso_8859-7.7 b/man7/iso_8859-7.7
deleted file mode 100644
index 9dff4e14d..000000000
--- a/man7/iso_8859-7.7
+++ /dev/null
@@ -1,150 +0,0 @@
-'\" t
-.\" Copyright 1999 Dimitri Papadopoulos (dpo@club-internet.fr)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH ISO_8859-7 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iso_8859-7 \- ISO 8859-7 character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The ISO 8859 standard includes several 8-bit extensions to the ASCII
-character set (also known as ISO 646-IRV).
-ISO 8859-7 encodes the
-characters used in modern monotonic Greek.
-.SS ISO 8859 alphabets
-The full set of ISO 8859 alphabets includes:
-.TS
-l l.
-ISO 8859-1 West European languages (Latin-1)
-ISO 8859-2 Central and East European languages (Latin-2)
-ISO 8859-3 Southeast European and miscellaneous languages (Latin-3)
-ISO 8859-4 Scandinavian/Baltic languages (Latin-4)
-ISO 8859-5 Latin/Cyrillic
-ISO 8859-6 Latin/Arabic
-ISO 8859-7 Latin/Greek
-ISO 8859-8 Latin/Hebrew
-ISO 8859-9 Latin-1 modification for Turkish (Latin-5)
-ISO 8859-10 Lappish/Nordic/Eskimo languages (Latin-6)
-ISO 8859-11 Latin/Thai
-ISO 8859-13 Baltic Rim languages (Latin-7)
-ISO 8859-14 Celtic (Latin-8)
-ISO 8859-15 West European languages (Latin-9)
-ISO 8859-16 Romanian (Latin-10)
-.TE
-.SS ISO 8859-7 characters
-The following table displays the characters in ISO 8859-7 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-240 160 A0   NO-BREAK SPACE
-241 161 A1 ‘ LEFT SINGLE QUOTATION MARK
-242 162 A2 ’ RIGHT SINGLE QUOTATION MARK
-243 163 A3 £ POUND SIGN
-244 164 A4 € EURO SIGN
-245 165 A5 ₯ DRACHMA SIGN
-246 166 A6 ¦ BROKEN BAR
-247 167 A7 § SECTION SIGN
-250 168 A8 ¨ DIAERESIS
-251 169 A9 © COPYRIGHT SIGN
-252 170 AA ͺ GREEK YPOGEGRAMMENI
-253 171 AB « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-254 172 AC ¬ NOT SIGN
-255 173 AD ­ SOFT HYPHEN
-257 175 AF ― HORIZONTAL BAR
-260 176 B0 ° DEGREE SIGN
-261 177 B1 ± PLUS-MINUS SIGN
-262 178 B2 ² SUPERSCRIPT TWO
-263 179 B3 ³ SUPERSCRIPT THREE
-264 180 B4 ΄ GREEK TONOS
-265 181 B5 ΅ GREEK DIALYTIKA TONOS
-266 182 B6 Ά GREEK CAPITAL LETTER ALPHA WITH TONOS
-267 183 B7 · MIDDLE DOT
-270 184 B8 Έ GREEK CAPITAL LETTER EPSILON WITH TONOS
-271 185 B9 Ή GREEK CAPITAL LETTER ETA WITH TONOS
-272 186 BA Ί GREEK CAPITAL LETTER IOTA WITH TONOS
-273 187 BB » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-274 188 BC Ό GREEK CAPITAL LETTER OMICRON WITH TONOS
-275 189 BD ½ VULGAR FRACTION ONE HALF
-276 190 BE Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS
-277 191 BF Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS
-300 192 C0 ΐ T{
-GREEK SMALL LETTER IOTA WITH
-.br
-DIALYTIKA AND TONOS
-T}
-301 193 C1 Α GREEK CAPITAL LETTER ALPHA
-302 194 C2 Β GREEK CAPITAL LETTER BETA
-303 195 C3 Γ GREEK CAPITAL LETTER GAMMA
-304 196 C4 Δ GREEK CAPITAL LETTER DELTA
-305 197 C5 Ε GREEK CAPITAL LETTER EPSILON
-306 198 C6 Ζ GREEK CAPITAL LETTER ZETA
-307 199 C7 Η GREEK CAPITAL LETTER ETA
-310 200 C8 Θ GREEK CAPITAL LETTER THETA
-311 201 C9 Ι GREEK CAPITAL LETTER IOTA
-312 202 CA Κ GREEK CAPITAL LETTER KAPPA
-313 203 CB Λ GREEK CAPITAL LETTER LAMBDA
-314 204 CC Μ GREEK CAPITAL LETTER MU
-315 205 CD Ν GREEK CAPITAL LETTER NU
-316 206 CE Ξ GREEK CAPITAL LETTER XI
-317 207 CF Ο GREEK CAPITAL LETTER OMICRON
-320 208 D0 Π GREEK CAPITAL LETTER PI
-321 209 D1 Ρ GREEK CAPITAL LETTER RHO
-323 211 D3 Σ GREEK CAPITAL LETTER SIGMA
-324 212 D4 Τ GREEK CAPITAL LETTER TAU
-325 213 D5 Υ GREEK CAPITAL LETTER UPSILON
-326 214 D6 Φ GREEK CAPITAL LETTER PHI
-327 215 D7 Χ GREEK CAPITAL LETTER CHI
-330 216 D8 Ψ GREEK CAPITAL LETTER PSI
-331 217 D9 Ω GREEK CAPITAL LETTER OMEGA
-332 218 DA Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-333 219 DB Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-334 220 DC ά GREEK SMALL LETTER ALPHA WITH TONOS
-335 221 DD έ GREEK SMALL LETTER EPSILON WITH TONOS
-336 222 DE ή GREEK SMALL LETTER ETA WITH TONOS
-337 223 DF ί GREEK SMALL LETTER IOTA WITH TONOS
-340 224 E0 ΰ T{
-GREEK SMALL LETTER UPSILON WITH
-DIALYTIKA AND TONOS
-T}
-341 225 E1 α GREEK SMALL LETTER ALPHA
-342 226 E2 β GREEK SMALL LETTER BETA
-343 227 E3 γ GREEK SMALL LETTER GAMMA
-344 228 E4 δ GREEK SMALL LETTER DELTA
-345 229 E5 ε GREEK SMALL LETTER EPSILON
-346 230 E6 ζ GREEK SMALL LETTER ZETA
-347 231 E7 η GREEK SMALL LETTER ETA
-350 232 E8 θ GREEK SMALL LETTER THETA
-351 233 E9 ι GREEK SMALL LETTER IOTA
-352 234 EA κ GREEK SMALL LETTER KAPPA
-353 235 EB λ GREEK SMALL LETTER LAMBDA
-354 236 EC μ GREEK SMALL LETTER MU
-355 237 ED ν GREEK SMALL LETTER NU
-356 238 EE ξ GREEK SMALL LETTER XI
-357 239 EF ο GREEK SMALL LETTER OMICRON
-360 240 F0 π GREEK SMALL LETTER PI
-361 241 F1 ρ GREEK SMALL LETTER RHO
-362 242 F2 ς GREEK SMALL LETTER FINAL SIGMA
-363 243 F3 σ GREEK SMALL LETTER SIGMA
-364 244 F4 τ GREEK SMALL LETTER TAU
-365 245 F5 υ GREEK SMALL LETTER UPSILON
-366 246 F6 φ GREEK SMALL LETTER PHI
-367 247 F7 χ GREEK SMALL LETTER CHI
-370 248 F8 ψ GREEK SMALL LETTER PSI
-371 249 F9 ω GREEK SMALL LETTER OMEGA
-372 250 FA ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA
-373 251 FB ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-374 252 FC ό GREEK SMALL LETTER OMICRON WITH TONOS
-375 253 FD ύ GREEK SMALL LETTER UPSILON WITH TONOS
-376 254 FE ώ GREEK SMALL LETTER OMEGA WITH TONOS
-.TE
-.SH NOTES
-ISO 8859-7 was formerly known as ELOT-928 or ECMA-118:1986.
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR utf\-8 (7)
diff --git a/man7/iso_8859-8.7 b/man7/iso_8859-8.7
deleted file mode 100644
index bcc42721a..000000000
--- a/man7/iso_8859-8.7
+++ /dev/null
@@ -1,114 +0,0 @@
-'\" t
-.\" Copyright 2009 Lefteris Dimitroulakis (edimitro@tee.gr)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Eli Zaretskii <eliz@gnu.org> made valuable suggestions
-.\"
-.TH ISO_8859-8 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iso_8859-8 \- ISO 8859-8 character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The ISO 8859 standard includes several 8-bit extensions to the ASCII
-character set (also known as ISO 646-IRV).
-ISO 8859-8 encodes the
-characters used in Modern Hebrew.
-.SS ISO 8859 alphabets
-The full set of ISO 8859 alphabets includes:
-.TS
-l l.
-ISO 8859-1 West European languages (Latin-1)
-ISO 8859-2 Central and East European languages (Latin-2)
-ISO 8859-3 Southeast European and miscellaneous languages (Latin-3)
-ISO 8859-4 Scandinavian/Baltic languages (Latin-4)
-ISO 8859-5 Latin/Cyrillic
-ISO 8859-6 Latin/Arabic
-ISO 8859-7 Latin/Greek
-ISO 8859-8 Latin/Hebrew
-ISO 8859-9 Latin-1 modification for Turkish (Latin-5)
-ISO 8859-10 Lappish/Nordic/Eskimo languages (Latin-6)
-ISO 8859-11 Latin/Thai
-ISO 8859-13 Baltic Rim languages (Latin-7)
-ISO 8859-14 Celtic (Latin-8)
-ISO 8859-15 West European languages (Latin-9)
-ISO 8859-16 Romanian (Latin-10)
-.TE
-.SS ISO 8859-8 characters
-The following table displays the characters in ISO 8859-8 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-240 160 A0 NO-BREAK SPACE
-242 162 A2 ¢ CENT SIGN
-243 163 A3 £ POUND SIGN
-244 164 A4 ¤ CURRENCY SIGN
-245 165 A5 ¥ YEN SIGN
-246 166 A6 ¦ BROKEN BAR
-247 167 A7 § SECTION SIGN
-250 168 A8 ¨ DIAERESIS
-251 169 A9 © COPYRIGHT SIGN
-252 170 AA × MULTIPLICATION SIGN
-253 171 AB « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-254 172 AC ¬ NOT SIGN
-255 173 AD ­ SOFT HYPHEN
-256 174 AE ® REGISTERED SIGN
-257 175 AF ¯ MACRON
-260 176 B0 ° DEGREE SIGN
-261 177 B1 ± PLUS-MINUS SIGN
-262 178 B2 ² SUPERSCRIPT TWO
-263 179 B3 ³ SUPERSCRIPT THREE
-264 180 B4 ´ ACUTE ACCENT
-265 181 B5 µ MICRO SIGN
-266 182 B6 ¶ PILCROW SIGN
-267 183 B7 · MIDDLE DOT
-270 184 B8 ¸ CEDILLA
-271 185 B9 ¹ SUPERSCRIPT ONE
-272 186 BA ÷ DIVISION SIGN
-273 187 BB » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-274 188 BC ¼ VULGAR FRACTION ONE QUARTER
-275 189 BD ½ VULGAR FRACTION ONE HALF
-276 190 BE ¾ VULGAR FRACTION THREE QUARTERS
-337 223 DF ‗ DOUBLE LOW LINE
-340 224 E0 א HEBREW LETTER ALEF
-341 225 E1 ב HEBREW LETTER BET
-342 226 E2 ג HEBREW LETTER GIMEL
-343 227 E3 ד HEBREW LETTER DALET
-344 228 E4 ה HEBREW LETTER HE
-345 229 E5 ו HEBREW LETTER VAV
-346 230 E6 ז HEBREW LETTER ZAYIN
-347 231 E7 ח HEBREW LETTER HET
-350 232 E8 ט HEBREW LETTER TET
-351 233 E9 י HEBREW LETTER YOD
-352 234 EA ך HEBREW LETTER FINAL KAF
-353 235 EB כ HEBREW LETTER KAF
-354 236 EC ל HEBREW LETTER LAMED
-355 237 ED ם HEBREW LETTER FINAL MEM
-356 238 EE מ HEBREW LETTER MEM
-357 239 EF ן HEBREW LETTER FINAL NUN
-360 240 F0 נ HEBREW LETTER NUN
-361 241 F1 ס HEBREW LETTER SAMEKH
-362 242 F2 ע HEBREW LETTER AYIN
-363 243 F3 ף HEBREW LETTER FINAL PE
-364 244 F4 פ HEBREW LETTER PE
-365 245 F5 ץ HEBREW LETTER FINAL TSADI
-366 246 F6 צ HEBREW LETTER TSADI
-367 247 F7 ק HEBREW LETTER QOF
-370 248 F8 ר HEBREW LETTER RESH
-371 249 F9 ש HEBREW LETTER SHIN
-372 250 FA ת HEBREW LETTER TAV
-375 253 FD ‎ LEFT-TO-RIGHT MARK
-376 254 FE ‏ RIGHT-TO-LEFT MARK
-.TE
-.SH NOTES
-ISO 8859-8 was also known as ISO-IR-138.
-ISO 8859-8 includes neither short vowels nor diacritical marks,
-and Yiddish is not provided for.
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR utf\-8 (7)
diff --git a/man7/iso_8859-9.7 b/man7/iso_8859-9.7
deleted file mode 100644
index 36837c3ad..000000000
--- a/man7/iso_8859-9.7
+++ /dev/null
@@ -1,146 +0,0 @@
-'\" t
-.\" Copyright 2002 Dimitri Papadopoulos (dpo@club-internet.fr)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH ISO_8859-9 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iso_8859-9 \- ISO 8859-9 character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-The ISO 8859 standard includes several 8-bit extensions to the ASCII
-character set (also known as ISO 646-IRV).
-ISO 8859-9 encodes the
-characters used in Turkish.
-.SS ISO 8859 alphabets
-The full set of ISO 8859 alphabets includes:
-.TS
-l l.
-ISO 8859-1 West European languages (Latin-1)
-ISO 8859-2 Central and East European languages (Latin-2)
-ISO 8859-3 Southeast European and miscellaneous languages (Latin-3)
-ISO 8859-4 Scandinavian/Baltic languages (Latin-4)
-ISO 8859-5 Latin/Cyrillic
-ISO 8859-6 Latin/Arabic
-ISO 8859-7 Latin/Greek
-ISO 8859-8 Latin/Hebrew
-ISO 8859-9 Latin-1 modification for Turkish (Latin-5)
-ISO 8859-10 Lappish/Nordic/Eskimo languages (Latin-6)
-ISO 8859-11 Latin/Thai
-ISO 8859-13 Baltic Rim languages (Latin-7)
-ISO 8859-14 Celtic (Latin-8)
-ISO 8859-15 West European languages (Latin-9)
-ISO 8859-16 Romanian (Latin-10)
-.TE
-.SS ISO 8859-9 characters
-The following table displays the characters in ISO 8859-9 that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-240 160 A0   NO-BREAK SPACE
-241 161 A1 ¡ INVERTED EXCLAMATION MARK
-242 162 A2 ¢ CENT SIGN
-243 163 A3 £ POUND SIGN
-244 164 A4 ¤ CURRENCY SIGN
-245 165 A5 ¥ YEN SIGN
-246 166 A6 ¦ BROKEN BAR
-247 167 A7 § SECTION SIGN
-250 168 A8 ¨ DIAERESIS
-251 169 A9 © COPYRIGHT SIGN
-252 170 AA ª FEMININE ORDINAL INDICATOR
-253 171 AB « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-254 172 AC ¬ NOT SIGN
-255 173 AD ­ SOFT HYPHEN
-256 174 AE ® REGISTERED SIGN
-257 175 AF ¯ MACRON
-260 176 B0 ° DEGREE SIGN
-261 177 B1 ± PLUS-MINUS SIGN
-262 178 B2 ² SUPERSCRIPT TWO
-263 179 B3 ³ SUPERSCRIPT THREE
-264 180 B4 ´ ACUTE ACCENT
-265 181 B5 µ MICRO SIGN
-266 182 B6 ¶ PILCROW SIGN
-267 183 B7 · MIDDLE DOT
-270 184 B8 ¸ CEDILLA
-271 185 B9 ¹ SUPERSCRIPT ONE
-272 186 BA º MASCULINE ORDINAL INDICATOR
-273 187 BB » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-274 188 BC ¼ VULGAR FRACTION ONE QUARTER
-275 189 BD ½ VULGAR FRACTION ONE HALF
-276 190 BE ¾ VULGAR FRACTION THREE QUARTERS
-277 191 BF ¿ INVERTED QUESTION MARK
-300 192 C0 À LATIN CAPITAL LETTER A WITH GRAVE
-301 193 C1 Á LATIN CAPITAL LETTER A WITH ACUTE
-302 194 C2 Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-303 195 C3 Ã LATIN CAPITAL LETTER A WITH TILDE
-304 196 C4 Ä LATIN CAPITAL LETTER A WITH DIAERESIS
-305 197 C5 Å LATIN CAPITAL LETTER A WITH RING ABOVE
-306 198 C6 Æ LATIN CAPITAL LETTER AE
-307 199 C7 Ç LATIN CAPITAL LETTER C WITH CEDILLA
-310 200 C8 È LATIN CAPITAL LETTER E WITH GRAVE
-311 201 C9 É LATIN CAPITAL LETTER E WITH ACUTE
-312 202 CA Ê LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-313 203 CB Ë LATIN CAPITAL LETTER E WITH DIAERESIS
-314 204 CC Ì LATIN CAPITAL LETTER I WITH GRAVE
-315 205 CD Í LATIN CAPITAL LETTER I WITH ACUTE
-316 206 CE Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-317 207 CF Ï LATIN CAPITAL LETTER I WITH DIAERESIS
-320 208 D0 Ğ LATIN CAPITAL LETTER G WITH BREVE
-321 209 D1 Ñ LATIN CAPITAL LETTER N WITH TILDE
-322 210 D2 Ò LATIN CAPITAL LETTER O WITH GRAVE
-323 211 D3 Ó LATIN CAPITAL LETTER O WITH ACUTE
-324 212 D4 Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-325 213 D5 Õ LATIN CAPITAL LETTER O WITH TILDE
-326 214 D6 Ö LATIN CAPITAL LETTER O WITH DIAERESIS
-327 215 D7 × MULTIPLICATION SIGN
-330 216 D8 Ø LATIN CAPITAL LETTER O WITH STROKE
-331 217 D9 Ù LATIN CAPITAL LETTER U WITH GRAVE
-332 218 DA Ú LATIN CAPITAL LETTER U WITH ACUTE
-333 219 DB Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-334 220 DC Ü LATIN CAPITAL LETTER U WITH DIAERESIS
-335 221 DD İ LATIN CAPITAL LETTER I WITH DOT ABOVE
-336 222 DE Ş LATIN CAPITAL LETTER S WITH CEDILLA
-337 223 DF ß LATIN SMALL LETTER SHARP S
-340 224 E0 à LATIN SMALL LETTER A WITH GRAVE
-341 225 E1 á LATIN SMALL LETTER A WITH ACUTE
-342 226 E2 â LATIN SMALL LETTER A WITH CIRCUMFLEX
-343 227 E3 ã LATIN SMALL LETTER A WITH TILDE
-344 228 E4 ä LATIN SMALL LETTER A WITH DIAERESIS
-345 229 E5 å LATIN SMALL LETTER A WITH RING ABOVE
-346 230 E6 æ LATIN SMALL LETTER AE
-347 231 E7 ç LATIN SMALL LETTER C WITH CEDILLA
-350 232 E8 è LATIN SMALL LETTER E WITH GRAVE
-351 233 E9 é LATIN SMALL LETTER E WITH ACUTE
-352 234 EA ê LATIN SMALL LETTER E WITH CIRCUMFLEX
-353 235 EB ë LATIN SMALL LETTER E WITH DIAERESIS
-354 236 EC ì LATIN SMALL LETTER I WITH GRAVE
-355 237 ED í LATIN SMALL LETTER I WITH ACUTE
-356 238 EE î LATIN SMALL LETTER I WITH CIRCUMFLEX
-357 239 EF ï LATIN SMALL LETTER I WITH DIAERESIS
-360 240 F0 ğ LATIN SMALL LETTER G WITH BREVE
-361 241 F1 ñ LATIN SMALL LETTER N WITH TILDE
-362 242 F2 ò LATIN SMALL LETTER O WITH GRAVE
-363 243 F3 ó LATIN SMALL LETTER O WITH ACUTE
-364 244 F4 ô LATIN SMALL LETTER O WITH CIRCUMFLEX
-365 245 F5 õ LATIN SMALL LETTER O WITH TILDE
-366 246 F6 ö LATIN SMALL LETTER O WITH DIAERESIS
-367 247 F7 ÷ DIVISION SIGN
-370 248 F8 ø LATIN SMALL LETTER O WITH STROKE
-371 249 F9 ù LATIN SMALL LETTER U WITH GRAVE
-372 250 FA ú LATIN SMALL LETTER U WITH ACUTE
-373 251 FB û LATIN SMALL LETTER U WITH CIRCUMFLEX
-374 252 FC ü LATIN SMALL LETTER U WITH DIAERESIS
-375 253 FD ı LATIN SMALL LETTER DOTLESS I
-376 254 FE ş LATIN SMALL LETTER S WITH CEDILLA
-377 255 FF ÿ LATIN SMALL LETTER Y WITH DIAERESIS
-.TE
-.SH NOTES
-ISO 8859-9 is also known as Latin-5.
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR utf\-8 (7)
diff --git a/man7/iso_8859_1.7 b/man7/iso_8859_1.7
deleted file mode 100644
index 1969dfb2f..000000000
--- a/man7/iso_8859_1.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-1.7
diff --git a/man7/iso_8859_10.7 b/man7/iso_8859_10.7
deleted file mode 100644
index 9b4658f25..000000000
--- a/man7/iso_8859_10.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-10.7
diff --git a/man7/iso_8859_11.7 b/man7/iso_8859_11.7
deleted file mode 100644
index cbd4cfe7c..000000000
--- a/man7/iso_8859_11.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-11.7
diff --git a/man7/iso_8859_13.7 b/man7/iso_8859_13.7
deleted file mode 100644
index 8ad23352e..000000000
--- a/man7/iso_8859_13.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-13.7
diff --git a/man7/iso_8859_14.7 b/man7/iso_8859_14.7
deleted file mode 100644
index 4aa555db9..000000000
--- a/man7/iso_8859_14.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-14.7
diff --git a/man7/iso_8859_15.7 b/man7/iso_8859_15.7
deleted file mode 100644
index a4095d754..000000000
--- a/man7/iso_8859_15.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-15.7
diff --git a/man7/iso_8859_16.7 b/man7/iso_8859_16.7
deleted file mode 100644
index b9c8e9182..000000000
--- a/man7/iso_8859_16.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-16.7
diff --git a/man7/iso_8859_2.7 b/man7/iso_8859_2.7
deleted file mode 100644
index da36668dd..000000000
--- a/man7/iso_8859_2.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-2.7
diff --git a/man7/iso_8859_3.7 b/man7/iso_8859_3.7
deleted file mode 100644
index 75e42ce3d..000000000
--- a/man7/iso_8859_3.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-3.7
diff --git a/man7/iso_8859_4.7 b/man7/iso_8859_4.7
deleted file mode 100644
index 15a829eb3..000000000
--- a/man7/iso_8859_4.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-4.7
diff --git a/man7/iso_8859_5.7 b/man7/iso_8859_5.7
deleted file mode 100644
index 1f20320e7..000000000
--- a/man7/iso_8859_5.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-5.7
diff --git a/man7/iso_8859_6.7 b/man7/iso_8859_6.7
deleted file mode 100644
index edcafdf6e..000000000
--- a/man7/iso_8859_6.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-6.7
diff --git a/man7/iso_8859_7.7 b/man7/iso_8859_7.7
deleted file mode 100644
index 951384c99..000000000
--- a/man7/iso_8859_7.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-7.7
diff --git a/man7/iso_8859_8.7 b/man7/iso_8859_8.7
deleted file mode 100644
index 07cf21627..000000000
--- a/man7/iso_8859_8.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-8.7
diff --git a/man7/iso_8859_9.7 b/man7/iso_8859_9.7
deleted file mode 100644
index 0fcc7d463..000000000
--- a/man7/iso_8859_9.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-9.7
diff --git a/man7/kernel_lockdown.7 b/man7/kernel_lockdown.7
deleted file mode 100644
index 8bcd603b9..000000000
--- a/man7/kernel_lockdown.7
+++ /dev/null
@@ -1,109 +0,0 @@
-.\"
-.\" Copyright (C) 2017 Red Hat, Inc. All Rights Reserved.
-.\" Written by David Howells (dhowells@redhat.com)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH kernel_lockdown 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-kernel_lockdown \- kernel image access prevention feature
-.SH DESCRIPTION
-The Kernel Lockdown feature is designed to prevent both direct and indirect
-access to a running kernel image, attempting to protect against unauthorized
-modification of the kernel image and to prevent access to security and
-cryptographic data located in kernel memory, whilst still permitting driver
-modules to be loaded.
-.PP
-If a prohibited or restricted feature is accessed or used, the kernel will emit
-a message that looks like:
-.PP
-.in +4n
-.EX
-Lockdown: X: Y is restricted, see man kernel_lockdown.7
-.EE
-.in
-.PP
-where X indicates the process name and Y indicates what is restricted.
-.PP
-On an EFI-enabled x86 or arm64 machine, lockdown will be automatically enabled
-if the system boots in EFI Secure Boot mode.
-.\"
-.SS Coverage
-When lockdown is in effect, a number of features are disabled or have their
-use restricted.
-This includes special device files and kernel services that allow
-direct access of the kernel image:
-.PP
-.RS
-/dev/mem
-.br
-/dev/kmem
-.br
-/dev/kcore
-.br
-/dev/ioports
-.br
-BPF
-.br
-kprobes
-.RE
-.PP
-and the ability to directly configure and control devices, so as to prevent
-the use of a device to access or modify a kernel image:
-.IP \[bu] 3
-The use of module parameters that directly specify hardware parameters to
-drivers through the kernel command line or when loading a module.
-.IP \[bu]
-The use of direct PCI BAR access.
-.IP \[bu]
-The use of the ioperm and iopl instructions on x86.
-.IP \[bu]
-The use of the KD*IO console ioctls.
-.IP \[bu]
-The use of the TIOCSSERIAL serial ioctl.
-.IP \[bu]
-The alteration of MSR registers on x86.
-.IP \[bu]
-The replacement of the PCMCIA CIS.
-.IP \[bu]
-The overriding of ACPI tables.
-.IP \[bu]
-The use of ACPI error injection.
-.IP \[bu]
-The specification of the ACPI RDSP address.
-.IP \[bu]
-The use of ACPI custom methods.
-.PP
-Certain facilities are restricted:
-.IP \[bu] 3
-Only validly signed modules may be loaded (waived if the module file being
-loaded is vouched for by IMA appraisal).
-.IP \[bu]
-Only validly signed binaries may be kexec'd (waived if the binary image file
-to be executed is vouched for by IMA appraisal).
-.IP \[bu]
-Unencrypted hibernation/suspend to swap are disallowed as the kernel image is
-saved to a medium that can then be accessed.
-.IP \[bu]
-Use of debugfs is not permitted as this allows a whole range of actions
-including direct configuration of, access to and driving of hardware.
-.IP \[bu]
-IMA requires the addition of the "secure_boot" rules to the policy,
-whether or not they are specified on the command line,
-for both the built-in and custom policies in secure boot lockdown mode.
-.SH VERSIONS
-The Kernel Lockdown feature was added in Linux 5.4.
-.SH NOTES
-The Kernel Lockdown feature is enabled by CONFIG_SECURITY_LOCKDOWN_LSM.
-The
-.I lsm=lsm1,...,lsmN
-command line parameter controls the sequence of the initialization of
-Linux Security Modules.
-It must contain the string
-.I lockdown
-to enable the Kernel Lockdown feature.
-If the command line parameter is not specified,
-the initialization falls back to the value of the deprecated
-.I security=
-command line parameter and further to the value of CONFIG_LSM.
-.\" commit 000d388ed3bbed745f366ce71b2bb7c2ee70f449
diff --git a/man7/keyrings.7 b/man7/keyrings.7
deleted file mode 100644
index 4f5e1a55b..000000000
--- a/man7/keyrings.7
+++ /dev/null
@@ -1,901 +0,0 @@
-.\" Copyright (C) 2014 Red Hat, Inc. All Rights Reserved.
-.\" Written by David Howells (dhowells@redhat.com)
-.\" and Copyright (C) 2016 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH keyrings 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-keyrings \- in-kernel key management and retention facility
-.SH DESCRIPTION
-The Linux key-management facility
-is primarily a way for various kernel components
-to retain or cache security data,
-authentication keys, encryption keys, and other data in the kernel.
-.PP
-System call interfaces are provided so that user-space programs can manage
-those objects and also use the facility for their own purposes; see
-.BR add_key (2),
-.BR request_key (2),
-and
-.BR keyctl (2).
-.PP
-A library and some user-space utilities are provided to allow access to the
-facility.
-See
-.BR keyctl (1),
-.BR keyctl (3),
-and
-.BR keyutils (7)
-for more information.
-.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.SS Keys
-A key has the following attributes:
-.TP
-Serial number (ID)
-This is a unique integer handle by which a key is referred to in system calls.
-The serial number is sometimes synonymously referred as the key ID.
-Programmatically, key serial numbers are represented using the type
-.IR key_serial_t .
-.TP
-Type
-A key's type defines what sort of data can be held in the key,
-how the proposed content of the key will be parsed,
-and how the payload will be used.
-.IP
-There are a number of general-purpose types available, plus some specialist
-types defined by specific kernel components.
-.TP
-Description (name)
-The key description is a printable string that is used as the search term
-for the key (in conjunction with the key type) as well as a display name.
-During searches, the description may be partially matched or exactly matched.
-.TP
-Payload (data)
-The payload is the actual content of a key.
-This is usually set when a key is created,
-but it is possible for the kernel to upcall to user space to finish the
-instantiation of a key if that key wasn't already known to the kernel
-when it was requested.
-For further details, see
-.BR request_key (2).
-.IP
-A key's payload can be read and updated if the key type supports it and if
-suitable permission is granted to the caller.
-.TP
-Access rights
-Much as files do,
-each key has an owning user ID, an owning group ID, and a security label.
-Each key also has a set of permissions,
-though there are more than for a normal UNIX file,
-and there is an additional category\[em]possessor\[em]beyond the usual user,
-group, and other (see
-.IR Possession ,
-below).
-.IP
-Note that keys are quota controlled, since they require unswappable kernel
-memory.
-The owning user ID specifies whose quota is to be debited.
-.TP
-Expiration time
-Each key can have an expiration time set.
-When that time is reached,
-the key is marked as being expired and accesses to it fail with the error
-.BR EKEYEXPIRED .
-If not deleted, updated, or replaced, then, after a set amount of time,
-an expired key is automatically removed (garbage collected)
-along with all links to it,
-and attempts to access the key fail with the error
-.BR ENOKEY .
-.TP
-Reference count
-Each key has a reference count.
-Keys are referenced by keyrings, by currently active users,
-and by a process's credentials.
-When the reference count reaches zero,
-the key is scheduled for garbage collection.
-.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.SS Key types
-The kernel provides several basic types of key:
-.TP
-.I """keyring"""
-.\" Note that keyrings use different fields in struct key in order to store
-.\" their data - index_key instead of type/description and name_link/keys
-.\" instead of payload.
-Keyrings are special keys which store a set of links
-to other keys (including other keyrings),
-analogous to a directory holding links to files.
-The main purpose of a keyring is to prevent other keys from
-being garbage collected because nothing refers to them.
-.IP
-Keyrings with descriptions (names)
-that begin with a period (\[aq].\[aq]) are reserved to the implementation.
-.TP
-.I """user"""
-This is a general-purpose key type.
-The key is kept entirely within kernel memory.
-The payload may be read and updated by user-space applications.
-.IP
-The payload for keys of this type is a blob of arbitrary data
-of up to 32,767 bytes.
-.IP
-The description may be any valid string, though it is preferred that it
-start with a colon-delimited prefix representing the service
-to which the key is of interest
-(for instance
-.IR """afs:mykey""" ).
-.TP
-.IR """logon""" " (since Linux 3.3)"
-.\" commit 9f6ed2ca257fa8650b876377833e6f14e272848b
-This key type is essentially the same as
-.IR """user""" ,
-but it does not provide reading (i.e., the
-.BR keyctl (2)
-.B KEYCTL_READ
-operation),
-meaning that the key payload is never visible from user space.
-This is suitable for storing username-password pairs
-that should not be readable from user space.
-.IP
-The description of a
-.I """logon"""
-key
-.I must
-start with a non-empty colon-delimited prefix whose purpose
-is to identify the service to which the key belongs.
-(Note that this differs from keys of the
-.I """user"""
-type, where the inclusion of a prefix is recommended but is not enforced.)
-.TP
-.IR """big_key""" " (since Linux 3.13)"
-.\" commit ab3c3587f8cda9083209a61dbe3a4407d3cada10
-This key type is similar to the
-.I """user"""
-key type, but it may hold a payload of up to 1\ MiB in size.
-This key type is useful for purposes such as holding Kerberos ticket caches.
-.IP
-The payload data may be stored in a tmpfs filesystem,
-rather than in kernel memory,
-if the data size exceeds the overhead of storing the data in the filesystem.
-(Storing the data in a filesystem requires filesystem structures
-to be allocated in the kernel.
-The size of these structures determines the size threshold
-above which the tmpfs storage method is used.)
-Since Linux 4.8,
-.\" commit 13100a72f40f5748a04017e0ab3df4cf27c809ef
-the payload data is encrypted when stored in tmpfs,
-thereby preventing it from being written unencrypted into swap space.
-.PP
-There are more specialized key types available also,
-but they aren't discussed here
-because they aren't intended for normal user-space use.
-.PP
-Key type names
-that begin with a period (\[aq].\[aq]) are reserved to the implementation.
-.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.SS Keyrings
-As previously mentioned, keyrings are a special type of key that contain
-links to other keys (which may include other keyrings).
-Keys may be linked to by multiple keyrings.
-Keyrings may be considered as analogous to UNIX directories
-where each directory contains a set of hard links to files.
-.PP
-Various operations (system calls) may be applied only to keyrings:
-.TP
-Adding
-A key may be added to a keyring by system calls that create keys.
-This prevents the new key from being immediately deleted
-when the system call releases its last reference to the key.
-.TP
-Linking
-A link may be added to a keyring pointing to a key that is already known,
-provided this does not create a self-referential cycle.
-.TP
-Unlinking
-A link may be removed from a keyring.
-When the last link to a key is removed,
-that key will be scheduled for deletion by the garbage collector.
-.TP
-Clearing
-All the links may be removed from a keyring.
-.TP
-Searching
-A keyring may be considered the root of a tree or subtree in which keyrings
-form the branches and non-keyrings the leaves.
-This tree may be searched for a key matching
-a particular type and description.
-.PP
-See
-.BR keyctl_clear (3),
-.BR keyctl_link (3),
-.BR keyctl_search (3),
-and
-.BR keyctl_unlink (3)
-for more information.
-.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.SS Anchoring keys
-To prevent a key from being garbage collected,
-it must be anchored to keep its reference count elevated
-when it is not in active use by the kernel.
-.PP
-Keyrings are used to anchor other keys:
-each link is a reference on a key.
-Note that keyrings themselves are just keys and
-are also subject to the same anchoring requirement to prevent
-them being garbage collected.
-.PP
-The kernel makes available a number of anchor keyrings.
-Note that some of these keyrings will be created only when first accessed.
-.TP
-Process keyrings
-Process credentials themselves reference keyrings with specific semantics.
-These keyrings are pinned as long as the set of credentials exists,
-which is usually as long as the process exists.
-.IP
-There are three keyrings with different inheritance/sharing rules:
-the
-.BR session\-keyring (7)
-(inherited and shared by all child processes),
-the
-.BR process\-keyring (7)
-(shared by all threads in a process) and
-the
-.BR thread\-keyring (7)
-(specific to a particular thread).
-.IP
-As an alternative to using the actual keyring IDs,
-in calls to
-.BR add_key (2),
-.BR keyctl (2),
-and
-.BR request_key (2),
-the special keyring values
-.BR KEY_SPEC_SESSION_KEYRING ,
-.BR KEY_SPEC_PROCESS_KEYRING ,
-and
-.B KEY_SPEC_THREAD_KEYRING
-can be used to refer to the caller's own instances of these keyrings.
-.TP
-User keyrings
-Each UID known to the kernel has a record that contains two keyrings: the
-.BR user\-keyring (7)
-and the
-.BR user\-session\-keyring (7).
-These exist for as long as the UID record in the kernel exists.
-.IP
-As an alternative to using the actual keyring IDs,
-in calls to
-.BR add_key (2),
-.BR keyctl (2),
-and
-.BR request_key (2),
-the special keyring values
-.B KEY_SPEC_USER_KEYRING
-and
-.B KEY_SPEC_USER_SESSION_KEYRING
-can be used to refer to the caller's own instances of these keyrings.
-.IP
-A link to the user keyring is placed in a new session keyring by
-.BR pam_keyinit (8)
-when a new login session is initiated.
-.TP
-Persistent keyrings
-There is a
-.BR persistent\-keyring (7)
-available to each UID known to the system.
-It may persist beyond the life of the UID record previously mentioned,
-but has an expiration time set such that it is automatically cleaned up
-after a set time.
-The persistent keyring permits, for example,
-.BR cron (8)
-scripts to use credentials that are left in the persistent keyring after
-the user logs out.
-.IP
-Note that the expiration time of the persistent keyring
-is reset every time the persistent key is requested.
-.TP
-Special keyrings
-There are special keyrings owned by the kernel that can anchor keys
-for special purposes.
-An example of this is the \fIsystem keyring\fR used for holding
-encryption keys for module signature verification.
-.IP
-These special keyrings are usually closed to direct alteration
-by user space.
-.PP
-An originally planned "group keyring",
-for storing keys associated with each GID known to the kernel,
-is not so far implemented, is unlikely to be implemented.
-Nevertheless, the constant
-.B KEY_SPEC_GROUP_KEYRING
-has been defined for this keyring.
-.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.SS Possession
-The concept of possession is important to understanding the keyrings
-security model.
-Whether a thread possesses a key is determined by the following rules:
-.IP (1) 5
-Any key or keyring that does not grant
-.I search
-permission to the caller is ignored in all the following rules.
-.IP (2)
-A thread possesses its
-.BR session\-keyring (7),
-.BR process\-keyring (7),
-and
-.BR thread\-keyring (7)
-directly because those keyrings are referred to by its credentials.
-.IP (3)
-If a keyring is possessed, then any key it links to is also possessed.
-.IP (4)
-If any key a keyring links to is itself a keyring, then rule (3) applies
-recursively.
-.IP (5)
-If a process is upcalled from the kernel to instantiate a key (see
-.BR request_key (2)),
-then it also possesses the requester's keyrings as in
-rule (1) as if it were the requester.
-.PP
-Note that possession is not a fundamental property of a key,
-but must rather be calculated each time the key is needed.
-.PP
-Possession is designed to allow set-user-ID programs run from, say
-a user's shell to access the user's keys.
-Granting permissions to the key possessor while denying them
-to the key owner and group allows the prevention of access to keys
-on the basis of UID and GID matches.
-.PP
-When it creates the session keyring,
-.BR pam_keyinit (8)
-adds a link to the
-.BR user\-keyring (7),
-thus making the user keyring and anything it contains possessed by default.
-.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.SS Access rights
-Each key has the following security-related attributes:
-.IP \[bu] 3
-The owning user ID
-.IP \[bu]
-The ID of a group that is permitted to access the key
-.IP \[bu]
-A security label
-.IP \[bu]
-A permissions mask
-.PP
-The permissions mask contains four sets of rights.
-The first three sets are mutually exclusive.
-One and only one will be in force for a particular access check.
-In order of descending priority, these three sets are:
-.TP
-.I user
-The set specifies the rights granted
-if the key's user ID matches the caller's filesystem user ID.
-.TP
-.I group
-The set specifies the rights granted
-if the user ID didn't match and the key's group ID matches the caller's
-filesystem GID or one of the caller's supplementary group IDs.
-.TP
-.I other
-The set specifies the rights granted
-if neither the key's user ID nor group ID matched.
-.PP
-The fourth set of rights is:
-.TP
-.I possessor
-The set specifies the rights granted
-if a key is determined to be possessed by the caller.
-.PP
-The complete set of rights for a key is the union of whichever
-of the first three sets is applicable plus the fourth set
-if the key is possessed.
-.PP
-The set of rights that may be granted in each of the four masks
-is as follows:
-.TP
-.I view
-The attributes of the key may be read.
-This includes the type,
-description, and access rights (excluding the security label).
-.TP
-.I read
-For a key: the payload of the key may be read.
-For a keyring: the list of serial numbers (keys) to
-which the keyring has links may be read.
-.TP
-.I write
-The payload of the key may be updated and the key may be revoked.
-For a keyring, links may be added to or removed from the keyring,
-and the keyring may be cleared completely (all links are removed),
-.TP
-.I search
-For a key (or a keyring): the key may be found by a search.
-For a keyring: keys and keyrings that are linked to by the
-keyring may be searched.
-.TP
-.I link
-Links may be created from keyrings to the key.
-The initial link to a key that is established when the key is created
-doesn't require this permission.
-.TP
-.I setattr
-The ownership details and security label of the key may be changed,
-the key's expiration time may be set, and the key may be revoked.
-.PP
-In addition to access rights, any active Linux Security Module (LSM) may
-prevent access to a key if its policy so dictates.
-A key may be given a
-security label or other attribute by the LSM;
-this label is retrievable via
-.BR keyctl_get_security (3).
-.PP
-See
-.BR keyctl_chown (3),
-.BR keyctl_describe (3),
-.BR keyctl_get_security (3),
-.BR keyctl_setperm (3),
-and
-.BR selinux (8)
-for more information.
-.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.SS Searching for keys
-One of the key features of the Linux key-management facility
-is the ability to find a key that a process is retaining.
-The
-.BR request_key (2)
-system call is the primary point of
-access for user-space applications to find a key.
-(Internally, the kernel has something similar available
-for use by internal components that make use of keys.)
-.PP
-The search algorithm works as follows:
-.IP (1) 5
-The process keyrings are searched in the following order: the
-.BR thread\-keyring (7)
-if it exists, the
-.BR process\-keyring (7)
-if it exists, and then either the
-.BR session\-keyring (7)
-if it exists or the
-.BR user\-session\-keyring (7)
-if that exists.
-.IP (2)
-If the caller was a process that was invoked by the
-.BR request_key (2)
-upcall mechanism, then the keyrings of the original caller of
-.BR request_key (2)
-will be searched as well.
-.IP (3)
-The search of a keyring tree is in breadth-first order:
-each keyring is searched first for a match,
-then the keyrings referred to by that keyring are searched.
-.IP (4)
-If a matching key is found that is valid,
-then the search terminates and that key is returned.
-.IP (5)
-If a matching key is found that has an error state attached,
-that error state is noted and the search continues.
-.IP (6)
-If no valid matching key is found,
-then the first noted error state is returned; otherwise, an
-.B ENOKEY
-error is returned.
-.PP
-It is also possible to search a specific keyring, in which case only steps
-(3) to (6) apply.
-.PP
-See
-.BR request_key (2)
-and
-.BR keyctl_search (3)
-for more information.
-.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.SS On-demand key creation
-If a key cannot be found,
-.BR request_key (2)
-will, if given a
-.I callout_info
-argument, create a new key and then upcall to user space to
-instantiate the key.
-This allows keys to be created on an as-needed basis.
-.PP
-Typically,
-this will involve the kernel creating a new process that executes the
-.BR request\-key (8)
-program, which will then execute the appropriate handler based on its
-configuration.
-.PP
-The handler is passed a special authorization key that allows it
-and only it to instantiate the new key.
-This is also used to permit searches performed by the
-handler program to also search the requester's keyrings.
-.PP
-See
-.BR request_key (2),
-.BR keyctl_assume_authority (3),
-.BR keyctl_instantiate (3),
-.BR keyctl_negate (3),
-.BR keyctl_reject (3),
-.BR request\-key (8),
-and
-.BR request\-key.conf (5)
-for more information.
-.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.SS /proc files
-The kernel provides various
-.I /proc
-files that expose information about keys or define limits on key usage.
-.TP
-.IR /proc/keys " (since Linux 2.6.10)"
-This file exposes a list of the keys for which the reading thread has
-.I view
-permission, providing various information about each key.
-The thread need not possess the key for it to be visible in this file.
-.\" David Howells, Dec 2016 linux-man@:
-.\" This [The thread need not possess the key for it to be visible in
-.\" this file.] is correct. See proc_keys_show() in security/keys/proc.c:
-.\"
-.\" rc = key_task_permission(key_ref, ctx.cred, KEY_NEED_VIEW);
-.\" if (rc < 0)
-.\" return 0;
-.\"
-.\"Possibly it shouldn't be, but for now it is.
-.\"
-.IP
-The only keys included in the list are those that grant
-.I view
-permission to the reading process
-(regardless of whether or not it possesses them).
-LSM security checks are still performed,
-and may filter out further keys that the process is not authorized to view.
-.IP
-An example of the data that one might see in this file
-(with the columns numbered for easy reference below)
-is the following:
-.IP
-.EX
- (1) (2) (3)(4) (5) (6) (7) (8) (9)
-009a2028 I\-\-Q\-\-\- 1 perm 3f010000 1000 1000 user krb_ccache:primary: 12
-1806c4ba I\-\-Q\-\-\- 1 perm 3f010000 1000 1000 keyring _pid: 2
-25d3a08f I\-\-Q\-\-\- 1 perm 1f3f0000 1000 65534 keyring _uid_ses.1000: 1
-28576bd8 I\-\-Q\-\-\- 3 perm 3f010000 1000 1000 keyring _krb: 1
-2c546d21 I\-\-Q\-\-\- 190 perm 3f030000 1000 1000 keyring _ses: 2
-30a4e0be I\-\-\-\-\-\- 4 2d 1f030000 1000 65534 keyring _persistent.1000: 1
-32100fab I\-\-Q\-\-\- 4 perm 1f3f0000 1000 65534 keyring _uid.1000: 2
-32a387ea I\-\-Q\-\-\- 1 perm 3f010000 1000 1000 keyring _pid: 2
-3ce56aea I\-\-Q\-\-\- 5 perm 3f030000 1000 1000 keyring _ses: 1
-.EE
-.IP
-The fields shown in each line of this file are as follows:
-.RS
-.TP
-ID (1)
-The ID (serial number) of the key, expressed in hexadecimal.
-.TP
-Flags (2)
-A set of flags describing the state of the key:
-.RS
-.TP
-I
-.\" KEY_FLAG_INSTANTIATED
-The key has been instantiated.
-.TP
-R
-.\" KEY_FLAG_REVOKED
-The key has been revoked.
-.TP
-D
-.\" KEY_FLAG_DEAD
-The key is dead (i.e., the key type has been unregistered).
-.\" unregister_key_type() in the kernel source
-(A key may be briefly in this state during garbage collection.)
-.TP
-Q
-.\" KEY_FLAG_IN_QUOTA
-The key contributes to the user's quota.
-.TP
-U
-.\" KEY_FLAG_USER_CONSTRUCT
-The key is under construction via a callback to user space;
-see
-.BR request\-key (2).
-.TP
-N
-.\" KEY_FLAG_NEGATIVE
-The key is negatively instantiated.
-.TP
-i
-.\" KEY_FLAG_INVALIDATED
-The key has been invalidated.
-.RE
-.TP
-Usage (3)
-This is a count of the number of kernel credential
-structures that are pinning the key
-(approximately: the number of threads and open file references
-that refer to this key).
-.TP
-Timeout (4)
-The amount of time until the key will expire,
-expressed in human-readable form (weeks, days, hours, minutes, and seconds).
-The string
-.I perm
-here means that the key is permanent (no timeout).
-The string
-.I expd
-means that the key has already expired,
-but has not yet been garbage collected.
-.TP
-Permissions (5)
-The key permissions, expressed as four hexadecimal bytes containing,
-from left to right, the possessor, user, group, and other permissions.
-Within each byte, the permission bits are as follows:
-.IP
-.PD 0
-.RS 12
-.TP
-0x01
-.I view
-.TP
-0x02
-.I read
-.TP
-0x04
-.I write
-.TP
-0x08
-.I search
-.TP
-0x10
-.I link
-.TP
-0x20
-.I setattr
-.RE
-.PD
-.TP
-UID (6)
-The user ID of the key owner.
-.TP
-GID (7)
-The group ID of the key.
-The value \-1 here means that the key has no group ID;
-this can occur in certain circumstances for keys created by the kernel.
-.TP
-Type (8)
-The key type (user, keyring, etc.)
-.TP
-Description (9)
-The key description (name).
-This field contains descriptive information about the key.
-For most key types, it has the form
-.IP
-.in +4n
-.EX
-name[: extra\-info]
-.EE
-.in
-.IP
-The
-.I name
-subfield is the key's description (name).
-The optional
-.I extra\-info
-field provides some further information about the key.
-The information that appears here depends on the key type, as follows:
-.RS
-.TP
-.IR """user""" " and " """logon"""
-The size in bytes of the key payload (expressed in decimal).
-.TP
-.I """keyring"""
-The number of keys linked to the keyring,
-or the string
-.I empty
-if there are no keys linked to the keyring.
-.TP
-.I """big_key"""
-The payload size in bytes, followed either by the string
-.IR [file] ,
-if the key payload exceeds the threshold that means that the
-payload is stored in a (swappable)
-.BR tmpfs (5)
-filesystem,
-or otherwise the string
-.IR [buff] ,
-indicating that the key is small enough to reside in kernel memory.
-.RE
-.IP
-For the
-.I """.request_key_auth"""
-key type
-(authorization key; see
-.BR request_key (2)),
-the description field has the form shown in the following example:
-.IP
-.in +4n
-.EX
-key:c9a9b19 pid:28880 ci:10
-.EE
-.in
-.IP
-The three subfields are as follows:
-.RS
-.TP
-.I key
-The hexadecimal ID of the key being instantiated in the requesting program.
-.TP
-.I pid
-The PID of the requesting program.
-.TP
-.I ci
-The length of the callout data with which the requested key should
-be instantiated
-(i.e., the length of the payload associated with the authorization key).
-.RE
-.RE
-.TP
-.IR /proc/key\-users " (since Linux 2.6.10)"
-This file lists various information for each user ID that
-has at least one key on the system.
-An example of the data that one might see in this file is the following:
-.IP
-.in +4n
-.EX
- 0: 10 9/9 2/1000000 22/25000000
- 42: 9 9/9 8/200 106/20000
-1000: 11 11/11 10/200 271/20000
-.EE
-.in
-.IP
-The fields shown in each line are as follows:
-.RS
-.TP
-.I uid
-The user ID.
-.TP
-.I usage
-This is a kernel-internal usage count for the kernel structure
-used to record key users.
-.TP
-.IR nkeys / nikeys
-The total number of keys owned by the user,
-and the number of those keys that have been instantiated.
-.TP
-.IR qnkeys / maxkeys
-The number of keys owned by the user,
-and the maximum number of keys that the user may own.
-.TP
-.IR qnbytes / maxbytes
-The number of bytes consumed in payloads of the keys owned by this user,
-and the upper limit on the number of bytes in key payloads for that user.
-.RE
-.TP
-.IR /proc/sys/kernel/keys/gc_delay " (since Linux 2.6.32)"
-.\" commit 5d135440faf7db8d566de0c6fab36b16cf9cfc3b
-The value in this file specifies the interval, in seconds,
-after which revoked and expired keys will be garbage collected.
-The purpose of having such an interval is so that there is a window
-of time where user space can see an error (respectively
-.B EKEYREVOKED
-and
-.BR EKEYEXPIRED )
-that indicates what happened to the key.
-.IP
-The default value in this file is 300 (i.e., 5 minutes).
-.TP
-.IR /proc/sys/kernel/keys/persistent_keyring_expiry " (since Linux 3.13)"
-.\" commit f36f8c75ae2e7d4da34f4c908cebdb4aa42c977e
-This file defines an interval, in seconds,
-to which the persistent keyring's expiration timer is reset
-each time the keyring is accessed (via
-.BR keyctl_get_persistent (3)
-or the
-.BR keyctl (2)
-.B KEYCTL_GET_PERSISTENT
-operation.)
-.IP
-The default value in this file is 259200 (i.e., 3 days).
-.PP
-The following files (which are writable by privileged processes)
-are used to enforce quotas on the number of keys
-and number of bytes of data that can be stored in key payloads:
-.TP
-.IR /proc/sys/kernel/keys/maxbytes " (since Linux 2.6.26)"
-.\" commit 0b77f5bfb45c13e1e5142374f9d6ca75292252a4
-.\" Previously: KEYQUOTA_MAX_BYTES 10000
-This is the maximum number of bytes of data that a nonroot user
-can hold in the payloads of the keys owned by the user.
-.IP
-The default value in this file is 20,000.
-.TP
-.IR /proc/sys/kernel/keys/maxkeys " (since Linux 2.6.26)"
-.\" commit 0b77f5bfb45c13e1e5142374f9d6ca75292252a4
-.\" Previously: KEYQUOTA_MAX_KEYS 100
-This is the maximum number of keys that a nonroot user may own.
-.IP
-The default value in this file is 200.
-.TP
-.IR /proc/sys/kernel/keys/root_maxbytes " (since Linux 2.6.26)"
-This is the maximum number of bytes of data that the root user
-(UID 0 in the root user namespace)
-can hold in the payloads of the keys owned by root.
-.IP
-.\"738c5d190f6540539a04baf36ce21d46b5da04bd
-The default value in this file is 25,000,000 (20,000 before Linux 3.17).
-.\" commit 0b77f5bfb45c13e1e5142374f9d6ca75292252a4
-.TP
-.IR /proc/sys/kernel/keys/root_maxkeys " (since Linux 2.6.26)"
-.\" commit 0b77f5bfb45c13e1e5142374f9d6ca75292252a4
-This is the maximum number of keys that the root user
-(UID 0 in the root user namespace)
-may own.
-.IP
-.\"738c5d190f6540539a04baf36ce21d46b5da04bd
-The default value in this file is 1,000,000 (200 before Linux 3.17).
-.PP
-With respect to keyrings,
-note that each link in a keyring consumes 4 bytes of the keyring payload.
-.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.SS Users
-The Linux key-management facility has a number of users and usages,
-but is not limited to those that already exist.
-.PP
-In-kernel users of this facility include:
-.TP
-Network filesystems - DNS
-The kernel uses the upcall mechanism provided by the keys to upcall to
-user space to do DNS lookups and then to cache the results.
-.TP
-AF_RXRPC and kAFS - Authentication
-The AF_RXRPC network protocol and the in-kernel AFS filesystem
-use keys to store the ticket needed to do secured or encrypted traffic.
-These are then looked up by
-network operations on AF_RXRPC and filesystem operations on kAFS.
-.TP
-NFS - User ID mapping
-The NFS filesystem uses keys to store mappings of
-foreign user IDs to local user IDs.
-.TP
-CIFS - Password
-The CIFS filesystem uses keys to store passwords for accessing remote shares.
-.TP
-Module verification
-The kernel build process can be made to cryptographically sign modules.
-That signature is then checked when a module is loaded.
-.PP
-User-space users of this facility include:
-.TP
-Kerberos key storage
-The MIT Kerberos 5 facility (libkrb5) can use keys to store authentication
-tokens which can be made to be automatically cleaned up a set time after
-the user last uses them,
-but until then permits them to hang around after the user
-has logged out so that
-.BR cron (8)
-scripts can use them.
-.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-.SH SEE ALSO
-.ad l
-.nh
-.BR keyctl (1),
-.BR add_key (2),
-.BR keyctl (2),
-.BR request_key (2),
-.BR keyctl (3),
-.BR keyutils (7),
-.BR persistent\-keyring (7),
-.BR process\-keyring (7),
-.BR session\-keyring (7),
-.BR thread\-keyring (7),
-.BR user\-keyring (7),
-.BR user\-session\-keyring (7),
-.BR pam_keyinit (8),
-.BR request\-key (8)
-.PP
-The kernel source files
-.I Documentation/crypto/asymmetric\-keys.txt
-and under
-.I Documentation/security/keys
-(or, before Linux 4.13, in the file
-.IR Documentation/security/keys.txt ).
diff --git a/man7/koi8-r.7 b/man7/koi8-r.7
deleted file mode 100644
index 3e1826a90..000000000
--- a/man7/koi8-r.7
+++ /dev/null
@@ -1,169 +0,0 @@
-'\" t
-.\" Copyright 2001 Alexey Mahotkin <alexm@hsys.msk.ru>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH KOI8-R 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-koi8-r \- Russian character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-RFC\ 1489 defines an 8-bit character set, KOI8-R.
-KOI8-R encodes the
-characters used in Russian.
-.SS KOI8-R characters
-The following table displays the characters in KOI8-R that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-200 128 80 ─ BOX DRAWINGS LIGHT HORIZONTAL
-201 129 81 │ BOX DRAWINGS LIGHT VERTICAL
-202 130 82 ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT
-203 131 83 ┐ BOX DRAWINGS LIGHT DOWN AND LEFT
-204 132 84 └ BOX DRAWINGS LIGHT UP AND RIGHT
-205 133 85 ┘ BOX DRAWINGS LIGHT UP AND LEFT
-206 134 86 ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-207 135 87 ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT
-210 136 88 ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-211 137 89 ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL
-212 138 8A ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-213 139 8B ▀ UPPER HALF BLOCK
-214 140 8C ▄ LOWER HALF BLOCK
-215 141 8D █ FULL BLOCK
-216 142 8E ▌ LEFT HALF BLOCK
-217 143 8F ▐ RIGHT HALF BLOCK
-220 144 90 ░ LIGHT SHADE
-221 145 91 ▒ MEDIUM SHADE
-222 146 92 ▓ DARK SHADE
-223 147 93 ⌠ TOP HALF INTEGRAL
-224 148 94 ■ BLACK SQUARE
-225 149 95 ∙ BULLET OPERATOR
-226 150 96 √ SQUARE ROOT
-227 151 97 ≈ ALMOST EQUAL TO
-230 152 98 ≤ LESS-THAN OR EQUAL TO
-231 153 99 ≥ GREATER-THAN OR EQUAL TO
-232 154 9A   NO-BREAK SPACE
-233 155 9B ⌡ BOTTOM HALF INTEGRAL
-234 156 9C ° DEGREE SIGN
-235 157 9D ² SUPERSCRIPT TWO
-236 158 9E · MIDDLE DOT
-237 159 9F ÷ DIVISION SIGN
-240 160 A0 ═ BOX DRAWINGS DOUBLE HORIZONTAL
-241 161 A1 ║ BOX DRAWINGS DOUBLE VERTICAL
-242 162 A2 ╒ BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-243 163 A3 ё CYRILLIC SMALL LETTER IO
-244 164 A4 ╓ BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-245 165 A5 ╔ BOX DRAWINGS DOUBLE DOWN AND RIGHT
-246 166 A6 ╕ BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-247 167 A7 ╖ BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-250 168 A8 ╗ BOX DRAWINGS DOUBLE DOWN AND LEFT
-251 169 A9 ╘ BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-252 170 AA ╙ BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-253 171 AB ╚ BOX DRAWINGS DOUBLE UP AND RIGHT
-254 172 AC ╛ BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-255 173 AD ╜ BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-256 174 AE ╝ BOX DRAWINGS DOUBLE UP AND LEFT
-257 175 AF ╞ BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-260 176 B0 ╟ BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-261 177 B1 ╠ BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-262 178 B2 ╡ BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-263 179 B3 Ё CYRILLIC CAPITAL LETTER IO
-264 180 B4 ╢ BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-265 181 B5 ╣ BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-266 182 B6 ╤ BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-267 183 B7 ╥ BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-270 184 B8 ╦ BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-271 185 B9 ╧ BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-272 186 BA ╨ BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-273 187 BB ╩ BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-274 188 BC ╪ T{
-BOX DRAWINGS VERTICAL SINGLE
-.br
-AND HORIZONTAL DOUBLE
-T}
-275 189 BD ╫ T{
-BOX DRAWINGS VERTICAL DOUBLE
-.br
-AND HORIZONTAL SINGLE
-T}
-276 190 BE ╬ BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-277 191 BF © COPYRIGHT SIGN
-300 192 C0 ю CYRILLIC SMALL LETTER YU
-301 193 C1 а CYRILLIC SMALL LETTER A
-302 194 C2 б CYRILLIC SMALL LETTER BE
-303 195 C3 ц CYRILLIC SMALL LETTER TSE
-304 196 C4 д CYRILLIC SMALL LETTER DE
-305 197 C5 е CYRILLIC SMALL LETTER IE
-306 198 C6 ф CYRILLIC SMALL LETTER EF
-307 199 C7 г CYRILLIC SMALL LETTER GHE
-310 200 C8 х CYRILLIC SMALL LETTER HA
-311 201 C9 и CYRILLIC SMALL LETTER I
-312 202 CA й CYRILLIC SMALL LETTER SHORT I
-313 203 CB к CYRILLIC SMALL LETTER KA
-314 204 CC л CYRILLIC SMALL LETTER EL
-315 205 CD м CYRILLIC SMALL LETTER EM
-316 206 CE н CYRILLIC SMALL LETTER EN
-317 207 CF о CYRILLIC SMALL LETTER O
-320 208 D0 п CYRILLIC SMALL LETTER PE
-321 209 D1 я CYRILLIC SMALL LETTER YA
-322 210 D2 р CYRILLIC SMALL LETTER ER
-323 211 D3 с CYRILLIC SMALL LETTER ES
-324 212 D4 т CYRILLIC SMALL LETTER TE
-325 213 D5 у CYRILLIC SMALL LETTER U
-326 214 D6 ж CYRILLIC SMALL LETTER ZHE
-327 215 D7 в CYRILLIC SMALL LETTER VE
-330 216 D8 ь CYRILLIC SMALL LETTER SOFT SIGN
-331 217 D9 ы CYRILLIC SMALL LETTER YERU
-332 218 DA з CYRILLIC SMALL LETTER ZE
-333 219 DB ш CYRILLIC SMALL LETTER SHA
-334 220 DC э CYRILLIC SMALL LETTER E
-335 221 DD щ CYRILLIC SMALL LETTER SHCHA
-336 222 DE ч CYRILLIC SMALL LETTER CHE
-337 223 DF ъ CYRILLIC SMALL LETTER HARD SIGN
-340 224 E0 Ю CYRILLIC CAPITAL LETTER YU
-341 225 E1 А CYRILLIC CAPITAL LETTER A
-342 226 E2 Б CYRILLIC CAPITAL LETTER BE
-343 227 E3 Ц CYRILLIC CAPITAL LETTER TSE
-344 228 E4 Д CYRILLIC CAPITAL LETTER DE
-345 229 E5 Е CYRILLIC CAPITAL LETTER IE
-346 230 E6 Ф CYRILLIC CAPITAL LETTER EF
-347 231 E7 Г CYRILLIC CAPITAL LETTER GHE
-350 232 E8 Х CYRILLIC CAPITAL LETTER HA
-351 233 E9 И CYRILLIC CAPITAL LETTER I
-352 234 EA Й CYRILLIC CAPITAL LETTER SHORT I
-353 235 EB К CYRILLIC CAPITAL LETTER KA
-354 236 EC Л CYRILLIC CAPITAL LETTER EL
-355 237 ED М CYRILLIC CAPITAL LETTER EM
-356 238 EE Н CYRILLIC CAPITAL LETTER EN
-357 239 EF О CYRILLIC CAPITAL LETTER O
-360 240 F0 П CYRILLIC CAPITAL LETTER PE
-361 241 F1 Я CYRILLIC CAPITAL LETTER YA
-362 242 F2 Р CYRILLIC CAPITAL LETTER ER
-363 243 F3 С CYRILLIC CAPITAL LETTER ES
-364 244 F4 Т CYRILLIC CAPITAL LETTER TE
-365 245 F5 У CYRILLIC CAPITAL LETTER U
-366 246 F6 Ж CYRILLIC CAPITAL LETTER ZHE
-367 247 F7 В CYRILLIC CAPITAL LETTER VE
-370 248 F8 Ь CYRILLIC CAPITAL LETTER SOFT SIGN
-371 249 F9 Ы CYRILLIC CAPITAL LETTER YERU
-372 250 FA З CYRILLIC CAPITAL LETTER ZE
-373 251 FB Ш CYRILLIC CAPITAL LETTER SHA
-374 252 FC Э CYRILLIC CAPITAL LETTER E
-375 253 FD Щ CYRILLIC CAPITAL LETTER SHCHA
-376 254 FE Ч CYRILLIC CAPITAL LETTER CHE
-377 255 FF Ъ CYRILLIC CAPITAL LETTER HARD SIGN
-.TE
-.SH NOTES
-The differences with KOI8-U are in the hex positions
-A4, A6, A7, AD, B4, B6, B7, and BD.
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR cp1251 (7),
-.BR iso_8859\-5 (7),
-.BR koi8\-u (7),
-.BR utf\-8 (7)
diff --git a/man7/koi8-u.7 b/man7/koi8-u.7
deleted file mode 100644
index 28cd1a4f1..000000000
--- a/man7/koi8-u.7
+++ /dev/null
@@ -1,175 +0,0 @@
-'\" t
-.\" Copyright 2009 Lefteris Dimitroulakis <edimitro at tee.gr>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 2009-01-15, mtk, Some edits
-.\"
-.TH KOI8-U 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-koi8-u \- Ukrainian character set encoded in octal, decimal,
-and hexadecimal
-.SH DESCRIPTION
-RFC\ 2310 defines an 8-bit character set, KOI8-U.
-KOI8-U encodes the
-characters used in Ukrainian and Byelorussian.
-.SS KOI8-U characters
-The following table displays the characters in KOI8-U that
-are printable and unlisted in the
-.BR ascii (7)
-manual page.
-.TS
-l l l c lp-1.
-Oct Dec Hex Char Description
-_
-200 128 80 ─ BOX DRAWINGS LIGHT HORIZONTAL
-201 129 81 │ BOX DRAWINGS LIGHT VERTICAL
-202 130 82 ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT
-203 131 83 ┐ BOX DRAWINGS LIGHT DOWN AND LEFT
-204 132 84 └ BOX DRAWINGS LIGHT UP AND RIGHT
-205 133 85 ┘ BOX DRAWINGS LIGHT UP AND LEFT
-206 134 86 ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-207 135 87 ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT
-210 136 88 ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-211 137 89 ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL
-212 138 8A ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-213 139 8B ▀ UPPER HALF BLOCK
-214 140 8C ▄ LOWER HALF BLOCK
-215 141 8D █ FULL BLOCK
-216 142 8E ▌ LEFT HALF BLOCK
-217 143 8F ▐ RIGHT HALF BLOCK
-220 144 90 ░ LIGHT SHADE
-221 145 91 ▒ MEDIUM SHADE
-222 146 92 ▓ DARK SHADE
-223 147 93 ⌠ TOP HALF INTEGRAL
-224 148 94 ■ BLACK SQUARE
-225 149 95 ∙ BULLET OPERATOR
-226 150 96 √ SQUARE ROOT
-227 151 97 ≈ ALMOST EQUAL TO
-230 152 98 ≤ LESS-THAN OR EQUAL TO
-231 153 99 ≥ GREATER-THAN OR EQUAL TO
-232 154 9A   NO-BREAK SPACE
-233 155 9B ⌡ BOTTOM HALF INTEGRAL
-234 156 9C ° DEGREE SIGN
-235 157 9D ² SUPERSCRIPT TWO
-236 158 9E · MIDDLE DOT
-237 159 9F ÷ DIVISION SIGN
-240 160 A0 ═ BOX DRAWINGS DOUBLE HORIZONTAL
-241 161 A1 ║ BOX DRAWINGS DOUBLE VERTICAL
-242 162 A2 ╒ BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-243 163 A3 ё CYRILLIC SMALL LETTER IO
-244 164 A4 є CYRILLIC SMALL LETTER UKRAINIAN IE
-245 165 A5 ╔ BOX DRAWINGS DOUBLE DOWN AND RIGHT
-246 166 A6 і T{
-CYRILLIC SMALL LETTER
-.br
-BYELORUSSIAN-UKRAINIAN I
-T}
-247 167 A7 ї CYRILLIC SMALL LETTER YI (Ukrainian)
-250 168 A8 ╗ BOX DRAWINGS DOUBLE DOWN AND LEFT
-251 169 A9 ╘ BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-252 170 AA ╙ BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-253 171 AB ╚ BOX DRAWINGS DOUBLE UP AND RIGHT
-254 172 AC ╛ BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-255 173 AD ґ CYRILLIC SMALL LETTER GHE WITH UPTURN
-256 174 AE ╝ BOX DRAWINGS DOUBLE UP AND LEFT
-257 175 AF ╞ BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-260 176 B0 ╟ BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-261 177 B1 ╠ BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-262 178 B2 ╡ BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-263 179 B3 Ё CYRILLIC CAPITAL LETTER IO
-264 180 B4 Є CYRILLIC CAPITAL LETTER UKRAINIAN IE
-265 181 B5 ╣ BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-266 182 B6 І T{
-CYRILLIC CAPITAL LETTER
-.br
-BYELORUSSIAN-UKRAINIAN I
-T}
-267 183 B7 Ї CYRILLIC CAPITAL LETTER YI (Ukrainian)
-270 184 B8 ╦ BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-271 185 B9 ╧ BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-272 186 BA ╨ BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-273 187 BB ╩ BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-274 188 BC ╪ T{
-BOX DRAWINGS VERTICAL SINGLE
-.br
-AND HORIZONTAL DOUBLE
-T}
-275 189 BD Ґ CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-276 190 BE ╬ BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-277 191 BF © COPYRIGHT SIGN
-300 192 C0 ю CYRILLIC SMALL LETTER YU
-301 193 C1 а CYRILLIC SMALL LETTER A
-302 194 C2 б CYRILLIC SMALL LETTER BE
-303 195 C3 ц CYRILLIC SMALL LETTER TSE
-304 196 C4 д CYRILLIC SMALL LETTER DE
-305 197 C5 е CYRILLIC SMALL LETTER IE
-306 198 C6 ф CYRILLIC SMALL LETTER EF
-307 199 C7 г CYRILLIC SMALL LETTER GHE
-310 200 C8 х CYRILLIC SMALL LETTER HA
-311 201 C9 и CYRILLIC SMALL LETTER I
-312 202 CA й CYRILLIC SMALL LETTER SHORT I
-313 203 CB к CYRILLIC SMALL LETTER KA
-314 204 CC л CYRILLIC SMALL LETTER EL
-315 205 CD м CYRILLIC SMALL LETTER EM
-316 206 CE н CYRILLIC SMALL LETTER EN
-317 207 CF о CYRILLIC SMALL LETTER O
-320 208 D0 п CYRILLIC SMALL LETTER PE
-321 209 D1 я CYRILLIC SMALL LETTER YA
-322 210 D2 р CYRILLIC SMALL LETTER ER
-323 211 D3 с CYRILLIC SMALL LETTER ES
-324 212 D4 т CYRILLIC SMALL LETTER TE
-325 213 D5 у CYRILLIC SMALL LETTER U
-326 214 D6 ж CYRILLIC SMALL LETTER ZHE
-327 215 D7 в CYRILLIC SMALL LETTER VE
-330 216 D8 ь CYRILLIC SMALL LETTER SOFT SIGN
-331 217 D9 ы CYRILLIC SMALL LETTER YERU
-332 218 DA з CYRILLIC SMALL LETTER ZE
-333 219 DB ш CYRILLIC SMALL LETTER SHA
-334 220 DC э CYRILLIC SMALL LETTER E
-335 221 DD щ CYRILLIC SMALL LETTER SHCHA
-336 222 DE ч CYRILLIC SMALL LETTER CHE
-337 223 DF ъ CYRILLIC SMALL LETTER HARD SIGN
-340 224 E0 Ю CYRILLIC CAPITAL LETTER YU
-341 225 E1 А CYRILLIC CAPITAL LETTER A
-342 226 E2 Б CYRILLIC CAPITAL LETTER BE
-343 227 E3 Ц CYRILLIC CAPITAL LETTER TSE
-344 228 E4 Д CYRILLIC CAPITAL LETTER DE
-345 229 E5 Е CYRILLIC CAPITAL LETTER IE
-346 230 E6 Ф CYRILLIC CAPITAL LETTER EF
-347 231 E7 Г CYRILLIC CAPITAL LETTER GHE
-350 232 E8 Х CYRILLIC CAPITAL LETTER HA
-351 233 E9 И CYRILLIC CAPITAL LETTER I
-352 234 EA Й CYRILLIC CAPITAL LETTER SHORT I
-353 235 EB К CYRILLIC CAPITAL LETTER KA
-354 236 EC Л CYRILLIC CAPITAL LETTER EL
-355 237 ED М CYRILLIC CAPITAL LETTER EM
-356 238 EE Н CYRILLIC CAPITAL LETTER EN
-357 239 EF О CYRILLIC CAPITAL LETTER O
-360 240 F0 П CYRILLIC CAPITAL LETTER PE
-361 241 F1 Я CYRILLIC CAPITAL LETTER YA
-362 242 F2 Р CYRILLIC CAPITAL LETTER ER
-363 243 F3 С CYRILLIC CAPITAL LETTER ES
-364 244 F4 Т CYRILLIC CAPITAL LETTER TE
-365 245 F5 У CYRILLIC CAPITAL LETTER U
-366 246 F6 Ж CYRILLIC CAPITAL LETTER ZHE
-367 247 F7 В CYRILLIC CAPITAL LETTER VE
-370 248 F8 Ь CYRILLIC CAPITAL LETTER SOFT SIGN
-371 249 F9 Ы CYRILLIC CAPITAL LETTER YERU
-372 250 FA З CYRILLIC CAPITAL LETTER ZE
-373 251 FB Ш CYRILLIC CAPITAL LETTER SHA
-374 252 FC Э CYRILLIC CAPITAL LETTER E
-375 253 FD Щ CYRILLIC CAPITAL LETTER SHCHA
-376 254 FE Ч CYRILLIC CAPITAL LETTER CHE
-377 255 FF Ъ CYRILLIC CAPITAL LETTER HARD SIGN
-.TE
-.SH NOTES
-The differences from KOI8-R are in the hex positions
-A4, A6, A7, AD, B4, B6, B7, and BD.
-.SH SEE ALSO
-.BR ascii (7),
-.BR charsets (7),
-.BR cp1251 (7),
-.BR iso_8859\-5 (7),
-.BR koi8\-r (7),
-.BR utf\-8 (7)
diff --git a/man7/landlock.7 b/man7/landlock.7
deleted file mode 100644
index 4a763851d..000000000
--- a/man7/landlock.7
+++ /dev/null
@@ -1,586 +0,0 @@
-'\" t
-.\" Copyright © 2017-2020 Mickaël Salaün <mic@digikod.net>
-.\" Copyright © 2019-2020 ANSSI
-.\" Copyright © 2021 Microsoft Corporation
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH Landlock 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-Landlock \- unprivileged access-control
-.SH DESCRIPTION
-Landlock is an access-control system that enables any processes to
-securely restrict themselves and their future children.
-Because Landlock is a stackable Linux Security Module (LSM),
-it makes it possible to create safe security sandboxes
-as new security layers in addition to
-the existing system-wide access-controls.
-This kind of sandbox is expected to help mitigate
-the security impact of bugs,
-and unexpected or malicious behaviors in applications.
-.PP
-A Landlock security policy is a set of access rights
-(e.g., open a file in read-only, make a directory, etc.)
-tied to a file hierarchy.
-Such policy can be configured and enforced by processes for themselves
-using three system calls:
-.IP \[bu] 3
-.BR landlock_create_ruleset (2)
-creates a new ruleset;
-.IP \[bu]
-.BR landlock_add_rule (2)
-adds a new rule to a ruleset;
-.IP \[bu]
-.BR landlock_restrict_self (2)
-enforces a ruleset on the calling thread.
-.PP
-To be able to use these system calls,
-the running kernel must support Landlock and
-it must be enabled at boot time.
-.\"
-.SS Landlock rules
-A Landlock rule describes an action on an object.
-An object is currently a file hierarchy,
-and the related filesystem actions are defined with access rights (see
-.BR landlock_add_rule (2)).
-A set of rules is aggregated in a ruleset,
-which can then restrict the thread enforcing it,
-and its future children.
-.\"
-.SS Filesystem actions
-These flags enable to restrict a sandboxed process to a
-set of actions on files and directories.
-Files or directories opened before the sandboxing
-are not subject to these restrictions.
-See
-.BR landlock_add_rule (2)
-and
-.BR landlock_create_ruleset (2)
-for more context.
-.PP
-A file can only receive these access rights:
-.TP
-.B LANDLOCK_ACCESS_FS_EXECUTE
-Execute a file.
-.TP
-.B LANDLOCK_ACCESS_FS_WRITE_FILE
-Open a file with write access.
-.IP
-When opening files for writing,
-you will often additionally need the
-.B LANDLOCK_ACCESS_FS_TRUNCATE
-right.
-In many cases,
-these system calls truncate existing files when overwriting them
-(e.g.,
-.BR creat (2)).
-.TP
-.B LANDLOCK_ACCESS_FS_READ_FILE
-Open a file with read access.
-.TP
-.B LANDLOCK_ACCESS_FS_TRUNCATE
-Truncate a file with
-.BR truncate (2),
-.BR ftruncate (2),
-.BR creat (2),
-or
-.BR open (2)
-with
-.BR O_TRUNC .
-Whether an opened file can be truncated with
-.BR ftruncate (2)
-is determined during
-.BR open (2),
-in the same way as read and write permissions are checked during
-.BR open (2)
-using
-.B LANDLOCK_ACCESS_FS_READ_FILE
-and
-.BR LANDLOCK_ACCESS_FS_WRITE_FILE .
-This access right is available since the third version of the Landlock ABI.
-.PP
-A directory can receive access rights related to files or directories.
-The following access right is applied to the directory itself,
-and the directories beneath it:
-.TP
-.B LANDLOCK_ACCESS_FS_READ_DIR
-Open a directory or list its content.
-.PP
-However,
-the following access rights only apply to the content of a directory,
-not the directory itself:
-.TP
-.B LANDLOCK_ACCESS_FS_REMOVE_DIR
-Remove an empty directory or rename one.
-.TP
-.B LANDLOCK_ACCESS_FS_REMOVE_FILE
-Unlink (or rename) a file.
-.TP
-.B LANDLOCK_ACCESS_FS_MAKE_CHAR
-Create (or rename or link) a character device.
-.TP
-.B LANDLOCK_ACCESS_FS_MAKE_DIR
-Create (or rename) a directory.
-.TP
-.B LANDLOCK_ACCESS_FS_MAKE_REG
-Create (or rename or link) a regular file.
-.TP
-.B LANDLOCK_ACCESS_FS_MAKE_SOCK
-Create (or rename or link) a UNIX domain socket.
-.TP
-.B LANDLOCK_ACCESS_FS_MAKE_FIFO
-Create (or rename or link) a named pipe.
-.TP
-.B LANDLOCK_ACCESS_FS_MAKE_BLOCK
-Create (or rename or link) a block device.
-.TP
-.B LANDLOCK_ACCESS_FS_MAKE_SYM
-Create (or rename or link) a symbolic link.
-.TP
-.B LANDLOCK_ACCESS_FS_REFER
-Link or rename a file from or to a different directory
-(i.e., reparent a file hierarchy).
-.IP
-This access right is available since the second version of the Landlock ABI.
-.IP
-This is the only access right which is denied by default by any ruleset,
-even if the right is not specified as handled at ruleset creation time.
-The only way to make a ruleset grant this right
-is to explicitly allow it for a specific directory
-by adding a matching rule to the ruleset.
-.IP
-In particular, when using the first Landlock ABI version,
-Landlock will always deny attempts to reparent files
-between different directories.
-.IP
-In addition to the source and destination directories having the
-.B LANDLOCK_ACCESS_FS_REFER
-access right,
-the attempted link or rename operation must meet the following constraints:
-.RS
-.IP \[bu] 3
-The reparented file may not gain more access rights in the destination directory
-than it previously had in the source directory.
-If this is attempted, the operation results in an
-.B EXDEV
-error.
-.IP \[bu]
-When linking or renaming, the
-.BI LANDLOCK_ACCESS_FS_MAKE_ *
-right for the respective file type must be granted
-for the destination directory.
-Otherwise, the operation results in an
-.B EACCES
-error.
-.IP \[bu]
-When renaming, the
-.BI LANDLOCK_ACCESS_FS_REMOVE_ *
-right for the respective file type must be granted
-for the source directory.
-Otherwise, the operation results in an
-.B EACCES
-error.
-.RE
-.IP
-If multiple requirements are not met, the
-.B EACCES
-error code takes precedence over
-.BR EXDEV .
-.\"
-.SS Layers of file path access rights
-Each time a thread enforces a ruleset on itself,
-it updates its Landlock domain with a new layer of policy.
-Indeed, this complementary policy is composed with the
-potentially other rulesets already restricting this thread.
-A sandboxed thread can then safely add more constraints to itself with a
-new enforced ruleset.
-.PP
-One policy layer grants access to a file path
-if at least one of its rules encountered on the path grants the access.
-A sandboxed thread can only access a file path
-if all its enforced policy layers grant the access
-as well as all the other system access controls
-(e.g., filesystem DAC, other LSM policies, etc.).
-.\"
-.SS Bind mounts and OverlayFS
-Landlock enables restricting access to file hierarchies,
-which means that these access rights can be propagated with bind mounts
-(cf.
-.BR mount_namespaces (7))
-but not with OverlayFS.
-.PP
-A bind mount mirrors a source file hierarchy to a destination.
-The destination hierarchy is then composed of the exact same files,
-on which Landlock rules can be tied,
-either via the source or the destination path.
-These rules restrict access when they are encountered on a path,
-which means that they can restrict access to
-multiple file hierarchies at the same time,
-whether these hierarchies are the result of bind mounts or not.
-.PP
-An OverlayFS mount point consists of upper and lower layers.
-These layers are combined in a merge directory, result of the mount point.
-This merge hierarchy may include files from the upper and lower layers,
-but modifications performed on the merge hierarchy
-only reflect on the upper layer.
-From a Landlock policy point of view,
-each of the OverlayFS layers and merge hierarchies is standalone and
-contains its own set of files and directories,
-which is different from a bind mount.
-A policy restricting an OverlayFS layer will not restrict
-the resulted merged hierarchy, and vice versa.
-Landlock users should then only think about file hierarchies they want to
-allow access to, regardless of the underlying filesystem.
-.\"
-.SS Inheritance
-Every new thread resulting from a
-.BR clone (2)
-inherits Landlock domain restrictions from its parent.
-This is similar to the
-.BR seccomp (2)
-inheritance or any other LSM dealing with tasks'
-.BR credentials (7).
-For instance, one process's thread may apply Landlock rules to itself,
-but they will not be automatically applied to other sibling threads
-(unlike POSIX thread credential changes, cf.
-.BR nptl (7)).
-.PP
-When a thread sandboxes itself,
-we have the guarantee that the related security policy
-will stay enforced on all this thread's descendants.
-This allows creating standalone and modular security policies
-per application,
-which will automatically be composed between themselves
-according to their run-time parent policies.
-.\"
-.SS Ptrace restrictions
-A sandboxed process has less privileges than a non-sandboxed process and
-must then be subject to additional restrictions
-when manipulating another process.
-To be allowed to use
-.BR ptrace (2)
-and related syscalls on a target process,
-a sandboxed process should have a subset of the target process rules,
-which means the tracee must be in a sub-domain of the tracer.
-.\"
-.SS Truncating files
-The operations covered by
-.B LANDLOCK_ACCESS_FS_WRITE_FILE
-and
-.B LANDLOCK_ACCESS_FS_TRUNCATE
-both change the contents of a file and sometimes overlap in
-non-intuitive ways.
-It is recommended to always specify both of these together.
-.PP
-A particularly surprising example is
-.BR creat (2).
-The name suggests that this system call requires
-the rights to create and write files.
-However, it also requires the truncate right
-if an existing file under the same name is already present.
-.PP
-It should also be noted that truncating files does not require the
-.B LANDLOCK_ACCESS_FS_WRITE_FILE
-right.
-Apart from the
-.BR truncate (2)
-system call, this can also be done through
-.BR open (2)
-with the flags
-.IR "O_RDONLY\ |\ O_TRUNC" .
-.PP
-When opening a file, the availability of the
-.B LANDLOCK_ACCESS_FS_TRUNCATE
-right is associated with the newly created file descriptor
-and will be used for subsequent truncation attempts using
-.BR ftruncate (2).
-The behavior is similar to opening a file for reading or writing,
-where permissions are checked during
-.BR open (2),
-but not during the subsequent
-.BR read (2)
-and
-.BR write (2)
-calls.
-.PP
-As a consequence,
-it is possible to have multiple open file descriptors for the same file,
-where one grants the right to truncate the file and the other does not.
-It is also possible to pass such file descriptors between processes,
-keeping their Landlock properties,
-even when these processes do not have an enforced Landlock ruleset.
-.SH VERSIONS
-Landlock was introduced in Linux 5.13.
-.PP
-To determine which Landlock features are available,
-users should query the Landlock ABI version:
-.TS
-box;
-ntb| ntb| lbx
-nt| nt| lbx.
-ABI Kernel Newly introduced access rights
-_ _ _
-1 5.13 LANDLOCK_ACCESS_FS_EXECUTE
-\^ \^ LANDLOCK_ACCESS_FS_WRITE_FILE
-\^ \^ LANDLOCK_ACCESS_FS_READ_FILE
-\^ \^ LANDLOCK_ACCESS_FS_READ_DIR
-\^ \^ LANDLOCK_ACCESS_FS_REMOVE_DIR
-\^ \^ LANDLOCK_ACCESS_FS_REMOVE_FILE
-\^ \^ LANDLOCK_ACCESS_FS_MAKE_CHAR
-\^ \^ LANDLOCK_ACCESS_FS_MAKE_DIR
-\^ \^ LANDLOCK_ACCESS_FS_MAKE_REG
-\^ \^ LANDLOCK_ACCESS_FS_MAKE_SOCK
-\^ \^ LANDLOCK_ACCESS_FS_MAKE_FIFO
-\^ \^ LANDLOCK_ACCESS_FS_MAKE_BLOCK
-\^ \^ LANDLOCK_ACCESS_FS_MAKE_SYM
-_ _ _
-2 5.19 LANDLOCK_ACCESS_FS_REFER
-_ _ _
-3 6.2 LANDLOCK_ACCESS_FS_TRUNCATE
-.TE
-.sp 1
-.PP
-Users should use the Landlock ABI version rather than the kernel version
-to determine which features are available.
-The mainline kernel versions listed here are only included for orientation.
-Kernels from other sources may contain backported features,
-and their version numbers may not match.
-.PP
-To query the running kernel's Landlock ABI version,
-programs may pass the
-.B LANDLOCK_CREATE_RULESET_VERSION
-flag to
-.BR landlock_create_ruleset (2).
-.PP
-When building fallback mechanisms for compatibility with older kernels,
-users are advised to consider the special semantics of the
-.B LANDLOCK_ACCESS_FS_REFER
-access right:
-In ABI v1,
-linking and moving of files between different directories is always forbidden,
-so programs relying on such operations are only compatible
-with Landlock ABI v2 and higher.
-.SH NOTES
-Landlock is enabled by
-.BR CONFIG_SECURITY_LANDLOCK .
-The
-.I lsm=lsm1,...,lsmN
-command line parameter controls the sequence of the initialization of
-Linux Security Modules.
-It must contain the string
-.I landlock
-to enable Landlock.
-If the command line parameter is not specified,
-the initialization falls back to the value of the deprecated
-.I security=
-command line parameter and further to the value of
-.BR CONFIG_LSM .
-We can check that Landlock is enabled by looking for
-.I landlock: Up and running.
-in kernel logs.
-.SH CAVEATS
-It is currently not possible to restrict some file-related actions
-accessible through these system call families:
-.BR chdir (2),
-.BR stat (2),
-.BR flock (2),
-.BR chmod (2),
-.BR chown (2),
-.BR setxattr (2),
-.BR utime (2),
-.BR ioctl (2),
-.BR fcntl (2),
-.BR access (2).
-Future Landlock evolutions will enable to restrict them.
-.SH EXAMPLES
-We first need to create the ruleset that will contain our rules.
-.PP
-For this example,
-the ruleset will contain rules that only allow read actions,
-but write actions will be denied.
-The ruleset then needs to handle both of these kinds of actions.
-See the
-.B DESCRIPTION
-section for the description of filesystem actions.
-.PP
-.in +4n
-.EX
-struct landlock_ruleset_attr attr = {0};
-int ruleset_fd;
-\&
-attr.handled_access_fs =
- LANDLOCK_ACCESS_FS_EXECUTE |
- LANDLOCK_ACCESS_FS_WRITE_FILE |
- LANDLOCK_ACCESS_FS_READ_FILE |
- LANDLOCK_ACCESS_FS_READ_DIR |
- LANDLOCK_ACCESS_FS_REMOVE_DIR |
- LANDLOCK_ACCESS_FS_REMOVE_FILE |
- LANDLOCK_ACCESS_FS_MAKE_CHAR |
- LANDLOCK_ACCESS_FS_MAKE_DIR |
- LANDLOCK_ACCESS_FS_MAKE_REG |
- LANDLOCK_ACCESS_FS_MAKE_SOCK |
- LANDLOCK_ACCESS_FS_MAKE_FIFO |
- LANDLOCK_ACCESS_FS_MAKE_BLOCK |
- LANDLOCK_ACCESS_FS_MAKE_SYM |
- LANDLOCK_ACCESS_FS_REFER |
- LANDLOCK_ACCESS_FS_TRUNCATE;
-.EE
-.in
-.PP
-To be compatible with older Linux versions,
-we detect the available Landlock ABI version,
-and only use the available subset of access rights:
-.PP
-.in +4n
-.EX
-/*
- * Table of available file system access rights by ABI version,
- * numbers hardcoded to keep the example short.
- */
-__u64 landlock_fs_access_rights[] = {
- (LANDLOCK_ACCESS_FS_MAKE_SYM << 1) \- 1, /* v1 */
- (LANDLOCK_ACCESS_FS_REFER << 1) \- 1, /* v2: add "refer" */
- (LANDLOCK_ACCESS_FS_TRUNCATE << 1) \- 1, /* v3: add "truncate" */
-};
-\&
-int abi = landlock_create_ruleset(NULL, 0,
- LANDLOCK_CREATE_RULESET_VERSION);
-if (abi == \-1) {
- /*
- * Kernel too old, not compiled with Landlock,
- * or Landlock was not enabled at boot time.
- */
- perror("Unable to use Landlock");
- return; /* Graceful fallback: Do nothing. */
-}
-abi = MIN(abi, 3);
-\&
-/* Only use the available rights in the ruleset. */
-attr.handled_access_fs &= landlock_fs_access_rights[abi \- 1];
-.EE
-.in
-.PP
-The available access rights for each ABI version are listed in the
-.B VERSIONS
-section.
-.PP
-If our program needed to create hard links
-or rename files between different directories
-.RB ( LANDLOCK_ACCESS_FS_REFER ),
-we would require the following change to the backwards compatibility logic:
-Directory reparenting is not possible
-in a process restricted with Landlock ABI version 1.
-Therefore,
-if the program needed to do file reparenting,
-and if only Landlock ABI version 1 was available,
-we could not restrict the process.
-.PP
-Now that the ruleset attributes are determined,
-we create the Landlock ruleset
-and acquire a file descriptor as a handle to it,
-using
-.BR landlock_create_ruleset (2):
-.PP
-.in +4n
-.EX
-ruleset_fd = landlock_create_ruleset(&attr, sizeof(attr), 0);
-if (ruleset_fd == \-1) {
- perror("Failed to create a ruleset");
- exit(EXIT_FAILURE);
-}
-.EE
-.in
-.PP
-We can now add a new rule to the ruleset through the ruleset's file descriptor.
-The requested access rights must be a subset of the access rights
-which were specified in
-.I attr.handled_access_fs
-at ruleset creation time.
-.PP
-In this example, the rule will only allow reading the file hierarchy
-.IR /usr .
-Without another rule, write actions would then be denied by the ruleset.
-To add
-.I /usr
-to the ruleset, we open it with the
-.I O_PATH
-flag and fill the
-.I struct landlock_path_beneath_attr
-with this file descriptor.
-.PP
-.in +4n
-.EX
-struct landlock_path_beneath_attr path_beneath = {0};
-int err;
-\&
-path_beneath.allowed_access =
- LANDLOCK_ACCESS_FS_EXECUTE |
- LANDLOCK_ACCESS_FS_READ_FILE |
- LANDLOCK_ACCESS_FS_READ_DIR;
-\&
-path_beneath.parent_fd = open("/usr", O_PATH | O_CLOEXEC);
-if (path_beneath.parent_fd == \-1) {
- perror("Failed to open file");
- close(ruleset_fd);
- exit(EXIT_FAILURE);
-}
-err = landlock_add_rule(ruleset_fd, LANDLOCK_RULE_PATH_BENEATH,
- &path_beneath, 0);
-close(path_beneath.parent_fd);
-if (err) {
- perror("Failed to update ruleset");
- close(ruleset_fd);
- exit(EXIT_FAILURE);
-}
-.EE
-.in
-.PP
-We now have a ruleset with one rule allowing read access to
-.I /usr
-while denying all other handled accesses for the filesystem.
-The next step is to restrict the current thread from gaining more
-privileges
-(e.g., thanks to a set-user-ID binary).
-.PP
-.in +4n
-.EX
-if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)) {
- perror("Failed to restrict privileges");
- close(ruleset_fd);
- exit(EXIT_FAILURE);
-}
-.EE
-.in
-.PP
-The current thread is now ready to sandbox itself with the ruleset.
-.PP
-.in +4n
-.EX
-if (landlock_restrict_self(ruleset_fd, 0)) {
- perror("Failed to enforce ruleset");
- close(ruleset_fd);
- exit(EXIT_FAILURE);
-}
-close(ruleset_fd);
-.EE
-.in
-.PP
-If the
-.BR landlock_restrict_self (2)
-system call succeeds, the current thread is now restricted and
-this policy will be enforced on all its subsequently created children as well.
-Once a thread is landlocked, there is no way to remove its security policy;
-only adding more restrictions is allowed.
-These threads are now in a new Landlock domain,
-merge of their parent one (if any) with the new ruleset.
-.PP
-Full working code can be found in
-.UR https://git.kernel.org/\:pub/\:scm/\:linux/\:kernel/\:git/\:stable/\:linux.git/\:tree/\:samples/\:landlock/\:sandboxer.c
-.UE
-.SH SEE ALSO
-.BR landlock_create_ruleset (2),
-.BR landlock_add_rule (2),
-.BR landlock_restrict_self (2)
-.PP
-.UR https://landlock.io/
-.UE
diff --git a/man7/latin1.7 b/man7/latin1.7
deleted file mode 100644
index 1969dfb2f..000000000
--- a/man7/latin1.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-1.7
diff --git a/man7/latin10.7 b/man7/latin10.7
deleted file mode 100644
index b9c8e9182..000000000
--- a/man7/latin10.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-16.7
diff --git a/man7/latin2.7 b/man7/latin2.7
deleted file mode 100644
index da36668dd..000000000
--- a/man7/latin2.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-2.7
diff --git a/man7/latin3.7 b/man7/latin3.7
deleted file mode 100644
index 75e42ce3d..000000000
--- a/man7/latin3.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-3.7
diff --git a/man7/latin4.7 b/man7/latin4.7
deleted file mode 100644
index 15a829eb3..000000000
--- a/man7/latin4.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-4.7
diff --git a/man7/latin5.7 b/man7/latin5.7
deleted file mode 100644
index 0fcc7d463..000000000
--- a/man7/latin5.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-9.7
diff --git a/man7/latin6.7 b/man7/latin6.7
deleted file mode 100644
index 9b4658f25..000000000
--- a/man7/latin6.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-10.7
diff --git a/man7/latin7.7 b/man7/latin7.7
deleted file mode 100644
index 8ad23352e..000000000
--- a/man7/latin7.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-13.7
diff --git a/man7/latin8.7 b/man7/latin8.7
deleted file mode 100644
index 4aa555db9..000000000
--- a/man7/latin8.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-14.7
diff --git a/man7/latin9.7 b/man7/latin9.7
deleted file mode 100644
index a4095d754..000000000
--- a/man7/latin9.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-15.7
diff --git a/man7/libc.7 b/man7/libc.7
deleted file mode 100644
index 1eb80f6a6..000000000
--- a/man7/libc.7
+++ /dev/null
@@ -1,115 +0,0 @@
-.\" Copyright (c) 2009 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH libc 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-libc \- overview of standard C libraries on Linux
-.SH DESCRIPTION
-The term \[lq]libc\[rq] is commonly used as a shorthand for
-the \[lq]standard C library\[rq]
-a library of standard functions that can be used by all C programs
-(and sometimes by programs in other languages).
-Because of some history
-(see below),
-use of the term \[lq]libc\[rq]
-to refer to the standard C library is somewhat ambiguous on Linux.
-.SS glibc
-By far the most widely used C library on Linux is the
-.UR http://www.gnu.org\:/software\:/libc/
-GNU C Library
-.UE ,
-often referred to as
-.IR glibc .
-This is the C library that is nowadays used in all
-major Linux distributions.
-It is also the C library whose details are documented
-in the relevant pages of the
-.I man-pages
-project
-(primarily in Section 3 of the manual).
-Documentation of glibc is also available in the glibc manual,
-available via the command
-.IR "info libc" .
-Release 1.0 of glibc was made in September 1992.
-(There were earlier 0.x releases.)
-The next major release of glibc was 2.0,
-at the beginning of 1997.
-.PP
-The pathname
-.I /lib/libc.so.6
-(or something similar)
-is normally a symbolic link that
-points to the location of the glibc library,
-and executing this pathname will cause glibc to display
-various information about the version installed on your system.
-.SS Linux libc
-In the early to mid 1990s,
-there was for a while
-.IR "Linux libc" ,
-a fork of glibc 1.x created by Linux developers who felt that glibc
-development at the time was not sufficing for the needs of Linux.
-Often,
-this library was referred to (ambiguously) as just \[lq]libc\[rq].
-Linux libc released major versions 2, 3, 4, and 5,
-as well as many minor versions of those releases.
-Linux libc4 was the last version to use the a.out binary format,
-and the first version to provide (primitive) shared library support.
-Linux libc 5 was the first version to support the ELF binary format;
-this version used the shared library soname
-.IR libc.so.5 .
-For a while,
-Linux libc was the standard C library in many Linux distributions.
-.PP
-However,
-notwithstanding the original motivations of the Linux libc effort,
-by the time glibc 2.0 was released
-(in 1997),
-it was clearly superior to Linux libc,
-and all major Linux distributions that had been using Linux libc
-soon switched back to glibc.
-To avoid any confusion with Linux libc versions,
-glibc 2.0 and later used the shared library soname
-.IR libc.so.6 .
-.PP
-Since the switch from Linux libc to glibc 2.0 occurred long ago,
-.I man-pages
-no longer takes care to document Linux libc details.
-Nevertheless,
-the history is visible in vestiges of information
-about Linux libc that remain in a few manual pages,
-in particular,
-references to
-.I libc4
-and
-.IR libc5 .
-.SS Other C libraries
-There are various other less widely used C libraries for Linux.
-These libraries are generally smaller than glibc,
-both in terms of features and memory footprint,
-and often intended for building small binaries,
-perhaps targeted at development for embedded Linux systems.
-Among such libraries are
-.UR http://www\:.uclibc\:.org/
-.I uClibc
-.UE ,
-.UR http://www\:.fefe\:.de/\:dietlibc/
-.I dietlibc
-.UE ,
-and
-.UR http://www\:.musl\-libc\:.org/
-.I "musl libc"
-.UE .
-Details of these libraries are covered by the
-.I man-pages
-project,
-where they are known.
-.SH SEE ALSO
-.BR syscalls (2),
-.BR getauxval (3),
-.BR proc (5),
-.BR feature_test_macros (7),
-.BR man\-pages (7),
-.BR standards (7),
-.BR vdso (7)
diff --git a/man7/locale.7 b/man7/locale.7
deleted file mode 100644
index c3026cef7..000000000
--- a/man7/locale.7
+++ /dev/null
@@ -1,379 +0,0 @@
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\" and Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 17:28:34 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Sun Jun 01 17:16:34 1997 by Jochen Hein
-.\" <jochen.hein@delphi.central.de>
-.\" Modified Thu Apr 25 00:43:19 2002 by Bruno Haible <bruno@clisp.org>
-.\"
-.TH locale 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-locale \- description of multilanguage support
-.SH SYNOPSIS
-.nf
-.B #include <locale.h>
-.fi
-.SH DESCRIPTION
-A locale is a set of language and cultural rules.
-These cover aspects
-such as language for messages, different character sets, lexicographic
-conventions, and so on.
-A program needs to be able to determine its locale
-and act accordingly to be portable to different cultures.
-.PP
-The header
-.I <locale.h>
-declares data types, functions, and macros which are useful in this
-task.
-.PP
-The functions it declares are
-.BR setlocale (3)
-to set the current locale, and
-.BR localeconv (3)
-to get information about number formatting.
-.PP
-There are different categories for locale information a program might
-need; they are declared as macros.
-Using them as the first argument
-to the
-.BR setlocale (3)
-function, it is possible to set one of these to the desired locale:
-.TP
-.BR LC_ADDRESS " (GNU extension, since glibc 2.2)"
-.\" See ISO/IEC Technical Report 14652
-Change settings that describe the formats (e.g., postal addresses)
-used to describe locations and geography-related items.
-Applications that need this information can use
-.BR nl_langinfo (3)
-to retrieve nonstandard elements, such as
-.B _NL_ADDRESS_COUNTRY_NAME
-(country name, in the language of the locale)
-and
-.B _NL_ADDRESS_LANG_NAME
-(language name, in the language of the locale),
-which return strings such as "Deutschland" and "Deutsch"
-(for German-language locales).
-(Other element names are listed in
-.IR <langinfo.h> .)
-.TP
-.B LC_COLLATE
-This category governs the collation rules used for
-sorting and regular expressions,
-including character equivalence classes and
-multicharacter collating elements.
-This locale category changes the behavior of the functions
-.BR strcoll (3)
-and
-.BR strxfrm (3),
-which are used to compare strings in the local alphabet.
-For example,
-the German sharp s is sorted as "ss".
-.TP
-.B LC_CTYPE
-This category determines the interpretation of byte sequences as characters
-(e.g., single versus multibyte characters), character classifications
-(e.g., alphabetic or digit), and the behavior of character classes.
-On glibc systems, this category also determines
-the character transliteration rules for
-.BR iconv (1)
-and
-.BR iconv (3).
-It changes the behavior of the character handling and
-classification functions, such as
-.BR isupper (3)
-and
-.BR toupper (3),
-and the multibyte character functions such as
-.BR mblen (3)
-or
-.BR wctomb (3).
-.TP
-.BR LC_IDENTIFICATION " (GNU extension, since glibc 2.2)"
-.\" See ISO/IEC Technical Report 14652
-Change settings that relate to the metadata for the locale.
-Applications that need this information can use
-.BR nl_langinfo (3)
-to retrieve nonstandard elements, such as
-.B _NL_IDENTIFICATION_TITLE
-(title of this locale document)
-and
-.B _NL_IDENTIFICATION_TERRITORY
-(geographical territory to which this locale document applies),
-which might return strings such as "English locale for the USA"
-and "USA".
-(Other element names are listed in
-.IR <langinfo.h> .)
-.TP
-.B LC_MONETARY
-This category determines the formatting used for
-monetary-related numeric values.
-This changes the information returned by
-.BR localeconv (3),
-which describes the way numbers are usually printed, with details such
-as decimal point versus decimal comma.
-This information is internally
-used by the function
-.BR strfmon (3).
-.TP
-.B LC_MESSAGES
-This category affects the language in which messages are displayed
-and what an affirmative or negative answer looks like.
-The GNU C library contains the
-.BR gettext (3),
-.BR ngettext (3),
-and
-.BR rpmatch (3)
-functions to ease the use of this information.
-The GNU gettext family of
-functions also obey the environment variable
-.B LANGUAGE
-(containing a colon-separated list of locales)
-if the category is set to a valid locale other than
-.BR """C""" .
-This category also affects the behavior of
-.BR catopen (3).
-.TP
-.BR LC_MEASUREMENT " (GNU extension, since glibc 2.2)"
-Change the settings relating to the measurement system in the locale
-(i.e., metric versus US customary units).
-Applications can use
-.BR nl_langinfo (3)
-to retrieve the nonstandard
-.B _NL_MEASUREMENT_MEASUREMENT
-element, which returns a pointer to a character
-that has the value 1 (metric) or 2 (US customary units).
-.TP
-.BR LC_NAME " (GNU extension, since glibc 2.2)"
-.\" See ISO/IEC Technical Report 14652
-Change settings that describe the formats used to address persons.
-Applications that need this information can use
-.BR nl_langinfo (3)
-to retrieve nonstandard elements, such as
-.B _NL_NAME_NAME_MR
-(general salutation for men)
-and
-.B _NL_NAME_NAME_MS
-(general salutation for women)
-elements, which return strings such as "Herr" and "Frau"
-(for German-language locales).
-(Other element names are listed in
-.IR <langinfo.h> .)
-.TP
-.B LC_NUMERIC
-This category determines the formatting rules used for nonmonetary
-numeric values\[em]for example,
-the thousands separator and the radix character
-(a period in most English-speaking countries,
-but a comma in many other regions).
-It affects functions such as
-.BR printf (3),
-.BR scanf (3),
-and
-.BR strtod (3).
-This information can also be read with the
-.BR localeconv (3)
-function.
-.TP
-.BR LC_PAPER " (GNU extension, since glibc 2.2)"
-.\" See ISO/IEC Technical Report 14652
-Change the settings relating to the dimensions of the standard paper size
-(e.g., US letter versus A4).
-Applications that need the dimensions can obtain them by using
-.BR nl_langinfo (3)
-to retrieve the nonstandard
-.B _NL_PAPER_WIDTH
-and
-.B _NL_PAPER_HEIGHT
-elements, which return
-.I int
-values specifying the dimensions in millimeters.
-.TP
-.BR LC_TELEPHONE " (GNU extension, since glibc 2.2)"
-.\" See ISO/IEC Technical Report 14652
-Change settings that describe the formats to be used with telephone services.
-Applications that need this information can use
-.BR nl_langinfo (3)
-to retrieve nonstandard elements, such as
-.B _NL_TELEPHONE_INT_PREFIX
-(international prefix used to call numbers in this locale),
-which returns a string such as "49" (for Germany).
-(Other element names are listed in
-.IR <langinfo.h> .)
-.TP
-.B LC_TIME
-This category governs the formatting used for date and time values.
-For example, most of Europe uses a 24-hour clock versus the
-12-hour clock used in the United States.
-The setting of this category affects the behavior of functions such as
-.BR strftime (3)
-and
-.BR strptime (3).
-.TP
-.B LC_ALL
-All of the above.
-.PP
-If the second argument to
-.BR setlocale (3)
-is an empty string,
-.IR \[dq]\[dq] ,
-for the default locale, it is determined using the following steps:
-.IP (1) 5
-If there is a non-null environment variable
-.BR LC_ALL ,
-the value of
-.B LC_ALL
-is used.
-.IP (2)
-If an environment variable with the same name as one of the categories
-above exists and is non-null, its value is used for that category.
-.IP (3)
-If there is a non-null environment variable
-.BR LANG ,
-the value of
-.B LANG
-is used.
-.PP
-Values about local numeric formatting is made available in a
-.I struct lconv
-returned by the
-.BR localeconv (3)
-function, which has the following declaration:
-.PP
-.in +4n
-.EX
-struct lconv {
-\&
- /* Numeric (nonmonetary) information */
-\&
- char *decimal_point; /* Radix character */
- char *thousands_sep; /* Separator for digit groups to left
- of radix character */
- char *grouping; /* Each element is the number of digits in
- a group; elements with higher indices
- are further left. An element with value
- CHAR_MAX means that no further grouping
- is done. An element with value 0 means
- that the previous element is used for
- all groups further left. */
-\&
- /* Remaining fields are for monetary information */
-\&
- char *int_curr_symbol; /* First three chars are a currency
- symbol from ISO 4217. Fourth char
- is the separator. Fifth char
- is \[aq]\e0\[aq]. */
- char *currency_symbol; /* Local currency symbol */
- char *mon_decimal_point; /* Radix character */
- char *mon_thousands_sep; /* Like \fIthousands_sep\fP above */
- char *mon_grouping; /* Like \fIgrouping\fP above */
- char *positive_sign; /* Sign for positive values */
- char *negative_sign; /* Sign for negative values */
- char int_frac_digits; /* International fractional digits */
- char frac_digits; /* Local fractional digits */
- char p_cs_precedes; /* 1 if currency_symbol precedes a
- positive value, 0 if succeeds */
- char p_sep_by_space; /* 1 if a space separates
- currency_symbol from a positive
- value */
- char n_cs_precedes; /* 1 if currency_symbol precedes a
- negative value, 0 if succeeds */
- char n_sep_by_space; /* 1 if a space separates
- currency_symbol from a negative
- value */
- /* Positive and negative sign positions:
- 0 Parentheses surround the quantity and currency_symbol.
- 1 The sign string precedes the quantity and currency_symbol.
- 2 The sign string succeeds the quantity and currency_symbol.
- 3 The sign string immediately precedes the currency_symbol.
- 4 The sign string immediately succeeds the currency_symbol. */
- char p_sign_posn;
- char n_sign_posn;
-};
-.EE
-.in
-.SS POSIX.1-2008 extensions to the locale API
-POSIX.1-2008 standardized a number of extensions to the locale API,
-based on implementations that first appeared in glibc 2.3.
-These extensions are designed to address the problem that
-the traditional locale APIs do not mix well with multithreaded applications
-and with applications that must deal with multiple locales.
-.PP
-The extensions take the form of new functions for creating and
-manipulating locale objects
-.RB ( newlocale (3),
-.BR freelocale (3),
-.BR duplocale (3),
-and
-.BR uselocale (3))
-and various new library functions with the suffix "_l" (e.g.,
-.BR toupper_l (3))
-that extend the traditional locale-dependent APIs (e.g.,
-.BR toupper (3))
-to allow the specification of a locale object that should apply when
-executing the function.
-.SH ENVIRONMENT
-The following environment variable is used by
-.BR newlocale (3)
-and
-.BR setlocale (3),
-and thus affects all unprivileged localized programs:
-.TP
-.B LOCPATH
-A list of pathnames, separated by colons (\[aq]:\[aq]),
-that should be used to find locale data.
-If this variable is set,
-only the individual compiled locale data files from
-.B LOCPATH
-and the system default locale data path are used;
-any available locale archives are not used (see
-.BR localedef (1)).
-The individual compiled locale data files are searched for under
-subdirectories which depend on the currently used locale.
-For example, when
-.I en_GB.UTF\-8
-is used for a category, the following subdirectories are searched for,
-in this order:
-.IR en_GB.UTF\-8 ,
-.IR en_GB.utf8 ,
-.IR en_GB ,
-.IR en.UTF\-8 ,
-.IR en.utf8 ,
-and
-.IR en .
-.SH FILES
-.TP
-.I /usr/lib/locale/locale\-archive
-Usual default locale archive location.
-.TP
-.I /usr/lib/locale
-Usual default path for compiled individual locale files.
-.SH STANDARDS
-POSIX.1-2001.
-.\"
-.\" The GNU gettext functions are specified in LI18NUX2000.
-.SH SEE ALSO
-.BR iconv (1),
-.BR locale (1),
-.BR localedef (1),
-.BR catopen (3),
-.BR gettext (3),
-.BR iconv (3),
-.BR localeconv (3),
-.BR mbstowcs (3),
-.BR newlocale (3),
-.BR ngettext (3),
-.BR nl_langinfo (3),
-.BR rpmatch (3),
-.BR setlocale (3),
-.BR strcoll (3),
-.BR strfmon (3),
-.BR strftime (3),
-.BR strxfrm (3),
-.BR uselocale (3),
-.BR wcstombs (3),
-.BR locale (5),
-.BR charsets (7),
-.BR unicode (7),
-.BR utf\-8 (7)
diff --git a/man7/mailaddr.7 b/man7/mailaddr.7
deleted file mode 100644
index dc160e283..000000000
--- a/man7/mailaddr.7
+++ /dev/null
@@ -1,134 +0,0 @@
-.\" Copyright (c) 1983, 1987 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" @(#)mailaddr.7 6.5 (Berkeley) 2/14/89
-.\"
-.\" Extensively rewritten by Arnt Gulbrandsen <agulbra@troll.no>. My
-.\" changes are placed under the same copyright as the original BSD page.
-.\"
-.\" Adjusted by Arnt Gulbrandsen <arnt@gulbrandsen.priv.no> in 2004 to
-.\" account for changes since 1995. Route-addrs are now even less
-.\" common, etc. Some minor wording improvements. Same copyright.
-.\"
-.\" %%%LICENSE_START(PERMISSIVE_MISC)
-.\" Redistribution and use in source and binary forms are permitted
-.\" provided that the above copyright notice and this paragraph are
-.\" duplicated in all such forms and that any documentation,
-.\" advertising materials, and other materials related to such
-.\" distribution and use acknowledge that the software was developed
-.\" by the University of California, Berkeley. The name of the
-.\" University may not be used to endorse or promote products derived
-.\" from this software without specific prior written permission.
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-.\" %%%LICENSE_END
-.\"
-.TH mailaddr 7 (date) "Linux man-pages (unreleased)"
-.UC 5
-.SH NAME
-mailaddr \- mail addressing description
-.SH DESCRIPTION
-.nh
-This manual page gives a brief introduction to SMTP mail addresses,
-as used on the Internet.
-These addresses are in the general format
-.PP
-.in +4n
-.EX
-user@domain
-.EE
-.in
-.PP
-where a domain is a hierarchical dot-separated list of subdomains.
-These examples are valid forms of the same address:
-.PP
-.in +4n
-.EX
-john.doe@monet.example.com
-John Doe <john.doe@monet.example.com>
-john.doe@monet.example.com (John Doe)
-.EE
-.in
-.PP
-The domain part ("monet.example.com") is a mail-accepting domain.
-It can be a host and in the past it usually was, but it doesn't have to be.
-The domain part is not case sensitive.
-.PP
-The local part ("john.doe") is often a username,
-but its meaning is defined by the local software.
-Sometimes it is case sensitive,
-although that is unusual.
-If you see a local-part that looks like garbage,
-it is usually because of a gateway between an internal e-mail
-system and the net, here are some examples:
-.PP
-.in +4n
-.EX
-"surname/admd=telemail/c=us/o=hp/prmd=hp"@some.where
-USER%SOMETHING@some.where
-machine!machine!name@some.where
-I2461572@some.where
-.EE
-.in
-.PP
-(These are, respectively, an X.400 gateway, a gateway to an arbitrary
-internal mail system that lacks proper internet support, an UUCP
-gateway, and the last one is just boring username policy.)
-.PP
-The real-name part ("John Doe") can either be placed before
-<>, or in () at the end.
-(Strictly speaking the two aren't the same,
-but the difference is beyond the scope of this page.)
-The name may have to be quoted using "", for example, if it contains ".":
-.PP
-.in +4n
-.EX
-"John Q. Doe" <john.doe@monet.example.com>
-.EE
-.in
-.SS Abbreviation
-Some mail systems let users abbreviate the domain name.
-For instance,
-users at example.com may get away with "john.doe@monet" to
-send mail to John Doe.
-.I This behavior is deprecated.
-Sometimes it works, but you should not depend on it.
-.SS Route-addrs
-In the past, sometimes one had to route a message through
-several hosts to get it to its final destination.
-Addresses which show these relays are termed "route-addrs".
-These use the syntax:
-.PP
-.in +4n
-.EX
-<@hosta,@hostb:user@hostc>
-.EE
-.in
-.PP
-This specifies that the message should be sent to hosta,
-from there to hostb, and finally to hostc.
-Many hosts disregard route-addrs and send directly to hostc.
-.PP
-Route-addrs are very unusual now.
-They occur sometimes in old mail archives.
-It is generally possible to ignore all but the "user@hostc"
-part of the address to determine the actual address.
-.SS Postmaster
-Every site is required to have a user or user alias designated
-"postmaster" to which problems with the mail system may be
-addressed.
-The "postmaster" address is not case sensitive.
-.SH FILES
-.I /etc/aliases
-.br
-.I \[ti]/.forward
-.SH SEE ALSO
-.BR mail (1),
-.BR aliases (5),
-.BR forward (5),
-.BR sendmail (8)
-.PP
-.UR http://www.ietf.org\:/rfc\:/rfc5322.txt
-IETF RFC\ 5322
-.UE
diff --git a/man7/man-pages.7 b/man7/man-pages.7
deleted file mode 100644
index d63f2d8f2..000000000
--- a/man7/man-pages.7
+++ /dev/null
@@ -1,1227 +0,0 @@
-'\" t
-.\" (C) Copyright 1992-1999 Rickard E. Faith and David A. Wheeler
-.\" (faith@cs.unc.edu and dwheeler@ida.org)
-.\" and (C) Copyright 2007 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2007-05-30 created by mtk, using text from old man.7 plus
-.\" rewrites and additional text.
-.\"
-.TH man-pages 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-man-pages \- conventions for writing Linux man pages
-.SH SYNOPSIS
-.B man
-.RI [ section ]
-.I title
-.SH DESCRIPTION
-This page describes the conventions that should be employed
-when writing man pages for the Linux \fIman-pages\fP project,
-which documents the user-space API provided by the Linux kernel
-and the GNU C library.
-The project thus provides most of the pages in Section 2,
-many of the pages that appear in Sections 3, 4, and 7,
-and a few of the pages that appear in Sections 1, 5, and 8
-of the man pages on a Linux system.
-The conventions described on this page may also be useful
-for authors writing man pages for other projects.
-.SS Sections of the manual pages
-The manual Sections are traditionally defined as follows:
-.TP
-.B 1 User commands (Programs)
-Commands that can be executed by the user from within
-a shell.
-.TP
-.B 2 System calls
-Functions which wrap operations performed by the kernel.
-.TP
-.B 3 Library calls
-All library functions excluding the system call wrappers
-(Most of the
-.I libc
-functions).
-.TP
-.B 4 Special files (devices)
-Files found in
-.I /dev
-which allow to access to devices through the kernel.
-.TP
-.B 5 File formats and configuration files
-Describes various human-readable file formats and configuration files.
-.TP
-.B 6 Games
-Games and funny little programs available on the system.
-.TP
-.B 7 Overview, conventions, and miscellaneous
-Overviews or descriptions of various topics, conventions, and protocols,
-character set standards, the standard filesystem layout, and miscellaneous
-other things.
-.TP
-.B 8 System management commands
-Commands like
-.BR mount (8),
-many of which only root can execute.
-.\" .TP
-.\" .B 9 Kernel routines
-.\" This is an obsolete manual section.
-.\" Once it was thought a good idea to document the Linux kernel here,
-.\" but in fact very little has been documented, and the documentation
-.\" that exists is outdated already.
-.\" There are better sources of
-.\" information for kernel developers.
-.SS Macro package
-New manual pages should be marked up using the
-.B groff an.tmac
-package described in
-.BR man (7).
-This choice is mainly for consistency: the vast majority of
-existing Linux manual pages are marked up using these macros.
-.SS Conventions for source file layout
-Please limit source code line length to no more than about 75 characters
-wherever possible.
-This helps avoid line-wrapping in some mail clients when patches are
-submitted inline.
-.SS Title line
-The first command in a man page should be a
-.B TH
-command:
-.PP
-.RS
-.B \&.TH
-.I "title section date source manual-section"
-.RE
-.PP
-The arguments of the command are as follows:
-.TP
-.I title
-The title of the man page, written in all caps (e.g.,
-.IR MAN-PAGES ).
-.TP
-.I section
-The section number in which the man page should be placed (e.g.,
-.IR 7 ).
-.TP
-.I date
-The date of the last nontrivial change that was made to the man page.
-(Within the
-.I man-pages
-project, the necessary updates to these timestamps are handled
-automatically by scripts, so there is no need to manually update
-them as part of a patch.)
-Dates should be written in the form YYYY-MM-DD.
-.TP
-.I source
-The name and version of the project that provides the manual page
-(not necessarily the package that provides the functionality).
-.TP
-.I manual-section
-Normally, this should be empty,
-since the default value will be good.
-.\"
-.SS Sections within a manual page
-The list below shows conventional or suggested sections.
-Most manual pages should include at least the
-.B highlighted
-sections.
-Arrange a new manual page so that sections
-are placed in the order shown in the list.
-.PP
-.RS
-.TS
-l l.
-\fBNAME\fP
-LIBRARY [Normally only in Sections 2, 3]
-\fBSYNOPSIS\fP
-CONFIGURATION [Normally only in Section 4]
-\fBDESCRIPTION\fP
-OPTIONS [Normally only in Sections 1, 8]
-EXIT STATUS [Normally only in Sections 1, 8]
-RETURN VALUE [Normally only in Sections 2, 3]
-.\" May 07: Few current man pages have an ERROR HANDLING section,,,
-.\" ERROR HANDLING,
-ERRORS [Typically only in Sections 2, 3]
-.\" May 07: Almost no current man pages have a USAGE section,,,
-.\" USAGE,
-.\" DIAGNOSTICS,
-.\" May 07: Almost no current man pages have a SECURITY section,,,
-.\" SECURITY,
-ENVIRONMENT
-FILES
-ATTRIBUTES [Normally only in Sections 2, 3]
-VERSIONS [Normally only in Sections 2, 3]
-STANDARDS
-HISTORY
-NOTES
-CAVEATS
-BUGS
-EXAMPLES
-.\" AUTHORS sections are discouraged
-AUTHORS [Discouraged]
-REPORTING BUGS [Not used in man-pages]
-COPYRIGHT [Not used in man-pages]
-\fBSEE ALSO\fP
-.TE
-.RE
-.PP
-.IR "Where a traditional heading would apply" ", " "please use it" ;
-this kind of consistency can make the information easier to understand.
-If you must, you can create your own
-headings if they make things easier to understand (this can
-be especially useful for pages in Sections 4 and 5).
-However, before doing this, consider whether you could use the
-traditional headings, with some subsections (\fI.SS\fP) within
-those sections.
-.PP
-The following list elaborates on the contents of each of
-the above sections.
-.TP
-.B NAME
-The name of this manual page.
-.IP
-See
-.BR man (7)
-for important details of the line(s) that should follow the
-\fB.SH NAME\fP command.
-All words in this line (including the word immediately
-following the "\e\-") should be in lowercase,
-except where English or technical terminological convention
-dictates otherwise.
-.TP
-.B LIBRARY
-The library providing a symbol.
-.IP
-It shows the common name of the library,
-and in parentheses,
-the name of the library file
-and, if needed, the linker flag needed to link a program against it:
-.RI ( libfoo "[, " \-lfoo ]).
-.TP
-.B SYNOPSIS
-A brief summary of the command or function's interface.
-.IP
-For commands, this shows the syntax of the command and its arguments
-(including options);
-boldface is used for as-is text and italics are used to
-indicate replaceable arguments.
-Brackets ([]) surround optional arguments, vertical bars (|)
-separate choices, and ellipses (\&...) can be repeated.
-For functions, it shows any required data declarations or
-.B #include
-directives, followed by the function declaration.
-.IP
-Where a feature test macro must be defined in order to obtain
-the declaration of a function (or a variable) from a header file,
-then the SYNOPSIS should indicate this, as described in
-.BR feature_test_macros (7).
-.\" FIXME . Say something here about compiler options
-.TP
-.B CONFIGURATION
-Configuration details for a device.
-.IP
-This section normally appears only in Section 4 pages.
-.TP
-.B DESCRIPTION
-An explanation of what the program, function, or format does.
-.IP
-Discuss how it interacts with files and standard input, and what it
-produces on standard output or standard error.
-Omit internals and implementation details unless they're critical for
-understanding the interface.
-Describe the usual case;
-for information on command-line options of a program use the
-.B OPTIONS
-section.
-.\" If there is some kind of input grammar or complex set of subcommands,
-.\" consider describing them in a separate
-.\" .B USAGE
-.\" section (and just place an overview in the
-.\" .B DESCRIPTION
-.\" section).
-.IP
-When describing new behavior or new flags for
-a system call or library function,
-be careful to note the kernel or C library version
-that introduced the change.
-The preferred method of noting this information for flags is as part of a
-.B .TP
-list, in the following form (here, for a new system call flag):
-.RS 16
-.TP
-.BR XYZ_FLAG " (since Linux 3.7)"
-Description of flag...
-.RE
-.IP
-Including version information is especially useful to users
-who are constrained to using older kernel or C library versions
-(which is typical in embedded systems, for example).
-.TP
-.B OPTIONS
-A description of the command-line options accepted by a
-program and how they change its behavior.
-.IP
-This section should appear only for Section 1 and 8 manual pages.
-.\" .TP
-.\" .B USAGE
-.\" describes the grammar of any sublanguage this implements.
-.TP
-.B EXIT STATUS
-A list of the possible exit status values of a program and
-the conditions that cause these values to be returned.
-.IP
-This section should appear only for Section 1 and 8 manual pages.
-.TP
-.B RETURN VALUE
-For Section 2 and 3 pages, this section gives a
-list of the values the library routine will return to the caller
-and the conditions that cause these values to be returned.
-.TP
-.B ERRORS
-For Section 2 and 3 manual pages, this is a list of the
-values that may be placed in
-.I errno
-in the event of an error, along with information about the cause
-of the errors.
-.IP
-Where several different conditions produce the same error,
-the preferred approach is to create separate list entries
-(with duplicate error names) for each of the conditions.
-This makes the separate conditions clear, may make the list easier to read,
-and allows metainformation
-(e.g., kernel version number where the condition first became applicable)
-to be more easily marked for each condition.
-.IP
-.IR "The error list should be in alphabetical order" .
-.TP
-.B ENVIRONMENT
-A list of all environment variables that affect the program or function
-and how they affect it.
-.TP
-.B FILES
-A list of the files the program or function uses, such as
-configuration files, startup files,
-and files the program directly operates on.
-.IP
-Give the full pathname of these files, and use the installation
-process to modify the directory part to match user preferences.
-For many programs, the default installation location is in
-.IR /usr/local ,
-so your base manual page should use
-.I /usr/local
-as the base.
-.\" May 07: Almost no current man pages have a DIAGNOSTICS section;
-.\" "RETURN VALUE" or "EXIT STATUS" is preferred.
-.\" .TP
-.\" .B DIAGNOSTICS
-.\" gives an overview of the most common error messages and how to
-.\" cope with them.
-.\" You don't need to explain system error messages
-.\" or fatal signals that can appear during execution of any program
-.\" unless they're special in some way to the program.
-.\"
-.\" May 07: Almost no current man pages have a SECURITY section.
-.\".TP
-.\".B SECURITY
-.\"discusses security issues and implications.
-.\"Warn about configurations or environments that should be avoided,
-.\"commands that may have security implications, and so on, especially
-.\"if they aren't obvious.
-.\"Discussing security in a separate section isn't necessary;
-.\"if it's easier to understand, place security information in the
-.\"other sections (such as the
-.\" .B DESCRIPTION
-.\" or
-.\" .B USAGE
-.\" section).
-.\" However, please include security information somewhere!
-.TP
-.B ATTRIBUTES
-A summary of various attributes of the function(s) documented on this page.
-See
-.BR attributes (7)
-for further details.
-.TP
-.B VERSIONS
-A summary of systems where the API performs differently,
-or where there's a similar API.
-.TP
-.B STANDARDS
-A description of any standards or conventions that relate to the function
-or command described by the manual page.
-.IP
-The preferred terms to use for the various standards are listed as
-headings in
-.BR standards (7).
-.IP
-This section should note the current standards to which the API conforms to.
-.IP
-If the API is not governed by any standards but commonly
-exists on other systems, note them.
-If the call is Linux-specific or GNU-specific, note this.
-If it's available in the BSDs, note that.
-.IP
-If this section consists of just a list of standards
-(which it commonly does),
-terminate the list with a period (\[aq].\[aq]).
-.TP
-.B HISTORY
-A brief summary of the Linux kernel or glibc versions where a
-system call or library function appeared,
-or changed significantly in its operation.
-.IP
-As a general rule, every new interface should
-include a HISTORY section in its manual page.
-Unfortunately,
-many existing manual pages don't include this information
-(since there was no policy to do so when they were written).
-Patches to remedy this are welcome,
-but, from the perspective of programmers writing new code,
-this information probably matters only in the case of kernel
-interfaces that have been added in Linux 2.4 or later
-(i.e., changes since Linux 2.2),
-and library functions that have been added to glibc since glibc 2.1
-(i.e., changes since glibc 2.0).
-.IP
-The
-.BR syscalls (2)
-manual page also provides information about kernel versions
-in which various system calls first appeared.
-.PP
-Old versions of standards should be mentioned here,
-rather than in STANDARDS,
-for example,
-SUS, SUSv2, and XPG, or the SVr4 and 4.xBSD implementation standards.
-.TP
-.B NOTES
-Miscellaneous notes.
-.IP
-For Section 2 and 3 man pages you may find it useful to include
-subsections (\fBSS\fP) named \fILinux Notes\fP and \fIglibc Notes\fP.
-.IP
-In Section 2, use the heading
-.I "C library/kernel differences"
-to mark off notes that describe the differences (if any) between
-the C library wrapper function for a system call and
-the raw system call interface provided by the kernel.
-.TP
-.B CAVEATS
-Warnings about typical user misuse of an API,
-that don't constitute an API bug or design defect.
-.TP
-.B BUGS
-A list of limitations, known defects or inconveniences,
-and other questionable activities.
-.TP
-.B EXAMPLES
-One or more examples demonstrating how this function, file, or
-command is used.
-.IP
-For details on writing example programs,
-see \fIExample programs\fP below.
-.TP
-.B AUTHORS
-A list of authors of the documentation or program.
-.IP
-\fBUse of an AUTHORS section is strongly discouraged\fP.
-Generally, it is better not to clutter every page with a list
-of (over time potentially numerous) authors;
-if you write or significantly amend a page,
-add a copyright notice as a comment in the source file.
-If you are the author of a device driver and want to include
-an address for reporting bugs, place this under the BUGS section.
-.TP
-.B REPORTING BUGS
-The
-.I man-pages
-project doesn't use a REPORTING BUGS section in manual pages.
-Information on reporting bugs is instead supplied in the
-script-generated COLOPHON section.
-However, various projects do use a REPORTING BUGS section.
-It is recommended to place it near the foot of the page.
-.TP
-.B COPYRIGHT
-The
-.I man-pages
-project doesn't use a COPYRIGHT section in manual pages.
-Copyright information is instead maintained in the page source.
-In pages where this section is present,
-it is recommended to place it near the foot of the page, just above SEE ALSO.
-.TP
-.B SEE ALSO
-A comma-separated list of related man pages, possibly followed by
-other related pages or documents.
-.IP
-The list should be ordered by section number and
-then alphabetically by name.
-Do not terminate this list with a period.
-.IP
-Where the SEE ALSO list contains many long manual page names,
-to improve the visual result of the output, it may be useful to employ the
-.I .ad l
-(don't right justify)
-and
-.I .nh
-(don't hyphenate)
-directives.
-Hyphenation of individual page names can be prevented
-by preceding words with the string "\e%".
-.IP
-Given the distributed, autonomous nature of FOSS projects
-and their documentation, it is sometimes necessary\[em]and in many cases
-desirable\[em]that the SEE ALSO section includes references to
-manual pages provided by other projects.
-.SH FORMATTING AND WORDING CONVENTIONS
-The following subsections note some details for preferred formatting and
-wording conventions in various sections of the pages in the
-.I man-pages
-project.
-.SS SYNOPSIS
-Wrap the function prototype(s) in a
-.IR .nf / .fi
-pair to prevent filling.
-.PP
-In general, where more than one function prototype is shown in the SYNOPSIS,
-the prototypes should
-.I not
-be separated by blank lines.
-However, blank lines (achieved using
-.IR .PP )
-may be added in the following cases:
-.IP \[bu] 3
-to separate long lists of function prototypes into related groups
-(see for example
-.BR list (3));
-.IP \[bu]
-in other cases that may improve readability.
-.PP
-In the SYNOPSIS, a long function prototype may need to be
-continued over to the next line.
-The continuation line is indented according to the following rules:
-.IP (1) 5
-If there is a single such prototype that needs to be continued,
-then align the continuation line so that when the page is
-rendered on a fixed-width font device (e.g., on an xterm) the
-continuation line starts just below the start of the argument
-list in the line above.
-(Exception: the indentation may be
-adjusted if necessary to prevent a very long continuation line
-or a further continuation line where the function prototype is
-very long.)
-As an example:
-.IP
-.in +4n
-.nf
-.BI "int tcsetattr(int " fd ", int " optional_actions ,
-.BI " const struct termios *" termios_p );
-.fi
-.in
-.IP (2)
-But, where multiple functions in the SYNOPSIS require
-continuation lines, and the function names have different
-lengths, then align all continuation lines to start in the
-same column.
-This provides a nicer rendering in PDF output
-(because the SYNOPSIS uses a variable width font where
-spaces render narrower than most characters).
-As an example:
-.IP
-.in +4n
-.nf
-.BI "int getopt(int " argc ", char * const " argv[] ,
-.BI " const char *" optstring );
-.BI "int getopt_long(int " argc ", char * const " argv[] ,
-.BI " const char *" optstring ,
-.BI " const struct option *" longopts ", int *" longindex );
-.fi
-.in
-.SS RETURN VALUE
-The preferred wording to describe how
-.I errno
-is set is
-.RI \[dq] errno
-is set to indicate the error"
-or similar.
-.\" Before man-pages 5.11, many different wordings were used, which
-.\" was confusing, and potentially made scripted edits more difficult.
-This wording is consistent with the wording used in both POSIX.1 and FreeBSD.
-.SS ATTRIBUTES
-.\" See man-pages commit c466875ecd64ed3d3cd3e578406851b7dfb397bf
-Note the following:
-.IP \[bu] 3
-Wrap the table in this section in a
-.IR ".ad\ l" / .ad
-pair to disable text filling and a
-.IR .nh / .hy
-pair to disable hyphenation.
-.IP \[bu]
-Ensure that the table occupies the full page width through the use of an
-.I lbx
-description for one of the columns
-(usually the first column,
-though in some cases the last column if it contains a lot of text).
-.IP \[bu]
-Make free use of
-.IR T{ / T}
-macro pairs to allow table cells to be broken over multiple lines
-(also bearing in mind that pages may sometimes be rendered to a
-width of less than 80 columns).
-.PP
-For examples of all of the above, see the source code of various pages.
-.SH STYLE GUIDE
-The following subsections describe the preferred style for the
-.I man-pages
-project.
-For details not covered below, the Chicago Manual of Style
-is usually a good source;
-try also grepping for preexisting usage in the project source tree.
-.SS Use of gender-neutral language
-As far as possible, use gender-neutral language in the text of man
-pages.
-Use of "they" ("them", "themself", "their") as a gender-neutral singular
-pronoun is acceptable.
-.\"
-.SS Formatting conventions for manual pages describing commands
-For manual pages that describe a command (typically in Sections 1 and 8),
-the arguments are always specified using italics,
-.IR "even in the SYNOPSIS section" .
-.PP
-The name of the command, and its options, should
-always be formatted in bold.
-.\"
-.SS Formatting conventions for manual pages describing functions
-For manual pages that describe functions (typically in Sections 2 and 3),
-the arguments are always specified using italics,
-.IR "even in the SYNOPSIS section" ,
-where the rest of the function is specified in bold:
-.PP
-.BI " int myfunction(int " argc ", char **" argv );
-.PP
-Variable names should, like argument names, be specified in italics.
-.PP
-Any reference to the subject of the current manual page
-should be written with the name in bold followed by
-a pair of parentheses in Roman (normal) font.
-For example, in the
-.BR fcntl (2)
-man page, references to the subject of the page would be written as:
-.BR fcntl ().
-The preferred way to write this in the source file is:
-.PP
-.EX
- .BR fcntl ()
-.EE
-.PP
-(Using this format, rather than the use of "\efB...\efP()"
-makes it easier to write tools that parse man page source files.)
-.\"
-.SS Use semantic newlines
-In the source of a manual page,
-new sentences should be started on new lines,
-long sentences should be split into lines at clause breaks
-(commas, semicolons, colons, and so on),
-and long clauses should be split at phrase boundaries.
-This convention, sometimes known as "semantic newlines",
-makes it easier to see the effect of patches,
-which often operate at the level of
-individual sentences, clauses, or phrases.
-.\"
-.SS Lists
-There are different kinds of lists:
-.TP
-Tagged paragraphs
-These are used for a list of tags and their descriptions.
-When the tags are constants (either macros or numbers)
-they are in bold.
-Use the
-.B .TP
-macro.
-.IP
-An example is this "Tagged paragraphs" subsection is itself.
-.TP
-Ordered lists
-Elements are preceded by a number in parentheses (1), (2).
-These represent a set of steps that have an order.
-.IP
-When there are substeps,
-they will be numbered like (4.2).
-.TP
-Positional lists
-Elements are preceded by a number (index) in square brackets [4], [5].
-These represent fields in a set.
-The first index will be:
-.RS
-.TP
-.B 0
-When it represents fields of a C data structure,
-to be consistent with arrays.
-.PD 0
-.TP
-.B 1
-When it represents fields of a file,
-to be consistent with tools like
-.BR cut (1).
-.PD
-.RE
-.TP
-Alternatives list
-Elements are preceded by a letter in parentheses (a), (b).
-These represent a set of (normally) exclusive alternatives.
-.TP
-Bullet lists
-Elements are preceded by bullet symbols
-.RB ( \e[bu] ).
-Anything that doesn't fit elsewhere is
-usually covered by this type of list.
-.TP
-Numbered notes
-Not really a list,
-but the syntax is identical to "positional lists".
-.PP
-There should always be exactly
-2 spaces between the list symbol and the elements.
-This doesn't apply to "tagged paragraphs",
-which use the default indentation rules.
-.\"
-.SS Formatting conventions (general)
-Paragraphs should be separated by suitable markers (usually either
-.I .PP
-or
-.IR .IP ).
-Do
-.I not
-separate paragraphs using blank lines, as this results in poor rendering
-in some output formats (such as PostScript and PDF).
-.PP
-Filenames (whether pathnames, or references to header files)
-are always in italics (e.g.,
-.IR <stdio.h> ),
-except in the SYNOPSIS section, where included files are in bold (e.g.,
-.BR "#include <stdio.h>" ).
-When referring to a standard header file include,
-specify the header file surrounded by angle brackets,
-in the usual C way (e.g.,
-.IR <stdio.h> ).
-.PP
-Special macros, which are usually in uppercase, are in bold (e.g.,
-.BR MAXINT ).
-Exception: don't boldface NULL.
-.PP
-When enumerating a list of error codes, the codes are in bold (this list
-usually uses the
-.B \&.TP
-macro).
-.PP
-Complete commands should, if long,
-be written as an indented line on their own,
-with a blank line before and after the command, for example
-.PP
-.in +4n
-.EX
-man 7 man\-pages
-.EE
-.in
-.PP
-If the command is short, then it can be included inline in the text,
-in italic format, for example,
-.IR "man 7 man-pages" .
-In this case, it may be worth using nonbreaking spaces
-(\e[ti]) at suitable places in the command.
-Command options should be written in italics (e.g.,
-.IR \-l ).
-.PP
-Expressions, if not written on a separate indented line, should
-be specified in italics.
-Again, the use of nonbreaking spaces may be appropriate
-if the expression is inlined with normal text.
-.PP
-When showing example shell sessions,
-user input should be formatted in bold,
-for example
-.PP
-.in +4n
-.EX
-$ \fBdate\fP
-Thu Jul 7 13:01:27 CEST 2016
-.EE
-.in
-.PP
-Any reference to another man page
-should be written with the name in bold,
-.I always
-followed by the section number,
-formatted in Roman (normal) font, without any
-separating spaces (e.g.,
-.BR intro (2)).
-The preferred way to write this in the source file is:
-.PP
-.EX
- .BR intro (2)
-.EE
-.PP
-(Including the section number in cross references lets tools like
-.BR man2html (1)
-create properly hyperlinked pages.)
-.PP
-Control characters should be written in bold face,
-with no quotes; for example,
-.BR \[ha]X .
-.SS Spelling
-Starting with release 2.59,
-.I man-pages
-follows American spelling conventions
-(previously, there was a random mix of British and American spellings);
-please write all new pages and patches according to these conventions.
-.PP
-Aside from the well-known spelling differences,
-there are a few other subtleties to watch for:
-.IP \[bu] 3
-American English tends to use the forms "backward", "upward", "toward",
-and so on
-rather than the British forms "backwards", "upwards", "towards", and so on.
-.IP \[bu]
-Opinions are divided on "acknowledgement" vs "acknowledgment".
-The latter is predominant, but not universal usage in American English.
-POSIX and the BSD license use the former spelling.
-In the Linux man-pages project, we use "acknowledgement".
-.SS BSD version numbers
-The classical scheme for writing BSD version numbers is
-.IR x.yBSD ,
-where
-.I x.y
-is the version number (e.g., 4.2BSD).
-Avoid forms such as
-.IR "BSD 4.3" .
-.SS Capitalization
-In subsection ("SS") headings,
-capitalize the first word in the heading, but otherwise use lowercase,
-except where English usage (e.g., proper nouns) or programming
-language requirements (e.g., identifier names) dictate otherwise.
-For example:
-.PP
-.in +4n
-.EX
-\&.SS Unicode under Linux
-.EE
-.in
-.\"
-.SS Indentation of structure definitions, shell session logs, and so on
-When structure definitions, shell session logs, and so on are included
-in running text, indent them by 4 spaces (i.e., a block enclosed by
-.I ".in\ +4n"
-and
-.IR ".in" ),
-format them using the
-.I .EX
-and
-.I .EE
-macros, and surround them with suitable paragraph markers (either
-.I .PP
-or
-.IR .IP ).
-For example:
-.PP
-.in +4n
-.EX
-\&.PP
-\&.in +4n
-\&.EX
-int
-main(int argc, char *argv[])
-{
- return 0;
-}
-\&.EE
-\&.in
-\&.PP
-.EE
-.in
-.SS Preferred terms
-The following table lists some preferred terms to use in man pages,
-mainly to ensure consistency across pages.
-.ad l
-.TS
-l l l
----
-l l ll.
-Term Avoid using Notes
-
-bit mask bitmask
-built-in builtin
-Epoch epoch T{
-For the UNIX Epoch (00:00:00, 1 Jan 1970 UTC)
-T}
-filename file name
-filesystem file system
-hostname host name
-inode i-node
-lowercase lower case, lower-case
-nonzero non-zero
-pathname path name
-pseudoterminal pseudo-terminal
-privileged port T{
-reserved port,
-system port
-T}
-real-time T{
-realtime,
-real time
-T}
-run time runtime
-saved set-group-ID T{
-saved group ID,
-saved set-GID
-T}
-saved set-user-ID T{
-saved user ID,
-saved set-UID
-T}
-set-group-ID set-GID, setgid
-set-user-ID set-UID, setuid
-superuser T{
-super user,
-super-user
-T}
-superblock T{
-super block,
-super-block
-T}
-symbolic link symlink
-timestamp time stamp
-timezone time zone
-uppercase upper case, upper-case
-usable useable
-user space userspace
-username user name
-x86-64 x86_64 T{
-Except if referring to result of "uname\ \-m" or similar
-T}
-zeros zeroes
-.TE
-.PP
-See also the discussion
-.I Hyphenation of attributive compounds
-below.
-.SS Terms to avoid
-The following table lists some terms to avoid using in man pages,
-along with some suggested alternatives,
-mainly to ensure consistency across pages.
-.ad l
-.TS
-l l l
----
-l l l.
-Avoid Use instead Notes
-
-32bit 32-bit T{
-same for 8-bit, 16-bit, etc.
-T}
-current process calling process T{
-A common mistake made by kernel programmers when writing man pages
-T}
-manpage T{
-man page, manual page
-T}
-minus infinity negative infinity
-non-root unprivileged user
-non-superuser unprivileged user
-nonprivileged unprivileged
-OS operating system
-plus infinity positive infinity
-pty pseudoterminal
-tty terminal
-Unices UNIX systems
-Unixes UNIX systems
-.TE
-.ad
-.\"
-.SS Trademarks
-Use the correct spelling and case for trademarks.
-The following is a list of the correct spellings of various
-relevant trademarks that are sometimes misspelled:
-.IP
-.TS
-l.
-DG/UX
-HP-UX
-UNIX
-UnixWare
-.TE
-.SS NULL, NUL, null pointer, and null byte
-A
-.I null pointer
-is a pointer that points to nothing,
-and is normally indicated by the constant
-.IR NULL .
-On the other hand,
-.I NUL
-is the
-.IR "null byte" ,
-a byte with the value 0, represented in C via the character constant
-.IR \[aq]\e0\[aq] .
-.PP
-The preferred term for the pointer is "null pointer" or simply "NULL";
-avoid writing "NULL pointer".
-.PP
-The preferred term for the byte is "null byte".
-Avoid writing "NUL", since it is too easily confused with "NULL".
-Avoid also the terms "zero byte" and "null character".
-The byte that terminates a C string should be described
-as "the terminating null byte";
-strings may be described as "null-terminated",
-but avoid the use of "NUL-terminated".
-.SS Hyperlinks
-For hyperlinks, use the
-.IR .UR / .UE
-macro pair
-(see
-.BR groff_man (7)).
-This produces proper hyperlinks that can be used in a web browser,
-when rendering a page with, say:
-.PP
-.in +4n
-.EX
-BROWSER=firefox man -H pagename
-.EE
-.in
-.SS Use of e.g., i.e., etc., a.k.a., and similar
-In general, the use of abbreviations such as "e.g.", "i.e.", "etc.",
-"cf.", and "a.k.a." should be avoided,
-in favor of suitable full wordings
-("for example", "that is", "and so on", "compare to", "also known as").
-.PP
-The only place where such abbreviations may be acceptable is in
-.I short
-parenthetical asides (e.g., like this one).
-.PP
-Always include periods in such abbreviations, as shown here.
-In addition, "e.g." and "i.e." should always be followed by a comma.
-.SS Em-dashes
-The way to write an em-dash\[em]the glyph that appears
-at either end of this subphrase\[em]in *roff is with the macro "\e[em]".
-(On an ASCII terminal, an em-dash typically renders as two hyphens,
-but in other typographical contexts it renders as a long dash.)
-Em-dashes should be written
-.I without
-surrounding spaces.
-.SS Hyphenation of attributive compounds
-Compound terms should be hyphenated when used attributively
-(i.e., to qualify a following noun). Some examples:
-.IP
-.TS
-l.
-32-bit value
-command-line argument
-floating-point number
-run-time check
-user-space function
-wide-character string
-.TE
-.SS Hyphenation with multi, non, pre, re, sub, and so on
-The general tendency in modern English is not to hyphenate
-after prefixes such as "multi", "non", "pre", "re", "sub", and so on.
-Manual pages should generally follow this rule when these prefixes are
-used in natural English constructions with simple suffixes.
-The following list gives some examples of the preferred forms:
-.IP
-.TS
-l.
-interprocess
-multithreaded
-multiprocess
-nonblocking
-nondefault
-nonempty
-noninteractive
-nonnegative
-nonportable
-nonzero
-preallocated
-precreate
-prerecorded
-reestablished
-reinitialize
-rearm
-reread
-subcomponent
-subdirectory
-subsystem
-.TE
-.PP
-Hyphens should be retained when the prefixes are used in nonstandard
-English words, with trademarks, proper nouns, acronyms, or compound terms.
-Some examples:
-.IP
-.TS
-l.
-non-ASCII
-non-English
-non-NULL
-non-real-time
-.TE
-.PP
-Finally, note that "re-create" and "recreate" are two different verbs,
-and the former is probably what you want.
-.\"
-.SS Generating optimal glyphs
-Where a real minus character is required (e.g., for numbers such as \-1,
-for man page cross references such as
-.BR utf\-8 (7),
-or when writing options that have a leading dash, such as in
-.IR "ls\ \-l"),
-use the following form in the man page source:
-.PP
-.in +4n
-.EX
-\e\-
-.EE
-.in
-.PP
-This guideline applies also to code examples.
-.PP
-The use of real minus signs serves the following purposes:
-.\" https://lore.kernel.org/linux-man/20210121061158.5ul7226fgbrmodbt@localhost.localdomain/
-.IP \[bu] 3
-To provide better renderings on various targets other than
-ASCII terminals,
-notably in PDF and on Unicode/UTF\-8-capable terminals.
-.IP \[bu]
-To generate glyphs that when copied from rendered pages will
-produce real minus signs when pasted into a terminal.
-.PP
-To produce unslanted single quotes that render well in ASCII, UTF-8, and PDF,
-use "\e[aq]" ("apostrophe quote"); for example
-.PP
-.in +4n
-.EX
-\e[aq]C\e[aq]
-.EE
-.in
-.PP
-where
-.I C
-is the quoted character.
-This guideline applies also to character constants used in code examples.
-.PP
-Where a proper caret (\[ha]) that renders well in both a terminal and PDF
-is required, use "\\[ha]".
-This is especially necessary in code samples,
-to get a nicely rendered caret when rendering to PDF.
-.PP
-Using a naked "\[ti]" character results in a poor rendering in PDF.
-Instead use "\\[ti]".
-This is especially necessary in code samples,
-to get a nicely rendered tilde when rendering to PDF.
-.\"
-.SS Example programs and shell sessions
-Manual pages may include example programs demonstrating how to
-use a system call or library function.
-However, note the following:
-.IP \[bu] 3
-Example programs should be written in C.
-.IP \[bu]
-An example program is necessary and useful only if it demonstrates
-something beyond what can easily be provided in a textual
-description of the interface.
-An example program that does nothing
-other than call an interface usually serves little purpose.
-.IP \[bu]
-Example programs should ideally be short
-(e.g., a good example can often be provided in less than 100 lines of code),
-though in some cases longer programs may be necessary
-to properly illustrate the use of an API.
-.IP \[bu]
-Expressive code is appreciated.
-.IP \[bu]
-Comments should included where helpful.
-Complete sentences in free-standing comments should be
-terminated by a period.
-Periods should generally be omitted in "tag" comments
-(i.e., comments that are placed on the same line of code);
-such comments are in any case typically brief phrases
-rather than complete sentences.
-.IP \[bu]
-Example programs should do error checking after system calls and
-library function calls.
-.IP \[bu]
-Example programs should be complete, and compile without
-warnings when compiled with \fIcc\ \-Wall\fP.
-.IP \[bu]
-Where possible and appropriate, example programs should allow
-experimentation, by varying their behavior based on inputs
-(ideally from command-line arguments, or alternatively, via
-input read by the program).
-.IP \[bu]
-Example programs should be laid out according to Kernighan and
-Ritchie style, with 4-space indents.
-(Avoid the use of TAB characters in source code!)
-The following command can be used to format your source code to
-something close to the preferred style:
-.IP
-.in +4n
-.EX
-indent \-npro \-kr \-i4 \-ts4 \-sob \-l72 \-ss \-nut \-psl prog.c
-.EE
-.in
-.IP \[bu]
-For consistency, all example programs should terminate using either of:
-.IP
-.in +4n
-.EX
-exit(EXIT_SUCCESS);
-exit(EXIT_FAILURE);
-.EE
-.in
-.IP
-Avoid using the following forms to terminate a program:
-.IP
-.in +4n
-.EX
-exit(0);
-exit(1);
-return n;
-.EE
-.in
-.IP \[bu]
-If there is extensive explanatory text before the
-program source code, mark off the source code
-with a subsection heading
-.IR "Program source" ,
-as in:
-.IP
-.in +4n
-.EX
-\&.SS Program source
-.EE
-.in
-.IP
-Always do this if the explanatory text includes a shell session log.
-.PP
-If you include a shell session log demonstrating the use of a program
-or other system feature:
-.IP \[bu] 3
-Place the session log above the source code listing.
-.IP \[bu]
-Indent the session log by four spaces.
-.IP \[bu]
-Boldface the user input text,
-to distinguish it from output produced by the system.
-.PP
-For some examples of what example programs should look like, see
-.BR wait (2)
-and
-.BR pipe (2).
-.SH EXAMPLES
-For canonical examples of how man pages in the
-.I man-pages
-package should look, see
-.BR pipe (2)
-and
-.BR fcntl (2).
-.SH SEE ALSO
-.BR man (1),
-.BR man2html (1),
-.BR attributes (7),
-.BR groff (7),
-.BR groff_man (7),
-.BR man (7),
-.BR mdoc (7)
diff --git a/man7/man.7 b/man7/man.7
deleted file mode 100644
index cf83292fa..000000000
--- a/man7/man.7
+++ /dev/null
@@ -1,507 +0,0 @@
-.\" (C) Copyright 1992-1999 Rickard E. Faith and David A. Wheeler
-.\" (faith@cs.unc.edu and dwheeler@ida.org)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sun Jul 25 11:06:05 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Sat Jun 8 00:39:52 1996 by aeb
-.\" Modified Wed Jun 16 23:00:00 1999 by David A. Wheeler (dwheeler@ida.org)
-.\" Modified Thu Jul 15 12:43:28 1999 by aeb
-.\" Modified Sun Jan 6 18:26:25 2002 by Martin Schulze <joey@infodrom.org>
-.\" Modified Tue Jul 27 20:12:02 2004 by Colin Watson <cjwatson@debian.org>
-.\" 2007-05-30, mtk: various rewrites and moved much text to new man-pages.7.
-.\"
-.TH man 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-man \- macros to format man pages
-.SH SYNOPSIS
-.B groff \-Tascii \-man
-.I file
-\&...
-.br
-.B groff \-Tps \-man
-.I file
-\&...
-.PP
-.B man
-.RI [ section ]
-.I title
-.SH DESCRIPTION
-This manual page explains the
-.B "groff an.tmac"
-macro package (often called the
-.B man
-macro package).
-This macro package should be used by developers when
-writing or porting man pages for Linux.
-It is fairly compatible with other
-versions of this macro package, so porting man pages should not be a major
-problem (exceptions include the NET-2 BSD release, which uses a totally
-different macro package called mdoc; see
-.BR mdoc (7)).
-.PP
-Note that NET-2 BSD mdoc man pages can be used with
-.B groff
-simply by specifying the
-.B \-mdoc
-option instead of the
-.B \-man
-option.
-Using the
-.B \-mandoc
-option is, however, recommended, since this will automatically detect which
-macro package is in use.
-.PP
-For conventions that should be employed when writing man pages
-for the Linux \fIman-pages\fP package, see
-.BR man\-pages (7).
-.SS Title line
-The first command in a man page (after comment lines,
-that is, lines that start with \fB.\e"\fP) should be
-.PP
-.RS
-.B \&.TH
-.I "title section date source manual"
-.RE
-.PP
-For details of the arguments that should be supplied to the
-.B TH
-command, see
-.BR man\-pages (7).
-.PP
-Note that BSD mdoc-formatted pages begin with the
-.B Dd
-command, not the
-.B TH
-command.
-.SS Sections
-Sections are started with
-.B \&.SH
-followed by the heading name.
-.\" The following doesn't seem to be required (see Debian bug 411303),
-.\" If the name contains spaces and appears
-.\" on the same line as
-.\" .BR \&.SH ,
-.\" then place the heading in double quotes.
-.PP
-The only mandatory heading is NAME, which should be the first section and
-be followed on the next line by a one-line description of the program:
-.PP
-.RS
-\&.SH NAME
-.br
-item \e- description
-.RE
-.PP
-It is extremely important that this format is followed, and that there is a
-backslash before the single dash which follows the item name.
-This syntax is used by the
-.BR mandb (8)
-program to create a database of short descriptions for the
-.BR whatis (1)
-and
-.BR apropos (1)
-commands.
-(See
-.BR lexgrog (1)
-for further details on the syntax of the NAME section.)
-.PP
-For a list of other sections that might appear in a manual page, see
-.BR man\-pages (7).
-.SS Fonts
-The commands to select the type face are:
-.TP 4
-.B \&.B
-Bold
-.TP
-.B \&.BI
-Bold alternating with italics
-(especially useful for function specifications)
-.TP
-.B \&.BR
-Bold alternating with Roman
-(especially useful for referring to other
-manual pages)
-.TP
-.B \&.I
-Italics
-.TP
-.B \&.IB
-Italics alternating with bold
-.TP
-.B \&.IR
-Italics alternating with Roman
-.TP
-.B \&.RB
-Roman alternating with bold
-.TP
-.B \&.RI
-Roman alternating with italics
-.TP
-.B \&.SB
-Small alternating with bold
-.TP
-.B \&.SM
-Small (useful for acronyms)
-.PP
-Traditionally, each command can have up to six arguments, but the GNU
-implementation removes this limitation (you might still want to limit
-yourself to 6 arguments for portability's sake).
-Arguments are delimited by spaces.
-Double quotes can be used to specify an argument which contains spaces.
-For the macros that produce alternating type faces,
-the arguments will be printed next to each other without
-intervening spaces, so that the
-.B \&.BR
-command can be used to specify a word in bold followed by a mark of
-punctuation in Roman.
-If no arguments are given, the command is applied to the following line
-of text.
-.SS Other macros and strings
-Below are other relevant macros and predefined strings.
-Unless noted otherwise, all macros
-cause a break (end the current line of text).
-Many of these macros set or use the "prevailing indent".
-The "prevailing indent" value is set by any macro with the parameter
-.I i
-below;
-macros may omit
-.I i
-in which case the current prevailing indent will be used.
-As a result, successive indented paragraphs can use the same indent without
-respecifying the indent value.
-A normal (nonindented) paragraph resets the prevailing indent value
-to its default value (0.5 inches).
-By default, a given indent is measured in ens;
-try to use ens or ems as units for
-indents, since these will automatically adjust to font size changes.
-The other key macro definitions are:
-.SS Normal paragraphs
-.TP 9m
-.B \&.LP
-Same as
-.B \&.PP
-(begin a new paragraph).
-.TP
-.B \&.P
-Same as
-.B \&.PP
-(begin a new paragraph).
-.TP
-.B \&.PP
-Begin a new paragraph and reset prevailing indent.
-.SS Relative margin indent
-.TP 9m
-.BI \&.RS " i"
-Start relative margin indent: moves the left margin
-.I i
-to the right (if
-.I i
-is omitted, the prevailing indent value is used).
-A new prevailing indent is set to 0.5 inches.
-As a result, all following paragraph(s) will be
-indented until the corresponding
-.BR \&.RE .
-.TP
-.B \&.RE
-End relative margin indent and
-restores the previous value of the prevailing indent.
-.SS Indented paragraph macros
-.TP 9m
-.BI \&.HP " i"
-Begin paragraph with a hanging indent
-(the first line of the paragraph is at the left margin of
-normal paragraphs, and the rest of the paragraph's lines are indented).
-.TP
-.BI \&.IP " x i"
-Indented paragraph with optional hanging tag.
-If the tag
-.I x
-is omitted, the entire following paragraph is indented by
-.IR i .
-If the tag
-.I x
-is provided, it is hung at the left margin
-before the following indented paragraph
-(this is just like
-.B \&.TP
-except the tag is included with the command instead of being on the
-following line).
-If the tag is too long, the text after the tag will be moved down to the
-next line (text will not be lost or garbled).
-For bulleted lists, use this macro with \e(bu (bullet) or \e(em (em dash)
-as the tag, and for numbered lists, use the number or letter followed by
-a period as the tag;
-this simplifies translation to other formats.
-.TP
-.BI \&.TP " i"
-Begin paragraph with hanging tag.
-The tag is given on the next line, but
-its results are like those of the
-.B \&.IP
-command.
-.SS Hypertext link macros
-.TP
-.BI \&.UR " url"
-Insert a hypertext link to the URI (URL)
-.IR url ,
-with all text up to the following
-.B \&.UE
-macro as the link text.
-.TP
-.B \&.UE \c
-.RI [ trailer ]
-Terminate the link text of the preceding
-.B \&.UR
-macro, with the optional
-.I trailer
-(if present, usually a closing parenthesis and/or end-of-sentence
-punctuation) immediately following.
-For non-HTML output devices (e.g.,
-.BR "man \-Tutf8" ),
-the link text is followed by the URL in angle brackets; if there is no
-link text, the URL is printed as its own link text, surrounded by angle
-brackets.
-(Angle brackets may not be available on all output devices.)
-For the HTML output device, the link text is hyperlinked to the URL; if
-there is no link text, the URL is printed as its own link text.
-.PP
-These macros have been supported since GNU Troff 1.20 (2009-01-05) and
-Heirloom Doctools Troff since 160217 (2016-02-17).
-.SS Miscellaneous macros
-.TP 9m
-.B \&.DT
-Reset tabs to default tab values (every 0.5 inches);
-does not cause a break.
-.TP
-.BI \&.PD " d"
-Set inter-paragraph vertical distance to d
-(if omitted, d=0.4v);
-does not cause a break.
-.TP
-.BI \&.SS " t"
-Subheading
-.I t
-(like
-.BR \&.SH ,
-but used for a subsection inside a section).
-.SS Predefined strings
-The
-.B man
-package has the following predefined strings:
-.TP
-\e*R
-Registration Symbol: \*R
-.TP
-\e*S
-Change to default font size
-.TP
-\e*(Tm
-Trademark Symbol: \*(Tm
-.TP
-\e*(lq
-Left angled double quote: \*(lq
-.TP
-\e*(rq
-Right angled double quote: \*(rq
-.SS Safe subset
-Although technically
-.B man
-is a troff macro package, in reality a large number of other tools
-process man page files that don't implement all of troff's abilities.
-Thus, it's best to avoid some of troff's more exotic abilities
-where possible to permit these other tools to work correctly.
-Avoid using the various troff preprocessors
-(if you must, go ahead and use
-.BR tbl (1),
-but try to use the
-.B IP
-and
-.B TP
-commands instead for two-column tables).
-Avoid using computations; most other tools can't process them.
-Use simple commands that are easy to translate to other formats.
-The following troff macros are believed to be safe (though in many cases
-they will be ignored by translators):
-.BR \e" ,
-.BR . ,
-.BR ad ,
-.BR bp ,
-.BR br ,
-.BR ce ,
-.BR de ,
-.BR ds ,
-.BR el ,
-.BR ie ,
-.BR if ,
-.BR fi ,
-.BR ft ,
-.BR hy ,
-.BR ig ,
-.BR in ,
-.BR na ,
-.BR ne ,
-.BR nf ,
-.BR nh ,
-.BR ps ,
-.BR so ,
-.BR sp ,
-.BR ti ,
-.BR tr .
-.PP
-You may also use many troff escape sequences (those sequences beginning
-with \e).
-When you need to include the backslash character as normal text,
-use \ee.
-Other sequences you may use, where x or xx are any characters and N
-is any digit, include:
-.BR \e\[aq] ,
-.BR \e\[ga] ,
-.BR \e- ,
-.BR \e. ,
-.BR \e" ,
-.BR \e% ,
-.BR \e*x ,
-.BR \e*(xx ,
-.BR \e(xx ,
-.BR \e$N ,
-.BR \enx ,
-.BR \en(xx ,
-.BR \efx ,
-and
-.BR \ef(xx .
-Avoid using the escape sequences for drawing graphics.
-.PP
-Do not use the optional parameter for
-.B bp
-(break page).
-Use only positive values for
-.B sp
-(vertical space).
-Don't define a macro
-.RB ( de )
-with the same name as a macro in this or the
-mdoc macro package with a different meaning; it's likely that
-such redefinitions will be ignored.
-Every positive indent
-.RB ( in )
-should be paired with a matching negative indent
-(although you should be using the
-.B RS
-and
-.B RE
-macros instead).
-The condition test
-.RB ( if,ie )
-should only have \[aq]t\[aq] or \[aq]n\[aq] as the condition.
-Only translations
-.RB ( tr )
-that can be ignored should be used.
-Font changes
-.RB ( ft
-and the \fB\ef\fP escape sequence)
-should only have the values 1, 2, 3, 4, R, I, B, P, or CW
-(the ft command may also have no parameters).
-.PP
-If you use capabilities beyond these, check the
-results carefully on several tools.
-Once you've confirmed that the additional capability is safe,
-let the maintainer of this
-document know about the safe command or sequence
-that should be added to this list.
-.SH FILES
-.IR /usr/share/groff/ [*/] tmac/an.tmac
-.br
-.I /usr/man/whatis
-.SH NOTES
-By all means include full URLs (or URIs) in the text itself;
-some tools such as
-.BR man2html (1)
-can automatically turn them into hypertext links.
-You can also use the
-.B UR
-and
-.B UE
-macros to identify links to related information.
-If you include URLs, use the full URL
-(e.g.,
-.UR http://www.kernel.org
-.UE )
-to ensure that tools can automatically find the URLs.
-.PP
-Tools processing these files should open the file and examine the first
-nonwhitespace character.
-A period (.) or single quote (\[aq]) at the beginning
-of a line indicates a troff-based file (such as man or mdoc).
-A left angle bracket (<) indicates an SGML/XML-based
-file (such as HTML or Docbook).
-Anything else suggests simple ASCII
-text (e.g., a "catman" result).
-.PP
-Many man pages begin with \fB\[aq]\e"\fP followed by a
-space and a list of characters,
-indicating how the page is to be preprocessed.
-For portability's sake to non-troff translators we recommend
-that you avoid using anything other than
-.BR tbl (1),
-and Linux can detect that automatically.
-However, you might want to include this information so your man page
-can be handled by other (less capable) systems.
-Here are the definitions of the preprocessors invoked by these characters:
-.TP 3
-.B e
-eqn(1)
-.TP
-.B g
-grap(1)
-.TP
-.B p
-pic(1)
-.TP
-.B r
-refer(1)
-.TP
-.B t
-tbl(1)
-.TP
-.B v
-vgrind(1)
-.SH BUGS
-Most of the macros describe formatting (e.g., font type and spacing) instead
-of marking semantic content (e.g., this text is a reference to another page),
-compared to formats like mdoc and DocBook (even HTML has more semantic
-markings).
-This situation makes it harder to vary the
-.B man
-format for different media,
-to make the formatting consistent for a given media, and to automatically
-insert cross-references.
-By sticking to the safe subset described above, it should be easier to
-automate transitioning to a different reference page format in the future.
-.PP
-The Sun macro
-.B TX
-is not implemented.
-.\" .SH AUTHORS
-.\" .IP \[em] 3m
-.\" James Clark (jjc@jclark.com) wrote the implementation of the macro package.
-.\" .IP \[em]
-.\" Rickard E. Faith (faith@cs.unc.edu) wrote the initial version of
-.\" this manual page.
-.\" .IP \[em]
-.\" Jens Schweikhardt (schweikh@noc.fdn.de) wrote the Linux Man-Page Mini-HOWTO
-.\" (which influenced this manual page).
-.\" .IP \[em]
-.\" David A. Wheeler (dwheeler@ida.org) heavily modified this
-.\" manual page, such as adding detailed information on sections and macros.
-.SH SEE ALSO
-.BR apropos (1),
-.BR groff (1),
-.BR lexgrog (1),
-.BR man (1),
-.BR man2html (1),
-.BR whatis (1),
-.BR groff_man (7),
-.BR groff_www (7),
-.BR man\-pages (7),
-.BR mdoc (7)
diff --git a/man7/math_error.7 b/man7/math_error.7
deleted file mode 100644
index bb7c2eaf6..000000000
--- a/man7/math_error.7
+++ /dev/null
@@ -1,246 +0,0 @@
-.\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH math_error 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-math_error \- detecting errors from mathematical functions
-.SH SYNOPSIS
-.nf
-.B #include <math.h>
-.B #include <errno.h>
-.B #include <fenv.h>
-.fi
-.SH DESCRIPTION
-When an error occurs,
-most library functions indicate this fact by returning a special value
-(e.g., \-1 or NULL).
-Because they typically return a floating-point number,
-the mathematical functions declared in
-.I <math.h>
-indicate an error using other mechanisms.
-There are two error-reporting mechanisms:
-the older one sets
-.IR errno ;
-the newer one uses the floating-point exception mechanism (the use of
-.BR feclearexcept (3)
-and
-.BR fetestexcept (3),
-as outlined below)
-described in
-.BR fenv (3).
-.PP
-A portable program that needs to check for an error from a mathematical
-function should set
-.I errno
-to zero, and make the following call
-.PP
-.in +4n
-.EX
-feclearexcept(FE_ALL_EXCEPT);
-.EE
-.in
-.PP
-before calling a mathematical function.
-.PP
-Upon return from the mathematical function, if
-.I errno
-is nonzero, or the following call (see
-.BR fenv (3))
-returns nonzero
-.PP
-.in +4n
-.EX
-fetestexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW |
- FE_UNDERFLOW);
-.EE
-.in
-.PP
-.\" enum
-.\" {
-.\" FE_INVALID = 0x01,
-.\" __FE_DENORM = 0x02,
-.\" FE_DIVBYZERO = 0x04,
-.\" FE_OVERFLOW = 0x08,
-.\" FE_UNDERFLOW = 0x10,
-.\" FE_INEXACT = 0x20
-.\" };
-then an error occurred in the mathematical function.
-.PP
-The error conditions that can occur for mathematical functions
-are described below.
-.SS Domain error
-A
-.I domain error
-occurs when a mathematical function is supplied with an argument whose
-value falls outside the domain for which the function
-is defined (e.g., giving a negative argument to
-.BR log (3)).
-When a domain error occurs,
-math functions commonly return a NaN
-(though some functions return a different value in this case);
-.I errno
-is set to
-.BR EDOM ,
-and an "invalid"
-.RB ( FE_INVALID )
-floating-point exception is raised.
-.SS Pole error
-A
-.I pole error
-occurs when the mathematical result of a function is an exact infinity
-(e.g., the logarithm of 0 is negative infinity).
-When a pole error occurs,
-the function returns the (signed) value
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-or
-.BR HUGE_VALL ,
-depending on whether the function result type is
-.IR double ,
-.IR float ,
-or
-.IR "long double" .
-The sign of the result is that which is mathematically correct for
-the function.
-.I errno
-is set to
-.BR ERANGE ,
-and a "divide-by-zero"
-.RB ( FE_DIVBYZERO )
-floating-point exception is raised.
-.SS Range error
-A
-.I range error
-occurs when the magnitude of the function result means that it
-cannot be represented in the result type of the function.
-The return value of the function depends on whether the range error
-was an overflow or an underflow.
-.PP
-A floating result
-.I overflows
-if the result is finite,
-but is too large to represented in the result type.
-When an overflow occurs,
-the function returns the value
-.BR HUGE_VAL ,
-.BR HUGE_VALF ,
-or
-.BR HUGE_VALL ,
-depending on whether the function result type is
-.IR double ,
-.IR float ,
-or
-.IR "long double" .
-.I errno
-is set to
-.BR ERANGE ,
-and an "overflow"
-.RB ( FE_OVERFLOW )
-floating-point exception is raised.
-.PP
-A floating result
-.I underflows
-if the result is too small to be represented in the result type.
-If an underflow occurs,
-a mathematical function typically returns 0.0
-(C99 says a function shall return "an implementation-defined value
-whose magnitude is no greater than the smallest normalized
-positive number in the specified type").
-.I errno
-may be set to
-.BR ERANGE ,
-and an "underflow"
-.RB ( FE_UNDERFLOW )
-floating-point exception may be raised.
-.PP
-Some functions deliver a range error if the supplied argument value,
-or the correct function result, would be
-.IR subnormal .
-A subnormal value is one that is nonzero,
-but with a magnitude that is so small that
-it can't be presented in normalized form
-(i.e., with a 1 in the most significant bit of the significand).
-The representation of a subnormal number will contain one
-or more leading zeros in the significand.
-.SH NOTES
-The
-.I math_errhandling
-identifier specified by C99 and POSIX.1 is not supported by glibc.
-.\" See CONFORMANCE in the glibc 2.8 (and earlier) source.
-This identifier is supposed to indicate which of the two
-error-notification mechanisms
-.RI ( errno ,
-exceptions retrievable via
-.BR fetestexcept (3))
-is in use.
-The standards require that at least one be in use,
-but permit both to be available.
-The current (glibc 2.8) situation under glibc is messy.
-Most (but not all) functions raise exceptions on errors.
-Some also set
-.IR errno .
-A few functions set
-.IR errno ,
-but don't raise an exception.
-A very few functions do neither.
-See the individual manual pages for details.
-.PP
-To avoid the complexities of using
-.I errno
-and
-.BR fetestexcept (3)
-for error checking,
-it is often advised that one should instead check for bad argument
-values before each call.
-.\" http://www.securecoding.cert.org/confluence/display/seccode/FLP32-C.+Prevent+or+detect+domain+and+range+errors+in+math+functions
-For example, the following code ensures that
-.BR log (3)'s
-argument is not a NaN and is not zero (a pole error) or
-less than zero (a domain error):
-.PP
-.in +4n
-.EX
-double x, r;
-\&
-if (isnan(x) || islessequal(x, 0)) {
- /* Deal with NaN / pole error / domain error */
-}
-\&
-r = log(x);
-.EE
-.in
-.PP
-The discussion on this page does not apply to the complex
-mathematical functions (i.e., those declared by
-.IR <complex.h> ),
-which in general are not required to return errors by C99
-and POSIX.1.
-.PP
-The
-.BR gcc (1)
-.I "\-fno\-math\-errno"
-option causes the executable to employ implementations of some
-mathematical functions that are faster than the standard
-implementations, but do not set
-.I errno
-on error.
-(The
-.BR gcc (1)
-.I "\-ffast\-math"
-option also enables
-.IR "\-fno\-math\-errno" .)
-An error can still be tested for using
-.BR fetestexcept (3).
-.SH SEE ALSO
-.BR gcc (1),
-.BR errno (3),
-.BR fenv (3),
-.BR fpclassify (3),
-.BR INFINITY (3),
-.BR isgreater (3),
-.BR matherr (3),
-.BR nan (3)
-.PP
-.I "info libc"
diff --git a/man7/mount_namespaces.7 b/man7/mount_namespaces.7
deleted file mode 100644
index da34c1902..000000000
--- a/man7/mount_namespaces.7
+++ /dev/null
@@ -1,1371 +0,0 @@
-'\" t
-.\" Copyright (c) 2016, 2019, 2021 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH mount_namespaces 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mount_namespaces \- overview of Linux mount namespaces
-.SH DESCRIPTION
-For an overview of namespaces, see
-.BR namespaces (7).
-.PP
-Mount namespaces provide isolation of the list of mounts seen
-by the processes in each namespace instance.
-Thus, the processes in each of the mount namespace instances
-will see distinct single-directory hierarchies.
-.PP
-The views provided by the
-.IR /proc/ pid /mounts ,
-.IR /proc/ pid /mountinfo ,
-and
-.IR /proc/ pid /mountstats
-files (all described in
-.BR proc (5))
-correspond to the mount namespace in which the process with the PID
-.I pid
-resides.
-(All of the processes that reside in the same mount namespace
-will see the same view in these files.)
-.PP
-A new mount namespace is created using either
-.BR clone (2)
-or
-.BR unshare (2)
-with the
-.B CLONE_NEWNS
-flag.
-When a new mount namespace is created,
-its mount list is initialized as follows:
-.IP \[bu] 3
-If the namespace is created using
-.BR clone (2),
-the mount list of the child's namespace is a copy
-of the mount list in the parent process's mount namespace.
-.IP \[bu]
-If the namespace is created using
-.BR unshare (2),
-the mount list of the new namespace is a copy of
-the mount list in the caller's previous mount namespace.
-.PP
-Subsequent modifications to the mount list
-.RB ( mount (2)
-and
-.BR umount (2))
-in either mount namespace will not (by default) affect the
-mount list seen in the other namespace
-(but see the following discussion of shared subtrees).
-.\"
-.SH SHARED SUBTREES
-After the implementation of mount namespaces was completed,
-experience showed that the isolation that they provided was,
-in some cases, too great.
-For example, in order to make a newly loaded optical disk
-available in all mount namespaces,
-a mount operation was required in each namespace.
-For this use case, and others,
-the shared subtree feature was introduced in Linux 2.6.15.
-This feature allows for automatic, controlled propagation of
-.BR mount (2)
-and
-.BR umount (2)
-.I events
-between namespaces
-(or, more precisely, between the mounts that are members of a
-.I peer group
-that are propagating events to one another).
-.PP
-Each mount is marked (via
-.BR mount (2))
-as having one of the following
-.IR "propagation types" :
-.TP
-.B MS_SHARED
-This mount shares events with members of a peer group.
-.BR mount (2)
-and
-.BR umount (2)
-events immediately under this mount will propagate
-to the other mounts that are members of the peer group.
-.I Propagation
-here means that the same
-.BR mount (2)
-or
-.BR umount (2)
-will automatically occur
-under all of the other mounts in the peer group.
-Conversely,
-.BR mount (2)
-and
-.BR umount (2)
-events that take place under
-peer mounts will propagate to this mount.
-.TP
-.B MS_PRIVATE
-This mount is private; it does not have a peer group.
-.BR mount (2)
-and
-.BR umount (2)
-events do not propagate into or out of this mount.
-.TP
-.B MS_SLAVE
-.BR mount (2)
-and
-.BR umount (2)
-events propagate into this mount from
-a (master) shared peer group.
-.BR mount (2)
-and
-.BR umount (2)
-events under this mount do not propagate to any peer.
-.IP
-Note that a mount can be the slave of another peer group
-while at the same time sharing
-.BR mount (2)
-and
-.BR umount (2)
-events
-with a peer group of which it is a member.
-(More precisely, one peer group can be the slave of another peer group.)
-.TP
-.B MS_UNBINDABLE
-This is like a private mount,
-and in addition this mount can't be bind mounted.
-Attempts to bind mount this mount
-.RB ( mount (2)
-with the
-.B MS_BIND
-flag) will fail.
-.IP
-When a recursive bind mount
-.RB ( mount (2)
-with the
-.B MS_BIND
-and
-.B MS_REC
-flags) is performed on a directory subtree,
-any bind mounts within the subtree are automatically pruned
-(i.e., not replicated)
-when replicating that subtree to produce the target subtree.
-.PP
-For a discussion of the propagation type assigned to a new mount,
-see NOTES.
-.PP
-The propagation type is a per-mount-point setting;
-some mounts may be marked as shared
-(with each shared mount being a member of a distinct peer group),
-while others are private
-(or slaved or unbindable).
-.PP
-Note that a mount's propagation type determines whether
-.BR mount (2)
-and
-.BR umount (2)
-of mounts
-.I immediately under
-the mount are propagated.
-Thus, the propagation type does not affect propagation of events for
-grandchildren and further removed descendant mounts.
-What happens if the mount itself is unmounted is determined by
-the propagation type that is in effect for the
-.I parent
-of the mount.
-.PP
-Members are added to a
-.I peer group
-when a mount is marked as shared and either:
-.IP (a) 5
-the mount is replicated during the creation of a new mount namespace; or
-.IP (b)
-a new bind mount is created from the mount.
-.PP
-In both of these cases, the new mount joins the peer group
-of which the existing mount is a member.
-.PP
-A new peer group is also created when a child mount is created under
-an existing mount that is marked as shared.
-In this case, the new child mount is also marked as shared and
-the resulting peer group consists of all the mounts
-that are replicated under the peers of parent mounts.
-.PP
-A mount ceases to be a member of a peer group when either
-the mount is explicitly unmounted,
-or when the mount is implicitly unmounted because a mount namespace is removed
-(because it has no more member processes).
-.PP
-The propagation type of the mounts in a mount namespace
-can be discovered via the "optional fields" exposed in
-.IR /proc/ pid /mountinfo .
-(See
-.BR proc (5)
-for details of this file.)
-The following tags can appear in the optional fields
-for a record in that file:
-.TP
-.I shared:X
-This mount is shared in peer group
-.IR X .
-Each peer group has a unique ID that is automatically
-generated by the kernel,
-and all mounts in the same peer group will show the same ID.
-(These IDs are assigned starting from the value 1,
-and may be recycled when a peer group ceases to have any members.)
-.TP
-.I master:X
-This mount is a slave to shared peer group
-.IR X .
-.TP
-.IR propagate_from:X " (since Linux 2.6.26)"
-.\" commit 97e7e0f71d6d948c25f11f0a33878d9356d9579e
-This mount is a slave and receives propagation from shared peer group
-.IR X .
-This tag will always appear in conjunction with a
-.I master:X
-tag.
-Here,
-.I X
-is the closest dominant peer group under the process's root directory.
-If
-.I X
-is the immediate master of the mount,
-or if there is no dominant peer group under the same root,
-then only the
-.I master:X
-field is present and not the
-.I propagate_from:X
-field.
-For further details, see below.
-.TP
-.I unbindable
-This is an unbindable mount.
-.PP
-If none of the above tags is present, then this is a private mount.
-.SS MS_SHARED and MS_PRIVATE example
-Suppose that on a terminal in the initial mount namespace,
-we mark one mount as shared and another as private,
-and then view the mounts in
-.IR /proc/self/mountinfo :
-.PP
-.in +4n
-.EX
-sh1# \fBmount \-\-make\-shared /mntS\fP
-sh1# \fBmount \-\-make\-private /mntP\fP
-sh1# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP
-77 61 8:17 / /mntS rw,relatime shared:1
-83 61 8:15 / /mntP rw,relatime
-.EE
-.in
-.PP
-From the
-.I /proc/self/mountinfo
-output, we see that
-.I /mntS
-is a shared mount in peer group 1, and that
-.I /mntP
-has no optional tags, indicating that it is a private mount.
-The first two fields in each record in this file are the unique
-ID for this mount, and the mount ID of the parent mount.
-We can further inspect this file to see that the parent mount of
-.I /mntS
-and
-.I /mntP
-is the root directory,
-.IR / ,
-which is mounted as private:
-.PP
-.in +4n
-.EX
-sh1# \fBcat /proc/self/mountinfo | awk \[aq]$1 == 61\[aq] | sed \[aq]s/ \- .*//\[aq]\fP
-61 0 8:2 / / rw,relatime
-.EE
-.in
-.PP
-On a second terminal,
-we create a new mount namespace where we run a second shell
-and inspect the mounts:
-.PP
-.in +4n
-.EX
-$ \fBPS1=\[aq]sh2# \[aq] sudo unshare \-m \-\-propagation unchanged sh\fP
-sh2# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP
-222 145 8:17 / /mntS rw,relatime shared:1
-225 145 8:15 / /mntP rw,relatime
-.EE
-.in
-.PP
-The new mount namespace received a copy of the initial mount namespace's
-mounts.
-These new mounts maintain the same propagation types,
-but have unique mount IDs.
-(The
-.I \-\-propagation\~unchanged
-option prevents
-.BR unshare (1)
-from marking all mounts as private when creating a new mount namespace,
-.\" Since util-linux 2.27
-which it does by default.)
-.PP
-In the second terminal, we then create submounts under each of
-.I /mntS
-and
-.I /mntP
-and inspect the set-up:
-.PP
-.in +4n
-.EX
-sh2# \fBmkdir /mntS/a\fP
-sh2# \fBmount /dev/sdb6 /mntS/a\fP
-sh2# \fBmkdir /mntP/b\fP
-sh2# \fBmount /dev/sdb7 /mntP/b\fP
-sh2# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP
-222 145 8:17 / /mntS rw,relatime shared:1
-225 145 8:15 / /mntP rw,relatime
-178 222 8:22 / /mntS/a rw,relatime shared:2
-230 225 8:23 / /mntP/b rw,relatime
-.EE
-.in
-.PP
-From the above, it can be seen that
-.I /mntS/a
-was created as shared (inheriting this setting from its parent mount) and
-.I /mntP/b
-was created as a private mount.
-.PP
-Returning to the first terminal and inspecting the set-up,
-we see that the new mount created under the shared mount
-.I /mntS
-propagated to its peer mount (in the initial mount namespace),
-but the new mount created under the private mount
-.I /mntP
-did not propagate:
-.PP
-.in +4n
-.EX
-sh1# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP
-77 61 8:17 / /mntS rw,relatime shared:1
-83 61 8:15 / /mntP rw,relatime
-179 77 8:22 / /mntS/a rw,relatime shared:2
-.EE
-.in
-.\"
-.SS MS_SLAVE example
-Making a mount a slave allows it to receive propagated
-.BR mount (2)
-and
-.BR umount (2)
-events from a master shared peer group,
-while preventing it from propagating events to that master.
-This is useful if we want to (say) receive a mount event when
-an optical disk is mounted in the master shared peer group
-(in another mount namespace),
-but want to prevent
-.BR mount (2)
-and
-.BR umount (2)
-events under the slave mount
-from having side effects in other namespaces.
-.PP
-We can demonstrate the effect of slaving by first marking
-two mounts as shared in the initial mount namespace:
-.PP
-.in +4n
-.EX
-sh1# \fBmount \-\-make\-shared /mntX\fP
-sh1# \fBmount \-\-make\-shared /mntY\fP
-sh1# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP
-132 83 8:23 / /mntX rw,relatime shared:1
-133 83 8:22 / /mntY rw,relatime shared:2
-.EE
-.in
-.PP
-On a second terminal,
-we create a new mount namespace and inspect the mounts:
-.PP
-.in +4n
-.EX
-sh2# \fBunshare \-m \-\-propagation unchanged sh\fP
-sh2# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP
-168 167 8:23 / /mntX rw,relatime shared:1
-169 167 8:22 / /mntY rw,relatime shared:2
-.EE
-.in
-.PP
-In the new mount namespace, we then mark one of the mounts as a slave:
-.PP
-.in +4n
-.EX
-sh2# \fBmount \-\-make\-slave /mntY\fP
-sh2# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP
-168 167 8:23 / /mntX rw,relatime shared:1
-169 167 8:22 / /mntY rw,relatime master:2
-.EE
-.in
-.PP
-From the above output, we see that
-.I /mntY
-is now a slave mount that is receiving propagation events from
-the shared peer group with the ID 2.
-.PP
-Continuing in the new namespace, we create submounts under each of
-.I /mntX
-and
-.IR /mntY :
-.PP
-.in +4n
-.EX
-sh2# \fBmkdir /mntX/a\fP
-sh2# \fBmount /dev/sda3 /mntX/a\fP
-sh2# \fBmkdir /mntY/b\fP
-sh2# \fBmount /dev/sda5 /mntY/b\fP
-.EE
-.in
-.PP
-When we inspect the state of the mounts in the new mount namespace,
-we see that
-.I /mntX/a
-was created as a new shared mount
-(inheriting the "shared" setting from its parent mount) and
-.I /mntY/b
-was created as a private mount:
-.PP
-.in +4n
-.EX
-sh2# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP
-168 167 8:23 / /mntX rw,relatime shared:1
-169 167 8:22 / /mntY rw,relatime master:2
-173 168 8:3 / /mntX/a rw,relatime shared:3
-175 169 8:5 / /mntY/b rw,relatime
-.EE
-.in
-.PP
-Returning to the first terminal (in the initial mount namespace),
-we see that the mount
-.I /mntX/a
-propagated to the peer (the shared
-.IR /mntX ),
-but the mount
-.I /mntY/b
-was not propagated:
-.PP
-.in +4n
-.EX
-sh1# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP
-132 83 8:23 / /mntX rw,relatime shared:1
-133 83 8:22 / /mntY rw,relatime shared:2
-174 132 8:3 / /mntX/a rw,relatime shared:3
-.EE
-.in
-.PP
-Now we create a new mount under
-.I /mntY
-in the first shell:
-.PP
-.in +4n
-.EX
-sh1# \fBmkdir /mntY/c\fP
-sh1# \fBmount /dev/sda1 /mntY/c\fP
-sh1# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP
-132 83 8:23 / /mntX rw,relatime shared:1
-133 83 8:22 / /mntY rw,relatime shared:2
-174 132 8:3 / /mntX/a rw,relatime shared:3
-178 133 8:1 / /mntY/c rw,relatime shared:4
-.EE
-.in
-.PP
-When we examine the mounts in the second mount namespace,
-we see that in this case the new mount has been propagated
-to the slave mount,
-and that the new mount is itself a slave mount (to peer group 4):
-.PP
-.in +4n
-.EX
-sh2# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP
-168 167 8:23 / /mntX rw,relatime shared:1
-169 167 8:22 / /mntY rw,relatime master:2
-173 168 8:3 / /mntX/a rw,relatime shared:3
-175 169 8:5 / /mntY/b rw,relatime
-179 169 8:1 / /mntY/c rw,relatime master:4
-.EE
-.in
-.\"
-.SS MS_UNBINDABLE example
-One of the primary purposes of unbindable mounts is to avoid
-the "mount explosion" problem when repeatedly performing bind mounts
-of a higher-level subtree at a lower-level mount.
-The problem is illustrated by the following shell session.
-.PP
-Suppose we have a system with the following mounts:
-.PP
-.in +4n
-.EX
-# \fBmount | awk \[aq]{print $1, $2, $3}\[aq]\fP
-/dev/sda1 on /
-/dev/sdb6 on /mntX
-/dev/sdb7 on /mntY
-.EE
-.in
-.PP
-Suppose furthermore that we wish to recursively bind mount
-the root directory under several users' home directories.
-We do this for the first user, and inspect the mounts:
-.PP
-.in +4n
-.EX
-# \fBmount \-\-rbind / /home/cecilia/\fP
-# \fBmount | awk \[aq]{print $1, $2, $3}\[aq]\fP
-/dev/sda1 on /
-/dev/sdb6 on /mntX
-/dev/sdb7 on /mntY
-/dev/sda1 on /home/cecilia
-/dev/sdb6 on /home/cecilia/mntX
-/dev/sdb7 on /home/cecilia/mntY
-.EE
-.in
-.PP
-When we repeat this operation for the second user,
-we start to see the explosion problem:
-.PP
-.in +4n
-.EX
-# \fBmount \-\-rbind / /home/henry\fP
-# \fBmount | awk \[aq]{print $1, $2, $3}\[aq]\fP
-/dev/sda1 on /
-/dev/sdb6 on /mntX
-/dev/sdb7 on /mntY
-/dev/sda1 on /home/cecilia
-/dev/sdb6 on /home/cecilia/mntX
-/dev/sdb7 on /home/cecilia/mntY
-/dev/sda1 on /home/henry
-/dev/sdb6 on /home/henry/mntX
-/dev/sdb7 on /home/henry/mntY
-/dev/sda1 on /home/henry/home/cecilia
-/dev/sdb6 on /home/henry/home/cecilia/mntX
-/dev/sdb7 on /home/henry/home/cecilia/mntY
-.EE
-.in
-.PP
-Under
-.IR /home/henry ,
-we have not only recursively added the
-.I /mntX
-and
-.I /mntY
-mounts, but also the recursive mounts of those directories under
-.I /home/cecilia
-that were created in the previous step.
-Upon repeating the step for a third user,
-it becomes obvious that the explosion is exponential in nature:
-.PP
-.in +4n
-.EX
-# \fBmount \-\-rbind / /home/otto\fP
-# \fBmount | awk \[aq]{print $1, $2, $3}\[aq]\fP
-/dev/sda1 on /
-/dev/sdb6 on /mntX
-/dev/sdb7 on /mntY
-/dev/sda1 on /home/cecilia
-/dev/sdb6 on /home/cecilia/mntX
-/dev/sdb7 on /home/cecilia/mntY
-/dev/sda1 on /home/henry
-/dev/sdb6 on /home/henry/mntX
-/dev/sdb7 on /home/henry/mntY
-/dev/sda1 on /home/henry/home/cecilia
-/dev/sdb6 on /home/henry/home/cecilia/mntX
-/dev/sdb7 on /home/henry/home/cecilia/mntY
-/dev/sda1 on /home/otto
-/dev/sdb6 on /home/otto/mntX
-/dev/sdb7 on /home/otto/mntY
-/dev/sda1 on /home/otto/home/cecilia
-/dev/sdb6 on /home/otto/home/cecilia/mntX
-/dev/sdb7 on /home/otto/home/cecilia/mntY
-/dev/sda1 on /home/otto/home/henry
-/dev/sdb6 on /home/otto/home/henry/mntX
-/dev/sdb7 on /home/otto/home/henry/mntY
-/dev/sda1 on /home/otto/home/henry/home/cecilia
-/dev/sdb6 on /home/otto/home/henry/home/cecilia/mntX
-/dev/sdb7 on /home/otto/home/henry/home/cecilia/mntY
-.EE
-.in
-.PP
-The mount explosion problem in the above scenario can be avoided
-by making each of the new mounts unbindable.
-The effect of doing this is that recursive mounts of the root
-directory will not replicate the unbindable mounts.
-We make such a mount for the first user:
-.PP
-.in +4n
-.EX
-# \fBmount \-\-rbind \-\-make\-unbindable / /home/cecilia\fP
-.EE
-.in
-.PP
-Before going further, we show that unbindable mounts are indeed unbindable:
-.PP
-.in +4n
-.EX
-# \fBmkdir /mntZ\fP
-# \fBmount \-\-bind /home/cecilia /mntZ\fP
-mount: wrong fs type, bad option, bad superblock on /home/cecilia,
- missing codepage or helper program, or other error
-\&
- In some cases useful info is found in syslog \- try
- dmesg | tail or so.
-.EE
-.in
-.PP
-Now we create unbindable recursive bind mounts for the other two users:
-.PP
-.in +4n
-.EX
-# \fBmount \-\-rbind \-\-make\-unbindable / /home/henry\fP
-# \fBmount \-\-rbind \-\-make\-unbindable / /home/otto\fP
-.EE
-.in
-.PP
-Upon examining the list of mounts,
-we see there has been no explosion of mounts,
-because the unbindable mounts were not replicated
-under each user's directory:
-.PP
-.in +4n
-.EX
-# \fBmount | awk \[aq]{print $1, $2, $3}\[aq]\fP
-/dev/sda1 on /
-/dev/sdb6 on /mntX
-/dev/sdb7 on /mntY
-/dev/sda1 on /home/cecilia
-/dev/sdb6 on /home/cecilia/mntX
-/dev/sdb7 on /home/cecilia/mntY
-/dev/sda1 on /home/henry
-/dev/sdb6 on /home/henry/mntX
-/dev/sdb7 on /home/henry/mntY
-/dev/sda1 on /home/otto
-/dev/sdb6 on /home/otto/mntX
-/dev/sdb7 on /home/otto/mntY
-.EE
-.in
-.\"
-.SS Propagation type transitions
-The following table shows the effect that applying a new propagation type
-(i.e.,
-.IR mount\~\-\-make\-xxxx )
-has on the existing propagation type of a mount.
-The rows correspond to existing propagation types,
-and the columns are the new propagation settings.
-For reasons of space, "private" is abbreviated as "priv" and
-"unbindable" as "unbind".
-.TS
-lb2 lb2 lb2 lb2 lb1
-lb | l l l l l.
- make-shared make-slave make-priv make-unbind
-_
-shared shared slave/priv [1] priv unbind
-slave slave+shared slave [2] priv unbind
-slave+shared slave+shared slave priv unbind
-private shared priv [2] priv unbind
-unbindable shared unbind [2] priv unbind
-.TE
-.sp 1
-Note the following details to the table:
-.IP [1] 4
-If a shared mount is the only mount in its peer group,
-making it a slave automatically makes it private.
-.IP [2]
-Slaving a nonshared mount has no effect on the mount.
-.\"
-.SS Bind (MS_BIND) semantics
-Suppose that the following command is performed:
-.PP
-.in +4n
-.EX
-mount \-\-bind A/a B/b
-.EE
-.in
-.PP
-Here,
-.I A
-is the source mount,
-.I B
-is the destination mount,
-.I a
-is a subdirectory path under the mount point
-.IR A ,
-and
-.I b
-is a subdirectory path under the mount point
-.IR B .
-The propagation type of the resulting mount,
-.IR B/b ,
-depends on the propagation types of the mounts
-.I A
-and
-.IR B ,
-and is summarized in the following table.
-.PP
-.TS
-lb2 lb1 lb2 lb2 lb2 lb0
-lb2 lb1 lb2 lb2 lb2 lb0
-lb lb | l l l l l.
- source(A)
- shared private slave unbind
-_
-dest(B) shared shared shared slave+shared invalid
- nonshared shared private slave invalid
-.TE
-.sp 1
-Note that a recursive bind of a subtree follows the same semantics
-as for a bind operation on each mount in the subtree.
-(Unbindable mounts are automatically pruned at the target mount point.)
-.PP
-For further details, see
-.I Documentation/filesystems/sharedsubtree.rst
-in the kernel source tree.
-.\"
-.SS Move (MS_MOVE) semantics
-Suppose that the following command is performed:
-.PP
-.in +4n
-.EX
-mount \-\-move A B/b
-.EE
-.in
-.PP
-Here,
-.I A
-is the source mount,
-.I B
-is the destination mount, and
-.I b
-is a subdirectory path under the mount point
-.IR B .
-The propagation type of the resulting mount,
-.IR B/b ,
-depends on the propagation types of the mounts
-.I A
-and
-.IR B ,
-and is summarized in the following table.
-.PP
-.TS
-lb2 lb1 lb2 lb2 lb2 lb0
-lb2 lb1 lb2 lb2 lb2 lb0
-lb lb | l l l l l.
- source(A)
- shared private slave unbind
-_
-dest(B) shared shared shared slave+shared invalid
- nonshared shared private slave unbindable
-.TE
-.sp 1
-Note: moving a mount that resides under a shared mount is invalid.
-.PP
-For further details, see
-.I Documentation/filesystems/sharedsubtree.rst
-in the kernel source tree.
-.\"
-.SS Mount semantics
-Suppose that we use the following command to create a mount:
-.PP
-.in +4n
-.EX
-mount device B/b
-.EE
-.in
-.PP
-Here,
-.I B
-is the destination mount, and
-.I b
-is a subdirectory path under the mount point
-.IR B .
-The propagation type of the resulting mount,
-.IR B/b ,
-follows the same rules as for a bind mount,
-where the propagation type of the source mount
-is considered always to be private.
-.\"
-.SS Unmount semantics
-Suppose that we use the following command to tear down a mount:
-.PP
-.in +4n
-.EX
-umount A
-.EE
-.in
-.PP
-Here,
-.I A
-is a mount on
-.IR B/b ,
-where
-.I B
-is the parent mount and
-.I b
-is a subdirectory path under the mount point
-.IR B .
-If
-.B B
-is shared, then all most-recently-mounted mounts at
-.I b
-on mounts that receive propagation from mount
-.I B
-and do not have submounts under them are unmounted.
-.\"
-.SS The /proc/ pid /mountinfo "propagate_from" tag
-The
-.I propagate_from:X
-tag is shown in the optional fields of a
-.IR /proc/ pid /mountinfo
-record in cases where a process can't see a slave's immediate master
-(i.e., the pathname of the master is not reachable from
-the filesystem root directory)
-and so cannot determine the
-chain of propagation between the mounts it can see.
-.PP
-In the following example, we first create a two-link master-slave chain
-between the mounts
-.IR /mnt ,
-.IR /tmp/etc ,
-and
-.IR /mnt/tmp/etc .
-Then the
-.BR chroot (1)
-command is used to make the
-.I /tmp/etc
-mount point unreachable from the root directory,
-creating a situation where the master of
-.I /mnt/tmp/etc
-is not reachable from the (new) root directory of the process.
-.PP
-First, we bind mount the root directory onto
-.I /mnt
-and then bind mount
-.I /proc
-at
-.I /mnt/proc
-so that after the later
-.BR chroot (1)
-the
-.BR proc (5)
-filesystem remains visible at the correct location
-in the chroot-ed environment.
-.PP
-.in +4n
-.EX
-# \fBmkdir \-p /mnt/proc\fP
-# \fBmount \-\-bind / /mnt\fP
-# \fBmount \-\-bind /proc /mnt/proc\fP
-.EE
-.in
-.PP
-Next, we ensure that the
-.I /mnt
-mount is a shared mount in a new peer group (with no peers):
-.PP
-.in +4n
-.EX
-# \fBmount \-\-make\-private /mnt\fP # Isolate from any previous peer group
-# \fBmount \-\-make\-shared /mnt\fP
-# \fBcat /proc/self/mountinfo | grep \[aq]/mnt\[aq] | sed \[aq]s/ \- .*//\[aq]\fP
-239 61 8:2 / /mnt ... shared:102
-248 239 0:4 / /mnt/proc ... shared:5
-.EE
-.in
-.PP
-Next, we bind mount
-.I /mnt/etc
-onto
-.IR /tmp/etc :
-.PP
-.in +4n
-.EX
-# \fBmkdir \-p /tmp/etc\fP
-# \fBmount \-\-bind /mnt/etc /tmp/etc\fP
-# \fBcat /proc/self/mountinfo | egrep \[aq]/mnt|/tmp/\[aq] | sed \[aq]s/ \- .*//\[aq]\fP
-239 61 8:2 / /mnt ... shared:102
-248 239 0:4 / /mnt/proc ... shared:5
-267 40 8:2 /etc /tmp/etc ... shared:102
-.EE
-.in
-.PP
-Initially, these two mounts are in the same peer group,
-but we then make the
-.I /tmp/etc
-a slave of
-.IR /mnt/etc ,
-and then make
-.I /tmp/etc
-shared as well,
-so that it can propagate events to the next slave in the chain:
-.PP
-.in +4n
-.EX
-# \fBmount \-\-make\-slave /tmp/etc\fP
-# \fBmount \-\-make\-shared /tmp/etc\fP
-# \fBcat /proc/self/mountinfo | egrep \[aq]/mnt|/tmp/\[aq] | sed \[aq]s/ \- .*//\[aq]\fP
-239 61 8:2 / /mnt ... shared:102
-248 239 0:4 / /mnt/proc ... shared:5
-267 40 8:2 /etc /tmp/etc ... shared:105 master:102
-.EE
-.in
-.PP
-Then we bind mount
-.I /tmp/etc
-onto
-.IR /mnt/tmp/etc .
-Again, the two mounts are initially in the same peer group,
-but we then make
-.I /mnt/tmp/etc
-a slave of
-.IR /tmp/etc :
-.PP
-.in +4n
-.EX
-# \fBmkdir \-p /mnt/tmp/etc\fP
-# \fBmount \-\-bind /tmp/etc /mnt/tmp/etc\fP
-# \fBmount \-\-make\-slave /mnt/tmp/etc\fP
-# \fBcat /proc/self/mountinfo | egrep \[aq]/mnt|/tmp/\[aq] | sed \[aq]s/ \- .*//\[aq]\fP
-239 61 8:2 / /mnt ... shared:102
-248 239 0:4 / /mnt/proc ... shared:5
-267 40 8:2 /etc /tmp/etc ... shared:105 master:102
-273 239 8:2 /etc /mnt/tmp/etc ... master:105
-.EE
-.in
-.PP
-From the above, we see that
-.I /mnt
-is the master of the slave
-.IR /tmp/etc ,
-which in turn is the master of the slave
-.IR /mnt/tmp/etc .
-.PP
-We then
-.BR chroot (1)
-to the
-.I /mnt
-directory, which renders the mount with ID 267 unreachable
-from the (new) root directory:
-.PP
-.in +4n
-.EX
-# \fBchroot /mnt\fP
-.EE
-.in
-.PP
-When we examine the state of the mounts inside the chroot-ed environment,
-we see the following:
-.PP
-.in +4n
-.EX
-# \fBcat /proc/self/mountinfo | sed \[aq]s/ \- .*//\[aq]\fP
-239 61 8:2 / / ... shared:102
-248 239 0:4 / /proc ... shared:5
-273 239 8:2 /etc /tmp/etc ... master:105 propagate_from:102
-.EE
-.in
-.PP
-Above, we see that the mount with ID 273
-is a slave whose master is the peer group 105.
-The mount point for that master is unreachable, and so a
-.I propagate_from
-tag is displayed, indicating that the closest dominant peer group
-(i.e., the nearest reachable mount in the slave chain)
-is the peer group with the ID 102 (corresponding to the
-.I /mnt
-mount point before the
-.BR chroot (1)
-was performed).
-.\"
-.SH STANDARDS
-Linux.
-.SH HISTORY
-Linux 2.4.19.
-.\"
-.SH NOTES
-The propagation type assigned to a new mount depends
-on the propagation type of the parent mount.
-If the mount has a parent (i.e., it is a non-root mount
-point) and the propagation type of the parent is
-.BR MS_SHARED ,
-then the propagation type of the new mount is also
-.BR MS_SHARED .
-Otherwise, the propagation type of the new mount is
-.BR MS_PRIVATE .
-.PP
-Notwithstanding the fact that the default propagation type
-for new mount is in many cases
-.BR MS_PRIVATE ,
-.B MS_SHARED
-is typically more useful.
-For this reason,
-.BR systemd (1)
-automatically remounts all mounts as
-.B MS_SHARED
-on system startup.
-Thus, on most modern systems, the default propagation type is in practice
-.BR MS_SHARED .
-.PP
-Since, when one uses
-.BR unshare (1)
-to create a mount namespace,
-the goal is commonly to provide full isolation of the mounts
-in the new namespace,
-.BR unshare (1)
-(since
-.I util\-linux
-2.27) in turn reverses the step performed by
-.BR systemd (1),
-by making all mounts private in the new namespace.
-That is,
-.BR unshare (1)
-performs the equivalent of the following in the new mount namespace:
-.PP
-.in +4n
-.EX
-mount \-\-make\-rprivate /
-.EE
-.in
-.PP
-To prevent this, one can use the
-.I \-\-propagation\~unchanged
-option to
-.BR unshare (1).
-.PP
-An application that creates a new mount namespace directly using
-.BR clone (2)
-or
-.BR unshare (2)
-may desire to prevent propagation of mount events to other mount namespaces
-(as is done by
-.BR unshare (1)).
-This can be done by changing the propagation type of
-mounts in the new namespace to either
-.B MS_SLAVE
-or
-.BR MS_PRIVATE ,
-using a call such as the following:
-.PP
-.in +4n
-.EX
-mount(NULL, "/", MS_SLAVE | MS_REC, NULL);
-.EE
-.in
-.PP
-For a discussion of propagation types when moving mounts
-.RB ( MS_MOVE )
-and creating bind mounts
-.RB ( MS_BIND ),
-see
-.IR Documentation/filesystems/sharedsubtree.rst .
-.\"
-.\" ============================================================
-.\"
-.SS Restrictions on mount namespaces
-Note the following points with respect to mount namespaces:
-.IP [1] 4
-Each mount namespace has an owner user namespace.
-As explained above, when a new mount namespace is created,
-its mount list is initialized as a copy of the mount list
-of another mount namespace.
-If the new namespace and the namespace from which the mount list
-was copied are owned by different user namespaces,
-then the new mount namespace is considered
-.IR "less privileged" .
-.IP [2]
-When creating a less privileged mount namespace,
-shared mounts are reduced to slave mounts.
-This ensures that mappings performed in less
-privileged mount namespaces will not propagate to more privileged
-mount namespaces.
-.IP [3]
-Mounts that come as a single unit from a more privileged mount namespace are
-locked together and may not be separated in a less privileged mount
-namespace.
-(The
-.BR unshare (2)
-.B CLONE_NEWNS
-operation brings across all of the mounts from the original
-mount namespace as a single unit,
-and recursive mounts that propagate between
-mount namespaces propagate as a single unit.)
-.IP
-In this context, "may not be separated" means that the mounts
-are locked so that they may not be individually unmounted.
-Consider the following example:
-.IP
-.in +4n
-.EX
-$ \fBsudo sh\fP
-# \fBmount \-\-bind /dev/null /etc/shadow\fP
-# \fBcat /etc/shadow\fP # Produces no output
-.EE
-.in
-.IP
-The above steps, performed in a more privileged mount namespace,
-have created a bind mount that
-obscures the contents of the shadow password file,
-.IR /etc/shadow .
-For security reasons, it should not be possible to
-.BR umount (2)
-that mount in a less privileged mount namespace,
-since that would reveal the contents of
-.IR /etc/shadow .
-.IP
-Suppose we now create a new mount namespace
-owned by a new user namespace.
-The new mount namespace will inherit copies of all of the mounts
-from the previous mount namespace.
-However, those mounts will be locked because the new mount namespace
-is less privileged.
-Consequently, an attempt to
-.BR umount (2)
-the mount fails as show
-in the following step:
-.IP
-.in +4n
-.EX
-# \fBunshare \-\-user \-\-map\-root\-user \-\-mount \e\fP
- \fBstrace \-o /tmp/log \e\fP
- \fBumount /mnt/dir\fP
-umount: /etc/shadow: not mounted.
-# \fBgrep \[aq]\[ha]umount\[aq] /tmp/log\fP
-umount2("/etc/shadow", 0) = \-1 EINVAL (Invalid argument)
-.EE
-.in
-.IP
-The error message from
-.BR mount (8)
-is a little confusing, but the
-.BR strace (1)
-output reveals that the underlying
-.BR umount2 (2)
-system call failed with the error
-.BR EINVAL ,
-which is the error that the kernel returns to indicate that
-the mount is locked.
-.IP
-Note, however, that it is possible to stack (and unstack) a
-mount on top of one of the inherited locked mounts in a
-less privileged mount namespace:
-.IP
-.in +4n
-.EX
-# \fBecho \[aq]aaaaa\[aq] > /tmp/a\fP # File to mount onto /etc/shadow
-# \fBunshare \-\-user \-\-map\-root\-user \-\-mount \e\fP
- \fBsh \-c \[aq]mount \-\-bind /tmp/a /etc/shadow; cat /etc/shadow\[aq]\fP
-aaaaa
-# \fBumount /etc/shadow\fP
-.EE
-.in
-.IP
-The final
-.BR umount (8)
-command above, which is performed in the initial mount namespace,
-makes the original
-.I /etc/shadow
-file once more visible in that namespace.
-.IP [4]
-Following on from point [3],
-note that it is possible to
-.BR umount (2)
-an entire subtree of mounts that
-propagated as a unit into a less privileged mount namespace,
-as illustrated in the following example.
-.IP
-First, we create new user and mount namespaces using
-.BR unshare (1).
-In the new mount namespace,
-the propagation type of all mounts is set to private.
-We then create a shared bind mount at
-.IR /mnt ,
-and a small hierarchy of mounts underneath that mount.
-.IP
-.in +4n
-.EX
-$ \fBPS1=\[aq]ns1# \[aq] sudo unshare \-\-user \-\-map\-root\-user \e\fP
- \fB\-\-mount \-\-propagation private bash\fP
-ns1# \fBecho $$\fP # We need the PID of this shell later
-778501
-ns1# \fBmount \-\-make\-shared \-\-bind /mnt /mnt\fP
-ns1# \fBmkdir /mnt/x\fP
-ns1# \fBmount \-\-make\-private \-t tmpfs none /mnt/x\fP
-ns1# \fBmkdir /mnt/x/y\fP
-ns1# \fBmount \-\-make\-private \-t tmpfs none /mnt/x/y\fP
-ns1# \fBgrep /mnt /proc/self/mountinfo | sed \[aq]s/ \- .*//\[aq]\fP
-986 83 8:5 /mnt /mnt rw,relatime shared:344
-989 986 0:56 / /mnt/x rw,relatime
-990 989 0:57 / /mnt/x/y rw,relatime
-.EE
-.in
-.IP
-Continuing in the same shell session,
-we then create a second shell in a new user namespace and a new
-(less privileged) mount namespace and
-check the state of the propagated mounts rooted at
-.IR /mnt .
-.IP
-.in +4n
-.EX
-ns1# \fBPS1=\[aq]ns2# \[aq] unshare \-\-user \-\-map\-root\-user \e\fP
- \fB\-\-mount \-\-propagation unchanged bash\fP
-ns2# \fBgrep /mnt /proc/self/mountinfo | sed \[aq]s/ \- .*//\[aq]\fP
-1239 1204 8:5 /mnt /mnt rw,relatime master:344
-1240 1239 0:56 / /mnt/x rw,relatime
-1241 1240 0:57 / /mnt/x/y rw,relatime
-.EE
-.in
-.IP
-Of note in the above output is that the propagation type of the mount
-.I /mnt
-has been reduced to slave, as explained in point [2].
-This means that submount events will propagate from the master
-.I /mnt
-in "ns1", but propagation will not occur in the opposite direction.
-.IP
-From a separate terminal window, we then use
-.BR nsenter (1)
-to enter the mount and user namespaces corresponding to "ns1".
-In that terminal window, we then recursively bind mount
-.I /mnt/x
-at the location
-.IR /mnt/ppp .
-.IP
-.in +4n
-.EX
-$ \fBPS1=\[aq]ns3# \[aq] sudo nsenter \-t 778501 \-\-user \-\-mount\fP
-ns3# \fBmount \-\-rbind \-\-make\-private /mnt/x /mnt/ppp\fP
-ns3# \fBgrep /mnt /proc/self/mountinfo | sed \[aq]s/ \- .*//\[aq]\fP
-986 83 8:5 /mnt /mnt rw,relatime shared:344
-989 986 0:56 / /mnt/x rw,relatime
-990 989 0:57 / /mnt/x/y rw,relatime
-1242 986 0:56 / /mnt/ppp rw,relatime
-1243 1242 0:57 / /mnt/ppp/y rw,relatime shared:518
-.EE
-.in
-.IP
-Because the propagation type of the parent mount,
-.IR /mnt ,
-was shared, the recursive bind mount propagated a small subtree of
-mounts under the slave mount
-.I /mnt
-into "ns2",
-as can be verified by executing the following command in that shell session:
-.IP
-.in +4n
-.EX
-ns2# \fBgrep /mnt /proc/self/mountinfo | sed \[aq]s/ \- .*//\[aq]\fP
-1239 1204 8:5 /mnt /mnt rw,relatime master:344
-1240 1239 0:56 / /mnt/x rw,relatime
-1241 1240 0:57 / /mnt/x/y rw,relatime
-1244 1239 0:56 / /mnt/ppp rw,relatime
-1245 1244 0:57 / /mnt/ppp/y rw,relatime master:518
-.EE
-.in
-.IP
-While it is not possible to
-.BR umount (2)
-a part of the propagated subtree
-.RI ( /mnt/ppp/y )
-in "ns2",
-it is possible to
-.BR umount (2)
-the entire subtree,
-as shown by the following commands:
-.IP
-.in +4n
-.EX
-ns2# \fBumount /mnt/ppp/y\fP
-umount: /mnt/ppp/y: not mounted.
-ns2# \fBumount \-l /mnt/ppp | sed \[aq]s/ \- .*//\[aq]\fP # Succeeds...
-ns2# \fBgrep /mnt /proc/self/mountinfo\fP
-1239 1204 8:5 /mnt /mnt rw,relatime master:344
-1240 1239 0:56 / /mnt/x rw,relatime
-1241 1240 0:57 / /mnt/x/y rw,relatime
-.EE
-.in
-.IP [5]
-The
-.BR mount (2)
-flags
-.BR MS_RDONLY ,
-.BR MS_NOSUID ,
-.BR MS_NOEXEC ,
-and the "atime" flags
-.RB ( MS_NOATIME ,
-.BR MS_NODIRATIME ,
-.BR MS_RELATIME )
-settings become locked
-.\" commit 9566d6742852c527bf5af38af5cbb878dad75705
-.\" Author: Eric W. Biederman <ebiederm@xmission.com>
-.\" Date: Mon Jul 28 17:26:07 2014 -0700
-.\"
-.\" mnt: Correct permission checks in do_remount
-.\"
-when propagated from a more privileged to
-a less privileged mount namespace,
-and may not be changed in the less privileged mount namespace.
-.IP
-This point is illustrated in the following example where,
-in a more privileged mount namespace,
-we create a bind mount that is marked as read-only.
-For security reasons,
-it should not be possible to make the mount writable in
-a less privileged mount namespace, and indeed the kernel prevents this:
-.IP
-.in +4n
-.EX
-$ \fBsudo mkdir /mnt/dir\fP
-$ \fBsudo mount \-\-bind \-o ro /some/path /mnt/dir\fP
-$ \fBsudo unshare \-\-user \-\-map\-root\-user \-\-mount \e\fP
- \fBmount \-o remount,rw /mnt/dir\fP
-mount: /mnt/dir: permission denied.
-.EE
-.in
-.IP [6]
-.\" (As of 3.18-rc1 (in Al Viro's 2014-08-30 vfs.git#for-next tree))
-A file or directory that is a mount point in one namespace that is not
-a mount point in another namespace, may be renamed, unlinked, or removed
-.RB ( rmdir (2))
-in the mount namespace in which it is not a mount point
-(subject to the usual permission checks).
-Consequently, the mount point is removed in the mount namespace
-where it was a mount point.
-.IP
-Previously (before Linux 3.18),
-.\" mtk: The change was in Linux 3.18, I think, with this commit:
-.\" commit 8ed936b5671bfb33d89bc60bdcc7cf0470ba52fe
-.\" Author: Eric W. Biederman <ebiederman@twitter.com>
-.\" Date: Tue Oct 1 18:33:48 2013 -0700
-.\"
-.\" vfs: Lazily remove mounts on unlinked files and directories.
-attempting to unlink, rename, or remove a file or directory
-that was a mount point in another mount namespace would result in the error
-.BR EBUSY .
-That behavior had technical problems of enforcement (e.g., for NFS)
-and permitted denial-of-service attacks against more privileged users
-(i.e., preventing individual files from being updated
-by bind mounting on top of them).
-.SH EXAMPLES
-See
-.BR pivot_root (2).
-.SH SEE ALSO
-.BR unshare (1),
-.BR clone (2),
-.BR mount (2),
-.BR mount_setattr (2),
-.BR pivot_root (2),
-.BR setns (2),
-.BR umount (2),
-.BR unshare (2),
-.BR proc (5),
-.BR namespaces (7),
-.BR user_namespaces (7),
-.BR findmnt (8),
-.BR mount (8),
-.BR pam_namespace (8),
-.BR pivot_root (8),
-.BR umount (8)
-.PP
-.I Documentation/filesystems/sharedsubtree.rst
-in the kernel source tree.
diff --git a/man7/mq_overview.7 b/man7/mq_overview.7
deleted file mode 100644
index 0330c4828..000000000
--- a/man7/mq_overview.7
+++ /dev/null
@@ -1,389 +0,0 @@
-'\" t
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH mq_overview 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-mq_overview \- overview of POSIX message queues
-.SH DESCRIPTION
-POSIX message queues allow processes to exchange data in
-the form of messages.
-This API is distinct from that provided by System V message queues
-.RB ( msgget (2),
-.BR msgsnd (2),
-.BR msgrcv (2),
-etc.), but provides similar functionality.
-.PP
-Message queues are created and opened using
-.BR mq_open (3);
-this function returns a
-.I message queue descriptor
-.RI ( mqd_t ),
-which is used to refer to the open message queue in later calls.
-Each message queue is identified by a name of the form
-.IR /somename ;
-that is, a null-terminated string of up to
-.B NAME_MAX
-(i.e., 255) characters consisting of an initial slash,
-followed by one or more characters, none of which are slashes.
-Two processes can operate on the same queue by passing the same name to
-.BR mq_open (3).
-.PP
-Messages are transferred to and from a queue using
-.BR mq_send (3)
-and
-.BR mq_receive (3).
-When a process has finished using the queue, it closes it using
-.BR mq_close (3),
-and when the queue is no longer required, it can be deleted using
-.BR mq_unlink (3).
-Queue attributes can be retrieved and (in some cases) modified using
-.BR mq_getattr (3)
-and
-.BR mq_setattr (3).
-A process can request asynchronous notification
-of the arrival of a message on a previously empty queue using
-.BR mq_notify (3).
-.PP
-A message queue descriptor is a reference to an
-.I "open message queue description"
-(see
-.BR open (2)).
-After a
-.BR fork (2),
-a child inherits copies of its parent's message queue descriptors,
-and these descriptors refer to the same open message queue descriptions
-as the corresponding message queue descriptors in the parent.
-Corresponding message queue descriptors in the two processes share the flags
-.RI ( mq_flags )
-that are associated with the open message queue description.
-.PP
-Each message has an associated
-.IR priority ,
-and messages are always delivered to the receiving process
-highest priority first.
-Message priorities range from 0 (low) to
-.I sysconf(_SC_MQ_PRIO_MAX)\ \-\ 1
-(high).
-On Linux,
-.I sysconf(_SC_MQ_PRIO_MAX)
-returns 32768, but POSIX.1 requires only that
-an implementation support at least priorities in the range 0 to 31;
-some implementations provide only this range.
-.PP
-The remainder of this section describes some specific details
-of the Linux implementation of POSIX message queues.
-.SS Library interfaces and system calls
-In most cases the
-.BR mq_* ()
-library interfaces listed above are implemented
-on top of underlying system calls of the same name.
-Deviations from this scheme are indicated in the following table:
-.RS
-.TS
-lB lB
-l l.
-Library interface System call
-mq_close(3) close(2)
-mq_getattr(3) mq_getsetattr(2)
-mq_notify(3) mq_notify(2)
-mq_open(3) mq_open(2)
-mq_receive(3) mq_timedreceive(2)
-mq_send(3) mq_timedsend(2)
-mq_setattr(3) mq_getsetattr(2)
-mq_timedreceive(3) mq_timedreceive(2)
-mq_timedsend(3) mq_timedsend(2)
-mq_unlink(3) mq_unlink(2)
-.TE
-.RE
-.SS Versions
-POSIX message queues have been supported since Linux 2.6.6.
-glibc support has been provided since glibc 2.3.4.
-.SS Kernel configuration
-Support for POSIX message queues is configurable via the
-.B CONFIG_POSIX_MQUEUE
-kernel configuration option.
-This option is enabled by default.
-.SS Persistence
-POSIX message queues have kernel persistence:
-if not removed by
-.BR mq_unlink (3),
-a message queue will exist until the system is shut down.
-.SS Linking
-Programs using the POSIX message queue API must be compiled with
-.I cc \-lrt
-to link against the real-time library,
-.IR librt .
-.SS /proc interfaces
-The following interfaces can be used to limit the amount of
-kernel memory consumed by POSIX message queues and to set
-the default attributes for new message queues:
-.TP
-.IR /proc/sys/fs/mqueue/msg_default " (since Linux 3.5)"
-This file defines the value used for a new queue's
-.I mq_maxmsg
-setting when the queue is created with a call to
-.BR mq_open (3)
-where
-.I attr
-is specified as NULL.
-The default value for this file is 10.
-The minimum and maximum are as for
-.IR /proc/sys/fs/mqueue/msg_max .
-A new queue's default
-.I mq_maxmsg
-value will be the smaller of
-.I msg_default
-and
-.IR msg_max .
-Before Linux 2.6.28, the default
-.I mq_maxmsg
-was 10;
-from Linux 2.6.28 to Linux 3.4, the default was the value defined for the
-.I msg_max
-limit.
-.TP
-.I /proc/sys/fs/mqueue/msg_max
-This file can be used to view and change the ceiling value for the
-maximum number of messages in a queue.
-This value acts as a ceiling on the
-.I attr\->mq_maxmsg
-argument given to
-.BR mq_open (3).
-The default value for
-.I msg_max
-is 10.
-The minimum value is 1 (10 before Linux 2.6.28).
-The upper limit is
-.BR HARD_MSGMAX .
-The
-.I msg_max
-limit is ignored for privileged processes
-.RB ( CAP_SYS_RESOURCE ),
-but the
-.B HARD_MSGMAX
-ceiling is nevertheless imposed.
-.IP
-The definition of
-.B HARD_MSGMAX
-has changed across kernel versions:
-.RS
-.IP \[bu] 3
-Up to Linux 2.6.32:
-.I 131072\~/\~sizeof(void\~*)
-.IP \[bu]
-Linux 2.6.33 to Linux 3.4:
-.I (32768\~*\~sizeof(void\~*) / 4)
-.IP \[bu]
-Since Linux 3.5:
-.\" commit 5b5c4d1a1440e94994c73dddbad7be0676cd8b9a
-65,536
-.RE
-.TP
-.IR /proc/sys/fs/mqueue/msgsize_default " (since Linux 3.5)"
-This file defines the value used for a new queue's
-.I mq_msgsize
-setting when the queue is created with a call to
-.BR mq_open (3)
-where
-.I attr
-is specified as NULL.
-The default value for this file is 8192 (bytes).
-The minimum and maximum are as for
-.IR /proc/sys/fs/mqueue/msgsize_max .
-If
-.I msgsize_default
-exceeds
-.IR msgsize_max ,
-a new queue's default
-.I mq_msgsize
-value is capped to the
-.I msgsize_max
-limit.
-Before Linux 2.6.28, the default
-.I mq_msgsize
-was 8192;
-from Linux 2.6.28 to Linux 3.4, the default was the value defined for the
-.I msgsize_max
-limit.
-.TP
-.I /proc/sys/fs/mqueue/msgsize_max
-This file can be used to view and change the ceiling on the
-maximum message size.
-This value acts as a ceiling on the
-.I attr\->mq_msgsize
-argument given to
-.BR mq_open (3).
-The default value for
-.I msgsize_max
-is 8192 bytes.
-The minimum value is 128 (8192 before Linux 2.6.28).
-The upper limit for
-.I msgsize_max
-has varied across kernel versions:
-.RS
-.IP \[bu] 3
-Before Linux 2.6.28, the upper limit is
-.BR INT_MAX .
-.IP \[bu]
-From Linux 2.6.28 to Linux 3.4, the limit is 1,048,576.
-.IP \[bu]
-Since Linux 3.5, the limit is 16,777,216
-.RB ( HARD_MSGSIZEMAX ).
-.RE
-.IP
-The
-.I msgsize_max
-limit is ignored for privileged process
-.RB ( CAP_SYS_RESOURCE ),
-but, since Linux 3.5, the
-.B HARD_MSGSIZEMAX
-ceiling is enforced for privileged processes.
-.TP
-.I /proc/sys/fs/mqueue/queues_max
-This file can be used to view and change the system-wide limit on the
-number of message queues that can be created.
-The default value for
-.I queues_max
-is 256.
-No ceiling is imposed on the
-.I queues_max
-limit; privileged processes
-.RB ( CAP_SYS_RESOURCE )
-can exceed the limit (but see BUGS).
-.SS Resource limit
-The
-.B RLIMIT_MSGQUEUE
-resource limit, which places a limit on the amount of space
-that can be consumed by all of the message queues
-belonging to a process's real user ID, is described in
-.BR getrlimit (2).
-.SS Mounting the message queue filesystem
-On Linux, message queues are created in a virtual filesystem.
-(Other implementations may also provide such a feature,
-but the details are likely to differ.)
-This filesystem can be mounted (by the superuser) using the following
-commands:
-.PP
-.in +4n
-.EX
-.RB "#" " mkdir /dev/mqueue"
-.RB "#" " mount \-t mqueue none /dev/mqueue"
-.EE
-.in
-.PP
-The sticky bit is automatically enabled on the mount directory.
-.PP
-After the filesystem has been mounted, the message queues on the system
-can be viewed and manipulated using the commands usually used for files
-(e.g.,
-.BR ls (1)
-and
-.BR rm (1)).
-.PP
-The contents of each file in the directory consist of a single line
-containing information about the queue:
-.PP
-.in +4n
-.EX
-.RB "$" " cat /dev/mqueue/mymq"
-QSIZE:129 NOTIFY:2 SIGNO:0 NOTIFY_PID:8260
-.EE
-.in
-.PP
-These fields are as follows:
-.TP
-.B QSIZE
-Number of bytes of data in all messages in the queue (but see BUGS).
-.TP
-.B NOTIFY_PID
-If this is nonzero, then the process with this PID has used
-.BR mq_notify (3)
-to register for asynchronous message notification,
-and the remaining fields describe how notification occurs.
-.TP
-.B NOTIFY
-Notification method:
-0 is
-.BR SIGEV_SIGNAL ;
-1 is
-.BR SIGEV_NONE ;
-and
-2 is
-.BR SIGEV_THREAD .
-.TP
-.B SIGNO
-Signal number to be used for
-.BR SIGEV_SIGNAL .
-.SS Linux implementation of message queue descriptors
-On Linux, a message queue descriptor is actually a file descriptor.
-(POSIX does not require such an implementation.)
-This means that a message queue descriptor can be monitored using
-.BR select (2),
-.BR poll (2),
-or
-.BR epoll (7).
-This is not portable.
-.PP
-The close-on-exec flag (see
-.BR open (2))
-is automatically set on the file descriptor returned by
-.BR mq_open (2).
-.SS IPC namespaces
-For a discussion of the interaction of POSIX message queue objects and
-IPC namespaces, see
-.BR ipc_namespaces (7).
-.SH NOTES
-System V message queues
-.RB ( msgget (2),
-.BR msgsnd (2),
-.BR msgrcv (2),
-etc.) are an older API for exchanging messages between processes.
-POSIX message queues provide a better designed interface than
-System V message queues;
-on the other hand POSIX message queues are less widely available
-(especially on older systems) than System V message queues.
-.PP
-Linux does not currently (Linux 2.6.26) support the use of access control
-lists (ACLs) for POSIX message queues.
-.SH BUGS
-Since Linux 3.5 to Linux 3.14, the kernel imposed a ceiling of 1024
-.RB ( HARD_QUEUESMAX )
-on the value to which the
-.I queues_max
-limit could be raised,
-and the ceiling was enforced even for privileged processes.
-This ceiling value was removed in Linux 3.14,
-and patches to stable Linux 3.5.x to Linux 3.13.x also removed the ceiling.
-.PP
-As originally implemented (and documented),
-the QSIZE field displayed the total number of (user-supplied)
-bytes in all messages in the message queue.
-Some changes in Linux 3.5
-.\" commit d6629859b36d
-inadvertently changed the behavior,
-so that this field also included a count of kernel overhead bytes
-used to store the messages in the queue.
-This behavioral regression was rectified in Linux 4.2
-.\" commit de54b9ac253787c366bbfb28d901a31954eb3511
-(and earlier stable kernel series),
-so that the count once more included just the bytes of user data
-in messages in the queue.
-.SH EXAMPLES
-An example of the use of various message queue functions is shown in
-.BR mq_notify (3).
-.SH SEE ALSO
-.BR getrlimit (2),
-.BR mq_getsetattr (2),
-.BR poll (2),
-.BR select (2),
-.BR mq_close (3),
-.BR mq_getattr (3),
-.BR mq_notify (3),
-.BR mq_open (3),
-.BR mq_receive (3),
-.BR mq_send (3),
-.BR mq_unlink (3),
-.BR epoll (7),
-.BR namespaces (7)
diff --git a/man7/namespaces.7 b/man7/namespaces.7
deleted file mode 100644
index 209be5f19..000000000
--- a/man7/namespaces.7
+++ /dev/null
@@ -1,421 +0,0 @@
-'\" t
-.\" Copyright (c) 2013, 2016, 2017 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (c) 2012 by Eric W. Biederman <ebiederm@xmission.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH namespaces 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-namespaces \- overview of Linux namespaces
-.SH DESCRIPTION
-A namespace wraps a global system resource in an abstraction that
-makes it appear to the processes within the namespace that they
-have their own isolated instance of the global resource.
-Changes to the global resource are visible to other processes
-that are members of the namespace, but are invisible to other processes.
-One use of namespaces is to implement containers.
-.PP
-This page provides pointers to information on the various namespace types,
-describes the associated
-.I /proc
-files, and summarizes the APIs for working with namespaces.
-.\"
-.SS Namespace types
-The following table shows the namespace types available on Linux.
-The second column of the table shows the flag value that is used to specify
-the namespace type in various APIs.
-The third column identifies the manual page that provides details
-on the namespace type.
-The last column is a summary of the resources that are isolated by
-the namespace type.
-.ad l
-.nh
-.TS
-lB lB lB lB
-l1 lB1 l1 l.
-Namespace Flag Page Isolates
-Cgroup CLONE_NEWCGROUP \fBcgroup_namespaces\fP(7) T{
-Cgroup root directory
-T}
-IPC CLONE_NEWIPC \fBipc_namespaces\fP(7) T{
-System V IPC,
-POSIX message queues
-T}
-Network CLONE_NEWNET \fBnetwork_namespaces\fP(7) T{
-Network devices,
-stacks, ports, etc.
-T}
-Mount CLONE_NEWNS \fBmount_namespaces\fP(7) Mount points
-PID CLONE_NEWPID \fBpid_namespaces\fP(7) Process IDs
-Time CLONE_NEWTIME \fBtime_namespaces\fP(7) T{
-Boot and monotonic
-clocks
-T}
-User CLONE_NEWUSER \fBuser_namespaces\fP(7) T{
-User and group IDs
-T}
-UTS CLONE_NEWUTS \fButs_namespaces\fP(7) T{
-Hostname and NIS
-domain name
-T}
-.TE
-.hy
-.ad
-.\"
-.\" ==================== The namespaces API ====================
-.\"
-.SS The namespaces API
-As well as various
-.I /proc
-files described below,
-the namespaces API includes the following system calls:
-.TP
-.BR clone (2)
-The
-.BR clone (2)
-system call creates a new process.
-If the
-.I flags
-argument of the call specifies one or more of the
-.B CLONE_NEW*
-flags listed above, then new namespaces are created for each flag,
-and the child process is made a member of those namespaces.
-(This system call also implements a number of features
-unrelated to namespaces.)
-.TP
-.BR setns (2)
-The
-.BR setns (2)
-system call allows the calling process to join an existing namespace.
-The namespace to join is specified via a file descriptor that refers to
-one of the
-.IR /proc/ pid /ns
-files described below.
-.TP
-.BR unshare (2)
-The
-.BR unshare (2)
-system call moves the calling process to a new namespace.
-If the
-.I flags
-argument of the call specifies one or more of the
-.B CLONE_NEW*
-flags listed above, then new namespaces are created for each flag,
-and the calling process is made a member of those namespaces.
-(This system call also implements a number of features
-unrelated to namespaces.)
-.TP
-.BR ioctl (2)
-Various
-.BR ioctl (2)
-operations can be used to discover information about namespaces.
-These operations are described in
-.BR ioctl_ns (2).
-.PP
-Creation of new namespaces using
-.BR clone (2)
-and
-.BR unshare (2)
-in most cases requires the
-.B CAP_SYS_ADMIN
-capability, since, in the new namespace,
-the creator will have the power to change global resources
-that are visible to other processes that are subsequently created in,
-or join the namespace.
-User namespaces are the exception: since Linux 3.8,
-no privilege is required to create a user namespace.
-.\"
-.\" ==================== The /proc/[pid]/ns/ directory ====================
-.\"
-.SS The \fI/proc/\fPpid\fI/ns/\fP directory
-Each process has a
-.IR /proc/ pid /ns/
-.\" See commit 6b4e306aa3dc94a0545eb9279475b1ab6209a31f
-subdirectory containing one entry for each namespace that
-supports being manipulated by
-.BR setns (2):
-.PP
-.in +4n
-.EX
-$ \fBls \-l /proc/$$/ns | awk \[aq]{print $1, $9, $10, $11}\[aq]\fP
-total 0
-lrwxrwxrwx. cgroup \-> cgroup:[4026531835]
-lrwxrwxrwx. ipc \-> ipc:[4026531839]
-lrwxrwxrwx. mnt \-> mnt:[4026531840]
-lrwxrwxrwx. net \-> net:[4026531969]
-lrwxrwxrwx. pid \-> pid:[4026531836]
-lrwxrwxrwx. pid_for_children \-> pid:[4026531834]
-lrwxrwxrwx. time \-> time:[4026531834]
-lrwxrwxrwx. time_for_children \-> time:[4026531834]
-lrwxrwxrwx. user \-> user:[4026531837]
-lrwxrwxrwx. uts \-> uts:[4026531838]
-.EE
-.in
-.PP
-Bind mounting (see
-.BR mount (2))
-one of the files in this directory
-to somewhere else in the filesystem keeps
-the corresponding namespace of the process specified by
-.I pid
-alive even if all processes currently in the namespace terminate.
-.PP
-Opening one of the files in this directory
-(or a file that is bind mounted to one of these files)
-returns a file handle for
-the corresponding namespace of the process specified by
-.IR pid .
-As long as this file descriptor remains open,
-the namespace will remain alive,
-even if all processes in the namespace terminate.
-The file descriptor can be passed to
-.BR setns (2).
-.PP
-In Linux 3.7 and earlier, these files were visible as hard links.
-Since Linux 3.8,
-.\" commit bf056bfa80596a5d14b26b17276a56a0dcb080e5
-they appear as symbolic links.
-If two processes are in the same namespace,
-then the device IDs and inode numbers of their
-.IR /proc/ pid /ns/ xxx
-symbolic links will be the same; an application can check this using the
-.I stat.st_dev
-.\" Eric Biederman: "I reserve the right for st_dev to be significant
-.\" when comparing namespaces."
-.\" https://lore.kernel.org/lkml/87poky5ca9.fsf@xmission.com/
-.\" Re: Documenting the ioctl interfaces to discover relationships...
-.\" Date: Mon, 12 Dec 2016 11:30:38 +1300
-and
-.I stat.st_ino
-fields returned by
-.BR stat (2).
-The content of this symbolic link is a string containing
-the namespace type and inode number as in the following example:
-.PP
-.in +4n
-.EX
-$ \fBreadlink /proc/$$/ns/uts\fP
-uts:[4026531838]
-.EE
-.in
-.PP
-The symbolic links in this subdirectory are as follows:
-.TP
-.IR /proc/ pid /ns/cgroup " (since Linux 4.6)"
-This file is a handle for the cgroup namespace of the process.
-.TP
-.IR /proc/ pid /ns/ipc " (since Linux 3.0)"
-This file is a handle for the IPC namespace of the process.
-.TP
-.IR /proc/ pid /ns/mnt " (since Linux 3.8)"
-.\" commit 8823c079ba7136dc1948d6f6dcb5f8022bde438e
-This file is a handle for the mount namespace of the process.
-.TP
-.IR /proc/ pid /ns/net " (since Linux 3.0)"
-This file is a handle for the network namespace of the process.
-.TP
-.IR /proc/ pid /ns/pid " (since Linux 3.8)"
-.\" commit 57e8391d327609cbf12d843259c968b9e5c1838f
-This file is a handle for the PID namespace of the process.
-This handle is permanent for the lifetime of the process
-(i.e., a process's PID namespace membership never changes).
-.TP
-.IR /proc/ pid /ns/pid_for_children " (since Linux 4.12)"
-.\" commit eaa0d190bfe1ed891b814a52712dcd852554cb08
-This file is a handle for the PID namespace of
-child processes created by this process.
-This can change as a consequence of calls to
-.BR unshare (2)
-and
-.BR setns (2)
-(see
-.BR pid_namespaces (7)),
-so the file may differ from
-.IR /proc/ pid /ns/pid .
-The symbolic link gains a value only after the first child process
-is created in the namespace.
-(Beforehand,
-.BR readlink (2)
-of the symbolic link will return an empty buffer.)
-.TP
-.IR /proc/ pid /ns/time " (since Linux 5.6)"
-This file is a handle for the time namespace of the process.
-.TP
-.IR /proc/ pid /ns/time_for_children " (since Linux 5.6)"
-This file is a handle for the time namespace of
-child processes created by this process.
-This can change as a consequence of calls to
-.BR unshare (2)
-and
-.BR setns (2)
-(see
-.BR time_namespaces (7)),
-so the file may differ from
-.IR /proc/ pid /ns/time .
-.TP
-.IR /proc/ pid /ns/user " (since Linux 3.8)"
-.\" commit cde1975bc242f3e1072bde623ef378e547b73f91
-This file is a handle for the user namespace of the process.
-.TP
-.IR /proc/ pid /ns/uts " (since Linux 3.0)"
-This file is a handle for the UTS namespace of the process.
-.PP
-Permission to dereference or read
-.RB ( readlink (2))
-these symbolic links is governed by a ptrace access mode
-.B PTRACE_MODE_READ_FSCREDS
-check; see
-.BR ptrace (2).
-.\"
-.\" ==================== The /proc/sys/user directory ====================
-.\"
-.SS The \fI/proc/sys/user\fP directory
-The files in the
-.I /proc/sys/user
-directory (which is present since Linux 4.9) expose limits
-on the number of namespaces of various types that can be created.
-The files are as follows:
-.TP
-.I max_cgroup_namespaces
-The value in this file defines a per-user limit on the number of
-cgroup namespaces that may be created in the user namespace.
-.TP
-.I max_ipc_namespaces
-The value in this file defines a per-user limit on the number of
-ipc namespaces that may be created in the user namespace.
-.TP
-.I max_mnt_namespaces
-The value in this file defines a per-user limit on the number of
-mount namespaces that may be created in the user namespace.
-.TP
-.I max_net_namespaces
-The value in this file defines a per-user limit on the number of
-network namespaces that may be created in the user namespace.
-.TP
-.I max_pid_namespaces
-The value in this file defines a per-user limit on the number of
-PID namespaces that may be created in the user namespace.
-.TP
-.IR max_time_namespaces " (since Linux 5.7)"
-.\" commit eeec26d5da8248ea4e240b8795bb4364213d3247
-The value in this file defines a per-user limit on the number of
-time namespaces that may be created in the user namespace.
-.TP
-.I max_user_namespaces
-The value in this file defines a per-user limit on the number of
-user namespaces that may be created in the user namespace.
-.TP
-.I max_uts_namespaces
-The value in this file defines a per-user limit on the number of
-uts namespaces that may be created in the user namespace.
-.PP
-Note the following details about these files:
-.IP \[bu] 3
-The values in these files are modifiable by privileged processes.
-.IP \[bu]
-The values exposed by these files are the limits for the user namespace
-in which the opening process resides.
-.IP \[bu]
-The limits are per-user.
-Each user in the same user namespace
-can create namespaces up to the defined limit.
-.IP \[bu]
-The limits apply to all users, including UID 0.
-.IP \[bu]
-These limits apply in addition to any other per-namespace
-limits (such as those for PID and user namespaces) that may be enforced.
-.IP \[bu]
-Upon encountering these limits,
-.BR clone (2)
-and
-.BR unshare (2)
-fail with the error
-.BR ENOSPC .
-.IP \[bu]
-For the initial user namespace,
-the default value in each of these files is half the limit on the number
-of threads that may be created
-.RI ( /proc/sys/kernel/threads\-max ).
-In all descendant user namespaces, the default value in each file is
-.BR MAXINT .
-.IP \[bu]
-When a namespace is created, the object is also accounted
-against ancestor namespaces.
-More precisely:
-.RS
-.IP \[bu] 3
-Each user namespace has a creator UID.
-.IP \[bu]
-When a namespace is created,
-it is accounted against the creator UIDs in each of the
-ancestor user namespaces,
-and the kernel ensures that the corresponding namespace limit
-for the creator UID in the ancestor namespace is not exceeded.
-.IP \[bu]
-The aforementioned point ensures that creating a new user namespace
-cannot be used as a means to escape the limits in force
-in the current user namespace.
-.RE
-.\"
-.SS Namespace lifetime
-Absent any other factors,
-a namespace is automatically torn down when the last process in
-the namespace terminates or leaves the namespace.
-However, there are a number of other factors that may pin
-a namespace into existence even though it has no member processes.
-These factors include the following:
-.IP \[bu] 3
-An open file descriptor or a bind mount exists for the corresponding
-.IR /proc/ pid /ns/*
-file.
-.IP \[bu]
-The namespace is hierarchical (i.e., a PID or user namespace),
-and has a child namespace.
-.IP \[bu]
-It is a user namespace that owns one or more nonuser namespaces.
-.IP \[bu]
-It is a PID namespace,
-and there is a process that refers to the namespace via a
-.IR /proc/ pid /ns/pid_for_children
-symbolic link.
-.IP \[bu]
-It is a time namespace,
-and there is a process that refers to the namespace via a
-.IR /proc/ pid /ns/time_for_children
-symbolic link.
-.IP \[bu]
-It is an IPC namespace, and a corresponding mount of an
-.I mqueue
-filesystem (see
-.BR mq_overview (7))
-refers to this namespace.
-.IP \[bu]
-It is a PID namespace, and a corresponding mount of a
-.BR proc (5)
-filesystem refers to this namespace.
-.SH EXAMPLES
-See
-.BR clone (2)
-and
-.BR user_namespaces (7).
-.SH SEE ALSO
-.BR nsenter (1),
-.BR readlink (1),
-.BR unshare (1),
-.BR clone (2),
-.BR ioctl_ns (2),
-.BR setns (2),
-.BR unshare (2),
-.BR proc (5),
-.BR capabilities (7),
-.BR cgroup_namespaces (7),
-.BR cgroups (7),
-.BR credentials (7),
-.BR ipc_namespaces (7),
-.BR network_namespaces (7),
-.BR pid_namespaces (7),
-.BR user_namespaces (7),
-.BR uts_namespaces (7),
-.BR lsns (8),
-.BR switch_root (8)
diff --git a/man7/netdevice.7 b/man7/netdevice.7
deleted file mode 100644
index eda9f3220..000000000
--- a/man7/netdevice.7
+++ /dev/null
@@ -1,426 +0,0 @@
-'\" t
-.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
-.\"
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" $Id: netdevice.7,v 1.10 2000/08/17 10:09:54 ak Exp $
-.\"
-.\" Modified, 2004-11-25, mtk, formatting and a few wording fixes
-.\"
-.\" Modified, 2011-11-02, <bidulock@openss7.org>, added many basic
-.\" but missing ioctls, such as SIOCGIFADDR.
-.\"
-.TH netdevice 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-netdevice \- low-level access to Linux network devices
-.SH SYNOPSIS
-.nf
-.B "#include <sys/ioctl.h>"
-.B "#include <net/if.h>"
-.fi
-.SH DESCRIPTION
-This man page describes the sockets interface which is used to configure
-network devices.
-.PP
-Linux supports some standard ioctls to configure network devices.
-They can be used on any socket's file descriptor regardless of the
-family or type.
-Most of them pass an
-.I ifreq
-structure:
-.PP
-.in +4n
-.EX
-struct ifreq {
- char ifr_name[IFNAMSIZ]; /* Interface name */
- union {
- struct sockaddr ifr_addr;
- struct sockaddr ifr_dstaddr;
- struct sockaddr ifr_broadaddr;
- struct sockaddr ifr_netmask;
- struct sockaddr ifr_hwaddr;
- short ifr_flags;
- int ifr_ifindex;
- int ifr_metric;
- int ifr_mtu;
- struct ifmap ifr_map;
- char ifr_slave[IFNAMSIZ];
- char ifr_newname[IFNAMSIZ];
- char *ifr_data;
- };
-};
-.EE
-.in
-.PP
-.B AF_INET6
-is an exception.
-It passes an
-.I in6_ifreq
-structure:
-.PP
-.in +4n
-.EX
-struct in6_ifreq {
- struct in6_addr ifr6_addr;
- u32 ifr6_prefixlen;
- int ifr6_ifindex; /* Interface index */
-};
-.EE
-.in
-.PP
-Normally, the user specifies which device to affect by setting
-.I ifr_name
-to the name of the interface or
-.I ifr6_ifindex
-to the index of the interface.
-All other members of the structure may
-share memory.
-.SS Ioctls
-If an ioctl is marked as privileged, then using it requires an effective
-user ID of 0 or the
-.B CAP_NET_ADMIN
-capability.
-If this is not the case,
-.B EPERM
-will be returned.
-.TP
-.B SIOCGIFNAME
-Given the
-.IR ifr_ifindex ,
-return the name of the interface in
-.IR ifr_name .
-This is the only ioctl which returns its result in
-.IR ifr_name .
-.TP
-.B SIOCGIFINDEX
-Retrieve the interface index of the interface into
-.IR ifr_ifindex .
-.TP
-.BR SIOCGIFFLAGS ", " SIOCSIFFLAGS
-Get or set the active flag word of the device.
-.I ifr_flags
-contains a bit mask of the following values:
-.\" Do not right adjust text blocks in tables
-.na
-.TS
-tab(:);
-c s
-l l.
-Device flags
-IFF_UP:Interface is running.
-IFF_BROADCAST:Valid broadcast address set.
-IFF_DEBUG:Internal debugging flag.
-IFF_LOOPBACK:Interface is a loopback interface.
-IFF_POINTOPOINT:Interface is a point-to-point link.
-IFF_RUNNING:Resources allocated.
-IFF_NOARP:T{
-No arp protocol, L2 destination address not set.
-T}
-IFF_PROMISC:Interface is in promiscuous mode.
-IFF_NOTRAILERS:Avoid use of trailers.
-IFF_ALLMULTI:Receive all multicast packets.
-IFF_MASTER:Master of a load balancing bundle.
-IFF_SLAVE:Slave of a load balancing bundle.
-IFF_MULTICAST:Supports multicast
-IFF_PORTSEL:Is able to select media type via ifmap.
-IFF_AUTOMEDIA:Auto media selection active.
-IFF_DYNAMIC:T{
-The addresses are lost when the interface goes down.
-T}
-IFF_LOWER_UP:Driver signals L1 up (since Linux 2.6.17)
-IFF_DORMANT:Driver signals dormant (since Linux 2.6.17)
-IFF_ECHO:Echo sent packets (since Linux 2.6.25)
-.TE
-.ad
-.PP
-Setting the active flag word is a privileged operation, but any
-process may read it.
-.TP
-.BR SIOCGIFPFLAGS ", " SIOCSIFPFLAGS
-Get or set extended (private) flags for the device.
-.I ifr_flags
-contains a bit mask of the following values:
-.TS
-tab(:);
-c s
-l l.
-Private flags
-IFF_802_1Q_VLAN:Interface is 802.1Q VLAN device.
-IFF_EBRIDGE:Interface is Ethernet bridging device.
-IFF_SLAVE_INACTIVE:Interface is inactive bonding slave.
-IFF_MASTER_8023AD:Interface is 802.3ad bonding master.
-IFF_MASTER_ALB:Interface is balanced-alb bonding master.
-IFF_BONDING:Interface is a bonding master or slave.
-IFF_SLAVE_NEEDARP:Interface needs ARPs for validation.
-IFF_ISATAP:Interface is RFC4214 ISATAP interface.
-.TE
-.PP
-Setting the extended (private) interface flags is a privileged operation.
-.TP
-.BR SIOCGIFADDR ", " SIOCSIFADDR ", " SIOCDIFADDR
-Get, set, or delete the address of the device using
-.IR ifr_addr ,
-or
-.I ifr6_addr
-with
-.IR ifr6_prefixlen .
-Setting or deleting the interface address is a privileged operation.
-For compatibility,
-.B SIOCGIFADDR
-returns only
-.B AF_INET
-addresses,
-.B SIOCSIFADDR
-accepts
-.B AF_INET
-and
-.B AF_INET6
-addresses, and
-.B SIOCDIFADDR
-deletes only
-.B AF_INET6
-addresses.
-A
-.B AF_INET
-address can be deleted by setting it to zero via
-.BR SIOCSIFADDR .
-.TP
-.BR SIOCGIFDSTADDR ", " SIOCSIFDSTADDR
-Get or set the destination address of a point-to-point device using
-.IR ifr_dstaddr .
-For compatibility, only
-.B AF_INET
-addresses are accepted or returned.
-Setting the destination address is a privileged operation.
-.TP
-.BR SIOCGIFBRDADDR ", " SIOCSIFBRDADDR
-Get or set the broadcast address for a device using
-.IR ifr_brdaddr .
-For compatibility, only
-.B AF_INET
-addresses are accepted or returned.
-Setting the broadcast address is a privileged operation.
-.TP
-.BR SIOCGIFNETMASK ", " SIOCSIFNETMASK
-Get or set the network mask for a device using
-.IR ifr_netmask .
-For compatibility, only
-.B AF_INET
-addresses are accepted or returned.
-Setting the network mask is a privileged operation.
-.TP
-.BR SIOCGIFMETRIC ", " SIOCSIFMETRIC
-Get or set the metric of the device using
-.IR ifr_metric .
-This is currently not implemented; it sets
-.I ifr_metric
-to 0 if you attempt to read it and returns
-.B EOPNOTSUPP
-if you attempt to set it.
-.TP
-.BR SIOCGIFMTU ", " SIOCSIFMTU
-Get or set the MTU (Maximum Transfer Unit) of a device using
-.IR ifr_mtu .
-Setting the MTU is a privileged operation.
-Setting the MTU to
-too small values may cause kernel crashes.
-.TP
-.BR SIOCGIFHWADDR ", " SIOCSIFHWADDR
-Get or set the hardware address of a device using
-.IR ifr_hwaddr .
-The hardware address is specified in a struct
-.IR sockaddr .
-.I sa_family
-contains the ARPHRD_* device type,
-.I sa_data
-the L2 hardware address starting from byte 0.
-Setting the hardware address is a privileged operation.
-.TP
-.B SIOCSIFHWBROADCAST
-Set the hardware broadcast address of a device from
-.IR ifr_hwaddr .
-This is a privileged operation.
-.TP
-.BR SIOCGIFMAP ", " SIOCSIFMAP
-Get or set the interface's hardware parameters using
-.IR ifr_map .
-Setting the parameters is a privileged operation.
-.IP
-.in +4n
-.EX
-struct ifmap {
- unsigned long mem_start;
- unsigned long mem_end;
- unsigned short base_addr;
- unsigned char irq;
- unsigned char dma;
- unsigned char port;
-};
-.EE
-.in
-.IP
-The interpretation of the ifmap structure depends on the device driver
-and the architecture.
-.TP
-.BR SIOCADDMULTI ", " SIOCDELMULTI
-Add an address to or delete an address from the device's link layer
-multicast filters using
-.IR ifr_hwaddr .
-These are privileged operations.
-See also
-.BR packet (7)
-for an alternative.
-.TP
-.BR SIOCGIFTXQLEN ", " SIOCSIFTXQLEN
-Get or set the transmit queue length of a device using
-.IR ifr_qlen .
-Setting the transmit queue length is a privileged operation.
-.TP
-.B SIOCSIFNAME
-Changes the name of the interface specified in
-.I ifr_name
-to
-.IR ifr_newname .
-This is a privileged operation.
-It is allowed only when the interface
-is not up.
-.TP
-.B SIOCGIFCONF
-Return a list of interface (network layer) addresses.
-This currently
-means only addresses of the
-.B AF_INET
-(IPv4) family for compatibility.
-Unlike the others, this ioctl passes an
-.I ifconf
-structure:
-.IP
-.in +4n
-.EX
-struct ifconf {
- int ifc_len; /* size of buffer */
- union {
- char *ifc_buf; /* buffer address */
- struct ifreq *ifc_req; /* array of structures */
- };
-};
-.EE
-.in
-.IP
-If
-.I ifc_req
-is NULL,
-.B SIOCGIFCONF
-returns the necessary buffer size in bytes
-for receiving all available addresses in
-.IR ifc_len .
-Otherwise,
-.I ifc_req
-contains a pointer to an array of
-.I ifreq
-structures to be filled with all currently active L3 interface addresses.
-.I ifc_len
-contains the size of the array in bytes.
-Within each
-.I ifreq
-structure,
-.I ifr_name
-will receive the interface name, and
-.I ifr_addr
-the address.
-The actual number of bytes transferred is returned in
-.IR ifc_len .
-.IP
-If the size specified by
-.I ifc_len
-is insufficient to store all the addresses,
-the kernel will skip the exceeding ones and return success.
-There is no reliable way of detecting this condition once it has occurred.
-It is therefore recommended to either determine the necessary buffer size
-beforehand by calling
-.B SIOCGIFCONF
-with
-.I ifc_req
-set to NULL, or to retry the call with a bigger buffer whenever
-.I ifc_len
-upon return differs by less than
-.I sizeof(struct ifreq)
-from its original value.
-.IP
-If an error occurs accessing the
-.I ifconf
-or
-.I ifreq
-structures,
-.B EFAULT
-will be returned.
-.\" Slaving isn't supported in Linux 2.2
-.\" .
-.\" .TP
-.\" .BR SIOCGIFSLAVE ", " SIOCSIFSLAVE
-.\" Get or set the slave device using
-.\" .IR ifr_slave .
-.\" Setting the slave device is a privileged operation.
-.\" .PP
-.\" FIXME . add amateur radio stuff.
-.PP
-Most protocols support their own ioctls to configure protocol-specific
-interface options.
-See the protocol man pages for a description.
-For configuring IP addresses, see
-.BR ip (7).
-.PP
-In addition, some devices support private ioctls.
-These are not described here.
-.SH NOTES
-.B SIOCGIFCONF
-and the other ioctls that accept or return only
-.B AF_INET
-socket addresses
-are IP-specific and perhaps should rather be documented in
-.BR ip (7).
-.PP
-The names of interfaces with no addresses or that don't have the
-.B IFF_RUNNING
-flag set can be found via
-.IR /proc/net/dev .
-.PP
-.B AF_INET6
-IPv6 addresses can be read from
-.I /proc/net/if_inet6
-or via
-.BR rtnetlink (7).
-Adding a new IPv6 address and deleting an existing IPv6 address
-can be done via
-.B SIOCSIFADDR
-and
-.B SIOCDIFADDR
-or via
-.BR rtnetlink (7).
-Retrieving or changing destination IPv6 addresses of a point-to-point
-interface is possible only via
-.BR rtnetlink (7).
-.SH BUGS
-glibc 2.1 is missing the
-.I ifr_newname
-macro in
-.IR <net/if.h> .
-Add the following to your program as a workaround:
-.PP
-.in +4n
-.EX
-#ifndef ifr_newname
-#define ifr_newname ifr_ifru.ifru_slave
-#endif
-.EE
-.in
-.SH SEE ALSO
-.BR proc (5),
-.BR capabilities (7),
-.BR ip (7),
-.BR rtnetlink (7)
diff --git a/man7/netlink.7 b/man7/netlink.7
deleted file mode 100644
index 84b24f308..000000000
--- a/man7/netlink.7
+++ /dev/null
@@ -1,621 +0,0 @@
-'\" t
-.\" This man page is Copyright (c) 1998 by Andi Kleen.
-.\"
-.\" SPDX-License-Identifier: GPL-1.0-or-later
-.\"
-.\" Based on the original comments from Alexey Kuznetsov
-.\" Modified 2005-12-27 by Hasso Tepper <hasso@estpak.ee>
-.\" $Id: netlink.7,v 1.8 2000/06/22 13:23:00 ak Exp $
-.TH netlink 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-netlink \- communication between kernel and user space (AF_NETLINK)
-.SH SYNOPSIS
-.nf
-.B #include <asm/types.h>
-.B #include <sys/socket.h>
-.B #include <linux/netlink.h>
-.PP
-.BI "netlink_socket = socket(AF_NETLINK, " socket_type ", " netlink_family );
-.fi
-.SH DESCRIPTION
-Netlink is used to transfer information between the kernel and
-user-space processes.
-It consists of a standard sockets-based interface for user space
-processes and an internal kernel API for kernel modules.
-The internal kernel interface is not documented in this manual page.
-There is also an obsolete netlink interface
-via netlink character devices; this interface is not documented here
-and is provided only for backward compatibility.
-.PP
-Netlink is a datagram-oriented service.
-Both
-.B SOCK_RAW
-and
-.B SOCK_DGRAM
-are valid values for
-.IR socket_type .
-However, the netlink protocol does not distinguish between datagram
-and raw sockets.
-.PP
-.I netlink_family
-selects the kernel module or netlink group to communicate with.
-The currently assigned netlink families are:
-.TP
-.B NETLINK_ROUTE
-Receives routing and link updates and may be used to modify the routing
-tables (both IPv4 and IPv6), IP addresses, link parameters,
-neighbor setups, queueing disciplines, traffic classes, and
-packet classifiers (see
-.BR rtnetlink (7)).
-.TP
-.BR NETLINK_W1 " (Linux 2.6.13 to Linux 2.16.17)"
-Messages from 1-wire subsystem.
-.TP
-.B NETLINK_USERSOCK
-Reserved for user-mode socket protocols.
-.TP
-.BR NETLINK_FIREWALL " (up to and including Linux 3.4)"
-.\" removed by commit d16cf20e2f2f13411eece7f7fb72c17d141c4a84
-Transport IPv4 packets from netfilter to user space.
-Used by
-.I ip_queue
-kernel module.
-After a long period of being declared obsolete (in favor of the more advanced
-.I nfnetlink_queue
-feature),
-.B NETLINK_FIREWALL
-was removed in Linux 3.5.
-.TP
-.BR NETLINK_SOCK_DIAG " (since Linux 3.3)"
-.\" commit 7f1fb60c4fc9fb29fbb406ac8c4cfb4e59e168d6
-Query information about sockets of various protocol families from the kernel
-(see
-.BR sock_diag (7)).
-.TP
-.BR NETLINK_INET_DIAG " (since Linux 2.6.14)"
-An obsolete synonym for
-.BR NETLINK_SOCK_DIAG .
-.TP
-.BR NETLINK_NFLOG " (up to and including Linux 3.16)"
-Netfilter/iptables ULOG.
-.TP
-.B NETLINK_XFRM
-.\" FIXME More details on NETLINK_XFRM needed.
-IPsec.
-.TP
-.BR NETLINK_SELINUX " (since Linux 2.6.4)"
-SELinux event notifications.
-.TP
-.BR NETLINK_ISCSI " (since Linux 2.6.15)"
-.\" FIXME More details on NETLINK_ISCSI needed.
-Open-iSCSI.
-.TP
-.BR NETLINK_AUDIT " (since Linux 2.6.6)"
-.\" FIXME More details on NETLINK_AUDIT needed.
-Auditing.
-.TP
-.BR NETLINK_FIB_LOOKUP " (since Linux 2.6.13)"
-.\" FIXME More details on NETLINK_FIB_LOOKUP needed.
-Access to FIB lookup from user space.
-.TP
-.BR NETLINK_CONNECTOR " (since Linux 2.6.14)"
-Kernel connector.
-See
-.I Documentation/driver\-api/connector.rst
-(or
-.I /Documentation/connector/connector.*
-.\" commit baa293e9544bea71361950d071579f0e4d5713ed
-in Linux 5.2 and earlier)
-in the Linux kernel source tree for further information.
-.TP
-.BR NETLINK_NETFILTER " (since Linux 2.6.14)"
-.\" FIXME More details on NETLINK_NETFILTER needed.
-Netfilter subsystem.
-.TP
-.BR NETLINK_SCSITRANSPORT " (since Linux 2.6.19)"
-.\" commit 84314fd4740ad73550c76dee4a9578979d84af48
-.\" FIXME More details on NETLINK_SCSITRANSPORT needed.
-SCSI Transports.
-.TP
-.BR NETLINK_RDMA " (since Linux 3.0)"
-.\" commit b2cbae2c248776d81cc265ff7d48405b6a4cc463
-.\" FIXME More details on NETLINK_RDMA needed.
-Infiniband RDMA.
-.TP
-.BR NETLINK_IP6_FW " (up to and including Linux 3.4)"
-Transport IPv6 packets from netfilter to user space.
-Used by
-.I ip6_queue
-kernel module.
-.TP
-.B NETLINK_DNRTMSG
-DECnet routing messages.
-.TP
-.BR NETLINK_KOBJECT_UEVENT " (since Linux 2.6.10)"
-.\" FIXME More details on NETLINK_KOBJECT_UEVENT needed.
-Kernel messages to user space.
-.TP
-.BR NETLINK_GENERIC " (since Linux 2.6.15)"
-Generic netlink family for simplified netlink usage.
-.TP
-.BR NETLINK_CRYPTO " (since Linux 3.2)"
-.\" commit a38f7907b926e4c6c7d389ad96cc38cec2e5a9e9
-.\" Author: Steffen Klassert <steffen.klassert@secunet.com>
-Netlink interface to request information about ciphers registered
-with the kernel crypto API as well as allow configuration of the
-kernel crypto API.
-.PP
-Netlink messages consist of a byte stream with one or multiple
-.I nlmsghdr
-headers and associated payload.
-The byte stream should be accessed only with the standard
-.B NLMSG_*
-macros.
-See
-.BR netlink (3)
-for further information.
-.PP
-In multipart messages (multiple
-.I nlmsghdr
-headers with associated payload in one byte stream) the first and all
-following headers have the
-.B NLM_F_MULTI
-flag set, except for the last header which has the type
-.BR NLMSG_DONE .
-.PP
-After each
-.I nlmsghdr
-the payload follows.
-.PP
-.in +4n
-.EX
-struct nlmsghdr {
- __u32 nlmsg_len; /* Length of message including header */
- __u16 nlmsg_type; /* Type of message content */
- __u16 nlmsg_flags; /* Additional flags */
- __u32 nlmsg_seq; /* Sequence number */
- __u32 nlmsg_pid; /* Sender port ID */
-};
-.EE
-.in
-.PP
-.I nlmsg_type
-can be one of the standard message types:
-.B NLMSG_NOOP
-message is to be ignored,
-.B NLMSG_ERROR
-message signals an error and the payload contains an
-.I nlmsgerr
-structure,
-.B NLMSG_DONE
-message terminates a multipart message.
-Error messages get the
-original request appended, unless the user requests to cap the
-error message, and get extra error data if requested.
-.PP
-.in +4n
-.EX
-struct nlmsgerr {
- int error; /* Negative errno or 0 for acknowledgements */
- struct nlmsghdr msg; /* Message header that caused the error */
- /*
- * followed by the message contents
- * unless NETLINK_CAP_ACK was set
- * or the ACK indicates success (error == 0).
- * For example Generic Netlink message with attributes.
- * message length is aligned with NLMSG_ALIGN()
- */
- /*
- * followed by TLVs defined in enum nlmsgerr_attrs
- * if NETLINK_EXT_ACK was set
- */
-};
-.EE
-.in
-.PP
-A netlink family usually specifies more message types, see the
-appropriate manual pages for that, for example,
-.BR rtnetlink (7)
-for
-.BR NETLINK_ROUTE .
-.nh
-.ad l
-.TS
-tab(:);
-l s
-lB lx.
-Standard flag bits in \fInlmsg_flags\fP
-_
-NLM_F_REQUEST:T{
-Must be set on all request messages.
-T}
-NLM_F_MULTI:T{
-The message is part of a multipart message terminated by
-.BR NLMSG_DONE .
-T}
-NLM_F_ACK:T{
-Request for an acknowledgement on success.
-T}
-NLM_F_ECHO:T{
-Echo this request.
-T}
-.TE
-.ad
-.hy
-.\" No right adjustment for text blocks in tables
-.nh
-.ad l
-.TS
-tab(:);
-l s
-lB lx.
-Additional flag bits for GET requests
-_
-NLM_F_ROOT:T{
-Return the complete table instead of a single entry.
-T}
-NLM_F_MATCH:T{
-Return all entries matching criteria passed in message content.
-Not implemented yet.
-T}
-NLM_F_ATOMIC:T{
-Return an atomic snapshot of the table.
-T}
-NLM_F_DUMP:T{
-Convenience macro; equivalent to
-(NLM_F_ROOT|NLM_F_MATCH).
-T}
-.TE
-.ad
-.hy
-.\" FIXME NLM_F_ATOMIC is not used anymore?
-.PP
-Note that
-.B NLM_F_ATOMIC
-requires the
-.B CAP_NET_ADMIN
-capability or an effective UID of 0.
-.nh
-.ad l
-.TS
-tab(:);
-l s
-lB lx.
-Additional flag bits for NEW requests
-_
-NLM_F_REPLACE:T{
-Replace existing matching object.
-T}
-NLM_F_EXCL:T{
-Don't replace if the object already exists.
-T}
-NLM_F_CREATE:T{
-Create object if it doesn't already exist.
-T}
-NLM_F_APPEND:T{
-Add to the end of the object list.
-T}
-.TE
-.ad
-.hy
-.PP
-.I nlmsg_seq
-and
-.I nlmsg_pid
-are used to track messages.
-.I nlmsg_pid
-shows the origin of the message.
-Note that there isn't a 1:1 relationship between
-.I nlmsg_pid
-and the PID of the process if the message originated from a netlink
-socket.
-See the
-.B ADDRESS FORMATS
-section for further information.
-.PP
-Both
-.I nlmsg_seq
-and
-.I nlmsg_pid
-.\" FIXME Explain more about nlmsg_seq and nlmsg_pid.
-are opaque to netlink core.
-.PP
-Netlink is not a reliable protocol.
-It tries its best to deliver a message to its destination(s),
-but may drop messages when an out-of-memory condition or
-other error occurs.
-For reliable transfer the sender can request an
-acknowledgement from the receiver by setting the
-.B NLM_F_ACK
-flag.
-An acknowledgement is an
-.B NLMSG_ERROR
-packet with the error field set to 0.
-The application must generate acknowledgements for
-received messages itself.
-The kernel tries to send an
-.B NLMSG_ERROR
-message for every failed packet.
-A user process should follow this convention too.
-.PP
-However, reliable transmissions from kernel to user are impossible
-in any case.
-The kernel can't send a netlink message if the socket buffer is full:
-the message will be dropped and the kernel and the user-space process will
-no longer have the same view of kernel state.
-It is up to the application to detect when this happens (via the
-.B ENOBUFS
-error returned by
-.BR recvmsg (2))
-and resynchronize.
-.SS Address formats
-The
-.I sockaddr_nl
-structure describes a netlink client in user space or in the kernel.
-A
-.I sockaddr_nl
-can be either unicast (only sent to one peer) or sent to
-netlink multicast groups
-.RI ( nl_groups
-not equal 0).
-.PP
-.in +4n
-.EX
-struct sockaddr_nl {
- sa_family_t nl_family; /* AF_NETLINK */
- unsigned short nl_pad; /* Zero */
- pid_t nl_pid; /* Port ID */
- __u32 nl_groups; /* Multicast groups mask */
-};
-.EE
-.in
-.PP
-.I nl_pid
-is the unicast address of netlink socket.
-It's always 0 if the destination is in the kernel.
-For a user-space process,
-.I nl_pid
-is usually the PID of the process owning the destination socket.
-However,
-.I nl_pid
-identifies a netlink socket, not a process.
-If a process owns several netlink
-sockets, then
-.I nl_pid
-can be equal to the process ID only for at most one socket.
-There are two ways to assign
-.I nl_pid
-to a netlink socket.
-If the application sets
-.I nl_pid
-before calling
-.BR bind (2),
-then it is up to the application to make sure that
-.I nl_pid
-is unique.
-If the application sets it to 0, the kernel takes care of assigning it.
-The kernel assigns the process ID to the first netlink socket the process
-opens and assigns a unique
-.I nl_pid
-to every netlink socket that the process subsequently creates.
-.PP
-.I nl_groups
-is a bit mask with every bit representing a netlink group number.
-Each netlink family has a set of 32 multicast groups.
-When
-.BR bind (2)
-is called on the socket, the
-.I nl_groups
-field in the
-.I sockaddr_nl
-should be set to a bit mask of the groups which it wishes to listen to.
-The default value for this field is zero which means that no multicasts
-will be received.
-A socket may multicast messages to any of the multicast groups by setting
-.I nl_groups
-to a bit mask of the groups it wishes to send to when it calls
-.BR sendmsg (2)
-or does a
-.BR connect (2).
-Only processes with an effective UID of 0 or the
-.B CAP_NET_ADMIN
-capability may send or listen to a netlink multicast group.
-Since Linux 2.6.13,
-.\" commit d629b836d151d43332492651dd841d32e57ebe3b
-messages can't be broadcast to multiple groups.
-Any replies to a message received for a multicast group should be
-sent back to the sending PID and the multicast group.
-Some Linux kernel subsystems may additionally allow other users
-to send and/or receive messages.
-As at Linux 3.0, the
-.BR NETLINK_KOBJECT_UEVENT ,
-.BR NETLINK_GENERIC ,
-.BR NETLINK_ROUTE ,
-and
-.B NETLINK_SELINUX
-groups allow other users to receive messages.
-No groups allow other users to send messages.
-.SS Socket options
-To set or get a netlink socket option, call
-.BR getsockopt (2)
-to read or
-.BR setsockopt (2)
-to write the option with the option level argument set to
-.BR SOL_NETLINK .
-Unless otherwise noted,
-.I optval
-is a pointer to an
-.IR int .
-.TP
-.BR NETLINK_PKTINFO " (since Linux 2.6.14)"
-.\" commit 9a4595bc7e67962f13232ee55a64e063062c3a99
-.\" Author: Patrick McHardy <kaber@trash.net>
-Enable
-.B nl_pktinfo
-control messages for received packets to get the extended
-destination group number.
-.TP
-.BR NETLINK_ADD_MEMBERSHIP ,\ NETLINK_DROP_MEMBERSHIP " (since Linux 2.6.14)"
-.\" commit 9a4595bc7e67962f13232ee55a64e063062c3a99
-.\" Author: Patrick McHardy <kaber@trash.net>
-Join/leave a group specified by
-.IR optval .
-.TP
-.BR NETLINK_LIST_MEMBERSHIPS " (since Linux 4.2)"
-.\" commit b42be38b2778eda2237fc759e55e3b698b05b315
-.\" Author: David Herrmann <dh.herrmann@gmail.com>
-Retrieve all groups a socket is a member of.
-.I optval
-is a pointer to
-.B __u32
-and
-.I optlen
-is the size of the array.
-The array is filled with the full membership set of the
-socket, and the required array size is returned in
-.IR optlen .
-.TP
-.BR NETLINK_BROADCAST_ERROR " (since Linux 2.6.30)"
-.\" commit be0c22a46cfb79ab2342bb28fde99afa94ef868e
-.\" Author: Pablo Neira Ayuso <pablo@netfilter.org>
-When not set,
-.B netlink_broadcast()
-only reports
-.B ESRCH
-errors and silently ignore
-.B ENOBUFS
-errors.
-.TP
-.BR NETLINK_NO_ENOBUFS " (since Linux 2.6.30)"
-.\" commit 38938bfe3489394e2eed5e40c9bb8f66a2ce1405
-.\" Author: Pablo Neira Ayuso <pablo@netfilter.org>
-This flag can be used by unicast and broadcast listeners to avoid receiving
-.B ENOBUFS
-errors.
-.TP
-.BR NETLINK_LISTEN_ALL_NSID " (since Linux 4.2)"
-.\" commit 59324cf35aba5336b611074028777838a963d03b
-.\" Author: Nicolas Dichtel <nicolas.dichtel@6wind.com>
-When set, this socket will receive netlink notifications from
-all network namespaces that have an
-.I nsid
-assigned into the network namespace where the socket has been opened.
-The
-.I nsid
-is sent to user space via an ancillary data.
-.TP
-.BR NETLINK_CAP_ACK " (since Linux 4.3)"
-.\" commit 0a6a3a23ea6efde079a5b77688541a98bf202721
-.\" Author: Christophe Ricard <christophe.ricard@gmail.com>
-The kernel may fail to allocate the necessary room for the acknowledgement
-message back to user space.
-This option trims off the payload of the original netlink message.
-The netlink message header is still included, so the user can guess from the
-sequence number which message triggered the acknowledgement.
-.SH VERSIONS
-The socket interface to netlink first appeared Linux 2.2.
-.PP
-Linux 2.0 supported a more primitive device-based netlink interface
-(which is still available as a compatibility option).
-This obsolete interface is not described here.
-.SH NOTES
-It is often better to use netlink via
-.I libnetlink
-or
-.I libnl
-than via the low-level kernel interface.
-.SH BUGS
-This manual page is not complete.
-.SH EXAMPLES
-The following example creates a
-.B NETLINK_ROUTE
-netlink socket which will listen to the
-.B RTMGRP_LINK
-(network interface create/delete/up/down events) and
-.B RTMGRP_IPV4_IFADDR
-(IPv4 addresses add/delete events) multicast groups.
-.PP
-.in +4n
-.EX
-struct sockaddr_nl sa;
-\&
-memset(&sa, 0, sizeof(sa));
-sa.nl_family = AF_NETLINK;
-sa.nl_groups = RTMGRP_LINK | RTMGRP_IPV4_IFADDR;
-\&
-fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
-bind(fd, (struct sockaddr *) &sa, sizeof(sa));
-.EE
-.in
-.PP
-The next example demonstrates how to send a netlink message to the
-kernel (pid 0).
-Note that the application must take care of message sequence numbers
-in order to reliably track acknowledgements.
-.PP
-.in +4n
-.EX
-struct nlmsghdr *nh; /* The nlmsghdr with payload to send */
-struct sockaddr_nl sa;
-struct iovec iov = { nh, nh\->nlmsg_len };
-struct msghdr msg;
-\&
-msg = { &sa, sizeof(sa), &iov, 1, NULL, 0, 0 };
-memset(&sa, 0, sizeof(sa));
-sa.nl_family = AF_NETLINK;
-nh\->nlmsg_pid = 0;
-nh\->nlmsg_seq = ++sequence_number;
-/* Request an ack from kernel by setting NLM_F_ACK */
-nh\->nlmsg_flags |= NLM_F_ACK;
-\&
-sendmsg(fd, &msg, 0);
-.EE
-.in
-.PP
-And the last example is about reading netlink message.
-.PP
-.in +4n
-.EX
-int len;
-/* 8192 to avoid message truncation on platforms with
- page size > 4096 */
-struct nlmsghdr buf[8192/sizeof(struct nlmsghdr)];
-struct iovec iov = { buf, sizeof(buf) };
-struct sockaddr_nl sa;
-struct msghdr msg;
-struct nlmsghdr *nh;
-\&
-msg = { &sa, sizeof(sa), &iov, 1, NULL, 0, 0 };
-len = recvmsg(fd, &msg, 0);
-\&
-for (nh = (struct nlmsghdr *) buf; NLMSG_OK (nh, len);
- nh = NLMSG_NEXT (nh, len)) {
- /* The end of multipart message */
- if (nh\->nlmsg_type == NLMSG_DONE)
- return;
-\&
- if (nh\->nlmsg_type == NLMSG_ERROR)
- /* Do some error handling */
- ...
-\&
- /* Continue with parsing payload */
- ...
-}
-.EE
-.in
-.SH SEE ALSO
-.BR cmsg (3),
-.BR netlink (3),
-.BR capabilities (7),
-.BR rtnetlink (7),
-.BR sock_diag (7)
-.PP
-.UR ftp://ftp.inr.ac.ru\:/ip\-routing\:/iproute2*
-information about libnetlink
-.UE
-.PP
-.UR http://www.infradead.org\:/\[ti]tgr\:/libnl/
-information about libnl
-.UE
-.PP
-RFC 3549 "Linux Netlink as an IP Services Protocol"
diff --git a/man7/network_namespaces.7 b/man7/network_namespaces.7
deleted file mode 100644
index a256be44a..000000000
--- a/man7/network_namespaces.7
+++ /dev/null
@@ -1,62 +0,0 @@
-.\" Copyright (c) 2017 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH network_namespaces 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-network_namespaces \- overview of Linux network namespaces
-.SH DESCRIPTION
-Network namespaces provide isolation of the system resources associated
-with networking: network devices, IPv4 and IPv6 protocol stacks,
-IP routing tables, firewall rules, the
-.I /proc/net
-directory (which is a symbolic link to
-.IR /proc/ pid /net ),
-the
-.I /sys/class/net
-directory, various files under
-.IR /proc/sys/net ,
-port numbers (sockets), and so on.
-In addition,
-network namespaces isolate the UNIX domain abstract socket namespace (see
-.BR unix (7)).
-.PP
-A physical network device can live in exactly one
-network namespace.
-When a network namespace is freed
-(i.e., when the last process in the namespace terminates),
-its physical network devices are moved back to the
-initial network namespace
-(not to the namespace of the parent of the process).
-.PP
-A virtual network
-.RB ( veth (4))
-device pair provides a pipe-like abstraction
-that can be used to create tunnels between network namespaces,
-and can be used to create a bridge to a physical network device
-in another namespace.
-When a namespace is freed, the
-.BR veth (4)
-devices that it contains are destroyed.
-.PP
-Use of network namespaces requires a kernel that is configured with the
-.B CONFIG_NET_NS
-option.
-.\" FIXME .SH EXAMPLES
-.SH SEE ALSO
-.BR nsenter (1),
-.BR unshare (1),
-.BR clone (2),
-.BR veth (4),
-.BR proc (5),
-.BR sysfs (5),
-.BR namespaces (7),
-.BR user_namespaces (7),
-.BR brctl (8),
-.BR ip (8),
-.BR ip\-address (8),
-.BR ip\-link (8),
-.BR ip\-netns (8),
-.BR iptables (8),
-.BR ovs\-vsctl (8)
diff --git a/man7/nptl.7 b/man7/nptl.7
deleted file mode 100644
index 240684e63..000000000
--- a/man7/nptl.7
+++ /dev/null
@@ -1,112 +0,0 @@
-.\" Copyright (c) 2015 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH nptl 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-nptl \- Native POSIX Threads Library
-.SH DESCRIPTION
-NPTL (Native POSIX Threads Library)
-is the GNU C library POSIX threads implementation that is used on modern
-Linux systems.
-.\"
-.SS NPTL and signals
-NPTL makes internal use of the first two real-time signals
-(signal numbers 32 and 33).
-One of these signals is used to support thread cancelation and POSIX timers
-(see
-.BR timer_create (2));
-the other is used as part of a mechanism that ensures all threads in
-a process always have the same UIDs and GIDs, as required by POSIX.
-These signals cannot be used in applications.
-.PP
-To prevent accidental use of these signals in applications,
-which might interfere with the operation of the NPTL implementation,
-various glibc library functions and system call wrapper functions
-attempt to hide these signals from applications,
-as follows:
-.IP \[bu] 3
-.B SIGRTMIN
-is defined with the value 34 (rather than 32).
-.IP \[bu]
-The
-.BR sigwaitinfo (2),
-.BR sigtimedwait (2),
-and
-.BR sigwait (3)
-interfaces silently ignore requests to wait for these two signals
-if they are specified in the signal set argument of these calls.
-.IP \[bu]
-The
-.BR sigprocmask (2)
-and
-.BR pthread_sigmask (3)
-interfaces silently ignore attempts to block these two signals.
-.IP \[bu]
-The
-.BR sigaction (2),
-.BR pthread_kill (3),
-and
-.BR pthread_sigqueue (3)
-interfaces fail with the error
-.B EINVAL
-(indicating an invalid signal number) if these signals are specified.
-.IP \[bu]
-.BR sigfillset (3)
-does not include these two signals when it creates a full signal set.
-.\"
-.SS NPTL and process credential changes
-At the Linux kernel level,
-credentials (user and group IDs) are a per-thread attribute.
-However, POSIX requires that all of the POSIX threads in a process
-have the same credentials.
-To accommodate this requirement,
-the NPTL implementation wraps all of the system calls that
-change process credentials with functions that,
-in addition to invoking the underlying system call,
-arrange for all other threads in the process to also change their credentials.
-.PP
-The implementation of each of these system calls involves the use of
-a real-time signal that is sent (using
-.BR tgkill (2))
-to each of the other threads that must change its credentials.
-Before sending these signals, the thread that is changing credentials
-saves the new credential(s) and records the system call being employed
-in a global buffer.
-A signal handler in the receiving thread(s) fetches this information and
-then uses the same system call to change its credentials.
-.PP
-Wrapper functions employing this technique are provided for
-.BR setgid (2),
-.BR setuid (2),
-.BR setegid (2),
-.BR seteuid (2),
-.BR setregid (2),
-.BR setreuid (2),
-.BR setresgid (2),
-.BR setresuid (2),
-and
-.BR setgroups (2).
-.\" FIXME .
-.\" Maybe say something about vfork() not being serialized wrt set*id() APIs?
-.\" https://sourceware.org/bugzilla/show_bug.cgi?id=14749
-.SH STANDARDS
-For details of the conformance of NPTL to the POSIX standard, see
-.BR pthreads (7).
-.SH NOTES
-POSIX says
-.\" See POSIX.1-2008 specification of pthread_mutexattr_init()
-that any thread in any process with access to the memory
-containing a process-shared
-.RB ( PTHREAD_PROCESS_SHARED )
-mutex can operate on that mutex.
-However, on 64-bit x86 systems, the mutex definition for x86-64
-is incompatible with the mutex definition for i386,
-.\" See sysdeps/x86/bits/pthreadtypes.h
-meaning that 32-bit and 64-bit binaries can't share mutexes on x86-64 systems.
-.SH SEE ALSO
-.BR credentials (7),
-.BR pthreads (7),
-.BR signal (7),
-.BR standards (7)
diff --git a/man7/numa.7 b/man7/numa.7
deleted file mode 100644
index 1f106bfcd..000000000
--- a/man7/numa.7
+++ /dev/null
@@ -1,170 +0,0 @@
-.\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\" and Copyright 2003,2004 Andi Kleen, SuSE Labs.
-.\" numa_maps material Copyright (c) 2005 Silicon Graphics Incorporated.
-.\" Christoph Lameter, <cl@linux-foundation.org>.
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH numa 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-numa \- overview of Non-Uniform Memory Architecture
-.SH DESCRIPTION
-Non-Uniform Memory Access (NUMA) refers to multiprocessor systems
-whose memory is divided into multiple memory nodes.
-The access time of a memory node depends on
-the relative locations of the accessing CPU and the accessed node.
-(This contrasts with a symmetric multiprocessor system,
-where the access time for all of the memory is the same for all CPUs.)
-Normally, each CPU on a NUMA system has a local memory node whose
-contents can be accessed faster than the memory in
-the node local to another CPU
-or the memory on a bus shared by all CPUs.
-.SS NUMA system calls
-The Linux kernel implements the following NUMA-related system calls:
-.BR get_mempolicy (2),
-.BR mbind (2),
-.BR migrate_pages (2),
-.BR move_pages (2),
-and
-.BR set_mempolicy (2).
-However, applications should normally use the interface provided by
-.IR libnuma ;
-see "Library Support" below.
-.SS \fI/proc/\fPpid\fI/numa_maps\fP (since Linux 2.6.14)
-.\" See also Changelog-2.6.14
-This file displays information about a process's
-NUMA memory policy and allocation.
-.PP
-Each line contains information about a memory range used by the process,
-displaying\[em]among other information\[em]the effective memory policy for
-that memory range and on which nodes the pages have been allocated.
-.PP
-.I numa_maps
-is a read-only file.
-When
-.IR /proc/ pid /numa_maps
-is read, the kernel will scan the virtual address space of the
-process and report how memory is used.
-One line is displayed for each unique memory range of the process.
-.PP
-The first field of each line shows the starting address of the memory range.
-This field allows a correlation with the contents of the
-.IR /proc/ pid /maps
-file,
-which contains the end address of the range and other information,
-such as the access permissions and sharing.
-.PP
-The second field shows the memory policy currently in effect for the
-memory range.
-Note that the effective policy is not necessarily the policy
-installed by the process for that memory range.
-Specifically, if the process installed a "default" policy for that range,
-the effective policy for that range will be the process policy,
-which may or may not be "default".
-.PP
-The rest of the line contains information about the pages allocated in
-the memory range, as follows:
-.TP
-.I N<node>=<nr_pages>
-The number of pages allocated on
-.IR <node> .
-.I <nr_pages>
-includes only pages currently mapped by the process.
-Page migration and memory reclaim may have temporarily unmapped pages
-associated with this memory range.
-These pages may show up again only after the process has
-attempted to reference them.
-If the memory range represents a shared memory area or file mapping,
-other processes may currently have additional pages mapped in a
-corresponding memory range.
-.TP
-.I file=<filename>
-The file backing the memory range.
-If the file is mapped as private, write accesses may have generated
-COW (Copy-On-Write) pages in this memory range.
-These pages are displayed as anonymous pages.
-.TP
-.I heap
-Memory range is used for the heap.
-.TP
-.I stack
-Memory range is used for the stack.
-.TP
-.I huge
-Huge memory range.
-The page counts shown are huge pages and not regular sized pages.
-.TP
-.I anon=<pages>
-The number of anonymous page in the range.
-.TP
-.I dirty=<pages>
-Number of dirty pages.
-.TP
-.I mapped=<pages>
-Total number of mapped pages, if different from
-.I dirty
-and
-.I anon
-pages.
-.TP
-.I mapmax=<count>
-Maximum mapcount (number of processes mapping a single page) encountered
-during the scan.
-This may be used as an indicator of the degree of sharing occurring in a
-given memory range.
-.TP
-.I swapcache=<count>
-Number of pages that have an associated entry on a swap device.
-.TP
-.I active=<pages>
-The number of pages on the active list.
-This field is shown only if different from the number of pages in this range.
-This means that some inactive pages exist in the memory range that may be
-removed from memory by the swapper soon.
-.TP
-.I writeback=<pages>
-Number of pages that are currently being written out to disk.
-.SH STANDARDS
-None.
-.SH NOTES
-The Linux NUMA system calls and
-.I /proc
-interface are available only
-if the kernel was configured and built with the
-.B CONFIG_NUMA
-option.
-.SS Library support
-Link with \fI\-lnuma\fP
-to get the system call definitions.
-.I libnuma
-and the required
-.I <numaif.h>
-header are available in the
-.I numactl
-package.
-.PP
-However, applications should not use these system calls directly.
-Instead, the higher level interface provided by the
-.BR numa (3)
-functions in the
-.I numactl
-package is recommended.
-The
-.I numactl
-package is available at
-.UR ftp://oss.sgi.com\:/www\:/projects\:/libnuma\:/download/
-.UE .
-The package is also included in some Linux distributions.
-Some distributions include the development library and header
-in the separate
-.I numactl\-devel
-package.
-.SH SEE ALSO
-.BR get_mempolicy (2),
-.BR mbind (2),
-.BR move_pages (2),
-.BR set_mempolicy (2),
-.BR numa (3),
-.BR cpuset (7),
-.BR numactl (8)
diff --git a/man7/operator.7 b/man7/operator.7
deleted file mode 100644
index 03d9540c1..000000000
--- a/man7/operator.7
+++ /dev/null
@@ -1,54 +0,0 @@
-'\" t
-.\" Copyright (c) 1989, 1990, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-3-Clause
-.\"
-.\" @(#)operator.7 8.1 (Berkeley) 6/9/93
-.\"
-.\" Copied shamelessly from FreeBSD with minor changes. 2003-05-21
-.\" Brian M. Carlson <sandals@crustytoothpaste.ath.cx>
-.\"
-.\" Restored automatic formatting from FreeBSD. 2003-08-24
-.\" Martin Schulze <joey@infodrom.org>
-.\"
-.\" 2007-12-08, mtk, Converted from mdoc to man macros
-.\"
-.TH operator 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-operator \- C operator precedence and order of evaluation
-.SH DESCRIPTION
-This manual page lists C operators and their precedence in evaluation.
-.PP
-.TS
-lb lb lb
-l l l.
-Operator Associativity Notes
-[] () . \-> ++ \-\- left to right [1]
-++ \-\- & * + \- \[ti] ! sizeof right to left [2]
-(type) right to left
-* / % left to right
-+ \- left to right
-<< >> left to right
-< > <= >= left to right
-== != left to right
-& left to right
-\[ha] left to right
-| left to right
-&& left to right
-|| left to right
-?: right to left
-= *= /= %= += \-= <<= >>= &= \[ha]= |= right to left
-, left to right
-.TE
-.PP
-The following notes provide further information to the above table:
-.PP
-.PD 0
-.IP [1] 4
-The ++ and \-\- operators at this precedence level are
-the postfix flavors of the operators.
-.IP [2]
-The ++ and \-\- operators at this precedence level are
-the prefix flavors of the operators.
-.PD
diff --git a/man7/packet.7 b/man7/packet.7
deleted file mode 100644
index 8eb3f56a3..000000000
--- a/man7/packet.7
+++ /dev/null
@@ -1,699 +0,0 @@
-.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
-.\"
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" $Id: packet.7,v 1.13 2000/08/14 08:03:45 ak Exp $
-.\"
-.TH packet 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-packet \- packet interface on device level
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.B #include <linux/if_packet.h>
-.B #include <net/ethernet.h> /* the L2 protocols */
-.PP
-.BI "packet_socket = socket(AF_PACKET, int " socket_type ", int "protocol );
-.fi
-.SH DESCRIPTION
-Packet sockets are used to receive or send raw packets at the device driver
-(OSI Layer 2) level.
-They allow the user to implement protocol modules in user space
-on top of the physical layer.
-.PP
-The
-.I socket_type
-is either
-.B SOCK_RAW
-for raw packets including the link-level header or
-.B SOCK_DGRAM
-for cooked packets with the link-level header removed.
-The link-level header information is available in a common format in a
-.I sockaddr_ll
-structure.
-.I protocol
-is the IEEE 802.3 protocol number in network byte order.
-See the
-.I <linux/if_ether.h>
-include file for a list of allowed protocols.
-When protocol
-is set to
-.BR htons(ETH_P_ALL) ,
-then all protocols are received.
-All incoming packets of that protocol type will be passed to the packet
-socket before they are passed to the protocols implemented in the kernel.
-If
-.I protocol
-is set to zero,
-no packets are received.
-.BR bind (2)
-can optionally be called with a nonzero
-.I sll_protocol
-to start receiving packets for the protocols specified.
-.PP
-In order to create a packet socket, a process must have the
-.B CAP_NET_RAW
-capability in the user namespace that governs its network namespace.
-.PP
-.B SOCK_RAW
-packets are passed to and from the device driver without any changes in
-the packet data.
-When receiving a packet, the address is still parsed and
-passed in a standard
-.I sockaddr_ll
-address structure.
-When transmitting a packet, the user-supplied buffer
-should contain the physical-layer header.
-That packet is then
-queued unmodified to the network driver of the interface defined by the
-destination address.
-Some device drivers always add other headers.
-.B SOCK_RAW
-is similar to but not compatible with the obsolete
-.B AF_INET/SOCK_PACKET
-of Linux 2.0.
-.PP
-.B SOCK_DGRAM
-operates on a slightly higher level.
-The physical header is removed before the packet is passed to the user.
-Packets sent through a
-.B SOCK_DGRAM
-packet socket get a suitable physical-layer header based on the
-information in the
-.I sockaddr_ll
-destination address before they are queued.
-.PP
-By default, all packets of the specified protocol type
-are passed to a packet socket.
-To get packets only from a specific interface use
-.BR bind (2)
-specifying an address in a
-.I struct sockaddr_ll
-to bind the packet socket to an interface.
-Fields used for binding are
-.I sll_family
-(should be
-.BR AF_PACKET ),
-.IR sll_protocol ,
-and
-.IR sll_ifindex .
-.PP
-The
-.BR connect (2)
-operation is not supported on packet sockets.
-.PP
-When the
-.B MSG_TRUNC
-flag is passed to
-.BR recvmsg (2),
-.BR recv (2),
-or
-.BR recvfrom (2),
-the real length of the packet on the wire is always returned,
-even when it is longer than the buffer.
-.SS Address types
-The
-.I sockaddr_ll
-structure is a device-independent physical-layer address.
-.PP
-.in +4n
-.EX
-struct sockaddr_ll {
- unsigned short sll_family; /* Always AF_PACKET */
- unsigned short sll_protocol; /* Physical\-layer protocol */
- int sll_ifindex; /* Interface number */
- unsigned short sll_hatype; /* ARP hardware type */
- unsigned char sll_pkttype; /* Packet type */
- unsigned char sll_halen; /* Length of address */
- unsigned char sll_addr[8]; /* Physical\-layer address */
-};
-.EE
-.in
-.PP
-The fields of this structure are as follows:
-.TP
-.I sll_protocol
-is the standard ethernet protocol type in network byte order as defined
-in the
-.I <linux/if_ether.h>
-include file.
-It defaults to the socket's protocol.
-.TP
-.I sll_ifindex
-is the interface index of the interface
-(see
-.BR netdevice (7));
-0 matches any interface (only permitted for binding).
-.I sll_hatype
-is an ARP type as defined in the
-.I <linux/if_arp.h>
-include file.
-.TP
-.I sll_pkttype
-contains the packet type.
-Valid types are
-.B PACKET_HOST
-for a packet addressed to the local host,
-.B PACKET_BROADCAST
-for a physical-layer broadcast packet,
-.B PACKET_MULTICAST
-for a packet sent to a physical-layer multicast address,
-.B PACKET_OTHERHOST
-for a packet to some other host that has been caught by a device driver
-in promiscuous mode, and
-.B PACKET_OUTGOING
-for a packet originating from the local host that is looped back to a packet
-socket.
-These types make sense only for receiving.
-.TP
-.I sll_addr
-.TQ
-.I sll_halen
-contain the physical-layer (e.g., IEEE 802.3) address and its length.
-The exact interpretation depends on the device.
-.PP
-When you send packets, it is enough to specify
-.IR sll_family ,
-.IR sll_addr ,
-.IR sll_halen ,
-.IR sll_ifindex ,
-and
-.IR sll_protocol .
-The other fields should be 0.
-.I sll_hatype
-and
-.I sll_pkttype
-are set on received packets for your information.
-.SS Socket options
-Packet socket options are configured by calling
-.BR setsockopt (2)
-with level
-.BR SOL_PACKET .
-.TP
-.B PACKET_ADD_MEMBERSHIP
-.PD 0
-.TP
-.B PACKET_DROP_MEMBERSHIP
-.PD
-Packet sockets can be used to configure physical-layer multicasting
-and promiscuous mode.
-.B PACKET_ADD_MEMBERSHIP
-adds a binding and
-.B PACKET_DROP_MEMBERSHIP
-drops it.
-They both expect a
-.I packet_mreq
-structure as argument:
-.IP
-.in +4n
-.EX
-struct packet_mreq {
- int mr_ifindex; /* interface index */
- unsigned short mr_type; /* action */
- unsigned short mr_alen; /* address length */
- unsigned char mr_address[8]; /* physical\-layer address */
-};
-.EE
-.in
-.IP
-.I mr_ifindex
-contains the interface index for the interface whose status
-should be changed.
-The
-.I mr_type
-field specifies which action to perform.
-.B PACKET_MR_PROMISC
-enables receiving all packets on a shared medium (often known as
-"promiscuous mode"),
-.B PACKET_MR_MULTICAST
-binds the socket to the physical-layer multicast group specified in
-.I mr_address
-and
-.IR mr_alen ,
-and
-.B PACKET_MR_ALLMULTI
-sets the socket up to receive all multicast packets arriving at
-the interface.
-.IP
-In addition, the traditional ioctls
-.BR SIOCSIFFLAGS ,
-.BR SIOCADDMULTI ,
-.B SIOCDELMULTI
-can be used for the same purpose.
-.TP
-.BR PACKET_AUXDATA " (since Linux 2.6.21)"
-.\" commit 8dc4194474159660d7f37c495e3fc3f10d0db8cc
-If this binary option is enabled, the packet socket passes a metadata
-structure along with each packet in the
-.BR recvmsg (2)
-control field.
-The structure can be read with
-.BR cmsg (3).
-It is defined as
-.IP
-.in +4n
-.EX
-struct tpacket_auxdata {
- __u32 tp_status;
- __u32 tp_len; /* packet length */
- __u32 tp_snaplen; /* captured length */
- __u16 tp_mac;
- __u16 tp_net;
- __u16 tp_vlan_tci;
- __u16 tp_vlan_tpid; /* Since Linux 3.14; earlier, these
- were unused padding bytes */
-.\" commit a0cdfcf39362410d5ea983f4daf67b38de129408 added tp_vlan_tpid
-};
-.EE
-.in
-.TP
-.BR PACKET_FANOUT " (since Linux 3.1)"
-.\" commit dc99f600698dcac69b8f56dda9a8a00d645c5ffc
-To scale processing across threads, packet sockets can form a fanout
-group.
-In this mode, each matching packet is enqueued onto only one
-socket in the group.
-A socket joins a fanout group by calling
-.BR setsockopt (2)
-with level
-.B SOL_PACKET
-and option
-.BR PACKET_FANOUT .
-Each network namespace can have up to 65536 independent groups.
-A socket selects a group by encoding the ID in the first 16 bits of
-the integer option value.
-The first packet socket to join a group implicitly creates it.
-To successfully join an existing group, subsequent packet sockets
-must have the same protocol, device settings, fanout mode, and
-flags (see below).
-Packet sockets can leave a fanout group only by closing the socket.
-The group is deleted when the last socket is closed.
-.IP
-Fanout supports multiple algorithms to spread traffic between sockets,
-as follows:
-.RS
-.IP \[bu] 3
-The default mode,
-.BR PACKET_FANOUT_HASH ,
-sends packets from the same flow to the same socket to maintain
-per-flow ordering.
-For each packet, it chooses a socket by taking the packet flow hash
-modulo the number of sockets in the group, where a flow hash is a hash
-over network-layer address and optional transport-layer port fields.
-.IP \[bu]
-The load-balance mode
-.B PACKET_FANOUT_LB
-implements a round-robin algorithm.
-.IP \[bu]
-.B PACKET_FANOUT_CPU
-selects the socket based on the CPU that the packet arrived on.
-.IP \[bu]
-.B PACKET_FANOUT_ROLLOVER
-processes all data on a single socket, moving to the next when one
-becomes backlogged.
-.IP \[bu]
-.B PACKET_FANOUT_RND
-selects the socket using a pseudo-random number generator.
-.IP \[bu]
-.B PACKET_FANOUT_QM
-.\" commit 2d36097d26b5991d71a2cf4a20c1a158f0f1bfcd
-(available since Linux 3.14)
-selects the socket using the recorded queue_mapping of the received skb.
-.RE
-.IP
-Fanout modes can take additional options.
-IP fragmentation causes packets from the same flow to have different
-flow hashes.
-The flag
-.BR PACKET_FANOUT_FLAG_DEFRAG ,
-if set, causes packets to be defragmented before fanout is applied, to
-preserve order even in this case.
-Fanout mode and options are communicated in the second 16 bits of the
-integer option value.
-The flag
-.B PACKET_FANOUT_FLAG_ROLLOVER
-enables the roll over mechanism as a backup strategy: if the
-original fanout algorithm selects a backlogged socket, the packet
-rolls over to the next available one.
-.TP
-.BR PACKET_LOSS " (with " PACKET_TX_RING )
-When a malformed packet is encountered on a transmit ring,
-the default is to reset its
-.I tp_status
-to
-.B TP_STATUS_WRONG_FORMAT
-and abort the transmission immediately.
-The malformed packet blocks itself and subsequently enqueued packets from
-being sent.
-The format error must be fixed, the associated
-.I tp_status
-reset to
-.BR TP_STATUS_SEND_REQUEST ,
-and the transmission process restarted via
-.BR send (2).
-However, if
-.B PACKET_LOSS
-is set, any malformed packet will be skipped, its
-.I tp_status
-reset to
-.BR TP_STATUS_AVAILABLE ,
-and the transmission process continued.
-.TP
-.BR PACKET_RESERVE " (with " PACKET_RX_RING )
-By default, a packet receive ring writes packets immediately following the
-metadata structure and alignment padding.
-This integer option reserves additional headroom.
-.TP
-.B PACKET_RX_RING
-Create a memory-mapped ring buffer for asynchronous packet reception.
-The packet socket reserves a contiguous region of application address
-space, lays it out into an array of packet slots and copies packets
-(up to
-.IR tp_snaplen )
-into subsequent slots.
-Each packet is preceded by a metadata structure similar to
-.IR tpacket_auxdata .
-The protocol fields encode the offset to the data
-from the start of the metadata header.
-.I tp_net
-stores the offset to the network layer.
-If the packet socket is of type
-.BR SOCK_DGRAM ,
-then
-.I tp_mac
-is the same.
-If it is of type
-.BR SOCK_RAW ,
-then that field stores the offset to the link-layer frame.
-Packet socket and application communicate the head and tail of the ring
-through the
-.I tp_status
-field.
-The packet socket owns all slots with
-.I tp_status
-equal to
-.BR TP_STATUS_KERNEL .
-After filling a slot, it changes the status of the slot to transfer
-ownership to the application.
-During normal operation, the new
-.I tp_status
-value has at least the
-.B TP_STATUS_USER
-bit set to signal that a received packet has been stored.
-When the application has finished processing a packet, it transfers
-ownership of the slot back to the socket by setting
-.I tp_status
-equal to
-.BR TP_STATUS_KERNEL .
-.IP
-Packet sockets implement multiple variants of the packet ring.
-The implementation details are described in
-.I Documentation/networking/packet_mmap.rst
-in the Linux kernel source tree.
-.TP
-.B PACKET_STATISTICS
-Retrieve packet socket statistics in the form of a structure
-.IP
-.in +4n
-.EX
-struct tpacket_stats {
- unsigned int tp_packets; /* Total packet count */
- unsigned int tp_drops; /* Dropped packet count */
-};
-.EE
-.in
-.IP
-Receiving statistics resets the internal counters.
-The statistics structure differs when using a ring of variant
-.BR TPACKET_V3 .
-.TP
-.BR PACKET_TIMESTAMP " (with " PACKET_RX_RING "; since Linux 2.6.36)"
-.\" commit 614f60fa9d73a9e8fdff3df83381907fea7c5649
-The packet receive ring always stores a timestamp in the metadata header.
-By default, this is a software generated timestamp generated when the
-packet is copied into the ring.
-This integer option selects the type of timestamp.
-Besides the default, it support the two hardware formats described in
-.I Documentation/networking/timestamping.rst
-in the Linux kernel source tree.
-.TP
-.BR PACKET_TX_RING " (since Linux 2.6.31)"
-.\" commit 69e3c75f4d541a6eb151b3ef91f34033cb3ad6e1
-Create a memory-mapped ring buffer for packet transmission.
-This option is similar to
-.B PACKET_RX_RING
-and takes the same arguments.
-The application writes packets into slots with
-.I tp_status
-equal to
-.B TP_STATUS_AVAILABLE
-and schedules them for transmission by changing
-.I tp_status
-to
-.BR TP_STATUS_SEND_REQUEST .
-When packets are ready to be transmitted, the application calls
-.BR send (2)
-or a variant thereof.
-The
-.I buf
-and
-.I len
-fields of this call are ignored.
-If an address is passed using
-.BR sendto (2)
-or
-.BR sendmsg (2),
-then that overrides the socket default.
-On successful transmission, the socket resets
-.I tp_status
-to
-.BR TP_STATUS_AVAILABLE .
-It immediately aborts the transmission on error unless
-.B PACKET_LOSS
-is set.
-.TP
-.BR PACKET_VERSION " (with " PACKET_RX_RING "; since Linux 2.6.27)"
-.\" commit bbd6ef87c544d88c30e4b762b1b61ef267a7d279
-By default,
-.B PACKET_RX_RING
-creates a packet receive ring of variant
-.BR TPACKET_V1 .
-To create another variant, configure the desired variant by setting this
-integer option before creating the ring.
-.TP
-.BR PACKET_QDISC_BYPASS " (since Linux 3.14)"
-.\" commit d346a3fae3ff1d99f5d0c819bf86edf9094a26a1
-By default, packets sent through packet sockets pass through the kernel's
-qdisc (traffic control) layer, which is fine for the vast majority of use
-cases.
-For traffic generator appliances using packet sockets
-that intend to brute-force flood the network\[em]for example,
-to test devices under load in a similar
-fashion to pktgen\[em]this layer can be bypassed by setting
-this integer option to 1.
-A side effect is that packet buffering in the qdisc layer is avoided,
-which will lead to increased drops when network
-device transmit queues are busy;
-therefore, use at your own risk.
-.SS Ioctls
-.B SIOCGSTAMP
-can be used to receive the timestamp of the last received packet.
-Argument is a
-.I struct timeval
-variable.
-.\" FIXME Document SIOCGSTAMPNS
-.PP
-In addition, all standard ioctls defined in
-.BR netdevice (7)
-and
-.BR socket (7)
-are valid on packet sockets.
-.SS Error handling
-Packet sockets do no error handling other than errors occurred
-while passing the packet to the device driver.
-They don't have the concept of a pending error.
-.SH ERRORS
-.TP
-.B EADDRNOTAVAIL
-Unknown multicast group address passed.
-.TP
-.B EFAULT
-User passed invalid memory address.
-.TP
-.B EINVAL
-Invalid argument.
-.TP
-.B EMSGSIZE
-Packet is bigger than interface MTU.
-.TP
-.B ENETDOWN
-Interface is not up.
-.TP
-.B ENOBUFS
-Not enough memory to allocate the packet.
-.TP
-.B ENODEV
-Unknown device name or interface index specified in interface address.
-.TP
-.B ENOENT
-No packet received.
-.TP
-.B ENOTCONN
-No interface address passed.
-.TP
-.B ENXIO
-Interface address contained an invalid interface index.
-.TP
-.B EPERM
-User has insufficient privileges to carry out this operation.
-.PP
-In addition, other errors may be generated by the low-level driver.
-.SH VERSIONS
-.B AF_PACKET
-is a new feature in Linux 2.2.
-Earlier Linux versions supported only
-.BR SOCK_PACKET .
-.SH NOTES
-For portable programs it is suggested to use
-.B AF_PACKET
-via
-.BR pcap (3);
-although this covers only a subset of the
-.B AF_PACKET
-features.
-.PP
-The
-.B SOCK_DGRAM
-packet sockets make no attempt to create or parse the IEEE 802.2 LLC
-header for a IEEE 802.3 frame.
-When
-.B ETH_P_802_3
-is specified as protocol for sending the kernel creates the
-802.3 frame and fills out the length field; the user has to supply the LLC
-header to get a fully conforming packet.
-Incoming 802.3 packets are not multiplexed on the DSAP/SSAP protocol
-fields; instead they are supplied to the user as protocol
-.B ETH_P_802_2
-with the LLC header prefixed.
-It is thus not possible to bind to
-.BR ETH_P_802_3 ;
-bind to
-.B ETH_P_802_2
-instead and do the protocol multiplex yourself.
-The default for sending is the standard Ethernet DIX
-encapsulation with the protocol filled in.
-.PP
-Packet sockets are not subject to the input or output firewall chains.
-.SS Compatibility
-In Linux 2.0, the only way to get a packet socket was with the call:
-.PP
-.in +4n
-.EX
-socket(AF_INET, SOCK_PACKET, protocol)
-.EE
-.in
-.PP
-This is still supported, but deprecated and strongly discouraged.
-The main difference between the two methods is that
-.B SOCK_PACKET
-uses the old
-.I struct sockaddr_pkt
-to specify an interface, which doesn't provide physical-layer
-independence.
-.PP
-.in +4n
-.EX
-struct sockaddr_pkt {
- unsigned short spkt_family;
- unsigned char spkt_device[14];
- unsigned short spkt_protocol;
-};
-.EE
-.in
-.PP
-.I spkt_family
-contains
-the device type,
-.I spkt_protocol
-is the IEEE 802.3 protocol type as defined in
-.I <sys/if_ether.h>
-and
-.I spkt_device
-is the device name as a null-terminated string, for example, eth0.
-.PP
-This structure is obsolete and should not be used in new code.
-.SH BUGS
-.SS LLC header handling
-The IEEE 802.2/803.3 LLC handling could be considered as a bug.
-.SS MSG_TRUNC issues
-The
-.B MSG_TRUNC
-.BR recvmsg (2)
-extension is an ugly hack and should be replaced by a control message.
-There is currently no way to get the original destination address of
-packets via
-.BR SOCK_DGRAM .
-.SS spkt_device device name truncation
-The
-.I spkt_device
-field of
-.I sockaddr_pkt
-has a size of 14 bytes,
-which is less than the constant
-.B IFNAMSIZ
-defined in
-.I <net/if.h>
-which is 16 bytes and describes the system limit for a network interface name.
-This means the names of network devices longer than 14 bytes
-will be truncated to fit into
-.IR spkt_device .
-All these lengths include the terminating null byte (\[aq]\e0\[aq])).
-.PP
-Issues from this with old code typically show up with
-very long interface names used by the
-.B Predictable Network Interface Names
-feature enabled by default in many modern Linux distributions.
-.PP
-The preferred solution is to rewrite code to avoid
-.BR SOCK_PACKET .
-Possible user solutions are to disable
-.B Predictable Network Interface Names
-or to rename the interface to a name of at most 13 bytes,
-for example using the
-.BR ip (8)
-tool.
-.SS Documentation issues
-Socket filters are not documented.
-.\" .SH CREDITS
-.\" This man page was written by Andi Kleen with help from Matthew Wilcox.
-.\" AF_PACKET in Linux 2.2 was implemented
-.\" by Alexey Kuznetsov, based on code by Alan Cox and others.
-.SH SEE ALSO
-.BR socket (2),
-.BR pcap (3),
-.BR capabilities (7),
-.BR ip (7),
-.BR raw (7),
-.BR socket (7),
-.BR ip (8),
-.PP
-RFC\ 894 for the standard IP Ethernet encapsulation.
-RFC\ 1700 for the IEEE 802.3 IP encapsulation.
-.PP
-The
-.I <linux/if_ether.h>
-include file for physical-layer protocols.
-.PP
-The Linux kernel source tree.
-.I Documentation/networking/filter.rst
-describes how to apply Berkeley Packet Filters to packet sockets.
-.I tools/testing/selftests/net/psock_tpacket.c
-contains example source code for all available versions of
-.B PACKET_RX_RING
-and
-.BR PACKET_TX_RING .
diff --git a/man7/path_resolution.7 b/man7/path_resolution.7
deleted file mode 100644
index 74edb6b5f..000000000
--- a/man7/path_resolution.7
+++ /dev/null
@@ -1,264 +0,0 @@
-.\" Copyright (C) 2003 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH path_resolution 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-path_resolution \- how a pathname is resolved to a file
-.SH DESCRIPTION
-Some UNIX/Linux system calls have as parameter one or more filenames.
-A filename (or pathname) is resolved as follows.
-.SS Step 1: start of the resolution process
-If the pathname starts with the \[aq]/\[aq] character, the starting lookup
-directory is the root directory of the calling process.
-A process inherits its root directory from its parent.
-Usually this will be the root directory of the file hierarchy.
-A process may get a different root directory by use of the
-.BR chroot (2)
-system call, or may temporarily use a different root directory by using
-.BR openat2 (2)
-with the
-.B RESOLVE_IN_ROOT
-flag set.
-.PP
-A process may get an entirely private mount namespace in case
-it\[em]or one of its ancestors\[em]was started by an invocation of the
-.BR clone (2)
-system call that had the
-.B CLONE_NEWNS
-flag set.
-This handles the \[aq]/\[aq] part of the pathname.
-.PP
-If the pathname does not start with the \[aq]/\[aq] character, the starting
-lookup directory of the resolution process is the current working directory of
-the process \[em] or in the case of
-.BR openat (2)-style
-system calls, the
-.I dfd
-argument (or the current working directory if
-.B AT_FDCWD
-is passed as the
-.I dfd
-argument).
-The current working directory is inherited from the parent, and can
-be changed by use of the
-.BR chdir (2)
-system call.
-.PP
-Pathnames starting with a \[aq]/\[aq] character are called absolute pathnames.
-Pathnames not starting with a \[aq]/\[aq] are called relative pathnames.
-.SS Step 2: walk along the path
-Set the current lookup directory to the starting lookup directory.
-Now, for each nonfinal component of the pathname, where a component
-is a substring delimited by \[aq]/\[aq] characters, this component is looked up
-in the current lookup directory.
-.PP
-If the process does not have search permission on
-the current lookup directory,
-an
-.B EACCES
-error is returned ("Permission denied").
-.PP
-If the component is not found, an
-.B ENOENT
-error is returned
-("No such file or directory").
-.PP
-If the component is found, but is neither a directory nor a symbolic link,
-an
-.B ENOTDIR
-error is returned ("Not a directory").
-.PP
-If the component is found and is a directory, we set the
-current lookup directory to that directory, and go to the
-next component.
-.PP
-If the component is found and is a symbolic link,
-we first resolve this symbolic link
-(with the current lookup directory
-as starting lookup directory).
-Upon error, that error is returned.
-If the result is not a directory, an
-.B ENOTDIR
-error is returned.
-If the resolution of the symbolic link is successful and returns a directory,
-we set the current lookup directory to that directory, and go to
-the next component.
-Note that the resolution process here can involve recursion if the
-prefix ('dirname') component of a pathname contains a filename
-that is a symbolic link that resolves to a directory (where the
-prefix component of that directory may contain a symbolic link, and so on).
-In order to protect the kernel against stack overflow, and also
-to protect against denial of service, there are limits on the
-maximum recursion depth, and on the maximum number of symbolic links
-followed.
-An
-.B ELOOP
-error is returned when the maximum is
-exceeded ("Too many levels of symbolic links").
-.PP
-.\"
-.\" presently: max recursion depth during symlink resolution: 5
-.\" max total number of symbolic links followed: 40
-.\" _POSIX_SYMLOOP_MAX is 8
-As currently implemented on Linux, the maximum number
-.\" MAXSYMLINKS is 40
-of symbolic links that will be followed while resolving a pathname is 40.
-Before Linux 2.6.18, the limit on the recursion depth was 5.
-Starting with Linux 2.6.18, this limit
-.\" MAX_NESTED_LINKS
-was raised to 8.
-In Linux 4.2,
-.\" commit 894bc8c4662ba9daceafe943a5ba0dd407da5cd3
-the kernel's pathname-resolution code
-was reworked to eliminate the use of recursion,
-so that the only limit that remains is the maximum of 40
-resolutions for the entire pathname.
-.PP
-The resolution of symbolic links during this stage can be blocked by using
-.BR openat2 (2),
-with the
-.B RESOLVE_NO_SYMLINKS
-flag set.
-.SS Step 3: find the final entry
-The lookup of the final component of the pathname goes just like
-that of all other components, as described in the previous step,
-with two differences: (i) the final component need not be a
-directory (at least as far as the path resolution process is
-concerned\[em]it may have to be a directory, or a nondirectory, because of
-the requirements of the specific system call), and (ii) it
-is not necessarily an error if the component is not found\[em]maybe
-we are just creating it.
-The details on the treatment
-of the final entry are described in the manual pages of the specific
-system calls.
-.SS . and ..
-By convention, every directory has the entries "." and "..",
-which refer to the directory itself and to its parent directory,
-respectively.
-.PP
-The path resolution process will assume that these entries have
-their conventional meanings, regardless of whether they are
-actually present in the physical filesystem.
-.PP
-One cannot walk up past the root: "/.." is the same as "/".
-.SS Mount points
-After a
-.I mount dev path
-command, the pathname "path" refers to
-the root of the filesystem hierarchy on the device "dev", and no
-longer to whatever it referred to earlier.
-.PP
-One can walk out of a mounted filesystem: "path/.." refers to
-the parent directory of "path",
-outside of the filesystem hierarchy on "dev".
-.PP
-Traversal of mount points can be blocked by using
-.BR openat2 (2),
-with the
-.B RESOLVE_NO_XDEV
-flag set (though note that this also restricts bind mount traversal).
-.SS Trailing slashes
-If a pathname ends in a \[aq]/\[aq], that forces resolution of the preceding
-component as in Step 2:
-the component preceding the slash either exists and resolves to a directory
-or it names a directory that is to be created
-immediately after the pathname is resolved.
-Otherwise, a trailing \[aq]/\[aq] is ignored.
-.SS Final symbolic link
-If the last component of a pathname is a symbolic link, then it
-depends on the system call whether the file referred to will be
-the symbolic link or the result of path resolution on its contents.
-For example, the system call
-.BR lstat (2)
-will operate on the symbolic link,
-while
-.BR stat (2)
-operates on the file pointed to by the symbolic link.
-.SS Length limit
-There is a maximum length for pathnames.
-If the pathname (or some
-intermediate pathname obtained while resolving symbolic links)
-is too long, an
-.B ENAMETOOLONG
-error is returned ("Filename too long").
-.SS Empty pathname
-In the original UNIX, the empty pathname referred to the current directory.
-Nowadays POSIX decrees that an empty pathname must not be resolved
-successfully.
-Linux returns
-.B ENOENT
-in this case.
-.SS Permissions
-The permission bits of a file consist of three groups of three bits; see
-.BR chmod (1)
-and
-.BR stat (2).
-The first group of three is used when the effective user ID of
-the calling process equals the owner ID of the file.
-The second group
-of three is used when the group ID of the file either equals the
-effective group ID of the calling process, or is one of the
-supplementary group IDs of the calling process (as set by
-.BR setgroups (2)).
-When neither holds, the third group is used.
-.PP
-Of the three bits used, the first bit determines read permission,
-the second write permission, and the last execute permission
-in case of ordinary files, or search permission in case of directories.
-.PP
-Linux uses the fsuid instead of the effective user ID in permission checks.
-Ordinarily the fsuid will equal the effective user ID, but the fsuid can be
-changed by the system call
-.BR setfsuid (2).
-.PP
-(Here "fsuid" stands for something like "filesystem user ID".
-The concept was required for the implementation of a user space
-NFS server at a time when processes could send a signal to a process
-with the same effective user ID.
-It is obsolete now.
-Nobody should use
-.BR setfsuid (2).)
-.PP
-Similarly, Linux uses the fsgid ("filesystem group ID")
-instead of the effective group ID.
-See
-.BR setfsgid (2).
-.\" FIXME . say something about filesystem mounted read-only ?
-.SS Bypassing permission checks: superuser and capabilities
-On a traditional UNIX system, the superuser
-.RI ( root ,
-user ID 0) is all-powerful, and bypasses all permissions restrictions
-when accessing files.
-.\" (but for exec at least one x bit must be set) -- AEB
-.\" but there is variation across systems on this point: for
-.\" example, HP-UX and Tru64 are as described by AEB. However,
-.\" on some implementations (e.g., Solaris, FreeBSD),
-.\" access(X_OK) by superuser will report success, regardless
-.\" of the file's execute permission bits. -- MTK (Oct 05)
-.PP
-On Linux, superuser privileges are divided into capabilities (see
-.BR capabilities (7)).
-Two capabilities are relevant for file permissions checks:
-.B CAP_DAC_OVERRIDE
-and
-.BR CAP_DAC_READ_SEARCH .
-(A process has these capabilities if its fsuid is 0.)
-.PP
-The
-.B CAP_DAC_OVERRIDE
-capability overrides all permission checking,
-but grants execute permission only when at least one
-of the file's three execute permission bits is set.
-.PP
-The
-.B CAP_DAC_READ_SEARCH
-capability grants read and search permission
-on directories, and read permission on ordinary files.
-.\" FIXME . say something about immutable files
-.\" FIXME . say something about ACLs
-.SH SEE ALSO
-.BR readlink (2),
-.BR capabilities (7),
-.BR credentials (7),
-.BR symlink (7)
diff --git a/man7/persistent-keyring.7 b/man7/persistent-keyring.7
deleted file mode 100644
index bf3e33ef5..000000000
--- a/man7/persistent-keyring.7
+++ /dev/null
@@ -1,124 +0,0 @@
-.\" Copyright (C) 2014 Red Hat, Inc. All Rights Reserved.
-.\" Written by David Howells (dhowells@redhat.com)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH persistent-keyring 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-persistent-keyring \- per-user persistent keyring
-.SH DESCRIPTION
-The persistent keyring is a keyring used to anchor keys on behalf of a user.
-Each UID the kernel deals with has its own persistent keyring that
-is shared between all threads owned by that UID.
-The persistent keyring has a name (description) of the form
-.I _persistent.<UID>
-where
-.I <UID>
-is the user ID of the corresponding user.
-.PP
-The persistent keyring may not be accessed directly,
-even by processes with the appropriate UID.
-.\" FIXME The meaning of the preceding sentence isn't clear. What is meant?
-Instead, it must first be linked to one of a process's keyrings,
-before that keyring can access the persistent keyring
-by virtue of its possessor permits.
-This linking is done with the
-.BR keyctl_get_persistent (3)
-function.
-.PP
-If a persistent keyring does not exist when it is accessed by the
-.BR keyctl_get_persistent (3)
-operation, it will be automatically created.
-.PP
-Each time the
-.BR keyctl_get_persistent (3)
-operation is performed,
-the persistent keyring's expiration timer is reset to the value in:
-.PP
-.in +4n
-.EX
-/proc/sys/kernel/keys/persistent_keyring_expiry
-.EE
-.in
-.PP
-Should the timeout be reached,
-the persistent keyring will be removed and
-everything it pins can then be garbage collected.
-The keyring will then be re-created on a subsequent call to
-.BR keyctl_get_persistent (3).
-.PP
-The persistent keyring is not directly searched by
-.BR request_key (2);
-it is searched only if it is linked into one of the keyrings
-that is searched by
-.BR request_key (2).
-.PP
-The persistent keyring is independent of
-.BR clone (2),
-.BR fork (2),
-.BR vfork (2),
-.BR execve (2),
-and
-.BR _exit (2).
-It persists until its expiration timer triggers,
-at which point it is garbage collected.
-This allows the persistent keyring to carry keys beyond the life of
-the kernel's record of the corresponding UID
-(the destruction of which results in the destruction of the
-.BR user\-keyring (7)
-and the
-.BR user\-session\-keyring (7)).
-The persistent keyring can thus be used to
-hold authentication tokens for processes that run without user interaction,
-such as programs started by
-.BR cron (8).
-.PP
-The persistent keyring is used to store UID-specific objects that
-themselves have limited lifetimes (e.g., kerberos tokens).
-If those tokens cease to be used
-(i.e., the persistent keyring is not accessed),
-then the timeout of the persistent keyring ensures that
-the corresponding objects are automatically discarded.
-.\"
-.SS Special operations
-The
-.I keyutils
-library provides the
-.BR keyctl_get_persistent (3)
-function for manipulating persistent keyrings.
-(This function is an interface to the
-.BR keyctl (2)
-.B KEYCTL_GET_PERSISTENT
-operation.)
-This operation allows the calling thread to get the persistent keyring
-corresponding to its own UID or, if the thread has the
-.B CAP_SETUID
-capability, the persistent keyring corresponding to some other UID
-in the same user namespace.
-.SH NOTES
-Each user namespace owns a keyring called
-.I .persistent_register
-that contains links to all of the persistent keys in that namespace.
-(The
-.I .persistent_register
-keyring can be seen when reading the contents of the
-.I /proc/keys
-file for the UID 0 in the namespace.)
-The
-.BR keyctl_get_persistent (3)
-operation looks for a key with a name of the form
-.IR _persistent. UID
-in that keyring,
-creates the key if it does not exist, and links it into the keyring.
-.SH SEE ALSO
-.ad l
-.nh
-.BR keyctl (1),
-.BR keyctl (3),
-.BR keyctl_get_persistent (3),
-.BR keyrings (7),
-.BR process\-keyring (7),
-.BR session\-keyring (7),
-.BR thread\-keyring (7),
-.BR user\-keyring (7),
-.BR user\-session\-keyring (7)
diff --git a/man7/pid_namespaces.7 b/man7/pid_namespaces.7
deleted file mode 100644
index 78d0e0986..000000000
--- a/man7/pid_namespaces.7
+++ /dev/null
@@ -1,388 +0,0 @@
-.\" Copyright (c) 2013 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (c) 2012 by Eric W. Biederman <ebiederm@xmission.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH pid_namespaces 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pid_namespaces \- overview of Linux PID namespaces
-.SH DESCRIPTION
-For an overview of namespaces, see
-.BR namespaces (7).
-.PP
-PID namespaces isolate the process ID number space,
-meaning that processes in different PID namespaces can have the same PID.
-PID namespaces allow containers to provide functionality
-such as suspending/resuming the set of processes in the container and
-migrating the container to a new host
-while the processes inside the container maintain the same PIDs.
-.PP
-PIDs in a new PID namespace start at 1,
-somewhat like a standalone system, and calls to
-.BR fork (2),
-.BR vfork (2),
-or
-.BR clone (2)
-will produce processes with PIDs that are unique within the namespace.
-.PP
-Use of PID namespaces requires a kernel that is configured with the
-.B CONFIG_PID_NS
-option.
-.\"
-.\" ============================================================
-.\"
-.SS The namespace "init" process
-The first process created in a new namespace
-(i.e., the process created using
-.BR clone (2)
-with the
-.B CLONE_NEWPID
-flag, or the first child created by a process after a call to
-.BR unshare (2)
-using the
-.B CLONE_NEWPID
-flag) has the PID 1, and is the "init" process for the namespace (see
-.BR init (1)).
-This process becomes the parent of any child processes that are orphaned
-because a process that resides in this PID namespace terminated
-(see below for further details).
-.PP
-If the "init" process of a PID namespace terminates,
-the kernel terminates all of the processes in the namespace via a
-.B SIGKILL
-signal.
-This behavior reflects the fact that the "init" process
-is essential for the correct operation of a PID namespace.
-In this case, a subsequent
-.BR fork (2)
-into this PID namespace fail with the error
-.BR ENOMEM ;
-it is not possible to create a new process in a PID namespace whose "init"
-process has terminated.
-Such scenarios can occur when, for example,
-a process uses an open file descriptor for a
-.IR /proc/ pid /ns/pid
-file corresponding to a process that was in a namespace to
-.BR setns (2)
-into that namespace after the "init" process has terminated.
-Another possible scenario can occur after a call to
-.BR unshare (2):
-if the first child subsequently created by a
-.BR fork (2)
-terminates, then subsequent calls to
-.BR fork (2)
-fail with
-.BR ENOMEM .
-.PP
-Only signals for which the "init" process has established a signal handler
-can be sent to the "init" process by other members of the PID namespace.
-This restriction applies even to privileged processes,
-and prevents other members of the PID namespace from
-accidentally killing the "init" process.
-.PP
-Likewise, a process in an ancestor namespace
-can\[em]subject to the usual permission checks described in
-.BR kill (2)\[em]send
-signals to the "init" process of a child PID namespace only
-if the "init" process has established a handler for that signal.
-(Within the handler, the
-.I siginfo_t
-.I si_pid
-field described in
-.BR sigaction (2)
-will be zero.)
-.B SIGKILL
-or
-.B SIGSTOP
-are treated exceptionally:
-these signals are forcibly delivered when sent from an ancestor PID namespace.
-Neither of these signals can be caught by the "init" process,
-and so will result in the usual actions associated with those signals
-(respectively, terminating and stopping the process).
-.PP
-Starting with Linux 3.4, the
-.BR reboot (2)
-system call causes a signal to be sent to the namespace "init" process.
-See
-.BR reboot (2)
-for more details.
-.\"
-.\" ============================================================
-.\"
-.SS Nesting PID namespaces
-PID namespaces can be nested:
-each PID namespace has a parent,
-except for the initial ("root") PID namespace.
-The parent of a PID namespace is the PID namespace of the process that
-created the namespace using
-.BR clone (2)
-or
-.BR unshare (2).
-PID namespaces thus form a tree,
-with all namespaces ultimately tracing their ancestry to the root namespace.
-Since Linux 3.7,
-.\" commit f2302505775fd13ba93f034206f1e2a587017929
-.\" The kernel constant MAX_PID_NS_LEVEL
-the kernel limits the maximum nesting depth for PID namespaces to 32.
-.PP
-A process is visible to other processes in its PID namespace,
-and to the processes in each direct ancestor PID namespace
-going back to the root PID namespace.
-In this context, "visible" means that one process
-can be the target of operations by another process using
-system calls that specify a process ID.
-Conversely, the processes in a child PID namespace can't see
-processes in the parent and further removed ancestor namespaces.
-More succinctly: a process can see (e.g., send signals with
-.BR kill (2),
-set nice values with
-.BR setpriority (2),
-etc.) only processes contained in its own PID namespace
-and in descendants of that namespace.
-.PP
-A process has one process ID in each of the layers of the PID
-namespace hierarchy in which is visible,
-and walking back though each direct ancestor namespace
-through to the root PID namespace.
-System calls that operate on process IDs always
-operate using the process ID that is visible in the
-PID namespace of the caller.
-A call to
-.BR getpid (2)
-always returns the PID associated with the namespace in which
-the process was created.
-.PP
-Some processes in a PID namespace may have parents
-that are outside of the namespace.
-For example, the parent of the initial process in the namespace
-(i.e., the
-.BR init (1)
-process with PID 1) is necessarily in another namespace.
-Likewise, the direct children of a process that uses
-.BR setns (2)
-to cause its children to join a PID namespace are in a different
-PID namespace from the caller of
-.BR setns (2).
-Calls to
-.BR getppid (2)
-for such processes return 0.
-.PP
-While processes may freely descend into child PID namespaces
-(e.g., using
-.BR setns (2)
-with a PID namespace file descriptor),
-they may not move in the other direction.
-That is to say, processes may not enter any ancestor namespaces
-(parent, grandparent, etc.).
-Changing PID namespaces is a one-way operation.
-.PP
-The
-.B NS_GET_PARENT
-.BR ioctl (2)
-operation can be used to discover the parental relationship
-between PID namespaces; see
-.BR ioctl_ns (2).
-.\"
-.\" ============================================================
-.\"
-.SS setns(2) and unshare(2) semantics
-Calls to
-.BR setns (2)
-that specify a PID namespace file descriptor
-and calls to
-.BR unshare (2)
-with the
-.B CLONE_NEWPID
-flag cause children subsequently created
-by the caller to be placed in a different PID namespace from the caller.
-(Since Linux 4.12, that PID namespace is shown via the
-.IR /proc/ pid /ns/pid_for_children
-file, as described in
-.BR namespaces (7).)
-These calls do not, however,
-change the PID namespace of the calling process,
-because doing so would change the caller's idea of its own PID
-(as reported by
-.BR getpid ()),
-which would break many applications and libraries.
-.PP
-To put things another way:
-a process's PID namespace membership is determined when the process is created
-and cannot be changed thereafter.
-Among other things, this means that the parental relationship
-between processes mirrors the parental relationship between PID namespaces:
-the parent of a process is either in the same namespace
-or resides in the immediate parent PID namespace.
-.PP
-A process may call
-.BR unshare (2)
-with the
-.B CLONE_NEWPID
-flag only once.
-After it has performed this operation, its
-.IR /proc/ pid /ns/pid_for_children
-symbolic link will be empty until the first child is created in the namespace.
-.\"
-.\" ============================================================
-.\"
-.SS Adoption of orphaned children
-When a child process becomes orphaned, it is reparented to the "init"
-process in the PID namespace of its parent
-(unless one of the nearer ancestors of the parent employed the
-.BR prctl (2)
-.B PR_SET_CHILD_SUBREAPER
-command to mark itself as the reaper of orphaned descendant processes).
-Note that because of the
-.BR setns (2)
-and
-.BR unshare (2)
-semantics described above, this may be the "init" process in the PID
-namespace that is the
-.I parent
-of the child's PID namespace,
-rather than the "init" process in the child's own PID namespace.
-.\" Furthermore, by definition, the parent of the "init" process
-.\" of a PID namespace resides in the parent PID namespace.
-.\"
-.\" ============================================================
-.\"
-.SS Compatibility of CLONE_NEWPID with other CLONE_* flags
-In current versions of Linux,
-.B CLONE_NEWPID
-can't be combined with
-.BR CLONE_THREAD .
-Threads are required to be in the same PID namespace such that
-the threads in a process can send signals to each other.
-Similarly, it must be possible to see all of the threads
-of a process in the
-.BR proc (5)
-filesystem.
-Additionally, if two threads were in different PID
-namespaces, the process ID of the process sending a signal
-could not be meaningfully encoded when a signal is sent
-(see the description of the
-.I siginfo_t
-type in
-.BR sigaction (2)).
-Since this is computed when a signal is enqueued,
-a signal queue shared by processes in multiple PID namespaces
-would defeat that.
-.PP
-.\" Note these restrictions were all introduced in
-.\" 8382fcac1b813ad0a4e68a838fc7ae93fa39eda0
-.\" when CLONE_NEWPID|CLONE_VM was disallowed
-In earlier versions of Linux,
-.B CLONE_NEWPID
-was additionally disallowed (failing with the error
-.BR EINVAL )
-in combination with
-.B CLONE_SIGHAND
-.\" (restriction lifted in faf00da544045fdc1454f3b9e6d7f65c841de302)
-(before Linux 4.3) as well as
-.\" (restriction lifted in e79f525e99b04390ca4d2366309545a836c03bf1)
-.B CLONE_VM
-(before Linux 3.12).
-The changes that lifted these restrictions have also been ported to
-earlier stable kernels.
-.\"
-.\" ============================================================
-.\"
-.SS /proc and PID namespaces
-A
-.I /proc
-filesystem shows (in the
-.IR /proc/ pid
-directories) only processes visible in the PID namespace
-of the process that performed the mount, even if the
-.I /proc
-filesystem is viewed from processes in other namespaces.
-.PP
-After creating a new PID namespace,
-it is useful for the child to change its root directory
-and mount a new procfs instance at
-.I /proc
-so that tools such as
-.BR ps (1)
-work correctly.
-If a new mount namespace is simultaneously created by including
-.B CLONE_NEWNS
-in the
-.I flags
-argument of
-.BR clone (2)
-or
-.BR unshare (2),
-then it isn't necessary to change the root directory:
-a new procfs instance can be mounted directly over
-.IR /proc .
-.PP
-From a shell, the command to mount
-.I /proc
-is:
-.PP
-.in +4n
-.EX
-$ mount \-t proc proc /proc
-.EE
-.in
-.PP
-Calling
-.BR readlink (2)
-on the path
-.I /proc/self
-yields the process ID of the caller in the PID namespace of the procfs mount
-(i.e., the PID namespace of the process that mounted the procfs).
-This can be useful for introspection purposes,
-when a process wants to discover its PID in other namespaces.
-.\"
-.\" ============================================================
-.\"
-.SS /proc files
-.TP
-.BR /proc/sys/kernel/ns_last_pid " (since Linux 3.3)"
-.\" commit b8f566b04d3cddd192cfd2418ae6d54ac6353792
-This file
-(which is virtualized per PID namespace)
-displays the last PID that was allocated in this PID namespace.
-When the next PID is allocated,
-the kernel will search for the lowest unallocated PID
-that is greater than this value,
-and when this file is subsequently read it will show that PID.
-.IP
-This file is writable by a process that has the
-.B CAP_SYS_ADMIN
-or (since Linux 5.9)
-.B CAP_CHECKPOINT_RESTORE
-capability inside the user namespace that owns the PID namespace.
-.\" This ability is necessary to support checkpoint restore in user-space
-This makes it possible to determine the PID that is allocated
-to the next process that is created inside this PID namespace.
-.\"
-.\" ============================================================
-.\"
-.SS Miscellaneous
-When a process ID is passed over a UNIX domain socket to a
-process in a different PID namespace (see the description of
-.B SCM_CREDENTIALS
-in
-.BR unix (7)),
-it is translated into the corresponding PID value in
-the receiving process's PID namespace.
-.SH STANDARDS
-Linux.
-.SH EXAMPLES
-See
-.BR user_namespaces (7).
-.SH SEE ALSO
-.BR clone (2),
-.BR reboot (2),
-.BR setns (2),
-.BR unshare (2),
-.BR proc (5),
-.BR capabilities (7),
-.BR credentials (7),
-.BR mount_namespaces (7),
-.BR namespaces (7),
-.BR user_namespaces (7),
-.BR switch_root (8)
diff --git a/man7/pipe.7 b/man7/pipe.7
deleted file mode 100644
index c3e06bdab..000000000
--- a/man7/pipe.7
+++ /dev/null
@@ -1,400 +0,0 @@
-.\" Copyright (C) 2005 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pipe 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pipe \- overview of pipes and FIFOs
-.SH DESCRIPTION
-Pipes and FIFOs (also known as named pipes)
-provide a unidirectional interprocess communication channel.
-A pipe has a
-.I read end
-and a
-.IR "write end" .
-Data written to the write end of a pipe can be read
-from the read end of the pipe.
-.PP
-A pipe is created using
-.BR pipe (2),
-which creates a new pipe and returns two file descriptors,
-one referring to the read end of the pipe,
-the other referring to the write end.
-Pipes can be used to create a communication channel between related
-processes; see
-.BR pipe (2)
-for an example.
-.PP
-A FIFO (short for First In First Out) has a name within the filesystem
-(created using
-.BR mkfifo (3)),
-and is opened using
-.BR open (2).
-Any process may open a FIFO, assuming the file permissions allow it.
-The read end is opened using the
-.B O_RDONLY
-flag; the write end is opened using the
-.B O_WRONLY
-flag.
-See
-.BR fifo (7)
-for further details.
-.IR Note :
-although FIFOs have a pathname in the filesystem,
-I/O on FIFOs does not involve operations on the underlying device
-(if there is one).
-.SS I/O on pipes and FIFOs
-The only difference between pipes and FIFOs is the manner in which
-they are created and opened.
-Once these tasks have been accomplished,
-I/O on pipes and FIFOs has exactly the same semantics.
-.PP
-If a process attempts to read from an empty pipe, then
-.BR read (2)
-will block until data is available.
-If a process attempts to write to a full pipe (see below), then
-.BR write (2)
-blocks until sufficient data has been read from the pipe
-to allow the write to complete.
-Nonblocking I/O is possible by using the
-.BR fcntl (2)
-.B F_SETFL
-operation to enable the
-.B O_NONBLOCK
-open file status flag.
-.PP
-The communication channel provided by a pipe is a
-.IR "byte stream" :
-there is no concept of message boundaries.
-.PP
-If all file descriptors referring to the write end of a pipe
-have been closed, then an attempt to
-.BR read (2)
-from the pipe will see end-of-file
-.RB ( read (2)
-will return 0).
-If all file descriptors referring to the read end of a pipe
-have been closed, then a
-.BR write (2)
-will cause a
-.B SIGPIPE
-signal to be generated for the calling process.
-If the calling process is ignoring this signal, then
-.BR write (2)
-fails with the error
-.BR EPIPE .
-An application that uses
-.BR pipe (2)
-and
-.BR fork (2)
-should use suitable
-.BR close (2)
-calls to close unnecessary duplicate file descriptors;
-this ensures that end-of-file and
-.BR SIGPIPE / EPIPE
-are delivered when appropriate.
-.PP
-It is not possible to apply
-.BR lseek (2)
-to a pipe.
-.SS Pipe capacity
-A pipe has a limited capacity.
-If the pipe is full, then a
-.BR write (2)
-will block or fail, depending on whether the
-.B O_NONBLOCK
-flag is set (see below).
-Different implementations have different limits for the pipe capacity.
-Applications should not rely on a particular capacity:
-an application should be designed so that a reading process consumes data
-as soon as it is available,
-so that a writing process does not remain blocked.
-.PP
-Before Linux 2.6.11, the capacity of a pipe was the same as
-the system page size (e.g., 4096 bytes on i386).
-Since Linux 2.6.11, the pipe capacity is 16 pages
-(i.e., 65,536 bytes in a system with a page size of 4096 bytes).
-Since Linux 2.6.35, the default pipe capacity is 16 pages,
-but the capacity can be queried and set using the
-.BR fcntl (2)
-.B F_GETPIPE_SZ
-and
-.B F_SETPIPE_SZ
-operations.
-See
-.BR fcntl (2)
-for more information.
-.PP
-The following
-.BR ioctl (2)
-operation, which can be applied to a file descriptor
-that refers to either end of a pipe,
-places a count of the number of unread bytes in the pipe in the
-.I int
-buffer pointed to by the final argument of the call:
-.PP
-.in +4n
-.EX
-ioctl(fd, FIONREAD, &nbytes);
-.EE
-.in
-.PP
-The
-.B FIONREAD
-operation is not specified in any standard,
-but is provided on many implementations.
-.\"
-.SS /proc files
-On Linux, the following files control how much memory can be used for pipes:
-.TP
-.IR /proc/sys/fs/pipe\-max\-pages " (only in Linux 2.6.34)"
-.\" commit b492e95be0ae672922f4734acf3f5d35c30be948
-An upper limit, in pages, on the capacity that an unprivileged user
-(one without the
-.B CAP_SYS_RESOURCE
-capability)
-can set for a pipe.
-.IP
-The default value for this limit is 16 times the default pipe capacity
-(see above); the lower limit is two pages.
-.IP
-This interface was removed in Linux 2.6.35, in favor of
-.IR /proc/sys/fs/pipe\-max\-size .
-.TP
-.IR /proc/sys/fs/pipe\-max\-size " (since Linux 2.6.35)"
-.\" commit ff9da691c0498ff81fdd014e7a0731dab2337dac
-The maximum size (in bytes) of individual pipes that can be set
-.\" This limit is not checked on pipe creation, where the capacity is
-.\" always PIPE_DEF_BUFS, regardless of pipe-max-size
-by users without the
-.B CAP_SYS_RESOURCE
-capability.
-The value assigned to this file may be rounded upward,
-to reflect the value actually employed for a convenient implementation.
-To determine the rounded-up value,
-display the contents of this file after assigning a value to it.
-.IP
-The default value for this file is 1048576 (1\ MiB).
-The minimum value that can be assigned to this file is the system page size.
-Attempts to set a limit less than the page size cause
-.BR write (2)
-to fail with the error
-.BR EINVAL .
-.IP
-Since Linux 4.9,
-.\" commit 086e774a57fba4695f14383c0818994c0b31da7c
-the value on this file also acts as a ceiling on the default capacity
-of a new pipe or newly opened FIFO.
-.TP
-.IR /proc/sys/fs/pipe\-user\-pages\-hard " (since Linux 4.5)"
-.\" commit 759c01142a5d0f364a462346168a56de28a80f52
-The hard limit on the total size (in pages) of all pipes created or set by
-a single unprivileged user (i.e., one with neither the
-.B CAP_SYS_RESOURCE
-nor the
-.B CAP_SYS_ADMIN
-capability).
-So long as the total number of pages allocated to pipe buffers
-for this user is at this limit,
-attempts to create new pipes will be denied,
-and attempts to increase a pipe's capacity will be denied.
-.IP
-When the value of this limit is zero (which is the default),
-no hard limit is applied.
-.\" The default was chosen to avoid breaking existing applications that
-.\" make intensive use of pipes (e.g., for splicing).
-.TP
-.IR /proc/sys/fs/pipe\-user\-pages\-soft " (since Linux 4.5)"
-.\" commit 759c01142a5d0f364a462346168a56de28a80f52
-The soft limit on the total size (in pages) of all pipes created or set by
-a single unprivileged user (i.e., one with neither the
-.B CAP_SYS_RESOURCE
-nor the
-.B CAP_SYS_ADMIN
-capability).
-So long as the total number of pages allocated to pipe buffers
-for this user is at this limit,
-individual pipes created by a user will be limited to one page,
-and attempts to increase a pipe's capacity will be denied.
-.IP
-When the value of this limit is zero, no soft limit is applied.
-The default value for this file is 16384,
-which permits creating up to 1024 pipes with the default capacity.
-.PP
-Before Linux 4.9, some bugs affected the handling of the
-.I pipe\-user\-pages\-soft
-and
-.I pipe\-user\-pages\-hard
-limits; see BUGS.
-.\"
-.SS PIPE_BUF
-POSIX.1 says that writes of less than
-.B PIPE_BUF
-bytes must be atomic: the output data is written to the pipe as a
-contiguous sequence.
-Writes of more than
-.B PIPE_BUF
-bytes may be nonatomic: the kernel may interleave the data
-with data written by other processes.
-POSIX.1 requires
-.B PIPE_BUF
-to be at least 512 bytes.
-(On Linux,
-.B PIPE_BUF
-is 4096 bytes.)
-The precise semantics depend on whether the file descriptor is nonblocking
-.RB ( O_NONBLOCK ),
-whether there are multiple writers to the pipe, and on
-.IR n ,
-the number of bytes to be written:
-.TP
-\fBO_NONBLOCK\fP disabled, \fIn\fP <= \fBPIPE_BUF\fP
-All
-.I n
-bytes are written atomically;
-.BR write (2)
-may block if there is not room for
-.I n
-bytes to be written immediately
-.TP
-\fBO_NONBLOCK\fP enabled, \fIn\fP <= \fBPIPE_BUF\fP
-If there is room to write
-.I n
-bytes to the pipe, then
-.BR write (2)
-succeeds immediately, writing all
-.I n
-bytes; otherwise
-.BR write (2)
-fails, with
-.I errno
-set to
-.BR EAGAIN .
-.TP
-\fBO_NONBLOCK\fP disabled, \fIn\fP > \fBPIPE_BUF\fP
-The write is nonatomic: the data given to
-.BR write (2)
-may be interleaved with
-.BR write (2)s
-by other process;
-the
-.BR write (2)
-blocks until
-.I n
-bytes have been written.
-.TP
-\fBO_NONBLOCK\fP enabled, \fIn\fP > \fBPIPE_BUF\fP
-If the pipe is full, then
-.BR write (2)
-fails, with
-.I errno
-set to
-.BR EAGAIN .
-Otherwise, from 1 to
-.I n
-bytes may be written (i.e., a "partial write" may occur;
-the caller should check the return value from
-.BR write (2)
-to see how many bytes were actually written),
-and these bytes may be interleaved with writes by other processes.
-.SS Open file status flags
-The only open file status flags that can be meaningfully applied to
-a pipe or FIFO are
-.B O_NONBLOCK
-and
-.BR O_ASYNC .
-.PP
-Setting the
-.B O_ASYNC
-flag for the read end of a pipe causes a signal
-.RB ( SIGIO
-by default) to be generated when new input becomes available on the pipe.
-The target for delivery of signals must be set using the
-.BR fcntl (2)
-.B F_SETOWN
-command.
-On Linux,
-.B O_ASYNC
-is supported for pipes and FIFOs only since Linux 2.6.
-.SS Portability notes
-On some systems (but not Linux), pipes are bidirectional:
-data can be transmitted in both directions between the pipe ends.
-POSIX.1 requires only unidirectional pipes.
-Portable applications should avoid reliance on
-bidirectional pipe semantics.
-.SS BUGS
-Before Linux 4.9, some bugs affected the handling of the
-.I pipe\-user\-pages\-soft
-and
-.I pipe\-user\-pages\-hard
-limits when using the
-.BR fcntl (2)
-.B F_SETPIPE_SZ
-operation to change a pipe's capacity:
-.\" These bugs where remedied by a series of patches, in particular,
-.\" commit b0b91d18e2e97b741b294af9333824ecc3fadfd8 and
-.\" commit a005ca0e6813e1d796a7422a7e31d8b8d6555df1
-.IP (a) 5
-When increasing the pipe capacity, the checks against the soft and
-hard limits were made against existing consumption,
-and excluded the memory required for the increased pipe capacity.
-The new increase in pipe capacity could then push the total
-memory used by the user for pipes (possibly far) over a limit.
-(This could also trigger the problem described next.)
-.IP
-Starting with Linux 4.9,
-the limit checking includes the memory required for the new pipe capacity.
-.IP (b)
-The limit checks were performed even when the new pipe capacity was
-less than the existing pipe capacity.
-This could lead to problems if a user set a large pipe capacity,
-and then the limits were lowered, with the result that the user could
-no longer decrease the pipe capacity.
-.IP
-Starting with Linux 4.9, checks against the limits
-are performed only when increasing a pipe's capacity;
-an unprivileged user can always decrease a pipe's capacity.
-.IP (c)
-The accounting and checking against the limits were done as follows:
-.RS
-.IP (1) 5
-.PD 0
-Test whether the user has exceeded the limit.
-.IP (2)
-Make the new pipe buffer allocation.
-.IP (3)
-Account new allocation against the limits.
-.PD
-.RE
-.IP
-This was racey.
-Multiple processes could pass point (1) simultaneously,
-and then allocate pipe buffers that were accounted for only in step (3),
-with the result that the user's pipe buffer
-allocation could be pushed over the limit.
-.IP
-Starting with Linux 4.9,
-the accounting step is performed before doing the allocation,
-and the operation fails if the limit would be exceeded.
-.PP
-Before Linux 4.9, bugs similar to points (a) and (c) could also occur
-when the kernel allocated memory for a new pipe buffer;
-that is, when calling
-.BR pipe (2)
-and when opening a previously unopened FIFO.
-.SH SEE ALSO
-.BR mkfifo (1),
-.BR dup (2),
-.BR fcntl (2),
-.BR open (2),
-.BR pipe (2),
-.BR poll (2),
-.BR select (2),
-.BR socketpair (2),
-.BR splice (2),
-.BR stat (2),
-.BR tee (2),
-.BR vmsplice (2),
-.BR mkfifo (3),
-.BR epoll (7),
-.BR fifo (7)
diff --git a/man7/pkeys.7 b/man7/pkeys.7
deleted file mode 100644
index 6edfe9fcf..000000000
--- a/man7/pkeys.7
+++ /dev/null
@@ -1,237 +0,0 @@
-.\" Copyright (C) 2016 Intel Corporation
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pkeys 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pkeys \- overview of Memory Protection Keys
-.SH DESCRIPTION
-Memory Protection Keys (pkeys) are an extension to existing
-page-based memory permissions.
-Normal page permissions using
-page tables require expensive system calls and TLB invalidations
-when changing permissions.
-Memory Protection Keys provide a mechanism for changing
-protections without requiring modification of the page tables on
-every permission change.
-.PP
-To use pkeys, software must first "tag" a page in the page tables
-with a pkey.
-After this tag is in place, an application only has
-to change the contents of a register in order to remove write
-access, or all access to a tagged page.
-.PP
-Protection keys work in conjunction with the existing
-.BR PROT_READ ,
-.BR PROT_WRITE ,
-and
-.B PROT_EXEC
-permissions passed to system calls such as
-.BR mprotect (2)
-and
-.BR mmap (2),
-but always act to further restrict these traditional permission
-mechanisms.
-.PP
-If a process performs an access that violates pkey
-restrictions, it receives a
-.B SIGSEGV
-signal.
-See
-.BR sigaction (2)
-for details of the information available with that signal.
-.PP
-To use the pkeys feature, the processor must support it, and the kernel
-must contain support for the feature on a given processor.
-As of early 2016 only future Intel x86 processors are supported,
-and this hardware supports 16 protection keys in each process.
-However, pkey 0 is used as the default key, so a maximum of 15
-are available for actual application use.
-The default key is assigned to any memory region for which a
-pkey has not been explicitly assigned via
-.BR pkey_mprotect (2).
-.PP
-Protection keys have the potential to add a layer of security and
-reliability to applications.
-But they have not been primarily designed as
-a security feature.
-For instance, WRPKRU is a completely unprivileged
-instruction, so pkeys are useless in any case that an attacker controls
-the PKRU register or can execute arbitrary instructions.
-.PP
-Applications should be very careful to ensure that they do not "leak"
-protection keys.
-For instance, before calling
-.BR pkey_free (2),
-the application should be sure that no memory has that pkey assigned.
-If the application left the freed pkey assigned, a future user of
-that pkey might inadvertently change the permissions of an unrelated
-data structure, which could impact security or stability.
-The kernel currently allows in-use pkeys to have
-.BR pkey_free (2)
-called on them because it would have processor or memory performance
-implications to perform the additional checks needed to disallow it.
-Implementation of the necessary checks is left up to applications.
-Applications may implement these checks by searching the
-.IR /proc/ pid /smaps
-file for memory regions with the pkey assigned.
-Further details can be found in
-.BR proc (5).
-.PP
-Any application wanting to use protection keys needs to be able
-to function without them.
-They might be unavailable because the hardware that the
-application runs on does not support them, the kernel code does
-not contain support, the kernel support has been disabled, or
-because the keys have all been allocated, perhaps by a library
-the application is using.
-It is recommended that applications wanting to use protection
-keys should simply call
-.BR pkey_alloc (2)
-and test whether the call succeeds,
-instead of attempting to detect support for the
-feature in any other way.
-.PP
-Although unnecessary, hardware support for protection keys may be
-enumerated with the
-.I cpuid
-instruction.
-Details of how to do this can be found in the Intel Software
-Developers Manual.
-The kernel performs this enumeration and exposes the information in
-.I /proc/cpuinfo
-under the "flags" field.
-The string "pku" in this field indicates hardware support for protection
-keys and the string "ospke" indicates that the kernel contains and has
-enabled protection keys support.
-.PP
-Applications using threads and protection keys should be especially
-careful.
-Threads inherit the protection key rights of the parent at the time
-of the
-.BR clone (2),
-system call.
-Applications should either ensure that their own permissions are
-appropriate for child threads at the time when
-.BR clone (2)
-is called, or ensure that each child thread can perform its
-own initialization of protection key rights.
-.\"
-.SS Signal Handler Behavior
-Each time a signal handler is invoked (including nested signals), the
-thread is temporarily given a new, default set of protection key rights
-that override the rights from the interrupted context.
-This means that applications must re-establish their desired protection
-key rights upon entering a signal handler if the desired rights differ
-from the defaults.
-The rights of any interrupted context are restored when the signal
-handler returns.
-.PP
-This signal behavior is unusual and is due to the fact that the x86 PKRU
-register (which stores protection key access rights) is managed with the
-same hardware mechanism (XSAVE) that manages floating-point registers.
-The signal behavior is the same as that of floating-point registers.
-.\"
-.SS Protection Keys system calls
-The Linux kernel implements the following pkey-related system calls:
-.BR pkey_mprotect (2),
-.BR pkey_alloc (2),
-and
-.BR pkey_free (2).
-.PP
-The Linux pkey system calls are available only if the kernel was
-configured and built with the
-.B CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
-option.
-.SH EXAMPLES
-The program below allocates a page of memory with read and write permissions.
-It then writes some data to the memory and successfully reads it
-back.
-After that, it attempts to allocate a protection key and
-disallows access to the page by using the WRPKRU instruction.
-It then tries to access the page,
-which we now expect to cause a fatal signal to the application.
-.PP
-.in +4n
-.EX
-.RB "$" " ./a.out"
-buffer contains: 73
-about to read buffer again...
-Segmentation fault (core dumped)
-.EE
-.in
-.SS Program source
-\&
-.EX
-#define _GNU_SOURCE
-#include <err.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/mman.h>
-\&
-int
-main(void)
-{
- int status;
- int pkey;
- int *buffer;
-\&
- /*
- * Allocate one page of memory.
- */
- buffer = mmap(NULL, getpagesize(), PROT_READ | PROT_WRITE,
- MAP_ANONYMOUS | MAP_PRIVATE, \-1, 0);
- if (buffer == MAP_FAILED)
- err(EXIT_FAILURE, "mmap");
-\&
- /*
- * Put some random data into the page (still OK to touch).
- */
- *buffer = __LINE__;
- printf("buffer contains: %d\en", *buffer);
-\&
- /*
- * Allocate a protection key:
- */
- pkey = pkey_alloc(0, 0);
- if (pkey == \-1)
- err(EXIT_FAILURE, "pkey_alloc");
-\&
- /*
- * Disable access to any memory with "pkey" set,
- * even though there is none right now.
- */
- status = pkey_set(pkey, PKEY_DISABLE_ACCESS);
- if (status)
- err(EXIT_FAILURE, "pkey_set");
-\&
- /*
- * Set the protection key on "buffer".
- * Note that it is still read/write as far as mprotect() is
- * concerned and the previous pkey_set() overrides it.
- */
- status = pkey_mprotect(buffer, getpagesize(),
- PROT_READ | PROT_WRITE, pkey);
- if (status == \-1)
- err(EXIT_FAILURE, "pkey_mprotect");
-\&
- printf("about to read buffer again...\en");
-\&
- /*
- * This will crash, because we have disallowed access.
- */
- printf("buffer contains: %d\en", *buffer);
-\&
- status = pkey_free(pkey);
- if (status == \-1)
- err(EXIT_FAILURE, "pkey_free");
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.SH SEE ALSO
-.BR pkey_alloc (2),
-.BR pkey_free (2),
-.BR pkey_mprotect (2),
-.BR sigaction (2)
diff --git a/man7/posixoptions.7 b/man7/posixoptions.7
deleted file mode 100644
index 47d210492..000000000
--- a/man7/posixoptions.7
+++ /dev/null
@@ -1,1014 +0,0 @@
-.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH posixoptions 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-posixoptions \- optional parts of the POSIX standard
-.SH DESCRIPTION
-The POSIX standard (the information below is from POSIX.1-2001)
-describes a set of behaviors and interfaces for a compliant system.
-However, many interfaces are optional and there are feature test macros
-to test the availability of interfaces at compile time, and functions
-.BR sysconf (3),
-.BR fpathconf (3),
-.BR pathconf (3),
-.BR confstr (3)
-to do this at run time.
-From shell scripts one can use
-.BR getconf (1).
-For more detail, see
-.BR sysconf (3).
-.PP
-We give the name of the POSIX abbreviation, the option, the name of the
-.BR sysconf (3)
-parameter used to inquire about the option, and possibly
-a very short description.
-Much more precise detail can be found in the POSIX standard itself,
-versions of which can nowadays be accessed freely on the web.
-.SS ADV - _POSIX_ADVISORY_INFO - _SC_ADVISORY_INFO
-The following advisory functions are present:
-.PP
-.nf
-.in +4n
-.IR posix_fadvise ()
-.IR posix_fallocate ()
-.IR posix_memalign ()
-.IR posix_madvise ()
-.in
-.fi
-.SS AIO - _POSIX_ASYNCHRONOUS_IO - _SC_ASYNCHRONOUS_IO
-The header
-.I <aio.h>
-is present.
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR aio_cancel ()
-.IR aio_error ()
-.IR aio_fsync ()
-.IR aio_read ()
-.IR aio_return ()
-.IR aio_suspend ()
-.IR aio_write ()
-.IR lio_listio ()
-.in
-.fi
-.SS BAR - _POSIX_BARRIERS - _SC_BARRIERS
-This option implies the
-.B _POSIX_THREADS
-and
-.B _POSIX_THREAD_SAFE_FUNCTIONS
-options.
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR pthread_barrier_destroy ()
-.IR pthread_barrier_init ()
-.IR pthread_barrier_wait ()
-.IR pthread_barrierattr_destroy ()
-.IR pthread_barrierattr_init ()
-.in
-.fi
-.\" .SS BE
-.\" Batch environment.
-.\" .SS CD
-.\" C development.
-.SS --- - POSIX_CHOWN_RESTRICTED
-If this option is in effect (as it always is under POSIX.1-2001),
-then only root may change the owner of a file, and nonroot can
-set the group of a file only to one of the groups it belongs to.
-This affects the following functions
-.PP
-.nf
-.in +4n
-.IR chown ()
-.IR fchown ()
-.in
-.fi
-.\" What about lchown() ?
-.SS CS - _POSIX_CLOCK_SELECTION - _SC_CLOCK_SELECTION
-This option implies the
-.B _POSIX_TIMERS
-option.
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR pthread_condattr_getclock ()
-.IR pthread_condattr_setclock ()
-.IR clock_nanosleep ()
-.in
-.fi
-.PP
-If
-.B CLOCK_REALTIME
-is changed by the function
-.IR clock_settime (),
-then this affects all timers set for an absolute time.
-.SS CPT - _POSIX_CPUTIME - _SC_CPUTIME
-The
-.B CLOCK_PROCESS_CPUTIME_ID
-clock ID is supported.
-The initial value of this clock is 0 for each process.
-This option implies the
-.B _POSIX_TIMERS
-option.
-The function
-.IR clock_getcpuclockid ()
-is present.
-.\" .SS FD
-.\" Fortran development
-.\" .SS FR
-.\" Fortran runtime
-.SS --- - _POSIX_FILE_LOCKING - _SC_FILE_LOCKING
-This option has been deleted.
-Not in final XPG6.
-.SS FSC - _POSIX_FSYNC - _SC_FSYNC
-The function
-.IR fsync ()
-is present.
-.SS IP6 - _POSIX_IPV6 - _SC_IPV6
-Internet Protocol Version 6 is supported.
-.SS --- - _POSIX_JOB_CONTROL - _SC_JOB_CONTROL
-If this option is in effect (as it always is under POSIX.1-2001),
-then the system implements POSIX-style job control,
-and the following functions are present:
-.PP
-.nf
-.in +4n
-.IR setpgid ()
-.IR tcdrain ()
-.IR tcflush ()
-.IR tcgetpgrp ()
-.IR tcsendbreak ()
-.IR tcsetattr ()
-.IR tcsetpgrp ()
-.in
-.fi
-.SS MF - _POSIX_MAPPED_FILES - _SC_MAPPED_FILES
-Shared memory is supported.
-The include file
-.I <sys/mman.h>
-is present.
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR mmap ()
-.IR msync ()
-.IR munmap ()
-.in
-.fi
-.SS ML - _POSIX_MEMLOCK - _SC_MEMLOCK
-Shared memory can be locked into core.
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR mlockall ()
-.IR munlockall ()
-.in
-.fi
-.SS MR/MLR - _POSIX_MEMLOCK_RANGE - _SC_MEMLOCK_RANGE
-More precisely, ranges can be locked into core.
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR mlock ()
-.IR munlock ()
-.in
-.fi
-.SS MPR - _POSIX_MEMORY_PROTECTION - _SC_MEMORY_PROTECTION
-The function
-.IR mprotect ()
-is present.
-.SS MSG - _POSIX_MESSAGE_PASSING - _SC_MESSAGE_PASSING
-The include file
-.I <mqueue.h>
-is present.
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR mq_close ()
-.IR mq_getattr ()
-.IR mq_notify ()
-.IR mq_open ()
-.IR mq_receive ()
-.IR mq_send ()
-.IR mq_setattr ()
-.IR mq_unlink ()
-.in
-.fi
-.SS MON - _POSIX_MONOTONIC_CLOCK - _SC_MONOTONIC_CLOCK
-.B CLOCK_MONOTONIC
-is supported.
-This option implies the
-.B _POSIX_TIMERS
-option.
-The following functions are affected:
-.PP
-.nf
-.in +4n
-.IR aio_suspend ()
-.IR clock_getres ()
-.IR clock_gettime ()
-.IR clock_settime ()
-.IR timer_create ()
-.in
-.fi
-.SS --- - _POSIX_MULTI_PROCESS - _SC_MULTI_PROCESS
-This option has been deleted.
-Not in final XPG6.
-.\" .SS MX
-.\" IEC 60559 Floating-Point Option.
-.SS --- - _POSIX_NO_TRUNC
-If this option is in effect (as it always is under POSIX.1-2001),
-then pathname components longer than
-.B NAME_MAX
-are not truncated,
-but give an error.
-This property may be dependent on the path prefix of the component.
-.SS PIO - _POSIX_PRIORITIZED_IO - _SC_PRIORITIZED_IO
-This option says that one can specify priorities for asynchronous I/O.
-This affects the functions
-.PP
-.nf
-.in +4n
-.IR aio_read ()
-.IR aio_write ()
-.in
-.fi
-.SS PS - _POSIX_PRIORITY_SCHEDULING - _SC_PRIORITY_SCHEDULING
-The include file
-.I <sched.h>
-is present.
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR sched_get_priority_max ()
-.IR sched_get_priority_min ()
-.IR sched_getparam ()
-.IR sched_getscheduler ()
-.IR sched_rr_get_interval ()
-.IR sched_setparam ()
-.IR sched_setscheduler ()
-.IR sched_yield ()
-.in
-.fi
-.PP
-If also
-.B _POSIX_SPAWN
-is in effect, then the following functions are present:
-.PP
-.nf
-.in +4n
-.IR posix_spawnattr_getschedparam ()
-.IR posix_spawnattr_getschedpolicy ()
-.IR posix_spawnattr_setschedparam ()
-.IR posix_spawnattr_setschedpolicy ()
-.in
-.fi
-.SS RS - _POSIX_RAW_SOCKETS
-Raw sockets are supported.
-The following functions are affected:
-.PP
-.nf
-.in +4n
-.IR getsockopt ()
-.IR setsockopt ()
-.in
-.fi
-.SS --- - _POSIX_READER_WRITER_LOCKS - _SC_READER_WRITER_LOCKS
-This option implies the
-.B _POSIX_THREADS
-option.
-Conversely,
-under POSIX.1-2001 the
-.B _POSIX_THREADS
-option implies this option.
-.PP
-The following functions are present:
-.PP
-.in +4n
-.nf
-.IR pthread_rwlock_destroy ()
-.IR pthread_rwlock_init ()
-.IR pthread_rwlock_rdlock ()
-.IR pthread_rwlock_tryrdlock ()
-.IR pthread_rwlock_trywrlock ()
-.IR pthread_rwlock_unlock ()
-.IR pthread_rwlock_wrlock ()
-.IR pthread_rwlockattr_destroy ()
-.IR pthread_rwlockattr_init ()
-.in
-.fi
-.SS RTS - _POSIX_REALTIME_SIGNALS - _SC_REALTIME_SIGNALS
-Realtime signals are supported.
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR sigqueue ()
-.IR sigtimedwait ()
-.IR sigwaitinfo ()
-.in
-.fi
-.SS --- - _POSIX_REGEXP - _SC_REGEXP
-If this option is in effect (as it always is under POSIX.1-2001),
-then POSIX regular expressions are supported
-and the following functions are present:
-.PP
-.nf
-.in +4n
-.IR regcomp ()
-.IR regerror ()
-.IR regexec ()
-.IR regfree ()
-.in
-.fi
-.SS --- - _POSIX_SAVED_IDS - _SC_SAVED_IDS
-If this option is in effect (as it always is under POSIX.1-2001),
-then a process has a saved set-user-ID and a saved set-group-ID.
-The following functions are affected:
-.PP
-.nf
-.in +4n
-.IR exec ()
-.IR kill ()
-.IR seteuid ()
-.IR setegid ()
-.IR setgid ()
-.IR setuid ()
-.in
-.fi
-.\" .SS SD
-.\" Software development
-.SS SEM - _POSIX_SEMAPHORES - _SC_SEMAPHORES
-The include file
-.I <semaphore.h>
-is present.
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR sem_close ()
-.IR sem_destroy ()
-.IR sem_getvalue ()
-.IR sem_init ()
-.IR sem_open ()
-.IR sem_post ()
-.IR sem_trywait ()
-.IR sem_unlink ()
-.IR sem_wait ()
-.in
-.fi
-.SS SHM - _POSIX_SHARED_MEMORY_OBJECTS - _SC_SHARED_MEMORY_OBJECTS
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR mmap ()
-.IR munmap ()
-.IR shm_open ()
-.IR shm_unlink ()
-.in
-.fi
-.SS --- - _POSIX_SHELL - _SC_SHELL
-If this option is in effect (as it always is under POSIX.1-2001),
-the function
-.IR system ()
-is present.
-.SS SPN - _POSIX_SPAWN - _SC_SPAWN
-This option describes support for process creation in a context where
-it is difficult or impossible to use
-.IR fork (),
-for example, because no MMU is present.
-.PP
-If
-.B _POSIX_SPAWN
-is in effect, then the include file
-.I <spawn.h>
-and the following functions are present:
-.PP
-.nf
-.in +4n
-.IR posix_spawn ()
-.IR posix_spawn_file_actions_addclose ()
-.IR posix_spawn_file_actions_adddup2 ()
-.IR posix_spawn_file_actions_addopen ()
-.IR posix_spawn_file_actions_destroy ()
-.IR posix_spawn_file_actions_init ()
-.IR posix_spawnattr_destroy ()
-.IR posix_spawnattr_getsigdefault ()
-.IR posix_spawnattr_getflags ()
-.IR posix_spawnattr_getpgroup ()
-.IR posix_spawnattr_getsigmask ()
-.IR posix_spawnattr_init ()
-.IR posix_spawnattr_setsigdefault ()
-.IR posix_spawnattr_setflags ()
-.IR posix_spawnattr_setpgroup ()
-.IR posix_spawnattr_setsigmask ()
-.IR posix_spawnp ()
-.in
-.fi
-.PP
-If also
-.B _POSIX_PRIORITY_SCHEDULING
-is in effect, then
-the following functions are present:
-.PP
-.nf
-.in +4n
-.IR posix_spawnattr_getschedparam ()
-.IR posix_spawnattr_getschedpolicy ()
-.IR posix_spawnattr_setschedparam ()
-.IR posix_spawnattr_setschedpolicy ()
-.in
-.fi
-.SS SPI - _POSIX_SPIN_LOCKS - _SC_SPIN_LOCKS
-This option implies the
-.B _POSIX_THREADS
-and
-.B _POSIX_THREAD_SAFE_FUNCTIONS
-options.
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR pthread_spin_destroy ()
-.IR pthread_spin_init ()
-.IR pthread_spin_lock ()
-.IR pthread_spin_trylock ()
-.IR pthread_spin_unlock ()
-.in -4n
-.fi
-.SS SS - _POSIX_SPORADIC_SERVER - _SC_SPORADIC_SERVER
-The scheduling policy
-.B SCHED_SPORADIC
-is supported.
-This option implies the
-.B _POSIX_PRIORITY_SCHEDULING
-option.
-The following functions are affected:
-.PP
-.nf
-.in +4n
-.IR sched_setparam ()
-.IR sched_setscheduler ()
-.in
-.fi
-.SS SIO - _POSIX_SYNCHRONIZED_IO - _SC_SYNCHRONIZED_IO
-The following functions are affected:
-.PP
-.nf
-.in +4n
-.IR open ()
-.IR msync ()
-.IR fsync ()
-.IR fdatasync ()
-.in
-.fi
-.SS TSA - _POSIX_THREAD_ATTR_STACKADDR - _SC_THREAD_ATTR_STACKADDR
-The following functions are affected:
-.PP
-.nf
-.in +4n
-.IR pthread_attr_getstack ()
-.IR pthread_attr_getstackaddr ()
-.IR pthread_attr_setstack ()
-.IR pthread_attr_setstackaddr ()
-.in
-.fi
-.SS TSS - _POSIX_THREAD_ATTR_STACKSIZE - _SC_THREAD_ATTR_STACKSIZE
-The following functions are affected:
-.PP
-.nf
-.in +4n
-.IR pthread_attr_getstack ()
-.IR pthread_attr_getstacksize ()
-.IR pthread_attr_setstack ()
-.IR pthread_attr_setstacksize ()
-.in
-.fi
-.SS TCT - _POSIX_THREAD_CPUTIME - _SC_THREAD_CPUTIME
-The clockID CLOCK_THREAD_CPUTIME_ID is supported.
-This option implies the
-.B _POSIX_TIMERS
-option.
-The following functions are affected:
-.PP
-.nf
-.in +4n
-.IR pthread_getcpuclockid ()
-.IR clock_getres ()
-.IR clock_gettime ()
-.IR clock_settime ()
-.IR timer_create ()
-.in
-.fi
-.SS TPI - _POSIX_THREAD_PRIO_INHERIT - _SC_THREAD_PRIO_INHERIT
-The following functions are affected:
-.PP
-.nf
-.in +4n
-.IR pthread_mutexattr_getprotocol ()
-.IR pthread_mutexattr_setprotocol ()
-.in
-.fi
-.SS TPP - _POSIX_THREAD_PRIO_PROTECT - _SC_THREAD_PRIO_PROTECT
-The following functions are affected:
-.PP
-.nf
-.in +4n
-.IR pthread_mutex_getprioceiling ()
-.IR pthread_mutex_setprioceiling ()
-.IR pthread_mutexattr_getprioceiling ()
-.IR pthread_mutexattr_getprotocol ()
-.IR pthread_mutexattr_setprioceiling ()
-.IR pthread_mutexattr_setprotocol ()
-.in
-.fi
-.SS TPS - _POSIX_THREAD_PRIORITY_SCHEDULING - _SC_THREAD_PRIORITY_SCHEDULING
-If this option is in effect, the different threads inside a process
-can run with different priorities and/or different schedulers.
-The following functions are affected:
-.PP
-.nf
-.in +4n
-.IR pthread_attr_getinheritsched ()
-.IR pthread_attr_getschedpolicy ()
-.IR pthread_attr_getscope ()
-.IR pthread_attr_setinheritsched ()
-.IR pthread_attr_setschedpolicy ()
-.IR pthread_attr_setscope ()
-.IR pthread_getschedparam ()
-.IR pthread_setschedparam ()
-.IR pthread_setschedprio ()
-.in
-.fi
-.SS TSH - _POSIX_THREAD_PROCESS_SHARED - _SC_THREAD_PROCESS_SHARED
-The following functions are affected:
-.PP
-.nf
-.in +4n
-.IR pthread_barrierattr_getpshared ()
-.IR pthread_barrierattr_setpshared ()
-.IR pthread_condattr_getpshared ()
-.IR pthread_condattr_setpshared ()
-.IR pthread_mutexattr_getpshared ()
-.IR pthread_mutexattr_setpshared ()
-.IR pthread_rwlockattr_getpshared ()
-.IR pthread_rwlockattr_setpshared ()
-.in
-.fi
-.SS TSF - _POSIX_THREAD_SAFE_FUNCTIONS - _SC_THREAD_SAFE_FUNCTIONS
-The following functions are affected:
-.PP
-.nf
-.in +4n
-.IR readdir_r ()
-.IR getgrgid_r ()
-.IR getgrnam_r ()
-.IR getpwnam_r ()
-.IR getpwuid_r ()
-.IR flockfile ()
-.IR ftrylockfile ()
-.IR funlockfile ()
-.IR getc_unlocked ()
-.IR getchar_unlocked ()
-.IR putc_unlocked ()
-.IR putchar_unlocked ()
-.IR rand_r ()
-.IR strerror_r ()
-.IR strtok_r ()
-.IR asctime_r ()
-.IR ctime_r ()
-.IR gmtime_r ()
-.IR localtime_r ()
-.in
-.fi
-.SS TSP - _POSIX_THREAD_SPORADIC_SERVER - _SC_THREAD_SPORADIC_SERVER
-This option implies the
-.B _POSIX_THREAD_PRIORITY_SCHEDULING
-option.
-The following functions are affected:
-.PP
-.nf
-.in +4n
-.IR sched_getparam ()
-.IR sched_setparam ()
-.IR sched_setscheduler ()
-.in
-.fi
-.SS THR - _POSIX_THREADS - _SC_THREADS
-Basic support for POSIX threads is available.
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR pthread_atfork ()
-.IR pthread_attr_destroy ()
-.IR pthread_attr_getdetachstate ()
-.IR pthread_attr_getschedparam ()
-.IR pthread_attr_init ()
-.IR pthread_attr_setdetachstate ()
-.IR pthread_attr_setschedparam ()
-.IR pthread_cancel ()
-.IR pthread_cleanup_push ()
-.IR pthread_cleanup_pop ()
-.IR pthread_cond_broadcast ()
-.IR pthread_cond_destroy ()
-.IR pthread_cond_init ()
-.IR pthread_cond_signal ()
-.IR pthread_cond_timedwait ()
-.IR pthread_cond_wait ()
-.IR pthread_condattr_destroy ()
-.IR pthread_condattr_init ()
-.IR pthread_create ()
-.IR pthread_detach ()
-.IR pthread_equal ()
-.IR pthread_exit ()
-.IR pthread_getspecific ()
-.IR pthread_join ()
-.IR pthread_key_create ()
-.IR pthread_key_delete ()
-.IR pthread_mutex_destroy ()
-.IR pthread_mutex_init ()
-.IR pthread_mutex_lock ()
-.IR pthread_mutex_trylock ()
-.IR pthread_mutex_unlock ()
-.IR pthread_mutexattr_destroy ()
-.IR pthread_mutexattr_init ()
-.IR pthread_once ()
-.IR pthread_rwlock_destroy ()
-.IR pthread_rwlock_init ()
-.IR pthread_rwlock_rdlock ()
-.IR pthread_rwlock_tryrdlock ()
-.IR pthread_rwlock_trywrlock ()
-.IR pthread_rwlock_unlock ()
-.IR pthread_rwlock_wrlock ()
-.IR pthread_rwlockattr_destroy ()
-.IR pthread_rwlockattr_init ()
-.IR pthread_self ()
-.IR pthread_setcancelstate ()
-.IR pthread_setcanceltype ()
-.IR pthread_setspecific ()
-.IR pthread_testcancel ()
-.in
-.fi
-.SS TMO - _POSIX_TIMEOUTS - _SC_TIMEOUTS
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR mq_timedreceive ()
-.IR mq_timedsend ()
-.IR pthread_mutex_timedlock ()
-.IR pthread_rwlock_timedrdlock ()
-.IR pthread_rwlock_timedwrlock ()
-.IR sem_timedwait ()
-.IR posix_trace_timedgetnext_event ()
-.in
-.fi
-.SS TMR - _POSIX_TIMERS - _SC_TIMERS
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR clock_getres ()
-.IR clock_gettime ()
-.IR clock_settime ()
-.IR nanosleep ()
-.IR timer_create ()
-.IR timer_delete ()
-.IR timer_gettime ()
-.IR timer_getoverrun ()
-.IR timer_settime ()
-.in
-.fi
-.SS TRC - _POSIX_TRACE - _SC_TRACE
-POSIX tracing is available.
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR posix_trace_attr_destroy ()
-.IR posix_trace_attr_getclockres ()
-.IR posix_trace_attr_getcreatetime ()
-.IR posix_trace_attr_getgenversion ()
-.IR posix_trace_attr_getmaxdatasize ()
-.IR posix_trace_attr_getmaxsystemeventsize ()
-.IR posix_trace_attr_getmaxusereventsize ()
-.IR posix_trace_attr_getname ()
-.IR posix_trace_attr_getstreamfullpolicy ()
-.IR posix_trace_attr_getstreamsize ()
-.IR posix_trace_attr_init ()
-.IR posix_trace_attr_setmaxdatasize ()
-.IR posix_trace_attr_setname ()
-.IR posix_trace_attr_setstreamsize ()
-.IR posix_trace_attr_setstreamfullpolicy ()
-.IR posix_trace_clear ()
-.IR posix_trace_create ()
-.IR posix_trace_event ()
-.IR posix_trace_eventid_equal ()
-.IR posix_trace_eventid_get_name ()
-.IR posix_trace_eventid_open ()
-.IR posix_trace_eventtypelist_getnext_id ()
-.IR posix_trace_eventtypelist_rewind ()
-.IR posix_trace_flush ()
-.IR posix_trace_get_attr ()
-.IR posix_trace_get_status ()
-.IR posix_trace_getnext_event ()
-.IR posix_trace_shutdown ()
-.IR posix_trace_start ()
-.IR posix_trace_stop ()
-.IR posix_trace_trygetnext_event ()
-.in
-.fi
-.SS TEF - _POSIX_TRACE_EVENT_FILTER - _SC_TRACE_EVENT_FILTER
-This option implies the
-.B _POSIX_TRACE
-option.
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR posix_trace_eventset_add ()
-.IR posix_trace_eventset_del ()
-.IR posix_trace_eventset_empty ()
-.IR posix_trace_eventset_fill ()
-.IR posix_trace_eventset_ismember ()
-.IR posix_trace_get_filter ()
-.IR posix_trace_set_filter ()
-.IR posix_trace_trid_eventid_open ()
-.in
-.fi
-.SS TRI - _POSIX_TRACE_INHERIT - _SC_TRACE_INHERIT
-Tracing children of the traced process is supported.
-This option implies the
-.B _POSIX_TRACE
-option.
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR posix_trace_attr_getinherited ()
-.IR posix_trace_attr_setinherited ()
-.in
-.fi
-.SS TRL - _POSIX_TRACE_LOG - _SC_TRACE_LOG
-This option implies the
-.B _POSIX_TRACE
-option.
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR posix_trace_attr_getlogfullpolicy ()
-.IR posix_trace_attr_getlogsize ()
-.IR posix_trace_attr_setlogfullpolicy ()
-.IR posix_trace_attr_setlogsize ()
-.IR posix_trace_close ()
-.IR posix_trace_create_withlog ()
-.IR posix_trace_open ()
-.IR posix_trace_rewind ()
-.in
-.fi
-.SS TYM - _POSIX_TYPED_MEMORY_OBJECTS - _SC_TYPED_MEMORY_OBJECT
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR posix_mem_offset ()
-.IR posix_typed_mem_get_info ()
-.IR posix_typed_mem_open ()
-.in
-.fi
-.SS --- - _POSIX_VDISABLE
-Always present (probably 0).
-Value to set a changeable special control
-character to indicate that it is disabled.
-.SH X/OPEN SYSTEM INTERFACE EXTENSIONS
-.SS XSI - _XOPEN_CRYPT - _SC_XOPEN_CRYPT
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR crypt ()
-.IR encrypt ()
-.IR setkey ()
-.fi
-.SS XSI - _XOPEN_REALTIME - _SC_XOPEN_REALTIME
-This option implies the following options:
-.PP
-.PD 0
-.TP
-.BR _POSIX_ASYNCHRONOUS_IO == 200112L
-.TP
-.B _POSIX_FSYNC
-.TP
-.B _POSIX_MAPPED_FILES
-.TP
-.BR _POSIX_MEMLOCK == 200112L
-.TP
-.BR _POSIX_MEMLOCK_RANGE == 200112L
-.TP
-.B _POSIX_MEMORY_PROTECTION
-.TP
-.BR _POSIX_MESSAGE_PASSING == 200112L
-.TP
-.B _POSIX_PRIORITIZED_IO
-.TP
-.BR _POSIX_PRIORITY_SCHEDULING == 200112L
-.TP
-.BR _POSIX_REALTIME_SIGNALS == 200112L
-.TP
-.BR _POSIX_SEMAPHORES == 200112L
-.TP
-.BR _POSIX_SHARED_MEMORY_OBJECTS == 200112L
-.TP
-.BR _POSIX_SYNCHRONIZED_IO == 200112L
-.TP
-.BR _POSIX_TIMERS == 200112L
-.PD
-.\"
-.SS ADV - --- - ---
-The Advanced Realtime option group implies that the following options
-are all defined to 200112L:
-.PP
-.PD 0
-.TP
-.B _POSIX_ADVISORY_INFO
-.TP
-.B _POSIX_CLOCK_SELECTION
-(implies
-.BR _POSIX_TIMERS )
-.TP
-.B _POSIX_CPUTIME
-(implies
-.BR _POSIX_TIMERS )
-.TP
-.B _POSIX_MONOTONIC_CLOCK
-(implies
-.BR _POSIX_TIMERS )
-.TP
-.B _POSIX_SPAWN
-.TP
-.B _POSIX_SPORADIC_SERVER
-(implies
-.BR _POSIX_PRIORITY_SCHEDULING )
-.TP
-.B _POSIX_TIMEOUTS
-.TP
-.B _POSIX_TYPED_MEMORY_OBJECTS
-.PD
-.\"
-.SS XSI - _XOPEN_REALTIME_THREADS - _SC_XOPEN_REALTIME_THREADS
-This option implies that the following options
-are all defined to 200112L:
-.PP
-.PD 0
-.TP
-.B _POSIX_THREAD_PRIO_INHERIT
-.TP
-.B _POSIX_THREAD_PRIO_PROTECT
-.TP
-.B _POSIX_THREAD_PRIORITY_SCHEDULING
-.PD
-.SS ADVANCED REALTIME THREADS - --- - ---
-This option implies that the following options
-are all defined to 200112L:
-.PP
-.PD 0
-.TP
-.B _POSIX_BARRIERS
-(implies
-.BR _POSIX_THREADS ,
-.BR _POSIX_THREAD_SAFE_FUNCTIONS )
-.TP
-.B _POSIX_SPIN_LOCKS
-(implies
-.BR _POSIX_THREADS ,
-.BR _POSIX_THREAD_SAFE_FUNCTIONS )
-.TP
-.B _POSIX_THREAD_CPUTIME
-(implies
-.BR _POSIX_TIMERS )
-.TP
-.B _POSIX_THREAD_SPORADIC_SERVER
-(implies
-.BR _POSIX_THREAD_PRIORITY_SCHEDULING )
-.PD
-.\"
-.SS TRACING - --- - ---
-This option implies that the following options
-are all defined to 200112L:
-.PP
-.PD 0
-.TP
-.B _POSIX_TRACE
-.TP
-.B _POSIX_TRACE_EVENT_FILTER
-.TP
-.B _POSIX_TRACE_LOG
-.TP
-.B _POSIX_TRACE_INHERIT
-.PD
-.SS STREAMS - _XOPEN_STREAMS - _SC_XOPEN_STREAMS
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR fattach ()
-.IR fdetach ()
-.IR getmsg ()
-.IR getpmsg ()
-.IR ioctl ()
-.IR isastream ()
-.IR putmsg ()
-.IR putpmsg ()
-.in
-.fi
-.SS XSI - _XOPEN_LEGACY - _SC_XOPEN_LEGACY
-Functions included in the legacy option group were previously mandatory,
-but are now optional in this version.
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR bcmp ()
-.IR bcopy ()
-.IR bzero ()
-.IR ecvt ()
-.IR fcvt ()
-.IR ftime ()
-.IR gcvt ()
-.IR getwd ()
-.IR index ()
-.IR mktemp ()
-.IR rindex ()
-.IR utimes ()
-.IR wcswcs ()
-.in
-.fi
-.SS XSI - _XOPEN_UNIX - _SC_XOPEN_UNIX
-The following functions are present:
-.PP
-.nf
-.in +4n
-.IR mmap ()
-.IR munmap ()
-.IR msync ()
-.in
-.fi
-.PP
-This option implies the following options:
-.PP
-.PD 0
-.TP
-.B _POSIX_FSYNC
-.TP
-.B _POSIX_MAPPED_FILES
-.TP
-.B _POSIX_MEMORY_PROTECTION
-.TP
-.B _POSIX_THREAD_ATTR_STACKADDR
-.TP
-.B _POSIX_THREAD_ATTR_STACKSIZE
-.TP
-.B _POSIX_THREAD_PROCESS_SHARED
-.TP
-.B _POSIX_THREAD_SAFE_FUNCTIONS
-.TP
-.B _POSIX_THREADS
-.PD
-.PP
-This option may imply the following options from the XSI option groups:
-.PP
-.PD 0
-.TP
-.RB "Encryption (" _XOPEN_CRYPT )
-.TP
-.RB "Realtime (" _XOPEN_REALTIME )
-.TP
-.RB "Advanced Realtime (" ADB )
-.TP
-.RB "Realtime Threads (" _XOPEN_REALTIME_THREADS )
-.TP
-.RB "Advanced Realtime Threads (" "ADVANCED REALTIME THREADS" )
-.TP
-.RB "Tracing (" TRACING )
-.TP
-.RB "XSI Streams (" STREAMS )
-.TP
-.RB "Legacy (" _XOPEN_LEGACY )
-.PD
-.SH SEE ALSO
-.BR sysconf (3),
-.BR standards (7)
diff --git a/man7/precedence.7 b/man7/precedence.7
deleted file mode 100644
index 6ef216ddd..000000000
--- a/man7/precedence.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/operator.7
diff --git a/man7/process-keyring.7 b/man7/process-keyring.7
deleted file mode 100644
index 864b05bcd..000000000
--- a/man7/process-keyring.7
+++ /dev/null
@@ -1,55 +0,0 @@
-.\" Copyright (C) 2014 Red Hat, Inc. All Rights Reserved.
-.\" Written by David Howells (dhowells@redhat.com)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH process-keyring 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-process-keyring \- per-process shared keyring
-.SH DESCRIPTION
-The process keyring is a keyring used to anchor keys on behalf of a process.
-It is created only when a process requests it.
-The process keyring has the name (description)
-.IR _pid .
-.PP
-A special serial number value,
-.BR KEY_SPEC_PROCESS_KEYRING ,
-is defined that can be used in lieu of the actual serial number of
-the calling process's process keyring.
-.PP
-From the
-.BR keyctl (1)
-utility, '\fB@p\fP' can be used instead of a numeric key ID in
-much the same way, but since
-.BR keyctl (1)
-is a program run after forking, this is of no utility.
-.PP
-A thread created using the
-.BR clone (2)
-.B CLONE_THREAD
-flag has the same process keyring as the caller of
-.BR clone (2).
-When a new process is created using
-.BR fork ()
-it initially has no process keyring.
-A process's process keyring is cleared on
-.BR execve (2).
-The process keyring is destroyed when the last
-thread that refers to it terminates.
-.PP
-If a process doesn't have a process keyring when it is accessed,
-then the process keyring will be created if the keyring is to be modified;
-otherwise, the error
-.B ENOKEY
-results.
-.SH SEE ALSO
-.ad l
-.nh
-.BR keyctl (1),
-.BR keyctl (3),
-.BR keyrings (7),
-.BR persistent\-keyring (7),
-.BR session\-keyring (7),
-.BR thread\-keyring (7),
-.BR user\-keyring (7),
-.BR user\-session\-keyring (7)
diff --git a/man7/pthreads.7 b/man7/pthreads.7
deleted file mode 100644
index 50d211a9a..000000000
--- a/man7/pthreads.7
+++ /dev/null
@@ -1,937 +0,0 @@
-.\" Copyright (c) 2005 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pthreads 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pthreads \- POSIX threads
-.SH DESCRIPTION
-POSIX.1 specifies a set of interfaces (functions, header files) for
-threaded programming commonly known as POSIX threads, or Pthreads.
-A single process can contain multiple threads,
-all of which are executing the same program.
-These threads share the same global memory (data and heap segments),
-but each thread has its own stack (automatic variables).
-.PP
-POSIX.1 also requires that threads share a range of other attributes
-(i.e., these attributes are process-wide rather than per-thread):
-.IP \[bu] 3
-process ID
-.IP \[bu]
-parent process ID
-.IP \[bu]
-process group ID and session ID
-.IP \[bu]
-controlling terminal
-.IP \[bu]
-user and group IDs
-.IP \[bu]
-open file descriptors
-.IP \[bu]
-record locks (see
-.BR fcntl (2))
-.IP \[bu]
-signal dispositions
-.IP \[bu]
-file mode creation mask
-.RB ( umask (2))
-.IP \[bu]
-current directory
-.RB ( chdir (2))
-and
-root directory
-.RB ( chroot (2))
-.IP \[bu]
-interval timers
-.RB ( setitimer (2))
-and POSIX timers
-.RB ( timer_create (2))
-.IP \[bu]
-nice value
-.RB ( setpriority (2))
-.IP \[bu]
-resource limits
-.RB ( setrlimit (2))
-.IP \[bu]
-measurements of the consumption of CPU time
-.RB ( times (2))
-and resources
-.RB ( getrusage (2))
-.PP
-As well as the stack, POSIX.1 specifies that various other
-attributes are distinct for each thread, including:
-.IP \[bu] 3
-thread ID (the
-.I pthread_t
-data type)
-.IP \[bu]
-signal mask
-.RB ( pthread_sigmask (3))
-.IP \[bu]
-the
-.I errno
-variable
-.IP \[bu]
-alternate signal stack
-.RB ( sigaltstack (2))
-.IP \[bu]
-real-time scheduling policy and priority
-.RB ( sched (7))
-.PP
-The following Linux-specific features are also per-thread:
-.IP \[bu] 3
-capabilities (see
-.BR capabilities (7))
-.IP \[bu]
-CPU affinity
-.RB ( sched_setaffinity (2))
-.SS Pthreads function return values
-Most pthreads functions return 0 on success, and an error number on failure.
-The error numbers that can be returned have the same meaning as
-the error numbers returned in
-.I errno
-by conventional system calls and C library functions.
-Note that the pthreads functions do not set
-.IR errno .
-For each of the pthreads functions that can return an error,
-POSIX.1-2001 specifies that the function can never fail with the error
-.BR EINTR .
-.SS Thread IDs
-Each of the threads in a process has a unique thread identifier
-(stored in the type
-.IR pthread_t ).
-This identifier is returned to the caller of
-.BR pthread_create (3),
-and a thread can obtain its own thread identifier using
-.BR pthread_self (3).
-.PP
-Thread IDs are guaranteed to be unique only within a process.
-(In all pthreads functions that accept a thread ID as an argument,
-that ID by definition refers to a thread in
-the same process as the caller.)
-.PP
-The system may reuse a thread ID after a terminated thread has been joined,
-or a detached thread has terminated.
-POSIX says: "If an application attempts to use a thread ID whose
-lifetime has ended, the behavior is undefined."
-.SS Thread-safe functions
-A thread-safe function is one that can be safely
-(i.e., it will deliver the same results regardless of whether it is)
-called from multiple threads at the same time.
-.PP
-POSIX.1-2001 and POSIX.1-2008 require that all functions specified
-in the standard shall be thread-safe,
-except for the following functions:
-.PP
-.in +4n
-.EX
-asctime()
-basename()
-catgets()
-crypt()
-ctermid() if passed a non-NULL argument
-ctime()
-dbm_clearerr()
-dbm_close()
-dbm_delete()
-dbm_error()
-dbm_fetch()
-dbm_firstkey()
-dbm_nextkey()
-dbm_open()
-dbm_store()
-dirname()
-dlerror()
-drand48()
-ecvt() [POSIX.1-2001 only (function removed in POSIX.1-2008)]
-encrypt()
-endgrent()
-endpwent()
-endutxent()
-fcvt() [POSIX.1-2001 only (function removed in POSIX.1-2008)]
-ftw()
-gcvt() [POSIX.1-2001 only (function removed in POSIX.1-2008)]
-getc_unlocked()
-getchar_unlocked()
-getdate()
-getenv()
-getgrent()
-getgrgid()
-getgrnam()
-gethostbyaddr() [POSIX.1-2001 only (function removed in
- POSIX.1-2008)]
-gethostbyname() [POSIX.1-2001 only (function removed in
- POSIX.1-2008)]
-gethostent()
-getlogin()
-getnetbyaddr()
-getnetbyname()
-getnetent()
-getopt()
-getprotobyname()
-getprotobynumber()
-getprotoent()
-getpwent()
-getpwnam()
-getpwuid()
-getservbyname()
-getservbyport()
-getservent()
-getutxent()
-getutxid()
-getutxline()
-gmtime()
-hcreate()
-hdestroy()
-hsearch()
-inet_ntoa()
-l64a()
-lgamma()
-lgammaf()
-lgammal()
-localeconv()
-localtime()
-lrand48()
-mrand48()
-nftw()
-nl_langinfo()
-ptsname()
-putc_unlocked()
-putchar_unlocked()
-putenv()
-pututxline()
-rand()
-readdir()
-setenv()
-setgrent()
-setkey()
-setpwent()
-setutxent()
-strerror()
-strsignal() [Added in POSIX.1-2008]
-strtok()
-system() [Added in POSIX.1-2008]
-tmpnam() if passed a non-NULL argument
-ttyname()
-unsetenv()
-wcrtomb() if its final argument is NULL
-wcsrtombs() if its final argument is NULL
-wcstombs()
-wctomb()
-.EE
-.in
-.SS Async-cancel-safe functions
-An async-cancel-safe function is one that can be safely called
-in an application where asynchronous cancelability is enabled (see
-.BR pthread_setcancelstate (3)).
-.PP
-Only the following functions are required to be async-cancel-safe by
-POSIX.1-2001 and POSIX.1-2008:
-.PP
-.in +4n
-.EX
-pthread_cancel()
-pthread_setcancelstate()
-pthread_setcanceltype()
-.EE
-.in
-.SS Cancelation points
-POSIX.1 specifies that certain functions must,
-and certain other functions may, be cancelation points.
-If a thread is cancelable, its cancelability type is deferred,
-and a cancelation request is pending for the thread,
-then the thread is canceled when it calls a function
-that is a cancelation point.
-.PP
-The following functions are required to be cancelation points by
-POSIX.1-2001 and/or POSIX.1-2008:
-.PP
-.\" FIXME
-.\" Document the list of all functions that are cancelation points in glibc
-.in +4n
-.EX
-accept()
-aio_suspend()
-clock_nanosleep()
-close()
-connect()
-creat()
-fcntl() F_SETLKW
-fdatasync()
-fsync()
-getmsg()
-getpmsg()
-lockf() F_LOCK
-mq_receive()
-mq_send()
-mq_timedreceive()
-mq_timedsend()
-msgrcv()
-msgsnd()
-msync()
-nanosleep()
-open()
-openat() [Added in POSIX.1-2008]
-pause()
-poll()
-pread()
-pselect()
-pthread_cond_timedwait()
-pthread_cond_wait()
-pthread_join()
-pthread_testcancel()
-putmsg()
-putpmsg()
-pwrite()
-read()
-readv()
-recv()
-recvfrom()
-recvmsg()
-select()
-sem_timedwait()
-sem_wait()
-send()
-sendmsg()
-sendto()
-sigpause() [POSIX.1-2001 only (moves to "may" list in POSIX.1-2008)]
-sigsuspend()
-sigtimedwait()
-sigwait()
-sigwaitinfo()
-sleep()
-system()
-tcdrain()
-usleep() [POSIX.1-2001 only (function removed in POSIX.1-2008)]
-wait()
-waitid()
-waitpid()
-write()
-writev()
-.EE
-.in
-.PP
-The following functions may be cancelation points according to
-POSIX.1-2001 and/or POSIX.1-2008:
-.PP
-.in +4n
-.EX
-access()
-asctime()
-asctime_r()
-catclose()
-catgets()
-catopen()
-chmod() [Added in POSIX.1-2008]
-chown() [Added in POSIX.1-2008]
-closedir()
-closelog()
-ctermid()
-ctime()
-ctime_r()
-dbm_close()
-dbm_delete()
-dbm_fetch()
-dbm_nextkey()
-dbm_open()
-dbm_store()
-dlclose()
-dlopen()
-dprintf() [Added in POSIX.1-2008]
-endgrent()
-endhostent()
-endnetent()
-endprotoent()
-endpwent()
-endservent()
-endutxent()
-faccessat() [Added in POSIX.1-2008]
-fchmod() [Added in POSIX.1-2008]
-fchmodat() [Added in POSIX.1-2008]
-fchown() [Added in POSIX.1-2008]
-fchownat() [Added in POSIX.1-2008]
-fclose()
-fcntl() (for any value of cmd argument)
-fflush()
-fgetc()
-fgetpos()
-fgets()
-fgetwc()
-fgetws()
-fmtmsg()
-fopen()
-fpathconf()
-fprintf()
-fputc()
-fputs()
-fputwc()
-fputws()
-fread()
-freopen()
-fscanf()
-fseek()
-fseeko()
-fsetpos()
-fstat()
-fstatat() [Added in POSIX.1-2008]
-ftell()
-ftello()
-ftw()
-futimens() [Added in POSIX.1-2008]
-fwprintf()
-fwrite()
-fwscanf()
-getaddrinfo()
-getc()
-getc_unlocked()
-getchar()
-getchar_unlocked()
-getcwd()
-getdate()
-getdelim() [Added in POSIX.1-2008]
-getgrent()
-getgrgid()
-getgrgid_r()
-getgrnam()
-getgrnam_r()
-gethostbyaddr() [POSIX.1-2001 only (function removed in
- POSIX.1-2008)]
-gethostbyname() [POSIX.1-2001 only (function removed in
- POSIX.1-2008)]
-gethostent()
-gethostid()
-gethostname()
-getline() [Added in POSIX.1-2008]
-getlogin()
-getlogin_r()
-getnameinfo()
-getnetbyaddr()
-getnetbyname()
-getnetent()
-getopt() (if opterr is nonzero)
-getprotobyname()
-getprotobynumber()
-getprotoent()
-getpwent()
-getpwnam()
-getpwnam_r()
-getpwuid()
-getpwuid_r()
-gets()
-getservbyname()
-getservbyport()
-getservent()
-getutxent()
-getutxid()
-getutxline()
-getwc()
-getwchar()
-getwd() [POSIX.1-2001 only (function removed in POSIX.1-2008)]
-glob()
-iconv_close()
-iconv_open()
-ioctl()
-link()
-linkat() [Added in POSIX.1-2008]
-lio_listio() [Added in POSIX.1-2008]
-localtime()
-localtime_r()
-lockf() [Added in POSIX.1-2008]
-lseek()
-lstat()
-mkdir() [Added in POSIX.1-2008]
-mkdirat() [Added in POSIX.1-2008]
-mkdtemp() [Added in POSIX.1-2008]
-mkfifo() [Added in POSIX.1-2008]
-mkfifoat() [Added in POSIX.1-2008]
-mknod() [Added in POSIX.1-2008]
-mknodat() [Added in POSIX.1-2008]
-mkstemp()
-mktime()
-nftw()
-opendir()
-openlog()
-pathconf()
-pclose()
-perror()
-popen()
-posix_fadvise()
-posix_fallocate()
-posix_madvise()
-posix_openpt()
-posix_spawn()
-posix_spawnp()
-posix_trace_clear()
-posix_trace_close()
-posix_trace_create()
-posix_trace_create_withlog()
-posix_trace_eventtypelist_getnext_id()
-posix_trace_eventtypelist_rewind()
-posix_trace_flush()
-posix_trace_get_attr()
-posix_trace_get_filter()
-posix_trace_get_status()
-posix_trace_getnext_event()
-posix_trace_open()
-posix_trace_rewind()
-posix_trace_set_filter()
-posix_trace_shutdown()
-posix_trace_timedgetnext_event()
-posix_typed_mem_open()
-printf()
-psiginfo() [Added in POSIX.1-2008]
-psignal() [Added in POSIX.1-2008]
-pthread_rwlock_rdlock()
-pthread_rwlock_timedrdlock()
-pthread_rwlock_timedwrlock()
-pthread_rwlock_wrlock()
-putc()
-putc_unlocked()
-putchar()
-putchar_unlocked()
-puts()
-pututxline()
-putwc()
-putwchar()
-readdir()
-readdir_r()
-readlink() [Added in POSIX.1-2008]
-readlinkat() [Added in POSIX.1-2008]
-remove()
-rename()
-renameat() [Added in POSIX.1-2008]
-rewind()
-rewinddir()
-scandir() [Added in POSIX.1-2008]
-scanf()
-seekdir()
-semop()
-setgrent()
-sethostent()
-setnetent()
-setprotoent()
-setpwent()
-setservent()
-setutxent()
-sigpause() [Added in POSIX.1-2008]
-stat()
-strerror()
-strerror_r()
-strftime()
-symlink()
-symlinkat() [Added in POSIX.1-2008]
-sync()
-syslog()
-tmpfile()
-tmpnam()
-ttyname()
-ttyname_r()
-tzset()
-ungetc()
-ungetwc()
-unlink()
-unlinkat() [Added in POSIX.1-2008]
-utime() [Added in POSIX.1-2008]
-utimensat() [Added in POSIX.1-2008]
-utimes() [Added in POSIX.1-2008]
-vdprintf() [Added in POSIX.1-2008]
-vfprintf()
-vfwprintf()
-vprintf()
-vwprintf()
-wcsftime()
-wordexp()
-wprintf()
-wscanf()
-.EE
-.in
-.PP
-An implementation may also mark other functions
-not specified in the standard as cancelation points.
-In particular, an implementation is likely to mark
-any nonstandard function that may block as a cancelation point.
-(This includes most functions that can touch files.)
-.PP
-It should be noted that even if an application is not using
-asynchronous cancelation, that calling a function from the above list
-from an asynchronous signal handler may cause the equivalent of
-asynchronous cancelation.
-The underlying user code may not expect
-asynchronous cancelation and the state of the user data may become
-inconsistent.
-Therefore signals should be used with caution when
-entering a region of deferred cancelation.
-.\" So, scanning "cancelation point" comments in the glibc 2.8 header
-.\" files, it looks as though at least the following nonstandard
-.\" functions are cancelation points:
-.\" endnetgrent
-.\" endspent
-.\" epoll_pwait
-.\" epoll_wait
-.\" fcloseall
-.\" fdopendir
-.\" fflush_unlocked
-.\" fgetc_unlocked
-.\" fgetgrent
-.\" fgetgrent_r
-.\" fgetpwent
-.\" fgetpwent_r
-.\" fgets_unlocked
-.\" fgetspent
-.\" fgetspent_r
-.\" fgetwc_unlocked
-.\" fgetws_unlocked
-.\" fputc_unlocked
-.\" fputs_unlocked
-.\" fputwc_unlocked
-.\" fputws_unlocked
-.\" fread_unlocked
-.\" fwrite_unlocked
-.\" gai_suspend
-.\" getaddrinfo_a
-.\" getdate_r
-.\" getgrent_r
-.\" getgrouplist
-.\" gethostbyaddr_r
-.\" gethostbyname2
-.\" gethostbyname2_r
-.\" gethostbyname_r
-.\" gethostent_r
-.\" getnetbyaddr_r
-.\" getnetbyname_r
-.\" getnetent_r
-.\" getnetgrent
-.\" getnetgrent_r
-.\" getprotobyname_r
-.\" getprotobynumber_r
-.\" getprotoent_r
-.\" getpw
-.\" getpwent_r
-.\" getservbyname_r
-.\" getservbyport_r
-.\" getservent_r
-.\" getspent
-.\" getspent_r
-.\" getspnam
-.\" getspnam_r
-.\" getutmp
-.\" getutmpx
-.\" getw
-.\" getwc_unlocked
-.\" getwchar_unlocked
-.\" initgroups
-.\" innetgr
-.\" mkostemp
-.\" mkostemp64
-.\" mkstemp64
-.\" ppoll
-.\" pthread_timedjoin_np
-.\" putgrent
-.\" putpwent
-.\" putspent
-.\" putw
-.\" putwc_unlocked
-.\" putwchar_unlocked
-.\" rcmd
-.\" rcmd_af
-.\" rexec
-.\" rexec_af
-.\" rresvport
-.\" rresvport_af
-.\" ruserok
-.\" ruserok_af
-.\" setnetgrent
-.\" setspent
-.\" sgetspent
-.\" sgetspent_r
-.\" updwtmpx
-.\" utmpxname
-.\" vfscanf
-.\" vfwscanf
-.\" vscanf
-.\" vsyslog
-.\" vwscanf
-.SS Compiling on Linux
-On Linux, programs that use the Pthreads API should be compiled using
-.IR "cc \-pthread" .
-.SS Linux implementations of POSIX threads
-Over time, two threading implementations have been provided by
-the GNU C library on Linux:
-.TP
-.B LinuxThreads
-This is the original Pthreads implementation.
-Since glibc 2.4, this implementation is no longer supported.
-.TP
-.BR NPTL " (Native POSIX Threads Library)"
-This is the modern Pthreads implementation.
-By comparison with LinuxThreads, NPTL provides closer conformance to
-the requirements of the POSIX.1 specification and better performance
-when creating large numbers of threads.
-NPTL is available since glibc 2.3.2,
-and requires features that are present in the Linux 2.6 kernel.
-.PP
-Both of these are so-called 1:1 implementations, meaning that each
-thread maps to a kernel scheduling entity.
-Both threading implementations employ the Linux
-.BR clone (2)
-system call.
-In NPTL, thread synchronization primitives (mutexes,
-thread joining, and so on) are implemented using the Linux
-.BR futex (2)
-system call.
-.SS LinuxThreads
-The notable features of this implementation are the following:
-.IP \[bu] 3
-In addition to the main (initial) thread,
-and the threads that the program creates using
-.BR pthread_create (3),
-the implementation creates a "manager" thread.
-This thread handles thread creation and termination.
-(Problems can result if this thread is inadvertently killed.)
-.IP \[bu]
-Signals are used internally by the implementation.
-On Linux 2.2 and later, the first three real-time signals are used
-(see also
-.BR signal (7)).
-On older Linux kernels,
-.B SIGUSR1
-and
-.B SIGUSR2
-are used.
-Applications must avoid the use of whichever set of signals is
-employed by the implementation.
-.IP \[bu]
-Threads do not share process IDs.
-(In effect, LinuxThreads threads are implemented as processes which share
-more information than usual, but which do not share a common process ID.)
-LinuxThreads threads (including the manager thread)
-are visible as separate processes using
-.BR ps (1).
-.PP
-The LinuxThreads implementation deviates from the POSIX.1
-specification in a number of ways, including the following:
-.IP \[bu] 3
-Calls to
-.BR getpid (2)
-return a different value in each thread.
-.IP \[bu]
-Calls to
-.BR getppid (2)
-in threads other than the main thread return the process ID of the
-manager thread; instead
-.BR getppid (2)
-in these threads should return the same value as
-.BR getppid (2)
-in the main thread.
-.IP \[bu]
-When one thread creates a new child process using
-.BR fork (2),
-any thread should be able to
-.BR wait (2)
-on the child.
-However, the implementation allows only the thread that
-created the child to
-.BR wait (2)
-on it.
-.IP \[bu]
-When a thread calls
-.BR execve (2),
-all other threads are terminated (as required by POSIX.1).
-However, the resulting process has the same PID as the thread that called
-.BR execve (2):
-it should have the same PID as the main thread.
-.IP \[bu]
-Threads do not share user and group IDs.
-This can cause complications with set-user-ID programs and
-can cause failures in Pthreads functions if an application
-changes its credentials using
-.BR seteuid (2)
-or similar.
-.IP \[bu]
-Threads do not share a common session ID and process group ID.
-.IP \[bu]
-Threads do not share record locks created using
-.BR fcntl (2).
-.IP \[bu]
-The information returned by
-.BR times (2)
-and
-.BR getrusage (2)
-is per-thread rather than process-wide.
-.IP \[bu]
-Threads do not share semaphore undo values (see
-.BR semop (2)).
-.IP \[bu]
-Threads do not share interval timers.
-.IP \[bu]
-Threads do not share a common nice value.
-.IP \[bu]
-POSIX.1 distinguishes the notions of signals that are directed
-to the process as a whole and signals that are directed to individual
-threads.
-According to POSIX.1, a process-directed signal (sent using
-.BR kill (2),
-for example) should be handled by a single,
-arbitrarily selected thread within the process.
-LinuxThreads does not support the notion of process-directed signals:
-signals may be sent only to specific threads.
-.IP \[bu]
-Threads have distinct alternate signal stack settings.
-However, a new thread's alternate signal stack settings
-are copied from the thread that created it, so that
-the threads initially share an alternate signal stack.
-(A new thread should start with no alternate signal stack defined.
-If two threads handle signals on their shared alternate signal
-stack at the same time, unpredictable program failures are
-likely to occur.)
-.SS NPTL
-With NPTL, all of the threads in a process are placed
-in the same thread group;
-all members of a thread group share the same PID.
-NPTL does not employ a manager thread.
-.PP
-NPTL makes internal use of the first two real-time signals;
-these signals cannot be used in applications.
-See
-.BR nptl (7)
-for further details.
-.PP
-NPTL still has at least one nonconformance with POSIX.1:
-.IP \[bu] 3
-Threads do not share a common nice value.
-.\" FIXME . bug report filed for NPTL nice nonconformance
-.\" http://bugzilla.kernel.org/show_bug.cgi?id=6258
-.\" Sep 08: there is a patch by Denys Vlasenko to address this
-.\" "make setpriority POSIX compliant; introduce PRIO_THREAD extension"
-.\" Monitor this to see if it makes it into mainline.
-.PP
-Some NPTL nonconformances occur only with older kernels:
-.IP \[bu] 3
-The information returned by
-.BR times (2)
-and
-.BR getrusage (2)
-is per-thread rather than process-wide (fixed in Linux 2.6.9).
-.IP \[bu]
-Threads do not share resource limits (fixed in Linux 2.6.10).
-.IP \[bu]
-Threads do not share interval timers (fixed in Linux 2.6.12).
-.IP \[bu]
-Only the main thread is permitted to start a new session using
-.BR setsid (2)
-(fixed in Linux 2.6.16).
-.IP \[bu]
-Only the main thread is permitted to make the process into a
-process group leader using
-.BR setpgid (2)
-(fixed in Linux 2.6.16).
-.IP \[bu]
-Threads have distinct alternate signal stack settings.
-However, a new thread's alternate signal stack settings
-are copied from the thread that created it, so that
-the threads initially share an alternate signal stack
-(fixed in Linux 2.6.16).
-.PP
-Note the following further points about the NPTL implementation:
-.IP \[bu] 3
-If the stack size soft resource limit (see the description of
-.B RLIMIT_STACK
-in
-.BR setrlimit (2))
-is set to a value other than
-.IR unlimited ,
-then this value defines the default stack size for new threads.
-To be effective, this limit must be set before the program
-is executed, perhaps using the
-.I ulimit \-s
-shell built-in command
-.RI ( "limit stacksize"
-in the C shell).
-.SS Determining the threading implementation
-Since glibc 2.3.2, the
-.BR getconf (1)
-command can be used to determine
-the system's threading implementation, for example:
-.PP
-.in +4n
-.EX
-bash$ getconf GNU_LIBPTHREAD_VERSION
-NPTL 2.3.4
-.EE
-.in
-.PP
-With older glibc versions, a command such as the following should
-be sufficient to determine the default threading implementation:
-.PP
-.in +4n
-.EX
-bash$ $( ldd /bin/ls | grep libc.so | awk \[aq]{print $3}\[aq] ) | \e
- egrep \-i \[aq]threads|nptl\[aq]
- Native POSIX Threads Library by Ulrich Drepper et al
-.EE
-.in
-.SS Selecting the threading implementation: LD_ASSUME_KERNEL
-On systems with a glibc that supports both LinuxThreads and NPTL
-(i.e., glibc 2.3.\fIx\fP), the
-.B LD_ASSUME_KERNEL
-environment variable can be used to override
-the dynamic linker's default choice of threading implementation.
-This variable tells the dynamic linker to assume that it is
-running on top of a particular kernel version.
-By specifying a kernel version that does not
-provide the support required by NPTL, we can force the use
-of LinuxThreads.
-(The most likely reason for doing this is to run a
-(broken) application that depends on some nonconformant behavior
-in LinuxThreads.)
-For example:
-.PP
-.in +4n
-.EX
-bash$ $( LD_ASSUME_KERNEL=2.2.5 ldd /bin/ls | grep libc.so | \e
- awk \[aq]{print $3}\[aq] ) | egrep \-i \[aq]threads|nptl\[aq]
- linuxthreads\-0.10 by Xavier Leroy
-.EE
-.in
-.SH SEE ALSO
-.ad l
-.nh
-.BR clone (2),
-.BR fork (2),
-.BR futex (2),
-.BR gettid (2),
-.BR proc (5),
-.BR attributes (7),
-.BR futex (7),
-.BR nptl (7),
-.BR sigevent (7),
-.BR signal (7)
-.PP
-Various Pthreads manual pages, for example:
-.BR pthread_atfork (3),
-.BR pthread_attr_init (3),
-.BR pthread_cancel (3),
-.BR pthread_cleanup_push (3),
-.BR pthread_cond_signal (3),
-.BR pthread_cond_wait (3),
-.BR pthread_create (3),
-.BR pthread_detach (3),
-.BR pthread_equal (3),
-.BR pthread_exit (3),
-.BR pthread_key_create (3),
-.BR pthread_kill (3),
-.BR pthread_mutex_lock (3),
-.BR pthread_mutex_unlock (3),
-.BR pthread_mutexattr_destroy (3),
-.BR pthread_mutexattr_init (3),
-.BR pthread_once (3),
-.BR pthread_spin_init (3),
-.BR pthread_spin_lock (3),
-.BR pthread_rwlockattr_setkind_np (3),
-.BR pthread_setcancelstate (3),
-.BR pthread_setcanceltype (3),
-.BR pthread_setspecific (3),
-.BR pthread_sigmask (3),
-.BR pthread_sigqueue (3),
-and
-.BR pthread_testcancel (3)
diff --git a/man7/pty.7 b/man7/pty.7
deleted file mode 100644
index bef60e931..000000000
--- a/man7/pty.7
+++ /dev/null
@@ -1,158 +0,0 @@
-.\" Copyright (C) 2005 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH pty 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-pty \- pseudoterminal interfaces
-.SH DESCRIPTION
-A pseudoterminal (sometimes abbreviated "pty")
-is a pair of virtual character devices that
-provide a bidirectional communication channel.
-One end of the channel is called the
-.IR master ;
-the other end is called the
-.IR slave .
-.PP
-The slave end of the pseudoterminal provides an interface
-that behaves exactly like a classical terminal.
-A process that expects to be connected to a terminal,
-can open the slave end of a pseudoterminal and
-then be driven by a program that has opened the master end.
-Anything that is written on the master end is provided to the process
-on the slave end as though it was input typed on a terminal.
-For example, writing the interrupt character (usually control-C)
-to the master device would cause an interrupt signal
-.RB ( SIGINT )
-to be generated for the foreground process group
-that is connected to the slave.
-Conversely, anything that is written to the slave end of the
-pseudoterminal can be read by the process that is connected to
-the master end.
-.PP
-Data flow between master and slave is handled asynchronously,
-much like data flow with a physical terminal.
-Data written to the slave will be available at the master promptly,
-but may not be available immediately.
-Similarly, there may be a small processing delay between
-a write to the master, and the effect being visible at the slave.
-.PP
-Historically, two pseudoterminal APIs have evolved: BSD and System V.
-SUSv1 standardized a pseudoterminal API based on the System V API,
-and this API should be employed in all new programs that use
-pseudoterminals.
-.PP
-Linux provides both BSD-style and (standardized) System V-style
-pseudoterminals.
-System V-style terminals are commonly called UNIX 98 pseudoterminals
-on Linux systems.
-.PP
-Since Linux 2.6.4, BSD-style pseudoterminals are considered deprecated:
-support can be disabled when building the kernel by disabling the
-.B CONFIG_LEGACY_PTYS
-option.
-(Starting with Linux 2.6.30,
-that option is disabled by default in the mainline kernel.)
-UNIX 98 pseudoterminals should be used in new applications.
-.SS UNIX 98 pseudoterminals
-An unused UNIX 98 pseudoterminal master is opened by calling
-.BR posix_openpt (3).
-(This function opens the master clone device,
-.IR /dev/ptmx ;
-see
-.BR pts (4).)
-After performing any program-specific initializations,
-changing the ownership and permissions of the slave device using
-.BR grantpt (3),
-and unlocking the slave using
-.BR unlockpt (3)),
-the corresponding slave device can be opened by passing
-the name returned by
-.BR ptsname (3)
-in a call to
-.BR open (2).
-.PP
-The Linux kernel imposes a limit on the number of available
-UNIX 98 pseudoterminals.
-Up to and including Linux 2.6.3, this limit is configured
-at kernel compilation time
-.RB ( CONFIG_UNIX98_PTYS ),
-and the permitted number of pseudoterminals can be up to 2048,
-with a default setting of 256.
-Since Linux 2.6.4, the limit is dynamically adjustable via
-.IR /proc/sys/kernel/pty/max ,
-and a corresponding file,
-.IR /proc/sys/kernel/pty/nr ,
-indicates how many pseudoterminals are currently in use.
-For further details on these two files, see
-.BR proc (5).
-.SS BSD pseudoterminals
-BSD-style pseudoterminals are provided as precreated pairs, with
-names of the form
-.I /dev/ptyXY
-(master) and
-.I /dev/ttyXY
-(slave),
-where X is a letter from the 16-character set [p\-za\-e],
-and Y is a letter from the 16-character set [0\-9a\-f].
-(The precise range of letters in these two sets varies across UNIX
-implementations.)
-For example,
-.I /dev/ptyp1
-and
-.I /dev/ttyp1
-constitute a BSD pseudoterminal pair.
-A process finds an unused pseudoterminal pair by trying to
-.BR open (2)
-each pseudoterminal master until an open succeeds.
-The corresponding pseudoterminal slave (substitute "tty"
-for "pty" in the name of the master) can then be opened.
-.SH FILES
-.TP
-.I /dev/ptmx
-UNIX 98 master clone device
-.TP
-.I /dev/pts/*
-UNIX 98 slave devices
-.TP
-.I /dev/pty[p\-za\-e][0\-9a\-f]
-BSD master devices
-.TP
-.I /dev/tty[p\-za\-e][0\-9a\-f]
-BSD slave devices
-.SH NOTES
-Pseudoterminals are used by applications such as network login services
-.RB ( ssh "(1), " rlogin "(1), " telnet (1)),
-terminal emulators such as
-.BR xterm (1),
-.BR script (1),
-.BR screen (1),
-.BR tmux (1),
-.BR unbuffer (1),
-and
-.BR expect (1).
-.PP
-A description of the
-.B TIOCPKT
-.BR ioctl (2),
-which controls packet mode operation, can be found in
-.BR ioctl_tty (2).
-.PP
-The BSD
-.BR ioctl (2)
-operations
-.BR TIOCSTOP ,
-.BR TIOCSTART ,
-.BR TIOCUCNTL ,
-and
-.B TIOCREMOTE
-have not been implemented under Linux.
-.SH SEE ALSO
-.BR ioctl_tty (2),
-.BR select (2),
-.BR setsid (2),
-.BR forkpty (3),
-.BR openpty (3),
-.BR termios (3),
-.BR pts (4),
-.BR tty (4)
diff --git a/man7/queue.7 b/man7/queue.7
deleted file mode 100644
index 128fa8a5a..000000000
--- a/man7/queue.7
+++ /dev/null
@@ -1,138 +0,0 @@
-.\" Copyright (c) 1993
-.\" The Regents of the University of California. All rights reserved.
-.\" and Copyright (c) 2020 by Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: BSD-3-Clause
-.\"
-.\"
-.TH queue 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-queue \- implementations of linked lists and queues
-.SH DESCRIPTION
-The
-.I <sys/queue.h>
-header file provides a set of macros that
-define and operate on the following data structures:
-.TP
-SLIST
-singly linked lists
-.TP
-LIST
-doubly linked lists
-.TP
-STAILQ
-singly linked tail queues
-.TP
-TAILQ
-doubly linked tail queues
-.TP
-CIRCLEQ
-doubly linked circular queues
-.PP
-All structures support the following functionality:
-.IP \[bu] 3
-Insertion of a new entry at the head of the list.
-.IP \[bu]
-Insertion of a new entry after any element in the list.
-.IP \[bu]
-O(1) removal of an entry from the head of the list.
-.IP \[bu]
-Forward traversal through the list.
-.\".IP *
-.\" Swapping the contents of two lists.
-.PP
-Code size and execution time
-depend on the complexity of the data structure being used,
-so programmers should take care to choose the appropriate one.
-.SS Singly linked lists (SLIST)
-Singly linked lists are the simplest
-and support only the above functionality.
-Singly linked lists are ideal for applications with
-large datasets and few or no removals,
-or for implementing a LIFO queue.
-Singly linked lists add the following functionality:
-.IP \[bu] 3
-O(n) removal of any entry in the list.
-.SS Singly linked tail queues (STAILQ)
-Singly linked tail queues add the following functionality:
-.IP \[bu] 3
-Entries can be added at the end of a list.
-.IP \[bu]
-O(n) removal of any entry in the list.
-.IP \[bu]
-They may be concatenated.
-.PP
-However:
-.IP \[bu] 3
-All list insertions must specify the head of the list.
-.IP \[bu]
-Each head entry requires two pointers rather than one.
-.PP
-Singly linked tail queues are ideal for applications with
-large datasets and few or no removals,
-or for implementing a FIFO queue.
-.SS Doubly linked data structures
-All doubly linked types of data structures (lists and tail queues)
-additionally allow:
-.IP \[bu] 3
-Insertion of a new entry before any element in the list.
-.IP \[bu]
-O(1) removal of any entry in the list.
-.PP
-However:
-.IP \[bu] 3
-Each element requires two pointers rather than one.
-.SS Doubly linked lists (LIST)
-Linked lists are the simplest of the doubly linked data structures.
-They add the following functionality over the above:
-.IP \[bu] 3
-They may be traversed backwards.
-.PP
-However:
-.IP \[bu] 3
-To traverse backwards, an entry to begin the traversal and the list in
-which it is contained must be specified.
-.SS Doubly linked tail queues (TAILQ)
-Tail queues add the following functionality:
-.IP \[bu] 3
-Entries can be added at the end of a list.
-.IP \[bu]
-They may be traversed backwards, from tail to head.
-.IP \[bu]
-They may be concatenated.
-.PP
-However:
-.IP \[bu] 3
-All list insertions and removals must specify the head of the list.
-.IP \[bu]
-Each head entry requires two pointers rather than one.
-.SS Doubly linked circular queues (CIRCLEQ)
-Circular queues add the following functionality over the above:
-.IP \[bu] 3
-The first and last entries are connected.
-.PP
-However:
-.IP \[bu] 3
-The termination condition for traversal is more complex.
-.SH STANDARDS
-BSD.
-.SH HISTORY
-.I <sys/queue.h>
-macros first appeared in 4.4BSD.
-.SH NOTES
-Some BSDs provide SIMPLEQ instead of STAILQ.
-They are identical, but for historical reasons
-they were named differently on different BSDs.
-STAILQ originated on FreeBSD, and SIMPLEQ originated on NetBSD.
-For compatibility reasons, some systems provide both sets of macros.
-glibc provides both STAILQ and SIMPLEQ,
-which are identical except for a missing SIMPLEQ equivalent to
-.BR STAILQ_CONCAT ().
-.SH SEE ALSO
-.BR circleq (3),
-.BR insque (3),
-.BR list (3),
-.BR slist (3),
-.BR stailq (3),
-.BR tailq (3)
-.\" .BR tree (3)
diff --git a/man7/random.7 b/man7/random.7
deleted file mode 100644
index 69e6c2403..000000000
--- a/man7/random.7
+++ /dev/null
@@ -1,213 +0,0 @@
-'\" t
-.\" Copyright (C) 2008, George Spelvin <linux@horizon.com>,
-.\" and Copyright (C) 2008, Matt Mackall <mpm@selenic.com>
-.\" and Copyright (C) 2016, Laurent Georget <laurent.georget@supelec.fr>
-.\" and Copyright (C) 2016, Nikos Mavrogiannopoulos <nmav@redhat.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" The following web page is quite informative:
-.\" http://www.2uo.de/myths-about-urandom/
-.\"
-.TH random 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-random \- overview of interfaces for obtaining randomness
-.SH DESCRIPTION
-The kernel random-number generator relies on entropy gathered from
-device drivers and other sources of environmental noise to seed
-a cryptographically secure pseudorandom number generator (CSPRNG).
-It is designed for security, rather than speed.
-.PP
-The following interfaces provide access to output from the kernel CSPRNG:
-.IP \[bu] 3
-The
-.I /dev/urandom
-and
-.I /dev/random
-devices, both described in
-.BR random (4).
-These devices have been present on Linux since early times,
-and are also available on many other systems.
-.IP \[bu]
-The Linux-specific
-.BR getrandom (2)
-system call, available since Linux 3.17.
-This system call provides access either to the same source as
-.I /dev/urandom
-(called the
-.I urandom
-source in this page)
-or to the same source as
-.I /dev/random
-(called the
-.I random
-source in this page).
-The default is the
-.I urandom
-source; the
-.I random
-source is selected by specifying the
-.B GRND_RANDOM
-flag to the system call.
-(The
-.BR getentropy (3)
-function provides a slightly more portable interface on top of
-.BR getrandom (2).)
-.\"
-.SS Initialization of the entropy pool
-The kernel collects bits of entropy from the environment.
-When a sufficient number of random bits has been collected, the
-entropy pool is considered to be initialized.
-.SS Choice of random source
-Unless you are doing long-term key generation (and most likely not even
-then), you probably shouldn't be reading from the
-.I /dev/random
-device or employing
-.BR getrandom (2)
-with the
-.B GRND_RANDOM
-flag.
-Instead, either read from the
-.I /dev/urandom
-device or employ
-.BR getrandom (2)
-without the
-.B GRND_RANDOM
-flag.
-The cryptographic algorithms used for the
-.I urandom
-source are quite conservative, and so should be sufficient for all purposes.
-.PP
-The disadvantage of
-.B GRND_RANDOM
-and reads from
-.I /dev/random
-is that the operation can block for an indefinite period of time.
-Furthermore, dealing with the partially fulfilled
-requests that can occur when using
-.B GRND_RANDOM
-or when reading from
-.I /dev/random
-increases code complexity.
-.\"
-.SS Monte Carlo and other probabilistic sampling applications
-Using these interfaces to provide large quantities of data for
-Monte Carlo simulations or other programs/algorithms which are
-doing probabilistic sampling will be slow.
-Furthermore, it is unnecessary, because such applications do not
-need cryptographically secure random numbers.
-Instead, use the interfaces described in this page to obtain
-a small amount of data to seed a user-space pseudorandom
-number generator for use by such applications.
-.\"
-.SS Comparison between getrandom, /dev/urandom, and /dev/random
-The following table summarizes the behavior of the various
-interfaces that can be used to obtain randomness.
-.B GRND_NONBLOCK
-is a flag that can be used to control the blocking behavior of
-.BR getrandom (2).
-The final column of the table considers the case that can occur
-in early boot time when the entropy pool is not yet initialized.
-.ad l
-.TS
-allbox;
-lbw13 lbw12 lbw14 lbw18
-l l l l.
-Interface Pool T{
-Blocking
-\%behavior
-T} T{
-Behavior when pool is not yet ready
-T}
-T{
-.I /dev/random
-T} T{
-Blocking pool
-T} T{
-If entropy too low, blocks until there is enough entropy again
-T} T{
-Blocks until enough entropy gathered
-T}
-T{
-.I /dev/urandom
-T} T{
-CSPRNG output
-T} T{
-Never blocks
-T} T{
-Returns output from uninitialized CSPRNG (may be low entropy and unsuitable for cryptography)
-T}
-T{
-.BR getrandom ()
-T} T{
-Same as
-.I /dev/urandom
-T} T{
-Does not block once is pool ready
-T} T{
-Blocks until pool ready
-T}
-T{
-.BR getrandom ()
-.B GRND_RANDOM
-T} T{
-Same as
-.I /dev/random
-T} T{
-If entropy too low, blocks until there is enough entropy again
-T} T{
-Blocks until pool ready
-T}
-T{
-.BR getrandom ()
-.B GRND_NONBLOCK
-T} T{
-Same as
-.I /dev/urandom
-T} T{
-Does not block once is pool ready
-T} T{
-.B EAGAIN
-T}
-T{
-.BR getrandom ()
-.B GRND_RANDOM
-+
-.B GRND_NONBLOCK
-T} T{
-Same as
-.I /dev/random
-T} T{
-.B EAGAIN
-if not enough entropy available
-T} T{
-.B EAGAIN
-T}
-.TE
-.ad
-.\"
-.SS Generating cryptographic keys
-The amount of seed material required to generate a cryptographic key
-equals the effective key size of the key.
-For example, a 3072-bit RSA
-or Diffie-Hellman private key has an effective key size of 128 bits
-(it requires about 2\[ha]128 operations to break) so a key generator
-needs only 128 bits (16 bytes) of seed material from
-.IR /dev/random .
-.PP
-While some safety margin above that minimum is reasonable, as a guard
-against flaws in the CSPRNG algorithm, no cryptographic primitive
-available today can hope to promise more than 256 bits of security,
-so if any program reads more than 256 bits (32 bytes) from the kernel
-random pool per invocation, or per reasonable reseed interval (not less
-than one minute), that should be taken as a sign that its cryptography is
-.I not
-skillfully implemented.
-.\"
-.SH SEE ALSO
-.BR getrandom (2),
-.BR getauxval (3),
-.BR getentropy (3),
-.BR random (4),
-.BR urandom (4),
-.BR signal (7)
diff --git a/man7/raw.7 b/man7/raw.7
deleted file mode 100644
index 7e1b37892..000000000
--- a/man7/raw.7
+++ /dev/null
@@ -1,286 +0,0 @@
-'\" t
-.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
-.\"
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" $Id: raw.7,v 1.6 1999/06/05 10:32:08 freitag Exp $
-.\"
-.TH raw 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-raw \- Linux IPv4 raw sockets
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.B #include <netinet/in.h>
-.BI "raw_socket = socket(AF_INET, SOCK_RAW, int " protocol );
-.fi
-.SH DESCRIPTION
-Raw sockets allow new IPv4 protocols to be implemented in user space.
-A raw socket receives or sends the raw datagram not
-including link level headers.
-.PP
-The IPv4 layer generates an IP header when sending a packet unless the
-.B IP_HDRINCL
-socket option is enabled on the socket.
-When it is enabled, the packet must contain an IP header.
-For receiving, the IP header is always included in the packet.
-.PP
-In order to create a raw socket, a process must have the
-.B CAP_NET_RAW
-capability in the user namespace that governs its network namespace.
-.PP
-All packets or errors matching the
-.I protocol
-number specified
-for the raw socket are passed to this socket.
-For a list of the allowed protocols,
-see the IANA list of assigned protocol numbers at
-.UR http://www.iana.org/assignments/protocol\-numbers/
-.UE
-and
-.BR getprotobyname (3).
-.PP
-A protocol of
-.B IPPROTO_RAW
-implies enabled
-.B IP_HDRINCL
-and is able to send any IP protocol that is specified in the passed
-header.
-Receiving of all IP protocols via
-.B IPPROTO_RAW
-is not possible using raw sockets.
-.RS
-.TS
-tab(:) allbox;
-c s
-l l.
-IP Header fields modified on sending by \fBIP_HDRINCL\fP
-IP Checksum:Always filled in
-Source Address:Filled in when zero
-Packet ID:Filled in when zero
-Total Length:Always filled in
-.TE
-.RE
-.PP
-If
-.B IP_HDRINCL
-is specified and the IP header has a nonzero destination address, then
-the destination address of the socket is used to route the packet.
-When
-.B MSG_DONTROUTE
-is specified, the destination address should refer to a local interface,
-otherwise a routing table lookup is done anyway but gatewayed routes
-are ignored.
-.PP
-If
-.B IP_HDRINCL
-isn't set, then IP header options can be set on raw sockets with
-.BR setsockopt (2);
-see
-.BR ip (7)
-for more information.
-.PP
-Starting with Linux 2.2, all IP header fields and options can be set using
-IP socket options.
-This means raw sockets are usually needed only for new
-protocols or protocols with no user interface (like ICMP).
-.PP
-When a packet is received, it is passed to any raw sockets which have
-been bound to its protocol before it is passed to other protocol handlers
-(e.g., kernel protocol modules).
-.SS Address format
-For sending and receiving datagrams
-.RB ( sendto (2),
-.BR recvfrom (2),
-and similar),
-raw sockets use the standard
-.I sockaddr_in
-address structure defined in
-.BR ip (7).
-The
-.I sin_port
-field could be used to specify the IP protocol number,
-but it is ignored for sending in Linux 2.2 and later, and should be always
-set to 0 (see BUGS).
-For incoming packets,
-.I sin_port
-.\" commit f59fc7f30b710d45aadf715460b3e60dbe9d3418
-is set to zero.
-.SS Socket options
-Raw socket options can be set with
-.BR setsockopt (2)
-and read with
-.BR getsockopt (2)
-by passing the
-.B IPPROTO_RAW
-.\" Or SOL_RAW on Linux
-family flag.
-.TP
-.B ICMP_FILTER
-Enable a special filter for raw sockets bound to the
-.B IPPROTO_ICMP
-protocol.
-The value has a bit set for each ICMP message type which
-should be filtered out.
-The default is to filter no ICMP messages.
-.PP
-In addition, all
-.BR ip (7)
-.B IPPROTO_IP
-socket options valid for datagram sockets are supported.
-.SS Error handling
-Errors originating from the network are passed to the user only when the
-socket is connected or the
-.B IP_RECVERR
-flag is enabled.
-For connected sockets, only
-.B EMSGSIZE
-and
-.B EPROTO
-are passed for compatibility.
-With
-.BR IP_RECVERR ,
-all network errors are saved in the error queue.
-.SH ERRORS
-.TP
-.B EACCES
-User tried to send to a broadcast address without having the
-broadcast flag set on the socket.
-.TP
-.B EFAULT
-An invalid memory address was supplied.
-.TP
-.B EINVAL
-Invalid argument.
-.TP
-.B EMSGSIZE
-Packet too big.
-Either Path MTU Discovery is enabled (the
-.B IP_MTU_DISCOVER
-socket flag) or the packet size exceeds the maximum allowed IPv4
-packet size of 64\ kB.
-.TP
-.B EOPNOTSUPP
-Invalid flag has been passed to a socket call (like
-.BR MSG_OOB ).
-.TP
-.B EPERM
-The user doesn't have permission to open raw sockets.
-Only processes with an effective user ID of 0 or the
-.B CAP_NET_RAW
-attribute may do that.
-.TP
-.B EPROTO
-An ICMP error has arrived reporting a parameter problem.
-.SH VERSIONS
-.B IP_RECVERR
-and
-.B ICMP_FILTER
-are new in Linux 2.2.
-They are Linux extensions and should not be used in portable programs.
-.PP
-Linux 2.0 enabled some bug-to-bug compatibility with BSD in the
-raw socket code when the
-.B SO_BSDCOMPAT
-socket option was set; since Linux 2.2,
-this option no longer has that effect.
-.SH NOTES
-By default, raw sockets do path MTU (Maximum Transmission Unit) discovery.
-This means the kernel
-will keep track of the MTU to a specific target IP address and return
-.B EMSGSIZE
-when a raw packet write exceeds it.
-When this happens, the application should decrease the packet size.
-Path MTU discovery can be also turned off using the
-.B IP_MTU_DISCOVER
-socket option or the
-.I /proc/sys/net/ipv4/ip_no_pmtu_disc
-file, see
-.BR ip (7)
-for details.
-When turned off, raw sockets will fragment outgoing packets
-that exceed the interface MTU.
-However, disabling it is not recommended
-for performance and reliability reasons.
-.PP
-A raw socket can be bound to a specific local address using the
-.BR bind (2)
-call.
-If it isn't bound, all packets with the specified IP protocol are received.
-In addition, a raw socket can be bound to a specific network device using
-.BR SO_BINDTODEVICE ;
-see
-.BR socket (7).
-.PP
-An
-.B IPPROTO_RAW
-socket is send only.
-If you really want to receive all IP packets, use a
-.BR packet (7)
-socket with the
-.B ETH_P_IP
-protocol.
-Note that packet sockets don't reassemble IP fragments,
-unlike raw sockets.
-.PP
-If you want to receive all ICMP packets for a datagram socket,
-it is often better to use
-.B IP_RECVERR
-on that particular socket; see
-.BR ip (7).
-.PP
-Raw sockets may tap all IP protocols in Linux, even
-protocols like ICMP or TCP which have a protocol module in the kernel.
-In this case, the packets are passed to both the kernel module and the raw
-socket(s).
-This should not be relied upon in portable programs, many other BSD
-socket implementation have limitations here.
-.PP
-Linux never changes headers passed from the user (except for filling
-in some zeroed fields as described for
-.BR IP_HDRINCL ).
-This differs from many other implementations of raw sockets.
-.PP
-Raw sockets are generally rather unportable and should be avoided in
-programs intended to be portable.
-.PP
-Sending on raw sockets should take the IP protocol from
-.IR sin_port ;
-this ability was lost in Linux 2.2.
-The workaround is to use
-.BR IP_HDRINCL .
-.SH BUGS
-Transparent proxy extensions are not described.
-.PP
-When the
-.B IP_HDRINCL
-option is set, datagrams will not be fragmented and are limited to
-the interface MTU.
-.PP
-Setting the IP protocol for sending in
-.I sin_port
-got lost in Linux 2.2.
-The protocol that the socket was bound to or that
-was specified in the initial
-.BR socket (2)
-call is always used.
-.\" .SH AUTHORS
-.\" This man page was written by Andi Kleen.
-.SH SEE ALSO
-.BR recvmsg (2),
-.BR sendmsg (2),
-.BR capabilities (7),
-.BR ip (7),
-.BR socket (7)
-.PP
-.B RFC\ 1191
-for path MTU discovery.
-.B RFC\ 791
-and the
-.I <linux/ip.h>
-header file for the IP protocol.
diff --git a/man7/regex.7 b/man7/regex.7
deleted file mode 100644
index 8083d2a6a..000000000
--- a/man7/regex.7
+++ /dev/null
@@ -1,293 +0,0 @@
-'\" t
-.\" From Henry Spencer's regex package (as found in the apache
-.\" distribution). The package carries the following copyright:
-.\"
-.\" Copyright 1992, 1993, 1994 Henry Spencer. All rights reserved.
-.\" %%%LICENSE_START(MISC)
-.\" This software is not subject to any license of the American Telephone
-.\" and Telegraph Company or of the Regents of the University of California.
-.\"
-.\" Permission is granted to anyone to use this software for any purpose
-.\" on any computer system, and to alter it and redistribute it, subject
-.\" to the following restrictions:
-.\"
-.\" 1. The author is not responsible for the consequences of use of this
-.\" software, no matter how awful, even if they arise from flaws in it.
-.\"
-.\" 2. The origin of this software must not be misrepresented, either by
-.\" explicit claim or by omission. Since few users ever read sources,
-.\" credits must appear in the documentation.
-.\"
-.\" 3. Altered versions must be plainly marked as such, and must not be
-.\" misrepresented as being the original software. Since few users
-.\" ever read sources, credits must appear in the documentation.
-.\"
-.\" 4. This notice may not be removed or altered.
-.\" %%%LICENSE_END
-.\"
-.\" In order to comply with `credits must appear in the documentation'
-.\" I added an AUTHOR paragraph below - aeb.
-.\"
-.\" In the default nroff environment there is no dagger \(dg.
-.\"
-.\" 2005-05-11 Removed discussion of `[[:<:]]' and `[[:>:]]', which
-.\" appear not to be in the glibc implementation of regcomp
-.\"
-.ie t .ds dg \(dg
-.el .ds dg (!)
-.TH regex 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-regex \- POSIX.2 regular expressions
-.SH DESCRIPTION
-Regular expressions ("RE"s),
-as defined in POSIX.2, come in two forms:
-modern REs (roughly those of
-.IR egrep ;
-POSIX.2 calls these "extended" REs)
-and obsolete REs (roughly those of
-.BR ed (1);
-POSIX.2 "basic" REs).
-Obsolete REs mostly exist for backward compatibility in some old programs;
-they will be discussed at the end.
-POSIX.2 leaves some aspects of RE syntax and semantics open;
-"\*(dg" marks decisions on these aspects that
-may not be fully portable to other POSIX.2 implementations.
-.PP
-A (modern) RE is one\*(dg or more nonempty\*(dg \fIbranches\fR,
-separated by \[aq]|\[aq].
-It matches anything that matches one of the branches.
-.PP
-A branch is one\*(dg or more \fIpieces\fR, concatenated.
-It matches a match for the first, followed by a match for the second,
-and so on.
-.PP
-A piece is an \fIatom\fR possibly followed
-by a single\*(dg \[aq]*\[aq], \[aq]+\[aq], \[aq]?\[aq], or \fIbound\fR.
-An atom followed by \[aq]*\[aq]
-matches a sequence of 0 or more matches of the atom.
-An atom followed by \[aq]+\[aq]
-matches a sequence of 1 or more matches of the atom.
-An atom followed by \[aq]?\[aq]
-matches a sequence of 0 or 1 matches of the atom.
-.PP
-A \fIbound\fR is \[aq]{\[aq] followed by an unsigned decimal integer,
-possibly followed by \[aq],\[aq]
-possibly followed by another unsigned decimal integer,
-always followed by \[aq]}\[aq].
-The integers must lie between 0 and
-.B RE_DUP_MAX
-(255\*(dg) inclusive,
-and if there are two of them, the first may not exceed the second.
-An atom followed by a bound containing one integer \fIi\fR
-and no comma matches
-a sequence of exactly \fIi\fR matches of the atom.
-An atom followed by a bound
-containing one integer \fIi\fR and a comma matches
-a sequence of \fIi\fR or more matches of the atom.
-An atom followed by a bound
-containing two integers \fIi\fR and \fIj\fR matches
-a sequence of \fIi\fR through \fIj\fR (inclusive) matches of the atom.
-.PP
-An atom is a regular expression enclosed in "\fI()\fP"
-(matching a match for the regular expression),
-an empty set of "\fI()\fP" (matching the null string)\*(dg,
-a \fIbracket expression\fR (see below),
-\[aq].\[aq] (matching any single character),
-\[aq]\[ha]\[aq] (matching the null string at the beginning of a line),
-\[aq]$\[aq] (matching the null string at the end of a line),
-a \[aq]\e\[aq] followed by one of the characters "\fI\[ha].[$()|*+?{\e\fP"
-(matching that character taken as an ordinary character),
-a \[aq]\e\[aq] followed by any other character\*(dg
-(matching that character taken as an ordinary character,
-as if the \[aq]\e\[aq] had not been present\*(dg),
-or a single character with no other significance (matching that character).
-A \[aq]{\[aq] followed by a character other than a digit
-is an ordinary character,
-not the beginning of a bound\*(dg.
-It is illegal to end an RE with \[aq]\e\[aq].
-.PP
-A \fIbracket expression\fR is a list of characters enclosed in "\fI[]\fP".
-It normally matches any single character from the list (but see below).
-If the list begins with \[aq]\[ha]\[aq],
-it matches any single character
-(but see below) \fInot\fR from the rest of the list.
-If two characters in the list are separated by \[aq]\-\[aq], this is shorthand
-for the full \fIrange\fR of characters between those two (inclusive) in the
-collating sequence,
-for example, "\fI[0\-9]\fP" in ASCII matches any decimal digit.
-It is illegal\*(dg for two ranges to share an
-endpoint, for example, "\fIa\-c\-e\fP".
-Ranges are very collating-sequence-dependent,
-and portable programs should avoid relying on them.
-.PP
-To include a literal \[aq]]\[aq] in the list, make it the first character
-(following a possible \[aq]\[ha]\[aq]).
-To include a literal \[aq]\-\[aq], make it the first or last character,
-or the second endpoint of a range.
-To use a literal \[aq]\-\[aq] as the first endpoint of a range,
-enclose it in "\fI[.\fP" and "\fI.]\fP"
-to make it a collating element (see below).
-With the exception of these and some combinations using \[aq][\[aq] (see next
-paragraphs), all other special characters, including \[aq]\e\[aq], lose their
-special significance within a bracket expression.
-.PP
-Within a bracket expression, a collating element (a character,
-a multicharacter sequence that collates as if it were a single character,
-or a collating-sequence name for either)
-enclosed in "\fI[.\fP" and "\fI.]\fP" stands for the
-sequence of characters of that collating element.
-The sequence is a single element of the bracket expression's list.
-A bracket expression containing a multicharacter collating element
-can thus match more than one character,
-for example, if the collating sequence includes a "ch" collating element,
-then the RE "\fI[[.ch.]]*c\fP" matches the first five characters
-of "chchcc".
-.PP
-Within a bracket expression, a collating element enclosed in "\fI[=\fP" and
-"\fI=]\fP" is an equivalence class, standing for the sequences of characters
-of all collating elements equivalent to that one, including itself.
-(If there are no other equivalent collating elements,
-the treatment is as if the enclosing delimiters
-were "\fI[.\fP" and "\fI.]\fP".)
-For example, if o and \(^o are the members of an equivalence class,
-then "\fI[[=o=]]\fP", "\fI[[=\(^o=]]\fP",
-and "\fI[o\(^o]\fP" are all synonymous.
-An equivalence class may not\*(dg be an endpoint
-of a range.
-.PP
-Within a bracket expression, the name of a \fIcharacter class\fR enclosed
-in "\fI[:\fP" and "\fI:]\fP" stands for the list
-of all characters belonging to that
-class.
-Standard character class names are:
-.PP
-.RS
-.TS
-l l l.
-alnum digit punct
-alpha graph space
-blank lower upper
-cntrl print xdigit
-.TE
-.RE
-.PP
-These stand for the character classes defined in
-.BR wctype (3).
-A locale may provide others.
-A character class may not be used as an endpoint of a range.
-.\" As per http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=295666
-.\" The following does not seem to apply in the glibc implementation
-.\" .PP
-.\" There are two special cases\*(dg of bracket expressions:
-.\" the bracket expressions "\fI[[:<:]]\fP" and "\fI[[:>:]]\fP" match
-.\" the null string at the beginning and end of a word respectively.
-.\" A word is defined as a sequence of
-.\" word characters
-.\" which is neither preceded nor followed by
-.\" word characters.
-.\" A word character is an
-.\" .I alnum
-.\" character (as defined by
-.\" .BR wctype (3))
-.\" or an underscore.
-.\" This is an extension,
-.\" compatible with but not specified by POSIX.2,
-.\" and should be used with
-.\" caution in software intended to be portable to other systems.
-.PP
-In the event that an RE could match more than one substring of a given
-string,
-the RE matches the one starting earliest in the string.
-If the RE could match more than one substring starting at that point,
-it matches the longest.
-Subexpressions also match the longest possible substrings, subject to
-the constraint that the whole match be as long as possible,
-with subexpressions starting earlier in the RE taking priority over
-ones starting later.
-Note that higher-level subexpressions thus take priority over
-their lower-level component subexpressions.
-.PP
-Match lengths are measured in characters, not collating elements.
-A null string is considered longer than no match at all.
-For example,
-"\fIbb*\fP" matches the three middle characters of "abbbc",
-"\fI(wee|week)(knights|nights)\fP"
-matches all ten characters of "weeknights",
-when "\fI(.*).*\fP" is matched against "abc" the parenthesized subexpression
-matches all three characters, and
-when "\fI(a*)*\fP" is matched against "bc"
-both the whole RE and the parenthesized
-subexpression match the null string.
-.PP
-If case-independent matching is specified,
-the effect is much as if all case distinctions had vanished from the
-alphabet.
-When an alphabetic that exists in multiple cases appears as an
-ordinary character outside a bracket expression, it is effectively
-transformed into a bracket expression containing both cases,
-for example, \[aq]x\[aq] becomes "\fI[xX]\fP".
-When it appears inside a bracket expression, all case counterparts
-of it are added to the bracket expression, so that, for example, "\fI[x]\fP"
-becomes "\fI[xX]\fP" and "\fI[\[ha]x]\fP" becomes "\fI[\[ha]xX]\fP".
-.PP
-No particular limit is imposed on the length of REs\*(dg.
-Programs intended to be portable should not employ REs longer
-than 256 bytes,
-as an implementation can refuse to accept such REs and remain
-POSIX-compliant.
-.PP
-Obsolete ("basic") regular expressions differ in several respects.
-\[aq]|\[aq], \[aq]+\[aq], and \[aq]?\[aq] are
-ordinary characters and there is no equivalent
-for their functionality.
-The delimiters for bounds are "\fI\e{\fP" and "\fI\e}\fP",
-with \[aq]{\[aq] and \[aq]}\[aq] by themselves ordinary characters.
-The parentheses for nested subexpressions are "\fI\e(\fP" and "\fI\e)\fP",
-with \[aq](\[aq] and \[aq])\[aq] by themselves ordinary characters.
-\[aq]\[ha]\[aq] is an ordinary character except at the beginning of the
-RE or\*(dg the beginning of a parenthesized subexpression,
-\[aq]$\[aq] is an ordinary character except at the end of the
-RE or\*(dg the end of a parenthesized subexpression,
-and \[aq]*\[aq] is an ordinary character if it appears at the beginning of the
-RE or the beginning of a parenthesized subexpression
-(after a possible leading \[aq]\[ha]\[aq]).
-.PP
-Finally, there is one new type of atom, a \fIback reference\fR:
-\[aq]\e\[aq] followed by a nonzero decimal digit \fId\fR
-matches the same sequence of characters
-matched by the \fId\fRth parenthesized subexpression
-(numbering subexpressions by the positions of their opening parentheses,
-left to right),
-so that, for example, "\fI\e([bc]\e)\e1\fP" matches "bb" or "cc" but not "bc".
-.SH BUGS
-Having two kinds of REs is a botch.
-.PP
-The current POSIX.2 spec says that \[aq])\[aq] is an ordinary character in
-the absence of an unmatched \[aq](\[aq];
-this was an unintentional result of a wording error,
-and change is likely.
-Avoid relying on it.
-.PP
-Back references are a dreadful botch,
-posing major problems for efficient implementations.
-They are also somewhat vaguely defined
-(does
-"\fIa\e(\e(b\e)*\e2\e)*d\fP" match "abbbd"?).
-Avoid using them.
-.PP
-POSIX.2's specification of case-independent matching is vague.
-The "one case implies all cases" definition given above
-is current consensus among implementors as to the right interpretation.
-.\" As per http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=295666
-.\" The following does not seem to apply in the glibc implementation
-.\" .PP
-.\" The syntax for word boundaries is incredibly ugly.
-.SH AUTHOR
-.\" Sigh... The page license means we must have the author's name
-.\" in the formatted output.
-This page was taken from Henry Spencer's regex package.
-.SH SEE ALSO
-.BR grep (1),
-.BR regex (3)
-.PP
-POSIX.2, section 2.8 (Regular Expression Notation).
diff --git a/man7/rtld-audit.7 b/man7/rtld-audit.7
deleted file mode 100644
index 9e0e4a369..000000000
--- a/man7/rtld-audit.7
+++ /dev/null
@@ -1,606 +0,0 @@
-.\" Copyright (c) 2009 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2009-01-12, mtk, Created
-.\"
-.TH RTLD-AUDIT 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-rtld\-audit \- auditing API for the dynamic linker
-.SH SYNOPSIS
-.nf
-.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
-.B #include <link.h>
-.fi
-.SH DESCRIPTION
-The GNU dynamic linker (run-time linker)
-provides an auditing API that allows an application
-to be notified when various dynamic linking events occur.
-This API is very similar to the auditing interface provided by the
-Solaris run-time linker.
-The necessary constants and prototypes are defined by including
-.IR <link.h> .
-.PP
-To use this interface, the programmer creates a shared library
-that implements a standard set of function names.
-Not all of the functions need to be implemented: in most cases,
-if the programmer is not interested in a particular class of auditing event,
-then no implementation needs to be provided for the corresponding
-auditing function.
-.PP
-To employ the auditing interface, the environment variable
-.B LD_AUDIT
-must be defined to contain a colon-separated list of shared libraries,
-each of which can implement (parts of) the auditing API.
-When an auditable event occurs,
-the corresponding function is invoked in each library,
-in the order that the libraries are listed.
-.SS la_version()
-\&
-.nf
-.BI "unsigned int la_version(unsigned int " version );
-.fi
-.PP
-This is the only function that
-.I must
-be defined by an auditing library:
-it performs the initial handshake between the dynamic linker and
-the auditing library.
-When invoking this function, the dynamic linker passes, in
-.IR version ,
-the highest version of the auditing interface that the linker supports.
-.PP
-A typical implementation of this function simply returns the constant
-.BR LAV_CURRENT ,
-which indicates the version of
-.I <link.h>
-that was used to build the audit module.
-If the dynamic linker does
-not support this version of the audit interface, it will refuse to
-activate this audit module.
-If the function returns zero, the dynamic
-linker also does not activate this audit module.
-.PP
-In order to enable backwards compatibility with older dynamic linkers,
-an audit module can examine the
-.I version
-argument and return an earlier version than
-.BR LAV_CURRENT ,
-assuming the module can adjust its implementation to match the
-requirements of the previous version of the audit interface.
-The
-.B la_version
-function should not return the value of
-.I version
-without further checks because it could correspond to an interface
-that does not match the
-.I <link.h>
-definitions used to build the audit module.
-.SS la_objsearch()
-\&
-.nf
-.BI "char *la_objsearch(const char *" name ", uintptr_t *" cookie ,
-.BI " unsigned int " flag );
-.fi
-.PP
-The dynamic linker invokes this function to inform the auditing library
-that it is about to search for a shared object.
-The
-.I name
-argument is the filename or pathname that is to be searched for.
-.I cookie
-identifies the shared object that initiated the search.
-.I flag
-is set to one of the following values:
-.TP 17
-.B LA_SER_ORIG
-This is the original name that is being searched for.
-Typically, this name comes from an ELF
-.B DT_NEEDED
-entry, or is the
-.I filename
-argument given to
-.BR dlopen (3).
-.TP
-.B LA_SER_LIBPATH
-.I name
-was created using a directory specified in
-.BR LD_LIBRARY_PATH .
-.TP
-.B LA_SER_RUNPATH
-.I name
-was created using a directory specified in an ELF
-.B DT_RPATH
-or
-.B DT_RUNPATH
-list.
-.TP
-.B LA_SER_CONFIG
-.I name
-was found via the
-.BR ldconfig (8)
-cache
-.RI ( /etc/ld.so.cache ).
-.TP
-.B LA_SER_DEFAULT
-.I name
-was found via a search of one of the default directories.
-.TP
-.B LA_SER_SECURE
-.I name
-is specific to a secure object (unused on Linux).
-.PP
-As its function result,
-.BR la_objsearch ()
-returns the pathname that the dynamic linker should use
-for further processing.
-If NULL is returned, then this pathname is ignored for further processing.
-If this audit library simply intends to monitor search paths, then
-.I name
-should be returned.
-.SS la_activity()
-\&
-.nf
-.BI "void la_activity( uintptr_t *" cookie ", unsigned int "flag );
-.fi
-.PP
-The dynamic linker calls this function to inform the auditing library
-that link-map activity is occurring.
-.I cookie
-identifies the object at the head of the link map.
-When the dynamic linker invokes this function,
-.I flag
-is set to one of the following values:
-.TP 19
-.B LA_ACT_ADD
-New objects are being added to the link map.
-.TP
-.B LA_ACT_DELETE
-Objects are being removed from the link map.
-.TP
-.B LA_ACT_CONSISTENT
-Link-map activity has been completed: the map is once again consistent.
-.SS la_objopen()
-\&
-.nf
-.BI "unsigned int la_objopen(struct link_map *" map ", Lmid_t " lmid ,
-.BI " uintptr_t *" cookie );
-.fi
-.PP
-The dynamic linker calls this function when a new shared object is loaded.
-The
-.I map
-argument is a pointer to a link-map structure that describes the object.
-The
-.I lmid
-field has one of the following values
-.TP 17
-.B LM_ID_BASE
-Link map is part of the initial namespace.
-.TP
-.B LM_ID_NEWLM
-Link map is part of a new namespace requested via
-.BR dlmopen (3).
-.PP
-.I cookie
-is a pointer to an identifier for this object.
-The identifier is provided to later calls to functions
-in the auditing library in order to identify this object.
-This identifier is initialized to point to object's link map,
-but the audit library can change the identifier to some other value
-that it may prefer to use to identify the object.
-.PP
-As its return value,
-.BR la_objopen ()
-returns a bit mask created by ORing zero or more of the
-following constants,
-which allow the auditing library to select the objects to be monitored by
-.BR la_symbind* ():
-.TP 17
-.B LA_FLG_BINDTO
-Audit symbol bindings to this object.
-.TP
-.B LA_FLG_BINDFROM
-Audit symbol bindings from this object.
-.PP
-A return value of 0 from
-.BR la_objopen ()
-indicates that no symbol bindings should be audited for this object.
-.SS la_objclose()
-\&
-.nf
-.BI "unsigned int la_objclose(uintptr_t *" cookie );
-.fi
-.PP
-The dynamic linker invokes this function after any finalization
-code for the object has been executed,
-before the object is unloaded.
-The
-.I cookie
-argument is the identifier obtained from a previous invocation of
-.BR la_objopen ().
-.PP
-In the current implementation, the value returned by
-.BR la_objclose ()
-is ignored.
-.SS la_preinit()
-\&
-.nf
-.BI "void la_preinit(uintptr_t *" cookie );
-.fi
-.PP
-The dynamic linker invokes this function after all shared objects
-have been loaded, before control is passed to the application
-(i.e., before calling
-.IR main ()).
-Note that
-.IR main ()
-may still later dynamically load objects using
-.BR dlopen (3).
-.SS la_symbind*()
-\&
-.nf
-.BI "uintptr_t la_symbind32(Elf32_Sym *" sym ", unsigned int " ndx ,
-.BI " uintptr_t *" refcook ", uintptr_t *" defcook ,
-.BI " unsigned int *" flags ", const char *" symname );
-.BI "uintptr_t la_symbind64(Elf64_Sym *" sym ", unsigned int " ndx ,
-.BI " uintptr_t *" refcook ", uintptr_t *" defcook ,
-.BI " unsigned int *" flags ", const char *" symname );
-.fi
-.PP
-The dynamic linker invokes one of these functions
-when a symbol binding occurs between two shared objects
-that have been marked for auditing notification by
-.BR la_objopen ().
-The
-.BR la_symbind32 ()
-function is employed on 32-bit platforms;
-the
-.BR la_symbind64 ()
-function is employed on 64-bit platforms.
-.PP
-The
-.I sym
-argument is a pointer to a structure
-that provides information about the symbol being bound.
-The structure definition is shown in
-.IR <elf.h> .
-Among the fields of this structure,
-.I st_value
-indicates the address to which the symbol is bound.
-.PP
-The
-.I ndx
-argument gives the index of the symbol in the symbol table
-of the bound shared object.
-.PP
-The
-.I refcook
-argument identifies the shared object that is making the symbol reference;
-this is the same identifier that is provided to the
-.BR la_objopen ()
-function that returned
-.BR LA_FLG_BINDFROM .
-The
-.I defcook
-argument identifies the shared object that defines the referenced symbol;
-this is the same identifier that is provided to the
-.BR la_objopen ()
-function that returned
-.BR LA_FLG_BINDTO .
-.PP
-The
-.I symname
-argument points a string containing the name of the symbol.
-.PP
-The
-.I flags
-argument is a bit mask that both provides information about the symbol
-and can be used to modify further auditing of this
-PLT (Procedure Linkage Table) entry.
-The dynamic linker may supply the following bit values in this argument:
-.\" LA_SYMB_STRUCTCALL appears to be unused
-.TP 22
-.B LA_SYMB_DLSYM
-The binding resulted from a call to
-.BR dlsym (3).
-.TP
-.B LA_SYMB_ALTVALUE
-A previous
-.BR la_symbind* ()
-call returned an alternate value for this symbol.
-.PP
-By default, if the auditing library implements
-.BR la_pltenter ()
-and
-.BR la_pltexit ()
-functions (see below), then these functions are invoked, after
-.BR la_symbind (),
-for PLT entries, each time the symbol is referenced.
-.\" pltenter/pltexit are called for non-dynamically loaded libraries,
-.\" but don't seem to be called for dynamically loaded libs?
-.\" Is this the same on Solaris?
-The following flags can be ORed into
-.I *flags
-to change this default behavior:
-.TP 22
-.B LA_SYMB_NOPLTENTER
-Don't call
-.BR la_pltenter ()
-for this symbol.
-.TP 22
-.B LA_SYMB_NOPLTEXIT
-Don't call
-.BR la_pltexit ()
-for this symbol.
-.PP
-The return value of
-.BR la_symbind32 ()
-and
-.BR la_symbind64 ()
-is the address to which control should be passed after the function returns.
-If the auditing library is simply monitoring symbol bindings,
-then it should return
-.IR sym\->st_value .
-A different value may be returned if the library wishes to direct control
-to an alternate location.
-.SS la_pltenter()
-The precise name and argument types for this function
-depend on the hardware platform.
-(The appropriate definition is supplied by
-.IR <link.h> .)
-Here is the definition for x86-32:
-.PP
-.nf
-.BI "Elf32_Addr la_i86_gnu_pltenter(Elf32_Sym *" sym ", unsigned int " ndx ,
-.BI " uintptr_t *" refcook ", uintptr_t *" defcook ,
-.BI " La_i86_regs *" regs ", unsigned int *" flags ,
-.BI " const char *" symname ", long *" framesizep );
-.fi
-.PP
-This function is invoked just before a PLT entry is called,
-between two shared objects that have been marked for binding notification.
-.PP
-The
-.IR sym ,
-.IR ndx ,
-.IR refcook ,
-.IR defcook ,
-and
-.I symname
-are as for
-.BR la_symbind* ().
-.PP
-The
-.I regs
-argument points to a structure (defined in
-.IR <link.h> )
-containing the values of registers to be used for
-the call to this PLT entry.
-.PP
-The
-.I flags
-argument points to a bit mask that conveys information about,
-and can be used to modify subsequent auditing of, this PLT entry, as for
-.BR la_symbind* ().
-.PP
-.\" FIXME . Is the following correct?
-The
-.I framesizep
-argument points to a
-.I long\~int
-buffer that can be used to explicitly set the frame size
-used for the call to this PLT entry.
-If different
-.BR la_pltenter ()
-invocations for this symbol return different values,
-then the maximum returned value is used.
-The
-.BR la_pltexit ()
-function is called only if this buffer is
-explicitly set to a suitable value.
-.PP
-The return value of
-.BR la_pltenter ()
-is as for
-.BR la_symbind* ().
-.SS la_pltexit()
-The precise name and argument types for this function
-depend on the hardware platform.
-(The appropriate definition is supplied by
-.IR <link.h> .)
-Here is the definition for x86-32:
-.PP
-.nf
-.BI "unsigned int la_i86_gnu_pltexit(Elf32_Sym *" sym ", unsigned int " ndx ,
-.BI " uintptr_t *" refcook ", uintptr_t *" defcook ,
-.BI " const La_i86_regs *" inregs ", La_i86_retval *" outregs ,
-.BI " const char *" symname );
-.fi
-.PP
-This function is called when a PLT entry,
-made between two shared objects that have been marked
-for binding notification, returns.
-The function is called just before control returns to the caller
-of the PLT entry.
-.PP
-The
-.IR sym ,
-.IR ndx ,
-.IR refcook ,
-.IR defcook ,
-and
-.I symname
-are as for
-.BR la_symbind* ().
-.PP
-The
-.I inregs
-argument points to a structure (defined in
-.IR <link.h> )
-containing the values of registers used for the call to this PLT entry.
-The
-.I outregs
-argument points to a structure (defined in
-.IR <link.h> )
-containing return values for the call to this PLT entry.
-These values can be modified by the caller,
-and the changes will be visible to the caller of the PLT entry.
-.PP
-In the current GNU implementation, the return value of
-.BR la_pltexit ()
-is ignored.
-.\" This differs from Solaris, where an audit library that monitors
-.\" symbol binding should return the value of the 'retval' argument
-.\" (not provided by GNU, but equivalent to returning outregs->lrv_eax
-.\" on (say) x86-32).
-.SH VERSIONS
-This API is very similar to the Solaris API
-described in the Solaris
-.IR "Linker and Libraries Guide" ,
-in the chapter
-.IR "Runtime Linker Auditing Interface" .
-.SH STANDARDS
-None.
-.SH NOTES
-Note the following differences from the Solaris dynamic linker
-auditing API:
-.IP \[bu] 3
-The Solaris
-.BR la_objfilter ()
-interface is not supported by the GNU implementation.
-.IP \[bu]
-The Solaris
-.BR la_symbind32 ()
-and
-.BR la_pltexit ()
-functions do not provide a
-.I symname
-argument.
-.IP \[bu]
-The Solaris
-.BR la_pltexit ()
-function does not provide
-.I inregs
-and
-.I outregs
-arguments (but does provide a
-.I retval
-argument with the function return value).
-.SH BUGS
-In glibc versions up to and include 2.9,
-specifying more than one audit library in
-.B LD_AUDIT
-results in a run-time crash.
-This is reportedly fixed in glibc 2.10.
-.\" FIXME . Specifying multiple audit libraries doesn't work on GNU.
-.\" My simple tests on Solaris work okay, but not on Linux -- mtk, Jan 2009
-.\" glibc bug filed: http://sourceware.org/bugzilla/show_bug.cgi?id=9733
-.\" Reportedly, this is fixed on 16 Mar 2009 (i.e., for glibc 2.10)
-.SH EXAMPLES
-.EX
-#include <link.h>
-#include <stdio.h>
-\&
-unsigned int
-la_version(unsigned int version)
-{
- printf("la_version(): version = %u; LAV_CURRENT = %u\en",
- version, LAV_CURRENT);
-\&
- return LAV_CURRENT;
-}
-\&
-char *
-la_objsearch(const char *name, uintptr_t *cookie, unsigned int flag)
-{
- printf("la_objsearch(): name = %s; cookie = %p", name, cookie);
- printf("; flag = %s\en",
- (flag == LA_SER_ORIG) ? "LA_SER_ORIG" :
- (flag == LA_SER_LIBPATH) ? "LA_SER_LIBPATH" :
- (flag == LA_SER_RUNPATH) ? "LA_SER_RUNPATH" :
- (flag == LA_SER_DEFAULT) ? "LA_SER_DEFAULT" :
- (flag == LA_SER_CONFIG) ? "LA_SER_CONFIG" :
- (flag == LA_SER_SECURE) ? "LA_SER_SECURE" :
- "???");
-\&
- return name;
-}
-\&
-void
-la_activity (uintptr_t *cookie, unsigned int flag)
-{
- printf("la_activity(): cookie = %p; flag = %s\en", cookie,
- (flag == LA_ACT_CONSISTENT) ? "LA_ACT_CONSISTENT" :
- (flag == LA_ACT_ADD) ? "LA_ACT_ADD" :
- (flag == LA_ACT_DELETE) ? "LA_ACT_DELETE" :
- "???");
-}
-\&
-unsigned int
-la_objopen(struct link_map *map, Lmid_t lmid, uintptr_t *cookie)
-{
- printf("la_objopen(): loading \e"%s\e"; lmid = %s; cookie=%p\en",
- map\->l_name,
- (lmid == LM_ID_BASE) ? "LM_ID_BASE" :
- (lmid == LM_ID_NEWLM) ? "LM_ID_NEWLM" :
- "???",
- cookie);
-\&
- return LA_FLG_BINDTO | LA_FLG_BINDFROM;
-}
-\&
-unsigned int
-la_objclose (uintptr_t *cookie)
-{
- printf("la_objclose(): %p\en", cookie);
-\&
- return 0;
-}
-\&
-void
-la_preinit(uintptr_t *cookie)
-{
- printf("la_preinit(): %p\en", cookie);
-}
-\&
-uintptr_t
-la_symbind32(Elf32_Sym *sym, unsigned int ndx, uintptr_t *refcook,
- uintptr_t *defcook, unsigned int *flags, const char *symname)
-{
- printf("la_symbind32(): symname = %s; sym\->st_value = %p\en",
- symname, sym\->st_value);
- printf(" ndx = %u; flags = %#x", ndx, *flags);
- printf("; refcook = %p; defcook = %p\en", refcook, defcook);
-\&
- return sym\->st_value;
-}
-\&
-uintptr_t
-la_symbind64(Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook,
- uintptr_t *defcook, unsigned int *flags, const char *symname)
-{
- printf("la_symbind64(): symname = %s; sym\->st_value = %p\en",
- symname, sym\->st_value);
- printf(" ndx = %u; flags = %#x", ndx, *flags);
- printf("; refcook = %p; defcook = %p\en", refcook, defcook);
-\&
- return sym\->st_value;
-}
-\&
-Elf32_Addr
-la_i86_gnu_pltenter(Elf32_Sym *sym, unsigned int ndx,
- uintptr_t *refcook, uintptr_t *defcook, La_i86_regs *regs,
- unsigned int *flags, const char *symname, long *framesizep)
-{
- printf("la_i86_gnu_pltenter(): %s (%p)\en", symname, sym\->st_value);
-\&
- return sym\->st_value;
-}
-.EE
-.SH SEE ALSO
-.BR ldd (1),
-.BR dlopen (3),
-.BR ld.so (8),
-.BR ldconfig (8)
diff --git a/man7/rtnetlink.7 b/man7/rtnetlink.7
deleted file mode 100644
index 069166b76..000000000
--- a/man7/rtnetlink.7
+++ /dev/null
@@ -1,563 +0,0 @@
-'\" t
-.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
-.\"
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" Based on the original comments from Alexey Kuznetsov, written with
-.\" help from Matthew Wilcox.
-.\" $Id: rtnetlink.7,v 1.8 2000/01/22 01:55:04 freitag Exp $
-.\"
-.TH rtnetlink 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-rtnetlink \- Linux routing socket
-.SH SYNOPSIS
-.nf
-.B #include <asm/types.h>
-.B #include <linux/netlink.h>
-.B #include <linux/rtnetlink.h>
-.B #include <sys/socket.h>
-.PP
-.BI "rtnetlink_socket = socket(AF_NETLINK, int " socket_type ", NETLINK_ROUTE);"
-.fi
-.SH DESCRIPTION
-Rtnetlink allows the kernel's routing tables to be read and altered.
-It is used within the kernel to communicate between
-various subsystems, though this usage is not documented here, and for
-communication with user-space programs.
-Network routes, IP addresses, link parameters, neighbor setups, queueing
-disciplines, traffic classes and packet classifiers may all be controlled
-through
-.B NETLINK_ROUTE
-sockets.
-It is based on netlink messages; see
-.BR netlink (7)
-for more information.
-.\" FIXME . ? all these macros could be moved to rtnetlink(3)
-.SS Routing attributes
-Some rtnetlink messages have optional attributes after the initial header:
-.PP
-.in +4n
-.EX
-struct rtattr {
- unsigned short rta_len; /* Length of option */
- unsigned short rta_type; /* Type of option */
- /* Data follows */
-};
-.EE
-.in
-.PP
-These attributes should be manipulated using only the RTA_* macros
-or libnetlink, see
-.BR rtnetlink (3).
-.SS Messages
-Rtnetlink consists of these message types
-(in addition to standard netlink messages):
-.TP
-.BR RTM_NEWLINK ", " RTM_DELLINK ", " RTM_GETLINK
-Create, remove, or get information about a specific network interface.
-These messages contain an
-.I ifinfomsg
-structure followed by a series of
-.I rtattr
-structures.
-.IP
-.EX
-struct ifinfomsg {
- unsigned char ifi_family; /* AF_UNSPEC */
- unsigned short ifi_type; /* Device type */
- int ifi_index; /* Interface index */
- unsigned int ifi_flags; /* Device flags */
- unsigned int ifi_change; /* change mask */
-};
-.EE
-.IP
-.\" FIXME Document ifinfomsg.ifi_type
-.I ifi_flags
-contains the device flags, see
-.BR netdevice (7);
-.I ifi_index
-is the unique interface index
-(since Linux 3.7, it is possible to feed a nonzero value with the
-.B RTM_NEWLINK
-message, thus creating a link with the given
-.IR ifindex );
-.I ifi_change
-is reserved for future use and should be always set to 0xFFFFFFFF.
-.TS
-tab(:);
-c s s
-lb l l.
-Routing attributes
-rta_type:Value type:Description
-_
-IFLA_UNSPEC:-:unspecified
-IFLA_ADDRESS:hardware address:interface L2 address
-IFLA_BROADCAST:hardware address:L2 broadcast address
-IFLA_IFNAME:asciiz string:Device name
-IFLA_MTU:unsigned int:MTU of the device
-IFLA_LINK:int:Link type
-IFLA_QDISC:asciiz string:Queueing discipline
-IFLA_STATS:T{
-see below
-T}:Interface Statistics
-IFLA_PERM_ADDRESS:hardware address:T{
-hardware address provided by device (since Linux 5.5)
-T}
-.TE
-.IP
-The value type for
-.B IFLA_STATS
-is
-.I struct rtnl_link_stats
-.RI ( "struct net_device_stats"
-in Linux 2.4 and earlier).
-.TP
-.BR RTM_NEWADDR ", " RTM_DELADDR ", " RTM_GETADDR
-Add, remove, or receive information about an IP address associated with
-an interface.
-In Linux 2.2, an interface can carry multiple IP addresses,
-this replaces the alias device concept in Linux 2.0.
-In Linux 2.2, these messages
-support IPv4 and IPv6 addresses.
-They contain an
-.I ifaddrmsg
-structure, optionally followed by
-.I rtattr
-routing attributes.
-.IP
-.EX
-struct ifaddrmsg {
- unsigned char ifa_family; /* Address type */
- unsigned char ifa_prefixlen; /* Prefixlength of address */
- unsigned char ifa_flags; /* Address flags */
- unsigned char ifa_scope; /* Address scope */
- unsigned int ifa_index; /* Interface index */
-};
-.EE
-.IP
-.I ifa_family
-is the address family type (currently
-.B AF_INET
-or
-.BR AF_INET6 ),
-.I ifa_prefixlen
-is the length of the address mask of the address if defined for the
-family (like for IPv4),
-.I ifa_scope
-is the address scope,
-.I ifa_index
-is the interface index of the interface the address is associated with.
-.I ifa_flags
-is a flag word of
-.B IFA_F_SECONDARY
-for secondary address (old alias interface),
-.B IFA_F_PERMANENT
-for a permanent address set by the user and other undocumented flags.
-.TS
-tab(:);
-c s s
-lb l l.
-Attributes
-rta_type:Value type:Description
-_
-IFA_UNSPEC:-:unspecified
-IFA_ADDRESS:raw protocol address:interface address
-IFA_LOCAL:raw protocol address:local address
-IFA_LABEL:asciiz string:name of the interface
-IFA_BROADCAST:raw protocol address:broadcast address
-IFA_ANYCAST:raw protocol address:anycast address
-IFA_CACHEINFO:struct ifa_cacheinfo:Address information
-.TE
-.\" FIXME Document struct ifa_cacheinfo
-.TP
-.BR RTM_NEWROUTE ", " RTM_DELROUTE ", " RTM_GETROUTE
-Create, remove, or receive information about a network route.
-These messages contain an
-.I rtmsg
-structure with an optional sequence of
-.I rtattr
-structures following.
-For
-.BR RTM_GETROUTE ,
-setting
-.I rtm_dst_len
-and
-.I rtm_src_len
-to 0 means you get all entries for the specified routing table.
-For the other fields, except
-.I rtm_table
-and
-.IR rtm_protocol ,
-0 is the wildcard.
-.IP
-.EX
-struct rtmsg {
- unsigned char rtm_family; /* Address family of route */
- unsigned char rtm_dst_len; /* Length of destination */
- unsigned char rtm_src_len; /* Length of source */
- unsigned char rtm_tos; /* TOS filter */
- unsigned char rtm_table; /* Routing table ID;
- see RTA_TABLE below */
- unsigned char rtm_protocol; /* Routing protocol; see below */
- unsigned char rtm_scope; /* See below */
- unsigned char rtm_type; /* See below */
-\&
- unsigned int rtm_flags;
-};
-.EE
-.TS
-tab(:);
-lb l.
-rtm_type:Route type
-_
-RTN_UNSPEC:unknown route
-RTN_UNICAST:a gateway or direct route
-RTN_LOCAL:a local interface route
-RTN_BROADCAST:T{
-a local broadcast route (sent as a broadcast)
-T}
-RTN_ANYCAST:T{
-a local broadcast route (sent as a unicast)
-T}
-RTN_MULTICAST:a multicast route
-RTN_BLACKHOLE:a packet dropping route
-RTN_UNREACHABLE:an unreachable destination
-RTN_PROHIBIT:a packet rejection route
-RTN_THROW:continue routing lookup in another table
-RTN_NAT:a network address translation rule
-RTN_XRESOLVE:T{
-refer to an external resolver (not implemented)
-T}
-.TE
-.TS
-tab(:);
-lb l.
-rtm_protocol:Route origin
-_
-RTPROT_UNSPEC:unknown
-RTPROT_REDIRECT:T{
-by an ICMP redirect (currently unused)
-T}
-RTPROT_KERNEL:by the kernel
-RTPROT_BOOT:during boot
-RTPROT_STATIC:by the administrator
-.TE
-.sp 1
-Values larger than
-.B RTPROT_STATIC
-are not interpreted by the kernel, they are just for user information.
-They may be used to tag the source of a routing information or to
-distinguish between multiple routing daemons.
-See
-.I <linux/rtnetlink.h>
-for the routing daemon identifiers which are already assigned.
-.IP
-.I rtm_scope
-is the distance to the destination:
-.TS
-tab(:);
-lb l.
-RT_SCOPE_UNIVERSE:global route
-RT_SCOPE_SITE:T{
-interior route in the local autonomous system
-T}
-RT_SCOPE_LINK:route on this link
-RT_SCOPE_HOST:route on the local host
-RT_SCOPE_NOWHERE:destination doesn't exist
-.TE
-.sp 1
-The values between
-.B RT_SCOPE_UNIVERSE
-and
-.B RT_SCOPE_SITE
-are available to the user.
-.IP
-The
-.I rtm_flags
-have the following meanings:
-.TS
-tab(:);
-lb l.
-RTM_F_NOTIFY:T{
-if the route changes, notify the user via rtnetlink
-T}
-RTM_F_CLONED:route is cloned from another route
-RTM_F_EQUALIZE:a multipath equalizer (not yet implemented)
-.TE
-.sp 1
-.I rtm_table
-specifies the routing table
-.TS
-tab(:);
-lb l.
-RT_TABLE_UNSPEC:an unspecified routing table
-RT_TABLE_DEFAULT:the default table
-RT_TABLE_MAIN:the main table
-RT_TABLE_LOCAL:the local table
-.TE
-.sp 1
-The user may assign arbitrary values between
-.B RT_TABLE_UNSPEC
-and
-.BR RT_TABLE_DEFAULT .
-.\" Keep table on same page
-.bp +1
-.TS
-tab(:);
-c s s
-lb2 l2 l.
-Attributes
-rta_type:Value type:Description
-_
-RTA_UNSPEC:-:ignored
-RTA_DST:protocol address:Route destination address
-RTA_SRC:protocol address:Route source address
-RTA_IIF:int:Input interface index
-RTA_OIF:int:Output interface index
-RTA_GATEWAY:protocol address:The gateway of the route
-RTA_PRIORITY:int:Priority of route
-RTA_PREFSRC:protocol address:Preferred source address
-RTA_METRICS:int:Route metric
-RTA_MULTIPATH::T{
-Multipath nexthop data
-br
-(see below).
-T}
-RTA_PROTOINFO::No longer used
-RTA_FLOW:int:Route realm
-RTA_CACHEINFO:struct rta_cacheinfo:(see linux/rtnetlink.h)
-RTA_SESSION::No longer used
-RTA_MP_ALGO::No longer used
-RTA_TABLE:int:T{
-Routing table ID; if set,
-.br
-rtm_table is ignored
-T}
-RTA_MARK:int:
-RTA_MFC_STATS:struct rta_mfc_stats:(see linux/rtnetlink.h)
-RTA_VIA:struct rtvia:T{
-Gateway in different AF
-(see below)
-T}
-RTA_NEWDST:protocol address:T{
-Change packet
-destination address
-T}
-RTA_PREF:char:T{
-RFC4191 IPv6 router
-preference (see below)
-T}
-RTA_ENCAP_TYPE:short:T{
-Encapsulation type for
-.br
-lwtunnels (see below)
-T}
-RTA_ENCAP::Defined by RTA_ENCAP_TYPE
-RTA_EXPIRES:int:T{
-Expire time for IPv6
-routes (in seconds)
-T}
-.TE
-.IP
-.B RTA_MULTIPATH
-contains several packed instances of
-.I struct rtnexthop
-together with nested RTAs
-.RB ( RTA_GATEWAY ):
-.IP
-.in +4n
-.EX
-struct rtnexthop {
- unsigned short rtnh_len; /* Length of struct + length
- of RTAs */
- unsigned char rtnh_flags; /* Flags (see
- linux/rtnetlink.h) */
- unsigned char rtnh_hops; /* Nexthop priority */
- int rtnh_ifindex; /* Interface index for this
- nexthop */
-}
-.EE
-.in
-.IP
-There exist a bunch of
-.B RTNH_*
-macros similar to
-.B RTA_*
-and
-.B NLHDR_*
-macros
-useful to handle these structures.
-.IP
-.in +4n
-.EX
-struct rtvia {
- unsigned short rtvia_family;
- unsigned char rtvia_addr[0];
-};
-.EE
-.in
-.IP
-.I rtvia_addr
-is the address,
-.I rtvia_family
-is its family type.
-.IP
-.B RTA_PREF
-may contain values
-.BR ICMPV6_ROUTER_PREF_LOW ,
-.BR ICMPV6_ROUTER_PREF_MEDIUM ,
-and
-.B ICMPV6_ROUTER_PREF_HIGH
-defined incw
-.IR <linux/icmpv6.h> .
-.IP
-.B RTA_ENCAP_TYPE
-may contain values
-.BR LWTUNNEL_ENCAP_MPLS ,
-.BR LWTUNNEL_ENCAP_IP ,
-.BR LWTUNNEL_ENCAP_ILA ,
-or
-.B LWTUNNEL_ENCAP_IP6
-defined in
-.IR <linux/lwtunnel.h> .
-.IP
-.B Fill these values in!
-.TP
-.BR RTM_NEWNEIGH ", " RTM_DELNEIGH ", " RTM_GETNEIGH
-Add, remove, or receive information about a neighbor table
-entry (e.g., an ARP entry).
-The message contains an
-.I ndmsg
-structure.
-.IP
-.EX
-struct ndmsg {
- unsigned char ndm_family;
- int ndm_ifindex; /* Interface index */
- __u16 ndm_state; /* State */
- __u8 ndm_flags; /* Flags */
- __u8 ndm_type;
-};
-\&
-struct nda_cacheinfo {
- __u32 ndm_confirmed;
- __u32 ndm_used;
- __u32 ndm_updated;
- __u32 ndm_refcnt;
-};
-.EE
-.IP
-.I ndm_state
-is a bit mask of the following states:
-.TS
-tab(:);
-lb l.
-NUD_INCOMPLETE:a currently resolving cache entry
-NUD_REACHABLE:a confirmed working cache entry
-NUD_STALE:an expired cache entry
-NUD_DELAY:an entry waiting for a timer
-NUD_PROBE:a cache entry that is currently reprobed
-NUD_FAILED:an invalid cache entry
-NUD_NOARP:a device with no destination cache
-NUD_PERMANENT:a static entry
-.TE
-.sp 1
-Valid
-.I ndm_flags
-are:
-.TS
-tab(:);
-lb l.
-NTF_PROXY:a proxy arp entry
-NTF_ROUTER:an IPv6 router
-.TE
-.sp 1
-.\" FIXME .
-.\" document the members of the struct better
-The
-.I rtattr
-struct has the following meanings for the
-.I rta_type
-field:
-.TS
-tab(:);
-lb l.
-NDA_UNSPEC:unknown type
-NDA_DST:a neighbor cache n/w layer destination address
-NDA_LLADDR:a neighbor cache link layer address
-NDA_CACHEINFO:cache statistics
-.TE
-.sp 1
-If the
-.I rta_type
-field is
-.BR NDA_CACHEINFO ,
-then a
-.I struct nda_cacheinfo
-header follows.
-.TP
-.BR RTM_NEWRULE ", " RTM_DELRULE ", " RTM_GETRULE
-Add, delete, or retrieve a routing rule.
-Carries a
-.I struct rtmsg
-.TP
-.BR RTM_NEWQDISC ", " RTM_DELQDISC ", " RTM_GETQDISC
-Add, remove, or get a queueing discipline.
-The message contains a
-.I struct tcmsg
-and may be followed by a series of
-attributes.
-.IP
-.EX
-struct tcmsg {
- unsigned char tcm_family;
- int tcm_ifindex; /* interface index */
- __u32 tcm_handle; /* Qdisc handle */
- __u32 tcm_parent; /* Parent qdisc */
- __u32 tcm_info;
-};
-.EE
-.TS
-tab(:);
-c s s
-lb2 l2 l.
-Attributes
-rta_type:Value type:Description
-_
-TCA_UNSPEC:-:unspecified
-TCA_KIND:asciiz string:Name of queueing discipline
-TCA_OPTIONS:byte sequence:Qdisc-specific options follow
-TCA_STATS:struct tc_stats:Qdisc statistics
-TCA_XSTATS:qdisc-specific:Module-specific statistics
-TCA_RATE:struct tc_estimator:Rate limit
-.TE
-.sp 1
-In addition, various other qdisc-module-specific attributes are allowed.
-For more information see the appropriate include files.
-.TP
-.BR RTM_NEWTCLASS ", " RTM_DELTCLASS ", " RTM_GETTCLASS
-Add, remove, or get a traffic class.
-These messages contain a
-.I struct tcmsg
-as described above.
-.TP
-.BR RTM_NEWTFILTER ", " RTM_DELTFILTER ", " RTM_GETTFILTER
-Add, remove, or receive information about a traffic filter.
-These messages contain a
-.I struct tcmsg
-as described above.
-.SH VERSIONS
-.B rtnetlink
-is a new feature of Linux 2.2.
-.SH BUGS
-This manual page is incomplete.
-.SH SEE ALSO
-.BR cmsg (3),
-.BR rtnetlink (3),
-.BR ip (7),
-.BR netlink (7)
diff --git a/man7/sched.7 b/man7/sched.7
deleted file mode 100644
index 4da3ea331..000000000
--- a/man7/sched.7
+++ /dev/null
@@ -1,992 +0,0 @@
-.\" Copyright (C) 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (C) 2014 Peter Zijlstra <peterz@infradead.org>
-.\" and Copyright (C) 2014 Juri Lelli <juri.lelli@gmail.com>
-.\" Various pieces from the old sched_setscheduler(2) page
-.\" Copyright (C) Tom Bjorkholm, Markus Kuhn & David A. Wheeler 1996-1999
-.\" and Copyright (C) 2007 Carsten Emde <Carsten.Emde@osadl.org>
-.\" and Copyright (C) 2008 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Worth looking at: http://rt.wiki.kernel.org/index.php
-.\"
-.TH sched 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sched \- overview of CPU scheduling
-.SH DESCRIPTION
-Since Linux 2.6.23, the default scheduler is CFS,
-the "Completely Fair Scheduler".
-The CFS scheduler replaced the earlier "O(1)" scheduler.
-.\"
-.SS API summary
-Linux provides the following system calls for controlling
-the CPU scheduling behavior, policy, and priority of processes
-(or, more precisely, threads).
-.TP
-.BR nice (2)
-Set a new nice value for the calling thread,
-and return the new nice value.
-.TP
-.BR getpriority (2)
-Return the nice value of a thread, a process group,
-or the set of threads owned by a specified user.
-.TP
-.BR setpriority (2)
-Set the nice value of a thread, a process group,
-or the set of threads owned by a specified user.
-.TP
-.BR sched_setscheduler (2)
-Set the scheduling policy and parameters of a specified thread.
-.TP
-.BR sched_getscheduler (2)
-Return the scheduling policy of a specified thread.
-.TP
-.BR sched_setparam (2)
-Set the scheduling parameters of a specified thread.
-.TP
-.BR sched_getparam (2)
-Fetch the scheduling parameters of a specified thread.
-.TP
-.BR sched_get_priority_max (2)
-Return the maximum priority available in a specified scheduling policy.
-.TP
-.BR sched_get_priority_min (2)
-Return the minimum priority available in a specified scheduling policy.
-.TP
-.BR sched_rr_get_interval (2)
-Fetch the quantum used for threads that are scheduled under
-the "round-robin" scheduling policy.
-.TP
-.BR sched_yield (2)
-Cause the caller to relinquish the CPU,
-so that some other thread be executed.
-.TP
-.BR sched_setaffinity (2)
-(Linux-specific)
-Set the CPU affinity of a specified thread.
-.TP
-.BR sched_getaffinity (2)
-(Linux-specific)
-Get the CPU affinity of a specified thread.
-.TP
-.BR sched_setattr (2)
-Set the scheduling policy and parameters of a specified thread.
-This (Linux-specific) system call provides a superset of the functionality of
-.BR sched_setscheduler (2)
-and
-.BR sched_setparam (2).
-.TP
-.BR sched_getattr (2)
-Fetch the scheduling policy and parameters of a specified thread.
-This (Linux-specific) system call provides a superset of the functionality of
-.BR sched_getscheduler (2)
-and
-.BR sched_getparam (2).
-.\"
-.SS Scheduling policies
-The scheduler is the kernel component that decides which runnable thread
-will be executed by the CPU next.
-Each thread has an associated scheduling policy and a \fIstatic\fP
-scheduling priority,
-.IR sched_priority .
-The scheduler makes its decisions based on knowledge of the scheduling
-policy and static priority of all threads on the system.
-.PP
-For threads scheduled under one of the normal scheduling policies
-(\fBSCHED_OTHER\fP, \fBSCHED_IDLE\fP, \fBSCHED_BATCH\fP),
-\fIsched_priority\fP is not used in scheduling
-decisions (it must be specified as 0).
-.PP
-Processes scheduled under one of the real-time policies
-(\fBSCHED_FIFO\fP, \fBSCHED_RR\fP) have a
-\fIsched_priority\fP value in the range 1 (low) to 99 (high).
-(As the numbers imply, real-time threads always have higher priority
-than normal threads.)
-Note well: POSIX.1 requires an implementation to support only a
-minimum 32 distinct priority levels for the real-time policies,
-and some systems supply just this minimum.
-Portable programs should use
-.BR sched_get_priority_min (2)
-and
-.BR sched_get_priority_max (2)
-to find the range of priorities supported for a particular policy.
-.PP
-Conceptually, the scheduler maintains a list of runnable
-threads for each possible \fIsched_priority\fP value.
-In order to determine which thread runs next, the scheduler looks for
-the nonempty list with the highest static priority and selects the
-thread at the head of this list.
-.PP
-A thread's scheduling policy determines
-where it will be inserted into the list of threads
-with equal static priority and how it will move inside this list.
-.PP
-All scheduling is preemptive: if a thread with a higher static
-priority becomes ready to run, the currently running thread
-will be preempted and
-returned to the wait list for its static priority level.
-The scheduling policy determines the
-ordering only within the list of runnable threads with equal static
-priority.
-.SS SCHED_FIFO: First in-first out scheduling
-\fBSCHED_FIFO\fP can be used only with static priorities higher than
-0, which means that when a \fBSCHED_FIFO\fP thread becomes runnable,
-it will always immediately preempt any currently running
-\fBSCHED_OTHER\fP, \fBSCHED_BATCH\fP, or \fBSCHED_IDLE\fP thread.
-\fBSCHED_FIFO\fP is a simple scheduling
-algorithm without time slicing.
-For threads scheduled under the
-\fBSCHED_FIFO\fP policy, the following rules apply:
-.IP \[bu] 3
-A running \fBSCHED_FIFO\fP thread that has been preempted by another thread of
-higher priority will stay at the head of the list for its priority and
-will resume execution as soon as all threads of higher priority are
-blocked again.
-.IP \[bu]
-When a blocked \fBSCHED_FIFO\fP thread becomes runnable, it
-will be inserted at the end of the list for its priority.
-.IP \[bu]
-If a call to
-.BR sched_setscheduler (2),
-.BR sched_setparam (2),
-.BR sched_setattr (2),
-.BR pthread_setschedparam (3),
-or
-.BR pthread_setschedprio (3)
-changes the priority of the running or runnable
-.B SCHED_FIFO
-thread identified by
-.I pid
-the effect on the thread's position in the list depends on
-the direction of the change to threads priority:
-.RS
-.IP (a) 5
-If the thread's priority is raised,
-it is placed at the end of the list for its new priority.
-As a consequence,
-it may preempt a currently running thread with the same priority.
-.IP (b)
-If the thread's priority is unchanged,
-its position in the run list is unchanged.
-.IP (c)
-If the thread's priority is lowered,
-it is placed at the front of the list for its new priority.
-.RE
-.IP
-According to POSIX.1-2008,
-changes to a thread's priority (or policy) using any mechanism other than
-.BR pthread_setschedprio (3)
-should result in the thread being placed at the end of
-the list for its priority.
-.\" In Linux 2.2.x and Linux 2.4.x, the thread is placed at the front of the queue
-.\" In Linux 2.0.x, the Right Thing happened: the thread went to the back -- MTK
-.IP \[bu]
-A thread calling
-.BR sched_yield (2)
-will be put at the end of the list.
-.PP
-No other events will move a thread
-scheduled under the \fBSCHED_FIFO\fP policy in the wait list of
-runnable threads with equal static priority.
-.PP
-A \fBSCHED_FIFO\fP
-thread runs until either it is blocked by an I/O request, it is
-preempted by a higher priority thread, or it calls
-.BR sched_yield (2).
-.SS SCHED_RR: Round-robin scheduling
-\fBSCHED_RR\fP is a simple enhancement of \fBSCHED_FIFO\fP.
-Everything
-described above for \fBSCHED_FIFO\fP also applies to \fBSCHED_RR\fP,
-except that each thread is allowed to run only for a maximum time
-quantum.
-If a \fBSCHED_RR\fP thread has been running for a time
-period equal to or longer than the time quantum, it will be put at the
-end of the list for its priority.
-A \fBSCHED_RR\fP thread that has
-been preempted by a higher priority thread and subsequently resumes
-execution as a running thread will complete the unexpired portion of
-its round-robin time quantum.
-The length of the time quantum can be
-retrieved using
-.BR sched_rr_get_interval (2).
-.\" On Linux 2.4, the length of the RR interval is influenced
-.\" by the process nice value -- MTK
-.\"
-.SS SCHED_DEADLINE: Sporadic task model deadline scheduling
-Since Linux 3.14, Linux provides a deadline scheduling policy
-.RB ( SCHED_DEADLINE ).
-This policy is currently implemented using
-GEDF (Global Earliest Deadline First)
-in conjunction with CBS (Constant Bandwidth Server).
-To set and fetch this policy and associated attributes,
-one must use the Linux-specific
-.BR sched_setattr (2)
-and
-.BR sched_getattr (2)
-system calls.
-.PP
-A sporadic task is one that has a sequence of jobs, where each
-job is activated at most once per period.
-Each job also has a
-.IR "relative deadline" ,
-before which it should finish execution, and a
-.IR "computation time" ,
-which is the CPU time necessary for executing the job.
-The moment when a task wakes up
-because a new job has to be executed is called the
-.I arrival time
-(also referred to as the request time or release time).
-The
-.I start time
-is the time at which a task starts its execution.
-The
-.I absolute deadline
-is thus obtained by adding the relative deadline to the arrival time.
-.PP
-The following diagram clarifies these terms:
-.PP
-.in +4n
-.EX
-arrival/wakeup absolute deadline
- | start time |
- | | |
- v v v
------x--------xooooooooooooooooo--------x--------x---
- |<- comp. time ->|
- |<------- relative deadline ------>|
- |<-------------- period ------------------->|
-.EE
-.in
-.PP
-When setting a
-.B SCHED_DEADLINE
-policy for a thread using
-.BR sched_setattr (2),
-one can specify three parameters:
-.IR Runtime ,
-.IR Deadline ,
-and
-.IR Period .
-These parameters do not necessarily correspond to the aforementioned terms:
-usual practice is to set Runtime to something bigger than the average
-computation time (or worst-case execution time for hard real-time tasks),
-Deadline to the relative deadline, and Period to the period of the task.
-Thus, for
-.B SCHED_DEADLINE
-scheduling, we have:
-.PP
-.in +4n
-.EX
-arrival/wakeup absolute deadline
- | start time |
- | | |
- v v v
------x--------xooooooooooooooooo--------x--------x---
- |<-- Runtime ------->|
- |<----------- Deadline ----------->|
- |<-------------- Period ------------------->|
-.EE
-.in
-.PP
-The three deadline-scheduling parameters correspond to the
-.IR sched_runtime ,
-.IR sched_deadline ,
-and
-.I sched_period
-fields of the
-.I sched_attr
-structure; see
-.BR sched_setattr (2).
-These fields express values in nanoseconds.
-.\" FIXME It looks as though specifying sched_period as 0 means
-.\" "make sched_period the same as sched_deadline".
-.\" This needs to be documented.
-If
-.I sched_period
-is specified as 0, then it is made the same as
-.IR sched_deadline .
-.PP
-The kernel requires that:
-.PP
-.in +4n
-.EX
-sched_runtime <= sched_deadline <= sched_period
-.EE
-.in
-.PP
-.\" See __checkparam_dl in kernel/sched/core.c
-In addition, under the current implementation,
-all of the parameter values must be at least 1024
-(i.e., just over one microsecond,
-which is the resolution of the implementation), and less than 2\[ha]63.
-If any of these checks fails,
-.BR sched_setattr (2)
-fails with the error
-.BR EINVAL .
-.PP
-The CBS guarantees non-interference between tasks, by throttling
-threads that attempt to over-run their specified Runtime.
-.PP
-To ensure deadline scheduling guarantees,
-the kernel must prevent situations where the set of
-.B SCHED_DEADLINE
-threads is not feasible (schedulable) within the given constraints.
-The kernel thus performs an admittance test when setting or changing
-.B SCHED_DEADLINE
-policy and attributes.
-This admission test calculates whether the change is feasible;
-if it is not,
-.BR sched_setattr (2)
-fails with the error
-.BR EBUSY .
-.PP
-For example, it is required (but not necessarily sufficient) for
-the total utilization to be less than or equal to the total number of
-CPUs available, where, since each thread can maximally run for
-Runtime per Period, that thread's utilization is its
-Runtime divided by its Period.
-.PP
-In order to fulfill the guarantees that are made when
-a thread is admitted to the
-.B SCHED_DEADLINE
-policy,
-.B SCHED_DEADLINE
-threads are the highest priority (user controllable) threads in the
-system; if any
-.B SCHED_DEADLINE
-thread is runnable,
-it will preempt any thread scheduled under one of the other policies.
-.PP
-A call to
-.BR fork (2)
-by a thread scheduled under the
-.B SCHED_DEADLINE
-policy fails with the error
-.BR EAGAIN ,
-unless the thread has its reset-on-fork flag set (see below).
-.PP
-A
-.B SCHED_DEADLINE
-thread that calls
-.BR sched_yield (2)
-will yield the current job and wait for a new period to begin.
-.\"
-.\" FIXME Calling sched_getparam() on a SCHED_DEADLINE thread
-.\" fails with EINVAL, but sched_getscheduler() succeeds.
-.\" Is that intended? (Why?)
-.\"
-.SS SCHED_OTHER: Default Linux time-sharing scheduling
-\fBSCHED_OTHER\fP can be used at only static priority 0
-(i.e., threads under real-time policies always have priority over
-.B SCHED_OTHER
-processes).
-\fBSCHED_OTHER\fP is the standard Linux time-sharing scheduler that is
-intended for all threads that do not require the special
-real-time mechanisms.
-.PP
-The thread to run is chosen from the static
-priority 0 list based on a \fIdynamic\fP priority that is determined only
-inside this list.
-The dynamic priority is based on the nice value (see below)
-and is increased for each time quantum the thread is ready to run,
-but denied to run by the scheduler.
-This ensures fair progress among all \fBSCHED_OTHER\fP threads.
-.PP
-In the Linux kernel source code, the
-.B SCHED_OTHER
-policy is actually named
-.BR SCHED_NORMAL .
-.\"
-.SS The nice value
-The nice value is an attribute
-that can be used to influence the CPU scheduler to
-favor or disfavor a process in scheduling decisions.
-It affects the scheduling of
-.B SCHED_OTHER
-and
-.B SCHED_BATCH
-(see below) processes.
-The nice value can be modified using
-.BR nice (2),
-.BR setpriority (2),
-or
-.BR sched_setattr (2).
-.PP
-According to POSIX.1, the nice value is a per-process attribute;
-that is, the threads in a process should share a nice value.
-However, on Linux, the nice value is a per-thread attribute:
-different threads in the same process may have different nice values.
-.PP
-The range of the nice value
-varies across UNIX systems.
-On modern Linux, the range is \-20 (high priority) to +19 (low priority).
-On some other systems, the range is \-20..20.
-Very early Linux kernels (before Linux 2.0) had the range \-infinity..15.
-.\" Linux before 1.3.36 had \-infinity..15.
-.\" Since Linux 1.3.43, Linux has the range \-20..19.
-.PP
-The degree to which the nice value affects the relative scheduling of
-.B SCHED_OTHER
-processes likewise varies across UNIX systems and
-across Linux kernel versions.
-.PP
-With the advent of the CFS scheduler in Linux 2.6.23,
-Linux adopted an algorithm that causes
-relative differences in nice values to have a much stronger effect.
-In the current implementation, each unit of difference in the
-nice values of two processes results in a factor of 1.25
-in the degree to which the scheduler favors the higher priority process.
-This causes very low nice values (+19) to truly provide little CPU
-to a process whenever there is any other
-higher priority load on the system,
-and makes high nice values (\-20) deliver most of the CPU to applications
-that require it (e.g., some audio applications).
-.PP
-On Linux, the
-.B RLIMIT_NICE
-resource limit can be used to define a limit to which
-an unprivileged process's nice value can be raised; see
-.BR setrlimit (2)
-for details.
-.PP
-For further details on the nice value, see the subsections on
-the autogroup feature and group scheduling, below.
-.\"
-.SS SCHED_BATCH: Scheduling batch processes
-(Since Linux 2.6.16.)
-\fBSCHED_BATCH\fP can be used only at static priority 0.
-This policy is similar to \fBSCHED_OTHER\fP in that it schedules
-the thread according to its dynamic priority
-(based on the nice value).
-The difference is that this policy
-will cause the scheduler to always assume
-that the thread is CPU-intensive.
-Consequently, the scheduler will apply a small scheduling
-penalty with respect to wakeup behavior,
-so that this thread is mildly disfavored in scheduling decisions.
-.PP
-.\" The following paragraph is drawn largely from the text that
-.\" accompanied Ingo Molnar's patch for the implementation of
-.\" SCHED_BATCH.
-.\" commit b0a9499c3dd50d333e2aedb7e894873c58da3785
-This policy is useful for workloads that are noninteractive,
-but do not want to lower their nice value,
-and for workloads that want a deterministic scheduling policy without
-interactivity causing extra preemptions (between the workload's tasks).
-.\"
-.SS SCHED_IDLE: Scheduling very low priority jobs
-(Since Linux 2.6.23.)
-\fBSCHED_IDLE\fP can be used only at static priority 0;
-the process nice value has no influence for this policy.
-.PP
-This policy is intended for running jobs at extremely low
-priority (lower even than a +19 nice value with the
-.B SCHED_OTHER
-or
-.B SCHED_BATCH
-policies).
-.\"
-.SS Resetting scheduling policy for child processes
-Each thread has a reset-on-fork scheduling flag.
-When this flag is set, children created by
-.BR fork (2)
-do not inherit privileged scheduling policies.
-The reset-on-fork flag can be set by either:
-.IP \[bu] 3
-ORing the
-.B SCHED_RESET_ON_FORK
-flag into the
-.I policy
-argument when calling
-.BR sched_setscheduler (2)
-(since Linux 2.6.32);
-or
-.IP \[bu]
-specifying the
-.B SCHED_FLAG_RESET_ON_FORK
-flag in
-.I attr.sched_flags
-when calling
-.BR sched_setattr (2).
-.PP
-Note that the constants used with these two APIs have different names.
-The state of the reset-on-fork flag can analogously be retrieved using
-.BR sched_getscheduler (2)
-and
-.BR sched_getattr (2).
-.PP
-The reset-on-fork feature is intended for media-playback applications,
-and can be used to prevent applications evading the
-.B RLIMIT_RTTIME
-resource limit (see
-.BR getrlimit (2))
-by creating multiple child processes.
-.PP
-More precisely, if the reset-on-fork flag is set,
-the following rules apply for subsequently created children:
-.IP \[bu] 3
-If the calling thread has a scheduling policy of
-.B SCHED_FIFO
-or
-.BR SCHED_RR ,
-the policy is reset to
-.B SCHED_OTHER
-in child processes.
-.IP \[bu]
-If the calling process has a negative nice value,
-the nice value is reset to zero in child processes.
-.PP
-After the reset-on-fork flag has been enabled,
-it can be reset only if the thread has the
-.B CAP_SYS_NICE
-capability.
-This flag is disabled in child processes created by
-.BR fork (2).
-.\"
-.SS Privileges and resource limits
-Before Linux 2.6.12, only privileged
-.RB ( CAP_SYS_NICE )
-threads can set a nonzero static priority (i.e., set a real-time
-scheduling policy).
-The only change that an unprivileged thread can make is to set the
-.B SCHED_OTHER
-policy, and this can be done only if the effective user ID of the caller
-matches the real or effective user ID of the target thread
-(i.e., the thread specified by
-.IR pid )
-whose policy is being changed.
-.PP
-A thread must be privileged
-.RB ( CAP_SYS_NICE )
-in order to set or modify a
-.B SCHED_DEADLINE
-policy.
-.PP
-Since Linux 2.6.12, the
-.B RLIMIT_RTPRIO
-resource limit defines a ceiling on an unprivileged thread's
-static priority for the
-.B SCHED_RR
-and
-.B SCHED_FIFO
-policies.
-The rules for changing scheduling policy and priority are as follows:
-.IP \[bu] 3
-If an unprivileged thread has a nonzero
-.B RLIMIT_RTPRIO
-soft limit, then it can change its scheduling policy and priority,
-subject to the restriction that the priority cannot be set to a
-value higher than the maximum of its current priority and its
-.B RLIMIT_RTPRIO
-soft limit.
-.IP \[bu]
-If the
-.B RLIMIT_RTPRIO
-soft limit is 0, then the only permitted changes are to lower the priority,
-or to switch to a non-real-time policy.
-.IP \[bu]
-Subject to the same rules,
-another unprivileged thread can also make these changes,
-as long as the effective user ID of the thread making the change
-matches the real or effective user ID of the target thread.
-.IP \[bu]
-Special rules apply for the
-.B SCHED_IDLE
-policy.
-Before Linux 2.6.39,
-an unprivileged thread operating under this policy cannot
-change its policy, regardless of the value of its
-.B RLIMIT_RTPRIO
-resource limit.
-Since Linux 2.6.39,
-.\" commit c02aa73b1d18e43cfd79c2f193b225e84ca497c8
-an unprivileged thread can switch to either the
-.B SCHED_BATCH
-or the
-.B SCHED_OTHER
-policy so long as its nice value falls within the range permitted by its
-.B RLIMIT_NICE
-resource limit (see
-.BR getrlimit (2)).
-.PP
-Privileged
-.RB ( CAP_SYS_NICE )
-threads ignore the
-.B RLIMIT_RTPRIO
-limit; as with older kernels,
-they can make arbitrary changes to scheduling policy and priority.
-See
-.BR getrlimit (2)
-for further information on
-.BR RLIMIT_RTPRIO .
-.SS Limiting the CPU usage of real-time and deadline processes
-A nonblocking infinite loop in a thread scheduled under the
-.BR SCHED_FIFO ,
-.BR SCHED_RR ,
-or
-.B SCHED_DEADLINE
-policy can potentially block all other threads from accessing
-the CPU forever.
-Before Linux 2.6.25, the only way of preventing a runaway real-time
-process from freezing the system was to run (at the console)
-a shell scheduled under a higher static priority than the tested application.
-This allows an emergency kill of tested
-real-time applications that do not block or terminate as expected.
-.PP
-Since Linux 2.6.25, there are other techniques for dealing with runaway
-real-time and deadline processes.
-One of these is to use the
-.B RLIMIT_RTTIME
-resource limit to set a ceiling on the CPU time that
-a real-time process may consume.
-See
-.BR getrlimit (2)
-for details.
-.PP
-Since Linux 2.6.25, Linux also provides two
-.I /proc
-files that can be used to reserve a certain amount of CPU time
-to be used by non-real-time processes.
-Reserving CPU time in this fashion allows some CPU time to be
-allocated to (say) a root shell that can be used to kill a runaway process.
-Both of these files specify time values in microseconds:
-.TP
-.I /proc/sys/kernel/sched_rt_period_us
-This file specifies a scheduling period that is equivalent to
-100% CPU bandwidth.
-The value in this file can range from 1 to
-.BR INT_MAX ,
-giving an operating range of 1 microsecond to around 35 minutes.
-The default value in this file is 1,000,000 (1 second).
-.TP
-.I /proc/sys/kernel/sched_rt_runtime_us
-The value in this file specifies how much of the "period" time
-can be used by all real-time and deadline scheduled processes
-on the system.
-The value in this file can range from \-1 to
-.BR INT_MAX \-1.
-Specifying \-1 makes the run time the same as the period;
-that is, no CPU time is set aside for non-real-time processes
-(which was the behavior before Linux 2.6.25).
-The default value in this file is 950,000 (0.95 seconds),
-meaning that 5% of the CPU time is reserved for processes that
-don't run under a real-time or deadline scheduling policy.
-.SS Response time
-A blocked high priority thread waiting for I/O has a certain
-response time before it is scheduled again.
-The device driver writer
-can greatly reduce this response time by using a "slow interrupt"
-interrupt handler.
-.\" as described in
-.\" .BR request_irq (9).
-.SS Miscellaneous
-Child processes inherit the scheduling policy and parameters across a
-.BR fork (2).
-The scheduling policy and parameters are preserved across
-.BR execve (2).
-.PP
-Memory locking is usually needed for real-time processes to avoid
-paging delays; this can be done with
-.BR mlock (2)
-or
-.BR mlockall (2).
-.\"
-.SS The autogroup feature
-.\" commit 5091faa449ee0b7d73bc296a93bca9540fc51d0a
-Since Linux 2.6.38,
-the kernel provides a feature known as autogrouping to improve interactive
-desktop performance in the face of multiprocess, CPU-intensive
-workloads such as building the Linux kernel with large numbers of
-parallel build processes (i.e., the
-.BR make (1)
-.B \-j
-flag).
-.PP
-This feature operates in conjunction with the
-CFS scheduler and requires a kernel that is configured with
-.BR CONFIG_SCHED_AUTOGROUP .
-On a running system, this feature is enabled or disabled via the file
-.IR /proc/sys/kernel/sched_autogroup_enabled ;
-a value of 0 disables the feature, while a value of 1 enables it.
-The default value in this file is 1, unless the kernel was booted with the
-.I noautogroup
-parameter.
-.PP
-A new autogroup is created when a new session is created via
-.BR setsid (2);
-this happens, for example, when a new terminal window is started.
-A new process created by
-.BR fork (2)
-inherits its parent's autogroup membership.
-Thus, all of the processes in a session are members of the same autogroup.
-An autogroup is automatically destroyed when the last process
-in the group terminates.
-.PP
-When autogrouping is enabled, all of the members of an autogroup
-are placed in the same kernel scheduler "task group".
-The CFS scheduler employs an algorithm that equalizes the
-distribution of CPU cycles across task groups.
-The benefits of this for interactive desktop performance
-can be described via the following example.
-.PP
-Suppose that there are two autogroups competing for the same CPU
-(i.e., presume either a single CPU system or the use of
-.BR taskset (1)
-to confine all the processes to the same CPU on an SMP system).
-The first group contains ten CPU-bound processes from
-a kernel build started with
-.IR "make\~\-j10" .
-The other contains a single CPU-bound process: a video player.
-The effect of autogrouping is that the two groups will
-each receive half of the CPU cycles.
-That is, the video player will receive 50% of the CPU cycles,
-rather than just 9% of the cycles,
-which would likely lead to degraded video playback.
-The situation on an SMP system is more complex,
-.\" Mike Galbraith, 25 Nov 2016:
-.\" I'd say something more wishy-washy here, like cycles are
-.\" distributed fairly across groups and leave it at that, as your
-.\" detailed example is incorrect due to SMP fairness (which I don't
-.\" like much because [very unlikely] worst case scenario
-.\" renders a box sized group incapable of utilizing more that
-.\" a single CPU total). For example, if a group of NR_CPUS
-.\" size competes with a singleton, load balancing will try to give
-.\" the singleton a full CPU of its very own. If groups intersect for
-.\" whatever reason on say my quad lappy, distribution is 80/20 in
-.\" favor of the singleton.
-but the general effect is the same:
-the scheduler distributes CPU cycles across task groups such that
-an autogroup that contains a large number of CPU-bound processes
-does not end up hogging CPU cycles at the expense of the other
-jobs on the system.
-.PP
-A process's autogroup (task group) membership can be viewed via the file
-.IR /proc/ pid /autogroup :
-.PP
-.in +4n
-.EX
-$ \fBcat /proc/1/autogroup\fP
-/autogroup\-1 nice 0
-.EE
-.in
-.PP
-This file can also be used to modify the CPU bandwidth allocated
-to an autogroup.
-This is done by writing a number in the "nice" range to the file
-to set the autogroup's nice value.
-The allowed range is from +19 (low priority) to \-20 (high priority).
-(Writing values outside of this range causes
-.BR write (2)
-to fail with the error
-.BR EINVAL .)
-.\" FIXME .
-.\" Because of a bug introduced in Linux 4.7
-.\" (commit 2159197d66770ec01f75c93fb11dc66df81fd45b made changes
-.\" that exposed the fact that autogroup didn't call scale_load()),
-.\" it happened that *all* values in this range caused a task group
-.\" to be further disfavored by the scheduler, with \-20 resulting
-.\" in the scheduler mildly disfavoring the task group and +19 greatly
-.\" disfavoring it.
-.\"
-.\" A patch was posted on 23 Nov 2016
-.\" ("sched/autogroup: Fix 64bit kernel nice adjustment";
-.\" check later to see in which kernel version it lands.
-.PP
-The autogroup nice setting has the same meaning as the process nice value,
-but applies to distribution of CPU cycles to the autogroup as a whole,
-based on the relative nice values of other autogroups.
-For a process inside an autogroup, the CPU cycles that it receives
-will be a product of the autogroup's nice value
-(compared to other autogroups)
-and the process's nice value
-(compared to other processes in the same autogroup.
-.PP
-The use of the
-.BR cgroups (7)
-CPU controller to place processes in cgroups other than the
-root CPU cgroup overrides the effect of autogrouping.
-.PP
-The autogroup feature groups only processes scheduled under
-non-real-time policies
-.RB ( SCHED_OTHER ,
-.BR SCHED_BATCH ,
-and
-.BR SCHED_IDLE ).
-It does not group processes scheduled under real-time and
-deadline policies.
-Those processes are scheduled according to the rules described earlier.
-.\"
-.SS The nice value and group scheduling
-When scheduling non-real-time processes (i.e., those scheduled under the
-.BR SCHED_OTHER ,
-.BR SCHED_BATCH ,
-and
-.B SCHED_IDLE
-policies), the CFS scheduler employs a technique known as "group scheduling",
-if the kernel was configured with the
-.B CONFIG_FAIR_GROUP_SCHED
-option (which is typical).
-.PP
-Under group scheduling, threads are scheduled in "task groups".
-Task groups have a hierarchical relationship,
-rooted under the initial task group on the system,
-known as the "root task group".
-Task groups are formed in the following circumstances:
-.IP \[bu] 3
-All of the threads in a CPU cgroup form a task group.
-The parent of this task group is the task group of the
-corresponding parent cgroup.
-.IP \[bu]
-If autogrouping is enabled,
-then all of the threads that are (implicitly) placed in an autogroup
-(i.e., the same session, as created by
-.BR setsid (2))
-form a task group.
-Each new autogroup is thus a separate task group.
-The root task group is the parent of all such autogroups.
-.IP \[bu]
-If autogrouping is enabled, then the root task group consists of
-all processes in the root CPU cgroup that were not
-otherwise implicitly placed into a new autogroup.
-.IP \[bu]
-If autogrouping is disabled, then the root task group consists of
-all processes in the root CPU cgroup.
-.IP \[bu]
-If group scheduling was disabled (i.e., the kernel was configured without
-.BR CONFIG_FAIR_GROUP_SCHED ),
-then all of the processes on the system are notionally placed
-in a single task group.
-.PP
-Under group scheduling,
-a thread's nice value has an effect for scheduling decisions
-.IR "only relative to other threads in the same task group" .
-This has some surprising consequences in terms of the traditional semantics
-of the nice value on UNIX systems.
-In particular, if autogrouping
-is enabled (which is the default in various distributions), then employing
-.BR setpriority (2)
-or
-.BR nice (1)
-on a process has an effect only for scheduling relative
-to other processes executed in the same session
-(typically: the same terminal window).
-.PP
-Conversely, for two processes that are (for example)
-the sole CPU-bound processes in different sessions
-(e.g., different terminal windows,
-each of whose jobs are tied to different autogroups),
-.I modifying the nice value of the process in one of the sessions
-.I has no effect
-in terms of the scheduler's decisions relative to the
-process in the other session.
-.\" More succinctly: the nice(1) command is in many cases a no-op since
-.\" Linux 2.6.38.
-.\"
-A possibly useful workaround here is to use a command such as
-the following to modify the autogroup nice value for
-.I all
-of the processes in a terminal session:
-.PP
-.in +4n
-.EX
-$ \fBecho 10 > /proc/self/autogroup\fP
-.EE
-.in
-.SS Real-time features in the mainline Linux kernel
-.\" FIXME . Probably this text will need some minor tweaking
-.\" ask Carsten Emde about this.
-Since Linux 2.6.18, Linux is gradually
-becoming equipped with real-time capabilities,
-most of which are derived from the former
-.I realtime\-preempt
-patch set.
-Until the patches have been completely merged into the
-mainline kernel,
-they must be installed to achieve the best real-time performance.
-These patches are named:
-.PP
-.in +4n
-.EX
-patch\-\fIkernelversion\fP\-rt\fIpatchversion\fP
-.EE
-.in
-.PP
-and can be downloaded from
-.UR http://www.kernel.org\:/pub\:/linux\:/kernel\:/projects\:/rt/
-.UE .
-.PP
-Without the patches and prior to their full inclusion into the mainline
-kernel, the kernel configuration offers only the three preemption classes
-.BR CONFIG_PREEMPT_NONE ,
-.BR CONFIG_PREEMPT_VOLUNTARY ,
-and
-.B CONFIG_PREEMPT_DESKTOP
-which respectively provide no, some, and considerable
-reduction of the worst-case scheduling latency.
-.PP
-With the patches applied or after their full inclusion into the mainline
-kernel, the additional configuration item
-.B CONFIG_PREEMPT_RT
-becomes available.
-If this is selected, Linux is transformed into a regular
-real-time operating system.
-The FIFO and RR scheduling policies are then used to run a thread
-with true real-time priority and a minimum worst-case scheduling latency.
-.SH NOTES
-The
-.BR cgroups (7)
-CPU controller can be used to limit the CPU consumption of
-groups of processes.
-.PP
-Originally, Standard Linux was intended as a general-purpose operating
-system being able to handle background processes, interactive
-applications, and less demanding real-time applications (applications that
-need to usually meet timing deadlines).
-Although the Linux 2.6
-allowed for kernel preemption and the newly introduced O(1) scheduler
-ensures that the time needed to schedule is fixed and deterministic
-irrespective of the number of active tasks, true real-time computing
-was not possible up to Linux 2.6.17.
-.SH SEE ALSO
-.ad l
-.nh
-.BR chcpu (1),
-.BR chrt (1),
-.BR lscpu (1),
-.BR ps (1),
-.BR taskset (1),
-.BR top (1),
-.BR getpriority (2),
-.BR mlock (2),
-.BR mlockall (2),
-.BR munlock (2),
-.BR munlockall (2),
-.BR nice (2),
-.BR sched_get_priority_max (2),
-.BR sched_get_priority_min (2),
-.BR sched_getaffinity (2),
-.BR sched_getparam (2),
-.BR sched_getscheduler (2),
-.BR sched_rr_get_interval (2),
-.BR sched_setaffinity (2),
-.BR sched_setparam (2),
-.BR sched_setscheduler (2),
-.BR sched_yield (2),
-.BR setpriority (2),
-.BR pthread_getaffinity_np (3),
-.BR pthread_getschedparam (3),
-.BR pthread_setaffinity_np (3),
-.BR sched_getcpu (3),
-.BR capabilities (7),
-.BR cpuset (7)
-.ad
-.PP
-.I Programming for the real world \- POSIX.4
-by Bill O.\& Gallmeister, O'Reilly & Associates, Inc., ISBN 1-56592-074-0.
-.PP
-The Linux kernel source files
-.IR \%Documentation/\:scheduler/\:sched\-deadline\:.txt ,
-.IR \%Documentation/\:scheduler/\:sched\-rt\-group\:.txt ,
-.IR \%Documentation/\:scheduler/\:sched\-design\-CFS\:.txt ,
-and
-.I \%Documentation/\:scheduler/\:sched\-nice\-design\:.txt
diff --git a/man7/sem_overview.7 b/man7/sem_overview.7
deleted file mode 100644
index 1dfcf68ad..000000000
--- a/man7/sem_overview.7
+++ /dev/null
@@ -1,139 +0,0 @@
-.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sem_overview 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sem_overview \- overview of POSIX semaphores
-.SH DESCRIPTION
-POSIX semaphores allow processes and threads to synchronize their actions.
-.PP
-A semaphore is an integer whose value is never allowed to fall below zero.
-Two operations can be performed on semaphores:
-increment the semaphore value by one
-.RB ( sem_post (3));
-and decrement the semaphore value by one
-.RB ( sem_wait (3)).
-If the value of a semaphore is currently zero, then a
-.BR sem_wait (3)
-operation will block until the value becomes greater than zero.
-.PP
-POSIX semaphores come in two forms: named semaphores and
-unnamed semaphores.
-.TP
-.B Named semaphores
-A named semaphore is identified by a name of the form
-.IR /somename ;
-that is, a null-terminated string of up to
-.BI NAME_MAX \-4
-(i.e., 251) characters consisting of an initial slash,
-.\" glibc allows the initial slash to be omitted, and makes
-.\" multiple initial slashes equivalent to a single slash.
-.\" This differs from the implementation of POSIX message queues.
-followed by one or more characters, none of which are slashes.
-.\" glibc allows subdirectory components in the name, in which
-.\" case the subdirectory tree must exist under /dev/shm, and
-.\" the fist subdirectory component must exist as the name
-.\" sem.name, and all of the subdirectory components must allow the
-.\" required permissions if a user wants to create a semaphore
-.\" object in a subdirectory.
-Two processes can operate on the same named semaphore by passing
-the same name to
-.BR sem_open (3).
-.IP
-The
-.BR sem_open (3)
-function creates a new named semaphore or opens an existing
-named semaphore.
-After the semaphore has been opened, it can be operated on using
-.BR sem_post (3)
-and
-.BR sem_wait (3).
-When a process has finished using the semaphore, it can use
-.BR sem_close (3)
-to close the semaphore.
-When all processes have finished using the semaphore,
-it can be removed from the system using
-.BR sem_unlink (3).
-.TP
-.B Unnamed semaphores (memory-based semaphores)
-An unnamed semaphore does not have a name.
-Instead the semaphore is placed in a region of memory that
-is shared between multiple threads (a
-.IR "thread-shared semaphore" )
-or processes (a
-.IR "process-shared semaphore" ).
-A thread-shared semaphore is placed in an area of memory shared
-between the threads of a process, for example, a global variable.
-A process-shared semaphore must be placed in a shared memory region
-(e.g., a System V shared memory segment created using
-.BR shmget (2),
-or a POSIX shared memory object built created using
-.BR shm_open (3)).
-.IP
-Before being used, an unnamed semaphore must be initialized using
-.BR sem_init (3).
-It can then be operated on using
-.BR sem_post (3)
-and
-.BR sem_wait (3).
-When the semaphore is no longer required,
-and before the memory in which it is located is deallocated,
-the semaphore should be destroyed using
-.BR sem_destroy (3).
-.PP
-The remainder of this section describes some specific details
-of the Linux implementation of POSIX semaphores.
-.SS Versions
-Before Linux 2.6, Linux supported only unnamed,
-thread-shared semaphores.
-On a system with Linux 2.6 and a glibc that provides the NPTL
-threading implementation,
-a complete implementation of POSIX semaphores is provided.
-.SS Persistence
-POSIX named semaphores have kernel persistence:
-if not removed by
-.BR sem_unlink (3),
-a semaphore will exist until the system is shut down.
-.SS Linking
-Programs using the POSIX semaphores API must be compiled with
-.I cc \-pthread
-to link against the real-time library,
-.IR librt .
-.SS Accessing named semaphores via the filesystem
-On Linux, named semaphores are created in a virtual filesystem,
-normally mounted under
-.IR /dev/shm ,
-with names of the form
-.IR \fBsem.\fPsomename .
-(This is the reason that semaphore names are limited to
-.BI NAME_MAX \-4
-rather than
-.B NAME_MAX
-characters.)
-.PP
-Since Linux 2.6.19, ACLs can be placed on files under this directory,
-to control object permissions on a per-user and per-group basis.
-.SH NOTES
-System V semaphores
-.RB ( semget (2),
-.BR semop (2),
-etc.) are an older semaphore API.
-POSIX semaphores provide a simpler, and better designed interface than
-System V semaphores;
-on the other hand POSIX semaphores are less widely available
-(especially on older systems) than System V semaphores.
-.SH EXAMPLES
-An example of the use of various POSIX semaphore functions is shown in
-.BR sem_wait (3).
-.SH SEE ALSO
-.BR sem_close (3),
-.BR sem_destroy (3),
-.BR sem_getvalue (3),
-.BR sem_init (3),
-.BR sem_open (3),
-.BR sem_post (3),
-.BR sem_unlink (3),
-.BR sem_wait (3),
-.BR pthreads (7),
-.BR shm_overview (7)
diff --git a/man7/session-keyring.7 b/man7/session-keyring.7
deleted file mode 100644
index 8537f0123..000000000
--- a/man7/session-keyring.7
+++ /dev/null
@@ -1,113 +0,0 @@
-.\" Copyright (C) 2014 Red Hat, Inc. All Rights Reserved.
-.\" Written by David Howells (dhowells@redhat.com)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH session-keyring 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-session-keyring \- session shared process keyring
-.SH DESCRIPTION
-The session keyring is a keyring used to anchor keys on behalf of a process.
-It is typically created by
-.BR pam_keyinit (8)
-when a user logs in and a link will be added that refers to the
-.BR user\-keyring (7).
-Optionally,
-.BR PAM (7)
-may revoke the session keyring on logout.
-(In typical configurations, PAM does do this revocation.)
-The session keyring has the name (description)
-.IR _ses .
-.PP
-A special serial number value,
-.BR KEY_SPEC_SESSION_KEYRING ,
-is defined that can be used in lieu of the actual serial number of
-the calling process's session keyring.
-.PP
-From the
-.BR keyctl (1)
-utility, '\fB@s\fP' can be used instead of a numeric key ID in
-much the same way.
-.PP
-A process's session keyring is inherited across
-.BR clone (2),
-.BR fork (2),
-and
-.BR vfork (2).
-The session keyring
-is preserved across
-.BR execve (2),
-even when the executable is set-user-ID or set-group-ID or has capabilities.
-The session keyring is destroyed when the last process that
-refers to it exits.
-.PP
-If a process doesn't have a session keyring when it is accessed, then,
-under certain circumstances, the
-.BR user\-session\-keyring (7)
-will be attached as the session keyring
-and under others a new session keyring will be created.
-(See
-.BR user\-session\-keyring (7)
-for further details.)
-.SS Special operations
-The
-.I keyutils
-library provides the following special operations for manipulating
-session keyrings:
-.TP
-.BR keyctl_join_session_keyring (3)
-This operation allows the caller to change the session keyring
-that it subscribes to.
-The caller can join an existing keyring with a specified name (description),
-create a new keyring with a given name,
-or ask the kernel to create a new "anonymous"
-session keyring with the name "_ses".
-(This function is an interface to the
-.BR keyctl (2)
-.B KEYCTL_JOIN_SESSION_KEYRING
-operation.)
-.TP
-.BR keyctl_session_to_parent (3)
-This operation allows the caller to make the parent process's
-session keyring to the same as its own.
-For this to succeed, the parent process must have
-identical security attributes and must be single threaded.
-(This function is an interface to the
-.BR keyctl (2)
-.B KEYCTL_SESSION_TO_PARENT
-operation.)
-.PP
-These operations are also exposed through the
-.BR keyctl (1)
-utility as:
-.PP
-.in +4n
-.EX
-keyctl session
-keyctl session \- [<prog> <arg1> <arg2> ...]
-keyctl session <name> [<prog> <arg1> <arg2> ...]
-.EE
-.in
-.PP
-and:
-.PP
-.in +4n
-.EX
-keyctl new_session
-.EE
-.in
-.SH SEE ALSO
-.ad l
-.nh
-.BR keyctl (1),
-.BR keyctl (3),
-.BR keyctl_join_session_keyring (3),
-.BR keyctl_session_to_parent (3),
-.BR keyrings (7),
-.BR PAM (7),
-.BR persistent\-keyring (7),
-.BR process\-keyring (7),
-.BR thread\-keyring (7),
-.BR user\-keyring (7),
-.BR user\-session\-keyring (7),
-.BR pam_keyinit (8)
diff --git a/man7/shm_overview.7 b/man7/shm_overview.7
deleted file mode 100644
index ee3d7b3b6..000000000
--- a/man7/shm_overview.7
+++ /dev/null
@@ -1,104 +0,0 @@
-.\" Copyright (C) 2008, Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH shm_overview 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-shm_overview \- overview of POSIX shared memory
-.SH DESCRIPTION
-The POSIX shared memory API allows processes to communicate information
-by sharing a region of memory.
-.PP
-The interfaces employed in the API are:
-.TP 15
-.BR shm_open (3)
-Create and open a new object, or open an existing object.
-This is analogous to
-.BR open (2).
-The call returns a file descriptor for use by the other
-interfaces listed below.
-.TP
-.BR ftruncate (2)
-Set the size of the shared memory object.
-(A newly created shared memory object has a length of zero.)
-.TP
-.BR mmap (2)
-Map the shared memory object into the virtual address space
-of the calling process.
-.TP
-.BR munmap (2)
-Unmap the shared memory object from the virtual address space
-of the calling process.
-.TP
-.BR shm_unlink (3)
-Remove a shared memory object name.
-.TP
-.BR close (2)
-Close the file descriptor allocated by
-.BR shm_open (3)
-when it is no longer needed.
-.TP
-.BR fstat (2)
-Obtain a
-.I stat
-structure that describes the shared memory object.
-Among the information returned by this call are the object's
-size
-.RI ( st_size ),
-permissions
-.RI ( st_mode ),
-owner
-.RI ( st_uid ),
-and group
-.RI ( st_gid ).
-.TP
-.BR fchown (2)
-To change the ownership of a shared memory object.
-.TP
-.BR fchmod (2)
-To change the permissions of a shared memory object.
-.SS Versions
-POSIX shared memory is supported since Linux 2.4 and glibc 2.2.
-.SS Persistence
-POSIX shared memory objects have kernel persistence:
-a shared memory object will exist until the system is shut down,
-or until all processes have unmapped the object and it has been deleted with
-.BR shm_unlink (3)
-.SS Linking
-Programs using the POSIX shared memory API must be compiled with
-.I cc \-lrt
-to link against the real-time library,
-.IR librt .
-.SS Accessing shared memory objects via the filesystem
-On Linux, shared memory objects are created in a
-.RB ( tmpfs (5))
-virtual filesystem, normally mounted under
-.IR /dev/shm .
-Since Linux 2.6.19, Linux supports the use of access control lists (ACLs)
-to control the permissions of objects in the virtual filesystem.
-.SH NOTES
-Typically, processes must synchronize their access to a shared
-memory object, using, for example, POSIX semaphores.
-.PP
-System V shared memory
-.RB ( shmget (2),
-.BR shmop (2),
-etc.) is an older shared memory API.
-POSIX shared memory provides a simpler, and better designed interface;
-on the other hand POSIX shared memory is somewhat less widely available
-(especially on older systems) than System V shared memory.
-.SH SEE ALSO
-.BR fchmod (2),
-.BR fchown (2),
-.BR fstat (2),
-.BR ftruncate (2),
-.BR memfd_create (2),
-.BR mmap (2),
-.BR mprotect (2),
-.BR munmap (2),
-.BR shmget (2),
-.BR shmop (2),
-.BR shm_open (3),
-.BR shm_unlink (3),
-.BR sem_overview (7)
diff --git a/man7/sigevent.7 b/man7/sigevent.7
deleted file mode 100644
index 682d09efc..000000000
--- a/man7/sigevent.7
+++ /dev/null
@@ -1,120 +0,0 @@
-.\" Copyright (C) 2006, 2010 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Copyright (C) 2009 Petr Baudis <pasky@suse.cz>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sigevent 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sigevent \- structure for notification from asynchronous routines
-.SH SYNOPSIS
-.nf
-#include <signal.h>
-.PP
-union sigval { /* Data passed with notification */
- int sival_int; /* Integer value */
- void *sival_ptr; /* Pointer value */
-};
-.PP
-struct sigevent {
- int sigev_notify; /* Notification method */
- int sigev_signo; /* Notification signal */
- union sigval sigev_value;
- /* Data passed with notification */
- void (*sigev_notify_function)(union sigval);
- /* Function used for thread
- notification (SIGEV_THREAD) */
- void *sigev_notify_attributes;
- /* Attributes for notification thread
- (SIGEV_THREAD) */
- pid_t sigev_notify_thread_id;
- /* ID of thread to signal
- (SIGEV_THREAD_ID); Linux-specific */
-};
-.fi
-.SH DESCRIPTION
-The
-.I sigevent
-structure is used by various APIs
-to describe the way a process is to be notified about an event
-(e.g., completion of an asynchronous request, expiration of a timer,
-or the arrival of a message).
-.PP
-The definition shown in the SYNOPSIS is approximate:
-some of the fields in the
-.I sigevent
-structure may be defined as part of a union.
-Programs should employ only those fields relevant
-to the value specified in
-.IR sigev_notify .
-.PP
-The
-.I sigev_notify
-field specifies how notification is to be performed.
-This field can have one of the following values:
-.TP
-.B SIGEV_NONE
-A "null" notification: don't do anything when the event occurs.
-.TP
-.B SIGEV_SIGNAL
-Notify the process by sending the signal specified in
-.IR sigev_signo .
-.IP
-If the signal is caught with a signal handler that was registered using the
-.BR sigaction (2)
-.B SA_SIGINFO
-flag, then the following fields are set in the
-.I siginfo_t
-structure that is passed as the second argument of the handler:
-.RS
-.TP 10
-.I si_code
-This field is set to a value that depends on the API
-delivering the notification.
-.TP
-.I si_signo
-This field is set to the signal number (i.e., the same value as in
-.IR sigev_signo ).
-.TP
-.I si_value
-This field is set to the value specified in
-.IR sigev_value .
-.RE
-.IP
-Depending on the API, other fields may also be set in the
-.I siginfo_t
-structure.
-.IP
-The same information is also available if the signal is accepted using
-.BR sigwaitinfo (2).
-.TP
-.B SIGEV_THREAD
-Notify the process by invoking
-.I sigev_notify_function
-"as if" it were the start function of a new thread.
-(Among the implementation possibilities here are that
-each timer notification could result in the creation of a new thread,
-or that a single thread is created to receive all notifications.)
-The function is invoked with
-.I sigev_value
-as its sole argument.
-If
-.I sigev_notify_attributes
-is not NULL, it should point to a
-.I pthread_attr_t
-structure that defines attributes for the new thread (see
-.BR pthread_attr_init (3)).
-.TP
-.BR SIGEV_THREAD_ID " (Linux-specific)"
-.\" | SIGEV_SIGNAL vs not?
-Currently used only by POSIX timers; see
-.BR timer_create (2).
-.SH SEE ALSO
-.BR timer_create (2),
-.BR aio_fsync (3),
-.BR aio_read (3),
-.BR aio_write (3),
-.BR getaddrinfo_a (3),
-.BR lio_listio (3),
-.BR mq_notify (3),
-.BR aio (7),
-.BR pthreads (7)
diff --git a/man7/signal-safety.7 b/man7/signal-safety.7
deleted file mode 100644
index 3d6ddc7eb..000000000
--- a/man7/signal-safety.7
+++ /dev/null
@@ -1,341 +0,0 @@
-'\" t
-.\" Copyright (c) 2016 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH signal-safety 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-signal-safety \- async-signal-safe functions
-.SH DESCRIPTION
-An
-.I async-signal-safe
-function is one that can be safely called from within a signal handler.
-Many functions are
-.I not
-async-signal-safe.
-In particular,
-nonreentrant functions are generally unsafe to call from a signal handler.
-.PP
-The kinds of issues that render a function
-unsafe can be quickly understood when one considers
-the implementation of the
-.I stdio
-library, all of whose functions are not async-signal-safe.
-.PP
-When performing buffered I/O on a file, the
-.I stdio
-functions must maintain a statically allocated data buffer
-along with associated counters and indexes (or pointers)
-that record the amount of data and the current position in the buffer.
-Suppose that the main program is in the middle of a call to a
-.I stdio
-function such as
-.BR printf (3)
-where the buffer and associated variables have been partially updated.
-If, at that moment,
-the program is interrupted by a signal handler that also calls
-.BR printf (3),
-then the second call to
-.BR printf (3)
-will operate on inconsistent data, with unpredictable results.
-.PP
-To avoid problems with unsafe functions, there are two possible choices:
-.IP (a) 5
-Ensure that
-(1) the signal handler calls only async-signal-safe functions,
-and
-(2) the signal handler itself is reentrant
-with respect to global variables in the main program.
-.IP (b)
-Block signal delivery in the main program when calling functions
-that are unsafe or operating on global data that is also accessed
-by the signal handler.
-.PP
-Generally, the second choice is difficult in programs of any complexity,
-so the first choice is taken.
-.PP
-POSIX.1 specifies a set of functions that an implementation
-must make async-signal-safe.
-(An implementation may provide safe implementations of additional functions,
-but this is not required by the standard and other implementations
-may not provide the same guarantees.)
-.PP
-In general, a function is async-signal-safe either because it is reentrant
-or because it is atomic with respect to signals
-(i.e., its execution can't be interrupted by a signal handler).
-.PP
-The set of functions required to be async-signal-safe by POSIX.1
-is shown in the following table.
-The functions not otherwise noted were required to be async-signal-safe
-in POSIX.1-2001;
-the table details changes in the subsequent standards.
-.PP
-.TS
-lb lb
-l l.
-Function Notes
-\fBabort\fP(3) Added in POSIX.1-2001 TC1
-\fBaccept\fP(2)
-\fBaccess\fP(2)
-\fBaio_error\fP(3)
-\fBaio_return\fP(3)
-\fBaio_suspend\fP(3) See notes below
-\fBalarm\fP(2)
-\fBbind\fP(2)
-\fBcfgetispeed\fP(3)
-\fBcfgetospeed\fP(3)
-\fBcfsetispeed\fP(3)
-\fBcfsetospeed\fP(3)
-\fBchdir\fP(2)
-\fBchmod\fP(2)
-\fBchown\fP(2)
-\fBclock_gettime\fP(2)
-\fBclose\fP(2)
-\fBconnect\fP(2)
-\fBcreat\fP(2)
-\fBdup\fP(2)
-\fBdup2\fP(2)
-\fBexecl\fP(3) T{
-Added in POSIX.1-2008; see notes below
-T}
-\fBexecle\fP(3) See notes below
-\fBexecv\fP(3) Added in POSIX.1-2008
-\fBexecve\fP(2)
-\fB_exit\fP(2)
-\fB_Exit\fP(2)
-\fBfaccessat\fP(2) Added in POSIX.1-2008
-\fBfchdir\fP(2) Added in POSIX.1-2008 TC1
-\fBfchmod\fP(2)
-\fBfchmodat\fP(2) Added in POSIX.1-2008
-\fBfchown\fP(2)
-\fBfchownat\fP(2) Added in POSIX.1-2008
-\fBfcntl\fP(2)
-\fBfdatasync\fP(2)
-\fBfexecve\fP(3) Added in POSIX.1-2008
-\fBffs\fP(3) Added in POSIX.1-2008 TC2
-\fBfork\fP(2) See notes below
-\fBfstat\fP(2)
-\fBfstatat\fP(2) Added in POSIX.1-2008
-\fBfsync\fP(2)
-\fBftruncate\fP(2)
-\fBfutimens\fP(3) Added in POSIX.1-2008
-\fBgetegid\fP(2)
-\fBgeteuid\fP(2)
-\fBgetgid\fP(2)
-\fBgetgroups\fP(2)
-\fBgetpeername\fP(2)
-\fBgetpgrp\fP(2)
-\fBgetpid\fP(2)
-\fBgetppid\fP(2)
-\fBgetsockname\fP(2)
-\fBgetsockopt\fP(2)
-\fBgetuid\fP(2)
-\fBhtonl\fP(3) Added in POSIX.1-2008 TC2
-\fBhtons\fP(3) Added in POSIX.1-2008 TC2
-\fBkill\fP(2)
-\fBlink\fP(2)
-\fBlinkat\fP(2) Added in POSIX.1-2008
-\fBlisten\fP(2)
-\fBlongjmp\fP(3) T{
-Added in POSIX.1-2008 TC2; see notes below
-T}
-\fBlseek\fP(2)
-\fBlstat\fP(2)
-\fBmemccpy\fP(3) Added in POSIX.1-2008 TC2
-\fBmemchr\fP(3) Added in POSIX.1-2008 TC2
-\fBmemcmp\fP(3) Added in POSIX.1-2008 TC2
-\fBmemcpy\fP(3) Added in POSIX.1-2008 TC2
-\fBmemmove\fP(3) Added in POSIX.1-2008 TC2
-\fBmemset\fP(3) Added in POSIX.1-2008 TC2
-\fBmkdir\fP(2)
-\fBmkdirat\fP(2) Added in POSIX.1-2008
-\fBmkfifo\fP(3)
-\fBmkfifoat\fP(3) Added in POSIX.1-2008
-\fBmknod\fP(2) Added in POSIX.1-2008
-\fBmknodat\fP(2) Added in POSIX.1-2008
-\fBntohl\fP(3) Added in POSIX.1-2008 TC2
-\fBntohs\fP(3) Added in POSIX.1-2008 TC2
-\fBopen\fP(2)
-\fBopenat\fP(2) Added in POSIX.1-2008
-\fBpause\fP(2)
-\fBpipe\fP(2)
-\fBpoll\fP(2)
-\fBposix_trace_event\fP(3)
-\fBpselect\fP(2)
-\fBpthread_kill\fP(3) Added in POSIX.1-2008 TC1
-\fBpthread_self\fP(3) Added in POSIX.1-2008 TC1
-\fBpthread_sigmask\fP(3) Added in POSIX.1-2008 TC1
-\fBraise\fP(3)
-\fBread\fP(2)
-\fBreadlink\fP(2)
-\fBreadlinkat\fP(2) Added in POSIX.1-2008
-\fBrecv\fP(2)
-\fBrecvfrom\fP(2)
-\fBrecvmsg\fP(2)
-\fBrename\fP(2)
-\fBrenameat\fP(2) Added in POSIX.1-2008
-\fBrmdir\fP(2)
-\fBselect\fP(2)
-\fBsem_post\fP(3)
-\fBsend\fP(2)
-\fBsendmsg\fP(2)
-\fBsendto\fP(2)
-\fBsetgid\fP(2)
-\fBsetpgid\fP(2)
-\fBsetsid\fP(2)
-\fBsetsockopt\fP(2)
-\fBsetuid\fP(2)
-\fBshutdown\fP(2)
-\fBsigaction\fP(2)
-\fBsigaddset\fP(3)
-\fBsigdelset\fP(3)
-\fBsigemptyset\fP(3)
-\fBsigfillset\fP(3)
-\fBsigismember\fP(3)
-\fBsiglongjmp\fP(3) T{
-Added in POSIX.1-2008 TC2; see notes below
-T}
-\fBsignal\fP(2)
-\fBsigpause\fP(3)
-\fBsigpending\fP(2)
-\fBsigprocmask\fP(2)
-\fBsigqueue\fP(2)
-\fBsigset\fP(3)
-\fBsigsuspend\fP(2)
-\fBsleep\fP(3)
-\fBsockatmark\fP(3) Added in POSIX.1-2001 TC2
-\fBsocket\fP(2)
-\fBsocketpair\fP(2)
-\fBstat\fP(2)
-\fBstpcpy\fP(3) Added in POSIX.1-2008 TC2
-\fBstpncpy\fP(3) Added in POSIX.1-2008 TC2
-\fBstrcat\fP(3) Added in POSIX.1-2008 TC2
-\fBstrchr\fP(3) Added in POSIX.1-2008 TC2
-\fBstrcmp\fP(3) Added in POSIX.1-2008 TC2
-\fBstrcpy\fP(3) Added in POSIX.1-2008 TC2
-\fBstrcspn\fP(3) Added in POSIX.1-2008 TC2
-\fBstrlen\fP(3) Added in POSIX.1-2008 TC2
-\fBstrncat\fP(3) Added in POSIX.1-2008 TC2
-\fBstrncmp\fP(3) Added in POSIX.1-2008 TC2
-\fBstrncpy\fP(3) Added in POSIX.1-2008 TC2
-\fBstrnlen\fP(3) Added in POSIX.1-2008 TC2
-\fBstrpbrk\fP(3) Added in POSIX.1-2008 TC2
-\fBstrrchr\fP(3) Added in POSIX.1-2008 TC2
-\fBstrspn\fP(3) Added in POSIX.1-2008 TC2
-\fBstrstr\fP(3) Added in POSIX.1-2008 TC2
-\fBstrtok_r\fP(3) Added in POSIX.1-2008 TC2
-\fBsymlink\fP(2)
-\fBsymlinkat\fP(2) Added in POSIX.1-2008
-\fBtcdrain\fP(3)
-\fBtcflow\fP(3)
-\fBtcflush\fP(3)
-\fBtcgetattr\fP(3)
-\fBtcgetpgrp\fP(3)
-\fBtcsendbreak\fP(3)
-\fBtcsetattr\fP(3)
-\fBtcsetpgrp\fP(3)
-\fBtime\fP(2)
-\fBtimer_getoverrun\fP(2)
-\fBtimer_gettime\fP(2)
-\fBtimer_settime\fP(2)
-\fBtimes\fP(2)
-\fBumask\fP(2)
-\fBuname\fP(2)
-\fBunlink\fP(2)
-\fBunlinkat\fP(2) Added in POSIX.1-2008
-\fButime\fP(2)
-\fButimensat\fP(2) Added in POSIX.1-2008
-\fButimes\fP(2) Added in POSIX.1-2008
-\fBwait\fP(2)
-\fBwaitpid\fP(2)
-\fBwcpcpy\fP(3) Added in POSIX.1-2008 TC2
-\fBwcpncpy\fP(3) Added in POSIX.1-2008 TC2
-\fBwcscat\fP(3) Added in POSIX.1-2008 TC2
-\fBwcschr\fP(3) Added in POSIX.1-2008 TC2
-\fBwcscmp\fP(3) Added in POSIX.1-2008 TC2
-\fBwcscpy\fP(3) Added in POSIX.1-2008 TC2
-\fBwcscspn\fP(3) Added in POSIX.1-2008 TC2
-\fBwcslen\fP(3) Added in POSIX.1-2008 TC2
-\fBwcsncat\fP(3) Added in POSIX.1-2008 TC2
-\fBwcsncmp\fP(3) Added in POSIX.1-2008 TC2
-\fBwcsncpy\fP(3) Added in POSIX.1-2008 TC2
-\fBwcsnlen\fP(3) Added in POSIX.1-2008 TC2
-\fBwcspbrk\fP(3) Added in POSIX.1-2008 TC2
-\fBwcsrchr\fP(3) Added in POSIX.1-2008 TC2
-\fBwcsspn\fP(3) Added in POSIX.1-2008 TC2
-\fBwcsstr\fP(3) Added in POSIX.1-2008 TC2
-\fBwcstok\fP(3) Added in POSIX.1-2008 TC2
-\fBwmemchr\fP(3) Added in POSIX.1-2008 TC2
-\fBwmemcmp\fP(3) Added in POSIX.1-2008 TC2
-\fBwmemcpy\fP(3) Added in POSIX.1-2008 TC2
-\fBwmemmove\fP(3) Added in POSIX.1-2008 TC2
-\fBwmemset\fP(3) Added in POSIX.1-2008 TC2
-\fBwrite\fP(2)
-.TE
-.PP
-Notes:
-.IP \[bu] 3
-POSIX.1-2001 and POSIX.1-2001 TC2 required the functions
-.BR fpathconf (3),
-.BR pathconf (3),
-and
-.BR sysconf (3)
-to be async-signal-safe, but this requirement was removed in POSIX.1-2008.
-.IP \[bu]
-If a signal handler interrupts the execution of an unsafe function,
-and the handler terminates via a call to
-.BR longjmp (3)
-or
-.BR siglongjmp (3)
-and the program subsequently calls an unsafe function,
-then the behavior of the program is undefined.
-.IP \[bu]
-POSIX.1-2001 TC1 clarified
-that if an application calls
-.BR fork (2)
-from a signal handler and any of the fork handlers registered by
-.BR pthread_atfork (3)
-calls a function that is not async-signal-safe, the behavior is undefined.
-A future revision of the standard
-.\" http://www.opengroup.org/austin/aardvark/latest/xshbug3.txt
-is likely to remove
-.BR fork (2)
-from the list of async-signal-safe functions.
-.\"
-.IP \[bu]
-Asynchronous signal handlers that call functions which are cancelation
-points and nest over regions of deferred cancelation may trigger
-cancelation whose behavior is as if asynchronous cancelation had
-occurred and may cause application state to become inconsistent.
-.\"
-.SS errno
-Fetching and setting the value of
-.I errno
-is async-signal-safe provided that the signal handler saves
-.I errno
-on entry and restores its value before returning.
-.\"
-.SS Deviations in the GNU C library
-The following known deviations from the standard occur in
-the GNU C library:
-.IP \[bu] 3
-Before glibc 2.24,
-.BR execl (3)
-and
-.BR execle (3)
-employed
-.BR realloc (3)
-internally and were consequently not async-signal-safe.
-.\" https://sourceware.org/bugzilla/show_bug.cgi?id=19534
-This was fixed in glibc 2.24.
-.IP \[bu]
-.\" FIXME . https://sourceware.org/bugzilla/show_bug.cgi?id=13172
-The glibc implementation of
-.BR aio_suspend (3)
-is not async-signal-safe because it uses
-.BR pthread_mutex_lock (3)
-internally.
-.SH SEE ALSO
-.BR sigaction (2),
-.BR signal (7),
-.BR standards (7)
diff --git a/man7/signal.7 b/man7/signal.7
deleted file mode 100644
index bd2aa8bff..000000000
--- a/man7/signal.7
+++ /dev/null
@@ -1,1019 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\" and Copyright (c) 2002, 2006, 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
-.\" <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 17:34:08 1993 by Rik Faith (faith@cs.unc.edu)
-.\" Modified Sun Jan 7 01:41:27 1996 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified Sun Apr 14 12:02:29 1996 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified Sat Nov 13 16:28:23 1999 by Andries Brouwer (aeb@cwi.nl)
-.\" Modified 10 Apr 2002, by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Modified 7 Jun 2002, by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added information on real-time signals
-.\" Modified 13 Jun 2002, by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Noted that SIGSTKFLT is in fact unused
-.\" 2004-12-03, Modified mtk, added notes on RLIMIT_SIGPENDING
-.\" 2006-04-24, mtk, Added text on changing signal dispositions,
-.\" signal mask, and pending signals.
-.\" 2008-07-04, mtk:
-.\" Added section on system call restarting (SA_RESTART)
-.\" Added section on stop/cont signals interrupting syscalls.
-.\" 2008-10-05, mtk: various additions
-.\"
-.TH signal 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-signal \- overview of signals
-.SH DESCRIPTION
-Linux supports both POSIX reliable signals (hereinafter
-"standard signals") and POSIX real-time signals.
-.SS Signal dispositions
-Each signal has a current
-.IR disposition ,
-which determines how the process behaves when it is delivered
-the signal.
-.PP
-The entries in the "Action" column of the table below specify
-the default disposition for each signal, as follows:
-.TP
-Term
-Default action is to terminate the process.
-.TP
-Ign
-Default action is to ignore the signal.
-.TP
-Core
-Default action is to terminate the process and dump core (see
-.BR core (5)).
-.TP
-Stop
-Default action is to stop the process.
-.TP
-Cont
-Default action is to continue the process if it is currently stopped.
-.PP
-A process can change the disposition of a signal using
-.BR sigaction (2)
-or
-.BR signal (2).
-(The latter is less portable when establishing a signal handler;
-see
-.BR signal (2)
-for details.)
-Using these system calls, a process can elect one of the
-following behaviors to occur on delivery of the signal:
-perform the default action; ignore the signal;
-or catch the signal with a
-.IR "signal handler" ,
-a programmer-defined function that is automatically invoked
-when the signal is delivered.
-.PP
-By default, a signal handler is invoked on the
-normal process stack.
-It is possible to arrange that the signal handler
-uses an alternate stack; see
-.BR sigaltstack (2)
-for a discussion of how to do this and when it might be useful.
-.PP
-The signal disposition is a per-process attribute:
-in a multithreaded application, the disposition of a
-particular signal is the same for all threads.
-.PP
-A child created via
-.BR fork (2)
-inherits a copy of its parent's signal dispositions.
-During an
-.BR execve (2),
-the dispositions of handled signals are reset to the default;
-the dispositions of ignored signals are left unchanged.
-.SS Sending a signal
-The following system calls and library functions allow
-the caller to send a signal:
-.TP
-.BR raise (3)
-Sends a signal to the calling thread.
-.TP
-.BR kill (2)
-Sends a signal to a specified process,
-to all members of a specified process group,
-or to all processes on the system.
-.TP
-.BR pidfd_send_signal (2)
-Sends a signal to a process identified by a PID file descriptor.
-.TP
-.BR killpg (3)
-Sends a signal to all of the members of a specified process group.
-.TP
-.BR pthread_kill (3)
-Sends a signal to a specified POSIX thread in the same process as
-the caller.
-.TP
-.BR tgkill (2)
-Sends a signal to a specified thread within a specific process.
-(This is the system call used to implement
-.BR pthread_kill (3).)
-.TP
-.BR sigqueue (3)
-Sends a real-time signal with accompanying data to a specified process.
-.SS Waiting for a signal to be caught
-The following system calls suspend execution of the calling
-thread until a signal is caught
-(or an unhandled signal terminates the process):
-.TP
-.BR pause (2)
-Suspends execution until any signal is caught.
-.TP
-.BR sigsuspend (2)
-Temporarily changes the signal mask (see below) and suspends
-execution until one of the unmasked signals is caught.
-.\"
-.SS Synchronously accepting a signal
-Rather than asynchronously catching a signal via a signal handler,
-it is possible to synchronously accept the signal, that is,
-to block execution until the signal is delivered,
-at which point the kernel returns information about the
-signal to the caller.
-There are two general ways to do this:
-.IP \[bu] 3
-.BR sigwaitinfo (2),
-.BR sigtimedwait (2),
-and
-.BR sigwait (3)
-suspend execution until one of the signals in a specified
-set is delivered.
-Each of these calls returns information about the delivered signal.
-.IP \[bu]
-.BR signalfd (2)
-returns a file descriptor that can be used to read information
-about signals that are delivered to the caller.
-Each
-.BR read (2)
-from this file descriptor blocks until one of the signals
-in the set specified in the
-.BR signalfd (2)
-call is delivered to the caller.
-The buffer returned by
-.BR read (2)
-contains a structure describing the signal.
-.SS Signal mask and pending signals
-A signal may be
-.IR blocked ,
-which means that it will not be delivered until it is later unblocked.
-Between the time when it is generated and when it is delivered
-a signal is said to be
-.IR pending .
-.PP
-Each thread in a process has an independent
-.IR "signal mask" ,
-which indicates the set of signals that the thread is currently blocking.
-A thread can manipulate its signal mask using
-.BR pthread_sigmask (3).
-In a traditional single-threaded application,
-.BR sigprocmask (2)
-can be used to manipulate the signal mask.
-.PP
-A child created via
-.BR fork (2)
-inherits a copy of its parent's signal mask;
-the signal mask is preserved across
-.BR execve (2).
-.PP
-A signal may be process-directed or thread-directed.
-A process-directed signal is one that is targeted at (and thus pending for)
-the process as a whole.
-A signal may be process-directed
-because it was generated by the kernel for reasons
-other than a hardware exception, or because it was sent using
-.BR kill (2)
-or
-.BR sigqueue (3).
-A thread-directed signal is one that is targeted at a specific thread.
-A signal may be thread-directed because it was generated as a consequence
-of executing a specific machine-language instruction
-that triggered a hardware exception (e.g.,
-.B SIGSEGV
-for an invalid memory access, or
-.B SIGFPE
-for a math error), or because it was
-targeted at a specific thread using
-interfaces such as
-.BR tgkill (2)
-or
-.BR pthread_kill (3).
-.PP
-A process-directed signal may be delivered to any one of the
-threads that does not currently have the signal blocked.
-.\" Joseph C. Sible notes:
-.\" On Linux, if the main thread has the signal unblocked, then the kernel
-.\" will always deliver the signal there, citing this kernel code
-.\"
-.\" Per this comment in kernel/signal.c since time immemorial:
-.\"
-.\" /*
-.\" * Now find a thread we can wake up to take the signal off the queue.
-.\" *
-.\" * If the main thread wants the signal, it gets first crack.
-.\" * Probably the least surprising to the average bear.
-.\" */
-.\"
-.\" But this does not mean the signal will be delivered only in the
-.\" main thread, since if a handler is already executing in the main thread
-.\" (and thus the signal is blocked in that thread), then a further
-.\" might be delivered in a different thread.
-.\"
-If more than one of the threads has the signal unblocked, then the
-kernel chooses an arbitrary thread to which to deliver the signal.
-.PP
-A thread can obtain the set of signals that it currently has pending
-using
-.BR sigpending (2).
-This set will consist of the union of the set of pending
-process-directed signals and the set of signals pending for
-the calling thread.
-.PP
-A child created via
-.BR fork (2)
-initially has an empty pending signal set;
-the pending signal set is preserved across an
-.BR execve (2).
-.\"
-.SS Execution of signal handlers
-Whenever there is a transition from kernel-mode to user-mode execution
-(e.g., on return from a system call or scheduling of a thread onto the CPU),
-the kernel checks whether there is a pending unblocked signal
-for which the process has established a signal handler.
-If there is such a pending signal, the following steps occur:
-.IP (1) 5
-The kernel performs the necessary preparatory steps for execution of
-the signal handler:
-.RS
-.IP (1.1) 7
-The signal is removed from the set of pending signals.
-.IP (1.2)
-If the signal handler was installed by a call to
-.BR sigaction (2)
-that specified the
-.B SA_ONSTACK
-flag and the thread has defined an alternate signal stack (using
-.BR sigaltstack (2)),
-then that stack is installed.
-.IP (1.3)
-Various pieces of signal-related context are saved
-into a special frame that is created on the stack.
-The saved information includes:
-.RS
-.IP \[bu] 3
-the program counter register
-(i.e., the address of the next instruction in the main program that
-should be executed when the signal handler returns);
-.IP \[bu]
-architecture-specific register state required for resuming the
-interrupted program;
-.IP \[bu]
-the thread's current signal mask;
-.IP \[bu]
-the thread's alternate signal stack settings.
-.RE
-.IP
-(If the signal handler was installed using the
-.BR sigaction (2)
-.B SA_SIGINFO
-flag, then the above information is accessible via the
-.I ucontext_t
-object that is pointed to by the third argument of the signal handler.)
-.IP (1.4)
-Any signals specified in
-.I act\->sa_mask
-when registering the handler with
-.BR sigprocmask (2)
-are added to the thread's signal mask.
-The signal being delivered is also
-added to the signal mask, unless
-.B SA_NODEFER
-was specified when registering the handler.
-These signals are thus blocked while the handler executes.
-.RE
-.IP (2)
-The kernel constructs a frame for the signal handler on the stack.
-The kernel sets the program counter for the thread to point to the first
-instruction of the signal handler function,
-and configures the return address for that function to point to a piece
-of user-space code known as the signal trampoline (described in
-.BR sigreturn (2)).
-.IP (3)
-The kernel passes control back to user-space, where execution
-commences at the start of the signal handler function.
-.IP (4)
-When the signal handler returns, control passes to the signal trampoline code.
-.IP (5)
-The signal trampoline calls
-.BR sigreturn (2),
-a system call that uses the information in the stack frame created in step 1
-to restore the thread to its state before the signal handler was
-called.
-The thread's signal mask and alternate signal stack settings
-are restored as part of this procedure.
-Upon completion of the call to
-.BR sigreturn (2),
-the kernel transfers control back to user space,
-and the thread recommences execution at the point where it was
-interrupted by the signal handler.
-.PP
-Note that if the signal handler does not return
-(e.g., control is transferred out of the handler using
-.BR siglongjmp (3),
-or the handler executes a new program with
-.BR execve (2)),
-then the final step is not performed.
-In particular, in such scenarios it is the programmer's responsibility
-to restore the state of the signal mask (using
-.BR sigprocmask (2)),
-if it is desired to unblock the signals that were blocked on entry
-to the signal handler.
-(Note that
-.BR siglongjmp (3)
-may or may not restore the signal mask, depending on the
-.I savesigs
-value that was specified in the corresponding call to
-.BR sigsetjmp (3).)
-.PP
-From the kernel's point of view,
-execution of the signal handler code is exactly the same as the execution
-of any other user-space code.
-That is to say, the kernel does not record any special state information
-indicating that the thread is currently executing inside a signal handler.
-All necessary state information is maintained in user-space registers
-and the user-space stack.
-The depth to which nested signal handlers may be invoked is thus
-limited only by the user-space stack (and sensible software design!).
-.\"
-.SS Standard signals
-Linux supports the standard signals listed below.
-The second column of the table indicates which standard (if any)
-specified the signal: "P1990" indicates that the signal is described
-in the original POSIX.1-1990 standard;
-"P2001" indicates that the signal was added in SUSv2 and POSIX.1-2001.
-.TS
-l c c l
-____
-lB c c l.
-Signal Standard Action Comment
-SIGABRT P1990 Core Abort signal from \fBabort\fP(3)
-SIGALRM P1990 Term Timer signal from \fBalarm\fP(2)
-SIGBUS P2001 Core Bus error (bad memory access)
-SIGCHLD P1990 Ign Child stopped or terminated
-SIGCLD \- Ign A synonym for \fBSIGCHLD\fP
-SIGCONT P1990 Cont Continue if stopped
-SIGEMT \- Term Emulator trap
-SIGFPE P1990 Core Floating-point exception
-SIGHUP P1990 Term Hangup detected on controlling terminal
- or death of controlling process
-SIGILL P1990 Core Illegal Instruction
-SIGINFO \- A synonym for \fBSIGPWR\fP
-SIGINT P1990 Term Interrupt from keyboard
-SIGIO \- Term I/O now possible (4.2BSD)
-SIGIOT \- Core IOT trap. A synonym for \fBSIGABRT\fP
-SIGKILL P1990 Term Kill signal
-SIGLOST \- Term File lock lost (unused)
-SIGPIPE P1990 Term Broken pipe: write to pipe with no
- readers; see \fBpipe\fP(7)
-SIGPOLL P2001 Term Pollable event (Sys V);
- synonym for \fBSIGIO\fP
-SIGPROF P2001 Term Profiling timer expired
-SIGPWR \- Term Power failure (System V)
-SIGQUIT P1990 Core Quit from keyboard
-SIGSEGV P1990 Core Invalid memory reference
-SIGSTKFLT \- Term Stack fault on coprocessor (unused)
-SIGSTOP P1990 Stop Stop process
-SIGTSTP P1990 Stop Stop typed at terminal
-SIGSYS P2001 Core Bad system call (SVr4);
- see also \fBseccomp\fP(2)
-SIGTERM P1990 Term Termination signal
-SIGTRAP P2001 Core Trace/breakpoint trap
-SIGTTIN P1990 Stop Terminal input for background process
-SIGTTOU P1990 Stop Terminal output for background process
-SIGUNUSED \- Core Synonymous with \fBSIGSYS\fP
-SIGURG P2001 Ign Urgent condition on socket (4.2BSD)
-SIGUSR1 P1990 Term User-defined signal 1
-SIGUSR2 P1990 Term User-defined signal 2
-SIGVTALRM P2001 Term Virtual alarm clock (4.2BSD)
-SIGXCPU P2001 Core CPU time limit exceeded (4.2BSD);
- see \fBsetrlimit\fP(2)
-SIGXFSZ P2001 Core File size limit exceeded (4.2BSD);
- see \fBsetrlimit\fP(2)
-SIGWINCH \- Ign Window resize signal (4.3BSD, Sun)
-.TE
-.PP
-The signals
-.B SIGKILL
-and
-.B SIGSTOP
-cannot be caught, blocked, or ignored.
-.PP
-Up to and including Linux 2.2, the default behavior for
-.BR SIGSYS ", " SIGXCPU ", " SIGXFSZ ,
-and (on architectures other than SPARC and MIPS)
-.B SIGBUS
-was to terminate the process (without a core dump).
-(On some other UNIX systems the default action for
-.BR SIGXCPU " and " SIGXFSZ
-is to terminate the process without a core dump.)
-Linux 2.4 conforms to the POSIX.1-2001 requirements for these signals,
-terminating the process with a core dump.
-.PP
-.B SIGEMT
-is not specified in POSIX.1-2001, but nevertheless appears
-on most other UNIX systems,
-where its default action is typically to terminate
-the process with a core dump.
-.PP
-.B SIGPWR
-(which is not specified in POSIX.1-2001) is typically ignored
-by default on those other UNIX systems where it appears.
-.PP
-.B SIGIO
-(which is not specified in POSIX.1-2001) is ignored by default
-on several other UNIX systems.
-.\"
-.SS Queueing and delivery semantics for standard signals
-If multiple standard signals are pending for a process,
-the order in which the signals are delivered is unspecified.
-.PP
-Standard signals do not queue.
-If multiple instances of a standard signal are generated while
-that signal is blocked,
-then only one instance of the signal is marked as pending
-(and the signal will be delivered just once when it is unblocked).
-In the case where a standard signal is already pending, the
-.I siginfo_t
-structure (see
-.BR sigaction (2))
-associated with that signal is not overwritten
-on arrival of subsequent instances of the same signal.
-Thus, the process will receive the information
-associated with the first instance of the signal.
-.\"
-.SS Signal numbering for standard signals
-The numeric value for each signal is given in the table below.
-As shown in the table, many signals have different numeric values
-on different architectures.
-The first numeric value in each table row shows the signal number
-on x86, ARM, and most other architectures;
-the second value is for Alpha and SPARC; the third is for MIPS;
-and the last is for PARISC.
-A dash (\-) denotes that a signal is absent on the corresponding architecture.
-.TS
-l c c c c l
-l c c c c l
-______
-lB c c c c l.
-Signal x86/ARM Alpha/ MIPS PARISC Notes
- most others SPARC
-SIGHUP \01 \01 \01 \01
-SIGINT \02 \02 \02 \02
-SIGQUIT \03 \03 \03 \03
-SIGILL \04 \04 \04 \04
-SIGTRAP \05 \05 \05 \05
-SIGABRT \06 \06 \06 \06
-SIGIOT \06 \06 \06 \06
-SIGBUS \07 10 10 10
-SIGEMT \- \07 \07 -
-SIGFPE \08 \08 \08 \08
-SIGKILL \09 \09 \09 \09
-SIGUSR1 10 30 16 16
-SIGSEGV 11 11 11 11
-SIGUSR2 12 31 17 17
-SIGPIPE 13 13 13 13
-SIGALRM 14 14 14 14
-SIGTERM 15 15 15 15
-SIGSTKFLT 16 \- \- \07
-SIGCHLD 17 20 18 18
-SIGCLD \- \- 18 \-
-SIGCONT 18 19 25 26
-SIGSTOP 19 17 23 24
-SIGTSTP 20 18 24 25
-SIGTTIN 21 21 26 27
-SIGTTOU 22 22 27 28
-SIGURG 23 16 21 29
-SIGXCPU 24 24 30 12
-SIGXFSZ 25 25 31 30
-SIGVTALRM 26 26 28 20
-SIGPROF 27 27 29 21
-SIGWINCH 28 28 20 23
-SIGIO 29 23 22 22
-SIGPOLL Same as SIGIO
-SIGPWR 30 29/\- 19 19
-SIGINFO \- 29/\- \- \-
-SIGLOST \- \-/29 \- \-
-SIGSYS 31 12 12 31
-SIGUNUSED 31 \- \- 31
-.TE
-.PP
-Note the following:
-.IP \[bu] 3
-Where defined,
-.B SIGUNUSED
-is synonymous with
-.BR SIGSYS .
-Since glibc 2.26,
-.B SIGUNUSED
-is no longer defined on any architecture.
-.IP \[bu]
-Signal 29 is
-.BR SIGINFO / SIGPWR
-(synonyms for the same value) on Alpha but
-.B SIGLOST
-on SPARC.
-.\"
-.SS Real-time signals
-Starting with Linux 2.2,
-Linux supports real-time signals as originally defined in the POSIX.1b
-real-time extensions (and now included in POSIX.1-2001).
-The range of supported real-time signals is defined by the macros
-.B SIGRTMIN
-and
-.BR SIGRTMAX .
-POSIX.1-2001 requires that an implementation support at least
-.B _POSIX_RTSIG_MAX
-(8) real-time signals.
-.PP
-The Linux kernel supports a range of 33 different real-time
-signals, numbered 32 to 64.
-However, the glibc POSIX threads implementation internally uses
-two (for NPTL) or three (for LinuxThreads) real-time signals
-(see
-.BR pthreads (7)),
-and adjusts the value of
-.B SIGRTMIN
-suitably (to 34 or 35).
-Because the range of available real-time signals varies according
-to the glibc threading implementation (and this variation can occur
-at run time according to the available kernel and glibc),
-and indeed the range of real-time signals varies across UNIX systems,
-programs should
-.IR "never refer to real-time signals using hard-coded numbers" ,
-but instead should always refer to real-time signals using the notation
-.BR SIGRTMIN +n,
-and include suitable (run-time) checks that
-.BR SIGRTMIN +n
-does not exceed
-.BR SIGRTMAX .
-.PP
-Unlike standard signals, real-time signals have no predefined meanings:
-the entire set of real-time signals can be used for application-defined
-purposes.
-.PP
-The default action for an unhandled real-time signal is to terminate the
-receiving process.
-.PP
-Real-time signals are distinguished by the following:
-.IP \[bu] 3
-Multiple instances of real-time signals can be queued.
-By contrast, if multiple instances of a standard signal are delivered
-while that signal is currently blocked, then only one instance is queued.
-.IP \[bu]
-If the signal is sent using
-.BR sigqueue (3),
-an accompanying value (either an integer or a pointer) can be sent
-with the signal.
-If the receiving process establishes a handler for this signal using the
-.B SA_SIGINFO
-flag to
-.BR sigaction (2),
-then it can obtain this data via the
-.I si_value
-field of the
-.I siginfo_t
-structure passed as the second argument to the handler.
-Furthermore, the
-.I si_pid
-and
-.I si_uid
-fields of this structure can be used to obtain the PID
-and real user ID of the process sending the signal.
-.IP \[bu]
-Real-time signals are delivered in a guaranteed order.
-Multiple real-time signals of the same type are delivered in the order
-they were sent.
-If different real-time signals are sent to a process, they are delivered
-starting with the lowest-numbered signal.
-(I.e., low-numbered signals have highest priority.)
-By contrast, if multiple standard signals are pending for a process,
-the order in which they are delivered is unspecified.
-.PP
-If both standard and real-time signals are pending for a process,
-POSIX leaves it unspecified which is delivered first.
-Linux, like many other implementations, gives priority
-to standard signals in this case.
-.PP
-According to POSIX, an implementation should permit at least
-.B _POSIX_SIGQUEUE_MAX
-(32) real-time signals to be queued to
-a process.
-However, Linux does things differently.
-Up to and including Linux 2.6.7, Linux imposes
-a system-wide limit on the number of queued real-time signals
-for all processes.
-This limit can be viewed and (with privilege) changed via the
-.I /proc/sys/kernel/rtsig\-max
-file.
-A related file,
-.IR /proc/sys/kernel/rtsig\-nr ,
-can be used to find out how many real-time signals are currently queued.
-In Linux 2.6.8, these
-.I /proc
-interfaces were replaced by the
-.B RLIMIT_SIGPENDING
-resource limit, which specifies a per-user limit for queued
-signals; see
-.BR setrlimit (2)
-for further details.
-.PP
-The addition of real-time signals required the widening
-of the signal set structure
-.RI ( sigset_t )
-from 32 to 64 bits.
-Consequently, various system calls were superseded by new system calls
-that supported the larger signal sets.
-The old and new system calls are as follows:
-.TS
-lb lb
-l l.
-Linux 2.0 and earlier Linux 2.2 and later
-\fBsigaction\fP(2) \fBrt_sigaction\fP(2)
-\fBsigpending\fP(2) \fBrt_sigpending\fP(2)
-\fBsigprocmask\fP(2) \fBrt_sigprocmask\fP(2)
-\fBsigreturn\fP(2) \fBrt_sigreturn\fP(2)
-\fBsigsuspend\fP(2) \fBrt_sigsuspend\fP(2)
-\fBsigtimedwait\fP(2) \fBrt_sigtimedwait\fP(2)
-.TE
-.\"
-.SS Interruption of system calls and library functions by signal handlers
-If a signal handler is invoked while a system call or library
-function call is blocked, then either:
-.IP \[bu] 3
-the call is automatically restarted after the signal handler returns; or
-.IP \[bu]
-the call fails with the error
-.BR EINTR .
-.PP
-Which of these two behaviors occurs depends on the interface and
-whether or not the signal handler was established using the
-.B SA_RESTART
-flag (see
-.BR sigaction (2)).
-The details vary across UNIX systems;
-below, the details for Linux.
-.PP
-If a blocked call to one of the following interfaces is interrupted
-by a signal handler, then the call is automatically restarted
-after the signal handler returns if the
-.B SA_RESTART
-flag was used; otherwise the call fails with the error
-.BR EINTR :
-.\" The following system calls use ERESTARTSYS,
-.\" so that they are restartable
-.IP \[bu] 3
-.BR read (2),
-.BR readv (2),
-.BR write (2),
-.BR writev (2),
-and
-.BR ioctl (2)
-calls on "slow" devices.
-A "slow" device is one where the I/O call may block for an
-indefinite time, for example, a terminal, pipe, or socket.
-If an I/O call on a slow device has already transferred some
-data by the time it is interrupted by a signal handler,
-then the call will return a success status
-(normally, the number of bytes transferred).
-Note that a (local) disk is not a slow device according to this definition;
-I/O operations on disk devices are not interrupted by signals.
-.IP \[bu]
-.BR open (2),
-if it can block (e.g., when opening a FIFO; see
-.BR fifo (7)).
-.IP \[bu]
-.BR wait (2),
-.BR wait3 (2),
-.BR wait4 (2),
-.BR waitid (2),
-and
-.BR waitpid (2).
-.IP \[bu]
-Socket interfaces:
-.\" If a timeout (setsockopt()) is in effect on the socket, then these
-.\" system calls switch to using EINTR. Consequently, they and are not
-.\" automatically restarted, and they show the stop/cont behavior
-.\" described below. (Verified from Linux 2.6.26 source, and by experiment; mtk)
-.BR accept (2),
-.BR connect (2),
-.BR recv (2),
-.BR recvfrom (2),
-.BR recvmmsg (2),
-.BR recvmsg (2),
-.BR send (2),
-.BR sendto (2),
-and
-.BR sendmsg (2),
-.\" FIXME What about sendmmsg()?
-unless a timeout has been set on the socket (see below).
-.IP \[bu]
-File locking interfaces:
-.BR flock (2)
-and
-the
-.B F_SETLKW
-and
-.B F_OFD_SETLKW
-operations of
-.BR fcntl (2)
-.IP \[bu]
-POSIX message queue interfaces:
-.BR mq_receive (3),
-.BR mq_timedreceive (3),
-.BR mq_send (3),
-and
-.BR mq_timedsend (3).
-.IP \[bu]
-.BR futex (2)
-.B FUTEX_WAIT
-(since Linux 2.6.22;
-.\" commit 72c1bbf308c75a136803d2d76d0e18258be14c7a
-beforehand, always failed with
-.BR EINTR ).
-.IP \[bu]
-.BR getrandom (2).
-.IP \[bu]
-.BR pthread_mutex_lock (3),
-.BR pthread_cond_wait (3),
-and related APIs.
-.IP \[bu]
-.BR futex (2)
-.BR FUTEX_WAIT_BITSET .
-.IP \[bu]
-POSIX semaphore interfaces:
-.BR sem_wait (3)
-and
-.BR sem_timedwait (3)
-(since Linux 2.6.22;
-.\" as a consequence of the 2.6.22 changes in the futex() implementation
-beforehand, always failed with
-.BR EINTR ).
-.IP \[bu]
-.BR read (2)
-from an
-.BR inotify (7)
-file descriptor
-(since Linux 3.8;
-.\" commit 1ca39ab9d21ac93f94b9e3eb364ea9a5cf2aba06
-beforehand, always failed with
-.BR EINTR ).
-.PP
-The following interfaces are never restarted after
-being interrupted by a signal handler,
-regardless of the use of
-.BR SA_RESTART ;
-they always fail with the error
-.B EINTR
-when interrupted by a signal handler:
-.\" These are the system calls that give EINTR or ERESTARTNOHAND
-.\" on interruption by a signal handler.
-.IP \[bu] 3
-"Input" socket interfaces, when a timeout
-.RB ( SO_RCVTIMEO )
-has been set on the socket using
-.BR setsockopt (2):
-.BR accept (2),
-.BR recv (2),
-.BR recvfrom (2),
-.BR recvmmsg (2)
-(also with a non-NULL
-.I timeout
-argument),
-and
-.BR recvmsg (2).
-.IP \[bu]
-"Output" socket interfaces, when a timeout
-.RB ( SO_RCVTIMEO )
-has been set on the socket using
-.BR setsockopt (2):
-.BR connect (2),
-.BR send (2),
-.BR sendto (2),
-and
-.BR sendmsg (2).
-.\" FIXME What about sendmmsg()?
-.IP \[bu]
-Interfaces used to wait for signals:
-.BR pause (2),
-.BR sigsuspend (2),
-.BR sigtimedwait (2),
-and
-.BR sigwaitinfo (2).
-.IP \[bu]
-File descriptor multiplexing interfaces:
-.BR epoll_wait (2),
-.BR epoll_pwait (2),
-.BR poll (2),
-.BR ppoll (2),
-.BR select (2),
-and
-.BR pselect (2).
-.IP \[bu]
-System V IPC interfaces:
-.\" On some other systems, SA_RESTART does restart these system calls
-.BR msgrcv (2),
-.BR msgsnd (2),
-.BR semop (2),
-and
-.BR semtimedop (2).
-.IP \[bu]
-Sleep interfaces:
-.BR clock_nanosleep (2),
-.BR nanosleep (2),
-and
-.BR usleep (3).
-.IP \[bu]
-.BR io_getevents (2).
-.PP
-The
-.BR sleep (3)
-function is also never restarted if interrupted by a handler,
-but gives a success return: the number of seconds remaining to sleep.
-.PP
-In certain circumstances, the
-.BR seccomp (2)
-user-space notification feature can lead to restarting of system calls
-that would otherwise never be restarted by
-.BR SA_RESTART ;
-for details, see
-.BR seccomp_unotify (2).
-.\"
-.SS Interruption of system calls and library functions by stop signals
-On Linux, even in the absence of signal handlers,
-certain blocking interfaces can fail with the error
-.B EINTR
-after the process is stopped by one of the stop signals
-and then resumed via
-.BR SIGCONT .
-This behavior is not sanctioned by POSIX.1, and doesn't occur
-on other systems.
-.PP
-The Linux interfaces that display this behavior are:
-.IP \[bu] 3
-"Input" socket interfaces, when a timeout
-.RB ( SO_RCVTIMEO )
-has been set on the socket using
-.BR setsockopt (2):
-.BR accept (2),
-.BR recv (2),
-.BR recvfrom (2),
-.BR recvmmsg (2)
-(also with a non-NULL
-.I timeout
-argument),
-and
-.BR recvmsg (2).
-.IP \[bu]
-"Output" socket interfaces, when a timeout
-.RB ( SO_RCVTIMEO )
-has been set on the socket using
-.BR setsockopt (2):
-.BR connect (2),
-.BR send (2),
-.BR sendto (2),
-and
-.\" FIXME What about sendmmsg()?
-.BR sendmsg (2),
-if a send timeout
-.RB ( SO_SNDTIMEO )
-has been set.
-.IP \[bu]
-.BR epoll_wait (2),
-.BR epoll_pwait (2).
-.IP \[bu]
-.BR semop (2),
-.BR semtimedop (2).
-.IP \[bu]
-.BR sigtimedwait (2),
-.BR sigwaitinfo (2).
-.IP \[bu]
-Linux 3.7 and earlier:
-.BR read (2)
-from an
-.BR inotify (7)
-file descriptor
-.\" commit 1ca39ab9d21ac93f94b9e3eb364ea9a5cf2aba06
-.IP \[bu]
-Linux 2.6.21 and earlier:
-.BR futex (2)
-.BR FUTEX_WAIT ,
-.BR sem_timedwait (3),
-.BR sem_wait (3).
-.IP \[bu]
-Linux 2.6.8 and earlier:
-.BR msgrcv (2),
-.BR msgsnd (2).
-.IP \[bu]
-Linux 2.4 and earlier:
-.BR nanosleep (2).
-.SH STANDARDS
-POSIX.1, except as noted.
-.SH NOTES
-For a discussion of async-signal-safe functions, see
-.BR signal\-safety (7).
-.PP
-The
-.IR /proc/ pid /task/ tid /status
-file contains various fields that show the signals
-that a thread is blocking
-.RI ( SigBlk ),
-catching
-.RI ( SigCgt ),
-or ignoring
-.RI ( SigIgn ).
-(The set of signals that are caught or ignored will be the same
-across all threads in a process.)
-Other fields show the set of pending signals that are directed to the thread
-.RI ( SigPnd )
-as well as the set of pending signals that are directed
-to the process as a whole
-.RI ( ShdPnd ).
-The corresponding fields in
-.IR /proc/ pid /status
-show the information for the main thread.
-See
-.BR proc (5)
-for further details.
-.SH BUGS
-There are six signals that can be delivered
-as a consequence of a hardware exception:
-.BR SIGBUS ,
-.BR SIGEMT ,
-.BR SIGFPE ,
-.BR SIGILL ,
-.BR SIGSEGV ,
-and
-.BR SIGTRAP .
-Which of these signals is delivered,
-for any given hardware exception,
-is not documented and does not always make sense.
-.PP
-For example, an invalid memory access that causes delivery of
-.B SIGSEGV
-on one CPU architecture may cause delivery of
-.B SIGBUS
-on another architecture, or vice versa.
-.PP
-For another example, using the x86
-.I int
-instruction with a forbidden argument
-(any number other than 3 or 128)
-causes delivery of
-.BR SIGSEGV ,
-even though
-.B SIGILL
-would make more sense,
-because of how the CPU reports the forbidden operation to the kernel.
-.SH SEE ALSO
-.BR kill (1),
-.BR clone (2),
-.BR getrlimit (2),
-.BR kill (2),
-.BR pidfd_send_signal (2),
-.BR restart_syscall (2),
-.BR rt_sigqueueinfo (2),
-.BR setitimer (2),
-.BR setrlimit (2),
-.BR sgetmask (2),
-.BR sigaction (2),
-.BR sigaltstack (2),
-.BR signal (2),
-.BR signalfd (2),
-.BR sigpending (2),
-.BR sigprocmask (2),
-.BR sigreturn (2),
-.BR sigsuspend (2),
-.BR sigwaitinfo (2),
-.BR abort (3),
-.BR bsd_signal (3),
-.BR killpg (3),
-.BR longjmp (3),
-.BR pthread_sigqueue (3),
-.BR raise (3),
-.BR sigqueue (3),
-.BR sigset (3),
-.BR sigsetops (3),
-.BR sigvec (3),
-.BR sigwait (3),
-.BR strsignal (3),
-.BR swapcontext (3),
-.BR sysv_signal (3),
-.BR core (5),
-.BR proc (5),
-.BR nptl (7),
-.BR pthreads (7),
-.BR sigevent (7)
diff --git a/man7/sock_diag.7 b/man7/sock_diag.7
deleted file mode 100644
index 8e1b260db..000000000
--- a/man7/sock_diag.7
+++ /dev/null
@@ -1,825 +0,0 @@
-.\" Copyright (c) 2016 Pavel Emelyanov <xemul@virtuozzo.com>
-.\" Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.TH sock_diag 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sock_diag \- obtaining information about sockets
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.B #include <linux/sock_diag.h>
-.BR "#include <linux/unix_diag.h>" " /* for UNIX domain sockets */"
-.BR "#include <linux/inet_diag.h>" " /* for IPv4 and IPv6 sockets */"
-.PP
-.BI "diag_socket = socket(AF_NETLINK, " socket_type ", NETLINK_SOCK_DIAG);"
-.fi
-.SH DESCRIPTION
-The sock_diag netlink subsystem provides a mechanism for obtaining
-information about sockets of various address families from the kernel.
-This subsystem can be used to obtain information about individual
-sockets or request a list of sockets.
-.PP
-In the request, the caller can specify additional information it would
-like to obtain about the socket, for example, memory information or
-information specific to the address family.
-.PP
-When requesting a list of sockets, the caller can specify filters that
-would be applied by the kernel to select a subset of sockets to report.
-For now, there is only the ability to filter sockets by state (connected,
-listening, and so on.)
-.PP
-Note that sock_diag reports only those sockets that have a name;
-that is, either sockets bound explicitly with
-.BR bind (2)
-or sockets that were automatically bound to an address (e.g., by
-.BR connect (2)).
-This is the same set of sockets that is available via
-.IR /proc/net/unix ,
-.IR /proc/net/tcp ,
-.IR /proc/net/udp ,
-and so on.
-.\"
-.SS Request
-The request starts with a
-.I "struct nlmsghdr"
-header described in
-.BR netlink (7)
-with
-.I nlmsg_type
-field set to
-.BR SOCK_DIAG_BY_FAMILY .
-It is followed by a header specific to the address family that starts with
-a common part shared by all address families:
-.PP
-.in +4n
-.EX
-struct sock_diag_req {
- __u8 sdiag_family;
- __u8 sdiag_protocol;
-};
-.EE
-.in
-.PP
-The fields of this structure are as follows:
-.TP
-.I sdiag_family
-An address family.
-It should be set to the appropriate
-.B AF_*
-constant.
-.TP
-.I sdiag_protocol
-Depends on
-.IR sdiag_family .
-It should be set to the appropriate
-.B IPPROTO_*
-constant for
-.B AF_INET
-and
-.BR AF_INET6 ,
-and to 0 otherwise.
-.PP
-If the
-.I nlmsg_flags
-field of the
-.I "struct nlmsghdr"
-header has the
-.B NLM_F_DUMP
-flag set, it means that a list of sockets is being requested;
-otherwise it is a query about an individual socket.
-.\"
-.SS Response
-The response starts with a
-.I "struct nlmsghdr"
-header and is followed by an array of objects specific to the address family.
-The array is to be accessed with the standard
-.B NLMSG_*
-macros from the
-.BR netlink (3)
-API.
-.PP
-Each object is the NLA (netlink attributes) list that is to be accessed
-with the
-.B RTA_*
-macros from
-.BR rtnetlink (3)
-API.
-.\"
-.SS UNIX domain sockets
-For UNIX domain sockets the request is represented in the following structure:
-.PP
-.in +4n
-.EX
-struct unix_diag_req {
- __u8 sdiag_family;
- __u8 sdiag_protocol;
- __u16 pad;
- __u32 udiag_states;
- __u32 udiag_ino;
- __u32 udiag_show;
- __u32 udiag_cookie[2];
-};
-.EE
-.in
-.PP
-The fields of this structure are as follows:
-.TP
-.I sdiag_family
-The address family; it should be set to
-.BR AF_UNIX .
-.PP
-.I sdiag_protocol
-.PD 0
-.TP
-.PD
-.I pad
-These fields should be set to 0.
-.TP
-.I udiag_states
-This is a bit mask that defines a filter of sockets states.
-Only those sockets whose states are in this mask will be reported.
-Ignored when querying for an individual socket.
-Supported values are:
-.PP
-.RS 12
-1 <<
-.B TCP_ESTABLISHED
-.PP
-1 <<
-.B TCP_LISTEN
-.RE
-.TP
-.I udiag_ino
-This is an inode number when querying for an individual socket.
-Ignored when querying for a list of sockets.
-.TP
-.I udiag_show
-This is a set of flags defining what kind of information to report.
-Each requested kind of information is reported back as a netlink
-attribute as described below:
-.RS
-.TP
-.B UDIAG_SHOW_NAME
-The attribute reported in answer to this request is
-.BR UNIX_DIAG_NAME .
-The payload associated with this attribute is the pathname to which
-the socket was bound (a sequence of bytes up to
-.B UNIX_PATH_MAX
-length).
-.TP
-.B UDIAG_SHOW_VFS
-The attribute reported in answer to this request is
-.BR UNIX_DIAG_VFS .
-The payload associated with this attribute is represented in the following
-structure:
-.IP
-.in +4n
-.EX
-struct unix_diag_vfs {
- __u32 udiag_vfs_dev;
- __u32 udiag_vfs_ino;
-};
-.EE
-.in
-.IP
-The fields of this structure are as follows:
-.RS
-.TP
-.I udiag_vfs_dev
-The device number of the corresponding on-disk socket inode.
-.TP
-.I udiag_vfs_ino
-The inode number of the corresponding on-disk socket inode.
-.RE
-.TP
-.B UDIAG_SHOW_PEER
-The attribute reported in answer to this request is
-.BR UNIX_DIAG_PEER .
-The payload associated with this attribute is a __u32 value
-which is the peer's inode number.
-This attribute is reported for connected sockets only.
-.TP
-.B UDIAG_SHOW_ICONS
-The attribute reported in answer to this request is
-.BR UNIX_DIAG_ICONS .
-The payload associated with this attribute is an array of __u32 values
-which are inode numbers of sockets that has passed the
-.BR connect (2)
-call, but hasn't been processed with
-.BR accept (2)
-yet.
-This attribute is reported for listening sockets only.
-.TP
-.B UDIAG_SHOW_RQLEN
-The attribute reported in answer to this request is
-.BR UNIX_DIAG_RQLEN .
-The payload associated with this attribute is represented in the following
-structure:
-.IP
-.in +4n
-.EX
-struct unix_diag_rqlen {
- __u32 udiag_rqueue;
- __u32 udiag_wqueue;
-};
-.EE
-.in
-.IP
-The fields of this structure are as follows:
-.RS
-.TP
-.I udiag_rqueue
-For listening sockets:
-the number of pending connections.
-The length of the array associated with the
-.B UNIX_DIAG_ICONS
-response attribute is equal to this value.
-.IP
-For established sockets:
-the amount of data in incoming queue.
-.TP
-.I udiag_wqueue
-For listening sockets:
-the backlog length which equals to the value passed as the second argument to
-.BR listen (2).
-.IP
-For established sockets:
-the amount of memory available for sending.
-.RE
-.TP
-.B UDIAG_SHOW_MEMINFO
-The attribute reported in answer to this request is
-.BR UNIX_DIAG_MEMINFO .
-The payload associated with this attribute is an array of __u32 values
-described below in the subsection "Socket memory information".
-.PP
-The following attributes are reported back without any specific request:
-.TP
-.B UNIX_DIAG_SHUTDOWN
-The payload associated with this attribute is __u8 value which represents
-bits of
-.BR shutdown (2)
-state.
-.RE
-.TP
-.I udiag_cookie
-This is an array of opaque identifiers that could be used along with
-.I udiag_ino
-to specify an individual socket.
-It is ignored when querying for a list
-of sockets, as well as when all its elements are set to \-1.
-.PP
-The response to a query for UNIX domain sockets is represented as an array of
-.PP
-.in +4n
-.EX
-struct unix_diag_msg {
- __u8 udiag_family;
- __u8 udiag_type;
- __u8 udiag_state;
- __u8 pad;
- __u32 udiag_ino;
- __u32 udiag_cookie[2];
-};
-.EE
-.in
-.PP
-followed by netlink attributes.
-.PP
-The fields of this structure are as follows:
-.TP
-.I udiag_family
-This field has the same meaning as in
-.IR "struct unix_diag_req" .
-.TP
-.I udiag_type
-This is set to one of
-.BR SOCK_PACKET ,
-.BR SOCK_STREAM ,
-or
-.BR SOCK_SEQPACKET .
-.TP
-.I udiag_state
-This is set to one of
-.B TCP_LISTEN
-or
-.BR TCP_ESTABLISHED .
-.TP
-.I pad
-This field is set to 0.
-.TP
-.I udiag_ino
-This is the socket inode number.
-.TP
-.I udiag_cookie
-This is an array of opaque identifiers that could be used in subsequent
-queries.
-.\"
-.SS IPv4 and IPv6 sockets
-For IPv4 and IPv6 sockets,
-the request is represented in the following structure:
-.PP
-.in +4n
-.EX
-struct inet_diag_req_v2 {
- __u8 sdiag_family;
- __u8 sdiag_protocol;
- __u8 idiag_ext;
- __u8 pad;
- __u32 idiag_states;
- struct inet_diag_sockid id;
-};
-.EE
-.in
-.PP
-where
-.I "struct inet_diag_sockid"
-is defined as follows:
-.PP
-.in +4n
-.EX
-struct inet_diag_sockid {
- __be16 idiag_sport;
- __be16 idiag_dport;
- __be32 idiag_src[4];
- __be32 idiag_dst[4];
- __u32 idiag_if;
- __u32 idiag_cookie[2];
-};
-.EE
-.in
-.PP
-The fields of
-.I "struct inet_diag_req_v2"
-are as follows:
-.TP
-.I sdiag_family
-This should be set to either
-.B AF_INET
-or
-.B AF_INET6
-for IPv4 or IPv6 sockets respectively.
-.TP
-.I sdiag_protocol
-This should be set to one of
-.BR IPPROTO_TCP ,
-.BR IPPROTO_UDP ,
-or
-.BR IPPROTO_UDPLITE .
-.TP
-.I idiag_ext
-This is a set of flags defining what kind of extended information to report.
-Each requested kind of information is reported back as a netlink attribute
-as described below:
-.RS
-.TP
-.B INET_DIAG_TOS
-The payload associated with this attribute is a __u8 value
-which is the TOS of the socket.
-.TP
-.B INET_DIAG_TCLASS
-The payload associated with this attribute is a __u8 value
-which is the TClass of the socket.
-IPv6 sockets only.
-For LISTEN and CLOSE sockets, this is followed by
-.B INET_DIAG_SKV6ONLY
-attribute with associated __u8 payload value meaning whether the socket
-is IPv6-only or not.
-.TP
-.B INET_DIAG_MEMINFO
-The payload associated with this attribute is represented in the following
-structure:
-.IP
-.in +4n
-.EX
-struct inet_diag_meminfo {
- __u32 idiag_rmem;
- __u32 idiag_wmem;
- __u32 idiag_fmem;
- __u32 idiag_tmem;
-};
-.EE
-.in
-.IP
-The fields of this structure are as follows:
-.RS
-.TP 12
-.I idiag_rmem
-The amount of data in the receive queue.
-.TP
-.I idiag_wmem
-The amount of data that is queued by TCP but not yet sent.
-.TP
-.I idiag_fmem
-The amount of memory scheduled for future use (TCP only).
-.TP
-.I idiag_tmem
-The amount of data in send queue.
-.RE
-.TP
-.B INET_DIAG_SKMEMINFO
-The payload associated with this attribute is an array of __u32 values
-described below in the subsection "Socket memory information".
-.TP
-.B INET_DIAG_INFO
-The payload associated with this attribute is specific to the address family.
-For TCP sockets, it is an object of type
-.IR "struct tcp_info" .
-.TP
-.B INET_DIAG_CONG
-The payload associated with this attribute is a string that describes the
-congestion control algorithm used.
-For TCP sockets only.
-.RE
-.TP
-.I pad
-This should be set to 0.
-.TP
-.I idiag_states
-This is a bit mask that defines a filter of socket states.
-Only those sockets whose states are in this mask will be reported.
-Ignored when querying for an individual socket.
-.TP
-.I id
-This is a socket ID object that is used in dump requests, in queries
-about individual sockets, and is reported back in each response.
-Unlike UNIX domain sockets, IPv4 and IPv6 sockets are identified
-using addresses and ports.
-All values are in network byte order.
-.PP
-The fields of
-.I "struct inet_diag_sockid"
-are as follows:
-.TP
-.I idiag_sport
-The source port.
-.TP
-.I idiag_dport
-The destination port.
-.TP
-.I idiag_src
-The source address.
-.TP
-.I idiag_dst
-The destination address.
-.TP
-.I idiag_if
-The interface number the socket is bound to.
-.TP
-.I idiag_cookie
-This is an array of opaque identifiers that could be used along with
-other fields of this structure to specify an individual socket.
-It is ignored when querying for a list of sockets, as well as
-when all its elements are set to \-1.
-.PP
-The response to a query for IPv4 or IPv6 sockets is represented as an array of
-.PP
-.in +4n
-.EX
-struct inet_diag_msg {
- __u8 idiag_family;
- __u8 idiag_state;
- __u8 idiag_timer;
- __u8 idiag_retrans;
-\&
- struct inet_diag_sockid id;
-\&
- __u32 idiag_expires;
- __u32 idiag_rqueue;
- __u32 idiag_wqueue;
- __u32 idiag_uid;
- __u32 idiag_inode;
-};
-.EE
-.in
-.PP
-followed by netlink attributes.
-.PP
-The fields of this structure are as follows:
-.TP
-.I idiag_family
-This is the same field as in
-.IR "struct inet_diag_req_v2" .
-.TP
-.I idiag_state
-This denotes socket state as in
-.IR "struct inet_diag_req_v2" .
-.TP
-.I idiag_timer
-For TCP sockets, this field describes the type of timer that is currently
-active for the socket.
-It is set to one of the following constants:
-.IP
-.PD 0
-.RS 12
-.TP
-.B 0
-no timer is active
-.TP
-.B 1
-a retransmit timer
-.TP
-.B 2
-a keep-alive timer
-.TP
-.B 3
-a TIME_WAIT timer
-.TP
-.B 4
-a zero window probe timer
-.RE
-.PD
-.IP
-For non-TCP sockets, this field is set to 0.
-.TP
-.I idiag_retrans
-For
-.I idiag_timer
-values 1, 2, and 4, this field contains the number of retransmits.
-For other
-.I idiag_timer
-values, this field is set to 0.
-.TP
-.I idiag_expires
-For TCP sockets that have an active timer, this field describes its expiration
-time in milliseconds.
-For other sockets, this field is set to 0.
-.TP
-.I idiag_rqueue
-For listening sockets:
-the number of pending connections.
-.IP
-For other sockets:
-the amount of data in the incoming queue.
-.TP
-.I idiag_wqueue
-For listening sockets:
-the backlog length.
-.IP
-For other sockets:
-the amount of memory available for sending.
-.TP
-.I idiag_uid
-This is the socket owner UID.
-.TP
-.I idiag_inode
-This is the socket inode number.
-.\"
-.SS Socket memory information
-The payload associated with
-.B UNIX_DIAG_MEMINFO
-and
-.B INET_DIAG_SKMEMINFO
-netlink attributes is an array of the following __u32 values:
-.TP
-.B SK_MEMINFO_RMEM_ALLOC
-The amount of data in receive queue.
-.TP
-.B SK_MEMINFO_RCVBUF
-The receive socket buffer as set by
-.BR SO_RCVBUF .
-.TP
-.B SK_MEMINFO_WMEM_ALLOC
-The amount of data in send queue.
-.TP
-.B SK_MEMINFO_SNDBUF
-The send socket buffer as set by
-.BR SO_SNDBUF .
-.TP
-.B SK_MEMINFO_FWD_ALLOC
-The amount of memory scheduled for future use (TCP only).
-.TP
-.B SK_MEMINFO_WMEM_QUEUED
-The amount of data queued by TCP, but not yet sent.
-.TP
-.B SK_MEMINFO_OPTMEM
-The amount of memory allocated for the socket's service needs (e.g., socket
-filter).
-.TP
-.B SK_MEMINFO_BACKLOG
-The amount of packets in the backlog (not yet processed).
-.SH VERSIONS
-.B NETLINK_INET_DIAG
-was introduced in Linux 2.6.14 and supported
-.B AF_INET
-and
-.B AF_INET6
-sockets only.
-In Linux 3.3, it was renamed to
-.B NETLINK_SOCK_DIAG
-and extended to support
-.B AF_UNIX
-sockets.
-.PP
-.B UNIX_DIAG_MEMINFO
-and
-.B INET_DIAG_SKMEMINFO
-were introduced in Linux 3.6.
-.SH STANDARDS
-Linux.
-.SH EXAMPLES
-The following example program prints inode number, peer's inode number,
-and name of all UNIX domain sockets in the current namespace.
-.PP
-.EX
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <linux/netlink.h>
-#include <linux/rtnetlink.h>
-#include <linux/sock_diag.h>
-#include <linux/unix_diag.h>
-\&
-static int
-send_query(int fd)
-{
- struct sockaddr_nl nladdr = {
- .nl_family = AF_NETLINK
- };
- struct
- {
- struct nlmsghdr nlh;
- struct unix_diag_req udr;
- } req = {
- .nlh = {
- .nlmsg_len = sizeof(req),
- .nlmsg_type = SOCK_DIAG_BY_FAMILY,
- .nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP
- },
- .udr = {
- .sdiag_family = AF_UNIX,
- .udiag_states = \-1,
- .udiag_show = UDIAG_SHOW_NAME | UDIAG_SHOW_PEER
- }
- };
- struct iovec iov = {
- .iov_base = &req,
- .iov_len = sizeof(req)
- };
- struct msghdr msg = {
- .msg_name = &nladdr,
- .msg_namelen = sizeof(nladdr),
- .msg_iov = &iov,
- .msg_iovlen = 1
- };
-\&
- for (;;) {
- if (sendmsg(fd, &msg, 0) < 0) {
- if (errno == EINTR)
- continue;
-\&
- perror("sendmsg");
- return \-1;
- }
-\&
- return 0;
- }
-}
-\&
-static int
-print_diag(const struct unix_diag_msg *diag, unsigned int len)
-{
- if (len < NLMSG_LENGTH(sizeof(*diag))) {
- fputs("short response\en", stderr);
- return \-1;
- }
- if (diag\->udiag_family != AF_UNIX) {
- fprintf(stderr, "unexpected family %u\en", diag\->udiag_family);
- return \-1;
- }
-\&
- unsigned int rta_len = len \- NLMSG_LENGTH(sizeof(*diag));
- unsigned int peer = 0;
- size_t path_len = 0;
- char path[sizeof(((struct sockaddr_un *) 0)\->sun_path) + 1];
-\&
- for (struct rtattr *attr = (struct rtattr *) (diag + 1);
- RTA_OK(attr, rta_len); attr = RTA_NEXT(attr, rta_len)) {
- switch (attr\->rta_type) {
- case UNIX_DIAG_NAME:
- if (!path_len) {
- path_len = RTA_PAYLOAD(attr);
- if (path_len > sizeof(path) \- 1)
- path_len = sizeof(path) \- 1;
- memcpy(path, RTA_DATA(attr), path_len);
- path[path_len] = \[aq]\e0\[aq];
- }
- break;
-\&
- case UNIX_DIAG_PEER:
- if (RTA_PAYLOAD(attr) >= sizeof(peer))
- peer = *(unsigned int *) RTA_DATA(attr);
- break;
- }
- }
-\&
- printf("inode=%u", diag\->udiag_ino);
-\&
- if (peer)
- printf(", peer=%u", peer);
-\&
- if (path_len)
- printf(", name=%s%s", *path ? "" : "@",
- *path ? path : path + 1);
-\&
- putchar(\[aq]\en\[aq]);
- return 0;
-}
-\&
-static int
-receive_responses(int fd)
-{
- long buf[8192 / sizeof(long)];
- struct sockaddr_nl nladdr;
- struct iovec iov = {
- .iov_base = buf,
- .iov_len = sizeof(buf)
- };
- int flags = 0;
-\&
- for (;;) {
- struct msghdr msg = {
- .msg_name = &nladdr,
- .msg_namelen = sizeof(nladdr),
- .msg_iov = &iov,
- .msg_iovlen = 1
- };
-\&
- ssize_t ret = recvmsg(fd, &msg, flags);
-\&
- if (ret < 0) {
- if (errno == EINTR)
- continue;
-\&
- perror("recvmsg");
- return \-1;
- }
- if (ret == 0)
- return 0;
-\&
- if (nladdr.nl_family != AF_NETLINK) {
- fputs("!AF_NETLINK\en", stderr);
- return \-1;
- }
-\&
- const struct nlmsghdr *h = (struct nlmsghdr *) buf;
-\&
- if (!NLMSG_OK(h, ret)) {
- fputs("!NLMSG_OK\en", stderr);
- return \-1;
- }
-\&
- for (; NLMSG_OK(h, ret); h = NLMSG_NEXT(h, ret)) {
- if (h\->nlmsg_type == NLMSG_DONE)
- return 0;
-\&
- if (h\->nlmsg_type == NLMSG_ERROR) {
- const struct nlmsgerr *err = NLMSG_DATA(h);
-\&
- if (h\->nlmsg_len < NLMSG_LENGTH(sizeof(*err))) {
- fputs("NLMSG_ERROR\en", stderr);
- } else {
- errno = \-err\->error;
- perror("NLMSG_ERROR");
- }
-\&
- return \-1;
- }
-\&
- if (h\->nlmsg_type != SOCK_DIAG_BY_FAMILY) {
- fprintf(stderr, "unexpected nlmsg_type %u\en",
- (unsigned) h\->nlmsg_type);
- return \-1;
- }
-\&
- if (print_diag(NLMSG_DATA(h), h\->nlmsg_len))
- return \-1;
- }
- }
-}
-\&
-int
-main(void)
-{
- int fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_SOCK_DIAG);
-\&
- if (fd < 0) {
- perror("socket");
- return 1;
- }
-\&
- int ret = send_query(fd) || receive_responses(fd);
-\&
- close(fd);
- return ret;
-}
-.EE
-.SH SEE ALSO
-.BR netlink (3),
-.BR rtnetlink (3),
-.BR netlink (7),
-.BR tcp (7)
diff --git a/man7/socket.7 b/man7/socket.7
deleted file mode 100644
index 59a7a3f49..000000000
--- a/man7/socket.7
+++ /dev/null
@@ -1,1271 +0,0 @@
-'\" t
-.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
-.\" and copyright (c) 1999 Matthew Wilcox.
-.\"
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" 2002-10-30, Michael Kerrisk, <mtk.manpages@gmail.com>
-.\" Added description of SO_ACCEPTCONN
-.\" 2004-05-20, aeb, added SO_RCVTIMEO/SO_SNDTIMEO text.
-.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Added notes on capability requirements
-.\" A few small grammar fixes
-.\" 2010-06-13 Jan Engelhardt <jengelh@medozas.de>
-.\" Documented SO_DOMAIN and SO_PROTOCOL.
-.\"
-.\" FIXME
-.\" The following are not yet documented:
-.\"
-.\" SO_PEERNAME (2.4?)
-.\" get only
-.\" Seems to do something similar to getpeername(), but then
-.\" why is it necessary / how does it differ?
-.\"
-.\" SO_TIMESTAMPING (2.6.30)
-.\" Documentation/networking/timestamping.txt
-.\" commit cb9eff097831007afb30d64373f29d99825d0068
-.\" Author: Patrick Ohly <patrick.ohly@intel.com>
-.\"
-.\" SO_WIFI_STATUS (3.3)
-.\" commit 6e3e939f3b1bf8534b32ad09ff199d88800835a0
-.\" Author: Johannes Berg <johannes.berg@intel.com>
-.\" Also: SCM_WIFI_STATUS
-.\"
-.\" SO_NOFCS (3.4)
-.\" commit 3bdc0eba0b8b47797f4a76e377dd8360f317450f
-.\" Author: Ben Greear <greearb@candelatech.com>
-.\"
-.\" SO_GET_FILTER (3.8)
-.\" commit a8fc92778080c845eaadc369a0ecf5699a03bef0
-.\" Author: Pavel Emelyanov <xemul@parallels.com>
-.\"
-.\" SO_MAX_PACING_RATE (3.13)
-.\" commit 62748f32d501f5d3712a7c372bbb92abc7c62bc7
-.\" Author: Eric Dumazet <edumazet@google.com>
-.\"
-.\" SO_BPF_EXTENSIONS (3.14)
-.\" commit ea02f9411d9faa3553ed09ce0ec9f00ceae9885e
-.\" Author: Michal Sekletar <msekleta@redhat.com>
-.\"
-.TH socket 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-socket \- Linux socket interface
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.PP
-.IB sockfd " = socket(int " socket_family ", int " socket_type ", int " protocol );
-.fi
-.SH DESCRIPTION
-This manual page describes the Linux networking socket layer user
-interface.
-The BSD compatible sockets
-are the uniform interface
-between the user process and the network protocol stacks in the kernel.
-The protocol modules are grouped into
-.I protocol families
-such as
-.BR AF_INET ", " AF_IPX ", and " AF_PACKET ,
-and
-.I socket types
-such as
-.B SOCK_STREAM
-or
-.BR SOCK_DGRAM .
-See
-.BR socket (2)
-for more information on families and types.
-.SS Socket-layer functions
-These functions are used by the user process to send or receive packets
-and to do other socket operations.
-For more information, see their respective manual pages.
-.PP
-.BR socket (2)
-creates a socket,
-.BR connect (2)
-connects a socket to a remote socket address,
-the
-.BR bind (2)
-function binds a socket to a local socket address,
-.BR listen (2)
-tells the socket that new connections shall be accepted, and
-.BR accept (2)
-is used to get a new socket with a new incoming connection.
-.BR socketpair (2)
-returns two connected anonymous sockets (implemented only for a few
-local families like
-.BR AF_UNIX )
-.PP
-.BR send (2),
-.BR sendto (2),
-and
-.BR sendmsg (2)
-send data over a socket, and
-.BR recv (2),
-.BR recvfrom (2),
-.BR recvmsg (2)
-receive data from a socket.
-.BR poll (2)
-and
-.BR select (2)
-wait for arriving data or a readiness to send data.
-In addition, the standard I/O operations like
-.BR write (2),
-.BR writev (2),
-.BR sendfile (2),
-.BR read (2),
-and
-.BR readv (2)
-can be used to read and write data.
-.PP
-.BR getsockname (2)
-returns the local socket address and
-.BR getpeername (2)
-returns the remote socket address.
-.BR getsockopt (2)
-and
-.BR setsockopt (2)
-are used to set or get socket layer or protocol options.
-.BR ioctl (2)
-can be used to set or read some other options.
-.PP
-.BR close (2)
-is used to close a socket.
-.BR shutdown (2)
-closes parts of a full-duplex socket connection.
-.PP
-Seeking, or calling
-.BR pread (2)
-or
-.BR pwrite (2)
-with a nonzero position is not supported on sockets.
-.PP
-It is possible to do nonblocking I/O on sockets by setting the
-.B O_NONBLOCK
-flag on a socket file descriptor using
-.BR fcntl (2).
-Then all operations that would block will (usually)
-return with
-.B EAGAIN
-(operation should be retried later);
-.BR connect (2)
-will return
-.B EINPROGRESS
-error.
-The user can then wait for various events via
-.BR poll (2)
-or
-.BR select (2).
-.TS
-tab(:) allbox;
-c s s
-l l lx.
-I/O events
-Event:Poll flag:Occurrence
-Read:POLLIN:T{
-New data arrived.
-T}
-Read:POLLIN:T{
-A connection setup has been completed
-(for connection-oriented sockets)
-T}
-Read:POLLHUP:T{
-A disconnection request has been initiated by the other end.
-T}
-Read:POLLHUP:T{
-A connection is broken (only for connection-oriented protocols).
-When the socket is written
-.B SIGPIPE
-is also sent.
-T}
-Write:POLLOUT:T{
-Socket has enough send buffer space for writing new data.
-T}
-Read/Write:T{
-POLLIN |
-.br
-POLLOUT
-T}:T{
-An outgoing
-.BR connect (2)
-finished.
-T}
-Read/Write:POLLERR:T{
-An asynchronous error occurred.
-T}
-Read/Write:POLLHUP:T{
-The other end has shut down one direction.
-T}
-Exception:POLLPRI:T{
-Urgent data arrived.
-.B SIGURG
-is sent then.
-T}
-.\" FIXME . The following is not true currently:
-.\" It is no I/O event when the connection
-.\" is broken from the local end using
-.\" .BR shutdown (2)
-.\" or
-.\" .BR close (2).
-.TE
-.PP
-An alternative to
-.BR poll (2)
-and
-.BR select (2)
-is to let the kernel inform the application about events
-via a
-.B SIGIO
-signal.
-For that the
-.B O_ASYNC
-flag must be set on a socket file descriptor via
-.BR fcntl (2)
-and a valid signal handler for
-.B SIGIO
-must be installed via
-.BR sigaction (2).
-See the
-.I Signals
-discussion below.
-.SS Socket address structures
-Each socket domain has its own format for socket addresses,
-with a domain-specific address structure.
-Each of these structures begins with an
-integer "family" field (typed as
-.IR sa_family_t )
-that indicates the type of the address structure.
-This allows
-the various system calls (e.g.,
-.BR connect (2),
-.BR bind (2),
-.BR accept (2),
-.BR getsockname (2),
-.BR getpeername (2)),
-which are generic to all socket domains,
-to determine the domain of a particular socket address.
-.PP
-To allow any type of socket address to be passed to
-interfaces in the sockets API,
-the type
-.I struct sockaddr
-is defined.
-The purpose of this type is purely to allow casting of
-domain-specific socket address types to a "generic" type,
-so as to avoid compiler warnings about type mismatches in
-calls to the sockets API.
-.PP
-In addition, the sockets API provides the data type
-.IR "struct sockaddr_storage".
-This type
-is suitable to accommodate all supported domain-specific socket
-address structures; it is large enough and is aligned properly.
-(In particular, it is large enough to hold
-IPv6 socket addresses.)
-The structure includes the following field, which can be used to identify
-the type of socket address actually stored in the structure:
-.PP
-.in +4n
-.EX
- sa_family_t ss_family;
-.EE
-.in
-.PP
-The
-.I sockaddr_storage
-structure is useful in programs that must handle socket addresses
-in a generic way
-(e.g., programs that must deal with both IPv4 and IPv6 socket addresses).
-.SS Socket options
-The socket options listed below can be set by using
-.BR setsockopt (2)
-and read with
-.BR getsockopt (2)
-with the socket level set to
-.B SOL_SOCKET
-for all sockets.
-Unless otherwise noted,
-.I optval
-is a pointer to an
-.IR int .
-.\" FIXME .
-.\" In the list below, the text used to describe argument types
-.\" for each socket option should be more consistent
-.\"
-.\" SO_ACCEPTCONN is in POSIX.1-2001, and its origin is explained in
-.\" W R Stevens, UNPv1
-.TP
-.B SO_ACCEPTCONN
-Returns a value indicating whether or not this socket has been marked
-to accept connections with
-.BR listen (2).
-The value 0 indicates that this is not a listening socket,
-the value 1 indicates that this is a listening socket.
-This socket option is read-only.
-.TP
-.BR SO_ATTACH_FILTER " (since Linux 2.2), " SO_ATTACH_BPF " (since Linux 3.19)"
-Attach a classic BPF
-.RB ( SO_ATTACH_FILTER )
-or an extended BPF
-.RB ( SO_ATTACH_BPF )
-program to the socket for use as a filter of incoming packets.
-A packet will be dropped if the filter program returns zero.
-If the filter program returns a
-nonzero value which is less than the packet's data length,
-the packet will be truncated to the length returned.
-If the value returned by the filter is greater than or equal to the
-packet's data length, the packet is allowed to proceed unmodified.
-.IP
-The argument for
-.B SO_ATTACH_FILTER
-is a
-.I sock_fprog
-structure, defined in
-.IR <linux/filter.h> :
-.IP
-.in +4n
-.EX
-struct sock_fprog {
- unsigned short len;
- struct sock_filter *filter;
-};
-.EE
-.in
-.IP
-The argument for
-.B SO_ATTACH_BPF
-is a file descriptor returned by the
-.BR bpf (2)
-system call and must refer to a program of type
-.BR BPF_PROG_TYPE_SOCKET_FILTER .
-.IP
-These options may be set multiple times for a given socket,
-each time replacing the previous filter program.
-The classic and extended versions may be called on the same socket,
-but the previous filter will always be replaced such that a socket
-never has more than one filter defined.
-.IP
-Both classic and extended BPF are explained in the kernel source file
-.I Documentation/networking/filter.txt
-.TP
-.BR SO_ATTACH_REUSEPORT_CBPF ", " SO_ATTACH_REUSEPORT_EBPF
-For use with the
-.B SO_REUSEPORT
-option, these options allow the user to set a classic BPF
-.RB ( SO_ATTACH_REUSEPORT_CBPF )
-or an extended BPF
-.RB ( SO_ATTACH_REUSEPORT_EBPF )
-program which defines how packets are assigned to
-the sockets in the reuseport group (that is, all sockets which have
-.B SO_REUSEPORT
-set and are using the same local address to receive packets).
-.IP
-The BPF program must return an index between 0 and N\-1 representing
-the socket which should receive the packet
-(where N is the number of sockets in the group).
-If the BPF program returns an invalid index,
-socket selection will fall back to the plain
-.B SO_REUSEPORT
-mechanism.
-.IP
-Sockets are numbered in the order in which they are added to the group
-(that is, the order of
-.BR bind (2)
-calls for UDP sockets or the order of
-.BR listen (2)
-calls for TCP sockets).
-New sockets added to a reuseport group will inherit the BPF program.
-When a socket is removed from a reuseport group (via
-.BR close (2)),
-the last socket in the group will be moved into the closed socket's
-position.
-.IP
-These options may be set repeatedly at any time on any socket in the group
-to replace the current BPF program used by all sockets in the group.
-.IP
-.B SO_ATTACH_REUSEPORT_CBPF
-takes the same argument type as
-.B SO_ATTACH_FILTER
-and
-.B SO_ATTACH_REUSEPORT_EBPF
-takes the same argument type as
-.BR SO_ATTACH_BPF .
-.IP
-UDP support for this feature is available since Linux 4.5;
-TCP support is available since Linux 4.6.
-.TP
-.B SO_BINDTODEVICE
-Bind this socket to a particular device like \[lq]eth0\[rq],
-as specified in the passed interface name.
-If the
-name is an empty string or the option length is zero, the socket device
-binding is removed.
-The passed option is a variable-length null-terminated
-interface name string with the maximum size of
-.BR IFNAMSIZ .
-If a socket is bound to an interface,
-only packets received from that particular interface are processed by the
-socket.
-Note that this works only for some socket types, particularly
-.B AF_INET
-sockets.
-It is not supported for packet sockets (use normal
-.BR bind (2)
-there).
-.IP
-Before Linux 3.8,
-this socket option could be set, but could not retrieved with
-.BR getsockopt (2).
-Since Linux 3.8, it is readable.
-The
-.I optlen
-argument should contain the buffer size available
-to receive the device name and is recommended to be
-.B IFNAMSIZ
-bytes.
-The real device name length is reported back in the
-.I optlen
-argument.
-.TP
-.B SO_BROADCAST
-Set or get the broadcast flag.
-When enabled, datagram sockets are allowed to send
-packets to a broadcast address.
-This option has no effect on stream-oriented sockets.
-.TP
-.B SO_BSDCOMPAT
-Enable BSD bug-to-bug compatibility.
-This is used by the UDP protocol module in Linux 2.0 and 2.2.
-If enabled, ICMP errors received for a UDP socket will not be passed
-to the user program.
-In later kernel versions, support for this option has been phased out:
-Linux 2.4 silently ignores it, and Linux 2.6 generates a kernel warning
-(printk()) if a program uses this option.
-Linux 2.0 also enabled BSD bug-to-bug compatibility
-options (random header changing, skipping of the broadcast flag) for raw
-sockets with this option, but that was removed in Linux 2.2.
-.TP
-.B SO_DEBUG
-Enable socket debugging.
-Allowed only for processes with the
-.B CAP_NET_ADMIN
-capability or an effective user ID of 0.
-.TP
-.BR SO_DETACH_FILTER " (since Linux 2.2), " SO_DETACH_BPF " (since Linux 3.19)"
-These two options, which are synonyms,
-may be used to remove the classic or extended BPF
-program attached to a socket with either
-.B SO_ATTACH_FILTER
-or
-.BR SO_ATTACH_BPF .
-The option value is ignored.
-.TP
-.BR SO_DOMAIN " (since Linux 2.6.32)"
-Retrieves the socket domain as an integer, returning a value such as
-.BR AF_INET6 .
-See
-.BR socket (2)
-for details.
-This socket option is read-only.
-.TP
-.B SO_ERROR
-Get and clear the pending socket error.
-This socket option is read-only.
-Expects an integer.
-.TP
-.B SO_DONTROUTE
-Don't send via a gateway, send only to directly connected hosts.
-The same effect can be achieved by setting the
-.B MSG_DONTROUTE
-flag on a socket
-.BR send (2)
-operation.
-Expects an integer boolean flag.
-.TP
-.BR SO_INCOMING_CPU " (gettable since Linux 3.19, settable since Linux 4.4)"
-.\" getsockopt 2c8c56e15df3d4c2af3d656e44feb18789f75837
-.\" setsockopt 70da268b569d32a9fddeea85dc18043de9d89f89
-Sets or gets the CPU affinity of a socket.
-Expects an integer flag.
-.IP
-.in +4n
-.EX
-int cpu = 1;
-setsockopt(fd, SOL_SOCKET, SO_INCOMING_CPU, &cpu,
- sizeof(cpu));
-.EE
-.in
-.IP
-Because all of the packets for a single stream
-(i.e., all packets for the same 4-tuple)
-arrive on the single RX queue that is associated with a particular CPU,
-the typical use case is to employ one listening process per RX queue,
-with the incoming flow being handled by a listener
-on the same CPU that is handling the RX queue.
-This provides optimal NUMA behavior and keeps CPU caches hot.
-.\"
-.\" From an email conversation with Eric Dumazet:
-.\" >> Note that setting the option is not supported if SO_REUSEPORT is used.
-.\" >
-.\" > Please define "not supported". Does this yield an API diagnostic?
-.\" > If so, what is it?
-.\" >
-.\" >> Socket will be selected from an array, either by a hash or BPF program
-.\" >> that has no access to this information.
-.\" >
-.\" > Sorry -- I'm lost here. How does this comment relate to the proposed
-.\" > man page text above?
-.\"
-.\" Simply that :
-.\"
-.\" If an application uses both SO_INCOMING_CPU and SO_REUSEPORT, then
-.\" SO_REUSEPORT logic, selecting the socket to receive the packet, ignores
-.\" SO_INCOMING_CPU setting.
-.TP
-.BR SO_INCOMING_NAPI_ID " (gettable since Linux 4.12)"
-.\" getsockopt 6d4339028b350efbf87c61e6d9e113e5373545c9
-Returns a system-level unique ID called NAPI ID that is associated
-with a RX queue on which the last packet associated with that
-socket is received.
-.IP
-This can be used by an application to split the incoming flows among worker
-threads based on the RX queue on which the packets associated with the
-flows are received.
-It allows each worker thread to be associated with
-a NIC HW receive queue and service all the connection
-requests received on that RX queue.
-This mapping between a app thread and
-a HW NIC queue streamlines the
-flow of data from the NIC to the application.
-.TP
-.B SO_KEEPALIVE
-Enable sending of keep-alive messages on connection-oriented sockets.
-Expects an integer boolean flag.
-.TP
-.B SO_LINGER
-Sets or gets the
-.B SO_LINGER
-option.
-The argument is a
-.I linger
-structure.
-.IP
-.in +4n
-.EX
-struct linger {
- int l_onoff; /* linger active */
- int l_linger; /* how many seconds to linger for */
-};
-.EE
-.in
-.IP
-When enabled, a
-.BR close (2)
-or
-.BR shutdown (2)
-will not return until all queued messages for the socket have been
-successfully sent or the linger timeout has been reached.
-Otherwise,
-the call returns immediately and the closing is done in the background.
-When the socket is closed as part of
-.BR exit (2),
-it always lingers in the background.
-.TP
-.B SO_LOCK_FILTER
-.\" commit d59577b6ffd313d0ab3be39cb1ab47e29bdc9182
-When set, this option will prevent
-changing the filters associated with the socket.
-These filters include any set using the socket options
-.BR SO_ATTACH_FILTER ,
-.BR SO_ATTACH_BPF ,
-.BR SO_ATTACH_REUSEPORT_CBPF ,
-and
-.BR SO_ATTACH_REUSEPORT_EBPF .
-.IP
-The typical use case is for a privileged process to set up a raw socket
-(an operation that requires the
-.B CAP_NET_RAW
-capability), apply a restrictive filter, set the
-.B SO_LOCK_FILTER
-option,
-and then either drop its privileges or pass the socket file descriptor
-to an unprivileged process via a UNIX domain socket.
-.IP
-Once the
-.B SO_LOCK_FILTER
-option has been enabled, attempts to change or remove the filter
-attached to a socket, or to disable the
-.B SO_LOCK_FILTER
-option will fail with the error
-.BR EPERM .
-.TP
-.BR SO_MARK " (since Linux 2.6.25)"
-.\" commit 4a19ec5800fc3bb64e2d87c4d9fdd9e636086fe0
-.\" and 914a9ab386a288d0f22252fc268ecbc048cdcbd5
-Set the mark for each packet sent through this socket
-(similar to the netfilter MARK target but socket-based).
-Changing the mark can be used for mark-based
-routing without netfilter or for packet filtering.
-Setting this option requires the
-.B CAP_NET_ADMIN
-capability.
-.TP
-.B SO_OOBINLINE
-If this option is enabled,
-out-of-band data is directly placed into the receive data stream.
-Otherwise, out-of-band data is passed only when the
-.B MSG_OOB
-flag is set during receiving.
-.\" don't document it because it can do too much harm.
-.\".B SO_NO_CHECK
-.\" The kernel has support for the SO_NO_CHECK socket
-.\" option (boolean: 0 == default, calculate checksum on xmit,
-.\" 1 == do not calculate checksum on xmit).
-.\" Additional note from Andi Kleen on SO_NO_CHECK (2010-08-30)
-.\" On Linux UDP checksums are essentially free and there's no reason
-.\" to turn them off and it would disable another safety line.
-.\" That is why I didn't document the option.
-.TP
-.B SO_PASSCRED
-Enable or disable the receiving of the
-.B SCM_CREDENTIALS
-control message.
-For more information, see
-.BR unix (7).
-.TP
-.B SO_PASSSEC
-Enable or disable the receiving of the
-.B SCM_SECURITY
-control message.
-For more information, see
-.BR unix (7).
-.TP
-.BR SO_PEEK_OFF " (since Linux 3.4)"
-.\" commit ef64a54f6e558155b4f149bb10666b9e914b6c54
-This option, which is currently supported only for
-.BR unix (7)
-sockets, sets the value of the "peek offset" for the
-.BR recv (2)
-system call when used with
-.B MSG_PEEK
-flag.
-.IP
-When this option is set to a negative value
-(it is set to \-1 for all new sockets),
-traditional behavior is provided:
-.BR recv (2)
-with the
-.B MSG_PEEK
-flag will peek data from the front of the queue.
-.IP
-When the option is set to a value greater than or equal to zero,
-then the next peek at data queued in the socket will occur at
-the byte offset specified by the option value.
-At the same time, the "peek offset" will be
-incremented by the number of bytes that were peeked from the queue,
-so that a subsequent peek will return the next data in the queue.
-.IP
-If data is removed from the front of the queue via a call to
-.BR recv (2)
-(or similar) without the
-.B MSG_PEEK
-flag, the "peek offset" will be decreased by the number of bytes removed.
-In other words, receiving data without the
-.B MSG_PEEK
-flag will cause the "peek offset" to be adjusted to maintain
-the correct relative position in the queued data,
-so that a subsequent peek will retrieve the data that would have been
-retrieved had the data not been removed.
-.IP
-For datagram sockets, if the "peek offset" points to the middle of a packet,
-the data returned will be marked with the
-.B MSG_TRUNC
-flag.
-.IP
-The following example serves to illustrate the use of
-.BR SO_PEEK_OFF .
-Suppose a stream socket has the following queued input data:
-.IP
-.in +4n
-.EX
-aabbccddeeff
-.EE
-.in
-.IP
-The following sequence of
-.BR recv (2)
-calls would have the effect noted in the comments:
-.IP
-.in +4n
-.EX
-int ov = 4; // Set peek offset to 4
-setsockopt(fd, SOL_SOCKET, SO_PEEK_OFF, &ov, sizeof(ov));
-\&
-recv(fd, buf, 2, MSG_PEEK); // Peeks "cc"; offset set to 6
-recv(fd, buf, 2, MSG_PEEK); // Peeks "dd"; offset set to 8
-recv(fd, buf, 2, 0); // Reads "aa"; offset set to 6
-recv(fd, buf, 2, MSG_PEEK); // Peeks "ee"; offset set to 8
-.EE
-.in
-.TP
-.B SO_PEERCRED
-Return the credentials of the peer process connected to this socket.
-For further details, see
-.BR unix (7).
-.TP
-.BR SO_PEERSEC " (since Linux 2.6.2)"
-Return the security context of the peer socket connected to this socket.
-For further details, see
-.BR unix (7)
-and
-.BR ip (7).
-.TP
-.B SO_PRIORITY
-Set the protocol-defined priority for all packets to be sent on
-this socket.
-Linux uses this value to order the networking queues:
-packets with a higher priority may be processed first depending
-on the selected device queueing discipline.
-.\" For
-.\" .BR ip (7),
-.\" this also sets the IP type-of-service (TOS) field for outgoing packets.
-Setting a priority outside the range 0 to 6 requires the
-.B CAP_NET_ADMIN
-capability.
-.TP
-.BR SO_PROTOCOL " (since Linux 2.6.32)"
-Retrieves the socket protocol as an integer, returning a value such as
-.BR IPPROTO_SCTP .
-See
-.BR socket (2)
-for details.
-This socket option is read-only.
-.TP
-.B SO_RCVBUF
-Sets or gets the maximum socket receive buffer in bytes.
-The kernel doubles this value (to allow space for bookkeeping overhead)
-when it is set using
-.\" Most (all?) other implementations do not do this -- MTK, Dec 05
-.BR setsockopt (2),
-and this doubled value is returned by
-.BR getsockopt (2).
-.\" The following thread on LMKL is quite informative:
-.\" getsockopt/setsockopt with SO_RCVBUF and SO_SNDBUF "non-standard" behavior
-.\" 17 July 2012
-.\" http://thread.gmane.org/gmane.linux.kernel/1328935
-The default value is set by the
-.I /proc/sys/net/core/rmem_default
-file, and the maximum allowed value is set by the
-.I /proc/sys/net/core/rmem_max
-file.
-The minimum (doubled) value for this option is 256.
-.TP
-.BR SO_RCVBUFFORCE " (since Linux 2.6.14)"
-Using this socket option, a privileged
-.RB ( CAP_NET_ADMIN )
-process can perform the same task as
-.BR SO_RCVBUF ,
-but the
-.I rmem_max
-limit can be overridden.
-.TP
-.BR SO_RCVLOWAT " and " SO_SNDLOWAT
-Specify the minimum number of bytes in the buffer until the socket layer
-will pass the data to the protocol
-.RB ( SO_SNDLOWAT )
-or the user on receiving
-.RB ( SO_RCVLOWAT ).
-These two values are initialized to 1.
-.B SO_SNDLOWAT
-is not changeable on Linux
-.RB ( setsockopt (2)
-fails with the error
-.BR ENOPROTOOPT ).
-.B SO_RCVLOWAT
-is changeable
-only since Linux 2.4.
-.IP
-Before Linux 2.6.28
-.\" Tested on kernel 2.6.14 -- mtk, 30 Nov 05
-.BR select (2),
-.BR poll (2),
-and
-.BR epoll (7)
-did not respect the
-.B SO_RCVLOWAT
-setting on Linux,
-and indicated a socket as readable when even a single byte of data
-was available.
-A subsequent read from the socket would then block until
-.B SO_RCVLOWAT
-bytes are available.
-Since Linux 2.6.28,
-.\" commit c7004482e8dcb7c3c72666395cfa98a216a4fb70
-.BR select (2),
-.BR poll (2),
-and
-.BR epoll (7)
-indicate a socket as readable only if at least
-.B SO_RCVLOWAT
-bytes are available.
-.TP
-.BR SO_RCVTIMEO " and " SO_SNDTIMEO
-.\" Not implemented in Linux 2.0.
-.\" Implemented in Linux 2.1.11 for getsockopt: always return a zero struct.
-.\" Implemented in Linux 2.3.41 for setsockopt, and actually used.
-Specify the receiving or sending timeouts until reporting an error.
-The argument is a
-.IR "struct timeval" .
-If an input or output function blocks for this period of time, and
-data has been sent or received, the return value of that function
-will be the amount of data transferred; if no data has been transferred
-and the timeout has been reached, then \-1 is returned with
-.I errno
-set to
-.B EAGAIN
-or
-.BR EWOULDBLOCK ,
-.\" in fact to EAGAIN
-or
-.B EINPROGRESS
-(for
-.BR connect (2))
-just as if the socket was specified to be nonblocking.
-If the timeout is set to zero (the default),
-then the operation will never timeout.
-Timeouts only have effect for system calls that perform socket I/O (e.g.,
-.BR accept (2),
-.BR connect (2),
-.BR read (2),
-.BR recvmsg (2),
-.BR send (2),
-.BR sendmsg (2));
-timeouts have no effect for
-.BR select (2),
-.BR poll (2),
-.BR epoll_wait (2),
-and so on.
-.TP
-.B SO_REUSEADDR
-.\" commit c617f398edd4db2b8567a28e899a88f8f574798d
-.\" https://lwn.net/Articles/542629/
-Indicates that the rules used in validating addresses supplied in a
-.BR bind (2)
-call should allow reuse of local addresses.
-For
-.B AF_INET
-sockets this
-means that a socket may bind, except when there
-is an active listening socket bound to the address.
-When the listening socket is bound to
-.B INADDR_ANY
-with a specific port then it is not possible
-to bind to this port for any local address.
-Argument is an integer boolean flag.
-.TP
-.BR SO_REUSEPORT " (since Linux 3.9)"
-Permits multiple
-.B AF_INET
-or
-.B AF_INET6
-sockets to be bound to an identical socket address.
-This option must be set on each socket (including the first socket)
-prior to calling
-.BR bind (2)
-on the socket.
-To prevent port hijacking,
-all of the processes binding to the same address must have the same
-effective UID.
-This option can be employed with both TCP and UDP sockets.
-.IP
-For TCP sockets, this option allows
-.BR accept (2)
-load distribution in a multi-threaded server to be improved by
-using a distinct listener socket for each thread.
-This provides improved load distribution as compared
-to traditional techniques such using a single
-.BR accept (2)ing
-thread that distributes connections,
-or having multiple threads that compete to
-.BR accept (2)
-from the same socket.
-.IP
-For UDP sockets,
-the use of this option can provide better distribution
-of incoming datagrams to multiple processes (or threads) as compared
-to the traditional technique of having multiple processes
-compete to receive datagrams on the same socket.
-.TP
-.BR SO_RXQ_OVFL " (since Linux 2.6.33)"
-.\" commit 3b885787ea4112eaa80945999ea0901bf742707f
-Indicates that an unsigned 32-bit value ancillary message (cmsg)
-should be attached to received skbs indicating
-the number of packets dropped by the socket since its creation.
-.TP
-.BR SO_SELECT_ERR_QUEUE " (since Linux 3.10)"
-.\" commit 7d4c04fc170087119727119074e72445f2bb192b
-.\" Author: Keller, Jacob E <jacob.e.keller@intel.com>
-When this option is set on a socket,
-an error condition on a socket causes notification not only via the
-.I exceptfds
-set of
-.BR select (2).
-Similarly,
-.BR poll (2)
-also returns a
-.B POLLPRI
-whenever an
-.B POLLERR
-event is returned.
-.\" It does not affect wake up.
-.IP
-Background: this option was added when waking up on an error condition
-occurred only via the
-.I readfds
-and
-.I writefds
-sets of
-.BR select (2).
-The option was added to allow monitoring for error conditions via the
-.I exceptfds
-argument without simultaneously having to receive notifications (via
-.IR readfds )
-for regular data that can be read from the socket.
-After changes in Linux 4.16,
-.\" commit 6e5d58fdc9bedd0255a8
-.\" ("skbuff: Fix not waking applications when errors are enqueued")
-the use of this flag to achieve the desired notifications
-is no longer necessary.
-This option is nevertheless retained for backwards compatibility.
-.TP
-.B SO_SNDBUF
-Sets or gets the maximum socket send buffer in bytes.
-The kernel doubles this value (to allow space for bookkeeping overhead)
-when it is set using
-.\" Most (all?) other implementations do not do this -- MTK, Dec 05
-.\" See also the comment to SO_RCVBUF (17 Jul 2012 LKML mail)
-.BR setsockopt (2),
-and this doubled value is returned by
-.BR getsockopt (2).
-The default value is set by the
-.I /proc/sys/net/core/wmem_default
-file and the maximum allowed value is set by the
-.I /proc/sys/net/core/wmem_max
-file.
-The minimum (doubled) value for this option is 2048.
-.TP
-.BR SO_SNDBUFFORCE " (since Linux 2.6.14)"
-Using this socket option, a privileged
-.RB ( CAP_NET_ADMIN )
-process can perform the same task as
-.BR SO_SNDBUF ,
-but the
-.I wmem_max
-limit can be overridden.
-.TP
-.B SO_TIMESTAMP
-Enable or disable the receiving of the
-.B SO_TIMESTAMP
-control message.
-The timestamp control message is sent with level
-.B SOL_SOCKET
-and a
-.I cmsg_type
-of
-.BR SCM_TIMESTAMP .
-The
-.I cmsg_data
-field is a
-.I "struct timeval"
-indicating the
-reception time of the last packet passed to the user in this call.
-See
-.BR cmsg (3)
-for details on control messages.
-.TP
-.BR SO_TIMESTAMPNS " (since Linux 2.6.22)"
-.\" commit 92f37fd2ee805aa77925c1e64fd56088b46094fc
-Enable or disable the receiving of the
-.B SO_TIMESTAMPNS
-control message.
-The timestamp control message is sent with level
-.B SOL_SOCKET
-and a
-.I cmsg_type
-of
-.BR SCM_TIMESTAMPNS .
-The
-.I cmsg_data
-field is a
-.I "struct timespec"
-indicating the
-reception time of the last packet passed to the user in this call.
-The clock used for the timestamp is
-.BR CLOCK_REALTIME .
-See
-.BR cmsg (3)
-for details on control messages.
-.IP
-A socket cannot mix
-.B SO_TIMESTAMP
-and
-.BR SO_TIMESTAMPNS :
-the two modes are mutually exclusive.
-.TP
-.B SO_TYPE
-Gets the socket type as an integer (e.g.,
-.BR SOCK_STREAM ).
-This socket option is read-only.
-.TP
-.BR SO_BUSY_POLL " (since Linux 3.11)"
-Sets the approximate time in microseconds to busy poll on a blocking receive
-when there is no data.
-Increasing this value requires
-.BR CAP_NET_ADMIN .
-The default for this option is controlled by the
-.I /proc/sys/net/core/busy_read
-file.
-.IP
-The value in the
-.I /proc/sys/net/core/busy_poll
-file determines how long
-.BR select (2)
-and
-.BR poll (2)
-will busy poll when they operate on sockets with
-.B SO_BUSY_POLL
-set and no events to report are found.
-.IP
-In both cases,
-busy polling will only be done when the socket last received data
-from a network device that supports this option.
-.IP
-While busy polling may improve latency of some applications,
-care must be taken when using it since this will increase
-both CPU utilization and power usage.
-.SS Signals
-When writing onto a connection-oriented socket that has been shut down
-(by the local or the remote end)
-.B SIGPIPE
-is sent to the writing process and
-.B EPIPE
-is returned.
-The signal is not sent when the write call
-specified the
-.B MSG_NOSIGNAL
-flag.
-.PP
-When requested with the
-.B FIOSETOWN
-.BR fcntl (2)
-or
-.B SIOCSPGRP
-.BR ioctl (2),
-.B SIGIO
-is sent when an I/O event occurs.
-It is possible to use
-.BR poll (2)
-or
-.BR select (2)
-in the signal handler to find out which socket the event occurred on.
-An alternative (in Linux 2.2) is to set a real-time signal using the
-.B F_SETSIG
-.BR fcntl (2);
-the handler of the real time signal will be called with
-the file descriptor in the
-.I si_fd
-field of its
-.IR siginfo_t .
-See
-.BR fcntl (2)
-for more information.
-.PP
-Under some circumstances (e.g., multiple processes accessing a
-single socket), the condition that caused the
-.B SIGIO
-may have already disappeared when the process reacts to the signal.
-If this happens, the process should wait again because Linux
-will resend the signal later.
-.\" .SS Ancillary messages
-.SS /proc interfaces
-The core socket networking parameters can be accessed
-via files in the directory
-.IR /proc/sys/net/core/ .
-.TP
-.I rmem_default
-contains the default setting in bytes of the socket receive buffer.
-.TP
-.I rmem_max
-contains the maximum socket receive buffer size in bytes which a user may
-set by using the
-.B SO_RCVBUF
-socket option.
-.TP
-.I wmem_default
-contains the default setting in bytes of the socket send buffer.
-.TP
-.I wmem_max
-contains the maximum socket send buffer size in bytes which a user may
-set by using the
-.B SO_SNDBUF
-socket option.
-.TP
-.IR message_cost " and " message_burst
-configure the token bucket filter used to load limit warning messages
-caused by external network events.
-.TP
-.I netdev_max_backlog
-Maximum number of packets in the global input queue.
-.TP
-.I optmem_max
-Maximum length of ancillary data and user control data like the iovecs
-per socket.
-.\" netdev_fastroute is not documented because it is experimental
-.SS Ioctls
-These operations can be accessed using
-.BR ioctl (2):
-.PP
-.in +4n
-.EX
-.IB error " = ioctl(" ip_socket ", " ioctl_type ", " &value_result ");"
-.EE
-.in
-.TP
-.B SIOCGSTAMP
-Return a
-.I struct timeval
-with the receive timestamp of the last packet passed to the user.
-This is useful for accurate round trip time measurements.
-See
-.BR setitimer (2)
-for a description of
-.IR "struct timeval" .
-.\"
-This ioctl should be used only if the socket options
-.B SO_TIMESTAMP
-and
-.B SO_TIMESTAMPNS
-are not set on the socket.
-Otherwise, it returns the timestamp of the
-last packet that was received while
-.B SO_TIMESTAMP
-and
-.B SO_TIMESTAMPNS
-were not set, or it fails if no such packet has been received,
-(i.e.,
-.BR ioctl (2)
-returns \-1 with
-.I errno
-set to
-.BR ENOENT ).
-.TP
-.B SIOCSPGRP
-Set the process or process group that is to receive
-.B SIGIO
-or
-.B SIGURG
-signals when I/O becomes possible or urgent data is available.
-The argument is a pointer to a
-.IR pid_t .
-For further details, see the description of
-.B F_SETOWN
-in
-.BR fcntl (2).
-.TP
-.B FIOASYNC
-Change the
-.B O_ASYNC
-flag to enable or disable asynchronous I/O mode of the socket.
-Asynchronous I/O mode means that the
-.B SIGIO
-signal or the signal set with
-.B F_SETSIG
-is raised when a new I/O event occurs.
-.IP
-Argument is an integer boolean flag.
-(This operation is synonymous with the use of
-.BR fcntl (2)
-to set the
-.B O_ASYNC
-flag.)
-.\"
-.TP
-.B SIOCGPGRP
-Get the current process or process group that receives
-.B SIGIO
-or
-.B SIGURG
-signals,
-or 0
-when none is set.
-.PP
-Valid
-.BR fcntl (2)
-operations:
-.TP
-.B FIOGETOWN
-The same as the
-.B SIOCGPGRP
-.BR ioctl (2).
-.TP
-.B FIOSETOWN
-The same as the
-.B SIOCSPGRP
-.BR ioctl (2).
-.SH VERSIONS
-.B SO_BINDTODEVICE
-was introduced in Linux 2.0.30.
-.B SO_PASSCRED
-is new in Linux 2.2.
-The
-.I /proc
-interfaces were introduced in Linux 2.2.
-.B SO_RCVTIMEO
-and
-.B SO_SNDTIMEO
-are supported since Linux 2.3.41.
-Earlier, timeouts were fixed to
-a protocol-specific setting, and could not be read or written.
-.SH NOTES
-Linux assumes that half of the send/receive buffer is used for internal
-kernel structures; thus the values in the corresponding
-.I /proc
-files are twice what can be observed on the wire.
-.PP
-Linux will allow port reuse only with the
-.B SO_REUSEADDR
-option
-when this option was set both in the previous program that performed a
-.BR bind (2)
-to the port and in the program that wants to reuse the port.
-This differs from some implementations (e.g., FreeBSD)
-where only the later program needs to set the
-.B SO_REUSEADDR
-option.
-Typically this difference is invisible, since, for example, a server
-program is designed to always set this option.
-.\" .SH AUTHORS
-.\" This man page was written by Andi Kleen.
-.SH SEE ALSO
-.BR wireshark (1),
-.BR bpf (2),
-.BR connect (2),
-.BR getsockopt (2),
-.BR setsockopt (2),
-.BR socket (2),
-.BR pcap (3),
-.BR address_families (7),
-.BR capabilities (7),
-.BR ddp (7),
-.BR ip (7),
-.BR ipv6 (7),
-.BR packet (7),
-.BR tcp (7),
-.BR udp (7),
-.BR unix (7),
-.BR tcpdump (8)
diff --git a/man7/spufs.7 b/man7/spufs.7
deleted file mode 100644
index 39fdf583a..000000000
--- a/man7/spufs.7
+++ /dev/null
@@ -1,767 +0,0 @@
-.\" Copyright (c) International Business Machines Corp., 2006
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" HISTORY:
-.\" 2005-09-28, created by Arnd Bergmann <arndb@de.ibm.com>,
-.\" Mark Nutter <mnutter@us.ibm.com> and
-.\" Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
-.\" 2006-06-16, revised by Eduardo M. Fleury <efleury@br.ibm.com>
-.\" 2007-07-10, quite a lot of polishing by mtk
-.\" 2007-09-28, updates for newer kernels by Jeremy Kerr <jk@ozlabs.org>
-.\"
-.TH spufs 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-spufs \- SPU filesystem
-.SH DESCRIPTION
-The SPU filesystem is used on PowerPC machines that implement the
-Cell Broadband Engine Architecture in order to access Synergistic
-Processor Units (SPUs).
-.PP
-The filesystem provides a name space similar to POSIX shared
-memory or message queues.
-Users that have write permissions
-on the filesystem can use
-.BR spu_create (2)
-to establish SPU contexts under the
-.B spufs
-root directory.
-.PP
-Every SPU context is represented by a directory containing
-a predefined set of files.
-These files can be
-used for manipulating the state of the logical SPU.
-Users can change permissions on the files, but can't
-add or remove files.
-.SS Mount options
-.TP
-.B uid=<uid>
-Set the user owning the mount point; the default is 0 (root).
-.TP
-.B gid=<gid>
-Set the group owning the mount point; the default is 0 (root).
-.TP
-.B mode=<mode>
-Set the mode of the top-level directory in
-.BR spufs ,
-as an octal mode string.
-The default is 0775.
-.SS Files
-The files in
-.B spufs
-mostly follow the standard behavior for regular system calls like
-.BR read (2)
-or
-.BR write (2),
-but often support only a subset of the operations
-supported on regular filesystems.
-This list details the supported
-operations and the deviations from the standard behavior described
-in the respective man pages.
-.PP
-All files that support the
-.BR read (2)
-operation also support
-.BR readv (2)
-and all files that support the
-.BR write (2)
-operation also support
-.BR writev (2).
-All files support the
-.BR access (2)
-and
-.BR stat (2)
-family of operations, but for the latter call,
-the only fields of the returned
-.I stat
-structure that contain reliable information are
-.IR st_mode ,
-.IR st_nlink ,
-.IR st_uid ,
-and
-.IR st_gid .
-.PP
-All files support the
-.BR chmod (2)/\c
-.BR fchmod (2)
-and
-.BR chown (2)/\c
-.BR fchown (2)
-operations, but will not be able to grant permissions that contradict
-the possible operations (e.g., read access on the
-.I wbox
-file).
-.PP
-The current set of files is:
-.TP
-.I /capabilities
-Contains a comma-delimited string representing the capabilities of this
-SPU context.
-Possible capabilities are:
-.RS
-.TP
-.B sched
-This context may be scheduled.
-.TP
-.B step
-This context can be run in single-step mode, for debugging.
-.PP
-New capabilities flags may be added in the future.
-.RE
-.TP
-.I /mem
-the contents of the local storage memory of the SPU.
-This can be accessed like a regular shared memory
-file and contains both code and data in the address
-space of the SPU.
-The possible operations on an open
-.I mem
-file are:
-.RS
-.TP
-.BR read "(2), " pread "(2), " write "(2), " pwrite "(2), " lseek (2)
-These operate as usual, with the exception that
-.BR lseek (2),
-.BR write (2),
-and
-.BR pwrite (2)
-are not supported beyond the end of the file.
-The file size
-is the size of the local storage of the SPU,
-which is normally 256 kilobytes.
-.TP
-.BR mmap (2)
-Mapping
-.I mem
-into the process address space provides access to the SPU local
-storage within the process address space.
-Only
-.B MAP_SHARED
-mappings are allowed.
-.RE
-.TP
-.I /regs
-Contains the saved general-purpose registers of the SPU context.
-This file contains the 128-bit values of each register,
-from register 0 to register 127, in order.
-This allows the general-purpose registers to be
-inspected for debugging.
-.IP
-Reading to or writing from this file requires that the context is
-scheduled out, so use of this file is not recommended in normal
-program operation.
-.IP
-The
-.I regs
-file is not present on contexts that have been created with the
-.B SPU_CREATE_NOSCHED
-flag.
-.TP
-.I /mbox
-The first SPU-to-CPU communication mailbox.
-This file is read-only and can be read in units of 4 bytes.
-The file can be used only in nonblocking mode \- even
-.BR poll (2)
-cannot be used to block on this file.
-The only possible operation on an open
-.I mbox
-file is:
-.RS
-.TP
-.BR read (2)
-If
-.I count
-is smaller than four,
-.BR read (2)
-returns \-1 and sets
-.I errno
-to
-.BR EINVAL .
-If there is no data available in the mailbox (i.e., the SPU has not
-sent a mailbox message), the return value is set to \-1 and
-.I errno
-is set to
-.BR EAGAIN .
-When data
-has been read successfully, four bytes are placed in
-the data buffer and the value four is returned.
-.RE
-.TP
-.I /ibox
-The second SPU-to-CPU communication mailbox.
-This file is similar to the first mailbox file, but can be read
-in blocking I/O mode, thus calling
-.BR read (2)
-on an open
-.I ibox
-file will block until the SPU has written data to its interrupt mailbox
-channel (unless the file has been opened with
-.BR O_NONBLOCK ,
-see below).
-Also,
-.BR poll (2)
-and similar system calls can be used to monitor for the presence
-of mailbox data.
-.IP
-The possible operations on an open
-.I ibox
-file are:
-.RS
-.TP
-.BR read (2)
-If
-.I count
-is smaller than four,
-.BR read (2)
-returns \-1 and sets
-.I errno
-to
-.BR EINVAL .
-If there is no data available in the mailbox and the file
-descriptor has been opened with
-.BR O_NONBLOCK ,
-the return value is set to \-1 and
-.I errno
-is set to
-.BR EAGAIN .
-.IP
-If there is no data available in the mailbox and the file
-descriptor has been opened without
-.BR O_NONBLOCK ,
-the call will
-block until the SPU writes to its interrupt mailbox channel.
-When data has been read successfully, four bytes are placed in
-the data buffer and the value four is returned.
-.TP
-.BR poll (2)
-Poll on the
-.I ibox
-file returns
-.I "(POLLIN | POLLRDNORM)"
-whenever data is available for reading.
-.RE
-.TP
-.I /wbox
-The CPU-to-SPU communication mailbox.
-It is write-only and can be written in units of four bytes.
-If the mailbox is full,
-.BR write (2)
-will block, and
-.BR poll (2)
-can be used to block until the mailbox is available for writing again.
-The possible operations on an open
-.I wbox
-file are:
-.RS
-.TP
-.BR write (2)
-If
-.I count
-is smaller than four,
-.BR write (2)
-returns \-1 and sets
-.I errno
-to
-.BR EINVAL .
-If there is no space available in the mailbox and the file
-descriptor has been opened with
-.BR O_NONBLOCK ,
-the return
-value is set to \-1 and
-.I errno
-is set to
-.BR EAGAIN .
-.IP
-If there is no space available in the mailbox and the file
-descriptor has been opened without
-.BR O_NONBLOCK ,
-the call will block until the SPU reads from its
-PPE (PowerPC Processing Element)
-mailbox channel.
-When data has been written successfully,
-the system call returns four as its function result.
-.TP
-.BR poll (2)
-A poll on the
-.I wbox
-file returns
-.I "(POLLOUT | POLLWRNORM)"
-whenever space is available for writing.
-.RE
-.TP
-.IR /mbox_stat ", " /ibox_stat ", " /wbox_stat
-These are read-only files that contain the length of the current
-queue of each mailbox\[em]that is, how many words can be read from
-.IR mbox " or " ibox
-or how many words can be written to
-.I wbox
-without blocking.
-The files can be read only in four-byte units and return
-a big-endian binary integer number.
-The only possible operation on an open
-.I *box_stat
-file is:
-.RS
-.TP
-.BR read (2)
-If
-.I count
-is smaller than four,
-.BR read (2)
-returns \-1 and sets
-.I errno
-to
-.BR EINVAL .
-Otherwise, a four-byte value is placed in the data buffer.
-This value is the number of elements that can be read from (for
-.I mbox_stat
-and
-.IR ibox_stat )
-or written to (for
-.IR wbox_stat )
-the respective mailbox without blocking or returning an
-.B EAGAIN
-error.
-.RE
-.TP
-.IR /npc ", " /decr ", " /decr_status ", " /spu_tag_mask ", " \
-/event_mask ", " /event_status ", " /srr0 ", " /lslr
-Internal registers of the SPU.
-These files contain an ASCII string
-representing the hex value of the specified register.
-Reads and writes on these
-files (except for
-.IR npc ,
-see below) require that the SPU context be scheduled out,
-so frequent access to
-these files is not recommended for normal program operation.
-.IP
-The contents of these files are:
-.RS
-.TP 16
-.I npc
-Next Program Counter \- valid only when the SPU is in a stopped state.
-.TP
-.I decr
-SPU Decrementer
-.TP
-.I decr_status
-Decrementer Status
-.TP
-.I spu_tag_mask
-MFC tag mask for SPU DMA
-.TP
-.I event_mask
-Event mask for SPU interrupts
-.TP
-.I event_status
-Number of SPU events pending (read-only)
-.TP
-.I srr0
-Interrupt Return address register
-.TP
-.I lslr
-Local Store Limit Register
-.RE
-.IP
-The possible operations on these files are:
-.RS
-.TP
-.BR read (2)
-Reads the current register value.
-If the register value is larger than the buffer passed to the
-.BR read (2)
-system call, subsequent reads will continue reading from the same
-buffer, until the end of the buffer is reached.
-.IP
-When a complete string has been read, all subsequent read operations
-will return zero bytes and a new file descriptor needs to be opened
-to read a new value.
-.TP
-.BR write (2)
-A
-.BR write (2)
-operation on the file sets the register to the
-value given in the string.
-The string is parsed from the beginning
-until the first nonnumeric character or the end of the buffer.
-Subsequent writes to the same file descriptor overwrite the
-previous setting.
-.IP
-Except for the
-.I npc
-file, these files are not present on contexts that have been created with
-the
-.B SPU_CREATE_NOSCHED
-flag.
-.RE
-.TP
-.I /fpcr
-This file provides access to the Floating Point Status and
-Control Register (fcpr) as a binary, four-byte file.
-The operations on the
-.I fpcr
-file are:
-.RS
-.TP
-.BR read (2)
-If
-.I count
-is smaller than four,
-.BR read (2)
-returns \-1 and sets
-.I errno
-to
-.BR EINVAL .
-Otherwise, a four-byte value is placed in the data buffer;
-this is the current value of the
-.I fpcr
-register.
-.TP
-.BR write (2)
-If
-.I count
-is smaller than four,
-.BR write (2)
-returns \-1 and sets
-.I errno
-to
-.BR EINVAL .
-Otherwise, a four-byte value is copied from the data buffer,
-updating the value of the
-.I fpcr
-register.
-.RE
-.TP
-.IR /signal1 ", " /signal2
-The files provide access to the two signal notification channels
-of an SPU.
-These are read-write files that operate on four-byte words.
-Writing to one of these files triggers an interrupt on the SPU.
-The value written to the signal files can
-be read from the SPU through a channel read or from
-host user space through the file.
-After the value has been read by the SPU, it is reset to zero.
-The possible operations on an open
-.I signal1
-or
-.I signal2
-file are:
-.RS
-.TP
-.BR read (2)
-If
-.I count
-is smaller than four,
-.BR read (2)
-returns \-1 and sets
-.I errno
-to
-.BR EINVAL .
-Otherwise, a four-byte value is placed in the data buffer;
-this is the current value of the specified signal notification
-register.
-.TP
-.BR write (2)
-If
-.I count
-is smaller than four,
-.BR write (2)
-returns \-1 and sets
-.I errno
-to
-.BR EINVAL .
-Otherwise, a four-byte value is copied from the data buffer,
-updating the value of the specified signal notification
-register.
-The signal notification register will either be replaced with
-the input data or will be updated to the bitwise OR operation
-of the old value and the input data, depending on the contents
-of the
-.I signal1_type
-or
-.I signal2_type
-files respectively.
-.RE
-.TP
-.IR /signal1_type ", " /signal2_type
-These two files change the behavior of the
-.I signal1
-and
-.I signal2
-notification files.
-They contain a numeric ASCII string which is read
-as either "1" or "0".
-In mode 0 (overwrite), the hardware replaces the contents
-of the signal channel with the data that is written to it.
-In mode 1 (logical OR), the hardware accumulates the bits
-that are subsequently written to it.
-The possible operations on an open
-.I signal1_type
-or
-.I signal2_type
-file are:
-.RS
-.TP
-.BR read (2)
-When the count supplied to the
-.BR read (2)
-call is shorter than the required length for the digit (plus a newline
-character), subsequent reads from the same file descriptor will
-complete the string.
-When a complete string has been read, all subsequent read operations
-will return zero bytes and a new file descriptor needs to be opened
-to read the value again.
-.TP
-.BR write (2)
-A
-.BR write (2)
-operation on the file sets the register to the
-value given in the string.
-The string is parsed from the beginning
-until the first nonnumeric character or the end of the buffer.
-Subsequent writes to the same file descriptor overwrite the
-previous setting.
-.RE
-.TP
-.IR /mbox_info ", " /ibox_info ", " /wbox_info ", " /dma_into ", " /proxydma_info
-Read-only files that contain the saved state of the SPU mailboxes and
-DMA queues.
-This allows the SPU status to be inspected, mainly for debugging.
-The
-.I mbox_info
-and
-.I ibox_info
-files each contain the four-byte mailbox message that has been written
-by the SPU.
-If no message has been written to these mailboxes, then
-contents of these files is undefined.
-The
-.IR mbox_stat ,
-.IR ibox_stat ,
-and
-.I wbox_stat
-files contain the available message count.
-.IP
-The
-.I wbox_info
-file contains an array of four-byte mailbox messages, which have been
-sent to the SPU.
-With current CBEA machines, the array is four items in
-length, so up to 4 * 4 = 16 bytes can be read from this file.
-If any mailbox queue entry is empty,
-then the bytes read at the corresponding location are undefined.
-.IP
-The
-.I dma_info
-file contains the contents of the SPU MFC DMA queue, represented as the
-following structure:
-.IP
-.in +4n
-.EX
-struct spu_dma_info {
- uint64_t dma_info_type;
- uint64_t dma_info_mask;
- uint64_t dma_info_status;
- uint64_t dma_info_stall_and_notify;
- uint64_t dma_info_atomic_command_status;
- struct mfc_cq_sr dma_info_command_data[16];
-};
-.EE
-.in
-.IP
-The last member of this data structure is the actual DMA queue,
-containing 16 entries.
-The
-.I mfc_cq_sr
-structure is defined as:
-.IP
-.in +4n
-.EX
-struct mfc_cq_sr {
- uint64_t mfc_cq_data0_RW;
- uint64_t mfc_cq_data1_RW;
- uint64_t mfc_cq_data2_RW;
- uint64_t mfc_cq_data3_RW;
-};
-.EE
-.in
-.IP
-The
-.I proxydma_info
-file contains similar information, but describes the proxy DMA queue
-(i.e., DMAs initiated by entities outside the SPU) instead.
-The file is in the following format:
-.IP
-.in +4n
-.EX
-struct spu_proxydma_info {
- uint64_t proxydma_info_type;
- uint64_t proxydma_info_mask;
- uint64_t proxydma_info_status;
- struct mfc_cq_sr proxydma_info_command_data[8];
-};
-.EE
-.in
-.IP
-Accessing these files requires that the SPU context is scheduled out -
-frequent use can be inefficient.
-These files should not be used for normal program operation.
-.IP
-These files are not present on contexts that have been created with the
-.B SPU_CREATE_NOSCHED
-flag.
-.TP
-.I /cntl
-This file provides access to the SPU Run Control and SPU status
-registers, as an ASCII string.
-The following operations are supported:
-.RS
-.TP
-.BR read (2)
-Reads from the
-.I cntl
-file will return an ASCII string with the hex
-value of the SPU Status register.
-.TP
-.BR write (2)
-Writes to the
-.I cntl
-file will set the context's SPU Run Control register.
-.RE
-.TP
-.I /mfc
-Provides access to the Memory Flow Controller of the SPU.
-Reading from the file returns the contents of the
-SPU's MFC Tag Status register, and
-writing to the file initiates a DMA from the MFC.
-The following operations are supported:
-.RS
-.TP
-.BR write (2)
-Writes to this file need to be in the format of a MFC DMA command,
-defined as follows:
-.IP
-.in +4n
-.EX
-struct mfc_dma_command {
- int32_t pad; /* reserved */
- uint32_t lsa; /* local storage address */
- uint64_t ea; /* effective address */
- uint16_t size; /* transfer size */
- uint16_t tag; /* command tag */
- uint16_t class; /* class ID */
- uint16_t cmd; /* command opcode */
-};
-.EE
-.in
-.IP
-Writes are required to be exactly
-.I sizeof(struct mfc_dma_command)
-bytes in size.
-The command will be sent to the SPU's MFC proxy queue, and the
-tag stored in the kernel (see below).
-.TP
-.BR read (2)
-Reads the contents of the tag status register.
-If the file is opened in blocking mode (i.e., without
-.BR O_NONBLOCK ),
-then the read will block until a
-DMA tag (as performed by a previous write) is complete.
-In nonblocking mode,
-the MFC tag status register will be returned without waiting.
-.TP
-.BR poll (2)
-Calling
-.BR poll (2)
-on the
-.I mfc
-file will block until a new DMA can be
-started (by checking for
-.BR POLLOUT )
-or until a previously started DMA
-(by checking for
-.BR POLLIN )
-has been completed.
-.IP
-.I /mss
-Provides access to the MFC MultiSource Synchronization (MSS) facility.
-By
-.BR mmap (2)-ing
-this file, processes can access the MSS area of the SPU.
-.IP
-The following operations are supported:
-.TP
-.BR mmap (2)
-Mapping
-.B mss
-into the process address space gives access to the SPU MSS area
-within the process address space.
-Only
-.B MAP_SHARED
-mappings are allowed.
-.RE
-.TP
-.I /psmap
-Provides access to the whole problem-state mapping of the SPU.
-Applications can use this area to interface to the SPU, rather than
-writing to individual register files in
-.BR spufs .
-.IP
-The following operations are supported:
-.RS
-.TP
-.BR mmap (2)
-Mapping
-.B psmap
-gives a process a direct map of the SPU problem state area.
-Only
-.B MAP_SHARED
-mappings are supported.
-.RE
-.TP
-.I /phys\-id
-Read-only file containing the physical SPU number that the SPU context
-is running on.
-When the context is not running, this file contains the
-string "\-1".
-.IP
-The physical SPU number is given by an ASCII hex string.
-.TP
-.I /object\-id
-Allows applications to store (or retrieve) a single 64-bit ID into the
-context.
-This ID is later used by profiling tools to uniquely identify
-the context.
-.RS
-.TP
-.BR write (2)
-By writing an ASCII hex value into this file, applications can set the
-object ID of the SPU context.
-Any previous value of the object ID is overwritten.
-.TP
-.BR read (2)
-Reading this file gives an ASCII hex string representing the object ID
-for this SPU context.
-.RE
-.SH EXAMPLES
-To automatically
-.BR mount (8)
-the SPU filesystem when booting, at the location
-.I /spu
-chosen by the user, put this line into the
-.BR fstab (5)
-configuration file:
-.EX
-none /spu spufs gid=spu 0 0
-.EE
-.\" .SH AUTHORS
-.\" Arnd Bergmann <arndb@de.ibm.com>, Mark Nutter <mnutter@us.ibm.com>,
-.\" Ulrich Weigand <Ulrich.Weigand@de.ibm.com>, Jeremy Kerr <jk@ozlabs.org>
-.SH SEE ALSO
-.BR close (2),
-.BR spu_create (2),
-.BR spu_run (2),
-.BR capabilities (7)
-.PP
-.I The Cell Broadband Engine Architecture (CBEA) specification
diff --git a/man7/standards.7 b/man7/standards.7
deleted file mode 100644
index 82b8ac4ff..000000000
--- a/man7/standards.7
+++ /dev/null
@@ -1,303 +0,0 @@
-.\" Copyright (c) 2006, Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH standards 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-standards \- C and UNIX Standards
-.SH DESCRIPTION
-The STANDARDS section that appears in many manual pages identifies
-various standards to which the documented interface conforms.
-The following list briefly describes these standards.
-.TP
-.B V7
-Version 7 (also known as Seventh Edition) UNIX,
-released by AT&T/Bell Labs in 1979.
-After this point, UNIX systems diverged into two main dialects:
-BSD and System V.
-.TP
-.B 4.2BSD
-This is an implementation standard defined by the 4.2 release
-of the
-.IR "Berkeley Software Distribution",
-released by the University of California at Berkeley.
-This was the first Berkeley release that contained a TCP/IP
-stack and the sockets API.
-4.2BSD was released in 1983.
-.IP
-Earlier major BSD releases included
-.I 3BSD
-(1980),
-.I 4BSD
-(1980),
-and
-.I 4.1BSD
-(1981).
-.TP
-.B 4.3BSD
-The successor to 4.2BSD, released in 1986.
-.TP
-.B 4.4BSD
-The successor to 4.3BSD, released in 1993.
-This was the last major Berkeley release.
-.TP
-.B System V
-This is an implementation standard defined by AT&T's milestone 1983
-release of its commercial System V (five) release.
-The previous major AT&T release was
-.IR "System III" ,
-released in 1981.
-.TP
-.B System V release 2 (SVr2)
-This was the next System V release, made in 1985.
-The SVr2 was formally described in the
-.I "System V Interface Definition version 1"
-.RI ( "SVID 1" )
-published in 1985.
-.TP
-.B System V release 3 (SVr3)
-This was the successor to SVr2, released in 1986.
-This release was formally described in the
-.I "System V Interface Definition version 2"
-.RI ( "SVID 2" ).
-.TP
-.B System V release 4 (SVr4)
-This was the successor to SVr3, released in 1989.
-This version of System V is described in the "Programmer's Reference
-Manual: Operating System API (Intel processors)" (Prentice-Hall
-1992, ISBN 0-13-951294-2)
-This release was formally described in the
-.I "System V Interface Definition version 3"
-.RI ( "SVID 3" ),
-and is considered the definitive System V release.
-.TP
-.B SVID 4
-System V Interface Definition version 4, issued in 1995.
-Available online at
-.UR http://www.sco.com\:/developers\:/devspecs/
-.UE .
-.TP
-.B C89
-This was the first C language standard, ratified by ANSI
-(American National Standards Institute) in 1989
-.RI ( X3.159-1989 ).
-Sometimes this is known as
-.IR "ANSI C" ,
-but since C99 is also an
-ANSI standard, this term is ambiguous.
-This standard was also ratified by
-ISO (International Standards Organization) in 1990
-.RI ( "ISO/IEC 9899:1990" ),
-and is thus occasionally referred to as
-.IR "ISO C90" .
-.TP
-.B C99
-This revision of the C language standard was ratified by ISO in 1999
-.RI ( "ISO/IEC 9899:1999" ).
-Available online at
-.UR http://www.open\-std.org\:/jtc1\:/sc22\:/wg14\:/www\:/standards
-.UE .
-.TP
-.B C11
-This revision of the C language standard was ratified by ISO in 2011
-.RI ( "ISO/IEC 9899:2011" ).
-.TP
-.B LFS
-The Large File Summit specification, completed in 1996.
-This specification defined mechanisms that allowed 32-bit systems
-to support the use of large files (i.e., 64-bit file offsets).
-See
-.UR https://www.opengroup.org\:/platform\:/lfs.html
-.UE .
-.TP
-.B POSIX.1-1988
-This was the first POSIX standard,
-ratified by IEEE as IEEE Std 1003.1-1988,
-and subsequently adopted (with minor revisions) as an ISO standard in 1990.
-The term "POSIX" was coined by Richard Stallman.
-.TP
-.B POSIX.1-1990
-"Portable Operating System Interface for Computing Environments".
-IEEE 1003.1-1990 part 1, ratified by ISO in 1990
-.RI ( "ISO/IEC 9945-1:1990" ).
-.TP
-.B POSIX.2
-IEEE Std 1003.2-1992,
-describing commands and utilities, ratified by ISO in 1993
-.RI ( "ISO/IEC 9945-2:1993" ).
-.TP
-.BR POSIX.1b " (formerly known as \fIPOSIX.4\fP)"
-IEEE Std 1003.1b-1993,
-describing real-time facilities
-for portable operating systems, ratified by ISO in 1996
-.RI ( "ISO/IEC 9945-1:1996" ).
-.TP
-.BR POSIX.1c " (formerly known as \fIPOSIX.4a\fP)"
-IEEE Std 1003.1c-1995, which describes the POSIX threads interfaces.
-.TP
-.B POSIX.1d
-IEEE Std 1003.1d-1999, which describes additional real-time extensions.
-.TP
-.B POSIX.1g
-IEEE Std 1003.1g-2000, which describes networking APIs (including sockets).
-.TP
-.B POSIX.1j
-IEEE Std 1003.1j-2000, which describes advanced real-time extensions.
-.TP
-.B POSIX.1-1996
-A 1996 revision of POSIX.1 which incorporated POSIX.1b and POSIX.1c.
-.TP
-.B XPG3
-Released in 1989, this was the first release of the X/Open
-Portability Guide to be based on a POSIX standard (POSIX.1-1988).
-This multivolume guide was developed by the X/Open Group,
-a multivendor consortium.
-.TP
-.B XPG4
-A revision of the X/Open Portability Guide, released in 1992.
-This revision incorporated POSIX.2.
-.TP
-.B XPG4v2
-A 1994 revision of XPG4.
-This is also referred to as
-.IR "Spec 1170" ,
-where 1170 referred to the number of interfaces
-defined by this standard.
-.TP
-.B "SUS (SUSv1)"
-Single UNIX Specification.
-This was a repackaging of XPG4v2 and other X/Open standards
-(X/Open Curses Issue 4 version 2,
-X/Open Networking Service (XNS) Issue 4).
-Systems conforming to this standard can be branded
-.IR "UNIX 95" .
-.TP
-.B SUSv2
-Single UNIX Specification version 2.
-Sometimes also referred to (incorrectly) as
-.IR XPG5 .
-This standard appeared in 1997.
-Systems conforming to this standard can be branded
-.IR "UNIX 98" .
-See also
-.UR http://www.unix.org\:/version2/
-.UE .)
-.TP
-.B POSIX.1-2001, SUSv3
-This was a 2001 revision and consolidation of the
-POSIX.1, POSIX.2, and SUS standards into a single document,
-conducted under the auspices of the Austin Group
-.UR http://www.opengroup.org\:/austin/
-.UE .
-The standard is available online at
-.UR http://www.unix.org\:/version3/
-.UE .
-.IP
-The standard defines two levels of conformance:
-.IR "POSIX conformance" ,
-which is a baseline set of interfaces required of a conforming system;
-and
-.IR "XSI Conformance",
-which additionally mandates a set of interfaces
-(the "XSI extension") which are only optional for POSIX conformance.
-XSI-conformant systems can be branded
-.IR "UNIX 03" .
-.IP
-The POSIX.1-2001 document is broken into four parts:
-.IP
-.BR XBD :
-Definitions, terms, and concepts, header file specifications.
-.IP
-.BR XSH :
-Specifications of functions (i.e., system calls and library
-functions in actual implementations).
-.IP
-.BR XCU :
-Specifications of commands and utilities
-(i.e., the area formerly described by POSIX.2).
-.IP
-.BR XRAT :
-Informative text on the other parts of the standard.
-.IP
-POSIX.1-2001 is aligned with C99, so that all of the
-library functions standardized in C99 are also
-standardized in POSIX.1-2001.
-.IP
-The Single UNIX Specification version 3 (SUSv3) comprises the
-Base Specifications containing XBD, XSH, XCU, and XRAT as above,
-plus X/Open Curses Issue 4 version 2 as an extra volume that is
-not in POSIX.1-2001.
-.IP
-Two Technical Corrigenda (minor fixes and improvements)
-of the original 2001 standard have occurred:
-TC1 in 2003
-and TC2 in 2004.
-.TP
-.B POSIX.1-2008, SUSv4
-Work on the next revision of POSIX.1/SUS was completed and
-ratified in 2008.
-The standard is available online at
-.UR http://www.unix.org\:/version4/
-.UE .
-.IP
-The changes in this revision are not as large as those
-that occurred for POSIX.1-2001/SUSv3,
-but a number of new interfaces are added
-and various details of existing specifications are modified.
-Many of the interfaces that were optional in
-POSIX.1-2001 become mandatory in the 2008 revision of the standard.
-A few interfaces that are present in POSIX.1-2001 are marked
-as obsolete in POSIX.1-2008, or removed from the standard altogether.
-.IP
-The revised standard is structured in the same way as its predecessor.
-The Single UNIX Specification version 4 (SUSv4) comprises the
-Base Specifications containing XBD, XSH, XCU, and XRAT,
-plus X/Open Curses Issue 7 as an extra volume that is
-not in POSIX.1-2008.
-.IP
-Again there are two levels of conformance: the baseline
-.IR "POSIX Conformance" ,
-and
-.IR "XSI Conformance" ,
-which mandates an additional set of interfaces
-beyond those in the base specification.
-.IP
-In general, where the STANDARDS section of a manual page
-lists POSIX.1-2001, it can be assumed that the interface also
-conforms to POSIX.1-2008, unless otherwise noted.
-.IP
-Technical Corrigendum 1 (minor fixes and improvements)
-of this standard was released in 2013.
-.IP
-Technical Corrigendum 2 of this standard was released in 2016.
-.IP
-Further information can be found on the Austin Group web site,
-.UR http://www.opengroup.org\:/austin/
-.UE .
-.TP
-.B SUSv4 2016 edition
-This is equivalent to POSIX.1-2008, with the addition of
-Technical Corrigenda 1 and 2 and the XCurses specification.
-.TP
-.B POSIX.1-2017
-This revision of POSIX is technically identical to POSIX.1-2008 with
-Technical Corrigenda 1 and 2 applied.
-.TP
-.B SUSv4 2018 edition
-This is equivalent to POSIX.1-2017, with the addition of
-the XCurses specification.
-.PP
-The interfaces documented in POSIX.1/SUS are available as
-manual pages under sections 0p (header files), 1p (commands),
-and 3p (functions);
-thus one can write "man 3p open".
-.SH SEE ALSO
-.BR getconf (1),
-.BR confstr (3),
-.BR pathconf (3),
-.BR sysconf (3),
-.BR attributes (7),
-.BR feature_test_macros (7),
-.BR libc (7),
-.BR posixoptions (7),
-.BR system_data_types (7)
diff --git a/man7/string_copying.7 b/man7/string_copying.7
deleted file mode 100644
index da1fc6752..000000000
--- a/man7/string_copying.7
+++ /dev/null
@@ -1,820 +0,0 @@
-.\" Copyright 2022 Alejandro Colomar <alx@kernel.org>
-.\"
-.\" SPDX-License-Identifier: BSD-3-Clause
-.\"
-.TH string_copying 7 (date) "Linux man-pages (unreleased)"
-.\" ----- NAME :: -----------------------------------------------------/
-.SH NAME
-stpcpy,
-strcpy, strcat,
-stpecpy,
-strlcpy, strlcat,
-stpncpy,
-strncpy,
-zustr2ustp, zustr2stp,
-strncat,
-ustpcpy, ustr2stp
-\- copying strings and character sequences
-.\" ----- SYNOPSIS :: -------------------------------------------------/
-.SH SYNOPSIS
-.\" ----- SYNOPSIS :: (Null-terminated) strings -----------------------/
-.SS Strings
-.nf
-// Chain-copy a string.
-.BI "char *stpcpy(char *restrict " dst ", const char *restrict " src );
-.PP
-// Copy/catenate a string.
-.BI "char *strcpy(char *restrict " dst ", const char *restrict " src );
-.BI "char *strcat(char *restrict " dst ", const char *restrict " src );
-.PP
-// Chain-copy a string with truncation.
-.BI "char *stpecpy(char *" dst ", char " end "[0], const char *restrict " src );
-.PP
-// Copy/catenate a string with truncation.
-.BI "size_t strlcpy(char " dst "[restrict ." sz "], \
-const char *restrict " src ,
-.BI " size_t " sz );
-.BI "size_t strlcat(char " dst "[restrict ." sz "], \
-const char *restrict " src ,
-.BI " size_t " sz );
-.fi
-.\" ----- SYNOPSIS :: Null-padded character sequences --------/
-.SS Null-padded character sequences
-.nf
-// Zero a fixed-width buffer, and
-// copy a string into a character sequence with truncation.
-.BI "char *stpncpy(char " dst "[restrict ." sz "], \
-const char *restrict " src ,
-.BI " size_t " sz );
-.PP
-// Zero a fixed-width buffer, and
-// copy a string into a character sequence with truncation.
-.BI "char *strncpy(char " dest "[restrict ." sz "], \
-const char *restrict " src ,
-.BI " size_t " sz );
-.PP
-// Chain-copy a null-padded character sequence into a character sequence.
-.BI "char *zustr2ustp(char *restrict " dst ", \
-const char " src "[restrict ." sz ],
-.BI " size_t " sz );
-.PP
-// Chain-copy a null-padded character sequence into a string.
-.BI "char *zustr2stp(char *restrict " dst ", \
-const char " src "[restrict ." sz ],
-.BI " size_t " sz );
-.PP
-// Catenate a null-padded character sequence into a string.
-.BI "char *strncat(char *restrict " dst ", const char " src "[restrict ." sz ],
-.BI " size_t " sz );
-.fi
-.\" ----- SYNOPSIS :: Measured character sequences --------------------/
-.SS Measured character sequences
-.nf
-// Chain-copy a measured character sequence.
-.BI "char *ustpcpy(char *restrict " dst ", \
-const char " src "[restrict ." len ],
-.BI " size_t " len );
-.PP
-// Chain-copy a measured character sequence into a string.
-.BI "char *ustr2stp(char *restrict " dst ", \
-const char " src "[restrict ." len ],
-.BI " size_t " len );
-.fi
-.SH DESCRIPTION
-.\" ----- DESCRIPTION :: Terms (and abbreviations) :: -----------------/
-.SS Terms (and abbreviations)
-.\" ----- DESCRIPTION :: Terms (and abbreviations) :: string (str) ----/
-.TP
-.IR "string " ( str )
-is a sequence of zero or more non-null characters followed by a null byte.
-.\" ----- DESCRIPTION :: Terms (and abbreviations) :: null-padded character seq
-.TP
-.I character sequence
-is a sequence of zero or more non-null characters.
-A program should never use a character sequence where a string is required.
-However, with appropriate care,
-a string can be used in the place of a character sequence.
-.RS
-.TP
-.IR "null-padded character sequence " ( zustr )
-Character sequences can be contained in fixed-width buffers,
-which contain padding null bytes after the character sequence,
-to fill the rest of the buffer
-without affecting the character sequence;
-however, those padding null bytes are not part of the character sequence.
-.\" ----- DESCRIPTION :: Terms (and abbreviations) :: measured character sequence
-.TP
-.IR "measured character sequence " ( ustr )
-Character sequence delimited by its length.
-It may be a slice of a larger character sequence,
-or even of a string.
-.RE
-.\" ----- DESCRIPTION :: Terms (and abbreviations) :: length (len) ----/
-.TP
-.IR "length " ( len )
-is the number of non-null characters in a string or character sequence.
-It is the return value of
-.I strlen(str)
-and of
-.IR "strnlen(ustr, sz)" .
-.\" ----- DESCRIPTION :: Terms (and abbreviations) :: size (sz) -------/
-.TP
-.IR "size " ( sz )
-refers to the entire buffer
-where the string or character sequence is contained.
-.\" ----- DESCRIPTION :: Terms (and abbreviations) :: end -------------/
-.TP
-.I end
-is the name of a pointer to one past the last element of a buffer.
-It is equivalent to
-.IR &str[sz] .
-It is used as a sentinel value,
-to be able to truncate strings or character sequences
-instead of overrunning the containing buffer.
-.\" ----- DESCRIPTION :: Terms (and abbreviations) :: copy ------------/
-.TP
-.I copy
-This term is used when
-the writing starts at the first element pointed to by
-.IR dst .
-.\" ----- DESCRIPTION :: Terms (and abbreviations) :: catenate --------/
-.TP
-.I catenate
-This term is used when
-a function first finds the terminating null byte in
-.IR dst ,
-and then starts writing at that position.
-.\" ----- DESCRIPTION :: Terms (and abbreviations) :: chain -----------/
-.TP
-.I chain
-This term is used when
-it's the programmer who provides
-a pointer to the terminating null byte in the string
-.I dst
-(or one after the last character in a character sequence),
-and the function starts writing at that location.
-The function returns
-a pointer to the new location of the terminating null byte
-(or one after the last character in a character sequence)
-after the call,
-so that the programmer can use it to chain such calls.
-.\" ----- DESCRIPTION :: Copy, catenate, and chain-copy ---------------/
-.SS Copy, catenate, and chain-copy
-Originally,
-there was a distinction between functions that copy and those that catenate.
-However, newer functions that copy while allowing chaining
-cover both use cases with a single API.
-They are also algorithmically faster,
-since they don't need to search for
-the terminating null byte of the existing string.
-However, functions that catenate have a much simpler use,
-so if performance is not important,
-it can make sense to use them for improving readability.
-.PP
-The pointer returned by functions that allow chaining
-is a byproduct of the copy operation,
-so it has no performance costs.
-Functions that return such a pointer,
-and thus can be chained,
-have names of the form
-.RB * stp *(),
-since it's common to name the pointer just
-.IR p .
-.PP
-Chain-copying functions that truncate
-should accept a pointer to the end of the destination buffer,
-and have names of the form
-.RB * stpe *().
-This allows not having to recalculate the remaining size after each call.
-.\" ----- DESCRIPTION :: Truncate or not? -----------------------------/
-.SS Truncate or not?
-The first thing to note is that programmers should be careful with buffers,
-so they always have the correct size,
-and truncation is not necessary.
-.PP
-In most cases,
-truncation is not desired,
-and it is simpler to just do the copy.
-Simpler code is safer code.
-Programming against programming mistakes by adding more code
-just adds more points where mistakes can be made.
-.PP
-Nowadays,
-compilers can detect most programmer errors with features like
-compiler warnings,
-static analyzers, and
-.B \%_FORTIFY_SOURCE
-(see
-.BR ftm (7)).
-Keeping the code simple
-helps these overflow-detection features be more precise.
-.PP
-When validating user input,
-however,
-it makes sense to truncate.
-Remember to check the return value of such function calls.
-.PP
-Functions that truncate:
-.IP \[bu] 3
-.BR stpecpy (3)
-is the most efficient string copy function that performs truncation.
-It only requires to check for truncation once after all chained calls.
-.IP \[bu]
-.BR strlcpy (3bsd)
-and
-.BR strlcat (3bsd)
-are designed to crash if the input string is invalid
-(doesn't contain a terminating null byte).
-.IP \[bu]
-.BR stpncpy (3)
-and
-.BR strncpy (3)
-also truncate, but they don't write strings,
-but rather null-padded character sequences.
-.\" ----- DESCRIPTION :: Null-padded character sequences --------------/
-.SS Null-padded character sequences
-For historic reasons,
-some standard APIs,
-such as
-.BR utmpx (5),
-use null-padded character sequences in fixed-width buffers.
-To interface with them,
-specialized functions need to be used.
-.PP
-To copy strings into them, use
-.BR stpncpy (3).
-.PP
-To copy from an unterminated string within a fixed-width buffer into a string,
-ignoring any trailing null bytes in the source fixed-width buffer,
-you should use
-.BR zustr2stp (3)
-or
-.BR strncat (3).
-.PP
-To copy from an unterminated string within a fixed-width buffer
-into a character sequence,
-ignoring any trailing null bytes in the source fixed-width buffer,
-you should use
-.BR zustr2ustp (3).
-.\" ----- DESCRIPTION :: Measured character sequences -----------------/
-.SS Measured character sequences
-The simplest character sequence copying function is
-.BR mempcpy (3).
-It requires always knowing the length of your character sequences,
-for which structures can be used.
-It makes the code much faster,
-since you always know the length of your character sequences,
-and can do the minimal copies and length measurements.
-.BR mempcpy (3)
-copies character sequences,
-so you need to explicitly set the terminating null byte if you need a string.
-.PP
-However,
-for keeping type safety,
-it's good to add a wrapper that uses
-.I char\~*
-instead of
-.IR void\~* :
-.BR ustpcpy (3).
-.PP
-In programs that make considerable use of strings or character sequences,
-and need the best performance,
-using overlapping character sequences can make a big difference.
-It allows holding subsequences of a larger character sequence.
-while not duplicating memory
-nor using time to do a copy.
-.PP
-However, this is delicate,
-since it requires using character sequences.
-C library APIs use strings,
-so programs that use character sequences
-will have to take care of differentiating strings from character sequences.
-.PP
-To copy a measured character sequence, use
-.BR ustpcpy (3).
-.PP
-To copy a measured character sequence into a string, use
-.BR ustr2stp (3).
-.PP
-Because these functions ask for the length,
-and a string is by nature composed of a character sequence of the same length
-plus a terminating null byte,
-a string is also accepted as input.
-.\" ----- DESCRIPTION :: String vs character sequence -----------------/
-.SS String vs character sequence
-Some functions only operate on strings.
-Those require that the input
-.I src
-is a string,
-and guarantee an output string
-(even when truncation occurs).
-Functions that catenate
-also require that
-.I dst
-holds a string before the call.
-List of functions:
-.IP \[bu] 3
-.PD 0
-.BR stpcpy (3)
-.IP \[bu]
-.BR strcpy "(3), \c"
-.BR strcat (3)
-.IP \[bu]
-.BR stpecpy (3)
-.IP \[bu]
-.BR strlcpy "(3bsd), \c"
-.BR strlcat (3bsd)
-.PD
-.PP
-Other functions require an input string,
-but create a character sequence as output.
-These functions have confusing names,
-and have a long history of misuse.
-List of functions:
-.IP \[bu] 3
-.PD 0
-.BR stpncpy (3)
-.IP \[bu]
-.BR strncpy (3)
-.PD
-.PP
-Other functions operate on an input character sequence,
-and create an output string.
-Functions that catenate
-also require that
-.I dst
-holds a string before the call.
-.BR strncat (3)
-has an even more misleading name than the functions above.
-List of functions:
-.IP \[bu] 3
-.PD 0
-.BR zustr2stp (3)
-.IP \[bu]
-.BR strncat (3)
-.IP \[bu]
-.BR ustr2stp (3)
-.PD
-.PP
-Other functions operate on an input character sequence
-to create an output character sequence.
-List of functions:
-.IP \[bu] 3
-.PD 0
-.BR ustpcpy (3)
-.IP \[bu]
-.BR zustr2stp (3)
-.PD
-.\" ----- DESCRIPTION :: Functions :: ---------------------------------/
-.SS Functions
-.\" ----- DESCRIPTION :: Functions :: stpcpy(3) -----------------------/
-.TP
-.BR stpcpy (3)
-This function copies the input string into a destination string.
-The programmer is responsible for allocating a buffer large enough.
-It returns a pointer suitable for chaining.
-.\" ----- DESCRIPTION :: Functions :: strcpy(3), strcat(3) ------------/
-.TP
-.BR strcpy (3)
-.TQ
-.BR strcat (3)
-These functions copy and catenate the input string into a destination string.
-The programmer is responsible for allocating a buffer large enough.
-The return value is useless.
-.IP
-.BR stpcpy (3)
-is a faster alternative to these functions.
-.\" ----- DESCRIPTION :: Functions :: stpecpy(3) ----------------------/
-.TP
-.BR stpecpy (3)
-This function copies the input string into a destination string.
-If the destination buffer,
-limited by a pointer to its end,
-isn't large enough to hold the copy,
-the resulting string is truncated
-(but it is guaranteed to be null-terminated).
-It returns a pointer suitable for chaining.
-Truncation needs to be detected only once after the last chained call.
-.IP
-This function is not provided by any library;
-See EXAMPLES for a reference implementation.
-.\" ----- DESCRIPTION :: Functions :: strlcpy(3bsd), strlcat(3bsd) ----/
-.TP
-.BR strlcpy (3bsd)
-.TQ
-.BR strlcat (3bsd)
-These functions copy and catenate the input string into a destination string.
-If the destination buffer,
-limited by its size,
-isn't large enough to hold the copy,
-the resulting string is truncated
-(but it is guaranteed to be null-terminated).
-They return the length of the total string they tried to create.
-These functions force a SIGSEGV if the
-.I src
-pointer is not a string.
-.IP
-.BR stpecpy (3)
-is a simpler alternative to these functions.
-.\" ----- DESCRIPTION :: Functions :: stpncpy(3) ----------------------/
-.TP
-.BR stpncpy (3)
-This function copies the input string into
-a destination null-padded character sequence in a fixed-width buffer.
-If the destination buffer,
-limited by its size,
-isn't large enough to hold the copy,
-the resulting character sequence is truncated.
-Since it creates a character sequence,
-it doesn't need to write a terminating null byte.
-It's impossible to distinguish truncation by the result of the call,
-from a character sequence that just fits the destination buffer;
-truncation should be detected by
-comparing the length of the input string
-with the size of the destination buffer.
-.\" ----- DESCRIPTION :: Functions :: strncpy(3) ----------------------/
-.TP
-.BR strncpy (3)
-This function is identical to
-.BR stpncpy (3)
-except for the useless return value.
-.IP
-.BR stpncpy (3)
-is a more useful alternative to this function.
-.\" ----- DESCRIPTION :: Functions :: zustr2ustp(3) --------------------/
-.TP
-.BR zustr2ustp (3)
-This function copies the input character sequence
-contained in a null-padded wixed-width buffer,
-into a destination character sequence.
-The programmer is responsible for allocating a buffer large enough.
-It returns a pointer suitable for chaining.
-.IP
-A truncating version of this function doesn't exist,
-since the size of the original character sequence is always known,
-so it wouldn't be very useful.
-.IP
-This function is not provided by any library;
-See EXAMPLES for a reference implementation.
-.\" ----- DESCRIPTION :: Functions :: zustr2stp(3) --------------------/
-.TP
-.BR zustr2stp (3)
-This function copies the input character sequence
-contained in a null-padded wixed-width buffer,
-into a destination string.
-The programmer is responsible for allocating a buffer large enough.
-It returns a pointer suitable for chaining.
-.IP
-A truncating version of this function doesn't exist,
-since the size of the original character sequence is always known,
-so it wouldn't be very useful.
-.IP
-This function is not provided by any library;
-See EXAMPLES for a reference implementation.
-.\" ----- DESCRIPTION :: Functions :: strncat(3) ----------------------/
-.TP
-.BR strncat (3)
-Do not confuse this function with
-.BR strncpy (3);
-they are not related at all.
-.IP
-This function catenates the input character sequence
-contained in a null-padded wixed-width buffer,
-into a destination string.
-The programmer is responsible for allocating a buffer large enough.
-The return value is useless.
-.IP
-.BR zustr2stp (3)
-is a faster alternative to this function.
-.\" ----- DESCRIPTION :: Functions :: ustpcpy(3) ----------------------/
-.TP
-.BR ustpcpy (3)
-This function copies the input character sequence,
-limited by its length,
-into a destination character sequence.
-The programmer is responsible for allocating a buffer large enough.
-It returns a pointer suitable for chaining.
-.\" ----- DESCRIPTION :: Functions :: ustr2stp(3) ---------------------/
-.TP
-.BR ustr2stp (3)
-This function copies the input character sequence,
-limited by its length,
-into a destination string.
-The programmer is responsible for allocating a buffer large enough.
-It returns a pointer suitable for chaining.
-.\" ----- RETURN VALUE :: ---------------------------------------------/
-.SH RETURN VALUE
-The following functions return
-a pointer to the terminating null byte in the destination string.
-.IP \[bu] 3
-.PD 0
-.BR stpcpy (3)
-.IP \[bu]
-.BR ustr2stp (3)
-.IP \[bu]
-.BR zustr2stp (3)
-.PD
-.PP
-The following function returns
-a pointer to the terminating null byte in the destination string,
-except when truncation occurs;
-if truncation occurs,
-it returns a pointer to the end of the destination buffer.
-.IP \[bu] 3
-.BR stpecpy (3)
-.PP
-The following function returns
-a pointer to one after the last character
-in the destination character sequence;
-if truncation occurs,
-that pointer is equivalent to
-a pointer to the end of the destination buffer.
-.IP \[bu] 3
-.BR stpncpy (3)
-.PP
-The following functions return
-a pointer to one after the last character
-in the destination character sequence.
-.IP \[bu] 3
-.PD 0
-.BR zustr2ustp (3)
-.IP \[bu]
-.BR ustpcpy (3)
-.PD
-.PP
-The following functions return
-the length of the total string that they tried to create
-(as if truncation didn't occur).
-.IP \[bu] 3
-.BR strlcpy (3bsd),
-.BR strlcat (3bsd)
-.PP
-The following functions return the
-.I dst
-pointer,
-which is useless.
-.IP \[bu] 3
-.PD 0
-.BR strcpy (3),
-.BR strcat (3)
-.IP \[bu]
-.BR strncpy (3)
-.IP \[bu]
-.BR strncat (3)
-.PD
-.\" ----- NOTES :: strscpy(9) -----------------------------------------/
-.SH NOTES
-The Linux kernel has an internal function for copying strings,
-which is similar to
-.BR stpecpy (3),
-except that it can't be chained:
-.TP
-.BR strscpy (9)
-This function copies the input string into a destination string.
-If the destination buffer,
-limited by its size,
-isn't large enough to hold the copy,
-the resulting string is truncated
-(but it is guaranteed to be null-terminated).
-It returns the length of the destination string, or
-.B \-E2BIG
-on truncation.
-.IP
-.BR stpecpy (3)
-is a simpler and faster alternative to this function.
-.\" ----- CAVEATS :: --------------------------------------------------/
-.SH CAVEATS
-Don't mix chain calls to truncating and non-truncating functions.
-It is conceptually wrong
-unless you know that the first part of a copy will always fit.
-Anyway, the performance difference will probably be negligible,
-so it will probably be more clear if you use consistent semantics:
-either truncating or non-truncating.
-Calling a non-truncating function after a truncating one is necessarily wrong.
-.\" ----- BUGS :: -----------------------------------------------------/
-.SH BUGS
-All catenation functions share the same performance problem:
-.UR https://www.joelonsoftware.com/\:2001/12/11/\:back\-to\-basics/
-Shlemiel the painter
-.UE .
-.\" ----- EXAMPLES :: -------------------------------------------------/
-.SH EXAMPLES
-The following are examples of correct use of each of these functions.
-.\" ----- EXAMPLES :: stpcpy(3) ---------------------------------------/
-.TP
-.BR stpcpy (3)
-.EX
-p = buf;
-p = stpcpy(p, "Hello ");
-p = stpcpy(p, "world");
-p = stpcpy(p, "!");
-len = p \- buf;
-puts(buf);
-.EE
-.\" ----- EXAMPLES :: strcpy(3), strcat(3) ----------------------------/
-.TP
-.BR strcpy (3)
-.TQ
-.BR strcat (3)
-.EX
-strcpy(buf, "Hello ");
-strcat(buf, "world");
-strcat(buf, "!");
-len = strlen(buf);
-puts(buf);
-.EE
-.\" ----- EXAMPLES :: stpecpy(3) --------------------------------------/
-.TP
-.BR stpecpy (3)
-.EX
-end = buf + sizeof(buf);
-p = buf;
-p = stpecpy(p, end, "Hello ");
-p = stpecpy(p, end, "world");
-p = stpecpy(p, end, "!");
-if (p == end) {
- p\-\-;
- goto toolong;
-}
-len = p \- buf;
-puts(buf);
-.EE
-.\" ----- EXAMPLES :: strlcpy(3bsd), strlcat(3bsd) --------------------/
-.TP
-.BR strlcpy (3bsd)
-.TQ
-.BR strlcat (3bsd)
-.EX
-if (strlcpy(buf, "Hello ", sizeof(buf)) >= sizeof(buf))
- goto toolong;
-if (strlcat(buf, "world", sizeof(buf)) >= sizeof(buf))
- goto toolong;
-len = strlcat(buf, "!", sizeof(buf));
-if (len >= sizeof(buf))
- goto toolong;
-puts(buf);
-.EE
-.\" ----- EXAMPLES :: strscpy(9) --------------------------------------/
-.TP
-.BR strscpy (9)
-.EX
-len = strscpy(buf, "Hello world!", sizeof(buf));
-if (len == \-E2BIG)
- goto toolong;
-puts(buf);
-.EE
-.\" ----- EXAMPLES :: stpncpy(3) --------------------------------------/
-.TP
-.BR stpncpy (3)
-.EX
-p = stpncpy(buf, "Hello world!", sizeof(buf));
-if (sizeof(buf) < strlen("Hello world!"))
- goto toolong;
-len = p \- buf;
-for (size_t i = 0; i < sizeof(buf); i++)
- putchar(buf[i]);
-.EE
-.\" ----- EXAMPLES :: strncpy(3) --------------------------------------/
-.TP
-.BR strncpy (3)
-.EX
-strncpy(buf, "Hello world!", sizeof(buf));
-if (sizeof(buf) < strlen("Hello world!"))
- goto toolong;
-len = strnlen(buf, sizeof(buf));
-for (size_t i = 0; i < sizeof(buf); i++)
- putchar(buf[i]);
-.EE
-.\" ----- EXAMPLES :: zustr2ustp(3) -----------------------------------/
-.TP
-.BR zustr2ustp (3)
-.EX
-p = buf;
-p = zustr2ustp(p, "Hello ", 6);
-p = zustr2ustp(p, "world", 42); // Padding null bytes ignored.
-p = zustr2ustp(p, "!", 1);
-len = p \- buf;
-printf("%.*s\en", (int) len, buf);
-.EE
-.\" ----- EXAMPLES :: zustr2stp(3) ------------------------------------/
-.TP
-.BR zustr2stp (3)
-.EX
-p = buf;
-p = zustr2stp(p, "Hello ", 6);
-p = zustr2stp(p, "world", 42); // Padding null bytes ignored.
-p = zustr2stp(p, "!", 1);
-len = p \- buf;
-puts(buf);
-.EE
-.\" ----- EXAMPLES :: strncat(3) --------------------------------------/
-.TP
-.BR strncat (3)
-.EX
-buf[0] = \[aq]\e0\[aq]; // There's no 'cpy' function to this 'cat'.
-strncat(buf, "Hello ", 6);
-strncat(buf, "world", 42); // Padding null bytes ignored.
-strncat(buf, "!", 1);
-len = strlen(buf);
-puts(buf);
-.EE
-.\" ----- EXAMPLES :: ustpcpy(3) --------------------------------------/
-.TP
-.BR ustpcpy (3)
-.EX
-p = buf;
-p = ustpcpy(p, "Hello ", 6);
-p = ustpcpy(p, "world", 5);
-p = ustpcpy(p, "!", 1);
-len = p \- buf;
-printf("%.*s\en", (int) len, buf);
-.EE
-.\" ----- EXAMPLES :: ustr2stp(3) -------------------------------------/
-.TP
-.BR ustr2stp (3)
-.EX
-p = buf;
-p = ustr2stp(p, "Hello ", 6);
-p = ustr2stp(p, "world", 5);
-p = ustr2stp(p, "!", 1);
-len = p \- buf;
-puts(buf);
-.EE
-.\" ----- EXAMPLES :: Implementations :: ------------------------------/
-.SS Implementations
-Here are reference implementations for functions not provided by libc.
-.PP
-.in +4n
-.EX
-/* This code is in the public domain. */
-\&
-.\" ----- EXAMPLES :: Implementations :: stpecpy(3) -------------------/
-char *
-.IR stpecpy "(char *dst, char end[0], const char *restrict src)"
-{
- char *p;
-\&
- if (dst == NULL)
- return NULL;
- if (dst == end)
- return end;
-\&
- p = memccpy(dst, src, \[aq]\e0\[aq], end \- dst);
- if (p != NULL)
- return p \- 1;
-\&
- /* truncation detected */
- end[\-1] = \[aq]\e0\[aq];
- return end;
-}
-\&
-.\" ----- EXAMPLES :: Implementations :: zustr2ustp(3) ----------------/
-char *
-.IR zustr2ustp "(char *restrict dst, const char *restrict src, size_t sz)"
-{
- return ustpcpy(dst, src, strnlen(src, sz));
-}
-\&
-.\" ----- EXAMPLES :: Implementations :: zustr2stp(3) -----------------/
-char *
-.IR zustr2stp "(char *restrict dst, const char *restrict src, size_t sz)"
-{
- char *p;
-\&
- p = zustr2ustp(dst, src, sz);
- *p = \[aq]\e0\[aq];
-\&
- return p;
-}
-\&
-.\" ----- EXAMPLES :: Implementations :: ustpcpy(3) -------------------/
-char *
-.IR ustpcpy "(char *restrict dst, const char *restrict src, size_t len)"
-{
- return mempcpy(dst, src, len);
-}
-\&
-.\" ----- EXAMPLES :: Implementations :: ustr2stp(3) ------------------/
-char *
-.IR ustr2stp "(char *restrict dst, const char *restrict src, size_t len)"
-{
- char *p;
-\&
- p = ustpcpy(dst, src, len);
- *p = \[aq]\e0\[aq];
-\&
- return p;
-}
-.EE
-.in
-.\" ----- SEE ALSO :: -------------------------------------------------/
-.SH SEE ALSO
-.BR bzero (3),
-.BR memcpy (3),
-.BR memccpy (3),
-.BR mempcpy (3),
-.BR stpcpy (3),
-.BR strlcpy (3bsd),
-.BR strncat (3),
-.BR stpncpy (3),
-.BR string (3)
diff --git a/man7/suffixes.7 b/man7/suffixes.7
deleted file mode 100644
index 5295b4015..000000000
--- a/man7/suffixes.7
+++ /dev/null
@@ -1,265 +0,0 @@
-'\" t
-.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Modified Sat Jul 24 17:35:15 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Sun Feb 19 22:02:32 1995 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Tue Oct 22 23:28:12 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified Sun Jan 26 21:56:56 1997 by Ralph Schleicher
-.\" <rs@purple.UL.BaWue.DE>
-.\" Modified Mon Jun 16 20:24:58 1997 by Nicolás Lichtmaier <nick@debian.org>
-.\" Modified Sun Oct 18 22:11:28 1998 by Joseph S. Myers <jsm28@cam.ac.uk>
-.\" Modified Mon Nov 16 17:24:47 1998 by Andries Brouwer <aeb@cwi.nl>
-.\" Modified Thu Nov 16 23:28:25 2000 by David A. Wheeler
-.\" <dwheeler@dwheeler.com>
-.\"
-.TH SUFFIXES 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-suffixes \- list of file suffixes
-.SH DESCRIPTION
-It is customary to indicate the contents of a file with the file suffix,
-which (typically) consists of a period, followed by one or more letters.
-Many standard utilities, such as compilers, use this to recognize the type of
-file they are dealing with.
-The
-.BR make (1)
-utility is driven by rules based on file suffix.
-.PP
-Following is a list of suffixes which are likely to be found on a
-Linux system.
-.PP
-.TS
-l | l
-_ | _
-lI | l .
-Suffix File type
-\&,v files for RCS (Revision Control System)
-\&- backup file
-\&.C C++ source code, equivalent to \fI.cc\fP
-\&.F Fortran source with \fBcpp\fP(1) directives
-\& or file compressed using freeze
-\&.S assembler source with \fBcpp\fP(1) directives
-\&.Y file compressed using yabba
-\&.Z file compressed using \fBcompress\fP(1)
-\&.[0\-9]+gf TeX generic font files
-\&.[0\-9]+pk TeX packed font files
-\&.[1\-9] manual page for the corresponding section
-\&.[1\-9][a-z] manual page for section plus subsection
-\&.a static object code library
-\&.ad X application default resource file
-\&.ada Ada source (may be body, spec, or combination)
-\&.adb Ada body source
-\&.ads Ada spec source
-\&.afm PostScript font metrics
-\&.al Perl autoload file
-\&.am \fBautomake\fP(1) input file
-\&.arc \fBarc\fP(1) archive
-\&.arj \fBarj\fP(1) archive
-\&.asc PGP ASCII-armored data
-\&.asm (GNU) assembler source file
-\&.au Audio sound file
-\&.aux LaTeX auxiliary file
-\&.avi (msvideo) movie
-\&.awk AWK language program
-\&.b LILO boot loader image
-\&.bak backup file
-\&.bash \fBbash\fP(1) shell script
-\&.bb basic block list data produced by
-\& gcc \-ftest\-coverage
-\&.bbg basic block graph data produced by
-\& gcc \-ftest\-coverage
-\&.bbl BibTeX output
-\&.bdf X font file
-\&.bib TeX bibliographic database, BibTeX input
-\&.bm bitmap source
-\&.bmp bitmap
-\&.bz2 file compressed using \fBbzip2\fP(1)
-\&.c C source
-\&.cat message catalog files
-\&.cc C++ source
-\&.cf configuration file
-\&.cfg configuration file
-\&.cgi WWW content generating script or program
-\&.cls LaTeX Class definition
-\&.class Java compiled byte-code
-\&.conf configuration file
-\&.config configuration file
-\&.cpp equivalent to \fI.cc\fR
-\&.csh \fBcsh\fP(1) shell script
-\&.cxx equivalent to \fI.cc\fR
-\&.dat data file
-\&.deb Debian software package
-\&.def Modula-2 source for definition modules
-\&.def other definition files
-\&.desc initial part of mail message unpacked with
-\& \fBmunpack\fP(1)
-\&.diff file differences (\fBdiff\fP(1) command output)
-\&.dir dbm data base directory file
-\&.doc documentation file
-\&.dsc Debian Source Control (source package)
-\&.dtx LaTeX package source file
-\&.dvi TeX's device independent output
-\&.el Emacs-Lisp source
-\&.elc compiled Emacs-Lisp source
-\&.eps encapsulated PostScript
-\&.exp Expect source code
-\&.f Fortran source
-\&.f77 Fortran 77 source
-\&.f90 Fortran 90 source
-\&.fas precompiled Common-Lisp
-\&.fi Fortran include files
-\&.fig FIG image file (used by \fBxfig\fP(1))
-\&.fmt TeX format file
-\&.gif Compuserve Graphics Image File format
-\&.gmo GNU format message catalog
-\&.gsf Ghostscript fonts
-\&.gz file compressed using \fBgzip\fP(1)
-\&.h C or C++ header files
-\&.help help file
-\&.hf equivalent to \fI.help\fP
-\&.hlp equivalent to \fI.help\fP
-\&.htm poor man's \fI.html\fP
-\&.html HTML document used with the World Wide Web
-\&.hqx 7-bit encoded Macintosh file
-\&.i C source after preprocessing
-\&.icon bitmap source
-\&.idx reference or datum-index file for hypertext
-\& or database system
-\&.image bitmap source
-\&.in configuration template, especially for GNU Autoconf
-\&.info files for the Emacs info browser
-\&.info-[0\-9]+ split info files
-\&.ins LaTeX package install file for docstrip
-\&.itcl itcl source code;
-\& itcl ([incr Tcl]) is an OO extension of tcl
-\&.java a Java source file
-\&.jpeg Joint Photographic Experts Group format
-\&.jpg poor man's \fI.jpeg\fP
-\&.js JavaScript source code
-\&.jsx JSX (JavaScript XML-like extension) source code
-\&.kmap \fBlyx\fP(1) keymap
-\&.l equivalent to \fI.lex\fP or \fI.lisp\fP
-\&.lex \fBlex\fP(1) or \fBflex\fP(1) files
-\&.lha lharc archive
-\&.lib Common-Lisp library
-\&.lisp Lisp source
-\&.ln files for use with \fBlint\fP(1)
-\&.log log file, in particular produced by TeX
-\&.lsm Linux Software Map entry
-\&.lsp Common-Lisp source
-\&.lzh lharc archive
-\&.m Objective-C source code
-\&.m4 \fBm4\fP(1) source
-\&.mac macro files for various programs
-\&.man manual page (usually source rather than formatted)
-\&.map map files for various programs
-\&.me Nroff source using the me macro package
-\&.mf Metafont (font generator for TeX) source
-\&.mgp MagicPoint file
-\&.mm sources for \fBgroff\fP(1) in mm - format
-\&.mo Message catalog binary file
-\&.mod Modula-2 source for implementation modules
-\&.mov (quicktime) movie
-\&.mp Metapost source
-\&.mp2 MPEG Layer 2 (audio) file
-\&.mp3 MPEG Layer 3 (audio) file
-\&.mpeg movie file
-\&.o object file
-\&.old old or backup file
-\&.orig backup (original) version of a file, from \fBpatch\fP(1)
-\&.out output file, often executable program (a.out)
-\&.p Pascal source
-\&.pag dbm data base data file
-\&.patch file differences for \fBpatch\fP(1)
-\&.pbm portable bitmap format
-\&.pcf X11 font files
-\&.pdf Adobe Portable Data Format
-\& (use Acrobat/\fBacroread\fP or \fBxpdf\fP)
-\&.perl Perl source (see .ph, .pl, and .pm)
-\&.pfa PostScript font definition files, ASCII format
-\&.pfb PostScript font definition files, binary format
-\&.pgm portable greymap format
-\&.pgp PGP binary data
-\&.ph Perl header file
-\&.php PHP program file
-\&.php3 PHP3 program file
-\&.pid File to store daemon PID (e.g., crond.pid)
-\&.pl TeX property list file or Perl library file
-\&.pm Perl module
-\&.png Portable Network Graphics file
-\&.po Message catalog source
-\&.pod \fBperldoc\fP(1) file
-\&.ppm portable pixmap format
-\&.pr bitmap source
-\&.ps PostScript file
-\&.py Python source
-\&.pyc compiled python
-\&.qt quicktime movie
-\&.r RATFOR source (obsolete)
-\&.rej patches that \fBpatch\fP(1) couldn't apply
-\&.rpm RPM software package
-\&.rtf Rich Text Format file
-\&.rules rules for something
-\&.s assembler source
-\&.sa stub libraries for a.out shared libraries
-\&.sc \fBsc\fP(1) spreadsheet commands
-\&.scm Scheme source code
-\&.sed sed source file
-\&.sgml SGML source file
-\&.sh \fBsh\fP(1) scripts
-\&.shar archive created by the \fBshar\fP(1) utility
-\&.shtml HTML using Server Side Includes
-\&.so Shared library or dynamically loadable object
-\&.sql SQL source
-\&.sqml SQML schema or query program
-\&.sty LaTeX style files
-\&.sym Modula-2 compiled definition modules
-\&.tar archive created by the \fBtar\fP(1) utility
-\&.tar.Z tar(1) archive compressed with \fBcompress\fP(1)
-\&.tar.bz2 tar(1) archive compressed with \fBbzip2\fP(1)
-\&.tar.gz tar(1) archive compressed with \fBgzip\fP(1)
-\&.taz tar(1) archive compressed with \fBcompress\fP(1)
-\&.tcl tcl source code
-\&.tex TeX or LaTeX source
-\&.texi equivalent to \fI.texinfo\fP
-\&.texinfo Texinfo documentation source
-\&.text text file
-\&.tfm TeX font metric file
-\&.tgz tar archive compressed with \fBgzip\fP(1)
-\&.tif poor man's \fI.tiff\fP
-\&.tiff Tagged Image File Format
-\&.tk tcl/tk script
-\&.tmp temporary file
-\&.tmpl template files
-\&.ts TypeScript source code
-\&.tsx TypeScript with JSX source code (\fI.ts\fP + \fI.jsx\fP)
-\&.txt equivalent to \fI.text\fP
-\&.uu equivalent to \fI.uue\fP
-\&.uue binary file encoded with \fBuuencode\fP(1)
-\&.vf TeX virtual font file
-\&.vpl TeX virtual property list file
-\&.w Silvio Levi's CWEB
-\&.wav wave sound file
-\&.web Donald Knuth's WEB
-\&.wml Source file for Web Meta Language
-\&.xbm X11 bitmap source
-\&.xcf GIMP graphic
-\&.xml eXtended Markup Language file
-\&.xpm X11 pixmap source
-\&.xs Perl xsub file produced by h2xs
-\&.xsl XSL stylesheet
-\&.y \fByacc\fP(1) or \fBbison\fP(1) (parser generator) files
-\&.z File compressed using \fBpack\fP(1) (or an old \fBgzip\fP(1))
-\&.zip \fBzip\fP(1) archive
-\&.zoo \fBzoo\fP(1) archive
-\&\[ti] Emacs or \fBpatch\fP(1) backup file
-\&rc startup (`run control') file, e.g., \fI.newsrc\fP
-.TE
-.SH STANDARDS
-General UNIX conventions.
-.SH BUGS
-This list is not exhaustive.
-.SH SEE ALSO
-.BR file (1),
-.BR make (1)
diff --git a/man7/svipc.7 b/man7/svipc.7
deleted file mode 100644
index cc543f5c3..000000000
--- a/man7/svipc.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/sysvipc.7
diff --git a/man7/symlink.7 b/man7/symlink.7
deleted file mode 100644
index caf844ed4..000000000
--- a/man7/symlink.7
+++ /dev/null
@@ -1,564 +0,0 @@
-.\" Copyright (c) 1992, 1993, 1994
-.\" The Regents of the University of California. All rights reserved.
-.\" and Copyright (C) 2008, 2014 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: BSD-3-Clause
-.\"
-.\" @(#)symlink.7 8.3 (Berkeley) 3/31/94
-.\" $FreeBSD: src/bin/ln/symlink.7,v 1.30 2005/02/13 22:25:09 ru Exp $
-.\"
-.\" 2008-06-11, mtk, Taken from FreeBSD 6.2 and heavily edited for
-.\" specific Linux details, improved readability, and man-pages style.
-.\"
-.TH symlink 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-symlink \- symbolic link handling
-.SH DESCRIPTION
-Symbolic links are files that act as pointers to other files.
-To understand their behavior, you must first understand how hard links
-work.
-.PP
-A hard link to a file is indistinguishable from the original file because
-it is a reference to the object underlying the original filename.
-(To be precise: each of the hard links to a file is a reference to
-the same
-.IR "inode number" ,
-where an inode number is an index into the inode table,
-which contains metadata about all files on a filesystem.
-See
-.BR stat (2).)
-Changes to a file are independent of the name used to reference the file.
-Hard links may not refer to directories
-(to prevent the possibility of loops within the filesystem tree,
-which would confuse many programs)
-and may not refer to files on different filesystems
-(because inode numbers are not unique across filesystems).
-.PP
-A symbolic link is a special type of file whose contents are a string
-that is the pathname of another file, the file to which the link refers.
-(The contents of a symbolic link can be read using
-.BR readlink (2).)
-In other words, a symbolic link is a pointer to another name,
-and not to an underlying object.
-For this reason, symbolic links may refer to directories and may cross
-filesystem boundaries.
-.PP
-There is no requirement that the pathname referred to by a symbolic link
-should exist.
-A symbolic link that refers to a pathname that does not exist is said
-to be a
-.IR "dangling link" .
-.PP
-Because a symbolic link and its referenced object coexist in the filesystem
-name space, confusion can arise in distinguishing between the link itself
-and the referenced object.
-On historical systems,
-commands and system calls adopted their own link-following
-conventions in a somewhat ad-hoc fashion.
-Rules for a more uniform approach,
-as they are implemented on Linux and other systems,
-are outlined here.
-It is important that site-local applications also conform to these rules,
-so that the user interface can be as consistent as possible.
-.\"
-.SS Magic links
-There is a special class of symbolic-link-like objects
-known as "magic links", which
-can be found in certain pseudofilesystems such as
-.BR proc (5)
-(examples include
-.IR /proc/ pid /exe
-and
-.IR /proc/ pid /fd/ *).
-Unlike normal symbolic links, magic links are not resolved through
-pathname-expansion, but instead act as direct references to the kernel's own
-representation of a file handle.
-As such, these magic links allow users to
-access files which cannot be referenced with normal paths (such as unlinked
-files still referenced by a running program ).
-.PP
-Because they can bypass ordinary
-.BR mount_namespaces (7)-based
-restrictions,
-magic links have been used as attack vectors in various exploits.
-.\"
-.SS Symbolic link ownership, permissions, and timestamps
-The owner and group of an existing symbolic link can be changed
-using
-.BR lchown (2).
-The ownership of a symbolic link matters
-when the link is being removed or renamed in a directory that
-has the sticky bit set (see
-.BR inode (7)),
-and when the
-.I fs.protected_symlinks
-sysctl is set (see
-.BR proc (5)).
-.PP
-The last access and last modification timestamps
-of a symbolic link can be changed using
-.BR utimensat (2)
-or
-.BR lutimes (3).
-.PP
-.\" Linux does not currently implement an lchmod(2).
-On Linux, the permissions of an ordinary symbolic link are not used in any
-operations; the permissions are always 0777 (read, write, and execute for all
-user categories), and can't be changed.
-.PP
-However, magic links do not follow this rule.
-They can have a non-0777 mode,
-though this mode is not currently used in any permission checks.
-.\" .PP
-.\" The
-.\" 4.4BSD
-.\" system differs from historical
-.\" 4BSD
-.\" systems in that the system call
-.\" .BR chown (2)
-.\" has been changed to follow symbolic links.
-.\" The
-.\" .BR lchown (2)
-.\" system call was added later when the limitations of the new
-.\" .BR chown (2)
-.\" became apparent.
-.SS Obtaining a file descriptor that refers to a symbolic link
-Using the combination of the
-.B O_PATH
-and
-.B O_NOFOLLOW
-flags to
-.BR open (2)
-yields a file descriptor that can be passed as the
-.I dirfd
-argument in system calls such as
-.BR fstatat (2),
-.BR fchownat (2),
-.BR fchmodat (2),
-.BR linkat (2),
-and
-.BR readlinkat (2),
-in order to operate on the symbolic link itself
-(rather than the file to which it refers).
-.PP
-By default
-(i.e., if the
-.B AT_SYMLINK_FOLLOW
-flag is not specified), if
-.BR name_to_handle_at (2)
-is applied to a symbolic link, it yields a handle for the symbolic link
-(rather than the file to which it refers).
-One can then obtain a file descriptor for the symbolic link
-(rather than the file to which it refers)
-by specifying the
-.B O_PATH
-flag in a subsequent call to
-.BR open_by_handle_at (2).
-Again, that file descriptor can be used in the
-aforementioned system calls to operate on the symbolic link itself.
-.SS Handling of symbolic links by system calls and commands
-Symbolic links are handled either by operating on the link itself,
-or by operating on the object referred to by the link.
-In the latter case,
-an application or system call is said to
-.I follow
-the link.
-Symbolic links may refer to other symbolic links,
-in which case the links are dereferenced until an object that is
-not a symbolic link is found,
-a symbolic link that refers to a file which does not exist is found,
-or a loop is detected.
-(Loop detection is done by placing an upper limit on the number of
-links that may be followed, and an error results if this limit is
-exceeded.)
-.PP
-There are three separate areas that need to be discussed.
-They are as follows:
-.IP \[bu] 3
-Symbolic links used as filename arguments for system calls.
-.IP \[bu]
-Symbolic links specified as command-line arguments to utilities that
-are not traversing a file tree.
-.IP \[bu]
-Symbolic links encountered by utilities that are traversing a file tree
-(either specified on the command line or encountered as part of the
-file hierarchy walk).
-.PP
-Before describing the treatment of symbolic links by system calls and commands,
-we require some terminology.
-Given a pathname of the form
-.IR a/b/c ,
-the part preceding the final slash (i.e.,
-.IR a/b )
-is called the
-.I dirname
-component, and the part following the final slash (i.e.,
-.IR c )
-is called the
-.I basename
-component.
-.\"
-.SS Treatment of symbolic links in system calls
-The first area is symbolic links used as filename arguments for
-system calls.
-.PP
-The treatment of symbolic links within a pathname passed to
-a system call is as follows:
-.IP (1) 5
-Within the dirname component of a pathname,
-symbolic links are always followed in nearly every system call.
-(This is also true for commands.)
-The one exception is
-.BR openat2 (2),
-which provides flags that can be used to explicitly
-prevent following of symbolic links in the dirname component.
-.IP (2)
-Except as noted below,
-all system calls follow symbolic links
-in the basename component of a pathname.
-For example, if there were a symbolic link
-.I slink
-which pointed to a file named
-.IR afile ,
-the system call
-.I "open(""slink"" ...\&)"
-would return a file descriptor referring to the file
-.IR afile .
-.PP
-Various system calls do not follow links in
-the basename component of a pathname,
-and operate on the symbolic link itself.
-They are:
-.BR lchown (2),
-.BR lgetxattr (2),
-.BR llistxattr (2),
-.BR lremovexattr (2),
-.BR lsetxattr (2),
-.BR lstat (2),
-.BR readlink (2),
-.BR rename (2),
-.BR rmdir (2),
-and
-.BR unlink (2).
-.PP
-Certain other system calls optionally follow symbolic links
-in the basename component of a pathname.
-They are:
-.BR faccessat (2),
-.\" Maybe one day: .BR fchownat (2)
-.BR fchownat (2),
-.BR fstatat (2),
-.BR linkat (2),
-.BR name_to_handle_at (2),
-.BR open (2),
-.BR openat (2),
-.BR open_by_handle_at (2),
-and
-.BR utimensat (2);
-see their manual pages for details.
-Because
-.BR remove (3)
-is an alias for
-.BR unlink (2),
-that library function also does not follow symbolic links.
-When
-.BR rmdir (2)
-is applied to a symbolic link, it fails with the error
-.BR ENOTDIR .
-.PP
-.BR link (2)
-warrants special discussion.
-POSIX.1-2001 specifies that
-.BR link (2)
-should dereference
-.I oldpath
-if it is a symbolic link.
-However, Linux does not do this.
-(By default, Solaris is the same,
-but the POSIX.1-2001 specified behavior can be obtained with
-suitable compiler options.)
-POSIX.1-2008 changed the specification to allow
-either behavior in an implementation.
-.SS Commands not traversing a file tree
-The second area is symbolic links, specified as command-line
-filename arguments, to commands which are not traversing a file tree.
-.PP
-Except as noted below, commands follow symbolic links named as
-command-line arguments.
-For example, if there were a symbolic link
-.I slink
-which pointed to a file named
-.IR afile ,
-the command
-.I "cat slink"
-would display the contents of the file
-.IR afile .
-.PP
-It is important to realize that this rule includes commands which may
-optionally traverse file trees; for example, the command
-.I "chown file"
-is included in this rule, while the command
-.IR "chown\ \-R file" ,
-which performs a tree traversal, is not.
-(The latter is described in the third area, below.)
-.PP
-If it is explicitly intended that the command operate on the symbolic
-link instead of following the symbolic link\[em]for example, it is desired that
-.I "chown slink"
-change the ownership of the file that
-.I slink
-is, whether it is a symbolic link or not\[em]then the
-.I \-h
-option should be used.
-In the above example,
-.I "chown root slink"
-would change the ownership of the file referred to by
-.IR slink ,
-while
-.I "chown\ \-h root slink"
-would change the ownership of
-.I slink
-itself.
-.PP
-There are some exceptions to this rule:
-.IP \[bu] 3
-The
-.BR mv (1)
-and
-.BR rm (1)
-commands do not follow symbolic links named as arguments,
-but respectively attempt to rename and delete them.
-(Note, if the symbolic link references a file via a relative path,
-moving it to another directory may very well cause it to stop working,
-since the path may no longer be correct.)
-.IP \[bu]
-The
-.BR ls (1)
-command is also an exception to this rule.
-For compatibility with historic systems (when
-.BR ls (1)
-is not doing a tree walk\[em]that is,
-.I \-R
-option is not specified),
-the
-.BR ls (1)
-command follows symbolic links named as arguments if the
-.I \-H
-or
-.I \-L
-option is specified,
-or if the
-.IR \-F ,
-.IR \-d ,
-or
-.I \-l
-options are not specified.
-(The
-.BR ls (1)
-command is the only command where the
-.I \-H
-and
-.I \-L
-options affect its behavior even though it is not doing a walk of
-a file tree.)
-.IP \[bu]
-The
-.BR file (1)
-command is also an exception to this rule.
-The
-.BR file (1)
-command does not follow symbolic links named as argument by default.
-The
-.BR file (1)
-command does follow symbolic links named as argument if the
-.I \-L
-option is specified.
-.\"
-.\"The 4.4BSD system differs from historical 4BSD systems in that the
-.\".BR chown (1)
-.\"and
-.\".BR chgrp (1)
-.\"commands follow symbolic links specified on the command line.
-.SS Commands traversing a file tree
-The following commands either optionally or always traverse file trees:
-.BR chgrp (1),
-.BR chmod (1),
-.BR chown (1),
-.BR cp (1),
-.BR du (1),
-.BR find (1),
-.BR ls (1),
-.BR pax (1),
-.BR rm (1),
-and
-.BR tar (1).
-.PP
-It is important to realize that the following rules apply equally to
-symbolic links encountered during the file tree traversal and symbolic
-links listed as command-line arguments.
-.PP
-The \fIfirst rule\fP applies to symbolic links that reference files other
-than directories.
-Operations that apply to symbolic links are performed on the links
-themselves, but otherwise the links are ignored.
-.PP
-The command
-.I "rm\ \-r slink directory"
-will remove
-.IR slink ,
-as well as any symbolic links encountered in the tree traversal of
-.IR directory ,
-because symbolic links may be removed.
-In no case will
-.BR rm (1)
-affect the file referred to by
-.IR slink .
-.PP
-The \fIsecond rule\fP applies to symbolic links that refer to directories.
-Symbolic links that refer to directories are never followed by default.
-This is often referred to as a "physical" walk, as opposed to a "logical"
-walk (where symbolic links that refer to directories are followed).
-.PP
-Certain conventions are (should be) followed as consistently as
-possible by commands that perform file tree walks:
-.IP \[bu] 3
-A command can be made to follow
-any symbolic links named on the command line,
-regardless of the type of file they reference, by specifying the
-.I \-H
-(for "half-logical") flag.
-This flag is intended to make the command-line name space look
-like the logical name space.
-(Note, for commands that do not always do file tree traversals, the
-.I \-H
-flag will be ignored if the
-.I \-R
-flag is not also specified.)
-.IP
-For example, the command
-.I "chown\ \-HR user slink"
-will traverse the file hierarchy rooted in the file pointed to by
-.IR slink .
-Note, the
-.I \-H
-is not the same as the previously discussed
-.I \-h
-flag.
-The
-.I \-H
-flag causes symbolic links specified on the command line to be
-dereferenced for the purposes of both the action to be performed
-and the tree walk, and it is as if the user had specified the
-name of the file to which the symbolic link pointed.
-.IP \[bu]
-A command can be made to
-follow any symbolic links named on the command line,
-as well as any symbolic links encountered during the traversal,
-regardless of the type of file they reference, by specifying the
-.I \-L
-(for "logical") flag.
-This flag is intended to make the entire name space look like
-the logical name space.
-(Note, for commands that do not always do file tree traversals, the
-.I \-L
-flag will be ignored if the
-.I \-R
-flag is not also specified.)
-.IP
-For example, the command
-.I "chown\ \-LR user slink"
-will change the owner of the file referred to by
-.IR slink .
-If
-.I slink
-refers to a directory,
-.B chown
-will traverse the file hierarchy rooted in the directory that it
-references.
-In addition, if any symbolic links are encountered in any file tree that
-.B chown
-traverses, they will be treated in the same fashion as
-.IR slink .
-.IP \[bu]
-A command can be made to
-provide the default behavior by specifying the
-.I \-P
-(for "physical") flag.
-This flag is intended to make the entire name space look like the
-physical name space.
-.PP
-For commands that do not by default do file tree traversals, the
-.IR \-H ,
-.IR \-L ,
-and
-.I \-P
-flags are ignored if the
-.I \-R
-flag is not also specified.
-In addition, you may specify the
-.IR \-H ,
-.IR \-L ,
-and
-.I \-P
-options more than once;
-the last one specified determines the command's behavior.
-This is intended to permit you to alias commands to behave one way
-or the other, and then override that behavior on the command line.
-.PP
-The
-.BR ls (1)
-and
-.BR rm (1)
-commands have exceptions to these rules:
-.IP \[bu] 3
-The
-.BR rm (1)
-command operates on the symbolic link, and not the file it references,
-and therefore never follows a symbolic link.
-The
-.BR rm (1)
-command does not support the
-.IR \-H ,
-.IR \-L ,
-or
-.I \-P
-options.
-.IP \[bu]
-To maintain compatibility with historic systems,
-the
-.BR ls (1)
-command acts a little differently.
-If you do not specify the
-.IR \-F ,
-.IR \-d ,
-or
-.I \-l
-options,
-.BR ls (1)
-will follow symbolic links specified on the command line.
-If the
-.I \-L
-flag is specified,
-.BR ls (1)
-follows all symbolic links,
-regardless of their type,
-whether specified on the command line or encountered in the tree walk.
-.SH SEE ALSO
-.BR chgrp (1),
-.BR chmod (1),
-.BR find (1),
-.BR ln (1),
-.BR ls (1),
-.BR mv (1),
-.BR namei (1),
-.BR rm (1),
-.BR lchown (2),
-.BR link (2),
-.BR lstat (2),
-.BR readlink (2),
-.BR rename (2),
-.BR symlink (2),
-.BR unlink (2),
-.BR utimensat (2),
-.BR lutimes (3),
-.BR path_resolution (7)
diff --git a/man7/system_data_types.7 b/man7/system_data_types.7
deleted file mode 100644
index 1840a40fa..000000000
--- a/man7/system_data_types.7
+++ /dev/null
@@ -1,320 +0,0 @@
-.\" Copyright (c) 2020 by Alejandro Colomar <alx@kernel.org>
-.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH system_data_types 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-system_data_types \- overview of system data types
-.SH DESCRIPTION
-.\" Layout:
-.\" A list of type names (the struct/union keyword will be omitted).
-.\" Each entry will have the following parts:
-.\" * Include (see NOTES)
-.\"
-.\" * Definition (no "Definition" header)
-.\" Only struct/union types will have definition;
-.\" typedefs will remain opaque.
-.\"
-.\" * Description (no "Description" header)
-.\" A few lines describing the type.
-.\"
-.\" * Versions (optional)
-.\"
-.\" * Conforming to (see NOTES)
-.\" Format: CXY and later; POSIX.1-XXXX and later.
-.\"
-.\" * Notes (optional)
-.\"
-.\" * Bugs (if any)
-.\"
-.\" * See also
-.\"------------------------------------- aiocb ------------------------/
-.\"------------------------------------- blkcnt_t ---------------------/
-.\"------------------------------------- blksize_t --------------------/
-.\"------------------------------------- cc_t -------------------------/
-.\"------------------------------------- clock_t ----------------------/
-.\"------------------------------------- clockid_t --------------------/
-.\"------------------------------------- dev_t ------------------------/
-.\"------------------------------------- div_t ------------------------/
-.\"------------------------------------- double_t ---------------------/
-.\"------------------------------------- fd_set -----------------------/
-.\"------------------------------------- fenv_t -----------------------/
-.\"------------------------------------- fexcept_t --------------------/
-.\"------------------------------------- FILE -------------------------/
-.\"------------------------------------- float_t ----------------------/
-.\"------------------------------------- gid_t ------------------------/
-.\"------------------------------------- id_t -------------------------/
-.\"------------------------------------- imaxdiv_t --------------------/
-.\"------------------------------------- intmax_t ---------------------/
-.\"------------------------------------- intN_t -----------------------/
-.\"------------------------------------- intptr_t ---------------------/
-.\"------------------------------------- lconv ------------------------/
-.\"------------------------------------- ldiv_t -----------------------/
-.\"------------------------------------- lldiv_t ----------------------/
-.\"------------------------------------- mode_t -----------------------/
-.\"------------------------------------- off64_t ----------------------/
-.\"------------------------------------- off_t ------------------------/
-.\"------------------------------------- pid_t ------------------------/
-.\"------------------------------------- ptrdiff_t --------------------/
-.\"------------------------------------- regex_t ----------------------/
-.\"------------------------------------- regmatch_t -------------------/
-.\"------------------------------------- regoff_t ---------------------/
-.\"------------------------------------- sigevent ---------------------/
-.TP
-.I sigevent
-.RS
-.IR Include :
-.IR <signal.h> .
-Alternatively,
-.IR <aio.h> ,
-.IR <mqueue.h> ,
-or
-.IR <time.h> .
-.PP
-.EX
-struct sigevent {
- int sigev_notify; /* Notification type */
- int sigev_signo; /* Signal number */
- union sigval sigev_value; /* Signal value */
- void (*sigev_notify_function)(union sigval);
- /* Notification function */
- pthread_attr_t *sigev_notify_attributes;
- /* Notification attributes */
-};
-.EE
-.PP
-For further details about this type, see
-.BR sigevent (7).
-.PP
-.IR Versions :
-.I <aio.h>
-and
-.I <time.h>
-define
-.I sigevent
-since POSIX.1-2008.
-.PP
-.IR "Conforming to" :
-POSIX.1-2001 and later.
-.PP
-.IR "See also" :
-.BR timer_create (2),
-.BR getaddrinfo_a (3),
-.BR lio_listio (3),
-.BR mq_notify (3)
-.PP
-See also the
-.I aiocb
-structure in this page.
-.RE
-.\"------------------------------------- siginfo_t --------------------/
-.TP
-.I siginfo_t
-.RS
-.IR Include :
-.IR <signal.h> .
-Alternatively,
-.IR <sys/wait.h> .
-.PP
-.EX
-typedef struct {
- int si_signo; /* Signal number */
- int si_code; /* Signal code */
- pid_t si_pid; /* Sending process ID */
- uid_t si_uid; /* Real user ID of sending process */
- void *si_addr; /* Address of faulting instruction */
- int si_status; /* Exit value or signal */
- union sigval si_value; /* Signal value */
-} siginfo_t;
-.EE
-.PP
-Information associated with a signal.
-For further details on this structure
-(including additional, Linux-specific fields), see
-.BR sigaction (2).
-.PP
-.IR "Conforming to" :
-POSIX.1-2001 and later.
-.PP
-.IR "See also" :
-.BR pidfd_send_signal (2),
-.BR rt_sigqueueinfo (2),
-.BR sigaction (2),
-.BR sigwaitinfo (2),
-.BR psiginfo (3)
-.RE
-.\"------------------------------------- sigset_t ---------------------/
-.TP
-.I sigset_t
-.RS
-.IR Include :
-.IR <signal.h> .
-Alternatively,
-.IR <spawn.h> ,
-or
-.IR <sys/select.h> .
-.PP
-This is a type that represents a set of signals.
-According to POSIX, this shall be an integer or structure type.
-.PP
-.IR "Conforming to" :
-POSIX.1-2001 and later.
-.PP
-.IR "See also" :
-.BR epoll_pwait (2),
-.BR ppoll (2),
-.BR pselect (2),
-.BR sigaction (2),
-.BR signalfd (2),
-.BR sigpending (2),
-.BR sigprocmask (2),
-.BR sigsuspend (2),
-.BR sigwaitinfo (2),
-.BR signal (7)
-.RE
-.\"------------------------------------- sigval -----------------------/
-.TP
-.I sigval
-.RS
-.IR Include :
-.IR <signal.h> .
-.PP
-.EX
-union sigval {
- int sival_int; /* Integer value */
- void *sival_ptr; /* Pointer value */
-};
-.EE
-.PP
-Data passed with a signal.
-.PP
-.IR "Conforming to" :
-POSIX.1-2001 and later.
-.PP
-.IR "See also" :
-.BR pthread_sigqueue (3),
-.BR sigqueue (3),
-.BR sigevent (7)
-.PP
-See also the
-.I sigevent
-structure
-and the
-.I siginfo_t
-type
-in this page.
-.RE
-.\"------------------------------------- size_t -----------------------/
-.\"------------------------------------- sockaddr ---------------------/
-.\"------------------------------------- socklen_t --------------------/
-.\"------------------------------------- ssize_t ----------------------/
-.\"------------------------------------- stat -------------------------/
-.\"------------------------------------- suseconds_t ------------------/
-.\"------------------------------------- time_t -----------------------/
-.\"------------------------------------- timer_t ----------------------/
-.\"------------------------------------- timespec ---------------------/
-.\"------------------------------------- timeval ----------------------/
-.\"------------------------------------- uid_t ----------------------/
-.\"------------------------------------- uintmax_t --------------------/
-.\"------------------------------------- uintN_t ----------------------/
-.\"------------------------------------- uintptr_t --------------------/
-.\"------------------------------------- useconds_t -------------------/
-.\"------------------------------------- va_list ----------------------/
-.\"------------------------------------- void * -----------------------/
-.\"--------------------------------------------------------------------/
-.SH NOTES
-The structures described in this manual page shall contain,
-at least, the members shown in their definition, in no particular order.
-.PP
-Most of the integer types described in this page don't have
-a corresponding length modifier for the
-.BR printf (3)
-and the
-.BR scanf (3)
-families of functions.
-To print a value of an integer type that doesn't have a length modifier,
-it should be converted to
-.I intmax_t
-or
-.I uintmax_t
-by an explicit cast.
-To scan into a variable of an integer type
-that doesn't have a length modifier,
-an intermediate temporary variable of type
-.I intmax_t
-or
-.I uintmax_t
-should be used.
-When copying from the temporary variable to the destination variable,
-the value could overflow.
-If the type has upper and lower limits,
-the user should check that the value is within those limits,
-before actually copying the value.
-The example below shows how these conversions should be done.
-.SS Conventions used in this page
-In "Conforming to" we only concern ourselves with
-C99 and later and POSIX.1-2001 and later.
-Some types may be specified in earlier versions of one of these standards,
-but in the interests of simplicity we omit details from earlier standards.
-.PP
-In "Include", we first note the "primary" header(s) that
-define the type according to either the C or POSIX.1 standards.
-Under "Alternatively", we note additional headers that
-the standards specify shall define the type.
-.SH EXAMPLES
-The program shown below scans from a string and prints a value stored in
-a variable of an integer type that doesn't have a length modifier.
-The appropriate conversions from and to
-.IR intmax_t ,
-and the appropriate range checks,
-are used as explained in the notes section above.
-.PP
-.EX
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-\&
-int
-main (void)
-{
- static const char *const str = "500000 us in half a second";
- suseconds_t us;
- intmax_t tmp;
-\&
- /* Scan the number from the string into the temporary variable. */
-\&
- sscanf(str, "%jd", &tmp);
-\&
- /* Check that the value is within the valid range of suseconds_t. */
-\&
- if (tmp < \-1 || tmp > 1000000) {
- fprintf(stderr, "Scanned value outside valid range!\en");
- exit(EXIT_FAILURE);
- }
-\&
- /* Copy the value to the suseconds_t variable \[aq]us\[aq]. */
-\&
- us = tmp;
-\&
- /* Even though suseconds_t can hold the value \-1, this isn\[aq]t
- a sensible number of microseconds. */
-\&
- if (us < 0) {
- fprintf(stderr, "Scanned value shouldn\[aq]t be negative!\en");
- exit(EXIT_FAILURE);
- }
-\&
- /* Print the value. */
-\&
- printf("There are %jd microseconds in half a second.\en",
- (intmax_t) us);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.SH SEE ALSO
-.BR feature_test_macros (7),
-.BR standards (7)
diff --git a/man7/sysvipc.7 b/man7/sysvipc.7
deleted file mode 100644
index 4b3576157..000000000
--- a/man7/sysvipc.7
+++ /dev/null
@@ -1,99 +0,0 @@
-.\" Copyright 2020 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sysvipc 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sysvipc \- System V interprocess communication mechanisms
-.SH DESCRIPTION
-System V IPC is the name given to three interprocess
-communication mechanisms that are widely available on UNIX systems:
-message queues, semaphore, and shared memory.
-.\"
-.SS Message queues
-System V message queues allow data to be exchanged in units called messages.
-Each message can have an associated priority.
-POSIX message queues provide an alternative API for achieving the same result;
-see
-.BR mq_overview (7).
-.PP
-The System V message queue API consists of the following system calls:
-.TP
-.BR msgget (2)
-Create a new message queue or obtain the ID of an existing message queue.
-This call returns an identifier that is used in the remaining APIs.
-.TP
-.BR msgsnd (2)
-Add a message to a queue.
-.TP
-.BR msgrcv (2)
-Remove a message from a queue.
-.TP
-.BR msgctl (2)
-Perform various control operations on a queue, including deletion.
-.\"
-.SS Semaphore sets
-System V semaphores allow processes to synchronize their actions.
-System V semaphores are allocated in groups called sets;
-each semaphore in a set is a counting semaphore.
-POSIX semaphores provide an alternative API for achieving the same result;
-see
-.BR sem_overview (7).
-.PP
-The System V semaphore API consists of the following system calls:
-.TP
-.BR semget (2)
-Create a new set or obtain the ID of an existing set.
-This call returns an identifier that is used in the remaining APIs.
-.TP
-.BR semop (2)
-Perform operations on the semaphores in a set.
-.TP
-.BR semctl (2)
-Perform various control operations on a set, including deletion.
-.\"
-.SS Shared memory segments
-System V shared memory allows processes to share a region a memory
-(a "segment").
-POSIX shared memory is an alternative API for achieving the same result; see
-.BR shm_overview (7).
-.PP
-The System V shared memory API consists of the following system calls:
-.TP
-.BR shmget (2)
-Create a new segment or obtain the ID of an existing segment.
-This call returns an identifier that is used in the remaining APIs.
-.TP
-.BR shmat (2)
-Attach an existing shared memory object into the calling process's
-address space.
-.TP
-.BR shmdt (2)
-Detach a segment from the calling process's address space.
-.TP
-.BR shmctl (2)
-Perform various control operations on a segment, including deletion.
-.\"
-.SS IPC namespaces
-For a discussion of the interaction of System V IPC objects and
-IPC namespaces, see
-.BR ipc_namespaces (7).
-.SH SEE ALSO
-.BR ipcmk (1),
-.BR ipcrm (1),
-.BR ipcs (1),
-.BR lsipc (1),
-.BR ipc (2),
-.BR msgctl (2),
-.BR msgget (2),
-.BR msgrcv (2),
-.BR msgsnd (2),
-.BR semctl (2),
-.BR semget (2),
-.BR semop (2),
-.BR shmat (2),
-.BR shmctl (2),
-.BR shmdt (2),
-.BR shmget (2),
-.BR ftok (3),
-.BR ipc_namespaces (7)
diff --git a/man7/tcp.7 b/man7/tcp.7
deleted file mode 100644
index dda714afb..000000000
--- a/man7/tcp.7
+++ /dev/null
@@ -1,1568 +0,0 @@
-.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
-.\" and Copyright (C) 2008 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" Note also that many pieces are drawn from the kernel source file
-.\" Documentation/networking/ip-sysctl.txt.
-.\"
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" 2.4 Updates by Nivedita Singhvi 4/20/02 <nivedita@us.ibm.com>.
-.\" Modified, 2004-11-11, Michael Kerrisk and Andries Brouwer
-.\" Updated details of interaction of TCP_CORK and TCP_NODELAY.
-.\"
-.\" 2008-11-21, mtk, many, many updates.
-.\" The descriptions of /proc files and socket options should now
-.\" be more or less up to date and complete as at Linux 2.6.27
-.\" (other than the remaining FIXMEs in the page source below).
-.\"
-.\" FIXME The following need to be documented
-.\" TCP_MD5SIG (2.6.20)
-.\" commit cfb6eeb4c860592edd123fdea908d23c6ad1c7dc
-.\" Author was yoshfuji@linux-ipv6.org
-.\" Needs CONFIG_TCP_MD5SIG
-.\" From net/inet/Kconfig:
-.\" bool "TCP: MD5 Signature Option support (RFC2385) (EXPERIMENTAL)"
-.\" RFC2385 specifies a method of giving MD5 protection to TCP sessions.
-.\" Its main (only?) use is to protect BGP sessions between core routers
-.\" on the Internet.
-.\"
-.\" There is a TCP_MD5SIG option documented in FreeBSD's tcp(4),
-.\" but probably many details are different on Linux
-.\" http://thread.gmane.org/gmane.linux.network/47490
-.\" http://www.daemon-systems.org/man/tcp.4.html
-.\" http://article.gmane.org/gmane.os.netbsd.devel.network/3767/match=tcp_md5sig+freebsd
-.\"
-.\" TCP_COOKIE_TRANSACTIONS (2.6.33)
-.\" commit 519855c508b9a17878c0977a3cdefc09b59b30df
-.\" Author: William Allen Simpson <william.allen.simpson@gmail.com>
-.\" commit e56fb50f2b7958b931c8a2fc0966061b3f3c8f3a
-.\" Author: William Allen Simpson <william.allen.simpson@gmail.com>
-.\"
-.\" REMOVED in Linux 3.10
-.\" commit 1a2c6181c4a1922021b4d7df373bba612c3e5f04
-.\" Author: Christoph Paasch <christoph.paasch@uclouvain.be>
-.\"
-.\" TCP_THIN_LINEAR_TIMEOUTS (2.6.34)
-.\" commit 36e31b0af58728071e8023cf8e20c5166b700717
-.\" Author: Andreas Petlund <apetlund@simula.no>
-.\"
-.\" TCP_THIN_DUPACK (2.6.34)
-.\" commit 7e38017557bc0b87434d184f8804cadb102bb903
-.\" Author: Andreas Petlund <apetlund@simula.no>
-.\"
-.\" TCP_REPAIR (3.5)
-.\" commit ee9952831cfd0bbe834f4a26489d7dce74582e37
-.\" Author: Pavel Emelyanov <xemul@parallels.com>
-.\" See also
-.\" http://criu.org/TCP_connection
-.\" https://lwn.net/Articles/495304/
-.\"
-.\" TCP_REPAIR_QUEUE (3.5)
-.\" commit ee9952831cfd0bbe834f4a26489d7dce74582e37
-.\" Author: Pavel Emelyanov <xemul@parallels.com>
-.\"
-.\" TCP_QUEUE_SEQ (3.5)
-.\" commit ee9952831cfd0bbe834f4a26489d7dce74582e37
-.\" Author: Pavel Emelyanov <xemul@parallels.com>
-.\"
-.\" TCP_REPAIR_OPTIONS (3.5)
-.\" commit b139ba4e90dccbf4cd4efb112af96a5c9e0b098c
-.\" Author: Pavel Emelyanov <xemul@parallels.com>
-.\"
-.\" TCP_FASTOPEN (3.6)
-.\" (Fast Open server side implementation completed in Linux 3.7)
-.\" http://lwn.net/Articles/508865/
-.\"
-.\" TCP_TIMESTAMP (3.9)
-.\" commit 93be6ce0e91b6a94783e012b1857a347a5e6e9f2
-.\" Author: Andrey Vagin <avagin@openvz.org>
-.\"
-.\" TCP_NOTSENT_LOWAT (3.12)
-.\" commit c9bee3b7fdecb0c1d070c7b54113b3bdfb9a3d36
-.\" Author: Eric Dumazet <edumazet@google.com>
-.\"
-.\" TCP_CC_INFO (4.1)
-.\" commit 6e9250f59ef9efb932c84850cd221f22c2a03c4a
-.\" Author: Eric Dumazet <edumazet@google.com>
-.\"
-.\" TCP_SAVE_SYN, TCP_SAVED_SYN (4.2)
-.\" commit cd8ae85299d54155702a56811b2e035e63064d3d
-.\" Author: Eric Dumazet <edumazet@google.com>
-.\"
-.TH tcp 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-tcp \- TCP protocol
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.B #include <netinet/in.h>
-.B #include <netinet/tcp.h>
-.PP
-.IB tcp_socket " = socket(AF_INET, SOCK_STREAM, 0);"
-.fi
-.SH DESCRIPTION
-This is an implementation of the TCP protocol defined in
-RFC\ 793, RFC\ 1122 and RFC\ 2001 with the NewReno and SACK
-extensions.
-It provides a reliable, stream-oriented,
-full-duplex connection between two sockets on top of
-.BR ip (7),
-for both v4 and v6 versions.
-TCP guarantees that the data arrives in order and
-retransmits lost packets.
-It generates and checks a per-packet checksum to catch
-transmission errors.
-TCP does not preserve record boundaries.
-.PP
-A newly created TCP socket has no remote or local address and is not
-fully specified.
-To create an outgoing TCP connection use
-.BR connect (2)
-to establish a connection to another TCP socket.
-To receive new incoming connections, first
-.BR bind (2)
-the socket to a local address and port and then call
-.BR listen (2)
-to put the socket into the listening state.
-After that a new socket for each incoming connection can be accepted using
-.BR accept (2).
-A socket which has had
-.BR accept (2)
-or
-.BR connect (2)
-successfully called on it is fully specified and may transmit data.
-Data cannot be transmitted on listening or not yet connected sockets.
-.PP
-Linux supports RFC\ 1323 TCP high performance
-extensions.
-These include Protection Against Wrapped
-Sequence Numbers (PAWS), Window Scaling and Timestamps.
-Window scaling allows the use
-of large (> 64\ kB) TCP windows in order to support links with high
-latency or bandwidth.
-To make use of them, the send and receive buffer sizes must be increased.
-They can be set globally with the
-.I /proc/sys/net/ipv4/tcp_wmem
-and
-.I /proc/sys/net/ipv4/tcp_rmem
-files, or on individual sockets by using the
-.B SO_SNDBUF
-and
-.B SO_RCVBUF
-socket options with the
-.BR setsockopt (2)
-call.
-.PP
-The maximum sizes for socket buffers declared via the
-.B SO_SNDBUF
-and
-.B SO_RCVBUF
-mechanisms are limited by the values in the
-.I /proc/sys/net/core/rmem_max
-and
-.I /proc/sys/net/core/wmem_max
-files.
-Note that TCP actually allocates twice the size of
-the buffer requested in the
-.BR setsockopt (2)
-call, and so a succeeding
-.BR getsockopt (2)
-call will not return the same size of buffer as requested in the
-.BR setsockopt (2)
-call.
-TCP uses the extra space for administrative purposes and internal
-kernel structures, and the
-.I /proc
-file values reflect the
-larger sizes compared to the actual TCP windows.
-On individual connections, the socket buffer size must be set prior to the
-.BR listen (2)
-or
-.BR connect (2)
-calls in order to have it take effect.
-See
-.BR socket (7)
-for more information.
-.PP
-TCP supports urgent data.
-Urgent data is used to signal the
-receiver that some important message is part of the data
-stream and that it should be processed as soon as possible.
-To send urgent data specify the
-.B MSG_OOB
-option to
-.BR send (2).
-When urgent data is received, the kernel sends a
-.B SIGURG
-signal to the process or process group that has been set as the
-socket "owner" using the
-.B SIOCSPGRP
-or
-.B FIOSETOWN
-ioctls (or the POSIX.1-specified
-.BR fcntl (2)
-.B F_SETOWN
-operation).
-When the
-.B SO_OOBINLINE
-socket option is enabled, urgent data is put into the normal
-data stream (a program can test for its location using the
-.B SIOCATMARK
-ioctl described below),
-otherwise it can be received only when the
-.B MSG_OOB
-flag is set for
-.BR recv (2)
-or
-.BR recvmsg (2).
-.PP
-When out-of-band data is present,
-.BR select (2)
-indicates the file descriptor as having an exceptional condition and
-.I poll (2)
-indicates a
-.B POLLPRI
-event.
-.PP
-Linux 2.4 introduced a number of changes for improved
-throughput and scaling, as well as enhanced functionality.
-Some of these features include support for zero-copy
-.BR sendfile (2),
-Explicit Congestion Notification, new
-management of TIME_WAIT sockets, keep-alive socket options
-and support for Duplicate SACK extensions.
-.SS Address formats
-TCP is built on top of IP (see
-.BR ip (7)).
-The address formats defined by
-.BR ip (7)
-apply to TCP.
-TCP supports point-to-point communication only;
-broadcasting and multicasting are not
-supported.
-.SS /proc interfaces
-System-wide TCP parameter settings can be accessed by files in the directory
-.IR /proc/sys/net/ipv4/ .
-In addition, most IP
-.I /proc
-interfaces also apply to TCP; see
-.BR ip (7).
-Variables described as
-.I Boolean
-take an integer value, with a nonzero value ("true") meaning that
-the corresponding option is enabled, and a zero value ("false")
-meaning that the option is disabled.
-.TP
-.IR tcp_abc " (Integer; default: 0; Linux 2.6.15 to Linux 3.8)"
-.\" Since Linux 2.6.15; removed in Linux 3.9
-.\" commit ca2eb5679f8ddffff60156af42595df44a315ef0
-.\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
-Control the Appropriate Byte Count (ABC), defined in RFC 3465.
-ABC is a way of increasing the congestion window
-.RI ( cwnd )
-more slowly in response to partial acknowledgements.
-Possible values are:
-.RS
-.TP
-.B 0
-increase
-.I cwnd
-once per acknowledgement (no ABC)
-.TP
-.B 1
-increase
-.I cwnd
-once per acknowledgement of full sized segment
-.TP
-.B 2
-allow increase
-.I cwnd
-by two if acknowledgement is
-of two segments to compensate for delayed acknowledgements.
-.RE
-.TP
-.IR tcp_abort_on_overflow " (Boolean; default: disabled; since Linux 2.4)"
-.\" Since Linux 2.3.41
-Enable resetting connections if the listening service is too
-slow and unable to keep up and accept them.
-It means that if overflow occurred due
-to a burst, the connection will recover.
-Enable this option
-.I only
-if you are really sure that the listening daemon
-cannot be tuned to accept connections faster.
-Enabling this option can harm the clients of your server.
-.TP
-.IR tcp_adv_win_scale " (integer; default: 2; since Linux 2.4)"
-.\" Since Linux 2.4.0-test7
-Count buffering overhead as
-.IR "bytes/2\[ha]tcp_adv_win_scale" ,
-if
-.I tcp_adv_win_scale
-is greater than 0; or
-.IR "bytes\-bytes/2\[ha](\-tcp_adv_win_scale)" ,
-if
-.I tcp_adv_win_scale
-is less than or equal to zero.
-.IP
-The socket receive buffer space is shared between the
-application and kernel.
-TCP maintains part of the buffer as
-the TCP window, this is the size of the receive window
-advertised to the other end.
-The rest of the space is used
-as the "application" buffer, used to isolate the network
-from scheduling and application latencies.
-The
-.I tcp_adv_win_scale
-default value of 2 implies that the space
-used for the application buffer is one fourth that of the total.
-.TP
-.IR tcp_allowed_congestion_control " (String; default: see text; since Linux 2.4.20)"
-.\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
-Show/set the congestion control algorithm choices available to unprivileged
-processes (see the description of the
-.B TCP_CONGESTION
-socket option).
-The items in the list are separated by white space and
-terminated by a newline character.
-The list is a subset of those listed in
-.IR tcp_available_congestion_control .
-The default value for this list is "reno" plus the default setting of
-.IR tcp_congestion_control .
-.TP
-.IR tcp_autocorking " (Boolean; default: enabled; since Linux 3.14)"
-.\" commit f54b311142a92ea2e42598e347b84e1655caf8e3
-.\" Text heavily based on Documentation/networking/ip-sysctl.txt
-If this option is enabled, the kernel tries to coalesce small writes
-(from consecutive
-.BR write (2)
-and
-.BR sendmsg (2)
-calls) as much as possible,
-in order to decrease the total number of sent packets.
-Coalescing is done if at least one prior packet for the flow
-is waiting in Qdisc queues or device transmit queue.
-Applications can still use the
-.B TCP_CORK
-socket option to obtain optimal behavior
-when they know how/when to uncork their sockets.
-.TP
-.IR tcp_available_congestion_control " (String; read-only; since Linux 2.4.20)"
-.\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
-Show a list of the congestion-control algorithms
-that are registered.
-The items in the list are separated by white space and
-terminated by a newline character.
-This list is a limiting set for the list in
-.IR tcp_allowed_congestion_control .
-More congestion-control algorithms may be available as modules,
-but not loaded.
-.TP
-.IR tcp_app_win " (integer; default: 31; since Linux 2.4)"
-.\" Since Linux 2.4.0-test7
-This variable defines how many
-bytes of the TCP window are reserved for buffering overhead.
-.IP
-A maximum of (\fIwindow/2\[ha]tcp_app_win\fP, mss) bytes in the window
-are reserved for the application buffer.
-A value of 0 implies that no amount is reserved.
-.\"
-.\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
-.TP
-.IR tcp_base_mss " (Integer; default: 512; since Linux 2.6.17)"
-The initial value of
-.I search_low
-to be used by the packetization layer Path MTU discovery (MTU probing).
-If MTU probing is enabled,
-this is the initial MSS used by the connection.
-.\"
-.\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt
-.TP
-.IR tcp_bic " (Boolean; default: disabled; Linux 2.4.27/2.6.6 to Linux 2.6.13)"
-Enable BIC TCP congestion control algorithm.
-BIC-TCP is a sender-side-only change that ensures a linear RTT
-fairness under large windows while offering both scalability and
-bounded TCP-friendliness.
-The protocol combines two schemes
-called additive increase and binary search increase.
-When the congestion window is large, additive increase with a large
-increment ensures linear RTT fairness as well as good scalability.
-Under small congestion windows, binary search
-increase provides TCP friendliness.
-.\"
-.\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt
-.TP
-.IR tcp_bic_low_window " (integer; default: 14; Linux 2.4.27/2.6.6 to Linux 2.6.13)"
-Set the threshold window (in packets) where BIC TCP starts to
-adjust the congestion window.
-Below this threshold BIC TCP behaves the same as the default TCP Reno.
-.\"
-.\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt
-.TP
-.IR tcp_bic_fast_convergence " (Boolean; default: enabled; Linux 2.4.27/2.6.6 to Linux 2.6.13)"
-Force BIC TCP to more quickly respond to changes in congestion window.
-Allows two flows sharing the same connection to converge more rapidly.
-.TP
-.IR tcp_congestion_control " (String; default: see text; since Linux 2.4.13)"
-.\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
-Set the default congestion-control algorithm to be used for new connections.
-The algorithm "reno" is always available,
-but additional choices may be available depending on kernel configuration.
-The default value for this file is set as part of kernel configuration.
-.TP
-.IR tcp_dma_copybreak " (integer; default: 4096; since Linux 2.6.24)"
-Lower limit, in bytes, of the size of socket reads that will be
-offloaded to a DMA copy engine, if one is present in the system
-and the kernel was configured with the
-.B CONFIG_NET_DMA
-option.
-.TP
-.IR tcp_dsack " (Boolean; default: enabled; since Linux 2.4)"
-.\" Since Linux 2.4.0-test7
-Enable RFC\ 2883 TCP Duplicate SACK support.
-.TP
-.IR tcp_fastopen " (Bitmask; default: 0x1; since Linux 3.7)"
-Enables RFC\~7413 Fast Open support.
-The flag is used as a bitmap with the following values:
-.RS
-.TP
-.B 0x1
-Enables client side Fast Open support
-.TP
-.B 0x2
-Enables server side Fast Open support
-.TP
-.B 0x4
-Allows client side to transmit data in SYN without Fast Open option
-.TP
-.B 0x200
-Allows server side to accept SYN data without Fast Open option
-.TP
-.B 0x400
-Enables Fast Open on all listeners without
-.B TCP_FASTOPEN
-socket option
-.RE
-.TP
-.IR tcp_fastopen_key " (since Linux 3.7)"
-Set server side RFC\~7413 Fast Open key to generate Fast Open cookie
-when server side Fast Open support is enabled.
-.TP
-.IR tcp_ecn " (Integer; default: see below; since Linux 2.4)"
-.\" Since Linux 2.4.0-test7
-Enable RFC\ 3168 Explicit Congestion Notification.
-.IP
-This file can have one of the following values:
-.RS
-.TP
-.B 0
-Disable ECN.
-Neither initiate nor accept ECN.
-This was the default up to and including Linux 2.6.30.
-.TP
-.B 1
-Enable ECN when requested by incoming connections and also
-request ECN on outgoing connection attempts.
-.TP
-.B 2
-.\" commit 255cac91c3c9ce7dca7713b93ab03c75b7902e0e
-Enable ECN when requested by incoming connections,
-but do not request ECN on outgoing connections.
-This value is supported, and is the default, since Linux 2.6.31.
-.RE
-.IP
-When enabled, connectivity to some destinations could be affected
-due to older, misbehaving middle boxes along the path, causing
-connections to be dropped.
-However, to facilitate and encourage deployment with option 1, and
-to work around such buggy equipment, the
-.B tcp_ecn_fallback
-option has been introduced.
-.TP
-.IR tcp_ecn_fallback " (Boolean; default: enabled; since Linux 4.1)"
-.\" commit 492135557dc090a1abb2cfbe1a412757e3ed68ab
-Enable RFC\ 3168, Section 6.1.1.1. fallback.
-When enabled, outgoing ECN-setup SYNs that time out within the
-normal SYN retransmission timeout will be resent with CWR and
-ECE cleared.
-.TP
-.IR tcp_fack " (Boolean; default: enabled; since Linux 2.2)"
-.\" Since Linux 2.1.92
-Enable TCP Forward Acknowledgement support.
-.TP
-.IR tcp_fin_timeout " (integer; default: 60; since Linux 2.2)"
-.\" Since Linux 2.1.53
-This specifies how many seconds to wait for a final FIN packet before the
-socket is forcibly closed.
-This is strictly a violation of the TCP specification,
-but required to prevent denial-of-service attacks.
-In Linux 2.2, the default value was 180.
-.\"
-.\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt
-.TP
-.IR tcp_frto " (integer; default: see below; since Linux 2.4.21/2.6)"
-.\" Since Linux 2.4.21/2.5.43
-Enable F-RTO, an enhanced recovery algorithm for TCP retransmission
-timeouts (RTOs).
-It is particularly beneficial in wireless environments
-where packet loss is typically due to random radio interference
-rather than intermediate router congestion.
-See RFC 4138 for more details.
-.IP
-This file can have one of the following values:
-.RS
-.TP
-.B 0
-Disabled.
-This was the default up to and including Linux 2.6.23.
-.TP
-.B 1
-The basic version F-RTO algorithm is enabled.
-.TP
-.B 2
-.\" commit c96fd3d461fa495400df24be3b3b66f0e0b152f9
-Enable SACK-enhanced F-RTO if flow uses SACK.
-The basic version can be used also when
-SACK is in use though in that case scenario(s) exists where F-RTO
-interacts badly with the packet counting of the SACK-enabled TCP flow.
-This value is the default since Linux 2.6.24.
-.RE
-.IP
-Before Linux 2.6.22, this parameter was a Boolean value,
-supporting just values 0 and 1 above.
-.TP
-.IR tcp_frto_response " (integer; default: 0; since Linux 2.6.22)"
-When F-RTO has detected that a TCP retransmission timeout was spurious
-(i.e., the timeout would have been avoided had TCP set a
-longer retransmission timeout),
-TCP has several options concerning what to do next.
-Possible values are:
-.RS
-.TP
-.B 0
-Rate halving based; a smooth and conservative response,
-results in halved congestion window
-.RI ( cwnd )
-and slow-start threshold
-.RI ( ssthresh )
-after one RTT.
-.TP
-.B 1
-Very conservative response; not recommended because even
-though being valid, it interacts poorly with the rest of Linux TCP; halves
-.I cwnd
-and
-.I ssthresh
-immediately.
-.TP
-.B 2
-Aggressive response; undoes congestion-control measures
-that are now known to be unnecessary
-(ignoring the possibility of a lost retransmission that would require
-TCP to be more cautious);
-.I cwnd
-and
-.I ssthresh
-are restored to the values prior to timeout.
-.RE
-.TP
-.IR tcp_keepalive_intvl " (integer; default: 75; since Linux 2.4)"
-.\" Since Linux 2.3.18
-The number of seconds between TCP keep-alive probes.
-.TP
-.IR tcp_keepalive_probes " (integer; default: 9; since Linux 2.2)"
-.\" Since Linux 2.1.43
-The maximum number of TCP keep-alive probes to send
-before giving up and killing the connection if
-no response is obtained from the other end.
-.TP
-.IR tcp_keepalive_time " (integer; default: 7200; since Linux 2.2)"
-.\" Since Linux 2.1.43
-The number of seconds a connection needs to be idle
-before TCP begins sending out keep-alive probes.
-Keep-alives are sent only when the
-.B SO_KEEPALIVE
-socket option is enabled.
-The default value is 7200 seconds (2 hours).
-An idle connection is terminated after
-approximately an additional 11 minutes (9 probes an interval
-of 75 seconds apart) when keep-alive is enabled.
-.IP
-Note that underlying connection tracking mechanisms and
-application timeouts may be much shorter.
-.\"
-.\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt
-.TP
-.IR tcp_low_latency " (Boolean; default: disabled; since Linux 2.4.21/2.6; \
-obsolete since Linux 4.14)"
-.\" Since Linux 2.4.21/2.5.60
-If enabled, the TCP stack makes decisions that prefer lower
-latency as opposed to higher throughput.
-It this option is disabled, then higher throughput is preferred.
-An example of an application where this default should be
-changed would be a Beowulf compute cluster.
-Since Linux 4.14,
-.\" commit b6690b14386698ce2c19309abad3f17656bdfaea
-this file still exists, but its value is ignored.
-.TP
-.IR tcp_max_orphans " (integer; default: see below; since Linux 2.4)"
-.\" Since Linux 2.3.41
-The maximum number of orphaned (not attached to any user file
-handle) TCP sockets allowed in the system.
-When this number is exceeded,
-the orphaned connection is reset and a warning is printed.
-This limit exists only to prevent simple denial-of-service attacks.
-Lowering this limit is not recommended.
-Network conditions might require you to increase the number of
-orphans allowed, but note that each orphan can eat up to \[ti]64\ kB
-of unswappable memory.
-The default initial value is set equal to the kernel parameter NR_FILE.
-This initial default is adjusted depending on the memory in the system.
-.TP
-.IR tcp_max_syn_backlog " (integer; default: see below; since Linux 2.2)"
-.\" Since Linux 2.1.53
-The maximum number of queued connection requests which have
-still not received an acknowledgement from the connecting client.
-If this number is exceeded, the kernel will begin
-dropping requests.
-The default value of 256 is increased to
-1024 when the memory present in the system is adequate or
-greater (>= 128\ MB), and reduced to 128 for those systems with
-very low memory (<= 32\ MB).
-.IP
-Before Linux 2.6.20,
-.\" commit 72a3effaf633bcae9034b7e176bdbd78d64a71db
-it was recommended that if this needed to be increased above 1024,
-the size of the SYNACK hash table
-.RB ( TCP_SYNQ_HSIZE )
-in
-.I include/net/tcp.h
-should be modified to keep
-.IP
-.in +4n
-.EX
-TCP_SYNQ_HSIZE * 16 <= tcp_max_syn_backlog
-.EE
-.in
-.IP
-and the kernel should be
-recompiled.
-In Linux 2.6.20, the fixed sized
-.B TCP_SYNQ_HSIZE
-was removed in favor of dynamic sizing.
-.TP
-.IR tcp_max_tw_buckets " (integer; default: see below; since Linux 2.4)"
-.\" Since Linux 2.3.41
-The maximum number of sockets in TIME_WAIT state allowed in
-the system.
-This limit exists only to prevent simple denial-of-service attacks.
-The default value of NR_FILE*2 is adjusted
-depending on the memory in the system.
-If this number is
-exceeded, the socket is closed and a warning is printed.
-.TP
-.IR tcp_moderate_rcvbuf " (Boolean; default: enabled; since Linux 2.4.17/2.6.7)"
-.\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
-If enabled, TCP performs receive buffer auto-tuning,
-attempting to automatically size the buffer (no greater than
-.IR tcp_rmem[2] )
-to match the size required by the path for full throughput.
-.TP
-.IR tcp_mem " (since Linux 2.4)"
-.\" Since Linux 2.4.0-test7
-This is a vector of 3 integers: [low, pressure, high].
-These bounds, measured in units of the system page size,
-are used by TCP to track its memory usage.
-The defaults are calculated at boot time from the amount of
-available memory.
-(TCP can only use
-.I "low memory"
-for this, which is limited to around 900 megabytes on 32-bit systems.
-64-bit systems do not suffer this limitation.)
-.RS
-.TP
-.I low
-TCP doesn't regulate its memory allocation when the number
-of pages it has allocated globally is below this number.
-.TP
-.I pressure
-When the amount of memory allocated by TCP
-exceeds this number of pages, TCP moderates its memory consumption.
-This memory pressure state is exited
-once the number of pages allocated falls below
-the
-.I low
-mark.
-.TP
-.I high
-The maximum number of pages, globally, that TCP will allocate.
-This value overrides any other limits imposed by the kernel.
-.RE
-.TP
-.IR tcp_mtu_probing " (integer; default: 0; since Linux 2.6.17)"
-.\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
-This parameter controls TCP Packetization-Layer Path MTU Discovery.
-The following values may be assigned to the file:
-.RS
-.TP
-.B 0
-Disabled
-.TP
-.B 1
-Disabled by default, enabled when an ICMP black hole detected
-.TP
-.B 2
-Always enabled, use initial MSS of
-.IR tcp_base_mss .
-.RE
-.TP
-.IR tcp_no_metrics_save " (Boolean; default: disabled; since Linux 2.6.6)"
-.\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
-By default, TCP saves various connection metrics in the route cache
-when the connection closes, so that connections established in the
-near future can use these to set initial conditions.
-Usually, this increases overall performance,
-but it may sometimes cause performance degradation.
-If
-.I tcp_no_metrics_save
-is enabled, TCP will not cache metrics on closing connections.
-.TP
-.IR tcp_orphan_retries " (integer; default: 8; since Linux 2.4)"
-.\" Since Linux 2.3.41
-The maximum number of attempts made to probe the other
-end of a connection which has been closed by our end.
-.TP
-.IR tcp_reordering " (integer; default: 3; since Linux 2.4)"
-.\" Since Linux 2.4.0-test7
-The maximum a packet can be reordered in a TCP packet stream
-without TCP assuming packet loss and going into slow start.
-It is not advisable to change this number.
-This is a packet reordering detection metric designed to
-minimize unnecessary back off and retransmits provoked by
-reordering of packets on a connection.
-.TP
-.IR tcp_retrans_collapse " (Boolean; default: enabled; since Linux 2.2)"
-.\" Since Linux 2.1.96
-Try to send full-sized packets during retransmit.
-.TP
-.IR tcp_retries1 " (integer; default: 3; since Linux 2.2)"
-.\" Since Linux 2.1.43
-The number of times TCP will attempt to retransmit a
-packet on an established connection normally,
-without the extra effort of getting the network layers involved.
-Once we exceed this number of
-retransmits, we first have the network layer
-update the route if possible before each new retransmit.
-The default is the RFC specified minimum of 3.
-.TP
-.IR tcp_retries2 " (integer; default: 15; since Linux 2.2)"
-.\" Since Linux 2.1.43
-The maximum number of times a TCP packet is retransmitted
-in established state before giving up.
-The default value is 15, which corresponds to a duration of
-approximately between 13 to 30 minutes, depending
-on the retransmission timeout.
-The RFC\ 1122 specified
-minimum limit of 100 seconds is typically deemed too short.
-.TP
-.IR tcp_rfc1337 " (Boolean; default: disabled; since Linux 2.2)"
-.\" Since Linux 2.1.90
-Enable TCP behavior conformant with RFC\ 1337.
-When disabled,
-if a RST is received in TIME_WAIT state, we close
-the socket immediately without waiting for the end
-of the TIME_WAIT period.
-.TP
-.IR tcp_rmem " (since Linux 2.4)"
-.\" Since Linux 2.4.0-test7
-This is a vector of 3 integers: [min, default, max].
-These parameters are used by TCP to regulate receive buffer sizes.
-TCP dynamically adjusts the size of the
-receive buffer from the defaults listed below, in the range
-of these values, depending on memory available in the system.
-.RS
-.TP
-.I min
-minimum size of the receive buffer used by each TCP socket.
-The default value is the system page size.
-(On Linux 2.4, the default value is 4\ kB, lowered to
-.B PAGE_SIZE
-bytes in low-memory systems.)
-This value
-is used to ensure that in memory pressure mode,
-allocations below this size will still succeed.
-This is not
-used to bound the size of the receive buffer declared
-using
-.B SO_RCVBUF
-on a socket.
-.TP
-.I default
-the default size of the receive buffer for a TCP socket.
-This value overwrites the initial default buffer size from
-the generic global
-.I net.core.rmem_default
-defined for all protocols.
-The default value is 87380 bytes.
-(On Linux 2.4, this will be lowered to 43689 in low-memory systems.)
-If larger receive buffer sizes are desired, this value should
-be increased (to affect all sockets).
-To employ large TCP windows, the
-.I net.ipv4.tcp_window_scaling
-must be enabled (default).
-.TP
-.I max
-the maximum size of the receive buffer used by each TCP socket.
-This value does not override the global
-.IR net.core.rmem_max .
-This is not used to limit the size of the receive buffer declared using
-.B SO_RCVBUF
-on a socket.
-The default value is calculated using the formula
-.IP
-.in +4n
-.EX
-max(87380, min(4\ MB, \fItcp_mem\fP[1]*PAGE_SIZE/128))
-.EE
-.in
-.IP
-(On Linux 2.4, the default is 87380*2 bytes,
-lowered to 87380 in low-memory systems).
-.RE
-.TP
-.IR tcp_sack " (Boolean; default: enabled; since Linux 2.2)"
-.\" Since Linux 2.1.36
-Enable RFC\ 2018 TCP Selective Acknowledgements.
-.TP
-.IR tcp_slow_start_after_idle " (Boolean; default: enabled; since Linux 2.6.18)"
-.\" The following is from Linux 2.6.28-rc4: Documentation/networking/ip-sysctl.txt
-If enabled, provide RFC 2861 behavior and time out the congestion
-window after an idle period.
-An idle period is defined as the current RTO (retransmission timeout).
-If disabled, the congestion window will not
-be timed out after an idle period.
-.TP
-.IR tcp_stdurg " (Boolean; default: disabled; since Linux 2.2)"
-.\" Since Linux 2.1.44
-If this option is enabled, then use the RFC\ 1122 interpretation
-of the TCP urgent-pointer field.
-.\" RFC 793 was ambiguous in its specification of the meaning of the
-.\" urgent pointer. RFC 1122 (and RFC 961) fixed on a particular
-.\" resolution of this ambiguity (unfortunately the "wrong" one).
-According to this interpretation, the urgent pointer points
-to the last byte of urgent data.
-If this option is disabled, then use the BSD-compatible interpretation of
-the urgent pointer:
-the urgent pointer points to the first byte after the urgent data.
-Enabling this option may lead to interoperability problems.
-.TP
-.IR tcp_syn_retries " (integer; default: 6; since Linux 2.2)"
-.\" Since Linux 2.1.38
-The maximum number of times initial SYNs for an active TCP
-connection attempt will be retransmitted.
-This value should not be higher than 255.
-The default value is 6, which corresponds to retrying for up to
-approximately 127 seconds.
-Before Linux 3.7,
-.\" commit 6c9ff979d1921e9fd05d89e1383121c2503759b9
-the default value was 5, which
-(in conjunction with calculation based on other kernel parameters)
-corresponded to approximately 180 seconds.
-.TP
-.IR tcp_synack_retries " (integer; default: 5; since Linux 2.2)"
-.\" Since Linux 2.1.38
-The maximum number of times a SYN/ACK segment
-for a passive TCP connection will be retransmitted.
-This number should not be higher than 255.
-.TP
-.IR tcp_syncookies " (integer; default: 1; since Linux 2.2)"
-.\" Since Linux 2.1.43
-Enable TCP syncookies.
-The kernel must be compiled with
-.BR CONFIG_SYN_COOKIES .
-The syncookies feature attempts to protect a
-socket from a SYN flood attack.
-This should be used as a last resort, if at all.
-This is a violation of the TCP protocol,
-and conflicts with other areas of TCP such as TCP extensions.
-It can cause problems for clients and relays.
-It is not recommended as a tuning mechanism for heavily
-loaded servers to help with overloaded or misconfigured conditions.
-For recommended alternatives see
-.IR tcp_max_syn_backlog ,
-.IR tcp_synack_retries ,
-and
-.IR tcp_abort_on_overflow .
-Set to one of the following values:
-.RS
-.TP
-.B 0
-Disable TCP syncookies.
-.TP
-.B 1
-Send out syncookies when the syn backlog queue of a socket overflows.
-.TP
-.B 2
-(since Linux 3.12)
-.\" commit 5ad37d5deee1ff7150a2d0602370101de158ad86
-Send out syncookies unconditionally.
-This can be useful for network testing.
-.RE
-.TP
-.IR tcp_timestamps " (integer; default: 1; since Linux 2.2)"
-.\" Since Linux 2.1.36
-Set to one of the following values to enable or disable RFC\ 1323
-TCP timestamps:
-.RS
-.TP
-.B 0
-Disable timestamps.
-.TP
-.B 1
-Enable timestamps as defined in RFC1323 and use random offset for
-each connection rather than only using the current time.
-.TP
-.B 2
-As for the value 1, but without random offsets.
-.\" commit 25429d7b7dca01dc4f17205de023a30ca09390d0
-Setting
-.I tcp_timestamps
-to this value is meaningful since Linux 4.10.
-.RE
-.TP
-.IR tcp_tso_win_divisor " (integer; default: 3; since Linux 2.6.9)"
-This parameter controls what percentage of the congestion window
-can be consumed by a single TCP Segmentation Offload (TSO) frame.
-The setting of this parameter is a tradeoff between burstiness and
-building larger TSO frames.
-.TP
-.IR tcp_tw_recycle " (Boolean; default: disabled; Linux 2.4 to Linux 4.11)"
-.\" Since Linux 2.3.15
-.\" removed in Linux 4.12; commit 4396e46187ca5070219b81773c4e65088dac50cc
-Enable fast recycling of TIME_WAIT sockets.
-Enabling this option is
-not recommended as the remote IP may not use monotonically increasing
-timestamps (devices behind NAT, devices with per-connection timestamp
-offsets).
-See RFC 1323 (PAWS) and RFC 6191.
-.\"
-.\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt
-.TP
-.IR tcp_tw_reuse " (Boolean; default: disabled; since Linux 2.4.19/2.6)"
-.\" Since Linux 2.4.19/2.5.43
-Allow to reuse TIME_WAIT sockets for new connections when it is
-safe from protocol viewpoint.
-It should not be changed without advice/request of technical experts.
-.\"
-.\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt
-.TP
-.IR tcp_vegas_cong_avoid " (Boolean; default: disabled; Linux 2.2 to Linux 2.6.13)"
-.\" Since Linux 2.1.8; removed in Linux 2.6.13
-Enable TCP Vegas congestion avoidance algorithm.
-TCP Vegas is a sender-side-only change to TCP that anticipates
-the onset of congestion by estimating the bandwidth.
-TCP Vegas adjusts the sending rate by modifying the congestion window.
-TCP Vegas should provide less packet loss, but it is
-not as aggressive as TCP Reno.
-.\"
-.\" The following is from Linux 2.6.12: Documentation/networking/ip-sysctl.txt
-.TP
-.IR tcp_westwood " (Boolean; default: disabled; Linux 2.4.26/2.6.3 to Linux 2.6.13)"
-Enable TCP Westwood+ congestion control algorithm.
-TCP Westwood+ is a sender-side-only modification of the TCP Reno
-protocol stack that optimizes the performance of TCP congestion control.
-It is based on end-to-end bandwidth estimation to set
-congestion window and slow start threshold after a congestion episode.
-Using this estimation, TCP Westwood+ adaptively sets a
-slow start threshold and a congestion window which takes into
-account the bandwidth used at the time congestion is experienced.
-TCP Westwood+ significantly increases fairness with respect to
-TCP Reno in wired networks and throughput over wireless links.
-.TP
-.IR tcp_window_scaling " (Boolean; default: enabled; since Linux 2.2)"
-.\" Since Linux 2.1.36
-Enable RFC\ 1323 TCP window scaling.
-This feature allows the use of a large window
-(> 64\ kB) on a TCP connection, should the other end support it.
-Normally, the 16 bit window length field in the TCP header
-limits the window size to less than 64\ kB.
-If larger windows are desired, applications can increase the size of
-their socket buffers and the window scaling option will be employed.
-If
-.I tcp_window_scaling
-is disabled, TCP will not negotiate the use of window
-scaling with the other end during connection setup.
-.TP
-.IR tcp_wmem " (since Linux 2.4)"
-.\" Since Linux 2.4.0-test7
-This is a vector of 3 integers: [min, default, max].
-These parameters are used by TCP to regulate send buffer sizes.
-TCP dynamically adjusts the size of the send buffer from the
-default values listed below, in the range of these values,
-depending on memory available.
-.RS
-.TP
-.I min
-Minimum size of the send buffer used by each TCP socket.
-The default value is the system page size.
-(On Linux 2.4, the default value is 4\ kB.)
-This value is used to ensure that in memory pressure mode,
-allocations below this size will still succeed.
-This is not used to bound the size of the send buffer declared using
-.B SO_SNDBUF
-on a socket.
-.TP
-.I default
-The default size of the send buffer for a TCP socket.
-This value overwrites the initial default buffer size from
-the generic global
-.I /proc/sys/net/core/wmem_default
-defined for all protocols.
-The default value is 16\ kB.
-.\" True in Linux 2.4 and 2.6
-If larger send buffer sizes are desired, this value
-should be increased (to affect all sockets).
-To employ large TCP windows, the
-.I /proc/sys/net/ipv4/tcp_window_scaling
-must be set to a nonzero value (default).
-.TP
-.I max
-The maximum size of the send buffer used by each TCP socket.
-This value does not override the value in
-.IR /proc/sys/net/core/wmem_max .
-This is not used to limit the size of the send buffer declared using
-.B SO_SNDBUF
-on a socket.
-The default value is calculated using the formula
-.IP
-.in +4n
-.EX
-max(65536, min(4\ MB, \fItcp_mem\fP[1]*PAGE_SIZE/128))
-.EE
-.in
-.IP
-(On Linux 2.4, the default value is 128\ kB,
-lowered 64\ kB depending on low-memory systems.)
-.RE
-.TP
-.IR tcp_workaround_signed_windows " (Boolean; default: disabled; since Linux 2.6.26)"
-If enabled, assume that no receipt of a window-scaling option means that the
-remote TCP is broken and treats the window as a signed quantity.
-If disabled, assume that the remote TCP is not broken even if we do
-not receive a window scaling option from it.
-.SS Socket options
-To set or get a TCP socket option, call
-.BR getsockopt (2)
-to read or
-.BR setsockopt (2)
-to write the option with the option level argument set to
-.BR IPPROTO_TCP .
-Unless otherwise noted,
-.I optval
-is a pointer to an
-.IR int .
-.\" or SOL_TCP on Linux
-In addition,
-most
-.B IPPROTO_IP
-socket options are valid on TCP sockets.
-For more information see
-.BR ip (7).
-.PP
-Following is a list of TCP-specific socket options.
-For details of some other socket options that are also applicable
-for TCP sockets, see
-.BR socket (7).
-.TP
-.BR TCP_CONGESTION " (since Linux 2.6.13)"
-.\" commit 5f8ef48d240963093451bcf83df89f1a1364f51d
-.\" Author: Stephen Hemminger <shemminger@osdl.org>
-The argument for this option is a string.
-This option allows the caller to set the TCP congestion control
-algorithm to be used, on a per-socket basis.
-Unprivileged processes are restricted to choosing one of the algorithms in
-.I tcp_allowed_congestion_control
-(described above).
-Privileged processes
-.RB ( CAP_NET_ADMIN )
-can choose from any of the available congestion-control algorithms
-(see the description of
-.I tcp_available_congestion_control
-above).
-.TP
-.BR TCP_CORK " (since Linux 2.2)"
-.\" precisely: since Linux 2.1.127
-If set, don't send out partial frames.
-All queued partial frames are sent when the option is cleared again.
-This is useful for prepending headers before calling
-.BR sendfile (2),
-or for throughput optimization.
-As currently implemented, there is a 200 millisecond ceiling on the time
-for which output is corked by
-.BR TCP_CORK .
-If this ceiling is reached, then queued data is automatically transmitted.
-This option can be combined with
-.B TCP_NODELAY
-only since Linux 2.5.71.
-This option should not be used in code intended to be portable.
-.TP
-.BR TCP_DEFER_ACCEPT " (since Linux 2.4)"
-.\" Precisely: since Linux 2.3.38
-.\" Useful references:
-.\" http://www.techrepublic.com/article/take-advantage-of-tcp-ip-options-to-optimize-data-transmission/
-.\" http://unix.stackexchange.com/questions/94104/real-world-use-of-tcp-defer-accept
-Allow a listener to be awakened only when data arrives on the socket.
-Takes an integer value (seconds), this can
-bound the maximum number of attempts TCP will make to
-complete the connection.
-This option should not be used in code intended to be portable.
-.TP
-.BR TCP_INFO " (since Linux 2.4)"
-Used to collect information about this socket.
-The kernel returns a \fIstruct tcp_info\fP as defined in the file
-.IR /usr/include/linux/tcp.h .
-This option should not be used in code intended to be portable.
-.TP
-.BR TCP_KEEPCNT " (since Linux 2.4)"
-.\" Precisely: since Linux 2.3.18
-The maximum number of keepalive probes TCP should send
-before dropping the connection.
-This option should not be
-used in code intended to be portable.
-.TP
-.BR TCP_KEEPIDLE " (since Linux 2.4)"
-.\" Precisely: since Linux 2.3.18
-The time (in seconds) the connection needs to remain idle
-before TCP starts sending keepalive probes, if the socket
-option
-.B SO_KEEPALIVE
-has been set on this socket.
-This option should not be used in code intended to be portable.
-.TP
-.BR TCP_KEEPINTVL " (since Linux 2.4)"
-.\" Precisely: since Linux 2.3.18
-The time (in seconds) between individual keepalive probes.
-This option should not be used in code intended to be portable.
-.TP
-.BR TCP_LINGER2 " (since Linux 2.4)"
-.\" Precisely: since Linux 2.3.41
-The lifetime of orphaned FIN_WAIT2 state sockets.
-This option can be used to override the system-wide setting in the file
-.I /proc/sys/net/ipv4/tcp_fin_timeout
-for this socket.
-This is not to be confused with the
-.BR socket (7)
-level option
-.BR SO_LINGER .
-This option should not be used in code intended to be portable.
-.TP
-.B TCP_MAXSEG
-.\" Present in Linux 1.0
-The maximum segment size for outgoing TCP packets.
-In Linux 2.2 and earlier, and in Linux 2.6.28 and later,
-if this option is set before connection establishment, it also
-changes the MSS value announced to the other end in the initial packet.
-Values greater than the (eventual) interface MTU have no effect.
-TCP will also impose
-its minimum and maximum bounds over the value provided.
-.TP
-.B TCP_NODELAY
-.\" Present in Linux 1.0
-If set, disable the Nagle algorithm.
-This means that segments
-are always sent as soon as possible, even if there is only a
-small amount of data.
-When not set, data is buffered until there
-is a sufficient amount to send out, thereby avoiding the
-frequent sending of small packets, which results in poor
-utilization of the network.
-This option is overridden by
-.BR TCP_CORK ;
-however, setting this option forces an explicit flush of
-pending output, even if
-.B TCP_CORK
-is currently set.
-.TP
-.BR TCP_QUICKACK " (since Linux 2.4.4)"
-Enable quickack mode if set or disable quickack
-mode if cleared.
-In quickack mode, acks are sent
-immediately, rather than delayed if needed in accordance
-to normal TCP operation.
-This flag is not permanent,
-it only enables a switch to or from quickack mode.
-Subsequent operation of the TCP protocol will
-once again enter/leave quickack mode depending on
-internal protocol processing and factors such as
-delayed ack timeouts occurring and data transfer.
-This option should not be used in code intended to be
-portable.
-.TP
-.BR TCP_SYNCNT " (since Linux 2.4)"
-.\" Precisely: since Linux 2.3.18
-Set the number of SYN retransmits that TCP should send before
-aborting the attempt to connect.
-It cannot exceed 255.
-This option should not be used in code intended to be portable.
-.TP
-.BR TCP_USER_TIMEOUT " (since Linux 2.6.37)"
-.\" commit dca43c75e7e545694a9dd6288553f55c53e2a3a3
-.\" Author: Jerry Chu <hkchu@google.com>
-.\" The following text taken nearly verbatim from Jerry Chu's (excellent)
-.\" commit message.
-.\"
-This option takes an
-.I unsigned int
-as an argument.
-When the value is greater than 0,
-it specifies the maximum amount of time in milliseconds that transmitted
-data may remain unacknowledged, or buffered data may remain untransmitted
-(due to zero window size) before TCP will forcibly close the
-corresponding connection and return
-.B ETIMEDOUT
-to the application.
-If the option value is specified as 0,
-TCP will use the system default.
-.IP
-Increasing user timeouts allows a TCP connection to survive extended
-periods without end-to-end connectivity.
-Decreasing user timeouts
-allows applications to "fail fast", if so desired.
-Otherwise, failure may take up to 20 minutes with
-the current system defaults in a normal WAN environment.
-.IP
-This option can be set during any state of a TCP connection,
-but is effective only during the synchronized states of a connection
-(ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, and LAST-ACK).
-Moreover, when used with the TCP keepalive
-.RB ( SO_KEEPALIVE )
-option,
-.B TCP_USER_TIMEOUT
-will override keepalive to determine when to close a
-connection due to keepalive failure.
-.IP
-The option has no effect on when TCP retransmits a packet,
-nor when a keepalive probe is sent.
-.IP
-This option, like many others, will be inherited by the socket returned by
-.BR accept (2),
-if it was set on the listening socket.
-.IP
-Further details on the user timeout feature can be found in
-RFC\ 793 and RFC\ 5482 ("TCP User Timeout Option").
-.TP
-.BR TCP_WINDOW_CLAMP " (since Linux 2.4)"
-.\" Precisely: since Linux 2.3.41
-Bound the size of the advertised window to this value.
-The kernel imposes a minimum size of SOCK_MIN_RCVBUF/2.
-This option should not be used in code intended to be
-portable.
-.TP
-.BR TCP_FASTOPEN " (since Linux 3.6)"
-This option enables Fast Open (RFC\~7413) on the listener socket.
-The value specifies the maximum length of pending SYNs
-(similar to the backlog argument in
-.BR listen (2)).
-Once enabled,
-the listener socket grants the TCP Fast Open cookie
-on incoming SYN with TCP Fast Open option.
-.IP
-More importantly it accepts the data in SYN with a valid Fast Open cookie
-and responds SYN-ACK acknowledging both the data and the SYN sequence.
-.BR accept (2)
-returns a socket that is available for read and write
-when the handshake has not completed yet.
-Thus the data exchange can commence before the handshake completes.
-This option requires enabling the server-side support on sysctl
-.I net.ipv4.tcp_fastopen
-(see above).
-For TCP Fast Open client-side support,
-see
-.BR send (2)
-.B MSG_FASTOPEN
-or
-.B TCP_FASTOPEN_CONNECT
-below.
-.TP
-.BR TCP_FASTOPEN_CONNECT " (since Linux 4.11)"
-This option enables an alternative way to perform Fast Open
-on the active side (client).
-When this option is enabled,
-.BR connect (2)
-would behave differently depending on
-if a Fast Open cookie is available for the destination.
-.IP
-If a cookie is not available (i.e. first contact to the destination),
-.BR connect (2)
-behaves as usual by sending a SYN immediately,
-except the SYN would include an empty Fast Open cookie option
-to solicit a cookie.
-.IP
-If a cookie is available,
-.BR connect (2)
-would return 0 immediately but the SYN transmission is deferred.
-A subsequent
-.BR write (2)
-or
-.BR sendmsg (2)
-would trigger a SYN with data plus cookie in the Fast Open option.
-In other words,
-the actual connect operation is deferred until data is supplied.
-.IP
-.B Note:
-While this option is designed for convenience,
-enabling it does change the behaviors and certain system calls might set
-different
-.I errno
-values.
-With cookie present,
-.BR write (2)
-or
-.BR sendmsg (2)
-must be called right after
-.BR connect (2)
-in order to send out SYN+data to complete 3WHS and establish connection.
-Calling
-.BR read (2)
-right after
-.BR connect (2)
-without
-.BR write (2)
-will cause the blocking socket to be blocked forever.
-.IP
-The application should either set
-.B TCP_FASTOPEN_CONNECT
-socket option before
-.BR write (2)
-or
-.BR sendmsg (2),
-or call
-.BR write (2)
-or
-.BR sendmsg (2)
-with
-.B MSG_FASTOPEN
-flag directly,
-instead of both on the same connection.
-.IP
-Here is the typical call flow with this new option:
-.IP
-.in +4n
-.EX
-s = socket();
-setsockopt(s, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, 1, ...);
-connect(s);
-write(s); /* write() should always follow connect()
- * in order to trigger SYN to go out. */
-read(s)/write(s);
-/* ... */
-close(s);
-.EE
-.in
-.SS Sockets API
-TCP provides limited support for out-of-band data,
-in the form of (a single byte of) urgent data.
-In Linux this means if the other end sends newer out-of-band
-data the older urgent data is inserted as normal data into
-the stream (even when
-.B SO_OOBINLINE
-is not set).
-This differs from BSD-based stacks.
-.PP
-Linux uses the BSD compatible interpretation of the urgent
-pointer field by default.
-This violates RFC\ 1122, but is
-required for interoperability with other stacks.
-It can be changed via
-.IR /proc/sys/net/ipv4/tcp_stdurg .
-.PP
-It is possible to peek at out-of-band data using the
-.BR recv (2)
-.B MSG_PEEK
-flag.
-.PP
-Since Linux 2.4, Linux supports the use of
-.B MSG_TRUNC
-in the
-.I flags
-argument of
-.BR recv (2)
-(and
-.BR recvmsg (2)).
-This flag causes the received bytes of data to be discarded,
-rather than passed back in a caller-supplied buffer.
-Since Linux 2.4.4,
-.B MSG_TRUNC
-also has this effect when used in conjunction with
-.B MSG_OOB
-to receive out-of-band data.
-.SS Ioctls
-The following
-.BR ioctl (2)
-calls return information in
-.IR value .
-The correct syntax is:
-.PP
-.RS
-.nf
-.BI int " value";
-.IB error " = ioctl(" tcp_socket ", " ioctl_type ", &" value ");"
-.fi
-.RE
-.PP
-.I ioctl_type
-is one of the following:
-.TP
-.B SIOCINQ
-Returns the amount of queued unread data in the receive buffer.
-The socket must not be in LISTEN state, otherwise an error
-.RB ( EINVAL )
-is returned.
-.B SIOCINQ
-is defined in
-.IR <linux/sockios.h> .
-.\" FIXME https://www.sourceware.org/bugzilla/show_bug.cgi?id=12002,
-.\" filed 2010-09-10, may cause SIOCINQ to be defined in glibc headers
-Alternatively,
-you can use the synonymous
-.BR FIONREAD ,
-defined in
-.IR <sys/ioctl.h> .
-.TP
-.B SIOCATMARK
-Returns true (i.e.,
-.I value
-is nonzero) if the inbound data stream is at the urgent mark.
-.IP
-If the
-.B SO_OOBINLINE
-socket option is set, and
-.B SIOCATMARK
-returns true, then the
-next read from the socket will return the urgent data.
-If the
-.B SO_OOBINLINE
-socket option is not set, and
-.B SIOCATMARK
-returns true, then the
-next read from the socket will return the bytes following
-the urgent data (to actually read the urgent data requires the
-.B recv(MSG_OOB)
-flag).
-.IP
-Note that a read never reads across the urgent mark.
-If an application is informed of the presence of urgent data via
-.BR select (2)
-(using the
-.I exceptfds
-argument) or through delivery of a
-.B SIGURG
-signal,
-then it can advance up to the mark using a loop which repeatedly tests
-.B SIOCATMARK
-and performs a read (requesting any number of bytes) as long as
-.B SIOCATMARK
-returns false.
-.TP
-.B SIOCOUTQ
-Returns the amount of unsent data in the socket send queue.
-The socket must not be in LISTEN state, otherwise an error
-.RB ( EINVAL )
-is returned.
-.B SIOCOUTQ
-is defined in
-.IR <linux/sockios.h> .
-.\" FIXME . https://www.sourceware.org/bugzilla/show_bug.cgi?id=12002,
-.\" filed 2010-09-10, may cause SIOCOUTQ to be defined in glibc headers
-Alternatively,
-you can use the synonymous
-.BR TIOCOUTQ ,
-defined in
-.IR <sys/ioctl.h> .
-.SS Error handling
-When a network error occurs, TCP tries to resend the packet.
-If it doesn't succeed after some time, either
-.B ETIMEDOUT
-or the last received error on this connection is reported.
-.PP
-Some applications require a quicker error notification.
-This can be enabled with the
-.B IPPROTO_IP
-level
-.B IP_RECVERR
-socket option.
-When this option is enabled, all incoming
-errors are immediately passed to the user program.
-Use this option with care \[em] it makes TCP less tolerant to routing
-changes and other normal network conditions.
-.SH ERRORS
-.TP
-.B EAFNOTSUPPORT
-Passed socket address type in
-.I sin_family
-was not
-.BR AF_INET .
-.TP
-.B EPIPE
-The other end closed the socket unexpectedly or a read is
-executed on a shut down socket.
-.TP
-.B ETIMEDOUT
-The other end didn't acknowledge retransmitted data after some time.
-.PP
-Any errors defined for
-.BR ip (7)
-or the generic socket layer may also be returned for TCP.
-.SH VERSIONS
-Support for Explicit Congestion Notification, zero-copy
-.BR sendfile (2),
-reordering support and some SACK extensions
-(DSACK) were introduced in Linux 2.4.
-Support for forward acknowledgement (FACK), TIME_WAIT recycling,
-and per-connection keepalive socket options were introduced in Linux 2.3.
-.SH BUGS
-Not all errors are documented.
-.PP
-IPv6 is not described.
-.\" Only a single Linux kernel version is described
-.\" Info for 2.2 was lost. Should be added again,
-.\" or put into a separate page.
-.\" .SH AUTHORS
-.\" This man page was originally written by Andi Kleen.
-.\" It was updated for 2.4 by Nivedita Singhvi with input from
-.\" Alexey Kuznetsov's Documentation/networking/ip-sysctl.txt
-.\" document.
-.SH SEE ALSO
-.BR accept (2),
-.BR bind (2),
-.BR connect (2),
-.BR getsockopt (2),
-.BR listen (2),
-.BR recvmsg (2),
-.BR sendfile (2),
-.BR sendmsg (2),
-.BR socket (2),
-.BR ip (7),
-.BR socket (7)
-.PP
-The kernel source file
-.IR Documentation/networking/ip\-sysctl.txt .
-.PP
-RFC\ 793 for the TCP specification.
-.br
-RFC\ 1122 for the TCP requirements and a description of the Nagle algorithm.
-.br
-RFC\ 1323 for TCP timestamp and window scaling options.
-.br
-RFC\ 1337 for a description of TIME_WAIT assassination hazards.
-.br
-RFC\ 3168 for a description of Explicit Congestion Notification.
-.br
-RFC\ 2581 for TCP congestion control algorithms.
-.br
-RFC\ 2018 and RFC\ 2883 for SACK and extensions to SACK.
diff --git a/man7/termio.7 b/man7/termio.7
deleted file mode 100644
index 89684955e..000000000
--- a/man7/termio.7
+++ /dev/null
@@ -1,45 +0,0 @@
-.\" Copyright (c) 2006 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 28 Dec 2006 - Initial Creation
-.\"
-.TH termio 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-termio \- System V terminal driver interface
-.SH DESCRIPTION
-.B termio
-is the name of the old System V terminal driver interface.
-This interface defined a
-.I termio
-structure used to store terminal settings, and a range of
-.BR ioctl (2)
-operations to get and set terminal attributes.
-.PP
-The
-.B termio
-interface is now obsolete: POSIX.1-1990 standardized a modified
-version of this interface, under the name
-.BR termios .
-The POSIX.1 data structure differs slightly from the
-System V version, and POSIX.1 defined a suite of functions
-to replace the various
-.BR ioctl (2)
-operations that existed in System V.
-(This was done because
-.BR ioctl (2)
-was unstandardized, and its variadic third argument
-does not allow argument type checking.)
-.PP
-If you're looking for a page called "termio", then you can probably
-find most of the information that you seek in either
-.BR termios (3)
-or
-.BR ioctl_tty (2).
-.SH SEE ALSO
-.BR reset (1),
-.BR setterm (1),
-.BR stty (1),
-.BR ioctl_tty (2),
-.BR termios (3),
-.BR tty (4)
diff --git a/man7/thread-keyring.7 b/man7/thread-keyring.7
deleted file mode 100644
index b47f68243..000000000
--- a/man7/thread-keyring.7
+++ /dev/null
@@ -1,50 +0,0 @@
-.\" Copyright (C) 2014 Red Hat, Inc. All Rights Reserved.
-.\" Written by David Howells (dhowells@redhat.com)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH thread-keyring 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-thread-keyring \- per-thread keyring
-.SH DESCRIPTION
-The thread keyring is a keyring used to anchor keys on behalf of a process.
-It is created only when a thread requests it.
-The thread keyring has the name (description)
-.IR _tid .
-.PP
-A special serial number value,
-.BR KEY_SPEC_THREAD_KEYRING ,
-is defined that can be used in lieu of the actual serial number of
-the calling thread's thread keyring.
-.PP
-From the
-.BR keyctl (1)
-utility, '\fB@t\fP' can be used instead of a numeric key ID in
-much the same way, but as
-.BR keyctl (1)
-is a program run after forking, this is of no utility.
-.PP
-Thread keyrings are not inherited across
-.BR clone (2)
-and
-.BR fork (2)
-and are cleared by
-.BR execve (2).
-A thread keyring is destroyed when the thread that refers to it terminates.
-.PP
-Initially, a thread does not have a thread keyring.
-If a thread doesn't have a thread keyring when it is accessed,
-then it will be created if it is to be modified;
-otherwise the operation fails with the error
-.BR ENOKEY .
-.SH SEE ALSO
-.ad l
-.nh
-.BR keyctl (1),
-.BR keyctl (3),
-.BR keyrings (7),
-.BR persistent\-keyring (7),
-.BR process\-keyring (7),
-.BR session\-keyring (7),
-.BR user\-keyring (7),
-.BR user\-session\-keyring (7)
diff --git a/man7/time.7 b/man7/time.7
deleted file mode 100644
index b70b60218..000000000
--- a/man7/time.7
+++ /dev/null
@@ -1,218 +0,0 @@
-.\" Copyright (c) 2006 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" 2008-06-24, mtk: added some details about where jiffies come into
-.\" play; added section on high-resolution timers.
-.\"
-.TH time 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-time \- overview of time and timers
-.SH DESCRIPTION
-.SS Real time and process time
-.I "Real time"
-is defined as time measured from some fixed point,
-either from a standard point in the past
-(see the description of the Epoch and calendar time below),
-or from some point (e.g., the start) in the life of a process
-.RI ( "elapsed time" ).
-.PP
-.I "Process time"
-is defined as the amount of CPU time used by a process.
-This is sometimes divided into
-.I user
-and
-.I system
-components.
-User CPU time is the time spent executing code in user mode.
-System CPU time is the time spent by the kernel executing
-in system mode on behalf of the process (e.g., executing system calls).
-The
-.BR time (1)
-command can be used to determine the amount of CPU time consumed
-during the execution of a program.
-A program can determine the amount of CPU time it has consumed using
-.BR times (2),
-.BR getrusage (2),
-or
-.BR clock (3).
-.SS The hardware clock
-Most computers have a (battery-powered) hardware clock which the kernel
-reads at boot time in order to initialize the software clock.
-For further details, see
-.BR rtc (4)
-and
-.BR hwclock (8).
-.SS The software clock, HZ, and jiffies
-The accuracy of various system calls that set timeouts,
-(e.g.,
-.BR select (2),
-.BR sigtimedwait (2))
-.\" semtimedop(), mq_timedwait(), io_getevents(), poll() are the same
-.\" futexes and thus sem_timedwait() seem to use high-res timers.
-and measure CPU time (e.g.,
-.BR getrusage (2))
-is limited by the resolution of the
-.IR "software clock" ,
-a clock maintained by the kernel which measures time in
-.IR jiffies .
-The size of a jiffy is determined by the value of the kernel constant
-.IR HZ .
-.PP
-The value of
-.I HZ
-varies across kernel versions and hardware platforms.
-On i386 the situation is as follows:
-on kernels up to and including Linux 2.4.x,
-HZ was 100,
-giving a jiffy value of 0.01 seconds;
-starting with Linux 2.6.0,
-HZ was raised to 1000,
-giving a jiffy of 0.001 seconds.
-Since Linux 2.6.13, the HZ value is a kernel
-configuration parameter and can be 100, 250 (the default) or 1000,
-yielding a jiffies value of, respectively, 0.01, 0.004, or 0.001 seconds.
-Since Linux 2.6.20, a further frequency is available:
-300, a number that divides evenly for the common video frame rates
-(PAL, 25 Hz; NTSC, 30 Hz).
-.PP
-The
-.BR times (2)
-system call is a special case.
-It reports times with a granularity defined by the kernel constant
-.IR USER_HZ .
-User-space applications can determine the value of this constant using
-.IR sysconf(_SC_CLK_TCK) .
-.\" glibc gets this info with a little help from the ELF loader;
-.\" see glibc elf/dl-support.c and kernel fs/binfmt_elf.c.
-.\"
-.SS System and process clocks; time namespaces
-The kernel supports a range of clocks that measure various kinds of
-elapsed and virtual (i.e., consumed CPU) time.
-These clocks are described in
-.BR clock_gettime (2).
-A few of the clocks are settable using
-.BR clock_settime (2).
-The values of certain clocks are virtualized by time namespaces; see
-.BR time_namespaces (7).
-.\"
-.SS High-resolution timers
-Before Linux 2.6.21, the accuracy of timer and sleep system calls
-(see below) was also limited by the size of the jiffy.
-.PP
-Since Linux 2.6.21, Linux supports high-resolution timers (HRTs),
-optionally configurable via
-.BR CONFIG_HIGH_RES_TIMERS .
-On a system that supports HRTs, the accuracy of sleep and timer
-system calls is no longer constrained by the jiffy,
-but instead can be as accurate as the hardware allows
-(microsecond accuracy is typical of modern hardware).
-You can determine whether high-resolution timers are supported by
-checking the resolution returned by a call to
-.BR clock_getres (2)
-or looking at the "resolution" entries in
-.IR /proc/timer_list .
-.PP
-HRTs are not supported on all hardware architectures.
-(Support is provided on x86, ARM, and PowerPC, among others.)
-.SS The Epoch
-UNIX systems represent time in seconds since the
-.IR Epoch ,
-1970-01-01 00:00:00 +0000 (UTC).
-.PP
-A program can determine the
-.I "calendar time"
-via the
-.BR clock_gettime (2)
-.B CLOCK_REALTIME
-clock,
-which returns time (in seconds and nanoseconds) that have
-elapsed since the Epoch;
-.BR time (2)
-provides similar information, but only with accuracy to the
-nearest second.
-The system time can be changed using
-.BR clock_settime (2).
-.\"
-.SS Broken-down time
-Certain library functions use a structure of
-type
-.I tm
-to represent
-.IR "broken-down time" ,
-which stores time value separated out into distinct components
-(year, month, day, hour, minute, second, etc.).
-This structure is described in
-.BR tm (3type),
-which also describes functions that convert between calendar time and
-broken-down time.
-Functions for converting between broken-down time and printable
-string representations of the time are described in
-.BR ctime (3),
-.BR strftime (3),
-and
-.BR strptime (3).
-.SS Sleeping and setting timers
-Various system calls and functions allow a program to sleep
-(suspend execution) for a specified period of time; see
-.BR nanosleep (2),
-.BR clock_nanosleep (2),
-and
-.BR sleep (3).
-.PP
-Various system calls allow a process to set a timer that expires
-at some point in the future, and optionally at repeated intervals;
-see
-.BR alarm (2),
-.BR getitimer (2),
-.BR timerfd_create (2),
-and
-.BR timer_create (2).
-.SS Timer slack
-Since Linux 2.6.28, it is possible to control the "timer slack"
-value for a thread.
-The timer slack is the length of time by
-which the kernel may delay the wake-up of certain
-system calls that block with a timeout.
-Permitting this delay allows the kernel to coalesce wake-up events,
-thus possibly reducing the number of system wake-ups and saving power.
-For more details, see the description of
-.B PR_SET_TIMERSLACK
-in
-.BR prctl (2).
-.SH SEE ALSO
-.ad l
-.nh
-.BR date (1),
-.BR time (1),
-.BR timeout (1),
-.BR adjtimex (2),
-.BR alarm (2),
-.BR clock_gettime (2),
-.BR clock_nanosleep (2),
-.BR getitimer (2),
-.BR getrlimit (2),
-.BR getrusage (2),
-.BR gettimeofday (2),
-.BR nanosleep (2),
-.BR stat (2),
-.BR time (2),
-.BR timer_create (2),
-.BR timerfd_create (2),
-.BR times (2),
-.BR utime (2),
-.BR adjtime (3),
-.BR clock (3),
-.BR clock_getcpuclockid (3),
-.BR ctime (3),
-.BR ntp_adjtime (3),
-.BR ntp_gettime (3),
-.BR pthread_getcpuclockid (3),
-.BR sleep (3),
-.BR strftime (3),
-.BR strptime (3),
-.BR timeradd (3),
-.BR usleep (3),
-.BR rtc (4),
-.BR time_namespaces (7),
-.BR hwclock (8)
diff --git a/man7/time_namespaces.7 b/man7/time_namespaces.7
deleted file mode 100644
index 8c31b5f95..000000000
--- a/man7/time_namespaces.7
+++ /dev/null
@@ -1,345 +0,0 @@
-.\" Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH time_namespaces 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-time_namespaces \- overview of Linux time namespaces
-.SH DESCRIPTION
-Time namespaces virtualize the values of two system clocks:
-.IP \[bu] 3
-.B CLOCK_MONOTONIC
-(and likewise
-.B CLOCK_MONOTONIC_COARSE
-and
-.BR CLOCK_MONOTONIC_RAW ),
-a nonsettable clock that represents monotonic time since\[em]as
-described by POSIX\[em]"some unspecified point in the past".
-.IP \[bu]
-.B CLOCK_BOOTTIME
-(and likewise
-.BR CLOCK_BOOTTIME_ALARM ),
-a nonsettable clock that is identical to
-.BR CLOCK_MONOTONIC ,
-except that it also includes any time that the system is suspended.
-.PP
-Thus, the processes in a time namespace share per-namespace values
-for these clocks.
-This affects various APIs that measure against these clocks, including:
-.BR clock_gettime (2),
-.BR clock_nanosleep (2),
-.BR nanosleep (2),
-.BR timer_settime (2),
-.BR timerfd_settime (2),
-and
-.IR /proc/uptime .
-.PP
-Currently, the only way to create a time namespace is by calling
-.BR unshare (2)
-with the
-.B CLONE_NEWTIME
-flag.
-This call creates a new time namespace but does
-.I not
-place the calling process in the new namespace.
-Instead, the calling process's
-subsequently created children are placed in the new namespace.
-This allows clock offsets (see below) for the new namespace
-to be set before the first process is placed in the namespace.
-The
-.IR /proc/ pid /ns/time_for_children
-symbolic link shows the time namespace in which
-the children of a process will be created.
-(A process can use a file descriptor opened on
-this symbolic link in a call to
-.BR setns (2)
-in order to move into the namespace.)
-.\"
-.SS \fI/proc/\fPpid\fI/timens_offsets\fP
-Associated with each time namespace are offsets,
-expressed with respect to the initial time namespace,
-that define the values of the monotonic and
-boot-time clocks in that namespace.
-These offsets are exposed via the file
-.IR /proc/ pid /timens_offsets .
-Within this file,
-the offsets are expressed as lines consisting of
-three space-delimited fields:
-.PP
-.in +4n
-.EX
-<clock-id> <offset-secs> <offset-nanosecs>
-.EE
-.in
-.PP
-The
-.I clock-id
-is a string that identifies the clock whose offsets are being shown.
-This field is either
-.IR monotonic ,
-for
-.BR CLOCK_MONOTONIC ,
-or
-.IR boottime ,
-for
-.BR CLOCK_BOOTTIME .
-The remaining fields express the offset (seconds plus nanoseconds) for the
-clock in this time namespace.
-These offsets are expressed relative to the clock values in
-the initial time namespace.
-The
-.I offset-secs
-value can be negative, subject to restrictions noted below;
-.I offset-nanosecs
-is an unsigned value.
-.PP
-In the initial time namespace, the contents of the
-.I timens_offsets
-file are as follows:
-.PP
-.in +4n
-.EX
-$ \fBcat /proc/self/timens_offsets\fP
-monotonic 0 0
-boottime 0 0
-.EE
-.in
-.PP
-In a new time namespace that has had no member processes,
-the clock offsets can be modified by writing newline-terminated
-records of the same form to the
-.I timens_offsets
-file.
-The file can be written to multiple times,
-but after the first process has been created in or has entered the namespace,
-.BR write (2)s
-on this file fail with the error
-.BR EACCES .
-In order to write to the
-.I timens_offsets
-file, a process must have the
-.B CAP_SYS_TIME
-capability in the user namespace that owns the time namespace.
-.PP
-Writes to the
-.I timens_offsets
-file can fail with the following errors:
-.TP
-.B EINVAL
-An
-.I offset-nanosecs
-value is greater than 999,999,999.
-.TP
-.B EINVAL
-A
-.I clock-id
-value is not valid.
-.TP
-.B EPERM
-The caller does not have the
-.B CAP_SYS_TIME
-capability.
-.TP
-.B ERANGE
-An
-.I offset-secs
-value is out of range.
-In particular;
-.RS
-.IP \[bu] 3
-.I offset-secs
-can't be set to a value which would make the current
-time on the corresponding clock inside the namespace a negative value; and
-.IP \[bu]
-.I offset-secs
-can't be set to a value such that the time on the corresponding clock
-inside the namespace would exceed half of the value of the kernel constant
-.B KTIME_SEC_MAX
-(this limits the clock value to a maximum of approximately 146 years).
-.RE
-.PP
-In a new time namespace created by
-.BR unshare (2),
-the contents of the
-.I timens_offsets
-file are inherited from the time namespace of the creating process.
-.SH NOTES
-Use of time namespaces requires a kernel that is configured with the
-.B CONFIG_TIME_NS
-option.
-.PP
-Note that time namespaces do not virtualize the
-.B CLOCK_REALTIME
-clock.
-Virtualization of this clock was avoided for reasons of complexity
-and overhead within the kernel.
-.PP
-For compatibility with the initial implementation, when writing a
-.I clock-id
-to the
-.IR /proc/ pid /timens_offsets
-file, the numerical values of the IDs can be written
-instead of the symbolic names show above; i.e., 1 instead of
-.IR monotonic ,
-and 7 instead of
-.IR boottime .
-For readability, the use of the symbolic names over the numbers is preferred.
-.PP
-The motivation for adding time namespaces was to allow
-the monotonic and boot-time clocks to maintain consistent values
-during container migration and checkpoint/restore.
-.SH EXAMPLES
-The following shell session demonstrates the operation of time namespaces.
-We begin by displaying the inode number of the time namespace
-of a shell in the initial time namespace:
-.PP
-.in +4n
-.EX
-$ \fBreadlink /proc/$$/ns/time\fP
-time:[4026531834]
-.EE
-.in
-.PP
-Continuing in the initial time namespace, we display the system uptime using
-.BR uptime (1)
-and use the
-.I clock_times
-example program shown in
-.BR clock_getres (2)
-to display the values of various clocks:
-.PP
-.in +4n
-.EX
-$ \fBuptime \-\-pretty\fP
-up 21 hours, 17 minutes
-$ \fB./clock_times\fP
-CLOCK_REALTIME : 1585989401.971 (18356 days + 8h 36m 41s)
-CLOCK_TAI : 1585989438.972 (18356 days + 8h 37m 18s)
-CLOCK_MONOTONIC: 56338.247 (15h 38m 58s)
-CLOCK_BOOTTIME : 76633.544 (21h 17m 13s)
-.EE
-.in
-.PP
-We then use
-.BR unshare (1)
-to create a time namespace and execute a
-.BR bash (1)
-shell.
-From the new shell, we use the built-in
-.B echo
-command to write records to the
-.I timens_offsets
-file adjusting the offset for the
-.B CLOCK_MONOTONIC
-clock forward 2 days
-and the offset for the
-.B CLOCK_BOOTTIME
-clock forward 7 days:
-.PP
-.in +4n
-.EX
-$ \fBPS1="ns2# " sudo unshare \-T \-\- bash \-\-norc\fP
-ns2# \fBecho "monotonic $((2*24*60*60)) 0" > /proc/$$/timens_offsets\fP
-ns2# \fBecho "boottime $((7*24*60*60)) 0" > /proc/$$/timens_offsets\fP
-.EE
-.in
-.PP
-Above, we started the
-.BR bash (1)
-shell with the
-.B \-\-norc
-option so that no start-up scripts were executed.
-This ensures that no child processes are created from the
-shell before we have a chance to update the
-.I timens_offsets
-file.
-.PP
-We then use
-.BR cat (1)
-to display the contents of the
-.I timens_offsets
-file.
-The execution of
-.BR cat (1)
-creates the first process in the new time namespace,
-after which further attempts to update the
-.I timens_offsets
-file produce an error.
-.PP
-.in +4n
-.EX
-ns2# \fBcat /proc/$$/timens_offsets\fP
-monotonic 172800 0
-boottime 604800 0
-ns2# \fBecho "boottime $((9*24*60*60)) 0" > /proc/$$/timens_offsets\fP
-bash: echo: write error: Permission denied
-.EE
-.in
-.PP
-Continuing in the new namespace, we execute
-.BR uptime (1)
-and the
-.I clock_times
-example program:
-.PP
-.in +4n
-.EX
-ns2# \fBuptime \-\-pretty\fP
-up 1 week, 21 hours, 18 minutes
-ns2# \fB./clock_times\fP
-CLOCK_REALTIME : 1585989457.056 (18356 days + 8h 37m 37s)
-CLOCK_TAI : 1585989494.057 (18356 days + 8h 38m 14s)
-CLOCK_MONOTONIC: 229193.332 (2 days + 15h 39m 53s)
-CLOCK_BOOTTIME : 681488.629 (7 days + 21h 18m 8s)
-.EE
-.in
-.PP
-From the above output, we can see that the monotonic
-and boot-time clocks have different values in the new time namespace.
-.PP
-Examining the
-.IR /proc/ pid /ns/time
-and
-.IR /proc/ pid /ns/time_for_children
-symbolic links, we see that the shell is a member of the initial time
-namespace, but its children are created in the new namespace.
-.PP
-.in +4n
-.EX
-ns2# \fBreadlink /proc/$$/ns/time\fP
-time:[4026531834]
-ns2# \fBreadlink /proc/$$/ns/time_for_children\fP
-time:[4026532900]
-ns2# \fBreadlink /proc/self/ns/time\fP # Creates a child process
-time:[4026532900]
-.EE
-.in
-.PP
-Returning to the shell in the initial time namespace,
-we see that the monotonic and boot-time clocks
-are unaffected by the
-.I timens_offsets
-changes that were made in the other time namespace:
-.PP
-.in +4n
-.EX
-$ \fBuptime \-\-pretty\fP
-up 21 hours, 19 minutes
-$ \fB./clock_times\fP
-CLOCK_REALTIME : 1585989401.971 (18356 days + 8h 38m 51s)
-CLOCK_TAI : 1585989438.972 (18356 days + 8h 39m 28s)
-CLOCK_MONOTONIC: 56338.247 (15h 41m 8s)
-CLOCK_BOOTTIME : 76633.544 (21h 19m 23s)
-.EE
-.in
-.SH SEE ALSO
-.BR nsenter (1),
-.BR unshare (1),
-.BR clock_settime (2),
-.\" clone3() support for time namespaces is a work in progress
-.\" .BR clone3 (2),
-.BR setns (2),
-.BR unshare (2),
-.BR namespaces (7),
-.BR time (7)
diff --git a/man7/tis-620.7 b/man7/tis-620.7
deleted file mode 100644
index cbd4cfe7c..000000000
--- a/man7/tis-620.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/iso_8859-11.7
diff --git a/man7/udp.7 b/man7/udp.7
deleted file mode 100644
index 6225dda49..000000000
--- a/man7/udp.7
+++ /dev/null
@@ -1,317 +0,0 @@
-.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
-.\"
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" $Id: udp.7,v 1.7 2000/01/22 01:55:05 freitag Exp $
-.\"
-.TH udp 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-udp \- User Datagram Protocol for IPv4
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.B #include <netinet/in.h>
-.B #include <netinet/udp.h>
-.PP
-.IB udp_socket " = socket(AF_INET, SOCK_DGRAM, 0);"
-.fi
-.SH DESCRIPTION
-This is an implementation of the User Datagram Protocol
-described in RFC\ 768.
-It implements a connectionless, unreliable datagram packet service.
-Packets may be reordered or duplicated before they arrive.
-UDP generates and checks checksums to catch transmission errors.
-.PP
-When a UDP socket is created,
-its local and remote addresses are unspecified.
-Datagrams can be sent immediately using
-.BR sendto (2)
-or
-.BR sendmsg (2)
-with a valid destination address as an argument.
-When
-.BR connect (2)
-is called on the socket, the default destination address is set and
-datagrams can now be sent using
-.BR send (2)
-or
-.BR write (2)
-without specifying a destination address.
-It is still possible to send to other destinations by passing an
-address to
-.BR sendto (2)
-or
-.BR sendmsg (2).
-In order to receive packets, the socket can be bound to a local
-address first by using
-.BR bind (2).
-Otherwise, the socket layer will automatically assign
-a free local port out of the range defined by
-.I /proc/sys/net/ipv4/ip_local_port_range
-and bind the socket to
-.BR INADDR_ANY .
-.PP
-All receive operations return only one packet.
-When the packet is smaller than the passed buffer, only that much
-data is returned; when it is bigger, the packet is truncated and the
-.B MSG_TRUNC
-flag is set.
-.B MSG_WAITALL
-is not supported.
-.PP
-IP options may be sent or received using the socket options described in
-.BR ip (7).
-They are processed by the kernel only when the appropriate
-.I /proc
-parameter
-is enabled (but still passed to the user even when it is turned off).
-See
-.BR ip (7).
-.PP
-When the
-.B MSG_DONTROUTE
-flag is set on sending, the destination address must refer to a local
-interface address and the packet is sent only to that interface.
-.PP
-By default, Linux UDP does path MTU (Maximum Transmission Unit) discovery.
-This means the kernel
-will keep track of the MTU to a specific target IP address and return
-.B EMSGSIZE
-when a UDP packet write exceeds it.
-When this happens, the application should decrease the packet size.
-Path MTU discovery can be also turned off using the
-.B IP_MTU_DISCOVER
-socket option or the
-.I /proc/sys/net/ipv4/ip_no_pmtu_disc
-file; see
-.BR ip (7)
-for details.
-When turned off, UDP will fragment outgoing UDP packets
-that exceed the interface MTU.
-However, disabling it is not recommended
-for performance and reliability reasons.
-.SS Address format
-UDP uses the IPv4
-.I sockaddr_in
-address format described in
-.BR ip (7).
-.SS Error handling
-All fatal errors will be passed to the user as an error return even
-when the socket is not connected.
-This includes asynchronous errors
-received from the network.
-You may get an error for an earlier packet
-that was sent on the same socket.
-This behavior differs from many other BSD socket implementations
-which don't pass any errors unless the socket is connected.
-Linux's behavior is mandated by
-.BR RFC\ 1122 .
-.PP
-For compatibility with legacy code, in Linux 2.0 and 2.2
-it was possible to set the
-.B SO_BSDCOMPAT
-.B SOL_SOCKET
-option to receive remote errors only when the socket has been
-connected (except for
-.B EPROTO
-and
-.BR EMSGSIZE ).
-Locally generated errors are always passed.
-Support for this socket option was removed in later kernels; see
-.BR socket (7)
-for further information.
-.PP
-When the
-.B IP_RECVERR
-option is enabled, all errors are stored in the socket error queue,
-and can be received by
-.BR recvmsg (2)
-with the
-.B MSG_ERRQUEUE
-flag set.
-.SS /proc interfaces
-System-wide UDP parameter settings can be accessed by files in the directory
-.IR /proc/sys/net/ipv4/ .
-.TP
-.IR udp_mem " (since Linux 2.6.25)"
-This is a vector of three integers governing the number
-of pages allowed for queueing by all UDP sockets.
-.RS
-.TP
-.I min
-Below this number of pages, UDP is not bothered about its
-memory appetite.
-When the amount of memory allocated by UDP exceeds
-this number, UDP starts to moderate memory usage.
-.TP
-.I pressure
-This value was introduced to follow the format of
-.I tcp_mem
-(see
-.BR tcp (7)).
-.TP
-.I max
-Number of pages allowed for queueing by all UDP sockets.
-.RE
-.IP
-Defaults values for these three items are
-calculated at boot time from the amount of available memory.
-.TP
-.IR udp_rmem_min " (integer; default value: PAGE_SIZE; since Linux 2.6.25)"
-Minimal size, in bytes, of receive buffers used by UDP sockets in moderation.
-Each UDP socket is able to use the size for receiving data,
-even if total pages of UDP sockets exceed
-.I udp_mem
-pressure.
-.TP
-.IR udp_wmem_min " (integer; default value: PAGE_SIZE; since Linux 2.6.25)"
-Minimal size, in bytes, of send buffer used by UDP sockets in moderation.
-Each UDP socket is able to use the size for sending data,
-even if total pages of UDP sockets exceed
-.I udp_mem
-pressure.
-.SS Socket options
-To set or get a UDP socket option, call
-.BR getsockopt (2)
-to read or
-.BR setsockopt (2)
-to write the option with the option level argument set to
-.BR IPPROTO_UDP .
-Unless otherwise noted,
-.I optval
-is a pointer to an
-.IR int .
-.PP
-Following is a list of UDP-specific socket options.
-For details of some other socket options that are also applicable
-for UDP sockets, see
-.BR socket (7).
-.TP
-.BR UDP_CORK " (since Linux 2.5.44)"
-If this option is enabled, then all data output on this socket
-is accumulated into a single datagram that is transmitted when
-the option is disabled.
-This option should not be used in code intended to be
-portable.
-.\" FIXME document UDP_ENCAP (new in Linux 2.5.67)
-.\" From include/linux/udp.h:
-.\" UDP_ENCAP_ESPINUDP_NON_IKE draft-ietf-ipsec-nat-t-ike-00/01
-.\" UDP_ENCAP_ESPINUDP draft-ietf-ipsec-udp-encaps-06
-.\" UDP_ENCAP_L2TPINUDP rfc2661
-.\" FIXME Document UDP_NO_CHECK6_TX and UDP_NO_CHECK6_RX, added in Linux 3.16
-.TP
-.BR UDP_SEGMENT " (since Linux 4.18)"
-Enables UDP segmentation offload.
-Segmentation offload reduces
-.BR send (2)
-cost by transferring multiple datagrams worth of data
-as a single large packet through the kernel transmit path,
-even when that exceeds MTU.
-As late as possible,
-the large packet is split by segment size into a series of datagrams.
-This segmentation offload step is deferred to hardware if supported,
-else performed in software.
-This option takes a value in the range
-.RB [ 0 ,\~ USHRT_MAX ]
-that sets the segment size:
-the size of datagram payload,
-excluding the UDP header.
-The segment size must be chosen such that
-at most 64 datagrams are sent in a single call
-and that the datagrams after segmentation meet
-the same MTU rules that apply to datagrams sent without this option.
-Segmentation offload depends on checksum offload,
-as datagram checksums are computed after segmentation.
-The option may also be set for individual
-.BR sendmsg (2)
-calls by passing it as a
-.BR cmsg (3).
-A value of zero disables the feature.
-This option should not be used in code intended to be portable.
-.TP
-.BR UDP_GRO " (since Linux 5.0)"
-Enables UDP receive offload.
-If enabled,
-the socket may receive multiple datagrams worth of data
-as a single large buffer,
-together with a
-.BR cmsg (3)
-that holds the segment size.
-This option is the inverse of segmentation offload.
-It reduces receive cost by handling multiple datagrams worth of data
-as a single large packet in the kernel receive path,
-even when that exceeds MTU.
-This option should not be used in code intended to be portable.
-.SS Ioctls
-These ioctls can be accessed using
-.BR ioctl (2).
-The correct syntax is:
-.PP
-.RS
-.nf
-.BI int " value";
-.IB error " = ioctl(" udp_socket ", " ioctl_type ", &" value ");"
-.fi
-.RE
-.TP
-.BR FIONREAD " (" SIOCINQ )
-Gets a pointer to an integer as argument.
-Returns the size of the next pending datagram in the integer in bytes,
-or 0 when no datagram is pending.
-.B Warning:
-Using
-.BR FIONREAD ,
-it is impossible to distinguish the case where no datagram is pending
-from the case where the next pending datagram contains zero bytes of data.
-It is safer to use
-.BR select (2),
-.BR poll (2),
-or
-.BR epoll (7)
-to distinguish these cases.
-.\" See http://www.securiteam.com/unixfocus/5KP0I15IKO.html
-.\" "GNUnet DoS (UDP Socket Unreachable)", 14 May 2006
-.TP
-.BR TIOCOUTQ " (" SIOCOUTQ )
-Returns the number of data bytes in the local send queue.
-Supported only with Linux 2.4 and above.
-.PP
-In addition, all ioctls documented in
-.BR ip (7)
-and
-.BR socket (7)
-are supported.
-.SH ERRORS
-All errors documented for
-.BR socket (7)
-or
-.BR ip (7)
-may be returned by a send or receive on a UDP socket.
-.TP
-.B ECONNREFUSED
-No receiver was associated with the destination address.
-This might be caused by a previous packet sent over the socket.
-.SH VERSIONS
-.B IP_RECVERR
-is a new feature in Linux 2.2.
-.\" .SH CREDITS
-.\" This man page was written by Andi Kleen.
-.SH SEE ALSO
-.BR ip (7),
-.BR raw (7),
-.BR socket (7),
-.BR udplite (7)
-.PP
-The kernel source file
-.IR Documentation/networking/ip\-sysctl.txt .
-.PP
-RFC\ 768 for the User Datagram Protocol.
-.br
-RFC\ 1122 for the host requirements.
-.br
-RFC\ 1191 for a description of path MTU discovery.
diff --git a/man7/udplite.7 b/man7/udplite.7
deleted file mode 100644
index 509b3060c..000000000
--- a/man7/udplite.7
+++ /dev/null
@@ -1,137 +0,0 @@
-.\" Copyright (c) 2008 by Gerrit Renker <gerrit@erg.abdn.ac.uk>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" $Id: udplite.7,v 1.12 2008/07/23 15:22:22 gerrit Exp gerrit $
-.\"
-.TH udplite 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-udplite \- Lightweight User Datagram Protocol
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.\" FIXME . see #defines under `BUGS',
-.\" when glibc supports this, add
-.\" #include <netinet/udplite.h>
-.PP
-.B sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDPLITE);
-.fi
-.SH DESCRIPTION
-This is an implementation of the Lightweight User Datagram Protocol
-(UDP-Lite), as described in RFC\ 3828.
-.PP
-UDP-Lite is an extension of UDP (RFC\ 768) to support variable-length
-checksums.
-This has advantages for some types of multimedia transport that
-may be able to make use of slightly damaged datagrams,
-rather than having them discarded by lower-layer protocols.
-.PP
-The variable-length checksum coverage is set via a
-.BR setsockopt (2)
-option.
-If this option is not set, the only difference from UDP is
-in using a different IP protocol identifier (IANA number 136).
-.PP
-The UDP-Lite implementation is a full extension of
-.BR udp (7)\[em]that
-is, it shares the same API and API behavior, and in addition
-offers two socket options to control the checksum coverage.
-.SS Address format
-UDP-Litev4 uses the
-.I sockaddr_in
-address format described in
-.BR ip (7).
-UDP-Litev6 uses the
-.I sockaddr_in6
-address format described in
-.BR ipv6 (7).
-.SS Socket options
-To set or get a UDP-Lite socket option, call
-.BR getsockopt (2)
-to read or
-.BR setsockopt (2)
-to write the option with the option level argument set to
-.BR IPPROTO_UDPLITE .
-In addition, all
-.B IPPROTO_UDP
-socket options are valid on a UDP-Lite socket.
-See
-.BR udp (7)
-for more information.
-.PP
-The following two options are specific to UDP-Lite.
-.TP
-.B UDPLITE_SEND_CSCOV
-This option sets the sender checksum coverage and takes an
-.I int
-as argument, with a checksum coverage value in the range 0..2\[ha]16-1.
-.IP
-A value of 0 means that the entire datagram is always covered.
-Values from 1\-7 are illegal (RFC\ 3828, 3.1) and are rounded up to
-the minimum coverage of 8.
-.IP
-With regard to IPv6 jumbograms (RFC\ 2675), the UDP-Litev6 checksum
-coverage is limited to the first 2\[ha]16-1 octets, as per RFC\ 3828, 3.5.
-Higher values are therefore silently truncated to 2\[ha]16-1.
-If in doubt, the current coverage value can always be queried using
-.BR getsockopt (2).
-.TP
-.B UDPLITE_RECV_CSCOV
-This is the receiver-side analogue and uses the same argument format
-and value range as
-.BR UDPLITE_SEND_CSCOV .
-This option is not required to enable traffic with partial checksum
-coverage.
-Its function is that of a traffic filter: when enabled, it
-instructs the kernel to drop all packets which have a coverage
-.I less
-than the specified coverage value.
-.IP
-When the value of
-.B UDPLITE_RECV_CSCOV
-exceeds the actual packet coverage, incoming packets are silently dropped,
-but may generate a warning message in the system log.
-.\" SO_NO_CHECK exists and is supported by UDPv4, but is
-.\" commented out in socket(7), hence also commented out here
-.\".PP
-.\"Since UDP-Lite mandates checksums, checksumming can not be disabled
-.\"via the
-.\".B SO_NO_CHECK
-.\"option from
-.\".BR socket (7).
-.SH ERRORS
-All errors documented for
-.BR udp (7)
-may be returned.
-UDP-Lite does not add further errors.
-.SH FILES
-.TP
-.I /proc/net/snmp
-Basic UDP-Litev4 statistics counters.
-.TP
-.I /proc/net/snmp6
-Basic UDP-Litev6 statistics counters.
-.SH VERSIONS
-UDP-Litev4/v6 first appeared in Linux 2.6.20.
-.SH BUGS
-.\" FIXME . remove this section once glibc supports UDP-Lite
-Where glibc support is missing, the following definitions are needed:
-.PP
-.in +4n
-.EX
-#define IPPROTO_UDPLITE 136
-.\" The following two are defined in the kernel in linux/net/udplite.h
-#define UDPLITE_SEND_CSCOV 10
-#define UDPLITE_RECV_CSCOV 11
-.EE
-.in
-.SH SEE ALSO
-.BR ip (7),
-.BR ipv6 (7),
-.BR socket (7),
-.BR udp (7)
-.PP
-RFC\ 3828 for the Lightweight User Datagram Protocol (UDP-Lite).
-.PP
-.I Documentation/networking/udplite.txt
-in the Linux kernel source tree
diff --git a/man7/unicode.7 b/man7/unicode.7
deleted file mode 100644
index 457ef62ee..000000000
--- a/man7/unicode.7
+++ /dev/null
@@ -1,246 +0,0 @@
-.\" Copyright (C) Markus Kuhn, 1995, 2001
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 1995-11-26 Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
-.\" First version written
-.\" 2001-05-11 Markus Kuhn <mgk25@cl.cam.ac.uk>
-.\" Update
-.\"
-.TH unicode 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-unicode \- universal character set
-.SH DESCRIPTION
-The international standard ISO/IEC 10646 defines the
-Universal Character Set (UCS).
-UCS contains all characters of all other character set standards.
-It also guarantees "round-trip compatibility";
-in other words,
-conversion tables can be built such that no information is lost
-when a string is converted from any other encoding to UCS and back.
-.PP
-UCS contains the characters required to represent practically all
-known languages.
-This includes not only the Latin, Greek, Cyrillic,
-Hebrew, Arabic, Armenian, and Georgian scripts, but also Chinese,
-Japanese and Korean Han ideographs as well as scripts such as
-Hiragana, Katakana, Hangul, Devanagari, Bengali, Gurmukhi, Gujarati,
-Oriya, Tamil, Telugu, Kannada, Malayalam, Thai, Lao, Khmer, Bopomofo,
-Tibetan, Runic, Ethiopic, Canadian Syllabics, Cherokee, Mongolian,
-Ogham, Myanmar, Sinhala, Thaana, Yi, and others.
-For scripts not yet
-covered, research on how to best encode them for computer usage is
-still going on and they will be added eventually.
-This might
-eventually include not only Hieroglyphs and various historic
-Indo-European languages, but even some selected artistic scripts such
-as Tengwar, Cirth, and Klingon.
-UCS also covers a large number of
-graphical, typographical, mathematical, and scientific symbols,
-including those provided by TeX, Postscript, APL, MS-DOS, MS-Windows,
-Macintosh, OCR fonts, as well as many word processing and publishing
-systems, and more are being added.
-.PP
-The UCS standard (ISO/IEC 10646) describes a
-31-bit character set architecture
-consisting of 128 24-bit
-.IR groups ,
-each divided into 256 16-bit
-.I planes
-made up of 256 8-bit
-.I rows
-with 256
-.I column
-positions, one for each character.
-Part 1 of the standard (ISO/IEC 10646-1)
-defines the first 65534 code positions (0x0000 to 0xfffd), which form
-the
-.I Basic Multilingual Plane
-(BMP), that is plane 0 in group 0.
-Part 2 of the standard (ISO/IEC 10646-2)
-adds characters to group 0 outside the BMP in several
-.I "supplementary planes"
-in the range 0x10000 to 0x10ffff.
-There are no plans to add characters
-beyond 0x10ffff to the standard, therefore of the entire code space,
-only a small fraction of group 0 will ever be actually used in the
-foreseeable future.
-The BMP contains all characters found in the
-commonly used other character sets.
-The supplemental planes added by
-ISO/IEC 10646-2 cover only more exotic characters for special scientific,
-dictionary printing, publishing industry, higher-level protocol and
-enthusiast needs.
-.PP
-The representation of each UCS character as a 2-byte word is referred
-to as the UCS-2 form (only for BMP characters),
-whereas UCS-4 is the representation of each character by a 4-byte word.
-In addition, there exist two encoding forms UTF-8
-for backward compatibility with ASCII processing software and UTF-16
-for the backward-compatible handling of non-BMP characters up to
-0x10ffff by UCS-2 software.
-.PP
-The UCS characters 0x0000 to 0x007f are identical to those of the
-classic US-ASCII
-character set and the characters in the range 0x0000 to 0x00ff
-are identical to those in
-ISO 8859-1 (Latin-1).
-.SS Combining characters
-Some code points in UCS
-have been assigned to
-.IR "combining characters" .
-These are similar to the nonspacing accent keys on a typewriter.
-A combining character just adds an accent to the previous character.
-The most important accented characters have codes of their own in UCS,
-however, the combining character mechanism allows us to add accents
-and other diacritical marks to any character.
-The combining characters
-always follow the character which they modify.
-For example, the German
-character Umlaut-A ("Latin capital letter A with diaeresis") can
-either be represented by the precomposed UCS code 0x00c4, or
-alternatively as the combination of a normal "Latin capital letter A"
-followed by a "combining diaeresis": 0x0041 0x0308.
-.PP
-Combining characters are essential for instance for encoding the Thai
-script or for mathematical typesetting and users of the International
-Phonetic Alphabet.
-.SS Implementation levels
-As not all systems are expected to support advanced mechanisms like
-combining characters, ISO/IEC 10646-1 specifies the following three
-.I implementation levels
-of UCS:
-.TP 0.9i
-Level 1
-Combining characters and Hangul Jamo
-(a variant encoding of the Korean script, where a Hangul syllable
-glyph is coded as a triplet or pair of vowel/consonant codes) are not
-supported.
-.TP
-Level 2
-In addition to level 1, combining characters are now allowed for some
-languages where they are essential (e.g., Thai, Lao, Hebrew,
-Arabic, Devanagari, Malayalam).
-.TP
-Level 3
-All UCS characters are supported.
-.PP
-The Unicode 3.0 Standard
-published by the Unicode Consortium
-contains exactly the UCS Basic Multilingual Plane
-at implementation level 3, as described in ISO/IEC 10646-1:2000.
-Unicode 3.1 added the supplemental planes of ISO/IEC 10646-2.
-The Unicode standard and
-technical reports published by the Unicode Consortium provide much
-additional information on the semantics and recommended usages of
-various characters.
-They provide guidelines and algorithms for
-editing, sorting, comparing, normalizing, converting, and displaying
-Unicode strings.
-.SS Unicode under Linux
-Under GNU/Linux, the C type
-.I wchar_t
-is a signed 32-bit integer type.
-Its values are always interpreted
-by the C library as UCS
-code values (in all locales), a convention that is signaled by the GNU
-C library to applications by defining the constant
-.B __STDC_ISO_10646__
-as specified in the ISO C99 standard.
-.PP
-UCS/Unicode can be used just like ASCII in input/output streams,
-terminal communication, plaintext files, filenames, and environment
-variables in the ASCII compatible UTF-8 multibyte encoding.
-To signal the use of UTF-8 as the character
-encoding to all applications, a suitable
-.I locale
-has to be selected via environment variables (e.g.,
-"LANG=en_GB.UTF-8").
-.PP
-The
-.B nl_langinfo(CODESET)
-function returns the name of the selected encoding.
-Library functions such as
-.BR wctomb (3)
-and
-.BR mbsrtowcs (3)
-can be used to transform the internal
-.I wchar_t
-characters and strings into the system character encoding and back
-and
-.BR wcwidth (3)
-tells how many positions (0\[en]2) the cursor is advanced by the
-output of a character.
-.SS Private Use Areas (PUA)
-In the Basic Multilingual Plane,
-the range 0xe000 to 0xf8ff will never be assigned to any characters by
-the standard and is reserved for private usage.
-For the Linux
-community, this private area has been subdivided further into the
-range 0xe000 to 0xefff which can be used individually by any end-user
-and the Linux zone in the range 0xf000 to 0xf8ff where extensions are
-coordinated among all Linux users.
-The registry of the characters
-assigned to the Linux zone is maintained by LANANA and the registry
-itself is
-.I Documentation/admin\-guide/unicode.rst
-in the Linux kernel sources
-.\" commit 9d85025b0418163fae079c9ba8f8445212de8568
-(or
-.I Documentation/unicode.txt
-before Linux 4.10).
-.PP
-Two other planes are reserved for private usage, plane 15
-(Supplementary Private Use Area-A, range 0xf0000 to 0xffffd)
-and plane 16 (Supplementary Private Use Area-B, range
-0x100000 to 0x10fffd).
-.SS Literature
-.IP \[bu] 3
-Information technology \[em] Universal Multiple-Octet Coded Character
-Set (UCS) \[em] Part 1: Architecture and Basic Multilingual Plane.
-International Standard ISO/IEC 10646-1, International Organization
-for Standardization, Geneva, 2000.
-.IP
-This is the official specification of UCS.
-Available from
-.UR http://www.iso.ch/
-.UE .
-.IP \[bu]
-The Unicode Standard, Version 3.0.
-The Unicode Consortium, Addison-Wesley,
-Reading, MA, 2000, ISBN 0-201-61633-5.
-.IP \[bu]
-S.\& Harbison, G.\& Steele. C: A Reference Manual. Fourth edition,
-Prentice Hall, Englewood Cliffs, 1995, ISBN 0-13-326224-3.
-.IP
-A good reference book about the C programming language.
-The fourth
-edition covers the 1994 Amendment 1 to the ISO C90 standard, which
-adds a large number of new C library functions for handling wide and
-multibyte character encodings, but it does not yet cover ISO C99,
-which improved wide and multibyte character support even further.
-.IP \[bu]
-Unicode Technical Reports.
-.RS
-.UR http://www.unicode.org\:/reports/
-.UE
-.RE
-.IP \[bu]
-Markus Kuhn: UTF-8 and Unicode FAQ for UNIX/Linux.
-.RS
-.UR http://www.cl.cam.ac.uk\:/\[ti]mgk25\:/unicode.html
-.UE
-.RE
-.IP \[bu]
-Bruno Haible: Unicode HOWTO.
-.RS
-.UR http://www.tldp.org\:/HOWTO\:/Unicode\-HOWTO.html
-.UE
-.RE
-.\" .SH AUTHOR
-.\" Markus Kuhn <mgk25@cl.cam.ac.uk>
-.SH SEE ALSO
-.BR locale (1),
-.BR setlocale (3),
-.BR charsets (7),
-.BR utf\-8 (7)
diff --git a/man7/units.7 b/man7/units.7
deleted file mode 100644
index e2dd69fe7..000000000
--- a/man7/units.7
+++ /dev/null
@@ -1,108 +0,0 @@
-'\" t
-.\" Copyright (C) 2001 Andries Brouwer <aeb@cwi.nl>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH units 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-units \- decimal and binary prefixes
-.SH DESCRIPTION
-.SS Decimal prefixes
-The SI system of units uses prefixes that indicate powers of ten.
-A kilometer is 1000 meter, and a megawatt is 1000000 watt.
-Below the standard prefixes.
-.RS
-.TS
-l l l.
-Prefix Name Value
-q quecto 10\[ha]\-30 = 0.000000000000000000000000000001
-r ronto 10\[ha]\-27 = 0.000000000000000000000000001
-y yocto 10\[ha]\-24 = 0.000000000000000000000001
-z zepto 10\[ha]\-21 = 0.000000000000000000001
-a atto 10\[ha]\-18 = 0.000000000000000001
-f femto 10\[ha]\-15 = 0.000000000000001
-p pico 10\[ha]\-12 = 0.000000000001
-n nano 10\[ha]\-9 = 0.000000001
-\[mc] micro 10\[ha]\-6 = 0.000001
-m milli 10\[ha]\-3 = 0.001
-c centi 10\[ha]\-2 = 0.01
-d deci 10\[ha]\-1 = 0.1
-da deka 10\[ha] 1 = 10
-h hecto 10\[ha] 2 = 100
-k kilo 10\[ha] 3 = 1000
-M mega 10\[ha] 6 = 1000000
-G giga 10\[ha] 9 = 1000000000
-T tera 10\[ha]12 = 1000000000000
-P peta 10\[ha]15 = 1000000000000000
-E exa 10\[ha]18 = 1000000000000000000
-Z zetta 10\[ha]21 = 1000000000000000000000
-Y yotta 10\[ha]24 = 1000000000000000000000000
-R ronna 10\[ha]27 = 1000000000000000000000000000
-Q quetta 10\[ha]30 = 1000000000000000000000000000000
-.TE
-.RE
-.PP
-The symbol for micro is the Greek letter mu, often written u
-in an ASCII context where this Greek letter is not available.
-.SS Binary prefixes
-The binary prefixes resemble the decimal ones,
-but have an additional \[aq]i\[aq]
-(and "Ki" starts with a capital \[aq]K\[aq]).
-The names are formed by taking the
-first syllable of the names of the decimal prefix with roughly the same
-size, followed by "bi" for "binary".
-.RS
-.TS
-l l l.
-Prefix Name Value
-Ki kibi 2\[ha]10 = 1024
-Mi mebi 2\[ha]20 = 1048576
-Gi gibi 2\[ha]30 = 1073741824
-Ti tebi 2\[ha]40 = 1099511627776
-Pi pebi 2\[ha]50 = 1125899906842624
-Ei exbi 2\[ha]60 = 1152921504606846976
-Zi zebi 2\[ha]70 = 1180591620717411303424
-Yi yobi 2\[ha]80 = 1208925819614629174706176
-.TE
-.RE
-.SS Discussion
-Before these binary prefixes were introduced, it was fairly
-common to use k=1000 and K=1024, just like b=bit, B=byte.
-Unfortunately, the M is capital already, and cannot be
-capitalized to indicate binary-ness.
-.PP
-At first that didn't matter too much, since memory modules
-and disks came in sizes that were powers of two, so everyone
-knew that in such contexts "kilobyte" and "megabyte" meant
-1024 and 1048576 bytes, respectively.
-What originally was a
-sloppy use of the prefixes "kilo" and "mega" started to become
-regarded as the "real true meaning" when computers were involved.
-But then disk technology changed, and disk sizes became arbitrary numbers.
-After a period of uncertainty all disk manufacturers settled on the
-standard, namely k=1000, M=1000\ k, G=1000\ M.
-.PP
-The situation was messy: in the 14k4 modems, k=1000; in the 1.44\ MB
-.\" also common: 14.4k modem
-diskettes, M=1024000; and so on.
-In 1998 the IEC approved the standard
-that defines the binary prefixes given above, enabling people
-to be precise and unambiguous.
-.PP
-Thus, today, MB = 1000000\ B and MiB = 1048576\ B.
-.PP
-In the free software world programs are slowly
-being changed to conform.
-When the Linux kernel boots and says
-.PP
-.in +4n
-.EX
-hda: 120064896 sectors (61473 MB) w/2048KiB Cache
-.EE
-.in
-.PP
-the MB are megabytes and the KiB are kibibytes.
-.SH SEE ALSO
-.UR https://www.bipm.org/\:documents/\:20126/\:41483022/\:SI\-Brochure\-9.pdf
-The International System of Units
-.UE .
diff --git a/man7/unix.7 b/man7/unix.7
deleted file mode 100644
index b9e28b20e..000000000
--- a/man7/unix.7
+++ /dev/null
@@ -1,1210 +0,0 @@
-.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>,
-.\" Copyright (C) 2008-2014, Michael Kerrisk <mtk.manpages@gmail.com>,
-.\" and Copyright (C) 2016, Heinrich Schuchardt <xypron.glpk@gmx.de>
-.\"
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" Modified, 2003-12-02, Michael Kerrisk, <mtk.manpages@gmail.com>
-.\" Modified, 2003-09-23, Adam Langley
-.\" Modified, 2004-05-27, Michael Kerrisk, <mtk.manpages@gmail.com>
-.\" Added SOCK_SEQPACKET
-.\" 2008-05-27, mtk, Provide a clear description of the three types of
-.\" address that can appear in the sockaddr_un structure: pathname,
-.\" unnamed, and abstract.
-.\"
-.TH UNIX 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-unix \- sockets for local interprocess communication
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.B #include <sys/un.h>
-.PP
-.IB unix_socket " = socket(AF_UNIX, type, 0);"
-.IB error " = socketpair(AF_UNIX, type, 0, int *" sv ");"
-.fi
-.SH DESCRIPTION
-The
-.B AF_UNIX
-(also known as
-.BR AF_LOCAL )
-socket family is used to communicate between processes on the same machine
-efficiently.
-Traditionally, UNIX domain sockets can be either unnamed,
-or bound to a filesystem pathname (marked as being of type socket).
-Linux also supports an abstract namespace which is independent of the
-filesystem.
-.PP
-Valid socket types in the UNIX domain are:
-.BR SOCK_STREAM ,
-for a stream-oriented socket;
-.BR SOCK_DGRAM ,
-for a datagram-oriented socket that preserves message boundaries
-(as on most UNIX implementations, UNIX domain datagram
-sockets are always reliable and don't reorder datagrams);
-and (since Linux 2.6.4)
-.BR SOCK_SEQPACKET ,
-for a sequenced-packet socket that is connection-oriented,
-preserves message boundaries,
-and delivers messages in the order that they were sent.
-.PP
-UNIX domain sockets support passing file descriptors or process credentials
-to other processes using ancillary data.
-.SS Address format
-A UNIX domain socket address is represented in the following structure:
-.PP
-.in +4n
-.EX
-.\" #define UNIX_PATH_MAX 108
-.\"
-struct sockaddr_un {
- sa_family_t sun_family; /* AF_UNIX */
- char sun_path[108]; /* Pathname */
-};
-.EE
-.in
-.PP
-The
-.I sun_family
-field always contains
-.BR AF_UNIX .
-On Linux,
-.I sun_path
-is 108 bytes in size; see also BUGS, below.
-.PP
-Various systems calls (for example,
-.BR bind (2),
-.BR connect (2),
-and
-.BR sendto (2))
-take a
-.I sockaddr_un
-argument as input.
-Some other system calls (for example,
-.BR getsockname (2),
-.BR getpeername (2),
-.BR recvfrom (2),
-and
-.BR accept (2))
-return an argument of this type.
-.PP
-Three types of address are distinguished in the
-.I sockaddr_un
-structure:
-.TP
-pathname
-a UNIX domain socket can be bound to a null-terminated
-filesystem pathname using
-.BR bind (2).
-When the address of a pathname socket is returned
-(by one of the system calls noted above),
-its length is
-.IP
-.in +4n
-.EX
-offsetof(struct sockaddr_un, sun_path) + strlen(sun_path) + 1
-.EE
-.in
-.IP
-and
-.I sun_path
-contains the null-terminated pathname.
-(On Linux, the above
-.BR offsetof ()
-expression equates to the same value as
-.IR sizeof(sa_family_t) ,
-but some other implementations include other fields before
-.IR sun_path ,
-so the
-.BR offsetof ()
-expression more portably describes the size of the address structure.)
-.IP
-For further details of pathname sockets, see below.
-.TP
-unnamed
-A stream socket that has not been bound to a pathname using
-.BR bind (2)
-has no name.
-Likewise, the two sockets created by
-.BR socketpair (2)
-are unnamed.
-When the address of an unnamed socket is returned,
-its length is
-.IR "sizeof(sa_family_t)" ,
-and
-.I sun_path
-should not be inspected.
-.\" There is quite some variation across implementations: FreeBSD
-.\" says the length is 16 bytes, HP-UX 11 says it's zero bytes.
-.TP
-abstract
-an abstract socket address is distinguished (from a pathname socket)
-by the fact that
-.I sun_path[0]
-is a null byte (\[aq]\e0\[aq]).
-The socket's address in this namespace is given by the additional
-bytes in
-.I sun_path
-that are covered by the specified length of the address structure.
-(Null bytes in the name have no special significance.)
-The name has no connection with filesystem pathnames.
-When the address of an abstract socket is returned,
-the returned
-.I addrlen
-is greater than
-.I sizeof(sa_family_t)
-(i.e., greater than 2), and the name of the socket is contained in
-the first
-.I (addrlen \- sizeof(sa_family_t))
-bytes of
-.IR sun_path .
-.SS Pathname sockets
-When binding a socket to a pathname, a few rules should be observed
-for maximum portability and ease of coding:
-.IP \[bu] 3
-The pathname in
-.I sun_path
-should be null-terminated.
-.IP \[bu]
-The length of the pathname, including the terminating null byte,
-should not exceed the size of
-.IR sun_path .
-.IP \[bu]
-The
-.I addrlen
-argument that describes the enclosing
-.I sockaddr_un
-structure should have a value of at least:
-.IP
-.in +4n
-.EX
-offsetof(struct sockaddr_un, sun_path)+strlen(addr.sun_path)+1
-.EE
-.in
-.IP
-or, more simply,
-.I addrlen
-can be specified as
-.IR "sizeof(struct sockaddr_un)" .
-.PP
-There is some variation in how implementations handle UNIX domain
-socket addresses that do not follow the above rules.
-For example, some (but not all) implementations
-.\" Linux does this, including for the case where the supplied path
-.\" is 108 bytes
-append a null terminator if none is present in the supplied
-.IR sun_path .
-.PP
-When coding portable applications,
-keep in mind that some implementations
-.\" HP-UX
-have
-.I sun_path
-as short as 92 bytes.
-.\" Modern BSDs generally have 104, Tru64 and AIX have 104,
-.\" Solaris and Irix have 108
-.PP
-Various system calls
-.RB ( accept (2),
-.BR recvfrom (2),
-.BR getsockname (2),
-.BR getpeername (2))
-return socket address structures.
-When applied to UNIX domain sockets, the value-result
-.I addrlen
-argument supplied to the call should be initialized as above.
-Upon return, the argument is set to indicate the
-.I actual
-size of the address structure.
-The caller should check the value returned in this argument:
-if the output value exceeds the input value,
-then there is no guarantee that a null terminator is present in
-.IR sun_path .
-(See BUGS.)
-.\"
-.SS Pathname socket ownership and permissions
-In the Linux implementation,
-pathname sockets honor the permissions of the directory they are in.
-Creation of a new socket fails if the process does not have write and
-search (execute) permission on the directory in which the socket is created.
-.PP
-On Linux,
-connecting to a stream socket object requires write permission on that socket;
-sending a datagram to a datagram socket likewise
-requires write permission on that socket.
-POSIX does not make any statement about the effect of the permissions
-on a socket file, and on some systems (e.g., older BSDs),
-the socket permissions are ignored.
-Portable programs should not rely on
-this feature for security.
-.PP
-When creating a new socket, the owner and group of the socket file
-are set according to the usual rules.
-The socket file has all permissions enabled,
-other than those that are turned off by the process
-.BR umask (2).
-.PP
-The owner, group, and permissions of a pathname socket can be changed (using
-.BR chown (2)
-and
-.BR chmod (2)).
-.\" However, fchown() and fchmod() do not seem to have an effect
-.\"
-.SS Abstract sockets
-Socket permissions have no meaning for abstract sockets:
-the process
-.BR umask (2)
-has no effect when binding an abstract socket,
-and changing the ownership and permissions of the object (via
-.BR fchown (2)
-and
-.BR fchmod (2))
-has no effect on the accessibility of the socket.
-.PP
-Abstract sockets automatically disappear when all open references
-to the socket are closed.
-.PP
-The abstract socket namespace is a nonportable Linux extension.
-.\"
-.SS Socket options
-For historical reasons, these socket options are specified with a
-.B SOL_SOCKET
-type even though they are
-.B AF_UNIX
-specific.
-They can be set with
-.BR setsockopt (2)
-and read with
-.BR getsockopt (2)
-by specifying
-.B SOL_SOCKET
-as the socket family.
-.TP
-.B SO_PASSCRED
-Enabling this socket option causes receipt of the credentials of
-the sending process in an
-.B SCM_CREDENTIALS ancillary
-message in each subsequently received message.
-The returned credentials are those specified by the sender using
-.BR SCM_CREDENTIALS ,
-or a default that includes the sender's PID, real user ID, and real group ID,
-if the sender did not specify
-.B SCM_CREDENTIALS
-ancillary data.
-.IP
-When this option is set and the socket is not yet connected,
-a unique name in the abstract namespace will be generated automatically.
-.IP
-The value given as an argument to
-.BR setsockopt (2)
-and returned as the result of
-.BR getsockopt (2)
-is an integer boolean flag.
-.TP
-.B SO_PASSSEC
-Enables receiving of the SELinux security label of the peer socket
-in an ancillary message of type
-.B SCM_SECURITY
-(see below).
-.IP
-The value given as an argument to
-.BR setsockopt (2)
-and returned as the result of
-.BR getsockopt (2)
-is an integer boolean flag.
-.IP
-The
-.B SO_PASSSEC
-option is supported for UNIX domain datagram sockets
-.\" commit 877ce7c1b3afd69a9b1caeb1b9964c992641f52a
-since Linux 2.6.18;
-support for UNIX domain stream sockets was added
-.\" commit 37a9a8df8ce9de6ea73349c9ac8bdf6ba4ec4f70
-in Linux 4.2.
-.TP
-.B SO_PEEK_OFF
-See
-.BR socket (7).
-.TP
-.B SO_PEERCRED
-This read-only socket option returns the
-credentials of the peer process connected to this socket.
-The returned credentials are those that were in effect at the time
-of the call to
-.BR connect (2)
-or
-.BR socketpair (2).
-.IP
-The argument to
-.BR getsockopt (2)
-is a pointer to a
-.I ucred
-structure; define the
-.B _GNU_SOURCE
-feature test macro to obtain the definition of that structure from
-.IR <sys/socket.h> .
-.IP
-The use of this option is possible only for connected
-.B AF_UNIX
-stream sockets and for
-.B AF_UNIX
-stream and datagram socket pairs created using
-.BR socketpair (2).
-.TP
-.B SO_PEERSEC
-This read-only socket option returns the
-security context of the peer socket connected to this socket.
-By default, this will be the same as the security context of
-the process that created the peer socket unless overridden
-by the policy or by a process with the required permissions.
-.IP
-The argument to
-.BR getsockopt (2)
-is a pointer to a buffer of the specified length in bytes
-into which the security context string will be copied.
-If the buffer length is less than the length of the security
-context string, then
-.BR getsockopt (2)
-returns \-1, sets
-.I errno
-to
-.BR ERANGE ,
-and returns the required length via
-.IR optlen .
-The caller should allocate at least
-.B NAME_MAX
-bytes for the buffer initially, although this is not guaranteed
-to be sufficient.
-Resizing the buffer to the returned length
-and retrying may be necessary.
-.IP
-The security context string may include a terminating null character
-in the returned length, but is not guaranteed to do so: a security
-context "foo" might be represented as either {'f','o','o'} of length 3
-or {'f','o','o','\\0'} of length 4, which are considered to be
-interchangeable.
-The string is printable, does not contain non-terminating null characters,
-and is in an unspecified encoding (in particular, it
-is not guaranteed to be ASCII or UTF-8).
-.IP
-The use of this option for sockets in the
-.B AF_UNIX
-address family is supported since Linux 2.6.2 for connected stream sockets,
-and since Linux 4.18
-.\" commit 0b811db2cb2aabc910e53d34ebb95a15997c33e7
-also for stream and datagram socket pairs created using
-.BR socketpair (2).
-.\"
-.SS Autobind feature
-If a
-.BR bind (2)
-call specifies
-.I addrlen
-as
-.IR sizeof(sa_family_t) ,
-.\" i.e., sizeof(short)
-or the
-.B SO_PASSCRED
-socket option was specified for a socket that was
-not explicitly bound to an address,
-then the socket is autobound to an abstract address.
-The address consists of a null byte
-followed by 5 bytes in the character set
-.IR [0\-9a\-f] .
-Thus, there is a limit of 2\[ha]20 autobind addresses.
-(From Linux 2.1.15, when the autobind feature was added,
-8 bytes were used, and the limit was thus 2\[ha]32 autobind addresses.
-The change to 5 bytes came in Linux 2.3.15.)
-.SS Sockets API
-The following paragraphs describe domain-specific details and
-unsupported features of the sockets API for UNIX domain sockets on Linux.
-.PP
-UNIX domain sockets do not support the transmission of
-out-of-band data (the
-.B MSG_OOB
-flag for
-.BR send (2)
-and
-.BR recv (2)).
-.PP
-The
-.BR send (2)
-.B MSG_MORE
-flag is not supported by UNIX domain sockets.
-.PP
-Before Linux 3.4,
-.\" commit 9f6f9af7694ede6314bed281eec74d588ba9474f
-the use of
-.B MSG_TRUNC
-in the
-.I flags
-argument of
-.BR recv (2)
-was not supported by UNIX domain sockets.
-.PP
-The
-.B SO_SNDBUF
-socket option does have an effect for UNIX domain sockets, but the
-.B SO_RCVBUF
-option does not.
-For datagram sockets, the
-.B SO_SNDBUF
-value imposes an upper limit on the size of outgoing datagrams.
-This limit is calculated as the doubled (see
-.BR socket (7))
-option value less 32 bytes used for overhead.
-.SS Ancillary messages
-Ancillary data is sent and received using
-.BR sendmsg (2)
-and
-.BR recvmsg (2).
-For historical reasons, the ancillary message types listed below
-are specified with a
-.B SOL_SOCKET
-type even though they are
-.B AF_UNIX
-specific.
-To send them, set the
-.I cmsg_level
-field of the struct
-.I cmsghdr
-to
-.B SOL_SOCKET
-and the
-.I cmsg_type
-field to the type.
-For more information, see
-.BR cmsg (3).
-.TP
-.B SCM_RIGHTS
-Send or receive a set of open file descriptors from another process.
-The data portion contains an integer array of the file descriptors.
-.IP
-Commonly, this operation is referred to as "passing a file descriptor"
-to another process.
-However, more accurately,
-what is being passed is a reference to an open file description (see
-.BR open (2)),
-and in the receiving process it is likely that a different
-file descriptor number will be used.
-Semantically, this operation is equivalent to duplicating
-.RB ( dup (2))
-a file descriptor into the file descriptor table of another process.
-.IP
-If the buffer used to receive the ancillary data containing
-file descriptors is too small (or is absent),
-then the ancillary data is truncated (or discarded)
-and the excess file descriptors are automatically closed
-in the receiving process.
-.IP
-If the number of file descriptors received in the ancillary data would
-cause the process to exceed its
-.B RLIMIT_NOFILE
-resource limit (see
-.BR getrlimit (2)),
-the excess file descriptors are automatically closed
-in the receiving process.
-.IP
-The kernel constant
-.B SCM_MAX_FD
-defines a limit on the number of file descriptors in the array.
-Attempting to send an array larger than this limit causes
-.BR sendmsg (2)
-to fail with the error
-.BR EINVAL .
-.B SCM_MAX_FD
-has the value 253
-.\" commit bba14de98753cb6599a2dae0e520714b2153522d
-(or 255 before Linux 2.6.38).
-.TP
-.B SCM_CREDENTIALS
-Send or receive UNIX credentials.
-This can be used for authentication.
-The credentials are passed as a
-.I struct ucred
-ancillary message.
-This structure is defined in
-.I <sys/socket.h>
-as follows:
-.IP
-.in +4n
-.EX
-struct ucred {
- pid_t pid; /* Process ID of the sending process */
- uid_t uid; /* User ID of the sending process */
- gid_t gid; /* Group ID of the sending process */
-};
-.EE
-.in
-.IP
-Since glibc 2.8, the
-.B _GNU_SOURCE
-feature test macro must be defined (before including
-.I any
-header files) in order to obtain the definition
-of this structure.
-.IP
-The credentials which the sender specifies are checked by the kernel.
-A privileged process is allowed to specify values that do not match its own.
-The sender must specify its own process ID (unless it has the capability
-.BR CAP_SYS_ADMIN ,
-in which case the PID of any existing process may be specified),
-its real user ID, effective user ID, or saved set-user-ID (unless it has
-.BR CAP_SETUID ),
-and its real group ID, effective group ID, or saved set-group-ID
-(unless it has
-.BR CAP_SETGID ).
-.IP
-To receive a
-.I struct ucred
-message, the
-.B SO_PASSCRED
-option must be enabled on the socket.
-.TP
-.B SCM_SECURITY
-Receive the SELinux security context (the security label)
-of the peer socket.
-The received ancillary data is a null-terminated string containing
-the security context.
-The receiver should allocate at least
-.B NAME_MAX
-bytes in the data portion of the ancillary message for this data.
-.IP
-To receive the security context, the
-.B SO_PASSSEC
-option must be enabled on the socket (see above).
-.PP
-When sending ancillary data with
-.BR sendmsg (2),
-only one item of each of the above types may be included in the sent message.
-.PP
-At least one byte of real data should be sent when sending ancillary data.
-On Linux, this is required to successfully send ancillary data over
-a UNIX domain stream socket.
-When sending ancillary data over a UNIX domain datagram socket,
-it is not necessary on Linux to send any accompanying real data.
-However, portable applications should also include at least one byte
-of real data when sending ancillary data over a datagram socket.
-.PP
-When receiving from a stream socket,
-ancillary data forms a kind of barrier for the received data.
-For example, suppose that the sender transmits as follows:
-.PP
-.RS
-.PD 0
-.IP (1) 5
-.BR sendmsg (2)
-of four bytes, with no ancillary data.
-.IP (2)
-.BR sendmsg (2)
-of one byte, with ancillary data.
-.IP (3)
-.BR sendmsg (2)
-of four bytes, with no ancillary data.
-.PD
-.RE
-.PP
-Suppose that the receiver now performs
-.BR recvmsg (2)
-calls each with a buffer size of 20 bytes.
-The first call will receive five bytes of data,
-along with the ancillary data sent by the second
-.BR sendmsg (2)
-call.
-The next call will receive the remaining four bytes of data.
-.PP
-If the space allocated for receiving incoming ancillary data is too small
-then the ancillary data is truncated to the number of headers
-that will fit in the supplied buffer (or, in the case of an
-.B SCM_RIGHTS
-file descriptor list, the list of file descriptors may be truncated).
-If no buffer is provided for incoming ancillary data (i.e., the
-.I msg_control
-field of the
-.I msghdr
-structure supplied to
-.BR recvmsg (2)
-is NULL),
-then the incoming ancillary data is discarded.
-In both of these cases, the
-.B MSG_CTRUNC
-flag will be set in the
-.I msg.msg_flags
-value returned by
-.BR recvmsg (2).
-.\"
-.SS Ioctls
-The following
-.BR ioctl (2)
-calls return information in
-.IR value .
-The correct syntax is:
-.PP
-.RS
-.nf
-.BI int " value";
-.IB error " = ioctl(" unix_socket ", " ioctl_type ", &" value ");"
-.fi
-.RE
-.PP
-.I ioctl_type
-can be:
-.TP
-.B SIOCINQ
-For
-.B SOCK_STREAM
-sockets, this call returns the number of unread bytes in the receive buffer.
-The socket must not be in LISTEN state, otherwise an error
-.RB ( EINVAL )
-is returned.
-.B SIOCINQ
-is defined in
-.IR <linux/sockios.h> .
-.\" FIXME . https://www.sourceware.org/bugzilla/show_bug.cgi?id=12002,
-.\" filed 2010-09-10, may cause SIOCINQ to be defined in glibc headers
-Alternatively,
-you can use the synonymous
-.BR FIONREAD ,
-defined in
-.IR <sys/ioctl.h> .
-.\" SIOCOUTQ also has an effect for UNIX domain sockets, but not
-.\" quite what userland might expect. It seems to return the number
-.\" of bytes allocated for buffers containing pending output.
-.\" That number is normally larger than the number of bytes of pending
-.\" output. Since this info is, from userland's point of view, imprecise,
-.\" and it may well change, probably best not to document this now.
-For
-.B SOCK_DGRAM
-sockets,
-the returned value is the same as
-for Internet domain datagram sockets;
-see
-.BR udp (7).
-.SH ERRORS
-.TP
-.B EADDRINUSE
-The specified local address is already in use or the filesystem socket
-object already exists.
-.TP
-.B EBADF
-This error can occur for
-.BR sendmsg (2)
-when sending a file descriptor as ancillary data over
-a UNIX domain socket (see the description of
-.BR SCM_RIGHTS ,
-above), and indicates that the file descriptor number that
-is being sent is not valid (e.g., it is not an open file descriptor).
-.TP
-.B ECONNREFUSED
-The remote address specified by
-.BR connect (2)
-was not a listening socket.
-This error can also occur if the target pathname is not a socket.
-.TP
-.B ECONNRESET
-Remote socket was unexpectedly closed.
-.TP
-.B EFAULT
-User memory address was not valid.
-.TP
-.B EINVAL
-Invalid argument passed.
-A common cause is that the value
-.B AF_UNIX
-was not specified in the
-.I sun_type
-field of passed addresses, or the socket was in an
-invalid state for the applied operation.
-.TP
-.B EISCONN
-.BR connect (2)
-called on an already connected socket or a target address was
-specified on a connected socket.
-.TP
-.B ENFILE
-The system-wide limit on the total number of open files has been reached.
-.TP
-.B ENOENT
-The pathname in the remote address specified to
-.BR connect (2)
-did not exist.
-.TP
-.B ENOMEM
-Out of memory.
-.TP
-.B ENOTCONN
-Socket operation needs a target address, but the socket is not connected.
-.TP
-.B EOPNOTSUPP
-Stream operation called on non-stream oriented socket or tried to
-use the out-of-band data option.
-.TP
-.B EPERM
-The sender passed invalid credentials in the
-.IR "struct ucred" .
-.TP
-.B EPIPE
-Remote socket was closed on a stream socket.
-If enabled, a
-.B SIGPIPE
-is sent as well.
-This can be avoided by passing the
-.B MSG_NOSIGNAL
-flag to
-.BR send (2)
-or
-.BR sendmsg (2).
-.TP
-.B EPROTONOSUPPORT
-Passed protocol is not
-.BR AF_UNIX .
-.TP
-.B EPROTOTYPE
-Remote socket does not match the local socket type
-.RB ( SOCK_DGRAM
-versus
-.BR SOCK_STREAM ).
-.TP
-.B ESOCKTNOSUPPORT
-Unknown socket type.
-.TP
-.B ESRCH
-While sending an ancillary message containing credentials
-.RB ( SCM_CREDENTIALS ),
-the caller specified a PID that does not match any existing process.
-.TP
-.B ETOOMANYREFS
-This error can occur for
-.BR sendmsg (2)
-when sending a file descriptor as ancillary data over
-a UNIX domain socket (see the description of
-.BR SCM_RIGHTS ,
-above).
-It occurs if the number of "in-flight" file descriptors exceeds the
-.B RLIMIT_NOFILE
-resource limit and the caller does not have the
-.B CAP_SYS_RESOURCE
-capability.
-An in-flight file descriptor is one that has been sent using
-.BR sendmsg (2)
-but has not yet been accepted in the recipient process using
-.BR recvmsg (2).
-.IP
-This error is diagnosed since mainline Linux 4.5
-(and in some earlier kernel versions where the fix has been backported).
-.\" commit 712f4aad406bb1ed67f3f98d04c044191f0ff593
-In earlier kernel versions,
-it was possible to place an unlimited number of file descriptors in flight,
-by sending each file descriptor with
-.BR sendmsg (2)
-and then closing the file descriptor so that it was not accounted against the
-.B RLIMIT_NOFILE
-resource limit.
-.PP
-Other errors can be generated by the generic socket layer or
-by the filesystem while generating a filesystem socket object.
-See the appropriate manual pages for more information.
-.SH VERSIONS
-.B SCM_CREDENTIALS
-and the abstract namespace were introduced with Linux 2.2 and should not
-be used in portable programs.
-(Some BSD-derived systems also support credential passing,
-but the implementation details differ.)
-.SH NOTES
-Binding to a socket with a filename creates a socket
-in the filesystem that must be deleted by the caller when it is no
-longer needed (using
-.BR unlink (2)).
-The usual UNIX close-behind semantics apply; the socket can be unlinked
-at any time and will be finally removed from the filesystem when the last
-reference to it is closed.
-.PP
-To pass file descriptors or credentials over a
-.B SOCK_STREAM
-socket, you must
-send or receive at least one byte of nonancillary data in the same
-.BR sendmsg (2)
-or
-.BR recvmsg (2)
-call.
-.PP
-UNIX domain stream sockets do not support the notion of out-of-band data.
-.\"
-.SH BUGS
-When binding a socket to an address,
-Linux is one of the implementations that appends a null terminator
-if none is supplied in
-.IR sun_path .
-In most cases this is unproblematic:
-when the socket address is retrieved,
-it will be one byte longer than that supplied when the socket was bound.
-However, there is one case where confusing behavior can result:
-if 108 non-null bytes are supplied when a socket is bound,
-then the addition of the null terminator takes the length of
-the pathname beyond
-.IR sizeof(sun_path) .
-Consequently, when retrieving the socket address
-(for example, via
-.BR accept (2)),
-.\" The behavior on Solaris is quite similar.
-if the input
-.I addrlen
-argument for the retrieving call is specified as
-.IR "sizeof(struct sockaddr_un)" ,
-then the returned address structure
-.I won't
-have a null terminator in
-.IR sun_path .
-.PP
-In addition, some implementations
-.\" i.e., traditional BSD
-don't require a null terminator when binding a socket (the
-.I addrlen
-argument is used to determine the length of
-.IR sun_path )
-and when the socket address is retrieved on these implementations,
-there is no null terminator in
-.IR sun_path .
-.PP
-Applications that retrieve socket addresses can (portably) code
-to handle the possibility that there is no null terminator in
-.I sun_path
-by respecting the fact that the number of valid bytes in the pathname is:
-.PP
-.in +4n
-.EX
-strnlen(addr.sun_path, addrlen \- offsetof(sockaddr_un, sun_path))
-.EE
-.in
-.\" The following patch to amend kernel behavior was rejected:
-.\" http://thread.gmane.org/gmane.linux.kernel.api/2437
-.\" Subject: [patch] Fix handling of overlength pathname in AF_UNIX sun_path
-.\" 2012-04-17
-.\" And there was a related discussion in the Austin list:
-.\" http://thread.gmane.org/gmane.comp.standards.posix.austin.general/5735
-.\" Subject: Having a sun_path with no null terminator
-.\" 2012-04-18
-.\"
-.\" FIXME . Track http://austingroupbugs.net/view.php?id=561
-.PP
-Alternatively, an application can retrieve
-the socket address by allocating a buffer of size
-.I "sizeof(struct sockaddr_un)+1"
-that is zeroed out before the retrieval.
-The retrieving call can specify
-.I addrlen
-as
-.IR "sizeof(struct sockaddr_un)" ,
-and the extra zero byte ensures that there will be
-a null terminator for the string returned in
-.IR sun_path :
-.PP
-.in +4n
-.EX
-void *addrp;
-\&
-addrlen = sizeof(struct sockaddr_un);
-addrp = malloc(addrlen + 1);
-if (addrp == NULL)
- /* Handle error */ ;
-memset(addrp, 0, addrlen + 1);
-\&
-if (getsockname(sfd, (struct sockaddr *) addrp, &addrlen)) == \-1)
- /* handle error */ ;
-\&
-printf("sun_path = %s\en", ((struct sockaddr_un *) addrp)\->sun_path);
-.EE
-.in
-.PP
-This sort of messiness can be avoided if it is guaranteed
-that the applications that
-.I create
-pathname sockets follow the rules outlined above under
-.IR "Pathname sockets" .
-.SH EXAMPLES
-The following code demonstrates the use of sequenced-packet
-sockets for local interprocess communication.
-It consists of two programs.
-The server program waits for a connection from the client program.
-The client sends each of its command-line arguments in separate messages.
-The server treats the incoming messages as integers and adds them up.
-The client sends the command string "END".
-The server sends back a message containing the sum of the client's integers.
-The client prints the sum and exits.
-The server waits for the next client to connect.
-To stop the server, the client is called with the command-line argument "DOWN".
-.PP
-The following output was recorded while running the server in the background
-and repeatedly executing the client.
-Execution of the server program ends when it receives the "DOWN" command.
-.SS Example output
-.in +4n
-.EX
-$ \fB./server &\fP
-[1] 25887
-$ \fB./client 3 4\fP
-Result = 7
-$ \fB./client 11 \-5\fP
-Result = 6
-$ \fB./client DOWN\fP
-Result = 0
-[1]+ Done ./server
-$
-.EE
-.in
-.SS Program source
-\&
-.EX
-/*
- * File connection.h
- */
-\&
-#define SOCKET_NAME "/tmp/9Lq7BNBnBycd6nxy.socket"
-#define BUFFER_SIZE 12
-\&
-/*
- * File server.c
- */
-\&
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <unistd.h>
-#include "connection.h"
-\&
-int
-main(int argc, char *argv[])
-{
- struct sockaddr_un name;
- int down_flag = 0;
- int ret;
- int connection_socket;
- int data_socket;
- int result;
- char buffer[BUFFER_SIZE];
-\&
- /* Create local socket. */
-\&
- connection_socket = socket(AF_UNIX, SOCK_SEQPACKET, 0);
- if (connection_socket == \-1) {
- perror("socket");
- exit(EXIT_FAILURE);
- }
-\&
- /*
- * For portability clear the whole structure, since some
- * implementations have additional (nonstandard) fields in
- * the structure.
- */
-\&
- memset(&name, 0, sizeof(name));
-\&
- /* Bind socket to socket name. */
-\&
- name.sun_family = AF_UNIX;
- strncpy(name.sun_path, SOCKET_NAME, sizeof(name.sun_path) \- 1);
-\&
- ret = bind(connection_socket, (const struct sockaddr *) &name,
- sizeof(name));
- if (ret == \-1) {
- perror("bind");
- exit(EXIT_FAILURE);
- }
-\&
- /*
- * Prepare for accepting connections. The backlog size is set
- * to 20. So while one request is being processed other requests
- * can be waiting.
- */
-\&
- ret = listen(connection_socket, 20);
- if (ret == \-1) {
- perror("listen");
- exit(EXIT_FAILURE);
- }
-\&
- /* This is the main loop for handling connections. */
-\&
- for (;;) {
-\&
- /* Wait for incoming connection. */
-\&
- data_socket = accept(connection_socket, NULL, NULL);
- if (data_socket == \-1) {
- perror("accept");
- exit(EXIT_FAILURE);
- }
-\&
- result = 0;
- for (;;) {
-\&
- /* Wait for next data packet. */
-\&
- ret = read(data_socket, buffer, sizeof(buffer));
- if (ret == \-1) {
- perror("read");
- exit(EXIT_FAILURE);
- }
-\&
- /* Ensure buffer is 0\-terminated. */
-\&
- buffer[sizeof(buffer) \- 1] = 0;
-\&
- /* Handle commands. */
-\&
- if (!strncmp(buffer, "DOWN", sizeof(buffer))) {
- down_flag = 1;
- break;
- }
-\&
- if (!strncmp(buffer, "END", sizeof(buffer))) {
- break;
- }
-\&
- /* Add received summand. */
-\&
- result += atoi(buffer);
- }
-\&
- /* Send result. */
-\&
- sprintf(buffer, "%d", result);
- ret = write(data_socket, buffer, sizeof(buffer));
- if (ret == \-1) {
- perror("write");
- exit(EXIT_FAILURE);
- }
-\&
- /* Close socket. */
-\&
- close(data_socket);
-\&
- /* Quit on DOWN command. */
-\&
- if (down_flag) {
- break;
- }
- }
-\&
- close(connection_socket);
-\&
- /* Unlink the socket. */
-\&
- unlink(SOCKET_NAME);
-\&
- exit(EXIT_SUCCESS);
-}
-\&
-/*
- * File client.c
- */
-\&
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <unistd.h>
-#include "connection.h"
-\&
-int
-main(int argc, char *argv[])
-{
- struct sockaddr_un addr;
- int ret;
- int data_socket;
- char buffer[BUFFER_SIZE];
-\&
- /* Create local socket. */
-\&
- data_socket = socket(AF_UNIX, SOCK_SEQPACKET, 0);
- if (data_socket == \-1) {
- perror("socket");
- exit(EXIT_FAILURE);
- }
-\&
- /*
- * For portability clear the whole structure, since some
- * implementations have additional (nonstandard) fields in
- * the structure.
- */
-\&
- memset(&addr, 0, sizeof(addr));
-\&
- /* Connect socket to socket address. */
-\&
- addr.sun_family = AF_UNIX;
- strncpy(addr.sun_path, SOCKET_NAME, sizeof(addr.sun_path) \- 1);
-\&
- ret = connect(data_socket, (const struct sockaddr *) &addr,
- sizeof(addr));
- if (ret == \-1) {
- fprintf(stderr, "The server is down.\en");
- exit(EXIT_FAILURE);
- }
-\&
- /* Send arguments. */
-\&
- for (size_t i = 1; i < argc; ++i) {
- ret = write(data_socket, argv[i], strlen(argv[i]) + 1);
- if (ret == \-1) {
- perror("write");
- break;
- }
- }
-\&
- /* Request result. */
-\&
- strcpy(buffer, "END");
- ret = write(data_socket, buffer, strlen(buffer) + 1);
- if (ret == \-1) {
- perror("write");
- exit(EXIT_FAILURE);
- }
-\&
- /* Receive result. */
-\&
- ret = read(data_socket, buffer, sizeof(buffer));
- if (ret == \-1) {
- perror("read");
- exit(EXIT_FAILURE);
- }
-\&
- /* Ensure buffer is 0\-terminated. */
-\&
- buffer[sizeof(buffer) \- 1] = 0;
-\&
- printf("Result = %s\en", buffer);
-\&
- /* Close socket. */
-\&
- close(data_socket);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.PP
-For examples of the use of
-.BR SCM_RIGHTS ,
-see
-.BR cmsg (3)
-and
-.BR seccomp_unotify (2).
-.SH SEE ALSO
-.BR recvmsg (2),
-.BR sendmsg (2),
-.BR socket (2),
-.BR socketpair (2),
-.BR cmsg (3),
-.BR capabilities (7),
-.BR credentials (7),
-.BR socket (7),
-.BR udp (7)
diff --git a/man7/uri.7 b/man7/uri.7
deleted file mode 100644
index ab4a2a2e1..000000000
--- a/man7/uri.7
+++ /dev/null
@@ -1,761 +0,0 @@
-.\" (C) Copyright 1999-2000 David A. Wheeler (dwheeler@dwheeler.com)
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" Fragments of this document are directly derived from IETF standards.
-.\" For those fragments which are directly derived from such standards,
-.\" the following notice applies, which is the standard copyright and
-.\" rights announcement of The Internet Society:
-.\"
-.\" Copyright (C) The Internet Society (1998). All Rights Reserved.
-.\" This document and translations of it may be copied and furnished to
-.\" others, and derivative works that comment on or otherwise explain it
-.\" or assist in its implementation may be prepared, copied, published
-.\" and distributed, in whole or in part, without restriction of any
-.\" kind, provided that the above copyright notice and this paragraph are
-.\" included on all such copies and derivative works. However, this
-.\" document itself may not be modified in any way, such as by removing
-.\" the copyright notice or references to the Internet Society or other
-.\" Internet organizations, except as needed for the purpose of
-.\" developing Internet standards in which case the procedures for
-.\" copyrights defined in the Internet Standards process must be
-.\" followed, or as required to translate it into languages other than English.
-.\"
-.\" Modified Fri Jul 25 23:00:00 1999 by David A. Wheeler (dwheeler@dwheeler.com)
-.\" Modified Fri Aug 21 23:00:00 1999 by David A. Wheeler (dwheeler@dwheeler.com)
-.\" Modified Tue Mar 14 2000 by David A. Wheeler (dwheeler@dwheeler.com)
-.\"
-.TH uri 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-uri, url, urn \- uniform resource identifier (URI), including a URL or URN
-.SH SYNOPSIS
-.SY "\fIURI\fP \fR=\fP"
-.RI [\~ absoluteURI
-|
-.IR relativeURI \~]
-.RB [\~\[dq] # \[dq]\~\c
-.IR fragment \~]
-.YS
-.PP
-.SY "\fIabsoluteURI\fP \fR=\fP"
-.I scheme\~\c
-.RB \[dq] : \[dq]
-.RI (\~ hierarchical_part
-|
-.IR opaque_part \~)
-.YS
-.PP
-.SY "\fIrelativeURI\fP \fR=\fP"
-.RI (\~ net_path
-|
-.I absolute_path
-|
-.IR relative_path \~)
-.RB [\~\[dq] ? \[dq]\~\c
-.IR query \~]
-.YS
-.PP
-.SY "\fIscheme\fP \fR=\fP"
-.RB \[dq] http \[dq]
-|
-.RB \[dq] ftp \[dq]
-|
-.RB \[dq] gopher \[dq]
-|
-.RB \[dq] mailto \[dq]
-|
-.RB \[dq] news \[dq]
-|
-.RB \[dq] telnet \[dq]
-|
-.RB \[dq] file \[dq]
-|
-.RB \[dq] ftp \[dq]
-|
-.RB \[dq] man \[dq]
-|
-.RB \[dq] info \[dq]
-|
-.RB \[dq] whatis \[dq]
-|
-.RB \[dq] ldap \[dq]
-|
-.RB \[dq] wais \[dq]
-| \&...
-.YS
-.PP
-.SY "\fIhierarchical_part\fP \fR=\fP"
-.RI (\~ net_path
-|
-.IR absolute_path \~)
-.RB [\~\[dq] ? \[dq]\~\c
-.IR query \~]
-.YS
-.PP
-.SY "\fInet_path\fP \fR=\fP"
-.RB \[dq] // \[dq]\~\c
-.I authority
-.RI [\~ absolute_path \~]
-.YS
-.PP
-.SY "\fIabsolute_path\fP \fR=\fP"
-.RB \[dq] / \[dq]\~\c
-.I path_segments
-.YS
-.PP
-.SY "\fIrelative_path\fP \fR=\fP"
-.I relative_segment
-.RI [\~ absolute_path \~]
-.YS
-.SH DESCRIPTION
-A Uniform Resource Identifier (URI) is a short string of characters
-identifying an abstract or physical resource (for example, a web page).
-A Uniform Resource Locator (URL) is a URI
-that identifies a resource through its primary access
-mechanism (e.g., its network "location"), rather than
-by name or some other attribute of that resource.
-A Uniform Resource Name (URN) is a URI
-that must remain globally unique and persistent even when
-the resource ceases to exist or becomes unavailable.
-.PP
-URIs are the standard way to name hypertext link destinations
-for tools such as web browsers.
-The string "http://www.kernel.org" is a URL (and thus it
-is also a URI).
-Many people use the term URL loosely as a synonym for URI
-(though technically URLs are a subset of URIs).
-.PP
-URIs can be absolute or relative.
-An absolute identifier refers to a resource independent of
-context, while a relative
-identifier refers to a resource by describing the difference
-from the current context.
-Within a relative path reference, the complete path segments "." and
-".." have special meanings: "the current hierarchy level" and "the
-level above this hierarchy level", respectively, just like they do in
-UNIX-like systems.
-A path segment which contains a colon
-character can't be used as the first segment of a relative URI path
-(e.g., "this:that"), because it would be mistaken for a scheme name;
-precede such segments with ./ (e.g., "./this:that").
-Note that descendants of MS-DOS (e.g., Microsoft Windows) replace
-devicename colons with the vertical bar ("|") in URIs, so "C:" becomes "C|".
-.PP
-A fragment identifier,
-if included,
-refers to a particular named portion (fragment) of a resource;
-text after a \[aq]#\[aq] identifies the fragment.
-A URI beginning with \[aq]#\[aq]
-refers to that fragment in the current resource.
-.SS Usage
-There are many different URI schemes, each with specific
-additional rules and meanings, but they are intentionally made to be
-as similar as possible.
-For example, many URL schemes
-permit the authority to be the following format, called here an
-.I ip_server
-(square brackets show what's optional):
-.PP
-.IR "ip_server = " [ user " [ : " password " ] @ ] " host " [ : " port ]
-.PP
-This format allows you to optionally insert a username,
-a user plus password, and/or a port number.
-The
-.I host
-is the name of the host computer, either its name as determined by DNS
-or an IP address (numbers separated by periods).
-Thus the URI
-<http://fred:fredpassword@example.com:8080/>
-logs into a web server on host example.com
-as fred (using fredpassword) using port 8080.
-Avoid including a password in a URI if possible because of the many
-security risks of having a password written down.
-If the URL supplies a username but no password, and the remote
-server requests a password, the program interpreting the URL
-should request one from the user.
-.PP
-Here are some of the most common schemes in use on UNIX-like systems
-that are understood by many tools.
-Note that many tools using URIs also have internal schemes or specialized
-schemes; see those tools' documentation for information on those schemes.
-.PP
-.B "http \- Web (HTTP) server"
-.PP
-.RI http:// ip_server / path
-.br
-.RI http:// ip_server / path ? query
-.PP
-This is a URL accessing a web (HTTP) server.
-The default port is 80.
-If the path refers to a directory, the web server will choose what
-to return; usually if there is a file named "index.html" or "index.htm"
-its content is returned, otherwise, a list of the files in the current
-directory (with appropriate links) is generated and returned.
-An example is <http://lwn.net>.
-.PP
-A query can be given in the archaic "isindex" format, consisting of a
-word or phrase and not including an equal sign (=).
-A query can also be in the longer "GET" format, which has one or more
-query entries of the form
-.IR key = value
-separated by the ampersand character (&).
-Note that
-.I key
-can be repeated more than once, though it's up to the web server
-and its application programs to determine if there's any meaning to that.
-There is an unfortunate interaction with HTML/XML/SGML and
-the GET query format; when such URIs with more than one key
-are embedded in SGML/XML documents (including HTML), the ampersand
-(&) has to be rewritten as &amp;.
-Note that not all queries use this format; larger forms
-may be too long to store as a URI, so they use a different
-interaction mechanism (called POST) which does
-not include the data in the URI.
-See the Common Gateway Interface specification at
-.UR http://www.w3.org\:/CGI
-.UE
-for more information.
-.PP
-.B "ftp \- File Transfer Protocol (FTP)"
-.PP
-.RI ftp:// ip_server / path
-.PP
-This is a URL accessing a file through the file transfer protocol (FTP).
-The default port (for control) is 21.
-If no username is included, the username "anonymous" is supplied, and
-in that case many clients provide as the password the requestor's
-Internet email address.
-An example is
-<ftp://ftp.is.co.za/rfc/rfc1808.txt>.
-.PP
-.B "gopher \- Gopher server"
-.PP
-.RI gopher:// ip_server / "gophertype selector"
-.br
-.RI gopher:// ip_server / "gophertype selector" %09 search
-.br
-.RI gopher:// ip_server / "gophertype selector" %09 search %09 gopher+_string
-.br
-.PP
-The default gopher port is 70.
-.I gophertype
-is a single-character field to denote the
-Gopher type of the resource to
-which the URL refers.
-The entire path may also be empty, in
-which case the delimiting "/" is also optional and the gophertype
-defaults to "1".
-.PP
-.I selector
-is the Gopher selector string.
-In the Gopher protocol,
-Gopher selector strings are a sequence of octets which may contain
-any octets except 09 hexadecimal (US-ASCII HT or tab), 0A hexadecimal
-(US-ASCII character LF), and 0D (US-ASCII character CR).
-.PP
-.B "mailto \- Email address"
-.PP
-.RI mailto: email-address
-.PP
-This is an email address, usually of the form
-.IR name @ hostname .
-See
-.BR mailaddr (7)
-for more information on the correct format of an email address.
-Note that any % character must be rewritten as %25.
-An example is <mailto:dwheeler@dwheeler.com>.
-.PP
-.B "news \- Newsgroup or News message"
-.PP
-.RI news: newsgroup-name
-.br
-.RI news: message-id
-.PP
-A
-.I newsgroup-name
-is a period-delimited hierarchical name, such as
-"comp.infosystems.www.misc".
-If <newsgroup-name> is "*" (as in <news:*>), it is used to refer
-to "all available news groups".
-An example is <news:comp.lang.ada>.
-.PP
-A
-.I message-id
-corresponds to the Message-ID of
-.UR http://www.ietf.org\:/rfc\:/rfc1036.txt
-IETF RFC\ 1036,
-.UE
-without the enclosing "<"
-and ">"; it takes the form
-.IR unique @ full_domain_name .
-A message identifier may be distinguished from a news group name by the
-presence of the "@" character.
-.PP
-.B "telnet \- Telnet login"
-.PP
-.RI telnet:// ip_server /
-.PP
-The Telnet URL scheme is used to designate interactive text services that
-may be accessed by the Telnet protocol.
-The final "/" character may be omitted.
-The default port is 23.
-An example is <telnet://melvyl.ucop.edu/>.
-.PP
-.B "file \- Normal file"
-.PP
-.RI file:// ip_server / path_segments
-.br
-.RI file: path_segments
-.PP
-This represents a file or directory accessible locally.
-As a special case,
-.I ip_server
-can be the string "localhost" or the empty
-string; this is interpreted as "the machine from which the URL is
-being interpreted".
-If the path is to a directory, the viewer should display the
-directory's contents with links to each containee;
-not all viewers currently do this.
-KDE supports generated files through the URL <file:/cgi-bin>.
-If the given file isn't found, browser writers may want to try to expand
-the filename via filename globbing
-(see
-.BR glob (7)
-and
-.BR glob (3)).
-.PP
-The second format (e.g., <file:/etc/passwd>)
-is a correct format for referring to
-a local file.
-However, older standards did not permit this format,
-and some programs don't recognize this as a URI.
-A more portable syntax is to use an empty string as the server name,
-for example,
-<file:///etc/passwd>; this form does the same thing
-and is easily recognized by pattern matchers and older programs as a URI.
-Note that if you really mean to say "start from the current location", don't
-specify the scheme at all; use a relative address like <../test.txt>,
-which has the side-effect of being scheme-independent.
-An example of this scheme is <file:///etc/passwd>.
-.PP
-.B "man \- Man page documentation"
-.PP
-.RI man: command-name
-.br
-.RI man: command-name ( section )
-.PP
-This refers to local online manual (man) reference pages.
-The command name can optionally be followed by a
-parenthesis and section number; see
-.BR man (7)
-for more information on the meaning of the section numbers.
-This URI scheme is unique to UNIX-like systems (such as Linux)
-and is not currently registered by the IETF.
-An example is <man:ls(1)>.
-.PP
-.B "info \- Info page documentation"
-.PP
-.RI info: virtual-filename
-.br
-.RI info: virtual-filename # nodename
-.br
-.RI info:( virtual-filename )
-.br
-.RI info:( virtual-filename ) nodename
-.PP
-This scheme refers to online info reference pages (generated from
-texinfo files),
-a documentation format used by programs such as the GNU tools.
-This URI scheme is unique to UNIX-like systems (such as Linux)
-and is not currently registered by the IETF.
-As of this writing, GNOME and KDE differ in their URI syntax
-and do not accept the other's syntax.
-The first two formats are the GNOME format; in nodenames all spaces
-are written as underscores.
-The second two formats are the KDE format;
-spaces in nodenames must be written as spaces, even though this
-is forbidden by the URI standards.
-It's hoped that in the future most tools will understand all of these
-formats and will always accept underscores for spaces in nodenames.
-In both GNOME and KDE, if the form without the nodename is used the
-nodename is assumed to be "Top".
-Examples of the GNOME format are <info:gcc> and <info:gcc#G++_and_GCC>.
-Examples of the KDE format are <info:(gcc)> and <info:(gcc)G++ and GCC>.
-.PP
-.B "whatis \- Documentation search"
-.PP
-.RI whatis: string
-.PP
-This scheme searches the database of short (one-line) descriptions of
-commands and returns a list of descriptions containing that string.
-Only complete word matches are returned.
-See
-.BR whatis (1).
-This URI scheme is unique to UNIX-like systems (such as Linux)
-and is not currently registered by the IETF.
-.PP
-.B "ghelp \- GNOME help documentation"
-.PP
-.RI ghelp: name-of-application
-.PP
-This loads GNOME help for the given application.
-Note that not much documentation currently exists in this format.
-.PP
-.B "ldap \- Lightweight Directory Access Protocol"
-.PP
-.RI ldap:// hostport
-.br
-.RI ldap:// hostport /
-.br
-.RI ldap:// hostport / dn
-.br
-.RI ldap:// hostport / dn ? attributes
-.br
-.RI ldap:// hostport / dn ? attributes ? scope
-.br
-.RI ldap:// hostport / dn ? attributes ? scope ? filter
-.br
-.RI ldap:// hostport / dn ? attributes ? scope ? filter ? extensions
-.PP
-This scheme supports queries to the
-Lightweight Directory Access Protocol (LDAP), a protocol for querying
-a set of servers for hierarchically organized information
-(such as people and computing resources).
-See
-.UR http://www.ietf.org\:/rfc\:/rfc2255.txt
-RFC\ 2255
-.UE
-for more information on the LDAP URL scheme.
-The components of this URL are:
-.TP
-hostport
-the LDAP server to query, written as a hostname optionally followed by
-a colon and the port number.
-The default LDAP port is TCP port 389.
-If empty, the client determines which the LDAP server to use.
-.TP
-dn
-the LDAP Distinguished Name, which identifies
-the base object of the LDAP search (see
-.UR http://www.ietf.org\:/rfc\:/rfc2253.txt
-RFC\ 2253
-.UE
-section 3).
-.TP
-attributes
-a comma-separated list of attributes to be returned;
-see RFC\ 2251 section 4.1.5.
-If omitted, all attributes should be returned.
-.TP
-scope
-specifies the scope of the search, which can be one of
-"base" (for a base object search), "one" (for a one-level search),
-or "sub" (for a subtree search).
-If scope is omitted, "base" is assumed.
-.TP
-filter
-specifies the search filter (subset of entries
-to return).
-If omitted, all entries should be returned.
-See
-.UR http://www.ietf.org\:/rfc\:/rfc2254.txt
-RFC\ 2254
-.UE
-section 4.
-.TP
-extensions
-a comma-separated list of type=value
-pairs, where the =value portion may be omitted for options not
-requiring it.
-An extension prefixed with a \[aq]!\[aq] is critical
-(must be supported to be valid), otherwise it is noncritical (optional).
-.PP
-LDAP queries are easiest to explain by example.
-Here's a query that asks ldap.itd.umich.edu for information about
-the University of Michigan in the U.S.:
-.PP
-.nf
-ldap://ldap.itd.umich.edu/o=University%20of%20Michigan,c=US
-.fi
-.PP
-To just get its postal address attribute, request:
-.PP
-.nf
-ldap://ldap.itd.umich.edu/o=University%20of%20Michigan,c=US?postalAddress
-.fi
-.PP
-To ask a host.com at port 6666 for information about the person
-with common name (cn) "Babs Jensen" at University of Michigan, request:
-.PP
-.nf
-ldap://host.com:6666/o=University%20of%20Michigan,c=US??sub?(cn=Babs%20Jensen)
-.fi
-.PP
-.B "wais \- Wide Area Information Servers"
-.PP
-.RI wais:// hostport / database
-.br
-.RI wais:// hostport / database ? search
-.br
-.RI wais:// hostport / database / wtype / wpath
-.PP
-This scheme designates a WAIS database, search, or document
-(see
-.UR http://www.ietf.org\:/rfc\:/rfc1625.txt
-IETF RFC\ 1625
-.UE
-for more information on WAIS).
-Hostport is the hostname, optionally followed by a colon and port number
-(the default port number is 210).
-.PP
-The first form designates a WAIS database for searching.
-The second form designates a particular search of the WAIS database
-.IR database .
-The third form designates a particular document within a WAIS
-database to be retrieved.
-.I wtype
-is the WAIS designation of the type of the object and
-.I wpath
-is the WAIS document-id.
-.PP
-.B "other schemes"
-.PP
-There are many other URI schemes.
-Most tools that accept URIs support a set of internal URIs
-(e.g., Mozilla has the about: scheme for internal information,
-and the GNOME help browser has the toc: scheme for various starting
-locations).
-There are many schemes that have been defined but are not as widely
-used at the current time
-(e.g., prospero).
-The nntp: scheme is deprecated in favor of the news: scheme.
-URNs are to be supported by the urn: scheme, with a hierarchical name space
-(e.g., urn:ietf:... would identify IETF documents); at this time
-URNs are not widely implemented.
-Not all tools support all schemes.
-.SS Character encoding
-URIs use a limited number of characters so that they can be
-typed in and used in a variety of situations.
-.PP
-The following characters are reserved, that is, they may appear in a
-URI but their use is limited to their reserved purpose
-(conflicting data must be escaped before forming the URI):
-.IP
-.in +4n
-.EX
-; / ? : @ & = + $ ,
-.EE
-.in
-.PP
-Unreserved characters may be included in a URI.
-Unreserved characters
-include uppercase and lowercase Latin letters,
-decimal digits, and the following
-limited set of punctuation marks and symbols:
-.IP
-.in +4n
-.EX
-\- _ . ! \[ti] * ' ( )
-.EE
-.in
-.PP
-All other characters must be escaped.
-An escaped octet is encoded as a character triplet, consisting of the
-percent character "%" followed by the two hexadecimal digits
-representing the octet code (you can use uppercase or lowercase letters
-for the hexadecimal digits).
-For example, a blank space must be escaped
-as "%20", a tab character as "%09", and the "&" as "%26".
-Because the percent "%" character always has the reserved purpose of
-being the escape indicator, it must be escaped as "%25".
-It is common practice to escape space characters as the plus symbol (+)
-in query text; this practice isn't uniformly defined
-in the relevant RFCs (which recommend %20 instead) but any tool accepting
-URIs with query text should be prepared for them.
-A URI is always shown in its "escaped" form.
-.PP
-Unreserved characters can be escaped without changing the semantics
-of the URI, but this should not be done unless the URI is being used
-in a context that does not allow the unescaped character to appear.
-For example, "%7e" is sometimes used instead of "\[ti]" in an HTTP URL
-path, but the two are equivalent for an HTTP URL.
-.PP
-For URIs which must handle characters outside the US ASCII character set,
-the HTML 4.01 specification (section B.2) and
-IETF RFC\~3986 (last paragraph of section 2.5)
-recommend the following approach:
-.IP (1) 5
-translate the character sequences into UTF-8 (IETF RFC\~3629)\[em]see
-.BR utf\-8 (7)\[em]and
-then
-.IP (2)
-use the URI escaping mechanism, that is,
-use the %HH encoding for unsafe octets.
-.SS Writing a URI
-When written, URIs should be placed inside double quotes
-(e.g., "http://www.kernel.org"),
-enclosed in angle brackets (e.g., <http://lwn.net>),
-or placed on a line by themselves.
-A warning for those who use double-quotes:
-.B never
-move extraneous punctuation (such as the period ending a sentence or the
-comma in a list)
-inside a URI, since this will change the value of the URI.
-Instead, use angle brackets instead, or
-switch to a quoting system that never includes extraneous characters
-inside quotation marks.
-This latter system, called the 'new' or 'logical' quoting system by
-"Hart's Rules" and the "Oxford Dictionary for Writers and Editors",
-is preferred practice in Great Britain and in various European languages.
-Older documents suggested inserting the prefix "URL:"
-just before the URI, but this form has never caught on.
-.PP
-The URI syntax was designed to be unambiguous.
-However, as URIs have become commonplace, traditional media
-(television, radio, newspapers, billboards, etc.) have increasingly
-used abbreviated URI references consisting of
-only the authority and path portions of the identified resource
-(e.g., <www.w3.org/Addressing>).
-Such references are primarily
-intended for human interpretation rather than machine, with the
-assumption that context-based heuristics are sufficient to complete
-the URI (e.g., hostnames beginning with "www" are likely to have
-a URI prefix of "http://" and hostnames beginning with "ftp" likely
-to have a prefix of "ftp://").
-Many client implementations heuristically resolve these references.
-Such heuristics may
-change over time, particularly when new schemes are introduced.
-Since an abbreviated URI has the same syntax as a relative URL path,
-abbreviated URI references cannot be used where relative URIs are
-permitted, and can be used only when there is no defined base
-(such as in dialog boxes).
-Don't use abbreviated URIs as hypertext links inside a document;
-use the standard format as described here.
-.SH STANDARDS
-.UR http://www.ietf.org\:/rfc\:/rfc2396.txt
-(IETF RFC\ 2396)
-.UE ,
-.UR http://www.w3.org\:/TR\:/REC\-html40
-(HTML 4.0)
-.UE .
-.SH NOTES
-Any tool accepting URIs (e.g., a web browser) on a Linux system should
-be able to handle (directly or indirectly) all of the
-schemes described here, including the man: and info: schemes.
-Handling them by invoking some other program is
-fine and in fact encouraged.
-.PP
-Technically the fragment isn't part of the URI.
-.PP
-For information on how to embed URIs (including URLs) in a data format,
-see documentation on that format.
-HTML uses the format <A HREF="\fIuri\fP">
-.I text
-</A>.
-Texinfo files use the format @uref{\fIuri\fP}.
-Man and mdoc have the recently added UR macro, or just include the
-URI in the text (viewers should be able to detect :// as part of a URI).
-.PP
-The GNOME and KDE desktop environments currently vary in the URIs
-they accept, in particular in their respective help browsers.
-To list man pages, GNOME uses <toc:man> while KDE uses <man:(index)>, and
-to list info pages, GNOME uses <toc:info> while KDE uses <info:(dir)>
-(the author of this man page prefers the KDE approach here, though a more
-regular format would be even better).
-In general, KDE uses <file:/cgi-bin/> as a prefix to a set of generated
-files.
-KDE prefers documentation in HTML, accessed via the
-<file:/cgi-bin/helpindex>.
-GNOME prefers the ghelp scheme to store and find documentation.
-Neither browser handles file: references to directories at the time
-of this writing, making it difficult to refer to an entire directory with
-a browsable URI.
-As noted above, these environments differ in how they handle the
-info: scheme, probably the most important variation.
-It is expected that GNOME and KDE
-will converge to common URI formats, and a future
-version of this man page will describe the converged result.
-Efforts to aid this convergence are encouraged.
-.SS Security
-A URI does not in itself pose a security threat.
-There is no general guarantee that a URL, which at one time
-located a given resource, will continue to do so.
-Nor is there any
-guarantee that a URL will not locate a different resource at some
-later point in time; such a guarantee can be
-obtained only from the person(s) controlling that namespace and the
-resource in question.
-.PP
-It is sometimes possible to construct a URL such that an attempt to
-perform a seemingly harmless operation, such as the
-retrieval of an entity associated with the resource, will in fact
-cause a possibly damaging remote operation to occur.
-The unsafe URL
-is typically constructed by specifying a port number other than that
-reserved for the network protocol in question.
-The client unwittingly contacts a site that is in fact
-running a different protocol.
-The content of the URL contains instructions that, when
-interpreted according to this other protocol, cause an unexpected
-operation.
-An example has been the use of a gopher URL to cause an
-unintended or impersonating message to be sent via a SMTP server.
-.PP
-Caution should be used when using any URL that specifies a port
-number other than the default for the protocol, especially when it is
-a number within the reserved space.
-.PP
-Care should be taken when a URI contains escaped delimiters for a
-given protocol (for example, CR and LF characters for telnet
-protocols) that these are not unescaped before transmission.
-This might violate the protocol, but avoids the potential for such
-characters to be used to simulate an extra operation or parameter in
-that protocol, which might lead to an unexpected and possibly harmful
-remote operation to be performed.
-.PP
-It is clearly unwise to use a URI that contains a password which is
-intended to be secret.
-In particular, the use of a password within
-the "userinfo" component of a URI is strongly recommended against except
-in those rare cases where the "password" parameter is intended to be public.
-.SH BUGS
-Documentation may be placed in a variety of locations, so there
-currently isn't a good URI scheme for general online documentation
-in arbitrary formats.
-References of the form
-<file:///usr/doc/ZZZ> don't work because different distributions and
-local installation requirements may place the files in different
-directories
-(it may be in /usr/doc, or /usr/local/doc, or /usr/share,
-or somewhere else).
-Also, the directory ZZZ usually changes when a version changes
-(though filename globbing could partially overcome this).
-Finally, using the file: scheme doesn't easily support people
-who dynamically load documentation from the Internet (instead of
-loading the files onto a local filesystem).
-A future URI scheme may be added (e.g., "userdoc:") to permit
-programs to include cross-references to more detailed documentation
-without having to know the exact location of that documentation.
-Alternatively, a future version of the filesystem specification may
-specify file locations sufficiently so that the file: scheme will
-be able to locate documentation.
-.PP
-Many programs and file formats don't include a way to incorporate
-or implement links using URIs.
-.PP
-Many programs can't handle all of these different URI formats; there
-should be a standard mechanism to load an arbitrary URI that automatically
-detects the users' environment (e.g., text or graphics,
-desktop environment, local user preferences, and currently executing
-tools) and invokes the right tool for any URI.
-.\" .SH AUTHOR
-.\" David A. Wheeler (dwheeler@dwheeler.com) wrote this man page.
-.SH SEE ALSO
-.BR lynx (1),
-.BR man2html (1),
-.BR mailaddr (7),
-.BR utf\-8 (7)
-.PP
-.UR http://www.ietf.org\:/rfc\:/rfc2255.txt
-IETF RFC\ 2255
-.UE
diff --git a/man7/url.7 b/man7/url.7
deleted file mode 100644
index 079fb5e7b..000000000
--- a/man7/url.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/uri.7
diff --git a/man7/urn.7 b/man7/urn.7
deleted file mode 100644
index 079fb5e7b..000000000
--- a/man7/urn.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/uri.7
diff --git a/man7/user-keyring.7 b/man7/user-keyring.7
deleted file mode 100644
index f384774fd..000000000
--- a/man7/user-keyring.7
+++ /dev/null
@@ -1,81 +0,0 @@
-.\" Copyright (C) 2014 Red Hat, Inc. All Rights Reserved.
-.\" Written by David Howells (dhowells@redhat.com)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH user-keyring 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-user-keyring \- per-user keyring
-.SH DESCRIPTION
-The user keyring is a keyring used to anchor keys on behalf of a user.
-Each UID the kernel deals with has its own user keyring that
-is shared by all processes with that UID.
-The user keyring has a name (description) of the form
-.I _uid.<UID>
-where
-.I <UID>
-is the user ID of the corresponding user.
-.PP
-The user keyring is associated with the record that the kernel maintains
-for the UID.
-It comes into existence upon the first attempt to access either the
-user keyring, the
-.BR user\-session\-keyring (7),
-or the
-.BR session\-keyring (7).
-The keyring remains pinned in existence so long as there are processes
-running with that real UID or files opened by those processes remain open.
-(The keyring can also be pinned indefinitely by linking it
-into another keyring.)
-.PP
-Typically, the user keyring is created by
-.BR pam_keyinit (8)
-when a user logs in.
-.PP
-The user keyring is not searched by default by
-.BR request_key (2).
-When
-.BR pam_keyinit (8)
-creates a session keyring, it adds to it a link to the user
-keyring so that the user keyring will be searched when the session keyring is.
-.PP
-A special serial number value,
-.BR KEY_SPEC_USER_KEYRING ,
-is defined that can be used in lieu of the actual serial number of
-the calling process's user keyring.
-.PP
-From the
-.BR keyctl (1)
-utility, '\fB@u\fP' can be used instead of a numeric key ID in
-much the same way.
-.PP
-User keyrings are independent of
-.BR clone (2),
-.BR fork (2),
-.BR vfork (2),
-.BR execve (2),
-and
-.BR _exit (2)
-excepting that the keyring is destroyed when the UID record is destroyed when
-the last process pinning it exits.
-.PP
-If it is necessary for a key associated with a user to exist beyond the UID
-record being garbage collected\[em]for example, for use by a
-.BR cron (8)
-script\[em]then the
-.BR persistent\-keyring (7)
-should be used instead.
-.PP
-If a user keyring does not exist when it is accessed, it will be created.
-.SH SEE ALSO
-.ad l
-.nh
-.BR keyctl (1),
-.BR keyctl (3),
-.BR keyrings (7),
-.BR persistent\-keyring (7),
-.BR process\-keyring (7),
-.BR session\-keyring (7),
-.BR thread\-keyring (7),
-.BR user\-session\-keyring (7),
-.BR pam_keyinit (8)
diff --git a/man7/user-session-keyring.7 b/man7/user-session-keyring.7
deleted file mode 100644
index edecb84aa..000000000
--- a/man7/user-session-keyring.7
+++ /dev/null
@@ -1,92 +0,0 @@
-.\" Copyright (C) 2014 Red Hat, Inc. All Rights Reserved.
-.\" Written by David Howells (dhowells@redhat.com)
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH user-session-keyring 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-user-session-keyring \- per-user default session keyring
-.SH DESCRIPTION
-The user session keyring is a keyring used to anchor keys on behalf of a user.
-Each UID the kernel deals with has its own user session keyring that
-is shared by all processes with that UID.
-The user session keyring has a name (description) of the form
-.I _uid_ses.<UID>
-where
-.I <UID>
-is the user ID of the corresponding user.
-.PP
-The user session keyring is associated with the record that
-the kernel maintains for the UID.
-It comes into existence upon the first attempt to access either the
-user session keyring, the
-.BR user\-keyring (7),
-or the
-.BR session\-keyring (7).
-.\" Davis Howells: the user and user-session keyrings are managed as a pair.
-The keyring remains pinned in existence so long as there are processes
-running with that real UID or files opened by those processes remain open.
-(The keyring can also be pinned indefinitely by linking it
-into another keyring.)
-.PP
-The user session keyring is created on demand when a thread requests it
-or when a thread asks for its
-.BR session\-keyring (7)
-and that keyring doesn't exist.
-In the latter case, a user session keyring will be created and,
-if the session keyring wasn't to be created,
-the user session keyring will be set as the process's actual session keyring.
-.PP
-The user session keyring is searched by
-.BR request_key (2)
-if the actual session keyring does not exist and is ignored otherwise.
-.PP
-A special serial number value,
-.BR KEY_SPEC_USER_SESSION_KEYRING ,
-is defined
-that can be used in lieu of the actual serial number of
-the calling process's user session keyring.
-.PP
-From the
-.BR keyctl (1)
-utility, '\fB@us\fP' can be used instead of a numeric key ID in
-much the same way.
-.PP
-User session keyrings are independent of
-.BR clone (2),
-.BR fork (2),
-.BR vfork (2),
-.BR execve (2),
-and
-.BR _exit (2)
-excepting that the keyring is destroyed when the UID record is destroyed
-when the last process pinning it exits.
-.PP
-If a user session keyring does not exist when it is accessed,
-it will be created.
-.PP
-Rather than relying on the user session keyring,
-it is strongly recommended\[em]especially if the process
-is running as root\[em]that a
-.BR session\-keyring (7)
-be set explicitly, for example by
-.BR pam_keyinit (8).
-.SH NOTES
-The user session keyring was added to support situations where
-a process doesn't have a session keyring,
-perhaps because it was created via a pathway that didn't involve PAM
-(e.g., perhaps it was a daemon started by
-.BR inetd (8)).
-In such a scenario, the user session keyring acts as a substitute for the
-.BR session\-keyring (7).
-.SH SEE ALSO
-.ad l
-.nh
-.BR keyctl (1),
-.BR keyctl (3),
-.BR keyrings (7),
-.BR persistent\-keyring (7),
-.BR process\-keyring (7),
-.BR session\-keyring (7),
-.BR thread\-keyring (7),
-.BR user\-keyring (7)
diff --git a/man7/user_namespaces.7 b/man7/user_namespaces.7
deleted file mode 100644
index a65854d73..000000000
--- a/man7/user_namespaces.7
+++ /dev/null
@@ -1,1469 +0,0 @@
-.\" Copyright (c) 2013, 2014 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (c) 2012, 2014 by Eric W. Biederman <ebiederm@xmission.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH user_namespaces 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-user_namespaces \- overview of Linux user namespaces
-.SH DESCRIPTION
-For an overview of namespaces, see
-.BR namespaces (7).
-.PP
-User namespaces isolate security-related identifiers and attributes,
-in particular,
-user IDs and group IDs (see
-.BR credentials (7)),
-the root directory,
-keys (see
-.BR keyrings (7)),
-.\" FIXME: This page says very little about the interaction
-.\" of user namespaces and keys. Add something on this topic.
-and capabilities (see
-.BR capabilities (7)).
-A process's user and group IDs can be different
-inside and outside a user namespace.
-In particular,
-a process can have a normal unprivileged user ID outside a user namespace
-while at the same time having a user ID of 0 inside the namespace;
-in other words,
-the process has full privileges for operations inside the user namespace,
-but is unprivileged for operations outside the namespace.
-.\"
-.\" ============================================================
-.\"
-.SS Nested namespaces, namespace membership
-User namespaces can be nested;
-that is, each user namespace\[em]except the initial ("root")
-namespace\[em]has a parent user namespace,
-and can have zero or more child user namespaces.
-The parent user namespace is the user namespace
-of the process that creates the user namespace via a call to
-.BR unshare (2)
-or
-.BR clone (2)
-with the
-.B CLONE_NEWUSER
-flag.
-.PP
-The kernel imposes (since Linux 3.11) a limit of 32 nested levels of
-.\" commit 8742f229b635bf1c1c84a3dfe5e47c814c20b5c8
-user namespaces.
-.\" FIXME Explain the rationale for this limit. (What is the rationale?)
-Calls to
-.BR unshare (2)
-or
-.BR clone (2)
-that would cause this limit to be exceeded fail with the error
-.BR EUSERS .
-.PP
-Each process is a member of exactly one user namespace.
-A process created via
-.BR fork (2)
-or
-.BR clone (2)
-without the
-.B CLONE_NEWUSER
-flag is a member of the same user namespace as its parent.
-A single-threaded process can join another user namespace with
-.BR setns (2)
-if it has the
-.B CAP_SYS_ADMIN
-in that namespace;
-upon doing so, it gains a full set of capabilities in that namespace.
-.PP
-A call to
-.BR clone (2)
-or
-.BR unshare (2)
-with the
-.B CLONE_NEWUSER
-flag makes the new child process (for
-.BR clone (2))
-or the caller (for
-.BR unshare (2))
-a member of the new user namespace created by the call.
-.PP
-The
-.B NS_GET_PARENT
-.BR ioctl (2)
-operation can be used to discover the parental relationship
-between user namespaces; see
-.BR ioctl_ns (2).
-.PP
-A task that changes one of its effective IDs
-will have its dumpability reset to the value in
-.IR /proc/sys/fs/suid_dumpable .
-This may affect the ownership of proc files of child processes
-and may thus cause the parent to lack the permissions
-to write to mapping files of child processes running in a new user namespace.
-In such cases making the parent process dumpable, using
-.B PR_SET_DUMPABLE
-in a call to
-.BR prctl (2),
-before creating a child process in a new user namespace
-may rectify this problem.
-See
-.BR prctl (2)
-and
-.BR proc (5)
-for details on how ownership is affected.
-.\"
-.\" ============================================================
-.\"
-.SS Capabilities
-The child process created by
-.BR clone (2)
-with the
-.B CLONE_NEWUSER
-flag starts out with a complete set
-of capabilities in the new user namespace.
-Likewise, a process that creates a new user namespace using
-.BR unshare (2)
-or joins an existing user namespace using
-.BR setns (2)
-gains a full set of capabilities in that namespace.
-On the other hand,
-that process has no capabilities in the parent (in the case of
-.BR clone (2))
-or previous (in the case of
-.BR unshare (2)
-and
-.BR setns (2))
-user namespace,
-even if the new namespace is created or joined by the root user
-(i.e., a process with user ID 0 in the root namespace).
-.PP
-Note that a call to
-.BR execve (2)
-will cause a process's capabilities to be recalculated in the usual way (see
-.BR capabilities (7)).
-Consequently,
-unless the process has a user ID of 0 within the namespace,
-or the executable file has a nonempty inheritable capabilities mask,
-the process will lose all capabilities.
-See the discussion of user and group ID mappings, below.
-.PP
-A call to
-.BR clone (2)
-or
-.BR unshare (2)
-using the
-.B CLONE_NEWUSER
-flag
-or a call to
-.BR setns (2)
-that moves the caller into another user namespace
-sets the "securebits" flags
-(see
-.BR capabilities (7))
-to their default values (all flags disabled) in the child (for
-.BR clone (2))
-or caller (for
-.BR unshare (2)
-or
-.BR setns (2)).
-Note that because the caller no longer has capabilities
-in its original user namespace after a call to
-.BR setns (2),
-it is not possible for a process to reset its "securebits" flags while
-retaining its user namespace membership by using a pair of
-.BR setns (2)
-calls to move to another user namespace and then return to
-its original user namespace.
-.PP
-The rules for determining whether or not a process has a capability
-in a particular user namespace are as follows:
-.IP \[bu] 3
-A process has a capability inside a user namespace
-if it is a member of that namespace and
-it has the capability in its effective capability set.
-A process can gain capabilities in its effective capability
-set in various ways.
-For example, it may execute a set-user-ID program or an
-executable with associated file capabilities.
-In addition,
-a process may gain capabilities via the effect of
-.BR clone (2),
-.BR unshare (2),
-or
-.BR setns (2),
-as already described.
-.\" In the 3.8 sources, see security/commoncap.c::cap_capable():
-.IP \[bu]
-If a process has a capability in a user namespace,
-then it has that capability in all child (and further removed descendant)
-namespaces as well.
-.IP \[bu]
-.\" * The owner of the user namespace in the parent of the
-.\" * user namespace has all caps.
-When a user namespace is created, the kernel records the effective
-user ID of the creating process as being the "owner" of the namespace.
-.\" (and likewise associates the effective group ID of the creating process
-.\" with the namespace).
-A process that resides
-in the parent of the user namespace
-.\" See kernel commit 520d9eabce18edfef76a60b7b839d54facafe1f9 for a fix
-.\" on this point
-and whose effective user ID matches the owner of the namespace
-has all capabilities in the namespace.
-.\" This includes the case where the process executes a set-user-ID
-.\" program that confers the effective UID of the creator of the namespace.
-By virtue of the previous rule,
-this means that the process has all capabilities in all
-further removed descendant user namespaces as well.
-The
-.B NS_GET_OWNER_UID
-.BR ioctl (2)
-operation can be used to discover the user ID of the owner of the namespace;
-see
-.BR ioctl_ns (2).
-.\"
-.\" ============================================================
-.\"
-.SS Effect of capabilities within a user namespace
-Having a capability inside a user namespace
-permits a process to perform operations (that require privilege)
-only on resources governed by that namespace.
-In other words, having a capability in a user namespace permits a process
-to perform privileged operations on resources that are governed by (nonuser)
-namespaces owned by (associated with) the user namespace
-(see the next subsection).
-.PP
-On the other hand, there are many privileged operations that affect
-resources that are not associated with any namespace type,
-for example, changing the system (i.e., calendar) time (governed by
-.BR CAP_SYS_TIME ),
-loading a kernel module (governed by
-.BR CAP_SYS_MODULE ),
-and creating a device (governed by
-.BR CAP_MKNOD ).
-Only a process with privileges in the
-.I initial
-user namespace can perform such operations.
-.PP
-Holding
-.B CAP_SYS_ADMIN
-within the user namespace that owns a process's mount namespace
-allows that process to create bind mounts
-and mount the following types of filesystems:
-.\" fs_flags = FS_USERNS_MOUNT in kernel sources
-.PP
-.RS 4
-.PD 0
-.IP \[bu] 3
-.I /proc
-(since Linux 3.8)
-.IP \[bu]
-.I /sys
-(since Linux 3.8)
-.IP \[bu]
-.I devpts
-(since Linux 3.9)
-.IP \[bu]
-.BR tmpfs (5)
-(since Linux 3.9)
-.IP \[bu]
-.I ramfs
-(since Linux 3.9)
-.IP \[bu]
-.I mqueue
-(since Linux 3.9)
-.IP \[bu]
-.I bpf
-.\" commit b2197755b2633e164a439682fb05a9b5ea48f706
-(since Linux 4.4)
-.IP \[bu]
-.I overlayfs
-.\" commit 92dbc9dedccb9759c7f9f2f0ae6242396376988f
-.\" commit 4cb2c00c43b3fe88b32f29df4f76da1b92c33224
-(since Linux 5.11)
-.PD
-.RE
-.PP
-Holding
-.B CAP_SYS_ADMIN
-within the user namespace that owns a process's cgroup namespace
-allows (since Linux 4.6)
-that process to the mount the cgroup version 2 filesystem and
-cgroup version 1 named hierarchies
-(i.e., cgroup filesystems mounted with the
-.I """none,name="""
-option).
-.PP
-Holding
-.B CAP_SYS_ADMIN
-within the user namespace that owns a process's PID namespace
-allows (since Linux 3.8)
-that process to mount
-.I /proc
-filesystems.
-.PP
-Note, however, that mounting block-based filesystems can be done
-only by a process that holds
-.B CAP_SYS_ADMIN
-in the initial user namespace.
-.\"
-.\" ============================================================
-.\"
-.SS Interaction of user namespaces and other types of namespaces
-Starting in Linux 3.8, unprivileged processes can create user namespaces,
-and the other types of namespaces can be created with just the
-.B CAP_SYS_ADMIN
-capability in the caller's user namespace.
-.PP
-When a nonuser namespace is created,
-it is owned by the user namespace in which the creating process
-was a member at the time of the creation of the namespace.
-Privileged operations on resources governed by the nonuser namespace
-require that the process has the necessary capabilities
-in the user namespace that owns the nonuser namespace.
-.PP
-If
-.B CLONE_NEWUSER
-is specified along with other
-.B CLONE_NEW*
-flags in a single
-.BR clone (2)
-or
-.BR unshare (2)
-call, the user namespace is guaranteed to be created first,
-giving the child
-.RB ( clone (2))
-or caller
-.RB ( unshare (2))
-privileges over the remaining namespaces created by the call.
-Thus, it is possible for an unprivileged caller to specify this combination
-of flags.
-.PP
-When a new namespace (other than a user namespace) is created via
-.BR clone (2)
-or
-.BR unshare (2),
-the kernel records the user namespace of the creating process as the owner of
-the new namespace.
-(This association can't be changed.)
-When a process in the new namespace subsequently performs
-privileged operations that operate on global
-resources isolated by the namespace,
-the permission checks are performed according to the process's capabilities
-in the user namespace that the kernel associated with the new namespace.
-For example, suppose that a process attempts to change the hostname
-.RB ( sethostname (2)),
-a resource governed by the UTS namespace.
-In this case,
-the kernel will determine which user namespace owns
-the process's UTS namespace, and check whether the process has the
-required capability
-.RB ( CAP_SYS_ADMIN )
-in that user namespace.
-.PP
-The
-.B NS_GET_USERNS
-.BR ioctl (2)
-operation can be used to discover the user namespace
-that owns a nonuser namespace; see
-.BR ioctl_ns (2).
-.\"
-.\" ============================================================
-.\"
-.SS User and group ID mappings: uid_map and gid_map
-When a user namespace is created,
-it starts out without a mapping of user IDs (group IDs)
-to the parent user namespace.
-The
-.IR /proc/ pid /uid_map
-and
-.IR /proc/ pid /gid_map
-files (available since Linux 3.5)
-.\" commit 22d917d80e842829d0ca0a561967d728eb1d6303
-expose the mappings for user and group IDs
-inside the user namespace for the process
-.IR pid .
-These files can be read to view the mappings in a user namespace and
-written to (once) to define the mappings.
-.PP
-The description in the following paragraphs explains the details for
-.IR uid_map ;
-.I gid_map
-is exactly the same,
-but each instance of "user ID" is replaced by "group ID".
-.PP
-The
-.I uid_map
-file exposes the mapping of user IDs from the user namespace
-of the process
-.I pid
-to the user namespace of the process that opened
-.I uid_map
-(but see a qualification to this point below).
-In other words, processes that are in different user namespaces
-will potentially see different values when reading from a particular
-.I uid_map
-file, depending on the user ID mappings for the user namespaces
-of the reading processes.
-.PP
-Each line in the
-.I uid_map
-file specifies a 1-to-1 mapping of a range of contiguous
-user IDs between two user namespaces.
-(When a user namespace is first created, this file is empty.)
-The specification in each line takes the form of
-three numbers delimited by white space.
-The first two numbers specify the starting user ID in
-each of the two user namespaces.
-The third number specifies the length of the mapped range.
-In detail, the fields are interpreted as follows:
-.IP (1) 5
-The start of the range of user IDs in
-the user namespace of the process
-.IR pid .
-.IP (2)
-The start of the range of user
-IDs to which the user IDs specified by field one map.
-How field two is interpreted depends on whether the process that opened
-.I uid_map
-and the process
-.I pid
-are in the same user namespace, as follows:
-.RS
-.IP (a) 5
-If the two processes are in different user namespaces:
-field two is the start of a range of
-user IDs in the user namespace of the process that opened
-.IR uid_map .
-.IP (b)
-If the two processes are in the same user namespace:
-field two is the start of the range of
-user IDs in the parent user namespace of the process
-.IR pid .
-This case enables the opener of
-.I uid_map
-(the common case here is opening
-.IR /proc/self/uid_map )
-to see the mapping of user IDs into the user namespace of the process
-that created this user namespace.
-.RE
-.IP (3)
-The length of the range of user IDs that is mapped between the two
-user namespaces.
-.PP
-System calls that return user IDs (group IDs)\[em]for example,
-.BR getuid (2),
-.BR getgid (2),
-and the credential fields in the structure returned by
-.BR stat (2)\[em]return
-the user ID (group ID) mapped into the caller's user namespace.
-.PP
-When a process accesses a file, its user and group IDs
-are mapped into the initial user namespace for the purpose of permission
-checking and assigning IDs when creating a file.
-When a process retrieves file user and group IDs via
-.BR stat (2),
-the IDs are mapped in the opposite direction,
-to produce values relative to the process user and group ID mappings.
-.PP
-The initial user namespace has no parent namespace,
-but, for consistency, the kernel provides dummy user and group
-ID mapping files for this namespace.
-Looking at the
-.I uid_map
-file
-.RI ( gid_map
-is the same) from a shell in the initial namespace shows:
-.PP
-.in +4n
-.EX
-$ \fBcat /proc/$$/uid_map\fP
- 0 0 4294967295
-.EE
-.in
-.PP
-This mapping tells us
-that the range starting at user ID 0 in this namespace
-maps to a range starting at 0 in the (nonexistent) parent namespace,
-and the length of the range is the largest 32-bit unsigned integer.
-This leaves 4294967295 (the 32-bit signed \-1 value) unmapped.
-This is deliberate:
-.I (uid_t)\~\-1
-is used in several interfaces (e.g.,
-.BR setreuid (2))
-as a way to specify "no user ID".
-Leaving
-.I (uid_t)\~\-1
-unmapped and unusable guarantees that there will be no
-confusion when using these interfaces.
-.\"
-.\" ============================================================
-.\"
-.SS Defining user and group ID mappings: writing to uid_map and gid_map
-After the creation of a new user namespace, the
-.I uid_map
-file of
-.I one
-of the processes in the namespace may be written to
-.I once
-to define the mapping of user IDs in the new user namespace.
-An attempt to write more than once to a
-.I uid_map
-file in a user namespace fails with the error
-.BR EPERM .
-Similar rules apply for
-.I gid_map
-files.
-.PP
-The lines written to
-.I uid_map
-.RI ( gid_map )
-must conform to the following validity rules:
-.IP \[bu] 3
-The three fields must be valid numbers,
-and the last field must be greater than 0.
-.IP \[bu]
-Lines are terminated by newline characters.
-.IP \[bu]
-There is a limit on the number of lines in the file.
-In Linux 4.14 and earlier, this limit was (arbitrarily)
-.\" 5*12-byte records could fit in a 64B cache line
-set at 5 lines.
-Since Linux 4.15,
-.\" commit 6397fac4915ab3002dc15aae751455da1a852f25
-the limit is 340 lines.
-In addition, the number of bytes written to
-the file must be less than the system page size,
-and the write must be performed at the start of the file (i.e.,
-.BR lseek (2)
-and
-.BR pwrite (2)
-can't be used to write to nonzero offsets in the file).
-.IP \[bu]
-The range of user IDs (group IDs)
-specified in each line cannot overlap with the ranges
-in any other lines.
-In the initial implementation (Linux 3.8), this requirement was
-satisfied by a simplistic implementation that imposed the further
-requirement that
-the values in both field 1 and field 2 of successive lines must be
-in ascending numerical order,
-which prevented some otherwise valid maps from being created.
-Linux 3.9 and later
-.\" commit 0bd14b4fd72afd5df41e9fd59f356740f22fceba
-fix this limitation, allowing any valid set of nonoverlapping maps.
-.IP \[bu]
-At least one line must be written to the file.
-.PP
-Writes that violate the above rules fail with the error
-.BR EINVAL .
-.PP
-In order for a process to write to the
-.IR /proc/ pid /uid_map
-.RI ( /proc/ pid /gid_map )
-file, all of the following permission requirements must be met:
-.IP \[bu] 3
-The writing process must have the
-.B CAP_SETUID
-.RB ( CAP_SETGID )
-capability in the user namespace of the process
-.IR pid .
-.IP \[bu]
-The writing process must either be in the user namespace of the process
-.I pid
-or be in the parent user namespace of the process
-.IR pid .
-.IP \[bu]
-The mapped user IDs (group IDs) must in turn have a mapping
-in the parent user namespace.
-.IP \[bu]
-If updating
-.IR /proc/ pid /uid_map
-to create a mapping that maps UID 0 in the parent namespace,
-then one of the following must be true:
-.RS
-.IP (a) 5
-if writing process is in the parent user namespace,
-then it must have the
-.B CAP_SETFCAP
-capability in that user namespace; or
-.IP (b)
-if the writing process is in the child user namespace,
-then the process that created the user namespace must have had the
-.B CAP_SETFCAP
-capability when the namespace was created.
-.RE
-.IP
-This rule has been in place since
-.\" commit db2e718a47984b9d71ed890eb2ea36ecf150de18
-Linux 5.12.
-It eliminates an earlier security bug whereby
-a UID 0 process that lacks the
-.B CAP_SETFCAP
-capability,
-which is needed to create a binary with namespaced file capabilities
-(as described in
-.BR capabilities (7)),
-could nevertheless create such a binary,
-by the following steps:
-.RS
-.IP (1) 5
-Create a new user namespace with the identity mapping
-(i.e., UID 0 in the new user namespace maps to UID 0 in the parent namespace),
-so that UID 0 in both namespaces is equivalent to the same root user ID.
-.IP (2)
-Since the child process has the
-.B CAP_SETFCAP
-capability, it could create a binary with namespaced file capabilities
-that would then be effective in the parent user namespace
-(because the root user IDs are the same in the two namespaces).
-.RE
-.IP \[bu]
-One of the following two cases applies:
-.RS
-.IP (a) 5
-.I Either
-the writing process has the
-.B CAP_SETUID
-.RB ( CAP_SETGID )
-capability in the
-.I parent
-user namespace.
-.RS
-.IP \[bu] 3
-No further restrictions apply:
-the process can make mappings to arbitrary user IDs (group IDs)
-in the parent user namespace.
-.RE
-.IP (b)
-.I Or
-otherwise all of the following restrictions apply:
-.RS
-.IP \[bu] 3
-The data written to
-.I uid_map
-.RI ( gid_map )
-must consist of a single line that maps
-the writing process's effective user ID
-(group ID) in the parent user namespace to a user ID (group ID)
-in the user namespace.
-.IP \[bu]
-The writing process must have the same effective user ID as the process
-that created the user namespace.
-.IP \[bu]
-In the case of
-.IR gid_map ,
-use of the
-.BR setgroups (2)
-system call must first be denied by writing
-.RI \[dq] deny \[dq]
-to the
-.IR /proc/ pid /setgroups
-file (see below) before writing to
-.IR gid_map .
-.RE
-.RE
-.PP
-Writes that violate the above rules fail with the error
-.BR EPERM .
-.\"
-.\" ============================================================
-.\"
-.SS Project ID mappings: projid_map
-Similarly to user and group ID mappings,
-it is possible to create project ID mappings for a user namespace.
-(Project IDs are used for disk quotas; see
-.BR setquota (8)
-and
-.BR quotactl (2).)
-.PP
-Project ID mappings are defined by writing to the
-.IR /proc/ pid /projid_map
-file (present since
-.\" commit f76d207a66c3a53defea67e7d36c3eb1b7d6d61d
-Linux 3.7).
-.PP
-The validity rules for writing to the
-.IR /proc/ pid /projid_map
-file are as for writing to the
-.I uid_map
-file; violation of these rules causes
-.BR write (2)
-to fail with the error
-.BR EINVAL .
-.PP
-The permission rules for writing to the
-.IR /proc/ pid /projid_map
-file are as follows:
-.IP \[bu] 3
-The writing process must either be in the user namespace of the process
-.I pid
-or be in the parent user namespace of the process
-.IR pid .
-.IP \[bu]
-The mapped project IDs must in turn have a mapping
-in the parent user namespace.
-.PP
-Violation of these rules causes
-.BR write (2)
-to fail with the error
-.BR EPERM .
-.\"
-.\" ============================================================
-.\"
-.SS Interaction with system calls that change process UIDs or GIDs
-In a user namespace where the
-.I uid_map
-file has not been written, the system calls that change user IDs will fail.
-Similarly, if the
-.I gid_map
-file has not been written, the system calls that change group IDs will fail.
-After the
-.I uid_map
-and
-.I gid_map
-files have been written, only the mapped values may be used in
-system calls that change user and group IDs.
-.PP
-For user IDs, the relevant system calls include
-.BR setuid (2),
-.BR setfsuid (2),
-.BR setreuid (2),
-and
-.BR setresuid (2).
-For group IDs, the relevant system calls include
-.BR setgid (2),
-.BR setfsgid (2),
-.BR setregid (2),
-.BR setresgid (2),
-and
-.BR setgroups (2).
-.PP
-Writing
-.RI \[dq] deny \[dq]
-to the
-.IR /proc/ pid /setgroups
-file before writing to
-.IR /proc/ pid /gid_map
-.\" Things changed in Linux 3.19
-.\" commit 9cc46516ddf497ea16e8d7cb986ae03a0f6b92f8
-.\" commit 66d2f338ee4c449396b6f99f5e75cd18eb6df272
-.\" http://lwn.net/Articles/626665/
-will permanently disable
-.BR setgroups (2)
-in a user namespace and allow writing to
-.IR /proc/ pid /gid_map
-without having the
-.B CAP_SETGID
-capability in the parent user namespace.
-.\"
-.\" ============================================================
-.\"
-.SS The \fI/proc/\fPpid\fI/setgroups\fP file
-.\"
-.\" commit 9cc46516ddf497ea16e8d7cb986ae03a0f6b92f8
-.\" commit 66d2f338ee4c449396b6f99f5e75cd18eb6df272
-.\" http://lwn.net/Articles/626665/
-.\" http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-8989
-.\"
-The
-.IR /proc/ pid /setgroups
-file displays the string
-.RI \[dq] allow \[dq]
-if processes in the user namespace that contains the process
-.I pid
-are permitted to employ the
-.BR setgroups (2)
-system call; it displays
-.RI \[dq] deny \[dq]
-if
-.BR setgroups (2)
-is not permitted in that user namespace.
-Note that regardless of the value in the
-.IR /proc/ pid /setgroups
-file (and regardless of the process's capabilities), calls to
-.BR setgroups (2)
-are also not permitted if
-.IR /proc/ pid /gid_map
-has not yet been set.
-.PP
-A privileged process (one with the
-.B CAP_SYS_ADMIN
-capability in the namespace) may write either of the strings
-.RI \[dq] allow \[dq]
-or
-.RI \[dq] deny \[dq]
-to this file
-.I before
-writing a group ID mapping
-for this user namespace to the file
-.IR /proc/ pid /gid_map .
-Writing the string
-.RI \[dq] deny \[dq]
-prevents any process in the user namespace from employing
-.BR setgroups (2).
-.PP
-The essence of the restrictions described in the preceding
-paragraph is that it is permitted to write to
-.IR /proc/ pid /setgroups
-only so long as calling
-.BR setgroups (2)
-is disallowed because
-.IR /proc/ pid /gid_map
-has not been set.
-This ensures that a process cannot transition from a state where
-.BR setgroups (2)
-is allowed to a state where
-.BR setgroups (2)
-is denied;
-a process can transition only from
-.BR setgroups (2)
-being disallowed to
-.BR setgroups (2)
-being allowed.
-.PP
-The default value of this file in the initial user namespace is
-.RI \[dq] allow \[dq].
-.PP
-Once
-.IR /proc/ pid /gid_map
-has been written to
-(which has the effect of enabling
-.BR setgroups (2)
-in the user namespace),
-it is no longer possible to disallow
-.BR setgroups (2)
-by writing
-.RI \[dq] deny \[dq]
-to
-.IR /proc/ pid /setgroups
-(the write fails with the error
-.BR EPERM ).
-.PP
-A child user namespace inherits the
-.IR /proc/ pid /setgroups
-setting from its parent.
-.PP
-If the
-.I setgroups
-file has the value
-.RI \[dq] deny \[dq],
-then the
-.BR setgroups (2)
-system call can't subsequently be reenabled (by writing
-.RI \[dq] allow \[dq]
-to the file) in this user namespace.
-(Attempts to do so fail with the error
-.BR EPERM .)
-This restriction also propagates down to all child user namespaces of
-this user namespace.
-.PP
-The
-.IR /proc/ pid /setgroups
-file was added in Linux 3.19,
-but was backported to many earlier stable kernel series,
-because it addresses a security issue.
-The issue concerned files with permissions such as "rwx\-\-\-rwx".
-Such files give fewer permissions to "group" than they do to "other".
-This means that dropping groups using
-.BR setgroups (2)
-might allow a process file access that it did not formerly have.
-Before the existence of user namespaces this was not a concern,
-since only a privileged process (one with the
-.B CAP_SETGID
-capability) could call
-.BR setgroups (2).
-However, with the introduction of user namespaces,
-it became possible for an unprivileged process to create
-a new namespace in which the user had all privileges.
-This then allowed formerly unprivileged
-users to drop groups and thus gain file access
-that they did not previously have.
-The
-.IR /proc/ pid /setgroups
-file was added to address this security issue,
-by denying any pathway for an unprivileged process to drop groups with
-.BR setgroups (2).
-.\"
-.\" /proc/PID/setgroups
-.\" [allow == setgroups() is allowed, "deny" == setgroups() is disallowed]
-.\" * Can write if have CAP_SYS_ADMIN in NS
-.\" * Must write BEFORE writing to /proc/PID/gid_map
-.\"
-.\" setgroups()
-.\" * Must already have written to gid_map
-.\" * /proc/PID/setgroups must be "allow"
-.\"
-.\" /proc/PID/gid_map -- writing
-.\" * Must already have written "deny" to /proc/PID/setgroups
-.\"
-.\" ============================================================
-.\"
-.SS Unmapped user and group IDs
-There are various places where an unmapped user ID (group ID)
-may be exposed to user space.
-For example, the first process in a new user namespace may call
-.BR getuid (2)
-before a user ID mapping has been defined for the namespace.
-In most such cases, an unmapped user ID is converted
-.\" from_kuid_munged(), from_kgid_munged()
-to the overflow user ID (group ID);
-the default value for the overflow user ID (group ID) is 65534.
-See the descriptions of
-.I /proc/sys/kernel/overflowuid
-and
-.I /proc/sys/kernel/overflowgid
-in
-.BR proc (5).
-.PP
-The cases where unmapped IDs are mapped in this fashion include
-system calls that return user IDs
-.RB ( getuid (2),
-.BR getgid (2),
-and similar),
-credentials passed over a UNIX domain socket,
-.\" also SO_PEERCRED
-credentials returned by
-.BR stat (2),
-.BR waitid (2),
-and the System V IPC "ctl"
-.B IPC_STAT
-operations,
-credentials exposed by
-.IR /proc/ pid /status
-and the files in
-.IR /proc/sysvipc/* ,
-credentials returned via the
-.I si_uid
-field in the
-.I siginfo_t
-received with a signal (see
-.BR sigaction (2)),
-credentials written to the process accounting file (see
-.BR acct (5)),
-and credentials returned with POSIX message queue notifications (see
-.BR mq_notify (3)).
-.PP
-There is one notable case where unmapped user and group IDs are
-.I not
-.\" from_kuid(), from_kgid()
-.\" Also F_GETOWNER_UIDS is an exception
-converted to the corresponding overflow ID value.
-When viewing a
-.I uid_map
-or
-.I gid_map
-file in which there is no mapping for the second field,
-that field is displayed as 4294967295 (\-1 as an unsigned integer).
-.\"
-.\" ============================================================
-.\"
-.SS Accessing files
-In order to determine permissions when an unprivileged process accesses a file,
-the process credentials (UID, GID) and the file credentials
-are in effect mapped back to what they would be in
-the initial user namespace and then compared to determine
-the permissions that the process has on the file.
-The same is also true of other objects that employ the credentials plus
-permissions mask accessibility model, such as System V IPC objects.
-.\"
-.\" ============================================================
-.\"
-.SS Operation of file-related capabilities
-Certain capabilities allow a process to bypass various
-kernel-enforced restrictions when performing operations on
-files owned by other users or groups.
-These capabilities are:
-.BR CAP_CHOWN ,
-.BR CAP_DAC_OVERRIDE ,
-.BR CAP_DAC_READ_SEARCH ,
-.BR CAP_FOWNER ,
-and
-.BR CAP_FSETID .
-.PP
-Within a user namespace,
-these capabilities allow a process to bypass the rules
-if the process has the relevant capability over the file,
-meaning that:
-.IP \[bu] 3
-the process has the relevant effective capability in its user namespace; and
-.IP \[bu]
-the file's user ID and group ID both have valid mappings
-in the user namespace.
-.PP
-The
-.B CAP_FOWNER
-capability is treated somewhat exceptionally:
-.\" These are the checks performed by the kernel function
-.\" inode_owner_or_capable(). There is one exception to the exception:
-.\" overriding the directory sticky permission bit requires that
-.\" the file has a valid mapping for both its UID and GID.
-it allows a process to bypass the corresponding rules so long as
-at least the file's user ID has a mapping in the user namespace
-(i.e., the file's group ID does not need to have a valid mapping).
-.\"
-.\" ============================================================
-.\"
-.SS Set-user-ID and set-group-ID programs
-When a process inside a user namespace executes
-a set-user-ID (set-group-ID) program,
-the process's effective user (group) ID inside the namespace is changed
-to whatever value is mapped for the user (group) ID of the file.
-However, if either the user
-.I or
-the group ID of the file has no mapping inside the namespace,
-the set-user-ID (set-group-ID) bit is silently ignored:
-the new program is executed,
-but the process's effective user (group) ID is left unchanged.
-(This mirrors the semantics of executing a set-user-ID or set-group-ID
-program that resides on a filesystem that was mounted with the
-.B MS_NOSUID
-flag, as described in
-.BR mount (2).)
-.\"
-.\" ============================================================
-.\"
-.SS Miscellaneous
-When a process's user and group IDs are passed over a UNIX domain socket
-to a process in a different user namespace (see the description of
-.B SCM_CREDENTIALS
-in
-.BR unix (7)),
-they are translated into the corresponding values as per the
-receiving process's user and group ID mappings.
-.\"
-.SH STANDARDS
-Linux.
-.\"
-.SH NOTES
-Over the years, there have been a lot of features that have been added
-to the Linux kernel that have been made available only to privileged users
-because of their potential to confuse set-user-ID-root applications.
-In general, it becomes safe to allow the root user in a user namespace to
-use those features because it is impossible, while in a user namespace,
-to gain more privilege than the root user of a user namespace has.
-.\"
-.\" ============================================================
-.\"
-.SS Global root
-The term "global root" is sometimes used as a shorthand for
-user ID 0 in the initial user namespace.
-.\"
-.\" ============================================================
-.\"
-.SS Availability
-Use of user namespaces requires a kernel that is configured with the
-.B CONFIG_USER_NS
-option.
-User namespaces require support in a range of subsystems across
-the kernel.
-When an unsupported subsystem is configured into the kernel,
-it is not possible to configure user namespaces support.
-.PP
-As at Linux 3.8, most relevant subsystems supported user namespaces,
-but a number of filesystems did not have the infrastructure needed
-to map user and group IDs between user namespaces.
-Linux 3.9 added the required infrastructure support for many of
-the remaining unsupported filesystems
-(Plan 9 (9P), Andrew File System (AFS), Ceph, CIFS, CODA, NFS, and OCFS2).
-Linux 3.12 added support for the last of the unsupported major filesystems,
-.\" commit d6970d4b726cea6d7a9bc4120814f95c09571fc3
-XFS.
-.\"
-.SH EXAMPLES
-The program below is designed to allow experimenting with
-user namespaces, as well as other types of namespaces.
-It creates namespaces as specified by command-line options and then executes
-a command inside those namespaces.
-The comments and
-.IR usage ()
-function inside the program provide a full explanation of the program.
-The following shell session demonstrates its use.
-.PP
-First, we look at the run-time environment:
-.PP
-.in +4n
-.EX
-$ \fBuname \-rs\fP # Need Linux 3.8 or later
-Linux 3.8.0
-$ \fBid \-u\fP # Running as unprivileged user
-1000
-$ \fBid \-g\fP
-1000
-.EE
-.in
-.PP
-Now start a new shell in new user
-.RI ( \-U ),
-mount
-.RI ( \-m ),
-and PID
-.RI ( \-p )
-namespaces, with user ID
-.RI ( \-M )
-and group ID
-.RI ( \-G )
-1000 mapped to 0 inside the user namespace:
-.PP
-.in +4n
-.EX
-$ \fB./userns_child_exec \-p \-m \-U \-M \[aq]0 1000 1\[aq] \-G \[aq]0 1000 1\[aq] bash\fP
-.EE
-.in
-.PP
-The shell has PID 1, because it is the first process in the new
-PID namespace:
-.PP
-.in +4n
-.EX
-bash$ \fBecho $$\fP
-1
-.EE
-.in
-.PP
-Mounting a new
-.I /proc
-filesystem and listing all of the processes visible
-in the new PID namespace shows that the shell can't see
-any processes outside the PID namespace:
-.PP
-.in +4n
-.EX
-bash$ \fBmount \-t proc proc /proc\fP
-bash$ \fBps ax\fP
- PID TTY STAT TIME COMMAND
- 1 pts/3 S 0:00 bash
- 22 pts/3 R+ 0:00 ps ax
-.EE
-.in
-.PP
-Inside the user namespace, the shell has user and group ID 0,
-and a full set of permitted and effective capabilities:
-.PP
-.in +4n
-.EX
-bash$ \fBcat /proc/$$/status | egrep \[aq]\[ha][UG]id\[aq]\fP
-Uid: 0 0 0 0
-Gid: 0 0 0 0
-bash$ \fBcat /proc/$$/status | egrep \[aq]\[ha]Cap(Prm|Inh|Eff)\[aq]\fP
-CapInh: 0000000000000000
-CapPrm: 0000001fffffffff
-CapEff: 0000001fffffffff
-.EE
-.in
-.SS Program source
-\&
-.EX
-/* userns_child_exec.c
-\&
- Licensed under GNU General Public License v2 or later
-\&
- Create a child process that executes a shell command in new
- namespace(s); allow UID and GID mappings to be specified when
- creating a user namespace.
-*/
-#define _GNU_SOURCE
-#include <err.h>
-#include <sched.h>
-#include <unistd.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <sys/wait.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-#include <errno.h>
-\&
-struct child_args {
- char **argv; /* Command to be executed by child, with args */
- int pipe_fd[2]; /* Pipe used to synchronize parent and child */
-};
-\&
-static int verbose;
-\&
-static void
-usage(char *pname)
-{
- fprintf(stderr, "Usage: %s [options] cmd [arg...]\en\en", pname);
- fprintf(stderr, "Create a child process that executes a shell "
- "command in a new user namespace,\en"
- "and possibly also other new namespace(s).\en\en");
- fprintf(stderr, "Options can be:\en\en");
-#define fpe(str) fprintf(stderr, " %s", str);
- fpe("\-i New IPC namespace\en");
- fpe("\-m New mount namespace\en");
- fpe("\-n New network namespace\en");
- fpe("\-p New PID namespace\en");
- fpe("\-u New UTS namespace\en");
- fpe("\-U New user namespace\en");
- fpe("\-M uid_map Specify UID map for user namespace\en");
- fpe("\-G gid_map Specify GID map for user namespace\en");
- fpe("\-z Map user\[aq]s UID and GID to 0 in user namespace\en");
- fpe(" (equivalent to: \-M \[aq]0 <uid> 1\[aq] \-G \[aq]0 <gid> 1\[aq])\en");
- fpe("\-v Display verbose messages\en");
- fpe("\en");
- fpe("If \-z, \-M, or \-G is specified, \-U is required.\en");
- fpe("It is not permitted to specify both \-z and either \-M or \-G.\en");
- fpe("\en");
- fpe("Map strings for \-M and \-G consist of records of the form:\en");
- fpe("\en");
- fpe(" ID\-inside\-ns ID\-outside\-ns len\en");
- fpe("\en");
- fpe("A map string can contain multiple records, separated"
- " by commas;\en");
- fpe("the commas are replaced by newlines before writing"
- " to map files.\en");
-\&
- exit(EXIT_FAILURE);
-}
-\&
-/* Update the mapping file \[aq]map_file\[aq], with the value provided in
- \[aq]mapping\[aq], a string that defines a UID or GID mapping. A UID or
- GID mapping consists of one or more newline\-delimited records
- of the form:
-\&
- ID_inside\-ns ID\-outside\-ns length
-\&
- Requiring the user to supply a string that contains newlines is
- of course inconvenient for command\-line use. Thus, we permit the
- use of commas to delimit records in this string, and replace them
- with newlines before writing the string to the file. */
-\&
-static void
-update_map(char *mapping, char *map_file)
-{
- int fd;
- size_t map_len; /* Length of \[aq]mapping\[aq] */
-\&
- /* Replace commas in mapping string with newlines. */
-\&
- map_len = strlen(mapping);
- for (size_t j = 0; j < map_len; j++)
- if (mapping[j] == \[aq],\[aq])
- mapping[j] = \[aq]\en\[aq];
-\&
- fd = open(map_file, O_RDWR);
- if (fd == \-1) {
- fprintf(stderr, "ERROR: open %s: %s\en", map_file,
- strerror(errno));
- exit(EXIT_FAILURE);
- }
-\&
- if (write(fd, mapping, map_len) != map_len) {
- fprintf(stderr, "ERROR: write %s: %s\en", map_file,
- strerror(errno));
- exit(EXIT_FAILURE);
- }
-\&
- close(fd);
-}
-\&
-/* Linux 3.19 made a change in the handling of setgroups(2) and
- the \[aq]gid_map\[aq] file to address a security issue. The issue
- allowed *unprivileged* users to employ user namespaces in
- order to drop groups. The upshot of the 3.19 changes is that
- in order to update the \[aq]gid_maps\[aq] file, use of the setgroups()
- system call in this user namespace must first be disabled by
- writing "deny" to one of the /proc/PID/setgroups files for
- this namespace. That is the purpose of the following function. */
-\&
-static void
-proc_setgroups_write(pid_t child_pid, char *str)
-{
- char setgroups_path[PATH_MAX];
- int fd;
-\&
- snprintf(setgroups_path, PATH_MAX, "/proc/%jd/setgroups",
- (intmax_t) child_pid);
-\&
- fd = open(setgroups_path, O_RDWR);
- if (fd == \-1) {
-\&
- /* We may be on a system that doesn\[aq]t support
- /proc/PID/setgroups. In that case, the file won\[aq]t exist,
- and the system won\[aq]t impose the restrictions that Linux 3.19
- added. That\[aq]s fine: we don\[aq]t need to do anything in order
- to permit \[aq]gid_map\[aq] to be updated.
-\&
- However, if the error from open() was something other than
- the ENOENT error that is expected for that case, let the
- user know. */
-\&
- if (errno != ENOENT)
- fprintf(stderr, "ERROR: open %s: %s\en", setgroups_path,
- strerror(errno));
- return;
- }
-\&
- if (write(fd, str, strlen(str)) == \-1)
- fprintf(stderr, "ERROR: write %s: %s\en", setgroups_path,
- strerror(errno));
-\&
- close(fd);
-}
-\&
-static int /* Start function for cloned child */
-childFunc(void *arg)
-{
- struct child_args *args = arg;
- char ch;
-\&
- /* Wait until the parent has updated the UID and GID mappings.
- See the comment in main(). We wait for end of file on a
- pipe that will be closed by the parent process once it has
- updated the mappings. */
-\&
- close(args\->pipe_fd[1]); /* Close our descriptor for the write
- end of the pipe so that we see EOF
- when parent closes its descriptor. */
- if (read(args\->pipe_fd[0], &ch, 1) != 0) {
- fprintf(stderr,
- "Failure in child: read from pipe returned != 0\en");
- exit(EXIT_FAILURE);
- }
-\&
- close(args\->pipe_fd[0]);
-\&
- /* Execute a shell command. */
-\&
- printf("About to exec %s\en", args\->argv[0]);
- execvp(args\->argv[0], args\->argv);
- err(EXIT_FAILURE, "execvp");
-}
-\&
-#define STACK_SIZE (1024 * 1024)
-\&
-static char child_stack[STACK_SIZE]; /* Space for child\[aq]s stack */
-\&
-int
-main(int argc, char *argv[])
-{
- int flags, opt, map_zero;
- pid_t child_pid;
- struct child_args args;
- char *uid_map, *gid_map;
- const int MAP_BUF_SIZE = 100;
- char map_buf[MAP_BUF_SIZE];
- char map_path[PATH_MAX];
-\&
- /* Parse command\-line options. The initial \[aq]+\[aq] character in
- the final getopt() argument prevents GNU\-style permutation
- of command\-line options. That\[aq]s useful, since sometimes
- the \[aq]command\[aq] to be executed by this program itself
- has command\-line options. We don\[aq]t want getopt() to treat
- those as options to this program. */
-\&
- flags = 0;
- verbose = 0;
- gid_map = NULL;
- uid_map = NULL;
- map_zero = 0;
- while ((opt = getopt(argc, argv, "+imnpuUM:G:zv")) != \-1) {
- switch (opt) {
- case \[aq]i\[aq]: flags |= CLONE_NEWIPC; break;
- case \[aq]m\[aq]: flags |= CLONE_NEWNS; break;
- case \[aq]n\[aq]: flags |= CLONE_NEWNET; break;
- case \[aq]p\[aq]: flags |= CLONE_NEWPID; break;
- case \[aq]u\[aq]: flags |= CLONE_NEWUTS; break;
- case \[aq]v\[aq]: verbose = 1; break;
- case \[aq]z\[aq]: map_zero = 1; break;
- case \[aq]M\[aq]: uid_map = optarg; break;
- case \[aq]G\[aq]: gid_map = optarg; break;
- case \[aq]U\[aq]: flags |= CLONE_NEWUSER; break;
- default: usage(argv[0]);
- }
- }
-\&
- /* \-M or \-G without \-U is nonsensical */
-\&
- if (((uid_map != NULL || gid_map != NULL || map_zero) &&
- !(flags & CLONE_NEWUSER)) ||
- (map_zero && (uid_map != NULL || gid_map != NULL)))
- usage(argv[0]);
-\&
- args.argv = &argv[optind];
-\&
- /* We use a pipe to synchronize the parent and child, in order to
- ensure that the parent sets the UID and GID maps before the child
- calls execve(). This ensures that the child maintains its
- capabilities during the execve() in the common case where we
- want to map the child\[aq]s effective user ID to 0 in the new user
- namespace. Without this synchronization, the child would lose
- its capabilities if it performed an execve() with nonzero
- user IDs (see the capabilities(7) man page for details of the
- transformation of a process\[aq]s capabilities during execve()). */
-\&
- if (pipe(args.pipe_fd) == \-1)
- err(EXIT_FAILURE, "pipe");
-\&
- /* Create the child in new namespace(s). */
-\&
- child_pid = clone(childFunc, child_stack + STACK_SIZE,
- flags | SIGCHLD, &args);
- if (child_pid == \-1)
- err(EXIT_FAILURE, "clone");
-\&
- /* Parent falls through to here. */
-\&
- if (verbose)
- printf("%s: PID of child created by clone() is %jd\en",
- argv[0], (intmax_t) child_pid);
-\&
- /* Update the UID and GID maps in the child. */
-\&
- if (uid_map != NULL || map_zero) {
- snprintf(map_path, PATH_MAX, "/proc/%jd/uid_map",
- (intmax_t) child_pid);
- if (map_zero) {
- snprintf(map_buf, MAP_BUF_SIZE, "0 %jd 1",
- (intmax_t) getuid());
- uid_map = map_buf;
- }
- update_map(uid_map, map_path);
- }
-\&
- if (gid_map != NULL || map_zero) {
- proc_setgroups_write(child_pid, "deny");
-\&
- snprintf(map_path, PATH_MAX, "/proc/%jd/gid_map",
- (intmax_t) child_pid);
- if (map_zero) {
- snprintf(map_buf, MAP_BUF_SIZE, "0 %ld 1",
- (intmax_t) getgid());
- gid_map = map_buf;
- }
- update_map(gid_map, map_path);
- }
-\&
- /* Close the write end of the pipe, to signal to the child that we
- have updated the UID and GID maps. */
-\&
- close(args.pipe_fd[1]);
-\&
- if (waitpid(child_pid, NULL, 0) == \-1) /* Wait for child */
- err(EXIT_FAILURE, "waitpid");
-\&
- if (verbose)
- printf("%s: terminating\en", argv[0]);
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.SH SEE ALSO
-.BR newgidmap (1), \" From the shadow package
-.BR newuidmap (1), \" From the shadow package
-.BR clone (2),
-.BR ptrace (2),
-.BR setns (2),
-.BR unshare (2),
-.BR proc (5),
-.BR subgid (5), \" From the shadow package
-.BR subuid (5), \" From the shadow package
-.BR capabilities (7),
-.BR cgroup_namespaces (7),
-.BR credentials (7),
-.BR namespaces (7),
-.BR pid_namespaces (7)
-.PP
-The kernel source file
-.IR Documentation/admin\-guide/namespaces/resource\-control.rst .
diff --git a/man7/utf-8.7 b/man7/utf-8.7
deleted file mode 100644
index 015d4b746..000000000
--- a/man7/utf-8.7
+++ /dev/null
@@ -1,211 +0,0 @@
-.\" Copyright (C) Markus Kuhn, 1996, 2001
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 1995-11-26 Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
-.\" First version written
-.\" 2001-05-11 Markus Kuhn <mgk25@cl.cam.ac.uk>
-.\" Update
-.\"
-.TH UTF-8 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-UTF-8 \- an ASCII compatible multibyte Unicode encoding
-.SH DESCRIPTION
-The Unicode 3.0 character set occupies a 16-bit code space.
-The most obvious
-Unicode encoding (known as UCS-2)
-consists of a sequence of 16-bit words.
-Such strings can contain\[em]as part of many 16-bit characters\[em]bytes
-such as \[aq]\e0\[aq] or \[aq]/\[aq], which have a
-special meaning in filenames and other C library function arguments.
-In addition, the majority of UNIX tools expect ASCII files and can't
-read 16-bit words as characters without major modifications.
-For these reasons,
-UCS-2 is not a suitable external encoding of Unicode
-in filenames, text files, environment variables, and so on.
-The ISO/IEC 10646 Universal Character Set (UCS),
-a superset of Unicode, occupies an even larger code
-space\[em]31\ bits\[em]and the obvious
-UCS-4 encoding for it (a sequence of 32-bit words) has the same problems.
-.PP
-The UTF-8 encoding of Unicode and UCS
-does not have these problems and is the common way in which
-Unicode is used on UNIX-style operating systems.
-.SS Properties
-The UTF-8 encoding has the following nice properties:
-.TP 0.2i
-*
-UCS
-characters 0x00000000 to 0x0000007f (the classic US-ASCII
-characters) are encoded simply as bytes 0x00 to 0x7f (ASCII
-compatibility).
-This means that files and strings which contain only
-7-bit ASCII characters have the same encoding under both
-ASCII
-and
-UTF-8 .
-.TP
-*
-All UCS characters greater than 0x7f are encoded as a multibyte sequence
-consisting only of bytes in the range 0x80 to 0xfd, so no ASCII
-byte can appear as part of another character and there are no
-problems with, for example, \[aq]\e0\[aq] or \[aq]/\[aq].
-.TP
-*
-The lexicographic sorting order of UCS-4 strings is preserved.
-.TP
-*
-All possible 2\[ha]31 UCS codes can be encoded using UTF-8.
-.TP
-*
-The bytes 0xc0, 0xc1, 0xfe, and 0xff are never used in the UTF-8 encoding.
-.TP
-*
-The first byte of a multibyte sequence which represents a single non-ASCII
-UCS character is always in the range 0xc2 to 0xfd and indicates how long
-this multibyte sequence is.
-All further bytes in a multibyte sequence
-are in the range 0x80 to 0xbf.
-This allows easy resynchronization and
-makes the encoding stateless and robust against missing bytes.
-.TP
-*
-UTF-8 encoded UCS characters may be up to six bytes long, however the
-Unicode standard specifies no characters above 0x10ffff, so Unicode characters
-can be only up to four bytes long in
-UTF-8.
-.SS Encoding
-The following byte sequences are used to represent a character.
-The sequence to be used depends on the UCS code number of the character:
-.TP 0.4i
-0x00000000 \- 0x0000007F:
-.RI 0 xxxxxxx
-.TP
-0x00000080 \- 0x000007FF:
-.RI 110 xxxxx
-.RI 10 xxxxxx
-.TP
-0x00000800 \- 0x0000FFFF:
-.RI 1110 xxxx
-.RI 10 xxxxxx
-.RI 10 xxxxxx
-.TP
-0x00010000 \- 0x001FFFFF:
-.RI 11110 xxx
-.RI 10 xxxxxx
-.RI 10 xxxxxx
-.RI 10 xxxxxx
-.TP
-0x00200000 \- 0x03FFFFFF:
-.RI 111110 xx
-.RI 10 xxxxxx
-.RI 10 xxxxxx
-.RI 10 xxxxxx
-.RI 10 xxxxxx
-.TP
-0x04000000 \- 0x7FFFFFFF:
-.RI 1111110 x
-.RI 10 xxxxxx
-.RI 10 xxxxxx
-.RI 10 xxxxxx
-.RI 10 xxxxxx
-.RI 10 xxxxxx
-.PP
-The
-.I xxx
-bit positions are filled with the bits of the character code number in
-binary representation, most significant bit first (big-endian).
-Only the shortest possible multibyte sequence
-which can represent the code number of the character can be used.
-.PP
-The UCS code values 0xd800\[en]0xdfff (UTF-16 surrogates) as well as 0xfffe and
-0xffff (UCS noncharacters) should not appear in conforming UTF-8 streams.
-According to RFC 3629 no point above U+10FFFF should be used,
-which limits characters to four bytes.
-.SS Example
-The Unicode character 0xa9 = 1010 1001 (the copyright sign) is encoded
-in UTF-8 as
-.PP
-.RS
-11000010 10101001 = 0xc2 0xa9
-.RE
-.PP
-and character 0x2260 = 0010 0010 0110 0000 (the "not equal" symbol) is
-encoded as:
-.PP
-.RS
-11100010 10001001 10100000 = 0xe2 0x89 0xa0
-.RE
-.SS Application notes
-Users have to select a UTF-8 locale, for example with
-.PP
-.RS
-export LANG=en_GB.UTF-8
-.RE
-.PP
-in order to activate the UTF-8 support in applications.
-.PP
-Application software that has to be aware of the used character
-encoding should always set the locale with for example
-.PP
-.RS
-setlocale(LC_CTYPE, "")
-.RE
-.PP
-and programmers can then test the expression
-.PP
-.RS
-strcmp(nl_langinfo(CODESET), "UTF-8") == 0
-.RE
-.PP
-to determine whether a UTF-8 locale has been selected and whether
-therefore all plaintext standard input and output, terminal
-communication, plaintext file content, filenames, and environment
-variables are encoded in UTF-8.
-.PP
-Programmers accustomed to single-byte encodings such as US-ASCII or ISO 8859
-have to be aware that two assumptions made so far are no longer valid
-in UTF-8 locales.
-Firstly, a single byte does not necessarily correspond any
-more to a single character.
-Secondly, since modern terminal emulators in UTF-8
-mode also support Chinese, Japanese, and Korean
-double-width characters as well as nonspacing combining characters,
-outputting a single character does not necessarily advance the cursor
-by one position as it did in ASCII.
-Library functions such as
-.BR mbsrtowcs (3)
-and
-.BR wcswidth (3)
-should be used today to count characters and cursor positions.
-.PP
-The official ESC sequence to switch from an ISO 2022
-encoding scheme (as used for instance by VT100 terminals) to
-UTF-8 is ESC % G
-("\ex1b%G").
-The corresponding return sequence from
-UTF-8 to ISO 2022 is ESC % @ ("\ex1b%@").
-Other ISO 2022 sequences (such as
-for switching the G0 and G1 sets) are not applicable in UTF-8 mode.
-.SS Security
-The Unicode and UCS standards require that producers of UTF-8
-shall use the shortest form possible, for example, producing a two-byte
-sequence with first byte 0xc0 is nonconforming.
-Unicode 3.1 has added the requirement that conforming programs must not accept
-non-shortest forms in their input.
-This is for security reasons: if
-user input is checked for possible security violations, a program
-might check only for the ASCII
-version of "/../" or ";" or NUL and overlook that there are many
-non-ASCII ways to represent these things in a non-shortest UTF-8
-encoding.
-.SS Standards
-ISO/IEC 10646-1:2000, Unicode 3.1, RFC\ 3629, Plan 9.
-.\" .SH AUTHOR
-.\" Markus Kuhn <mgk25@cl.cam.ac.uk>
-.SH SEE ALSO
-.BR locale (1),
-.BR nl_langinfo (3),
-.BR setlocale (3),
-.BR charsets (7),
-.BR unicode (7)
diff --git a/man7/utf8.7 b/man7/utf8.7
deleted file mode 100644
index 52a90084f..000000000
--- a/man7/utf8.7
+++ /dev/null
@@ -1 +0,0 @@
-.so man7/utf-8.7
diff --git a/man7/uts_namespaces.7 b/man7/uts_namespaces.7
deleted file mode 100644
index 01610fd26..000000000
--- a/man7/uts_namespaces.7
+++ /dev/null
@@ -1,46 +0,0 @@
-.\" Copyright (c) 2019 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\"
-.TH uts_namespaces 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-uts_namespaces \- overview of Linux UTS namespaces
-.SH DESCRIPTION
-UTS namespaces provide isolation of two system identifiers:
-the hostname and the NIS domain name.
-These identifiers are set using
-.BR sethostname (2)
-and
-.BR setdomainname (2),
-and can be retrieved using
-.BR uname (2),
-.BR gethostname (2),
-and
-.BR getdomainname (2).
-Changes made to these identifiers are visible to all other
-processes in the same UTS namespace,
-but are not visible to processes in other UTS namespaces.
-.PP
-When a process creates a new UTS namespace using
-.BR clone (2)
-or
-.BR unshare (2)
-with the
-.B CLONE_NEWUTS
-flag, the hostname and domain name of the new UTS namespace are copied
-from the corresponding values in the caller's UTS namespace.
-.PP
-Use of UTS namespaces requires a kernel that is configured with the
-.B CONFIG_UTS_NS
-option.
-.SH SEE ALSO
-.BR nsenter (1),
-.BR unshare (1),
-.BR clone (2),
-.BR getdomainname (2),
-.BR gethostname (2),
-.BR setns (2),
-.BR uname (2),
-.BR unshare (2),
-.BR namespaces (7)
diff --git a/man7/vdso.7 b/man7/vdso.7
deleted file mode 100644
index 021d300f3..000000000
--- a/man7/vdso.7
+++ /dev/null
@@ -1,612 +0,0 @@
-'\" t
-.\" Written by Mike Frysinger <vapier@gentoo.org>
-.\"
-.\" %%%LICENSE_START(PUBLIC_DOMAIN)
-.\" This page is in the public domain.
-.\" %%%LICENSE_END
-.\"
-.\" Useful background:
-.\" http://articles.manugarg.com/systemcallinlinux2_6.html
-.\" https://lwn.net/Articles/446528/
-.\" http://www.linuxjournal.com/content/creating-vdso-colonels-other-chicken
-.\" http://www.trilithium.com/johan/2005/08/linux-gate/
-.\"
-.TH vDSO 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-vdso \- overview of the virtual ELF dynamic shared object
-.SH SYNOPSIS
-.nf
-.B #include <sys/auxv.h>
-.PP
-.B void *vdso = (uintptr_t) getauxval(AT_SYSINFO_EHDR);
-.fi
-.SH DESCRIPTION
-The "vDSO" (virtual dynamic shared object) is a small shared library that
-the kernel automatically maps into the
-address space of all user-space applications.
-Applications usually do not need to concern themselves with these details
-as the vDSO is most commonly called by the C library.
-This way you can code in the normal way using standard functions
-and the C library will take care
-of using any functionality that is available via the vDSO.
-.PP
-Why does the vDSO exist at all?
-There are some system calls the kernel provides that
-user-space code ends up using frequently,
-to the point that such calls can dominate overall performance.
-This is due both to the frequency of the call as well as the
-context-switch overhead that results
-from exiting user space and entering the kernel.
-.PP
-The rest of this documentation is geared toward the curious and/or
-C library writers rather than general developers.
-If you're trying to call the vDSO in your own application rather than using
-the C library, you're most likely doing it wrong.
-.SS Example background
-Making system calls can be slow.
-In x86 32-bit systems, you can trigger a software interrupt
-.RI ( "int $0x80" )
-to tell the kernel you wish to make a system call.
-However, this instruction is expensive: it goes through
-the full interrupt-handling paths
-in the processor's microcode as well as in the kernel.
-Newer processors have faster (but backward incompatible) instructions to
-initiate system calls.
-Rather than require the C library to figure out if this functionality is
-available at run time,
-the C library can use functions provided by the kernel in
-the vDSO.
-.PP
-Note that the terminology can be confusing.
-On x86 systems, the vDSO function
-used to determine the preferred method of making a system call is
-named "__kernel_vsyscall", but on x86-64,
-the term "vsyscall" also refers to an obsolete way to ask the kernel
-what time it is or what CPU the caller is on.
-.PP
-One frequently used system call is
-.BR gettimeofday (2).
-This system call is called both directly by user-space applications
-as well as indirectly by
-the C library.
-Think timestamps or timing loops or polling\[em]all of these
-frequently need to know what time it is right now.
-This information is also not secret\[em]any application in any
-privilege mode (root or any unprivileged user) will get the same answer.
-Thus the kernel arranges for the information required to answer
-this question to be placed in memory the process can access.
-Now a call to
-.BR gettimeofday (2)
-changes from a system call to a normal function
-call and a few memory accesses.
-.SS Finding the vDSO
-The base address of the vDSO (if one exists) is passed by the kernel to
-each program in the initial auxiliary vector (see
-.BR getauxval (3)),
-via the
-.B AT_SYSINFO_EHDR
-tag.
-.PP
-You must not assume the vDSO is mapped at any particular location in the
-user's memory map.
-The base address will usually be randomized at run time every time a new
-process image is created (at
-.BR execve (2)
-time).
-This is done for security reasons,
-to prevent "return-to-libc" attacks.
-.PP
-For some architectures, there is also an
-.B AT_SYSINFO
-tag.
-This is used only for locating the vsyscall entry point and is frequently
-omitted or set to 0 (meaning it's not available).
-This tag is a throwback to the initial vDSO work (see
-.I History
-below) and its use should be avoided.
-.SS File format
-Since the vDSO is a fully formed ELF image, you can do symbol lookups on it.
-This allows new symbols to be added with newer kernel releases,
-and allows the C library to detect available functionality at
-run time when running under different kernel versions.
-Oftentimes the C library will do detection with the first call and then
-cache the result for subsequent calls.
-.PP
-All symbols are also versioned (using the GNU version format).
-This allows the kernel to update the function signature without breaking
-backward compatibility.
-This means changing the arguments that the function accepts as well as the
-return value.
-Thus, when looking up a symbol in the vDSO,
-you must always include the version
-to match the ABI you expect.
-.PP
-Typically the vDSO follows the naming convention of prefixing
-all symbols with "__vdso_" or "__kernel_"
-so as to distinguish them from other standard symbols.
-For example, the "gettimeofday" function is named "__vdso_gettimeofday".
-.PP
-You use the standard C calling conventions when calling
-any of these functions.
-No need to worry about weird register or stack behavior.
-.SH NOTES
-.SS Source
-When you compile the kernel,
-it will automatically compile and link the vDSO code for you.
-You will frequently find it under the architecture-specific directory:
-.PP
-.in +4n
-.EX
-find arch/$ARCH/ \-name \[aq]*vdso*.so*\[aq] \-o \-name \[aq]*gate*.so*\[aq]
-.EE
-.in
-.\"
-.SS vDSO names
-The name of the vDSO varies across architectures.
-It will often show up in things like glibc's
-.BR ldd (1)
-output.
-The exact name should not matter to any code, so do not hardcode it.
-.if t \{\
-.ft CW
-\}
-.TS
-l l.
-user ABI vDSO name
-_
-aarch64 linux\-vdso.so.1
-arm linux\-vdso.so.1
-ia64 linux\-gate.so.1
-mips linux\-vdso.so.1
-ppc/32 linux\-vdso32.so.1
-ppc/64 linux\-vdso64.so.1
-riscv linux\-vdso.so.1
-s390 linux\-vdso32.so.1
-s390x linux\-vdso64.so.1
-sh linux\-gate.so.1
-i386 linux\-gate.so.1
-x86-64 linux\-vdso.so.1
-x86/x32 linux\-vdso.so.1
-.TE
-.if t \{\
-.in
-.ft P
-\}
-.SS strace(1), seccomp(2), and the vDSO
-When tracing systems calls with
-.BR strace (1),
-symbols (system calls) that are exported by the vDSO will
-.I not
-appear in the trace output.
-Those system calls will likewise not be visible to
-.BR seccomp (2)
-filters.
-.SH ARCHITECTURE-SPECIFIC NOTES
-The subsections below provide architecture-specific notes
-on the vDSO.
-.PP
-Note that the vDSO that is used is based on the ABI of your user-space code
-and not the ABI of the kernel.
-Thus, for example,
-when you run an i386 32-bit ELF binary,
-you'll get the same vDSO regardless of whether you run it under
-an i386 32-bit kernel or under an x86-64 64-bit kernel.
-Therefore, the name of the user-space ABI should be used to determine
-which of the sections below is relevant.
-.SS ARM functions
-.\" See linux/arch/arm/vdso/vdso.lds.S
-.\" Commit: 8512287a8165592466cb9cb347ba94892e9c56a5
-The table below lists the symbols exported by the vDSO.
-.if t \{\
-.ft CW
-\}
-.TS
-l l.
-symbol version
-_
-__vdso_gettimeofday LINUX_2.6 (exported since Linux 4.1)
-__vdso_clock_gettime LINUX_2.6 (exported since Linux 4.1)
-.TE
-.if t \{\
-.in
-.ft P
-\}
-.PP
-.\" See linux/arch/arm/kernel/entry-armv.S
-.\" See linux/Documentation/arm/kernel_user_helpers.rst
-Additionally, the ARM port has a code page full of utility functions.
-Since it's just a raw page of code, there is no ELF information for doing
-symbol lookups or versioning.
-It does provide support for different versions though.
-.PP
-For information on this code page,
-it's best to refer to the kernel documentation
-as it's extremely detailed and covers everything you need to know:
-.IR Documentation/arm/kernel_user_helpers.rst .
-.SS aarch64 functions
-.\" See linux/arch/arm64/kernel/vdso/vdso.lds.S
-The table below lists the symbols exported by the vDSO.
-.if t \{\
-.ft CW
-\}
-.TS
-l l.
-symbol version
-_
-__kernel_rt_sigreturn LINUX_2.6.39
-__kernel_gettimeofday LINUX_2.6.39
-__kernel_clock_gettime LINUX_2.6.39
-__kernel_clock_getres LINUX_2.6.39
-.TE
-.if t \{\
-.in
-.ft P
-\}
-.SS bfin (Blackfin) functions (port removed in Linux 4.17)
-.\" See linux/arch/blackfin/kernel/fixed_code.S
-.\" See http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:fixed-code
-As this CPU lacks a memory management unit (MMU),
-it doesn't set up a vDSO in the normal sense.
-Instead, it maps at boot time a few raw functions into
-a fixed location in memory.
-User-space applications then call directly into that region.
-There is no provision for backward compatibility
-beyond sniffing raw opcodes,
-but as this is an embedded CPU, it can get away with things\[em]some of the
-object formats it runs aren't even ELF based (they're bFLT/FLAT).
-.PP
-For information on this code page,
-it's best to refer to the public documentation:
-.br
-http://docs.blackfin.uclinux.org/doku.php?id=linux\-kernel:fixed\-code
-.SS mips functions
-.\" See linux/arch/mips/vdso/vdso.ld.S
-The table below lists the symbols exported by the vDSO.
-.if t \{\
-.ft CW
-\}
-.TS
-l l.
-symbol version
-_
-__kernel_gettimeofday LINUX_2.6 (exported since Linux 4.4)
-__kernel_clock_gettime LINUX_2.6 (exported since Linux 4.4)
-.TE
-.if t \{\
-.in
-.ft P
-\}
-.SS ia64 (Itanium) functions
-.\" See linux/arch/ia64/kernel/gate.lds.S
-.\" Also linux/arch/ia64/kernel/fsys.S and linux/Documentation/ia64/fsys.rst
-The table below lists the symbols exported by the vDSO.
-.if t \{\
-.ft CW
-\}
-.TS
-l l.
-symbol version
-_
-__kernel_sigtramp LINUX_2.5
-__kernel_syscall_via_break LINUX_2.5
-__kernel_syscall_via_epc LINUX_2.5
-.TE
-.if t \{\
-.in
-.ft P
-\}
-.PP
-The Itanium port is somewhat tricky.
-In addition to the vDSO above, it also has "light-weight system calls"
-(also known as "fast syscalls" or "fsys").
-You can invoke these via the
-.I __kernel_syscall_via_epc
-vDSO helper.
-The system calls listed here have the same semantics as if you called them
-directly via
-.BR syscall (2),
-so refer to the relevant
-documentation for each.
-The table below lists the functions available via this mechanism.
-.if t \{\
-.ft CW
-\}
-.TS
-l.
-function
-_
-clock_gettime
-getcpu
-getpid
-getppid
-gettimeofday
-set_tid_address
-.TE
-.if t \{\
-.in
-.ft P
-\}
-.SS parisc (hppa) functions
-.\" See linux/arch/parisc/kernel/syscall.S
-.\" See linux/Documentation/parisc/registers.rst
-The parisc port has a code page with utility functions
-called a gateway page.
-Rather than use the normal ELF auxiliary vector approach,
-it passes the address of
-the page to the process via the SR2 register.
-The permissions on the page are such that merely executing those addresses
-automatically executes with kernel privileges and not in user space.
-This is done to match the way HP-UX works.
-.PP
-Since it's just a raw page of code, there is no ELF information for doing
-symbol lookups or versioning.
-Simply call into the appropriate offset via the branch instruction,
-for example:
-.PP
-.in +4n
-.EX
-ble <offset>(%sr2, %r0)
-.EE
-.in
-.if t \{\
-.ft CW
-\}
-.TS
-l l.
-offset function
-_
-00b0 lws_entry (CAS operations)
-00e0 set_thread_pointer (used by glibc)
-0100 linux_gateway_entry (syscall)
-.TE
-.if t \{\
-.in
-.ft P
-\}
-.SS ppc/32 functions
-.\" See linux/arch/powerpc/kernel/vdso32/vdso32.lds.S
-The table below lists the symbols exported by the vDSO.
-The functions marked with a
-.I *
-are available only when the kernel is
-a PowerPC64 (64-bit) kernel.
-.if t \{\
-.ft CW
-\}
-.TS
-l l.
-symbol version
-_
-__kernel_clock_getres LINUX_2.6.15
-__kernel_clock_gettime LINUX_2.6.15
-__kernel_clock_gettime64 LINUX_5.11
-__kernel_datapage_offset LINUX_2.6.15
-__kernel_get_syscall_map LINUX_2.6.15
-__kernel_get_tbfreq LINUX_2.6.15
-__kernel_getcpu \fI*\fR LINUX_2.6.15
-__kernel_gettimeofday LINUX_2.6.15
-__kernel_sigtramp_rt32 LINUX_2.6.15
-__kernel_sigtramp32 LINUX_2.6.15
-__kernel_sync_dicache LINUX_2.6.15
-__kernel_sync_dicache_p5 LINUX_2.6.15
-.TE
-.if t \{\
-.in
-.ft P
-\}
-.PP
-Before Linux 5.6,
-.\" commit 654abc69ef2e69712e6d4e8a6cb9292b97a4aa39
-the
-.B CLOCK_REALTIME_COARSE
-and
-.B CLOCK_MONOTONIC_COARSE
-clocks are
-.I not
-supported by the
-.I __kernel_clock_getres
-and
-.I __kernel_clock_gettime
-interfaces;
-the kernel falls back to the real system call.
-.SS ppc/64 functions
-.\" See linux/arch/powerpc/kernel/vdso64/vdso64.lds.S
-The table below lists the symbols exported by the vDSO.
-.if t \{\
-.ft CW
-\}
-.TS
-l l.
-symbol version
-_
-__kernel_clock_getres LINUX_2.6.15
-__kernel_clock_gettime LINUX_2.6.15
-__kernel_datapage_offset LINUX_2.6.15
-__kernel_get_syscall_map LINUX_2.6.15
-__kernel_get_tbfreq LINUX_2.6.15
-__kernel_getcpu LINUX_2.6.15
-__kernel_gettimeofday LINUX_2.6.15
-__kernel_sigtramp_rt64 LINUX_2.6.15
-__kernel_sync_dicache LINUX_2.6.15
-__kernel_sync_dicache_p5 LINUX_2.6.15
-.TE
-.if t \{\
-.in
-.ft P
-\}
-.PP
-Before Linux 4.16,
-.\" commit 5c929885f1bb4b77f85b1769c49405a0e0f154a1
-the
-.B CLOCK_REALTIME_COARSE
-and
-.B CLOCK_MONOTONIC_COARSE
-clocks are
-.I not
-supported by the
-.I __kernel_clock_getres
-and
-.I __kernel_clock_gettime
-interfaces;
-the kernel falls back to the real system call.
-.SS riscv functions
-.\" See linux/arch/riscv/kernel/vdso/vdso.lds.S
-The table below lists the symbols exported by the vDSO.
-.if t \{\
-.ft CW
-\}
-.TS
-l l.
-symbol version
-_
-__vdso_rt_sigreturn LINUX_4.15
-__vdso_gettimeofday LINUX_4.15
-__vdso_clock_gettime LINUX_4.15
-__vdso_clock_getres LINUX_4.15
-__vdso_getcpu LINUX_4.15
-__vdso_flush_icache LINUX_4.15
-.TE
-.if t \{\
-.in
-.ft P
-\}
-.SS s390 functions
-.\" See linux/arch/s390/kernel/vdso32/vdso32.lds.S
-The table below lists the symbols exported by the vDSO.
-.if t \{\
-.ft CW
-\}
-.TS
-l l.
-symbol version
-_
-__kernel_clock_getres LINUX_2.6.29
-__kernel_clock_gettime LINUX_2.6.29
-__kernel_gettimeofday LINUX_2.6.29
-.TE
-.if t \{\
-.in
-.ft P
-\}
-.SS s390x functions
-.\" See linux/arch/s390/kernel/vdso64/vdso64.lds.S
-The table below lists the symbols exported by the vDSO.
-.if t \{\
-.ft CW
-\}
-.TS
-l l.
-symbol version
-_
-__kernel_clock_getres LINUX_2.6.29
-__kernel_clock_gettime LINUX_2.6.29
-__kernel_gettimeofday LINUX_2.6.29
-.TE
-.if t \{\
-.in
-.ft P
-\}
-.SS sh (SuperH) functions
-.\" See linux/arch/sh/kernel/vsyscall/vsyscall.lds.S
-The table below lists the symbols exported by the vDSO.
-.if t \{\
-.ft CW
-\}
-.TS
-l l.
-symbol version
-_
-__kernel_rt_sigreturn LINUX_2.6
-__kernel_sigreturn LINUX_2.6
-__kernel_vsyscall LINUX_2.6
-.TE
-.if t \{\
-.in
-.ft P
-\}
-.SS i386 functions
-.\" See linux/arch/x86/vdso/vdso32/vdso32.lds.S
-The table below lists the symbols exported by the vDSO.
-.if t \{\
-.ft CW
-\}
-.TS
-l l.
-symbol version
-_
-__kernel_sigreturn LINUX_2.5
-__kernel_rt_sigreturn LINUX_2.5
-__kernel_vsyscall LINUX_2.5
-.\" Added in 7a59ed415f5b57469e22e41fc4188d5399e0b194 and updated
-.\" in 37c975545ec63320789962bf307f000f08fabd48.
-__vdso_clock_gettime LINUX_2.6 (exported since Linux 3.15)
-__vdso_gettimeofday LINUX_2.6 (exported since Linux 3.15)
-__vdso_time LINUX_2.6 (exported since Linux 3.15)
-.TE
-.if t \{\
-.in
-.ft P
-\}
-.SS x86-64 functions
-.\" See linux/arch/x86/vdso/vdso.lds.S
-The table below lists the symbols exported by the vDSO.
-All of these symbols are also available without the "__vdso_" prefix, but
-you should ignore those and stick to the names below.
-.if t \{\
-.ft CW
-\}
-.TS
-l l.
-symbol version
-_
-__vdso_clock_gettime LINUX_2.6
-__vdso_getcpu LINUX_2.6
-__vdso_gettimeofday LINUX_2.6
-__vdso_time LINUX_2.6
-.TE
-.if t \{\
-.in
-.ft P
-\}
-.SS x86/x32 functions
-.\" See linux/arch/x86/vdso/vdso32.lds.S
-The table below lists the symbols exported by the vDSO.
-.if t \{\
-.ft CW
-\}
-.TS
-l l.
-symbol version
-_
-__vdso_clock_gettime LINUX_2.6
-__vdso_getcpu LINUX_2.6
-__vdso_gettimeofday LINUX_2.6
-__vdso_time LINUX_2.6
-.TE
-.if t \{\
-.in
-.ft P
-\}
-.SS History
-The vDSO was originally just a single function\[em]the vsyscall.
-In older kernels, you might see that name
-in a process's memory map rather than "vdso".
-Over time, people realized that this mechanism
-was a great way to pass more functionality
-to user space, so it was reconceived as a vDSO in the current format.
-.SH SEE ALSO
-.BR syscalls (2),
-.BR getauxval (3),
-.BR proc (5)
-.PP
-The documents, examples, and source code in the Linux source code tree:
-.PP
-.in +4n
-.EX
-Documentation/ABI/stable/vdso
-Documentation/ia64/fsys.rst
-Documentation/vDSO/* (includes examples of using the vDSO)
-.PP
-find arch/ \-iname \[aq]*vdso*\[aq] \-o \-iname \[aq]*gate*\[aq]
-.EE
-.in
diff --git a/man7/vsock.7 b/man7/vsock.7
deleted file mode 100644
index 397e361b0..000000000
--- a/man7/vsock.7
+++ /dev/null
@@ -1,232 +0,0 @@
-.\" Copyright (C) 2018, Stefan Hajnoczi <stefanha@redhat.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH vsock 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-vsock \- Linux VSOCK address family
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.B #include <linux/vm_sockets.h>
-.PP
-.IB stream_socket " = socket(AF_VSOCK, SOCK_STREAM, 0);"
-.IB datagram_socket " = socket(AF_VSOCK, SOCK_DGRAM, 0);"
-.fi
-.SH DESCRIPTION
-The VSOCK address family facilitates communication between virtual machines and
-the host they are running on.
-This address family is used by guest agents and
-hypervisor services that need a communications channel that is independent of
-virtual machine network configuration.
-.PP
-Valid socket types are
-.B SOCK_STREAM
-and
-.BR SOCK_DGRAM .
-.B SOCK_STREAM
-provides connection-oriented byte streams with guaranteed, in-order delivery.
-.B SOCK_DGRAM
-provides a connectionless datagram packet service with best-effort delivery and
-best-effort ordering.
-Availability of these socket types is dependent on the
-underlying hypervisor.
-.PP
-A new socket is created with
-.PP
-.in +4n
-.EX
-socket(AF_VSOCK, socket_type, 0);
-.EE
-.in
-.PP
-When a process wants to establish a connection, it calls
-.BR connect (2)
-with a given destination socket address.
-The socket is automatically bound to a free port if unbound.
-.PP
-A process can listen for incoming connections by first binding to a socket
-address using
-.BR bind (2)
-and then calling
-.BR listen (2).
-.PP
-Data is transmitted using the
-.BR send (2)
-or
-.BR write (2)
-families of system calls and data is received using the
-.BR recv (2)
-or
-.BR read (2)
-families of system calls.
-.SS Address format
-A socket address is defined as a combination of a 32-bit Context Identifier
-(CID) and a 32-bit port number.
-The CID identifies the source or destination,
-which is either a virtual machine or the host.
-The port number differentiates between multiple services running on
-a single machine.
-.PP
-.in +4n
-.EX
-struct sockaddr_vm {
- sa_family_t svm_family; /* Address family: AF_VSOCK */
- unsigned short svm_reserved1;
- unsigned int svm_port; /* Port # in host byte order */
- unsigned int svm_cid; /* Address in host byte order */
- unsigned char svm_zero[sizeof(struct sockaddr) \-
- sizeof(sa_family_t) \-
- sizeof(unsigned short) \-
- sizeof(unsigned int) \-
- sizeof(unsigned int)];
-};
-.EE
-.in
-.PP
-.I svm_family
-is always set to
-.BR AF_VSOCK .
-.I svm_reserved1
-is always set to 0.
-.I svm_port
-contains the port number in host byte order.
-The port numbers below 1024 are called
-.IR "privileged ports" .
-Only a process with the
-.B CAP_NET_BIND_SERVICE
-capability may
-.BR bind (2)
-to these port numbers.
-.I svm_zero
-must be zero-filled.
-.PP
-There are several special addresses:
-.B VMADDR_CID_ANY
-(\-1U)
-means any address for binding;
-.B VMADDR_CID_HYPERVISOR
-(0) is reserved for services built into the hypervisor;
-.B VMADDR_CID_LOCAL
-(1) is the well-known address for local communication (loopback);
-.B VMADDR_CID_HOST
-(2)
-is the well-known address of the host.
-.PP
-The special constant
-.B VMADDR_PORT_ANY
-(\-1U)
-means any port number for binding.
-.SS Live migration
-Sockets are affected by live migration of virtual machines.
-Connected
-.B SOCK_STREAM
-sockets become disconnected when the virtual machine migrates to a new host.
-Applications must reconnect when this happens.
-.PP
-The local CID may change across live migration if the old CID is
-not available on the new host.
-Bound sockets are automatically updated to the new CID.
-.SS Ioctls
-The following ioctls are available on the
-.I /dev/vsock
-device.
-.TP
-.B IOCTL_VM_SOCKETS_GET_LOCAL_CID
-Get the CID of the local machine.
-The argument is a pointer to an
-.IR "unsigned int" .
-.IP
-.in +4n
-.EX
-ioctl(fd, IOCTL_VM_SOCKETS_GET_LOCAL_CID, &cid);
-.EE
-.in
-.IP
-Consider using
-.B VMADDR_CID_ANY
-when binding instead of getting the local CID with
-.BR IOCTL_VM_SOCKETS_GET_LOCAL_CID .
-.SS Local communication
-.B VMADDR_CID_LOCAL
-(1) directs packets to the same host that generated them.
-This is useful
-for testing applications on a single host and for debugging.
-.PP
-The local CID obtained with
-.B IOCTL_VM_SOCKETS_GET_LOCAL_CID
-can be used for the same purpose, but it is preferable to use
-.B VMADDR_CID_LOCAL .
-.SH ERRORS
-.TP
-.B EACCES
-Unable to bind to a privileged port without the
-.B CAP_NET_BIND_SERVICE
-capability.
-.TP
-.B EADDRINUSE
-Unable to bind to a port that is already in use.
-.TP
-.B EADDRNOTAVAIL
-Unable to find a free port for binding or unable to bind to a nonlocal CID.
-.TP
-.B EINVAL
-Invalid parameters.
-This includes:
-attempting to bind a socket that is already bound, providing an invalid struct
-.IR sockaddr_vm ,
-and other input validation errors.
-.TP
-.B ENOPROTOOPT
-Invalid socket option in
-.BR setsockopt (2)
-or
-.BR getsockopt (2).
-.TP
-.B ENOTCONN
-Unable to perform operation on an unconnected socket.
-.TP
-.B EOPNOTSUPP
-Operation not supported.
-This includes:
-the
-.B MSG_OOB
-flag that is not implemented for the
-.BR send (2)
-family of syscalls and
-.B MSG_PEEK
-for the
-.BR recv (2)
-family of syscalls.
-.TP
-.B EPROTONOSUPPORT
-Invalid socket protocol number.
-The protocol should always be 0.
-.TP
-.B ESOCKTNOSUPPORT
-Unsupported socket type in
-.BR socket (2).
-Only
-.B SOCK_STREAM
-and
-.B SOCK_DGRAM
-are valid.
-.SH VERSIONS
-Support for VMware (VMCI) has been available since Linux 3.9.
-KVM (virtio) is supported since Linux 4.8.
-Hyper-V is supported since Linux 4.14.
-.PP
-.B VMADDR_CID_LOCAL
-is supported since Linux 5.6.
-.\" commit ef343b35d46667668a099655fca4a5b2e43a5dfe
-Local communication in the guest and on the host is available since Linux 5.6.
-Previous versions supported only local communication within a guest
-(not on the host), and with only some transports (VMCI and virtio).
-.SH SEE ALSO
-.BR bind (2),
-.BR connect (2),
-.BR listen (2),
-.BR recv (2),
-.BR send (2),
-.BR socket (2),
-.BR capabilities (7)
diff --git a/man7/x25.7 b/man7/x25.7
deleted file mode 100644
index 64a7826e2..000000000
--- a/man7/x25.7
+++ /dev/null
@@ -1,127 +0,0 @@
-.\" This man page is Copyright (C) 1998 Heiner Eisen.
-.\"
-.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
-.\" Permission is granted to distribute possibly modified copies
-.\" of this page provided the header is included verbatim,
-.\" and in case of nontrivial modification author and date
-.\" of the modification is added to the header.
-.\" %%%LICENSE_END
-.\"
-.\" $Id: x25.7,v 1.4 1999/05/18 10:35:12 freitag Exp $
-.\"
-.TH x25 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-x25 \- ITU-T X.25 / ISO-8208 protocol interface
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.B #include <linux/x25.h>
-.PP
-.IB x25_socket " = socket(AF_X25, SOCK_SEQPACKET, 0);"
-.fi
-.SH DESCRIPTION
-X25 sockets provide an interface to the X.25 packet layer protocol.
-This allows applications to
-communicate over a public X.25 data network as standardized by
-International Telecommunication Union's recommendation X.25
-(X.25 DTE-DCE mode).
-X25 sockets can also be used for communication
-without an intermediate X.25 network (X.25 DTE-DTE mode) as described
-in ISO-8208.
-.PP
-Message boundaries are preserved \[em] a
-.BR read (2)
-from a socket will
-retrieve the same chunk of data as output with the corresponding
-.BR write (2)
-to the peer socket.
-When necessary, the kernel takes care
-of segmenting and reassembling long messages by means of
-the X.25 M-bit.
-There is no hard-coded upper limit for the
-message size.
-However, reassembling of a long message might fail if
-there is a temporary lack of system resources or when other constraints
-(such as socket memory or buffer size limits) become effective.
-If that
-occurs, the X.25 connection will be reset.
-.SS Socket addresses
-The
-.B AF_X25
-socket address family uses the
-.I struct sockaddr_x25
-for representing network addresses as defined in ITU-T
-recommendation X.121.
-.PP
-.in +4n
-.EX
-struct sockaddr_x25 {
- sa_family_t sx25_family; /* must be AF_X25 */
- x25_address sx25_addr; /* X.121 Address */
-};
-.EE
-.in
-.PP
-.I sx25_addr
-contains a char array
-.I x25_addr[]
-to be interpreted as a null-terminated string.
-.I sx25_addr.x25_addr[]
-consists of up to 15 (not counting the terminating null byte) ASCII
-characters forming the X.121 address.
-Only the decimal digit characters from \[aq]0\[aq] to \[aq]9\[aq] are allowed.
-.SS Socket options
-The following X.25-specific socket options can be set by using
-.BR setsockopt (2)
-and read with
-.BR getsockopt (2)
-with the
-.I level
-argument set to
-.BR SOL_X25 .
-.TP
-.B X25_QBITINCL
-Controls whether the X.25 Q-bit (Qualified Data Bit) is accessible by the
-user.
-It expects an integer argument.
-If set to 0 (default),
-the Q-bit is never set for outgoing packets and the Q-bit of incoming
-packets is ignored.
-If set to 1, an additional first byte is prepended
-to each message read from or written to the socket.
-For data read from
-the socket, a 0 first byte indicates that the Q-bits of the corresponding
-incoming data packets were not set.
-A first byte with value 1 indicates
-that the Q-bit of the corresponding incoming data packets was set.
-If the first byte of the data written to the socket is 1, the Q-bit of the
-corresponding outgoing data packets will be set.
-If the first byte is 0,
-the Q-bit will not be set.
-.SH VERSIONS
-The AF_X25 protocol family is a new feature of Linux 2.2.
-.SH BUGS
-Plenty, as the X.25 PLP implementation is
-.BR CONFIG_EXPERIMENTAL .
-.PP
-This man page is incomplete.
-.PP
-There is no dedicated application programmer's header file yet;
-you need to include the kernel header file
-.IR <linux/x25.h> .
-.B CONFIG_EXPERIMENTAL
-might also imply that future versions of the
-interface are not binary compatible.
-.PP
-X.25 N-Reset events are not propagated to the user process yet.
-Thus,
-if a reset occurred, data might be lost without notice.
-.SH SEE ALSO
-.BR socket (2),
-.BR socket (7)
-.PP
-Jonathan Simon Naylor:
-\[lq]The Re-Analysis and Re-Implementation of X.25.\[rq]
-The URL is
-.UR ftp://ftp.pspt.fi\:/pub\:/ham\:/linux\:/ax25\:/x25doc.tgz
-.UE .
diff --git a/man7/xattr.7 b/man7/xattr.7
deleted file mode 100644
index 51fe4c8d7..000000000
--- a/man7/xattr.7
+++ /dev/null
@@ -1,180 +0,0 @@
-.\" Extended attributes manual page
-.\"
-.\" Copyright (C) 2000, 2002, 2007 Andreas Gruenbacher <agruen@suse.de>
-.\" Copyright (C) 2001, 2002, 2004, 2007 Silicon Graphics, Inc.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH xattr 7 (date) "Linux man-pages (unreleased)"
-.SH NAME
-xattr \- Extended attributes
-.SH DESCRIPTION
-Extended attributes are name:value pairs associated permanently with
-files and directories, similar to the environment strings associated
-with a process.
-An attribute may be defined or undefined.
-If it is defined, its value may be empty or non-empty.
-.PP
-Extended attributes are extensions to the normal attributes which are
-associated with all inodes in the system (i.e., the
-.BR stat (2)
-data).
-They are often used to provide additional functionality
-to a filesystem\[em]for example, additional security features such as
-Access Control Lists (ACLs) may be implemented using extended attributes.
-.PP
-Users with search access to a file or directory may use
-.BR listxattr (2)
-to retrieve a list of attribute names defined for that file or directory.
-.PP
-Extended attributes are accessed as atomic objects.
-Reading
-.RB ( getxattr (2))
-retrieves the whole value of an attribute and stores it in a buffer.
-Writing
-.RB ( setxattr (2))
-replaces any previous value with the new value.
-.PP
-Space consumed for extended attributes may be counted towards the disk quotas
-of the file owner and file group.
-.SS Extended attribute namespaces
-Attribute names are null-terminated strings.
-The attribute name is always specified in the fully qualified
-.I namespace.attribute
-form, for example,
-.IR user.mime_type ,
-.IR trusted.md5sum ,
-.IR system.posix_acl_access ,
-or
-.IR security.selinux .
-.PP
-The namespace mechanism is used to define different classes of extended
-attributes.
-These different classes exist for several reasons;
-for example, the permissions
-and capabilities required for manipulating extended attributes of one
-namespace may differ to another.
-.PP
-Currently, the
-.IR security ,
-.IR system ,
-.IR trusted ,
-and
-.I user
-extended attribute classes are defined as described below.
-Additional classes may be added in the future.
-.SS Extended security attributes
-The security attribute namespace is used by kernel security modules,
-such as Security Enhanced Linux, and also to implement file capabilities (see
-.BR capabilities (7)).
-Read and write access permissions to security attributes depend on the
-policy implemented for each security attribute by the security module.
-When no security module is loaded, all processes have read access to
-extended security attributes, and write access is limited to processes
-that have the
-.B CAP_SYS_ADMIN
-capability.
-.SS System extended attributes
-System extended attributes are used by the kernel to store system
-objects such as Access Control Lists.
-Read and write
-access permissions to system attributes depend on the policy implemented
-for each system attribute implemented by filesystems in the kernel.
-.SS Trusted extended attributes
-Trusted extended attributes are visible and accessible only to processes that
-have the
-.B CAP_SYS_ADMIN
-capability.
-Attributes in this class are used to implement mechanisms in user
-space (i.e., outside the kernel) which keep information in extended attributes
-to which ordinary processes should not have access.
-.SS User extended attributes
-User extended attributes may be assigned to files and directories for
-storing arbitrary additional information such as the mime type,
-character set or encoding of a file.
-The access permissions for user
-attributes are defined by the file permission bits:
-read permission is required to retrieve the attribute value,
-and writer permission is required to change it.
-.PP
-The file permission bits of regular files and directories are
-interpreted differently from the file permission bits of special files
-and symbolic links.
-For regular files and directories the file
-permission bits define access to the file's contents, while for device special
-files they define access to the device described by the special file.
-The file permissions of symbolic links are not used in access checks.
-These differences would allow users to consume filesystem resources in
-a way not controllable by disk quotas for group or world writable
-special files and directories.
-.PP
-For this reason,
-user extended attributes are allowed only for regular files and directories,
-and access to user extended attributes is restricted to the
-owner and to users with appropriate capabilities for directories with the
-sticky bit set (see the
-.BR chmod (1)
-manual page for an explanation of the sticky bit).
-.SS Filesystem differences
-The kernel and the filesystem may place limits on the maximum number
-and size of extended attributes that can be associated with a file.
-The VFS-imposed limits on attribute names and values are 255 bytes
-and 64\ kB, respectively.
-The list of attribute names that
-can be returned is also limited to 64\ kB
-(see BUGS in
-.BR listxattr (2)).
-.PP
-Some filesystems, such as Reiserfs (and, historically, ext2 and ext3),
-require the filesystem to be mounted with the
-.B user_xattr
-mount option in order for user extended attributes to be used.
-.PP
-In the current ext2, ext3, and ext4 filesystem implementations,
-the total bytes used by the names and values of all of a file's
-extended attributes must fit in a single filesystem block (1024, 2048
-or 4096 bytes, depending on the block size specified when the
-filesystem was created).
-.PP
-In the Btrfs, XFS, and Reiserfs filesystem implementations, there is no
-practical limit on the number of extended attributes
-associated with a file, and the algorithms used to store extended
-attribute information on disk are scalable.
-.PP
-In the JFS, XFS, and Reiserfs filesystem implementations,
-the limit on bytes used in an EA value is the ceiling imposed by the VFS.
-.PP
-In the Btrfs filesystem implementation,
-the total bytes used for the name, value, and implementation overhead bytes
-is limited to the filesystem
-.I nodesize
-value (16\ kB by default).
-.SH STANDARDS
-Extended attributes are not specified in POSIX.1, but some other systems
-(e.g., the BSDs and Solaris) provide a similar feature.
-.SH NOTES
-Since the filesystems on which extended attributes are stored might also
-be used on architectures with a different byte order and machine word
-size, care should be taken to store attribute values in an
-architecture-independent format.
-.PP
-This page was formerly named
-.BR attr (5).
-.\" .SH AUTHORS
-.\" Andreas Gruenbacher,
-.\" .RI < a.gruenbacher@bestbits.at >
-.\" and the SGI XFS development team,
-.\" .RI < linux-xfs@oss.sgi.com >.
-.SH SEE ALSO
-.BR attr (1),
-.BR getfattr (1),
-.BR setfattr (1),
-.BR getxattr (2),
-.BR ioctl_iflags (2),
-.BR listxattr (2),
-.BR removexattr (2),
-.BR setxattr (2),
-.BR acl (5),
-.BR capabilities (7),
-.BR selinux (8)
diff --git a/man8/iconvconfig.8 b/man8/iconvconfig.8
deleted file mode 100644
index 83cdfb253..000000000
--- a/man8/iconvconfig.8
+++ /dev/null
@@ -1,86 +0,0 @@
-.\" Copyright (C) 2014 Marko Myllynen <myllynen@redhat.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.TH iconvconfig 8 (date) "Linux man-pages (unreleased)"
-.SH NAME
-iconvconfig \- create iconv module configuration cache
-.SH SYNOPSIS
-.B iconvconfig
-.RI [ options ]
-.RI [ directory ]...
-.SH DESCRIPTION
-The
-.BR iconv (3)
-function internally uses
-.I gconv
-modules to convert to and from a character set.
-A configuration file is used to determine the needed modules
-for a conversion.
-Loading and parsing such a configuration file would slow down
-programs that use
-.BR iconv (3),
-so a caching mechanism is employed.
-.PP
-The
-.B iconvconfig
-program reads iconv module configuration files and writes
-a fast-loading gconv module configuration cache file.
-.PP
-In addition to the system provided gconv modules, the user can specify
-custom gconv module directories with the environment variable
-.BR GCONV_PATH .
-However, iconv module configuration caching is used only when
-the environment variable
-.B GCONV_PATH
-is not set.
-.SH OPTIONS
-.TP
-.B "\-\-nostdlib"
-Do not search the system default gconv directory,
-only the directories provided on the command line.
-.TP
-.BI \-o " outputfile" ", \-\-output=" outputfile
-Use
-.I outputfile
-for output instead of the system default cache location.
-.TP
-.BI \-\-prefix= pathname
-Set the prefix to be prepended to the system pathnames.
-See FILES, below.
-By default, the prefix is empty.
-Setting the prefix to
-.IR foo ,
-the gconv module configuration would be read from
-.I foo/usr/lib/gconv/gconv\-modules
-and the cache would be written to
-.IR foo/usr/lib/gconv/gconv\-modules.cache .
-.TP
-.BR \-? ", " \-\-help
-Print a usage summary and exit.
-.TP
-.B "\-\-usage"
-Print a short usage summary and exit.
-.TP
-.BR \-V ", " \-\-version
-Print the version number, license, and disclaimer of warranty for
-.BR iconv .
-.SH EXIT STATUS
-Zero on success, nonzero on errors.
-.SH FILES
-.TP
-.I /usr/lib/gconv
-Usual default gconv module path.
-.TP
-.I /usr/lib/gconv/gconv\-modules
-Usual system default gconv module configuration file.
-.TP
-.I /usr/lib/gconv/gconv\-modules.cache
-Usual system gconv module configuration cache.
-.PP
-Depending on the architecture,
-the above files may instead be located at directories with the path prefix
-.IR /usr/lib64 .
-.SH SEE ALSO
-.BR iconv (1),
-.BR iconv (3)
diff --git a/man8/intro.8 b/man8/intro.8
deleted file mode 100644
index ad6509a91..000000000
--- a/man8/intro.8
+++ /dev/null
@@ -1,29 +0,0 @@
-.\" Copyright (c) 1993 Michael Haardt (michael@moria.de),
-.\" Fri Apr 2 11:32:09 MET DST 1993
-.\" and Copyright (C) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified Sat Jul 24 17:35:48 1993 by Rik Faith (faith@cs.unc.edu)
-.\" 2007-10-23 mtk: minor rewrites, and added paragraph on exit status
-.\"
-.TH intro 8 (date) "Linux man-pages (unreleased)"
-.SH NAME
-intro \- introduction to administration and privileged commands
-.SH DESCRIPTION
-Section 8 of the manual describes commands
-which either can be or are used only by the superuser,
-like system-administration commands, daemons,
-and hardware-related commands.
-.PP
-As with the commands described in Section 1, the commands described
-in this section terminate with an exit status that indicates
-whether the command succeeded or failed.
-See
-.BR intro (1)
-for more information.
-.SH NOTES
-.SS Authors and copyright conditions
-Look at the header of the manual page source for the author(s) and copyright
-conditions.
-Note that these can be different from page to page!
diff --git a/man8/ld-linux.8 b/man8/ld-linux.8
deleted file mode 100644
index c57562024..000000000
--- a/man8/ld-linux.8
+++ /dev/null
@@ -1 +0,0 @@
-.so man8/ld.so.8
diff --git a/man8/ld-linux.so.8 b/man8/ld-linux.so.8
deleted file mode 100644
index c57562024..000000000
--- a/man8/ld-linux.so.8
+++ /dev/null
@@ -1 +0,0 @@
-.so man8/ld.so.8
diff --git a/man8/ld.so.8 b/man8/ld.so.8
deleted file mode 100644
index 1c9a13f56..000000000
--- a/man8/ld.so.8
+++ /dev/null
@@ -1,843 +0,0 @@
-.\" %%%LICENSE_START(PUBLIC_DOMAIN)
-.\" This is in the public domain
-.\" %%%LICENSE_END
-.\" Various parts:
-.\" Copyright (C) 2007-9, 2013, 2016 Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.TH ld.so 8 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ld.so, ld\-linux.so \- dynamic linker/loader
-.SH SYNOPSIS
-The dynamic linker can be run either indirectly by running some
-dynamically linked program or shared object
-(in which case no command-line options
-to the dynamic linker can be passed and, in the ELF case, the dynamic linker
-which is stored in the
-.B .interp
-section of the program is executed) or directly by running:
-.PP
-.I /lib/ld\-linux.so.*
-[OPTIONS] [PROGRAM [ARGUMENTS]]
-.SH DESCRIPTION
-The programs
-.B ld.so
-and
-.B ld\-linux.so*
-find and load the shared objects (shared libraries) needed by a program,
-prepare the program to run, and then run it.
-.PP
-Linux binaries require dynamic linking (linking at run time)
-unless the
-.B \-static
-option was given to
-.BR ld (1)
-during compilation.
-.PP
-The program
-.B ld.so
-handles a.out binaries, a binary format used long ago.
-The program
-.B ld\-linux.so*
-(\fI/lib/ld\-linux.so.1\fP for libc5, \fI/lib/ld\-linux.so.2\fP for glibc2)
-handles binaries that are in the more modern ELF format.
-Both programs have the same behavior, and use the same
-support files and programs
-.RB ( ldd (1),
-.BR ldconfig (8),
-and
-.IR /etc/ld.so.conf ).
-.PP
-When resolving shared object dependencies,
-the dynamic linker first inspects each dependency
-string to see if it contains a slash (this can occur if
-a shared object pathname containing slashes was specified at link time).
-If a slash is found, then the dependency string is interpreted as
-a (relative or absolute) pathname,
-and the shared object is loaded using that pathname.
-.PP
-If a shared object dependency does not contain a slash,
-then it is searched for in the following order:
-.IP (1) 5
-Using the directories specified in the
-DT_RPATH dynamic section attribute
-of the binary if present and DT_RUNPATH attribute does not exist.
-Use of DT_RPATH is deprecated.
-.IP (2)
-Using the environment variable
-.BR LD_LIBRARY_PATH ,
-unless the executable is being run in secure-execution mode (see below),
-in which case this variable is ignored.
-.IP (3)
-Using the directories specified in the
-DT_RUNPATH dynamic section attribute
-of the binary if present.
-Such directories are searched only to
-find those objects required by DT_NEEDED (direct dependencies) entries
-and do not apply to those objects' children,
-which must themselves have their own DT_RUNPATH entries.
-This is unlike DT_RPATH, which is applied
-to searches for all children in the dependency tree.
-.IP (4)
-From the cache file
-.IR /etc/ld.so.cache ,
-which contains a compiled list of candidate shared objects previously found
-in the augmented library path.
-If, however, the binary was linked with the
-.B \-z nodeflib
-linker option, shared objects in the default paths are skipped.
-Shared objects installed in hardware capability directories (see below)
-are preferred to other shared objects.
-.IP (5)
-In the default path
-.IR /lib ,
-and then
-.IR /usr/lib .
-(On some 64-bit architectures, the default paths for 64-bit shared objects are
-.IR /lib64 ,
-and then
-.IR /usr/lib64 .)
-If the binary was linked with the
-.B \-z nodeflib
-linker option, this step is skipped.
-.\"
-.SS Dynamic string tokens
-In several places, the dynamic linker expands dynamic string tokens:
-.IP \[bu] 3
-In the environment variables
-.BR LD_LIBRARY_PATH ,
-.BR LD_PRELOAD ,
-and
-.BR LD_AUDIT ,
-.IP \[bu]
-inside the values of the dynamic section tags
-.BR DT_NEEDED ,
-.BR DT_RPATH ,
-.BR DT_RUNPATH ,
-.BR DT_AUDIT ,
-and
-.B DT_DEPAUDIT
-of ELF binaries,
-.IP \[bu]
-in the arguments to the
-.B ld.so
-command line options
-.BR \-\-audit ,
-.BR \-\-library\-path ,
-and
-.B \-\-preload
-(see below), and
-.IP \[bu]
-in the filename arguments to the
-.BR dlopen (3)
-and
-.BR dlmopen (3)
-functions.
-.PP
-The substituted tokens are as follows:
-.TP
-.IR $ORIGIN " (or equivalently " ${ORIGIN} )
-This expands to
-the directory containing the program or shared object.
-Thus, an application located in
-.I somedir/app
-could be compiled with
-.IP
-.in +4n
-.EX
-gcc \-Wl,\-rpath,\[aq]$ORIGIN/../lib\[aq]
-.EE
-.in
-.IP
-so that it finds an associated shared object in
-.I somedir/lib
-no matter where
-.I somedir
-is located in the directory hierarchy.
-This facilitates the creation of "turn-key" applications that
-do not need to be installed into special directories,
-but can instead be unpacked into any directory
-and still find their own shared objects.
-.TP
-.IR $LIB " (or equivalently " ${LIB} )
-This expands to
-.I lib
-or
-.I lib64
-depending on the architecture
-(e.g., on x86-64, it expands to
-.I lib64
-and
-on x86-32, it expands to
-.IR lib ).
-.TP
-.IR $PLATFORM " (or equivalently " ${PLATFORM} )
-This expands to a string corresponding to the processor type
-of the host system (e.g., "x86_64").
-On some architectures, the Linux kernel doesn't provide a platform
-string to the dynamic linker.
-The value of this string is taken from the
-.B AT_PLATFORM
-value in the auxiliary vector (see
-.BR getauxval (3)).
-.\" To get an idea of the places that $PLATFORM would match,
-.\" look at the output of the following:
-.\"
-.\" mkdir /tmp/d
-.\" LD_LIBRARY_PATH=/tmp/d strace -e open /bin/date 2>&1 | grep /tmp/d
-.\"
-.\" ld.so lets names be abbreviated, so $O will work for $ORIGIN;
-.\" Don't do this!!
-.PP
-Note that the dynamic string tokens have to be quoted properly when
-set from a shell,
-to prevent their expansion as shell or environment variables.
-.SH OPTIONS
-.TP
-.BR \-\-argv0 " \fIstring\fP (since glibc 2.33)"
-Set
-.I argv[0]
-to the value
-.I string
-before running the program.
-.TP
-.BI \-\-audit " list"
-Use objects named in
-.I list
-as auditors.
-The objects in
-.I list
-are delimited by colons.
-.TP
-.B \-\-inhibit\-cache
-Do not use
-.IR /etc/ld.so.cache .
-.TP
-.BI \-\-library\-path " path"
-Use
-.I path
-instead of
-.B LD_LIBRARY_PATH
-environment variable setting (see below).
-The names
-.IR ORIGIN ,
-.IR LIB ,
-and
-.I PLATFORM
-are interpreted as for the
-.B LD_LIBRARY_PATH
-environment variable.
-.TP
-.BI \-\-inhibit\-rpath " list"
-Ignore RPATH and RUNPATH information in object names in
-.IR list .
-This option is ignored when running in secure-execution mode (see below).
-The objects in
-.I list
-are delimited by colons or spaces.
-.TP
-.B \-\-list
-List all dependencies and how they are resolved.
-.TP
-.BR \-\-list\-tunables " (since glibc 2.33)"
-Print the names and values of all tunables,
-along with the minimum and maximum allowed values.
-.TP
-.BR \-\-preload " \fIlist\fP (since glibc 2.30)"
-Preload the objects specified in
-.IR list .
-The objects in
-.I list
-are delimited by colons or spaces.
-The objects are preloaded as explained in the description of the
-.B LD_PRELOAD
-environment variable below.
-.IP
-By contrast with
-.BR LD_PRELOAD ,
-the
-.B \-\-preload
-option provides a way to perform preloading for a single executable
-without affecting preloading performed in any child process that executes
-a new program.
-.TP
-.B \-\-verify
-Verify that program is dynamically linked and this dynamic linker can handle
-it.
-.SH ENVIRONMENT
-Various environment variables influence the operation of the dynamic linker.
-.\"
-.SS Secure-execution mode
-For security reasons,
-if the dynamic linker determines that a binary should be
-run in secure-execution mode,
-the effects of some environment variables are voided or modified,
-and furthermore those environment variables are stripped from the environment,
-so that the program does not even see the definitions.
-Some of these environment variables affect the operation of
-the dynamic linker itself, and are described below.
-Other environment variables treated in this way include:
-.BR GCONV_PATH ,
-.BR GETCONF_DIR ,
-.BR HOSTALIASES ,
-.BR LOCALDOMAIN ,
-.BR LOCPATH ,
-.BR MALLOC_TRACE ,
-.BR NIS_PATH ,
-.BR NLSPATH ,
-.BR RESOLV_HOST_CONF ,
-.BR RES_OPTIONS ,
-.BR TMPDIR ,
-and
-.BR TZDIR .
-.PP
-A binary is executed in secure-execution mode if the
-.B AT_SECURE
-entry in the auxiliary vector (see
-.BR getauxval (3))
-has a nonzero value.
-This entry may have a nonzero value for various reasons, including:
-.IP \[bu] 3
-The process's real and effective user IDs differ,
-or the real and effective group IDs differ.
-This typically occurs as a result of executing
-a set-user-ID or set-group-ID program.
-.IP \[bu]
-A process with a non-root user ID executed a binary that
-conferred capabilities to the process.
-.IP \[bu]
-A nonzero value may have been set by a Linux Security Module.
-.\"
-.SS Environment variables
-Among the more important environment variables are the following:
-.TP
-.BR LD_ASSUME_KERNEL " (since glibc 2.2.3)"
-Each shared object can inform the dynamic linker of the minimum kernel ABI
-version that it requires.
-(This requirement is encoded in an ELF note section that is viewable via
-.I readelf\~\-n
-as a section labeled
-.BR NT_GNU_ABI_TAG .)
-At run time,
-the dynamic linker determines the ABI version of the running kernel and
-will reject loading shared objects that specify minimum ABI versions
-that exceed that ABI version.
-.IP
-.B LD_ASSUME_KERNEL
-can be used to
-cause the dynamic linker to assume that it is running on a system with
-a different kernel ABI version.
-For example, the following command line causes the
-dynamic linker to assume it is running on Linux 2.2.5 when loading
-the shared objects required by
-.IR myprog :
-.IP
-.in +4n
-.EX
-$ \fBLD_ASSUME_KERNEL=2.2.5 ./myprog\fP
-.EE
-.in
-.IP
-On systems that provide multiple versions of a shared object
-(in different directories in the search path) that have
-different minimum kernel ABI version requirements,
-.B LD_ASSUME_KERNEL
-can be used to select the version of the object that is used
-(dependent on the directory search order).
-.IP
-Historically, the most common use of the
-.B LD_ASSUME_KERNEL
-feature was to manually select the older
-LinuxThreads POSIX threads implementation on systems that provided both
-LinuxThreads and NPTL
-(which latter was typically the default on such systems);
-see
-.BR pthreads (7).
-.TP
-.BR LD_BIND_NOW " (since glibc 2.1.1)"
-If set to a nonempty string,
-causes the dynamic linker to resolve all symbols
-at program startup instead of deferring function call resolution to the point
-when they are first referenced.
-This is useful when using a debugger.
-.TP
-.B LD_LIBRARY_PATH
-A list of directories in which to search for
-ELF libraries at execution time.
-The items in the list are separated by either colons or semicolons,
-and there is no support for escaping either separator.
-A zero-length directory name indicates the current working directory.
-.IP
-This variable is ignored in secure-execution mode.
-.IP
-Within the pathnames specified in
-.BR LD_LIBRARY_PATH ,
-the dynamic linker expands the tokens
-.IR $ORIGIN ,
-.IR $LIB ,
-and
-.I $PLATFORM
-(or the versions using curly braces around the names)
-as described above in
-.IR "Dynamic string tokens" .
-Thus, for example,
-the following would cause a library to be searched for in either the
-.I lib
-or
-.I lib64
-subdirectory below the directory containing the program to be executed:
-.IP
-.in +4n
-.EX
-$ \fBLD_LIBRARY_PATH=\[aq]$ORIGIN/$LIB\[aq] prog\fP
-.EE
-.in
-.IP
-(Note the use of single quotes, which prevent expansion of
-.I $ORIGIN
-and
-.I $LIB
-as shell variables!)
-.TP
-.B LD_PRELOAD
-A list of additional, user-specified, ELF shared
-objects to be loaded before all others.
-This feature can be used to selectively override functions
-in other shared objects.
-.IP
-The items of the list can be separated by spaces or colons,
-and there is no support for escaping either separator.
-The objects are searched for using the rules given under DESCRIPTION.
-Objects are searched for and added to the link map in the left-to-right
-order specified in the list.
-.IP
-In secure-execution mode,
-preload pathnames containing slashes are ignored.
-Furthermore, shared objects are preloaded only
-from the standard search directories and only
-if they have set-user-ID mode bit enabled (which is not typical).
-.IP
-Within the names specified in the
-.B LD_PRELOAD
-list, the dynamic linker understands the tokens
-.IR $ORIGIN ,
-.IR $LIB ,
-and
-.I $PLATFORM
-(or the versions using curly braces around the names)
-as described above in
-.IR "Dynamic string tokens" .
-(See also the discussion of quoting under the description of
-.BR LD_LIBRARY_PATH .)
-.\" Tested with the following:
-.\"
-.\" LD_PRELOAD='$LIB/libmod.so' LD_LIBRARY_PATH=. ./prog
-.\"
-.\" which will preload the libmod.so in 'lib' or 'lib64', using it
-.\" in preference to the version in '.'.
-.IP
-There are various methods of specifying libraries to be preloaded,
-and these are handled in the following order:
-.RS
-.IP (1) 5
-The
-.B LD_PRELOAD
-environment variable.
-.IP (2)
-The
-.B \-\-preload
-command-line option when invoking the dynamic linker directly.
-.IP (3)
-The
-.I /etc/ld.so.preload
-file (described below).
-.RE
-.TP
-.B LD_TRACE_LOADED_OBJECTS
-If set (to any value), causes the program to list its dynamic
-dependencies, as if run by
-.BR ldd (1),
-instead of running normally.
-.PP
-Then there are lots of more or less obscure variables,
-many obsolete or only for internal use.
-.TP
-.BR LD_AUDIT " (since glibc 2.4)"
-A list of user-specified, ELF shared objects
-to be loaded before all others in a separate linker namespace
-(i.e., one that does not intrude upon the normal symbol bindings that
-would occur in the process)
-These objects can be used to audit the operation of the dynamic linker.
-The items in the list are colon-separated,
-and there is no support for escaping the separator.
-.IP
-.B LD_AUDIT
-is ignored in secure-execution mode.
-.IP
-The dynamic linker will notify the audit
-shared objects at so-called auditing checkpoints\[em]for example,
-loading a new shared object, resolving a symbol,
-or calling a symbol from another shared object\[em]by
-calling an appropriate function within the audit shared object.
-For details, see
-.BR rtld\-audit (7).
-The auditing interface is largely compatible with that provided on Solaris,
-as described in its
-.IR "Linker and Libraries Guide" ,
-in the chapter
-.IR "Runtime Linker Auditing Interface" .
-.IP
-Within the names specified in the
-.B LD_AUDIT
-list, the dynamic linker understands the tokens
-.IR $ORIGIN ,
-.IR $LIB ,
-and
-.I $PLATFORM
-(or the versions using curly braces around the names)
-as described above in
-.IR "Dynamic string tokens" .
-(See also the discussion of quoting under the description of
-.BR LD_LIBRARY_PATH .)
-.IP
-Since glibc 2.13,
-.\" commit 8e9f92e9d5d7737afdacf79b76d98c4c42980508
-in secure-execution mode,
-names in the audit list that contain slashes are ignored,
-and only shared objects in the standard search directories that
-have the set-user-ID mode bit enabled are loaded.
-.TP
-.BR LD_BIND_NOT " (since glibc 2.1.95)"
-If this environment variable is set to a nonempty string,
-do not update the GOT (global offset table) and PLT (procedure linkage table)
-after resolving a function symbol.
-By combining the use of this variable with
-.B LD_DEBUG
-(with the categories
-.I bindings
-and
-.IR symbols ),
-one can observe all run-time function bindings.
-.TP
-.BR LD_DEBUG " (since glibc 2.1)"
-Output verbose debugging information about operation of the dynamic linker.
-The content of this variable is one of more of the following categories,
-separated by colons, commas, or (if the value is quoted) spaces:
-.RS
-.TP 12
-.I help
-Specifying
-.I help
-in the value of this variable does not run the specified program,
-and displays a help message about which categories can be specified in this
-environment variable.
-.TP
-.I all
-Print all debugging information (except
-.I statistics
-and
-.IR unused ;
-see below).
-.TP
-.I bindings
-Display information about which definition each symbol is bound to.
-.TP
-.I files
-Display progress for input file.
-.TP
-.I libs
-Display library search paths.
-.TP
-.I reloc
-Display relocation processing.
-.TP
-.I scopes
-Display scope information.
-.TP
-.I statistics
-Display relocation statistics.
-.TP
-.I symbols
-Display search paths for each symbol look-up.
-.TP
-.I unused
-Determine unused DSOs.
-.TP
-.I versions
-Display version dependencies.
-.RE
-.IP
-Since glibc 2.3.4,
-.B LD_DEBUG
-is ignored in secure-execution mode, unless the file
-.I /etc/suid\-debug
-exists (the content of the file is irrelevant).
-.TP
-.BR LD_DEBUG_OUTPUT " (since glibc 2.1)"
-By default,
-.B LD_DEBUG
-output is written to standard error.
-If
-.B LD_DEBUG_OUTPUT
-is defined, then output is written to the pathname specified by its value,
-with the suffix "." (dot) followed by the process ID appended to the pathname.
-.IP
-.B LD_DEBUG_OUTPUT
-is ignored in secure-execution mode.
-.TP
-.BR LD_DYNAMIC_WEAK " (since glibc 2.1.91)"
-By default, when searching shared libraries to resolve a symbol reference,
-the dynamic linker will resolve to the first definition it finds.
-.IP
-Old glibc versions (before glibc 2.2), provided a different behavior:
-if the linker found a symbol that was weak,
-it would remember that symbol and
-keep searching in the remaining shared libraries.
-If it subsequently found a strong definition of the same symbol,
-then it would instead use that definition.
-(If no further symbol was found,
-then the dynamic linker would use the weak symbol that it initially found.)
-.IP
-The old glibc behavior was nonstandard.
-(Standard practice is that the distinction between
-weak and strong symbols should have effect only at static link time.)
-In glibc 2.2,
-.\" More precisely 2.1.92
-.\" See weak handling
-.\" https://www.sourceware.org/ml/libc-hacker/2000-06/msg00029.html
-.\" To: GNU libc hacker <libc-hacker at sourceware dot cygnus dot com>
-.\" Subject: weak handling
-.\" From: Ulrich Drepper <drepper at redhat dot com>
-.\" Date: 07 Jun 2000 20:08:12 -0700
-.\" Reply-To: drepper at cygnus dot com (Ulrich Drepper)
-the dynamic linker was modified to provide the current behavior
-(which was the behavior that was provided by most other implementations
-at that time).
-.IP
-Defining the
-.B LD_DYNAMIC_WEAK
-environment variable (with any value) provides
-the old (nonstandard) glibc behavior,
-whereby a weak symbol in one shared library may be overridden by
-a strong symbol subsequently discovered in another shared library.
-(Note that even when this variable is set,
-a strong symbol in a shared library will not override
-a weak definition of the same symbol in the main program.)
-.IP
-Since glibc 2.3.4,
-.B LD_DYNAMIC_WEAK
-is ignored in secure-execution mode.
-.TP
-.BR LD_HWCAP_MASK " (since glibc 2.1)"
-Mask for hardware capabilities.
-.TP
-.BR LD_ORIGIN_PATH " (since glibc 2.1)"
-Path where the binary is found.
-.\" Used only if $ORIGIN can't be determined by normal means
-.\" (from the origin path saved at load time, or from /proc/self/exe)?
-.IP
-Since glibc 2.4,
-.B LD_ORIGIN_PATH
-is ignored in secure-execution mode.
-.TP
-.BR LD_POINTER_GUARD " (from glibc 2.4 to glibc 2.22)"
-Set to 0 to disable pointer guarding.
-Any other value enables pointer guarding, which is also the default.
-Pointer guarding is a security mechanism whereby some pointers to code
-stored in writable program memory (return addresses saved by
-.BR setjmp (3)
-or function pointers used by various glibc internals) are mangled
-semi-randomly to make it more difficult for an attacker to hijack
-the pointers for use in the event of a buffer overrun or
-stack-smashing attack.
-Since glibc 2.23,
-.\" commit a014cecd82b71b70a6a843e250e06b541ad524f7
-.B LD_POINTER_GUARD
-can no longer be used to disable pointer guarding,
-which is now always enabled.
-.TP
-.BR LD_PROFILE " (since glibc 2.1)"
-The name of a (single) shared object to be profiled,
-specified either as a pathname or a soname.
-Profiling output is appended to the file whose name is:
-"\fI$LD_PROFILE_OUTPUT\fP/\fI$LD_PROFILE\fP.profile".
-.IP
-Since glibc 2.2.5,
-.B LD_PROFILE
-is ignored in secure-execution mode.
-.TP
-.BR LD_PROFILE_OUTPUT " (since glibc 2.1)"
-Directory where
-.B LD_PROFILE
-output should be written.
-If this variable is not defined, or is defined as an empty string,
-then the default is
-.IR /var/tmp .
-.IP
-.B LD_PROFILE_OUTPUT
-is ignored in secure-execution mode; instead
-.I /var/profile
-is always used.
-(This detail is relevant only before glibc 2.2.5,
-since in later glibc versions,
-.B LD_PROFILE
-is also ignored in secure-execution mode.)
-.TP
-.BR LD_SHOW_AUXV " (since glibc 2.1)"
-If this environment variable is defined (with any value),
-show the auxiliary array passed up from the kernel (see also
-.BR getauxval (3)).
-.IP
-Since glibc 2.3.4,
-.B LD_SHOW_AUXV
-is ignored in secure-execution mode.
-.TP
-.BR LD_TRACE_PRELINKING " (since glibc 2.4)"
-If this environment variable is defined,
-trace prelinking of the object whose name is assigned to
-this environment variable.
-(Use
-.BR ldd (1)
-to get a list of the objects that might be traced.)
-If the object name is not recognized,
-.\" (This is what seems to happen, from experimenting)
-then all prelinking activity is traced.
-.TP
-.BR LD_USE_LOAD_BIAS " (since glibc 2.3.3)"
-.\" http://sources.redhat.com/ml/libc-hacker/2003-11/msg00127.html
-.\" Subject: [PATCH] Support LD_USE_LOAD_BIAS
-.\" Jakub Jelinek
-By default (i.e., if this variable is not defined),
-executables and prelinked
-shared objects will honor base addresses of their dependent shared objects
-and (nonprelinked) position-independent executables (PIEs)
-and other shared objects will not honor them.
-If
-.B LD_USE_LOAD_BIAS
-is defined with the value 1, both executables and PIEs
-will honor the base addresses.
-If
-.B LD_USE_LOAD_BIAS
-is defined with the value 0,
-neither executables nor PIEs will honor the base addresses.
-.IP
-Since glibc 2.3.3, this variable is ignored in secure-execution mode.
-.TP
-.BR LD_VERBOSE " (since glibc 2.1)"
-If set to a nonempty string,
-output symbol versioning information about the
-program if the
-.B LD_TRACE_LOADED_OBJECTS
-environment variable has been set.
-.TP
-.BR LD_WARN " (since glibc 2.1.3)"
-If set to a nonempty string, warn about unresolved symbols.
-.TP
-.BR LD_PREFER_MAP_32BIT_EXEC " (x86-64 only; since glibc 2.23)"
-According to the Intel Silvermont software optimization guide, for 64-bit
-applications, branch prediction performance can be negatively impacted
-when the target of a branch is more than 4\ GB away from the branch.
-If this environment variable is set (to any value),
-the dynamic linker
-will first try to map executable pages using the
-.BR mmap (2)
-.B MAP_32BIT
-flag, and fall back to mapping without that flag if that attempt fails.
-NB: MAP_32BIT will map to the low 2\ GB (not 4\ GB) of the address space.
-.IP
-Because
-.B MAP_32BIT
-reduces the address range available for address space layout
-randomization (ASLR),
-.B LD_PREFER_MAP_32BIT_EXEC
-is always disabled in secure-execution mode.
-.SH FILES
-.TP
-.I /lib/ld.so
-a.out dynamic linker/loader
-.TP
-.IR /lib/ld\-linux.so. { 1 , 2 }
-ELF dynamic linker/loader
-.TP
-.I /etc/ld.so.cache
-File containing a compiled list of directories in which to search for
-shared objects and an ordered list of candidate shared objects.
-See
-.BR ldconfig (8).
-.TP
-.I /etc/ld.so.preload
-File containing a whitespace-separated list of ELF shared objects to
-be loaded before the program.
-See the discussion of
-.B LD_PRELOAD
-above.
-If both
-.B LD_PRELOAD
-and
-.I /etc/ld.so.preload
-are employed, the libraries specified by
-.B LD_PRELOAD
-are preloaded first.
-.I /etc/ld.so.preload
-has a system-wide effect,
-causing the specified libraries to be preloaded for
-all programs that are executed on the system.
-(This is usually undesirable,
-and is typically employed only as an emergency remedy, for example,
-as a temporary workaround to a library misconfiguration issue.)
-.TP
-.I lib*.so*
-shared objects
-.SH NOTES
-.SS Hardware capabilities
-Some shared objects are compiled using hardware-specific instructions which do
-not exist on every CPU.
-Such objects should be installed in directories whose names define the
-required hardware capabilities, such as
-.IR /usr/lib/sse2/ .
-The dynamic linker checks these directories against the hardware of the
-machine and selects the most suitable version of a given shared object.
-Hardware capability directories can be cascaded to combine CPU features.
-The list of supported hardware capability names depends on the CPU.
-The following names are currently recognized:
-.\" Presumably, this info comes from sysdeps/i386/dl-procinfo.c and
-.\" similar files
-.TP
-.B Alpha
-ev4, ev5, ev56, ev6, ev67
-.TP
-.B MIPS
-loongson2e, loongson2f, octeon, octeon2
-.TP
-.B PowerPC
-4xxmac, altivec, arch_2_05, arch_2_06, booke, cellbe, dfp, efpdouble, efpsingle,
-fpu, ic_snoop, mmu, notb, pa6t, power4, power5, power5+, power6x, ppc32, ppc601,
-ppc64, smt, spe, ucache, vsx
-.TP
-.B SPARC
-flush, muldiv, stbar, swap, ultra3, v9, v9v, v9v2
-.TP
-.B s390
-dfp, eimm, esan3, etf3enh, g5, highgprs, hpage, ldisp, msa, stfle,
-z900, z990, z9-109, z10, zarch
-.TP
-.B x86 (32-bit only)
-acpi, apic, clflush, cmov, cx8, dts, fxsr, ht, i386, i486, i586, i686, mca, mmx,
-mtrr, pat, pbe, pge, pn, pse36, sep, ss, sse, sse2, tm
-.SH SEE ALSO
-.BR ld (1),
-.BR ldd (1),
-.BR pldd (1),
-.BR sprof (1),
-.BR dlopen (3),
-.BR getauxval (3),
-.BR elf (5),
-.BR capabilities (7),
-.BR rtld\-audit (7),
-.BR ldconfig (8),
-.BR sln (8)
-.\" .SH AUTHORS
-.\" ld.so: David Engel, Eric Youngdale, Peter MacDonald, Hongjiu Lu, Linus
-.\" Torvalds, Lars Wirzenius and Mitch D'Souza
-.\" ld\-linux.so: Roland McGrath, Ulrich Drepper and others.
-.\"
-.\" In the above, (libc5) stands for David Engel's ld.so/ld\-linux.so.
diff --git a/man8/ldconfig.8 b/man8/ldconfig.8
deleted file mode 100644
index 2f974ad7d..000000000
--- a/man8/ldconfig.8
+++ /dev/null
@@ -1,204 +0,0 @@
-.\" Copyright 1999 SuSE GmbH Nuernberg, Germany
-.\" Author: Thorsten Kukuk <kukuk@suse.de>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" Modified, 6 May 2002, Michael Kerrisk, <mtk.manpages@gmail.com>
-.\" Change listed order of /usr/lib and /lib
-.TH ldconfig 8 (date) "Linux man-pages (unreleased)"
-.SH NAME
-ldconfig \- configure dynamic linker run-time bindings
-.SH SYNOPSIS
-.SY /sbin/ldconfig
-.\" TODO?: -c, --format, -i, --ignore-aux-cache, --print-cache,
-.\" --verbose, -V, --version, -?, --help, --usage
-.RB [ \-nNvVX ]
-.RB [ \-C\~\c
-.IR cache ]
-.RB [ \-f\~\c
-.IR conf ]
-.RB [ \-r\~\c
-.IR root ]
-.IR directory \~.\|.\|.
-.YS
-.SY /sbin/ldconfig
-.B \-l
-.RB [ \-v ]
-.IR library \~.\|.\|.
-.YS
-.SY /sbin/ldconfig
-.B \-p
-.YS
-.SH DESCRIPTION
-.B \%ldconfig
-creates the necessary links and cache to the most recent shared
-libraries found in the directories specified on the command line,
-in the file
-.IR /etc/ld.so.conf ,
-and in the trusted directories,
-.I /lib
-and
-.IR /usr/lib .
-On some 64-bit architectures such as x86-64,
-.I /lib
-and
-.I /usr/lib
-are the trusted directories for 32-bit libraries,
-while
-.I /lib64
-and
-.I /usr/lib64
-are used for 64-bit libraries.
-.PP
-The cache is used by the run-time linker,
-.I ld.so
-or
-.IR ld\-linux.so .
-.B \%ldconfig
-checks the header and filenames of the libraries it encounters when
-determining which versions should have their links updated.
-.\" Support for libc4 and libc5 dropped in
-.\" 8ee878592c4a642937152c8308b8faef86bcfc40 (2022-07-14) as "obsolete
-.\" for over twenty years".
-.B \%ldconfig
-should normally be run by the superuser as it may require write
-permission on some root owned directories and files.
-.PP
-.B \%ldconfig
-will look only at files that are named
-.I lib*.so*
-(for regular shared objects) or
-.I ld\-*.so*
-(for the dynamic loader itself).
-Other files will be ignored.
-Also,
-.B \%ldconfig
-expects a certain pattern to how the symbolic links are set up,
-like this example,
-where the middle file
-.RB ( libfoo.so.1
-here) is the SONAME for the library:
-.PP
-.in +4n
-.EX
-libfoo.so \-> libfoo.so.1 \-> libfoo.so.1.12
-.EE
-.in
-.PP
-Failure to follow this pattern may result in compatibility issues
-after an upgrade.
-.SH OPTIONS
-.TP
-.BI \-c\~ fmt
-.TQ
-.BI \-\-format= fmt
-(Since glibc 2.2)
-.\" commit 45eca4d141c047950db48c69c8941163d0a61fcd
-Use cache format
-.IR fmt ,
-which is one of
-.BR old ,
-.BR new ,
-or
-.BR \%compat .
-Since glibc 2.32,
-the default is
-.BR new .
-.\" commit cad64f778aced84efdaa04ae64f8737b86f063ab
-Before that,
-it was
-.BR \%compat .
-.TP
-.BI \-C\~ cache
-Use
-.I cache
-instead of
-.IR /etc/ld.so.cache .
-.TP
-.BI \-f\~ conf
-Use
-.I conf
-instead of
-.IR /etc/ld.so.conf .
-.TP
-.B \-i
-.TQ
-.B \-\-ignore\-aux\-cache
-(Since glibc 2.7)
-.\" commit 27d9ffda17df4d2388687afd12897774fde39bcc
-Ignore auxiliary cache file.
-.TP
-.B \-l
-(Since glibc 2.2)
-Interpret each operand as a library name and configure its links.
-Intended for use only by experts.
-.TP
-.B \-n
-Process only the directories specified on the command line;
-don't process the trusted directories,
-nor those specified in
-.IR /etc/ld.so.conf .
-Implies
-.BR \-N .
-.TP
-.B \-N
-Don't rebuild the cache.
-Unless
-.B \-X
-is also specified,
-links are still updated.
-.TP
-.B \-p
-.TQ
-.B \-\-print\-cache
-Print the lists of directories and candidate libraries stored in
-the current cache.
-.TP
-.BI \-r\~ root
-Change to and use
-.I root
-as the root directory.
-.TP
-.B \-v
-.TQ
-.B \-\-verbose
-Verbose mode.
-Print current version number,
-the name of each directory as it is scanned,
-and any links that are created.
-Overrides quiet mode.
-.TP
-.B \-V
-.TQ
-.B \-\-version
-Print program version.
-.TP
-.B \-X
-Don't update links.
-Unless
-.B \-N
-is also specified,
-the cache is still rebuilt.
-.SH FILES
-.\" FIXME Since glibc-2.3.4, "include" directives are supported in ld.so.conf
-.\"
-.\" FIXME Since glibc-2.4, "hwcap" directives are supported in ld.so.conf
-.PD 0
-.TP
-.I /lib/ld.so
-is the run-time linker/loader.
-.TP
-.I /etc/ld.so.conf
-contains a list of directories,
-one per line,
-in which to search for libraries.
-.TP
-.I /etc/ld.so.cache
-contains an ordered list of libraries found in the directories
-specified in
-.IR /etc/ld.so.conf ,
-as well as those found in the trusted directories.
-.PD
-.SH SEE ALSO
-.BR ldd (1),
-.BR ld.so (8)
diff --git a/man8/nscd.8 b/man8/nscd.8
deleted file mode 100644
index 557d35a4e..000000000
--- a/man8/nscd.8
+++ /dev/null
@@ -1,84 +0,0 @@
-.\" Copyright 1999 SuSE GmbH Nuernberg, Germany
-.\" Author: Thorsten Kukuk <kukuk@suse.de>
-.\"
-.\" SPDX-License-Identifier: GPL-2.0-or-later
-.\"
-.\" 2008-12-05 Petr Baudis <pasky@suse.cz>
-.\" Rewrite the NOTES section to reflect modern reality
-.\"
-.TH nscd 8 (date) "Linux man-pages (unreleased)"
-.SH NAME
-nscd \- name service cache daemon
-.SH DESCRIPTION
-.B nscd
-is a daemon that provides a cache for the most common name service
-requests.
-The default configuration file,
-.IR /etc/nscd.conf ,
-determines the behavior of the cache daemon.
-See
-.BR nscd.conf (5).
-.PP
-.B nscd
-provides caching for accesses of the
-.BR passwd (5),
-.BR group (5),
-.BR hosts (5)
-.BR services (5)
-and
-.I netgroup
-databases through standard libc interfaces, such as
-.BR getpwnam (3),
-.BR getpwuid (3),
-.BR getgrnam (3),
-.BR getgrgid (3),
-.BR gethostbyname (3),
-and others.
-.PP
-There are two caches for each database:
-a positive one for items found, and a negative one
-for items not found.
-Each cache has a separate TTL (time-to-live)
-period for its data.
-Note that the shadow file is specifically not cached.
-.BR getspnam (3)
-calls remain uncached as a result.
-.SH OPTIONS
-.TP
-.B "\-\-help"
-will give you a list with all options and what they do.
-.SH NOTES
-The daemon will try to watch for changes in configuration files
-appropriate for each database (e.g.,
-.I /etc/passwd
-for the
-.I passwd
-database or
-.I /etc/hosts
-and
-.I /etc/resolv.conf
-for the
-.I hosts
-database), and flush the cache when these are changed.
-However, this will happen only after a short delay (unless the
-.BR inotify (7)
-mechanism is available and glibc 2.9 or later is available),
-and this auto-detection does not cover configuration files
-required by nonstandard NSS modules, if any are specified in
-.IR /etc/nsswitch.conf .
-In that case, you need to run the following command
-after changing the configuration file of the database so that
-.B nscd
-invalidates its cache:
-.PP
-.in +4n
-.EX
-$ \fBnscd \-i\fP \fI<database>\fP
-.EE
-.in
-.SH SEE ALSO
-.BR nscd.conf (5),
-.BR nsswitch.conf (5)
-.\" .SH AUTHOR
-.\" .B nscd
-.\" was written by Thorsten Kukuk and Ulrich Drepper.
diff --git a/man8/sln.8 b/man8/sln.8
deleted file mode 100644
index 448d0bf07..000000000
--- a/man8/sln.8
+++ /dev/null
@@ -1,44 +0,0 @@
-.\" Copyright (c) 2013 by Michael Kerrisk <mtk.manpages@gmail.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.TH sln 8 (date) "Linux man-pages (unreleased)"
-.SH NAME
-sln \- create symbolic links
-.SH SYNOPSIS
-.nf
-.BI sln " source dest"
-.BI sln " filelist"
-.fi
-.SH DESCRIPTION
-The
-.B sln
-program creates symbolic links.
-Unlike the
-.BR ln (1)
-program, it is statically linked.
-This means that if for some reason the dynamic linker is not working,
-.B sln
-can be used to make symbolic links to dynamic libraries.
-.PP
-The command line has two forms.
-In the first form, it creates
-.I dest
-as a new symbolic link to
-.IR source .
-.PP
-In the second form,
-.I filelist
-is a list of space-separated pathname pairs,
-and the effect is as if
-.B sln
-was executed once for each line of the file,
-with the two pathnames as the arguments.
-.PP
-The
-.B sln
-program supports no command-line options.
-.SH SEE ALSO
-.BR ln (1),
-.BR ld.so (8),
-.BR ldconfig (8)
diff --git a/man8/tzselect.8 b/man8/tzselect.8
deleted file mode 100644
index 4578090f9..000000000
--- a/man8/tzselect.8
+++ /dev/null
@@ -1,125 +0,0 @@
-.\" This file is in the public domain, so clarified as of
-.\" 2009-05-17 by Arthur David Olson.
-.TH tzselect 8 "" "Time Zone Database"
-.SH NAME
-tzselect \- select a timezone
-.SH SYNOPSIS
-.ie \n(.g .ds - \f(CR-\fP
-.el .ds - \-
-.ds d " degrees
-.ds m " minutes
-.ds s " seconds
-.ds _ " \&
-.if t \{\
-. if \n(.g .if c \(de .if c \(fm .if c \(sd \{\
-. ds d \(de
-. ds m \(fm
-. ds s \(sd
-. ds _ \|
-. \}
-.\}
-.B tzselect
-[
-.B \*-c
-.I coord
-] [
-.B \*-n
-.I limit
-] [
-.B \*-\*-help
-] [
-.B \*-\*-version
-]
-.SH DESCRIPTION
-The
-.B tzselect
-program asks the user for information about the current location,
-and outputs the resulting timezone to standard output.
-The output is suitable as a value for the TZ environment variable.
-.PP
-All interaction with the user is done via standard input and standard error.
-.SH OPTIONS
-.TP
-.BI "\*-c " coord
-Instead of asking for continent and then country and then city,
-ask for selection from time zones whose largest cities
-are closest to the location with geographical coordinates
-.I coord.
-Use ISO 6709 notation for
-.I coord,
-that is, a latitude immediately followed by a longitude. The latitude
-and longitude should be signed integers followed by an optional
-decimal point and fraction: positive numbers represent north and east,
-negative south and west. Latitudes with two and longitudes with three
-integer digits are treated as degrees; latitudes with four or six and
-longitudes with five or seven integer digits are treated as
-.I "DDMM, DDDMM, DDMMSS,"
-or
-.I DDDMMSS
-representing
-.I DD
-or
-.I DDD
-degrees,
-.I MM
-minutes,
-and zero or
-.I SS
-seconds, with any trailing fractions represent fractional minutes or
-(if
-.I SS
-is present) seconds. The decimal point is that of the current locale.
-For example, in the (default) C locale,
-.B "\*-c\ +40.689\*-074.045"
-specifies 40.689\*d\*_N, 74.045\*d\*_W,
-.B "\*-c\ +4041.4\*-07402.7"
-specifies 40\*d\*_41.4\*m\*_N, 74\*d\*_2.7\*m\*_W, and
-.B "\*-c\ +404121\*-0740240"
-specifies 40\*d\*_41\*m\*_21\*s\*_N, 74\*d\*_2\*m\*_40\*s\*_W.
-If
-.I coord
-is not one of the documented forms, the resulting behavior is unspecified.
-.TP
-.BI "\*-n " limit
-When
-.B \*-c
-is used, display the closest
-.I limit
-locations (default 10).
-.TP
-.B "\*-\*-help"
-Output help information and exit.
-.TP
-.B "\*-\*-version"
-Output version information and exit.
-.SH "ENVIRONMENT VARIABLES"
-.TP
-\f3AWK\fP
-Name of a Posix-compliant
-.B awk
-program (default:
-.BR awk ).
-.TP
-\f3TZDIR\fP
-Name of the directory containing timezone data files (default:
-.BR /usr/share/zoneinfo ).
-.SH FILES
-.TP
-\f2TZDIR\fP\f3/iso3166.tab\fP
-Table of ISO 3166 2-letter country codes and country names.
-.TP
-\f2TZDIR\fP\f3/zone1970.tab\fP
-Table of country codes, latitude and longitude, timezones, and
-descriptive comments.
-.TP
-\f2TZDIR\fP\f3/\fP\f2TZ\fP
-Timezone data file for timezone \f2TZ\fP.
-.SH "EXIT STATUS"
-The exit status is zero if a timezone was successfully obtained from the user,
-nonzero otherwise.
-.SH "SEE ALSO"
-newctime(3), tzfile(5), zdump(8), zic(8)
-.SH NOTES
-Applications should not assume that
-.BR tzselect 's
-output matches the user's political preferences.
diff --git a/man8/zdump.8 b/man8/zdump.8
deleted file mode 100644
index f77c0c798..000000000
--- a/man8/zdump.8
+++ /dev/null
@@ -1,231 +0,0 @@
-.\" This file is in the public domain, so clarified as of
-.\" 2009-05-17 by Arthur David Olson.
-.TH zdump 8 "" "Time Zone Database"
-.SH NAME
-zdump \- timezone dumper
-.SH SYNOPSIS
-.B zdump
-[
-.I option
-\&... ] [
-.I timezone
-\&... ]
-.SH DESCRIPTION
-.ie '\(lq'' .ds lq \&"\"
-.el .ds lq \(lq\"
-.ie '\(rq'' .ds rq \&"\"
-.el .ds rq \(rq\"
-.de q
-\\$3\*(lq\\$1\*(rq\\$2
-..
-.ie \n(.g .ds - \f(CR-\fP
-.el .ds - \-
-The
-.B zdump
-program prints the current time in each
-.I timezone
-named on the command line.
-.SH OPTIONS
-.TP
-.B \*-\*-version
-Output version information and exit.
-.TP
-.B \*-\*-help
-Output short usage message and exit.
-.TP
-.B \*-i
-Output a description of time intervals. For each
-.I timezone
-on the command line, output an interval-format description of the
-timezone. See
-.q "INTERVAL FORMAT"
-below.
-.TP
-.B \*-v
-Output a verbose description of time intervals.
-For each
-.I timezone
-on the command line,
-print the times at the two extreme time values,
-the times (if present) at and just beyond the boundaries of years that
-.BR localtime (3)
-and
-.BR gmtime (3)
-can represent, and
-the times both one second before and exactly at
-each detected time discontinuity.
-Each line is followed by
-.BI isdst= D
-where
-.I D
-is positive, zero, or negative depending on whether
-the given time is daylight saving time, standard time,
-or an unknown time type, respectively.
-Each line is also followed by
-.BI gmtoff= N
-if the given local time is known to be
-.I N
-seconds east of Greenwich.
-.TP
-.B \*-V
-Like
-.BR \*-v ,
-except omit output concerning extreme time and year values.
-This generates output that is easier to compare to that of
-implementations with different time representations.
-.TP
-.BI "\*-c " \fR[\fIloyear , \fR]\fIhiyear
-Cut off interval output at the given year(s).
-Cutoff times are computed using the proleptic Gregorian calendar with year 0
-and with Universal Time (UT) ignoring leap seconds.
-Cutoffs are at the start of each year, where the lower-bound
-timestamp is inclusive and the upper is exclusive; for example,
-.B "\*-c 1970,2070"
-selects transitions on or after 1970-01-01 00:00:00 UTC
-and before 2070-01-01 00:00:00 UTC.
-The default cutoff is
-.BR \*-500,2500 .
-.TP
-.BI "\*-t " \fR[\fIlotime , \fR]\fIhitime
-Cut off interval output at the given time(s),
-given in decimal seconds since 1970-01-01 00:00:00
-Coordinated Universal Time (UTC).
-The
-.I timezone
-determines whether the count includes leap seconds.
-As with
-.BR \*-c ,
-the cutoff's lower bound is inclusive and its upper bound is exclusive.
-.SH "INTERVAL FORMAT"
-The interval format is a compact text representation that is intended
-to be both human- and machine-readable. It consists of an empty line,
-then a line
-.q "TZ=\fIstring\fP"
-where
-.I string
-is a double-quoted string giving the timezone, a second line
-.q "\*- \*- \fIinterval\fP"
-describing the time interval before the first transition if any, and
-zero or more following lines
-.q "\fIdate time interval\fP",
-one line for each transition time and following interval. Fields are
-separated by single tabs.
-.PP
-Dates are in
-.IR yyyy - mm - dd
-format and times are in 24-hour
-.IR hh : mm : ss
-format where
-.IR hh <24.
-Times are in local time immediately after the transition. A
-time interval description consists of a UT offset in signed
-.RI \(+- hhmmss
-format, a time zone abbreviation, and an isdst flag. An abbreviation
-that equals the UT offset is omitted; other abbreviations are
-double-quoted strings unless they consist of one or more alphabetic
-characters. An isdst flag is omitted for standard time, and otherwise
-is a decimal integer that is unsigned and positive (typically 1) for
-daylight saving time and negative for unknown.
-.PP
-In times and in UT offsets with absolute value less than 100 hours,
-the seconds are omitted if they are zero, and
-the minutes are also omitted if they are also zero. Positive UT
-offsets are east of Greenwich. The UT offset \*-00 denotes a UT
-placeholder in areas where the actual offset is unspecified; by
-convention, this occurs when the UT offset is zero and the time zone
-abbreviation begins with
-.q "\*-"
-or is
-.q "zzz".
-.PP
-In double-quoted strings, escape sequences represent unusual
-characters. The escape sequences are \es for space, and \e", \e\e,
-\ef, \en, \er, \et, and \ev with their usual meaning in the C
-programming language. E.g., the double-quoted string
-\*(lq"CET\es\e"\e\e"\*(rq represents the character sequence \*(lqCET
-"\e\*(rq.\""
-.PP
-.ne 9
-Here is an example of the output, with the leading empty line omitted.
-(This example is shown with tab stops set far enough apart so that the
-tabbed columns line up.)
-.nf
-.sp
-.if \n(.g .ft CR
-.if t .in +.5i
-.if n .in +2
-.nr w \w'1896-01-13 'u+\n(.i
-.ta \w'1896-01-13 'u +\w'12:01:26 'u +\w'-103126 'u +\w'HWT 'u
-TZ="Pacific/Honolulu"
-- - -103126 LMT
-1896-01-13 12:01:26 -1030 HST
-1933-04-30 03 -0930 HDT 1
-1933-05-21 11 -1030 HST
-1942-02-09 03 -0930 HWT 1
-1945-08-14 13:30 -0930 HPT 1
-1945-09-30 01 -1030 HST
-1947-06-08 02:30 -10 HST
-.in
-.if \n(.g .ft
-.sp
-.fi
-Here, local time begins 10 hours, 31 minutes and 26 seconds west of
-UT, and is a standard time abbreviated LMT. Immediately after the
-first transition, the date is 1896-01-13 and the time is 12:01:26, and
-the following time interval is 10.5 hours west of UT, a standard time
-abbreviated HST. Immediately after the second transition, the date is
-1933-04-30 and the time is 03:00:00 and the following time interval is
-9.5 hours west of UT, is abbreviated HDT, and is daylight saving time.
-Immediately after the last transition the date is 1947-06-08 and the
-time is 02:30:00, and the following time interval is 10 hours west of
-UT, a standard time abbreviated HST.
-.PP
-.ne 10
-Here are excerpts from another example:
-.nf
-.sp
-.if \n(.g .ft CR
-.if t .in +.5i
-.if n .in +2
-TZ="Europe/Astrakhan"
-- - +031212 LMT
-1924-04-30 23:47:48 +03
-1930-06-21 01 +04
-1981-04-01 01 +05 1
-1981-09-30 23 +04
-\&...
-2014-10-26 01 +03
-2016-03-27 03 +04
-.in
-.if \n(.g .ft
-.sp
-.fi
-This time zone is east of UT, so its UT offsets are positive. Also,
-many of its time zone abbreviations are omitted since they duplicate
-the text of the UT offset.
-.SH LIMITATIONS
-Time discontinuities are found by sampling the results returned by
-.BR localtime (3)
-at twelve-hour intervals.
-This works in all real-world cases;
-one can construct artificial time zones for which this fails.
-.PP
-In the
-.B \*-v
-and
-.B \*-V
-output,
-.q "UT"
-denotes the value returned by
-.BR gmtime (3),
-which uses UTC for modern timestamps and some other UT flavor for
-timestamps that predate the introduction of UTC.
-No attempt is currently made to have the output use
-.q "UTC"
-for newer and
-.q "UT"
-for older timestamps, partly because the exact date of the
-introduction of UTC is problematic.
-.SH SEE ALSO
-.BR tzfile (5),
-.BR zic (8)
diff --git a/man8/zic.8 b/man8/zic.8
deleted file mode 100644
index c467efefe..000000000
--- a/man8/zic.8
+++ /dev/null
@@ -1,903 +0,0 @@
-.\" This file is in the public domain, so clarified as of
-.\" 2009-05-17 by Arthur David Olson.
-.TH zic 8 "" "Time Zone Database"
-.SH NAME
-zic \- timezone compiler
-.SH SYNOPSIS
-.B zic
-[
-.I option
-\&... ] [
-.I filename
-\&... ]
-.SH DESCRIPTION
-.ie '\(lq'' .ds lq \&"\"
-.el .ds lq \(lq\"
-.ie '\(rq'' .ds rq \&"\"
-.el .ds rq \(rq\"
-.de q
-\\$3\*(lq\\$1\*(rq\\$2
-..
-.ie '\(la'' .ds < <
-.el .ds < \(la
-.ie '\(ra'' .ds > >
-.el .ds > \(ra
-.ie \n(.g \{\
-. ds : \:
-. ds - \f(CR-\fP
-.\}
-.el \{\
-. ds :
-. ds - \-
-.\}
-.ds d " degrees
-.ds m " minutes
-.ds s " seconds
-.ds _ " \&
-.if t \{\
-. if \n(.g .if c \(de .if c \(fm .if c \(sd \{\
-. ds d \(de
-. ds m \(fm
-. ds s \(sd
-. ds _ \|
-. \}
-.\}
-The
-.B zic
-program reads text from the file(s) named on the command line
-and creates the timezone information format (TZif) files
-specified in this input.
-If a
-.I filename
-is
-.q "\*-" ,
-standard input is read.
-.SH OPTIONS
-.TP
-.B "\*-\*-version"
-Output version information and exit.
-.TP
-.B \*-\*-help
-Output short usage message and exit.
-.TP
-.BI "\*-b " bloat
-Output backward-compatibility data as specified by
-.IR bloat .
-If
-.I bloat
-is
-.BR fat ,
-generate additional data entries that work around potential bugs or
-incompatibilities in older software, such as software that mishandles
-the 64-bit generated data.
-If
-.I bloat
-is
-.BR slim ,
-keep the output files small; this can help check for the bugs
-and incompatibilities.
-The default is
-.BR slim ,
-as software that mishandles 64-bit data typically
-mishandles timestamps after the year 2038 anyway.
-Also see the
-.B \*-r
-option for another way to alter output size.
-.TP
-.BI "\*-d " directory
-Create time conversion information files in the named directory rather than
-in the standard directory named below.
-.TP
-.BI "\*-l " timezone
-Use
-.I timezone
-as local time.
-.B zic
-will act as if the input contained a link line of the form
-.sp
-.ti +.5i
-.ta \w'Link\0\0'u +\w'\fItimezone\fP\0\0'u
-Link \fItimezone\fP localtime
-.sp
-If
-.I timezone
-is
-.BR \*- ,
-any already-existing link is removed.
-.TP
-.BI "\*-L " leapsecondfilename
-Read leap second information from the file with the given name.
-If this option is not used,
-no leap second information appears in output files.
-.TP
-.BI "\*-p " timezone
-Use
-.IR timezone 's
-rules when handling nonstandard
-TZ strings like "EET\*-2EEST" that lack transition rules.
-.B zic
-will act as if the input contained a link line of the form
-.sp
-.ti +.5i
-Link \fItimezone\fP posixrules
-.sp
-Unless
-.I timezone is
-.q "\*-" ,
-this option is obsolete and poorly supported.
-Among other things it should not be used for timestamps after the year 2037,
-and it should not be combined with
-.B "\*-b slim"
-if
-.IR timezone 's
-transitions are at standard time or Universal Time (UT) instead of local time.
-.sp
-If
-.I timezone
-is
-.BR \*- ,
-any already-existing link is removed.
-.TP
-.BR "\*-r " "[\fB@\fP\fIlo\fP][\fB/@\fP\fIhi\fP]"
-Limit the applicability of output files
-to timestamps in the range from
-.I lo
-(inclusive) to
-.I hi
-(exclusive), where
-.I lo
-and
-.I hi
-are possibly signed decimal counts of seconds since the Epoch
-(1970-01-01 00:00:00 UTC).
-Omitted counts default to extreme values.
-The output files use UT offset 0 and abbreviation
-.q "\*-00"
-in place of the omitted timestamp data.
-For example,
-.q "zic \*-r @0"
-omits data intended for negative timestamps (i.e., before the Epoch), and
-.q "zic \*-r @0/@2147483648"
-outputs data intended only for nonnegative timestamps that fit into
-31-bit signed integers.
-On platforms with GNU
-.BR date ,
-.q "zic \*-r @$(date +%s)"
-omits data intended for past timestamps.
-Although this option typically reduces the output file's size,
-the size can increase due to the need to represent the timestamp range
-boundaries, particularly if
-.I hi
-causes a TZif file to contain explicit entries for
-.RI pre- hi
-transitions rather than concisely representing them
-with an extended POSIX TZ string.
-Also see the
-.B "\*-b slim"
-option for another way to shrink output size.
-.TP
-.BI "\*-R @" hi
-Generate redundant trailing explicit transitions for timestamps
-that occur less than
-.I hi
-seconds since the Epoch, even though the transitions could be
-more concisely represented via the extended POSIX TZ string.
-This option does not affect the represented timestamps.
-Although it accommodates nonstandard TZif readers
-that ignore the extended POSIX TZ string,
-it increases the size of the altered output files.
-.TP
-.BI "\*-t " file
-When creating local time information, put the configuration link in
-the named file rather than in the standard location.
-.TP
-.B \*-v
-Be more verbose, and complain about the following situations:
-.RS
-.PP
-The input specifies a link to a link,
-something not supported by some older parsers, including
-.B zic
-itself through release 2022e.
-.PP
-A year that appears in a data file is outside the range
-of representable years.
-.PP
-A time of 24:00 or more appears in the input.
-Pre-1998 versions of
-.B zic
-prohibit 24:00, and pre-2007 versions prohibit times greater than 24:00.
-.PP
-A rule goes past the start or end of the month.
-Pre-2004 versions of
-.B zic
-prohibit this.
-.PP
-A time zone abbreviation uses a
-.B %z
-format.
-Pre-2015 versions of
-.B zic
-do not support this.
-.PP
-A timestamp contains fractional seconds.
-Pre-2018 versions of
-.B zic
-do not support this.
-.PP
-The input contains abbreviations that are mishandled by pre-2018 versions of
-.B zic
-due to a longstanding coding bug.
-These abbreviations include
-.q L
-for
-.q Link ,
-.q mi
-for
-.q min ,
-.q Sa
-for
-.q Sat ,
-and
-.q Su
-for
-.q Sun .
-.PP
-The output file does not contain all the information about the
-long-term future of a timezone, because the future cannot be summarized as
-an extended POSIX TZ string. For example, as of 2023 this problem
-occurs for Morocco's daylight-saving rules, as these rules are based
-on predictions for when Ramadan will be observed, something that
-an extended POSIX TZ string cannot represent.
-.PP
-The output contains data that may not be handled properly by client
-code designed for older
-.B zic
-output formats. These compatibility issues affect only timestamps
-before 1970 or after the start of 2038.
-.PP
-The output contains a truncated leap second table,
-which can cause some older TZif readers to misbehave.
-This can occur if the
-.B "\*-L"
-option is used, and either an Expires line is present or
-the
-.B "\*-r"
-option is also used.
-.PP
-The output file contains more than 1200 transitions,
-which may be mishandled by some clients.
-The current reference client supports at most 2000 transitions;
-pre-2014 versions of the reference client support at most 1200
-transitions.
-.PP
-A time zone abbreviation has fewer than 3 or more than 6 characters.
-POSIX requires at least 3, and requires implementations to support
-at least 6.
-.PP
-An output file name contains a byte that is not an ASCII letter,
-.q "\*-" ,
-.q "/" ,
-or
-.q "_" ;
-or it contains a file name component that contains more than 14 bytes
-or that starts with
-.q "\*-" .
-.RE
-.SH FILES
-Input files use the format described in this section; output files use
-.BR tzfile (5)
-format.
-.PP
-Input files should be text files, that is, they should be a series of
-zero or more lines, each ending in a newline byte and containing at
-most 2048 bytes counting the newline, and without any NUL bytes.
-The input text's encoding
-is typically UTF-8 or ASCII; it should have a unibyte representation
-for the POSIX Portable Character Set (PPCS)
-\*<https://pubs\*:.opengroup\*:.org/\*:onlinepubs/\*:9699919799/\*:basedefs/\*:V1_chap06\*:.html\*>
-and the encoding's non-unibyte characters should consist entirely of
-non-PPCS bytes. Non-PPCS characters typically occur only in comments:
-although output file names and time zone abbreviations can contain
-nearly any character, other software will work better if these are
-limited to the restricted syntax described under the
-.B \*-v
-option.
-.PP
-Input lines are made up of fields.
-Fields are separated from one another by one or more white space characters.
-The white space characters are space, form feed, carriage return, newline,
-tab, and vertical tab.
-Leading and trailing white space on input lines is ignored.
-An unquoted sharp character (#) in the input introduces a comment which extends
-to the end of the line the sharp character appears on.
-White space characters and sharp characters may be enclosed in double quotes
-(") if they're to be used as part of a field.
-Any line that is blank (after comment stripping) is ignored.
-Nonblank lines are expected to be of one of three types:
-rule lines, zone lines, and link lines.
-.PP
-Names must be in English and are case insensitive.
-They appear in several contexts, and include month and weekday names
-and keywords such as
-.BR "maximum" ,
-.BR "only" ,
-.BR "Rolling" ,
-and
-.BR "Zone" .
-A name can be abbreviated by omitting all but an initial prefix; any
-abbreviation must be unambiguous in context.
-.PP
-A rule line has the form
-.nf
-.ti +.5i
-.ta \w'Rule\0\0'u +\w'NAME\0\0'u +\w'FROM\0\0'u +\w'1973\0\0'u +\w'\*-\0\0'u +\w'Apr\0\0'u +\w'lastSun\0\0'u +\w'2:00w\0\0'u +\w'1:00d\0\0'u
-.sp
-Rule NAME FROM TO \*- IN ON AT SAVE LETTER/S
-.sp
-For example:
-.ti +.5i
-.sp
-Rule US 1967 1973 \*- Apr lastSun 2:00w 1:00d D
-.sp
-.fi
-The fields that make up a rule line are:
-.TP "\w'LETTER/S'u"
-.B NAME
-Gives the name of the rule set that contains this line.
-The name must start with a character that is neither
-an ASCII digit nor
-.q \*-
-nor
-.q + .
-To allow for future extensions,
-an unquoted name should not contain characters from the set
-.ie \n(.g .q \f(CR!$%&\(aq()*,/:;<=>?@[\e]\(ha\(ga{|}\(ti\fP .
-.el .ie t .q \f(CW!$%&'()*,/:;<=>?@[\e]^\(ga{|}~\fP .
-.el .q !$%&'()*,/:;<=>?@[\e]^`{|}~ .
-.TP
-.B FROM
-Gives the first year in which the rule applies.
-Any signed integer year can be supplied; the proleptic Gregorian calendar
-is assumed, with year 0 preceding year 1.
-The word
-.B minimum
-(or an abbreviation) means the indefinite past.
-The word
-.B maximum
-(or an abbreviation) means the indefinite future.
-Rules can describe times that are not representable as time values,
-with the unrepresentable times ignored; this allows rules to be portable
-among hosts with differing time value types.
-.TP
-.B TO
-Gives the final year in which the rule applies.
-In addition to
-.B minimum
-and
-.B maximum
-(as above),
-the word
-.B only
-(or an abbreviation)
-may be used to repeat the value of the
-.B FROM
-field.
-.TP
-.B \*-
-Is a reserved field and should always contain
-.q \*-
-for compatibility with older versions of
-.BR zic .
-It was previously known as the
-.B TYPE
-field, which could contain values to allow a
-separate script to further restrict in which
-.q types
-of years the rule would apply.
-.TP
-.B IN
-Names the month in which the rule takes effect.
-Month names may be abbreviated.
-.TP
-.B ON
-Gives the day on which the rule takes effect.
-Recognized forms include:
-.nf
-.in +.5i
-.sp
-.ta \w'Sun<=25\0\0'u
-5 the fifth of the month
-lastSun the last Sunday in the month
-lastMon the last Monday in the month
-Sun>=8 first Sunday on or after the eighth
-Sun<=25 last Sunday on or before the 25th
-.fi
-.in -.5i
-.sp
-A weekday name (e.g.,
-.BR "Sunday" )
-or a weekday name preceded by
-.q "last"
-(e.g.,
-.BR "lastSunday" )
-may be abbreviated or spelled out in full.
-There must be no white space characters within the
-.B ON
-field.
-The
-.q <=
-and
-.q >=
-constructs can result in a day in the neighboring month;
-for example, the IN-ON combination
-.q "Oct Sun>=31"
-stands for the first Sunday on or after October 31,
-even if that Sunday occurs in November.
-.TP
-.B AT
-Gives the time of day at which the rule takes effect,
-relative to 00:00, the start of a calendar day.
-Recognized forms include:
-.nf
-.in +.5i
-.sp
-.ta \w'00:19:32.13\0\0'u
-2 time in hours
-2:00 time in hours and minutes
-01:28:14 time in hours, minutes, and seconds
-00:19:32.13 time with fractional seconds
-12:00 midday, 12 hours after 00:00
-15:00 3 PM, 15 hours after 00:00
-24:00 end of day, 24 hours after 00:00
-260:00 260 hours after 00:00
-\*-2:30 2.5 hours before 00:00
-\*- equivalent to 0
-.fi
-.in -.5i
-.sp
-Although
-.B zic
-rounds times to the nearest integer second
-(breaking ties to the even integer), the fractions may be useful
-to other applications requiring greater precision.
-The source format does not specify any maximum precision.
-Any of these forms may be followed by the letter
-.B w
-if the given time is local or
-.q "wall clock"
-time,
-.B s
-if the given time is standard time without any adjustment for daylight saving,
-or
-.B u
-(or
-.B g
-or
-.BR z )
-if the given time is universal time;
-in the absence of an indicator,
-local (wall clock) time is assumed.
-These forms ignore leap seconds; for example,
-if a leap second occurs at 00:59:60 local time,
-.q "1:00"
-stands for 3601 seconds after local midnight instead of the usual 3600 seconds.
-The intent is that a rule line describes the instants when a
-clock/calendar set to the type of time specified in the
-.B AT
-field would show the specified date and time of day.
-.TP
-.B SAVE
-Gives the amount of time to be added to local standard time when the rule is in
-effect, and whether the resulting time is standard or daylight saving.
-This field has the same format as the
-.B AT
-field
-except with a different set of suffix letters:
-.B s
-for standard time and
-.B d
-for daylight saving time.
-The suffix letter is typically omitted, and defaults to
-.B s
-if the offset is zero and to
-.B d
-otherwise.
-Negative offsets are allowed; in Ireland, for example, daylight saving
-time is observed in winter and has a negative offset relative to
-Irish Standard Time.
-The offset is merely added to standard time; for example,
-.B zic
-does not distinguish a 10:30 standard time plus an 0:30
-.B SAVE
-from a 10:00 standard time plus a 1:00
-.BR SAVE .
-.TP
-.B LETTER/S
-Gives the
-.q "variable part"
-(for example, the
-.q "S"
-or
-.q "D"
-in
-.q "EST"
-or
-.q "EDT" )
-of time zone abbreviations to be used when this rule is in effect.
-If this field is
-.q \*- ,
-the variable part is null.
-.PP
-A zone line has the form
-.sp
-.nf
-.ti +.5i
-.ta \w'Zone\0\0'u +\w'Asia/Amman\0\0'u +\w'STDOFF\0\0'u +\w'Jordan\0\0'u +\w'FORMAT\0\0'u
-Zone NAME STDOFF RULES FORMAT [UNTIL]
-.sp
-For example:
-.sp
-.ti +.5i
-Zone Asia/Amman 2:00 Jordan EE%sT 2017 Oct 27 01:00
-.sp
-.fi
-The fields that make up a zone line are:
-.TP "\w'STDOFF'u"
-.B NAME
-The name of the timezone.
-This is the name used in creating the time conversion information file for the
-timezone.
-It should not contain a file name component
-.q ".\&"
-or
-.q ".." ;
-a file name component is a maximal substring that does not contain
-.q "/" .
-.TP
-.B STDOFF
-The amount of time to add to UT to get standard time,
-without any adjustment for daylight saving.
-This field has the same format as the
-.B AT
-and
-.B SAVE
-fields of rule lines, except without suffix letters;
-begin the field with a minus sign if time must be subtracted from UT.
-.TP
-.B RULES
-The name of the rules that apply in the timezone or,
-alternatively, a field in the same format as a rule-line SAVE column,
-giving the amount of time to be added to local standard time
-and whether the resulting time is standard or daylight saving.
-If this field is
-.B \*-
-then standard time always applies.
-When an amount of time is given, only the sum of standard time and
-this amount matters.
-.TP
-.B FORMAT
-The format for time zone abbreviations.
-The pair of characters
-.B %s
-is used to show where the
-.q "variable part"
-of the time zone abbreviation goes.
-Alternatively, a format can use the pair of characters
-.B %z
-to stand for the UT offset in the form
-.RI \(+- hh ,
-.RI \(+- hhmm ,
-or
-.RI \(+- hhmmss ,
-using the shortest form that does not lose information, where
-.IR hh ,
-.IR mm ,
-and
-.I ss
-are the hours, minutes, and seconds east (+) or west (\-) of UT.
-Alternatively,
-a slash (/)
-separates standard and daylight abbreviations.
-To conform to POSIX, a time zone abbreviation should contain only
-alphanumeric ASCII characters,
-.q "+"
-and
-.q "\*-".
-By convention, the time zone abbreviation
-.q "\*-00"
-is a placeholder that means local time is unspecified.
-.TP
-.B UNTIL
-The time at which the UT offset or the rule(s) change for a location.
-It takes the form of one to four fields YEAR [MONTH [DAY [TIME]]].
-If this is specified,
-the time zone information is generated from the given UT offset
-and rule change until the time specified, which is interpreted using
-the rules in effect just before the transition.
-The month, day, and time of day have the same format as the IN, ON, and AT
-fields of a rule; trailing fields can be omitted, and default to the
-earliest possible value for the missing fields.
-.IP
-The next line must be a
-.q "continuation"
-line; this has the same form as a zone line except that the
-string
-.q "Zone"
-and the name are omitted, as the continuation line will
-place information starting at the time specified as the
-.q "until"
-information in the previous line in the file used by the previous line.
-Continuation lines may contain
-.q "until"
-information, just as zone lines do, indicating that the next line is a further
-continuation.
-.PP
-If a zone changes at the same instant that a rule would otherwise take
-effect in the earlier zone or continuation line, the rule is ignored.
-A zone or continuation line
-.I L
-with a named rule set starts with standard time by default:
-that is, any of
-.IR L 's
-timestamps preceding
-.IR L 's
-earliest rule use the rule in effect after
-.IR L 's
-first transition into standard time.
-In a single zone it is an error if two rules take effect at the same
-instant, or if two zone changes take effect at the same instant.
-.PP
-If a continuation line subtracts
-.I N
-seconds from the UT offset after a transition that would be
-interpreted to be later if using the continuation line's UT offset and
-rules, the
-.q "until"
-time of the previous zone or continuation line is interpreted
-according to the continuation line's UT offset and rules, and any rule
-that would otherwise take effect in the next
-.I N
-seconds is instead assumed to take effect simultaneously.
-For example:
-.br
-.ne 7
-.nf
-.in +2m
-.ta \w'# Rule\0\0'u +\w'NAME\0\0'u +\w'FROM\0\0'u +\w'2006\0\0'u +\w'\*-\0\0'u +\w'Oct\0\0'u +\w'lastSun\0\0'u +\w'2:00\0\0'u +\w'SAVE\0\0'u
-.sp
-# Rule NAME FROM TO \*- IN ON AT SAVE LETTER/S
-Rule US 1967 2006 - Oct lastSun 2:00 0 S
-Rule US 1967 1973 - Apr lastSun 2:00 1:00 D
-.ta \w'Zone\0\0America/Menominee\0\0'u +\w'STDOFF\0\0'u +\w'RULES\0\0'u +\w'FORMAT\0\0'u
-# Zone\0\0NAME STDOFF RULES FORMAT [UNTIL]
-Zone\0\0America/Menominee \*-5:00 \*- EST 1973 Apr 29 2:00
- \*-6:00 US C%sT
-.sp
-.in
-.fi
-Here, an incorrect reading would be there were two clock changes on 1973-04-29,
-the first from 02:00 EST (\*-05) to 01:00 CST (\*-06),
-and the second an hour later from 02:00 CST (\*-06) to 03:00 CDT (\*-05).
-However,
-.B zic
-interprets this more sensibly as a single transition from 02:00 CST (\*-05) to
-02:00 CDT (\*-05).
-.PP
-A link line has the form
-.sp
-.nf
-.ti +.5i
-.ta \w'Link\0\0'u +\w'Europe/Istanbul\0\0'u
-Link TARGET LINK-NAME
-.sp
-For example:
-.sp
-.ti +.5i
-Link Europe/Istanbul Asia/Istanbul
-.sp
-.fi
-The
-.B TARGET
-field should appear as the
-.B NAME
-field in some zone line or as the
-.B LINK-NAME
-field in some link line.
-The
-.B LINK-NAME
-field is used as an alternative name for that zone;
-it has the same syntax as a zone line's
-.B NAME
-field.
-Links can chain together, although the behavior is unspecified if a
-chain of one or more links does not terminate in a Zone name.
-A link line can appear before the line that defines the link target.
-For example:
-.sp
-.ne 3
-.nf
-.in +2m
-.ta \w'Zone\0\0'u +\w'Greenwich\0\0'u
-Link Greenwich G_M_T
-Link Etc/GMT Greenwich
-Zone Etc/GMT\0\00\0\0\*-\0\0GMT
-.sp
-.in
-.fi
-The two links are chained together, and G_M_T, Greenwich, and Etc/GMT
-all name the same zone.
-.PP
-Except for continuation lines,
-lines may appear in any order in the input.
-However, the behavior is unspecified if multiple zone or link lines
-define the same name.
-.PP
-The file that describes leap seconds can have leap lines and an
-expiration line.
-Leap lines have the following form:
-.nf
-.ti +.5i
-.ta \w'Leap\0\0'u +\w'YEAR\0\0'u +\w'MONTH\0\0'u +\w'DAY\0\0'u +\w'HH:MM:SS\0\0'u +\w'CORR\0\0'u
-.sp
-Leap YEAR MONTH DAY HH:MM:SS CORR R/S
-.sp
-For example:
-.ti +.5i
-.sp
-Leap 2016 Dec 31 23:59:60 + S
-.sp
-.fi
-The
-.BR YEAR ,
-.BR MONTH ,
-.BR DAY ,
-and
-.B HH:MM:SS
-fields tell when the leap second happened.
-The
-.B CORR
-field
-should be
-.q "+"
-if a second was added
-or
-.q "\*-"
-if a second was skipped.
-The
-.B R/S
-field
-should be (an abbreviation of)
-.q "Stationary"
-if the leap second time given by the other fields should be interpreted as UTC
-or
-(an abbreviation of)
-.q "Rolling"
-if the leap second time given by the other fields should be interpreted as
-local (wall clock) time.
-.PP
-Rolling leap seconds were implemented back when it was not
-clear whether common practice was rolling or stationary,
-with concerns that one would see
-Times Square ball drops where there'd be a
-.q "3... 2... 1... leap... Happy New Year"
-countdown, placing the leap second at
-midnight New York time rather than midnight UTC.
-However, this countdown style does not seem to have caught on,
-which means rolling leap seconds are not used in practice;
-also, they are not supported if the
-.B \*-r
-option is used.
-.PP
-The expiration line, if present, has the form:
-.nf
-.ti +.5i
-.ta \w'Expires\0\0'u +\w'YEAR\0\0'u +\w'MONTH\0\0'u +\w'DAY\0\0'u
-.sp
-Expires YEAR MONTH DAY HH:MM:SS
-.sp
-For example:
-.ti +.5i
-.sp
-Expires 2020 Dec 28 00:00:00
-.sp
-.fi
-The
-.BR YEAR ,
-.BR MONTH ,
-.BR DAY ,
-and
-.B HH:MM:SS
-fields give the expiration timestamp in UTC for the leap second table.
-.br
-.ne 22
-.SH "EXTENDED EXAMPLE"
-Here is an extended example of
-.B zic
-input, intended to illustrate many of its features.
-.nf
-.in +2m
-.ta \w'# Rule\0\0'u +\w'NAME\0\0'u +\w'FROM\0\0'u +\w'1973\0\0'u +\w'\*-\0\0'u +\w'Apr\0\0'u +\w'lastSun\0\0'u +\w'2:00\0\0'u +\w'SAVE\0\0'u
-.sp
-# Rule NAME FROM TO \*- IN ON AT SAVE LETTER/S
-Rule Swiss 1941 1942 \*- May Mon>=1 1:00 1:00 S
-Rule Swiss 1941 1942 \*- Oct Mon>=1 2:00 0 \*-
-.sp .5
-Rule EU 1977 1980 \*- Apr Sun>=1 1:00u 1:00 S
-Rule EU 1977 only \*- Sep lastSun 1:00u 0 \*-
-Rule EU 1978 only \*- Oct 1 1:00u 0 \*-
-Rule EU 1979 1995 \*- Sep lastSun 1:00u 0 \*-
-Rule EU 1981 max \*- Mar lastSun 1:00u 1:00 S
-Rule EU 1996 max \*- Oct lastSun 1:00u 0 \*-
-.sp
-.ta \w'# Zone\0\0'u +\w'Europe/Zurich\0\0'u +\w'0:29:45.50\0\0'u +\w'RULES\0\0'u +\w'FORMAT\0\0'u
-# Zone NAME STDOFF RULES FORMAT [UNTIL]
-Zone Europe/Zurich 0:34:08 \*- LMT 1853 Jul 16
- 0:29:45.50 \*- BMT 1894 Jun
- 1:00 Swiss CE%sT 1981
- 1:00 EU CE%sT
-.sp
-Link Europe/Zurich Europe/Vaduz
-.sp
-.in
-.fi
-In this example, the EU rules are for the European Union
-and for its predecessor organization, the European Communities.
-The timezone is named Europe/Zurich and it has the alias Europe/Vaduz.
-This example says that Zurich was 34 minutes and 8
-seconds east of UT until 1853-07-16 at 00:00, when the legal offset
-was changed to
-7\*d\*_26\*m\*_22.50\*s,
-which works out to 0:29:45.50;
-.B zic
-treats this by rounding it to 0:29:46.
-After 1894-06-01 at 00:00 the UT offset became one hour
-and Swiss daylight saving rules (defined with lines beginning with
-.q "Rule Swiss")
-apply. From 1981 to the present, EU daylight saving rules have
-applied, and the UTC offset has remained at one hour.
-.PP
-In 1941 and 1942, daylight saving time applied from the first Monday
-in May at 01:00 to the first Monday in October at 02:00.
-The pre-1981 EU daylight-saving rules have no effect
-here, but are included for completeness. Since 1981, daylight
-saving has begun on the last Sunday in March at 01:00 UTC.
-Until 1995 it ended the last Sunday in September at 01:00 UTC,
-but this changed to the last Sunday in October starting in 1996.
-.PP
-For purposes of display,
-.q "LMT"
-and
-.q "BMT"
-were initially used, respectively. Since
-Swiss rules and later EU rules were applied, the time zone abbreviation
-has been CET for standard time and CEST for daylight saving
-time.
-.SH FILES
-.TP
-.I /etc/localtime
-Default local timezone file.
-.TP
-.I /usr/share/zoneinfo
-Default timezone information directory.
-.SH NOTES
-For areas with more than two types of local time,
-you may need to use local standard time in the
-.B AT
-field of the earliest transition time's rule to ensure that
-the earliest transition time recorded in the compiled file is correct.
-.PP
-If,
-for a particular timezone,
-a clock advance caused by the start of daylight saving
-coincides with and is equal to
-a clock retreat caused by a change in UT offset,
-.B zic
-produces a single transition to daylight saving at the new UT offset
-without any change in local (wall clock) time.
-To get separate transitions
-use multiple zone continuation lines
-specifying transition instants using universal time.
-.SH SEE ALSO
-.BR tzfile (5),
-.BR zdump (8)